logan-logger 1.1.10 → 1.1.12

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
- "use strict";var n=(t=>(t[t.DEBUG=0]="DEBUG",t[t.INFO=1]="INFO",t[t.WARN=2]="WARN",t[t.ERROR=3]="ERROR",t[t.SILENT=4]="SILENT",t))(n||{});function f(){const t=c(),e=m(t),o=g(t);return{name:t,version:e,capabilities:o}}function c(){return typeof globalThis.Deno<"u"?"deno":typeof globalThis.Bun<"u"?"bun":typeof window<"u"&&typeof document<"u"?"browser":typeof globalThis.importScripts=="function"&&typeof window>"u"?"webworker":typeof process<"u"&&process.versions&&process.versions.node?"node":"unknown"}function m(t){switch(t){case"node":return typeof process<"u"?process.version:void 0;case"deno":return typeof globalThis.Deno<"u"?globalThis.Deno.version?.deno:void 0;case"bun":return typeof globalThis.Bun<"u"?globalThis.Bun.version:void 0;case"browser":return typeof navigator<"u"?navigator.userAgent:void 0;default:return}}function g(t){switch(t){case"node":return{fileSystem:!0,colorSupport:!0,processInfo:!0,streams:!0};case"deno":return{fileSystem:!0,colorSupport:!0,processInfo:!0,streams:!0};case"bun":return{fileSystem:!0,colorSupport:!0,processInfo:!0,streams:!0};case"browser":return{fileSystem:!1,colorSupport:!0,processInfo:!1,streams:!1};case"webworker":return{fileSystem:!1,colorSupport:!1,processInfo:!1,streams:!1};default:return{fileSystem:!1,colorSupport:!1,processInfo:!1,streams:!1}}}function h(){return c()==="node"}function y(){return c()==="browser"}function b(){return c()==="deno"}function w(){return c()==="bun"}class l{constructor(e={}){this.childMetadata={},this.config=e,this.level=e.level??n.INFO,this.runtime=f().name}debug(e,o){this.log(n.DEBUG,e,o)}info(e,o){this.log(n.INFO,e,o)}warn(e,o){this.log(n.WARN,e,o)}error(e,o){this.log(n.ERROR,e,o)}log(e,o,s){if(!this.shouldLog(e))return;const r=typeof o=="function"?o():o,i={...this.childMetadata,...s},a={timestamp:new Date,level:e,message:r,metadata:Object.keys(i).length>0?i:void 0,runtime:this.runtime};this.writeLog(a)}setLevel(e){this.level=e}getLevel(){return this.level}child(e){const o=this.createChild();return o.childMetadata={...this.childMetadata,...e},o}shouldLog(e){return e>=this.level}}function d(t,e){const o=new WeakSet;return JSON.stringify(t,(s,r)=>{if(typeof r=="object"&&r!==null){if(o.has(r))return"[Circular]";o.add(r)}return r instanceof Error?{name:r.name,message:r.message,stack:r.stack,...Object.getOwnPropertyNames(r).reduce((i,a)=>(a!=="name"&&a!=="message"&&a!=="stack"&&(i[a]=r[a]),i),{})}:typeof r=="function"?`[Function: ${r.name||"anonymous"}]`:r===void 0?"[undefined]":typeof r=="bigint"?`[BigInt: ${r.toString()}]`:typeof r=="symbol"?`[Symbol: ${r.toString()}]`:r},e)}function p(t,e=["password","token","secret","key","auth"]){if(typeof t!="object"||t===null)return t;const o=Array.isArray(t)?[]:{};for(const[s,r]of Object.entries(t))e.some(a=>s.toLowerCase().includes(a.toLowerCase()))?o[s]="[REDACTED]":typeof r=="object"&&r!==null?o[s]=p(r,e):o[s]=r;return o}function S(t){return t instanceof Error?{name:t.name,message:t.message,stack:t.stack,...t}:t}class u extends l{constructor(e={}){super(e)}writeLog(e){const o=this.formatMessage(e),s=this.getConsoleStyle(e.level),r=e.metadata?` ${d(e.metadata)}`:"",i=`%c${o}${r}`;switch(e.level){case n.DEBUG:console.debug?console.debug(i,s):console.log(i,s);break;case n.INFO:console.info(i,s);break;case n.WARN:console.warn(i,s);break;case n.ERROR:console.error(i,s);break}}createChild(){return new u(this.config)}formatMessage(e){const o=e.timestamp.toISOString(),s=n[e.level].toUpperCase();return`[${o}] ${s}: ${e.message}`}getConsoleStyle(e){if(!this.config.colorize)return"";switch(e){case n.DEBUG:return"color: #888; font-weight: normal;";case n.INFO:return"color: #007acc; font-weight: normal;";case n.WARN:return"color: #ff8c00; font-weight: bold;";case n.ERROR:return"color: #dc3545; font-weight: bold;";default:return""}}shouldLogInProduction(){return(globalThis.process?.env?.NODE_ENV||globalThis.process?.env?.NEXT_PUBLIC_APP_ENV||"development")!=="production"||this.level<=n.ERROR}shouldLog(e){return!this.shouldLogInProduction()&&e<n.ERROR?!1:super.shouldLog(e)}}class R extends u{constructor(){super(...arguments),this.groupStack=[]}group(e){console.group(e),this.groupStack.push(e)}groupCollapsed(e){console.groupCollapsed(e),this.groupStack.push(e)}groupEnd(){console.groupEnd(),this.groupStack.pop()}getCurrentGroupStack(){return[...this.groupStack]}getCurrentGroupPath(){return this.groupStack.join(" > ")}time(e){console.time(e)}timeEnd(e){console.timeEnd(e)}trace(e,o){console.trace(e,o)}count(e){console.count(e)}countReset(e){console.countReset(e)}table(e){console.table(e)}}class k extends u{mark(e){typeof performance<"u"&&performance.mark&&performance.mark(e)}measure(e,o,s){if(typeof performance<"u"&&performance.measure)try{performance.measure(e,o,s);const r=performance.getEntriesByName(e,"measure");if(r.length>0){const i=r[r.length-1];this.info(`Performance: ${e}`,{duration:i.duration,startTime:i.startTime})}}catch(r){this.warn("Failed to measure performance",{name:e,error:r})}}clearMarks(e){typeof performance<"u"&&performance.clearMarks&&performance.clearMarks(e)}clearMeasures(e){typeof performance<"u"&&performance.clearMeasures&&performance.clearMeasures(e)}}exports.BaseLogger=l;exports.BrowserLogger=u;exports.ConsoleGroupLogger=R;exports.LogLevel=n;exports.PerformanceLogger=k;exports.detectRuntime=f;exports.filterSensitiveData=p;exports.isBrowser=y;exports.isBun=w;exports.isDeno=b;exports.isNode=h;exports.safeStringify=d;exports.serializeError=S;
1
+ "use strict";function f(){const t=c(),e=m(t),o=g(t);return{name:t,version:e,capabilities:o}}function c(){return typeof globalThis.Deno<"u"?"deno":typeof globalThis.Bun<"u"?"bun":typeof window<"u"&&typeof document<"u"?"browser":typeof globalThis.importScripts=="function"&&typeof window>"u"?"webworker":typeof process<"u"&&process.versions&&process.versions.node?"node":"unknown"}function m(t){switch(t){case"node":return typeof process<"u"?process.version:void 0;case"deno":return typeof globalThis.Deno<"u"?globalThis.Deno.version?.deno:void 0;case"bun":return typeof globalThis.Bun<"u"?globalThis.Bun.version:void 0;case"browser":return typeof navigator<"u"?navigator.userAgent:void 0;default:return}}function g(t){switch(t){case"node":return{fileSystem:!0,colorSupport:!0,processInfo:!0,streams:!0};case"deno":return{fileSystem:!0,colorSupport:!0,processInfo:!0,streams:!0};case"bun":return{fileSystem:!0,colorSupport:!0,processInfo:!0,streams:!0};case"browser":return{fileSystem:!1,colorSupport:!0,processInfo:!1,streams:!1};case"webworker":return{fileSystem:!1,colorSupport:!1,processInfo:!1,streams:!1};default:return{fileSystem:!1,colorSupport:!1,processInfo:!1,streams:!1}}}function h(){return c()==="node"}function y(){return c()==="browser"}function b(){return c()==="deno"}function w(){return c()==="bun"}var n=(t=>(t[t.DEBUG=0]="DEBUG",t[t.INFO=1]="INFO",t[t.WARN=2]="WARN",t[t.ERROR=3]="ERROR",t[t.SILENT=4]="SILENT",t))(n||{});class l{constructor(e={}){this.childMetadata={},this.config=e,this.level=e.level??n.INFO,this.runtime=f().name}debug(e,o){this.log(n.DEBUG,e,o)}info(e,o){this.log(n.INFO,e,o)}warn(e,o){this.log(n.WARN,e,o)}error(e,o){this.log(n.ERROR,e,o)}log(e,o,s){if(!this.shouldLog(e))return;const r=typeof o=="function"?o():o,i={...this.childMetadata,...s},a={timestamp:new Date,level:e,message:r,metadata:Object.keys(i).length>0?i:void 0,runtime:this.runtime};this.writeLog(a)}setLevel(e){this.level=e}getLevel(){return this.level}child(e){const o=this.createChild();return o.childMetadata={...this.childMetadata,...e},o}shouldLog(e){return e>=this.level}}function d(t,e){const o=new WeakSet;return JSON.stringify(t,(s,r)=>{if(typeof r=="object"&&r!==null){if(o.has(r))return"[Circular]";o.add(r)}return r instanceof Error?{name:r.name,message:r.message,stack:r.stack,...Object.getOwnPropertyNames(r).reduce((i,a)=>(a!=="name"&&a!=="message"&&a!=="stack"&&(i[a]=r[a]),i),{})}:typeof r=="function"?`[Function: ${r.name||"anonymous"}]`:r===void 0?"[undefined]":typeof r=="bigint"?`[BigInt: ${r.toString()}]`:typeof r=="symbol"?`[Symbol: ${r.toString()}]`:r},e)}function p(t,e=["password","token","secret","key","auth"]){if(typeof t!="object"||t===null)return t;const o=Array.isArray(t)?[]:{};for(const[s,r]of Object.entries(t))e.some(a=>s.toLowerCase().includes(a.toLowerCase()))?o[s]="[REDACTED]":typeof r=="object"&&r!==null?o[s]=p(r,e):o[s]=r;return o}function S(t){return t instanceof Error?{name:t.name,message:t.message,stack:t.stack,...t}:t}class u extends l{constructor(e={}){super(e)}writeLog(e){const o=this.formatMessage(e),s=this.getConsoleStyle(e.level),r=e.metadata?` ${d(e.metadata)}`:"",i=`%c${o}${r}`;switch(e.level){case n.DEBUG:console.debug?console.debug(i,s):console.log(i,s);break;case n.INFO:console.info(i,s);break;case n.WARN:console.warn(i,s);break;case n.ERROR:console.error(i,s);break}}createChild(){return new u(this.config)}formatMessage(e){const o=e.timestamp.toISOString(),s=n[e.level].toUpperCase();return`[${o}] ${s}: ${e.message}`}getConsoleStyle(e){if(!this.config.colorize)return"";switch(e){case n.DEBUG:return"color: #888; font-weight: normal;";case n.INFO:return"color: #007acc; font-weight: normal;";case n.WARN:return"color: #ff8c00; font-weight: bold;";case n.ERROR:return"color: #dc3545; font-weight: bold;";default:return""}}shouldLogInProduction(){return(globalThis.process?.env?.NODE_ENV||globalThis.process?.env?.NEXT_PUBLIC_APP_ENV||"development")!=="production"||this.level<=n.ERROR}shouldLog(e){return!this.shouldLogInProduction()&&e<n.ERROR?!1:super.shouldLog(e)}}class R extends u{constructor(){super(...arguments),this.groupStack=[]}group(e){console.group(e),this.groupStack.push(e)}groupCollapsed(e){console.groupCollapsed(e),this.groupStack.push(e)}groupEnd(){console.groupEnd(),this.groupStack.pop()}getCurrentGroupStack(){return[...this.groupStack]}getCurrentGroupPath(){return this.groupStack.join(" > ")}time(e){console.time(e)}timeEnd(e){console.timeEnd(e)}trace(e,o){console.trace(e,o)}count(e){console.count(e)}countReset(e){console.countReset(e)}table(e){console.table(e)}}class k extends u{mark(e){typeof performance<"u"&&performance.mark&&performance.mark(e)}measure(e,o,s){if(typeof performance<"u"&&performance.measure)try{performance.measure(e,o,s);const r=performance.getEntriesByName(e,"measure");if(r.length>0){const i=r[r.length-1];this.info(`Performance: ${e}`,{duration:i.duration,startTime:i.startTime})}}catch(r){this.warn("Failed to measure performance",{name:e,error:r})}}clearMarks(e){typeof performance<"u"&&performance.clearMarks&&performance.clearMarks(e)}clearMeasures(e){typeof performance<"u"&&performance.clearMeasures&&performance.clearMeasures(e)}}exports.BaseLogger=l;exports.BrowserLogger=u;exports.ConsoleGroupLogger=R;exports.LogLevel=n;exports.PerformanceLogger=k;exports.detectRuntime=f;exports.filterSensitiveData=p;exports.isBrowser=y;exports.isBun=w;exports.isDeno=b;exports.isNode=h;exports.safeStringify=d;exports.serializeError=S;
@@ -1,4 +1,3 @@
1
- var n = /* @__PURE__ */ ((t) => (t[t.DEBUG = 0] = "DEBUG", t[t.INFO = 1] = "INFO", t[t.WARN = 2] = "WARN", t[t.ERROR = 3] = "ERROR", t[t.SILENT = 4] = "SILENT", t))(n || {});
2
1
  function f() {
3
2
  const t = c(), e = l(t), o = d(t);
4
3
  return {
@@ -15,9 +14,15 @@ function l(t) {
15
14
  case "node":
16
15
  return typeof process < "u" ? process.version : void 0;
17
16
  case "deno":
18
- return typeof globalThis.Deno < "u" ? globalThis.Deno.version?.deno : void 0;
17
+ return typeof globalThis.Deno < "u" ? (
18
+ // biome-ignore lint/suspicious/noExplicitAny: Runtime-specific global not in TS types
19
+ globalThis.Deno.version?.deno
20
+ ) : void 0;
19
21
  case "bun":
20
- return typeof globalThis.Bun < "u" ? globalThis.Bun.version : void 0;
22
+ return typeof globalThis.Bun < "u" ? (
23
+ // biome-ignore lint/suspicious/noExplicitAny: Runtime-specific global not in TS types
24
+ globalThis.Bun.version
25
+ ) : void 0;
21
26
  case "browser":
22
27
  return typeof navigator < "u" ? navigator.userAgent : void 0;
23
28
  default:
@@ -83,22 +88,28 @@ function b() {
83
88
  function w() {
84
89
  return c() === "bun";
85
90
  }
91
+ var n = /* @__PURE__ */ ((t) => (t[t.DEBUG = 0] = "DEBUG", t[t.INFO = 1] = "INFO", t[t.WARN = 2] = "WARN", t[t.ERROR = 3] = "ERROR", t[t.SILENT = 4] = "SILENT", t))(n || {});
86
92
  class p {
87
93
  constructor(e = {}) {
88
94
  this.childMetadata = {}, this.config = e, this.level = e.level ?? n.INFO, this.runtime = f().name;
89
95
  }
96
+ // biome-ignore lint/suspicious/noExplicitAny: Intentional - logger accepts arbitrary metadata (see ILogger interface)
90
97
  debug(e, o) {
91
98
  this.log(n.DEBUG, e, o);
92
99
  }
100
+ // biome-ignore lint/suspicious/noExplicitAny: Intentional - logger accepts arbitrary metadata (see ILogger interface)
93
101
  info(e, o) {
94
102
  this.log(n.INFO, e, o);
95
103
  }
104
+ // biome-ignore lint/suspicious/noExplicitAny: Intentional - logger accepts arbitrary metadata (see ILogger interface)
96
105
  warn(e, o) {
97
106
  this.log(n.WARN, e, o);
98
107
  }
108
+ // biome-ignore lint/suspicious/noExplicitAny: Intentional - logger accepts arbitrary metadata (see ILogger interface)
99
109
  error(e, o) {
100
110
  this.log(n.ERROR, e, o);
101
111
  }
112
+ // biome-ignore lint/suspicious/noExplicitAny: Intentional - logger accepts arbitrary metadata (see ILogger interface)
102
113
  log(e, o, s) {
103
114
  if (!this.shouldLog(e))
104
115
  return;
@@ -117,6 +128,7 @@ class p {
117
128
  getLevel() {
118
129
  return this.level;
119
130
  }
131
+ // biome-ignore lint/suspicious/noExplicitAny: Intentional - logger accepts arbitrary metadata (see ILogger interface)
120
132
  child(e) {
121
133
  const o = this.createChild();
122
134
  return o.childMetadata = { ...this.childMetadata, ...e }, o;
@@ -127,19 +139,23 @@ class p {
127
139
  }
128
140
  function m(t, e) {
129
141
  const o = /* @__PURE__ */ new WeakSet();
130
- return JSON.stringify(t, (s, r) => {
131
- if (typeof r == "object" && r !== null) {
132
- if (o.has(r))
133
- return "[Circular]";
134
- o.add(r);
135
- }
136
- return r instanceof Error ? {
137
- name: r.name,
138
- message: r.message,
139
- stack: r.stack,
140
- ...Object.getOwnPropertyNames(r).reduce((i, a) => (a !== "name" && a !== "message" && a !== "stack" && (i[a] = r[a]), i), {})
141
- } : typeof r == "function" ? `[Function: ${r.name || "anonymous"}]` : r === void 0 ? "[undefined]" : typeof r == "bigint" ? `[BigInt: ${r.toString()}]` : typeof r == "symbol" ? `[Symbol: ${r.toString()}]` : r;
142
- }, e);
142
+ return JSON.stringify(
143
+ t,
144
+ (s, r) => {
145
+ if (typeof r == "object" && r !== null) {
146
+ if (o.has(r))
147
+ return "[Circular]";
148
+ o.add(r);
149
+ }
150
+ return r instanceof Error ? {
151
+ name: r.name,
152
+ message: r.message,
153
+ stack: r.stack,
154
+ ...Object.getOwnPropertyNames(r).reduce((i, a) => (a !== "name" && a !== "message" && a !== "stack" && (i[a] = r[a]), i), {})
155
+ } : typeof r == "function" ? `[Function: ${r.name || "anonymous"}]` : r === void 0 ? "[undefined]" : typeof r == "bigint" ? `[BigInt: ${r.toString()}]` : typeof r == "symbol" ? `[Symbol: ${r.toString()}]` : r;
156
+ },
157
+ e
158
+ );
143
159
  }
144
160
  function g(t, e = ["password", "token", "secret", "key", "auth"]) {
145
161
  if (typeof t != "object" || t === null)
@@ -156,6 +172,7 @@ function S(t) {
156
172
  name: t.name,
157
173
  message: t.message,
158
174
  stack: t.stack,
175
+ // biome-ignore lint/suspicious/noExplicitAny: Spread Error to capture custom properties
159
176
  ...t
160
177
  // Include any additional properties
161
178
  } : t;
@@ -205,7 +222,8 @@ class u extends p {
205
222
  }
206
223
  }
207
224
  shouldLogInProduction() {
208
- return (globalThis.process?.env?.NODE_ENV || globalThis.process?.env?.NEXT_PUBLIC_APP_ENV || "development") !== "production" || this.level <= n.ERROR;
225
+ return /* biome-ignore lint/suspicious/noExplicitAny: Browser environment may have process global from bundler */ (globalThis.process?.env?.NODE_ENV || // biome-ignore lint/suspicious/noExplicitAny: Browser environment may have process global from bundler
226
+ globalThis.process?.env?.NEXT_PUBLIC_APP_ENV || "development") !== "production" || this.level <= n.ERROR;
209
227
  }
210
228
  shouldLog(e) {
211
229
  return !this.shouldLogInProduction() && e < n.ERROR ? !1 : super.shouldLog(e);
@@ -236,6 +254,7 @@ class R extends u {
236
254
  timeEnd(e) {
237
255
  console.timeEnd(e);
238
256
  }
257
+ // biome-ignore lint/suspicious/noExplicitAny: Console method accepts arbitrary metadata
239
258
  trace(e, o) {
240
259
  console.trace(e, o);
241
260
  }
@@ -245,6 +264,7 @@ class R extends u {
245
264
  countReset(e) {
246
265
  console.countReset(e);
247
266
  }
267
+ // biome-ignore lint/suspicious/noExplicitAny: Console.table accepts arbitrary tabular data
248
268
  table(e) {
249
269
  console.table(e);
250
270
  }
package/dist/browser.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { LoggerConfig, ILogger } from './core/types';
2
- export { BrowserLogger, ConsoleGroupLogger, PerformanceLogger } from './runtime/browser';
1
+ import { ILogger, LoggerConfig } from './core/types';
3
2
  export type { ILogger, LoggerConfig } from './core/types';
4
3
  export { LogLevel } from './core/types';
4
+ export { BrowserLogger, ConsoleGroupLogger, PerformanceLogger } from './runtime/browser';
5
+ export * from './utils/formatting';
5
6
  export * from './utils/runtime';
6
7
  export * from './utils/serialization';
7
- export * from './utils/formatting';
8
8
  /**
9
9
  * Browser-specific logger factory function.
10
10
  * Creates a BrowserLogger instance without importing Node.js dependencies.
@@ -1,6 +1,6 @@
1
- import { L as o, B as s, d as a } from "./browser-C6UkWymL.mjs";
2
- import { C as v, P as E, f as L, a as N, c as w, b as B, i as _, s as C, e as R } from "./browser-C6UkWymL.mjs";
3
- import { a as x, f as y } from "./formatting-BZyid6rr.mjs";
1
+ import { L as o, B as s, d as a } from "./browser-Daz7tvRv.mjs";
2
+ import { C as v, P as E, f as L, a as N, c as w, b as B, i as _, s as C, e as R } from "./browser-Daz7tvRv.mjs";
3
+ import { a as x, f as y } from "./formatting-BkTf4uG7.mjs";
4
4
  function i() {
5
5
  const e = a();
6
6
  return {
@@ -55,9 +55,13 @@ function g() {
55
55
  return u(r);
56
56
  }
57
57
  const t = g(), p = {
58
+ // biome-ignore lint/suspicious/noExplicitAny: Intentional - legacy API accepts arbitrary metadata
58
59
  debug: (e, r) => t.debug(e, r),
60
+ // biome-ignore lint/suspicious/noExplicitAny: Intentional - legacy API accepts arbitrary metadata
59
61
  info: (e, r) => t.info(e, r),
62
+ // biome-ignore lint/suspicious/noExplicitAny: Intentional - legacy API accepts arbitrary metadata
60
63
  warn: (e, r) => t.warn(e, r),
64
+ // biome-ignore lint/suspicious/noExplicitAny: Intentional - legacy API accepts arbitrary metadata
61
65
  error: (e, r) => t.error(e, r)
62
66
  };
63
67
  export {
package/dist/browser.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./browser-BzeNXjes.js"),n=require("./formatting-BDuKuXIh.js");function a(){const r=e.detectRuntime();return{level:e.LogLevel.INFO,format:"text",timestamp:!0,colorize:r.capabilities.colorSupport,metadata:{},transports:[{type:"console",options:{}}]}}function c(){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 l(r){switch(r){case"production":return e.LogLevel.ERROR;case"staging":case"test":return e.LogLevel.WARN;case"development":case"dev":return e.LogLevel.DEBUG;default:return e.LogLevel.INFO}}function i(r={}){const o=a(),g={...o,...r,metadata:{...o.metadata,...r.metadata}};return new e.BrowserLogger(g)}function s(){const r=c(),o={level:l(r),colorize:r!=="production",timestamp:!0,format:r==="production"?"json":"text"};return i(o)}const t=s(),u={debug:(r,o)=>t.debug(r,o),info:(r,o)=>t.info(r,o),warn:(r,o)=>t.warn(r,o),error:(r,o)=>t.error(r,o)};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.formatLevel=n.formatLevel;exports.formatLogEntry=n.formatLogEntry;exports.createLogger=i;exports.createLoggerForEnvironment=s;exports.log=u;exports.logger=t;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./browser-BYqYELrw.js"),n=require("./formatting-CBWhnvN2.js");function a(){const r=e.detectRuntime();return{level:e.LogLevel.INFO,format:"text",timestamp:!0,colorize:r.capabilities.colorSupport,metadata:{},transports:[{type:"console",options:{}}]}}function c(){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 l(r){switch(r){case"production":return e.LogLevel.ERROR;case"staging":case"test":return e.LogLevel.WARN;case"development":case"dev":return e.LogLevel.DEBUG;default:return e.LogLevel.INFO}}function i(r={}){const o=a(),g={...o,...r,metadata:{...o.metadata,...r.metadata}};return new e.BrowserLogger(g)}function s(){const r=c(),o={level:l(r),colorize:r!=="production",timestamp:!0,format:r==="production"?"json":"text"};return i(o)}const t=s(),u={debug:(r,o)=>t.debug(r,o),info:(r,o)=>t.info(r,o),warn:(r,o)=>t.warn(r,o),error:(r,o)=>t.error(r,o)};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.formatLevel=n.formatLevel;exports.formatLogEntry=n.formatLogEntry;exports.createLogger=i;exports.createLoggerForEnvironment=s;exports.log=u;exports.logger=t;
package/dist/bun.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export { NodeLogger } from './runtime/node';
2
- export type { ILogger, LoggerConfig, LogLevel } from './core/types';
3
1
  export { createLogger, createLoggerForEnvironment } from './core/factory';
4
- export * from './utils/runtime';
2
+ export type { ILogger, LoggerConfig, LogLevel } from './core/types';
3
+ export { NodeLogger } from './runtime/node';
5
4
  export * from './utils/config';
6
- export * from './utils/serialization';
7
5
  export * from './utils/formatting';
6
+ export * from './utils/runtime';
7
+ export * from './utils/serialization';
package/dist/bun.esm.js CHANGED
@@ -1,22 +1,22 @@
1
- import { N as o, c as r, a as s, g as i, l as t, b as n, m as f } from "./node-D140bib-.mjs";
2
- import { d as m, f as l, a as d, c, b as L, i as v, s as C, e as E } from "./browser-C6UkWymL.mjs";
3
- import { a as p, f as u } from "./formatting-BZyid6rr.mjs";
1
+ import { N as o, c as r, a as s, g as i, l as t, b as n, m as f } from "./node-DX7bmpxx.mjs";
2
+ import { a as m, f as l } from "./formatting-BkTf4uG7.mjs";
3
+ import { d as c, f as L, a as v, c as C, b as E, i as F, s as p, e as u } from "./browser-Daz7tvRv.mjs";
4
4
  export {
5
5
  o as NodeLogger,
6
6
  r as createLogger,
7
7
  s as createLoggerForEnvironment,
8
- m as detectRuntime,
9
- l as filterSensitiveData,
10
- p as formatLevel,
11
- u as formatLogEntry,
8
+ c as detectRuntime,
9
+ L as filterSensitiveData,
10
+ m as formatLevel,
11
+ l as formatLogEntry,
12
12
  i as getDefaultConfig,
13
- d as isBrowser,
14
- c as isBun,
15
- L as isDeno,
16
- v as isNode,
13
+ v as isBrowser,
14
+ C as isBun,
15
+ E as isDeno,
16
+ F as isNode,
17
17
  t as loadConfigFromEnvironment,
18
18
  n as loadConfigFromFile,
19
19
  f as mergeConfigs,
20
- C as safeStringify,
21
- E as serializeError
20
+ p as safeStringify,
21
+ u as serializeError
22
22
  };
package/dist/bun.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./node-C009y7d7.js"),e=require("./browser-BzeNXjes.js"),o=require("./formatting-BDuKuXIh.js");exports.NodeLogger=r.NodeLogger;exports.createLogger=r.createLogger;exports.createLoggerForEnvironment=r.createLoggerForEnvironment;exports.getDefaultConfig=r.getDefaultConfig;exports.loadConfigFromEnvironment=r.loadConfigFromEnvironment;exports.loadConfigFromFile=r.loadConfigFromFile;exports.mergeConfigs=r.mergeConfigs;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.formatLevel=o.formatLevel;exports.formatLogEntry=o.formatLogEntry;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./node-BevurxrX.js"),o=require("./formatting-CBWhnvN2.js"),e=require("./browser-BYqYELrw.js");exports.NodeLogger=r.NodeLogger;exports.createLogger=r.createLogger;exports.createLoggerForEnvironment=r.createLoggerForEnvironment;exports.getDefaultConfig=r.getDefaultConfig;exports.loadConfigFromEnvironment=r.loadConfigFromEnvironment;exports.loadConfigFromFile=r.loadConfigFromFile;exports.mergeConfigs=r.mergeConfigs;exports.formatLevel=o.formatLevel;exports.formatLogEntry=o.formatLogEntry;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;
@@ -1,4 +1,4 @@
1
- import { ILogger, LogLevel, LogMessage, LogEntry, RuntimeName, LoggerConfig } from './types';
1
+ import { ILogger, LogEntry, LoggerConfig, LogLevel, LogMessage, RuntimeName } from './types';
2
2
  export declare abstract class BaseLogger implements ILogger {
3
3
  protected level: LogLevel;
4
4
  protected config: Partial<LoggerConfig>;
package/dist/deno.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export { BrowserLogger, ConsoleGroupLogger, PerformanceLogger } from './runtime/browser';
2
- export type { ILogger, LoggerConfig, LogLevel } from './core/types';
3
1
  export { createLogger, createLoggerForEnvironment } from './core/factory';
4
- export * from './utils/runtime';
2
+ export type { ILogger, LoggerConfig, LogLevel } from './core/types';
3
+ export { BrowserLogger, ConsoleGroupLogger, PerformanceLogger } from './runtime/browser';
5
4
  export * from './utils/config';
6
- export * from './utils/serialization';
7
5
  export * from './utils/formatting';
6
+ export * from './utils/runtime';
7
+ export * from './utils/serialization';
package/dist/deno.esm.js CHANGED
@@ -1,24 +1,24 @@
1
- import { B as a, C as o, P as s, d as i, f as g, a as t, c as n, b as f, i as m, s as l, e as L } from "./browser-C6UkWymL.mjs";
2
- import { c as C, a as d, g as p, l as u, b as v, m as B } from "./node-D140bib-.mjs";
3
- import { a as F, f as x } from "./formatting-BZyid6rr.mjs";
1
+ import { c as a, a as o, g as s, l as i, b as g, m as t } from "./node-DX7bmpxx.mjs";
2
+ import { B as f, C as m, P as l, d as L, f as c, a as C, c as d, b as p, i as u, s as v, e as B } from "./browser-Daz7tvRv.mjs";
3
+ import { a as F, f as x } from "./formatting-BkTf4uG7.mjs";
4
4
  export {
5
- a as BrowserLogger,
6
- o as ConsoleGroupLogger,
7
- s as PerformanceLogger,
8
- C as createLogger,
9
- d as createLoggerForEnvironment,
10
- i as detectRuntime,
11
- g as filterSensitiveData,
5
+ f as BrowserLogger,
6
+ m as ConsoleGroupLogger,
7
+ l as PerformanceLogger,
8
+ a as createLogger,
9
+ o as createLoggerForEnvironment,
10
+ L as detectRuntime,
11
+ c as filterSensitiveData,
12
12
  F as formatLevel,
13
13
  x as formatLogEntry,
14
- p as getDefaultConfig,
15
- t as isBrowser,
16
- n as isBun,
17
- f as isDeno,
18
- m as isNode,
19
- u as loadConfigFromEnvironment,
20
- v as loadConfigFromFile,
21
- B as mergeConfigs,
22
- l as safeStringify,
23
- L as serializeError
14
+ s as getDefaultConfig,
15
+ C as isBrowser,
16
+ d as isBun,
17
+ p as isDeno,
18
+ u as isNode,
19
+ i as loadConfigFromEnvironment,
20
+ g as loadConfigFromFile,
21
+ t as mergeConfigs,
22
+ v as safeStringify,
23
+ B as serializeError
24
24
  };
package/dist/deno.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./browser-BzeNXjes.js"),r=require("./node-C009y7d7.js"),o=require("./formatting-BDuKuXIh.js");exports.BrowserLogger=e.BrowserLogger;exports.ConsoleGroupLogger=e.ConsoleGroupLogger;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.createLogger=r.createLogger;exports.createLoggerForEnvironment=r.createLoggerForEnvironment;exports.getDefaultConfig=r.getDefaultConfig;exports.loadConfigFromEnvironment=r.loadConfigFromEnvironment;exports.loadConfigFromFile=r.loadConfigFromFile;exports.mergeConfigs=r.mergeConfigs;exports.formatLevel=o.formatLevel;exports.formatLogEntry=o.formatLogEntry;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./node-BevurxrX.js"),e=require("./browser-BYqYELrw.js"),o=require("./formatting-CBWhnvN2.js");exports.createLogger=r.createLogger;exports.createLoggerForEnvironment=r.createLoggerForEnvironment;exports.getDefaultConfig=r.getDefaultConfig;exports.loadConfigFromEnvironment=r.loadConfigFromEnvironment;exports.loadConfigFromFile=r.loadConfigFromFile;exports.mergeConfigs=r.mergeConfigs;exports.BrowserLogger=e.BrowserLogger;exports.ConsoleGroupLogger=e.ConsoleGroupLogger;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.formatLevel=o.formatLevel;exports.formatLogEntry=o.formatLogEntry;
@@ -1,4 +1,4 @@
1
- import { L as e, s as i } from "./browser-C6UkWymL.mjs";
1
+ import { L as e, s as i } from "./browser-Daz7tvRv.mjs";
2
2
  function l(t, o = "text") {
3
3
  if (o === "json") {
4
4
  const m = {
@@ -1 +1 @@
1
- "use strict";const t=require("./browser-BzeNXjes.js");function L(e,s="text"){if(s==="json"){const m={timestamp:e.timestamp.toISOString(),level:t.LogLevel[e.level].toLowerCase(),message:e.message,runtime:e.runtime};return e.metadata!==void 0&&(m.metadata=e.metadata),t.safeStringify(m)}const o=e.timestamp.toISOString(),a=t.LogLevel[e.level].toUpperCase(),r=e.metadata?` ${t.safeStringify(e.metadata)}`:"";return`[${o}] ${a}: ${e.message}${r}`}function l(e,s=!1){const o=t.LogLevel[e].toUpperCase();if(!s)return o;const a={[t.LogLevel.DEBUG]:"\x1B[36m",[t.LogLevel.INFO]:"\x1B[32m",[t.LogLevel.WARN]:"\x1B[33m",[t.LogLevel.ERROR]:"\x1B[31m",[t.LogLevel.SILENT]:"\x1B[37m"};return`${a[e]||a[t.LogLevel.INFO]}${o}\x1B[0m`}exports.formatLevel=l;exports.formatLogEntry=L;
1
+ "use strict";const t=require("./browser-BYqYELrw.js");function L(e,s="text"){if(s==="json"){const m={timestamp:e.timestamp.toISOString(),level:t.LogLevel[e.level].toLowerCase(),message:e.message,runtime:e.runtime};return e.metadata!==void 0&&(m.metadata=e.metadata),t.safeStringify(m)}const o=e.timestamp.toISOString(),a=t.LogLevel[e.level].toUpperCase(),r=e.metadata?` ${t.safeStringify(e.metadata)}`:"";return`[${o}] ${a}: ${e.message}${r}`}function l(e,s=!1){const o=t.LogLevel[e].toUpperCase();if(!s)return o;const a={[t.LogLevel.DEBUG]:"\x1B[36m",[t.LogLevel.INFO]:"\x1B[32m",[t.LogLevel.WARN]:"\x1B[33m",[t.LogLevel.ERROR]:"\x1B[31m",[t.LogLevel.SILENT]:"\x1B[37m"};return`${a[e]||a[t.LogLevel.INFO]}${o}\x1B[0m`}exports.formatLevel=l;exports.formatLogEntry=L;
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import { createLogger, createLoggerForEnvironment } from './core/factory';
2
- import { LogLevel, ILogger } from './core/types';
3
- export * from './core/types';
4
- export * from './core/logger';
2
+ import { ILogger, LogLevel } from './core/types';
5
3
  export * from './core/factory';
4
+ export * from './core/logger';
5
+ export * from './core/types';
6
6
  export { BrowserLogger, ConsoleGroupLogger, PerformanceLogger } from './runtime/browser';
7
- export * from './utils/runtime';
8
7
  export * from './utils/config';
9
- export * from './utils/serialization';
10
8
  export * from './utils/formatting';
9
+ export * from './utils/runtime';
10
+ export * from './utils/serialization';
11
11
  export declare const logger: ILogger;
12
12
  export declare const log: {
13
13
  debug: (message: string, meta?: any) => void;
@@ -16,4 +16,4 @@ export declare const log: {
16
16
  error: (message: string, meta?: any) => void;
17
17
  };
18
18
  export { createLogger, createLoggerForEnvironment, LogLevel };
19
- export type { ILogger, LoggerConfig, RuntimeInfo, RuntimeCapabilities, LogEntry, LogMessage, LogLevelString, RuntimeName, TransportConfig, ILoggerAdapter } from './core/types';
19
+ export type { ILogger, ILoggerAdapter, LogEntry, LoggerConfig, LogLevelString, LogMessage, RuntimeCapabilities, RuntimeInfo, RuntimeName, TransportConfig, } from './core/types';
package/dist/index.esm.js CHANGED
@@ -1,38 +1,42 @@
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-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
- import { a as G, f as N } from "./formatting-BZyid6rr.mjs";
1
+ import { a } from "./node-DX7bmpxx.mjs";
2
+ import { L as i, c as f, g as L, l, b as m, d as c, m as d, s as v } from "./node-DX7bmpxx.mjs";
3
+ import { g as u, B as C, C as B, L as F, P as b, d as w, f as x, a as E, c as y, b as D, i as S, s as P, e as T } from "./browser-Daz7tvRv.mjs";
4
+ import { a as G, f as N } from "./formatting-BkTf4uG7.mjs";
5
5
  const r = a(), g = {
6
+ // biome-ignore lint/suspicious/noExplicitAny: Intentional - legacy API accepts arbitrary metadata
6
7
  debug: (e, o) => r.debug(e, o),
8
+ // biome-ignore lint/suspicious/noExplicitAny: Intentional - legacy API accepts arbitrary metadata
7
9
  info: (e, o) => r.info(e, o),
10
+ // biome-ignore lint/suspicious/noExplicitAny: Intentional - legacy API accepts arbitrary metadata
8
11
  warn: (e, o) => r.warn(e, o),
12
+ // biome-ignore lint/suspicious/noExplicitAny: Intentional - legacy API accepts arbitrary metadata
9
13
  error: (e, o) => r.error(e, o)
10
14
  };
11
15
  export {
12
- i as BaseLogger,
13
- f as BrowserLogger,
14
- L as ConsoleGroupLogger,
15
- l as LogLevel,
16
- w as LoggerFactory,
17
- m as PerformanceLogger,
18
- x as createLogger,
16
+ u as BaseLogger,
17
+ C as BrowserLogger,
18
+ B as ConsoleGroupLogger,
19
+ F as LogLevel,
20
+ i as LoggerFactory,
21
+ b as PerformanceLogger,
22
+ f as createLogger,
19
23
  a as createLoggerForEnvironment,
20
- c as detectRuntime,
21
- d as filterSensitiveData,
24
+ w as detectRuntime,
25
+ x as filterSensitiveData,
22
26
  G as formatLevel,
23
27
  N as formatLogEntry,
24
- E as getDefaultConfig,
25
- v as isBrowser,
26
- p as isBun,
27
- u as isDeno,
28
- C as isNode,
29
- y as loadConfigFromEnvironment,
30
- D as loadConfigFromFile,
28
+ L as getDefaultConfig,
29
+ E as isBrowser,
30
+ y as isBun,
31
+ D as isDeno,
32
+ S as isNode,
33
+ l as loadConfigFromEnvironment,
34
+ m as loadConfigFromFile,
31
35
  g as log,
32
- S as logLevelToString,
36
+ c as logLevelToString,
33
37
  r as logger,
34
- P as mergeConfigs,
35
- B as safeStringify,
36
- F as serializeError,
37
- T as stringToLogLevel
38
+ d as mergeConfigs,
39
+ P as safeStringify,
40
+ T as serializeError,
41
+ v as stringToLogLevel
38
42
  };
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-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
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./node-BevurxrX.js"),e=require("./browser-BYqYELrw.js"),t=require("./formatting-CBWhnvN2.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.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.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.formatLevel=t.formatLevel;exports.formatLogEntry=t.formatLogEntry;exports.log=i;exports.logger=n;
@@ -0,0 +1 @@
1
+ "use strict";var p=Object.create;var u=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var R=(t,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of O(e))!N.call(t,s)&&s!==o&&u(t,s,{get:()=>e[s],enumerable:!(n=w(e,s))||n.enumerable});return t};var h=(t,e,o)=>(o=t!=null?p(E(t)):{},R(e||!t||!t.__esModule?u(o,"default",{value:t,enumerable:!0}):o,t));const r=require("./browser-BYqYELrw.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(e){console.warn("[logan-logger] Winston not found, falling back to console logging:",e)}}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,...g})=>{const v=Object.keys(g).length?JSON.stringify(g,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 l(){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 L(n);if(e.name==="deno")return await T(n);if(e.name==="bun")return await S(n)}catch{}return{}}async function L(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 L(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 I(...t){const e=l();return t.reduce((o,n)=>({...o,...n,metadata:{...o.metadata,...n.metadata},transports:n.transports||o.transports}),e)}class c{static create(e={}){const o=r.detectRuntime(),n=c.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=l();return{...o,...e,metadata:{...o.metadata,...e.metadata}}}}function f(t){return c.create(t)}function _(){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=c;exports.NodeLogger=i;exports.createLogger=f;exports.createLoggerForEnvironment=_;exports.createMorganStream=F;exports.getDefaultConfig=l;exports.loadConfigFromEnvironment=C;exports.loadConfigFromFile=b;exports.logLevelToString=M;exports.mergeConfigs=I;exports.stringToLogLevel=j;
@@ -1,5 +1,5 @@
1
- import { g as L, L as r, s as w, d as l, B as c } from "./browser-C6UkWymL.mjs";
2
- class i extends L {
1
+ import { g as w, L as r, s as v, d as l, B as c } from "./browser-Daz7tvRv.mjs";
2
+ class i extends w {
3
3
  constructor(e = {}) {
4
4
  super(e), this.initializeWinston();
5
5
  }
@@ -7,10 +7,11 @@ class i extends L {
7
7
  try {
8
8
  const e = await import("winston");
9
9
  this.winston = this.createWinstonLogger(e);
10
- } catch {
11
- console.warn("[logan-logger] Winston not found, falling back to console logging");
10
+ } catch (e) {
11
+ console.warn("[logan-logger] Winston not found, falling back to console logging:", e);
12
12
  }
13
13
  }
14
+ // biome-ignore lint/suspicious/noExplicitAny: Winston is an optional peer dependency, types not guaranteed
14
15
  createWinstonLogger(e) {
15
16
  const n = e.format.combine(
16
17
  e.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }),
@@ -20,9 +21,10 @@ class i extends L {
20
21
  ), o = e.format.combine(
21
22
  e.format.colorize(),
22
23
  e.format.timestamp({ format: "HH:mm:ss" }),
23
- e.format.printf(({ timestamp: a, level: g, message: d, ...u }) => {
24
- const p = Object.keys(u).length ? JSON.stringify(u, null, 2) : "";
25
- return `${a} [${g}]: ${d} ${p}`;
24
+ // biome-ignore lint/suspicious/noExplicitAny: Winston format callback parameter has dynamic shape
25
+ e.format.printf(({ timestamp: a, level: d, message: p, ...f }) => {
26
+ const L = Object.keys(f).length ? JSON.stringify(f, null, 2) : "";
27
+ return `${a} [${d}]: ${p} ${L}`;
26
28
  })
27
29
  ), s = e.createLogger({
28
30
  level: this.getWinstonLevel(this.level),
@@ -62,7 +64,7 @@ class i extends L {
62
64
  return new i(this.config);
63
65
  }
64
66
  writeToConsole(e) {
65
- const n = e.timestamp.toISOString(), o = r[e.level].toLowerCase(), s = e.metadata ? ` ${w(e.metadata)}` : "", a = `[${n}] ${o.toUpperCase()}: ${e.message}${s}`;
67
+ const n = e.timestamp.toISOString(), o = r[e.level].toLowerCase(), s = e.metadata ? ` ${v(e.metadata)}` : "", a = `[${n}] ${o.toUpperCase()}: ${e.message}${s}`;
66
68
  switch (e.level) {
67
69
  case r.DEBUG:
68
70
  console.debug(a);
@@ -103,7 +105,7 @@ function b(t) {
103
105
  }
104
106
  };
105
107
  }
106
- function f() {
108
+ function m() {
107
109
  const t = l();
108
110
  return {
109
111
  level: r.INFO,
@@ -123,7 +125,7 @@ function T() {
123
125
  const t = {};
124
126
  if (typeof process < "u" && process.env) {
125
127
  const e = process.env;
126
- e.LOG_LEVEL && (t.level = E(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");
128
+ e.LOG_LEVEL && (t.level = N(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");
127
129
  }
128
130
  return t;
129
131
  }
@@ -141,16 +143,16 @@ async function W(t) {
141
143
  for (const o of n)
142
144
  try {
143
145
  if (e.name === "node")
144
- return await m(o);
146
+ return await g(o);
145
147
  if (e.name === "deno")
146
- return await v(o);
147
- if (e.name === "bun")
148
148
  return await O(o);
149
+ if (e.name === "bun")
150
+ return await E(o);
149
151
  } catch {
150
152
  }
151
153
  return {};
152
154
  }
153
- async function m(t) {
155
+ async function g(t) {
154
156
  try {
155
157
  const e = await import("./__vite-browser-external-DYxpcVy9.mjs"), n = await import("./__vite-browser-external-DYxpcVy9.mjs");
156
158
  if (t.endsWith(".json")) {
@@ -164,7 +166,7 @@ async function m(t) {
164
166
  }
165
167
  return {};
166
168
  }
167
- async function v(t) {
169
+ async function O(t) {
168
170
  try {
169
171
  if (t.endsWith(".json")) {
170
172
  const e = await globalThis.Deno.readTextFile(t), n = JSON.parse(e);
@@ -180,10 +182,10 @@ async function v(t) {
180
182
  }
181
183
  return {};
182
184
  }
183
- async function O(t) {
184
- return m(t);
185
+ async function E(t) {
186
+ return g(t);
185
187
  }
186
- function E(t) {
188
+ function N(t) {
187
189
  switch (t.toLowerCase()) {
188
190
  case "debug":
189
191
  return r.DEBUG;
@@ -201,26 +203,30 @@ function E(t) {
201
203
  return r.INFO;
202
204
  }
203
205
  }
204
- function _(...t) {
205
- const e = f();
206
- return t.reduce((n, o) => ({
207
- ...n,
208
- ...o,
209
- metadata: {
210
- ...n.metadata,
211
- ...o.metadata
212
- },
213
- transports: o.transports || n.transports
214
- }), e);
206
+ function I(...t) {
207
+ const e = m();
208
+ return t.reduce(
209
+ (n, o) => ({
210
+ // biome-ignore lint/performance/noAccumulatingSpread: Config merging is not performance-critical, readability preferred
211
+ ...n,
212
+ ...o,
213
+ metadata: {
214
+ ...n.metadata,
215
+ ...o.metadata
216
+ },
217
+ transports: o.transports || n.transports
218
+ }),
219
+ e
220
+ );
215
221
  }
216
- class N {
222
+ class u {
217
223
  /**
218
224
  * Create a logger instance appropriate for the current runtime.
219
225
  * @param config - Optional configuration for the logger
220
226
  * @returns A logger instance
221
227
  */
222
228
  static create(e = {}) {
223
- const n = l(), o = this.mergeConfig(e);
229
+ const n = l(), o = u.mergeConfig(e);
224
230
  switch (n.name) {
225
231
  case "node":
226
232
  return new i(o);
@@ -241,11 +247,12 @@ class N {
241
247
  * @param metadata - Additional metadata to include in all child log messages
242
248
  * @returns A new logger instance with the additional metadata
243
249
  */
250
+ // biome-ignore lint/suspicious/noExplicitAny: Intentional - logger accepts arbitrary metadata
244
251
  static createChild(e, n) {
245
252
  return e.child(n);
246
253
  }
247
254
  static mergeConfig(e) {
248
- const n = f();
255
+ const n = m();
249
256
  return {
250
257
  ...n,
251
258
  ...e,
@@ -256,22 +263,22 @@ class N {
256
263
  };
257
264
  }
258
265
  }
259
- function h(t) {
260
- return N.create(t);
266
+ function R(t) {
267
+ return u.create(t);
261
268
  }
262
- function I() {
263
- const t = R(), e = {
264
- level: F(t),
269
+ function S() {
270
+ const t = h(), e = {
271
+ level: C(t),
265
272
  colorize: t !== "production",
266
273
  timestamp: !0,
267
274
  format: t === "production" ? "json" : "text"
268
275
  };
269
- return h(e);
276
+ return R(e);
270
277
  }
271
- function R() {
278
+ function h() {
272
279
  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";
273
280
  }
274
- function F(t) {
281
+ function C(t) {
275
282
  switch (t) {
276
283
  case "production":
277
284
  return r.ERROR;
@@ -285,7 +292,7 @@ function F(t) {
285
292
  return r.INFO;
286
293
  }
287
294
  }
288
- function S(t) {
295
+ function _(t) {
289
296
  switch (t.toLowerCase()) {
290
297
  case "debug":
291
298
  return r.DEBUG;
@@ -320,15 +327,15 @@ function G(t) {
320
327
  }
321
328
  }
322
329
  export {
323
- N as L,
330
+ u as L,
324
331
  i as N,
325
- I as a,
332
+ S as a,
326
333
  W as b,
327
- h as c,
334
+ R as c,
328
335
  G as d,
329
336
  b as e,
330
- f as g,
337
+ m as g,
331
338
  T as l,
332
- _ as m,
333
- S as s
339
+ I as m,
340
+ _ as s
334
341
  };
package/dist/node.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { NodeLogger, createMorganStream } from './runtime/node';
2
- export type { ILogger, LoggerConfig, LogLevel } from './core/types';
3
1
  export { createLogger, createLoggerForEnvironment } from './core/factory';
2
+ export type { ILogger, LoggerConfig, LogLevel } from './core/types';
3
+ export { createMorganStream, NodeLogger } from './runtime/node';
package/dist/node.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- import { N as a, c as o, a as g, e as t } from "./node-D140bib-.mjs";
1
+ import { N as a, c as o, a as g, e as t } from "./node-DX7bmpxx.mjs";
2
2
  export {
3
3
  a as NodeLogger,
4
4
  o as createLogger,
package/dist/node.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./node-C009y7d7.js");exports.NodeLogger=e.NodeLogger;exports.createLogger=e.createLogger;exports.createLoggerForEnvironment=e.createLoggerForEnvironment;exports.createMorganStream=e.createMorganStream;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./node-BevurxrX.js");exports.NodeLogger=e.NodeLogger;exports.createLogger=e.createLogger;exports.createLoggerForEnvironment=e.createLoggerForEnvironment;exports.createMorganStream=e.createMorganStream;
@@ -1,5 +1,5 @@
1
1
  import { BaseLogger } from '../core/logger';
2
- import { LogEntry, LogLevel, LoggerConfig } from '../core/types';
2
+ import { LogEntry, LoggerConfig, LogLevel } from '../core/types';
3
3
  export declare class BrowserLogger extends BaseLogger {
4
4
  constructor(config?: Partial<LoggerConfig>);
5
5
  protected writeLog(entry: LogEntry): void;
@@ -1,5 +1,5 @@
1
1
  import { BaseLogger } from '../core/logger';
2
- import { LogEntry, LogLevel, LoggerConfig } from '../core/types';
2
+ import { LogEntry, LoggerConfig, LogLevel } from '../core/types';
3
3
  export declare class NodeLogger extends BaseLogger {
4
4
  private winston?;
5
5
  constructor(config?: Partial<LoggerConfig>);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "logan-logger",
3
- "version": "1.1.10",
3
+ "version": "1.1.12",
4
4
  "description": "Universal TypeScript logging library for all JavaScript runtimes",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -46,15 +46,13 @@
46
46
  "author": "Logan Lindquist Land",
47
47
  "license": "MIT",
48
48
  "devDependencies": {
49
+ "@biomejs/biome": "^2.3.8",
49
50
  "@types/node": "^24.6.0",
50
- "@typescript-eslint/eslint-plugin": "^6.21.0",
51
- "@typescript-eslint/parser": "^6.21.0",
52
- "@vitest/ui": "^3.2.4",
53
- "eslint": "^8.57.1",
51
+ "@vitest/ui": "^4.0.15",
54
52
  "typescript": "^5.9.2",
55
53
  "vite": "^7.1.7",
56
54
  "vite-plugin-dts": "^4.5.4",
57
- "vitest": "^3.2.4"
55
+ "vitest": "^4.0.15"
58
56
  },
59
57
  "peerDependencies": {
60
58
  "winston": "^3.8.0"
@@ -81,9 +79,9 @@
81
79
  "test:watch": "vitest",
82
80
  "test:ui": "vitest --ui",
83
81
  "test:coverage": "vitest run --coverage",
84
- "lint": "eslint src --ext .ts",
85
- "typecheck": "tsc --noEmit",
86
- "bump": "npm version patch",
87
- "publish:jsr": "deno publish --set-version ${npm_package_version:-$(npm pkg get version | tr -d '\"')}"
82
+ "lint": "biome lint src",
83
+ "lint:fix": "biome lint --write src",
84
+ "format": "biome format --write src",
85
+ "typecheck": "tsc --noEmit"
88
86
  }
89
87
  }
@@ -1 +0,0 @@
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;