UNPKG

@mintlify/previewing

Version:

Preview Mintlify docs locally

63 lines (62 loc) 1.95 kB
import { createElement } from 'react'; import { addLog, removeLog, replaceLog } from '../logging-state.js'; import { InfoLog } from '../logs.js'; // steps faster than this are not worth reading about const MIN_LOGGED_DURATION_MS = 100; const isDevTimingEnabled = () => process.env.DEV_TIMING === 'true'; const getElapsedMs = (startTime) => { return Number((process.hrtime.bigint() - startTime) / 1000000n); }; const formatDuration = (durationMs) => { return durationMs < 1000 ? `${durationMs}ms` : `${(durationMs / 1000).toFixed(1)}s`; }; export const addDevTimingLog = (message, detail) => { if (!isDevTimingEnabled()) { return; } addLog(createElement(InfoLog, { message, detail })); }; export const startDevTiming = (label) => { if (!isDevTimingEnabled()) { return () => { }; } const startTime = process.hrtime.bigint(); const pendingLog = createElement(InfoLog, { message: label, detail: '...' }); addLog(pendingLog); return (status) => { const durationMs = getElapsedMs(startTime); if (!status && durationMs < MIN_LOGGED_DURATION_MS) { removeLog(pendingLog); return; } const finishedLog = createElement(InfoLog, { message: `${label}${status ? ` ${status}` : ''}`, detail: `in ${formatDuration(durationMs)}`, }); replaceLog(pendingLog, finishedLog); }; }; export const timeDev = async (label, callback) => { const finish = startDevTiming(label); try { const result = await callback(); finish(); return result; } catch (error) { finish('failed'); throw error; } }; export const timeDevSync = (label, callback) => { const finish = startDevTiming(label); try { const result = callback(); finish(); return result; } catch (error) { finish('failed'); throw error; } };