import { LevelHandlerImpl, type Logger, LoggerImpl, type BasicSysAbstraction } from "@adviser/cement"; import { LogCollector } from "./log-write-stream.js"; export interface MockLoggerReturn { readonly logger: Logger; readonly logCollector: LogCollector; } export function MockLogger(params?: { readonly sys?: BasicSysAbstraction; readonly pass?: WritableStreamDefaultWriter; moduleName?: string | string[]; readonly disableDebug?: boolean; }): MockLoggerReturn { const lc = new LogCollector(params?.pass); let modNames = ["MockLogger"]; if (typeof params?.moduleName === "string") { modNames = [params?.moduleName]; } else if (Array.isArray(params?.moduleName)) { modNames = [...params.moduleName, ...modNames]; } const logger = new LoggerImpl({ out: lc, sys: params?.sys, levelHandler: new LevelHandlerImpl(), }) .With() .Module(modNames[0]) .Logger(); if (!params?.disableDebug) { logger.SetDebug(...modNames); } return { logCollector: lc, logger, }; }