mirror of
https://github.com/jakejarvis/sofa.git
synced 2026-08-29 06:15:39 -04:00
Migrate the entire monorepo from Biome 2.4.7 to oxlint 1.56.0 (linter) and oxfmt 0.41.0 (formatter) for faster lint/format and broader rule coverage. - Add `.oxlintrc.json` with React, TypeScript, unicorn, import plugins and correctness/suspicious categories - Add `.oxfmtrc.json` with 2-space indent, import sorting, and Tailwind class sorting (all 30+ custom className attributes migrated) - Add `docs/.oxlintrc.json` and `docs/.oxfmtrc.json` with Next.js plugin - Update all 12 workspace package.json scripts: `oxlint`, `oxfmt`, `oxfmt --check` - Add `format:check` turbo task and CI step - Update VS Code settings/extensions to use `oxc.oxc-vscode` - Update CI path triggers from `biome.json` to new config files - Remove all `biome-ignore` comments and fix shadowed variables - Delete `biome.json` and `docs/biome.json` - Reformat entire codebase with oxfmt Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
62 lines
1.6 KiB
TypeScript
62 lines
1.6 KiB
TypeScript
import pino from "pino";
|
|
|
|
const VALID_LEVELS = ["fatal", "error", "warn", "info", "debug", "trace"];
|
|
|
|
const envLevel = process.env.LOG_LEVEL?.toLowerCase() ?? "info";
|
|
const level = VALID_LEVELS.includes(envLevel) ? envLevel : "info";
|
|
|
|
const isDev = process.env.NODE_ENV !== "production";
|
|
|
|
export const rootLogger = pino({
|
|
level,
|
|
base: undefined,
|
|
timestamp: pino.stdTimeFunctions.isoTime,
|
|
...(isDev && {
|
|
transport: {
|
|
target: "pino-pretty",
|
|
options: {
|
|
colorize: true,
|
|
translateTime: "SYS:HH:MM:ss.l",
|
|
ignore: "pid,hostname",
|
|
messageFormat: "[{module}] {msg}",
|
|
},
|
|
},
|
|
}),
|
|
});
|
|
|
|
export interface Logger {
|
|
error(msg: string, ...args: unknown[]): void;
|
|
warn(msg: string, ...args: unknown[]): void;
|
|
info(msg: string, ...args: unknown[]): void;
|
|
debug(msg: string, ...args: unknown[]): void;
|
|
}
|
|
|
|
function wrapLevel(child: pino.Logger, lvl: "error" | "warn" | "info" | "debug") {
|
|
return (msg: string, ...args: unknown[]) => {
|
|
if (args.length === 0) {
|
|
child[lvl](msg);
|
|
} else if (args.length === 1 && args[0] instanceof Error) {
|
|
child[lvl]({ err: args[0] }, msg);
|
|
} else if (
|
|
args.length === 1 &&
|
|
typeof args[0] === "object" &&
|
|
args[0] !== null &&
|
|
!Array.isArray(args[0])
|
|
) {
|
|
child[lvl](args[0] as object, msg);
|
|
} else {
|
|
child[lvl]({ extra: args }, msg);
|
|
}
|
|
};
|
|
}
|
|
|
|
export function createLogger(name: string): Logger {
|
|
const child = rootLogger.child({ module: name });
|
|
return {
|
|
error: wrapLevel(child, "error"),
|
|
warn: wrapLevel(child, "warn"),
|
|
info: wrapLevel(child, "info"),
|
|
debug: wrapLevel(child, "debug"),
|
|
};
|
|
}
|