functype-log 1.9.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"LogLayerAdapter.js","names":[],"sources":["../../src/adapter/LogLayerAdapter.ts"],"sourcesContent":["import { IO } from \"functype\"\nimport type { ILogLayer } from \"loglayer\"\n\nimport type { Logger, LogLevel, LogMetadata } from \"../logger/Logger\"\n\nconst makeMethod =\n (logLayer: ILogLayer, level: LogLevel, baseError?: Error) =>\n (message: string, metadata?: LogMetadata): IO<never, never, void> =>\n IO.sync(() => {\n const base = metadata ? logLayer.withMetadata(metadata) : logLayer\n const entry = baseError ? base.withError(baseError) : base\n entry[level](message)\n })\n\nexport const logLayerAdapter = (logLayer: ILogLayer, baseError?: Error): Logger => ({\n trace: makeMethod(logLayer, \"trace\", baseError),\n debug: makeMethod(logLayer, \"debug\", baseError),\n info: makeMethod(logLayer, \"info\", baseError),\n warn: makeMethod(logLayer, \"warn\", baseError),\n error: makeMethod(logLayer, \"error\", baseError),\n fatal: makeMethod(logLayer, \"fatal\", baseError),\n withError: (err: Error) => logLayerAdapter(logLayer, err),\n withContext: (ctx: LogMetadata) => logLayerAdapter(logLayer.withContext(ctx), baseError),\n child: (ctx?: LogMetadata) => {\n const childLog = logLayer.child()\n return ctx ? logLayerAdapter(childLog.withContext(ctx)) : logLayerAdapter(childLog)\n },\n})\n"],"mappings":"8BAKA,MAAM,GACH,EAAqB,EAAiB,KACtC,EAAiB,IAChB,EAAG,SAAW,CACZ,IAAM,EAAO,EAAW,EAAS,aAAa,CAAQ,EAAI,GAC5C,EAAY,EAAK,UAAU,CAAS,EAAI,EAAA,CAChD,EAAM,CAAC,CAAO,CACtB,CAAC,EAEQ,GAAmB,EAAqB,KAA+B,CAClF,MAAO,EAAW,EAAU,QAAS,CAAS,EAC9C,MAAO,EAAW,EAAU,QAAS,CAAS,EAC9C,KAAM,EAAW,EAAU,OAAQ,CAAS,EAC5C,KAAM,EAAW,EAAU,OAAQ,CAAS,EAC5C,MAAO,EAAW,EAAU,QAAS,CAAS,EAC9C,MAAO,EAAW,EAAU,QAAS,CAAS,EAC9C,UAAY,GAAe,EAAgB,EAAU,CAAG,EACxD,YAAc,GAAqB,EAAgB,EAAS,YAAY,CAAG,EAAG,CAAS,EACvF,MAAQ,GAAsB,CAC5B,IAAM,EAAW,EAAS,MAAM,EAChC,OAAa,EAAN,EAAsB,EAAS,YAAY,CAAG,EAAqB,CAAQ,CACpF,CACF"}
1
+ {"version":3,"file":"LogLayerAdapter.js","names":["makeMethod","IO","base","metadata","logLayer","baseError","level","message","logLayerAdapter","err","ctx","childLog"],"sources":["../../src/adapter/LogLayerAdapter.ts"],"sourcesContent":["import { IO } from \"functype\"\nimport type { ILogLayer } from \"loglayer\"\n\nimport type { Logger, LogLevel, LogMetadata } from \"../logger/Logger\"\n\nconst makeMethod =\n (logLayer: ILogLayer, level: LogLevel, baseError?: Error) =>\n (message: string, metadata?: LogMetadata): IO<never, never, void> =>\n IO.sync(() => {\n const base = metadata ? logLayer.withMetadata(metadata) : logLayer\n const entry = baseError ? base.withError(baseError) : base\n entry[level](message)\n })\n\nexport const logLayerAdapter = (logLayer: ILogLayer, baseError?: Error): Logger => ({\n trace: makeMethod(logLayer, \"trace\", baseError),\n debug: makeMethod(logLayer, \"debug\", baseError),\n info: makeMethod(logLayer, \"info\", baseError),\n warn: makeMethod(logLayer, \"warn\", baseError),\n error: makeMethod(logLayer, \"error\", baseError),\n fatal: makeMethod(logLayer, \"fatal\", baseError),\n withError: (err: Error) => logLayerAdapter(logLayer, err),\n withContext: (ctx: LogMetadata) => logLayerAdapter(logLayer.withContext(ctx), baseError),\n child: (ctx?: LogMetadata) => {\n const childLog = logLayer.child()\n return ctx ? logLayerAdapter(childLog.withContext(ctx)) : logLayerAdapter(childLog)\n },\n})\n"],"mappings":"8BAKA,MAAMA,GACH,EAAqB,EAAiB,KACtC,EAAiB,IAChBC,EAAG,SAAW,CACZ,IAAMC,EAAOC,EAAWC,EAAS,aAAaD,CAAQ,EAAIC,GAC5CC,EAAYH,EAAK,UAAUG,CAAS,EAAIH,EAAA,CAChDI,EAAM,CAACC,CAAO,CACtB,CAAC,EAEQC,GAAmB,EAAqB,KAA+B,CAClF,MAAOR,EAAWI,EAAU,QAASC,CAAS,EAC9C,MAAOL,EAAWI,EAAU,QAASC,CAAS,EAC9C,KAAML,EAAWI,EAAU,OAAQC,CAAS,EAC5C,KAAML,EAAWI,EAAU,OAAQC,CAAS,EAC5C,MAAOL,EAAWI,EAAU,QAASC,CAAS,EAC9C,MAAOL,EAAWI,EAAU,QAASC,CAAS,EAC9C,UAAY,GAAeG,EAAgBJ,EAAUK,CAAG,EACxD,YAAc,GAAqBD,EAAgBJ,EAAS,YAAYM,CAAG,EAAGL,CAAS,EACvF,MAAQ,GAAsB,CAC5B,IAAMM,EAAWP,EAAS,MAAM,EAChC,OAAaI,EAANE,EAAsBC,EAAS,YAAYD,CAAG,EAAqBC,CAAQ,CACpF,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"DirectLogger.js","names":[],"sources":["../../src/direct/DirectLogger.ts"],"sourcesContent":["import type { ConsoleLoggerOptions } from \"../layers/ConsoleLogger\"\nimport { createConsoleLogger } from \"../layers/ConsoleLogger\"\nimport { silentLogger } from \"../layers/SilentLogger\"\nimport type { Logger, LogMetadata } from \"../logger/Logger\"\n\nexport type DirectLogger = {\n readonly trace: (message: string, metadata?: LogMetadata) => void\n readonly debug: (message: string, metadata?: LogMetadata) => void\n readonly info: (message: string, metadata?: LogMetadata) => void\n readonly warn: (message: string, metadata?: LogMetadata) => void\n readonly error: (message: string, metadata?: LogMetadata) => void\n readonly fatal: (message: string, metadata?: LogMetadata) => void\n readonly withError: (error: Error) => DirectLogger\n readonly withContext: (context: LogMetadata) => DirectLogger\n readonly child: (context?: LogMetadata) => DirectLogger\n}\n\nexport const toDirectLogger = (logger: Logger): DirectLogger => ({\n trace: (msg, meta) => logger.trace(msg, meta).runSyncOrThrow(),\n debug: (msg, meta) => logger.debug(msg, meta).runSyncOrThrow(),\n info: (msg, meta) => logger.info(msg, meta).runSyncOrThrow(),\n warn: (msg, meta) => logger.warn(msg, meta).runSyncOrThrow(),\n error: (msg, meta) => logger.error(msg, meta).runSyncOrThrow(),\n fatal: (msg, meta) => logger.fatal(msg, meta).runSyncOrThrow(),\n withError: (err) => toDirectLogger(logger.withError(err)),\n withContext: (ctx) => toDirectLogger(logger.withContext(ctx)),\n child: (ctx) => toDirectLogger(logger.child(ctx)),\n})\n\nexport const createDirectConsoleLogger = (options?: ConsoleLoggerOptions): DirectLogger =>\n toDirectLogger(createConsoleLogger(options))\n\nexport const directSilentLogger: DirectLogger = toDirectLogger(silentLogger)\n"],"mappings":"0HAiBA,MAAa,EAAkB,IAAkC,CAC/D,OAAQ,EAAK,IAAS,EAAO,MAAM,EAAK,CAAI,CAAC,CAAC,eAAe,EAC7D,OAAQ,EAAK,IAAS,EAAO,MAAM,EAAK,CAAI,CAAC,CAAC,eAAe,EAC7D,MAAO,EAAK,IAAS,EAAO,KAAK,EAAK,CAAI,CAAC,CAAC,eAAe,EAC3D,MAAO,EAAK,IAAS,EAAO,KAAK,EAAK,CAAI,CAAC,CAAC,eAAe,EAC3D,OAAQ,EAAK,IAAS,EAAO,MAAM,EAAK,CAAI,CAAC,CAAC,eAAe,EAC7D,OAAQ,EAAK,IAAS,EAAO,MAAM,EAAK,CAAI,CAAC,CAAC,eAAe,EAC7D,UAAY,GAAQ,EAAe,EAAO,UAAU,CAAG,CAAC,EACxD,YAAc,GAAQ,EAAe,EAAO,YAAY,CAAG,CAAC,EAC5D,MAAQ,GAAQ,EAAe,EAAO,MAAM,CAAG,CAAC,CAClD,GAEa,EAA6B,GACxC,EAAe,EAAoB,CAAO,CAAC,EAEhC,EAAmC,EAAe,CAAY"}
1
+ {"version":3,"file":"DirectLogger.js","names":["toDirectLogger","logger","msg","meta","err","ctx","createDirectConsoleLogger","createConsoleLogger","options","directSilentLogger","silentLogger"],"sources":["../../src/direct/DirectLogger.ts"],"sourcesContent":["import type { ConsoleLoggerOptions } from \"../layers/ConsoleLogger\"\nimport { createConsoleLogger } from \"../layers/ConsoleLogger\"\nimport { silentLogger } from \"../layers/SilentLogger\"\nimport type { Logger, LogMetadata } from \"../logger/Logger\"\n\nexport type DirectLogger = {\n readonly trace: (message: string, metadata?: LogMetadata) => void\n readonly debug: (message: string, metadata?: LogMetadata) => void\n readonly info: (message: string, metadata?: LogMetadata) => void\n readonly warn: (message: string, metadata?: LogMetadata) => void\n readonly error: (message: string, metadata?: LogMetadata) => void\n readonly fatal: (message: string, metadata?: LogMetadata) => void\n readonly withError: (error: Error) => DirectLogger\n readonly withContext: (context: LogMetadata) => DirectLogger\n readonly child: (context?: LogMetadata) => DirectLogger\n}\n\nexport const toDirectLogger = (logger: Logger): DirectLogger => ({\n trace: (msg, meta) => logger.trace(msg, meta).runSyncOrThrow(),\n debug: (msg, meta) => logger.debug(msg, meta).runSyncOrThrow(),\n info: (msg, meta) => logger.info(msg, meta).runSyncOrThrow(),\n warn: (msg, meta) => logger.warn(msg, meta).runSyncOrThrow(),\n error: (msg, meta) => logger.error(msg, meta).runSyncOrThrow(),\n fatal: (msg, meta) => logger.fatal(msg, meta).runSyncOrThrow(),\n withError: (err) => toDirectLogger(logger.withError(err)),\n withContext: (ctx) => toDirectLogger(logger.withContext(ctx)),\n child: (ctx) => toDirectLogger(logger.child(ctx)),\n})\n\nexport const createDirectConsoleLogger = (options?: ConsoleLoggerOptions): DirectLogger =>\n toDirectLogger(createConsoleLogger(options))\n\nexport const directSilentLogger: DirectLogger = toDirectLogger(silentLogger)\n"],"mappings":"0HAiBA,MAAaA,EAAkB,IAAkC,CAC/D,OAAQ,EAAK,IAASC,EAAO,MAAMC,EAAKC,CAAI,CAAC,CAAC,eAAe,EAC7D,OAAQ,EAAK,IAASF,EAAO,MAAMC,EAAKC,CAAI,CAAC,CAAC,eAAe,EAC7D,MAAO,EAAK,IAASF,EAAO,KAAKC,EAAKC,CAAI,CAAC,CAAC,eAAe,EAC3D,MAAO,EAAK,IAASF,EAAO,KAAKC,EAAKC,CAAI,CAAC,CAAC,eAAe,EAC3D,OAAQ,EAAK,IAASF,EAAO,MAAMC,EAAKC,CAAI,CAAC,CAAC,eAAe,EAC7D,OAAQ,EAAK,IAASF,EAAO,MAAMC,EAAKC,CAAI,CAAC,CAAC,eAAe,EAC7D,UAAY,GAAQH,EAAeC,EAAO,UAAUG,CAAG,CAAC,EACxD,YAAc,GAAQJ,EAAeC,EAAO,YAAYI,CAAG,CAAC,EAC5D,MAAQ,GAAQL,EAAeC,EAAO,MAAMI,CAAG,CAAC,CAClD,GAEaC,EAA6B,GACxCN,EAAeO,EAAoBC,CAAO,CAAC,EAEhCC,EAAmCT,EAAeU,CAAY"}
@@ -1,2 +1,2 @@
1
- import{List as e}from"functype";const t=(e,n,r)=>{let i=t=>(i,a)=>{e.push({level:t,message:i,metadata:Object.keys(n).length>0||a?{...n,...a}:void 0,error:r,timestamp:new Date})};return{trace:i(`trace`),debug:i(`debug`),info:i(`info`),warn:i(`warn`),error:i(`error`),fatal:i(`fatal`),withError:r=>t(e,n,r),withContext:i=>t(e,{...n,...i},r),child:r=>t(e,{...n,...r},void 0)}},n=()=>{let n=[];return{logger:t(n,{}),entries:()=>e(n),clear:()=>{n.length=0},hasEntry:(e,t)=>n.some(n=>n.level===e&&(typeof t==`string`?n.message.includes(t):t.test(n.message)))}};export{n as createDirectTestLogger};
1
+ import{List as e}from"functype";const t=(e,n,r)=>{let i=t=>(i,a)=>{e.push({level:t,message:i,metadata:Object.keys(n).length>0||a?{...n,...a}:void 0,error:r,timestamp:/* @__PURE__ */ new Date})};return{trace:i(`trace`),debug:i(`debug`),info:i(`info`),warn:i(`warn`),error:i(`error`),fatal:i(`fatal`),withError:r=>t(e,n,r),withContext:i=>t(e,{...n,...i},r),child:r=>t(e,{...n,...r},void 0)}},n=()=>{let n=[];return{logger:t(n,{}),entries:()=>e(n),clear:()=>{n.length=0},hasEntry:(e,t)=>n.some(n=>n.level===e&&(typeof t==`string`?n.message.includes(t):t.test(n.message)))}};export{n as createDirectTestLogger};
2
2
  //# sourceMappingURL=DirectTestLogger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DirectTestLogger.js","names":[],"sources":["../../src/direct/DirectTestLogger.ts"],"sourcesContent":["import { List } from \"functype\"\n\nimport type { LogEntry, LogLevel, LogMetadata } from \"../logger/Logger\"\nimport type { DirectLogger } from \"./DirectLogger\"\n\nexport type DirectTestLoggerHandle = {\n readonly logger: DirectLogger\n readonly entries: () => List<LogEntry>\n readonly clear: () => void\n readonly hasEntry: (level: LogLevel, messagePattern: string | RegExp) => boolean\n}\n\nconst createLoggerFromStore = (store: LogEntry[], baseContext: LogMetadata, baseError?: Error): DirectLogger => {\n const makeMethod =\n (level: LogLevel) =>\n (message: string, metadata?: LogMetadata): void => {\n store.push({\n level,\n message,\n metadata: Object.keys(baseContext).length > 0 || metadata ? { ...baseContext, ...metadata } : undefined,\n error: baseError,\n timestamp: new Date(),\n })\n }\n\n return {\n trace: makeMethod(\"trace\"),\n debug: makeMethod(\"debug\"),\n info: makeMethod(\"info\"),\n warn: makeMethod(\"warn\"),\n error: makeMethod(\"error\"),\n fatal: makeMethod(\"fatal\"),\n withError: (err: Error) => createLoggerFromStore(store, baseContext, err),\n withContext: (ctx: LogMetadata) => createLoggerFromStore(store, { ...baseContext, ...ctx }, baseError),\n child: (ctx?: LogMetadata) => createLoggerFromStore(store, { ...baseContext, ...ctx }, undefined),\n }\n}\n\nexport const createDirectTestLogger = (): DirectTestLoggerHandle => {\n const store: LogEntry[] = []\n\n return {\n logger: createLoggerFromStore(store, {}),\n entries: () => List(store),\n clear: () => {\n store.length = 0\n },\n hasEntry: (level: LogLevel, messagePattern: string | RegExp) =>\n store.some(\n (e) =>\n e.level === level &&\n (typeof messagePattern === \"string\" ? e.message.includes(messagePattern) : messagePattern.test(e.message)),\n ),\n }\n}\n"],"mappings":"gCAYA,MAAM,GAAyB,EAAmB,EAA0B,IAAoC,CAC9G,IAAM,EACH,IACA,EAAiB,IAAiC,CACjD,EAAM,KAAK,CACT,QACA,UACA,SAAU,OAAO,KAAK,CAAW,CAAC,CAAC,OAAS,GAAK,EAAW,CAAE,GAAG,EAAa,GAAG,CAAS,EAAI,IAAA,GAC9F,MAAO,EACP,UAAW,IAAI,IACjB,CAAC,CACH,EAEF,MAAO,CACL,MAAO,EAAW,OAAO,EACzB,MAAO,EAAW,OAAO,EACzB,KAAM,EAAW,MAAM,EACvB,KAAM,EAAW,MAAM,EACvB,MAAO,EAAW,OAAO,EACzB,MAAO,EAAW,OAAO,EACzB,UAAY,GAAe,EAAsB,EAAO,EAAa,CAAG,EACxE,YAAc,GAAqB,EAAsB,EAAO,CAAE,GAAG,EAAa,GAAG,CAAI,EAAG,CAAS,EACrG,MAAQ,GAAsB,EAAsB,EAAO,CAAE,GAAG,EAAa,GAAG,CAAI,EAAG,IAAA,EAAS,CAClG,CACF,EAEa,MAAuD,CAClE,IAAM,EAAoB,CAAC,EAE3B,MAAO,CACL,OAAQ,EAAsB,EAAO,CAAC,CAAC,EACvC,YAAe,EAAK,CAAK,EACzB,UAAa,CACX,EAAM,OAAS,CACjB,EACA,UAAW,EAAiB,IAC1B,EAAM,KACH,GACC,EAAE,QAAU,IACX,OAAO,GAAmB,SAAW,EAAE,QAAQ,SAAS,CAAc,EAAI,EAAe,KAAK,EAAE,OAAO,EAC5G,CACJ,CACF"}
