@decohere/scribe-pino 0.0.1-dev.13 → 0.0.1-dev.131

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,15 @@
1
+ ISC License
2
+
3
+ Copyright (c) 2025-2026 Typesmiths
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -3,6 +3,7 @@ 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);
6
7
  _export_star(require("./scribe-pino.js"), exports);
7
8
  function _export_star(from, to) {
8
9
  Object.keys(from).forEach(function(k) {
@@ -17,5 +18,3 @@ function _export_star(from, to) {
17
18
  });
18
19
  return from;
19
20
  }
20
-
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vcGluby5hZGFwYXRlci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2NyaWJlLXBpbm8uanNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUFjO3FCQUNBIn0=
@@ -19,6 +19,8 @@ class PinoAdapter extends _scribe.LogAdapter {
19
19
  _pino;
20
20
  options;
21
21
  stream;
22
+ disposed = false;
23
+ retired = false;
22
24
  constructor(options, stream){
23
25
  super();
24
26
  this.options = options;
@@ -48,18 +50,136 @@ class PinoAdapter extends _scribe.LogAdapter {
48
50
  return logger;
49
51
  }
50
52
  flush(cb) {
53
+ if (this.retired || !this._pino) {
54
+ cb?.();
55
+ return;
56
+ }
51
57
  this._pino.flush(cb);
52
58
  }
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
+ });
53
169
  }
