@vielzeug/rune 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./errors.cjs"),t=require("./types.cjs"),n=require("./lazy.cjs"),r=require("./console.cjs"),i=require("./logger.cjs"),a=require("./transports.cjs");exports.DEFAULT_THEME=r.DEFAULT_THEME,exports.PRIORITY=t.PRIORITY,exports.RuneError=e.RuneError,exports.batchTransport=a.batchTransport,exports.consoleTransport=r.consoleTransport,exports.createLogger=i.createLogger,exports.defaultLogger=i.defaultLogger,exports.isLevelEnabled=t.isLevelEnabled,exports.jsonTransport=a.jsonTransport,exports.lazy=n.lazy,exports.pipe=a.pipe,exports.redactTransport=a.redactTransport,exports.remoteTransport=a.remoteTransport,exports.resolveTheme=r.resolveTheme,exports.sampleTransport=a.sampleTransport;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./types.cjs"),t=require("./console.cjs"),n=require("./lazy.cjs"),r=require("./logger.cjs"),i=require("./transports.cjs");exports.DEFAULT_THEME=t.DEFAULT_THEME,exports.PRIORITY=e.PRIORITY,exports.batchTransport=i.batchTransport,exports.consoleTransport=t.consoleTransport,exports.createLogger=r.createLogger,exports.defaultLogger=r.defaultLogger,exports.isLevelEnabled=e.isLevelEnabled,exports.jsonTransport=i.jsonTransport,exports.lazy=n.lazy,exports.pipe=i.pipe,exports.redactTransport=i.redactTransport,exports.remoteTransport=i.remoteTransport,exports.resolveTheme=t.resolveTheme,exports.sampleTransport=i.sampleTransport;
package/dist/index.d.ts CHANGED
@@ -1,10 +1,9 @@
1
- export type { BatchHandle, BatchTransportOptions, Bindings, JsonTransportOptions, LogEntry, LogLevel, LogMethod, LogMiddleware, Logger, LogType, PipeOptions, RedactTransportOptions, RemoteLogData, RemoteTransportOptions, RuneOptions, SampleTransportOptions, Transport, } from './types';
2
- export { RuneError } from './errors';
3
- export { isLevelEnabled, PRIORITY } from './types';
1
+ export type { ConsoleTheme, ConsoleThemeEntry, ConsoleTransportOptions, ResolvedTheme } from './console';
2
+ export { consoleTransport, DEFAULT_THEME, resolveTheme } from './console';
4
3
  export type { LazyBinding } from './lazy';
5
4
  export { lazy } from './lazy';
6
- export { defaultLogger, createLogger } from './logger';
7
- export type { ConsoleTheme, ConsoleThemeEntry, ConsoleTransportOptions, ResolvedTheme } from './console';
8
- export { DEFAULT_THEME, consoleTransport, resolveTheme } from './console';
5
+ export { createLogger, defaultLogger } from './logger';
9
6
  export { batchTransport, jsonTransport, pipe, redactTransport, remoteTransport, sampleTransport } from './transports';
7
+ export type { BatchHandle, BatchTransportOptions, Bindings, JsonTransportOptions, LogEntry, Logger, LogLevel, LogMethod, LogMiddleware, LogType, PipeOptions, RedactTransportOptions, RemoteLogData, RemoteTransportOptions, RuneOptions, SampleTransportOptions, Transport, } from './types';
8
+ export { isLevelEnabled, PRIORITY } from './types';
10
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,qBAAqB,EACrB,QAAQ,EACR,oBAAoB,EACpB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,aAAa,EACb,MAAM,EACN,OAAO,EACP,WAAW,EACX,sBAAsB,EACtB,aAAa,EACb,sBAAsB,EACtB,WAAW,EACX,sBAAsB,EACtB,SAAS,GACV,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACvD,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACzG,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC1E,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACtH,YAAY,EACV,WAAW,EACX,qBAAqB,EACrB,QAAQ,EACR,oBAAoB,EACpB,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,SAAS,EACT,aAAa,EACb,OAAO,EACP,WAAW,EACX,sBAAsB,EACtB,aAAa,EACb,sBAAsB,EACtB,WAAW,EACX,sBAAsB,EACtB,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,6 @@
1
- import { RuneError as e } from "./errors.js";
2
- import { PRIORITY as t, isLevelEnabled as n } from "./types.js";
3
- import { lazy as r } from "./lazy.js";
4
- import { DEFAULT_THEME as i, consoleTransport as a, resolveTheme as o } from "./console.js";
5
- import { createLogger as s, defaultLogger as c } from "./logger.js";
6
- import { batchTransport as l, jsonTransport as u, pipe as d, redactTransport as f, remoteTransport as p, sampleTransport as m } from "./transports.js";
7
- export { i as DEFAULT_THEME, t as PRIORITY, e as RuneError, l as batchTransport, a as consoleTransport, s as createLogger, c as defaultLogger, n as isLevelEnabled, u as jsonTransport, r as lazy, d as pipe, f as redactTransport, p as remoteTransport, o as resolveTheme, m as sampleTransport };
1
+ import { PRIORITY as e, isLevelEnabled as t } from "./types.js";
2
+ import { DEFAULT_THEME as n, consoleTransport as r, resolveTheme as i } from "./console.js";
3
+ import { lazy as a } from "./lazy.js";
4
+ import { createLogger as o, defaultLogger as s } from "./logger.js";
5
+ import { batchTransport as c, jsonTransport as l, pipe as u, redactTransport as d, remoteTransport as f, sampleTransport as p } from "./transports.js";
6
+ export { n as DEFAULT_THEME, e as PRIORITY, c as batchTransport, r as consoleTransport, o as createLogger, s as defaultLogger, t as isLevelEnabled, l as jsonTransport, a as lazy, u as pipe, d as redactTransport, f as remoteTransport, i as resolveTheme, p as sampleTransport };
package/dist/lazy.cjs CHANGED
@@ -1,2 +1,2 @@
1
- const e=require("./_prototype.cjs");var t=Symbol(`rune.lazy`);function n(e){return typeof e==`object`&&!!e&&e[t]===!0}function r(e){return{factory:e,[t]:!0}}function i(t){let r;for(let[i,a]of Object.entries(t))n(a)&&!e.isUnsafeObjectKey(i)&&(r??={...t},r[i]=a.factory());return r??t}exports.lazy=r,exports.resolveBindings=i;
1
+ var e=Symbol(`rune.lazy`);function t(t){return typeof t==`object`&&!!t&&t[e]===!0}function n(t){return{factory:t,[e]:!0}}exports.isLazy=t,exports.lazy=n;
2
2
  //# sourceMappingURL=lazy.cjs.map
