@decohere/scribe-pino 0.0.1-dev.118 → 0.0.1-dev.12
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 +2 -1
- package/commonjs/src/pino.adapater.js +5 -123
- package/commonjs/src/scribe-pino.js +31 -132
- package/es6/src/index.js +2 -1
- package/es6/src/pino.adapater.js +6 -124
- package/es6/src/scribe-pino.js +28 -114
- 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 +8 -56
- package/commonjs/src/pino.recipe.js +0 -106
- package/commonjs/src/pino.transport-guard.js +0 -68
- package/es6/src/pino.recipe.js +0 -96
- package/es6/src/pino.transport-guard.js +0 -61
- package/types/src/pino.recipe.d.ts +0 -45
- package/types/src/pino.transport-guard.d.ts +0 -10
package/commonjs/src/index.js
CHANGED
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
5
|
_export_star(require("./pino.adapater.js"), exports);
|
|
6
|
-
_export_star(require("./pino.recipe.js"), exports);
|
|
7
6
|
_export_star(require("./scribe-pino.js"), exports);
|
|
8
7
|
function _export_star(from, to) {
|
|
9
8
|
Object.keys(from).forEach(function(k) {
|
|
@@ -18,3 +17,5 @@ function _export_star(from, to) {
|
|
|
18
17
|
});
|
|
19
18
|
return from;
|
|
20
19
|
}
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vcGluby5hZGFwYXRlci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2NyaWJlLXBpbm8uanNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUFjO3FCQUNBIn0=
|
|
@@ -19,8 +19,6 @@ class PinoAdapter extends _scribe.LogAdapter {
|
|
|
19
19
|
_pino;
|
|
20
20
|
options;
|
|
21
21
|
stream;
|
|
22
|
-
disposed = false;
|
|
23
|
-
retired = false;
|
|
24
22
|
constructor(options, stream){
|
|
25
23
|
super();
|
|
26
24
|
this.options = options;
|
|
@@ -50,136 +48,18 @@ class PinoAdapter extends _scribe.LogAdapter {
|
|
|
50
48
|
return logger;
|
|
51
49
|
}
|
|
52
50
|
flush(cb) {
|
|
53
|
-
if (this.retired || !this._pino) {
|
|
54
|
-
cb?.();
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
51
|
this._pino.flush(cb);
|
|
58
52
|
}
|
|
59
|
-
/**
|
|
60
|
-
* Immediately stop accepting writes into the destination (ThreadStream).
|
|
61
|
-
* Does not wait for flush — use `stop()` for async drain after retire.
|
|
62
|
-
*/ retire() {
|
|
63
|
-
if (this.retired) {
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
this.retired = true;
|
|
67
|
-
const guarded = this.stream;
|
|
68
|
-
if (typeof guarded?.retire === "function") {
|
|
69
|
-
guarded.retire("adapter retired");
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
destroyDestination(this.stream);
|
|
73
|
-
}
|
|
74
|
-
async [Symbol.asyncDispose]() {
|
|
75
|
-
if (this.disposed) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
this.disposed = true;
|
|
79
|
-
if (!this.retired) {
|
|
80
|
-
const dest = this.stream;
|
|
81
|
-
if (dest != null && typeof dest.end === "function") {
|
|
82
|
-
// pino.transport() is a ThreadStream: pino.flush() → Atomics.waitAsync can
|
|
83
|
-
// hang forever after concurrent writes. end() flushSyncs then signals
|
|
84
|
-
// finish/close (it does not accept a Node Writable callback).
|
|
85
|
-
await endDestination(dest);
|
|
86
|
-
} else if (this._pino) {
|
|
87
|
-
await new Promise((resolve, reject)=>{
|
|
88
|
-
try {
|
|
89
|
-
this._pino.flush((err)=>{
|
|
90
|
-
if (err != null) {
|
|
91
|
-
reject(err);
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
resolve();
|
|
95
|
-
});
|
|
96
|
-
} catch (err) {
|
|
97
|
-
reject(err instanceof Error ? err : new Error(String(err)));
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
// Mark dead after graceful end (or immediately if already force-retired).
|
|
103
|
-
this.retire();
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
function destroyDestination(stream) {
|
|
107
|
-
const destroyable = stream;
|
|
108
|
-
if (typeof destroyable?.destroy === "function") {
|
|
109
|
-
try {
|
|
110
|
-
destroyable.destroy();
|
|
111
|
-
} catch {
|
|
112
|
-
// already dead
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Drain a pino destination.
|
|
118
|
-
*
|
|
119
|
-
* Node `Writable.end(cb)` invokes `cb`. `pino.transport()` returns a
|
|
120
|
-
* ThreadStream whose `end()` takes no callback and signals via `finish`/`close`
|
|
121
|
-
* instead — waiting only on `end(cb)` hangs forever and blocks Flux HMR.
|
|
122
|
-
*/ function endDestination(stream) {
|
|
123
|
-
if (typeof stream.end !== "function") {
|
|
124
|
-
return Promise.resolve();
|
|
125
|
-
}
|
|
126
|
-
if (stream.destroyed || stream.closed || stream.writableFinished) {
|
|
127
|
-
return Promise.resolve();
|
|
128
|
-
}
|
|
129
|
-
return new Promise((resolve, reject)=>{
|
|
130
|
-
let settled = false;
|
|
131
|
-
const settle = (err)=>{
|
|
132
|
-
if (settled) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
settled = true;
|
|
136
|
-
stream.off?.("finish", onFinish);
|
|
137
|
-
stream.off?.("close", onClose);
|
|
138
|
-
stream.off?.("error", onError);
|
|
139
|
-
if (err != null) {
|
|
140
|
-
reject(err);
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
resolve();
|
|
144
|
-
};
|
|
145
|
-
const onFinish = ()=>settle();
|
|
146
|
-
const onClose = ()=>settle();
|
|
147
|
-
const onError = (err)=>{
|
|
148
|
-
// ThreadStream may emit error then close during teardown; closed = done.
|
|
149
|
-
if (stream.destroyed || stream.closed) {
|
|
150
|
-
settle();
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
settle(err);
|
|
154
|
-
};
|
|
155
|
-
stream.once?.("finish", onFinish);
|
|
156
|
-
stream.once?.("close", onClose);
|
|
157
|
-
stream.once?.("error", onError);
|
|
158
|
-
try {
|
|
159
|
-
stream.end((err)=>settle(err));
|
|
160
|
-
} catch (err) {
|
|
161
|
-
settle(err instanceof Error ? err : new Error(String(err)));
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
// ThreadStream.end() is a no-op when already destroyed (no events).
|
|
165
|
-
if (stream.destroyed || stream.closed || stream.writableFinished) {
|
|
166
|
-
settle();
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
53
|
}
|
|
170
54
|
function logMethod(args, method) {
|
|
171
55
|
let message = args.at(0);
|
|
172
56
|
const data = args.at(1);
|
|
173
|
-
if (message instanceof Error) {
|
|
174
|
-
method.call(this, {
|
|
175
|
-
err: message
|
|
176
|
-
}, (0, _scribe.formatError)(message));
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
57
|
if (data instanceof Error) {
|
|
180
58
|
message = {
|
|
181
59
|
msg: message,
|
|
182
|
-
|
|
60
|
+
...{
|
|
61
|
+
error: data
|
|
62
|
+
}
|
|
183
63
|
};
|
|
184
64
|
} else if (typeof data === "object") {
|
|
185
65
|
message = {
|
|
@@ -204,3 +84,5 @@ function pinoMix(logger) {
|
|
|
204
84
|
}
|
|
205
85
|
});
|
|
206
86
|
}
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5hZGFwYXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIEJhc2VMb2dnZXIsXG5cdExvZ0FkYXB0ZXIsXG5cdHR5cGUgTG9nZ2VyLFxuXHR0eXBlIFNjcmliZU9wdGlvbnMsXG59IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgcGlubywgeyB0eXBlIExvZ0ZuIH0gZnJvbSBcInBpbm9cIjtcblxuZXhwb3J0IHR5cGUgUGlub0FkYXBhdGVyT3B0aW9ucyA9IHtcblx0b3B0aW9ucz86IHBpbm8uTG9nZ2VyT3B0aW9ucztcblx0c3RyZWFtPzogcGluby5EZXN0aW5hdGlvblN0cmVhbTtcbn07XG5cbmV4cG9ydCBjbGFzcyBQaW5vQWRhcHRlciBleHRlbmRzIExvZ0FkYXB0ZXIge1xuXHRwcml2YXRlIF9waW5vOiBwaW5vLkxvZ2dlcjtcblx0cHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnM7XG5cdHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtO1xuXHRwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogcGluby5Mb2dnZXJPcHRpb25zLCBzdHJlYW0/OiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuXHR9XG5cblx0cHVibGljIGNvbmZpZ3VyZTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdFx0c2NyaWJlT3B0aW9uczogU2NyaWJlT3B0aW9uczxULCBDdXN0b21Pbmx5Pixcblx0KSB7XG5cdFx0Y29uc3QgeyBsb2dMZXZlbCwgcmVkYWN0aW9ucyB9ID0gc2NyaWJlT3B0aW9ucztcblx0XHRjb25zdCBjdXN0b21MZXZlbHMgPSB0aGlzLmdldExvZ0xldmVscyhzY3JpYmVPcHRpb25zKTtcblxuXHRcdGNvbnN0IHBpbm9PcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnMgPSB7XG5cdFx0XHRjdXN0b21MZXZlbHMsXG5cdFx0XHRsZXZlbDogbG9nTGV2ZWwsXG5cdFx0XHRob29rczogeyBsb2dNZXRob2QgfSxcblx0XHRcdHNlcmlhbGl6ZXJzOiB7XG5cdFx0XHRcdGVycm9yOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLmVycixcblx0XHRcdH0sXG5cdFx0XHRyZWRhY3Q6IHJlZGFjdGlvbnMsXG5cdFx0XHQuLi50aGlzLm9wdGlvbnMsXG5cdFx0fTtcblx0XHR0aGlzLl9waW5vID0gcGlubyhwaW5vT3B0aW9ucywgdGhpcy5zdHJlYW0pO1xuXHR9XG5cblx0cHVibGljIGdldExvZ2dlcjxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdFx0bmFtZTogc3RyaW5nLFxuXHQpOiBMb2dnZXI8VCwgQ3VzdG9tT25seT4ge1xuXHRcdGNvbnN0IGxvZ2dlciA9IHBpbm9NaXg8VCwgQ3VzdG9tT25seT4odGhpcy5fcGluby5jaGlsZCh7IG5hbWUgfSkpO1xuXHRcdHJldHVybiBsb2dnZXI7XG5cdH1cblxuXHRwdWJsaWMgZmx1c2goY2I/OiAoKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0dGhpcy5fcGluby5mbHVzaChjYik7XG5cdH1cbn1cblxuZnVuY3Rpb24gbG9nTWV0aG9kKHRoaXM6IHBpbm8uTG9nZ2VyLCBhcmdzOiBQYXJhbWV0ZXJzPExvZ0ZuPiwgbWV0aG9kOiBMb2dGbikge1xuXHRsZXQgbWVzc2FnZSA9IGFyZ3MuYXQoMCk7XG5cdGNvbnN0IGRhdGEgPSBhcmdzLmF0KDEpO1xuXG5cdGlmIChkYXRhIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRtZXNzYWdlID0geyBtc2c6IG1lc3NhZ2UsIC4uLnsgZXJyb3I6IGRhdGEgfSB9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCAuLi5kYXRhIH07XG5cdH0gZWxzZSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCBkYXRhIH07XG5cdH1cblxuXHRtZXRob2QuY2FsbCh0aGlzLCBtZXNzYWdlKTtcbn1cblxuZnVuY3Rpb24gcGlub01peDxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdGxvZ2dlcjogcGluby5Mb2dnZXIsXG4pOiBMb2dnZXI8VCwgQ3VzdG9tT25seT4ge1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbjxwaW5vLkxvZ2dlciwgQmFzZUxvZ2dlcj4obG9nZ2VyLCB7XG5cdFx0Z2V0IGN1cnJlbnRMZXZlbCgpIHtcblx0XHRcdHJldHVybiBsb2dnZXIubGV2ZWw7XG5cdFx0fSxcblx0XHRnZXQgbG9nTGV2ZWxzKCkge1xuXHRcdFx0cmV0dXJuIGxvZ2dlci5sZXZlbHMudmFsdWVzO1xuXHRcdH0sXG5cdH0pIGFzIExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcbn1cbiJdLCJuYW1lcyI6WyJQaW5vQWRhcHRlciIsIkxvZ0FkYXB0ZXIiLCJfcGlubyIsIm9wdGlvbnMiLCJzdHJlYW0iLCJjb25maWd1cmUiLCJzY3JpYmVPcHRpb25zIiwibG9nTGV2ZWwiLCJyZWRhY3Rpb25zIiwiY3VzdG9tTGV2ZWxzIiwiZ2V0TG9nTGV2ZWxzIiwicGlub09wdGlvbnMiLCJsZXZlbCIsImhvb2tzIiwibG9nTWV0aG9kIiwic2VyaWFsaXplcnMiLCJlcnJvciIsInBpbm8iLCJzdGRTZXJpYWxpemVycyIsImVyciIsInJlZGFjdCIsImdldExvZ2dlciIsIm5hbWUiLCJsb2dnZXIiLCJwaW5vTWl4IiwiY2hpbGQiLCJmbHVzaCIsImNiIiwiYXJncyIsIm1ldGhvZCIsIm1lc3NhZ2UiLCJhdCIsImRhdGEiLCJFcnJvciIsIm1zZyIsImNhbGwiLCJPYmplY3QiLCJhc3NpZ24iLCJjdXJyZW50TGV2ZWwiLCJsb2dMZXZlbHMiLCJsZXZlbHMiLCJ2YWx1ZXMiXSwibWFwcGluZ3MiOiI7Ozs7K0JBYWFBOzs7ZUFBQUE7Ozt3QkFSTjs2REFDMEI7Ozs7OztBQU8xQixNQUFNQSxvQkFBb0JDLGtCQUFVO0lBQ2xDQyxNQUFtQjtJQUNWQyxRQUE0QjtJQUM1QkMsT0FBK0I7SUFDaEQsWUFBbUJELE9BQTJCLEVBQUVDLE1BQStCLENBQUU7UUFDaEYsS0FBSztRQUNMLElBQUksQ0FBQ0QsT0FBTyxHQUFHQTtRQUNmLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtJQUNmO0lBRU9DLFVBQ05DLGFBQTJDLEVBQzFDO1FBQ0QsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLFVBQVUsRUFBRSxHQUFHRjtRQUNqQyxNQUFNRyxlQUFlLElBQUksQ0FBQ0MsWUFBWSxDQUFDSjtRQUV2QyxNQUFNSyxjQUFrQztZQUN2Q0Y7WUFDQUcsT0FBT0w7WUFDUE0sT0FBTztnQkFBRUM7WUFBVTtZQUNuQkMsYUFBYTtnQkFDWkMsT0FBT0MsYUFBSSxDQUFDQyxjQUFjLENBQUNDLEdBQUc7WUFDL0I7WUFDQUMsUUFBUVo7WUFDUixHQUFHLElBQUksQ0FBQ0wsT0FBTztRQUNoQjtRQUNBLElBQUksQ0FBQ0QsS0FBSyxHQUFHZSxJQUFBQSxhQUFJLEVBQUNOLGFBQWEsSUFBSSxDQUFDUCxNQUFNO0lBQzNDO0lBRU9pQixVQUNOQyxJQUFZLEVBQ1k7UUFDeEIsTUFBTUMsU0FBU0MsUUFBdUIsSUFBSSxDQUFDdEIsS0FBSyxDQUFDdUIsS0FBSyxDQUFDO1lBQUVIO1FBQUs7UUFDOUQsT0FBT0M7SUFDUjtJQUVPRyxNQUFNQyxFQUFlLEVBQVE7UUFDbkMsSUFBSSxDQUFDekIsS0FBSyxDQUFDd0IsS0FBSyxDQUFDQztJQUNsQjtBQUNEO0FBRUEsU0FBU2IsVUFBNkJjLElBQXVCLEVBQUVDLE1BQWE7SUFDM0UsSUFBSUMsVUFBVUYsS0FBS0csRUFBRSxDQUFDO0lBQ3RCLE1BQU1DLE9BQU9KLEtBQUtHLEVBQUUsQ0FBQztJQUVyQixJQUFJQyxnQkFBZ0JDLE9BQU87UUFDMUJILFVBQVU7WUFBRUksS0FBS0o7WUFBUyxHQUFHO2dCQUFFZCxPQUFPZ0I7WUFBSyxDQUFDO1FBQUM7SUFDOUMsT0FBTyxJQUFJLE9BQU9BLFNBQVMsVUFBVTtRQUNwQ0YsVUFBVTtZQUFFSSxLQUFLSjtZQUFTLEdBQUdFLElBQUk7UUFBQztJQUNuQyxPQUFPO1FBQ05GLFVBQVU7WUFBRUksS0FBS0o7WUFBU0U7UUFBSztJQUNoQztJQUVBSCxPQUFPTSxJQUFJLENBQUMsSUFBSSxFQUFFTDtBQUNuQjtBQUVBLFNBQVNOLFFBQ1JELE1BQW1CO0lBRW5CLE9BQU9hLE9BQU9DLE1BQU0sQ0FBMEJkLFFBQVE7UUFDckQsSUFBSWUsZ0JBQWU7WUFDbEIsT0FBT2YsT0FBT1gsS0FBSztRQUNwQjtRQUNBLElBQUkyQixhQUFZO1lBQ2YsT0FBT2hCLE9BQU9pQixNQUFNLENBQUNDLE1BQU07UUFDNUI7SUFDRDtBQUNEIn0=
|
|
@@ -2,35 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
get PinoExtensions () {
|
|
5
|
+
Object.defineProperty(exports, "PinoExtensions", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
13
8
|
return PinoExtensions;
|
|
14
|
-
},
|
|
15
|
-
get guardTransport () {
|
|
16
|
-
return _pinotransportguard.guardTransport;
|
|
17
|
-
},
|
|
18
|
-
get pinoTransport () {
|
|
19
|
-
return pinoTransport;
|
|
20
9
|
}
|
|
21
10
|
});
|
|
22
|
-
const _extensibility = require("@decohere/
|
|
23
|
-
const _system = require("@decohere/
|
|
11
|
+
const _extensibility = require("@decohere/nexus/extensibility");
|
|
12
|
+
const _system = require("@decohere/nexus/system");
|
|
24
13
|
const _scribe = require("@decohere/scribe");
|
|
25
|
-
const _pino = /*#__PURE__*/ _interop_require_default(require("pino"));
|
|
26
14
|
const _pinoadapater = require("./pino.adapater.js");
|
|
27
|
-
const _pinorecipe = require("./pino.recipe.js");
|
|
28
|
-
const _pinotransportguard = require("./pino.transport-guard.js");
|
|
29
|
-
function _interop_require_default(obj) {
|
|
30
|
-
return obj && obj.__esModule ? obj : {
|
|
31
|
-
default: obj
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
15
|
function _ts_decorate(decorators, target, key, desc) {
|
|
35
16
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
36
17
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -42,32 +23,27 @@ function _ts_metadata(k, v) {
|
|
|
42
23
|
}
|
|
43
24
|
class PinoExtensions {
|
|
44
25
|
static withPino(factory, config, logLevel) {
|
|
45
|
-
return configureScribe(factory,
|
|
26
|
+
return configureScribe(factory, {
|
|
46
27
|
logLevel
|
|
47
|
-
}
|
|
28
|
+
}, config);
|
|
48
29
|
}
|
|
49
|
-
static withPinoPretty(factory,
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
roll: options,
|
|
59
|
-
logLevel: options.logLevel
|
|
60
|
-
});
|
|
30
|
+
static withPinoPretty(factory, logLevel) {
|
|
31
|
+
return PinoExtensions.withPino(factory, {
|
|
32
|
+
transports: {
|
|
33
|
+
target: "pino-pretty",
|
|
34
|
+
options: {
|
|
35
|
+
colorize: true
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}, logLevel);
|
|
61
39
|
}
|
|
62
40
|
static withPinoCustom(factory, options) {
|
|
63
|
-
const { scribe, transports } = options
|
|
41
|
+
const { scribe, transports } = options;
|
|
64
42
|
return configureScribe(factory, scribe, transports);
|
|
65
43
|
}
|
|
66
44
|
}
|
|
67
45
|
_ts_decorate([
|
|
68
|
-
(0, _extensibility.extension)(_scribe.scribe,
|
|
69
|
-
static: true
|
|
70
|
-
}),
|
|
46
|
+
(0, _extensibility.extension)(_scribe.scribe),
|
|
71
47
|
_ts_metadata("design:type", Function),
|
|
72
48
|
_ts_metadata("design:paramtypes", [
|
|
73
49
|
typeof _scribe.scribe === "undefined" ? Object : _scribe.scribe,
|
|
@@ -77,9 +53,7 @@ _ts_decorate([
|
|
|
77
53
|
_ts_metadata("design:returntype", void 0)
|
|
78
54
|
], PinoExtensions, "withPino", null);
|
|
79
55
|
_ts_decorate([
|
|
80
|
-
(0, _extensibility.extension)(_scribe.scribe,
|
|
81
|
-
static: true
|
|
82
|
-
}),
|
|
56
|
+
(0, _extensibility.extension)(_scribe.scribe),
|
|
83
57
|
_ts_metadata("design:type", Function),
|
|
84
58
|
_ts_metadata("design:paramtypes", [
|
|
85
59
|
typeof _scribe.scribe === "undefined" ? Object : _scribe.scribe,
|
|
@@ -88,20 +62,7 @@ _ts_decorate([
|
|
|
88
62
|
_ts_metadata("design:returntype", void 0)
|
|
89
63
|
], PinoExtensions, "withPinoPretty", null);
|
|
90
64
|
_ts_decorate([
|
|
91
|
-
(0, _extensibility.extension)(_scribe.scribe,
|
|
92
|
-
static: true
|
|
93
|
-
}),
|
|
94
|
-
_ts_metadata("design:type", Function),
|
|
95
|
-
_ts_metadata("design:paramtypes", [
|
|
96
|
-
typeof _scribe.scribe === "undefined" ? Object : _scribe.scribe,
|
|
97
|
-
typeof PinoRollRecipeOptions === "undefined" ? Object : PinoRollRecipeOptions
|
|
98
|
-
]),
|
|
99
|
-
_ts_metadata("design:returntype", void 0)
|
|
100
|
-
], PinoExtensions, "withPinoRoll", null);
|
|
101
|
-
_ts_decorate([
|
|
102
|
-
(0, _extensibility.extension)(_scribe.scribe, {
|
|
103
|
-
static: true
|
|
104
|
-
}),
|
|
65
|
+
(0, _extensibility.extension)(_scribe.scribe),
|
|
105
66
|
_ts_metadata("design:type", Function),
|
|
106
67
|
_ts_metadata("design:paramtypes", [
|
|
107
68
|
typeof _scribe.scribe === "undefined" ? Object : _scribe.scribe,
|
|
@@ -109,85 +70,23 @@ _ts_decorate([
|
|
|
109
70
|
]),
|
|
110
71
|
_ts_metadata("design:returntype", void 0)
|
|
111
72
|
], PinoExtensions, "withPinoCustom", null);
|
|
112
|
-
function parsePrettyArg(logLevelOrOptions) {
|
|
113
|
-
if (logLevelOrOptions == null) {
|
|
114
|
-
return {};
|
|
115
|
-
}
|
|
116
|
-
if (typeof logLevelOrOptions === "string") {
|
|
117
|
-
return {
|
|
118
|
-
logLevel: logLevelOrOptions
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
return logLevelOrOptions;
|
|
122
|
-
}
|
|
123
|
-
function attachRecipe(factory, plan) {
|
|
124
|
-
const loggerFactory = applyRecipe(factory, plan);
|
|
125
|
-
const chain = {
|
|
126
|
-
withPinoPretty (logLevelOrOptions) {
|
|
127
|
-
const pretty = parsePrettyArg(logLevelOrOptions);
|
|
128
|
-
return attachRecipe(factory, {
|
|
129
|
-
...plan,
|
|
130
|
-
pretty: {
|
|
131
|
-
...plan.pretty,
|
|
132
|
-
...pretty
|
|
133
|
-
},
|
|
134
|
-
logLevel: pretty.logLevel ?? plan.logLevel
|
|
135
|
-
});
|
|
136
|
-
},
|
|
137
|
-
withPinoRoll (options) {
|
|
138
|
-
return attachRecipe(factory, {
|
|
139
|
-
...plan,
|
|
140
|
-
roll: options,
|
|
141
|
-
logLevel: options.logLevel ?? plan.logLevel
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
return Object.assign(loggerFactory, chain, {
|
|
146
|
-
and: chain
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Guard a worker transport so failures (roll EEXIST, worker exit) neither
|
|
151
|
-
* crash the process nor spam stderr on every subsequent log write.
|
|
152
|
-
*/ function createSafeTransport(options) {
|
|
153
|
-
return (0, _pinotransportguard.guardTransport)(_pino.default.transport(options));
|
|
154
|
-
}
|
|
155
|
-
function adapterForTransport(transport) {
|
|
156
|
-
if (transport == null) {
|
|
157
|
-
return new _pinoadapater.PinoAdapter({});
|
|
158
|
-
}
|
|
159
|
-
return new _pinoadapater.PinoAdapter({}, createSafeTransport(transport));
|
|
160
|
-
}
|
|
161
|
-
function applyRecipe(factory, plan) {
|
|
162
|
-
const adapter = adapterForTransport(_pinorecipe.pinoRecipe.transport(plan));
|
|
163
|
-
// Omit logLevel when unset so mergeDefaults can read LOG_LEVEL / SCRIBE_LOG_LEVEL.
|
|
164
|
-
return factory.configure({
|
|
165
|
-
options: plan.logLevel != null ? {
|
|
166
|
-
logLevel: plan.logLevel
|
|
167
|
-
} : {},
|
|
168
|
-
adapter
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
73
|
function configureScribe(factory, options, config) {
|
|
172
74
|
const environment = process.env.NODE_ENV ?? _system.DefaultEnvironment;
|
|
173
|
-
const configs =
|
|
75
|
+
const configs = Array.isArray(config) ? config : [
|
|
174
76
|
config
|
|
175
|
-
]
|
|
176
|
-
|
|
77
|
+
];
|
|
78
|
+
const transports = configs.filter((config)=>config.environment && config.environment === environment || true);
|
|
79
|
+
if (transports.length > 1) {
|
|
177
80
|
throw new _scribe.LoggingConfigurationError(`There should only be one configuration per environment for logging`);
|
|
178
81
|
}
|
|
179
|
-
const
|
|
180
|
-
|
|
82
|
+
const transport = transports.at(0)?.transports;
|
|
83
|
+
const adapter = new _pinoadapater.PinoAdapter({
|
|
84
|
+
transport
|
|
85
|
+
});
|
|
181
86
|
return factory.configure({
|
|
182
|
-
options
|
|
87
|
+
options,
|
|
183
88
|
adapter
|
|
184
89
|
});
|
|
185
90
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}
|
|
189
|
-
const pinoTransport = {
|
|
190
|
-
createSafeTransport,
|
|
191
|
-
guardTransport: _pinotransportguard.guardTransport,
|
|
192
|
-
silenceErrors
|
|
193
|
-
};
|
|
91
|
+
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvc2NyaWJlLXBpbm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5zaW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9leHRlbnNpYmlsaXR5XCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnQsIHR5cGUgRW52aXJvbm1lbnQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL3N5c3RlbVwiO1xuaW1wb3J0IHtcblx0dHlwZSBEZWZhdWx0TGV2ZWxzLFxuXHR0eXBlIExvZ2dlcixcblx0TG9nZ2luZ0NvbmZpZ3VyYXRpb25FcnJvcixcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxuXHRzY3JpYmUsXG59IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgdHlwZSB7XG5cdFRyYW5zcG9ydE11bHRpT3B0aW9ucyxcblx0VHJhbnNwb3J0UGlwZWxpbmVPcHRpb25zLFxuXHRUcmFuc3BvcnRTaW5nbGVPcHRpb25zLFxufSBmcm9tIFwicGlub1wiO1xuXG5pbXBvcnQgeyBQaW5vQWRhcHRlciB9IGZyb20gXCIuL3Bpbm8uYWRhcGF0ZXIuanNcIjtcblxudHlwZSBUcmFuc3BvcnRDb25maWcgPSB7XG5cdGVudmlyb25tZW50PzogRW52aXJvbm1lbnQ7XG5cdHRyYW5zcG9ydHM6IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnMgfCBUcmFuc3BvcnRNdWx0aU9wdGlvbnMgfCBUcmFuc3BvcnRQaXBlbGluZU9wdGlvbnM7XG59O1xuXG50eXBlIEN1c3RvbUxldmVsT3B0aW9uczxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPiA9IHtcblx0c2NyaWJlPzogU2NyaWJlT3B0aW9uczxULCBDdXN0b21Pbmx5Pjtcblx0dHJhbnNwb3J0cz86IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdO1xufTtcblxuZGVjbGFyZSBtb2R1bGUgXCJAZGVjb2hlcmUvc2NyaWJlXCIge1xuXHRpbnRlcmZhY2Ugc2NyaWJlIHtcblx0XHR3aXRoUGlubyhcblx0XHRcdHRyYW5zcG9ydHM6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuXHRcdFx0bG9nbGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHRcdCk6IChuYW1lPzogc3RyaW5nKSA9PiBMb2dnZXI7XG5cdFx0d2l0aFBpbm9QcmV0dHkobG9nTGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nKTogKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjtcblx0XHR3aXRoUGlub0N1c3RvbTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPihcblx0XHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdFx0KTogKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgUGlub0V4dGVuc2lvbnMge1xuXHRAZXh0ZW5zaW9uKHNjcmliZSlcblx0cHVibGljIHN0YXRpYyB3aXRoUGlubyhcblx0XHRmYWN0b3J5OiBzY3JpYmUsXG5cdFx0Y29uZmlnOiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcblx0XHRsb2dMZXZlbD86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcsXG5cdCkge1xuXHRcdHJldHVybiBjb25maWd1cmVTY3JpYmUoZmFjdG9yeSwgeyBsb2dMZXZlbCB9LCBjb25maWcpO1xuXHR9XG5cblx0QGV4dGVuc2lvbihzY3JpYmUpXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm9QcmV0dHkoZmFjdG9yeTogc2NyaWJlLCBsb2dMZXZlbD86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gUGlub0V4dGVuc2lvbnMud2l0aFBpbm8oXG5cdFx0XHRmYWN0b3J5LFxuXHRcdFx0eyB0cmFuc3BvcnRzOiB7IHRhcmdldDogXCJwaW5vLXByZXR0eVwiLCBvcHRpb25zOiB7IGNvbG9yaXplOiB0cnVlIH0gfSB9LFxuXHRcdFx0bG9nTGV2ZWwsXG5cdFx0KTtcblx0fVxuXG5cdEBleHRlbnNpb24oc2NyaWJlKVxuXHRwdWJsaWMgc3RhdGljIHdpdGhQaW5vQ3VzdG9tPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgPSB1bmRlZmluZWQ+KFxuXHRcdGZhY3Rvcnk6IHNjcmliZSxcblx0XHRvcHRpb25zPzogQ3VzdG9tTGV2ZWxPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHQpIHtcblx0XHRjb25zdCB7IHNjcmliZSwgdHJhbnNwb3J0cyB9ID0gb3B0aW9ucztcblx0XHRyZXR1cm4gY29uZmlndXJlU2NyaWJlKGZhY3RvcnksIHNjcmliZSwgdHJhbnNwb3J0cyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY29uZmlndXJlU2NyaWJlPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0ZmFjdG9yeTogc2NyaWJlLFxuXHRvcHRpb25zOiBTY3JpYmVPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHRjb25maWc6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuKSB7XG5cdGNvbnN0IGVudmlyb25tZW50ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gRGVmYXVsdEVudmlyb25tZW50O1xuXHRjb25zdCBjb25maWdzID0gQXJyYXkuaXNBcnJheShjb25maWcpID8gY29uZmlnIDogW2NvbmZpZ107XG5cdGNvbnN0IHRyYW5zcG9ydHMgPSBjb25maWdzLmZpbHRlcihcblx0XHQoY29uZmlnKSA9PiAoY29uZmlnLmVudmlyb25tZW50ICYmIGNvbmZpZy5lbnZpcm9ubWVudCA9PT0gZW52aXJvbm1lbnQpIHx8IHRydWUsXG5cdCk7XG5cblx0aWYgKHRyYW5zcG9ydHMubGVuZ3RoID4gMSkge1xuXHRcdHRocm93IG5ldyBMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yKFxuXHRcdFx0YFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBjb25maWd1cmF0aW9uIHBlciBlbnZpcm9ubWVudCBmb3IgbG9nZ2luZ2AsXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuYXQoMCk/LnRyYW5zcG9ydHM7XG5cdGNvbnN0IGFkYXB0ZXIgPSBuZXcgUGlub0FkYXB0ZXIoeyB0cmFuc3BvcnQgfSk7XG5cdHJldHVybiBmYWN0b3J5LmNvbmZpZ3VyZSh7XG5cdFx0b3B0aW9ucyxcblx0XHRhZGFwdGVyLFxuXHR9KTtcbn1cbiJdLCJuYW1lcyI6WyJQaW5vRXh0ZW5zaW9ucyIsIndpdGhQaW5vIiwiZmFjdG9yeSIsImNvbmZpZyIsImxvZ0xldmVsIiwiY29uZmlndXJlU2NyaWJlIiwid2l0aFBpbm9QcmV0dHkiLCJ0cmFuc3BvcnRzIiwidGFyZ2V0Iiwib3B0aW9ucyIsImNvbG9yaXplIiwid2l0aFBpbm9DdXN0b20iLCJzY3JpYmUiLCJlbnZpcm9ubWVudCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIkRlZmF1bHRFbnZpcm9ubWVudCIsImNvbmZpZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJsZW5ndGgiLCJMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yIiwidHJhbnNwb3J0IiwiYXQiLCJhZGFwdGVyIiwiUGlub0FkYXB0ZXIiLCJjb25maWd1cmUiXSwibWFwcGluZ3MiOiI7Ozs7K0JBd0NhQTs7O2VBQUFBOzs7K0JBeENhO3dCQUMyQjt3QkFPOUM7OEJBT3FCOzs7Ozs7Ozs7O0FBeUJyQixNQUFNQTtJQUNaLE9BQ2NDLFNBQ2JDLE9BQWUsRUFDZkMsTUFBMkMsRUFDM0NDLFFBQWlDLEVBQ2hDO1FBQ0QsT0FBT0MsZ0JBQWdCSCxTQUFTO1lBQUVFO1FBQVMsR0FBR0Q7SUFDL0M7SUFFQSxPQUNjRyxlQUFlSixPQUFlLEVBQUVFLFFBQWlDLEVBQUU7UUFDaEYsT0FBT0osZUFBZUMsUUFBUSxDQUM3QkMsU0FDQTtZQUFFSyxZQUFZO2dCQUFFQyxRQUFRO2dCQUFlQyxTQUFTO29CQUFFQyxVQUFVO2dCQUFLO1lBQUU7UUFBRSxHQUNyRU47SUFFRjtJQUVBLE9BQ2NPLGVBQ2JULE9BQWUsRUFDZk8sT0FBMkMsRUFDMUM7UUFDRCxNQUFNLEVBQUVHLE1BQU0sRUFBRUwsVUFBVSxFQUFFLEdBQUdFO1FBQy9CLE9BQU9KLGdCQUFnQkgsU0FBU1UsUUFBUUw7SUFDekM7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxTQUFTRixnQkFDUkgsT0FBZSxFQUNmTyxPQUFxQyxFQUNyQ04sTUFBMkM7SUFFM0MsTUFBTVUsY0FBY0MsUUFBUUMsR0FBRyxDQUFDQyxRQUFRLElBQUlDLDBCQUFrQjtJQUM5RCxNQUFNQyxVQUFVQyxNQUFNQyxPQUFPLENBQUNqQixVQUFVQSxTQUFTO1FBQUNBO0tBQU87SUFDekQsTUFBTUksYUFBYVcsUUFBUUcsTUFBTSxDQUNoQyxDQUFDbEIsU0FBVyxBQUFDQSxPQUFPVSxXQUFXLElBQUlWLE9BQU9VLFdBQVcsS0FBS0EsZUFBZ0I7SUFHM0UsSUFBSU4sV0FBV2UsTUFBTSxHQUFHLEdBQUc7UUFDMUIsTUFBTSxJQUFJQyxpQ0FBeUIsQ0FDbEMsQ0FBQyxrRUFBa0UsQ0FBQztJQUV0RTtJQUVBLE1BQU1DLFlBQVlqQixXQUFXa0IsRUFBRSxDQUFDLElBQUlsQjtJQUNwQyxNQUFNbUIsVUFBVSxJQUFJQyx5QkFBVyxDQUFDO1FBQUVIO0lBQVU7SUFDNUMsT0FBT3RCLFFBQVEwQixTQUFTLENBQUM7UUFDeEJuQjtRQUNBaUI7SUFDRDtBQUNEIn0=
|
package/es6/src/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export * from "./pino.adapater.js";
|
|
2
|
-
export * from "./pino.recipe.js";
|
|
3
2
|
export * from "./scribe-pino.js";
|
|
3
|
+
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vcGluby5hZGFwYXRlci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2NyaWJlLXBpbm8uanNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLG1CQUFtQiJ9
|
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,136 +33,18 @@ 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,
|
|
167
|
-
|
|
45
|
+
...{
|
|
46
|
+
error: data
|
|
47
|
+
}
|
|
168
48
|
};
|
|
169
49
|
} else if (typeof data === "object") {
|
|
170
50
|
message = {
|
|
@@ -189,3 +69,5 @@ function pinoMix(logger) {
|
|
|
189
69
|
}
|
|
190
70
|
});
|
|
191
71
|
}
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5hZGFwYXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIEJhc2VMb2dnZXIsXG5cdExvZ0FkYXB0ZXIsXG5cdHR5cGUgTG9nZ2VyLFxuXHR0eXBlIFNjcmliZU9wdGlvbnMsXG59IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgcGlubywgeyB0eXBlIExvZ0ZuIH0gZnJvbSBcInBpbm9cIjtcblxuZXhwb3J0IHR5cGUgUGlub0FkYXBhdGVyT3B0aW9ucyA9IHtcblx0b3B0aW9ucz86IHBpbm8uTG9nZ2VyT3B0aW9ucztcblx0c3RyZWFtPzogcGluby5EZXN0aW5hdGlvblN0cmVhbTtcbn07XG5cbmV4cG9ydCBjbGFzcyBQaW5vQWRhcHRlciBleHRlbmRzIExvZ0FkYXB0ZXIge1xuXHRwcml2YXRlIF9waW5vOiBwaW5vLkxvZ2dlcjtcblx0cHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnM7XG5cdHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtO1xuXHRwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogcGluby5Mb2dnZXJPcHRpb25zLCBzdHJlYW0/OiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuXHR9XG5cblx0cHVibGljIGNvbmZpZ3VyZTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdFx0c2NyaWJlT3B0aW9uczogU2NyaWJlT3B0aW9uczxULCBDdXN0b21Pbmx5Pixcblx0KSB7XG5cdFx0Y29uc3QgeyBsb2dMZXZlbCwgcmVkYWN0aW9ucyB9ID0gc2NyaWJlT3B0aW9ucztcblx0XHRjb25zdCBjdXN0b21MZXZlbHMgPSB0aGlzLmdldExvZ0xldmVscyhzY3JpYmVPcHRpb25zKTtcblxuXHRcdGNvbnN0IHBpbm9PcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnMgPSB7XG5cdFx0XHRjdXN0b21MZXZlbHMsXG5cdFx0XHRsZXZlbDogbG9nTGV2ZWwsXG5cdFx0XHRob29rczogeyBsb2dNZXRob2QgfSxcblx0XHRcdHNlcmlhbGl6ZXJzOiB7XG5cdFx0XHRcdGVycm9yOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLmVycixcblx0XHRcdH0sXG5cdFx0XHRyZWRhY3Q6IHJlZGFjdGlvbnMsXG5cdFx0XHQuLi50aGlzLm9wdGlvbnMsXG5cdFx0fTtcblx0XHR0aGlzLl9waW5vID0gcGlubyhwaW5vT3B0aW9ucywgdGhpcy5zdHJlYW0pO1xuXHR9XG5cblx0cHVibGljIGdldExvZ2dlcjxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdFx0bmFtZTogc3RyaW5nLFxuXHQpOiBMb2dnZXI8VCwgQ3VzdG9tT25seT4ge1xuXHRcdGNvbnN0IGxvZ2dlciA9IHBpbm9NaXg8VCwgQ3VzdG9tT25seT4odGhpcy5fcGluby5jaGlsZCh7IG5hbWUgfSkpO1xuXHRcdHJldHVybiBsb2dnZXI7XG5cdH1cblxuXHRwdWJsaWMgZmx1c2goY2I/OiAoKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0dGhpcy5fcGluby5mbHVzaChjYik7XG5cdH1cbn1cblxuZnVuY3Rpb24gbG9nTWV0aG9kKHRoaXM6IHBpbm8uTG9nZ2VyLCBhcmdzOiBQYXJhbWV0ZXJzPExvZ0ZuPiwgbWV0aG9kOiBMb2dGbikge1xuXHRsZXQgbWVzc2FnZSA9IGFyZ3MuYXQoMCk7XG5cdGNvbnN0IGRhdGEgPSBhcmdzLmF0KDEpO1xuXG5cdGlmIChkYXRhIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRtZXNzYWdlID0geyBtc2c6IG1lc3NhZ2UsIC4uLnsgZXJyb3I6IGRhdGEgfSB9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCAuLi5kYXRhIH07XG5cdH0gZWxzZSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCBkYXRhIH07XG5cdH1cblxuXHRtZXRob2QuY2FsbCh0aGlzLCBtZXNzYWdlKTtcbn1cblxuZnVuY3Rpb24gcGlub01peDxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdGxvZ2dlcjogcGluby5Mb2dnZXIsXG4pOiBMb2dnZXI8VCwgQ3VzdG9tT25seT4ge1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbjxwaW5vLkxvZ2dlciwgQmFzZUxvZ2dlcj4obG9nZ2VyLCB7XG5cdFx0Z2V0IGN1cnJlbnRMZXZlbCgpIHtcblx0XHRcdHJldHVybiBsb2dnZXIubGV2ZWw7XG5cdFx0fSxcblx0XHRnZXQgbG9nTGV2ZWxzKCkge1xuXHRcdFx0cmV0dXJuIGxvZ2dlci5sZXZlbHMudmFsdWVzO1xuXHRcdH0sXG5cdH0pIGFzIExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcbn1cbiJdLCJuYW1lcyI6WyJMb2dBZGFwdGVyIiwicGlubyIsIlBpbm9BZGFwdGVyIiwiX3Bpbm8iLCJvcHRpb25zIiwic3RyZWFtIiwiY29uZmlndXJlIiwic2NyaWJlT3B0aW9ucyIsImxvZ0xldmVsIiwicmVkYWN0aW9ucyIsImN1c3RvbUxldmVscyIsImdldExvZ0xldmVscyIsInBpbm9PcHRpb25zIiwibGV2ZWwiLCJob29rcyIsImxvZ01ldGhvZCIsInNlcmlhbGl6ZXJzIiwiZXJyb3IiLCJzdGRTZXJpYWxpemVycyIsImVyciIsInJlZGFjdCIsImdldExvZ2dlciIsIm5hbWUiLCJsb2dnZXIiLCJwaW5vTWl4IiwiY2hpbGQiLCJmbHVzaCIsImNiIiwiYXJncyIsIm1ldGhvZCIsIm1lc3NhZ2UiLCJhdCIsImRhdGEiLCJFcnJvciIsIm1zZyIsImNhbGwiLCJPYmplY3QiLCJhc3NpZ24iLCJjdXJyZW50TGV2ZWwiLCJsb2dMZXZlbHMiLCJsZXZlbHMiLCJ2YWx1ZXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBRUNBLFVBQVUsUUFHSixtQkFBbUI7QUFDMUIsT0FBT0MsVUFBMEIsT0FBTztBQU94QyxPQUFPLE1BQU1DLG9CQUFvQkY7SUFDeEJHLE1BQW1CO0lBQ1ZDLFFBQTRCO0lBQzVCQyxPQUErQjtJQUNoRCxZQUFtQkQsT0FBMkIsRUFBRUMsTUFBK0IsQ0FBRTtRQUNoRixLQUFLO1FBQ0wsSUFBSSxDQUFDRCxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO0lBQ2Y7SUFFT0MsVUFDTkMsYUFBMkMsRUFDMUM7UUFDRCxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsVUFBVSxFQUFFLEdBQUdGO1FBQ2pDLE1BQU1HLGVBQWUsSUFBSSxDQUFDQyxZQUFZLENBQUNKO1FBRXZDLE1BQU1LLGNBQWtDO1lBQ3ZDRjtZQUNBRyxPQUFPTDtZQUNQTSxPQUFPO2dCQUFFQztZQUFVO1lBQ25CQyxhQUFhO2dCQUNaQyxPQUFPaEIsS0FBS2lCLGNBQWMsQ0FBQ0MsR0FBRztZQUMvQjtZQUNBQyxRQUFRWDtZQUNSLEdBQUcsSUFBSSxDQUFDTCxPQUFPO1FBQ2hCO1FBQ0EsSUFBSSxDQUFDRCxLQUFLLEdBQUdGLEtBQUtXLGFBQWEsSUFBSSxDQUFDUCxNQUFNO0lBQzNDO0lBRU9nQixVQUNOQyxJQUFZLEVBQ1k7UUFDeEIsTUFBTUMsU0FBU0MsUUFBdUIsSUFBSSxDQUFDckIsS0FBSyxDQUFDc0IsS0FBSyxDQUFDO1lBQUVIO1FBQUs7UUFDOUQsT0FBT0M7SUFDUjtJQUVPRyxNQUFNQyxFQUFlLEVBQVE7UUFDbkMsSUFBSSxDQUFDeEIsS0FBSyxDQUFDdUIsS0FBSyxDQUFDQztJQUNsQjtBQUNEO0FBRUEsU0FBU1osVUFBNkJhLElBQXVCLEVBQUVDLE1BQWE7SUFDM0UsSUFBSUMsVUFBVUYsS0FBS0csRUFBRSxDQUFDO0lBQ3RCLE1BQU1DLE9BQU9KLEtBQUtHLEVBQUUsQ0FBQztJQUVyQixJQUFJQyxnQkFBZ0JDLE9BQU87UUFDMUJILFVBQVU7WUFBRUksS0FBS0o7WUFBUyxHQUFHO2dCQUFFYixPQUFPZTtZQUFLLENBQUM7UUFBQztJQUM5QyxPQUFPLElBQUksT0FBT0EsU0FBUyxVQUFVO1FBQ3BDRixVQUFVO1lBQUVJLEtBQUtKO1lBQVMsR0FBR0UsSUFBSTtRQUFDO0lBQ25DLE9BQU87UUFDTkYsVUFBVTtZQUFFSSxLQUFLSjtZQUFTRTtRQUFLO0lBQ2hDO0lBRUFILE9BQU9NLElBQUksQ0FBQyxJQUFJLEVBQUVMO0FBQ25CO0FBRUEsU0FBU04sUUFDUkQsTUFBbUI7SUFFbkIsT0FBT2EsT0FBT0MsTUFBTSxDQUEwQmQsUUFBUTtRQUNyRCxJQUFJZSxnQkFBZTtZQUNsQixPQUFPZixPQUFPVixLQUFLO1FBQ3BCO1FBQ0EsSUFBSTBCLGFBQVk7WUFDZixPQUFPaEIsT0FBT2lCLE1BQU0sQ0FBQ0MsTUFBTTtRQUM1QjtJQUNEO0FBQ0QifQ==
|
package/es6/src/scribe-pino.js
CHANGED
|
@@ -7,42 +7,33 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
7
7
|
function _ts_metadata(k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
}
|
|
10
|
-
import { extension } from "@decohere/
|
|
11
|
-
import { DefaultEnvironment } from "@decohere/
|
|
10
|
+
import { extension } from "@decohere/nexus/extensibility";
|
|
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,85 +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
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
export const pinoTransport = {
|
|
165
|
-
createSafeTransport,
|
|
166
|
-
guardTransport,
|
|
167
|
-
silenceErrors
|
|
168
|
-
};
|
|
81
|
+
|
|
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.12",
|
|
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/
|
|
27
|
-
"@decohere/scribe": "0.0.1-dev.
|
|
26
|
+
"@decohere/nexus": "0.0.1-dev.12",
|
|
27
|
+
"@decohere/scribe": "0.0.1-dev.12",
|
|
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
|
-
import { type Environment } from "@decohere/
|
|
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 {};
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "pinoRecipe", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return pinoRecipe;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _system = require("@decohere/core/system");
|
|
12
|
-
const DEFAULT_ROLL_SIZE = "10m";
|
|
13
|
-
const DEFAULT_ROLL_FREQUENCY = "daily";
|
|
14
|
-
const DEFAULT_ROLL_KEEP = 14;
|
|
15
|
-
const ENV_LOG_FILE = "SCRIBE_LOG_FILE";
|
|
16
|
-
const ENV_LOG_SIZE = "SCRIBE_LOG_SIZE";
|
|
17
|
-
const ENV_LOG_FREQUENCY = "SCRIBE_LOG_FREQUENCY";
|
|
18
|
-
const ENV_LOG_KEEP = "SCRIBE_LOG_KEEP";
|
|
19
|
-
function currentEnvironment() {
|
|
20
|
-
return process.env.NODE_ENV === _system.Environments.production ? _system.Environments.production : _system.Environments.development;
|
|
21
|
-
}
|
|
22
|
-
function isEnabled(when, environment) {
|
|
23
|
-
return (when ?? "development") === "always" || environment === _system.Environments.development;
|
|
24
|
-
}
|
|
25
|
-
function envString(name) {
|
|
26
|
-
const value = process.env[name]?.trim();
|
|
27
|
-
return value ? value : undefined;
|
|
28
|
-
}
|
|
29
|
-
function envFrequency() {
|
|
30
|
-
const raw = envString(ENV_LOG_FREQUENCY);
|
|
31
|
-
if (raw == null) {
|
|
32
|
-
return undefined;
|
|
33
|
-
}
|
|
34
|
-
if (/^\d+$/.test(raw)) {
|
|
35
|
-
return Number(raw);
|
|
36
|
-
}
|
|
37
|
-
return raw;
|
|
38
|
-
}
|
|
39
|
-
function envKeep() {
|
|
40
|
-
const raw = envString(ENV_LOG_KEEP);
|
|
41
|
-
if (raw == null) {
|
|
42
|
-
return undefined;
|
|
43
|
-
}
|
|
44
|
-
const keep = Number(raw);
|
|
45
|
-
return Number.isFinite(keep) && keep >= 0 ? keep : undefined;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Resolve roll options. `SCRIBE_LOG_FILE` overrides `file` so ops can redirect
|
|
49
|
-
* without touching app code. Size / frequency / keep: explicit > env > default.
|
|
50
|
-
*/ function resolveRoll(options) {
|
|
51
|
-
return {
|
|
52
|
-
file: envString(ENV_LOG_FILE) ?? options.file,
|
|
53
|
-
size: options.size ?? envString(ENV_LOG_SIZE) ?? DEFAULT_ROLL_SIZE,
|
|
54
|
-
frequency: options.frequency ?? envFrequency() ?? DEFAULT_ROLL_FREQUENCY,
|
|
55
|
-
keep: options.keep ?? envKeep() ?? DEFAULT_ROLL_KEEP,
|
|
56
|
-
mkdir: options.mkdir ?? true,
|
|
57
|
-
symlink: options.symlink ?? false
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
function prettyTarget(options) {
|
|
61
|
-
return {
|
|
62
|
-
target: "pino-pretty",
|
|
63
|
-
options: {
|
|
64
|
-
colorize: options.colorize ?? true
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function rollTarget(options) {
|
|
69
|
-
const roll = resolveRoll(options);
|
|
70
|
-
return {
|
|
71
|
-
target: "pino-roll",
|
|
72
|
-
options: {
|
|
73
|
-
file: roll.file,
|
|
74
|
-
mkdir: roll.mkdir,
|
|
75
|
-
size: roll.size,
|
|
76
|
-
frequency: roll.frequency,
|
|
77
|
-
limit: {
|
|
78
|
-
count: roll.keep
|
|
79
|
-
},
|
|
80
|
-
symlink: roll.symlink
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
function transport(plan, environment = currentEnvironment()) {
|
|
85
|
-
const targets = [];
|
|
86
|
-
if (plan.pretty && isEnabled(plan.pretty.when, environment)) {
|
|
87
|
-
targets.push(prettyTarget(plan.pretty));
|
|
88
|
-
}
|
|
89
|
-
if (plan.roll && isEnabled(plan.roll.when, environment)) {
|
|
90
|
-
targets.push(rollTarget(plan.roll));
|
|
91
|
-
}
|
|
92
|
-
if (targets.length === 0) {
|
|
93
|
-
return undefined;
|
|
94
|
-
}
|
|
95
|
-
if (targets.length === 1) {
|
|
96
|
-
return targets[0];
|
|
97
|
-
}
|
|
98
|
-
return {
|
|
99
|
-
targets
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
const pinoRecipe = {
|
|
103
|
-
transport,
|
|
104
|
-
currentEnvironment,
|
|
105
|
-
resolveRoll
|
|
106
|
-
};
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "guardTransport", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return guardTransport;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
function guardTransport(transport) {
|
|
12
|
-
const stream = transport;
|
|
13
|
-
let retired = false;
|
|
14
|
-
let reported = false;
|
|
15
|
-
const retire = (reason = "retired")=>{
|
|
16
|
-
if (retired) {
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
retired = true;
|
|
20
|
-
if (!reported) {
|
|
21
|
-
reported = true;
|
|
22
|
-
process.stderr.write(`[scribe-pino] transport retired: ${reason}\n`);
|
|
23
|
-
}
|
|
24
|
-
if (typeof stream.destroy === "function") {
|
|
25
|
-
try {
|
|
26
|
-
stream.destroy();
|
|
27
|
-
} catch {
|
|
28
|
-
// already dead
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
if (typeof stream.on === "function") {
|
|
33
|
-
stream.on("error", (err)=>{
|
|
34
|
-
retire(err?.message ?? String(err));
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
if (typeof stream.write === "function") {
|
|
38
|
-
const originalWrite = stream.write.bind(stream);
|
|
39
|
-
stream.write = (chunk, encodingOrCb, cb)=>{
|
|
40
|
-
if (retired) {
|
|
41
|
-
completeWrite(encodingOrCb, cb);
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
try {
|
|
45
|
-
return originalWrite(chunk, encodingOrCb, cb);
|
|
46
|
-
} catch (err) {
|
|
47
|
-
retire(err instanceof Error ? err.message : String(err));
|
|
48
|
-
completeWrite(encodingOrCb, cb);
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
Object.defineProperty(stream, "retired", {
|
|
54
|
-
get: ()=>retired,
|
|
55
|
-
enumerable: true
|
|
56
|
-
});
|
|
57
|
-
Object.defineProperty(stream, "retire", {
|
|
58
|
-
value: retire,
|
|
59
|
-
enumerable: true
|
|
60
|
-
});
|
|
61
|
-
return stream;
|
|
62
|
-
}
|
|
63
|
-
function completeWrite(encodingOrCb, cb) {
|
|
64
|
-
const done = typeof encodingOrCb === "function" ? encodingOrCb : typeof cb === "function" ? cb : undefined;
|
|
65
|
-
if (typeof done === "function") {
|
|
66
|
-
done();
|
|
67
|
-
}
|
|
68
|
-
}
|
package/es6/src/pino.recipe.js
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { Environments } from "@decohere/core/system";
|
|
2
|
-
const DEFAULT_ROLL_SIZE = "10m";
|
|
3
|
-
const DEFAULT_ROLL_FREQUENCY = "daily";
|
|
4
|
-
const DEFAULT_ROLL_KEEP = 14;
|
|
5
|
-
const ENV_LOG_FILE = "SCRIBE_LOG_FILE";
|
|
6
|
-
const ENV_LOG_SIZE = "SCRIBE_LOG_SIZE";
|
|
7
|
-
const ENV_LOG_FREQUENCY = "SCRIBE_LOG_FREQUENCY";
|
|
8
|
-
const ENV_LOG_KEEP = "SCRIBE_LOG_KEEP";
|
|
9
|
-
function currentEnvironment() {
|
|
10
|
-
return process.env.NODE_ENV === Environments.production ? Environments.production : Environments.development;
|
|
11
|
-
}
|
|
12
|
-
function isEnabled(when, environment) {
|
|
13
|
-
return (when ?? "development") === "always" || environment === Environments.development;
|
|
14
|
-
}
|
|
15
|
-
function envString(name) {
|
|
16
|
-
const value = process.env[name]?.trim();
|
|
17
|
-
return value ? value : undefined;
|
|
18
|
-
}
|
|
19
|
-
function envFrequency() {
|
|
20
|
-
const raw = envString(ENV_LOG_FREQUENCY);
|
|
21
|
-
if (raw == null) {
|
|
22
|
-
return undefined;
|
|
23
|
-
}
|
|
24
|
-
if (/^\d+$/.test(raw)) {
|
|
25
|
-
return Number(raw);
|
|
26
|
-
}
|
|
27
|
-
return raw;
|
|
28
|
-
}
|
|
29
|
-
function envKeep() {
|
|
30
|
-
const raw = envString(ENV_LOG_KEEP);
|
|
31
|
-
if (raw == null) {
|
|
32
|
-
return undefined;
|
|
33
|
-
}
|
|
34
|
-
const keep = Number(raw);
|
|
35
|
-
return Number.isFinite(keep) && keep >= 0 ? keep : undefined;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Resolve roll options. `SCRIBE_LOG_FILE` overrides `file` so ops can redirect
|
|
39
|
-
* without touching app code. Size / frequency / keep: explicit > env > default.
|
|
40
|
-
*/ function resolveRoll(options) {
|
|
41
|
-
return {
|
|
42
|
-
file: envString(ENV_LOG_FILE) ?? options.file,
|
|
43
|
-
size: options.size ?? envString(ENV_LOG_SIZE) ?? DEFAULT_ROLL_SIZE,
|
|
44
|
-
frequency: options.frequency ?? envFrequency() ?? DEFAULT_ROLL_FREQUENCY,
|
|
45
|
-
keep: options.keep ?? envKeep() ?? DEFAULT_ROLL_KEEP,
|
|
46
|
-
mkdir: options.mkdir ?? true,
|
|
47
|
-
symlink: options.symlink ?? false
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
function prettyTarget(options) {
|
|
51
|
-
return {
|
|
52
|
-
target: "pino-pretty",
|
|
53
|
-
options: {
|
|
54
|
-
colorize: options.colorize ?? true
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
function rollTarget(options) {
|
|
59
|
-
const roll = resolveRoll(options);
|
|
60
|
-
return {
|
|
61
|
-
target: "pino-roll",
|
|
62
|
-
options: {
|
|
63
|
-
file: roll.file,
|
|
64
|
-
mkdir: roll.mkdir,
|
|
65
|
-
size: roll.size,
|
|
66
|
-
frequency: roll.frequency,
|
|
67
|
-
limit: {
|
|
68
|
-
count: roll.keep
|
|
69
|
-
},
|
|
70
|
-
symlink: roll.symlink
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
function transport(plan, environment = currentEnvironment()) {
|
|
75
|
-
const targets = [];
|
|
76
|
-
if (plan.pretty && isEnabled(plan.pretty.when, environment)) {
|
|
77
|
-
targets.push(prettyTarget(plan.pretty));
|
|
78
|
-
}
|
|
79
|
-
if (plan.roll && isEnabled(plan.roll.when, environment)) {
|
|
80
|
-
targets.push(rollTarget(plan.roll));
|
|
81
|
-
}
|
|
82
|
-
if (targets.length === 0) {
|
|
83
|
-
return undefined;
|
|
84
|
-
}
|
|
85
|
-
if (targets.length === 1) {
|
|
86
|
-
return targets[0];
|
|
87
|
-
}
|
|
88
|
-
return {
|
|
89
|
-
targets
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
export const pinoRecipe = {
|
|
93
|
-
transport,
|
|
94
|
-
currentEnvironment,
|
|
95
|
-
resolveRoll
|
|
96
|
-
};
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Wrap a pino worker transport so a dead ThreadStream cannot spam or crash.
|
|
3
|
-
* On first error / write throw: report once, destroy, no-op further writes.
|
|
4
|
-
*/ export function guardTransport(transport) {
|
|
5
|
-
const stream = transport;
|
|
6
|
-
let retired = false;
|
|
7
|
-
let reported = false;
|
|
8
|
-
const retire = (reason = "retired")=>{
|
|
9
|
-
if (retired) {
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
retired = true;
|
|
13
|
-
if (!reported) {
|
|
14
|
-
reported = true;
|
|
15
|
-
process.stderr.write(`[scribe-pino] transport retired: ${reason}\n`);
|
|
16
|
-
}
|
|
17
|
-
if (typeof stream.destroy === "function") {
|
|
18
|
-
try {
|
|
19
|
-
stream.destroy();
|
|
20
|
-
} catch {
|
|
21
|
-
// already dead
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
if (typeof stream.on === "function") {
|
|
26
|
-
stream.on("error", (err)=>{
|
|
27
|
-
retire(err?.message ?? String(err));
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
if (typeof stream.write === "function") {
|
|
31
|
-
const originalWrite = stream.write.bind(stream);
|
|
32
|
-
stream.write = (chunk, encodingOrCb, cb)=>{
|
|
33
|
-
if (retired) {
|
|
34
|
-
completeWrite(encodingOrCb, cb);
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
try {
|
|
38
|
-
return originalWrite(chunk, encodingOrCb, cb);
|
|
39
|
-
} catch (err) {
|
|
40
|
-
retire(err instanceof Error ? err.message : String(err));
|
|
41
|
-
completeWrite(encodingOrCb, cb);
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
Object.defineProperty(stream, "retired", {
|
|
47
|
-
get: ()=>retired,
|
|
48
|
-
enumerable: true
|
|
49
|
-
});
|
|
50
|
-
Object.defineProperty(stream, "retire", {
|
|
51
|
-
value: retire,
|
|
52
|
-
enumerable: true
|
|
53
|
-
});
|
|
54
|
-
return stream;
|
|
55
|
-
}
|
|
56
|
-
function completeWrite(encodingOrCb, cb) {
|
|
57
|
-
const done = typeof encodingOrCb === "function" ? encodingOrCb : typeof cb === "function" ? cb : undefined;
|
|
58
|
-
if (typeof done === "function") {
|
|
59
|
-
done();
|
|
60
|
-
}
|
|
61
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { type Environment } from "@decohere/core/system";
|
|
2
|
-
import type { TransportMultiOptions, TransportSingleOptions } from "pino";
|
|
3
|
-
/** Pretty and roll are local-dev conveniences. Production ships JSON on stdout. */
|
|
4
|
-
export type PinoWhen = "development" | "always";
|
|
5
|
-
export type PinoPrettyRecipeOptions = {
|
|
6
|
-
colorize?: boolean;
|
|
7
|
-
logLevel?: string;
|
|
8
|
-
when?: PinoWhen;
|
|
9
|
-
};
|
|
10
|
-
export type PinoRollRecipeOptions = {
|
|
11
|
-
/** Default roll path. Overridden at runtime by `SCRIBE_LOG_FILE` when set. */
|
|
12
|
-
file: string;
|
|
13
|
-
size?: string;
|
|
14
|
-
frequency?: string | number;
|
|
15
|
-
keep?: number;
|
|
16
|
-
mkdir?: boolean;
|
|
17
|
-
symlink?: boolean;
|
|
18
|
-
logLevel?: string;
|
|
19
|
-
when?: PinoWhen;
|
|
20
|
-
};
|
|
21
|
-
export type PinoRecipePlan = {
|
|
22
|
-
pretty?: PinoPrettyRecipeOptions;
|
|
23
|
-
roll?: PinoRollRecipeOptions;
|
|
24
|
-
logLevel?: string;
|
|
25
|
-
};
|
|
26
|
-
declare function currentEnvironment(): Environment;
|
|
27
|
-
/**
|
|
28
|
-
* Resolve roll options. `SCRIBE_LOG_FILE` overrides `file` so ops can redirect
|
|
29
|
-
* without touching app code. Size / frequency / keep: explicit > env > default.
|
|
30
|
-
*/
|
|
31
|
-
declare function resolveRoll(options: PinoRollRecipeOptions): {
|
|
32
|
-
file: string;
|
|
33
|
-
size: string;
|
|
34
|
-
frequency: string | number;
|
|
35
|
-
keep: number;
|
|
36
|
-
mkdir: boolean;
|
|
37
|
-
symlink: boolean;
|
|
38
|
-
};
|
|
39
|
-
declare function transport(plan: PinoRecipePlan, environment?: Environment): TransportSingleOptions | TransportMultiOptions | undefined;
|
|
40
|
-
export declare const pinoRecipe: {
|
|
41
|
-
transport: typeof transport;
|
|
42
|
-
currentEnvironment: typeof currentEnvironment;
|
|
43
|
-
resolveRoll: typeof resolveRoll;
|
|
44
|
-
};
|
|
45
|
-
export {};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { DestinationStream } from "pino";
|
|
2
|
-
export type GuardedTransport = DestinationStream & {
|
|
3
|
-
readonly retired: boolean;
|
|
4
|
-
retire(reason?: string): void;
|
|
5
|
-
};
|
|
6
|
-
/**
|
|
7
|
-
* Wrap a pino worker transport so a dead ThreadStream cannot spam or crash.
|
|
8
|
-
* On first error / write throw: report once, destroy, no-op further writes.
|
|
9
|
-
*/
|
|
10
|
-
export declare function guardTransport(transport: DestinationStream): GuardedTransport;
|