54
170
  function logMethod(args, method) {
55
171
  let message = args.at(0);
56
172
  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
+ }
57
179
  if (data instanceof Error) {
58
180
  message = {
59
181
  msg: message,
60
- ...{
61
- error: data
62
- }
182
+ error: data
63
183
  };
64
184
  } else if (typeof data === "object") {
65
185
  message = {
@@ -74,15 +194,18 @@ function logMethod(args, method) {
74
194
  }
75
195
  method.call(this, message);
76
196
  }
77
- function pinoMix(logger) {
197
+ /**
198
+ * Add Scribe's logger members to a Pino logger. `spawn` is Pino's own `child`:
199
+ * a Pino child inherits its parent's members through the prototype, so
200
+ * `logger.child` would be the parent's override.
201
+ */ function pinoMix(logger, spawn = logger.child) {
78
202
  return Object.assign(logger, {
79
203
  get currentLevel () {
80
204
  return logger.level;
81
205
  },
82
206
  get logLevels () {
83
207
  return logger.levels.values;
84
- }
208
+ },
209
+ child: (fields)=>pinoMix(spawn.call(logger, fields), spawn)
85
210
  });
86
211
  }
87
-
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5hZGFwYXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIEJhc2VMb2dnZXIsXG5cdExvZ0FkYXB0ZXIsXG5cdHR5cGUgTG9nZ2VyLFxuXHR0eXBlIFNjcmliZU9wdGlvbnMsXG59IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgcGlubywgeyB0eXBlIExvZ0ZuIH0gZnJvbSBcInBpbm9cIjtcblxuZXhwb3J0IHR5cGUgUGlub0FkYXBhdGVyT3B0aW9ucyA9IHtcblx0b3B0aW9ucz86IHBpbm8uTG9nZ2VyT3B0aW9ucztcblx0c3RyZWFtPzogcGluby5EZXN0aW5hdGlvblN0cmVhbTtcbn07XG5cbmV4cG9ydCBjbGFzcyBQaW5vQWRhcHRlciBleHRlbmRzIExvZ0FkYXB0ZXIge1xuXHRwcml2YXRlIF9waW5vOiBwaW5vLkxvZ2dlcjtcblx0cHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnM7XG5cdHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtO1xuXHRwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogcGluby5Mb2dnZXJPcHRpb25zLCBzdHJlYW0/OiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuXHR9XG5cblx0cHVibGljIGNvbmZpZ3VyZTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdFx0c2NyaWJlT3B0aW9uczogU2NyaWJlT3B0aW9uczxULCBDdXN0b21Pbmx5Pixcblx0KSB7XG5cdFx0Y29uc3QgeyBsb2dMZXZlbCwgcmVkYWN0aW9ucyB9ID0gc2NyaWJlT3B0aW9ucztcblx0XHRjb25zdCBjdXN0b21MZXZlbHMgPSB0aGlzLmdldExvZ0xldmVscyhzY3JpYmVPcHRpb25zKTtcblxuXHRcdGNvbnN0IHBpbm9PcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnMgPSB7XG5cdFx0XHRjdXN0b21MZXZlbHMsXG5cdFx0XHRsZXZlbDogbG9nTGV2ZWwsXG5cdFx0XHRob29rczogeyBsb2dNZXRob2QgfSxcblx0XHRcdHNlcmlhbGl6ZXJzOiB7XG5cdFx0XHRcdGVycm9yOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLmVycixcblx0XHRcdH0sXG5cdFx0XHRyZWRhY3Q6IHJlZGFjdGlvbnMsXG5cdFx0XHQuLi50aGlzLm9wdGlvbnMsXG5cdFx0fTtcblx0XHR0aGlzLl9waW5vID0gcGlubyhwaW5vT3B0aW9ucywgdGhpcy5zdHJlYW0pO1xuXHR9XG5cblx0cHVibGljIGdldExvZ2dlcjxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdFx0bmFtZTogc3RyaW5nLFxuXHQpOiBMb2dnZXI8VCwgQ3VzdG9tT25seT4ge1xuXHRcdGNvbnN0IGxvZ2dlciA9IHBpbm9NaXg8VCwgQ3VzdG9tT25seT4odGhpcy5fcGluby5jaGlsZCh7IG5hbWUgfSkpO1xuXHRcdHJldHVybiBsb2dnZXI7XG5cdH1cblxuXHRwdWJsaWMgZmx1c2goY2I/OiAoKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0dGhpcy5fcGluby5mbHVzaChjYik7XG5cdH1cbn1cblxuZnVuY3Rpb24gbG9nTWV0aG9kKHRoaXM6IHBpbm8uTG9nZ2VyLCBhcmdzOiBQYXJhbWV0ZXJzPExvZ0ZuPiwgbWV0aG9kOiBMb2dGbikge1xuXHRsZXQgbWVzc2FnZSA9IGFyZ3MuYXQoMCk7XG5cdGNvbnN0IGRhdGEgPSBhcmdzLmF0KDEpO1xuXG5cdGlmIChkYXRhIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRtZXNzYWdlID0geyBtc2c6IG1lc3NhZ2UsIC4uLnsgZXJyb3I6IGRhdGEgfSB9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCAuLi5kYXRhIH07XG5cdH0gZWxzZSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCBkYXRhIH07XG5cdH1cblxuXHRtZXRob2QuY2FsbCh0aGlzLCBtZXNzYWdlKTtcbn1cblxuZnVuY3Rpb24gcGlub01peDxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdGxvZ2dlcjogcGluby5Mb2dnZXIsXG4pOiBMb2dnZXI8VCwgQ3VzdG9tT25seT4ge1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbjxwaW5vLkxvZ2dlciwgQmFzZUxvZ2dlcj4obG9nZ2VyLCB7XG5cdFx0Z2V0IGN1cnJlbnRMZXZlbCgpIHtcblx0XHRcdHJldHVybiBsb2dnZXIubGV2ZWw7XG5cdFx0fSxcblx0XHRnZXQgbG9nTGV2ZWxzKCkge1xuXHRcdFx0cmV0dXJuIGxvZ2dlci5sZXZlbHMudmFsdWVzO1xuXHRcdH0sXG5cdH0pIGFzIExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcbn1cbiJdLCJuYW1lcyI6WyJQaW5vQWRhcHRlciIsIkxvZ0FkYXB0ZXIiLCJfcGlubyIsIm9wdGlvbnMiLCJzdHJlYW0iLCJjb25maWd1cmUiLCJzY3JpYmVPcHRpb25zIiwibG9nTGV2ZWwiLCJyZWRhY3Rpb25zIiwiY3VzdG9tTGV2ZWxzIiwiZ2V0TG9nTGV2ZWxzIiwicGlub09wdGlvbnMiLCJsZXZlbCIsImhvb2tzIiwibG9nTWV0aG9kIiwic2VyaWFsaXplcnMiLCJlcnJvciIsInBpbm8iLCJzdGRTZXJpYWxpemVycyIsImVyciIsInJlZGFjdCIsImdldExvZ2dlciIsIm5hbWUiLCJsb2dnZXIiLCJwaW5vTWl4IiwiY2hpbGQiLCJmbHVzaCIsImNiIiwiYXJncyIsIm1ldGhvZCIsIm1lc3NhZ2UiLCJhdCIsImRhdGEiLCJFcnJvciIsIm1zZyIsImNhbGwiLCJPYmplY3QiLCJhc3NpZ24iLCJjdXJyZW50TGV2ZWwiLCJsb2dMZXZlbHMiLCJsZXZlbHMiLCJ2YWx1ZXMiXSwibWFwcGluZ3MiOiI7Ozs7K0JBYWFBOzs7ZUFBQUE7Ozt3QkFSTjs2REFDMEI7Ozs7OztBQU8xQixNQUFNQSxvQkFBb0JDLGtCQUFVO0lBQ2xDQyxNQUFtQjtJQUNWQyxRQUE0QjtJQUM1QkMsT0FBK0I7SUFDaEQsWUFBbUJELE9BQTJCLEVBQUVDLE1BQStCLENBQUU7UUFDaEYsS0FBSztRQUNMLElBQUksQ0FBQ0QsT0FBTyxHQUFHQTtRQUNmLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtJQUNmO0lBRU9DLFVBQ05DLGFBQTJDLEVBQzFDO1FBQ0QsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLFVBQVUsRUFBRSxHQUFHRjtRQUNqQyxNQUFNRyxlQUFlLElBQUksQ0FBQ0MsWUFBWSxDQUFDSjtRQUV2QyxNQUFNSyxjQUFrQztZQUN2Q0Y7WUFDQUcsT0FBT0w7WUFDUE0sT0FBTztnQkFBRUM7WUFBVTtZQUNuQkMsYUFBYTtnQkFDWkMsT0FBT0MsYUFBSSxDQUFDQyxjQUFjLENBQUNDLEdBQUc7WUFDL0I7WUFDQUMsUUFBUVo7WUFDUixHQUFHLElBQUksQ0FBQ0wsT0FBTztRQUNoQjtRQUNBLElBQUksQ0FBQ0QsS0FBSyxHQUFHZSxJQUFBQSxhQUFJLEVBQUNOLGFBQWEsSUFBSSxDQUFDUCxNQUFNO0lBQzNDO0lBRU9pQixVQUNOQyxJQUFZLEVBQ1k7UUFDeEIsTUFBTUMsU0FBU0MsUUFBdUIsSUFBSSxDQUFDdEIsS0FBSyxDQUFDdUIsS0FBSyxDQUFDO1lBQUVIO1FBQUs7UUFDOUQsT0FBT0M7SUFDUjtJQUVPRyxNQUFNQyxFQUFlLEVBQVE7UUFDbkMsSUFBSSxDQUFDekIsS0FBSyxDQUFDd0IsS0FBSyxDQUFDQztJQUNsQjtBQUNEO0FBRUEsU0FBU2IsVUFBNkJjLElBQXVCLEVBQUVDLE1BQWE7SUFDM0UsSUFBSUMsVUFBVUYsS0FBS0csRUFBRSxDQUFDO0lBQ3RCLE1BQU1DLE9BQU9KLEtBQUtHLEVBQUUsQ0FBQztJQUVyQixJQUFJQyxnQkFBZ0JDLE9BQU87UUFDMUJILFVBQVU7WUFBRUksS0FBS0o7WUFBUyxHQUFHO2dCQUFFZCxPQUFPZ0I7WUFBSyxDQUFDO1FBQUM7SUFDOUMsT0FBTyxJQUFJLE9BQU9BLFNBQVMsVUFBVTtRQUNwQ0YsVUFBVTtZQUFFSSxLQUFLSjtZQUFTLEdBQUdFLElBQUk7UUFBQztJQUNuQyxPQUFPO1FBQ05GLFVBQVU7WUFBRUksS0FBS0o7WUFBU0U7UUFBSztJQUNoQztJQUVBSCxPQUFPTSxJQUFJLENBQUMsSUFBSSxFQUFFTDtBQUNuQjtBQUVBLFNBQVNOLFFBQ1JELE1BQW1CO0lBRW5CLE9BQU9hLE9BQU9DLE1BQU0sQ0FBMEJkLFFBQVE7UUFDckQsSUFBSWUsZ0JBQWU7WUFDbEIsT0FBT2YsT0FBT1gsS0FBSztRQUNwQjtRQUNBLElBQUkyQixhQUFZO1lBQ2YsT0FBT2hCLE9BQU9pQixNQUFNLENBQUNDLE1BQU07UUFDNUI7SUFDRDtBQUNEIn0=
@@ -0,0 +1,106 @@
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
+ };
@@ -0,0 +1,68 @@
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
+ }
@@ -2,16 +2,35 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "PinoExtensions", {
6
- enumerable: true,
7
- get: function() {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get PinoExtensions () {
8
13
  return PinoExtensions;
14
+ },
15
+ get guardTransport () {
16
+ return _pinotransportguard.guardTransport;
17
+ },
18
+ get pinoTransport () {
19
+ return pinoTransport;
9
20
  }
10
21
  });
