@vielzeug/rune 1.1.2 → 2.0.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/logger.js CHANGED
@@ -1,23 +1,22 @@
1
- import { RuneTransportError as e } from "./errors.js";
2
- import { isLevelEnabled as t } from "./types.js";
3
- import { isUnsafeObjectKey as n } from "./_prototype.js";
4
- import { resolveBindings as r } from "./lazy.js";
5
- import { warn as i } from "./_dev.js";
6
- import { DEFAULT_THEME as a, consoleTransport as o, renderGroup as s } from "./console.js";
1
+ import { isLevelEnabled as e } from "./types.js";
2
+ import { isUnsafeObjectKey as t } from "./_prototype.js";
3
+ import { resolveBindings as n } from "./lazy.js";
4
+ import "./_dev.js";
5
+ import { DEFAULT_THEME as r, consoleTransport as i, renderGroup as a } from "./console.js";
7
6
  //#region src/logger.ts
8
- function c(e) {
7
+ function o(e) {
9
8
  return {
10
9
  message: e.message,
11
10
  name: e.name,
12
11
  stack: e.stack
13
12
  };
14
13
  }
15
- function l(e) {
16
- let t = {};
17
- for (let [r, i] of Object.entries(e)) n(r) || (t[r] = i instanceof Error ? c(i) : i);
18
- return t;
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;
19
18
  }
20
- function u(e, t, n) {
19
+ function c(e, t, n) {
21
20
  if (typeof e == "string") return {
22
21
  context: void 0,
23
22
  message: e
@@ -26,7 +25,7 @@ function u(e, t, n) {
26
25
  let r = typeof t == "object" && t ? t : {};
27
26
  return {
28
27
  context: {
29
- err: c(e),
28
+ err: o(e),
30
29
  ...r
31
30
  },
32
31
  message: n === void 0 ? t !== void 0 && typeof t != "object" ? String(t) : void 0 : String(n)
@@ -40,49 +39,49 @@ function u(e, t, n) {
40
39
  message: e === void 0 ? void 0 : String(e)
41
40
  };
42
41
  }
43
- function d(e, t) {
42
+ function l(e, t) {
44
43
  return e ? t ? `${e}.${t}` : e : t;
45
44
  }
46
- function f(n = {}, p) {
47
- let m = typeof n == "string" ? {
48
- namespace: n,
49
- ...p
50
- } : n, h = m.logLevel ?? "debug", g = m.middleware ?? [], _ = m.namespace ?? "", v = m.transports ?? [o()], y = { ...m.bindings ?? {} }, b = new AbortController(), x = !1, S = (e) => t(h, e), C = () => _ ? ` (namespace: "${_}")` : "", w = (t) => {
51
- let n = t;
52
- if (g.length > 0) {
53
- let e = t;
54
- for (let t of g) try {
55
- let n = t(e);
56
- if (n == null) return;
57
- e = n;
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) => {
50
+ let t = e;
51
+ if (m.length > 0) {
52
+ let n = e;
53
+ for (let e of m) try {
54
+ let t = e(n);
55
+ if (t == null) return;
56
+ n = t;
58
57
  } catch (e) {
59
- i(`middleware threw and dropped this entry${C()}: ${String(e)}`);
58
+ `${x()}${String(e)}`;
60
59
  return;
61
60
  }
62
- n = e;
61
+ t = n;
63
62
  }
64
- for (let t of v) try {
65
- t(n);
66
- } catch (t) {
67
- i(`${new e(t).message}${C()}: ${String(t)}`);
63
+ for (let e of g) try {
64
+ e(t);
65
+ } catch (e) {
66
+ `${x()}${String(e)}`;
68
67
  }
69
- }, T = (e, t, n, i) => {
70
- if (x || !S(e)) return;
71
- let { context: a, message: o } = u(t, n, i), s = l(r(y)), c = a ? {
72
- ...s,
73
- ...l(r(a))
74
- } : s;
75
- w({
76
- data: c,
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,
77
76
  level: e,
78
77
  message: o,
79
- namespace: _,
78
+ namespace: h,
80
79
  timestamp: /* @__PURE__ */ new Date()
81
80
  });
82
- }, E = (e, t, n = "debug") => {
81
+ }, w = (e, t, n = "debug") => {
83
82
  let r = performance.now(), i = (t) => {
84
83
  let i = { duration_ms: Math.round((performance.now() - r) * 100) / 100 };
85
- t !== void 0 && (i.err = c(t instanceof Error ? t : Error(String(t)))), T(n, i, e);
84
+ t !== void 0 && (i.err = o(t instanceof Error ? t : Error(String(t)))), C(n, i, e);
86
85
  };
87
86
  try {
88
87
  let e = t();
@@ -90,69 +89,69 @@ function f(n = {}, p) {
90
89
  } catch (e) {
91
90
  throw i(e), e;
92
91
  }
93
- }, D = (e, t, n, r) => {
94
- if (x || h === "off" || r !== void 0 && !S(r)) return n();
95
- s(e, t, _, a);
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
95
  try {
97
96
  let e = n();
98
97
  return e instanceof Promise ? e.finally(() => console.groupEnd()) : (console.groupEnd(), e);
99
98
  } catch (e) {
100
99
  throw console.groupEnd(), e;
101
100
  }
102
- }, O = (e = {}) => f({
101
+ }, E = (e = {}) => u({
103
102
  bindings: {
104
- ...y,
103
+ ..._,
105
104
  ...e.bindings ?? {}
106
105
  },
107
- logLevel: e.logLevel ?? h,
108
- middleware: e.middleware ?? g,
109
- namespace: e.namespace === void 0 ? _ : d(_, e.namespace),
110
- transports: e.transports ?? v
111
- }), k = {
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 = {
112
111
  get bindings() {
113
- return { ...y };
112
+ return { ..._ };
114
113
  },
115
- child: O,
116
- debug: (e, t, n) => T("debug", e, t, n),
114
+ child: E,
115
+ debug: (e, t, n) => C("debug", e, t, n),
117
116
  get disposalSignal() {
118
- return b.signal;
117
+ return v.signal;
119
118
  },
120
119
  dispose: () => {
121
- x || (x = !0, b.abort());
120
+ y || (y = !0, v.abort());
122
121
  },
123
122
  get disposed() {
124
- return x;
123
+ return y;
125
124
  },
126
- enabled: (e) => t(h, e),
127
- error: (e, t, n) => T("error", e, t, n),
128
- fatal: (e, t, n) => T("fatal", e, t, n),
129
- group: (e, t, n) => D(!1, e, t, n),
130
- groupCollapsed: (e, t, n) => D(!0, e, t, n),
131
- info: (e, t, n) => T("info", e, t, n),
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),
132
131
  get logLevel() {
133
- return h;
132
+ return p;
134
133
  },
135
134
  get middleware() {
136
- return [...g];
135
+ return [...m];
137
136
  },
138
137
  get namespace() {
139
- return _;
138
+ return h;
140
139
  },
141
140
  [Symbol.dispose]() {
142
- k.dispose();
141
+ D.dispose();
143
142
  },
144
- time: E,
143
+ time: w,
145
144
  get transports() {
146
- return [...v];
145
+ return [...g];
147
146
  },
148
- use: (e) => O({ middleware: [...g, e] }),
149
- warn: (e, t, n) => T("warn", e, t, n),
150
- withBindings: (e) => O({ bindings: e })
147
+ use: (e) => E({ middleware: [...m, e] }),
148
+ warn: (e, t, n) => C("warn", e, t, n),
149
+ withBindings: (e) => E({ bindings: e })
151
150
  };
152
- return k;
151
+ return D;
153
152
  }
154
- var p = f();
153
+ var d = u();
155
154
  //#endregion
156
- export { f as createLogger, p as defaultLogger };
155
+ export { u as createLogger, d as defaultLogger };
157
156
 
158
157
  //# sourceMappingURL=logger.js.map
@@ -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 { RuneTransportError } from './errors';\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 const transportErr = new RuneTransportError(err);\n\n warn(`${transportErr.message}${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.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":"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"}
package/dist/rune.cjs CHANGED
@@ -1,3 +1,3 @@
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=class extends e{constructor(e){super(`Transport threw an unhandled error`,{cause:e instanceof Error?e:void 0})}},n={debug:0,error:3,fatal:4,info:1,off:5,warn:2};function r(e,t){return t===`off`?!1:n[e]<=n[t]}var i=new Set([`__proto__`,`constructor`,`prototype`]);function a(e){return i.has(e)}var o=Symbol(`rune.lazy`);function s(e){return typeof e==`object`&&!!e&&e[o]===!0}function c(e){return{factory:e,[o]:!0}}function l(e){let t;for(let[n,r]of Object.entries(e))s(r)&&!a(n)&&(t??={...e},t[n]=r.factory());return t??e}var u=!globalThis.__RUNE_PROD__;function d(e){u&&console.warn(`[@vielzeug/rune] ${e}`)}function f(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 p={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`}},m=`border-radius: 8px; font: italic small-caps bold 12px; font-weight: lighter; padding: 0 4px;`,h={debug:`log`,error:`error`,fatal:`error`,info:`info`,warn:`warn`};function g(e){if(!e)return p;let t={...p};for(let n of Object.keys(e)){let r=e[n];r&&(t[n]={...p[n],...r})}return t}function _(e){return[parseInt(e.slice(1,3),16),parseInt(e.slice(3,5),16),parseInt(e.slice(5,7),16)]}function v(e,t){let[n,r,i]=_(e);return`\x1b[38;2;${n};${r};${i}m${t}\x1b[0m`}function y(e){return`\x1b[90m${e}\x1b[0m`}function b(){return typeof window<`u`?!1:globalThis.process?.stdout?.isTTY===!0}function x(e,t=``){return`background: ${e.bg}; color: ${e.color}; border: 1px solid ${e.border}; border-radius: 4px; padding: 0 1px${t}`}function S(e){return e.replace(/%/g,`%%`)}function C(e,t,n,r,i){let a=e[t],o=S(a.badge),s=[i?v(a.bg,o):o];if(n){let e=S(n);s.push(i?y(`[${e}]`):`[${e}]`)}return r&&s.push(i?y(r):r),`${s.join(` | `)} |`}function w(e,t,n,r){let i=`%c${S(e[t].badge)}%c`,a=[x(e[t]),``];return n&&(i+=` %c${S(n)}%c`,a.push(x(e.ns,`; ${m}`),``)),r&&(i+=` %c${r}%c`,a.push(`color: gray`,``)),{fmt:i,parts:a}}function T(e={}){let t=e.level??`debug`,n=e.timestamp??!0,i=e.format??`raw`,a=typeof window>`u`,o=e.ansi??(a?b():!1),s=g(e.theme),c=i===`json`?e=>JSON.stringify(e):e.inspectFn;return e=>{if(!r(t,e.level))return;let i=n?e.timestamp.toISOString().slice(11,23):``,l=f(e.data,e.message,c),u=console[h[e.level]];if(a)u(C(s,e.level,e.namespace,i,o),...l);else{let{fmt:t,parts:n}=w(s,e.level,e.namespace,i);u(t,...n,...l)}}}function E(e,t,n,r){let i=e?console.groupCollapsed:console.group;if(typeof window>`u`){let e=[r.group.badge,t];n&&e.push(`[${n}]`),i(e.join(` | `));return}let a=`${r.group.badge} %c${S(t)}%c`,o=[x(r.group,`; margin-right: 6px; padding: 1px 3px 0`),``];n&&(a+=` %c${S(n)}%c`,o.push(x(r.ns,`; ${m}; margin-right: 6px`),``)),i(a,...o)}function D(e){return{message:e.message,name:e.name,stack:e.stack}}function O(e){let t={};for(let[n,r]of Object.entries(e))a(n)||(t[n]=r instanceof Error?D(r):r);return t}function k(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:D(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 A(e,t){return e?t?`${e}.${t}`:e:t}function j(e={},n){let i=typeof e==`string`?{namespace:e,...n}:e,a=i.logLevel??`debug`,o=i.middleware??[],s=i.namespace??``,c=i.transports??[T()],u={...i.bindings??{}},f=new AbortController,m=!1,h=e=>r(a,e),g=()=>s?` (namespace: "${s}")`:``,_=e=>{let n=e;if(o.length>0){let t=e;for(let e of o)try{let n=e(t);if(n==null)return;t=n}catch(e){d(`middleware threw and dropped this entry${g()}: ${String(e)}`);return}n=t}for(let e of c)try{e(n)}catch(e){d(`${new t(e).message}${g()}: ${String(e)}`)}},v=(e,t,n,r)=>{if(m||!h(e))return;let{context:i,message:a}=k(t,n,r),o=O(l(u)),c=i?{...o,...O(l(i))}:o;_({data:c,level:e,message:a,namespace:s,timestamp:new Date})},y=(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=D(t instanceof Error?t:Error(String(t)))),v(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}},b=(e,t,n,r)=>{if(m||a===`off`||r!==void 0&&!h(r))return n();E(e,t,s,p);try{let e=n();return e instanceof Promise?e.finally(()=>console.groupEnd()):(console.groupEnd(),e)}catch(e){throw console.groupEnd(),e}},x=(e={})=>j({bindings:{...u,...e.bindings??{}},logLevel:e.logLevel??a,middleware:e.middleware??o,namespace:e.namespace===void 0?s:A(s,e.namespace),transports:e.transports??c}),S={get bindings(){return{...u}},child:x,debug:(e,t,n)=>v(`debug`,e,t,n),get disposalSignal(){return f.signal},dispose:()=>{m||(m=!0,f.abort())},get disposed(){return m},enabled:e=>r(a,e),error:(e,t,n)=>v(`error`,e,t,n),fatal:(e,t,n)=>v(`fatal`,e,t,n),group:(e,t,n)=>b(!1,e,t,n),groupCollapsed:(e,t,n)=>b(!0,e,t,n),info:(e,t,n)=>v(`info`,e,t,n),get logLevel(){return a},get middleware(){return[...o]},get namespace(){return s},[Symbol.dispose](){S.dispose()},time:y,get transports(){return[...c]},use:e=>x({middleware:[...o,e]}),warn:(e,t,n)=>v(`warn`,e,t,n),withBindings:e=>x({bindings:e})};return S}var M=j();function N(){return typeof window>`u`?globalThis.process?.env?.NODE_ENV===`production`?`production`:`development`:`production`}function P(e){let{handler:t}=e,n=e.level??`debug`,i=e.env??N(),a=e.onError??(e=>d(`remote transport error: ${String(e)}`));return e=>{if(!r(n,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 F(){let e=new WeakSet;return(t,n)=>{if(typeof n==`object`&&n){if(e.has(n))return`[Circular]`;e.add(n)}return n}}function I(e={}){let t=e.level??`debug`,n=e.fields??{},i=n.level??`level`,a=n.time??`time`,o=n.ns??`ns`,s=n.msg??`msg`,c=e.safe??!1,l=e.output??(e=>{globalThis.process?.stdout?.write(e+`
2
- `)});return e=>{if(!r(t,e.level))return;let n={...e.data,[i]:e.level,[a]:e.timestamp.toISOString(),...e.namespace&&{[o]:e.namespace},...e.message!==void 0&&{[s]:e.message}};l(JSON.stringify(n,c?F():void 0))}}function L(e){let t=e.level??`debug`,n=e.maxSize??50,i=e.maxBuffer,a=e.interval??5e3,o=[],s,c=!1;function l(){if(o.length===0)return;let t=o;o=[],Promise.resolve().then(()=>e.onFlush(t)).catch(n=>e.onFlushError?.(t,n))}let u=e=>{c||r(t,e.level)&&(s||=setInterval(l,a),o.push(e),i!==void 0&&o.length>i&&(o=o.slice(o.length-i)),o.length>=n&&l())},d={dispose(){c||(c=!0,s&&=(clearInterval(s),void 0),l())},get disposed(){return c},flush:l,[Symbol.dispose](){d.dispose()},transport:u};return d}function R(e){let{rate:t,transport:n}=e,i=e.level??`debug`;return e=>{r(i,e.level)&&Math.random()<t&&n(e)}}function z(e){let{keys:t,maxDepth:n=20,replacement:r=`[REDACTED]`,transport:i}=e;for(let e of t)e.includes(`.`)&&d(`redactTransport: key "${e}" contains a dot. Dot-path notation is not supported — use the plain field name (e.g. 'password') to redact at any depth.`);let o=new Set(t);function s(e,t=0){return t>n?(d(`redactTransport: object nesting depth exceeded ${n} — redaction truncated at this level. Sensitive fields below depth ${n} may not be redacted.`),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[i,c]of Object.entries(e))a(i)||(n[i]=o.has(i)?r:s(c,t));return n}return e=>{i({...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=p,exports.PRIORITY=n,exports.RuneError=e,exports.RuneTransportError=t,exports.batchTransport=L,exports.consoleTransport=T,exports.createLogger=j,exports.defaultLogger=M,exports.isLevelEnabled=r,exports.jsonTransport=I,exports.lazy=c,exports.pipe=B,exports.redactTransport=z,exports.remoteTransport=P,exports.resolveTheme=g,exports.sampleTransport=R;
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;
3
3
  //# sourceMappingURL=rune.cjs.map