UNPKG

@lunora/cli

Version:

The Lunora CLI: init, dev, deploy, codegen, run, reset, and migrate commands

106 lines (103 loc) 2.77 kB
import { STEP_BADGE_NAMES, LunoraReporter } from '@lunora/config'; import { JsonReporter } from '@visulima/pail/reporter/json'; import { createPail } from '@visulima/pail/server'; let sharedPail; let jsonForced = false; let configuredReporters; const wantJson = () => { if (jsonForced) { return true; } const flag = process.env.LUNORA_LOG_JSON; return flag === "1" || flag === "true"; }; const constructReporter = (Reporter) => new Reporter(); const buildReporters = () => { if (jsonForced) { return [constructReporter(JsonReporter)]; } if (configuredReporters !== void 0 && configuredReporters.length > 0) { return configuredReporters; } return [constructReporter(wantJson() ? JsonReporter : LunoraReporter)]; }; const forceJsonLogging = () => { if (jsonForced) { return; } jsonForced = true; sharedPail = void 0; }; const logHandlers = { compose: (...reporters) => reporters, console: () => constructReporter(LunoraReporter), json: () => constructReporter(JsonReporter) }; const configureLogHandlers = (reporters) => { configuredReporters = Array.isArray(reporters) ? reporters : [reporters]; sharedPail = void 0; }; const STEP_LOG_TYPES = Object.fromEntries(STEP_BADGE_NAMES.map((name) => [name, { label: name, logLevel: "informational" }])); const getPail = () => { sharedPail ??= createPail({ reporters: buildReporters(), scope: ["lunora"], stderr: process.stderr, stdout: process.stdout, types: STEP_LOG_TYPES }); return sharedPail; }; const createLogger = () => { return { debug: (message) => { getPail().debug(message); }, error: (message) => { getPail().error(message); }, info: (message) => { getPail().info(message); }, success: (message) => { getPail().success(message); }, warn: (message) => { getPail().warn(message); } }; }; const createStderrLogger = () => { const write = (tag, message) => { process.stderr.write(`${tag} ${message} `); }; return { debug: (message) => { write("debug", message); }, error: (message) => { write("error", message); }, info: (message) => { write("info ", message); }, success: (message) => { write("ok ", message); }, warn: (message) => { write("warn ", message); } }; }; const pail = /* @__PURE__ */ new Proxy({}, { get(_target, property) { const instance = getPail(); const value = instance[property]; return typeof value === "function" ? value.bind(instance) : value; } }); const logStep = (type, message) => { getPail()[type](message); }; export { configureLogHandlers, createLogger, createStderrLogger, forceJsonLogging, getPail, logHandlers, logStep, pail };