UNPKG

alinea

Version:

[![npm](https://img.shields.io/npm/v/alinea.svg)](https://npmjs.org/package/alinea) [![install size](https://packagephobia.com/badge?p=alinea)](https://packagephobia.com/result?p=alinea)

95 lines (93 loc) 2.41 kB
import { prettyMilliseconds } from "../../chunks/chunk-7YXWNKGS.js"; import "../../chunks/chunk-U5RRZUYZ.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.log(`${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.log(...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.log(`> ${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 };