@mintlify/previewing
Version:
Preview Mintlify docs locally
63 lines (62 loc) • 1.95 kB
JavaScript
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;
}
};