UNPKG

alinea

Version:
90 lines (88 loc) 2.37 kB
import { prettyMilliseconds } from "../../chunks/chunk-4LUHJRX4.js"; import "../../chunks/chunk-NZLE2WMY.js"; // src/core/util/Logger.ts var consoleLog = console.log.bind(console); var output = typeof process !== "undefined" && process.stdout?.write.bind(process.stdout) || consoleLog; var isConsole = output === consoleLog; function now() { return typeof performance !== "undefined" ? performance.now() : Date.now(); } var Report; ((Report2) => { function toConsole(report, prefix = "") { if (prefix && !isConsole) output(prefix); console.info(`${report.name} in ${prettyMilliseconds(report.duration)}`); for (const log of report.logs) { if ("name" in log) toConsole(log, `${" ".repeat(prefix.length)}\u2514 `); else { if (prefix && !isConsole) output(prefix); console.info(...log.args); } } } Report2.toConsole = toConsole; function toServerTiming(report, index = 0) { const res = [`t${index};desc="${report.name}";dur=${report.duration}`]; for (const log of report.logs) { if ("name" in log) res.push(toServerTiming(log, ++index)); } return res.join(","); } Report2.toServerTiming = toServerTiming; })(Report || (Report = {})); function durationSince(time) { return now() - time; } var Logger = class _Logger { constructor(name) { this.name = name; } logs = []; started = now(); operations = []; startProgress = void 0; time(name, justTime = false) { const op = new _Logger(name); if (!justTime) this.progress(name); return () => { this.logs.push(op.report()); }; } log(...args) { this.logs.push({ args, time: now() }); } progress(message) { if (!this.startProgress) { this.startProgress = now(); } output(`> ${message} \r`); } summary(message) { if (this.startProgress) { const duration = durationSince(this.startProgress); output(`> ${message} in ${prettyMilliseconds(duration)} `); this.startProgress = void 0; } else { console.info(`> ${message}`); } } result(result) { return result.then((result2) => ({ result: result2, logger: this })); } report() { const current = now(); const duration = current - this.started; return { name: this.name, duration, logs: this.logs }; } }; export { Logger, Report };