alinea
Version:
Headless git-based CMS
90 lines (88 loc) • 2.37 kB
JavaScript
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
};