All files / blong-gogo/src loadBrowser.ts

88.11% Statements 89/101
43.47% Branches 10/23
37.5% Functions 6/16
88.11% Lines 89/101

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 1021x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x     1x 1x 1x                 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 6x 6x 6x 6x 6x 6x 1x 1x 1x 1x 1x 1x 1x 1x 117x 117x 117x 117x 117x 1x 42x 42x 42x 42x 42x 42x 1x 1x 42x 1x 1x   1x 1x 1x 1x   1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
import type {HRTime} from '@feasibleone/blong';
import merge from 'ut-function.merge';
import './globals.d.ts';
import load from './load.ts';
import timing from './timing.ts';
 
declare global {
    interface Performance {
        mozNow?: () => number;
        msNow?: () => number;
        oNow?: () => number;
        webkitNow?: () => number;
    }
}
 
const performance = globalThis.performance || {};
const performanceNow =
    performance.now ||
    performance.mozNow ||
    performance.msNow ||
    performance.oNow ||
    performance.webkitNow ||
    function () {
        return new Date().getTime();
    };

// generate timestamp or delta
// see http://nodejs.org/api/process.html#process_process_hrtime
function hrtime(previousTimestamp?: HRTime): HRTime {
    const clockTime = performanceNow.call(performance) * 1e-3;
    let seconds = Math.floor(clockTime);
    let nanoseconds = Math.floor((clockTime % 1) * 1e9);
    if (previousTimestamp) {
        seconds = seconds - previousTimestamp[0];
        nanoseconds = nanoseconds - previousTimestamp[1];
        if (nanoseconds < 0) {
            seconds--;
            nanoseconds += 1e9;
        }
    }
    return [seconds, nanoseconds];
}
 
const context = {
    platform: 'browser',
    suite: 'blong',
    host: window.location.host,
    user: 'anonymous',
};
 
export default load.bind(null, {
    platform: 'browser',
    loadConfig: async (baseConfig, config: string | object, loadedConfigs: object[]) => {
        if (typeof config === 'string') context.suite = config;
        return {
            loadedConfig: merge(
                {},
                baseConfig,
                ...loadedConfigs,
                typeof config === 'string' ? {suite: config} : config,
            ),
        };
    },
    readdir: async () => [],
    existsSync: () => false,
    scan: async () => [],
    createRequire: () => {
        throw new Error('createRequire is not supported in the browser');
    },
    join: (...parts: string[]) => parts.join('/'),
    basename: (path: string, ext?: string) => {
        const base = path.split('/').pop() || '';
        return ext ? base.replace(new RegExp(`${ext}$`), '') : base;
    },
    relative: (from: string, to: string) => {
        const fromParts = from.split('/').filter(Boolean);
        const toParts = to.split('/').filter(Boolean);
        while (fromParts.length && toParts.length && fromParts[0] === toParts[0]) {
            fromParts.shift();
            toParts.shift();
        }
        return [...Array(fromParts.length).fill('..'), ...toParts].join('/') || '.';
    },
    extname: (path: string) => {
        const base = path.split('/').pop() || '';
        const dotIndex = base.lastIndexOf('.');
        return dotIndex !== -1 ? base.slice(dotIndex) : '';
    },
    dirname: (path: string) => path.split('/').slice(0, -1).join('/'),
    resolve: (...paths: string[]) => paths.join('/'),
    readFileSync: () => {
        throw new Error('readFileSync is not supported in the browser');
    },
    writeFileSync: () => {
        throw new Error('writeFileSync is not supported in the browser');
    },
    statSync: (() => undefined) as unknown as import('node:fs').StatSyncFn,
    timing: timing(hrtime),
    configs: ['browser'],
    context,
});