everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
47 lines (46 loc) • 1.57 kB
JavaScript
//#region src/cli/timing.ts
const PHASE_LABELS = {
"parent config": "Fetching parent config...",
"template source": "Resolving template source...",
"scaffold project": "Creating project scaffold...",
"copy files": "Copying template files...",
"personalize config": "Personalizing config...",
"write snapshot": "Writing snapshot...",
"resolve config": "Resolving config...",
"generate env/docker": "Generating environment config...",
"create env file": "Creating .env file...",
"install dependencies": "Installing dependencies...",
"generate types": "Generating types...",
"generate migrations": "Generating database migrations...",
"generate code artifacts": "Generating code artifacts...",
"docker compose up": "Starting Docker services..."
};
function phaseLabel(name) {
return PHASE_LABELS[name] ?? name;
}
async function timePhase(timings, name, fn, spinner) {
spinner?.message(phaseLabel(name));
const startedAt = Date.now();
try {
return await fn();
} finally {
timings.push({
name,
durationMs: Date.now() - startedAt
});
}
}
function sumPhaseDurations(timings) {
return timings.reduce((total, timing) => total + timing.durationMs, 0);
}
function formatDuration(durationMs) {
if (durationMs < 1e3) return `${durationMs}ms`;
if (durationMs < 6e4) {
const seconds = durationMs / 1e3;
return `${seconds.toFixed(seconds >= 10 ? 0 : 1)}s`;
}
return `${Math.floor(durationMs / 6e4)}m ${Math.round(durationMs % 6e4 / 1e3)}s`;
}
//#endregion
export { formatDuration, sumPhaseDurations, timePhase };
//# sourceMappingURL=timing.mjs.map