Files
cfw-autumn/packages/logging/src/logger/resolveLoggerOptions.ts
2026-06-04 15:06:56 +01:00

68 lines
1.7 KiB
TypeScript

import type {
CreateLoggerParams,
LoggerLevel,
LoggerOutput,
ResolvedLoggerOptions,
} from "../types.js";
const parseOutputs = (
value: string | undefined,
): LoggerOutput[] | undefined => {
if (!value) return undefined;
const outputs = value
.split(",")
.map((part) => part.trim())
.filter(Boolean);
if (
outputs.every(
(output): output is LoggerOutput =>
output === "console-pretty" ||
output === "console-json" ||
output === "axiom",
)
) {
return outputs;
}
return undefined;
};
export const resolveLoggerOptions = ({
options,
env = process.env,
}: {
options: CreateLoggerParams;
env?: NodeJS.ProcessEnv;
}): ResolvedLoggerOptions => {
const preset = options.preset ?? "default";
const isDevOrTest = env.NODE_ENV === "development" || env.NODE_ENV === "test";
const hasAxiomToken = Boolean(options.axiomToken ?? env.AXIOM_TOKEN);
let outputs = options.outputs ?? parseOutputs(env.LOG_OUTPUTS);
if (!outputs) {
if (preset === "console-only") outputs = ["console-pretty"];
else if (preset === "axiom-only") outputs = ["axiom"];
else if (preset === "dual")
outputs = [isDevOrTest ? "console-pretty" : "console-json", "axiom"];
else if (isDevOrTest) outputs = ["console-pretty", "axiom"];
else outputs = ["axiom"];
}
const filteredOutputs = outputs.filter(
(output) => output !== "axiom" || hasAxiomToken,
);
return {
service: options.service,
dataset: options.dataset ?? options.service,
preset,
level:
options.level ??
((env.LOG_LEVEL as LoggerLevel | undefined) ||
(isDevOrTest || preset === "dual" ? "debug" : "info")),
outputs: filteredOutputs.length > 0 ? filteredOutputs : ["console-pretty"],
hasAxiomToken,
};
};