1
+ {"version":3,"file":"DirectTestLogger.js","names":["createLoggerFromStore","makeMethod","store","baseContext","metadata","baseError","err","ctx","createDirectTestLogger","List","e","level","messagePattern"],"sources":["../../src/direct/DirectTestLogger.ts"],"sourcesContent":["import { List } from \"functype\"\n\nimport type { LogEntry, LogLevel, LogMetadata } from \"../logger/Logger\"\nimport type { DirectLogger } from \"./DirectLogger\"\n\nexport type DirectTestLoggerHandle = {\n readonly logger: DirectLogger\n readonly entries: () => List<LogEntry>\n readonly clear: () => void\n readonly hasEntry: (level: LogLevel, messagePattern: string | RegExp) => boolean\n}\n\nconst createLoggerFromStore = (store: LogEntry[], baseContext: LogMetadata, baseError?: Error): DirectLogger => {\n const makeMethod =\n (level: LogLevel) =>\n (message: string, metadata?: LogMetadata): void => {\n store.push({\n level,\n message,\n metadata: Object.keys(baseContext).length > 0 || metadata ? { ...baseContext, ...metadata } : undefined,\n error: baseError,\n timestamp: new Date(),\n })\n }\n\n return {\n trace: makeMethod(\"trace\"),\n debug: makeMethod(\"debug\"),\n info: makeMethod(\"info\"),\n warn: makeMethod(\"warn\"),\n error: makeMethod(\"error\"),\n fatal: makeMethod(\"fatal\"),\n withError: (err: Error) => createLoggerFromStore(store, baseContext, err),\n withContext: (ctx: LogMetadata) => createLoggerFromStore(store, { ...baseContext, ...ctx }, baseError),\n child: (ctx?: LogMetadata) => createLoggerFromStore(store, { ...baseContext, ...ctx }, undefined),\n }\n}\n\nexport const createDirectTestLogger = (): DirectTestLoggerHandle => {\n const store: LogEntry[] = []\n\n return {\n logger: createLoggerFromStore(store, {}),\n entries: () => List(store),\n clear: () => {\n store.length = 0\n },\n hasEntry: (level: LogLevel, messagePattern: string | RegExp) =>\n store.some(\n (e) =>\n e.level === level &&\n (typeof messagePattern === \"string\" ? e.message.includes(messagePattern) : messagePattern.test(e.message)),\n ),\n }\n}\n"],"mappings":"gCAYA,MAAMA,GAAyB,EAAmB,EAA0B,IAAoC,CAC9G,IAAMC,EACH,IACA,EAAiB,IAAiC,CACjDC,EAAM,KAAK,CACT,QACA,UACA,SAAU,OAAO,KAAKC,CAAW,CAAC,CAAC,OAAS,GAAKC,EAAW,CAAE,GAAGD,EAAa,GAAGC,CAAS,EAAI,IAAA,GAC9F,MAAOC,EACP,0BAAW,IAAI,IACjB,CAAC,CACH,EAEF,MAAO,CACL,MAAOJ,EAAW,OAAO,EACzB,MAAOA,EAAW,OAAO,EACzB,KAAMA,EAAW,MAAM,EACvB,KAAMA,EAAW,MAAM,EACvB,MAAOA,EAAW,OAAO,EACzB,MAAOA,EAAW,OAAO,EACzB,UAAY,GAAeD,EAAsBE,EAAOC,EAAaG,CAAG,EACxE,YAAc,GAAqBN,EAAsBE,EAAO,CAAE,GAAGC,EAAa,GAAGI,CAAI,EAAGF,CAAS,EACrG,MAAQ,GAAsBL,EAAsBE,EAAO,CAAE,GAAGC,EAAa,GAAGI,CAAI,EAAG,IAAA,EAAS,CAClG,CACF,EAEaC,MAAuD,CAClE,IAAMN,EAAoB,CAAC,EAE3B,MAAO,CACL,OAAQF,EAAsBE,EAAO,CAAC,CAAC,EACvC,YAAeO,EAAKP,CAAK,EACzB,UAAa,CACX,EAAM,OAAS,CACjB,EACA,UAAW,EAAiB,IAC1BA,EAAM,KACH,GACCQ,EAAE,QAAUC,IACX,OAAOC,GAAmB,SAAWF,EAAE,QAAQ,SAASE,CAAc,EAAIA,EAAe,KAAKF,EAAE,OAAO,EAC5G,CACJ,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConsoleLogger.js","names":[],"sources":["../../src/layers/ConsoleLogger.ts"],"sourcesContent":["import { ConsoleTransport, LogLayer } from \"loglayer\"\n\nimport { logLayerAdapter } from \"../adapter/LogLayerAdapter\"\nimport type { Logger, LogLevel } from \"../logger/Logger\"\n\n/**\n * Console sink shape expected by `loglayer`'s `ConsoleTransport`. Matches\n * the subset of the global `Console` interface the transport actually calls.\n */\ntype ConsoleSink = Pick<Console, \"log\" | \"info\" | \"debug\" | \"trace\" | \"warn\" | \"error\">\n\n/**\n * A console sink that routes EVERY level through `console.error` (stderr).\n *\n * Opt in via `stream: \"stderr\"`. Required for consumers where stdout is a\n * reserved data/protocol channel — most notably MCP-over-stdio, which uses\n * stdout exclusively for JSON-RPC. Also useful for CLI tools that emit\n * structured output on stdout.\n */\nconst stderrConsole: ConsoleSink = {\n log: (...args: unknown[]) => console.error(...args),\n info: (...args: unknown[]) => console.error(...args),\n debug: (...args: unknown[]) => console.error(...args),\n trace: (...args: unknown[]) => console.error(...args),\n warn: (...args: unknown[]) => console.error(...args),\n error: (...args: unknown[]) => console.error(...args),\n}\n\nexport type ConsoleLoggerOptions = {\n readonly level?: LogLevel\n readonly prefix?: string\n /**\n * Which standard stream console output is routed to.\n *\n * - `\"stdout\"` (default) — uses the global `console`. `info`/`debug` land\n * on stdout; `warn`/`error`/`trace` land on stderr (loglayer's per-level\n * routing). Matches the convention of every other Node logging library\n * (pino, winston, bunyan).\n * - `\"stderr\"` — routes ALL levels through `console.error` (stderr). Use\n * when stdout is a reserved data/protocol channel — most notably\n * MCP-over-stdio servers where stdout carries JSON-RPC and any other\n * bytes corrupt the protocol.\n */\n readonly stream?: \"stdout\" | \"stderr\"\n /**\n * Fully override the console sink. Takes precedence over `stream`. Use for\n * routing to a file stream, structured collector, or other custom sink.\n *\n * Only the methods called by loglayer's `ConsoleTransport` need to be\n * present (`log`/`info`/`debug`/`trace`/`warn`/`error`).\n */\n readonly console?: Partial<Console>\n}\n\nconst resolveSink = (options?: ConsoleLoggerOptions): Partial<Console> => {\n if (options?.console) return options.console\n if (options?.stream === \"stderr\") return stderrConsole\n return console\n}\n\nexport const createConsoleLogger = (options?: ConsoleLoggerOptions): Logger => {\n const logLayer = new LogLayer({\n transport: new ConsoleTransport({ logger: resolveSink(options) as Console }),\n ...(options?.prefix ? { prefix: options.prefix } : {}),\n })\n\n return logLayerAdapter(logLayer)\n}\n"],"mappings":"0HAmBA,MAAM,EAA6B,CACjC,KAAM,GAAG,IAAoB,QAAQ,MAAM,GAAG,CAAI,EAClD,MAAO,GAAG,IAAoB,QAAQ,MAAM,GAAG,CAAI,EACnD,OAAQ,GAAG,IAAoB,QAAQ,MAAM,GAAG,CAAI,EACpD,OAAQ,GAAG,IAAoB,QAAQ,MAAM,GAAG,CAAI,EACpD,MAAO,GAAG,IAAoB,QAAQ,MAAM,GAAG,CAAI,EACnD,OAAQ,GAAG,IAAoB,QAAQ,MAAM,GAAG,CAAI,CACtD,EA4BM,EAAe,GACf,GAAS,QAAgB,EAAQ,QACjC,GAAS,SAAW,SAAiB,EAClC,QAGI,EAAuB,GAA2C,CAC7E,IAAM,EAAW,IAAI,EAAS,CAC5B,UAAW,IAAI,EAAiB,CAAE,OAAQ,EAAY,CAAO,CAAa,CAAC,EAC3E,GAAI,GAAS,OAAS,CAAE,OAAQ,EAAQ,MAAO,EAAI,CAAC,CACtD,CAAC,EAED,OAAO,EAAgB,CAAQ,CACjC"}
1
+ {"version":3,"file":"ConsoleLogger.js","names":["stderrConsole","args","resolveSink","options","createConsoleLogger","logLayer","LogLayer","ConsoleTransport","logLayerAdapter"],"sources":["../../src/layers/ConsoleLogger.ts"],"sourcesContent":["import { ConsoleTransport, LogLayer } from \"loglayer\"\n\nimport { logLayerAdapter } from \"../adapter/LogLayerAdapter\"\nimport type { Logger, LogLevel } from \"../logger/Logger\"\n\n/**\n * Console sink shape expected by `loglayer`'s `ConsoleTransport`. Matches\n * the subset of the global `Console` interface the transport actually calls.\n */\ntype ConsoleSink = Pick<Console, \"log\" | \"info\" | \"debug\" | \"trace\" | \"warn\" | \"error\">\n\n/**\n * A console sink that routes EVERY level through `console.error` (stderr).\n *\n * Opt in via `stream: \"stderr\"`. Required for consumers where stdout is a\n * reserved data/protocol channel — most notably MCP-over-stdio, which uses\n * stdout exclusively for JSON-RPC. Also useful for CLI tools that emit\n * structured output on stdout.\n */\nconst stderrConsole: ConsoleSink = {\n log: (...args: unknown[]) => console.error(...args),\n info: (...args: unknown[]) => console.error(...args),\n debug: (...args: unknown[]) => console.error(...args),\n trace: (...args: unknown[]) => console.error(...args),\n warn: (...args: unknown[]) => console.error(...args),\n error: (...args: unknown[]) => console.error(...args),\n}\n\nexport type ConsoleLoggerOptions = {\n readonly level?: LogLevel\n readonly prefix?: string\n /**\n * Which standard stream console output is routed to.\n *\n * - `\"stdout\"` (default) — uses the global `console`. `info`/`debug` land\n * on stdout; `warn`/`error`/`trace` land on stderr (loglayer's per-level\n * routing). Matches the convention of every other Node logging library\n * (pino, winston, bunyan).\n * - `\"stderr\"` — routes ALL levels through `console.error` (stderr). Use\n * when stdout is a reserved data/protocol channel — most notably\n * MCP-over-stdio servers where stdout carries JSON-RPC and any other\n * bytes corrupt the protocol.\n */\n readonly stream?: \"stdout\" | \"stderr\"\n /**\n * Fully override the console sink. Takes precedence over `stream`. Use for\n * routing to a file stream, structured collector, or other custom sink.\n *\n * Only the methods called by loglayer's `ConsoleTransport` need to be\n * present (`log`/`info`/`debug`/`trace`/`warn`/`error`).\n */\n readonly console?: Partial<Console>\n}\n\nconst resolveSink = (options?: ConsoleLoggerOptions): Partial<Console> => {\n if (options?.console) return options.console\n if (options?.stream === \"stderr\") return stderrConsole\n return console\n}\n\nexport const createConsoleLogger = (options?: ConsoleLoggerOptions): Logger => {\n const logLayer = new LogLayer({\n transport: new ConsoleTransport({ logger: resolveSink(options) as Console }),\n ...(options?.prefix ? { prefix: options.prefix } : {}),\n })\n\n return logLayerAdapter(logLayer)\n}\n"],"mappings":"0HAmBA,MAAMA,EAA6B,CACjC,KAAM,GAAGC,IAAoB,QAAQ,MAAM,GAAGA,CAAI,EAClD,MAAO,GAAGA,IAAoB,QAAQ,MAAM,GAAGA,CAAI,EACnD,OAAQ,GAAGA,IAAoB,QAAQ,MAAM,GAAGA,CAAI,EACpD,OAAQ,GAAGA,IAAoB,QAAQ,MAAM,GAAGA,CAAI,EACpD,MAAO,GAAGA,IAAoB,QAAQ,MAAM,GAAGA,CAAI,EACnD,OAAQ,GAAGA,IAAoB,QAAQ,MAAM,GAAGA,CAAI,CACtD,EA4BMC,EAAe,GACfC,GAAS,QAAgBA,EAAQ,QACjCA,GAAS,SAAW,SAAiBH,EAClC,QAGII,EAAuB,GAA2C,CAC7E,IAAMC,EAAW,IAAIC,EAAS,CAC5B,UAAW,IAAIC,EAAiB,CAAE,OAAQL,EAAYC,CAAO,CAAa,CAAC,EAC3E,GAAIA,GAAS,OAAS,CAAE,OAAQA,EAAQ,MAAO,EAAI,CAAC,CACtD,CAAC,EAED,OAAOK,EAAgBH,CAAQ,CACjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"LoggerLayer.js","names":[],"sources":["../../src/layers/LoggerLayer.ts"],"sourcesContent":["import { Layer } from \"functype\"\nimport type { ILogLayer } from \"loglayer\"\n\nimport { logLayerAdapter } from \"../adapter/LogLayerAdapter\"\nimport { Logger } from \"../logger/Logger\"\nimport type { ConsoleLoggerOptions } from \"./ConsoleLogger\"\nimport { createConsoleLogger } from \"./ConsoleLogger\"\nimport { silentLogger } from \"./SilentLogger\"\n\nexport const LoggerLive = {\n /** From an existing LogLayer instance — escape hatch for power users (pino, winston, datadog, etc.) */\n fromLogLayer: (logLayer: ILogLayer): Layer<never, never, Logger> => Layer.succeed(Logger, logLayerAdapter(logLayer)),\n\n /** Console logger — zero config, great for dev */\n console: (options?: ConsoleLoggerOptions): Layer<never, never, Logger> =>\n Layer.sync(Logger, () => createConsoleLogger(options)),\n\n /** Silent/noop logger — for testing or suppression */\n silent: (): Layer<never, never, Logger> => Layer.succeed(Logger, silentLogger),\n}\n"],"mappings":"wPASA,MAAa,EAAa,CAExB,aAAe,GAAqD,EAAM,QAAQ,EAAQ,EAAgB,CAAQ,CAAC,EAGnH,QAAU,GACR,EAAM,KAAK,MAAc,EAAoB,CAAO,CAAC,EAGvD,WAA2C,EAAM,QAAQ,EAAQ,CAAY,CAC/E"}
1
+ {"version":3,"file":"LoggerLayer.js","names":["LoggerLive","Layer","Logger","logLayerAdapter","logLayer","createConsoleLogger","options","silentLogger"],"sources":["../../src/layers/LoggerLayer.ts"],"sourcesContent":["import { Layer } from \"functype\"\nimport type { ILogLayer } from \"loglayer\"\n\nimport { logLayerAdapter } from \"../adapter/LogLayerAdapter\"\nimport { Logger } from \"../logger/Logger\"\nimport type { ConsoleLoggerOptions } from \"./ConsoleLogger\"\nimport { createConsoleLogger } from \"./ConsoleLogger\"\nimport { silentLogger } from \"./SilentLogger\"\n\nexport const LoggerLive = {\n /** From an existing LogLayer instance — escape hatch for power users (pino, winston, datadog, etc.) */\n fromLogLayer: (logLayer: ILogLayer): Layer<never, never, Logger> => Layer.succeed(Logger, logLayerAdapter(logLayer)),\n\n /** Console logger — zero config, great for dev */\n console: (options?: ConsoleLoggerOptions): Layer<never, never, Logger> =>\n Layer.sync(Logger, () => createConsoleLogger(options)),\n\n /** Silent/noop logger — for testing or suppression */\n silent: (): Layer<never, never, Logger> => Layer.succeed(Logger, silentLogger),\n}\n"],"mappings":"wPASA,MAAaA,EAAa,CAExB,aAAe,GAAqDC,EAAM,QAAQC,EAAQC,EAAgBC,CAAQ,CAAC,EAGnH,QAAU,GACRH,EAAM,KAAKC,MAAcG,EAAoBC,CAAO,CAAC,EAGvD,WAA2CL,EAAM,QAAQC,EAAQK,CAAY,CAC/E"}
@@ -1 +1 @@
1
- {"version":3,"file":"SilentLogger.js","names":[],"sources":["../../src/layers/SilentLogger.ts"],"sourcesContent":["import { IO } from \"functype\"\n\nimport type { Logger, LogMetadata } from \"../logger/Logger\"\n\nconst noop = (_message: string, _metadata?: LogMetadata): IO<never, never, void> => IO.succeed(undefined as void)\n\nexport const silentLogger: Logger = {\n trace: noop,\n debug: noop,\n info: noop,\n warn: noop,\n error: noop,\n fatal: noop,\n withError: () => silentLogger,\n withContext: () => silentLogger,\n child: () => silentLogger,\n}\n"],"mappings":"8BAIA,MAAM,GAAQ,EAAkB,IAAoD,EAAG,QAAQ,IAAA,EAAiB,EAEnG,EAAuB,CAClC,MAAO,EACP,MAAO,EACP,KAAM,EACN,KAAM,EACN,MAAO,EACP,MAAO,EACP,cAAiB,EACjB,gBAAmB,EACnB,UAAa,CACf"}
1
+ {"version":3,"file":"SilentLogger.js","names":["noop","IO","silentLogger"],"sources":["../../src/layers/SilentLogger.ts"],"sourcesContent":["import { IO } from \"functype\"\n\nimport type { Logger, LogMetadata } from \"../logger/Logger\"\n\nconst noop = (_message: string, _metadata?: LogMetadata): IO<never, never, void> => IO.succeed(undefined as void)\n\nexport const silentLogger: Logger = {\n trace: noop,\n debug: noop,\n info: noop,\n warn: noop,\n error: noop,\n fatal: noop,\n withError: () => silentLogger,\n withContext: () => silentLogger,\n child: () => silentLogger,\n}\n"],"mappings":"8BAIA,MAAMA,GAAQ,EAAkB,IAAoDC,EAAG,QAAQ,IAAA,EAAiB,EAEnGC,EAAuB,CAClC,MAAOF,EACP,MAAOA,EACP,KAAMA,EACN,KAAMA,EACN,MAAOA,EACP,MAAOA,EACP,cAAiBE,EACjB,gBAAmBA,EACnB,UAAaA,CACf"}
@@ -1 +1 @@
1
- {"version":3,"file":"Logger.js","names":[],"sources":["../../src/logger/Logger.ts"],"sourcesContent":["import type { IO } from \"functype\"\nimport { Tag } from \"functype\"\n\nexport type LogLevel = \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\"\n\nexport type LogMetadata = Record<string, unknown>\n\nexport type LogEntry = {\n readonly level: LogLevel\n readonly message: string\n readonly metadata?: LogMetadata\n readonly error?: Error\n readonly timestamp: Date\n}\n\nexport type Logger = {\n readonly trace: (message: string, metadata?: LogMetadata) => IO<never, never, void>\n readonly debug: (message: string, metadata?: LogMetadata) => IO<never, never, void>\n readonly info: (message: string, metadata?: LogMetadata) => IO<never, never, void>\n readonly warn: (message: string, metadata?: LogMetadata) => IO<never, never, void>\n readonly error: (message: string, metadata?: LogMetadata) => IO<never, never, void>\n readonly fatal: (message: string, metadata?: LogMetadata) => IO<never, never, void>\n readonly withError: (error: Error) => Logger\n readonly withContext: (context: LogMetadata) => Logger\n readonly child: (context?: LogMetadata) => Logger\n}\n\nexport const Logger = Tag<Logger>(\"Logger\")\n"],"mappings":"+BA2BA,MAAa,EAAS,EAAY,QAAQ"}
1
+ {"version":3,"file":"Logger.js","names":["Logger","Tag"],"sources":["../../src/logger/Logger.ts"],"sourcesContent":["import type { IO } from \"functype\"\nimport { Tag } from \"functype\"\n\nexport type LogLevel = \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\"\n\nexport type LogMetadata = Record<string, unknown>\n\nexport type LogEntry = {\n readonly level: LogLevel\n readonly message: string\n readonly metadata?: LogMetadata\n readonly error?: Error\n readonly timestamp: Date\n}\n\nexport type Logger = {\n readonly trace: (message: string, metadata?: LogMetadata) => IO<never, never, void>\n readonly debug: (message: string, metadata?: LogMetadata) => IO<never, never, void>\n readonly info: (message: string, metadata?: LogMetadata) => IO<never, never, void>\n readonly warn: (message: string, metadata?: LogMetadata) => IO<never, never, void>\n readonly error: (message: string, metadata?: LogMetadata) => IO<never, never, void>\n readonly fatal: (message: string, metadata?: LogMetadata) => IO<never, never, void>\n readonly withError: (error: Error) => Logger\n readonly withContext: (context: LogMetadata) => Logger\n readonly child: (context?: LogMetadata) => Logger\n}\n\nexport const Logger = Tag<Logger>(\"Logger\")\n"],"mappings":"+BA2BA,MAAaA,EAASC,EAAY,QAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"LogMiddleware.js","names":["IOImpl","LoggerTag"],"sources":["../../src/middleware/LogMiddleware.ts"],"sourcesContent":["import type { IO } from \"functype\"\nimport { IO as IOImpl } from \"functype\"\n\nimport type { Logger, LogLevel } from \"../logger/Logger\"\nimport { Logger as LoggerTag } from \"../logger/Logger\"\n\n/** Wrap any IO with start/complete/error logging at debug level */\nexport const withLogging = <R, E, A>(name: string, effect: IO<R, E, A>): IO<R | Logger, E, A> =>\n IOImpl.gen(function* () {\n const log = yield* IOImpl.service(LoggerTag)\n yield* log.debug(`${name}: starting`)\n const result = yield* effect\n yield* log.debug(`${name}: completed`)\n return result\n }) as unknown as IO<R | Logger, E, A>\n\n/** Create a tap function that logs at the specified level */\nexport const tapLog =\n <A>(level: LogLevel, message: string | ((a: A) => string)) =>\n <R, E>(effect: IO<R, E, A>): IO<R | Logger, E, A> =>\n IOImpl.gen(function* () {\n const result = yield* effect\n const log = yield* IOImpl.service(LoggerTag)\n const msg = typeof message === \"string\" ? message : message(result)\n yield* log[level](msg)\n return result\n }) as unknown as IO<R | Logger, E, A>\n"],"mappings":"2EAOA,MAAa,GAAwB,EAAc,IACjDA,EAAO,IAAI,WAAa,CACtB,IAAM,EAAM,MAAOA,EAAO,QAAQC,CAAS,EAC3C,MAAO,EAAI,MAAM,GAAG,EAAK,WAAW,EACpC,IAAM,EAAS,MAAO,EAEtB,OADA,MAAO,EAAI,MAAM,GAAG,EAAK,YAAY,EAC9B,CACT,CAAC,EAGU,GACP,EAAiB,IACd,GACLD,EAAO,IAAI,WAAa,CACtB,IAAM,EAAS,MAAO,EAChB,EAAM,MAAOA,EAAO,QAAQC,CAAS,EACrC,EAAM,OAAO,GAAY,SAAW,EAAU,EAAQ,CAAM,EAElE,OADA,MAAO,EAAI,EAAM,CAAC,CAAG,EACd,CACT,CAAC"}
1
+ {"version":3,"file":"LogMiddleware.js","names":["IOImpl","LoggerTag","withLogging","IO","log","Logger","name","result","effect","tapLog","msg","message","level"],"sources":["../../src/middleware/LogMiddleware.ts"],"sourcesContent":["import type { IO } from \"functype\"\nimport { IO as IOImpl } from \"functype\"\n\nimport type { Logger, LogLevel } from \"../logger/Logger\"\nimport { Logger as LoggerTag } from \"../logger/Logger\"\n\n/** Wrap any IO with start/complete/error logging at debug level */\nexport const withLogging = <R, E, A>(name: string, effect: IO<R, E, A>): IO<R | Logger, E, A> =>\n IOImpl.gen(function* () {\n const log = yield* IOImpl.service(LoggerTag)\n yield* log.debug(`${name}: starting`)\n const result = yield* effect\n yield* log.debug(`${name}: completed`)\n return result\n }) as unknown as IO<R | Logger, E, A>\n\n/** Create a tap function that logs at the specified level */\nexport const tapLog =\n <A>(level: LogLevel, message: string | ((a: A) => string)) =>\n <R, E>(effect: IO<R, E, A>): IO<R | Logger, E, A> =>\n IOImpl.gen(function* () {\n const result = yield* effect\n const log = yield* IOImpl.service(LoggerTag)\n const msg = typeof message === \"string\" ? message : message(result)\n yield* log[level](msg)\n return result\n }) as unknown as IO<R | Logger, E, A>\n"],"mappings":"2EAOA,MAAaE,GAAwB,EAAc,IACjDF,EAAO,IAAI,WAAa,CACtB,IAAMI,EAAM,MAAOJ,EAAO,QAAQC,CAAS,EAC3C,MAAOG,EAAI,MAAM,GAAGE,EAAK,WAAW,EACpC,IAAMC,EAAS,MAAOC,EAEtB,OADA,MAAOJ,EAAI,MAAM,GAAGE,EAAK,YAAY,EAC9BC,CACT,CAAC,EAGUE,GACP,EAAiB,IACd,GACLT,EAAO,IAAI,WAAa,CACtB,IAAMO,EAAS,MAAOC,EAChBJ,EAAM,MAAOJ,EAAO,QAAQC,CAAS,EACrCS,EAAM,OAAOC,GAAY,SAAWA,EAAUA,EAAQJ,CAAM,EAElE,OADA,MAAOH,EAAIQ,EAAM,CAACF,CAAG,EACdH,CACT,CAAC"}
@@ -1,2 +1,2 @@
1
- import{IO as e,List as t}from"functype";const n=(t,r,i)=>{let a=n=>(a,o)=>e.sync(()=>{t.push({level:n,message:a,metadata:Object.keys(r).length>0||o?{...r,...o}:void 0,error:i,timestamp:new Date})});return{trace:a(`trace`),debug:a(`debug`),info:a(`info`),warn:a(`warn`),error:a(`error`),fatal:a(`fatal`),withError:e=>n(t,r,e),withContext:e=>n(t,{...r,...e},i),child:e=>n(t,{...r,...e},void 0)}},r=()=>{let e=[];return{logger:n(e,{}),entries:()=>t(e),clear:()=>{e.length=0},hasEntry:(t,n)=>e.some(e=>e.level===t&&(typeof n==`string`?e.message.includes(n):n.test(e.message)))}};export{r as createTestLogger};
1
+ import{IO as e,List as t}from"functype";const n=(t,r,i)=>{let a=n=>(a,o)=>e.sync(()=>{t.push({level:n,message:a,metadata:Object.keys(r).length>0||o?{...r,...o}:void 0,error:i,timestamp:/* @__PURE__ */ new Date})});return{trace:a(`trace`),debug:a(`debug`),info:a(`info`),warn:a(`warn`),error:a(`error`),fatal:a(`fatal`),withError:e=>n(t,r,e),withContext:e=>n(t,{...r,...e},i),child:e=>n(t,{...r,...e},void 0)}},r=()=>{let e=[];return{logger:n(e,{}),entries:()=>t(e),clear:()=>{e.length=0},hasEntry:(t,n)=>e.some(e=>e.level===t&&(typeof n==`string`?e.message.includes(n):n.test(e.message)))}};export{r as createTestLogger};
2
2
  //# sourceMappingURL=TestLogger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TestLogger.js","names":[],"sources":["../../src/testing/TestLogger.ts"],"sourcesContent":["import { IO, List } from \"functype\"\n\nimport type { LogEntry, Logger, LogLevel, LogMetadata } from \"../logger/Logger\"\n\nexport type TestLoggerHandle = {\n readonly logger: Logger\n readonly entries: () => List<LogEntry>\n readonly clear: () => void\n readonly hasEntry: (level: LogLevel, messagePattern: string | RegExp) => boolean\n}\n\nconst createLoggerFromStore = (store: LogEntry[], baseContext: LogMetadata, baseError?: Error): Logger => {\n const makeMethod =\n (level: LogLevel) =>\n (message: string, metadata?: LogMetadata): IO<never, never, void> =>\n IO.sync(() => {\n store.push({\n level,\n message,\n metadata: Object.keys(baseContext).length > 0 || metadata ? { ...baseContext, ...metadata } : undefined,\n error: baseError,\n timestamp: new Date(),\n })\n })\n\n return {\n trace: makeMethod(\"trace\"),\n debug: makeMethod(\"debug\"),\n info: makeMethod(\"info\"),\n warn: makeMethod(\"warn\"),\n error: makeMethod(\"error\"),\n fatal: makeMethod(\"fatal\"),\n withError: (err: Error) => createLoggerFromStore(store, baseContext, err),\n withContext: (ctx: LogMetadata) => createLoggerFromStore(store, { ...baseContext, ...ctx }, baseError),\n child: (ctx?: LogMetadata) => createLoggerFromStore(store, { ...baseContext, ...ctx }, undefined),\n }\n}\n\nexport const createTestLogger = (): TestLoggerHandle => {\n const store: LogEntry[] = []\n\n return {\n logger: createLoggerFromStore(store, {}),\n entries: () => List(store),\n clear: () => {\n store.length = 0\n },\n hasEntry: (level: LogLevel, messagePattern: string | RegExp) =>\n store.some(\n (e) =>\n e.level === level &&\n (typeof messagePattern === \"string\" ? e.message.includes(messagePattern) : messagePattern.test(e.message)),\n ),\n }\n}\n"],"mappings":"wCAWA,MAAM,GAAyB,EAAmB,EAA0B,IAA8B,CACxG,IAAM,EACH,IACA,EAAiB,IAChB,EAAG,SAAW,CACZ,EAAM,KAAK,CACT,QACA,UACA,SAAU,OAAO,KAAK,CAAW,CAAC,CAAC,OAAS,GAAK,EAAW,CAAE,GAAG,EAAa,GAAG,CAAS,EAAI,IAAA,GAC9F,MAAO,EACP,UAAW,IAAI,IACjB,CAAC,CACH,CAAC,EAEL,MAAO,CACL,MAAO,EAAW,OAAO,EACzB,MAAO,EAAW,OAAO,EACzB,KAAM,EAAW,MAAM,EACvB,KAAM,EAAW,MAAM,EACvB,MAAO,EAAW,OAAO,EACzB,MAAO,EAAW,OAAO,EACzB,UAAY,GAAe,EAAsB,EAAO,EAAa,CAAG,EACxE,YAAc,GAAqB,EAAsB,EAAO,CAAE,GAAG,EAAa,GAAG,CAAI,EAAG,CAAS,EACrG,MAAQ,GAAsB,EAAsB,EAAO,CAAE,GAAG,EAAa,GAAG,CAAI,EAAG,IAAA,EAAS,CAClG,CACF,EAEa,MAA2C,CACtD,IAAM,EAAoB,CAAC,EAE3B,MAAO,CACL,OAAQ,EAAsB,EAAO,CAAC,CAAC,EACvC,YAAe,EAAK,CAAK,EACzB,UAAa,CACX,EAAM,OAAS,CACjB,EACA,UAAW,EAAiB,IAC1B,EAAM,KACH,GACC,EAAE,QAAU,IACX,OAAO,GAAmB,SAAW,EAAE,QAAQ,SAAS,CAAc,EAAI,EAAe,KAAK,EAAE,OAAO,EAC5G,CACJ,CACF"}