11
- const _extensibility = require("@decohere/nexus/extensibility");
12
- const _system = require("@decohere/nexus/system");
22
+ const _extensibility = require("@decohere/core/extensibility");
23
+ const _system = require("@decohere/core/system");
13
24
  const _scribe = require("@decohere/scribe");
25
+ const _pino = /*#__PURE__*/ _interop_require_default(require("pino"));
14
26
  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
+ }
15
34
  function _ts_decorate(decorators, target, key, desc) {
16
35
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
17
36
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -23,27 +42,32 @@ function _ts_metadata(k, v) {
23
42
  }
24
43
  class PinoExtensions {
25
44
  static withPino(factory, config, logLevel) {
26
- return configureScribe(factory, {
45
+ return configureScribe(factory, logLevel != null ? {
27
46
  logLevel
28
- }, config);
47
+ } : undefined, config);
29
48
  }
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);
49
+ static withPinoPretty(factory, logLevelOrOptions) {
50
+ const pretty = parsePrettyArg(logLevelOrOptions);
51
+ return attachRecipe(factory, {
52
+ pretty,
53
+ logLevel: pretty.logLevel
54
+ });
55
+ }
56
+ static withPinoRoll(factory, options) {
57
+ return attachRecipe(factory, {
58
+ roll: options,
59
+ logLevel: options.logLevel
60
+ });
39
61
  }
40
62
  static withPinoCustom(factory, options) {
41
- const { scribe, transports } = options;
63
+ const { scribe, transports } = options ?? {};
42
64
  return configureScribe(factory, scribe, transports);
43
65
  }
44
66
  }
