logan-logger 1.1.3 → 1.1.7

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.
package/dist/index.d.ts CHANGED
@@ -1,403 +1,19 @@
1
- export declare abstract class BaseLogger implements ILogger {
2
- protected level: LogLevel;
3
- protected config: Partial<LoggerConfig>;
4
- protected runtime: RuntimeName;
5
- protected childMetadata: Record<string, any>;
6
- protected constructor(config?: Partial<LoggerConfig>);
7
- debug(message: LogMessage, metadata?: any): void;
8
- info(message: LogMessage, metadata?: any): void;
9
- warn(message: LogMessage, metadata?: any): void;
10
- error(message: LogMessage, metadata?: any): void;
11
- log(level: LogLevel, message: LogMessage, metadata?: any): void;
12
- setLevel(level: LogLevel): void;
13
- getLevel(): LogLevel;
14
- child(metadata: Record<string, any>): ILogger;
15
- protected shouldLog(level: LogLevel): boolean;
16
- protected abstract writeLog(entry: LogEntry): void;
17
- protected abstract createChild(): BaseLogger;
18
- }
19
-
20
- export declare class BrowserLogger extends BaseLogger {
21
- constructor(config?: Partial<LoggerConfig>);
22
- protected writeLog(entry: LogEntry): void;
23
- protected createChild(): BaseLogger;
24
- private formatMessage;
25
- private getConsoleStyle;
26
- private shouldLogInProduction;
27
- protected shouldLog(level: LogLevel): boolean;
28
- }
29
-
30
- export declare class ConsoleGroupLogger extends BrowserLogger {
31
- private groupStack;
32
- group(label: string): void;
33
- groupCollapsed(label: string): void;
34
- groupEnd(): void;
35
- getCurrentGroupStack(): string[];
36
- getCurrentGroupPath(): string;
37
- time(label: string): void;
38
- timeEnd(label: string): void;
39
- trace(message: string, metadata?: any): void;
40
- count(label?: string): void;
41
- countReset(label?: string): void;
42
- table(data: any): void;
43
- }
44
-
45
- /**
46
- * Convenience function for creating a logger instance.
47
- * @param config - Optional configuration for the logger
48
- * @returns A logger instance appropriate for the current runtime
49
- * @example
50
- * ```typescript
51
- * import { createLogger, LogLevel } from 'logan-logger';
52
- *
53
- * const logger = createLogger({
54
- * level: LogLevel.DEBUG,
55
- * colorize: true
56
- * });
57
- *
58
- * logger.info('Hello world!');
59
- * ```
60
- */
61
- export declare function createLogger(config?: Partial<LoggerConfig>): ILogger;
62
-
63
- /**
64
- * Create a logger with configuration based on the current environment.
65
- * Automatically detects production/development/test environments and
66
- * sets appropriate log levels and formatting.
67
- * @returns A logger instance configured for the current environment
68
- */
69
- export declare function createLoggerForEnvironment(): ILogger;
70
-
71
- /**
72
- * Detects the current JavaScript runtime environment and its capabilities.
73
- * @returns Information about the detected runtime
74
- * @example
75
- * ```typescript
76
- * const runtime = detectRuntime();
77
- * console.log(`Running on: ${runtime.name} ${runtime.version}`);
78
- * ```
79
- */
80
- export declare function detectRuntime(): RuntimeInfo;
81
-
82
- /**
83
- * Filter out sensitive data from an object before logging.
84
- * @param obj - The object to filter
85
- * @param sensitiveKeys - Array of key names to redact (case-insensitive)
86
- * @returns A new object with sensitive values replaced with '[REDACTED]'
87
- * @example
88
- * ```typescript
89
- * const data = { username: 'john', password: 'secret123' };
90
- * const filtered = filterSensitiveData(data);
91
- * // Result: { username: 'john', password: '[REDACTED]' }
92
- * ```
93
- */
94
- export declare function filterSensitiveData(obj: any, sensitiveKeys?: string[]): any;
95
-
96
- /**
97
- * Format log level as a colored string for terminal output.
98
- * @param level - The log level to format
99
- * @param colorize - Whether to apply ANSI color codes
100
- * @returns Formatted level string with optional colors
101
- */
102
- export declare function formatLevel(level: LogLevel, colorize?: boolean): string;
103
-
104
- /**
105
- * Format a log entry for output in different formats.
106
- * @param entry - The log entry to format
107
- * @param format - Output format ('json' or 'text')
108
- * @returns Formatted log string
109
- * @example
110
- * ```typescript
111
- * const entry: LogEntry = {
112
- * timestamp: new Date(),
113
- * level: LogLevel.INFO,
114
- * message: 'User logged in',
115
- * metadata: { userId: 123 },
116
- * runtime: 'node'
117
- * };
118
- *
119
- * const textFormat = formatLogEntry(entry, 'text');
120
- * // Result: "[2024-01-01T12:00:00.000Z] INFO: User logged in {\"userId\":123}"
121
- *
122
- * const jsonFormat = formatLogEntry(entry, 'json');
123
- * // Result: {"timestamp":"2024-01-01T12:00:00.000Z","level":"info","message":"User logged in","metadata":{"userId":123},"runtime":"node"}
124
- * ```
125
- */
126
- export declare function formatLogEntry(entry: LogEntry, format?: 'json' | 'text'): string;
127
-
128
- export declare function getDefaultConfig(): LoggerConfig;
129
-
130
- /**
131
- * Main logger interface providing methods for logging at different levels.
132
- * This interface is implemented by all logger implementations across different runtimes.
133
- */
134
- export declare interface ILogger {
135
- /**
136
- * Log a debug message. Only shown when log level is DEBUG.
137
- * @param message - The message to log (string or lazy function)
138
- * @param metadata - Optional structured data to include
139
- */
140
- debug(message: LogMessage, metadata?: any): void;
141
- /**
142
- * Log an informational message.
143
- * @param message - The message to log (string or lazy function)
144
- * @param metadata - Optional structured data to include
145
- */
146
- info(message: LogMessage, metadata?: any): void;
147
- /**
148
- * Log a warning message.
149
- * @param message - The message to log (string or lazy function)
150
- * @param metadata - Optional structured data to include
151
- */
152
- warn(message: LogMessage, metadata?: any): void;
153
- /**
154
- * Log an error message.
155
- * @param message - The message to log (string or lazy function)
156
- * @param metadata - Optional structured data to include
157
- */
158
- error(message: LogMessage, metadata?: any): void;
159
- /**
160
- * Log a message at a specific level.
161
- * @param level - The log level
162
- * @param message - The message to log (string or lazy function)
163
- * @param metadata - Optional structured data to include
164
- */
165
- log(level: LogLevel, message: LogMessage, metadata?: any): void;
166
- /**
167
- * Set the minimum log level for this logger.
168
- * @param level - The minimum log level
169
- */
170
- setLevel(level: LogLevel): void;
171
- /**
172
- * Get the current minimum log level.
173
- * @returns The current log level
174
- */
175
- getLevel(): LogLevel;
176
- /**
177
- * Create a child logger with additional metadata.
178
- * @param metadata - Additional metadata to include in all child log messages
179
- * @returns A new logger instance with the additional metadata
180
- */
181
- child(metadata: Record<string, any>): ILogger;
182
- }
183
-
184
- /**
185
- * Interface for logger adapters that handle the actual log output.
186
- * This abstraction allows different implementations for different runtimes.
187
- */
188
- export declare interface ILoggerAdapter {
189
- /**
190
- * Write a log entry to the output destination.
191
- * @param entry - The log entry to write
192
- */
193
- log(entry: LogEntry): void;
194
- /**
195
- * Set the minimum log level for this adapter.
196
- * @param level - The minimum log level
197
- */
198
- setLevel(level: LogLevel): void;
199
- /**
200
- * Get the current minimum log level.
201
- * @returns The current log level
202
- */
203
- getLevel(): LogLevel;
204
- }
205
-
206
- /**
207
- * Check if the current runtime is a browser.
208
- * @returns True if running in a browser
209
- */
210
- export declare function isBrowser(): boolean;
211
-
212
- /**
213
- * Check if the current runtime is Bun.
214
- * @returns True if running in Bun
215
- */
216
- export declare function isBun(): boolean;
217
-
218
- /**
219
- * Check if the current runtime is Deno.
220
- * @returns True if running in Deno
221
- */
222
- export declare function isDeno(): boolean;
223
-
224
- /**
225
- * Check if the current runtime is Node.js.
226
- * @returns True if running in Node.js
227
- */
228
- export declare function isNode(): boolean;
229
-
230
- export declare function loadConfigFromEnvironment(): Partial<LoggerConfig>;
231
-
232
- export declare function loadConfigFromFile(configPath?: string): Promise<Partial<LoggerConfig>>;
233
-
234
- export declare const log: {
235
- debug: (message: string, meta?: any) => void;
236
- info: (message: string, meta?: any) => void;
237
- warn: (message: string, meta?: any) => void;
238
- error: (message: string, meta?: any) => void;
239
- };
240
-
241
- /**
242
- * Internal representation of a log entry.
243
- */
244
- export declare interface LogEntry {
245
- /** When the log entry was created */
246
- timestamp: Date;
247
- /** Log level of this entry */
248
- level: LogLevel;
249
- /** The log message */
250
- message: string;
251
- /** Additional structured data */
252
- metadata?: Record<string, any>;
253
- /** Runtime that generated this log entry */
254
- runtime: RuntimeName;
255
- }
256
-
257
- export declare const logger: ILogger;
258
-
259
- /**
260
- * Configuration options for creating a logger instance.
261
- */
262
- export declare interface LoggerConfig {
263
- /** Minimum log level to output */
264
- level: LogLevel;
265
- /** Output format for log messages */
266
- format: 'json' | 'text' | 'custom';
267
- /** Whether to include timestamps in log output */
268
- timestamp: boolean;
269
- /** Whether to colorize log output (if supported) */
270
- colorize: boolean;
271
- /** Default metadata to include with all log messages */
272
- metadata: Record<string, any>;
273
- /** Transport configurations for log output */
274
- transports?: TransportConfig[];
275
- }
276
-
277
- /**
278
- * Factory class for creating logger instances based on the detected runtime.
279
- */
280
- export declare class LoggerFactory {
281
- /**
282
- * Create a logger instance appropriate for the current runtime.
283
- * @param config - Optional configuration for the logger
284
- * @returns A logger instance
285
- */
286
- static create(config?: Partial<LoggerConfig>): ILogger;
287
- /**
288
- * Create a child logger with additional metadata.
289
- * @param parent - The parent logger instance
290
- * @param metadata - Additional metadata to include in all child log messages
291
- * @returns A new logger instance with the additional metadata
292
- */
293
- static createChild(parent: ILogger, metadata: Record<string, any>): ILogger;
294
- private static mergeConfig;
295
- }
296
-
297
- /**
298
- * Log levels in ascending order of severity.
299
- * Used to filter which messages should be logged.
300
- */
301
- export declare enum LogLevel {
302
- /** Debug messages - most verbose */
303
- DEBUG = 0,
304
- /** Informational messages */
305
- INFO = 1,
306
- /** Warning messages */
307
- WARN = 2,
308
- /** Error messages */
309
- ERROR = 3,
310
- /** No messages - silent mode */
311
- SILENT = 4
312
- }
313
-
314
- /**
315
- * String representation of log levels.
316
- */
317
- export declare type LogLevelString = 'debug' | 'info' | 'warn' | 'error' | 'silent';
318
-
319
- export declare function logLevelToString(level: LogLevel): string;
320
-
321
- /**
322
- * A log message can be a string or a function that returns a string.
323
- * Functions enable lazy evaluation for expensive log message generation.
324
- */
325
- export declare type LogMessage = string | (() => string);
326
-
327
- export declare function mergeConfigs(...configs: Partial<LoggerConfig>[]): LoggerConfig;
328
-
329
- export declare class PerformanceLogger extends BrowserLogger {
330
- mark(name: string): void;
331
- measure(name: string, startMark?: string, endMark?: string): void;
332
- clearMarks(name?: string): void;
333
- clearMeasures(name?: string): void;
334
- }
335
-
336
- /**
337
- * Capabilities that a runtime may or may not support.
338
- */
339
- export declare interface RuntimeCapabilities {
340
- /** Whether the runtime supports file system operations */
341
- fileSystem: boolean;
342
- /** Whether the runtime supports colored console output */
343
- colorSupport: boolean;
344
- /** Whether the runtime provides process information */
345
- processInfo: boolean;
346
- /** Whether the runtime supports streams */
347
- streams: boolean;
348
- }
349
-
350
- /**
351
- * Information about the detected JavaScript runtime environment.
352
- */
353
- export declare interface RuntimeInfo {
354
- /** The name of the runtime */
355
- name: RuntimeName;
356
- /** Version string of the runtime (if available) */
357
- version?: string;
358
- /** Capabilities supported by this runtime */
359
- capabilities: RuntimeCapabilities;
360
- }
361
-
362
- /**
363
- * Supported JavaScript runtime environments.
364
- */
365
- export declare type RuntimeName = 'node' | 'deno' | 'bun' | 'browser' | 'webworker' | 'unknown';
366
-
367
- /**
368
- * Safely stringify an object to JSON, handling circular references,
369
- * Error objects, functions, and other non-serializable values.
370
- * @param obj - The object to stringify
371
- * @param space - Number of spaces for pretty-printing (optional)
372
- * @returns JSON string representation
373
- */
374
- export declare function safeStringify(obj: any, space?: number): string;
375
-
376
- /**
377
- * Serialize Error objects to plain objects for logging.
378
- * @param error - The error to serialize
379
- * @returns Serialized error object or original value if not an Error
380
- * @example
381
- * ```typescript
382
- * const error = new Error('Something went wrong');
383
- * const serialized = serializeError(error);
384
- * // Result: { name: 'Error', message: 'Something went wrong', stack: '...' }
385
- * ```
386
- */
387
- export declare function serializeError(error: any): any;
388
-
389
- export declare function stringToLogLevel(level: string): LogLevel;
390
-
391
- /**
392
- * Configuration for a specific log transport (output destination).
393
- */
394
- export declare interface TransportConfig {
395
- /** Type of transport */
396
- type: 'console' | 'file' | 'http' | 'custom';
397
- /** Minimum log level for this transport */
398
- level?: LogLevel;
399
- /** Transport-specific options */
400
- options: Record<string, any>;
401
- }
402
-
403
- export { }
1
+ import { createLogger, createLoggerForEnvironment } from './core/factory';
2
+ import { LogLevel, ILogger } from './core/types';
3
+ export * from './core/types';
4
+ export * from './core/logger';
5
+ export * from './core/factory';
6
+ export { BrowserLogger, ConsoleGroupLogger, PerformanceLogger } from './runtime/browser';
7
+ export * from './utils/runtime';
8
+ export * from './utils/config';
9
+ export * from './utils/serialization';
10
+ export * from './utils/formatting';
11
+ export declare const logger: ILogger;
12
+ export declare const log: {
13
+ debug: (message: string, meta?: any) => void;
14
+ info: (message: string, meta?: any) => void;
15
+ warn: (message: string, meta?: any) => void;
16
+ error: (message: string, meta?: any) => void;
17
+ };
18
+ export { createLogger, createLoggerForEnvironment, LogLevel };
19
+ export type { ILogger, LoggerConfig, RuntimeInfo, RuntimeCapabilities, LogEntry, LogMessage, LogLevelString, RuntimeName, TransportConfig, ILoggerAdapter } from './core/types';
package/dist/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { g as i, B as f, C as L, L as l, P as m, d as c, f as d, a as v, c as p, b as u, i as C, s as B, e as F } from "./browser-C6UkWymL.mjs";
2
- import { a } from "./node-cR0agAz0.mjs";
3
- import { L as w, c as x, g as E, l as y, b as D, d as S, m as P, s as T } from "./node-cR0agAz0.mjs";
2
+ import { a } from "./node-D140bib-.mjs";
3
+ import { L as w, c as x, g as E, l as y, b as D, d as S, m as P, s as T } from "./node-D140bib-.mjs";
4
4
  import { a as G, f as N } from "./formatting-BZyid6rr.mjs";
