@nxtedition/logger 1.0.3 → 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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 nxtedition
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,115 @@
1
+ # @nxtedition/logger
2
+
3
+ A high-performance, structured JSON logger built on [pino](https://github.com/pinojs/pino) with a dedicated worker thread for I/O.
4
+
5
+ ## Why a logger worker?
6
+
7
+ In Node.js, multiple threads writing to stdout concurrently can interleave
8
+ partial writes, producing corrupted or merged log lines. This is especially
9
+ problematic when several worker threads each emit structured JSON — a single
10
+ torn line breaks every downstream log parser.
11
+
12
+ This package solves the problem by routing all log output through a single
13
+ dedicated worker thread:
14
+
15
+ 1. **No tearing / interleaving** — Only one thread ever calls `write(2)` on
16
+ fd 1, so every JSON line is atomically written.
17
+ 2. **Better throughput** — Writers serialize log messages into lock-free ring
18
+ buffers backed by `SharedArrayBuffer` (SAB). The logger worker drains these
19
+ buffers and writes to stdout using synchronous I/O, avoiding back-pressure
20
+ from slow consumers stalling application threads.
21
+ 3. **Minimal latency on the hot path** — `writeSync` into a shared ring buffer
22
+ is a memory copy + atomic store. No syscall, no serialization contention.
23
+ The actual `write(2)` happens asynchronously on the worker thread.
24
+
25
+ ## Architecture
26
+
27
+ ```
28
+ ┌──────────────┐ ┌─────────────┐ ┌─────────────┐
29
+ │ Main thread │ │ Worker A │ │ Worker B │
30
+ │ (logger) │ │ (logger) │ │ (logger) │
31
+ └──────┬───────┘ └──────┬──────┘ └──────┬──────┘
32
+ │ │ │
33
+ writeSync() writeSync() writeSync()
34
+ │ │ │
35
+ ┌────▼─────┐ ┌────▼─────┐ ┌────▼─────┐
36
+ │ Ring buf │ │ Ring buf │ │ Ring buf │
37
+ │ (SAB) │ │ (SAB) │ │ (SAB) │
38
+ └────┬─────┘ └────┬─────┘ └────┬─────┘
39
+ │ │ │
40
+ └──────────┬───────┘─────────────────┘
41
+
42
+ ┌──────▼──────┐
43
+ │Logger worker│
44
+ │ (single) │
45
+ │ │
46
+ │ readSome() │
47
+ │ fs.writeSync│
48
+ │ fd 1 │
49
+ └─────────────┘
50
+ ```
51
+
52
+ SAB = `SharedArrayBuffer`
53
+
54
+ Each call to `createLogger()` allocates a 2 MiB `SharedArrayBuffer` ring
55
+ buffer. The writer (application side) serializes pino JSON into the buffer.
56
+ The logger worker polls all registered readers and flushes their contents to
57
+ stdout.
58
+
59
+ Registration and unregistration use `BroadcastChannel` with a
60
+ `SharedArrayBuffer`-based ack to ensure the worker has set up the reader
61
+ before the caller proceeds.
62
+
63
+ ## Graceful shutdown
64
+
65
+ On process exit (`process.exit()`, uncaught exceptions, SIGTERM, SIGINT):
66
+
67
+ 1. All writers call `flushSync()` to publish pending data to their ring
68
+ buffers.
69
+ 2. The main thread signals the logger worker to drain via a shared
70
+ `Int32Array` flag.
71
+ 3. The main thread blocks (up to 2 s) until the worker confirms drain is
72
+ complete.
73
+ 4. The logger worker also registers a `process.on('exit')` handler as a
74
+ safety net — if the normal drain protocol fails, the handler performs a
75
+ final synchronous drain of all readers.
76
+
77
+ ## Usage
78
+
79
+ ```ts
80
+ import { createLogger } from '@nxtedition/logger'
81
+
82
+ const logger = createLogger({ level: 'info' })
83
+ logger.info({ key: 'value' }, 'hello world')
84
+ ```
85
+
86
+ `createLogger` accepts all [pino options](https://getpino.io/#/docs/api?id=options).
87
+ Custom serializers are merged with the built-in set (err, req, res, etc.).
88
+
89
+ ### Worker threads
90
+
91
+ Call `createLogger()` on the **main thread first** — this starts the logger
92
+ worker. Worker threads can then call `createLogger()` freely; each gets its
93
+ own ring buffer registered with the shared logger worker.
94
+
95
+ ```ts
96
+ // main.ts
97
+ import { createLogger } from '@nxtedition/logger'
98
+ const logger = createLogger({ level: 'info' }) // starts worker
99
+
100
+ // worker.ts
101
+ import { createLogger } from '@nxtedition/logger'
102
+ const logger = createLogger({ level: 'debug' }) // registers with existing worker
103
+ ```
104
+
105
+ ## Development
106
+
107
+ ```sh
108
+ yarn build # compile TypeScript → lib/
109
+ yarn test # run tests
110
+ yarn test:coverage # run tests with c8 coverage report
111
+ ```
112
+
113
+ ## License
114
+
115
+ See [LICENSE](./LICENSE).
package/lib/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './logger.ts';
2
+ export * from './platform.ts';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA"}
package/lib/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from "./logger.js";
2
+ export * from "./platform.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logger-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-worker.d.ts","sourceRoot":"","sources":["../src/logger-worker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,104 @@
1
+ import { workerData } from 'node:worker_threads';
2
+ import { reader } from '@nxtedition/shared';
3
+ import tp from 'node:timers/promises';
4
+ import fs from 'node:fs';
5
+ const readersByToken = new Map();
6
+ let readers = [];
7
+ const backoffBuffer = new Int32Array(new SharedArrayBuffer(4));
8
+ function writeAll(buffer, offset, length) {
9
+ // fd 1 may be non-blocking in worker threads, so fs.writeSync can
10
+ // return partial writes or throw EAGAIN/EBUSY. Loop until all bytes
11
+ // are out, backing off with Atomics.wait after repeated retries.
12
+ let retries = 0;
13
+ while (length > 0) {
14
+ try {
15
+ const written = fs.writeSync(1, buffer, offset, length);
16
+ offset += written;
17
+ length -= written;
18
+ retries = 0;
19
+ }
20
+ catch (err) {
21
+ const code = err.code;
22
+ if (code === 'EAGAIN' || code === 'EBUSY') {
23
+ retries++;
24
+ if (retries > 4096) {
25
+ throw new Error(`writeAll: failed to make progress after ${retries} retries (${code})`);
26
+ }
27
+ else if (retries > 2) {
28
+ Atomics.wait(backoffBuffer, 0, 0, 1);
29
+ }
30
+ else {
31
+ Atomics.pause();
32
+ }
33
+ continue;
34
+ }
35
+ throw err;
36
+ }
37
+ }
38
+ }
39
+ function readerDrain(r) {
40
+ while (r.readSome((data) => {
41
+ writeAll(data.buffer, data.offset, data.length);
42
+ }) > 0) {
43
+ // Keep draining until empty.
44
+ }
45
+ }
46
+ const bc = new BroadcastChannel('nxt:logger');
47
+ bc.onmessage = (event) => {
48
+ const { type, token, sharedState, sharedBuffer, ackBuffer } = event.data;
49
+ if (type === 'nxt:logger:register' && token != null && sharedState && sharedBuffer) {
50
+ const r = reader({ sharedState, sharedBuffer });
51
+ readersByToken.set(token, r);
52
+ readers = [...readersByToken.values()];
53
+ if (ackBuffer) {
54
+ Atomics.store(new Int32Array(ackBuffer), 0, 1);
55
+ Atomics.notify(new Int32Array(ackBuffer), 0);
56
+ }
57
+ readerDrain(r); // Drain any initial data...
58
+ }
59
+ else if (type === 'nxt:logger:unregister' && token != null) {
60
+ const r = readersByToken.get(token);
61
+ if (r) {
62
+ // Drain any remaining data before removing.
63
+ readerDrain(r);
64
+ readersByToken.delete(token);
65
+ readers = [...readersByToken.values()];
66
+ }
67
+ }
68
+ };
69
+ // Drain signal: 0 = running, 1 = drain requested, 2 = drain complete.
70
+ const drainState = new Int32Array(workerData.drainBuffer);
71
+ // Safety net: if the worker is terminated before the normal drain path runs
72
+ // (e.g. main thread crash, exit handler failure), do a final synchronous
73
+ // drain so buffered log data is not silently lost.
74
+ process.on('exit', () => {
75
+ for (let i = 0; i < readers.length; i++) {
76
+ readerDrain(readers[i]);
77
+ }
78
+ });
79
+ // Signal readiness to the parent thread so it can proceed with registration.
80
+ const readyState = new Int32Array(workerData.readyBuffer);
81
+ Atomics.store(readyState, 0, 1);
82
+ Atomics.notify(readyState, 0);
83
+ while (true) {
84
+ let count = 0;
85
+ for (let i = 0; i < readers.length; i++) {
86
+ count += readers[i].readSome((data) => {
87
+ writeAll(data.buffer, data.offset, data.length);
88
+ });
89
+ }
90
+ // Let bc.onmessage handlers run to pick up new readers or drain requests.
91
+ await (count > 0 ? tp.setImmediate() : tp.setTimeout(10));
92
+ // Check if drain was requested by the main thread.
93
+ if (Atomics.load(drainState, 0) === 1) {
94
+ // Drain all remaining data from every reader until empty.
95
+ for (let i = 0; i < readers.length; i++) {
96
+ readerDrain(readers[i]);
97
+ }
98
+ Atomics.store(drainState, 0, 2);
99
+ Atomics.notify(drainState, 0);
100
+ bc.close();
101
+ break;
102
+ }
103
+ }
104
+ //# sourceMappingURL=logger-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-worker.js","sourceRoot":"","sources":["../src/logger-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Logger as PinoLogger, LoggerOptions } from 'pino';
2
+ export type Logger = PinoLogger;
3
+ export declare function createLogger({ level, ...options }?: LoggerOptions): Logger;
4
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AAQ/D,MAAM,MAAM,MAAM,GAAG,UAAU,CAAA;AAoG/B,wBAAgB,YAAY,CAAC,EAC3B,KAAwC,EACxC,GAAG,OAAO,EACX,GAAE,aAAkB,GAAG,MAAM,CA+C7B"}
package/lib/logger.js ADDED
@@ -0,0 +1,122 @@
1
+ import { isMainThread, Worker } from 'node:worker_threads';
2
+ import pino from 'pino';
3
+ import onExit from 'on-exit-leak-free';
4
+ import xuid from 'xuid';
5
+ import { alloc, writer } from '@nxtedition/shared';
6
+ import serializers from './serializers.js';
7
+ const isProduction = process.env.NODE_ENV === 'production';
8
+ let workerStarted = false;
9
+ const writers = new Set();
10
+ class SharedWriter {
11
+ #w;
12
+ #token;
13
+ #destroyed = false;
14
+ constructor(token, sharedState, sharedBuffer) {
15
+ this.#token = token;
16
+ this.#w = writer({ sharedState, sharedBuffer });
17
+ writers.add(this);
18
+ }
19
+ write(msg) {
20
+ if (this.#destroyed) {
21
+ return false;
22
+ }
23
+ this.#w.writeSync(msg.length * 3, (data, msg) => data.offset + data.buffer.write(msg, data.offset, 'utf-8'), msg);
24
+ return true;
25
+ }
26
+ flushSync() {
27
+ if (!this.#destroyed) {
28
+ this.#w.flushSync();
29
+ }
30
+ }
31
+ end() {
32
+ if (this.#destroyed) {
33
+ return;
34
+ }
35
+ this.#destroyed = true;
36
+ this.#w.flushSync();
37
+ writers.delete(this);
38
+ onExit.unregister(this);
39
+ const bc = new BroadcastChannel('nxt:logger');
40
+ bc.postMessage({ type: 'nxt:logger:unregister', token: this.#token });
41
+ bc.close();
42
+ }
43
+ }
44
+ // Starts the logger worker. Must be called on the main thread before any
45
+ // worker thread calls createLogger, otherwise the BroadcastChannel
46
+ // registration message will be lost (no listener).
47
+ function startWorker() {
48
+ if (workerStarted) {
49
+ return;
50
+ }
51
+ workerStarted = true;
52
+ const readyBuffer = new SharedArrayBuffer(4);
53
+ const drainBuffer = new SharedArrayBuffer(4);
54
+ const drainState = new Int32Array(drainBuffer);
55
+ const w = new Worker(new URL('./logger-worker.js', import.meta.url), {
56
+ workerData: { readyBuffer, drainBuffer },
57
+ execArgv: [] // Don't inherit CLI flags (e.g. --inspect) from parent.
58
+ })
59
+ .on('error', (err) => {
60
+ throw new Error('Logger worker crashed', { cause: err });
61
+ })
62
+ .on('exit', (code) => {
63
+ if (Atomics.load(drainState, 0) !== 2) {
64
+ throw new Error(`Logger worker exited unexpectedly with code ${code}`);
65
+ }
66
+ });
67
+ w.unref();
68
+ // Block until the worker has set up its BroadcastChannel listener.
69
+ const res = Atomics.wait(new Int32Array(readyBuffer), 0, 0, 10_000);
70
+ if (res === 'timed-out') {
71
+ void w.terminate();
72
+ workerStarted = false;
73
+ throw new Error('Logger worker failed to start within 10 seconds.');
74
+ }
75
+ // On exit: flush writers, signal worker to drain, block until done.
76
+ onExit.register(drainState, (drainState) => {
77
+ for (const w of writers) {
78
+ w.flushSync();
79
+ }
80
+ Atomics.store(drainState, 0, 1);
81
+ Atomics.notify(drainState, 0);
82
+ Atomics.wait(drainState, 0, 1, 2000);
83
+ });
84
+ }
85
+ export function createLogger({ level = isProduction ? 'debug' : 'trace', ...options } = {}) {
86
+ if (isMainThread) {
87
+ startWorker();
88
+ }
89
+ const { sharedState, sharedBuffer } = alloc(2 * 1024 * 1024);
90
+ const token = xuid();
91
+ const stream = new SharedWriter(token, sharedState, sharedBuffer);
92
+ {
93
+ const ackBuffer = new SharedArrayBuffer(4);
94
+ const bc = new BroadcastChannel('nxt:logger');
95
+ bc.postMessage({ type: 'nxt:logger:register', token, sharedState, sharedBuffer, ackBuffer });
96
+ bc.close();
97
+ // Block until the logger worker acknowledges the registration.
98
+ // If createLogger() was never called on the main thread the ack
99
+ // will never arrive and we throw a clear error instead of silently
100
+ // dropping log output.
101
+ const res = Atomics.wait(new Int32Array(ackBuffer), 0, 0, 10_000);
102
+ if (res === 'timed-out') {
103
+ writers.delete(stream);
104
+ throw new Error('Logger worker did not acknowledge registration. ' +
105
+ 'Ensure createLogger() is called on the main thread before any worker thread calls createLogger().');
106
+ }
107
+ }
108
+ // When this thread exits, flush the writer and tell the logger worker
109
+ // to remove the reader for this buffer.
110
+ onExit.register(stream, (stream) => {
111
+ stream.end();
112
+ });
113
+ return pino({
114
+ level,
115
+ ...options,
116
+ serializers: {
117
+ ...serializers,
118
+ ...options.serializers,
119
+ },
120
+ }, stream);
121
+ }
122
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ export declare const SIGNALS: {
2
+ 129: string;
3
+ 130: string;
4
+ 131: string;
5
+ 132: string;
6
+ 133: string;
7
+ 134: string;
8
+ 135: string;
9
+ 136: string;
10
+ 137: string;
11
+ 138: string;
12
+ 139: string;
13
+ 140: string;
14
+ 141: string;
15
+ 142: string;
16
+ 143: string;
17
+ 144: string;
18
+ 145: string;
19
+ 146: string;
20
+ 147: string;
21
+ 148: string;
22
+ 149: string;
23
+ 150: string;
24
+ 151: string;
25
+ 152: string;
26
+ 153: string;
27
+ 154: string;
28
+ 155: string;
29
+ 156: string;
30
+ 157: string;
31
+ 158: string;
32
+ 159: string;
33
+ } | {
34
+ 129?: undefined;
35
+ 130?: undefined;
36
+ 131?: undefined;
37
+ 132?: undefined;
38
+ 133?: undefined;
39
+ 134?: undefined;
40
+ 135?: undefined;
41
+ 136?: undefined;
42
+ 137?: undefined;
43
+ 138?: undefined;
44
+ 139?: undefined;
45
+ 140?: undefined;
46
+ 141?: undefined;
47
+ 142?: undefined;
48
+ 143?: undefined;
49
+ 144?: undefined;
50
+ 145?: undefined;
51
+ 146?: undefined;
52
+ 147?: undefined;
53
+ 148?: undefined;
54
+ 149?: undefined;
55
+ 150?: undefined;
56
+ 151?: undefined;
57
+ 152?: undefined;
58
+ 153?: undefined;
59
+ 154?: undefined;
60
+ 155?: undefined;
61
+ 156?: undefined;
62
+ 157?: undefined;
63
+ 158?: undefined;
64
+ 159?: undefined;
65
+ };
66
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCZ,CAAA"}
@@ -0,0 +1,38 @@
1
+ export const SIGNALS = typeof process === 'object'
2
+ ? process.platform === 'linux'
3
+ ? {
4
+ 129: 'SIGHUP', // 1
5
+ 130: 'SIGINT', // 2
6
+ 131: 'SIGQUIT', // 3
7
+ 132: 'SIGILL', // 4
8
+ 133: 'SIGTRAP', // 5
9
+ 134: 'SIGABRT', // 6
10
+ 135: 'SIGBUS', // 7
11
+ 136: 'SIGFPE', // 8
12
+ 137: 'SIGKILL', // 9
13
+ 138: 'SIGUSR1', // 10
14
+ 139: 'SIGSEGV', // 11
15
+ 140: 'SIGUSR2', // 12
16
+ 141: 'SIGPIPE', // 13
17
+ 142: 'SIGALRM', // 14
18
+ 143: 'SIGTERM', // 15
19
+ 144: 'SIGSTKFLT', // 16
20
+ 145: 'SIGCHLD', // 17
21
+ 146: 'SIGCONT', // 18
22
+ 147: 'SIGSTOP', // 19
23
+ 148: 'SIGTSTP', // 20
24
+ 149: 'SIGTTIN', // 21
25
+ 150: 'SIGTTOU', // 22
26
+ 151: 'SIGURG', // 23
27
+ 152: 'SIGXCPU', // 24
28
+ 153: 'SIGXFSZ', // 25
29
+ 154: 'SIGVTALRM', // 26
30
+ 155: 'SIGPROF', // 27
31
+ 156: 'SIGWINCH', // 28
32
+ 157: 'SIGIO', // 29
33
+ 158: 'SIGPWR', // 30
34
+ 159: 'SIGSYS', // 31
35
+ }
36
+ : {}
37
+ : {};
38
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAClB,OAAO,OAAO,KAAK,QAAQ;IACzB,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC5B,CAAC,CAAC;YACE,GAAG,EAAE,QAAQ,EAAE,KAAK;YACpB,GAAG,EAAE,QAAQ,EAAE,KAAK;YACpB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,QAAQ,EAAE,KAAK;YACpB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,QAAQ,EAAE,KAAK;YACpB,GAAG,EAAE,QAAQ,EAAE,KAAK;YACpB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,WAAW,EAAE,KAAK;YACvB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,QAAQ,EAAE,KAAK;YACpB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,WAAW,EAAE,KAAK;YACvB,GAAG,EAAE,SAAS,EAAE,KAAK;YACrB,GAAG,EAAE,UAAU,EAAE,KAAK;YACtB,GAAG,EAAE,OAAO,EAAE,KAAK;YACnB,GAAG,EAAE,QAAQ,EAAE,KAAK;YACpB,GAAG,EAAE,QAAQ,EAAE,KAAK;SACrB;QACH,CAAC,CAAC,EAAE;IACN,CAAC,CAAC,EAAE,CAAA"}
@@ -0,0 +1,13 @@
1
+ declare namespace _default {
2
+ function err(err: any): any;
3
+ function error(err: any): any;
4
+ function errors(err: any): any;
5
+ function socket(socket: any): any;
6
+ function req(req: any): any;
7
+ function ureq(ureq: any): any;
8
+ function res(res: any): any;
9
+ function ures(ures: any): any;
10
+ }
11
+ export default _default;
12
+ export const rawSymbol: unique symbol;
13
+ //# sourceMappingURL=serializers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializers.d.ts","sourceRoot":"","sources":["../src/serializers.js"],"names":[],"mappings":";IA0GO,4BAA2B;IACzB,8BAA2B;IAC1B,+BAA2B;IAC3B,kCAQL;IACE,4BAoBF;IACG,8BAgBH;IACE,4BAiBF;IACG,8BAcH;;;AAUL,sCAAmD"}
@@ -0,0 +1,304 @@
1
+ import { SIGNALS } from "./platform.js";
2
+ import { parseHeaders } from '@nxtedition/nxt-undici';
3
+ import requestTarget from 'request-target';
4
+ import querystring from 'fast-querystring';
5
+ function getHeader(obj, key) {
6
+ return !obj || !key
7
+ ? undefined
8
+ : obj.headers?.[key] || obj.headers?.get?.(key) || obj.getHeader?.(key);
9
+ }
10
+ function getHeaders(obj) {
11
+ if (!obj) {
12
+ return undefined;
13
+ }
14
+ if (obj.getHeaders) {
15
+ return obj.getHeaders();
16
+ }
17
+ if (obj.headers) {
18
+ return Array.isArray(obj.headers) ? parseHeaders(obj.headers) : obj.headers;
19
+ }
20
+ if (obj.headers?.entries) {
21
+ return Object.fromEntries(obj.headers.entries());
22
+ }
23
+ return undefined;
24
+ }
25
+ function getUrl(obj) {
26
+ if (!obj) {
27
+ return undefined;
28
+ }
29
+ const { origin, path, hostname, protocol, port, url } = obj;
30
+ if (typeof url === 'string' && url) {
31
+ return url;
32
+ }
33
+ const href = url?.href;
34
+ if (typeof href === 'string' && href) {
35
+ return href;
36
+ }
37
+ if (origin && (!path || typeof path === 'string')) {
38
+ if (typeof origin === 'object') {
39
+ return `${origin.protocol || 'http:'}//${origin.hostname}:${origin.port || { 'http:': 80, 'https:': 443 }[origin.protocol]}${path || ''}`;
40
+ }
41
+ if (typeof origin === 'string') {
42
+ if (path?.startsWith('/') && origin.endsWith('/')) {
43
+ return `${origin.slice(0, -1)}${path || ''}`;
44
+ }
45
+ else {
46
+ return `${origin}${path || ''}`;
47
+ }
48
+ }
49
+ }
50
+ if (typeof hostname === 'string') {
51
+ return `${protocol || 'http:'}//${hostname}:${port || { 'http:': 80, 'https:': 443 }[protocol || 'http:']}${path || ''}`;
52
+ }
53
+ if (typeof path === 'string' && path) {
54
+ return path;
55
+ }
56
+ return null;
57
+ }
58
+ function getTarget(obj) {
59
+ if (!obj) {
60
+ return undefined;
61
+ }
62
+ try {
63
+ if (obj.target) {
64
+ return obj.target;
65
+ }
66
+ if (typeof obj.url === 'string') {
67
+ return requestTarget(obj.headers ? obj : { url: obj.url, headers: obj.headers ?? {}, socket: obj.socket });
68
+ }
69
+ else {
70
+ const { origin, path, hostname, protocol, port, search, query } = obj;
71
+ return {
72
+ origin,
73
+ protocol: protocol || undefined,
74
+ hostname: hostname || undefined,
75
+ port: port || undefined,
76
+ pathname: path || undefined,
77
+ search: search ||
78
+ (typeof query === 'object' && query != null ? querystring.stringify(query) : undefined),
79
+ };
80
+ }
81
+ }
82
+ catch {
83
+ return undefined;
84
+ }
85
+ // TODO(fix): What if url is instanceof URL?
86
+ }
87
+ export default {
88
+ err: (err) => errSerializer(err),
89
+ error: (err) => errSerializer(err),
90
+ errors: (err) => errSerializer(err),
91
+ socket: (socket) => socket && {
92
+ id: socket.id || undefined,
93
+ version: socket.version || undefined,
94
+ user: socket.user || undefined,
95
+ userAgent: socket.userAgent || undefined,
96
+ remoteAddress: socket.remoteAddress || undefined,
97
+ headers: socket.headers,
98
+ },
99
+ req: (req) => req && {
100
+ id: req.id || getHeader(req, 'request-id'),
101
+ httpVersion: req.httpVersion,
102
+ method: req.method,
103
+ target: getTarget(req),
104
+ url: getUrl(req),
105
+ headers: getHeaders(req),
106
+ timing: req.timing,
107
+ bytesRead: req.bytesRead >= 0 ? req.bytesRead : undefined,
108
+ bytesReadPerSecond: req.bytesReadPerSecond ??
109
+ (req.timing?.end > 0 && req.bytesRead > 0
110
+ ? (req.bytesRead * 1e3) / req.timing.end
111
+ : undefined),
112
+ remoteAddress: req.socket?.remoteAddress,
113
+ remotePort: req.socket?.remotePort,
114
+ aborted: req.aborted,
115
+ closed: req.closed,
116
+ destroyed: req.destroyed,
117
+ },
118
+ ureq: (ureq) => ureq && {
119
+ id: ureq.id || getHeader(ureq, 'request-id'),
120
+ httpVersion: ureq.httpVersion,
121
+ method: ureq.method,
122
+ target: getTarget(ureq),
123
+ url: getUrl(ureq),
124
+ headers: getHeaders(ureq),
125
+ timing: ureq.timing,
126
+ bytesWritten: ureq.bytesWritten,
127
+ bytesReadPerSecond: ureq.bytesWrittenPerSecond ??
128
+ (ureq.timing && ureq.timing.data > 0 && ureq.timing.end > 0
129
+ ? (ureq.bytesWritten * 1e3) / (ureq.timing.end - ureq.timing.data)
130
+ : undefined),
131
+ body: typeof ureq.body === 'string' ? ureq.body : undefined,
132
+ },
133
+ res: (res) => res && {
134
+ id: res.id || getHeader(res, 'request-id') || getHeader(res.req, 'request-id'),
135
+ httpVersion: res.httpVersion,
136
+ headers: getHeaders(res),
137
+ statusCode: res.statusCode || res.status,
138
+ timing: res.timing,
139
+ bytesWritten: res.bytesWritten >= 0 ? res.bytesWritten : undefined,
140
+ bytesWrittenPerSecond: res.bytesWrittenPerSecond ??
141
+ (res.timing?.end > 0 && res.bytesWritten > 0
142
+ ? (res.bytesWritten * 1e3) / res.timing.end
143
+ : undefined),
144
+ headersSent: res.headersSent,
145
+ aborted: res.aborted,
146
+ closed: res.closed,
147
+ destroyed: res.destroyed,
148
+ },
149
+ ures: (ures) => ures && {
150
+ id: ures.id || getHeader(ures, 'request-id') || getHeader(ures.req, 'request-id'),
151
+ httpVersion: ures.httpVersion,
152
+ headers: getHeaders(ures),
153
+ statusCode: ures.statusCode ?? ures.status,
154
+ timing: ures.timing,
155
+ bytesRead: ures.bytesRead,
156
+ bytesReadPerSecond: ures.bytesReadPerSecond ??
157
+ (ures.timing && ures.timing.data > 0 && ures.timing.end > 0
158
+ ? (ures.bytesRead * 1e3) / (ures.timing.end - ures.timing.data)
159
+ : undefined),
160
+ body: typeof ures.body === 'string' ? ures.body : undefined,
161
+ },
162
+ };
163
+ // TODO (fix): Merge with errros/serializeError.
164
+ // Note that 'data' here should be string while in "serializeError" it should be object.
165
+ // Maybe we should rename serializeError to makeErrorObject or somehting??
166
+ // Based on: https://github.com/pinojs/pino-std-serializers
167
+ const seen = Symbol('circular-ref-tag');
168
+ export const rawSymbol = Symbol('pino-raw-err-ref');
169
+ const pinoErrProto = Object.create({}, {
170
+ type: {
171
+ enumerable: true,
172
+ writable: true,
173
+ value: undefined,
174
+ },
175
+ message: {
176
+ enumerable: true,
177
+ writable: true,
178
+ value: undefined,
179
+ },
180
+ stack: {
181
+ enumerable: true,
182
+ writable: true,
183
+ value: undefined,
184
+ },
185
+ errors: {
186
+ enumerable: true,
187
+ writable: true,
188
+ value: undefined,
189
+ },
190
+ raw: {
191
+ enumerable: false,
192
+ get: function () {
193
+ return this[rawSymbol];
194
+ },
195
+ set: function (val) {
196
+ this[rawSymbol] = val;
197
+ },
198
+ },
199
+ });
200
+ Object.defineProperty(pinoErrProto, rawSymbol, {
201
+ writable: true,
202
+ value: {},
203
+ });
204
+ function errSerializer(err) {
205
+ if (Array.isArray(err)) {
206
+ return err.length === 0 ? undefined : errSerializer({ message: '', errors: err });
207
+ }
208
+ if (!isErrorLike(err)) {
209
+ return undefined;
210
+ }
211
+ const errors = Array.isArray(err?.errors)
212
+ ? err.errors.map((err) => errSerializer(err)).filter(Boolean)
213
+ : null;
214
+ if (err.message === '' && errors != null && errors.length === 0) {
215
+ return undefined;
216
+ }
217
+ if (err.message === '' && errors != null && errors.length === 1) {
218
+ return errSerializer(err.errors[0]);
219
+ }
220
+ err[seen] = undefined; // tag to prevent re-looking at this
221
+ const _err = Object.create(pinoErrProto);
222
+ _err.type =
223
+ Object.prototype.toString.call(err.constructor) === '[object Function]'
224
+ ? err.constructor.name
225
+ : err.name;
226
+ _err.name = err.name;
227
+ _err.message = err.message;
228
+ _err.stack = err.stack;
229
+ if (errors != null) {
230
+ _err.errors = errors;
231
+ }
232
+ if (isErrorLike(err.cause) && !Object.prototype.hasOwnProperty.call(err.cause, seen)) {
233
+ _err.cause = errSerializer(err.cause);
234
+ }
235
+ for (const key in err) {
236
+ if (_err[key] === undefined) {
237
+ const val = err[key];
238
+ if (isErrorLike(val)) {
239
+ if (!Object.prototype.hasOwnProperty.call(val, seen)) {
240
+ _err[key] = errSerializer(val);
241
+ }
242
+ }
243
+ else if (typeof val === 'bigint') {
244
+ _err[key] = `${val.toString()}`;
245
+ }
246
+ else if (val != null && !/^[A-Z0-9_]+$/.test(key)) {
247
+ _err[key] = val;
248
+ }
249
+ }
250
+ }
251
+ if (_err.data != null && typeof _err.data !== 'string') {
252
+ try {
253
+ _err.data = JSON.stringify(_err.data, (k, v) => (typeof v === 'bigint' ? v.toString() : v), 2);
254
+ }
255
+ catch {
256
+ // Do nothing...
257
+ }
258
+ }
259
+ if (_err.body != null && typeof _err.body !== 'string') {
260
+ try {
261
+ _err.body = JSON.stringify(_err.body, (k, v) => (typeof v === 'bigint' ? v.toString() : v), 2);
262
+ }
263
+ catch {
264
+ // Do nothing...
265
+ }
266
+ }
267
+ if (_err.meta != null && typeof _err.meta !== 'string') {
268
+ try {
269
+ _err.meta = JSON.stringify(_err.meta, (k, v) => (typeof v === 'bigint' ? v.toString() : v), 2);
270
+ }
271
+ catch {
272
+ // Do nothing...
273
+ }
274
+ }
275
+ if (_err.code != null && typeof _err.code !== 'string') {
276
+ _err.code = String(_err.code);
277
+ }
278
+ if (_err.emitter != null && typeof _err.emitter === 'object') {
279
+ _err.emitter = undefined;
280
+ }
281
+ if (_err.statusCode == null && _err.status != null) {
282
+ _err.statusCode = Number(_err.status) || undefined;
283
+ }
284
+ if (_err.signalCode == null && _err.signal != null) {
285
+ _err.signalCode = SIGNALS[_err._signal] ?? _err._signal;
286
+ }
287
+ else if (_err.signalCode != null) {
288
+ _err.signalCode = SIGNALS[_err.signalCode] ?? _err.signalCode;
289
+ }
290
+ if (_err.exitCode == null && _err.code != null && /^([A-Z]+|[a-z]+|[0-9]+)$/.test(_err.code)) {
291
+ _err.exitCode = String(_err.code);
292
+ }
293
+ delete err[seen]; // clean up tag in case err is serialized again later
294
+ _err.raw = err;
295
+ return _err;
296
+ }
297
+ const isErrorLike = (err) => {
298
+ return (err &&
299
+ (typeof err.message === 'string' ||
300
+ typeof err.status === 'number' ||
301
+ typeof err.statusCode === 'number' ||
302
+ typeof err.code === 'string'));
303
+ };
304
+ //# sourceMappingURL=serializers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializers.js","sourceRoot":"","sources":["../src/serializers.js"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,27 +1,32 @@
1
1
  {
2
2
  "name": "@nxtedition/logger",
3
- "version": "1.0.3",
3
+ "version": "2.0.0",
4
4
  "type": "module",
5
- "main": "dist/index.js",
5
+ "main": "lib/index.js",
6
6
  "exports": {
7
- ".": "./dist/index.js"
7
+ ".": "./lib/index.js"
8
8
  },
9
- "types": "dist/index.d.ts",
9
+ "types": "lib/index.d.ts",
10
10
  "files": [
11
- "dist"
11
+ "lib"
12
12
  ],
13
- "license": "UNLICENSED",
13
+ "license": "MIT",
14
14
  "scripts": {
15
- "build": "rimraf dist && tsc",
15
+ "build": "rimraf lib && tsc",
16
16
  "prepublishOnly": "yarn build",
17
17
  "typecheck": "tsc --noEmit",
18
18
  "test": "node --test",
19
- "test:ci": "node --test"
19
+ "test:ci": "node --test",
20
+ "test:coverage": "c8 node --test"
20
21
  },
21
22
  "dependencies": {
23
+ "@nxtedition/nxt-undici": "^7.3.2",
24
+ "@nxtedition/shared": "^3.0.1",
22
25
  "fast-querystring": "^1.1.2",
26
+ "on-exit-leak-free": "^2.1.2",
23
27
  "pino": "^10.3.1",
24
- "request-target": "^1.0.2"
28
+ "request-target": "^1.0.0",
29
+ "xuid": "^4.1.5"
25
30
  },
26
- "gitHead": "fd0bcacdf9e7b58fb2a540e0529c6b4961c2b0b5"
31
+ "gitHead": "c1c62c2a04a4f39c1450622ce6d5935e499a1128"
27
32
  }