loggily 0.6.0 → 0.6.2

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/worker.d.mts DELETED
@@ -1,173 +0,0 @@
1
- import { o as Logger } from "./core-7D7sstHl.mjs";
2
-
3
- //#region src/worker.d.ts
4
- /** Message sent from worker to main thread for console output */
5
- interface WorkerConsoleMessage {
6
- type: "console";
7
- level: "log" | "debug" | "info" | "warn" | "error" | "trace";
8
- namespace?: string;
9
- args: unknown[];
10
- timestamp: number;
11
- }
12
- /** Message sent from worker to main thread for structured log output */
13
- interface WorkerLogMessage {
14
- type: "log";
15
- level: "trace" | "debug" | "info" | "warn" | "error";
16
- namespace: string;
17
- message: string;
18
- data?: Record<string, unknown>;
19
- timestamp: number;
20
- }
21
- /** Message sent from worker to main thread for span events */
22
- interface WorkerSpanMessage {
23
- type: "span";
24
- event: "start" | "end";
25
- namespace: string;
26
- spanId: string;
27
- traceId: string;
28
- parentId: string | null;
29
- startTime: number;
30
- endTime?: number;
31
- duration?: number;
32
- props: Record<string, unknown>;
33
- spanData: Record<string, unknown>;
34
- timestamp: number;
35
- }
36
- /** Union type for all worker messages */
37
- type WorkerMessage = WorkerConsoleMessage | WorkerLogMessage | WorkerSpanMessage;
38
- /** Type guard for WorkerConsoleMessage */
39
- declare function isWorkerConsoleMessage(msg: unknown): msg is WorkerConsoleMessage;
40
- /** Type guard for WorkerLogMessage */
41
- declare function isWorkerLogMessage(msg: unknown): msg is WorkerLogMessage;
42
- /** Type guard for WorkerSpanMessage */
43
- declare function isWorkerSpanMessage(msg: unknown): msg is WorkerSpanMessage;
44
- /** Type guard for any worker message */
45
- declare function isWorkerMessage(msg: unknown): msg is WorkerMessage;
46
- type PostMessageFn = (message: WorkerConsoleMessage) => void;
47
- /**
48
- * Forward console.* calls from worker to main thread.
49
- *
50
- * Monkey-patches console methods to send messages via postMessage.
51
- * Call this at the start of your worker script.
52
- *
53
- * @param postMessage - The worker's postMessage function
54
- * @param namespace - Optional namespace for log messages (e.g., "km:worker:parse")
55
- *
56
- * @example
57
- * ```typescript
58
- * // At top of worker file:
59
- * import { forwardConsole } from "loggily/worker"
60
- * forwardConsole(postMessage, "km:worker:parse")
61
- *
62
- * // Now all console.* calls are forwarded:
63
- * console.log("processing", { file: "test.md" })
64
- * console.error(new Error("failed"))
65
- * ```
66
- */
67
- declare function forwardConsole(postMessage: PostMessageFn, namespace?: string): void;
68
- /**
69
- * Restore original console methods.
70
- * Call this if you need to disable console forwarding.
71
- */
72
- declare function restoreConsole(): void;
73
- type PostMessageAnyFn = (message: WorkerMessage) => void;
74
- /** Reset worker ID counters (for testing) */
75
- declare function resetWorkerIds(): void;
76
- interface WorkerLoggerOptions {
77
- /** Parent span ID for nested spans */
78
- parentSpanId?: string | null;
79
- /** Trace ID for distributed tracing */
80
- traceId?: string | null;
81
- }
82
- /**
83
- * Create a logger instance for use in a worker thread.
84
- *
85
- * All log calls and span events are forwarded to the main thread via postMessage.
86
- * The main thread should use createWorkerLogHandler to process these messages.
87
- *
88
- * @param postMessage - The worker's postMessage function
89
- * @param namespace - Logger namespace (e.g., "km:worker:parse")
90
- * @param props - Optional initial props
91
- * @param options - Optional configuration
92
- *
93
- * @example
94
- * ```typescript
95
- * import { createWorkerLogger } from "loggily/worker"
96
- *
97
- * const log = createWorkerLogger(postMessage, "km:worker:parse")
98
- *
99
- * log.info("starting parse", { file: "test.md" })
100
- *
101
- * {
102
- * using span = log.span("process")
103
- * span.info("processing...")
104
- * span.spanData.lineCount = 100
105
- * }
106
- * // Span end event automatically sent to main thread
107
- * ```
108
- */
109
- declare function createWorkerLogger(postMessage: PostMessageAnyFn, namespace: string, props?: Record<string, unknown>, options?: WorkerLoggerOptions): Logger;
110
- interface WorkerConsoleHandlerOptions {
111
- /** Default namespace if message doesn't include one */
112
- defaultNamespace?: string;
113
- /** Custom logger to use (defaults to creating one with the namespace) */
114
- logger?: Logger;
115
- }
116
- /**
117
- * Create a handler for worker console messages.
118
- *
119
- * Use this on the main thread to receive and output messages from workers.
120
- *
121
- * @param options - Handler options
122
- * @returns Handler function to call with worker messages
123
- *
124
- * @example
125
- * ```typescript
126
- * import { createWorkerConsoleHandler } from "loggily/worker"
127
- *
128
- * const handleConsole = createWorkerConsoleHandler({
129
- * defaultNamespace: "km:worker:parse"
130
- * })
131
- *
132
- * worker.onmessage = (e) => {
133
- * if (e.data.type === "console") {
134
- * handleConsole(e.data)
135
- * } else {
136
- * // Handle other message types
137
- * }
138
- * }
139
- * ```
140
- */
141
- declare function createWorkerConsoleHandler(options?: WorkerConsoleHandlerOptions): (message: WorkerConsoleMessage) => void;
142
- interface WorkerLogHandlerOptions {
143
- /** Enable span output (default: uses spansAreEnabled()) */
144
- enableSpans?: boolean;
145
- }
146
- /**
147
- * Create a handler for worker logger messages (logs and spans).
148
- *
149
- * Use this on the main thread to receive and output messages from workers
150
- * that use createWorkerLogger.
151
- *
152
- * @param options - Handler options
153
- * @returns Handler function to call with worker messages
154
- *
155
- * @example
156
- * ```typescript
157
- * import { createWorkerLogHandler, isWorkerMessage } from "loggily/worker"
158
- *
159
- * const handleLog = createWorkerLogHandler()
160
- *
161
- * worker.onmessage = (e) => {
162
- * if (isWorkerMessage(e.data)) {
163
- * handleLog(e.data)
164
- * } else {
165
- * // Handle other message types
166
- * }
167
- * }
168
- * ```
169
- */
170
- declare function createWorkerLogHandler(options?: WorkerLogHandlerOptions): (message: WorkerMessage) => void;
171
- //#endregion
172
- export { WorkerConsoleHandlerOptions, WorkerConsoleMessage, WorkerLogHandlerOptions, WorkerLogMessage, WorkerMessage, WorkerSpanMessage, createWorkerConsoleHandler, createWorkerLogHandler, createWorkerLogger, forwardConsole, isWorkerConsoleMessage, isWorkerLogMessage, isWorkerMessage, isWorkerSpanMessage, resetWorkerIds, restoreConsole };
173
- //# sourceMappingURL=worker.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.d.mts","names":[],"sources":["../src/worker.ts"],"mappings":";;;;UAyDiB,oBAAA;EACf,IAAA;EACA,KAAA;EACA,SAAA;EACA,IAAA;EACA,SAAA;AAAA;;UAIe,gBAAA;EACf,IAAA;EACA,KAAA;EACA,SAAA;EACA,OAAA;EACA,IAAA,GAAO,MAAA;EACP,SAAA;AAAA;;UAIe,iBAAA;EACf,IAAA;EACA,KAAA;EACA,SAAA;EACA,MAAA;EACA,OAAA;EACA,QAAA;EACA,SAAA;EACA,OAAA;EACA,QAAA;EACA,KAAA,EAAO,MAAA;EACP,QAAA,EAAU,MAAA;EACV,SAAA;AAAA;;KAIU,aAAA,GAAgB,oBAAA,GAAuB,gBAAA,GAAmB,iBAAA;;iBAGtD,sBAAA,CAAuB,GAAA,YAAe,GAAA,IAAO,oBAAA;AAoB7D;AAAA,iBAVgB,kBAAA,CAAmB,GAAA,YAAe,GAAA,IAAO,gBAAA;;iBAUzC,mBAAA,CAAoB,GAAA,YAAe,GAAA,IAAO,iBAAA;;iBAS1C,eAAA,CAAgB,GAAA,YAAe,GAAA,IAAO,aAAA;AAAA,KAMjD,aAAA,IAAiB,OAAA,EAAS,oBAAA;;;AAN/B;;;;;;;;;AAEC;;;;;AA+ED;;;;iBAAgB,cAAA,CAAe,WAAA,EAAa,aAAA,EAAe,SAAA;;;;;iBAiC3C,cAAA,CAAA;AAAA,KASX,gBAAA,IAAoB,OAAA,EAAS,aAAA;;iBAclB,cAAA,CAAA;AAAA,UAKN,mBAAA;EAnBL;EAqBH,YAAA;;EAEA,OAAA;AAAA;AATF;;;;;AAGC;;;;;AAoCD;;;;;;;;;;;;;;;;;AAvCA,iBAuCgB,kBAAA,CACd,WAAA,EAAa,gBAAA,EACb,SAAA,UACA,KAAA,GAAO,MAAA,mBACP,OAAA,GAAS,mBAAA,GACR,MAAA;AAAA,UA2Lc,2BAAA;EAAA;EAEf,gBAAA;;EAEA,MAAA,GAAS,MAAA;AAAA;;;;;AAkFX;;;;;;;;;;AAyBA;;;;;AA6BA;;;;;;iBAtDgB,0BAAA,CACd,OAAA,GAAS,2BAAA,IACP,OAAA,EAAS,oBAAA;AAAA,UAuBI,uBAAA;EA6BqF;EA3BpG,WAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;iBA2Bc,sBAAA,CAAuB,OAAA,GAAS,uBAAA,IAAgC,OAAA,EAAS,aAAA"}
package/dist/worker.mjs DELETED
@@ -1,468 +0,0 @@
1
- import { D as writeSpan, c as createSpanDataProxy, s as createLogger, u as enableSpans } from "./core-BDFU50FQ.mjs";
2
- import "./index.mjs";
3
- //#region src/worker.ts
4
- /**
5
- * Worker Thread Logger/Console Forwarding
6
- *
7
- * Provides utilities to forward loggily and console.* output from worker threads
8
- * to the main thread, ensuring proper integration with DEBUG_LOG and log files.
9
- *
10
- * ## Full Logger Forwarding (Recommended)
11
- *
12
- * @example Worker side:
13
- * ```typescript
14
- * import { createWorkerLogger } from "loggily/worker"
15
- * const log = createWorkerLogger(postMessage, "km:worker:parse")
16
- *
17
- * log.info("processing", { file: "test.md" })
18
- * {
19
- * using span = log.span("parse")
20
- * // ... work ...
21
- * span.spanData.lines = 100
22
- * }
23
- * ```
24
- *
25
- * @example Main thread side:
26
- * ```typescript
27
- * import { createWorkerLogHandler } from "loggily/worker"
28
- *
29
- * const handleLog = createWorkerLogHandler()
30
- * worker.onmessage = (e) => {
31
- * if (e.data.type === "log" || e.data.type === "span") handleLog(e.data)
32
- * }
33
- * ```
34
- *
35
- * ## Console Forwarding (Simple)
36
- *
37
- * @example Worker side:
38
- * ```typescript
39
- * import { forwardConsole } from "loggily/worker"
40
- * forwardConsole(postMessage)
41
- *
42
- * console.log("message") // Forwarded to main thread
43
- * ```
44
- */
45
- /** Type guard for WorkerConsoleMessage */
46
- function isWorkerConsoleMessage(msg) {
47
- return typeof msg === "object" && msg?.type === "console" && typeof msg.level === "string" && Array.isArray(msg.args);
48
- }
49
- /** Type guard for WorkerLogMessage */
50
- function isWorkerLogMessage(msg) {
51
- return typeof msg === "object" && msg?.type === "log" && typeof msg.level === "string" && typeof msg.namespace === "string";
52
- }
53
- /** Type guard for WorkerSpanMessage */
54
- function isWorkerSpanMessage(msg) {
55
- return typeof msg === "object" && msg?.type === "span" && typeof msg.event === "string";
56
- }
57
- /** Type guard for any worker message */
58
- function isWorkerMessage(msg) {
59
- return isWorkerConsoleMessage(msg) || isWorkerLogMessage(msg) || isWorkerSpanMessage(msg);
60
- }
61
- /** Store original console methods for restoration */
62
- let originalConsole = null;
63
- /**
64
- * Serialize a value for transmission via postMessage.
65
- * Handles non-serializable values like functions and circular references.
66
- */
67
- function serializeArg(arg, depth = 0) {
68
- if (depth > 5) return "[max depth]";
69
- if (arg === null || arg === void 0) return arg;
70
- if (typeof arg === "function") return `[Function: ${arg.name || "anonymous"}]`;
71
- if (typeof arg === "symbol") return arg.toString();
72
- if (typeof arg === "bigint") return arg.toString() + "n";
73
- if (arg instanceof Error) return {
74
- name: arg.name,
75
- message: arg.message,
76
- stack: arg.stack
77
- };
78
- if (Array.isArray(arg)) return arg.map((v) => serializeArg(v, depth + 1));
79
- if (typeof arg === "object") try {
80
- structuredClone(arg);
81
- return arg;
82
- } catch {
83
- const result = {};
84
- const seen = /* @__PURE__ */ new Set();
85
- seen.add(arg);
86
- for (const [key, value] of Object.entries(arg)) if (typeof value === "object" && value !== null && seen.has(value)) result[key] = "[Circular]";
87
- else result[key] = serializeArg(value, depth + 1);
88
- return result;
89
- }
90
- return arg;
91
- }
92
- /**
93
- * Forward console.* calls from worker to main thread.
94
- *
95
- * Monkey-patches console methods to send messages via postMessage.
96
- * Call this at the start of your worker script.
97
- *
98
- * @param postMessage - The worker's postMessage function
99
- * @param namespace - Optional namespace for log messages (e.g., "km:worker:parse")
100
- *
101
- * @example
102
- * ```typescript
103
- * // At top of worker file:
104
- * import { forwardConsole } from "loggily/worker"
105
- * forwardConsole(postMessage, "km:worker:parse")
106
- *
107
- * // Now all console.* calls are forwarded:
108
- * console.log("processing", { file: "test.md" })
109
- * console.error(new Error("failed"))
110
- * ```
111
- */
112
- function forwardConsole(postMessage, namespace) {
113
- if (!originalConsole) originalConsole = { ...console };
114
- for (const level of [
115
- "log",
116
- "debug",
117
- "info",
118
- "warn",
119
- "error",
120
- "trace"
121
- ]) console[level] = (...args) => {
122
- const serializedArgs = args.map((arg) => serializeArg(arg));
123
- try {
124
- postMessage({
125
- type: "console",
126
- level,
127
- namespace,
128
- args: serializedArgs,
129
- timestamp: Date.now()
130
- });
131
- } catch {
132
- originalConsole?.[level](...args);
133
- }
134
- };
135
- }
136
- /**
137
- * Restore original console methods.
138
- * Call this if you need to disable console forwarding.
139
- */
140
- function restoreConsole() {
141
- if (originalConsole) {
142
- Object.assign(console, originalConsole);
143
- originalConsole = null;
144
- }
145
- }
146
- let workerSpanIdCounter = 0;
147
- let workerTraceIdCounter = 0;
148
- function generateWorkerSpanId() {
149
- return `wsp_${(++workerSpanIdCounter).toString(36)}`;
150
- }
151
- function generateWorkerTraceId() {
152
- return `wtr_${(++workerTraceIdCounter).toString(36)}`;
153
- }
154
- /** Reset worker ID counters (for testing) */
155
- function resetWorkerIds() {
156
- workerSpanIdCounter = 0;
157
- workerTraceIdCounter = 0;
158
- }
159
- /**
160
- * Create a logger instance for use in a worker thread.
161
- *
162
- * All log calls and span events are forwarded to the main thread via postMessage.
163
- * The main thread should use createWorkerLogHandler to process these messages.
164
- *
165
- * @param postMessage - The worker's postMessage function
166
- * @param namespace - Logger namespace (e.g., "km:worker:parse")
167
- * @param props - Optional initial props
168
- * @param options - Optional configuration
169
- *
170
- * @example
171
- * ```typescript
172
- * import { createWorkerLogger } from "loggily/worker"
173
- *
174
- * const log = createWorkerLogger(postMessage, "km:worker:parse")
175
- *
176
- * log.info("starting parse", { file: "test.md" })
177
- *
178
- * {
179
- * using span = log.span("process")
180
- * span.info("processing...")
181
- * span.spanData.lineCount = 100
182
- * }
183
- * // Span end event automatically sent to main thread
184
- * ```
185
- */
186
- function createWorkerLogger(postMessage, namespace, props = {}, options = {}) {
187
- const { parentSpanId = null, traceId = null } = options;
188
- function log(level, message, data) {
189
- const resolved = typeof message === "function" ? message() : message;
190
- try {
191
- postMessage({
192
- type: "log",
193
- level,
194
- namespace,
195
- message: resolved,
196
- data: data ? {
197
- ...props,
198
- ...data
199
- } : Object.keys(props).length > 0 ? props : void 0,
200
- timestamp: Date.now()
201
- });
202
- } catch (err) {
203
- try {
204
- postMessage({
205
- type: "log",
206
- level: "error",
207
- namespace,
208
- message: `postMessage failed for ${level} "${resolved}": ${err instanceof Error ? err.message : String(err)}`,
209
- timestamp: Date.now()
210
- });
211
- } catch {}
212
- }
213
- }
214
- function createSpan(spanNamespace, spanProps) {
215
- const fullNamespace = spanNamespace ? `${namespace}:${spanNamespace}` : namespace;
216
- const mergedProps = {
217
- ...props,
218
- ...spanProps
219
- };
220
- const spanId = generateWorkerSpanId();
221
- const spanTraceId = traceId || generateWorkerTraceId();
222
- const startTime = Date.now();
223
- const customSpanData = {};
224
- try {
225
- postMessage({
226
- type: "span",
227
- event: "start",
228
- namespace: fullNamespace,
229
- spanId,
230
- traceId: spanTraceId,
231
- parentId: parentSpanId,
232
- startTime,
233
- props: mergedProps,
234
- spanData: {},
235
- timestamp: Date.now()
236
- });
237
- } catch (err) {
238
- try {
239
- postMessage({
240
- type: "log",
241
- level: "error",
242
- namespace: fullNamespace,
243
- message: `postMessage failed for span start "${fullNamespace}": ${err instanceof Error ? err.message : String(err)}`,
244
- timestamp: Date.now()
245
- });
246
- } catch {}
247
- }
248
- let ended = false;
249
- const spanData = createSpanDataProxy(() => ({
250
- id: spanId,
251
- traceId: spanTraceId,
252
- parentId: parentSpanId,
253
- startTime,
254
- endTime: ended ? Date.now() : null,
255
- duration: Date.now() - startTime
256
- }), customSpanData);
257
- function endSpan() {
258
- if (ended) return;
259
- ended = true;
260
- const endTime = Date.now();
261
- const duration = endTime - startTime;
262
- try {
263
- postMessage({
264
- type: "span",
265
- event: "end",
266
- namespace: fullNamespace,
267
- spanId,
268
- traceId: spanTraceId,
269
- parentId: parentSpanId,
270
- startTime,
271
- endTime,
272
- duration,
273
- props: mergedProps,
274
- spanData: customSpanData,
275
- timestamp: Date.now()
276
- });
277
- } catch (err) {
278
- try {
279
- postMessage({
280
- type: "log",
281
- level: "error",
282
- namespace: fullNamespace,
283
- message: `postMessage failed for span end "${fullNamespace}" (${duration}ms): ${err instanceof Error ? err.message : String(err)}`,
284
- timestamp: Date.now()
285
- });
286
- } catch {}
287
- }
288
- }
289
- return {
290
- ...createWorkerLogger(postMessage, fullNamespace, mergedProps, {
291
- parentSpanId: spanId,
292
- traceId: spanTraceId
293
- }),
294
- spanData,
295
- end: endSpan,
296
- [Symbol.dispose]: endSpan
297
- };
298
- }
299
- return {
300
- name: namespace,
301
- props: Object.freeze({ ...props }),
302
- spanData: null,
303
- trace: (msg, data) => log("trace", msg, data),
304
- debug: (msg, data) => log("debug", msg, data),
305
- info: (msg, data) => log("info", msg, data),
306
- warn: (msg, data) => log("warn", msg, data),
307
- error: (msgOrError, data) => {
308
- if (msgOrError instanceof Error) log("error", msgOrError.message, {
309
- ...data,
310
- error_type: msgOrError.name,
311
- error_stack: msgOrError.stack,
312
- error_code: msgOrError.code
313
- });
314
- else log("error", msgOrError, data);
315
- },
316
- logger(childNamespace, childProps) {
317
- return createWorkerLogger(postMessage, childNamespace ? `${namespace}:${childNamespace}` : namespace, {
318
- ...props,
319
- ...childProps
320
- }, options);
321
- },
322
- span: createSpan,
323
- child(context) {
324
- if (typeof context === "string") return this.logger(context);
325
- return createWorkerLogger(postMessage, namespace, {
326
- ...props,
327
- ...context
328
- }, options);
329
- },
330
- end() {}
331
- };
332
- }
333
- /** Safely stringify a value, handling circular refs and BigInt */
334
- function safeStringify(value) {
335
- try {
336
- return JSON.stringify(value);
337
- } catch {
338
- return String(value);
339
- }
340
- }
341
- /** Format console args into a message string and optional data object */
342
- function formatConsoleArgs(args) {
343
- const message = args.length === 0 ? "" : args.length === 1 && typeof args[0] === "string" ? args[0] : args.map((a) => typeof a === "string" ? a : safeStringify(a)).join(" ");
344
- const lastArg = args[args.length - 1];
345
- return {
346
- message,
347
- data: args.length > 1 && typeof lastArg === "object" && lastArg !== null && !Array.isArray(lastArg) ? lastArg : void 0
348
- };
349
- }
350
- /** Dispatch a message to a logger at the given console level */
351
- function dispatchToLogger(logger, level, message, data) {
352
- switch (level) {
353
- case "trace":
354
- logger.trace?.(message, data);
355
- break;
356
- case "debug":
357
- logger.debug?.(message, data);
358
- break;
359
- case "info":
360
- case "log":
361
- logger.info?.(message, data);
362
- break;
363
- case "warn":
364
- logger.warn?.(message, data);
365
- break;
366
- case "error":
367
- logger.error?.(message, data);
368
- break;
369
- }
370
- }
371
- /**
372
- * Create a handler for worker console messages.
373
- *
374
- * Use this on the main thread to receive and output messages from workers.
375
- *
376
- * @param options - Handler options
377
- * @returns Handler function to call with worker messages
378
- *
379
- * @example
380
- * ```typescript
381
- * import { createWorkerConsoleHandler } from "loggily/worker"
382
- *
383
- * const handleConsole = createWorkerConsoleHandler({
384
- * defaultNamespace: "km:worker:parse"
385
- * })
386
- *
387
- * worker.onmessage = (e) => {
388
- * if (e.data.type === "console") {
389
- * handleConsole(e.data)
390
- * } else {
391
- * // Handle other message types
392
- * }
393
- * }
394
- * ```
395
- */
396
- function createWorkerConsoleHandler(options = {}) {
397
- const loggers = /* @__PURE__ */ new Map();
398
- function getLogger(namespace) {
399
- const ns = namespace || options.defaultNamespace || "worker";
400
- let logger = loggers.get(ns);
401
- if (!logger) {
402
- logger = options.logger ? options.logger : createLogger(ns);
403
- loggers.set(ns, logger);
404
- }
405
- return logger;
406
- }
407
- return (message) => {
408
- const logger = getLogger(message.namespace);
409
- const { message: msg, data } = formatConsoleArgs(message.args);
410
- dispatchToLogger(logger, message.level, msg, data);
411
- };
412
- }
413
- /**
414
- * Create a handler for worker logger messages (logs and spans).
415
- *
416
- * Use this on the main thread to receive and output messages from workers
417
- * that use createWorkerLogger.
418
- *
419
- * @param options - Handler options
420
- * @returns Handler function to call with worker messages
421
- *
422
- * @example
423
- * ```typescript
424
- * import { createWorkerLogHandler, isWorkerMessage } from "loggily/worker"
425
- *
426
- * const handleLog = createWorkerLogHandler()
427
- *
428
- * worker.onmessage = (e) => {
429
- * if (isWorkerMessage(e.data)) {
430
- * handleLog(e.data)
431
- * } else {
432
- * // Handle other message types
433
- * }
434
- * }
435
- * ```
436
- */
437
- function createWorkerLogHandler(options = {}) {
438
- const loggers = /* @__PURE__ */ new Map();
439
- if (options.enableSpans) enableSpans();
440
- function getLogger(namespace) {
441
- let logger = loggers.get(namespace);
442
- if (!logger) {
443
- logger = createLogger(namespace);
444
- loggers.set(namespace, logger);
445
- }
446
- return logger;
447
- }
448
- return (message) => {
449
- if (isWorkerConsoleMessage(message)) {
450
- const logger = getLogger(message.namespace || "worker");
451
- const { message: msg, data } = formatConsoleArgs(message.args);
452
- dispatchToLogger(logger, message.level, msg, data);
453
- } else if (isWorkerLogMessage(message)) dispatchToLogger(getLogger(message.namespace), message.level, message.message, message.data);
454
- else if (isWorkerSpanMessage(message)) {
455
- if (message.event === "end") writeSpan(message.namespace, message.duration ?? 0, {
456
- span_id: message.spanId,
457
- trace_id: message.traceId,
458
- parent_id: message.parentId,
459
- ...message.props,
460
- ...message.spanData
461
- });
462
- }
463
- };
464
- }
465
- //#endregion
466
- export { createWorkerConsoleHandler, createWorkerLogHandler, createWorkerLogger, forwardConsole, isWorkerConsoleMessage, isWorkerLogMessage, isWorkerMessage, isWorkerSpanMessage, resetWorkerIds, restoreConsole };
467
-
468
- //# sourceMappingURL=worker.mjs.map