5
5
  const r = a(), g = {
6
6
  debug: (e, o) => r.debug(e, o),
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./browser-BzeNXjes.js"),o=require("./node-BO4IXArm.js"),t=require("./formatting-BDuKuXIh.js"),n=o.createLoggerForEnvironment(),i={debug:(r,g)=>n.debug(r,g),info:(r,g)=>n.info(r,g),warn:(r,g)=>n.warn(r,g),error:(r,g)=>n.error(r,g)};exports.BaseLogger=e.BaseLogger;exports.BrowserLogger=e.BrowserLogger;exports.ConsoleGroupLogger=e.ConsoleGroupLogger;exports.LogLevel=e.LogLevel;exports.PerformanceLogger=e.PerformanceLogger;exports.detectRuntime=e.detectRuntime;exports.filterSensitiveData=e.filterSensitiveData;exports.isBrowser=e.isBrowser;exports.isBun=e.isBun;exports.isDeno=e.isDeno;exports.isNode=e.isNode;exports.safeStringify=e.safeStringify;exports.serializeError=e.serializeError;exports.LoggerFactory=o.LoggerFactory;exports.createLogger=o.createLogger;exports.createLoggerForEnvironment=o.createLoggerForEnvironment;exports.getDefaultConfig=o.getDefaultConfig;exports.loadConfigFromEnvironment=o.loadConfigFromEnvironment;exports.loadConfigFromFile=o.loadConfigFromFile;exports.logLevelToString=o.logLevelToString;exports.mergeConfigs=o.mergeConfigs;exports.stringToLogLevel=o.stringToLogLevel;exports.formatLevel=t.formatLevel;exports.formatLogEntry=t.formatLogEntry;exports.log=i;exports.logger=n;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./browser-BzeNXjes.js"),o=require("./node-C009y7d7.js"),t=require("./formatting-BDuKuXIh.js"),n=o.createLoggerForEnvironment(),i={debug:(r,g)=>n.debug(r,g),info:(r,g)=>n.info(r,g),warn:(r,g)=>n.warn(r,g),error:(r,g)=>n.error(r,g)};exports.BaseLogger=e.BaseLogger;exports.BrowserLogger=e.BrowserLogger;exports.ConsoleGroupLogger=e.ConsoleGroupLogger;exports.LogLevel=e.LogLevel;exports.PerformanceLogger=e.PerformanceLogger;exports.detectRuntime=e.detectRuntime;exports.filterSensitiveData=e.filterSensitiveData;exports.isBrowser=e.isBrowser;exports.isBun=e.isBun;exports.isDeno=e.isDeno;exports.isNode=e.isNode;exports.safeStringify=e.safeStringify;exports.serializeError=e.serializeError;exports.LoggerFactory=o.LoggerFactory;exports.createLogger=o.createLogger;exports.createLoggerForEnvironment=o.createLoggerForEnvironment;exports.getDefaultConfig=o.getDefaultConfig;exports.loadConfigFromEnvironment=o.loadConfigFromEnvironment;exports.loadConfigFromFile=o.loadConfigFromFile;exports.logLevelToString=o.logLevelToString;exports.mergeConfigs=o.mergeConfigs;exports.stringToLogLevel=o.stringToLogLevel;exports.formatLevel=t.formatLevel;exports.formatLogEntry=t.formatLogEntry;exports.log=i;exports.logger=n;
@@ -1 +1 @@
1
- "use strict";var p=Object.create;var g=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var h=(t,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of O(e))!N.call(t,s)&&s!==o&&g(t,s,{get:()=>e[s],enumerable:!(n=w(e,s))||n.enumerable});return t};var R=(t,e,o)=>(o=t!=null?p(E(t)):{},h(e||!t||!t.__esModule?g(o,"default",{value:t,enumerable:!0}):o,t));const r=require("./browser-BzeNXjes.js");class i extends r.BaseLogger{constructor(e={}){super(e),this.initializeWinston()}async initializeWinston(){try{const e=await import("winston");this.winston=this.createWinstonLogger(e)}catch{console.warn("[logan-logger] Winston not found, falling back to console logging")}}createWinstonLogger(e){const o=e.format.combine(e.format.timestamp({format:"YYYY-MM-DD HH:mm:ss"}),e.format.errors({stack:!0}),e.format.json(),e.format.prettyPrint()),n=e.format.combine(e.format.colorize(),e.format.timestamp({format:"HH:mm:ss"}),e.format.printf(({timestamp:a,level:m,message:d,...l})=>{const v=Object.keys(l).length?JSON.stringify(l,null,2):"";return`${a} [${m}]: ${d} ${v}`})),s=e.createLogger({level:this.getWinstonLevel(this.level),format:o,transports:[new e.transports.Console({format:process.env.NODE_ENV==="production"?o:n})]});return process.env.NODE_ENV==="production"&&(s.add(new e.transports.File({filename:"logs/error.log",level:"error",maxsize:5242880,maxFiles:5})),s.add(new e.transports.File({filename:"logs/combined.log",maxsize:5242880,maxFiles:10}))),s}writeLog(e){this.winston?this.winston.log({level:this.getWinstonLevel(e.level),message:e.message,timestamp:e.timestamp,...e.metadata}):this.writeToConsole(e)}createChild(){return new i(this.config)}writeToConsole(e){const o=e.timestamp.toISOString(),n=r.LogLevel[e.level].toLowerCase(),s=e.metadata?` ${r.safeStringify(e.metadata)}`:"",a=`[${o}] ${n.toUpperCase()}: ${e.message}${s}`;switch(e.level){case r.LogLevel.DEBUG:console.debug(a);break;case r.LogLevel.INFO:console.info(a);break;case r.LogLevel.WARN:console.warn(a);break;case r.LogLevel.ERROR:console.error(a);break}}getWinstonLevel(e){switch(e){case r.LogLevel.DEBUG:return"debug";case r.LogLevel.INFO:return"info";case r.LogLevel.WARN:return"warn";case r.LogLevel.ERROR:return"error";default:return"info"}}setLevel(e){super.setLevel(e),this.winston&&(this.winston.level=this.getWinstonLevel(e))}}function F(t){return{write:e=>{t.info(e.trim())}}}function c(){const t=r.detectRuntime();return{level:r.LogLevel.INFO,format:"text",timestamp:!0,colorize:t.capabilities.colorSupport,metadata:{},transports:[{type:"console",options:{}}]}}function C(){const t={};if(typeof process<"u"&&process.env){const e=process.env;e.LOG_LEVEL&&(t.level=W(e.LOG_LEVEL)),e.LOG_FORMAT&&["json","text"].includes(e.LOG_FORMAT)&&(t.format=e.LOG_FORMAT),e.LOG_TIMESTAMP&&(t.timestamp=e.LOG_TIMESTAMP.toLowerCase()==="true"),e.LOG_COLOR&&(t.colorize=e.LOG_COLOR.toLowerCase()==="true")}return t}async function b(t){const e=r.detectRuntime();if(!e.capabilities.fileSystem)return{};const o=t?[t]:["logan.config.json","logan.config.js",".loganrc","package.json"];for(const n of o)try{if(e.name==="node")return await u(n);if(e.name==="deno")return await T(n);if(e.name==="bun")return await S(n)}catch{}return{}}async function u(t){try{const e=await Promise.resolve().then(()=>require("./__vite-browser-external-BcPniuRQ.js")),o=await Promise.resolve().then(()=>require("./__vite-browser-external-BcPniuRQ.js"));if(t.endsWith(".json")){const n=await e.readFile(t,"utf-8"),s=JSON.parse(n);return t==="package.json"?s.logan||{}:s}else if(t.endsWith(".js")){const n=o.resolve(t);delete require.cache[n];const s=require(n);return s.default||s}}catch{}return{}}async function T(t){try{if(t.endsWith(".json")){const e=await globalThis.Deno.readTextFile(t),o=JSON.parse(e);return t==="package.json"?o.logan||{}:o}else if(t.endsWith(".js")){const e=await import(`./${t}`);return e.default||e}}catch{}return{}}async function S(t){return u(t)}function W(t){switch(t.toLowerCase()){case"debug":return r.LogLevel.DEBUG;case"info":return r.LogLevel.INFO;case"warn":case"warning":return r.LogLevel.WARN;case"error":return r.LogLevel.ERROR;case"silent":case"none":return r.LogLevel.SILENT;default:return r.LogLevel.INFO}}function _(...t){const e=c();return t.reduce((o,n)=>({...o,...n,metadata:{...o.metadata,...n.metadata},transports:n.transports||o.transports}),e)}class L{static create(e={}){const o=r.detectRuntime(),n=this.mergeConfig(e);switch(o.name){case"node":return new i(n);case"deno":return new r.BrowserLogger(n);case"bun":return new i(n);case"browser":case"webworker":return new r.BrowserLogger(n);default:return new r.BrowserLogger(n)}}static createChild(e,o){return e.child(o)}static mergeConfig(e){const o=c();return{...o,...e,metadata:{...o.metadata,...e.metadata}}}}function f(t){return L.create(t)}function I(){const t=D(),e={level:G(t),colorize:t!=="production",timestamp:!0,format:t==="production"?"json":"text"};return f(e)}function D(){return typeof process<"u"&&process.env?process.env.NODE_ENV||process.env.NEXT_PUBLIC_APP_ENV||process.env.ENVIRONMENT||"development":typeof window<"u"&&globalThis.__ENV__||"development"}function G(t){switch(t){case"production":return r.LogLevel.ERROR;case"staging":case"test":return r.LogLevel.WARN;case"development":case"dev":return r.LogLevel.DEBUG;default:return r.LogLevel.INFO}}function j(t){switch(t.toLowerCase()){case"debug":return r.LogLevel.DEBUG;case"info":return r.LogLevel.INFO;case"warn":case"warning":return r.LogLevel.WARN;case"error":return r.LogLevel.ERROR;case"silent":case"none":return r.LogLevel.SILENT;default:return r.LogLevel.INFO}}function M(t){switch(t){case r.LogLevel.DEBUG:return"debug";case r.LogLevel.INFO:return"info";case r.LogLevel.WARN:return"warn";case r.LogLevel.ERROR:return"error";case r.LogLevel.SILENT:return"silent";default:return"info"}}exports.LoggerFactory=L;exports.NodeLogger=i;exports.createLogger=f;exports.createLoggerForEnvironment=I;exports.createMorganStream=F;exports.getDefaultConfig=c;exports.loadConfigFromEnvironment=C;exports.loadConfigFromFile=b;exports.logLevelToString=M;exports.mergeConfigs=_;exports.stringToLogLevel=j;
1
+ "use strict";var p=Object.create;var g=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var h=(t,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of O(e))!N.call(t,s)&&s!==o&&g(t,s,{get:()=>e[s],enumerable:!(n=w(e,s))||n.enumerable});return t};var R=(t,e,o)=>(o=t!=null?p(E(t)):{},h(e||!t||!t.__esModule?g(o,"default",{value:t,enumerable:!0}):o,t));const r=require("./browser-BzeNXjes.js");class i extends r.BaseLogger{constructor(e={}){super(e),this.initializeWinston()}async initializeWinston(){try{const e=await import("winston");this.winston=this.createWinstonLogger(e)}catch{console.warn("[logan-logger] Winston not found, falling back to console logging")}}createWinstonLogger(e){const o=e.format.combine(e.format.timestamp({format:"YYYY-MM-DD HH:mm:ss"}),e.format.errors({stack:!0}),e.format.json(),e.format.prettyPrint()),n=e.format.combine(e.format.colorize(),e.format.timestamp({format:"HH:mm:ss"}),e.format.printf(({timestamp:a,level:m,message:d,...l})=>{const v=Object.keys(l).length?JSON.stringify(l,null,2):"";return`${a} [${m}]: ${d} ${v}`})),s=e.createLogger({level:this.getWinstonLevel(this.level),format:o,transports:[new e.transports.Console({format:process.env.NODE_ENV==="production"?o:n})]});return process.env.NODE_ENV==="production"&&(s.add(new e.transports.File({filename:"logs/error.log",level:"error",maxsize:5242880,maxFiles:5})),s.add(new e.transports.File({filename:"logs/combined.log",maxsize:5242880,maxFiles:10}))),s}writeLog(e){this.winston?this.winston.log({level:this.getWinstonLevel(e.level),message:e.message,timestamp:e.timestamp,...e.metadata}):this.writeToConsole(e)}createChild(){return new i(this.config)}writeToConsole(e){const o=e.timestamp.toISOString(),n=r.LogLevel[e.level].toLowerCase(),s=e.metadata?` ${r.safeStringify(e.metadata)}`:"",a=`[${o}] ${n.toUpperCase()}: ${e.message}${s}`;switch(e.level){case r.LogLevel.DEBUG:console.debug(a);break;case r.LogLevel.INFO:console.info(a);break;case r.LogLevel.WARN:console.warn(a);break;case r.LogLevel.ERROR:console.error(a);break}}getWinstonLevel(e){switch(e){case r.LogLevel.DEBUG:return"debug";case r.LogLevel.INFO:return"info";case r.LogLevel.WARN:return"warn";case r.LogLevel.ERROR:return"error";default:return"info"}}setLevel(e){super.setLevel(e),this.winston&&(this.winston.level=this.getWinstonLevel(e))}}function F(t){return{write:e=>{t.info(e.trim())}}}function c(){const t=r.detectRuntime();return{level:r.LogLevel.INFO,format:"text",timestamp:!0,colorize:t.capabilities.colorSupport,metadata:{},transports:[{type:"console",options:{}}]}}function C(){const t={};if(typeof process<"u"&&process.env){const e=process.env;e.LOG_LEVEL&&(t.level=W(e.LOG_LEVEL)),e.LOG_FORMAT&&["json","text"].includes(e.LOG_FORMAT)&&(t.format=e.LOG_FORMAT),e.LOG_TIMESTAMP&&(t.timestamp=e.LOG_TIMESTAMP.toLowerCase()==="true"),e.LOG_COLOR&&(t.colorize=e.LOG_COLOR.toLowerCase()==="true")}return t}async function b(t){const e=r.detectRuntime();if(!e.capabilities.fileSystem)return{};const o=t?[t]:["logan.config.json","logan.config.js",".loganrc","package.json"];for(const n of o)try{if(e.name==="node")return await u(n);if(e.name==="deno")return await T(n);if(e.name==="bun")return await S(n)}catch{}return{}}async function u(t){try{const e=await Promise.resolve().then(()=>require("./__vite-browser-external-BcPniuRQ.js")),o=await Promise.resolve().then(()=>require("./__vite-browser-external-BcPniuRQ.js"));if(t.endsWith(".json")){const n=await e.readFile(t,"utf-8"),s=JSON.parse(n);return t==="package.json"?s.logan||{}:s}else if(t.endsWith(".js")){const a=await import(`file://${o.resolve(t)}`);return a.default||a}}catch{}return{}}async function T(t){try{if(t.endsWith(".json")){const e=await globalThis.Deno.readTextFile(t),o=JSON.parse(e);return t==="package.json"?o.logan||{}:o}else if(t.endsWith(".js")){const e=await import(`./${t}`);return e.default||e}}catch{}return{}}async function S(t){return u(t)}function W(t){switch(t.toLowerCase()){case"debug":return r.LogLevel.DEBUG;case"info":return r.LogLevel.INFO;case"warn":case"warning":return r.LogLevel.WARN;case"error":return r.LogLevel.ERROR;case"silent":case"none":return r.LogLevel.SILENT;default:return r.LogLevel.INFO}}function _(...t){const e=c();return t.reduce((o,n)=>({...o,...n,metadata:{...o.metadata,...n.metadata},transports:n.transports||o.transports}),e)}class L{static create(e={}){const o=r.detectRuntime(),n=this.mergeConfig(e);switch(o.name){case"node":return new i(n);case"deno":return new r.BrowserLogger(n);case"bun":return new i(n);case"browser":case"webworker":return new r.BrowserLogger(n);default:return new r.BrowserLogger(n)}}static createChild(e,o){return e.child(o)}static mergeConfig(e){const o=c();return{...o,...e,metadata:{...o.metadata,...e.metadata}}}}function f(t){return L.create(t)}function I(){const t=D(),e={level:G(t),colorize:t!=="production",timestamp:!0,format:t==="production"?"json":"text"};return f(e)}function D(){return typeof process<"u"&&process.env?process.env.NODE_ENV||process.env.NEXT_PUBLIC_APP_ENV||process.env.ENVIRONMENT||"development":typeof window<"u"&&globalThis.__ENV__||"development"}function G(t){switch(t){case"production":return r.LogLevel.ERROR;case"staging":case"test":return r.LogLevel.WARN;case"development":case"dev":return r.LogLevel.DEBUG;default:return r.LogLevel.INFO}}function j(t){switch(t.toLowerCase()){case"debug":return r.LogLevel.DEBUG;case"info":return r.LogLevel.INFO;case"warn":case"warning":return r.LogLevel.WARN;case"error":return r.LogLevel.ERROR;case"silent":case"none":return r.LogLevel.SILENT;default:return r.LogLevel.INFO}}function M(t){switch(t){case r.LogLevel.DEBUG:return"debug";case r.LogLevel.INFO:return"info";case r.LogLevel.WARN:return"warn";case r.LogLevel.ERROR:return"error";case r.LogLevel.SILENT:return"silent";default:return"info"}}exports.LoggerFactory=L;exports.NodeLogger=i;exports.createLogger=f;exports.createLoggerForEnvironment=I;exports.createMorganStream=F;exports.getDefaultConfig=c;exports.loadConfigFromEnvironment=C;exports.loadConfigFromFile=b;exports.logLevelToString=M;exports.mergeConfigs=_;exports.stringToLogLevel=j;
@@ -1,4 +1,4 @@
1
- import { g as L, L as r, s as v, d as l, B as c } from "./browser-C6UkWymL.mjs";
1
+ import { g as L, L as r, s as w, d as l, B as c } from "./browser-C6UkWymL.mjs";
2
2
  class i extends L {
3
3
  constructor(e = {}) {
4
4
  super(e), this.initializeWinston();
@@ -20,9 +20,9 @@ class i extends L {
20
20
  ), o = e.format.combine(
21
21
  e.format.colorize(),
22
22
  e.format.timestamp({ format: "HH:mm:ss" }),
23
- e.format.printf(({ timestamp: a, level: m, message: d, ...u }) => {
23
+ e.format.printf(({ timestamp: a, level: g, message: d, ...u }) => {
24
24
  const p = Object.keys(u).length ? JSON.stringify(u, null, 2) : "";
25
- return `${a} [${m}]: ${d} ${p}`;
25
+ return `${a} [${g}]: ${d} ${p}`;
26
26
  })
27
27
  ), s = e.createLogger({
28
28
  level: this.getWinstonLevel(this.level),
@@ -62,7 +62,7 @@ class i extends L {
62
62
  return new i(this.config);
63
63
  }
64
64
  writeToConsole(e) {
65
- const n = e.timestamp.toISOString(), o = r[e.level].toLowerCase(), s = e.metadata ? ` ${v(e.metadata)}` : "", a = `[${n}] ${o.toUpperCase()}: ${e.message}${s}`;
65
+ const n = e.timestamp.toISOString(), o = r[e.level].toLowerCase(), s = e.metadata ? ` ${w(e.metadata)}` : "", a = `[${n}] ${o.toUpperCase()}: ${e.message}${s}`;
66
66
  switch (e.level) {
67
67
  case r.DEBUG:
68
68
  console.debug(a);
@@ -141,32 +141,30 @@ async function W(t) {
141
141
  for (const o of n)
142
142
  try {
143
143
  if (e.name === "node")
144
- return await g(o);
144
+ return await m(o);
145
145
  if (e.name === "deno")
146
- return await w(o);
146
+ return await v(o);
147
147
  if (e.name === "bun")
148
148
  return await O(o);
149
149
  } catch {
150
150
  }
151
151
  return {};
152
152
  }
153
- async function g(t) {
153
+ async function m(t) {
154
154
  try {
155
155
  const e = await import("./__vite-browser-external-DYxpcVy9.mjs"), n = await import("./__vite-browser-external-DYxpcVy9.mjs");
156
156
  if (t.endsWith(".json")) {
157
157
  const o = await e.readFile(t, "utf-8"), s = JSON.parse(o);
158
158
  return t === "package.json" ? s.logan || {} : s;
159
159
  } else if (t.endsWith(".js")) {
160
- const o = n.resolve(t);
161
- delete require.cache[o];
162
- const s = require(o);
163
- return s.default || s;
160
+ const a = await import(`file://${n.resolve(t)}`);
161
+ return a.default || a;
164
162
  }
165
163
  } catch {
166
164
  }
167
165
  return {};
168
166
  }
169
- async function w(t) {
167
+ async function v(t) {
170
168
  try {
171
169
  if (t.endsWith(".json")) {
172
170
  const e = await globalThis.Deno.readTextFile(t), n = JSON.parse(e);
@@ -183,7 +181,7 @@ async function w(t) {
183
181
  return {};
184
182
  }
185
183
  async function O(t) {
186
- return g(t);
184
+ return m(t);
187
185
  }
188
186
  function E(t) {
189
187
  switch (t.toLowerCase()) {