@vielzeug/rune 1.1.2 → 1.1.3
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/_dev.cjs +1 -1
- package/dist/_dev.cjs.map +1 -1
- package/dist/_dev.js +2 -5
- package/dist/_dev.js.map +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/logger.cjs +1 -1
- package/dist/logger.cjs.map +1 -1
- package/dist/logger.js +60 -60
- package/dist/logger.js.map +1 -1
- package/dist/rune.cjs +2 -2
- package/dist/rune.cjs.map +1 -1
- package/dist/rune.iife.js +2 -2
- package/dist/rune.iife.js.map +1 -1
- package/dist/rune.js +2 -2
- package/dist/rune.js.map +1 -1
- package/dist/transports.cjs +1 -1
- package/dist/transports.cjs.map +1 -1
- package/dist/transports.js +10 -10
- package/dist/transports.js.map +1 -1
- package/dist/types.cjs +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +3 -4
package/dist/_dev.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
function e(e){}exports.warn=e;
|
|
2
2
|
//# sourceMappingURL=_dev.cjs.map
|
package/dist/_dev.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_dev.cjs","names":[],"sources":["../src/_dev.ts"],"sourcesContent":["const isDev = !(globalThis as { __RUNE_PROD__?: boolean }).__RUNE_PROD__;\n\n/** @internal @security Messages may include user-supplied data. */\nexport function warn(msg: string): void {\n if (isDev) console.warn(`[@vielzeug/rune] ${msg}`);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"_dev.cjs","names":[],"sources":["../src/_dev.ts"],"sourcesContent":["const isDev = !(globalThis as { __RUNE_PROD__?: boolean }).__RUNE_PROD__;\n\n/** @internal @security Messages may include user-supplied data. */\nexport function warn(msg: string): void {\n if (isDev) console.warn(`[@vielzeug/rune] ${msg}`);\n}\n"],"mappings":"AAGA,SAAgB,EAAK,EAAmB,CAExC"}
|
package/dist/_dev.js
CHANGED
package/dist/_dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_dev.js","names":[],"sources":["../src/_dev.ts"],"sourcesContent":["const isDev = !(globalThis as { __RUNE_PROD__?: boolean }).__RUNE_PROD__;\n\n/** @internal @security Messages may include user-supplied data. */\nexport function warn(msg: string): void {\n if (isDev) console.warn(`[@vielzeug/rune] ${msg}`);\n}\n"],"mappings":";
|
|
1
|
+
{"version":3,"file":"_dev.js","names":[],"sources":["../src/_dev.ts"],"sourcesContent":["const isDev = !(globalThis as { __RUNE_PROD__?: boolean }).__RUNE_PROD__;\n\n/** @internal @security Messages may include user-supplied data. */\nexport function warn(msg: string): void {\n if (isDev) console.warn(`[@vielzeug/rune] ${msg}`);\n}\n"],"mappings":";AAGA,SAAgB,EAAK,GAAmB,CAExC"}
|
package/dist/errors.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.cjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all rune errors. Use `instanceof RuneError` to catch any rune-originated error. */\nexport class RuneError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static is(err: unknown): err is RuneError {\n return err instanceof RuneError;\n }\n}\n\n/**\n * Constructed internally when a transport function throws during log entry emission.\n * Never thrown/propagated to the caller — the logger catches the underlying error, wraps it here\n * (available as `.cause`), and reports it via a dev-only warning so the failing transport cannot\n * crash the caller of `log.info()`/etc. or prevent sibling transports from receiving the entry.\n */\nexport class RuneTransportError extends RuneError {\n constructor(cause: unknown) {\n super('Transport threw an unhandled error', { cause: cause instanceof Error ? cause : undefined });\n }\n}\n"],"mappings":"AACA,IAAa,EAAb,MAAa,UAAkB,KAAM,CACnC,YAAY,EAAiB,EAAqB,CAChD,MAAM,EAAS,CAAI,EACnB,KAAK,KAAO,
|
|
1
|
+
{"version":3,"file":"errors.cjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all rune errors. Use `instanceof RuneError` to catch any rune-originated error. */\nexport class RuneError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static is(err: unknown): err is RuneError {\n return err instanceof RuneError;\n }\n}\n\n/**\n * Constructed internally when a transport function throws during log entry emission.\n * Never thrown/propagated to the caller — the logger catches the underlying error, wraps it here\n * (available as `.cause`), and reports it via a dev-only warning so the failing transport cannot\n * crash the caller of `log.info()`/etc. or prevent sibling transports from receiving the entry.\n */\nexport class RuneTransportError extends RuneError {\n constructor(cause: unknown) {\n super('Transport threw an unhandled error', { cause: cause instanceof Error ? cause : undefined });\n }\n}\n"],"mappings":"AACA,IAAa,EAAb,MAAa,UAAkB,KAAM,CACnC,YAAY,EAAiB,EAAqB,CAChD,MAAM,EAAS,CAAI,EACnB,KAAK,KAAO,WAAW,KACvB,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,CAEA,OAAO,GAAG,EAAgC,CACxC,OAAO,aAAe,CACxB,CACF,EAQa,EAAb,cAAwC,CAAU,CAChD,YAAY,EAAgB,CAC1B,MAAM,qCAAsC,CAAE,MAAO,aAAiB,MAAQ,EAAQ,IAAA,EAAU,CAAC,CACnG,CACF"}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all rune errors. Use `instanceof RuneError` to catch any rune-originated error. */\nexport class RuneError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static is(err: unknown): err is RuneError {\n return err instanceof RuneError;\n }\n}\n\n/**\n * Constructed internally when a transport function throws during log entry emission.\n * Never thrown/propagated to the caller — the logger catches the underlying error, wraps it here\n * (available as `.cause`), and reports it via a dev-only warning so the failing transport cannot\n * crash the caller of `log.info()`/etc. or prevent sibling transports from receiving the entry.\n */\nexport class RuneTransportError extends RuneError {\n constructor(cause: unknown) {\n super('Transport threw an unhandled error', { cause: cause instanceof Error ? cause : undefined });\n }\n}\n"],"mappings":";AACA,IAAa,IAAb,MAAa,UAAkB,MAAM;CACnC,YAAY,GAAiB,GAAqB;EAGhD,AAFA,MAAM,GAAS,CAAI,GACnB,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all rune errors. Use `instanceof RuneError` to catch any rune-originated error. */\nexport class RuneError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static is(err: unknown): err is RuneError {\n return err instanceof RuneError;\n }\n}\n\n/**\n * Constructed internally when a transport function throws during log entry emission.\n * Never thrown/propagated to the caller — the logger catches the underlying error, wraps it here\n * (available as `.cause`), and reports it via a dev-only warning so the failing transport cannot\n * crash the caller of `log.info()`/etc. or prevent sibling transports from receiving the entry.\n */\nexport class RuneTransportError extends RuneError {\n constructor(cause: unknown) {\n super('Transport threw an unhandled error', { cause: cause instanceof Error ? cause : undefined });\n }\n}\n"],"mappings":";AACA,IAAa,IAAb,MAAa,UAAkB,MAAM;CACnC,YAAY,GAAiB,GAAqB;EAGhD,AAFA,MAAM,GAAS,CAAI,GACnB,KAAK,OAAO,WAAW,MACvB,OAAO,eAAe,MAAM,WAAW,SAAS;CAClD;CAEA,OAAO,GAAG,GAAgC;EACxC,OAAO,aAAe;CACxB;AACF,GAQa,IAAb,cAAwC,EAAU;CAChD,YAAY,GAAgB;EAC1B,MAAM,sCAAsC,EAAE,OAAO,aAAiB,QAAQ,IAAQ,KAAA,EAAU,CAAC;CACnG;AACF"}
|
package/dist/logger.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("./errors.cjs"),t=require("./types.cjs"),n=require("./_prototype.cjs"),r=require("./lazy.cjs")
|
|
1
|
+
const e=require("./errors.cjs"),t=require("./types.cjs"),n=require("./_prototype.cjs"),r=require("./lazy.cjs");require("./_dev.cjs");const i=require("./console.cjs");function a(e){return{message:e.message,name:e.name,stack:e.stack}}function o(e){let t={};for(let[r,i]of Object.entries(e))n.isUnsafeObjectKey(r)||(t[r]=i instanceof Error?a(i):i);return t}function s(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:a(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 c(e,t){return e?t?`${e}.${t}`:e:t}function l(n={},u){let d=typeof n==`string`?{namespace:n,...u}:n,f=d.logLevel??`debug`,p=d.middleware??[],m=d.namespace??``,h=d.transports??[i.consoleTransport()],g={...d.bindings??{}},_=new AbortController,v=!1,y=e=>t.isLevelEnabled(f,e),b=()=>m?` (namespace: "${m}")`:``,x=t=>{let n=t;if(p.length>0){let e=t;for(let t of p)try{let n=t(e);if(n==null)return;e=n}catch(e){`${b()}${String(e)}`;return}n=e}for(let t of h)try{t(n)}catch(t){`${new e.RuneTransportError(t).message}${b()}${String(t)}`}},S=(e,t,n,i)=>{if(v||!y(e))return;let{context:a,message:c}=s(t,n,i),l=o(r.resolveBindings(g)),u=a?{...l,...o(r.resolveBindings(a))}:l;x({data:u,level:e,message:c,namespace:m,timestamp:new Date})},C=(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=a(t instanceof Error?t:Error(String(t)))),S(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}},w=(e,t,n,r)=>{if(v||f===`off`||r!==void 0&&!y(r))return n();i.renderGroup(e,t,m,i.DEFAULT_THEME);try{let e=n();return e instanceof Promise?e.finally(()=>console.groupEnd()):(console.groupEnd(),e)}catch(e){throw console.groupEnd(),e}},T=(e={})=>l({bindings:{...g,...e.bindings??{}},logLevel:e.logLevel??f,middleware:e.middleware??p,namespace:e.namespace===void 0?m:c(m,e.namespace),transports:e.transports??h}),E={get bindings(){return{...g}},child:T,debug:(e,t,n)=>S(`debug`,e,t,n),get disposalSignal(){return _.signal},dispose:()=>{v||(v=!0,_.abort())},get disposed(){return v},enabled:e=>t.isLevelEnabled(f,e),error:(e,t,n)=>S(`error`,e,t,n),fatal:(e,t,n)=>S(`fatal`,e,t,n),group:(e,t,n)=>w(!1,e,t,n),groupCollapsed:(e,t,n)=>w(!0,e,t,n),info:(e,t,n)=>S(`info`,e,t,n),get logLevel(){return f},get middleware(){return[...p]},get namespace(){return m},[Symbol.dispose](){E.dispose()},time:C,get transports(){return[...h]},use:e=>T({middleware:[...p,e]}),warn:(e,t,n)=>S(`warn`,e,t,n),withBindings:e=>T({bindings:e})};return E}var u=l();exports.createLogger=l,exports.defaultLogger=u;
|
|
2
2
|
//# sourceMappingURL=logger.cjs.map
|
package/dist/logger.cjs.map
CHANGED
|
@@ -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 { 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.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 { 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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"}
|
package/dist/logger.js
CHANGED
|
@@ -2,22 +2,22 @@ import { RuneTransportError as e } from "./errors.js";
|
|
|
2
2
|
import { isLevelEnabled as t } from "./types.js";
|
|
3
3
|
import { isUnsafeObjectKey as n } from "./_prototype.js";
|
|
4
4
|
import { resolveBindings as r } from "./lazy.js";
|
|
5
|
-
import
|
|
6
|
-
import { DEFAULT_THEME as
|
|
5
|
+
import "./_dev.js";
|
|
6
|
+
import { DEFAULT_THEME as i, consoleTransport as a, renderGroup as o } from "./console.js";
|
|
7
7
|
//#region src/logger.ts
|
|
8
|
-
function
|
|
8
|
+
function s(e) {
|
|
9
9
|
return {
|
|
10
10
|
message: e.message,
|
|
11
11
|
name: e.name,
|
|
12
12
|
stack: e.stack
|
|
13
13
|
};
|
|
14
14
|
}
|
|
15
|
-
function
|
|
15
|
+
function c(e) {
|
|
16
16
|
let t = {};
|
|
17
|
-
for (let [r, i] of Object.entries(e)) n(r) || (t[r] = i instanceof Error ?
|
|
17
|
+
for (let [r, i] of Object.entries(e)) n(r) || (t[r] = i instanceof Error ? s(i) : i);
|
|
18
18
|
return t;
|
|
19
19
|
}
|
|
20
|
-
function
|
|
20
|
+
function l(e, t, n) {
|
|
21
21
|
if (typeof e == "string") return {
|
|
22
22
|
context: void 0,
|
|
23
23
|
message: e
|
|
@@ -26,7 +26,7 @@ function u(e, t, n) {
|
|
|
26
26
|
let r = typeof t == "object" && t ? t : {};
|
|
27
27
|
return {
|
|
28
28
|
context: {
|
|
29
|
-
err:
|
|
29
|
+
err: s(e),
|
|
30
30
|
...r
|
|
31
31
|
},
|
|
32
32
|
message: n === void 0 ? t !== void 0 && typeof t != "object" ? String(t) : void 0 : String(n)
|
|
@@ -40,49 +40,49 @@ function u(e, t, n) {
|
|
|
40
40
|
message: e === void 0 ? void 0 : String(e)
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
-
function
|
|
43
|
+
function u(e, t) {
|
|
44
44
|
return e ? t ? `${e}.${t}` : e : t;
|
|
45
45
|
}
|
|
46
|
-
function
|
|
47
|
-
let
|
|
46
|
+
function d(n = {}, f) {
|
|
47
|
+
let p = typeof n == "string" ? {
|
|
48
48
|
namespace: n,
|
|
49
|
-
...
|
|
50
|
-
} : n,
|
|
49
|
+
...f
|
|
50
|
+
} : n, m = p.logLevel ?? "debug", h = p.middleware ?? [], g = p.namespace ?? "", _ = p.transports ?? [a()], v = { ...p.bindings ?? {} }, y = new AbortController(), b = !1, x = (e) => t(m, e), S = () => g ? ` (namespace: "${g}")` : "", C = (t) => {
|
|
51
51
|
let n = t;
|
|
52
|
-
if (
|
|
52
|
+
if (h.length > 0) {
|
|
53
53
|
let e = t;
|
|
54
|
-
for (let t of
|
|
54
|
+
for (let t of h) try {
|
|
55
55
|
let n = t(e);
|
|
56
56
|
if (n == null) return;
|
|
57
57
|
e = n;
|
|
58
58
|
} catch (e) {
|
|
59
|
-
|
|
59
|
+
`${S()}${String(e)}`;
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
62
|
n = e;
|
|
63
63
|
}
|
|
64
|
-
for (let t of
|
|
64
|
+
for (let t of _) try {
|
|
65
65
|
t(n);
|
|
66
66
|
} catch (t) {
|
|
67
|
-
|
|
67
|
+
`${new e(t).message}${S()}${String(t)}`;
|
|
68
68
|
}
|
|
69
|
-
},
|
|
70
|
-
if (
|
|
71
|
-
let { context: a, message: o } =
|
|
69
|
+
}, w = (e, t, n, i) => {
|
|
70
|
+
if (b || !x(e)) return;
|
|
71
|
+
let { context: a, message: o } = l(t, n, i), s = c(r(v)), u = a ? {
|
|
72
72
|
...s,
|
|
73
|
-
...
|
|
73
|
+
...c(r(a))
|
|
74
74
|
} : s;
|
|
75
|
-
|
|
76
|
-
data:
|
|
75
|
+
C({
|
|
76
|
+
data: u,
|
|
77
77
|
level: e,
|
|
78
78
|
message: o,
|
|
79
|
-
namespace:
|
|
79
|
+
namespace: g,
|
|
80
80
|
timestamp: /* @__PURE__ */ new Date()
|
|
81
81
|
});
|
|
82
|
-
},
|
|
82
|
+
}, T = (e, t, n = "debug") => {
|
|
83
83
|
let r = performance.now(), i = (t) => {
|
|
84
84
|
let i = { duration_ms: Math.round((performance.now() - r) * 100) / 100 };
|
|
85
|
-
t !== void 0 && (i.err =
|
|
85
|
+
t !== void 0 && (i.err = s(t instanceof Error ? t : Error(String(t)))), w(n, i, e);
|
|
86
86
|
};
|
|
87
87
|
try {
|
|
88
88
|
let e = t();
|
|
@@ -90,69 +90,69 @@ function f(n = {}, p) {
|
|
|
90
90
|
} catch (e) {
|
|
91
91
|
throw i(e), e;
|
|
92
92
|
}
|
|
93
|
-
},
|
|
94
|
-
if (
|
|
95
|
-
|
|
93
|
+
}, E = (e, t, n, r) => {
|
|
94
|
+
if (b || m === "off" || r !== void 0 && !x(r)) return n();
|
|
95
|
+
o(e, t, g, i);
|
|
96
96
|
try {
|
|
97
97
|
let e = n();
|
|
98
98
|
return e instanceof Promise ? e.finally(() => console.groupEnd()) : (console.groupEnd(), e);
|
|
99
99
|
} catch (e) {
|
|
100
100
|
throw console.groupEnd(), e;
|
|
101
101
|
}
|
|
102
|
-
},
|
|
102
|
+
}, D = (e = {}) => d({
|
|
103
103
|
bindings: {
|
|
104
|
-
...
|
|
104
|
+
...v,
|
|
105
105
|
...e.bindings ?? {}
|
|
106
106
|
},
|
|
107
|
-
logLevel: e.logLevel ??
|
|
108
|
-
middleware: e.middleware ??
|
|
109
|
-
namespace: e.namespace === void 0 ?
|
|
110
|
-
transports: e.transports ??
|
|
111
|
-
}),
|
|
107
|
+
logLevel: e.logLevel ?? m,
|
|
108
|
+
middleware: e.middleware ?? h,
|
|
109
|
+
namespace: e.namespace === void 0 ? g : u(g, e.namespace),
|
|
110
|
+
transports: e.transports ?? _
|
|
111
|
+
}), O = {
|
|
112
112
|
get bindings() {
|
|
113
|
-
return { ...
|
|
113
|
+
return { ...v };
|
|
114
114
|
},
|
|
115
|
-
child:
|
|
116
|
-
debug: (e, t, n) =>
|
|
115
|
+
child: D,
|
|
116
|
+
debug: (e, t, n) => w("debug", e, t, n),
|
|
117
117
|
get disposalSignal() {
|
|
118
|
-
return
|
|
118
|
+
return y.signal;
|
|
119
119
|
},
|
|
120
120
|
dispose: () => {
|
|
121
|
-
|
|
121
|
+
b || (b = !0, y.abort());
|
|
122
122
|
},
|
|
123
123
|
get disposed() {
|
|
124
|
-
return
|
|
124
|
+
return b;
|
|
125
125
|
},
|
|
126
|
-
enabled: (e) => t(
|
|
127
|
-
error: (e, t, n) =>
|
|
128
|
-
fatal: (e, t, n) =>
|
|
129
|
-
group: (e, t, n) =>
|
|
130
|
-
groupCollapsed: (e, t, n) =>
|
|
131
|
-
info: (e, t, n) =>
|
|
126
|
+
enabled: (e) => t(m, e),
|
|
127
|
+
error: (e, t, n) => w("error", e, t, n),
|
|
128
|
+
fatal: (e, t, n) => w("fatal", e, t, n),
|
|
129
|
+
group: (e, t, n) => E(!1, e, t, n),
|
|
130
|
+
groupCollapsed: (e, t, n) => E(!0, e, t, n),
|
|
131
|
+
info: (e, t, n) => w("info", e, t, n),
|
|
132
132
|
get logLevel() {
|
|
133
|
-
return
|
|
133
|
+
return m;
|
|
134
134
|
},
|
|
135
135
|
get middleware() {
|
|
136
|
-
return [...
|
|
136
|
+
return [...h];
|
|
137
137
|
},
|
|
138
138
|
get namespace() {
|
|
139
|
-
return
|
|
139
|
+
return g;
|
|
140
140
|
},
|
|
141
141
|
[Symbol.dispose]() {
|
|
142
|
-
|
|
142
|
+
O.dispose();
|
|
143
143
|
},
|
|
144
|
-
time:
|
|
144
|
+
time: T,
|
|
145
145
|
get transports() {
|
|
146
|
-
return [...
|
|
146
|
+
return [..._];
|
|
147
147
|
},
|
|
148
|
-
use: (e) =>
|
|
149
|
-
warn: (e, t, n) =>
|
|
150
|
-
withBindings: (e) =>
|
|
148
|
+
use: (e) => D({ middleware: [...h, e] }),
|
|
149
|
+
warn: (e, t, n) => w("warn", e, t, n),
|
|
150
|
+
withBindings: (e) => D({ bindings: e })
|
|
151
151
|
};
|
|
152
|
-
return
|
|
152
|
+
return O;
|
|
153
153
|
}
|
|
154
|
-
var
|
|
154
|
+
var f = d();
|
|
155
155
|
//#endregion
|
|
156
|
-
export {
|
|
156
|
+
export { d as createLogger, f as defaultLogger };
|
|
157
157
|
|
|
158
158
|
//# sourceMappingURL=logger.js.map
|
package/dist/logger.js.map
CHANGED
|
@@ -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 { 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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"}
|
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
|
|
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?
|
|
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`&&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}function u(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 d={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`}},f=`border-radius: 8px; font: italic small-caps bold 12px; font-weight: lighter; padding: 0 4px;`,p={debug:`log`,error:`error`,fatal:`error`,info:`info`,warn:`warn`};function m(e){if(!e)return d;let t={...d};for(let n of Object.keys(e)){let r=e[n];r&&(t[n]={...d[n],...r})}return t}function h(e){return[parseInt(e.slice(1,3),16),parseInt(e.slice(3,5),16),parseInt(e.slice(5,7),16)]}function g(e,t){let[n,r,i]=h(e);return`\x1b[38;2;${n};${r};${i}m${t}\x1b[0m`}function _(e){return`\x1b[90m${e}\x1b[0m`}function v(){return typeof window<`u`?!1:globalThis.process?.stdout?.isTTY===!0}function y(e,t=``){return`background: ${e.bg}; color: ${e.color}; border: 1px solid ${e.border}; border-radius: 4px; padding: 0 1px${t}`}function b(e){return e.replace(/%/g,`%%`)}function x(e,t,n,r,i){let a=e[t],o=b(a.badge),s=[i?g(a.bg,o):o];if(n){let e=b(n);s.push(i?_(`[${e}]`):`[${e}]`)}return r&&s.push(i?_(r):r),`${s.join(` | `)} |`}function S(e,t,n,r){let i=`%c${b(e[t].badge)}%c`,a=[y(e[t]),``];return n&&(i+=` %c${b(n)}%c`,a.push(y(e.ns,`; ${f}`),``)),r&&(i+=` %c${r}%c`,a.push(`color: gray`,``)),{fmt:i,parts:a}}function C(e={}){let t=e.level??`debug`,n=e.timestamp??!0,i=e.format??`raw`,a=typeof window>`u`,o=e.ansi??(a?v():!1),s=m(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=u(e.data,e.message,c),d=console[p[e.level]];if(a)d(x(s,e.level,e.namespace,i,o),...l);else{let{fmt:t,parts:n}=S(s,e.level,e.namespace,i);d(t,...n,...l)}}}function w(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${b(t)}%c`,o=[y(r.group,`; margin-right: 6px; padding: 1px 3px 0`),``];n&&(a+=` %c${b(n)}%c`,o.push(y(r.ns,`; ${f}; margin-right: 6px`),``)),i(a,...o)}function T(e){return{message:e.message,name:e.name,stack:e.stack}}function E(e){let t={};for(let[n,r]of Object.entries(e))a(n)||(t[n]=r instanceof Error?T(r):r);return t}function D(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:T(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 O(e,t){return e?t?`${e}.${t}`:e:t}function k(e={},n){let i=typeof e==`string`?{namespace:e,...n}:e,a=i.logLevel??`debug`,o=i.middleware??[],s=i.namespace??``,c=i.transports??[C()],u={...i.bindings??{}},f=new AbortController,p=!1,m=e=>r(a,e),h=()=>s?` (namespace: "${s}")`:``,g=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){`${h()}${String(e)}`;return}n=t}for(let e of c)try{e(n)}catch(e){`${new t(e).message}${h()}${String(e)}`}},_=(e,t,n,r)=>{if(p||!m(e))return;let{context:i,message:a}=D(t,n,r),o=E(l(u)),c=i?{...o,...E(l(i))}:o;g({data:c,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=T(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,r)=>{if(p||a===`off`||r!==void 0&&!m(r))return n();w(e,t,s,d);try{let e=n();return e instanceof Promise?e.finally(()=>console.groupEnd()):(console.groupEnd(),e)}catch(e){throw console.groupEnd(),e}},b=(e={})=>k({bindings:{...u,...e.bindings??{}},logLevel:e.logLevel??a,middleware:e.middleware??o,namespace:e.namespace===void 0?s:O(s,e.namespace),transports:e.transports??c}),x={get bindings(){return{...u}},child:b,debug:(e,t,n)=>_(`debug`,e,t,n),get disposalSignal(){return f.signal},dispose:()=>{p||(p=!0,f.abort())},get disposed(){return p},enabled:e=>r(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 A=k();function j(){return typeof window>`u`?globalThis.process?.env?.NODE_ENV===`production`?`production`:`development`:`production`}function M(e){let{handler:t}=e,n=e.level??`debug`,i=e.env??j(),a=e.onError??(e=>(`${String(e)}`,void 0));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 N(){let e=new WeakSet;return(t,n)=>{if(typeof n==`object`&&n){if(e.has(n))return`[Circular]`;e.add(n)}return n}}function P(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?N():void 0))}}function F(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 I(e){let{rate:t,transport:n}=e,i=e.level??`debug`;return e=>{r(i,e.level)&&Math.random()<t&&n(e)}}function L(e){let{keys:t,maxDepth:n=20,replacement:r=`[REDACTED]`,transport:i}=e;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[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 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=d,exports.PRIORITY=n,exports.RuneError=e,exports.RuneTransportError=t,exports.batchTransport=F,exports.consoleTransport=C,exports.createLogger=k,exports.defaultLogger=A,exports.isLevelEnabled=r,exports.jsonTransport=P,exports.lazy=c,exports.pipe=R,exports.redactTransport=L,exports.remoteTransport=M,exports.resolveTheme=m,exports.sampleTransport=I;
|
|
3
3
|
//# sourceMappingURL=rune.cjs.map
|