172 lines
4.1 KiB
Plaintext
172 lines
4.1 KiB
Plaintext
import { blue, bold, dim, red, yellow } from "kleur/colors";
|
|
import stringWidth from "string-width";
|
|
const dateTimeFormat = new Intl.DateTimeFormat([], {
|
|
hour: "2-digit",
|
|
minute: "2-digit",
|
|
second: "2-digit",
|
|
hour12: false
|
|
});
|
|
const levels = {
|
|
debug: 20,
|
|
info: 30,
|
|
warn: 40,
|
|
error: 50,
|
|
silent: 90
|
|
};
|
|
function log(opts, level, label, message, newLine = true) {
|
|
const logLevel = opts.level;
|
|
const dest = opts.dest;
|
|
const event = {
|
|
label,
|
|
level,
|
|
message,
|
|
newLine
|
|
};
|
|
if (!isLogLevelEnabled(logLevel, level)) {
|
|
return;
|
|
}
|
|
dest.write(event);
|
|
}
|
|
function isLogLevelEnabled(configuredLogLevel, level) {
|
|
return levels[configuredLogLevel] <= levels[level];
|
|
}
|
|
function info(opts, label, message, newLine = true) {
|
|
return log(opts, "info", label, message, newLine);
|
|
}
|
|
function warn(opts, label, message, newLine = true) {
|
|
return log(opts, "warn", label, message, newLine);
|
|
}
|
|
function error(opts, label, message, newLine = true) {
|
|
return log(opts, "error", label, message, newLine);
|
|
}
|
|
function table(opts, columns) {
|
|
return function logTable(logFn, ...input) {
|
|
const message = columns.map((len, i) => padStr(input[i].toString(), len)).join(" ");
|
|
logFn(opts, null, message);
|
|
};
|
|
}
|
|
function debug(...args) {
|
|
if ("_astroGlobalDebug" in globalThis) {
|
|
globalThis._astroGlobalDebug(...args);
|
|
}
|
|
}
|
|
function padStr(str, len) {
|
|
const strLen = stringWidth(str);
|
|
if (strLen > len) {
|
|
return str.substring(0, len - 3) + "...";
|
|
}
|
|
const spaces = Array.from({ length: len - strLen }, () => " ").join("");
|
|
return str + spaces;
|
|
}
|
|
function getEventPrefix({ level, label }) {
|
|
const timestamp = `${dateTimeFormat.format(/* @__PURE__ */ new Date())}`;
|
|
const prefix = [];
|
|
if (level === "error" || level === "warn") {
|
|
prefix.push(bold(timestamp));
|
|
prefix.push(`[${level.toUpperCase()}]`);
|
|
} else {
|
|
prefix.push(timestamp);
|
|
}
|
|
if (label) {
|
|
prefix.push(`[${label}]`);
|
|
}
|
|
if (level === "error") {
|
|
return red(prefix.join(" "));
|
|
}
|
|
if (level === "warn") {
|
|
return yellow(prefix.join(" "));
|
|
}
|
|
if (prefix.length === 1) {
|
|
return dim(prefix[0]);
|
|
}
|
|
return dim(prefix[0]) + " " + blue(prefix.splice(1).join(" "));
|
|
}
|
|
let defaultLogLevel;
|
|
if (typeof process !== "undefined") {
|
|
let proc = process;
|
|
if ("argv" in proc && Array.isArray(proc.argv)) {
|
|
if (proc.argv.includes("--verbose")) {
|
|
defaultLogLevel = "debug";
|
|
} else if (proc.argv.includes("--silent")) {
|
|
defaultLogLevel = "silent";
|
|
} else {
|
|
defaultLogLevel = "info";
|
|
}
|
|
} else {
|
|
defaultLogLevel = "info";
|
|
}
|
|
} else {
|
|
defaultLogLevel = "info";
|
|
}
|
|
function timerMessage(message, startTime = Date.now()) {
|
|
let timeDiff = Date.now() - startTime;
|
|
let timeDisplay = timeDiff < 750 ? `${Math.round(timeDiff)}ms` : `${(timeDiff / 1e3).toFixed(1)}s`;
|
|
return `${message} ${dim(timeDisplay)}`;
|
|
}
|
|
class Logger {
|
|
options;
|
|
constructor(options) {
|
|
this.options = options;
|
|
}
|
|
info(label, message, newLine = true) {
|
|
info(this.options, label, message, newLine);
|
|
}
|
|
warn(label, message, newLine = true) {
|
|
warn(this.options, label, message, newLine);
|
|
}
|
|
error(label, message, newLine = true) {
|
|
error(this.options, label, message, newLine);
|
|
}
|
|
debug(label, ...messages) {
|
|
debug(label, ...messages);
|
|
}
|
|
level() {
|
|
return this.options.level;
|
|
}
|
|
forkIntegrationLogger(label) {
|
|
return new AstroIntegrationLogger(this.options, label);
|
|
}
|
|
}
|
|
class AstroIntegrationLogger {
|
|
options;
|
|
label;
|
|
constructor(logging, label) {
|
|
this.options = logging;
|
|
this.label = label;
|
|
}
|
|
/**
|
|
* Creates a new logger instance with a new label, but the same log options.
|
|
*/
|
|
fork(label) {
|
|
return new AstroIntegrationLogger(this.options, label);
|
|
}
|
|
info(message) {
|
|
info(this.options, this.label, message);
|
|
}
|
|
warn(message) {
|
|
warn(this.options, this.label, message);
|
|
}
|
|
error(message) {
|
|
error(this.options, this.label, message);
|
|
}
|
|
debug(message) {
|
|
debug(this.label, message);
|
|
}
|
|
}
|
|
export {
|
|
AstroIntegrationLogger,
|
|
Logger,
|
|
dateTimeFormat,
|
|
debug,
|
|
defaultLogLevel,
|
|
error,
|
|
getEventPrefix,
|
|
info,
|
|
isLogLevelEnabled,
|
|
levels,
|
|
log,
|
|
table,
|
|
timerMessage,
|
|
warn
|
|
};
|