renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
96 lines (95 loc) • 2.99 kB
JavaScript
import { regEx } from "../util/regex.js";
import * as util$1 from "node:util";
import { isNonEmptyObject, isPlainObject, isString } from "@sindresorhus/is";
import { Writable } from "node:stream";
import stringify from "json-stringify-pretty-compact";
//#region lib/logger/pretty-stdout.ts
const bunyanFields = [
"name",
"hostname",
"pid",
"level",
"v",
"time",
"msg",
"start_time"
];
const metaFields = [
"repository",
"baseBranch",
"packageFile",
"depType",
"dependency",
"dependencies",
"branch"
];
const levels = {
10: "TRACE",
20: "DEBUG",
30: " INFO",
40: " WARN",
50: "ERROR",
60: "FATAL"
};
const colorizedLevels = {
10: util$1.styleText("gray", "TRACE"),
20: util$1.styleText("blue", "DEBUG"),
30: util$1.styleText("green", " INFO"),
40: util$1.styleText("magenta", " WARN"),
50: util$1.styleText("red", "ERROR"),
60: util$1.styleText("bgRed", "FATAL")
};
function indent(str, leading = false) {
return (leading ? " " : "") + str.split(regEx(/\r?\n/)).join("\n ");
}
function getMeta(rec, colorize = true) {
if (!rec) return "";
let res = rec.module ? ` [${rec.module}]` : ``;
const filteredMeta = metaFields.filter((elem) => rec[elem]);
if (!filteredMeta.length) return res;
res = ` (${filteredMeta.map((field) => `${field}=${String(rec[field])}`).join(", ")})${res}`;
return colorize ? util$1.styleText("gray", res) : res;
}
function getDetails(rec) {
if (!rec) return "";
const recFiltered = { ...rec };
delete recFiltered.module;
Object.keys(recFiltered).forEach((key) => {
if (key === "logContext" || bunyanFields.includes(key) || metaFields.includes(key)) delete recFiltered[key];
});
const remainingKeys = Object.keys(recFiltered);
if (remainingKeys.length === 0) return "";
const err = recFiltered.err;
if (isPlainObject(err) && isString(err.stack)) {
const { stack, ...errRest } = err;
recFiltered.err = isNonEmptyObject(errRest) ? errRest : void 0;
const parts = [];
for (const key of remainingKeys) {
if (key === "err" && recFiltered.err === void 0) continue;
parts.push(indent(`"${key}": ${stringify(recFiltered[key])}`, true));
}
const jsonPart = parts.join(",\n");
const stackPart = indent(stack, true);
return jsonPart ? `${jsonPart}\n${stackPart}\n` : `${stackPart}\n`;
}
return `${remainingKeys.map((key) => `${indent(`"${key}": ${stringify(recFiltered[key])}`, true)}`).join(",\n")}\n`;
}
function formatRecord(rec, colorize = true) {
const level = colorize ? colorizedLevels[rec.level] : levels[rec.level];
const msg = `${indent(rec.msg)}`;
const meta = getMeta(rec, colorize);
const details = getDetails(rec);
return util$1.format("%s: %s%s\n%s", level, msg, meta, details);
}
var PrettyStdoutStream = class extends Writable {
constructor() {
super({ objectMode: true });
}
_write(data, _encoding, callback) {
process.stdout.write(formatRecord(data));
callback();
}
};
//#endregion
export { PrettyStdoutStream, formatRecord };
//# sourceMappingURL=pretty-stdout.js.map