UNPKG

alistair

Version:
130 lines (123 loc) 3.63 kB
'use strict'; var c = require('colorette'); var util = require('util'); function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n.default = e; return Object.freeze(n); } var c__namespace = /*#__PURE__*/_interopNamespace(c); // Copyright 2026 Alistair Smith https://github.com/alii/alistair var widestPrefix = 9; var widestPrefixAsIndent = " ".repeat(widestPrefix); function logger({ backend = console, indentString = widestPrefixAsIndent } = {}) { let indentLevel = 0; const getIntentText = (lastChar) => { let result = ""; for (let i = 0; i < indentLevel; i++) { const isLast = i === indentLevel - 1; if (isLast && lastChar) { result += indentString + lastChar; } else { result += indentString + "\u2502 "; } } return c__namespace.gray(result); }; function make(level, prefix) { return (...args) => { const indent = getIntentText(); const resultArgs = []; for (let i = 0; i < args.length; i++) { const arg = args[i]; if (typeof arg === "string") { resultArgs.push(arg); continue; } const inspected = util.inspect(arg, { colors: c__namespace.isColorSupported, depth: 10 }); const isError = arg instanceof Error; if (isError) { const colored = inspected.split("\n").map((line, index) => { if (index === 0) { return line; } return c__namespace.gray(line.trim()); }).join("\n"); resultArgs.push(colored); } else { resultArgs.push(inspected); } } const string = resultArgs.join(" "); let result = []; const split = string.split("\n"); for (let i = 0; i < split.length; i++) { const line = split[i]; if (i === 0) { result.push(indent + " " + prefix + " " + line); } else { result.push(indent + " " + widestPrefixAsIndent + " " + line); } } backend[level](result.join("\n")); }; } return { indent: (fn) => { indentLevel += 1; backend.info(getIntentText("\u250C\u2500")); fn(); backend.info(getIntentText("\u2514\u2500")); indentLevel -= 1; }, /** * Print an info message */ info: make("info", c__namespace.blue("info".padStart(widestPrefix))), /** * Print a success message */ success: make("info", c__namespace.greenBright("success".padStart(widestPrefix))), /** * Print a listening message */ listening: make("info", c__namespace.cyan("listening".padStart(widestPrefix))), /** * Print a debug message */ debug: make("debug", c__namespace.cyan(c__namespace.bold("debug".padStart(widestPrefix)))), /** * Print a fatal message */ fatal: make("error", c__namespace.red(c__namespace.bold("fatal".padStart(widestPrefix)))), /** * Print an error message */ error: make("error", c__namespace.red(c__namespace.bold("error".padStart(widestPrefix)))), /** * Print a warning message */ warn: make("warn", c__namespace.yellow(c__namespace.bold("warn".padStart(widestPrefix)))) }; } var log = logger(); exports.log = log; exports.logger = logger;