UNPKG

@visulima/pail

Version:

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

163 lines (160 loc) 5.76 kB
import colorize, { grey, white, underline, bold } from '@visulima/colorize/browser'; import { format } from '@visulima/fmt'; import { E as EMPTY_SYMBOL } from './constants-BYYZ5WNW.mjs'; import { A as AbstractPrettyReporter, g as getLongestBadge } from './abstract-pretty-reporter-izJgxoMv.mjs'; import { g as getLongestLabel } from './get-longest-label-CM8kLFWH.mjs'; import { w as writeConsoleLogBasedOnLevel } from './write-console-log-Tptfzg9D.mjs'; var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); class PrettyReporter extends 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 = 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[color] : white; const items = []; if (isNotBrowser && groups.length > 0) { const groupSpaces = groups.map(() => " ").join(""); const cGroup = grey("[" + groups.at(-1) + "]"); items.push(format(groupSpaces + cGroup[0], cGroup.slice(1))); } if (date) { const cDate = grey(this._styles.dateFormatter(typeof date === "string" ? new Date(date) : date)); if (isNotBrowser) { items.push(format(cDate[0], cDate.slice(1))); } else { items.push([cDate[0] + " ", ...cDate.slice(1)]); } } if (badge) { const cBadge = colorized(badge); if (isNotBrowser) { items.push(format(cBadge[0], cBadge.slice(1))); } else { items.push([cBadge[0] + " ", ...cBadge.slice(1)]); } } else { const longestBadge = getLongestBadge(this._loggerTypes); if (longestBadge.length > 0) { const cBadgePlaceholder = grey(".".repeat(longestBadge.length)); if (isNotBrowser) { items.push(format(cBadgePlaceholder[0] + " ", cBadgePlaceholder.slice(1))); } else { items.push([cBadgePlaceholder[0] + " ", ...cBadgePlaceholder.slice(1)]); } } } const longestLabel = getLongestLabel(this._loggerTypes); let repeatedMessage; if (repeated) { const cRepeated = white("[" + repeated + "x]"); repeatedMessage = isNotBrowser ? format(cRepeated[0], cRepeated.slice(1)) : [cRepeated[0], ...cRepeated.slice(1)]; } if (label) { const cLabel = colorized(this._formatLabel(label)); if (isNotBrowser) { items.push(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 = grey(".".repeat(lengthDiff)); if (isNotBrowser) { items.push(format(cLabelSpacer[0], cLabelSpacer.slice(1))); } else { items.push([" " + cLabelSpacer[0], ...cLabelSpacer.slice(1)]); } } } else { const cSpacer = grey(".".repeat(longestLabel.length + 1)); if (isNotBrowser) { items.push(format(cSpacer[0], cSpacer.slice(1))); } else { items.push([cSpacer[0], ...cSpacer.slice(1)]); } } if (Array.isArray(scope) && scope.length > 0) { const cScope = grey("[" + scope.join(" > ") + "]"); if (isNotBrowser) { items.push(format(cScope[0], cScope.slice(1))); } else { items.push([cScope[0], ...cScope.slice(1)]); } } if (prefix) { const cPrefix = grey( (Array.isArray(scope) && scope.length > 0 ? ". " : " ") + "[" + (this._styles.underline.prefix ? underline(prefix) : prefix) + "] " ); if (isNotBrowser) { items.push(format(cPrefix[0], cPrefix.slice(1))); } else { items.push([cPrefix[0], ...cPrefix.slice(1)]); } } if (message !== EMPTY_SYMBOL) { items.push(message); } if (context) { items.push(...context); } if (error) { items.push(error, "\n\n"); } if (suffix) { const cSuffix = grey(this._styles.underline.suffix ? underline(suffix) : suffix); if (isNotBrowser) { items.push(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 ? underline(formattedLabel) : formattedLabel; if (this._styles.bold.label) { formattedLabel = bold(formattedLabel); } return formattedLabel; } } export { PrettyReporter as default };