45
67
  _ts_decorate([
46
- (0, _extensibility.extension)(_scribe.scribe),
68
+ (0, _extensibility.extension)(_scribe.scribe, {
69
+ static: true
70
+ }),
47
71
  _ts_metadata("design:type", Function),
48
72
  _ts_metadata("design:paramtypes", [
49
73
  typeof _scribe.scribe === "undefined" ? Object : _scribe.scribe,
@@ -53,7 +77,9 @@ _ts_decorate([
53
77
  _ts_metadata("design:returntype", void 0)
54
78
  ], PinoExtensions, "withPino", null);
55
79
  _ts_decorate([
56
- (0, _extensibility.extension)(_scribe.scribe),
80
+ (0, _extensibility.extension)(_scribe.scribe, {
81
+ static: true
82
+ }),
57
83
  _ts_metadata("design:type", Function),
58
84
  _ts_metadata("design:paramtypes", [
59
85
  typeof _scribe.scribe === "undefined" ? Object : _scribe.scribe,
@@ -62,7 +88,20 @@ _ts_decorate([
62
88
  _ts_metadata("design:returntype", void 0)
63
89
  ], PinoExtensions, "withPinoPretty", null);
64
90
  _ts_decorate([
65
- (0, _extensibility.extension)(_scribe.scribe),
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
+ }),
66
105
  _ts_metadata("design:type", Function),
67
106
  _ts_metadata("design:paramtypes", [
68
107
  typeof _scribe.scribe === "undefined" ? Object : _scribe.scribe,
@@ -70,23 +109,85 @@ _ts_decorate([
70
109
  ]),
71
110
  _ts_metadata("design:returntype", void 0)
72
111
  ], 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
+ }
73
171
  function configureScribe(factory, options, config) {
74
172
  const environment = process.env.NODE_ENV ?? _system.DefaultEnvironment;
75
- const configs = Array.isArray(config) ? config : [
173
+ const configs = (Array.isArray(config) ? config : config != null ? [
76
174
  config
77
- ];
78
- const transports = configs.filter((config)=>config.environment && config.environment === environment || true);
79
- if (transports.length > 1) {
175
+ ] : []).filter((item)=>item.environment == null || item.environment === environment);
176
+ if (configs.length > 1) {
80
177
  throw new _scribe.LoggingConfigurationError(`There should only be one configuration per environment for logging`);
81
178
  }
82
- const transport = transports.at(0)?.transports;
83
- const adapter = new _pinoadapater.PinoAdapter({
84
- transport
85
- });
179
+ const adapter = adapterForTransport(configs.at(0)?.transports);
180
+ // Do not force DefaultLogLevel — that would shadow env resolution in mergeDefaults.
86
181
  return factory.configure({
87
- options,
182
+ options: options ?? {},
88
183
  adapter
89
184
  });
90
185
  }
91
-
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvc2NyaWJlLXBpbm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5zaW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9leHRlbnNpYmlsaXR5XCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnQsIHR5cGUgRW52aXJvbm1lbnQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL3N5c3RlbVwiO1xuaW1wb3J0IHtcblx0dHlwZSBEZWZhdWx0TGV2ZWxzLFxuXHR0eXBlIExvZ2dlcixcblx0TG9nZ2luZ0NvbmZpZ3VyYXRpb25FcnJvcixcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxuXHRzY3JpYmUsXG59IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgdHlwZSB7XG5cdFRyYW5zcG9ydE11bHRpT3B0aW9ucyxcblx0VHJhbnNwb3J0UGlwZWxpbmVPcHRpb25zLFxuXHRUcmFuc3BvcnRTaW5nbGVPcHRpb25zLFxufSBmcm9tIFwicGlub1wiO1xuXG5pbXBvcnQgeyBQaW5vQWRhcHRlciB9IGZyb20gXCIuL3Bpbm8uYWRhcGF0ZXIuanNcIjtcblxudHlwZSBUcmFuc3BvcnRDb25maWcgPSB7XG5cdGVudmlyb25tZW50PzogRW52aXJvbm1lbnQ7XG5cdHRyYW5zcG9ydHM6IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnMgfCBUcmFuc3BvcnRNdWx0aU9wdGlvbnMgfCBUcmFuc3BvcnRQaXBlbGluZU9wdGlvbnM7XG59O1xuXG50eXBlIEN1c3RvbUxldmVsT3B0aW9uczxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPiA9IHtcblx0c2NyaWJlPzogU2NyaWJlT3B0aW9uczxULCBDdXN0b21Pbmx5Pjtcblx0dHJhbnNwb3J0cz86IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdO1xufTtcblxuZGVjbGFyZSBtb2R1bGUgXCJAZGVjb2hlcmUvc2NyaWJlXCIge1xuXHRpbnRlcmZhY2Ugc2NyaWJlIHtcblx0XHR3aXRoUGlubyhcblx0XHRcdHRyYW5zcG9ydHM6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuXHRcdFx0bG9nbGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHRcdCk6IChuYW1lPzogc3RyaW5nKSA9PiBMb2dnZXI7XG5cdFx0d2l0aFBpbm9QcmV0dHkobG9nTGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nKTogKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjtcblx0XHR3aXRoUGlub0N1c3RvbTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPihcblx0XHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdFx0KTogKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgUGlub0V4dGVuc2lvbnMge1xuXHRAZXh0ZW5zaW9uKHNjcmliZSlcblx0cHVibGljIHN0YXRpYyB3aXRoUGlubyhcblx0XHRmYWN0b3J5OiBzY3JpYmUsXG5cdFx0Y29uZmlnOiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcblx0XHRsb2dMZXZlbD86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcsXG5cdCkge1xuXHRcdHJldHVybiBjb25maWd1cmVTY3JpYmUoZmFjdG9yeSwgeyBsb2dMZXZlbCB9LCBjb25maWcpO1xuXHR9XG5cblx0QGV4dGVuc2lvbihzY3JpYmUpXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm9QcmV0dHkoZmFjdG9yeTogc2NyaWJlLCBsb2dMZXZlbD86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gUGlub0V4dGVuc2lvbnMud2l0aFBpbm8oXG5cdFx0XHRmYWN0b3J5LFxuXHRcdFx0eyB0cmFuc3BvcnRzOiB7IHRhcmdldDogXCJwaW5vLXByZXR0eVwiLCBvcHRpb25zOiB7IGNvbG9yaXplOiB0cnVlIH0gfSB9LFxuXHRcdFx0bG9nTGV2ZWwsXG5cdFx0KTtcblx0fVxuXG5cdEBleHRlbnNpb24oc2NyaWJlKVxuXHRwdWJsaWMgc3RhdGljIHdpdGhQaW5vQ3VzdG9tPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgPSB1bmRlZmluZWQ+KFxuXHRcdGZhY3Rvcnk6IHNjcmliZSxcblx0XHRvcHRpb25zPzogQ3VzdG9tTGV2ZWxPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHQpIHtcblx0XHRjb25zdCB7IHNjcmliZSwgdHJhbnNwb3J0cyB9ID0gb3B0aW9ucztcblx0XHRyZXR1cm4gY29uZmlndXJlU2NyaWJlKGZhY3RvcnksIHNjcmliZSwgdHJhbnNwb3J0cyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY29uZmlndXJlU2NyaWJlPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0ZmFjdG9yeTogc2NyaWJlLFxuXHRvcHRpb25zOiBTY3JpYmVPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHRjb25maWc6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuKSB7XG5cdGNvbnN0IGVudmlyb25tZW50ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gRGVmYXVsdEVudmlyb25tZW50O1xuXHRjb25zdCBjb25maWdzID0gQXJyYXkuaXNBcnJheShjb25maWcpID8gY29uZmlnIDogW2NvbmZpZ107XG5cdGNvbnN0IHRyYW5zcG9ydHMgPSBjb25maWdzLmZpbHRlcihcblx0XHQoY29uZmlnKSA9PiAoY29uZmlnLmVudmlyb25tZW50ICYmIGNvbmZpZy5lbnZpcm9ubWVudCA9PT0gZW52aXJvbm1lbnQpIHx8IHRydWUsXG5cdCk7XG5cblx0aWYgKHRyYW5zcG9ydHMubGVuZ3RoID4gMSkge1xuXHRcdHRocm93IG5ldyBMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yKFxuXHRcdFx0YFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBjb25maWd1cmF0aW9uIHBlciBlbnZpcm9ubWVudCBmb3IgbG9nZ2luZ2AsXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuYXQoMCk/LnRyYW5zcG9ydHM7XG5cdGNvbnN0IGFkYXB0ZXIgPSBuZXcgUGlub0FkYXB0ZXIoeyB0cmFuc3BvcnQgfSk7XG5cdHJldHVybiBmYWN0b3J5LmNvbmZpZ3VyZSh7XG5cdFx0b3B0aW9ucyxcblx0XHRhZGFwdGVyLFxuXHR9KTtcbn1cbiJdLCJuYW1lcyI6WyJQaW5vRXh0ZW5zaW9ucyIsIndpdGhQaW5vIiwiZmFjdG9yeSIsImNvbmZpZyIsImxvZ0xldmVsIiwiY29uZmlndXJlU2NyaWJlIiwid2l0aFBpbm9QcmV0dHkiLCJ0cmFuc3BvcnRzIiwidGFyZ2V0Iiwib3B0aW9ucyIsImNvbG9yaXplIiwid2l0aFBpbm9DdXN0b20iLCJzY3JpYmUiLCJlbnZpcm9ubWVudCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIkRlZmF1bHRFbnZpcm9ubWVudCIsImNvbmZpZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJsZW5ndGgiLCJMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yIiwidHJhbnNwb3J0IiwiYXQiLCJhZGFwdGVyIiwiUGlub0FkYXB0ZXIiLCJjb25maWd1cmUiXSwibWFwcGluZ3MiOiI7Ozs7K0JBd0NhQTs7O2VBQUFBOzs7K0JBeENhO3dCQUMyQjt3QkFPOUM7OEJBT3FCOzs7Ozs7Ozs7O0FBeUJyQixNQUFNQTtJQUNaLE9BQ2NDLFNBQ2JDLE9BQWUsRUFDZkMsTUFBMkMsRUFDM0NDLFFBQWlDLEVBQ2hDO1FBQ0QsT0FBT0MsZ0JBQWdCSCxTQUFTO1lBQUVFO1FBQVMsR0FBR0Q7SUFDL0M7SUFFQSxPQUNjRyxlQUFlSixPQUFlLEVBQUVFLFFBQWlDLEVBQUU7UUFDaEYsT0FBT0osZUFBZUMsUUFBUSxDQUM3QkMsU0FDQTtZQUFFSyxZQUFZO2dCQUFFQyxRQUFRO2dCQUFlQyxTQUFTO29CQUFFQyxVQUFVO2dCQUFLO1lBQUU7UUFBRSxHQUNyRU47SUFFRjtJQUVBLE9BQ2NPLGVBQ2JULE9BQWUsRUFDZk8sT0FBMkMsRUFDMUM7UUFDRCxNQUFNLEVBQUVHLE1BQU0sRUFBRUwsVUFBVSxFQUFFLEdBQUdFO1FBQy9CLE9BQU9KLGdCQUFnQkgsU0FBU1UsUUFBUUw7SUFDekM7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxTQUFTRixnQkFDUkgsT0FBZSxFQUNmTyxPQUFxQyxFQUNyQ04sTUFBMkM7SUFFM0MsTUFBTVUsY0FBY0MsUUFBUUMsR0FBRyxDQUFDQyxRQUFRLElBQUlDLDBCQUFrQjtJQUM5RCxNQUFNQyxVQUFVQyxNQUFNQyxPQUFPLENBQUNqQixVQUFVQSxTQUFTO1FBQUNBO0tBQU87SUFDekQsTUFBTUksYUFBYVcsUUFBUUcsTUFBTSxDQUNoQyxDQUFDbEIsU0FBVyxBQUFDQSxPQUFPVSxXQUFXLElBQUlWLE9BQU9VLFdBQVcsS0FBS0EsZUFBZ0I7SUFHM0UsSUFBSU4sV0FBV2UsTUFBTSxHQUFHLEdBQUc7UUFDMUIsTUFBTSxJQUFJQyxpQ0FBeUIsQ0FDbEMsQ0FBQyxrRUFBa0UsQ0FBQztJQUV0RTtJQUVBLE1BQU1DLFlBQVlqQixXQUFXa0IsRUFBRSxDQUFDLElBQUlsQjtJQUNwQyxNQUFNbUIsVUFBVSxJQUFJQyx5QkFBVyxDQUFDO1FBQUVIO0lBQVU7SUFDNUMsT0FBT3RCLFFBQVEwQixTQUFTLENBQUM7UUFDeEJuQjtRQUNBaUI7SUFDRDtBQUNEIn0=
186
+ /** @deprecated Use {@link guardTransport} — kept for callers/tests from the silence-only era. */ function silenceErrors(transport) {
187
+ return (0, _pinotransportguard.guardTransport)(transport);
188
+ }
189
+ const pinoTransport = {
190
+ createSafeTransport,
191
+ guardTransport: _pinotransportguard.guardTransport,
192
+ silenceErrors
193
+ };
package/es6/src/index.js CHANGED
@@ -1,4 +1,3 @@
1
1
  export * from "./pino.adapater.js";
2
+ export * from "./pino.recipe.js";
2
3
  export * from "./scribe-pino.js";
3
-
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vcGluby5hZGFwYXRlci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2NyaWJlLXBpbm8uanNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLG1CQUFtQiJ9