@visulima/pail
Version:
Highly configurable Logger for Node.js, Edge and Browser.
169 lines (163 loc) • 6.13 kB
JavaScript
;
const colorize = require('@visulima/colorize/browser');
const fmt = require('@visulima/fmt');
const constants = require('./constants-DHfYGxxG.cjs');
const abstractPrettyReporter = require('./abstract-pretty-reporter-BR_6_JVa.cjs');
const getLongestLabel = require('./get-longest-label-CQ7lRhgD.cjs');
const writeConsoleLog = require('./write-console-log-Cu0-IDN-.cjs');
const _interopDefaultCompat = e => e && typeof e === 'object' && 'default' in e ? e.default : e;
const colorize__default = /*#__PURE__*/_interopDefaultCompat(colorize);
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
class PrettyReporter extends abstractPrettyReporter.AbstractPrettyReporter {
static {
__name(this, "PrettyReporter");
}
constructor(options = {}) {
super({
uppercase: {
label: true,
...options.uppercase
},
...options
});
}
// eslint-disable-next-line sonarjs/cognitive-complexity
log(meta) {
const isNotBrowser = typeof window !== "undefined" && typeof window.document !== "undefined";
const consoleLogFunction = writeConsoleLog.writeConsoleLogBasedOnLevel(meta.type.level);
const { badge, context, date, error, groups, label, message, prefix, repeated, scope, suffix, type } = meta;
const { color } = this._loggerTypes[type.name];
const colorized = color ? colorize__default[color] : colorize.white;
const items = [];
if (isNotBrowser && groups.length > 0) {
const groupSpaces = groups.map(() => " ").join("");
const cGroup = colorize.grey("[" + groups.at(-1) + "]");
items.push(fmt.format(groupSpaces + cGroup[0], cGroup.slice(1)));
}
if (date) {
const cDate = colorize.grey(this._styles.dateFormatter(typeof date === "string" ? new Date(date) : date));
if (isNotBrowser) {
items.push(fmt.format(cDate[0], cDate.slice(1)));
} else {
items.push([cDate[0] + " ", ...cDate.slice(1)]);
}
}
if (badge) {
const cBadge = colorized(badge);
if (isNotBrowser) {
items.push(fmt.format(cBadge[0], cBadge.slice(1)));
} else {
items.push([cBadge[0] + " ", ...cBadge.slice(1)]);
}
} else {
const longestBadge = abstractPrettyReporter.getLongestBadge(this._loggerTypes);
if (longestBadge.length > 0) {
const cBadgePlaceholder = colorize.grey(".".repeat(longestBadge.length));
if (isNotBrowser) {
items.push(fmt.format(cBadgePlaceholder[0] + " ", cBadgePlaceholder.slice(1)));
} else {
items.push([cBadgePlaceholder[0] + " ", ...cBadgePlaceholder.slice(1)]);
}
}
}
const longestLabel = getLongestLabel.getLongestLabel(this._loggerTypes);
let repeatedMessage;
if (repeated) {
const cRepeated = colorize.white("[" + repeated + "x]");
repeatedMessage = isNotBrowser ? fmt.format(cRepeated[0], cRepeated.slice(1)) : [cRepeated[0], ...cRepeated.slice(1)];
}
if (label) {
const cLabel = colorized(this._formatLabel(label));
if (isNotBrowser) {
items.push(fmt.format(cLabel[0], cLabel.slice(1)));
} else {
items.push([cLabel[0], ...cLabel.slice(1)]);
}
if (repeatedMessage) {
items.push(repeatedMessage);
}
let lengthDiff = longestLabel.length - label.length;
if (repeated) {
lengthDiff -= String(repeated).length + 3;
} else {
lengthDiff += 1;
}
if (lengthDiff > 0) {
const cLabelSpacer = colorize.grey(".".repeat(lengthDiff));
if (isNotBrowser) {
items.push(fmt.format(cLabelSpacer[0], cLabelSpacer.slice(1)));
} else {
items.push([" " + cLabelSpacer[0], ...cLabelSpacer.slice(1)]);
}
}
} else {
const cSpacer = colorize.grey(".".repeat(longestLabel.length + 1));
if (isNotBrowser) {
items.push(fmt.format(cSpacer[0], cSpacer.slice(1)));
} else {
items.push([cSpacer[0], ...cSpacer.slice(1)]);
}
}
if (Array.isArray(scope) && scope.length > 0) {
const cScope = colorize.grey("[" + scope.join(" > ") + "]");
if (isNotBrowser) {
items.push(fmt.format(cScope[0], cScope.slice(1)));
} else {
items.push([cScope[0], ...cScope.slice(1)]);
}
}
if (prefix) {
const cPrefix = colorize.grey(
(Array.isArray(scope) && scope.length > 0 ? ". " : " ") + "[" + (this._styles.underline.prefix ? colorize.underline(prefix) : prefix) + "] "
);
if (isNotBrowser) {
items.push(fmt.format(cPrefix[0], cPrefix.slice(1)));
} else {
items.push([cPrefix[0], ...cPrefix.slice(1)]);
}
}
if (message !== constants.EMPTY_SYMBOL) {
items.push(message);
}
if (context) {
items.push(...context);
}
if (error) {
items.push(error, "\n\n");
}
if (suffix) {
const cSuffix = colorize.grey(this._styles.underline.suffix ? colorize.underline(suffix) : suffix);
if (isNotBrowser) {
items.push(fmt.format("\n" + cSuffix[0], cSuffix.slice(1)));
} else {
items.push(["\n" + cSuffix[0], ...cSuffix.slice(1)]);
}
}
if (isNotBrowser) {
consoleLogFunction(...items);
} else {
let logMessage = "";
const css = [];
const arguments_ = [];
for (const value of items) {
if (Array.isArray(value) && value.length > 1 && value[0].includes("%c")) {
logMessage += value[0];
css.push(...value.slice(1));
} else {
arguments_.push(value);
}
}
consoleLogFunction(logMessage + "%c", ...css, "", ...arguments_);
}
}
_formatLabel(label) {
let formattedLabel = this._styles.uppercase.label ? label.toUpperCase() : label;
formattedLabel = this._styles.underline.label ? colorize.underline(formattedLabel) : formattedLabel;
if (this._styles.bold.label) {
formattedLabel = colorize.bold(formattedLabel);
}
return formattedLabel;
}
}
module.exports = PrettyReporter;