@decohere/scribe-pino 0.0.1-dev.78 → 0.0.1-dev.8
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/commonjs/src/index.js +1 -2
- package/commonjs/src/pino.adapater.js +1 -123
- package/commonjs/src/scribe-pino.js +28 -131
- package/es6/src/index.js +1 -2
- package/es6/src/pino.adapater.js +2 -124
- package/es6/src/scribe-pino.js +25 -113
- package/package.json +4 -16
- package/types/src/index.d.ts +0 -1
- package/types/src/pino.adapater.d.ts +0 -8
- package/types/src/scribe-pino.d.ts +7 -55
- package/commonjs/src/pino.recipe.js +0 -108
- package/commonjs/src/pino.transport-guard.js +0 -70
- package/es6/src/pino.recipe.js +0 -98
- package/es6/src/pino.transport-guard.js +0 -63
- package/types/src/pino.recipe.d.ts +0 -45
- package/types/src/pino.transport-guard.d.ts +0 -10
package/es6/src/pino.adapater.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LogAdapter } from "@decohere/scribe";
|
|
2
2
|
import pino from "pino";
|
|
3
3
|
export class PinoAdapter extends LogAdapter {
|
|
4
4
|
_pino;
|
|
5
5
|
options;
|
|
6
6
|
stream;
|
|
7
|
-
disposed = false;
|
|
8
|
-
retired = false;
|
|
9
7
|
constructor(options, stream){
|
|
10
8
|
super();
|
|
11
9
|
this.options = options;
|
|
@@ -35,132 +33,12 @@ export class PinoAdapter extends LogAdapter {
|
|
|
35
33
|
return logger;
|
|
36
34
|
}
|
|
37
35
|
flush(cb) {
|
|
38
|
-
if (this.retired || !this._pino) {
|
|
39
|
-
cb?.();
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
36
|
this._pino.flush(cb);
|
|
43
37
|
}
|
|
44
|
-
/**
|
|
45
|
-
* Immediately stop accepting writes into the destination (ThreadStream).
|
|
46
|
-
* Does not wait for flush — use `stop()` for async drain after retire.
|
|
47
|
-
*/ retire() {
|
|
48
|
-
if (this.retired) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
this.retired = true;
|
|
52
|
-
const guarded = this.stream;
|
|
53
|
-
if (typeof guarded?.retire === "function") {
|
|
54
|
-
guarded.retire("adapter retired");
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
destroyDestination(this.stream);
|
|
58
|
-
}
|
|
59
|
-
async [Symbol.asyncDispose]() {
|
|
60
|
-
if (this.disposed) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
this.disposed = true;
|
|
64
|
-
if (!this.retired) {
|
|
65
|
-
const dest = this.stream;
|
|
66
|
-
if (dest != null && typeof dest.end === "function") {
|
|
67
|
-
// pino.transport() is a ThreadStream: pino.flush() → Atomics.waitAsync can
|
|
68
|
-
// hang forever after concurrent writes. end() flushSyncs then signals
|
|
69
|
-
// finish/close (it does not accept a Node Writable callback).
|
|
70
|
-
await endDestination(dest);
|
|
71
|
-
} else if (this._pino) {
|
|
72
|
-
await new Promise((resolve, reject)=>{
|
|
73
|
-
try {
|
|
74
|
-
this._pino.flush((err)=>{
|
|
75
|
-
if (err != null) {
|
|
76
|
-
reject(err);
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
resolve();
|
|
80
|
-
});
|
|
81
|
-
} catch (err) {
|
|
82
|
-
reject(err instanceof Error ? err : new Error(String(err)));
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
// Mark dead after graceful end (or immediately if already force-retired).
|
|
88
|
-
this.retire();
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
function destroyDestination(stream) {
|
|
92
|
-
const destroyable = stream;
|
|
93
|
-
if (typeof destroyable?.destroy === "function") {
|
|
94
|
-
try {
|
|
95
|
-
destroyable.destroy();
|
|
96
|
-
} catch {
|
|
97
|
-
// already dead
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Drain a pino destination.
|
|
103
|
-
*
|
|
104
|
-
* Node `Writable.end(cb)` invokes `cb`. `pino.transport()` returns a
|
|
105
|
-
* ThreadStream whose `end()` takes no callback and signals via `finish`/`close`
|
|
106
|
-
* instead — waiting only on `end(cb)` hangs forever and blocks Flux HMR.
|
|
107
|
-
*/ function endDestination(stream) {
|
|
108
|
-
if (typeof stream.end !== "function") {
|
|
109
|
-
return Promise.resolve();
|
|
110
|
-
}
|
|
111
|
-
if (stream.destroyed || stream.closed || stream.writableFinished) {
|
|
112
|
-
return Promise.resolve();
|
|
113
|
-
}
|
|
114
|
-
return new Promise((resolve, reject)=>{
|
|
115
|
-
let settled = false;
|
|
116
|
-
const settle = (err)=>{
|
|
117
|
-
if (settled) {
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
settled = true;
|
|
121
|
-
stream.off?.("finish", onFinish);
|
|
122
|
-
stream.off?.("close", onClose);
|
|
123
|
-
stream.off?.("error", onError);
|
|
124
|
-
if (err != null) {
|
|
125
|
-
reject(err);
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
resolve();
|
|
129
|
-
};
|
|
130
|
-
const onFinish = ()=>settle();
|
|
131
|
-
const onClose = ()=>settle();
|
|
132
|
-
const onError = (err)=>{
|
|
133
|
-
// ThreadStream may emit error then close during teardown; closed = done.
|
|
134
|
-
if (stream.destroyed || stream.closed) {
|
|
135
|
-
settle();
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
settle(err);
|
|
139
|
-
};
|
|
140
|
-
stream.once?.("finish", onFinish);
|
|
141
|
-
stream.once?.("close", onClose);
|
|
142
|
-
stream.once?.("error", onError);
|
|
143
|
-
try {
|
|
144
|
-
stream.end((err)=>settle(err));
|
|
145
|
-
} catch (err) {
|
|
146
|
-
settle(err instanceof Error ? err : new Error(String(err)));
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
// ThreadStream.end() is a no-op when already destroyed (no events).
|
|
150
|
-
if (stream.destroyed || stream.closed || stream.writableFinished) {
|
|
151
|
-
settle();
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
38
|
}
|
|
155
39
|
function logMethod(args, method) {
|
|
156
40
|
let message = args.at(0);
|
|
157
41
|
const data = args.at(1);
|
|
158
|
-
if (message instanceof Error) {
|
|
159
|
-
method.call(this, {
|
|
160
|
-
err: message
|
|
161
|
-
}, formatError(message));
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
42
|
if (data instanceof Error) {
|
|
165
43
|
message = {
|
|
166
44
|
msg: message,
|
|
@@ -192,4 +70,4 @@ function pinoMix(logger) {
|
|
|
192
70
|
});
|
|
193
71
|
}
|
|
194
72
|
|
|
195
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5hZGFwYXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIEJhc2VMb2dnZXIsXG5cdGZvcm1hdEVycm9yLFxuXHRMb2dBZGFwdGVyLFxuXHR0eXBlIExvZ2dlcixcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxufSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHBpbm8sIHsgdHlwZSBMb2dGbiB9IGZyb20gXCJwaW5vXCI7XG5cbmltcG9ydCB0eXBlIHsgR3VhcmRlZFRyYW5zcG9ydCB9IGZyb20gXCIuL3Bpbm8udHJhbnNwb3J0LWd1YXJkLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFBpbm9BZGFwYXRlck9wdGlvbnMgPSB7XG5cdG9wdGlvbnM/OiBwaW5vLkxvZ2dlck9wdGlvbnM7XG5cdHN0cmVhbT86IHBpbm8uRGVzdGluYXRpb25TdHJlYW07XG59O1xuXG50eXBlIEVuZGFibGVTdHJlYW0gPSB7XG5cdGVuZD86IChjYj86IChlcnI/OiBFcnJvciB8IG51bGwpID0+IHZvaWQpID0+IHZvaWQ7XG5cdGRlc3Ryb3k/OiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZDtcblx0ZGVzdHJveWVkPzogYm9vbGVhbjtcblx0Y2xvc2VkPzogYm9vbGVhbjtcblx0d3JpdGFibGVGaW5pc2hlZD86IGJvb2xlYW47XG5cdG9uY2U/OiAoXG5cdFx0ZXZlbnQ6IFwiZmluaXNoXCIgfCBcImNsb3NlXCIgfCBcImVycm9yXCIsXG5cdFx0bGlzdGVuZXI6ICguLi5hcmdzOiBuZXZlcltdKSA9PiB2b2lkLFxuXHQpID0+IHVua25vd247XG5cdG9mZj86IChldmVudDogXCJmaW5pc2hcIiB8IFwiY2xvc2VcIiB8IFwiZXJyb3JcIiwgbGlzdGVuZXI6ICguLi5hcmdzOiBuZXZlcltdKSA9PiB2b2lkKSA9PiB1bmtub3duO1xufTtcblxuZXhwb3J0IGNsYXNzIFBpbm9BZGFwdGVyIGV4dGVuZHMgTG9nQWRhcHRlciB7XG5cdHByaXZhdGUgX3Bpbm86IHBpbm8uTG9nZ2VyO1xuXHRwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IHBpbm8uTG9nZ2VyT3B0aW9ucztcblx0cHJpdmF0ZSByZWFkb25seSBzdHJlYW06IHBpbm8uRGVzdGluYXRpb25TdHJlYW0gfCB1bmRlZmluZWQ7XG5cdHByaXZhdGUgZGlzcG9zZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSByZXRpcmVkID0gZmFsc2U7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHBpbm8uTG9nZ2VyT3B0aW9ucywgc3RyZWFtPzogcGluby5EZXN0aW5hdGlvblN0cmVhbSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLnN0cmVhbSA9IHN0cmVhbTtcblx0fVxuXG5cdHB1YmxpYyBjb25maWd1cmU8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRcdHNjcmliZU9wdGlvbnM6IFNjcmliZU9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdCkge1xuXHRcdGNvbnN0IHsgbG9nTGV2ZWwsIHJlZGFjdGlvbnMgfSA9IHNjcmliZU9wdGlvbnM7XG5cdFx0Y29uc3QgY3VzdG9tTGV2ZWxzID0gdGhpcy5nZXRMb2dMZXZlbHMoc2NyaWJlT3B0aW9ucyk7XG5cblx0XHRjb25zdCBwaW5vT3B0aW9uczogcGluby5Mb2dnZXJPcHRpb25zID0ge1xuXHRcdFx0Y3VzdG9tTGV2ZWxzLFxuXHRcdFx0bGV2ZWw6IGxvZ0xldmVsLFxuXHRcdFx0aG9va3M6IHsgbG9nTWV0aG9kIH0sXG5cdFx0XHRzZXJpYWxpemVyczoge1xuXHRcdFx0XHRlcnJvcjogcGluby5zdGRTZXJpYWxpemVycy5lcnIsXG5cdFx0XHR9LFxuXHRcdFx0cmVkYWN0OiByZWRhY3Rpb25zLFxuXHRcdFx0Li4udGhpcy5vcHRpb25zLFxuXHRcdH07XG5cdFx0dGhpcy5fcGlubyA9IHBpbm8ocGlub09wdGlvbnMsIHRoaXMuc3RyZWFtKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRMb2dnZXI8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRcdG5hbWU6IHN0cmluZyxcblx0KTogTG9nZ2VyPFQsIEN1c3RvbU9ubHk+IHtcblx0XHRjb25zdCBsb2dnZXIgPSBwaW5vTWl4PFQsIEN1c3RvbU9ubHk+KHRoaXMuX3Bpbm8uY2hpbGQoeyBuYW1lIH0pKTtcblx0XHRyZXR1cm4gbG9nZ2VyO1xuXHR9XG5cblx0cHVibGljIGZsdXNoKGNiPzogKCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnJldGlyZWQgfHwgIXRoaXMuX3Bpbm8pIHtcblx0XHRcdGNiPy4oKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5fcGluby5mbHVzaChjYik7XG5cdH1cblxuXHQvKipcblx0ICogSW1tZWRpYXRlbHkgc3RvcCBhY2NlcHRpbmcgd3JpdGVzIGludG8gdGhlIGRlc3RpbmF0aW9uIChUaHJlYWRTdHJlYW0pLlxuXHQgKiBEb2VzIG5vdCB3YWl0IGZvciBmbHVzaCDigJQgdXNlIGBzdG9wKClgIGZvciBhc3luYyBkcmFpbiBhZnRlciByZXRpcmUuXG5cdCAqL1xuXHRwdWJsaWMgcmV0aXJlKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnJldGlyZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5yZXRpcmVkID0gdHJ1ZTtcblx0XHRjb25zdCBndWFyZGVkID0gdGhpcy5zdHJlYW0gYXMgR3VhcmRlZFRyYW5zcG9ydCB8IHVuZGVmaW5lZDtcblx0XHRpZiAodHlwZW9mIGd1YXJkZWQ/LnJldGlyZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRndWFyZGVkLnJldGlyZShcImFkYXB0ZXIgcmV0aXJlZFwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0ZGVzdHJveURlc3RpbmF0aW9uKHRoaXMuc3RyZWFtKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuZGlzcG9zZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5kaXNwb3NlZCA9IHRydWU7XG5cdFx0aWYgKCF0aGlzLnJldGlyZWQpIHtcblx0XHRcdGNvbnN0IGRlc3QgPSB0aGlzLnN0cmVhbSBhcyBFbmRhYmxlU3RyZWFtIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGRlc3QgIT0gbnVsbCAmJiB0eXBlb2YgZGVzdC5lbmQgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHQvLyBwaW5vLnRyYW5zcG9ydCgpIGlzIGEgVGhyZWFkU3RyZWFtOiBwaW5vLmZsdXNoKCkg4oaSIEF0b21pY3Mud2FpdEFzeW5jIGNhblxuXHRcdFx0XHQvLyBoYW5nIGZvcmV2ZXIgYWZ0ZXIgY29uY3VycmVudCB3cml0ZXMuIGVuZCgpIGZsdXNoU3luY3MgdGhlbiBzaWduYWxzXG5cdFx0XHRcdC8vIGZpbmlzaC9jbG9zZSAoaXQgZG9lcyBub3QgYWNjZXB0IGEgTm9kZSBXcml0YWJsZSBjYWxsYmFjaykuXG5cdFx0XHRcdGF3YWl0IGVuZERlc3RpbmF0aW9uKGRlc3QpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLl9waW5vKSB7XG5cdFx0XHRcdGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0dGhpcy5fcGluby5mbHVzaCgoZXJyPzogRXJyb3IgfCBudWxsKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChlcnIgIT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRcdHJlamVjdChlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyKSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIE1hcmsgZGVhZCBhZnRlciBncmFjZWZ1bCBlbmQgKG9yIGltbWVkaWF0ZWx5IGlmIGFscmVhZHkgZm9yY2UtcmV0aXJlZCkuXG5cdFx0dGhpcy5yZXRpcmUoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBkZXN0cm95RGVzdGluYXRpb24oc3RyZWFtOiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdGNvbnN0IGRlc3Ryb3lhYmxlID0gc3RyZWFtIGFzIEVuZGFibGVTdHJlYW0gfCB1bmRlZmluZWQ7XG5cdGlmICh0eXBlb2YgZGVzdHJveWFibGU/LmRlc3Ryb3kgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHRyeSB7XG5cdFx0XHRkZXN0cm95YWJsZS5kZXN0cm95KCk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHQvLyBhbHJlYWR5IGRlYWRcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBEcmFpbiBhIHBpbm8gZGVzdGluYXRpb24uXG4gKlxuICogTm9kZSBgV3JpdGFibGUuZW5kKGNiKWAgaW52b2tlcyBgY2JgLiBgcGluby50cmFuc3BvcnQoKWAgcmV0dXJucyBhXG4gKiBUaHJlYWRTdHJlYW0gd2hvc2UgYGVuZCgpYCB0YWtlcyBubyBjYWxsYmFjayBhbmQgc2lnbmFscyB2aWEgYGZpbmlzaGAvYGNsb3NlYFxuICogaW5zdGVhZCDigJQgd2FpdGluZyBvbmx5IG9uIGBlbmQoY2IpYCBoYW5ncyBmb3JldmVyIGFuZCBibG9ja3MgRmx1eCBITVIuXG4gKi9cbmZ1bmN0aW9uIGVuZERlc3RpbmF0aW9uKHN0cmVhbTogRW5kYWJsZVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAodHlwZW9mIHN0cmVhbS5lbmQgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXHRpZiAoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW0uY2xvc2VkIHx8IHN0cmVhbS53cml0YWJsZUZpbmlzaGVkKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRsZXQgc2V0dGxlZCA9IGZhbHNlO1xuXHRcdGNvbnN0IHNldHRsZSA9IChlcnI/OiBFcnJvciB8IG51bGwpID0+IHtcblx0XHRcdGlmIChzZXR0bGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHNldHRsZWQgPSB0cnVlO1xuXHRcdFx0c3RyZWFtLm9mZj8uKFwiZmluaXNoXCIsIG9uRmluaXNoKTtcblx0XHRcdHN0cmVhbS5vZmY/LihcImNsb3NlXCIsIG9uQ2xvc2UpO1xuXHRcdFx0c3RyZWFtLm9mZj8uKFwiZXJyb3JcIiwgb25FcnJvcik7XG5cdFx0XHRpZiAoZXJyICE9IG51bGwpIHtcblx0XHRcdFx0cmVqZWN0KGVycik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHJlc29sdmUoKTtcblx0XHR9O1xuXG5cdFx0Y29uc3Qgb25GaW5pc2ggPSAoKSA9PiBzZXR0bGUoKTtcblx0XHRjb25zdCBvbkNsb3NlID0gKCkgPT4gc2V0dGxlKCk7XG5cdFx0Y29uc3Qgb25FcnJvciA9IChlcnI6IEVycm9yKSA9PiB7XG5cdFx0XHQvLyBUaHJlYWRTdHJlYW0gbWF5IGVtaXQgZXJyb3IgdGhlbiBjbG9zZSBkdXJpbmcgdGVhcmRvd247IGNsb3NlZCA9IGRvbmUuXG5cdFx0XHRpZiAoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW0uY2xvc2VkKSB7XG5cdFx0XHRcdHNldHRsZSgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRzZXR0bGUoZXJyKTtcblx0XHR9O1xuXG5cdFx0c3RyZWFtLm9uY2U/LihcImZpbmlzaFwiLCBvbkZpbmlzaCk7XG5cdFx0c3RyZWFtLm9uY2U/LihcImNsb3NlXCIsIG9uQ2xvc2UpO1xuXHRcdHN0cmVhbS5vbmNlPy4oXCJlcnJvclwiLCBvbkVycm9yKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRzdHJlYW0uZW5kKChlcnI/OiBFcnJvciB8IG51bGwpID0+IHNldHRsZShlcnIpKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHNldHRsZShlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyKSkpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFRocmVhZFN0cmVhbS5lbmQoKSBpcyBhIG5vLW9wIHdoZW4gYWxyZWFkeSBkZXN0cm95ZWQgKG5vIGV2ZW50cykuXG5cdFx0aWYgKHN0cmVhbS5kZXN0cm95ZWQgfHwgc3RyZWFtLmNsb3NlZCB8fCBzdHJlYW0ud3JpdGFibGVGaW5pc2hlZCkge1xuXHRcdFx0c2V0dGxlKCk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gbG9nTWV0aG9kKHRoaXM6IHBpbm8uTG9nZ2VyLCBhcmdzOiBQYXJhbWV0ZXJzPExvZ0ZuPiwgbWV0aG9kOiBMb2dGbikge1xuXHRsZXQgbWVzc2FnZSA9IGFyZ3MuYXQoMCk7XG5cdGNvbnN0IGRhdGEgPSBhcmdzLmF0KDEpO1xuXG5cdGlmIChtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRtZXRob2QuY2FsbCh0aGlzLCB7IGVycjogbWVzc2FnZSB9LCBmb3JtYXRFcnJvcihtZXNzYWdlKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGRhdGEgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdG1lc3NhZ2UgPSB7IG1zZzogbWVzc2FnZSwgLi4ueyBlcnJvcjogZGF0YSB9IH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIpIHtcblx0XHRtZXNzYWdlID0geyBtc2c6IG1lc3NhZ2UsIC4uLmRhdGEgfTtcblx0fSBlbHNlIHtcblx0XHRtZXNzYWdlID0geyBtc2c6IG1lc3NhZ2UsIGRhdGEgfTtcblx0fVxuXG5cdG1ldGhvZC5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiBwaW5vTWl4PFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0bG9nZ2VyOiBwaW5vLkxvZ2dlcixcbik6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdHJldHVybiBPYmplY3QuYXNzaWduPHBpbm8uTG9nZ2VyLCBCYXNlTG9nZ2VyPihsb2dnZXIsIHtcblx0XHRnZXQgY3VycmVudExldmVsKCkge1xuXHRcdFx0cmV0dXJuIGxvZ2dlci5sZXZlbDtcblx0XHR9LFxuXHRcdGdldCBsb2dMZXZlbHMoKSB7XG5cdFx0XHRyZXR1cm4gbG9nZ2VyLmxldmVscy52YWx1ZXM7XG5cdFx0fSxcblx0fSkgYXMgTG9nZ2VyPFQsIEN1c3RvbU9ubHk+O1xufVxuIl0sIm5hbWVzIjpbImZvcm1hdEVycm9yIiwiTG9nQWRhcHRlciIsInBpbm8iLCJQaW5vQWRhcHRlciIsIl9waW5vIiwib3B0aW9ucyIsInN0cmVhbSIsImRpc3Bvc2VkIiwicmV0aXJlZCIsImNvbmZpZ3VyZSIsInNjcmliZU9wdGlvbnMiLCJsb2dMZXZlbCIsInJlZGFjdGlvbnMiLCJjdXN0b21MZXZlbHMiLCJnZXRMb2dMZXZlbHMiLCJwaW5vT3B0aW9ucyIsImxldmVsIiwiaG9va3MiLCJsb2dNZXRob2QiLCJzZXJpYWxpemVycyIsImVycm9yIiwic3RkU2VyaWFsaXplcnMiLCJlcnIiLCJyZWRhY3QiLCJnZXRMb2dnZXIiLCJuYW1lIiwibG9nZ2VyIiwicGlub01peCIsImNoaWxkIiwiZmx1c2giLCJjYiIsInJldGlyZSIsImd1YXJkZWQiLCJkZXN0cm95RGVzdGluYXRpb24iLCJTeW1ib2wiLCJhc3luY0Rpc3Bvc2UiLCJkZXN0IiwiZW5kIiwiZW5kRGVzdGluYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIkVycm9yIiwiU3RyaW5nIiwiZGVzdHJveWFibGUiLCJkZXN0cm95IiwiZGVzdHJveWVkIiwiY2xvc2VkIiwid3JpdGFibGVGaW5pc2hlZCIsInNldHRsZWQiLCJzZXR0bGUiLCJvZmYiLCJvbkZpbmlzaCIsIm9uQ2xvc2UiLCJvbkVycm9yIiwib25jZSIsImFyZ3MiLCJtZXRob2QiLCJtZXNzYWdlIiwiYXQiLCJkYXRhIiwiY2FsbCIsIm1zZyIsIk9iamVjdCIsImFzc2lnbiIsImN1cnJlbnRMZXZlbCIsImxvZ0xldmVscyIsImxldmVscyIsInZhbHVlcyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FFQ0EsV0FBVyxFQUNYQyxVQUFVLFFBR0osbUJBQW1CO0FBQzFCLE9BQU9DLFVBQTBCLE9BQU87QUFzQnhDLE9BQU8sTUFBTUMsb0JBQW9CRjtJQUN4QkcsTUFBbUI7SUFDVkMsUUFBNEI7SUFDNUJDLE9BQTJDO0lBQ3BEQyxXQUFXLE1BQU07SUFDakJDLFVBQVUsTUFBTTtJQUV4QixZQUFtQkgsT0FBMkIsRUFBRUMsTUFBK0IsQ0FBRTtRQUNoRixLQUFLO1FBQ0wsSUFBSSxDQUFDRCxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO0lBQ2Y7SUFFT0csVUFDTkMsYUFBMkMsRUFDMUM7UUFDRCxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsVUFBVSxFQUFFLEdBQUdGO1FBQ2pDLE1BQU1HLGVBQWUsSUFBSSxDQUFDQyxZQUFZLENBQUNKO1FBRXZDLE1BQU1LLGNBQWtDO1lBQ3ZDRjtZQUNBRyxPQUFPTDtZQUNQTSxPQUFPO2dCQUFFQztZQUFVO1lBQ25CQyxhQUFhO2dCQUNaQyxPQUFPbEIsS0FBS21CLGNBQWMsQ0FBQ0MsR0FBRztZQUMvQjtZQUNBQyxRQUFRWDtZQUNSLEdBQUcsSUFBSSxDQUFDUCxPQUFPO1FB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
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5hZGFwYXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIEJhc2VMb2dnZXIsXG5cdExvZ0FkYXB0ZXIsXG5cdHR5cGUgTG9nZ2VyLFxuXHR0eXBlIFNjcmliZU9wdGlvbnMsXG59IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgcGlubywgeyB0eXBlIExvZ0ZuIH0gZnJvbSBcInBpbm9cIjtcblxuZXhwb3J0IHR5cGUgUGlub0FkYXBhdGVyT3B0aW9ucyA9IHtcblx0b3B0aW9ucz86IHBpbm8uTG9nZ2VyT3B0aW9ucztcblx0c3RyZWFtPzogcGluby5EZXN0aW5hdGlvblN0cmVhbTtcbn07XG5cbmV4cG9ydCBjbGFzcyBQaW5vQWRhcHRlciBleHRlbmRzIExvZ0FkYXB0ZXIge1xuXHRwcml2YXRlIF9waW5vOiBwaW5vLkxvZ2dlcjtcblx0cHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnM7XG5cdHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtO1xuXHRwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogcGluby5Mb2dnZXJPcHRpb25zLCBzdHJlYW0/OiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuXHR9XG5cblx0cHVibGljIGNvbmZpZ3VyZTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdFx0c2NyaWJlT3B0aW9uczogU2NyaWJlT3B0aW9uczxULCBDdXN0b21Pbmx5Pixcblx0KSB7XG5cdFx0Y29uc3QgeyBsb2dMZXZlbCwgcmVkYWN0aW9ucyB9ID0gc2NyaWJlT3B0aW9ucztcblx0XHRjb25zdCBjdXN0b21MZXZlbHMgPSB0aGlzLmdldExvZ0xldmVscyhzY3JpYmVPcHRpb25zKTtcblxuXHRcdGNvbnN0IHBpbm9PcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnMgPSB7XG5cdFx0XHRjdXN0b21MZXZlbHMsXG5cdFx0XHRsZXZlbDogbG9nTGV2ZWwsXG5cdFx0XHRob29rczogeyBsb2dNZXRob2QgfSxcblx0XHRcdHNlcmlhbGl6ZXJzOiB7XG5cdFx0XHRcdGVycm9yOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLmVycixcblx0XHRcdH0sXG5cdFx0XHRyZWRhY3Q6IHJlZGFjdGlvbnMsXG5cdFx0XHQuLi50aGlzLm9wdGlvbnMsXG5cdFx0fTtcblx0XHR0aGlzLl9waW5vID0gcGlubyhwaW5vT3B0aW9ucywgdGhpcy5zdHJlYW0pO1xuXHR9XG5cblx0cHVibGljIGdldExvZ2dlcjxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdFx0bmFtZTogc3RyaW5nLFxuXHQpOiBMb2dnZXI8VCwgQ3VzdG9tT25seT4ge1xuXHRcdGNvbnN0IGxvZ2dlciA9IHBpbm9NaXg8VCwgQ3VzdG9tT25seT4odGhpcy5fcGluby5jaGlsZCh7IG5hbWUgfSkpO1xuXHRcdHJldHVybiBsb2dnZXI7XG5cdH1cblxuXHRwdWJsaWMgZmx1c2goY2I/OiAoKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0dGhpcy5fcGluby5mbHVzaChjYik7XG5cdH1cbn1cblxuZnVuY3Rpb24gbG9nTWV0aG9kKHRoaXM6IHBpbm8uTG9nZ2VyLCBhcmdzOiBQYXJhbWV0ZXJzPExvZ0ZuPiwgbWV0aG9kOiBMb2dGbikge1xuXHRsZXQgbWVzc2FnZSA9IGFyZ3MuYXQoMCk7XG5cdGNvbnN0IGRhdGEgPSBhcmdzLmF0KDEpO1xuXG5cdGlmIChkYXRhIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRtZXNzYWdlID0geyBtc2c6IG1lc3NhZ2UsIC4uLnsgZXJyb3I6IGRhdGEgfSB9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCAuLi5kYXRhIH07XG5cdH0gZWxzZSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCBkYXRhIH07XG5cdH1cblxuXHRtZXRob2QuY2FsbCh0aGlzLCBtZXNzYWdlKTtcbn1cblxuZnVuY3Rpb24gcGlub01peDxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdGxvZ2dlcjogcGluby5Mb2dnZXIsXG4pOiBMb2dnZXI8VCwgQ3VzdG9tT25seT4ge1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbjxwaW5vLkxvZ2dlciwgQmFzZUxvZ2dlcj4obG9nZ2VyLCB7XG5cdFx0Z2V0IGN1cnJlbnRMZXZlbCgpIHtcblx0XHRcdHJldHVybiBsb2dnZXIubGV2ZWw7XG5cdFx0fSxcblx0XHRnZXQgbG9nTGV2ZWxzKCkge1xuXHRcdFx0cmV0dXJuIGxvZ2dlci5sZXZlbHMudmFsdWVzO1xuXHRcdH0sXG5cdH0pIGFzIExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcbn1cbiJdLCJuYW1lcyI6WyJMb2dBZGFwdGVyIiwicGlubyIsIlBpbm9BZGFwdGVyIiwiX3Bpbm8iLCJvcHRpb25zIiwic3RyZWFtIiwiY29uZmlndXJlIiwic2NyaWJlT3B0aW9ucyIsImxvZ0xldmVsIiwicmVkYWN0aW9ucyIsImN1c3RvbUxldmVscyIsImdldExvZ0xldmVscyIsInBpbm9PcHRpb25zIiwibGV2ZWwiLCJob29rcyIsImxvZ01ldGhvZCIsInNlcmlhbGl6ZXJzIiwiZXJyb3IiLCJzdGRTZXJpYWxpemVycyIsImVyciIsInJlZGFjdCIsImdldExvZ2dlciIsIm5hbWUiLCJsb2dnZXIiLCJwaW5vTWl4IiwiY2hpbGQiLCJmbHVzaCIsImNiIiwiYXJncyIsIm1ldGhvZCIsIm1lc3NhZ2UiLCJhdCIsImRhdGEiLCJFcnJvciIsIm1zZyIsImNhbGwiLCJPYmplY3QiLCJhc3NpZ24iLCJjdXJyZW50TGV2ZWwiLCJsb2dMZXZlbHMiLCJsZXZlbHMiLCJ2YWx1ZXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBRUNBLFVBQVUsUUFHSixtQkFBbUI7QUFDMUIsT0FBT0MsVUFBMEIsT0FBTztBQU94QyxPQUFPLE1BQU1DLG9CQUFvQkY7SUFDeEJHLE1BQW1CO0lBQ1ZDLFFBQTRCO0lBQzVCQyxPQUErQjtJQUNoRCxZQUFtQkQsT0FBMkIsRUFBRUMsTUFBK0IsQ0FBRTtRQUNoRixLQUFLO1FBQ0wsSUFBSSxDQUFDRCxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO0lBQ2Y7SUFFT0MsVUFDTkMsYUFBMkMsRUFDMUM7UUFDRCxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsVUFBVSxFQUFFLEdBQUdGO1FBQ2pDLE1BQU1HLGVBQWUsSUFBSSxDQUFDQyxZQUFZLENBQUNKO1FBRXZDLE1BQU1LLGNBQWtDO1lBQ3ZDRjtZQUNBRyxPQUFPTDtZQUNQTSxPQUFPO2dCQUFFQztZQUFVO1lBQ25CQyxhQUFhO2dCQUNaQyxPQUFPaEIsS0FBS2lCLGNBQWMsQ0FBQ0MsR0FBRztZQUMvQjtZQUNBQyxRQUFRWDtZQUNSLEdBQUcsSUFBSSxDQUFDTCxPQUFPO1FBQ2hCO1FBQ0EsSUFBSSxDQUFDRCxLQUFLLEdBQUdGLEtBQUtXLGFBQWEsSUFBSSxDQUFDUCxNQUFNO0lBQzNDO0lBRU9nQixVQUNOQyxJQUFZLEVBQ1k7UUFDeEIsTUFBTUMsU0FBU0MsUUFBdUIsSUFBSSxDQUFDckIsS0FBSyxDQUFDc0IsS0FBSyxDQUFDO1lBQUVIO1FBQUs7UUFDOUQsT0FBT0M7SUFDUjtJQUVPRyxNQUFNQyxFQUFlLEVBQVE7UUFDbkMsSUFBSSxDQUFDeEIsS0FBSyxDQUFDdUIsS0FBSyxDQUFDQztJQUNsQjtBQUNEO0FBRUEsU0FBU1osVUFBNkJhLElBQXVCLEVBQUVDLE1BQWE7SUFDM0UsSUFBSUMsVUFBVUYsS0FBS0csRUFBRSxDQUFDO0lBQ3RCLE1BQU1DLE9BQU9KLEtBQUtHLEVBQUUsQ0FBQztJQUVyQixJQUFJQyxnQkFBZ0JDLE9BQU87UUFDMUJILFVBQVU7WUFBRUksS0FBS0o7WUFBUyxHQUFHO2dCQUFFYixPQUFPZTtZQUFLLENBQUM7UUFBQztJQUM5QyxPQUFPLElBQUksT0FBT0EsU0FBUyxVQUFVO1FBQ3BDRixVQUFVO1lBQUVJLEtBQUtKO1lBQVMsR0FBR0UsSUFBSTtRQUFDO0lBQ25DLE9BQU87UUFDTkYsVUFBVTtZQUFFSSxLQUFLSjtZQUFTRTtRQUFLO0lBQ2hDO0lBRUFILE9BQU9NLElBQUksQ0FBQyxJQUFJLEVBQUVMO0FBQ25CO0FBRUEsU0FBU04sUUFDUkQsTUFBbUI7SUFFbkIsT0FBT2EsT0FBT0MsTUFBTSxDQUEwQmQsUUFBUTtRQUNyRCxJQUFJZSxnQkFBZTtZQUNsQixPQUFPZixPQUFPVixLQUFLO1FBQ3BCO1FBQ0EsSUFBSTBCLGFBQVk7WUFDZixPQUFPaEIsT0FBT2lCLE1BQU0sQ0FBQ0MsTUFBTTtRQUM1QjtJQUNEO0FBQ0QifQ==
|
package/es6/src/scribe-pino.js
CHANGED
|
@@ -10,39 +10,30 @@ function _ts_metadata(k, v) {
|
|
|
10
10
|
import { extension } from "@decohere/nexus/extensibility";
|
|
11
11
|
import { DefaultEnvironment } from "@decohere/nexus/system";
|
|
12
12
|
import { LoggingConfigurationError, scribe } from "@decohere/scribe";
|
|
13
|
-
import pino from "pino";
|
|
14
13
|
import { PinoAdapter } from "./pino.adapater.js";
|
|
15
|
-
import { pinoRecipe } from "./pino.recipe.js";
|
|
16
|
-
import { guardTransport } from "./pino.transport-guard.js";
|
|
17
|
-
export { guardTransport } from "./pino.transport-guard.js";
|
|
18
14
|
export class PinoExtensions {
|
|
19
15
|
static withPino(factory, config, logLevel) {
|
|
20
|
-
return configureScribe(factory,
|
|
16
|
+
return configureScribe(factory, {
|
|
21
17
|
logLevel
|
|
22
|
-
}
|
|
18
|
+
}, config);
|
|
23
19
|
}
|
|
24
|
-
static withPinoPretty(factory,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
roll: options,
|
|
34
|
-
logLevel: options.logLevel
|
|
35
|
-
});
|
|
20
|
+
static withPinoPretty(factory, logLevel) {
|
|
21
|
+
return PinoExtensions.withPino(factory, {
|
|
22
|
+
transports: {
|
|
23
|
+
target: "pino-pretty",
|
|
24
|
+
options: {
|
|
25
|
+
colorize: true
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}, logLevel);
|
|
36
29
|
}
|
|
37
30
|
static withPinoCustom(factory, options) {
|
|
38
|
-
const { scribe, transports } = options
|
|
31
|
+
const { scribe, transports } = options;
|
|
39
32
|
return configureScribe(factory, scribe, transports);
|
|
40
33
|
}
|
|
41
34
|
}
|
|
42
35
|
_ts_decorate([
|
|
43
|
-
extension(scribe,
|
|
44
|
-
static: true
|
|
45
|
-
}),
|
|
36
|
+
extension(scribe),
|
|
46
37
|
_ts_metadata("design:type", Function),
|
|
47
38
|
_ts_metadata("design:paramtypes", [
|
|
48
39
|
typeof scribe === "undefined" ? Object : scribe,
|
|
@@ -52,9 +43,7 @@ _ts_decorate([
|
|
|
52
43
|
_ts_metadata("design:returntype", void 0)
|
|
53
44
|
], PinoExtensions, "withPino", null);
|
|
54
45
|
_ts_decorate([
|
|
55
|
-
extension(scribe,
|
|
56
|
-
static: true
|
|
57
|
-
}),
|
|
46
|
+
extension(scribe),
|
|
58
47
|
_ts_metadata("design:type", Function),
|
|
59
48
|
_ts_metadata("design:paramtypes", [
|
|
60
49
|
typeof scribe === "undefined" ? Object : scribe,
|
|
@@ -63,20 +52,7 @@ _ts_decorate([
|
|
|
63
52
|
_ts_metadata("design:returntype", void 0)
|
|
64
53
|
], PinoExtensions, "withPinoPretty", null);
|
|
65
54
|
_ts_decorate([
|
|
66
|
-
extension(scribe,
|
|
67
|
-
static: true
|
|
68
|
-
}),
|
|
69
|
-
_ts_metadata("design:type", Function),
|
|
70
|
-
_ts_metadata("design:paramtypes", [
|
|
71
|
-
typeof scribe === "undefined" ? Object : scribe,
|
|
72
|
-
typeof PinoRollRecipeOptions === "undefined" ? Object : PinoRollRecipeOptions
|
|
73
|
-
]),
|
|
74
|
-
_ts_metadata("design:returntype", void 0)
|
|
75
|
-
], PinoExtensions, "withPinoRoll", null);
|
|
76
|
-
_ts_decorate([
|
|
77
|
-
extension(scribe, {
|
|
78
|
-
static: true
|
|
79
|
-
}),
|
|
55
|
+
extension(scribe),
|
|
80
56
|
_ts_metadata("design:type", Function),
|
|
81
57
|
_ts_metadata("design:paramtypes", [
|
|
82
58
|
typeof scribe === "undefined" ? Object : scribe,
|
|
@@ -84,87 +60,23 @@ _ts_decorate([
|
|
|
84
60
|
]),
|
|
85
61
|
_ts_metadata("design:returntype", void 0)
|
|
86
62
|
], PinoExtensions, "withPinoCustom", null);
|
|
87
|
-
function parsePrettyArg(logLevelOrOptions) {
|
|
88
|
-
if (logLevelOrOptions == null) {
|
|
89
|
-
return {};
|
|
90
|
-
}
|
|
91
|
-
if (typeof logLevelOrOptions === "string") {
|
|
92
|
-
return {
|
|
93
|
-
logLevel: logLevelOrOptions
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
return logLevelOrOptions;
|
|
97
|
-
}
|
|
98
|
-
function attachRecipe(factory, plan) {
|
|
99
|
-
const loggerFactory = applyRecipe(factory, plan);
|
|
100
|
-
const chain = {
|
|
101
|
-
withPinoPretty (logLevelOrOptions) {
|
|
102
|
-
const pretty = parsePrettyArg(logLevelOrOptions);
|
|
103
|
-
return attachRecipe(factory, {
|
|
104
|
-
...plan,
|
|
105
|
-
pretty: {
|
|
106
|
-
...plan.pretty,
|
|
107
|
-
...pretty
|
|
108
|
-
},
|
|
109
|
-
logLevel: pretty.logLevel ?? plan.logLevel
|
|
110
|
-
});
|
|
111
|
-
},
|
|
112
|
-
withPinoRoll (options) {
|
|
113
|
-
return attachRecipe(factory, {
|
|
114
|
-
...plan,
|
|
115
|
-
roll: options,
|
|
116
|
-
logLevel: options.logLevel ?? plan.logLevel
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
return Object.assign(loggerFactory, chain, {
|
|
121
|
-
and: chain
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Guard a worker transport so failures (roll EEXIST, worker exit) neither
|
|
126
|
-
* crash the process nor spam stderr on every subsequent log write.
|
|
127
|
-
*/ function createSafeTransport(options) {
|
|
128
|
-
return guardTransport(pino.transport(options));
|
|
129
|
-
}
|
|
130
|
-
function adapterForTransport(transport) {
|
|
131
|
-
if (transport == null) {
|
|
132
|
-
return new PinoAdapter({});
|
|
133
|
-
}
|
|
134
|
-
return new PinoAdapter({}, createSafeTransport(transport));
|
|
135
|
-
}
|
|
136
|
-
function applyRecipe(factory, plan) {
|
|
137
|
-
const adapter = adapterForTransport(pinoRecipe.transport(plan));
|
|
138
|
-
// Omit logLevel when unset so mergeDefaults can read LOG_LEVEL / SCRIBE_LOG_LEVEL.
|
|
139
|
-
return factory.configure({
|
|
140
|
-
options: plan.logLevel != null ? {
|
|
141
|
-
logLevel: plan.logLevel
|
|
142
|
-
} : {},
|
|
143
|
-
adapter
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
63
|
function configureScribe(factory, options, config) {
|
|
147
64
|
const environment = process.env.NODE_ENV ?? DefaultEnvironment;
|
|
148
|
-
const configs =
|
|
65
|
+
const configs = Array.isArray(config) ? config : [
|
|
149
66
|
config
|
|
150
|
-
]
|
|
151
|
-
|
|
67
|
+
];
|
|
68
|
+
const transports = configs.filter((config)=>config.environment && config.environment === environment || true);
|
|
69
|
+
if (transports.length > 1) {
|
|
152
70
|
throw new LoggingConfigurationError(`There should only be one configuration per environment for logging`);
|
|
153
71
|
}
|
|
154
|
-
const
|
|
155
|
-
|
|
72
|
+
const transport = transports.at(0)?.transports;
|
|
73
|
+
const adapter = new PinoAdapter({
|
|
74
|
+
transport
|
|
75
|
+
});
|
|
156
76
|
return factory.configure({
|
|
157
|
-
options
|
|
77
|
+
options,
|
|
158
78
|
adapter
|
|
159
79
|
});
|
|
160
80
|
}
|
|
161
|
-
/** @deprecated Use {@link guardTransport} — kept for callers/tests from the silence-only era. */ function silenceErrors(transport) {
|
|
162
|
-
return guardTransport(transport);
|
|
163
|
-
}
|
|
164
|
-
export const pinoTransport = {
|
|
165
|
-
createSafeTransport,
|
|
166
|
-
guardTransport,
|
|
167
|
-
silenceErrors
|
|
168
|
-
};
|
|
169
81
|
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvc2NyaWJlLXBpbm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5zaW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9leHRlbnNpYmlsaXR5XCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnQsIHR5cGUgRW52aXJvbm1lbnQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL3N5c3RlbVwiO1xuaW1wb3J0IHtcblx0dHlwZSBEZWZhdWx0TGV2ZWxzLFxuXHR0eXBlIExvZ2dlcixcblx0TG9nZ2luZ0NvbmZpZ3VyYXRpb25FcnJvcixcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxuXHRzY3JpYmUsXG59IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgcGlubywge1xuXHR0eXBlIERlc3RpbmF0aW9uU3RyZWFtLFxuXHR0eXBlIFRyYW5zcG9ydE11bHRpT3B0aW9ucyxcblx0dHlwZSBUcmFuc3BvcnRQaXBlbGluZU9wdGlvbnMsXG5cdHR5cGUgVHJhbnNwb3J0U2luZ2xlT3B0aW9ucyxcbn0gZnJvbSBcInBpbm9cIjtcblxuaW1wb3J0IHsgUGlub0FkYXB0ZXIgfSBmcm9tIFwiLi9waW5vLmFkYXBhdGVyLmpzXCI7XG5pbXBvcnQge1xuXHR0eXBlIFBpbm9QcmV0dHlSZWNpcGVPcHRpb25zLFxuXHR0eXBlIFBpbm9SZWNpcGVQbGFuLFxuXHR0eXBlIFBpbm9Sb2xsUmVjaXBlT3B0aW9ucyxcblx0cGlub1JlY2lwZSxcbn0gZnJvbSBcIi4vcGluby5yZWNpcGUuanNcIjtcbmltcG9ydCB7IHR5cGUgR3VhcmRlZFRyYW5zcG9ydCwgZ3VhcmRUcmFuc3BvcnQgfSBmcm9tIFwiLi9waW5vLnRyYW5zcG9ydC1ndWFyZC5qc1wiO1xuXG5leHBvcnQgdHlwZSB7IEd1YXJkZWRUcmFuc3BvcnQgfSBmcm9tIFwiLi9waW5vLnRyYW5zcG9ydC1ndWFyZC5qc1wiO1xuZXhwb3J0IHsgZ3VhcmRUcmFuc3BvcnQgfSBmcm9tIFwiLi9waW5vLnRyYW5zcG9ydC1ndWFyZC5qc1wiO1xuXG50eXBlIFRyYW5zcG9ydE9wdGlvbnMgPVxuXHR8IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnNcblx0fCBUcmFuc3BvcnRNdWx0aU9wdGlvbnNcblx0fCBUcmFuc3BvcnRQaXBlbGluZU9wdGlvbnM7XG5cbnR5cGUgVHJhbnNwb3J0Q29uZmlnID0ge1xuXHRlbnZpcm9ubWVudD86IEVudmlyb25tZW50O1xuXHR0cmFuc3BvcnRzOiBUcmFuc3BvcnRPcHRpb25zO1xufTtcblxudHlwZSBDdXN0b21MZXZlbE9wdGlvbnM8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSA9IHVuZGVmaW5lZD4gPSB7XG5cdHNjcmliZT86IFNjcmliZU9wdGlvbnM8VCwgQ3VzdG9tT25seT47XG5cdHRyYW5zcG9ydHM/OiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFBpbm9Mb2dnZXJGYWN0b3J5ID0gKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjtcblxuZXhwb3J0IHR5cGUgUGlub1JlY2lwZUNoYWluID0ge1xuXHR3aXRoUGlub1ByZXR0eShcblx0XHRsb2dMZXZlbE9yT3B0aW9ucz86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcgfCBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyxcblx0KTogUGlub1JlY2lwZTtcblx0d2l0aFBpbm9Sb2xsKG9wdGlvbnM6IFBpbm9Sb2xsUmVjaXBlT3B0aW9ucyk6IFBpbm9SZWNpcGU7XG59O1xuXG5leHBvcnQgdHlwZSBQaW5vUmVjaXBlID0gUGlub0xvZ2dlckZhY3RvcnkgJlxuXHRQaW5vUmVjaXBlQ2hhaW4gJiB7XG5cdFx0cmVhZG9ubHkgYW5kOiBQaW5vUmVjaXBlQ2hhaW47XG5cdH07XG5cbmRlY2xhcmUgbW9kdWxlIFwiQGRlY29oZXJlL3NjcmliZVwiIHtcblx0aW50ZXJmYWNlIHNjcmliZSB7XG5cdFx0d2l0aFBpbm8oXG5cdFx0XHR0cmFuc3BvcnRzOiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcblx0XHRcdGxvZ2xldmVsPzogRGVmYXVsdExldmVscyB8IHN0cmluZyxcblx0XHQpOiBQaW5vTG9nZ2VyRmFjdG9yeTtcblx0XHQvKipcblx0XHQgKiBDb2xvcml6ZWQgcHJldHR5IHRyYW5zcG9ydC4gRGV2ZWxvcG1lbnQgb25seSB1bmxlc3MgYHsgd2hlbjogXCJhbHdheXNcIiB9YC5cblx0XHQgKiBDaGFpbiB3aXRoIGAuYW5kLndpdGhQaW5vUm9sbCh7IGZpbGUgfSlgLiBQcm9kdWN0aW9uIHdyaXRlcyBKU09OIHRvIHN0ZG91dFxuXHRcdCAqIHNvIGxvZyBzaGlwcGluZyBzdGF5cyBvdXRzaWRlIHRoZSBwcm9jZXNzLlxuXHRcdCAqL1xuXHRcdHdpdGhQaW5vUHJldHR5KFxuXHRcdFx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdFx0KTogUGlub1JlY2lwZTtcblx0XHQvKipcblx0XHQgKiBSb2xsaW5nIGxvZyBmaWxlcy4gRGV2ZWxvcG1lbnQgb25seSB1bmxlc3MgYHsgd2hlbjogXCJhbHdheXNcIiB9YC5cblx0XHQgKiBEbyBub3QgZW5hYmxlIGluIHByb2R1Y3Rpb24g4oCUIHNoaXAgc3Rkb3V0IGZyb20gYSBzaWRlY2FyIG9yIHBsYXRmb3JtIGFnZW50LlxuXHRcdCAqIGBzeW1saW5rYCBkZWZhdWx0cyBvZmY7IGVuYWJsaW5nIGl0IGNhbiByYWNlIHVuZGVyIG11bHRpLXdvcmtlciAvIEhNUi5cblx0XHQgKiBPcHMgbWF5IG92ZXJyaWRlIHBhdGgvc2l6ZS9mcmVxdWVuY3kva2VlcCB2aWEgYFNDUklCRV9MT0dfRklMRWAsXG5cdFx0ICogYFNDUklCRV9MT0dfU0laRWAsIGBTQ1JJQkVfTE9HX0ZSRVFVRU5DWWAsIGFuZCBgU0NSSUJFX0xPR19LRUVQYFxuXHRcdCAqIChmaWxlIGVudiB3aW5zIG92ZXIgYG9wdGlvbnMuZmlsZWA7IG90aGVyIGV4cGxpY2l0IG9wdGlvbnMgYmVhdCBlbnYpLlxuXHRcdCAqL1xuXHRcdHdpdGhQaW5vUm9sbChvcHRpb25zOiBQaW5vUm9sbFJlY2lwZU9wdGlvbnMpOiBQaW5vUmVjaXBlO1xuXHRcdHdpdGhQaW5vQ3VzdG9tPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgPSB1bmRlZmluZWQ+KFxuXHRcdFx0b3B0aW9ucz86IEN1c3RvbUxldmVsT3B0aW9uczxULCBDdXN0b21Pbmx5Pixcblx0XHQpOiBQaW5vTG9nZ2VyRmFjdG9yeTtcblx0fVxuXHRuYW1lc3BhY2Ugc2NyaWJlIHtcblx0XHRmdW5jdGlvbiB3aXRoUGlubyhcblx0XHRcdHRyYW5zcG9ydHM6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuXHRcdFx0bG9nbGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHRcdCk6IFBpbm9Mb2dnZXJGYWN0b3J5O1xuXHRcdGZ1bmN0aW9uIHdpdGhQaW5vUHJldHR5KFxuXHRcdFx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdFx0KTogUGlub1JlY2lwZTtcblx0XHRmdW5jdGlvbiB3aXRoUGlub1JvbGwob3B0aW9uczogUGlub1JvbGxSZWNpcGVPcHRpb25zKTogUGlub1JlY2lwZTtcblx0XHRmdW5jdGlvbiB3aXRoUGlub0N1c3RvbTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPihcblx0XHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdFx0KTogUGlub0xvZ2dlckZhY3Rvcnk7XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpbm9FeHRlbnNpb25zIHtcblx0QGV4dGVuc2lvbihzY3JpYmUsIHsgc3RhdGljOiB0cnVlIH0pXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm8oXG5cdFx0ZmFjdG9yeTogc2NyaWJlLFxuXHRcdGNvbmZpZzogVHJhbnNwb3J0Q29uZmlnIHwgVHJhbnNwb3J0Q29uZmlnW10sXG5cdFx0bG9nTGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHQpIHtcblx0XHRyZXR1cm4gY29uZmlndXJlU2NyaWJlKGZhY3RvcnksIGxvZ0xldmVsICE9IG51bGwgPyB7IGxvZ0xldmVsIH0gOiB1bmRlZmluZWQsIGNvbmZpZyk7XG5cdH1cblxuXHRAZXh0ZW5zaW9uKHNjcmliZSwgeyBzdGF0aWM6IHRydWUgfSlcblx0cHVibGljIHN0YXRpYyB3aXRoUGlub1ByZXR0eShcblx0XHRmYWN0b3J5OiBzY3JpYmUsXG5cdFx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdCkge1xuXHRcdGNvbnN0IHByZXR0eSA9IHBhcnNlUHJldHR5QXJnKGxvZ0xldmVsT3JPcHRpb25zKTtcblx0XHRyZXR1cm4gYXR0YWNoUmVjaXBlKGZhY3RvcnksIHsgcHJldHR5LCBsb2dMZXZlbDogcHJldHR5LmxvZ0xldmVsIH0pO1xuXHR9XG5cblx0QGV4dGVuc2lvbihzY3JpYmUsIHsgc3RhdGljOiB0cnVlIH0pXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm9Sb2xsKGZhY3Rvcnk6IHNjcmliZSwgb3B0aW9uczogUGlub1JvbGxSZWNpcGVPcHRpb25zKSB7XG5cdFx0cmV0dXJuIGF0dGFjaFJlY2lwZShmYWN0b3J5LCB7IHJvbGw6IG9wdGlvbnMsIGxvZ0xldmVsOiBvcHRpb25zLmxvZ0xldmVsIH0pO1xuXHR9XG5cblx0QGV4dGVuc2lvbihzY3JpYmUsIHsgc3RhdGljOiB0cnVlIH0pXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm9DdXN0b208VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSA9IHVuZGVmaW5lZD4oXG5cdFx0ZmFjdG9yeTogc2NyaWJlLFxuXHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdCkge1xuXHRcdGNvbnN0IHsgc2NyaWJlLCB0cmFuc3BvcnRzIH0gPSBvcHRpb25zID8/IHt9O1xuXHRcdHJldHVybiBjb25maWd1cmVTY3JpYmUoZmFjdG9yeSwgc2NyaWJlLCB0cmFuc3BvcnRzKTtcblx0fVxufVxuXG5mdW5jdGlvbiBwYXJzZVByZXR0eUFyZyhcblx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG4pOiBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyB7XG5cdGlmIChsb2dMZXZlbE9yT3B0aW9ucyA9PSBudWxsKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGlmICh0eXBlb2YgbG9nTGV2ZWxPck9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4geyBsb2dMZXZlbDogbG9nTGV2ZWxPck9wdGlvbnMgfTtcblx0fVxuXHRyZXR1cm4gbG9nTGV2ZWxPck9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFJlY2lwZShmYWN0b3J5OiBzY3JpYmUsIHBsYW46IFBpbm9SZWNpcGVQbGFuKTogUGlub1JlY2lwZSB7XG5cdGNvbnN0IGxvZ2dlckZhY3RvcnkgPSBhcHBseVJlY2lwZShmYWN0b3J5LCBwbGFuKTtcblx0Y29uc3QgY2hhaW46IFBpbm9SZWNpcGVDaGFpbiA9IHtcblx0XHR3aXRoUGlub1ByZXR0eShsb2dMZXZlbE9yT3B0aW9ucykge1xuXHRcdFx0Y29uc3QgcHJldHR5ID0gcGFyc2VQcmV0dHlBcmcobG9nTGV2ZWxPck9wdGlvbnMpO1xuXHRcdFx0cmV0dXJuIGF0dGFjaFJlY2lwZShmYWN0b3J5LCB7XG5cdFx0XHRcdC4uLnBsYW4sXG5cdFx0XHRcdHByZXR0eTogeyAuLi5wbGFuLnByZXR0eSwgLi4ucHJldHR5IH0sXG5cdFx0XHRcdGxvZ0xldmVsOiBwcmV0dHkubG9nTGV2ZWwgPz8gcGxhbi5sb2dMZXZlbCxcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0d2l0aFBpbm9Sb2xsKG9wdGlvbnMpIHtcblx0XHRcdHJldHVybiBhdHRhY2hSZWNpcGUoZmFjdG9yeSwge1xuXHRcdFx0XHQuLi5wbGFuLFxuXHRcdFx0XHRyb2xsOiBvcHRpb25zLFxuXHRcdFx0XHRsb2dMZXZlbDogb3B0aW9ucy5sb2dMZXZlbCA/PyBwbGFuLmxvZ0xldmVsLFxuXHRcdFx0fSk7XG5cdFx0fSxcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obG9nZ2VyRmFjdG9yeSwgY2hhaW4sIHsgYW5kOiBjaGFpbiB9KTtcbn1cblxuLyoqXG4gKiBHdWFyZCBhIHdvcmtlciB0cmFuc3BvcnQgc28gZmFpbHVyZXMgKHJvbGwgRUVYSVNULCB3b3JrZXIgZXhpdCkgbmVpdGhlclxuICogY3Jhc2ggdGhlIHByb2Nlc3Mgbm9yIHNwYW0gc3RkZXJyIG9uIGV2ZXJ5IHN1YnNlcXVlbnQgbG9nIHdyaXRlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVTYWZlVHJhbnNwb3J0KG9wdGlvbnM6IFRyYW5zcG9ydE9wdGlvbnMpOiBEZXN0aW5hdGlvblN0cmVhbSB7XG5cdHJldHVybiBndWFyZFRyYW5zcG9ydChwaW5vLnRyYW5zcG9ydChvcHRpb25zKSk7XG59XG5cbmZ1bmN0aW9uIGFkYXB0ZXJGb3JUcmFuc3BvcnQodHJhbnNwb3J0PzogVHJhbnNwb3J0T3B0aW9ucyk6IFBpbm9BZGFwdGVyIHtcblx0aWYgKHRyYW5zcG9ydCA9PSBudWxsKSB7XG5cdFx0cmV0dXJuIG5ldyBQaW5vQWRhcHRlcih7fSk7XG5cdH1cblx0cmV0dXJuIG5ldyBQaW5vQWRhcHRlcih7fSwgY3JlYXRlU2FmZVRyYW5zcG9ydCh0cmFuc3BvcnQpKTtcbn1cblxuZnVuY3Rpb24gYXBwbHlSZWNpcGUoZmFjdG9yeTogc2NyaWJlLCBwbGFuOiBQaW5vUmVjaXBlUGxhbik6IFBpbm9Mb2dnZXJGYWN0b3J5IHtcblx0Y29uc3QgYWRhcHRlciA9IGFkYXB0ZXJGb3JUcmFuc3BvcnQocGlub1JlY2lwZS50cmFuc3BvcnQocGxhbikpO1xuXHQvLyBPbWl0IGxvZ0xldmVsIHdoZW4gdW5zZXQgc28gbWVyZ2VEZWZhdWx0cyBjYW4gcmVhZCBMT0dfTEVWRUwgLyBTQ1JJQkVfTE9HX0xFVkVMLlxuXHRyZXR1cm4gZmFjdG9yeS5jb25maWd1cmUoe1xuXHRcdG9wdGlvbnM6IHBsYW4ubG9nTGV2ZWwgIT0gbnVsbCA/IHsgbG9nTGV2ZWw6IHBsYW4ubG9nTGV2ZWwgfSA6IHt9LFxuXHRcdGFkYXB0ZXIsXG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjb25maWd1cmVTY3JpYmU8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRmYWN0b3J5OiBzY3JpYmUsXG5cdG9wdGlvbnM6IFNjcmliZU9wdGlvbnM8VCwgQ3VzdG9tT25seT4gfCB1bmRlZmluZWQsXG5cdGNvbmZpZz86IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuKSB7XG5cdGNvbnN0IGVudmlyb25tZW50ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gRGVmYXVsdEVudmlyb25tZW50O1xuXHRjb25zdCBjb25maWdzID0gKEFycmF5LmlzQXJyYXkoY29uZmlnKSA/IGNvbmZpZyA6IGNvbmZpZyAhPSBudWxsID8gW2NvbmZpZ10gOiBbXSkuZmlsdGVyKFxuXHRcdChpdGVtKSA9PiBpdGVtLmVudmlyb25tZW50ID09IG51bGwgfHwgaXRlbS5lbnZpcm9ubWVudCA9PT0gZW52aXJvbm1lbnQsXG5cdCk7XG5cblx0aWYgKGNvbmZpZ3MubGVuZ3RoID4gMSkge1xuXHRcdHRocm93IG5ldyBMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yKFxuXHRcdFx0YFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBjb25maWd1cmF0aW9uIHBlciBlbnZpcm9ubWVudCBmb3IgbG9nZ2luZ2AsXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVyRm9yVHJhbnNwb3J0KGNvbmZpZ3MuYXQoMCk/LnRyYW5zcG9ydHMpO1xuXHQvLyBEbyBub3QgZm9yY2UgRGVmYXVsdExvZ0xldmVsIOKAlCB0aGF0IHdvdWxkIHNoYWRvdyBlbnYgcmVzb2x1dGlvbiBpbiBtZXJnZURlZmF1bHRzLlxuXHRyZXR1cm4gZmFjdG9yeS5jb25maWd1cmUoe1xuXHRcdG9wdGlvbnM6IG9wdGlvbnMgPz8ge30sXG5cdFx0YWRhcHRlcixcblx0fSk7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIGd1YXJkVHJhbnNwb3J0fSDigJQga2VwdCBmb3IgY2FsbGVycy90ZXN0cyBmcm9tIHRoZSBzaWxlbmNlLW9ubHkgZXJhLiAqL1xuZnVuY3Rpb24gc2lsZW5jZUVycm9ycyh0cmFuc3BvcnQ6IHtcblx0b24oZXZlbnQ6IFwiZXJyb3JcIiwgbGlzdGVuZXI6IChlcnI6IEVycm9yKSA9PiB2b2lkKTogdW5rbm93bjtcblx0d3JpdGU/OiAoLi4uYXJnczogbmV2ZXJbXSkgPT4gdW5rbm93bjtcbn0pOiBHdWFyZGVkVHJhbnNwb3J0IHtcblx0cmV0dXJuIGd1YXJkVHJhbnNwb3J0KHRyYW5zcG9ydCBhcyBEZXN0aW5hdGlvblN0cmVhbSk7XG59XG5cbmV4cG9ydCBjb25zdCBwaW5vVHJhbnNwb3J0ID0geyBjcmVhdGVTYWZlVHJhbnNwb3J0LCBndWFyZFRyYW5zcG9ydCwgc2lsZW5jZUVycm9ycyB9O1xuIl0sIm5hbWVzIjpbImV4dGVuc2lvbiIsIkRlZmF1bHRFbnZpcm9ubWVudCIsIkxvZ2dpbmdDb25maWd1cmF0aW9uRXJyb3IiLCJzY3JpYmUiLCJwaW5vIiwiUGlub0FkYXB0ZXIiLCJwaW5vUmVjaXBlIiwiZ3VhcmRUcmFuc3BvcnQiLCJQaW5vRXh0ZW5zaW9ucyIsIndpdGhQaW5vIiwiZmFjdG9yeSIsImNvbmZpZyIsImxvZ0xldmVsIiwiY29uZmlndXJlU2NyaWJlIiwidW5kZWZpbmVkIiwid2l0aFBpbm9QcmV0dHkiLCJsb2dMZXZlbE9yT3B0aW9ucyIsInByZXR0eSIsInBhcnNlUHJldHR5QXJnIiwiYXR0YWNoUmVjaXBlIiwid2l0aFBpbm9Sb2xsIiwib3B0aW9ucyIsInJvbGwiLCJ3aXRoUGlub0N1c3RvbSIsInRyYW5zcG9ydHMiLCJzdGF0aWMiLCJwbGFuIiwibG9nZ2VyRmFjdG9yeSIsImFwcGx5UmVjaXBlIiwiY2hhaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJhbmQiLCJjcmVhdGVTYWZlVHJhbnNwb3J0IiwidHJhbnNwb3J0IiwiYWRhcHRlckZvclRyYW5zcG9ydCIsImFkYXB0ZXIiLCJjb25maWd1cmUiLCJlbnZpcm9ubWVudCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImNvbmZpZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJpdGVtIiwibGVuZ3RoIiwiYXQiLCJzaWxlbmNlRXJyb3JzIiwicGlub1RyYW5zcG9ydCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsU0FBU0EsU0FBUyxRQUFRLGdDQUFnQztBQUMxRCxTQUFTQyxrQkFBa0IsUUFBMEIseUJBQXlCO0FBQzlFLFNBR0NDLHlCQUF5QixFQUV6QkMsTUFBTSxRQUNBLG1CQUFtQjtBQUMxQixPQUFPQyxVQUtBLE9BQU87QUFFZCxTQUFTQyxXQUFXLFFBQVEscUJBQXFCO0FBQ2pELFNBSUNDLFVBQVUsUUFDSixtQkFBbUI7QUFDMUIsU0FBZ0NDLGNBQWMsUUFBUSw0QkFBNEI7QUFHbEYsU0FBU0EsY0FBYyxRQUFRLDRCQUE0QjtBQXlFM0QsT0FBTyxNQUFNQztJQUNaLE9BQ2NDLFNBQ2JDLE9BQWUsRUFDZkMsTUFBMkMsRUFDM0NDLFFBQWlDLEVBQ2hDO1FBQ0QsT0FBT0MsZ0JBQWdCSCxTQUFTRSxZQUFZLE9BQU87WUFBRUE7UUFBUyxJQUFJRSxXQUFXSDtJQUM5RTtJQUVBLE9BQ2NJ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
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvc2NyaWJlLXBpbm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5zaW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9leHRlbnNpYmlsaXR5XCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnQsIHR5cGUgRW52aXJvbm1lbnQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL3N5c3RlbVwiO1xuaW1wb3J0IHtcblx0dHlwZSBEZWZhdWx0TGV2ZWxzLFxuXHR0eXBlIExvZ2dlcixcblx0TG9nZ2luZ0NvbmZpZ3VyYXRpb25FcnJvcixcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxuXHRzY3JpYmUsXG59IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgdHlwZSB7XG5cdFRyYW5zcG9ydE11bHRpT3B0aW9ucyxcblx0VHJhbnNwb3J0UGlwZWxpbmVPcHRpb25zLFxuXHRUcmFuc3BvcnRTaW5nbGVPcHRpb25zLFxufSBmcm9tIFwicGlub1wiO1xuXG5pbXBvcnQgeyBQaW5vQWRhcHRlciB9IGZyb20gXCIuL3Bpbm8uYWRhcGF0ZXIuanNcIjtcblxudHlwZSBUcmFuc3BvcnRDb25maWcgPSB7XG5cdGVudmlyb25tZW50PzogRW52aXJvbm1lbnQ7XG5cdHRyYW5zcG9ydHM6IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnMgfCBUcmFuc3BvcnRNdWx0aU9wdGlvbnMgfCBUcmFuc3BvcnRQaXBlbGluZU9wdGlvbnM7XG59O1xuXG50eXBlIEN1c3RvbUxldmVsT3B0aW9uczxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPiA9IHtcblx0c2NyaWJlPzogU2NyaWJlT3B0aW9uczxULCBDdXN0b21Pbmx5Pjtcblx0dHJhbnNwb3J0cz86IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdO1xufTtcblxuZGVjbGFyZSBtb2R1bGUgXCJAZGVjb2hlcmUvc2NyaWJlXCIge1xuXHRpbnRlcmZhY2Ugc2NyaWJlIHtcblx0XHR3aXRoUGlubyhcblx0XHRcdHRyYW5zcG9ydHM6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuXHRcdFx0bG9nbGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHRcdCk6IChuYW1lPzogc3RyaW5nKSA9PiBMb2dnZXI7XG5cdFx0d2l0aFBpbm9QcmV0dHkobG9nTGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nKTogKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjtcblx0XHR3aXRoUGlub0N1c3RvbTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPihcblx0XHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdFx0KTogKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgUGlub0V4dGVuc2lvbnMge1xuXHRAZXh0ZW5zaW9uKHNjcmliZSlcblx0cHVibGljIHN0YXRpYyB3aXRoUGlubyhcblx0XHRmYWN0b3J5OiBzY3JpYmUsXG5cdFx0Y29uZmlnOiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcblx0XHRsb2dMZXZlbD86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcsXG5cdCkge1xuXHRcdHJldHVybiBjb25maWd1cmVTY3JpYmUoZmFjdG9yeSwgeyBsb2dMZXZlbCB9LCBjb25maWcpO1xuXHR9XG5cblx0QGV4dGVuc2lvbihzY3JpYmUpXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm9QcmV0dHkoZmFjdG9yeTogc2NyaWJlLCBsb2dMZXZlbD86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gUGlub0V4dGVuc2lvbnMud2l0aFBpbm8oXG5cdFx0XHRmYWN0b3J5LFxuXHRcdFx0eyB0cmFuc3BvcnRzOiB7IHRhcmdldDogXCJwaW5vLXByZXR0eVwiLCBvcHRpb25zOiB7IGNvbG9yaXplOiB0cnVlIH0gfSB9LFxuXHRcdFx0bG9nTGV2ZWwsXG5cdFx0KTtcblx0fVxuXG5cdEBleHRlbnNpb24oc2NyaWJlKVxuXHRwdWJsaWMgc3RhdGljIHdpdGhQaW5vQ3VzdG9tPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgPSB1bmRlZmluZWQ+KFxuXHRcdGZhY3Rvcnk6IHNjcmliZSxcblx0XHRvcHRpb25zPzogQ3VzdG9tTGV2ZWxPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHQpIHtcblx0XHRjb25zdCB7IHNjcmliZSwgdHJhbnNwb3J0cyB9ID0gb3B0aW9ucztcblx0XHRyZXR1cm4gY29uZmlndXJlU2NyaWJlKGZhY3RvcnksIHNjcmliZSwgdHJhbnNwb3J0cyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY29uZmlndXJlU2NyaWJlPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0ZmFjdG9yeTogc2NyaWJlLFxuXHRvcHRpb25zOiBTY3JpYmVPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHRjb25maWc6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuKSB7XG5cdGNvbnN0IGVudmlyb25tZW50ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gRGVmYXVsdEVudmlyb25tZW50O1xuXHRjb25zdCBjb25maWdzID0gQXJyYXkuaXNBcnJheShjb25maWcpID8gY29uZmlnIDogW2NvbmZpZ107XG5cdGNvbnN0IHRyYW5zcG9ydHMgPSBjb25maWdzLmZpbHRlcihcblx0XHQoY29uZmlnKSA9PiAoY29uZmlnLmVudmlyb25tZW50ICYmIGNvbmZpZy5lbnZpcm9ubWVudCA9PT0gZW52aXJvbm1lbnQpIHx8IHRydWUsXG5cdCk7XG5cblx0aWYgKHRyYW5zcG9ydHMubGVuZ3RoID4gMSkge1xuXHRcdHRocm93IG5ldyBMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yKFxuXHRcdFx0YFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBjb25maWd1cmF0aW9uIHBlciBlbnZpcm9ubWVudCBmb3IgbG9nZ2luZ2AsXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuYXQoMCk/LnRyYW5zcG9ydHM7XG5cdGNvbnN0IGFkYXB0ZXIgPSBuZXcgUGlub0FkYXB0ZXIoeyB0cmFuc3BvcnQgfSk7XG5cdHJldHVybiBmYWN0b3J5LmNvbmZpZ3VyZSh7XG5cdFx0b3B0aW9ucyxcblx0XHRhZGFwdGVyLFxuXHR9KTtcbn1cbiJdLCJuYW1lcyI6WyJleHRlbnNpb24iLCJEZWZhdWx0RW52aXJvbm1lbnQiLCJMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yIiwic2NyaWJlIiwiUGlub0FkYXB0ZXIiLCJQaW5vRXh0ZW5zaW9ucyIsIndpdGhQaW5vIiwiZmFjdG9yeSIsImNvbmZpZyIsImxvZ0xldmVsIiwiY29uZmlndXJlU2NyaWJlIiwid2l0aFBpbm9QcmV0dHkiLCJ0cmFuc3BvcnRzIiwidGFyZ2V0Iiwib3B0aW9ucyIsImNvbG9yaXplIiwid2l0aFBpbm9DdXN0b20iLCJlbnZpcm9ubWVudCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImNvbmZpZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJsZW5ndGgiLCJ0cmFuc3BvcnQiLCJhdCIsImFkYXB0ZXIiLCJjb25maWd1cmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLFNBQVNBLFNBQVMsUUFBUSxnQ0FBZ0M7QUFDMUQsU0FBU0Msa0JBQWtCLFFBQTBCLHlCQUF5QjtBQUM5RSxTQUdDQyx5QkFBeUIsRUFFekJDLE1BQU0sUUFDQSxtQkFBbUI7QUFPMUIsU0FBU0MsV0FBVyxRQUFRLHFCQUFxQjtBQXlCakQsT0FBTyxNQUFNQztJQUNaLE9BQ2NDLFNBQ2JDLE9BQWUsRUFDZkMsTUFBMkMsRUFDM0NDLFFBQWlDLEVBQ2hDO1FBQ0QsT0FBT0MsZ0JBQWdCSCxTQUFTO1lBQUVFO1FBQVMsR0FBR0Q7SUFDL0M7SUFFQSxPQUNjRyxlQUFlSixPQUFlLEVBQUVFLFFBQWlDLEVBQUU7UUFDaEYsT0FBT0osZUFBZUMsUUFBUSxDQUM3QkMsU0FDQTtZQUFFSyxZQUFZO2dCQUFFQyxRQUFRO2dCQUFlQyxTQUFTO29CQUFFQyxVQUFVO2dCQUFLO1lBQUU7UUFBRSxHQUNyRU47SUFFRjtJQUVBLE9BQ2NPLGVBQ2JULE9BQWUsRUFDZk8sT0FBMkMsRUFDMUM7UUFDRCxNQUFNLEVBQUVYLE1BQU0sRUFBRVMsVUFBVSxFQUFFLEdBQUdFO1FBQy9CLE9BQU9KLGdCQUFnQkgsU0FBU0osUUFBUVM7SUFDekM7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxTQUFTRixnQkFDUkgsT0FBZSxFQUNmTyxPQUFxQyxFQUNyQ04sTUFBMkM7SUFFM0MsTUFBTVMsY0FBY0MsUUFBUUMsR0FBRyxDQUFDQyxRQUFRLElBQUluQjtJQUM1QyxNQUFNb0IsVUFBVUMsTUFBTUMsT0FBTyxDQUFDZixVQUFVQSxTQUFTO1FBQUNBO0tBQU87SUFDekQsTUFBTUksYUFBYVMsUUFBUUcsTUFBTSxDQUNoQyxDQUFDaEIsU0FBVyxBQUFDQSxPQUFPUyxXQUFXLElBQUlULE9BQU9TLFdBQVcsS0FBS0EsZUFBZ0I7SUFHM0UsSUFBSUwsV0FBV2EsTUFBTSxHQUFHLEdBQUc7UUFDMUIsTUFBTSxJQUFJdkIsMEJBQ1QsQ0FBQyxrRUFBa0UsQ0FBQztJQUV0RTtJQUVBLE1BQU13QixZQUFZZCxXQUFXZSxFQUFFLENBQUMsSUFBSWY7SUFDcEMsTUFBTWdCLFVBQVUsSUFBSXhCLFlBQVk7UUFBRXNCO0lBQVU7SUFDNUMsT0FBT25CLFFBQVFzQixTQUFTLENBQUM7UUFDeEJmO1FBQ0FjO0lBQ0Q7QUFDRCJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decohere/scribe-pino",
|
|
3
|
-
"version": "0.0.1-dev.
|
|
3
|
+
"version": "0.0.1-dev.8",
|
|
4
4
|
"description": "Pino adapter for @decohere/scribe",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -23,21 +23,9 @@
|
|
|
23
23
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@decohere/nexus": "0.0.1-dev.
|
|
27
|
-
"@decohere/scribe": "0.0.1-dev.
|
|
26
|
+
"@decohere/nexus": "0.0.1-dev.8",
|
|
27
|
+
"@decohere/scribe": "0.0.1-dev.8",
|
|
28
28
|
"pino": "^10.3.0"
|
|
29
29
|
},
|
|
30
|
-
"devDependencies": {}
|
|
31
|
-
"peerDependencies": {
|
|
32
|
-
"pino-pretty": "^13.0.0",
|
|
33
|
-
"pino-roll": "^4.0.0"
|
|
34
|
-
},
|
|
35
|
-
"peerDependenciesMeta": {
|
|
36
|
-
"pino-pretty": {
|
|
37
|
-
"optional": true
|
|
38
|
-
},
|
|
39
|
-
"pino-roll": {
|
|
40
|
-
"optional": true
|
|
41
|
-
}
|
|
42
|
-
}
|
|
30
|
+
"devDependencies": {}
|
|
43
31
|
}
|
package/types/src/index.d.ts
CHANGED
|
@@ -8,16 +8,8 @@ export declare class PinoAdapter extends LogAdapter {
|
|
|
8
8
|
private _pino;
|
|
9
9
|
private readonly options;
|
|
10
10
|
private readonly stream;
|
|
11
|
-
private disposed;
|
|
12
|
-
private retired;
|
|
13
11
|
constructor(options: pino.LoggerOptions, stream?: pino.DestinationStream);
|
|
14
12
|
configure<T extends string = never, CustomOnly extends true | false = false>(scribeOptions: ScribeOptions<T, CustomOnly>): void;
|
|
15
13
|
getLogger<T extends string = never, CustomOnly extends true | false = false>(name: string): Logger<T, CustomOnly>;
|
|
16
14
|
flush(cb?: () => void): void;
|
|
17
|
-
/**
|
|
18
|
-
* Immediately stop accepting writes into the destination (ThreadStream).
|
|
19
|
-
* Does not wait for flush — use `stop()` for async drain after retire.
|
|
20
|
-
*/
|
|
21
|
-
retire(): void;
|
|
22
|
-
[Symbol.asyncDispose](): Promise<void>;
|
|
23
15
|
}
|
|
@@ -1,72 +1,24 @@
|
|
|
1
1
|
import { type Environment } from "@decohere/nexus/system";
|
|
2
2
|
import { type DefaultLevels, type Logger, type ScribeOptions, scribe } from "@decohere/scribe";
|
|
3
|
-
import
|
|
4
|
-
import { type PinoPrettyRecipeOptions, type PinoRollRecipeOptions } from "./pino.recipe.js";
|
|
5
|
-
import { type GuardedTransport, guardTransport } from "./pino.transport-guard.js";
|
|
6
|
-
export type { GuardedTransport } from "./pino.transport-guard.js";
|
|
7
|
-
export { guardTransport } from "./pino.transport-guard.js";
|
|
8
|
-
type TransportOptions = TransportSingleOptions | TransportMultiOptions | TransportPipelineOptions;
|
|
3
|
+
import type { TransportMultiOptions, TransportPipelineOptions, TransportSingleOptions } from "pino";
|
|
9
4
|
type TransportConfig = {
|
|
10
5
|
environment?: Environment;
|
|
11
|
-
transports:
|
|
6
|
+
transports: TransportSingleOptions | TransportMultiOptions | TransportPipelineOptions;
|
|
12
7
|
};
|
|
13
8
|
type CustomLevelOptions<T extends string = never, CustomOnly extends true = undefined> = {
|
|
14
9
|
scribe?: ScribeOptions<T, CustomOnly>;
|
|
15
10
|
transports?: TransportConfig | TransportConfig[];
|
|
16
11
|
};
|
|
17
|
-
export type PinoLoggerFactory = (name?: string) => Logger;
|
|
18
|
-
export type PinoRecipeChain = {
|
|
19
|
-
withPinoPretty(logLevelOrOptions?: DefaultLevels | string | PinoPrettyRecipeOptions): PinoRecipe;
|
|
20
|
-
withPinoRoll(options: PinoRollRecipeOptions): PinoRecipe;
|
|
21
|
-
};
|
|
22
|
-
export type PinoRecipe = PinoLoggerFactory & PinoRecipeChain & {
|
|
23
|
-
readonly and: PinoRecipeChain;
|
|
24
|
-
};
|
|
25
12
|
declare module "@decohere/scribe" {
|
|
26
13
|
interface scribe {
|
|
27
|
-
withPino(transports: TransportConfig | TransportConfig[], loglevel?: DefaultLevels | string):
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
* Chain with `.and.withPinoRoll({ file })`. Production writes JSON to stdout
|
|
31
|
-
* so log shipping stays outside the process.
|
|
32
|
-
*/
|
|
33
|
-
withPinoPretty(logLevelOrOptions?: DefaultLevels | string | PinoPrettyRecipeOptions): PinoRecipe;
|
|
34
|
-
/**
|
|
35
|
-
* Rolling log files. Development only unless `{ when: "always" }`.
|
|
36
|
-
* Do not enable in production — ship stdout from a sidecar or platform agent.
|
|
37
|
-
* `symlink` defaults off; enabling it can race under multi-worker / HMR.
|
|
38
|
-
* Ops may override path/size/frequency/keep via `SCRIBE_LOG_FILE`,
|
|
39
|
-
* `SCRIBE_LOG_SIZE`, `SCRIBE_LOG_FREQUENCY`, and `SCRIBE_LOG_KEEP`
|
|
40
|
-
* (file env wins over `options.file`; other explicit options beat env).
|
|
41
|
-
*/
|
|
42
|
-
withPinoRoll(options: PinoRollRecipeOptions): PinoRecipe;
|
|
43
|
-
withPinoCustom<T extends string = never, CustomOnly extends true = undefined>(options?: CustomLevelOptions<T, CustomOnly>): PinoLoggerFactory;
|
|
44
|
-
}
|
|
45
|
-
namespace scribe {
|
|
46
|
-
function withPino(transports: TransportConfig | TransportConfig[], loglevel?: DefaultLevels | string): PinoLoggerFactory;
|
|
47
|
-
function withPinoPretty(logLevelOrOptions?: DefaultLevels | string | PinoPrettyRecipeOptions): PinoRecipe;
|
|
48
|
-
function withPinoRoll(options: PinoRollRecipeOptions): PinoRecipe;
|
|
49
|
-
function withPinoCustom<T extends string = never, CustomOnly extends true = undefined>(options?: CustomLevelOptions<T, CustomOnly>): PinoLoggerFactory;
|
|
14
|
+
withPino(transports: TransportConfig | TransportConfig[], loglevel?: DefaultLevels | string): (name?: string) => Logger;
|
|
15
|
+
withPinoPretty(logLevel?: DefaultLevels | string): (name?: string) => Logger;
|
|
16
|
+
withPinoCustom<T extends string = never, CustomOnly extends true = undefined>(options?: CustomLevelOptions<T, CustomOnly>): (name?: string) => Logger<T, CustomOnly>;
|
|
50
17
|
}
|
|
51
18
|
}
|
|
52
19
|
export declare class PinoExtensions {
|
|
53
20
|
static withPino(factory: scribe, config: TransportConfig | TransportConfig[], logLevel?: DefaultLevels | string): (name?: string) => Logger<never, false>;
|
|
54
|
-
static withPinoPretty(factory: scribe,
|
|
55
|
-
static withPinoRoll(factory: scribe, options: PinoRollRecipeOptions): PinoRecipe;
|
|
21
|
+
static withPinoPretty(factory: scribe, logLevel?: DefaultLevels | string): (name?: string) => Logger<never, false>;
|
|
56
22
|
static withPinoCustom<T extends string = never, CustomOnly extends true = undefined>(factory: scribe, options?: CustomLevelOptions<T, CustomOnly>): (name?: string) => Logger<T, CustomOnly>;
|
|
57
23
|
}
|
|
58
|
-
|
|
59
|
-
* Guard a worker transport so failures (roll EEXIST, worker exit) neither
|
|
60
|
-
* crash the process nor spam stderr on every subsequent log write.
|
|
61
|
-
*/
|
|
62
|
-
declare function createSafeTransport(options: TransportOptions): DestinationStream;
|
|
63
|
-
/** @deprecated Use {@link guardTransport} — kept for callers/tests from the silence-only era. */
|
|
64
|
-
declare function silenceErrors(transport: {
|
|
65
|
-
on(event: "error", listener: (err: Error) => void): unknown;
|
|
66
|
-
write?: (...args: never[]) => unknown;
|
|
67
|
-
}): GuardedTransport;
|
|
68
|
-
export declare const pinoTransport: {
|
|
69
|
-
createSafeTransport: typeof createSafeTransport;
|
|
70
|
-
guardTransport: typeof guardTransport;
|
|
71
|
-
silenceErrors: typeof silenceErrors;
|
|
72
|
-
};
|
|
24
|
+
export {};
|