1
+ {"version":3,"file":"TestLogger.js","names":["createLoggerFromStore","makeMethod","IO","store","baseContext","metadata","baseError","err","ctx","createTestLogger","List","level","messagePattern"],"sources":["../../src/testing/TestLogger.ts"],"sourcesContent":["import { IO, List } from \"functype\"\n\nimport type { LogEntry, Logger, LogLevel, LogMetadata } from \"../logger/Logger\"\n\nexport type TestLoggerHandle = {\n readonly logger: Logger\n readonly entries: () => List<LogEntry>\n readonly clear: () => void\n readonly hasEntry: (level: LogLevel, messagePattern: string | RegExp) => boolean\n}\n\nconst createLoggerFromStore = (store: LogEntry[], baseContext: LogMetadata, baseError?: Error): Logger => {\n const makeMethod =\n (level: LogLevel) =>\n (message: string, metadata?: LogMetadata): IO<never, never, void> =>\n IO.sync(() => {\n store.push({\n level,\n message,\n metadata: Object.keys(baseContext).length > 0 || metadata ? { ...baseContext, ...metadata } : undefined,\n error: baseError,\n timestamp: new Date(),\n })\n })\n\n return {\n trace: makeMethod(\"trace\"),\n debug: makeMethod(\"debug\"),\n info: makeMethod(\"info\"),\n warn: makeMethod(\"warn\"),\n error: makeMethod(\"error\"),\n fatal: makeMethod(\"fatal\"),\n withError: (err: Error) => createLoggerFromStore(store, baseContext, err),\n withContext: (ctx: LogMetadata) => createLoggerFromStore(store, { ...baseContext, ...ctx }, baseError),\n child: (ctx?: LogMetadata) => createLoggerFromStore(store, { ...baseContext, ...ctx }, undefined),\n }\n}\n\nexport const createTestLogger = (): TestLoggerHandle => {\n const store: LogEntry[] = []\n\n return {\n logger: createLoggerFromStore(store, {}),\n entries: () => List(store),\n clear: () => {\n store.length = 0\n },\n hasEntry: (level: LogLevel, messagePattern: string | RegExp) =>\n store.some(\n (e) =>\n e.level === level &&\n (typeof messagePattern === \"string\" ? e.message.includes(messagePattern) : messagePattern.test(e.message)),\n ),\n }\n}\n"],"mappings":"wCAWA,MAAMA,GAAyB,EAAmB,EAA0B,IAA8B,CACxG,IAAMC,EACH,IACA,EAAiB,IAChBC,EAAG,SAAW,CACZC,EAAM,KAAK,CACT,QACA,UACA,SAAU,OAAO,KAAKC,CAAW,CAAC,CAAC,OAAS,GAAKC,EAAW,CAAE,GAAGD,EAAa,GAAGC,CAAS,EAAI,IAAA,GAC9F,MAAOC,EACP,0BAAW,IAAI,IACjB,CAAC,CACH,CAAC,EAEL,MAAO,CACL,MAAOL,EAAW,OAAO,EACzB,MAAOA,EAAW,OAAO,EACzB,KAAMA,EAAW,MAAM,EACvB,KAAMA,EAAW,MAAM,EACvB,MAAOA,EAAW,OAAO,EACzB,MAAOA,EAAW,OAAO,EACzB,UAAY,GAAeD,EAAsBG,EAAOC,EAAaG,CAAG,EACxE,YAAc,GAAqBP,EAAsBG,EAAO,CAAE,GAAGC,EAAa,GAAGI,CAAI,EAAGF,CAAS,EACrG,MAAQ,GAAsBN,EAAsBG,EAAO,CAAE,GAAGC,EAAa,GAAGI,CAAI,EAAG,IAAA,EAAS,CAClG,CACF,EAEaC,MAA2C,CACtD,IAAMN,EAAoB,CAAC,EAE3B,MAAO,CACL,OAAQH,EAAsBG,EAAO,CAAC,CAAC,EACvC,YAAeO,EAAKP,CAAK,EACzB,UAAa,CACX,EAAM,OAAS,CACjB,EACA,UAAW,EAAiB,IAC1BA,EAAM,KACH,GACC,EAAE,QAAUQ,IACX,OAAOC,GAAmB,SAAW,EAAE,QAAQ,SAASA,CAAc,EAAIA,EAAe,KAAK,EAAE,OAAO,EAC5G,CACJ,CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "functype-log",
3
- "version": "1.9.0",
3
+ "version": "1.10.0",
4
4
  "description": "IO-native logging for functype — wraps LogLayer with Tag/Layer DI, structured logging, and test utilities",
5
5
  "keywords": [
6
6
  "functype",
@@ -29,10 +29,10 @@
29
29
  "loglayer": "^9.4.0"
30
30
  },
31
31
  "devDependencies": {
32
- "@types/node": "^24.13.3",
33
- "ts-builds": "^3.4.1",
34
- "tsdown": "^0.22.14",
35
- "functype": "^1.9.0"
32
+ "@types/node": "^24.19.0",
33
+ "functype": "^1.10.0",
34
+ "ts-builds": "^3.4.3",
35
+ "tsdown": "^0.23.0"
36
36
  },
37
37
  "type": "module",
38
38
  "main": "./dist/index.js",