UNPKG

@visulima/pail

Version:

Highly configurable Logger for Node.js, Edge and Browser.

169 lines (163 loc) 6.13 kB
'use strict'; 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;