@lunora/cli
Version:
The Lunora CLI: init, dev, deploy, codegen, run, reset, and migrate commands
106 lines (103 loc) • 2.77 kB
JavaScript
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 };