import type { ILogger } from "../types"; export class ConsoleLogger implements ILogger { constructor(private readonly processMetadata?: Record) {} info(message: string, meta?: any) { console.log(`[INFO] ${message}`, this.merge(meta)); } warn(message: string, meta?: any) { console.warn(`[WARN] ${message}`, this.merge(meta)); } error(message: string, error?: Error | any) { console.error(`[ERROR] ${message}`, this.merge(error?.stack || error)); } debug(message: string, meta?: any) { if (process.env.NODE_ENV === "development") { console.debug(`[DEBUG] ${message}`, this.merge(meta)); } } private merge(meta: unknown): unknown { if (!this.processMetadata) { return meta ?? ""; } return typeof meta === "object" && meta !== null ? { ...this.processMetadata, ...meta } : { ...this.processMetadata, detail: meta ?? null }; } } export const createConsoleLogger = (processMetadata?: Record): ILogger => new ConsoleLogger(processMetadata);