package/dist/lazy.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lazy.cjs","names":[],"sources":["../src/lazy.ts"],"sourcesContent":["import type { Bindings } from './types';\n\nimport { isUnsafeObjectKey } from './_prototype';\n\nconst LAZY_BRAND = Symbol('rune.lazy');\n\n/** A deferred binding value — evaluated only when an entry is actually emitted. Create via `lazy(fn)`. */\nexport type LazyBinding = { readonly factory: () => unknown; readonly [LAZY_BRAND]: true };\n\nfunction isLazy(v: unknown): v is LazyBinding {\n return typeof v === 'object' && v !== null && (v as Record<symbol, unknown>)[LAZY_BRAND] === true;\n}\n\n/**\n * Defer evaluation of an expensive binding value until after the log level check passes.\n * The factory function is only called when an entry is actually emitted.\n *\n * @example\n * const reqLog = log.withBindings({ diagnostics: lazy(() => buildExpensiveDiagnostics()) });\n * reqLog.debug('trace'); // diagnostics() only called when logLevel allows debug\n */\nexport function lazy(fn: () => unknown): LazyBinding {\n return { factory: fn, [LAZY_BRAND]: true } as LazyBinding;\n}\n\n/**\n * Resolve any lazy bindings in the given object, returning a plain Bindings object.\n * Non-lazy values are passed through unchanged. Single-pass: allocates only when a lazy\n * binding is actually present (copy-on-first-lazy).\n *\n * **Shallow only** — if a lazy factory returns an object that itself contains lazy bindings,\n * those nested lazy values are NOT resolved. Only top-level keys of the bindings object\n * are checked.\n */\nexport function resolveBindings(bindings: Bindings): Bindings {\n let resolved: Bindings | undefined;\n\n for (const [k, v] of Object.entries(bindings)) {\n // Guard against a `__proto__`/`constructor`/`prototype` binding key hijacking resolved's own\n // prototype via the bracket-assignment accessor — see _prototype.ts.\n if (isLazy(v) && !isUnsafeObjectKey(k)) {\n resolved ??= { ...bindings };\n resolved[k] = v.factory();\n }\n }\n\n return resolved ?? bindings;\n}\n"],"mappings":"oCAIA,IAAM,EAAa,OAAO,WAAW,EAKrC,SAAS,EAAO,EAA8B,CAC5C,OAAO,OAAO,GAAM,YAAY,GAAe,EAA8B,KAAgB,EAC/F,CAUA,SAAgB,EAAK,EAAgC,CACnD,MAAO,CAAE,QAAS,GAAK,GAAa,EAAK,CAC3C,CAWA,SAAgB,EAAgB,EAA8B,CAC5D,IAAI,EAEJ,IAAK,GAAM,CAAC,EAAG,KAAM,OAAO,QAAQ,CAAQ,EAGtC,EAAO,CAAC,GAAK,CAAC,EAAA,kBAAkB,CAAC,IACnC,IAAa,CAAE,GAAG,CAAS,EAC3B,EAAS,GAAK,EAAE,QAAQ,GAI5B,OAAO,GAAY,CACrB"}
1
+ {"version":3,"file":"lazy.cjs","names":[],"sources":["../src/lazy.ts"],"sourcesContent":["const LAZY_BRAND = Symbol('rune.lazy');\n\n/** A deferred binding value — evaluated only when an entry is actually emitted. Create via `lazy(fn)`. */\nexport type LazyBinding = { readonly factory: () => unknown; readonly [LAZY_BRAND]: true };\n\n/** @internal */\nexport function isLazy(v: unknown): v is LazyBinding {\n return typeof v === 'object' && v !== null && (v as Record<symbol, unknown>)[LAZY_BRAND] === true;\n}\n\n/**\n * Defer evaluation of an expensive binding value until after the log level check passes.\n * The factory function is only called when an entry is actually emitted.\n *\n * @example\n * const reqLog = log.withBindings({ diagnostics: lazy(() => buildExpensiveDiagnostics()) });\n * reqLog.debug('trace'); // diagnostics() only called when logLevel allows debug\n */\nexport function lazy(fn: () => unknown): LazyBinding {\n return { factory: fn, [LAZY_BRAND]: true } as LazyBinding;\n}\n"],"mappings":"AAAA,IAAM,EAAa,OAAO,WAAW,EAMrC,SAAgB,EAAO,EAA8B,CACnD,OAAO,OAAO,GAAM,YAAY,GAAe,EAA8B,KAAgB,EAC/F,CAUA,SAAgB,EAAK,EAAgC,CACnD,MAAO,CAAE,QAAS,GAAK,GAAa,EAAK,CAC3C"}
package/dist/lazy.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { Bindings } from './types';
2
1
  declare const LAZY_BRAND: unique symbol;
3
2
  /** A deferred binding value — evaluated only when an entry is actually emitted. Create via `lazy(fn)`. */
4
3
  export type LazyBinding = {
@@ -14,15 +13,5 @@ export type LazyBinding = {
14
13
  * reqLog.debug('trace'); // diagnostics() only called when logLevel allows debug
15
14
  */
16
15
  export declare function lazy(fn: () => unknown): LazyBinding;
17
- /**
18
- * Resolve any lazy bindings in the given object, returning a plain Bindings object.
19
- * Non-lazy values are passed through unchanged. Single-pass: allocates only when a lazy
20
- * binding is actually present (copy-on-first-lazy).
21
- *
22
- * **Shallow only** — if a lazy factory returns an object that itself contains lazy bindings,
23
- * those nested lazy values are NOT resolved. Only top-level keys of the bindings object
24
- * are checked.
25
- */
26
- export declare function resolveBindings(bindings: Bindings): Bindings;
27
16
  export {};
28
17
  //# sourceMappingURL=lazy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lazy.d.ts","sourceRoot":"","sources":["../src/lazy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxC,QAAA,MAAM,UAAU,eAAsB,CAAC;AAEvC,0GAA0G;AAC1G,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC;IAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAM3F;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,OAAO,GAAG,WAAW,CAEnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAa5D"}
1
+ {"version":3,"file":"lazy.d.ts","sourceRoot":"","sources":["../src/lazy.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,UAAU,eAAsB,CAAC;AAEvC,0GAA0G;AAC1G,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC;IAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAO3F;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,OAAO,GAAG,WAAW,CAEnD"}
package/dist/lazy.js CHANGED
@@ -1,21 +1,15 @@
1
- import { isUnsafeObjectKey as e } from "./_prototype.js";
2
1
  //#region src/lazy.ts
3
- var t = Symbol("rune.lazy");
4
- function n(e) {
5
- return typeof e == "object" && !!e && e[t] === !0;
2
+ var e = Symbol("rune.lazy");
3
+ function t(t) {
4
+ return typeof t == "object" && !!t && t[e] === !0;
6
5
  }
7
- function r(e) {
6
+ function n(t) {
8
7
  return {
9
- factory: e,
10
- [t]: !0
8
+ factory: t,
9
+ [e]: !0
11
10
  };
12
11
  }
13
- function i(t) {
14
- let r;
15
- for (let [i, a] of Object.entries(t)) n(a) && !e(i) && (r ??= { ...t }, r[i] = a.factory());
16
- return r ?? t;
17
- }
18
12
  //#endregion
19
- export { r as lazy, i as resolveBindings };
13
+ export { t as isLazy, n as lazy };
20
14
 
21
15
  //# sourceMappingURL=lazy.js.map
package/dist/lazy.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lazy.js","names":[],"sources":["../src/lazy.ts"],"sourcesContent":["import type { Bindings } from './types';\n\nimport { isUnsafeObjectKey } from './_prototype';\n\nconst LAZY_BRAND = Symbol('rune.lazy');\n\n/** A deferred binding value — evaluated only when an entry is actually emitted. Create via `lazy(fn)`. */\nexport type LazyBinding = { readonly factory: () => unknown; readonly [LAZY_BRAND]: true };\n\nfunction isLazy(v: unknown): v is LazyBinding {\n return typeof v === 'object' && v !== null && (v as Record<symbol, unknown>)[LAZY_BRAND] === true;\n}\n\n/**\n * Defer evaluation of an expensive binding value until after the log level check passes.\n * The factory function is only called when an entry is actually emitted.\n *\n * @example\n * const reqLog = log.withBindings({ diagnostics: lazy(() => buildExpensiveDiagnostics()) });\n * reqLog.debug('trace'); // diagnostics() only called when logLevel allows debug\n */\nexport function lazy(fn: () => unknown): LazyBinding {\n return { factory: fn, [LAZY_BRAND]: true } as LazyBinding;\n}\n\n/**\n * Resolve any lazy bindings in the given object, returning a plain Bindings object.\n * Non-lazy values are passed through unchanged. Single-pass: allocates only when a lazy\n * binding is actually present (copy-on-first-lazy).\n *\n * **Shallow only** — if a lazy factory returns an object that itself contains lazy bindings,\n * those nested lazy values are NOT resolved. Only top-level keys of the bindings object\n * are checked.\n */\nexport function resolveBindings(bindings: Bindings): Bindings {\n let resolved: Bindings | undefined;\n\n for (const [k, v] of Object.entries(bindings)) {\n // Guard against a `__proto__`/`constructor`/`prototype` binding key hijacking resolved's own\n // prototype via the bracket-assignment accessor — see _prototype.ts.\n if (isLazy(v) && !isUnsafeObjectKey(k)) {\n resolved ??= { ...bindings };\n resolved[k] = v.factory();\n }\n }\n\n return resolved ?? bindings;\n}\n"],"mappings":";;AAIA,IAAM,IAAa,OAAO,WAAW;AAKrC,SAAS,EAAO,GAA8B;CAC5C,OAAO,OAAO,KAAM,cAAY,KAAe,EAA8B,OAAgB;AAC/F;AAUA,SAAgB,EAAK,GAAgC;CACnD,OAAO;EAAE,SAAS;GAAK,IAAa;CAAK;AAC3C;AAWA,SAAgB,EAAgB,GAA8B;CAC5D,IAAI;CAEJ,KAAK,IAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,CAAQ,GAG1C,AAAI,EAAO,CAAC,KAAK,CAAC,EAAkB,CAAC,MACnC,MAAa,EAAE,GAAG,EAAS,GAC3B,EAAS,KAAK,EAAE,QAAQ;CAI5B,OAAO,KAAY;AACrB"}
1
+ {"version":3,"file":"lazy.js","names":[],"sources":["../src/lazy.ts"],"sourcesContent":["const LAZY_BRAND = Symbol('rune.lazy');\n\n/** A deferred binding value — evaluated only when an entry is actually emitted. Create via `lazy(fn)`. */\nexport type LazyBinding = { readonly factory: () => unknown; readonly [LAZY_BRAND]: true };\n\n/** @internal */\nexport function isLazy(v: unknown): v is LazyBinding {\n return typeof v === 'object' && v !== null && (v as Record<symbol, unknown>)[LAZY_BRAND] === true;\n}\n\n/**\n * Defer evaluation of an expensive binding value until after the log level check passes.\n * The factory function is only called when an entry is actually emitted.\n *\n * @example\n * const reqLog = log.withBindings({ diagnostics: lazy(() => buildExpensiveDiagnostics()) });\n * reqLog.debug('trace'); // diagnostics() only called when logLevel allows debug\n */\nexport function lazy(fn: () => unknown): LazyBinding {\n return { factory: fn, [LAZY_BRAND]: true } as LazyBinding;\n}\n"],"mappings":";AAAA,IAAM,IAAa,OAAO,WAAW;AAMrC,SAAgB,EAAO,GAA8B;CACnD,OAAO,OAAO,KAAM,cAAY,KAAe,EAA8B,OAAgB;AAC/F;AAUA,SAAgB,EAAK,GAAgC;CACnD,OAAO;EAAE,SAAS;GAAK,IAAa;CAAK;AAC3C"}
package/dist/logger.cjs CHANGED
@@ -1,2 +1,2 @@
1
- const e=require("./types.cjs"),t=require("./_prototype.cjs"),n=require("./lazy.cjs");require("./_dev.cjs");const r=require("./console.cjs");function i(e){return{message:e.message,name:e.name,stack:e.stack}}function a(e){let n={};for(let[r,a]of Object.entries(e))t.isUnsafeObjectKey(r)||(n[r]=a instanceof Error?i(a):a);return n}function o(e,t,n){if(typeof e==`string`)return{context:void 0,message:e};if(e instanceof Error){let r=typeof t==`object`&&t?t:{};return{context:{err:i(e),...r},message:n===void 0?t!==void 0&&typeof t!=`object`?String(t):void 0:String(n)}}return typeof e==`object`&&e?{context:e,message:t===void 0?void 0:String(t)}:{context:void 0,message:e===void 0?void 0:String(e)}}function s(e,t){return e?t?`${e}.${t}`:e:t}function c(t={},l){let u=typeof t==`string`?{namespace:t,...l}:t,d=u.logLevel??`debug`,f=u.middleware??[],p=u.namespace??``,m=u.transports??[r.consoleTransport()],h={...u.bindings??{}},g=new AbortController,_=!1,v=t=>e.isLevelEnabled(d,t),y=()=>p?` (namespace: "${p}")`:``,b=e=>{let t=e;if(f.length>0){let n=e;for(let e of f)try{let t=e(n);if(t==null)return;n=t}catch(e){`${y()}${String(e)}`;return}t=n}for(let e of m)try{e(t)}catch(e){`${y()}${String(e)}`}},x=(e,t,r,i)=>{if(_||!v(e))return;let{context:s,message:c}=o(t,r,i),l=a(n.resolveBindings(h)),u=s?{...l,...a(n.resolveBindings(s))}:l;b({data:u,level:e,message:c,namespace:p,timestamp:new Date})},S=(e,t,n=`debug`)=>{let r=performance.now(),a=t=>{let a={duration_ms:Math.round((performance.now()-r)*100)/100};t!==void 0&&(a.err=i(t instanceof Error?t:Error(String(t)))),x(n,a,e)};try{let e=t();return e instanceof Promise?e.then(e=>(a(),e),e=>(a(e),Promise.reject(e))):(a(),e)}catch(e){throw a(e),e}},C=(e,t,n,i)=>{if(_||d===`off`||i!==void 0&&!v(i))return n();r.renderGroup(e,t,p,r.DEFAULT_THEME);try{let e=n();return e instanceof Promise?e.finally(()=>console.groupEnd()):(console.groupEnd(),e)}catch(e){throw console.groupEnd(),e}},w=(e={})=>c({bindings:{...h,...e.bindings??{}},logLevel:e.logLevel??d,middleware:e.middleware??f,namespace:e.namespace===void 0?p:s(p,e.namespace),transports:e.transports??m}),T={get bindings(){return{...h}},child:w,debug:(e,t,n)=>x(`debug`,e,t,n),get disposalSignal(){return g.signal},dispose:()=>{_||(_=!0,g.abort())},get disposed(){return _},enabled:t=>e.isLevelEnabled(d,t),error:(e,t,n)=>x(`error`,e,t,n),fatal:(e,t,n)=>x(`fatal`,e,t,n),group:(e,t,n)=>C(!1,e,t,n),groupCollapsed:(e,t,n)=>C(!0,e,t,n),info:(e,t,n)=>x(`info`,e,t,n),get logLevel(){return d},get middleware(){return[...f]},get namespace(){return p},[Symbol.dispose](){T.dispose()},time:S,get transports(){return[...m]},use:e=>w({middleware:[...f,e]}),warn:(e,t,n)=>x(`warn`,e,t,n),withBindings:e=>w({bindings:e})};return T}var l=c();exports.createLogger=c,exports.defaultLogger=l;
1
+ const e=require("./types.cjs"),t=require("./console.cjs"),n=require("./lazy.cjs");require("./_dev.cjs");const r=require("./_prototype.cjs");function i(e){return{message:e.message,name:e.name,stack:e.stack}}function a(e){let t={};for(let[a,o]of Object.entries(e)){if(r.isUnsafeObjectKey(a))continue;let e=n.isLazy(o)?o.factory():o;t[a]=e instanceof Error?i(e):e}return t}function o(e,t,n){if(typeof e==`string`)return{context:void 0,message:e};if(e instanceof Error){let r=typeof t==`object`&&t?t:{};return{context:{err:i(e),...r},message:n===void 0?t!==void 0&&typeof t!=`object`?String(t):void 0:String(n)}}return typeof e==`object`&&e?{context:e,message:t===void 0?void 0:String(t)}:{context:void 0,message:e===void 0?void 0:String(e)}}function s(e,t){return e?t?`${e}.${t}`:e:t}function c(n={},r){let l=typeof n==`string`?{namespace:n,...r}:n,u=l.logLevel??`debug`,d=l.middleware??[],f=l.namespace??``,p=l.transports??[t.consoleTransport()],m={...l.bindings??{}},h=new AbortController,g=!1,_=t=>e.isLevelEnabled(u,t),v=()=>f?` (namespace: "${f}")`:``,y=e=>{let t=e;if(d.length>0){let n=e;for(let e of d)try{let t=e(n);if(t==null)return;n=t}catch(e){`${v()}${String(e)}`;return}t=n}for(let e of p)try{e(t)}catch(e){`${v()}${String(e)}`}},b=(e,t,n,r)=>{if(g||!_(e))return;let{context:i,message:s}=o(t,n,r),c=i?{...a(m),...a(i)}:a(m);y({data:c,level:e,message:s,namespace:f,timestamp:new Date})},x=(e,t,n=`debug`)=>{let r=performance.now(),a=t=>{let a={duration_ms:Math.round((performance.now()-r)*100)/100};t!==void 0&&(a.err=i(t instanceof Error?t:Error(String(t)))),b(n,a,e)};try{let e=t();return e instanceof Promise?e.then(e=>(a(),e),e=>(a(e),Promise.reject(e))):(a(),e)}catch(e){throw a(e),e}},S=(e,n,r,i)=>{if(g||u===`off`||i!==void 0&&!_(i))return r();t.renderGroup(e,n,f,t.DEFAULT_THEME);try{let e=r();return e instanceof Promise?e.finally(()=>console.groupEnd()):(console.groupEnd(),e)}catch(e){throw console.groupEnd(),e}},C=(e={})=>c({bindings:{...m,...e.bindings??{}},logLevel:e.logLevel??u,middleware:e.middleware??d,namespace:e.namespace===void 0?f:s(f,e.namespace),transports:e.transports??p}),w={get bindings(){return{...m}},child:C,debug:(e,t,n)=>b(`debug`,e,t,n),get disposalSignal(){return h.signal},dispose:()=>{g||(g=!0,h.abort())},get disposed(){return g},enabled:t=>e.isLevelEnabled(u,t),error:(e,t,n)=>b(`error`,e,t,n),fatal:(e,t,n)=>b(`fatal`,e,t,n),group:(e,t,n)=>S(!1,e,t,n),groupCollapsed:(e,t,n)=>S(!0,e,t,n),info:(e,t,n)=>b(`info`,e,t,n),get logLevel(){return u},get middleware(){return[...d]},get namespace(){return f},[Symbol.dispose](){w.dispose()},time:x,get transports(){return[...p]},use:e=>C({middleware:[...d,e]}),warn:(e,t,n)=>b(`warn`,e,t,n),withBindings:e=>C({bindings:e})};return w}var l=c();exports.createLogger=c,exports.defaultLogger=l;
2
2
  //# sourceMappingURL=logger.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.cjs","names":[],"sources":["../src/logger.ts"],"sourcesContent":["import type { Bindings, LogEntry, Logger, LogLevel, LogMiddleware, LogType, RuneOptions, Transport } from './types';\n\nimport { warn } from './_dev';\nimport { isUnsafeObjectKey } from './_prototype';\nimport { DEFAULT_THEME, consoleTransport, renderGroup } from './console';\nimport { resolveBindings } from './lazy';\nimport { isLevelEnabled } from './types';\n\n/* --- Arg parsing (simplified) --- */\n\nfunction serializeError(err: Error): { message: string; name: string; stack?: string } {\n return { message: err.message, name: err.name, stack: err.stack };\n}\n\nfunction serializeErrors(ctx: Bindings): Bindings {\n const out: Bindings = {};\n\n for (const [k, v] of Object.entries(ctx)) {\n // Guard against a `__proto__`/`constructor`/`prototype` field name hijacking out's own\n // prototype via the bracket-assignment accessor — see _prototype.ts.\n if (isUnsafeObjectKey(k)) continue;\n\n out[k] = v instanceof Error ? serializeError(v) : v;\n }\n\n return out;\n}\n\ntype ParsedArgs = { context: Bindings | undefined; message: string | undefined };\n\nfunction parseArgs(msgOrCtx: unknown, second: unknown, third?: unknown): ParsedArgs {\n if (typeof msgOrCtx === 'string') {\n return { context: undefined, message: msgOrCtx };\n }\n\n if (msgOrCtx instanceof Error) {\n const ctx: Bindings = second !== null && typeof second === 'object' ? (second as Bindings) : {};\n\n return {\n context: { err: serializeError(msgOrCtx), ...ctx },\n message:\n third !== undefined\n ? String(third)\n : second !== undefined && typeof second !== 'object'\n ? String(second)\n : undefined,\n };\n }\n\n if (typeof msgOrCtx === 'object' && msgOrCtx !== null) {\n return {\n context: msgOrCtx as Bindings,\n message: second !== undefined ? String(second) : undefined,\n };\n }\n\n return { context: undefined, message: msgOrCtx !== undefined ? String(msgOrCtx) : undefined };\n}\n\n/* --- Namespace joining --- */\n\n/**\n * Joins parent and child namespaces with '.' as separator.\n * Examples:\n * joinNamespace('api', 'auth') → 'api.auth'\n * joinNamespace('', 'api') → 'api'\n * joinNamespace('api', '') → 'api'\n */\nfunction joinNamespace(parent: string, child: string): string {\n if (!parent) return child;\n\n if (!child) return parent;\n\n return `${parent}.${child}`;\n}\n\n/* --- createLogger --- */\n\n/**\n * Creates an isolated logger instance.\n *\n * Accepts two call signatures:\n * - `createLogger()` / `createLogger(options)` — configure via `RuneOptions`\n * - `createLogger('namespace', options?)` — namespace shorthand + optional options\n *\n * Each instance has its own immutable config (logLevel, transports, middleware).\n * To change the log level at runtime, create a new logger or child.\n */\nexport function createLogger(namespace: string, options?: Omit<RuneOptions, 'namespace'>): Logger;\nexport function createLogger(options?: RuneOptions): Logger;\nexport function createLogger(initial: RuneOptions | string = {}, extra?: Omit<RuneOptions, 'namespace'>): Logger {\n const initialOpts: RuneOptions = typeof initial === 'string' ? { namespace: initial, ...extra } : initial;\n\n const logLevel: LogLevel = initialOpts.logLevel ?? 'debug';\n const middleware: LogMiddleware[] = initialOpts.middleware ?? [];\n const namespace: string = initialOpts.namespace ?? '';\n const transports = initialOpts.transports ?? [consoleTransport()];\n const ownBindings: Bindings = { ...(initialOpts.bindings ?? {}) };\n\n const disposeController = new AbortController();\n let isDisposed = false;\n\n const passes = (type: LogType): boolean => isLevelEnabled(logLevel, type);\n const namespaceSuffix = (): string => (namespace ? ` (namespace: \"${namespace}\")` : '');\n\n const dispatch = (entry: LogEntry): void => {\n let current: LogEntry = entry;\n\n if (middleware.length > 0) {\n let c: LogEntry = entry;\n\n for (const mw of middleware) {\n try {\n const next = mw(c);\n\n if (next == null) return;\n\n c = next;\n } catch (err) {\n warn(`middleware threw and dropped this entry${namespaceSuffix()}: ${String(err)}`);\n\n return;\n }\n }\n\n current = c;\n }\n\n for (const t of transports) {\n try {\n t(current);\n } catch (err) {\n warn(`Transport threw an unhandled error${namespaceSuffix()}: ${String(err)}`);\n }\n }\n };\n\n const emit = (type: LogType, msgOrCtx: unknown, second?: unknown, third?: unknown): void => {\n if (isDisposed) return;\n\n if (!passes(type)) return;\n\n const { context, message } = parseArgs(msgOrCtx, second, third);\n // serializeErrors() always allocates a fresh object, so `data` is never an alias of `ownBindings`.\n const resolvedBindings = serializeErrors(resolveBindings(ownBindings));\n\n const data: Bindings = context\n ? { ...resolvedBindings, ...serializeErrors(resolveBindings(context)) }\n : resolvedBindings;\n\n dispatch({\n data,\n level: type,\n message,\n namespace,\n timestamp: new Date(),\n });\n };\n\n const timeImpl = <T>(label: string, fn: () => T, level: LogType = 'debug'): T => {\n const start = performance.now();\n\n const done = (thrownErr?: unknown): void => {\n const duration_ms = Math.round((performance.now() - start) * 100) / 100;\n const ctx: Bindings = { duration_ms };\n\n if (thrownErr !== undefined)\n ctx['err'] = serializeError(thrownErr instanceof Error ? thrownErr : new Error(String(thrownErr)));\n\n emit(level, ctx, label);\n };\n\n try {\n const result = fn();\n\n if (result instanceof Promise) {\n return result.then(\n (v) => {\n done();\n\n return v;\n },\n (err: unknown) => {\n done(err);\n\n return Promise.reject(err) as never;\n },\n ) as T;\n }\n\n done();\n\n return result;\n } catch (err) {\n done(err);\n throw err;\n }\n };\n\n const wrapGroup = <T>(collapsed: boolean, label: string, fn: () => T, level?: LogType): T => {\n if (isDisposed || logLevel === 'off') return fn();\n\n if (level !== undefined && !passes(level)) {\n return fn();\n }\n\n renderGroup(collapsed, label, namespace, DEFAULT_THEME);\n\n try {\n const result = fn();\n\n if (result instanceof Promise) return result.finally(() => console.groupEnd()) as T;\n\n console.groupEnd();\n\n return result;\n } catch (err) {\n console.groupEnd();\n throw err;\n }\n };\n\n const childLogger = (overrides: RuneOptions = {}): Logger =>\n createLogger({\n bindings: { ...ownBindings, ...(overrides.bindings ?? {}) },\n logLevel: overrides.logLevel ?? logLevel,\n middleware: overrides.middleware ?? middleware,\n namespace: overrides.namespace !== undefined ? joinNamespace(namespace, overrides.namespace) : namespace,\n transports: overrides.transports ?? transports,\n });\n\n const logger: Logger = {\n get bindings(): Readonly<Bindings> {\n return { ...ownBindings };\n },\n\n child: childLogger,\n\n debug: (m: unknown, s?: unknown, t?: unknown) => emit('debug', m, s, t),\n\n get disposalSignal(): AbortSignal {\n return disposeController.signal;\n },\n\n dispose: (): void => {\n if (isDisposed) return;\n\n isDisposed = true;\n disposeController.abort();\n },\n\n get disposed(): boolean {\n return isDisposed;\n },\n\n enabled: (type: LogLevel): boolean => isLevelEnabled(logLevel, type),\n\n error: (m: unknown, s?: unknown, t?: unknown) => emit('error', m, s, t),\n\n fatal: (m: unknown, s?: unknown, t?: unknown) => emit('fatal', m, s, t),\n\n group: (label, fn, level) => wrapGroup(false, label, fn, level),\n\n groupCollapsed: (label, fn, level) => wrapGroup(true, label, fn, level),\n\n info: (m: unknown, s?: unknown, t?: unknown) => emit('info', m, s, t),\n\n get logLevel(): LogLevel {\n return logLevel;\n },\n\n get middleware(): readonly LogMiddleware[] {\n return [...middleware];\n },\n\n get namespace(): string {\n return namespace;\n },\n\n [Symbol.dispose](): void {\n logger.dispose();\n },\n\n time: timeImpl,\n\n get transports(): readonly Transport[] {\n return [...transports];\n },\n\n use: (mw: LogMiddleware): Logger => childLogger({ middleware: [...middleware, mw] }),\n\n warn: (m: unknown, s?: unknown, t?: unknown) => emit('warn', m, s, t),\n\n withBindings: (bindings: Bindings): Logger => childLogger({ bindings }),\n };\n\n return logger;\n}\n\nexport const defaultLogger = createLogger();\n"],"mappings":"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"}
1
+ {"version":3,"file":"logger.cjs","names":[],"sources":["../src/logger.ts"],"sourcesContent":["import { warn } from './_dev';\nimport { isUnsafeObjectKey } from './_prototype';\nimport { consoleTransport, DEFAULT_THEME, renderGroup } from './console';\nimport { isLazy } from './lazy';\nimport type { Bindings, LogEntry, Logger, LogLevel, LogMiddleware, LogType, RuneOptions, Transport } from './types';\nimport { isLevelEnabled } from './types';\n\n/* --- Arg parsing (simplified) --- */\n\nfunction serializeError(err: Error): { message: string; name: string; stack?: string } {\n return { message: err.message, name: err.name, stack: err.stack };\n}\n\n/**\n * Resolve lazy bindings and serialize Errors in a single pass.\n * Always allocates a fresh object — the result is never an alias of the input.\n */\nfunction prepareBindings(bindings: Bindings): Bindings {\n const out: Bindings = {};\n\n for (const [k, v] of Object.entries(bindings)) {\n // Guard against a `__proto__`/`constructor`/`prototype` field name hijacking out's own\n // prototype via the bracket-assignment accessor — see _prototype.ts.\n if (isUnsafeObjectKey(k)) continue;\n\n const resolved = isLazy(v) ? v.factory() : v;\n\n out[k] = resolved instanceof Error ? serializeError(resolved) : resolved;\n }\n\n return out;\n}\n\ntype ParsedArgs = { context: Bindings | undefined; message: string | undefined };\n\nfunction parseArgs(msgOrCtx: unknown, second: unknown, third?: unknown): ParsedArgs {\n if (typeof msgOrCtx === 'string') {\n return { context: undefined, message: msgOrCtx };\n }\n\n if (msgOrCtx instanceof Error) {\n const ctx: Bindings = second !== null && typeof second === 'object' ? (second as Bindings) : {};\n\n return {\n context: { err: serializeError(msgOrCtx), ...ctx },\n message:\n third !== undefined\n ? String(third)\n : second !== undefined && typeof second !== 'object'\n ? String(second)\n : undefined,\n };\n }\n\n if (typeof msgOrCtx === 'object' && msgOrCtx !== null) {\n return {\n context: msgOrCtx as Bindings,\n message: second !== undefined ? String(second) : undefined,\n };\n }\n\n return { context: undefined, message: msgOrCtx !== undefined ? String(msgOrCtx) : undefined };\n}\n\n/* --- Namespace joining --- */\n\n/**\n * Joins parent and child namespaces with '.' as separator.\n * Examples:\n * joinNamespace('api', 'auth') → 'api.auth'\n * joinNamespace('', 'api') → 'api'\n * joinNamespace('api', '') → 'api'\n */\nfunction joinNamespace(parent: string, child: string): string {\n if (!parent) return child;\n\n if (!child) return parent;\n\n return `${parent}.${child}`;\n}\n\n/* --- createLogger --- */\n\n/**\n * Creates an isolated logger instance.\n *\n * Accepts two call signatures:\n * - `createLogger()` / `createLogger(options)` — configure via `RuneOptions`\n * - `createLogger('namespace', options?)` — namespace shorthand + optional options\n *\n * Each instance has its own immutable config (logLevel, transports, middleware).\n * To change the log level at runtime, create a new logger or child.\n */\nexport function createLogger(namespace: string, options?: Omit<RuneOptions, 'namespace'>): Logger;\nexport function createLogger(options?: RuneOptions): Logger;\nexport function createLogger(initial: RuneOptions | string = {}, extra?: Omit<RuneOptions, 'namespace'>): Logger {\n const initialOpts: RuneOptions = typeof initial === 'string' ? { namespace: initial, ...extra } : initial;\n\n const logLevel: LogLevel = initialOpts.logLevel ?? 'debug';\n const middleware: LogMiddleware[] = initialOpts.middleware ?? [];\n const namespace: string = initialOpts.namespace ?? '';\n const transports = initialOpts.transports ?? [consoleTransport()];\n const ownBindings: Bindings = { ...(initialOpts.bindings ?? {}) };\n\n const disposeController = new AbortController();\n let isDisposed = false;\n\n const passes = (type: LogType): boolean => isLevelEnabled(logLevel, type);\n const namespaceSuffix = (): string => (namespace ? ` (namespace: \"${namespace}\")` : '');\n\n const dispatch = (entry: LogEntry): void => {\n let current: LogEntry = entry;\n\n if (middleware.length > 0) {\n let c: LogEntry = entry;\n\n for (const mw of middleware) {\n try {\n const next = mw(c);\n\n if (next == null) return;\n\n c = next;\n } catch (err) {\n warn(`middleware threw and dropped this entry${namespaceSuffix()}: ${String(err)}`);\n\n return;\n }\n }\n\n current = c;\n }\n\n for (const t of transports) {\n try {\n t(current);\n } catch (err) {\n warn(`Transport threw an unhandled error${namespaceSuffix()}: ${String(err)}`);\n }\n }\n };\n\n const emit = (type: LogType, msgOrCtx: unknown, second?: unknown, third?: unknown): void => {\n if (isDisposed) return;\n\n if (!passes(type)) return;\n\n const { context, message } = parseArgs(msgOrCtx, second, third);\n // prepareBindings() always allocates a fresh object, so `data` is never an alias of `ownBindings`.\n const data: Bindings = context\n ? { ...prepareBindings(ownBindings), ...prepareBindings(context) }\n : prepareBindings(ownBindings);\n\n dispatch({\n data,\n level: type,\n message,\n namespace,\n timestamp: new Date(),\n });\n };\n\n const timeImpl = <T>(label: string, fn: () => T, level: LogType = 'debug'): T => {\n const start = performance.now();\n\n const done = (thrownErr?: unknown): void => {\n const duration_ms = Math.round((performance.now() - start) * 100) / 100;\n const ctx: Bindings = { duration_ms };\n\n if (thrownErr !== undefined)\n ctx.err = serializeError(thrownErr instanceof Error ? thrownErr : new Error(String(thrownErr)));\n\n emit(level, ctx, label);\n };\n\n try {\n const result = fn();\n\n if (result instanceof Promise) {\n return result.then(\n (v) => {\n done();\n\n return v;\n },\n (err: unknown) => {\n done(err);\n\n return Promise.reject(err) as never;\n },\n ) as T;\n }\n\n done();\n\n return result;\n } catch (err) {\n done(err);\n throw err;\n }\n };\n\n const wrapGroup = <T>(collapsed: boolean, label: string, fn: () => T, level?: LogType): T => {\n if (isDisposed || logLevel === 'off') return fn();\n\n if (level !== undefined && !passes(level)) {\n return fn();\n }\n\n renderGroup(collapsed, label, namespace, DEFAULT_THEME);\n\n try {\n const result = fn();\n\n if (result instanceof Promise) return result.finally(() => console.groupEnd()) as T;\n\n console.groupEnd();\n\n return result;\n } catch (err) {\n console.groupEnd();\n throw err;\n }\n };\n\n const childLogger = (overrides: RuneOptions = {}): Logger =>\n createLogger({\n bindings: { ...ownBindings, ...(overrides.bindings ?? {}) },\n logLevel: overrides.logLevel ?? logLevel,\n middleware: overrides.middleware ?? middleware,\n namespace: overrides.namespace !== undefined ? joinNamespace(namespace, overrides.namespace) : namespace,\n transports: overrides.transports ?? transports,\n });\n\n const logger: Logger = {\n get bindings(): Readonly<Bindings> {\n return { ...ownBindings };\n },\n\n child: childLogger,\n\n debug: (m: unknown, s?: unknown, t?: unknown) => emit('debug', m, s, t),\n\n get disposalSignal(): AbortSignal {\n return disposeController.signal;\n },\n\n dispose: (): void => {\n if (isDisposed) return;\n\n isDisposed = true;\n disposeController.abort();\n },\n\n get disposed(): boolean {\n return isDisposed;\n },\n\n enabled: (type: LogLevel): boolean => isLevelEnabled(logLevel, type),\n\n error: (m: unknown, s?: unknown, t?: unknown) => emit('error', m, s, t),\n\n fatal: (m: unknown, s?: unknown, t?: unknown) => emit('fatal', m, s, t),\n\n group: (label, fn, level) => wrapGroup(false, label, fn, level),\n\n groupCollapsed: (label, fn, level) => wrapGroup(true, label, fn, level),\n\n info: (m: unknown, s?: unknown, t?: unknown) => emit('info', m, s, t),\n\n get logLevel(): LogLevel {\n return logLevel;\n },\n\n get middleware(): readonly LogMiddleware[] {\n return [...middleware];\n },\n\n get namespace(): string {\n return namespace;\n },\n\n [Symbol.dispose](): void {\n logger.dispose();\n },\n\n time: timeImpl,\n\n get transports(): readonly Transport[] {\n return [...transports];\n },\n\n use: (mw: LogMiddleware): Logger => childLogger({ middleware: [...middleware, mw] }),\n\n warn: (m: unknown, s?: unknown, t?: unknown) => emit('warn', m, s, t),\n\n withBindings: (bindings: Bindings): Logger => childLogger({ bindings }),\n };\n\n return logger;\n}\n\nexport const defaultLogger = createLogger();\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,MAAM,EAAoC,WAAW,EAAa,MAAM,SAAS,CAAC;AA8EpH;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,MAAM,CAAC;AAClG,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;AAkN5D,eAAO,MAAM,aAAa,QAAiB,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAsB,MAAM,EAAoC,WAAW,EAAa,MAAM,SAAS,CAAC;AA+EpH;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,MAAM,CAAC;AAClG,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;AAgN5D,eAAO,MAAM,aAAa,QAAiB,CAAC"}
package/dist/logger.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { isLevelEnabled as e } from "./types.js";
2
- import { isUnsafeObjectKey as t } from "./_prototype.js";
3
- import { resolveBindings as n } from "./lazy.js";
2
+ import { DEFAULT_THEME as t, consoleTransport as n, renderGroup as r } from "./console.js";
3
+ import { isLazy as i } from "./lazy.js";
4
4
  import "./_dev.js";
5
- import { DEFAULT_THEME as r, consoleTransport as i, renderGroup as a } from "./console.js";
5
+ import { isUnsafeObjectKey as a } from "./_prototype.js";
6
6
  //#region src/logger.ts
7
7
  function o(e) {
8
8
  return {
@@ -12,9 +12,13 @@ function o(e) {
12
12
  };
13
13
  }
14
14
  function s(e) {
15
- let n = {};
16
- for (let [r, i] of Object.entries(e)) t(r) || (n[r] = i instanceof Error ? o(i) : i);
17
- return n;
15
+ let t = {};
16
+ for (let [n, r] of Object.entries(e)) {
17
+ if (a(n)) continue;
18
+ let e = i(r) ? r.factory() : r;
19
+ t[n] = e instanceof Error ? o(e) : e;
20
+ }
21
+ return t;
18
22
  }
19
23
  function c(e, t, n) {
20
24
  if (typeof e == "string") return {
@@ -42,46 +46,46 @@ function c(e, t, n) {
42
46
  function l(e, t) {
43
47
  return e ? t ? `${e}.${t}` : e : t;
44
48
  }
45
- function u(t = {}, d) {
46
- let f = typeof t == "string" ? {
47
- namespace: t,
48
- ...d
49
- } : t, p = f.logLevel ?? "debug", m = f.middleware ?? [], h = f.namespace ?? "", g = f.transports ?? [i()], _ = { ...f.bindings ?? {} }, v = new AbortController(), y = !1, b = (t) => e(p, t), x = () => h ? ` (namespace: "${h}")` : "", S = (e) => {
49
+ function u(i = {}, a) {
50
+ let d = typeof i == "string" ? {
51
+ namespace: i,
52
+ ...a
53
+ } : i, f = d.logLevel ?? "debug", p = d.middleware ?? [], m = d.namespace ?? "", h = d.transports ?? [n()], g = { ...d.bindings ?? {} }, _ = new AbortController(), v = !1, y = (t) => e(f, t), b = () => m ? ` (namespace: "${m}")` : "", x = (e) => {
50
54
  let t = e;
51
- if (m.length > 0) {
55
+ if (p.length > 0) {
52
56
  let n = e;
53
- for (let e of m) try {
57
+ for (let e of p) try {
54
58
  let t = e(n);
55
59
  if (t == null) return;
56
60
  n = t;
57
61
  } catch (e) {
58
- `${x()}${String(e)}`;
62
+ `${b()}${String(e)}`;
59
63
  return;
60
64
  }
61
65
  t = n;
62
66
  }
63
- for (let e of g) try {
67
+ for (let e of h) try {
64
68
  e(t);
65
69
  } catch (e) {
66
- `${x()}${String(e)}`;
70
+ `${b()}${String(e)}`;
67
71
  }
68
- }, C = (e, t, r, i) => {
69
- if (y || !b(e)) return;
70
- let { context: a, message: o } = c(t, r, i), l = s(n(_)), u = a ? {
71
- ...l,
72
- ...s(n(a))
73
- } : l;
74
- S({
75
- data: u,
72
+ }, S = (e, t, n, r) => {
73
+ if (v || !y(e)) return;
74
+ let { context: i, message: a } = c(t, n, r), o = i ? {
75
+ ...s(g),
76
+ ...s(i)
77
+ } : s(g);
78
+ x({
79
+ data: o,
76
80
  level: e,
77
- message: o,
78
- namespace: h,
81
+ message: a,
82
+ namespace: m,
79
83
  timestamp: /* @__PURE__ */ new Date()
80
84
  });
81
- }, w = (e, t, n = "debug") => {
85
+ }, C = (e, t, n = "debug") => {
82
86
  let r = performance.now(), i = (t) => {
83
87
  let i = { duration_ms: Math.round((performance.now() - r) * 100) / 100 };
84
- t !== void 0 && (i.err = o(t instanceof Error ? t : Error(String(t)))), C(n, i, e);
88
+ t !== void 0 && (i.err = o(t instanceof Error ? t : Error(String(t)))), S(n, i, e);
85
89
  };
86
90
  try {
87
91
  let e = t();
@@ -89,66 +93,66 @@ function u(t = {}, d) {
89
93
  } catch (e) {
90
94
  throw i(e), e;
91
95
  }
92
- }, T = (e, t, n, i) => {
93
- if (y || p === "off" || i !== void 0 && !b(i)) return n();
94
- a(e, t, h, r);
96
+ }, w = (e, n, i, a) => {
97
+ if (v || f === "off" || a !== void 0 && !y(a)) return i();
98
+ r(e, n, m, t);
95
99
  try {
96
- let e = n();
100
+ let e = i();
97
101
  return e instanceof Promise ? e.finally(() => console.groupEnd()) : (console.groupEnd(), e);
98
102
  } catch (e) {
99
103
  throw console.groupEnd(), e;
100
104
  }
101
- }, E = (e = {}) => u({
105
+ }, T = (e = {}) => u({
102
106
  bindings: {
103
- ..._,
107
+ ...g,
104
108
  ...e.bindings ?? {}
105
109
  },
106
- logLevel: e.logLevel ?? p,
107
- middleware: e.middleware ?? m,
108
- namespace: e.namespace === void 0 ? h : l(h, e.namespace),
109
- transports: e.transports ?? g
110
- }), D = {
110
+ logLevel: e.logLevel ?? f,
111
+ middleware: e.middleware ?? p,
112
+ namespace: e.namespace === void 0 ? m : l(m, e.namespace),
113
+ transports: e.transports ?? h
114
+ }), E = {
111
115
  get bindings() {
112
- return { ..._ };
116
+ return { ...g };
113
117
  },
114
- child: E,
115
- debug: (e, t, n) => C("debug", e, t, n),
118
+ child: T,
119
+ debug: (e, t, n) => S("debug", e, t, n),
116
120
  get disposalSignal() {
117
- return v.signal;
121
+ return _.signal;
118
122
  },
119
123
  dispose: () => {
120
- y || (y = !0, v.abort());
124
+ v || (v = !0, _.abort());
121
125
  },
122
126
  get disposed() {
123
- return y;
127
+ return v;
124
128
  },
125
- enabled: (t) => e(p, t),
126
- error: (e, t, n) => C("error", e, t, n),
127
- fatal: (e, t, n) => C("fatal", e, t, n),
128
- group: (e, t, n) => T(!1, e, t, n),
129
- groupCollapsed: (e, t, n) => T(!0, e, t, n),
130
- info: (e, t, n) => C("info", e, t, n),
129
+ enabled: (t) => e(f, t),
130
+ error: (e, t, n) => S("error", e, t, n),
131
+ fatal: (e, t, n) => S("fatal", e, t, n),
132
+ group: (e, t, n) => w(!1, e, t, n),
133
+ groupCollapsed: (e, t, n) => w(!0, e, t, n),
134
+ info: (e, t, n) => S("info", e, t, n),
131
135
  get logLevel() {
132
- return p;
136
+ return f;
133
137
  },
134
138
  get middleware() {
135
- return [...m];
139
+ return [...p];
136
140
  },
137
141
  get namespace() {
138
- return h;
142
+ return m;
139
143
  },
140
144
  [Symbol.dispose]() {
141
- D.dispose();
145
+ E.dispose();
142
146
  },
143
- time: w,
147
+ time: C,
144
148
  get transports() {
145
- return [...g];
149
+ return [...h];
146
150
  },
147
- use: (e) => E({ middleware: [...m, e] }),
148
- warn: (e, t, n) => C("warn", e, t, n),
149
- withBindings: (e) => E({ bindings: e })
151
+ use: (e) => T({ middleware: [...p, e] }),
152
+ warn: (e, t, n) => S("warn", e, t, n),
153
+ withBindings: (e) => T({ bindings: e })
150
154
  };
151
- return D;
155
+ return E;
152
156
  }
153
157
  var d = u();
154
158
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","names":[],"sources":["../src/logger.ts"],"sourcesContent":["import type { Bindings, LogEntry, Logger, LogLevel, LogMiddleware, LogType, RuneOptions, Transport } from './types';\n\nimport { warn } from './_dev';\nimport { isUnsafeObjectKey } from './_prototype';\nimport { DEFAULT_THEME, consoleTransport, renderGroup } from './console';\nimport { resolveBindings } from './lazy';\nimport { isLevelEnabled } from './types';\n\n/* --- Arg parsing (simplified) --- */\n\nfunction serializeError(err: Error): { message: string; name: string; stack?: string } {\n return { message: err.message, name: err.name, stack: err.stack };\n}\n\nfunction serializeErrors(ctx: Bindings): Bindings {\n const out: Bindings = {};\n\n for (const [k, v] of Object.entries(ctx)) {\n // Guard against a `__proto__`/`constructor`/`prototype` field name hijacking out's own\n // prototype via the bracket-assignment accessor — see _prototype.ts.\n if (isUnsafeObjectKey(k)) continue;\n\n out[k] = v instanceof Error ? serializeError(v) : v;\n }\n\n return out;\n}\n\ntype ParsedArgs = { context: Bindings | undefined; message: string | undefined };\n\nfunction parseArgs(msgOrCtx: unknown, second: unknown, third?: unknown): ParsedArgs {\n if (typeof msgOrCtx === 'string') {\n return { context: undefined, message: msgOrCtx };\n }\n\n if (msgOrCtx instanceof Error) {\n const ctx: Bindings = second !== null && typeof second === 'object' ? (second as Bindings) : {};\n\n return {\n context: { err: serializeError(msgOrCtx), ...ctx },\n message:\n third !== undefined\n ? String(third)\n : second !== undefined && typeof second !== 'object'\n ? String(second)\n : undefined,\n };\n }\n\n if (typeof msgOrCtx === 'object' && msgOrCtx !== null) {\n return {\n context: msgOrCtx as Bindings,\n message: second !== undefined ? String(second) : undefined,\n };\n }\n\n return { context: undefined, message: msgOrCtx !== undefined ? String(msgOrCtx) : undefined };\n}\n\n/* --- Namespace joining --- */\n\n/**\n * Joins parent and child namespaces with '.' as separator.\n * Examples:\n * joinNamespace('api', 'auth') → 'api.auth'\n * joinNamespace('', 'api') → 'api'\n * joinNamespace('api', '') → 'api'\n */\nfunction joinNamespace(parent: string, child: string): string {\n if (!parent) return child;\n\n if (!child) return parent;\n\n return `${parent}.${child}`;\n}\n\n/* --- createLogger --- */\n\n/**\n * Creates an isolated logger instance.\n *\n * Accepts two call signatures:\n * - `createLogger()` / `createLogger(options)` — configure via `RuneOptions`\n * - `createLogger('namespace', options?)` — namespace shorthand + optional options\n *\n * Each instance has its own immutable config (logLevel, transports, middleware).\n * To change the log level at runtime, create a new logger or child.\n */\nexport function createLogger(namespace: string, options?: Omit<RuneOptions, 'namespace'>): Logger;\nexport function createLogger(options?: RuneOptions): Logger;\nexport function createLogger(initial: RuneOptions | string = {}, extra?: Omit<RuneOptions, 'namespace'>): Logger {\n const initialOpts: RuneOptions = typeof initial === 'string' ? { namespace: initial, ...extra } : initial;\n\n const logLevel: LogLevel = initialOpts.logLevel ?? 'debug';\n const middleware: LogMiddleware[] = initialOpts.middleware ?? [];\n const namespace: string = initialOpts.namespace ?? '';\n const transports = initialOpts.transports ?? [consoleTransport()];\n const ownBindings: Bindings = { ...(initialOpts.bindings ?? {}) };\n\n const disposeController = new AbortController();\n let isDisposed = false;\n\n const passes = (type: LogType): boolean => isLevelEnabled(logLevel, type);\n const namespaceSuffix = (): string => (namespace ? ` (namespace: \"${namespace}\")` : '');\n\n const dispatch = (entry: LogEntry): void => {\n let current: LogEntry = entry;\n\n if (middleware.length > 0) {\n let c: LogEntry = entry;\n\n for (const mw of middleware) {\n try {\n const next = mw(c);\n\n if (next == null) return;\n\n c = next;\n } catch (err) {\n warn(`middleware threw and dropped this entry${namespaceSuffix()}: ${String(err)}`);\n\n return;\n }\n }\n\n current = c;\n }\n\n for (const t of transports) {\n try {\n t(current);\n } catch (err) {\n warn(`Transport threw an unhandled error${namespaceSuffix()}: ${String(err)}`);\n }\n }\n };\n\n const emit = (type: LogType, msgOrCtx: unknown, second?: unknown, third?: unknown): void => {\n if (isDisposed) return;\n\n if (!passes(type)) return;\n\n const { context, message } = parseArgs(msgOrCtx, second, third);\n // serializeErrors() always allocates a fresh object, so `data` is never an alias of `ownBindings`.\n const resolvedBindings = serializeErrors(resolveBindings(ownBindings));\n\n const data: Bindings = context\n ? { ...resolvedBindings, ...serializeErrors(resolveBindings(context)) }\n : resolvedBindings;\n\n dispatch({\n data,\n level: type,\n message,\n namespace,\n timestamp: new Date(),\n });\n };\n\n const timeImpl = <T>(label: string, fn: () => T, level: LogType = 'debug'): T => {\n const start = performance.now();\n\n const done = (thrownErr?: unknown): void => {\n const duration_ms = Math.round((performance.now() - start) * 100) / 100;\n const ctx: Bindings = { duration_ms };\n\n if (thrownErr !== undefined)\n ctx['err'] = serializeError(thrownErr instanceof Error ? thrownErr : new Error(String(thrownErr)));\n\n emit(level, ctx, label);\n };\n\n try {\n const result = fn();\n\n if (result instanceof Promise) {\n return result.then(\n (v) => {\n done();\n\n return v;\n },\n (err: unknown) => {\n done(err);\n\n return Promise.reject(err) as never;\n },\n ) as T;\n }\n\n done();\n\n return result;\n } catch (err) {\n done(err);\n throw err;\n }\n };\n\n const wrapGroup = <T>(collapsed: boolean, label: string, fn: () => T, level?: LogType): T => {\n if (isDisposed || logLevel === 'off') return fn();\n\n if (level !== undefined && !passes(level)) {\n return fn();\n }\n\n renderGroup(collapsed, label, namespace, DEFAULT_THEME);\n\n try {\n const result = fn();\n\n if (result instanceof Promise) return result.finally(() => console.groupEnd()) as T;\n\n console.groupEnd();\n\n return result;\n } catch (err) {\n console.groupEnd();\n throw err;\n }\n };\n\n const childLogger = (overrides: RuneOptions = {}): Logger =>\n createLogger({\n bindings: { ...ownBindings, ...(overrides.bindings ?? {}) },\n logLevel: overrides.logLevel ?? logLevel,\n middleware: overrides.middleware ?? middleware,\n namespace: overrides.namespace !== undefined ? joinNamespace(namespace, overrides.namespace) : namespace,\n transports: overrides.transports ?? transports,\n });\n\n const logger: Logger = {\n get bindings(): Readonly<Bindings> {\n return { ...ownBindings };\n },\n\n child: childLogger,\n\n debug: (m: unknown, s?: unknown, t?: unknown) => emit('debug', m, s, t),\n\n get disposalSignal(): AbortSignal {\n return disposeController.signal;\n },\n\n dispose: (): void => {\n if (isDisposed) return;\n\n isDisposed = true;\n disposeController.abort();\n },\n\n get disposed(): boolean {\n return isDisposed;\n },\n\n enabled: (type: LogLevel): boolean => isLevelEnabled(logLevel, type),\n\n error: (m: unknown, s?: unknown, t?: unknown) => emit('error', m, s, t),\n\n fatal: (m: unknown, s?: unknown, t?: unknown) => emit('fatal', m, s, t),\n\n group: (label, fn, level) => wrapGroup(false, label, fn, level),\n\n groupCollapsed: (label, fn, level) => wrapGroup(true, label, fn, level),\n\n info: (m: unknown, s?: unknown, t?: unknown) => emit('info', m, s, t),\n\n get logLevel(): LogLevel {\n return logLevel;\n },\n\n get middleware(): readonly LogMiddleware[] {\n return [...middleware];\n },\n\n get namespace(): string {\n return namespace;\n },\n\n [Symbol.dispose](): void {\n logger.dispose();\n },\n\n time: timeImpl,\n\n get transports(): readonly Transport[] {\n return [...transports];\n },\n\n use: (mw: LogMiddleware): Logger => childLogger({ middleware: [...middleware, mw] }),\n\n warn: (m: unknown, s?: unknown, t?: unknown) => emit('warn', m, s, t),\n\n withBindings: (bindings: Bindings): Logger => childLogger({ bindings }),\n };\n\n return logger;\n}\n\nexport const defaultLogger = createLogger();\n"],"mappings":";;;;;;AAUA,SAAS,EAAe,GAA+D;CACrF,OAAO;EAAE,SAAS,EAAI;EAAS,MAAM,EAAI;EAAM,OAAO,EAAI;CAAM;AAClE;AAEA,SAAS,EAAgB,GAAyB;CAChD,IAAM,IAAgB,CAAC;CAEvB,KAAK,IAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,CAAG,GAGjC,EAAkB,CAAC,MAEvB,EAAI,KAAK,aAAa,QAAQ,EAAe,CAAC,IAAI;CAGpD,OAAO;AACT;AAIA,SAAS,EAAU,GAAmB,GAAiB,GAA6B;CAClF,IAAI,OAAO,KAAa,UACtB,OAAO;EAAE,SAAS,KAAA;EAAW,SAAS;CAAS;CAGjD,IAAI,aAAoB,OAAO;EAC7B,IAAM,IAAmC,OAAO,KAAW,YAArC,IAAiD,IAAsB,CAAC;EAE9F,OAAO;GACL,SAAS;IAAE,KAAK,EAAe,CAAQ;IAAG,GAAG;GAAI;GACjD,SACE,MAAU,KAAA,IAEN,MAAW,KAAA,KAAa,OAAO,KAAW,WACxC,OAAO,CAAM,IACb,KAAA,IAHF,OAAO,CAAK;EAIpB;CACF;CASA,OAPI,OAAO,KAAa,YAAY,IAC3B;EACL,SAAS;EACT,SAAS,MAAW,KAAA,IAA6B,KAAA,IAAjB,OAAO,CAAM;CAC/C,IAGK;EAAE,SAAS,KAAA;EAAW,SAAS,MAAa,KAAA,IAA+B,KAAA,IAAnB,OAAO,CAAQ;CAAc;AAC9F;AAWA,SAAS,EAAc,GAAgB,GAAuB;CAK5D,OAJK,IAEA,IAEE,GAAG,EAAO,GAAG,MAFD,IAFC;AAKtB;AAgBA,SAAgB,EAAa,IAAgC,CAAC,GAAG,GAAgD;CAC/G,IAAM,IAA2B,OAAO,KAAY,WAAW;EAAE,WAAW;EAAS,GAAG;CAAM,IAAI,GAE5F,IAAqB,EAAY,YAAY,SAC7C,IAA8B,EAAY,cAAc,CAAC,GACzD,IAAoB,EAAY,aAAa,IAC7C,IAAa,EAAY,cAAc,CAAC,EAAiB,CAAC,GAC1D,IAAwB,EAAE,GAAI,EAAY,YAAY,CAAC,EAAG,GAE1D,IAAoB,IAAI,gBAAgB,GAC1C,IAAa,IAEX,KAAU,MAA2B,EAAe,GAAU,CAAI,GAClE,UAAiC,IAAY,iBAAiB,EAAU,MAAM,IAE9E,KAAY,MAA0B;EAC1C,IAAI,IAAoB;EAExB,IAAI,EAAW,SAAS,GAAG;GACzB,IAAI,IAAc;GAElB,KAAK,IAAM,KAAM,GACf,IAAI;IACF,IAAM,IAAO,EAAG,CAAC;IAEjB,IAAI,KAAQ,MAAM;IAElB,IAAI;GACN,SAAS,GAAK;IACZ,AAAK,GAA0C,EAAgB,EAA1D,EAAgE,OAAO,CAAG,EAA1E;IAEL;GACF;GAGF,IAAU;EACZ;EAEA,KAAK,IAAM,KAAK,GACd,IAAI;GACF,EAAE,CAAO;EACX,SAAS,GAAK;GACZ,AAAK,GAAqC,EAAgB,EAArD,EAA2D,OAAO,CAAG,EAArE;EACP;CAEJ,GAEM,KAAQ,GAAe,GAAmB,GAAkB,MAA0B;EAG1F,IAFI,KAEA,CAAC,EAAO,CAAI,GAAG;EAEnB,IAAM,EAAE,YAAS,eAAY,EAAU,GAAU,GAAQ,CAAK,GAExD,IAAmB,EAAgB,EAAgB,CAAW,CAAC,GAE/D,IAAiB,IACnB;GAAE,GAAG;GAAkB,GAAG,EAAgB,EAAgB,CAAO,CAAC;EAAE,IACpE;EAEJ,EAAS;GACP;GACA,OAAO;GACP;GACA;GACA,2BAAW,IAAI,KAAK;EACtB,CAAC;CACH,GAEM,KAAe,GAAe,GAAa,IAAiB,YAAe;EAC/E,IAAM,IAAQ,YAAY,IAAI,GAExB,KAAQ,MAA8B;GAE1C,IAAM,IAAgB,EAAE,aADJ,KAAK,OAAO,YAAY,IAAI,IAAI,KAAS,GAAG,IAAI,IAChC;GAKpC,AAHI,MAAc,KAAA,MAChB,EAAI,MAAS,EAAe,aAAqB,QAAQ,IAAgB,MAAM,OAAO,CAAS,CAAC,CAAC,IAEnG,EAAK,GAAO,GAAK,CAAK;EACxB;EAEA,IAAI;GACF,IAAM,IAAS,EAAG;GAmBlB,OAjBI,aAAkB,UACb,EAAO,MACX,OACC,EAAK,GAEE,KAER,OACC,EAAK,CAAG,GAED,QAAQ,OAAO,CAAG,EAE7B,KAGF,EAAK,GAEE;EACT,SAAS,GAAK;GAEZ,MADA,EAAK,CAAG,GACF;EACR;CACF,GAEM,KAAgB,GAAoB,GAAe,GAAa,MAAuB;EAG3F,IAFI,KAAc,MAAa,SAE3B,MAAU,KAAA,KAAa,CAAC,EAAO,CAAK,GACtC,OAAO,EAAG;EAGZ,EAAY,GAAW,GAAO,GAAW,CAAa;EAEtD,IAAI;GACF,IAAM,IAAS,EAAG;GAMlB,OAJI,aAAkB,UAAgB,EAAO,cAAc,QAAQ,SAAS,CAAC,KAE7E,QAAQ,SAAS,GAEV;EACT,SAAS,GAAK;GAEZ,MADA,QAAQ,SAAS,GACX;EACR;CACF,GAEM,KAAe,IAAyB,CAAC,MAC7C,EAAa;EACX,UAAU;GAAE,GAAG;GAAa,GAAI,EAAU,YAAY,CAAC;EAAG;EAC1D,UAAU,EAAU,YAAY;EAChC,YAAY,EAAU,cAAc;EACpC,WAAW,EAAU,cAAc,KAAA,IAA4D,IAAhD,EAAc,GAAW,EAAU,SAAS;EAC3F,YAAY,EAAU,cAAc;CACtC,CAAC,GAEG,IAAiB;EACrB,IAAI,WAA+B;GACjC,OAAO,EAAE,GAAG,EAAY;EAC1B;EAEA,OAAO;EAEP,QAAQ,GAAY,GAAa,MAAgB,EAAK,SAAS,GAAG,GAAG,CAAC;EAEtE,IAAI,iBAA8B;GAChC,OAAO,EAAkB;EAC3B;EAEA,eAAqB;GACf,MAEJ,IAAa,IACb,EAAkB,MAAM;EAC1B;EAEA,IAAI,WAAoB;GACtB,OAAO;EACT;EAEA,UAAU,MAA4B,EAAe,GAAU,CAAI;EAEnE,QAAQ,GAAY,GAAa,MAAgB,EAAK,SAAS,GAAG,GAAG,CAAC;EAEtE,QAAQ,GAAY,GAAa,MAAgB,EAAK,SAAS,GAAG,GAAG,CAAC;EAEtE,QAAQ,GAAO,GAAI,MAAU,EAAU,IAAO,GAAO,GAAI,CAAK;EAE9D,iBAAiB,GAAO,GAAI,MAAU,EAAU,IAAM,GAAO,GAAI,CAAK;EAEtE,OAAO,GAAY,GAAa,MAAgB,EAAK,QAAQ,GAAG,GAAG,CAAC;EAEpE,IAAI,WAAqB;GACvB,OAAO;EACT;EAEA,IAAI,aAAuC;GACzC,OAAO,CAAC,GAAG,CAAU;EACvB;EAEA,IAAI,YAAoB;GACtB,OAAO;EACT;EAEA,CAAC,OAAO,WAAiB;GACvB,EAAO,QAAQ;EACjB;EAEA,MAAM;EAEN,IAAI,aAAmC;GACrC,OAAO,CAAC,GAAG,CAAU;EACvB;EAEA,MAAM,MAA8B,EAAY,EAAE,YAAY,CAAC,GAAG,GAAY,CAAE,EAAE,CAAC;EAEnF,OAAO,GAAY,GAAa,MAAgB,EAAK,QAAQ,GAAG,GAAG,CAAC;EAEpE,eAAe,MAA+B,EAAY,EAAE,YAAS,CAAC;CACxE;CAEA,OAAO;AACT;AAEA,IAAa,IAAgB,EAAa"}
1
+ {"version":3,"file":"logger.js","names":[],"sources":["../src/logger.ts"],"sourcesContent":["import { warn } from './_dev';\nimport { isUnsafeObjectKey } from './_prototype';\nimport { consoleTransport, DEFAULT_THEME, renderGroup } from './console';\nimport { isLazy } from './lazy';\nimport type { Bindings, LogEntry, Logger, LogLevel, LogMiddleware, LogType, RuneOptions, Transport } from './types';\nimport { isLevelEnabled } from './types';\n\n/* --- Arg parsing (simplified) --- */\n\nfunction serializeError(err: Error): { message: string; name: string; stack?: string } {\n return { message: err.message, name: err.name, stack: err.stack };\n}\n\n/**\n * Resolve lazy bindings and serialize Errors in a single pass.\n * Always allocates a fresh object — the result is never an alias of the input.\n */\nfunction prepareBindings(bindings: Bindings): Bindings {\n const out: Bindings = {};\n\n for (const [k, v] of Object.entries(bindings)) {\n // Guard against a `__proto__`/`constructor`/`prototype` field name hijacking out's own\n // prototype via the bracket-assignment accessor — see _prototype.ts.\n if (isUnsafeObjectKey(k)) continue;\n\n const resolved = isLazy(v) ? v.factory() : v;\n\n out[k] = resolved instanceof Error ? serializeError(resolved) : resolved;\n }\n\n return out;\n}\n\ntype ParsedArgs = { context: Bindings | undefined; message: string | undefined };\n\nfunction parseArgs(msgOrCtx: unknown, second: unknown, third?: unknown): ParsedArgs {\n if (typeof msgOrCtx === 'string') {\n return { context: undefined, message: msgOrCtx };\n }\n\n if (msgOrCtx instanceof Error) {\n const ctx: Bindings = second !== null && typeof second === 'object' ? (second as Bindings) : {};\n\n return {\n context: { err: serializeError(msgOrCtx), ...ctx },\n message:\n third !== undefined\n ? String(third)\n : second !== undefined && typeof second !== 'object'\n ? String(second)\n : undefined,\n };\n }\n\n if (typeof msgOrCtx === 'object' && msgOrCtx !== null) {\n return {\n context: msgOrCtx as Bindings,\n message: second !== undefined ? String(second) : undefined,\n };\n }\n\n return { context: undefined, message: msgOrCtx !== undefined ? String(msgOrCtx) : undefined };\n}\n\n/* --- Namespace joining --- */\n\n/**\n * Joins parent and child namespaces with '.' as separator.\n * Examples:\n * joinNamespace('api', 'auth') → 'api.auth'\n * joinNamespace('', 'api') → 'api'\n * joinNamespace('api', '') → 'api'\n */\nfunction joinNamespace(parent: string, child: string): string {\n if (!parent) return child;\n\n if (!child) return parent;\n\n return `${parent}.${child}`;\n}\n\n/* --- createLogger --- */\n\n/**\n * Creates an isolated logger instance.\n *\n * Accepts two call signatures:\n * - `createLogger()` / `createLogger(options)` — configure via `RuneOptions`\n * - `createLogger('namespace', options?)` — namespace shorthand + optional options\n *\n * Each instance has its own immutable config (logLevel, transports, middleware).\n * To change the log level at runtime, create a new logger or child.\n */\nexport function createLogger(namespace: string, options?: Omit<RuneOptions, 'namespace'>): Logger;\nexport function createLogger(options?: RuneOptions): Logger;\nexport function createLogger(initial: RuneOptions | string = {}, extra?: Omit<RuneOptions, 'namespace'>): Logger {\n const initialOpts: RuneOptions = typeof initial === 'string' ? { namespace: initial, ...extra } : initial;\n\n const logLevel: LogLevel = initialOpts.logLevel ?? 'debug';\n const middleware: LogMiddleware[] = initialOpts.middleware ?? [];\n const namespace: string = initialOpts.namespace ?? '';\n const transports = initialOpts.transports ?? [consoleTransport()];\n const ownBindings: Bindings = { ...(initialOpts.bindings ?? {}) };\n\n const disposeController = new AbortController();\n let isDisposed = false;\n\n const passes = (type: LogType): boolean => isLevelEnabled(logLevel, type);\n const namespaceSuffix = (): string => (namespace ? ` (namespace: \"${namespace}\")` : '');\n\n const dispatch = (entry: LogEntry): void => {\n let current: LogEntry = entry;\n\n if (middleware.length > 0) {\n let c: LogEntry = entry;\n\n for (const mw of middleware) {\n try {\n const next = mw(c);\n\n if (next == null) return;\n\n c = next;\n } catch (err) {\n warn(`middleware threw and dropped this entry${namespaceSuffix()}: ${String(err)}`);\n\n return;\n }\n }\n\n current = c;\n }\n\n for (const t of transports) {\n try {\n t(current);\n } catch (err) {\n warn(`Transport threw an unhandled error${namespaceSuffix()}: ${String(err)}`);\n }\n }\n };\n\n const emit = (type: LogType, msgOrCtx: unknown, second?: unknown, third?: unknown): void => {\n if (isDisposed) return;\n\n if (!passes(type)) return;\n\n const { context, message } = parseArgs(msgOrCtx, second, third);\n // prepareBindings() always allocates a fresh object, so `data` is never an alias of `ownBindings`.\n const data: Bindings = context\n ? { ...prepareBindings(ownBindings), ...prepareBindings(context) }\n : prepareBindings(ownBindings);\n\n dispatch({\n data,\n level: type,\n message,\n namespace,\n timestamp: new Date(),\n });\n };\n\n const timeImpl = <T>(label: string, fn: () => T, level: LogType = 'debug'): T => {\n const start = performance.now();\n\n const done = (thrownErr?: unknown): void => {\n const duration_ms = Math.round((performance.now() - start) * 100) / 100;\n const ctx: Bindings = { duration_ms };\n\n if (thrownErr !== undefined)\n ctx.err = serializeError(thrownErr instanceof Error ? thrownErr : new Error(String(thrownErr)));\n\n emit(level, ctx, label);\n };\n\n try {\n const result = fn();\n\n if (result instanceof Promise) {\n return result.then(\n (v) => {\n done();\n\n return v;\n },\n (err: unknown) => {\n done(err);\n\n return Promise.reject(err) as never;\n },\n ) as T;\n }\n\n done();\n\n return result;\n } catch (err) {\n done(err);\n throw err;\n }\n };\n\n const wrapGroup = <T>(collapsed: boolean, label: string, fn: () => T, level?: LogType): T => {\n if (isDisposed || logLevel === 'off') return fn();\n\n if (level !== undefined && !passes(level)) {\n return fn();\n }\n\n renderGroup(collapsed, label, namespace, DEFAULT_THEME);\n\n try {\n const result = fn();\n\n if (result instanceof Promise) return result.finally(() => console.groupEnd()) as T;\n\n console.groupEnd();\n\n return result;\n } catch (err) {\n console.groupEnd();\n throw err;\n }\n };\n\n const childLogger = (overrides: RuneOptions = {}): Logger =>\n createLogger({\n bindings: { ...ownBindings, ...(overrides.bindings ?? {}) },\n logLevel: overrides.logLevel ?? logLevel,\n middleware: overrides.middleware ?? middleware,\n namespace: overrides.namespace !== undefined ? joinNamespace(namespace, overrides.namespace) : namespace,\n transports: overrides.transports ?? transports,\n });\n\n const logger: Logger = {\n get bindings(): Readonly<Bindings> {\n return { ...ownBindings };\n },\n\n child: childLogger,\n\n debug: (m: unknown, s?: unknown, t?: unknown) => emit('debug', m, s, t),\n\n get disposalSignal(): AbortSignal {\n return disposeController.signal;\n },\n\n dispose: (): void => {\n if (isDisposed) return;\n\n isDisposed = true;\n disposeController.abort();\n },\n\n get disposed(): boolean {\n return isDisposed;\n },\n\n enabled: (type: LogLevel): boolean => isLevelEnabled(logLevel, type),\n\n error: (m: unknown, s?: unknown, t?: unknown) => emit('error', m, s, t),\n\n fatal: (m: unknown, s?: unknown, t?: unknown) => emit('fatal', m, s, t),\n\n group: (label, fn, level) => wrapGroup(false, label, fn, level),\n\n groupCollapsed: (label, fn, level) => wrapGroup(true, label, fn, level),\n\n info: (m: unknown, s?: unknown, t?: unknown) => emit('info', m, s, t),\n\n get logLevel(): LogLevel {\n return logLevel;\n },\n\n get middleware(): readonly LogMiddleware[] {\n return [...middleware];\n },\n\n get namespace(): string {\n return namespace;\n },\n\n [Symbol.dispose](): void {\n logger.dispose();\n },\n\n time: timeImpl,\n\n get transports(): readonly Transport[] {\n return [...transports];\n },\n\n use: (mw: LogMiddleware): Logger => childLogger({ middleware: [...middleware, mw] }),\n\n warn: (m: unknown, s?: unknown, t?: unknown) => emit('warn', m, s, t),\n\n withBindings: (bindings: Bindings): Logger => childLogger({ bindings }),\n };\n\n return logger;\n}\n\nexport const defaultLogger = createLogger();\n"],"mappings":"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"}
package/dist/rune.cjs CHANGED
@@ -1,3 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=class e extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}static is(t){return t instanceof e}},t={debug:0,error:3,fatal:4,info:1,off:5,warn:2};function n(e,n){return n!==`off`&&t[e]<=t[n]}var r=new Set([`__proto__`,`constructor`,`prototype`]);function i(e){return r.has(e)}var a=Symbol(`rune.lazy`);function o(e){return typeof e==`object`&&!!e&&e[a]===!0}function s(e){return{factory:e,[a]:!0}}function c(e){let t;for(let[n,r]of Object.entries(e))o(r)&&!i(n)&&(t??={...e},t[n]=r.factory());return t??e}function l(e,t,n){let r=Object.keys(e).length>0,i=n&&r?n(e):r?e:void 0;return i!==void 0&&t!==void 0?[t,i]:i===void 0?t===void 0?[]:[t]:[i]}var u={debug:{badge:`🅳`,bg:`#616161`,border:`#424242`,color:`#e0e0e0`},error:{badge:`🅴`,bg:`#d32f2f`,border:`#c62828`,color:`#fff`},fatal:{badge:`🅵`,bg:`#4a148c`,border:`#38006b`,color:`#fff`},group:{badge:`🅶`,bg:`#546e7a`,border:`#455a64`,color:`#fff`},info:{badge:`🅸`,bg:`#1976d2`,border:`#1565c0`,color:`#fff`},ns:{badge:``,bg:`#424242`,border:`#212121`,color:`#fff`},warn:{badge:`🆆`,bg:`#ffb300`,border:`#ffa000`,color:`#212121`}},d=`border-radius: 8px; font: italic small-caps bold 12px; font-weight: lighter; padding: 0 4px;`,f={debug:`log`,error:`error`,fatal:`error`,info:`info`,warn:`warn`};function p(e){if(!e)return u;let t={...u};for(let n of Object.keys(e)){let r=e[n];r&&(t[n]={...u[n],...r})}return t}function m(e){return[parseInt(e.slice(1,3),16),parseInt(e.slice(3,5),16),parseInt(e.slice(5,7),16)]}function h(e,t){let[n,r,i]=m(e);return`\x1b[38;2;${n};${r};${i}m${t}\x1b[0m`}function g(e){return`\x1b[90m${e}\x1b[0m`}function _(){return typeof window<`u`?!1:globalThis.process?.stdout?.isTTY===!0}function v(e,t=``){return`background: ${e.bg}; color: ${e.color}; border: 1px solid ${e.border}; border-radius: 4px; padding: 0 1px${t}`}function y(e){return e.replace(/%/g,`%%`)}function b(e,t,n,r,i){let a=e[t],o=y(a.badge),s=[i?h(a.bg,o):o];if(n){let e=y(n);s.push(i?g(`[${e}]`):`[${e}]`)}return r&&s.push(i?g(r):r),`${s.join(` | `)} |`}function x(e,t,n,r){let i=`%c${y(e[t].badge)}%c`,a=[v(e[t]),``];return n&&(i+=` %c${y(n)}%c`,a.push(v(e.ns,`; ${d}`),``)),r&&(i+=` %c${r}%c`,a.push(`color: gray`,``)),{fmt:i,parts:a}}function S(e={}){let t=e.level??`debug`,r=e.timestamp??!0,i=e.format??`raw`,a=typeof window>`u`,o=e.ansi??(a?_():!1),s=p(e.theme),c=i===`json`?e=>JSON.stringify(e):e.inspectFn;return e=>{if(!n(t,e.level))return;let i=r?e.timestamp.toISOString().slice(11,23):``,u=l(e.data,e.message,c),d=console[f[e.level]];if(a)d(b(s,e.level,e.namespace,i,o),...u);else{let{fmt:t,parts:n}=x(s,e.level,e.namespace,i);d(t,...n,...u)}}}function C(e,t,n,r){let i=e?console.groupCollapsed:console.group;if(typeof window>`u`){let e=[r.group.badge,y(t)];n&&e.push(`[${y(n)}]`),i(e.join(` | `));return}let a=`${r.group.badge} %c${y(t)}%c`,o=[v(r.group,`; margin-right: 6px; padding: 1px 3px 0`),``];n&&(a+=` %c${y(n)}%c`,o.push(v(r.ns,`; ${d}; margin-right: 6px`),``)),i(a,...o)}function w(e){return{message:e.message,name:e.name,stack:e.stack}}function T(e){let t={};for(let[n,r]of Object.entries(e))i(n)||(t[n]=r instanceof Error?w(r):r);return t}function E(e,t,n){if(typeof e==`string`)return{context:void 0,message:e};if(e instanceof Error){let r=typeof t==`object`&&t?t:{};return{context:{err:w(e),...r},message:n===void 0?t!==void 0&&typeof t!=`object`?String(t):void 0:String(n)}}return typeof e==`object`&&e?{context:e,message:t===void 0?void 0:String(t)}:{context:void 0,message:e===void 0?void 0:String(e)}}function D(e,t){return e?t?`${e}.${t}`:e:t}function O(e={},t){let r=typeof e==`string`?{namespace:e,...t}:e,i=r.logLevel??`debug`,a=r.middleware??[],o=r.namespace??``,s=r.transports??[S()],l={...r.bindings??{}},d=new AbortController,f=!1,p=e=>n(i,e),m=()=>o?` (namespace: "${o}")`:``,h=e=>{let t=e;if(a.length>0){let n=e;for(let e of a)try{let t=e(n);if(t==null)return;n=t}catch(e){`${m()}${String(e)}`;return}t=n}for(let e of s)try{e(t)}catch(e){`${m()}${String(e)}`}},g=(e,t,n,r)=>{if(f||!p(e))return;let{context:i,message:a}=E(t,n,r),s=T(c(l)),u=i?{...s,...T(c(i))}:s;h({data:u,level:e,message:a,namespace:o,timestamp:new Date})},_=(e,t,n=`debug`)=>{let r=performance.now(),i=t=>{let i={duration_ms:Math.round((performance.now()-r)*100)/100};t!==void 0&&(i.err=w(t instanceof Error?t:Error(String(t)))),g(n,i,e)};try{let e=t();return e instanceof Promise?e.then(e=>(i(),e),e=>(i(e),Promise.reject(e))):(i(),e)}catch(e){throw i(e),e}},v=(e,t,n,r)=>{if(f||i===`off`||r!==void 0&&!p(r))return n();C(e,t,o,u);try{let e=n();return e instanceof Promise?e.finally(()=>console.groupEnd()):(console.groupEnd(),e)}catch(e){throw console.groupEnd(),e}},y=(e={})=>O({bindings:{...l,...e.bindings??{}},logLevel:e.logLevel??i,middleware:e.middleware??a,namespace:e.namespace===void 0?o:D(o,e.namespace),transports:e.transports??s}),b={get bindings(){return{...l}},child:y,debug:(e,t,n)=>g(`debug`,e,t,n),get disposalSignal(){return d.signal},dispose:()=>{f||(f=!0,d.abort())},get disposed(){return f},enabled:e=>n(i,e),error:(e,t,n)=>g(`error`,e,t,n),fatal:(e,t,n)=>g(`fatal`,e,t,n),group:(e,t,n)=>v(!1,e,t,n),groupCollapsed:(e,t,n)=>v(!0,e,t,n),info:(e,t,n)=>g(`info`,e,t,n),get logLevel(){return i},get middleware(){return[...a]},get namespace(){return o},[Symbol.dispose](){b.dispose()},time:_,get transports(){return[...s]},use:e=>y({middleware:[...a,e]}),warn:(e,t,n)=>g(`warn`,e,t,n),withBindings:e=>y({bindings:e})};return b}var k=O();function A(){return typeof window>`u`?globalThis.process?.env?.NODE_ENV===`production`?`production`:`development`:`production`}function j(e){let{handler:t}=e,r=e.level??`debug`,i=e.env??A(),a=e.onError??(e=>(`${String(e)}`,void 0));return e=>{if(!n(r,e.level))return;let o={data:Object.keys(e.data).length>0?e.data:void 0,env:i,level:e.level,message:e.message,namespace:e.namespace||void 0,timestamp:e.timestamp.toISOString()};Promise.resolve().then(()=>t(e.level,o)).catch(e=>a(e,o))}}function M(){let e=new WeakSet;return(t,n)=>{if(typeof n==`object`&&n){if(e.has(n))return`[Circular]`;e.add(n)}return n}}function N(e={}){let t=e.level??`debug`,r=e.fields??{},i=r.level??`level`,a=r.time??`time`,o=r.ns??`ns`,s=r.msg??`msg`,c=e.safe??!1,l=e.output??(e=>{globalThis.process?.stdout?.write(e+`
2
- `)});return e=>{if(!n(t,e.level))return;let r={...e.data,[i]:e.level,[a]:e.timestamp.toISOString(),...e.namespace&&{[o]:e.namespace},...e.message!==void 0&&{[s]:e.message}};l(JSON.stringify(r,c?M():void 0))}}function P(e,t){if(!Number.isFinite(e))throw RangeError(`${t} must be a finite number`)}function F(e,t){if(P(e,t),!Number.isInteger(e)||e<0)throw RangeError(`${t} must be a non-negative integer`)}function I(e,t){if(P(e,t),!Number.isInteger(e)||e<=0)throw RangeError(`${t} must be a positive integer`)}function L(e){let t=e.level??`debug`,r=e.maxSize??50,i=e.maxBuffer,a=e.interval??5e3;if(P(a,`batchTransport interval`),a<=0)throw RangeError(`batchTransport interval must be greater than zero`);I(r,`batchTransport maxSize`),i!==void 0&&F(i,`batchTransport maxBuffer`);let o=[],s,c,l=!1,u=Promise.resolve(),d,f=async t=>{try{await e.onFlush(t)}catch(n){try{e.onFlushError?.(t,n)}catch(e){`${String(e)}`}throw n}},p=e=>{let t=u.then(()=>f(e));return u=t.catch(()=>void 0),t},m=()=>{if(o.length===0)return u;let e=o;return o=[],p(e)},h=()=>{m().catch(e=>{c??={error:e}})},g=e=>{l||n(t,e.level)&&(s||=setInterval(h,a),o.push(e),i!==void 0&&o.length>i&&(o=o.slice(o.length-i)),o.length>=r&&h())},_={dispose(){return d||(l=!0,s&&=(clearInterval(s),void 0),d=m().then(()=>{if(c)throw c.error}),d)},get disposed(){return l},flush:m,[Symbol.asyncDispose](){return _.dispose()},transport:g};return _}function R(e){let{rate:t,transport:r}=e,i=e.level??`debug`;if(P(t,`sampleTransport rate`),t<0||t>1)throw RangeError(`sampleTransport rate must be between zero and one`);return e=>{n(i,e.level)&&Math.random()<t&&r(e)}}function z(e){let{keys:t,maxDepth:n=20,replacement:r=`[REDACTED]`,transport:a}=e;F(n,`redactTransport maxDepth`);for(let e of t)e.includes(`.`)&&`${e}`;let o=new Set(t);function s(e,t=0){return t>n?(`${n}${n}`,e):Array.isArray(e)?e.map(e=>s(e,t+1)):typeof e==`object`&&e?c(e,t+1):e}function c(e,t=0){let n={};for(let[a,c]of Object.entries(e))i(a)||(n[a]=o.has(a)?r:s(c,t));return n}return e=>{a({...e,data:c(e.data)})}}function B(e,...t){let n,r;return typeof e==`function`?(n={},r=[e,...t]):(n=e,r=t),e=>{for(let t of r)try{t(e)}catch(t){n.onError?.(t,e)}}}exports.DEFAULT_THEME=u,exports.PRIORITY=t,exports.RuneError=e,exports.batchTransport=L,exports.consoleTransport=S,exports.createLogger=O,exports.defaultLogger=k,exports.isLevelEnabled=n,exports.jsonTransport=N,exports.lazy=s,exports.pipe=B,exports.redactTransport=z,exports.remoteTransport=j,exports.resolveTheme=p,exports.sampleTransport=R;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e={debug:0,error:3,fatal:4,info:1,off:5,warn:2};function t(t,n){return n!==`off`&&e[t]<=e[n]}function n(e,t,n){let r=Object.keys(e).length>0,i=n&&r?n(e):r?e:void 0;return i!==void 0&&t!==void 0?[t,i]:i===void 0?t===void 0?[]:[t]:[i]}var r={debug:{badge:`🅳`,bg:`#616161`,border:`#424242`,color:`#e0e0e0`},error:{badge:`🅴`,bg:`#d32f2f`,border:`#c62828`,color:`#fff`},fatal:{badge:`🅵`,bg:`#4a148c`,border:`#38006b`,color:`#fff`},group:{badge:`🅶`,bg:`#546e7a`,border:`#455a64`,color:`#fff`},info:{badge:`🅸`,bg:`#1976d2`,border:`#1565c0`,color:`#fff`},ns:{badge:``,bg:`#424242`,border:`#212121`,color:`#fff`},warn:{badge:`🆆`,bg:`#ffb300`,border:`#ffa000`,color:`#212121`}},i=`border-radius: 8px; font: italic small-caps bold 12px; font-weight: lighter; padding: 0 4px;`,a={debug:`log`,error:`error`,fatal:`error`,info:`info`,warn:`warn`};function o(e){if(!e)return r;let t={...r};for(let n of Object.keys(e)){let i=e[n];i&&(t[n]={...r[n],...i})}return t}function s(e){return[parseInt(e.slice(1,3),16),parseInt(e.slice(3,5),16),parseInt(e.slice(5,7),16)]}function c(e,t){let[n,r,i]=s(e);return`\x1b[38;2;${n};${r};${i}m${t}\x1b[0m`}function l(e){return`\x1b[90m${e}\x1b[0m`}function u(){return typeof window<`u`?!1:globalThis.process?.stdout?.isTTY===!0}function d(e,t=``){return`background: ${e.bg}; color: ${e.color}; border: 1px solid ${e.border}; border-radius: 4px; padding: 0 1px${t}`}function f(e){return e.replace(/%/g,`%%`)}function p(e,t,n,r,i){let a=e[t],o=f(a.badge),s=[i?c(a.bg,o):o];if(n){let e=f(n);s.push(i?l(`[${e}]`):`[${e}]`)}return r&&s.push(i?l(r):r),`${s.join(` | `)} |`}function m(e,t,n,r){let a=`%c${f(e[t].badge)}%c`,o=[d(e[t]),``];return n&&(a+=` %c${f(n)}%c`,o.push(d(e.ns,`; ${i}`),``)),r&&(a+=` %c${r}%c`,o.push(`color: gray`,``)),{fmt:a,parts:o}}function h(e={}){let r=e.level??`debug`,i=e.timestamp??!0,s=e.format??`raw`,c=typeof window>`u`,l=e.ansi??(c?u():!1),d=o(e.theme),f=s===`json`?e=>JSON.stringify(e):e.inspectFn;return e=>{if(!t(r,e.level))return;let o=i?e.timestamp.toISOString().slice(11,23):``,s=n(e.data,e.message,f),u=console[a[e.level]];if(c)u(p(d,e.level,e.namespace,o,l),...s);else{let{fmt:t,parts:n}=m(d,e.level,e.namespace,o);u(t,...n,...s)}}}function g(e,t,n,r){let a=e?console.groupCollapsed:console.group;if(typeof window>`u`){let e=[r.group.badge,f(t)];n&&e.push(`[${f(n)}]`),a(e.join(` | `));return}let o=`${r.group.badge} %c${f(t)}%c`,s=[d(r.group,`; margin-right: 6px; padding: 1px 3px 0`),``];n&&(o+=` %c${f(n)}%c`,s.push(d(r.ns,`; ${i}; margin-right: 6px`),``)),a(o,...s)}var _=Symbol(`rune.lazy`);function v(e){return typeof e==`object`&&!!e&&e[_]===!0}function y(e){return{factory:e,[_]:!0}}var b=new Set([`__proto__`,`constructor`,`prototype`]);function x(e){return b.has(e)}function S(e){return{message:e.message,name:e.name,stack:e.stack}}function C(e){let t={};for(let[n,r]of Object.entries(e)){if(x(n))continue;let e=v(r)?r.factory():r;t[n]=e instanceof Error?S(e):e}return t}function w(e,t,n){if(typeof e==`string`)return{context:void 0,message:e};if(e instanceof Error){let r=typeof t==`object`&&t?t:{};return{context:{err:S(e),...r},message:n===void 0?t!==void 0&&typeof t!=`object`?String(t):void 0:String(n)}}return typeof e==`object`&&e?{context:e,message:t===void 0?void 0:String(t)}:{context:void 0,message:e===void 0?void 0:String(e)}}function T(e,t){return e?t?`${e}.${t}`:e:t}function E(e={},n){let i=typeof e==`string`?{namespace:e,...n}:e,a=i.logLevel??`debug`,o=i.middleware??[],s=i.namespace??``,c=i.transports??[h()],l={...i.bindings??{}},u=new AbortController,d=!1,f=e=>t(a,e),p=()=>s?` (namespace: "${s}")`:``,m=e=>{let t=e;if(o.length>0){let n=e;for(let e of o)try{let t=e(n);if(t==null)return;n=t}catch(e){`${p()}${String(e)}`;return}t=n}for(let e of c)try{e(t)}catch(e){`${p()}${String(e)}`}},_=(e,t,n,r)=>{if(d||!f(e))return;let{context:i,message:a}=w(t,n,r),o=i?{...C(l),...C(i)}:C(l);m({data:o,level:e,message:a,namespace:s,timestamp:new Date})},v=(e,t,n=`debug`)=>{let r=performance.now(),i=t=>{let i={duration_ms:Math.round((performance.now()-r)*100)/100};t!==void 0&&(i.err=S(t instanceof Error?t:Error(String(t)))),_(n,i,e)};try{let e=t();return e instanceof Promise?e.then(e=>(i(),e),e=>(i(e),Promise.reject(e))):(i(),e)}catch(e){throw i(e),e}},y=(e,t,n,i)=>{if(d||a===`off`||i!==void 0&&!f(i))return n();g(e,t,s,r);try{let e=n();return e instanceof Promise?e.finally(()=>console.groupEnd()):(console.groupEnd(),e)}catch(e){throw console.groupEnd(),e}},b=(e={})=>E({bindings:{...l,...e.bindings??{}},logLevel:e.logLevel??a,middleware:e.middleware??o,namespace:e.namespace===void 0?s:T(s,e.namespace),transports:e.transports??c}),x={get bindings(){return{...l}},child:b,debug:(e,t,n)=>_(`debug`,e,t,n),get disposalSignal(){return u.signal},dispose:()=>{d||(d=!0,u.abort())},get disposed(){return d},enabled:e=>t(a,e),error:(e,t,n)=>_(`error`,e,t,n),fatal:(e,t,n)=>_(`fatal`,e,t,n),group:(e,t,n)=>y(!1,e,t,n),groupCollapsed:(e,t,n)=>y(!0,e,t,n),info:(e,t,n)=>_(`info`,e,t,n),get logLevel(){return a},get middleware(){return[...o]},get namespace(){return s},[Symbol.dispose](){x.dispose()},time:v,get transports(){return[...c]},use:e=>b({middleware:[...o,e]}),warn:(e,t,n)=>_(`warn`,e,t,n),withBindings:e=>b({bindings:e})};return x}var D=E();function O(){return typeof window>`u`&&globalThis.process?.env?.NODE_ENV===`production`?`production`:`development`}function k(e){let{handler:n}=e,r=e.level??`debug`,i=e.env??O(),a=e.onError??(e=>(`${String(e)}`,void 0));return e=>{if(!t(r,e.level))return;let o={data:Object.keys(e.data).length>0?e.data:void 0,env:i,level:e.level,message:e.message,namespace:e.namespace||void 0,timestamp:e.timestamp.toISOString()};Promise.resolve().then(()=>n(e.level,o)).catch(e=>a(e,o))}}function A(){let e=new WeakSet;return(t,n)=>{if(typeof n==`object`&&n){if(e.has(n))return`[Circular]`;e.add(n)}return n}}function j(e={}){let n=e.level??`debug`,r=e.fields??{},i=r.level??`level`,a=r.time??`time`,o=r.ns??`ns`,s=r.msg??`msg`,c=e.safe??!1,l=e.output??(e=>{globalThis.process?.stdout?.write(`${e}\n`)});return e=>{if(!t(n,e.level))return;let r={...e.data,[i]:e.level,[a]:e.timestamp.toISOString(),...e.namespace&&{[o]:e.namespace},...e.message!==void 0&&{[s]:e.message}};l(JSON.stringify(r,c?A():void 0))}}function M(e,t){if(!Number.isFinite(e))throw RangeError(`${t} must be a finite number`)}function N(e,t){if(M(e,t),!Number.isInteger(e)||e<0)throw RangeError(`${t} must be a non-negative integer`)}function P(e,t){if(M(e,t),!Number.isInteger(e)||e<=0)throw RangeError(`${t} must be a positive integer`)}function F(e){let n=e.level??`debug`,r=e.maxSize??50,i=e.maxBuffer,a=e.interval??5e3;if(M(a,`batchTransport interval`),a<=0)throw RangeError(`batchTransport interval must be greater than zero`);P(r,`batchTransport maxSize`),i!==void 0&&N(i,`batchTransport maxBuffer`);let o=[],s,c,l=!1,u=Promise.resolve(),d,f=async t=>{try{await e.onFlush(t)}catch(n){try{e.onFlushError?.(t,n)}catch(e){`${String(e)}`}throw n}},p=e=>{let t=u.then(()=>f(e));return u=t.catch(()=>void 0),t},m=()=>{if(o.length===0)return u;let e=o;return o=[],p(e)},h=()=>{m().catch(e=>{c??={error:e}})},g=e=>{l||t(n,e.level)&&(s||=setInterval(h,a),o.push(e),i!==void 0&&o.length>i&&(o=o.slice(o.length-i)),o.length>=r&&h())},_={dispose(){return d||(l=!0,s&&=(clearInterval(s),void 0),d=m().then(()=>{if(c)throw c.error}),d)},get disposed(){return l},flush:m,[Symbol.asyncDispose](){return _.dispose()},transport:g};return _}function I(e){let{rate:n,transport:r}=e,i=e.level??`debug`;if(M(n,`sampleTransport rate`),n<0||n>1)throw RangeError(`sampleTransport rate must be between zero and one`);return e=>{t(i,e.level)&&Math.random()<n&&r(e)}}function L(e){let{keys:t,maxDepth:n=20,replacement:r=`[REDACTED]`,transport:i}=e;N(n,`redactTransport maxDepth`);for(let e of t)e.includes(`.`)&&`${e}`;let a=new Set(t);function o(e,t=0){return t>n?(`${n}${n}`,e):Array.isArray(e)?e.map(e=>o(e,t+1)):typeof e==`object`&&e?s(e,t+1):e}function s(e,t=0){let n={};for(let[i,s]of Object.entries(e))x(i)||(n[i]=a.has(i)?r:o(s,t));return n}return e=>{i({...e,data:s(e.data)})}}function R(e,...t){let n,r;return typeof e==`function`?(n={},r=[e,...t]):(n=e,r=t),e=>{for(let t of r)try{t(e)}catch(t){n.onError?.(t,e)}}}exports.DEFAULT_THEME=r,exports.PRIORITY=e,exports.batchTransport=F,exports.consoleTransport=h,exports.createLogger=E,exports.defaultLogger=D,exports.isLevelEnabled=t,exports.jsonTransport=j,exports.lazy=y,exports.pipe=R,exports.redactTransport=L,exports.remoteTransport=k,exports.resolveTheme=o,exports.sampleTransport=I;
3
2
  //# sourceMappingURL=rune.cjs.map