@decohere/scribe-pino 0.0.1-dev.69 → 0.0.1-dev.70

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.
@@ -20,6 +20,7 @@ class PinoAdapter extends _scribe.LogAdapter {
20
20
  options;
21
21
  stream;
22
22
  disposed = false;
23
+ retired = false;
23
24
  constructor(options, stream){
24
25
  super();
25
26
  this.options = options;
@@ -49,19 +50,56 @@ class PinoAdapter extends _scribe.LogAdapter {
49
50
  return logger;
50
51
  }
51
52
  flush(cb) {
53
+ if (this.retired || !this._pino) {
54
+ cb?.();
55
+ return;
56
+ }
52
57
  this._pino.flush(cb);
53
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
+ }
54
74
  async [Symbol.asyncDispose]() {
55
75
  if (this.disposed) {
56
76
  return;
57
77
  }
58
78
  this.disposed = true;
59
- if (this._pino) {
79
+ if (this._pino && !this.retired) {
60
80
  await new Promise((resolve)=>{
61
- this._pino.flush(()=>resolve());
81
+ try {
82
+ this._pino.flush(()=>resolve());
83
+ } catch {
84
+ resolve();
85
+ }
62
86
  });
63
87
  }
64
- await endDestination(this.stream);
88
+ if (!this.retired) {
89
+ await endDestination(this.stream);
90
+ }
91
+ // Mark dead after graceful end (or immediately if already force-retired).
92
+ this.retire();
93
+ }
94
+ }
95
+ function destroyDestination(stream) {
96
+ const destroyable = stream;
97
+ if (typeof destroyable?.destroy === "function") {
98
+ try {
99
+ destroyable.destroy();
100
+ } catch {
101
+ // already dead
102
+ }
65
103
  }
66
104
  }
67
105
  function endDestination(stream) {
@@ -117,4 +155,4 @@ function pinoMix(logger) {
117
155
  });
118
156
  }
119
157
 
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5hZGFwYXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIEJhc2VMb2dnZXIsXG5cdGZvcm1hdEVycm9yLFxuXHRMb2dBZGFwdGVyLFxuXHR0eXBlIExvZ2dlcixcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxufSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHBpbm8sIHsgdHlwZSBMb2dGbiB9IGZyb20gXCJwaW5vXCI7XG5cbmV4cG9ydCB0eXBlIFBpbm9BZGFwYXRlck9wdGlvbnMgPSB7XG5cdG9wdGlvbnM/OiBwaW5vLkxvZ2dlck9wdGlvbnM7XG5cdHN0cmVhbT86IHBpbm8uRGVzdGluYXRpb25TdHJlYW07XG59O1xuXG50eXBlIEVuZGFibGVTdHJlYW0gPSB7XG5cdGVuZD86IChjYj86IChlcnI/OiBFcnJvciB8IG51bGwpID0+IHZvaWQpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgY2xhc3MgUGlub0FkYXB0ZXIgZXh0ZW5kcyBMb2dBZGFwdGVyIHtcblx0cHJpdmF0ZSBfcGlubzogcGluby5Mb2dnZXI7XG5cdHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogcGluby5Mb2dnZXJPcHRpb25zO1xuXHRwcml2YXRlIHJlYWRvbmx5IHN0cmVhbTogcGluby5EZXN0aW5hdGlvblN0cmVhbSB8IHVuZGVmaW5lZDtcblx0cHJpdmF0ZSBkaXNwb3NlZCA9IGZhbHNlO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnMsIHN0cmVhbT86IHBpbm8uRGVzdGluYXRpb25TdHJlYW0pIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdHJlYW0gPSBzdHJlYW07XG5cdH1cblxuXHRwdWJsaWMgY29uZmlndXJlPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0XHRzY3JpYmVPcHRpb25zOiBTY3JpYmVPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHQpIHtcblx0XHRjb25zdCB7IGxvZ0xldmVsLCByZWRhY3Rpb25zIH0gPSBzY3JpYmVPcHRpb25zO1xuXHRcdGNvbnN0IGN1c3RvbUxldmVscyA9IHRoaXMuZ2V0TG9nTGV2ZWxzKHNjcmliZU9wdGlvbnMpO1xuXG5cdFx0Y29uc3QgcGlub09wdGlvbnM6IHBpbm8uTG9nZ2VyT3B0aW9ucyA9IHtcblx0XHRcdGN1c3RvbUxldmVscyxcblx0XHRcdGxldmVsOiBsb2dMZXZlbCxcblx0XHRcdGhvb2tzOiB7IGxvZ01ldGhvZCB9LFxuXHRcdFx0c2VyaWFsaXplcnM6IHtcblx0XHRcdFx0ZXJyb3I6IHBpbm8uc3RkU2VyaWFsaXplcnMuZXJyLFxuXHRcdFx0fSxcblx0XHRcdHJlZGFjdDogcmVkYWN0aW9ucyxcblx0XHRcdC4uLnRoaXMub3B0aW9ucyxcblx0XHR9O1xuXHRcdHRoaXMuX3Bpbm8gPSBwaW5vKHBpbm9PcHRpb25zLCB0aGlzLnN0cmVhbSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TG9nZ2VyPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0XHRuYW1lOiBzdHJpbmcsXG5cdCk6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdFx0Y29uc3QgbG9nZ2VyID0gcGlub01peDxULCBDdXN0b21Pbmx5Pih0aGlzLl9waW5vLmNoaWxkKHsgbmFtZSB9KSk7XG5cdFx0cmV0dXJuIGxvZ2dlcjtcblx0fVxuXG5cdHB1YmxpYyBmbHVzaChjYj86ICgpID0+IHZvaWQpOiB2b2lkIHtcblx0XHR0aGlzLl9waW5vLmZsdXNoKGNiKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuZGlzcG9zZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5kaXNwb3NlZCA9IHRydWU7XG5cdFx0aWYgKHRoaXMuX3Bpbm8pIHtcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3Bpbm8uZmx1c2goKCkgPT4gcmVzb2x2ZSgpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhd2FpdCBlbmREZXN0aW5hdGlvbih0aGlzLnN0cmVhbSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZW5kRGVzdGluYXRpb24oc3RyZWFtOiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IGVuZGFibGUgPSBzdHJlYW0gYXMgRW5kYWJsZVN0cmVhbSB8IHVuZGVmaW5lZDtcblx0aWYgKHR5cGVvZiBlbmRhYmxlPy5lbmQgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0ZW5kYWJsZS5lbmQoKCkgPT4gcmVzb2x2ZSgpKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBsb2dNZXRob2QodGhpczogcGluby5Mb2dnZXIsIGFyZ3M6IFBhcmFtZXRlcnM8TG9nRm4+LCBtZXRob2Q6IExvZ0ZuKSB7XG5cdGxldCBtZXNzYWdlID0gYXJncy5hdCgwKTtcblx0Y29uc3QgZGF0YSA9IGFyZ3MuYXQoMSk7XG5cblx0aWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdG1ldGhvZC5jYWxsKHRoaXMsIHsgZXJyOiBtZXNzYWdlIH0sIGZvcm1hdEVycm9yKG1lc3NhZ2UpKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoZGF0YSBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCAuLi57IGVycm9yOiBkYXRhIH0gfTtcblx0fSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIikge1xuXHRcdG1lc3NhZ2UgPSB7IG1zZzogbWVzc2FnZSwgLi4uZGF0YSB9O1xuXHR9IGVsc2Uge1xuXHRcdG1lc3NhZ2UgPSB7IG1zZzogbWVzc2FnZSwgZGF0YSB9O1xuXHR9XG5cblx0bWV0aG9kLmNhbGwodGhpcywgbWVzc2FnZSk7XG59XG5cbmZ1bmN0aW9uIHBpbm9NaXg8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRsb2dnZXI6IHBpbm8uTG9nZ2VyLFxuKTogTG9nZ2VyPFQsIEN1c3RvbU9ubHk+IHtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ248cGluby5Mb2dnZXIsIEJhc2VMb2dnZXI+KGxvZ2dlciwge1xuXHRcdGdldCBjdXJyZW50TGV2ZWwoKSB7XG5cdFx0XHRyZXR1cm4gbG9nZ2VyLmxldmVsO1xuXHRcdH0sXG5cdFx0Z2V0IGxvZ0xldmVscygpIHtcblx0XHRcdHJldHVybiBsb2dnZXIubGV2ZWxzLnZhbHVlcztcblx0XHR9LFxuXHR9KSBhcyBMb2dnZXI8VCwgQ3VzdG9tT25seT47XG59XG4iXSwibmFtZXMiOlsiUGlub0FkYXB0ZXIiLCJMb2dBZGFwdGVyIiwiX3Bpbm8iLCJvcHRpb25zIiwic3RyZWFtIiwiZGlzcG9zZWQiLCJjb25maWd1cmUiLCJzY3JpYmVPcHRpb25zIiwibG9nTGV2ZWwiLCJyZWRhY3Rpb25zIiwiY3VzdG9tTGV2ZWxzIiwiZ2V0TG9nTGV2ZWxzIiwicGlub09wdGlvbnMiLCJsZXZlbCIsImhvb2tzIiwibG9nTWV0aG9kIiwic2VyaWFsaXplcnMiLCJlcnJvciIsInBpbm8iLCJzdGRTZXJpYWxpemVycyIsImVyciIsInJlZGFjdCIsImdldExvZ2dlciIsIm5hbWUiLCJsb2dnZXIiLCJwaW5vTWl4IiwiY2hpbGQiLCJmbHVzaCIsImNiIiwiU3ltYm9sIiwiYXN5bmNEaXNwb3NlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJlbmREZXN0aW5hdGlvbiIsImVuZGFibGUiLCJlbmQiLCJhcmdzIiwibWV0aG9kIiwibWVzc2FnZSIsImF0IiwiZGF0YSIsIkVycm9yIiwiY2FsbCIsImZvcm1hdEVycm9yIiwibXNnIiwiT2JqZWN0IiwiYXNzaWduIiwiY3VycmVudExldmVsIiwibG9nTGV2ZWxzIiwibGV2ZWxzIiwidmFsdWVzIl0sIm1hcHBpbmdzIjoiOzs7OytCQWtCYUE7OztlQUFBQTs7O3dCQVpOOzZEQUMwQjs7Ozs7O0FBVzFCLE1BQU1BLG9CQUFvQkMsa0JBQVU7SUFDbENDLE1BQW1CO0lBQ1ZDLFFBQTRCO0lBQzVCQyxPQUEyQztJQUNwREMsV0FBVyxNQUFNO0lBRXpCLFlBQW1CRixPQUEyQixFQUFFQyxNQUErQixDQUFFO1FBQ2hGLEtBQUs7UUFDTCxJQUFJLENBQUNELE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNDLE1BQU0sR0FBR0E7SUFDZjtJQUVPRSxVQUNOQyxhQUEyQyxFQUMxQztRQUNELE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxVQUFVLEVBQUUsR0FBR0Y7UUFDakMsTUFBTUcsZUFBZSxJQUFJLENBQUNDLFlBQVksQ0FBQ0o7UUFFdkMsTUFBTUssY0FBa0M7WUFDdkNGO1lBQ0FHLE9BQU9MO1lBQ1BNLE9BQU87Z0JBQUVDO1lBQVU7WUFDbkJDLGFBQWE7Z0JBQ1pDLE9BQU9DLGFBQUksQ0FBQ0MsY0FBYyxDQUFDQyxHQUFHO1lBQy9CO1lBQ0FDLFFBQVFaO1lBQ1IsR0FBRyxJQUFJLENBQUNOLE9BQU87UUFDaEI7UUFDQSxJQUFJLENBQUNELEtBQUssR0FBR2dCLElBQUFBLGFBQUksRUFBQ04sYUFBYSxJQUFJLENBQUNSLE1BQU07SUFDM0M7SUFFT2tCLFVBQ05DLElBQVksRUFDWTtRQUN4QixNQUFNQyxTQUFTQyxRQUF1QixJQUFJLENBQUN2QixLQUFLLENBQUN3QixLQUFLLENBQUM7WUFBRUg7UUFBSztRQUM5RCxPQUFPQztJQUNSO0lBRU9HLE1BQU1DLEVBQWUsRUFBUTtRQUNuQyxJQUFJLENBQUMxQixLQUFLLENBQUN5QixLQUFLLENBQUNDO0lBQ2xCO0lBRUEsTUFBYSxDQUFDQyxPQUFPQyxZQUFZLENBQUMsR0FBa0I7UUFDbkQsSUFBSSxJQUFJLENBQUN6QixRQUFRLEVBQUU7WUFDbEI7UUFDRDtRQUNBLElBQUksQ0FBQ0EsUUFBUSxHQUFHO1FBQ2hCLElBQUksSUFBSSxDQUFDSCxLQUFLLEVBQUU7WUFDZixNQUFNLElBQUk2QixRQUFjLENBQUNDO2dCQUN4QixJQUFJLENBQUM5QixLQUFLLENBQUN5QixLQUFLLENBQUMsSUFBTUs7WUFDeEI7UUFDRDtRQUNBLE1BQU1DLGVBQWUsSUFBSSxDQUFDN0IsTUFBTTtJQUNqQztBQUNEO0FBRUEsU0FBUzZCLGVBQWU3QixNQUEwQztJQUNqRSxNQUFNOEIsVUFBVTlCO0lBQ2hCLElBQUksT0FBTzhCLFNBQVNDLFFBQVEsWUFBWTtRQUN2QyxPQUFPSixRQUFRQyxPQUFPO0lBQ3ZCO0lBQ0EsT0FBTyxJQUFJRCxRQUFjLENBQUNDO1FBQ3pCLElBQUk7WUFDSEUsUUFBUUMsR0FBRyxDQUFDLElBQU1IO1FBQ25CLEVBQUUsT0FBTTtZQUNQQTtRQUNEO0lBQ0Q7QUFDRDtBQUVBLFNBQVNqQixVQUE2QnFCLElBQXVCLEVBQUVDLE1BQWE7SUFDM0UsSUFBSUMsVUFBVUYsS0FBS0csRUFBRSxDQUFDO0lBQ3RCLE1BQU1DLE9BQU9KLEtBQUtHLEVBQUUsQ0FBQztJQUVyQixJQUFJRCxtQkFBbUJHLE9BQU87UUFDN0JKLE9BQU9LLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFBRXRCLEtBQUtrQjtRQUFRLEdBQUdLLElBQUFBLG1CQUFXLEVBQUNMO1FBQ2hEO0lBQ0Q7SUFFQSxJQUFJRSxnQkFBZ0JDLE9BQU87UUFDMUJILFVBQVU7WUFBRU0sS0FBS047WUFBUyxHQUFHO2dCQUFFckIsT0FBT3VCO1lBQUssQ0FBQztRQUFDO0lBQzlDLE9BQU8sSUFBSSxPQUFPQSxTQUFTLFVBQVU7UUFDcENGLFVBQVU7WUFBRU0sS0FBS047WUFBUyxHQUFHRSxJQUFJO1FBQUM7SUFDbkMsT0FBTztRQUNORixVQUFVO1lBQUVNLEtBQUtOO1lBQVNFO1FBQUs7SUFDaEM7SUFFQUgsT0FBT0ssSUFBSSxDQUFDLElBQUksRUFBRUo7QUFDbkI7QUFFQSxTQUFTYixRQUNSRCxNQUFtQjtJQUVuQixPQUFPcUIsT0FBT0MsTUFBTSxDQUEwQnRCLFFBQVE7UUFDckQsSUFBSXVCLGdCQUFlO1lBQ2xCLE9BQU92QixPQUFPWCxLQUFLO1FBQ3BCO1FBQ0EsSUFBSW1DLGFBQVk7WUFDZixPQUFPeEIsT0FBT3lCLE1BQU0sQ0FBQ0MsTUFBTTtRQUM1QjtJQUNEO0FBQ0QifQ==
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5hZGFwYXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIEJhc2VMb2dnZXIsXG5cdGZvcm1hdEVycm9yLFxuXHRMb2dBZGFwdGVyLFxuXHR0eXBlIExvZ2dlcixcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxufSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHBpbm8sIHsgdHlwZSBMb2dGbiB9IGZyb20gXCJwaW5vXCI7XG5cbmltcG9ydCB0eXBlIHsgR3VhcmRlZFRyYW5zcG9ydCB9IGZyb20gXCIuL3Bpbm8udHJhbnNwb3J0LWd1YXJkLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFBpbm9BZGFwYXRlck9wdGlvbnMgPSB7XG5cdG9wdGlvbnM/OiBwaW5vLkxvZ2dlck9wdGlvbnM7XG5cdHN0cmVhbT86IHBpbm8uRGVzdGluYXRpb25TdHJlYW07XG59O1xuXG50eXBlIEVuZGFibGVTdHJlYW0gPSB7XG5cdGVuZD86IChjYj86IChlcnI/OiBFcnJvciB8IG51bGwpID0+IHZvaWQpID0+IHZvaWQ7XG5cdGRlc3Ryb3k/OiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBjbGFzcyBQaW5vQWRhcHRlciBleHRlbmRzIExvZ0FkYXB0ZXIge1xuXHRwcml2YXRlIF9waW5vOiBwaW5vLkxvZ2dlcjtcblx0cHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnM7XG5cdHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtIHwgdW5kZWZpbmVkO1xuXHRwcml2YXRlIGRpc3Bvc2VkID0gZmFsc2U7XG5cdHByaXZhdGUgcmV0aXJlZCA9IGZhbHNlO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnMsIHN0cmVhbT86IHBpbm8uRGVzdGluYXRpb25TdHJlYW0pIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdHJlYW0gPSBzdHJlYW07XG5cdH1cblxuXHRwdWJsaWMgY29uZmlndXJlPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0XHRzY3JpYmVPcHRpb25zOiBTY3JpYmVPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHQpIHtcblx0XHRjb25zdCB7IGxvZ0xldmVsLCByZWRhY3Rpb25zIH0gPSBzY3JpYmVPcHRpb25zO1xuXHRcdGNvbnN0IGN1c3RvbUxldmVscyA9IHRoaXMuZ2V0TG9nTGV2ZWxzKHNjcmliZU9wdGlvbnMpO1xuXG5cdFx0Y29uc3QgcGlub09wdGlvbnM6IHBpbm8uTG9nZ2VyT3B0aW9ucyA9IHtcblx0XHRcdGN1c3RvbUxldmVscyxcblx0XHRcdGxldmVsOiBsb2dMZXZlbCxcblx0XHRcdGhvb2tzOiB7IGxvZ01ldGhvZCB9LFxuXHRcdFx0c2VyaWFsaXplcnM6IHtcblx0XHRcdFx0ZXJyb3I6IHBpbm8uc3RkU2VyaWFsaXplcnMuZXJyLFxuXHRcdFx0fSxcblx0XHRcdHJlZGFjdDogcmVkYWN0aW9ucyxcblx0XHRcdC4uLnRoaXMub3B0aW9ucyxcblx0XHR9O1xuXHRcdHRoaXMuX3Bpbm8gPSBwaW5vKHBpbm9PcHRpb25zLCB0aGlzLnN0cmVhbSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TG9nZ2VyPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0XHRuYW1lOiBzdHJpbmcsXG5cdCk6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdFx0Y29uc3QgbG9nZ2VyID0gcGlub01peDxULCBDdXN0b21Pbmx5Pih0aGlzLl9waW5vLmNoaWxkKHsgbmFtZSB9KSk7XG5cdFx0cmV0dXJuIGxvZ2dlcjtcblx0fVxuXG5cdHB1YmxpYyBmbHVzaChjYj86ICgpID0+IHZvaWQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5yZXRpcmVkIHx8ICF0aGlzLl9waW5vKSB7XG5cdFx0XHRjYj8uKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuX3Bpbm8uZmx1c2goY2IpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEltbWVkaWF0ZWx5IHN0b3AgYWNjZXB0aW5nIHdyaXRlcyBpbnRvIHRoZSBkZXN0aW5hdGlvbiAoVGhyZWFkU3RyZWFtKS5cblx0ICogRG9lcyBub3Qgd2FpdCBmb3IgZmx1c2gg4oCUIHVzZSBgc3RvcCgpYCBmb3IgYXN5bmMgZHJhaW4gYWZ0ZXIgcmV0aXJlLlxuXHQgKi9cblx0cHVibGljIHJldGlyZSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5yZXRpcmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMucmV0aXJlZCA9IHRydWU7XG5cdFx0Y29uc3QgZ3VhcmRlZCA9IHRoaXMuc3RyZWFtIGFzIEd1YXJkZWRUcmFuc3BvcnQgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKHR5cGVvZiBndWFyZGVkPy5yZXRpcmUgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0Z3VhcmRlZC5yZXRpcmUoXCJhZGFwdGVyIHJldGlyZWRcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGRlc3Ryb3lEZXN0aW5hdGlvbih0aGlzLnN0cmVhbSk7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmRpc3Bvc2VkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xuXHRcdGlmICh0aGlzLl9waW5vICYmICF0aGlzLnJldGlyZWQpIHtcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dGhpcy5fcGluby5mbHVzaCgoKSA9PiByZXNvbHZlKCkpO1xuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMucmV0aXJlZCkge1xuXHRcdFx0YXdhaXQgZW5kRGVzdGluYXRpb24odGhpcy5zdHJlYW0pO1xuXHRcdH1cblx0XHQvLyBNYXJrIGRlYWQgYWZ0ZXIgZ3JhY2VmdWwgZW5kIChvciBpbW1lZGlhdGVseSBpZiBhbHJlYWR5IGZvcmNlLXJldGlyZWQpLlxuXHRcdHRoaXMucmV0aXJlKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVzdHJveURlc3RpbmF0aW9uKHN0cmVhbTogcGluby5EZXN0aW5hdGlvblN0cmVhbSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRjb25zdCBkZXN0cm95YWJsZSA9IHN0cmVhbSBhcyBFbmRhYmxlU3RyZWFtIHwgdW5kZWZpbmVkO1xuXHRpZiAodHlwZW9mIGRlc3Ryb3lhYmxlPy5kZXN0cm95ID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHR0cnkge1xuXHRcdFx0ZGVzdHJveWFibGUuZGVzdHJveSgpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0Ly8gYWxyZWFkeSBkZWFkXG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGVuZERlc3RpbmF0aW9uKHN0cmVhbTogcGluby5EZXN0aW5hdGlvblN0cmVhbSB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBlbmRhYmxlID0gc3RyZWFtIGFzIEVuZGFibGVTdHJlYW0gfCB1bmRlZmluZWQ7XG5cdGlmICh0eXBlb2YgZW5kYWJsZT8uZW5kICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGVuZGFibGUuZW5kKCgpID0+IHJlc29sdmUoKSk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gbG9nTWV0aG9kKHRoaXM6IHBpbm8uTG9nZ2VyLCBhcmdzOiBQYXJhbWV0ZXJzPExvZ0ZuPiwgbWV0aG9kOiBMb2dGbikge1xuXHRsZXQgbWVzc2FnZSA9IGFyZ3MuYXQoMCk7XG5cdGNvbnN0IGRhdGEgPSBhcmdzLmF0KDEpO1xuXG5cdGlmIChtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRtZXRob2QuY2FsbCh0aGlzLCB7IGVycjogbWVzc2FnZSB9LCBmb3JtYXRFcnJvcihtZXNzYWdlKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGRhdGEgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdG1lc3NhZ2UgPSB7IG1zZzogbWVzc2FnZSwgLi4ueyBlcnJvcjogZGF0YSB9IH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIpIHtcblx0XHRtZXNzYWdlID0geyBtc2c6IG1lc3NhZ2UsIC4uLmRhdGEgfTtcblx0fSBlbHNlIHtcblx0XHRtZXNzYWdlID0geyBtc2c6IG1lc3NhZ2UsIGRhdGEgfTtcblx0fVxuXG5cdG1ldGhvZC5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiBwaW5vTWl4PFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0bG9nZ2VyOiBwaW5vLkxvZ2dlcixcbik6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdHJldHVybiBPYmplY3QuYXNzaWduPHBpbm8uTG9nZ2VyLCBCYXNlTG9nZ2VyPihsb2dnZXIsIHtcblx0XHRnZXQgY3VycmVudExldmVsKCkge1xuXHRcdFx0cmV0dXJuIGxvZ2dlci5sZXZlbDtcblx0XHR9LFxuXHRcdGdldCBsb2dMZXZlbHMoKSB7XG5cdFx0XHRyZXR1cm4gbG9nZ2VyLmxldmVscy52YWx1ZXM7XG5cdFx0fSxcblx0fSkgYXMgTG9nZ2VyPFQsIEN1c3RvbU9ubHk+O1xufVxuIl0sIm5hbWVzIjpbIlBpbm9BZGFwdGVyIiwiTG9nQWRhcHRlciIsIl9waW5vIiwib3B0aW9ucyIsInN0cmVhbSIsImRpc3Bvc2VkIiwicmV0aXJlZCIsImNvbmZpZ3VyZSIsInNjcmliZU9wdGlvbnMiLCJsb2dMZXZlbCIsInJlZGFjdGlvbnMiLCJjdXN0b21MZXZlbHMiLCJnZXRMb2dMZXZlbHMiLCJwaW5vT3B0aW9ucyIsImxldmVsIiwiaG9va3MiLCJsb2dNZXRob2QiLCJzZXJpYWxpemVycyIsImVycm9yIiwicGlubyIsInN0ZFNlcmlhbGl6ZXJzIiwiZXJyIiwicmVkYWN0IiwiZ2V0TG9nZ2VyIiwibmFtZSIsImxvZ2dlciIsInBpbm9NaXgiLCJjaGlsZCIsImZsdXNoIiwiY2IiLCJyZXRpcmUiLCJndWFyZGVkIiwiZGVzdHJveURlc3RpbmF0aW9uIiwiU3ltYm9sIiwiYXN5bmNEaXNwb3NlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJlbmREZXN0aW5hdGlvbiIsImRlc3Ryb3lhYmxlIiwiZGVzdHJveSIsImVuZGFibGUiLCJlbmQiLCJhcmdzIiwibWV0aG9kIiwibWVzc2FnZSIsImF0IiwiZGF0YSIsIkVycm9yIiwiY2FsbCIsImZvcm1hdEVycm9yIiwibXNnIiwiT2JqZWN0IiwiYXNzaWduIiwiY3VycmVudExldmVsIiwibG9nTGV2ZWxzIiwibGV2ZWxzIiwidmFsdWVzIl0sIm1hcHBpbmdzIjoiOzs7OytCQXFCYUE7OztlQUFBQTs7O3dCQWZOOzZEQUMwQjs7Ozs7O0FBYzFCLE1BQU1BLG9CQUFvQkMsa0JBQVU7SUFDbENDLE1BQW1CO0lBQ1ZDLFFBQTRCO0lBQzVCQyxPQUEyQztJQUNwREMsV0FBVyxNQUFNO0lBQ2pCQyxVQUFVLE1BQU07SUFFeEIsWUFBbUJILE9BQTJCLEVBQUVDLE1BQStCLENBQUU7UUFDaEYsS0FBSztRQUNMLElBQUksQ0FBQ0QsT0FBTyxHQUFHQTtRQUNmLElB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
@@ -0,0 +1,70 @@
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
+ }
69
+
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby50cmFuc3BvcnQtZ3VhcmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEZXN0aW5hdGlvblN0cmVhbSB9IGZyb20gXCJwaW5vXCI7XG5cbmV4cG9ydCB0eXBlIEd1YXJkZWRUcmFuc3BvcnQgPSBEZXN0aW5hdGlvblN0cmVhbSAmIHtcblx0cmVhZG9ubHkgcmV0aXJlZDogYm9vbGVhbjtcblx0cmV0aXJlKHJlYXNvbj86IHN0cmluZyk6IHZvaWQ7XG59O1xuXG50eXBlIFdyaXRhYmxlTGlrZSA9IERlc3RpbmF0aW9uU3RyZWFtICYge1xuXHR3cml0ZT86ICguLi5hcmdzOiBuZXZlcltdKSA9PiB1bmtub3duO1xuXHRvbj86IChldmVudDogXCJlcnJvclwiLCBsaXN0ZW5lcjogKGVycjogRXJyb3IpID0+IHZvaWQpID0+IHVua25vd247XG5cdGRlc3Ryb3k/OiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZDtcbn07XG5cbi8qKlxuICogV3JhcCBhIHBpbm8gd29ya2VyIHRyYW5zcG9ydCBzbyBhIGRlYWQgVGhyZWFkU3RyZWFtIGNhbm5vdCBzcGFtIG9yIGNyYXNoLlxuICogT24gZmlyc3QgZXJyb3IgLyB3cml0ZSB0aHJvdzogcmVwb3J0IG9uY2UsIGRlc3Ryb3ksIG5vLW9wIGZ1cnRoZXIgd3JpdGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3VhcmRUcmFuc3BvcnQodHJhbnNwb3J0OiBEZXN0aW5hdGlvblN0cmVhbSk6IEd1YXJkZWRUcmFuc3BvcnQge1xuXHRjb25zdCBzdHJlYW0gPSB0cmFuc3BvcnQgYXMgV3JpdGFibGVMaWtlO1xuXHRsZXQgcmV0aXJlZCA9IGZhbHNlO1xuXHRsZXQgcmVwb3J0ZWQgPSBmYWxzZTtcblxuXHRjb25zdCByZXRpcmUgPSAocmVhc29uID0gXCJyZXRpcmVkXCIpOiB2b2lkID0+IHtcblx0XHRpZiAocmV0aXJlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXRpcmVkID0gdHJ1ZTtcblx0XHRpZiAoIXJlcG9ydGVkKSB7XG5cdFx0XHRyZXBvcnRlZCA9IHRydWU7XG5cdFx0XHRwcm9jZXNzLnN0ZGVyci53cml0ZShgW3NjcmliZS1waW5vXSB0cmFuc3BvcnQgcmV0aXJlZDogJHtyZWFzb259XFxuYCk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2Ygc3RyZWFtLmRlc3Ryb3kgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c3RyZWFtLmRlc3Ryb3koKTtcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHQvLyBhbHJlYWR5IGRlYWRcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0aWYgKHR5cGVvZiBzdHJlYW0ub24gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHN0cmVhbS5vbihcImVycm9yXCIsIChlcnIpID0+IHtcblx0XHRcdHJldGlyZShlcnI/Lm1lc3NhZ2UgPz8gU3RyaW5nKGVycikpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBzdHJlYW0ud3JpdGUgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGNvbnN0IG9yaWdpbmFsV3JpdGUgPSBzdHJlYW0ud3JpdGUuYmluZChzdHJlYW0pIGFzIChcblx0XHRcdGNodW5rOiB1bmtub3duLFxuXHRcdFx0ZW5jb2RpbmdPckNiPzogdW5rbm93bixcblx0XHRcdGNiPzogdW5rbm93bixcblx0XHQpID0+IHVua25vd247XG5cblx0XHRzdHJlYW0ud3JpdGUgPSAoKGNodW5rOiB1bmtub3duLCBlbmNvZGluZ09yQ2I/OiB1bmtub3duLCBjYj86IHVua25vd24pID0+IHtcblx0XHRcdGlmIChyZXRpcmVkKSB7XG5cdFx0XHRcdGNvbXBsZXRlV3JpdGUoZW5jb2RpbmdPckNiLCBjYik7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIG9yaWdpbmFsV3JpdGUoY2h1bmssIGVuY29kaW5nT3JDYiwgY2IpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdHJldGlyZShlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycikpO1xuXHRcdFx0XHRjb21wbGV0ZVdyaXRlKGVuY29kaW5nT3JDYiwgY2IpO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KSBhcyB0eXBlb2Ygc3RyZWFtLndyaXRlO1xuXHR9XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0cmVhbSwgXCJyZXRpcmVkXCIsIHtcblx0XHRnZXQ6ICgpID0+IHJldGlyZWQsXG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0fSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHJlYW0sIFwicmV0aXJlXCIsIHtcblx0XHR2YWx1ZTogcmV0aXJlLFxuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdH0pO1xuXG5cdHJldHVybiBzdHJlYW0gYXMgR3VhcmRlZFRyYW5zcG9ydDtcbn1cblxuZnVuY3Rpb24gY29tcGxldGVXcml0ZShlbmNvZGluZ09yQ2I6IHVua25vd24sIGNiOiB1bmtub3duKTogdm9pZCB7XG5cdGNvbnN0IGRvbmUgPVxuXHRcdHR5cGVvZiBlbmNvZGluZ09yQ2IgPT09IFwiZnVuY3Rpb25cIlxuXHRcdFx0PyBlbmNvZGluZ09yQ2Jcblx0XHRcdDogdHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCJcblx0XHRcdFx0PyBjYlxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0aWYgKHR5cGVvZiBkb25lID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRkb25lKCk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJndWFyZFRyYW5zcG9ydCIsInRyYW5zcG9ydCIsInN0cmVhbSIsInJldGlyZWQiLCJyZXBvcnRlZCIsInJldGlyZSIsInJlYXNvbiIsInByb2Nlc3MiLCJzdGRlcnIiLCJ3cml0ZSIsImRlc3Ryb3kiLCJvbiIsImVyciIsIm1lc3NhZ2UiLCJTdHJpbmciLCJvcmlnaW5hbFdyaXRlIiwiYmluZCIsImNodW5rIiwiZW5jb2RpbmdPckNiIiwiY2IiLCJjb21wbGV0ZVdyaXRlIiwiRXJyb3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsImVudW1lcmFibGUiLCJ2YWx1ZSIsImRvbmUiLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiI7Ozs7K0JBaUJnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0EsZUFBZUMsU0FBNEI7SUFDMUQsTUFBTUMsU0FBU0Q7SUFDZixJQUFJRSxVQUFVO0lBQ2QsSUFBSUMsV0FBVztJQUVmLE1BQU1DLFNBQVMsQ0FBQ0MsU0FBUyxTQUFTO1FBQ2pDLElBQUlILFNBQVM7WUFDWjtRQUNEO1FBQ0FBLFVBQVU7UUFDVixJQUFJLENBQUNDLFVBQVU7WUFDZEEsV0FBVztZQUNYRyxRQUFRQyxNQUFNLENBQUNDLEtBQUssQ0FBQyxDQUFDLGlDQUFpQyxFQUFFSCxPQUFPLEVBQUUsQ0FBQztRQUNwRTtRQUNBLElBQUksT0FBT0osT0FBT1EsT0FBTyxLQUFLLFlBQVk7WUFDekMsSUFBSTtnQkFDSFIsT0FBT1EsT0FBTztZQUNmLEVBQUUsT0FBTTtZQUNQLGVBQWU7WUFDaEI7UUFDRDtJQUNEO0lBRUEsSUFBSSxPQUFPUixPQUFPUyxFQUFFLEtBQUssWUFBWTtRQUNwQ1QsT0FBT1MsRUFBRSxDQUFDLFNBQVMsQ0FBQ0M7WUFDbkJQLE9BQU9PLEtBQUtDLFdBQVdDLE9BQU9GO1FBQy9CO0lBQ0Q7SUFFQSxJQUFJLE9BQU9WLE9BQU9PLEtBQUssS0FBSyxZQUFZO1FBQ3ZDLE1BQU1NLGdCQUFnQmIsT0FBT08sS0FBSyxDQUFDTyxJQUFJLENBQUNkO1FBTXhDQSxPQUFPTyxLQUFLLEdBQUksQ0FBQ1EsT0FBZ0JDLGNBQXdCQztZQUN4RCxJQUFJaEIsU0FBUztnQkFDWmlCLGNBQWNGLGNBQWNDO2dCQUM1QixPQUFPO1lBQ1I7WUFDQSxJQUFJO2dCQUNILE9BQU9KLGNBQWNFLE9BQU9DLGNBQWNDO1lBQzNDLEVBQUUsT0FBT1AsS0FBSztnQkFDYlAsT0FBT08sZUFBZVMsUUFBUVQsSUFBSUMsT0FBTyxHQUFHQyxPQUFPRjtnQkFDbkRRLGNBQWNGLGNBQWNDO2dCQUM1QixPQUFPO1lBQ1I7UUFDRDtJQUNEO0lBRUFHLE9BQU9DLGNBQWMsQ0FBQ3JCLFFBQVEsV0FBVztRQUN4Q3NCLEtBQUssSUFBTXJCO1FBQ1hzQixZQUFZO0lBQ2I7SUFDQUgsT0FBT0MsY0FBYyxDQUFDckIsUUFBUSxVQUFVO1FBQ3ZDd0IsT0FBT3JCO1FBQ1BvQixZQUFZO0lBQ2I7SUFFQSxPQUFPdkI7QUFDUjtBQUVBLFNBQVNrQixjQUFjRixZQUFxQixFQUFFQyxFQUFXO0lBQ3hELE1BQU1RLE9BQ0wsT0FBT1QsaUJBQWlCLGFBQ3JCQSxlQUNBLE9BQU9DLE9BQU8sYUFDYkEsS0FDQVM7SUFDTCxJQUFJLE9BQU9ELFNBQVMsWUFBWTtRQUMvQkE7SUFDRDtBQUNEIn0=
@@ -12,6 +12,9 @@ _export(exports, {
12
12
  get PinoExtensions () {
13
13
  return PinoExtensions;
14
14
  },
15
+ get guardTransport () {
16
+ return _pinotransportguard.guardTransport;
17
+ },
15
18
  get pinoTransport () {
16
19
  return pinoTransport;
17
20
  }
@@ -22,6 +25,7 @@ const _scribe = require("@decohere/scribe");
22
25
  const _pino = /*#__PURE__*/ _interop_require_default(require("pino"));
23
26
  const _pinoadapater = require("./pino.adapater.js");
24
27
  const _pinorecipe = require("./pino.recipe.js");
28
+ const _pinotransportguard = require("./pino.transport-guard.js");
25
29
  function _interop_require_default(obj) {
26
30
  return obj && obj.__esModule ? obj : {
27
31
  default: obj
@@ -143,18 +147,10 @@ function attachRecipe(factory, plan) {
143
147
  });
144
148
  }
145
149
  /**
146
- * Attach a listener so worker transport failures (e.g. pino-roll symlink EEXIST)
147
- * never become Node's default unhandled `error` crash.
148
- */ function silenceErrors(transport) {
149
- transport.on("error", (err)=>{
150
- const detail = err?.stack ?? String(err);
151
- process.stderr.write(`[scribe-pino] transport error: ${detail}\n`);
152
- });
153
- }
154
- function createSafeTransport(options) {
155
- const transport = _pino.default.transport(options);
156
- silenceErrors(transport);
157
- return transport;
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));
158
154
  }
159
155
  function adapterForTransport(transport) {
160
156
  if (transport == null) {
@@ -188,9 +184,13 @@ function configureScribe(factory, options, config) {
188
184
  adapter
189
185
  });
190
186
  }
187
+ /** @deprecated Use {@link guardTransport} — kept for callers/tests from the silence-only era. */ function silenceErrors(transport) {
188
+ return (0, _pinotransportguard.guardTransport)(transport);
189
+ }
191
190
  const pinoTransport = {
192
191
  createSafeTransport,
192
+ guardTransport: _pinotransportguard.guardTransport,
193
193
  silenceErrors
194
194
  };
195
195
 
196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvc2NyaWJlLXBpbm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5zaW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9leHRlbnNpYmlsaXR5XCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnQsIHR5cGUgRW52aXJvbm1lbnQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL3N5c3RlbVwiO1xuaW1wb3J0IHtcblx0dHlwZSBEZWZhdWx0TGV2ZWxzLFxuXHREZWZhdWx0TG9nTGV2ZWwsXG5cdHR5cGUgTG9nZ2VyLFxuXHRMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yLFxuXHR0eXBlIFNjcmliZU9wdGlvbnMsXG5cdHNjcmliZSxcbn0gZnJvbSBcIkBkZWNvaGVyZS9zY3JpYmVcIjtcbmltcG9ydCBwaW5vLCB7XG5cdHR5cGUgRGVzdGluYXRpb25TdHJlYW0sXG5cdHR5cGUgVHJhbnNwb3J0TXVsdGlPcHRpb25zLFxuXHR0eXBlIFRyYW5zcG9ydFBpcGVsaW5lT3B0aW9ucyxcblx0dHlwZSBUcmFuc3BvcnRTaW5nbGVPcHRpb25zLFxufSBmcm9tIFwicGlub1wiO1xuXG5pbXBvcnQgeyBQaW5vQWRhcHRlciB9IGZyb20gXCIuL3Bpbm8uYWRhcGF0ZXIuanNcIjtcbmltcG9ydCB7XG5cdHR5cGUgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdHR5cGUgUGlub1JlY2lwZVBsYW4sXG5cdHR5cGUgUGlub1JvbGxSZWNpcGVPcHRpb25zLFxuXHRwaW5vUmVjaXBlLFxufSBmcm9tIFwiLi9waW5vLnJlY2lwZS5qc1wiO1xuXG50eXBlIFRyYW5zcG9ydE9wdGlvbnMgPVxuXHR8IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnNcblx0fCBUcmFuc3BvcnRNdWx0aU9wdGlvbnNcblx0fCBUcmFuc3BvcnRQaXBlbGluZU9wdGlvbnM7XG5cbnR5cGUgVHJhbnNwb3J0Q29uZmlnID0ge1xuXHRlbnZpcm9ubWVudD86IEVudmlyb25tZW50O1xuXHR0cmFuc3BvcnRzOiBUcmFuc3BvcnRPcHRpb25zO1xufTtcblxudHlwZSBDdXN0b21MZXZlbE9wdGlvbnM8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSA9IHVuZGVmaW5lZD4gPSB7XG5cdHNjcmliZT86IFNjcmliZU9wdGlvbnM8VCwgQ3VzdG9tT25seT47XG5cdHRyYW5zcG9ydHM/OiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFBpbm9Mb2dnZXJGYWN0b3J5ID0gKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjtcblxuZXhwb3J0IHR5cGUgUGlub1JlY2lwZUNoYWluID0ge1xuXHR3aXRoUGlub1ByZXR0eShcblx0XHRsb2dMZXZlbE9yT3B0aW9ucz86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcgfCBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyxcblx0KTogUGlub1JlY2lwZTtcblx0d2l0aFBpbm9Sb2xsKG9wdGlvbnM6IFBpbm9Sb2xsUmVjaXBlT3B0aW9ucyk6IFBpbm9SZWNpcGU7XG59O1xuXG5leHBvcnQgdHlwZSBQaW5vUmVjaXBlID0gUGlub0xvZ2dlckZhY3RvcnkgJlxuXHRQaW5vUmVjaXBlQ2hhaW4gJiB7XG5cdFx0cmVhZG9ubHkgYW5kOiBQaW5vUmVjaXBlQ2hhaW47XG5cdH07XG5cbmRlY2xhcmUgbW9kdWxlIFwiQGRlY29oZXJlL3NjcmliZVwiIHtcblx0aW50ZXJmYWNlIHNjcmliZSB7XG5cdFx0d2l0aFBpbm8oXG5cdFx0XHR0cmFuc3BvcnRzOiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcblx0XHRcdGxvZ2xldmVsPzogRGVmYXVsdExldmVscyB8IHN0cmluZyxcblx0XHQpOiBQaW5vTG9nZ2VyRmFjdG9yeTtcblx0XHQvKipcblx0XHQgKiBDb2xvcml6ZWQgcHJldHR5IHRyYW5zcG9ydC4gRGV2ZWxvcG1lbnQgb25seSB1bmxlc3MgYHsgd2hlbjogXCJhbHdheXNcIiB9YC5cblx0XHQgKiBDaGFpbiB3aXRoIGAuYW5kLndpdGhQaW5vUm9sbCh7IGZpbGUgfSlgLiBQcm9kdWN0aW9uIHdyaXRlcyBKU09OIHRvIHN0ZG91dFxuXHRcdCAqIHNvIGxvZyBzaGlwcGluZyBzdGF5cyBvdXRzaWRlIHRoZSBwcm9jZXNzLlxuXHRcdCAqL1xuXHRcdHdpdGhQaW5vUHJldHR5KFxuXHRcdFx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdFx0KTogUGlub1JlY2lwZTtcblx0XHQvKipcblx0XHQgKiBSb2xsaW5nIGxvZyBmaWxlcy4gRGV2ZWxvcG1lbnQgb25seSB1bmxlc3MgYHsgd2hlbjogXCJhbHdheXNcIiB9YC5cblx0XHQgKiBEbyBub3QgZW5hYmxlIGluIHByb2R1Y3Rpb24g4oCUIHNoaXAgc3Rkb3V0IGZyb20gYSBzaWRlY2FyIG9yIHBsYXRmb3JtIGFnZW50LlxuXHRcdCAqIGBzeW1saW5rYCBkZWZhdWx0cyBvZmY7IGVuYWJsaW5nIGl0IGNhbiByYWNlIHVuZGVyIG11bHRpLXdvcmtlciAvIEhNUi5cblx0XHQgKi9cblx0XHR3aXRoUGlub1JvbGwob3B0aW9uczogUGlub1JvbGxSZWNpcGVPcHRpb25zKTogUGlub1JlY2lwZTtcblx0XHR3aXRoUGlub0N1c3RvbTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPihcblx0XHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdFx0KTogUGlub0xvZ2dlckZhY3Rvcnk7XG5cdH1cblx0bmFtZXNwYWNlIHNjcmliZSB7XG5cdFx0ZnVuY3Rpb24gd2l0aFBpbm8oXG5cdFx0XHR0cmFuc3BvcnRzOiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcblx0XHRcdGxvZ2xldmVsPzogRGVmYXVsdExldmVscyB8IHN0cmluZyxcblx0XHQpOiBQaW5vTG9nZ2VyRmFjdG9yeTtcblx0XHRmdW5jdGlvbiB3aXRoUGlub1ByZXR0eShcblx0XHRcdGxvZ0xldmVsT3JPcHRpb25zPzogRGVmYXVsdExldmVscyB8IHN0cmluZyB8IFBpbm9QcmV0dHlSZWNpcGVPcHRpb25zLFxuXHRcdCk6IFBpbm9SZWNpcGU7XG5cdFx0ZnVuY3Rpb24gd2l0aFBpbm9Sb2xsKG9wdGlvbnM6IFBpbm9Sb2xsUmVjaXBlT3B0aW9ucyk6IFBpbm9SZWNpcGU7XG5cdFx0ZnVuY3Rpb24gd2l0aFBpbm9DdXN0b208VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSA9IHVuZGVmaW5lZD4oXG5cdFx0XHRvcHRpb25zPzogQ3VzdG9tTGV2ZWxPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHRcdCk6IFBpbm9Mb2dnZXJGYWN0b3J5O1xuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBQaW5vRXh0ZW5zaW9ucyB7XG5cdEBleHRlbnNpb24oc2NyaWJlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuXHRwdWJsaWMgc3RhdGljIHdpdGhQaW5vKFxuXHRcdGZhY3Rvcnk6IHNjcmliZSxcblx0XHRjb25maWc6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuXHRcdGxvZ0xldmVsPzogRGVmYXVsdExldmVscyB8IHN0cmluZyxcblx0KSB7XG5cdFx0cmV0dXJuIGNvbmZpZ3VyZVNjcmliZShmYWN0b3J5LCB7IGxvZ0xldmVsIH0sIGNvbmZpZyk7XG5cdH1cblxuXHRAZXh0ZW5zaW9uKHNjcmliZSwgeyBzdGF0aWM6IHRydWUgfSlcblx0cHVibGljIHN0YXRpYyB3aXRoUGlub1ByZXR0eShcblx0XHRmYWN0b3J5OiBzY3JpYmUsXG5cdFx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdCkge1xuXHRcdGNvbnN0IHByZXR0eSA9IHBhcnNlUHJldHR5QXJnKGxvZ0xldmVsT3JPcHRpb25zKTtcblx0XHRyZXR1cm4gYXR0YWNoUmVjaXBlKGZhY3RvcnksIHsgcHJldHR5LCBsb2dMZXZlbDogcHJldHR5LmxvZ0xldmVsIH0pO1xuXHR9XG5cblx0QGV4dGVuc2lvbihzY3JpYmUsIHsgc3RhdGljOiB0cnVlIH0pXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm9Sb2xsKGZhY3Rvcnk6IHNjcmliZSwgb3B0aW9uczogUGlub1JvbGxSZWNpcGVPcHRpb25zKSB7XG5cdFx0cmV0dXJuIGF0dGFjaFJlY2lwZShmYWN0b3J5LCB7IHJvbGw6IG9wdGlvbnMsIGxvZ0xldmVsOiBvcHRpb25zLmxvZ0xldmVsIH0pO1xuXHR9XG5cblx0QGV4dGVuc2lvbihzY3JpYmUsIHsgc3RhdGljOiB0cnVlIH0pXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm9DdXN0b208VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSA9IHVuZGVmaW5lZD4oXG5cdFx0ZmFjdG9yeTogc2NyaWJlLFxuXHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdCkge1xuXHRcdGNvbnN0IHsgc2NyaWJlLCB0cmFuc3BvcnRzIH0gPSBvcHRpb25zID8/IHt9O1xuXHRcdHJldHVybiBjb25maWd1cmVTY3JpYmUoZmFjdG9yeSwgc2NyaWJlLCB0cmFuc3BvcnRzKTtcblx0fVxufVxuXG5mdW5jdGlvbiBwYXJzZVByZXR0eUFyZyhcblx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG4pOiBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyB7XG5cdGlmIChsb2dMZXZlbE9yT3B0aW9ucyA9PSBudWxsKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGlmICh0eXBlb2YgbG9nTGV2ZWxPck9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4geyBsb2dMZXZlbDogbG9nTGV2ZWxPck9wdGlvbnMgfTtcblx0fVxuXHRyZXR1cm4gbG9nTGV2ZWxPck9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFJlY2lwZShmYWN0b3J5OiBzY3JpYmUsIHBsYW46IFBpbm9SZWNpcGVQbGFuKTogUGlub1JlY2lwZSB7XG5cdGNvbnN0IGxvZ2dlckZhY3RvcnkgPSBhcHBseVJlY2lwZShmYWN0b3J5LCBwbGFuKTtcblx0Y29uc3QgY2hhaW46IFBpbm9SZWNpcGVDaGFpbiA9IHtcblx0XHR3aXRoUGlub1ByZXR0eShsb2dMZXZlbE9yT3B0aW9ucykge1xuXHRcdFx0Y29uc3QgcHJldHR5ID0gcGFyc2VQcmV0dHlBcmcobG9nTGV2ZWxPck9wdGlvbnMpO1xuXHRcdFx0cmV0dXJuIGF0dGFjaFJlY2lwZShmYWN0b3J5LCB7XG5cdFx0XHRcdC4uLnBsYW4sXG5cdFx0XHRcdHByZXR0eTogeyAuLi5wbGFuLnByZXR0eSwgLi4ucHJldHR5IH0sXG5cdFx0XHRcdGxvZ0xldmVsOiBwcmV0dHkubG9nTGV2ZWwgPz8gcGxhbi5sb2dMZXZlbCxcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0d2l0aFBpbm9Sb2xsKG9wdGlvbnMpIHtcblx0XHRcdHJldHVybiBhdHRhY2hSZWNpcGUoZmFjdG9yeSwge1xuXHRcdFx0XHQuLi5wbGFuLFxuXHRcdFx0XHRyb2xsOiBvcHRpb25zLFxuXHRcdFx0XHRsb2dMZXZlbDogb3B0aW9ucy5sb2dMZXZlbCA/PyBwbGFuLmxvZ0xldmVsLFxuXHRcdFx0fSk7XG5cdFx0fSxcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obG9nZ2VyRmFjdG9yeSwgY2hhaW4sIHsgYW5kOiBjaGFpbiB9KTtcbn1cblxuLyoqXG4gKiBBdHRhY2ggYSBsaXN0ZW5lciBzbyB3b3JrZXIgdHJhbnNwb3J0IGZhaWx1cmVzIChlLmcuIHBpbm8tcm9sbCBzeW1saW5rIEVFWElTVClcbiAqIG5ldmVyIGJlY29tZSBOb2RlJ3MgZGVmYXVsdCB1bmhhbmRsZWQgYGVycm9yYCBjcmFzaC5cbiAqL1xuZnVuY3Rpb24gc2lsZW5jZUVycm9ycyh0cmFuc3BvcnQ6IHtcblx0b24oZXZlbnQ6IFwiZXJyb3JcIiwgbGlzdGVuZXI6IChlcnI6IEVycm9yKSA9PiB2b2lkKTogdW5rbm93bjtcbn0pOiB2b2lkIHtcblx0dHJhbnNwb3J0Lm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuXHRcdGNvbnN0IGRldGFpbCA9IGVycj8uc3RhY2sgPz8gU3RyaW5nKGVycik7XG5cdFx0cHJvY2Vzcy5zdGRlcnIud3JpdGUoYFtzY3JpYmUtcGlub10gdHJhbnNwb3J0IGVycm9yOiAke2RldGFpbH1cXG5gKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNhZmVUcmFuc3BvcnQob3B0aW9uczogVHJhbnNwb3J0T3B0aW9ucyk6IERlc3RpbmF0aW9uU3RyZWFtIHtcblx0Y29uc3QgdHJhbnNwb3J0ID0gcGluby50cmFuc3BvcnQob3B0aW9ucyk7XG5cdHNpbGVuY2VFcnJvcnModHJhbnNwb3J0KTtcblx0cmV0dXJuIHRyYW5zcG9ydDtcbn1cblxuZnVuY3Rpb24gYWRhcHRlckZvclRyYW5zcG9ydCh0cmFuc3BvcnQ/OiBUcmFuc3BvcnRPcHRpb25zKTogUGlub0FkYXB0ZXIge1xuXHRpZiAodHJhbnNwb3J0ID09IG51bGwpIHtcblx0XHRyZXR1cm4gbmV3IFBpbm9BZGFwdGVyKHt9KTtcblx0fVxuXHRyZXR1cm4gbmV3IFBpbm9BZGFwdGVyKHt9LCBjcmVhdGVTYWZlVHJhbnNwb3J0KHRyYW5zcG9ydCkpO1xufVxuXG5mdW5jdGlvbiBhcHBseVJlY2lwZShmYWN0b3J5OiBzY3JpYmUsIHBsYW46IFBpbm9SZWNpcGVQbGFuKTogUGlub0xvZ2dlckZhY3Rvcnkge1xuXHRjb25zdCBhZGFwdGVyID0gYWRhcHRlckZvclRyYW5zcG9ydChwaW5vUmVjaXBlLnRyYW5zcG9ydChwbGFuKSk7XG5cdHJldHVybiBmYWN0b3J5LmNvbmZpZ3VyZSh7XG5cdFx0b3B0aW9uczogeyBsb2dMZXZlbDogcGxhbi5sb2dMZXZlbCA/PyBEZWZhdWx0TG9nTGV2ZWwgfSxcblx0XHRhZGFwdGVyLFxuXHR9KTtcbn1cblxuZnVuY3Rpb24gY29uZmlndXJlU2NyaWJlPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0ZmFjdG9yeTogc2NyaWJlLFxuXHRvcHRpb25zOiBTY3JpYmVPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHRjb25maWc/OiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcbikge1xuXHRjb25zdCBlbnZpcm9ubWVudCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID8/IERlZmF1bHRFbnZpcm9ubWVudDtcblx0Y29uc3QgY29uZmlncyA9IChBcnJheS5pc0FycmF5KGNvbmZpZykgPyBjb25maWcgOiBjb25maWcgIT0gbnVsbCA/IFtjb25maWddIDogW10pLmZpbHRlcihcblx0XHQoaXRlbSkgPT4gaXRlbS5lbnZpcm9ubWVudCA9PSBudWxsIHx8IGl0ZW0uZW52aXJvbm1lbnQgPT09IGVudmlyb25tZW50LFxuXHQpO1xuXG5cdGlmIChjb25maWdzLmxlbmd0aCA+IDEpIHtcblx0XHR0aHJvdyBuZXcgTG9nZ2luZ0NvbmZpZ3VyYXRpb25FcnJvcihcblx0XHRcdGBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUgY29uZmlndXJhdGlvbiBwZXIgZW52aXJvbm1lbnQgZm9yIGxvZ2dpbmdgLFxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBhZGFwdGVyID0gYWRhcHRlckZvclRyYW5zcG9ydChjb25maWdzLmF0KDApPy50cmFuc3BvcnRzKTtcblx0cmV0dXJuIGZhY3RvcnkuY29uZmlndXJlKHtcblx0XHRvcHRpb25zOiB7IC4uLm9wdGlvbnMsIGxvZ0xldmVsOiBvcHRpb25zPy5sb2dMZXZlbCA/PyBEZWZhdWx0TG9nTGV2ZWwgfSxcblx0XHRhZGFwdGVyLFxuXHR9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHBpbm9UcmFuc3BvcnQgPSB7IGNyZWF0ZVNhZmVUcmFuc3BvcnQsIHNpbGVuY2VFcnJvcnMgfTtcbiJdLCJuYW1lcyI6WyJQaW5vRXh0ZW5zaW9ucyIsInBpbm9UcmFuc3BvcnQiLCJ3aXRoUGlubyIsImZhY3RvcnkiLCJjb25maWciLCJsb2dMZXZlbCIsImNvbmZpZ3VyZVNjcmliZSIsIndpdGhQaW5vUHJldHR5IiwibG9nTGV2ZWxPck9wdGlvbnMiLCJwcmV0dHkiLCJwYXJzZVByZXR0eUFyZyIsImF0dGFjaFJlY2lwZSIsIndpdGhQaW5vUm9sbCIsIm9wdGlvbnMiLCJyb2xsIiwid2l0aFBpbm9DdXN0b20iLCJzY3JpYmUiLCJ0cmFuc3BvcnRzIiwic3RhdGljIiwicGxhbiIsImxvZ2dlckZhY3RvcnkiLCJhcHBseVJlY2lwZSIsImNoYWluIiwiT2JqZWN0IiwiYXNzaWduIiwiYW5kIiwic2lsZW5jZUVycm9ycyIsInRyYW5zcG9ydCIsIm9uIiwiZXJyIiwiZGV0YWlsIiwic3RhY2siLCJTdHJpbmciLCJwcm9jZXNzIiwic3RkZXJyIiwid3JpdGUiLCJjcmVhdGVTYWZlVHJhbnNwb3J0IiwicGlubyIsImFkYXB0ZXJGb3JUcmFuc3BvcnQiLCJQaW5vQWRhcHRlciIsImFkYXB0ZXIiLCJwaW5vUmVjaXBlIiwiY29uZmlndXJlIiwiRGVmYXVsdExvZ0xldmVsIiwiZW52aXJvbm1lbnQiLCJlbnYiLCJOT0RFX0VOViIsIkRlZmF1bHRFbnZpcm9ubWVudCIsImNvbmZpZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJpdGVtIiwibGVuZ3RoIiwiTG9nZ2luZ0NvbmZpZ3VyYXRpb25FcnJvciIsImF0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQTZGYUE7ZUFBQUE7O1FBNkhBQztlQUFBQTs7OytCQTFOYTt3QkFDMkI7d0JBUTlDOzZEQU1BOzhCQUVxQjs0QkFNckI7Ozs7Ozs7Ozs7Ozs7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
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvc2NyaWJlLXBpbm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5zaW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9leHRlbnNpYmlsaXR5XCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnQsIHR5cGUgRW52aXJvbm1lbnQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL3N5c3RlbVwiO1xuaW1wb3J0IHtcblx0dHlwZSBEZWZhdWx0TGV2ZWxzLFxuXHREZWZhdWx0TG9nTGV2ZWwsXG5cdHR5cGUgTG9nZ2VyLFxuXHRMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yLFxuXHR0eXBlIFNjcmliZU9wdGlvbnMsXG5cdHNjcmliZSxcbn0gZnJvbSBcIkBkZWNvaGVyZS9zY3JpYmVcIjtcbmltcG9ydCBwaW5vLCB7XG5cdHR5cGUgRGVzdGluYXRpb25TdHJlYW0sXG5cdHR5cGUgVHJhbnNwb3J0TXVsdGlPcHRpb25zLFxuXHR0eXBlIFRyYW5zcG9ydFBpcGVsaW5lT3B0aW9ucyxcblx0dHlwZSBUcmFuc3BvcnRTaW5nbGVPcHRpb25zLFxufSBmcm9tIFwicGlub1wiO1xuXG5pbXBvcnQgeyBQaW5vQWRhcHRlciB9IGZyb20gXCIuL3Bpbm8uYWRhcGF0ZXIuanNcIjtcbmltcG9ydCB7XG5cdHR5cGUgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdHR5cGUgUGlub1JlY2lwZVBsYW4sXG5cdHR5cGUgUGlub1JvbGxSZWNpcGVPcHRpb25zLFxuXHRwaW5vUmVjaXBlLFxufSBmcm9tIFwiLi9waW5vLnJlY2lwZS5qc1wiO1xuaW1wb3J0IHsgdHlwZSBHdWFyZGVkVHJhbnNwb3J0LCBndWFyZFRyYW5zcG9ydCB9IGZyb20gXCIuL3Bpbm8udHJhbnNwb3J0LWd1YXJkLmpzXCI7XG5cbmV4cG9ydCB0eXBlIHsgR3VhcmRlZFRyYW5zcG9ydCB9IGZyb20gXCIuL3Bpbm8udHJhbnNwb3J0LWd1YXJkLmpzXCI7XG5leHBvcnQgeyBndWFyZFRyYW5zcG9ydCB9IGZyb20gXCIuL3Bpbm8udHJhbnNwb3J0LWd1YXJkLmpzXCI7XG5cbnR5cGUgVHJhbnNwb3J0T3B0aW9ucyA9XG5cdHwgVHJhbnNwb3J0U2luZ2xlT3B0aW9uc1xuXHR8IFRyYW5zcG9ydE11bHRpT3B0aW9uc1xuXHR8IFRyYW5zcG9ydFBpcGVsaW5lT3B0aW9ucztcblxudHlwZSBUcmFuc3BvcnRDb25maWcgPSB7XG5cdGVudmlyb25tZW50PzogRW52aXJvbm1lbnQ7XG5cdHRyYW5zcG9ydHM6IFRyYW5zcG9ydE9wdGlvbnM7XG59O1xuXG50eXBlIEN1c3RvbUxldmVsT3B0aW9uczxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPiA9IHtcblx0c2NyaWJlPzogU2NyaWJlT3B0aW9uczxULCBDdXN0b21Pbmx5Pjtcblx0dHJhbnNwb3J0cz86IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgUGlub0xvZ2dlckZhY3RvcnkgPSAobmFtZT86IHN0cmluZykgPT4gTG9nZ2VyO1xuXG5leHBvcnQgdHlwZSBQaW5vUmVjaXBlQ2hhaW4gPSB7XG5cdHdpdGhQaW5vUHJldHR5KFxuXHRcdGxvZ0xldmVsT3JPcHRpb25zPzogRGVmYXVsdExldmVscyB8IHN0cmluZyB8IFBpbm9QcmV0dHlSZWNpcGVPcHRpb25zLFxuXHQpOiBQaW5vUmVjaXBlO1xuXHR3aXRoUGlub1JvbGwob3B0aW9uczogUGlub1JvbGxSZWNpcGVPcHRpb25zKTogUGlub1JlY2lwZTtcbn07XG5cbmV4cG9ydCB0eXBlIFBpbm9SZWNpcGUgPSBQaW5vTG9nZ2VyRmFjdG9yeSAmXG5cdFBpbm9SZWNpcGVDaGFpbiAmIHtcblx0XHRyZWFkb25seSBhbmQ6IFBpbm9SZWNpcGVDaGFpbjtcblx0fTtcblxuZGVjbGFyZSBtb2R1bGUgXCJAZGVjb2hlcmUvc2NyaWJlXCIge1xuXHRpbnRlcmZhY2Ugc2NyaWJlIHtcblx0XHR3aXRoUGlubyhcblx0XHRcdHRyYW5zcG9ydHM6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuXHRcdFx0bG9nbGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHRcdCk6IFBpbm9Mb2dnZXJGYWN0b3J5O1xuXHRcdC8qKlxuXHRcdCAqIENvbG9yaXplZCBwcmV0dHkgdHJhbnNwb3J0LiBEZXZlbG9wbWVudCBvbmx5IHVubGVzcyBgeyB3aGVuOiBcImFsd2F5c1wiIH1gLlxuXHRcdCAqIENoYWluIHdpdGggYC5hbmQud2l0aFBpbm9Sb2xsKHsgZmlsZSB9KWAuIFByb2R1Y3Rpb24gd3JpdGVzIEpTT04gdG8gc3Rkb3V0XG5cdFx0ICogc28gbG9nIHNoaXBwaW5nIHN0YXlzIG91dHNpZGUgdGhlIHByb2Nlc3MuXG5cdFx0ICovXG5cdFx0d2l0aFBpbm9QcmV0dHkoXG5cdFx0XHRsb2dMZXZlbE9yT3B0aW9ucz86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcgfCBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyxcblx0XHQpOiBQaW5vUmVjaXBlO1xuXHRcdC8qKlxuXHRcdCAqIFJvbGxpbmcgbG9nIGZpbGVzLiBEZXZlbG9wbWVudCBvbmx5IHVubGVzcyBgeyB3aGVuOiBcImFsd2F5c1wiIH1gLlxuXHRcdCAqIERvIG5vdCBlbmFibGUgaW4gcHJvZHVjdGlvbiDigJQgc2hpcCBzdGRvdXQgZnJvbSBhIHNpZGVjYXIgb3IgcGxhdGZvcm0gYWdlbnQuXG5cdFx0ICogYHN5bWxpbmtgIGRlZmF1bHRzIG9mZjsgZW5hYmxpbmcgaXQgY2FuIHJhY2UgdW5kZXIgbXVsdGktd29ya2VyIC8gSE1SLlxuXHRcdCAqL1xuXHRcdHdpdGhQaW5vUm9sbChvcHRpb25zOiBQaW5vUm9sbFJlY2lwZU9wdGlvbnMpOiBQaW5vUmVjaXBlO1xuXHRcdHdpdGhQaW5vQ3VzdG9tPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgPSB1bmRlZmluZWQ+KFxuXHRcdFx0b3B0aW9ucz86IEN1c3RvbUxldmVsT3B0aW9uczxULCBDdXN0b21Pbmx5Pixcblx0XHQpOiBQaW5vTG9nZ2VyRmFjdG9yeTtcblx0fVxuXHRuYW1lc3BhY2Ugc2NyaWJlIHtcblx0XHRmdW5jdGlvbiB3aXRoUGlubyhcblx0XHRcdHRyYW5zcG9ydHM6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuXHRcdFx0bG9nbGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHRcdCk6IFBpbm9Mb2dnZXJGYWN0b3J5O1xuXHRcdGZ1bmN0aW9uIHdpdGhQaW5vUHJldHR5KFxuXHRcdFx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdFx0KTogUGlub1JlY2lwZTtcblx0XHRmdW5jdGlvbiB3aXRoUGlub1JvbGwob3B0aW9uczogUGlub1JvbGxSZWNpcGVPcHRpb25zKTogUGlub1JlY2lwZTtcblx0XHRmdW5jdGlvbiB3aXRoUGlub0N1c3RvbTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPihcblx0XHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdFx0KTogUGlub0xvZ2dlckZhY3Rvcnk7XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpbm9FeHRlbnNpb25zIHtcblx0QGV4dGVuc2lvbihzY3JpYmUsIHsgc3RhdGljOiB0cnVlIH0pXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm8oXG5cdFx0ZmFjdG9yeTogc2NyaWJlLFxuXHRcdGNvbmZpZzogVHJhbnNwb3J0Q29uZmlnIHwgVHJhbnNwb3J0Q29uZmlnW10sXG5cdFx0bG9nTGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHQpIHtcblx0XHRyZXR1cm4gY29uZmlndXJlU2NyaWJlKGZhY3RvcnksIHsgbG9nTGV2ZWwgfSwgY29uZmlnKTtcblx0fVxuXG5cdEBleHRlbnNpb24oc2NyaWJlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuXHRwdWJsaWMgc3RhdGljIHdpdGhQaW5vUHJldHR5KFxuXHRcdGZhY3Rvcnk6IHNjcmliZSxcblx0XHRsb2dMZXZlbE9yT3B0aW9ucz86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcgfCBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyxcblx0KSB7XG5cdFx0Y29uc3QgcHJldHR5ID0gcGFyc2VQcmV0dHlBcmcobG9nTGV2ZWxPck9wdGlvbnMpO1xuXHRcdHJldHVybiBhdHRhY2hSZWNpcGUoZmFjdG9yeSwgeyBwcmV0dHksIGxvZ0xldmVsOiBwcmV0dHkubG9nTGV2ZWwgfSk7XG5cdH1cblxuXHRAZXh0ZW5zaW9uKHNjcmliZSwgeyBzdGF0aWM6IHRydWUgfSlcblx0cHVibGljIHN0YXRpYyB3aXRoUGlub1JvbGwoZmFjdG9yeTogc2NyaWJlLCBvcHRpb25zOiBQaW5vUm9sbFJlY2lwZU9wdGlvbnMpIHtcblx0XHRyZXR1cm4gYXR0YWNoUmVjaXBlKGZhY3RvcnksIHsgcm9sbDogb3B0aW9ucywgbG9nTGV2ZWw6IG9wdGlvbnMubG9nTGV2ZWwgfSk7XG5cdH1cblxuXHRAZXh0ZW5zaW9uKHNjcmliZSwgeyBzdGF0aWM6IHRydWUgfSlcblx0cHVibGljIHN0YXRpYyB3aXRoUGlub0N1c3RvbTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPihcblx0XHRmYWN0b3J5OiBzY3JpYmUsXG5cdFx0b3B0aW9ucz86IEN1c3RvbUxldmVsT3B0aW9uczxULCBDdXN0b21Pbmx5Pixcblx0KSB7XG5cdFx0Y29uc3QgeyBzY3JpYmUsIHRyYW5zcG9ydHMgfSA9IG9wdGlvbnMgPz8ge307XG5cdFx0cmV0dXJuIGNvbmZpZ3VyZVNjcmliZShmYWN0b3J5LCBzY3JpYmUsIHRyYW5zcG9ydHMpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJldHR5QXJnKFxuXHRsb2dMZXZlbE9yT3B0aW9ucz86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcgfCBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyxcbik6IFBpbm9QcmV0dHlSZWNpcGVPcHRpb25zIHtcblx0aWYgKGxvZ0xldmVsT3JPcHRpb25zID09IG51bGwpIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0aWYgKHR5cGVvZiBsb2dMZXZlbE9yT3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiB7IGxvZ0xldmVsOiBsb2dMZXZlbE9yT3B0aW9ucyB9O1xuXHR9XG5cdHJldHVybiBsb2dMZXZlbE9yT3B0aW9ucztcbn1cblxuZnVuY3Rpb24gYXR0YWNoUmVjaXBlKGZhY3Rvcnk6IHNjcmliZSwgcGxhbjogUGlub1JlY2lwZVBsYW4pOiBQaW5vUmVjaXBlIHtcblx0Y29uc3QgbG9nZ2VyRmFjdG9yeSA9IGFwcGx5UmVjaXBlKGZhY3RvcnksIHBsYW4pO1xuXHRjb25zdCBjaGFpbjogUGlub1JlY2lwZUNoYWluID0ge1xuXHRcdHdpdGhQaW5vUHJldHR5KGxvZ0xldmVsT3JPcHRpb25zKSB7XG5cdFx0XHRjb25zdCBwcmV0dHkgPSBwYXJzZVByZXR0eUFyZyhsb2dMZXZlbE9yT3B0aW9ucyk7XG5cdFx0XHRyZXR1cm4gYXR0YWNoUmVjaXBlKGZhY3RvcnksIHtcblx0XHRcdFx0Li4ucGxhbixcblx0XHRcdFx0cHJldHR5OiB7IC4uLnBsYW4ucHJldHR5LCAuLi5wcmV0dHkgfSxcblx0XHRcdFx0bG9nTGV2ZWw6IHByZXR0eS5sb2dMZXZlbCA/PyBwbGFuLmxvZ0xldmVsLFxuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHR3aXRoUGlub1JvbGwob3B0aW9ucykge1xuXHRcdFx0cmV0dXJuIGF0dGFjaFJlY2lwZShmYWN0b3J5LCB7XG5cdFx0XHRcdC4uLnBsYW4sXG5cdFx0XHRcdHJvbGw6IG9wdGlvbnMsXG5cdFx0XHRcdGxvZ0xldmVsOiBvcHRpb25zLmxvZ0xldmVsID8/IHBsYW4ubG9nTGV2ZWwsXG5cdFx0XHR9KTtcblx0XHR9LFxuXHR9O1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihsb2dnZXJGYWN0b3J5LCBjaGFpbiwgeyBhbmQ6IGNoYWluIH0pO1xufVxuXG4vKipcbiAqIEd1YXJkIGEgd29ya2VyIHRyYW5zcG9ydCBzbyBmYWlsdXJlcyAocm9sbCBFRVhJU1QsIHdvcmtlciBleGl0KSBuZWl0aGVyXG4gKiBjcmFzaCB0aGUgcHJvY2VzcyBub3Igc3BhbSBzdGRlcnIgb24gZXZlcnkgc3Vic2VxdWVudCBsb2cgd3JpdGUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNhZmVUcmFuc3BvcnQob3B0aW9uczogVHJhbnNwb3J0T3B0aW9ucyk6IERlc3RpbmF0aW9uU3RyZWFtIHtcblx0cmV0dXJuIGd1YXJkVHJhbnNwb3J0KHBpbm8udHJhbnNwb3J0KG9wdGlvbnMpKTtcbn1cblxuZnVuY3Rpb24gYWRhcHRlckZvclRyYW5zcG9ydCh0cmFuc3BvcnQ/OiBUcmFuc3BvcnRPcHRpb25zKTogUGlub0FkYXB0ZXIge1xuXHRpZiAodHJhbnNwb3J0ID09IG51bGwpIHtcblx0XHRyZXR1cm4gbmV3IFBpbm9BZGFwdGVyKHt9KTtcblx0fVxuXHRyZXR1cm4gbmV3IFBpbm9BZGFwdGVyKHt9LCBjcmVhdGVTYWZlVHJhbnNwb3J0KHRyYW5zcG9ydCkpO1xufVxuXG5mdW5jdGlvbiBhcHBseVJlY2lwZShmYWN0b3J5OiBzY3JpYmUsIHBsYW46IFBpbm9SZWNpcGVQbGFuKTogUGlub0xvZ2dlckZhY3Rvcnkge1xuXHRjb25zdCBhZGFwdGVyID0gYWRhcHRlckZvclRyYW5zcG9ydChwaW5vUmVjaXBlLnRyYW5zcG9ydChwbGFuKSk7XG5cdHJldHVybiBmYWN0b3J5LmNvbmZpZ3VyZSh7XG5cdFx0b3B0aW9uczogeyBsb2dMZXZlbDogcGxhbi5sb2dMZXZlbCA/PyBEZWZhdWx0TG9nTGV2ZWwgfSxcblx0XHRhZGFwdGVyLFxuXHR9KTtcbn1cblxuZnVuY3Rpb24gY29uZmlndXJlU2NyaWJlPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0ZmFjdG9yeTogc2NyaWJlLFxuXHRvcHRpb25zOiBTY3JpYmVPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHRjb25maWc/OiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcbikge1xuXHRjb25zdCBlbnZpcm9ubWVudCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID8/IERlZmF1bHRFbnZpcm9ubWVudDtcblx0Y29uc3QgY29uZmlncyA9IChBcnJheS5pc0FycmF5KGNvbmZpZykgPyBjb25maWcgOiBjb25maWcgIT0gbnVsbCA/IFtjb25maWddIDogW10pLmZpbHRlcihcblx0XHQoaXRlbSkgPT4gaXRlbS5lbnZpcm9ubWVudCA9PSBudWxsIHx8IGl0ZW0uZW52aXJvbm1lbnQgPT09IGVudmlyb25tZW50LFxuXHQpO1xuXG5cdGlmIChjb25maWdzLmxlbmd0aCA+IDEpIHtcblx0XHR0aHJvdyBuZXcgTG9nZ2luZ0NvbmZpZ3VyYXRpb25FcnJvcihcblx0XHRcdGBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUgY29uZmlndXJhdGlvbiBwZXIgZW52aXJvbm1lbnQgZm9yIGxvZ2dpbmdgLFxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBhZGFwdGVyID0gYWRhcHRlckZvclRyYW5zcG9ydChjb25maWdzLmF0KDApPy50cmFuc3BvcnRzKTtcblx0cmV0dXJuIGZhY3RvcnkuY29uZmlndXJlKHtcblx0XHRvcHRpb25zOiB7IC4uLm9wdGlvbnMsIGxvZ0xldmVsOiBvcHRpb25zPy5sb2dMZXZlbCA/PyBEZWZhdWx0TG9nTGV2ZWwgfSxcblx0XHRhZGFwdGVyLFxuXHR9KTtcbn1cblxuLyoqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgZ3VhcmRUcmFuc3BvcnR9IOKAlCBrZXB0IGZvciBjYWxsZXJzL3Rlc3RzIGZyb20gdGhlIHNpbGVuY2Utb25seSBlcmEuICovXG5mdW5jdGlvbiBzaWxlbmNlRXJyb3JzKHRyYW5zcG9ydDoge1xuXHRvbihldmVudDogXCJlcnJvclwiLCBsaXN0ZW5lcjogKGVycjogRXJyb3IpID0+IHZvaWQpOiB1bmtub3duO1xuXHR3cml0ZT86ICguLi5hcmdzOiBuZXZlcltdKSA9PiB1bmtub3duO1xufSk6IEd1YXJkZWRUcmFuc3BvcnQge1xuXHRyZXR1cm4gZ3VhcmRUcmFuc3BvcnQodHJhbnNwb3J0IGFzIERlc3RpbmF0aW9uU3RyZWFtKTtcbn1cblxuZXhwb3J0IGNvbnN0IHBpbm9UcmFuc3BvcnQgPSB7IGNyZWF0ZVNhZmVUcmFuc3BvcnQsIGd1YXJkVHJhbnNwb3J0LCBzaWxlbmNlRXJyb3JzIH07XG4iXSwibmFtZXMiOlsiUGlub0V4dGVuc2lvbnMiLCJndWFyZFRyYW5zcG9ydCIsInBpbm9UcmFuc3BvcnQiLCJ3aXRoUGlubyIsImZhY3RvcnkiLCJjb25maWciLCJsb2dMZXZlbCIsImNvbmZpZ3VyZVNjcmliZSIsIndpdGhQaW5vUHJldHR5IiwibG9nTGV2ZWxPck9wdGlvbnMiLCJwcmV0dHkiLCJwYXJzZVByZXR0eUFyZyIsImF0dGFjaFJlY2lwZSIsIndpdGhQaW5vUm9sbCIsIm9wdGlvbnMiLCJyb2xsIiwid2l0aFBpbm9DdXN0b20iLCJzY3JpYmUiLCJ0cmFuc3BvcnRzIiwic3RhdGljIiwicGxhbiIsImxvZ2dlckZhY3RvcnkiLCJhcHBseVJlY2lwZSIsImNoYWluIiwiT2JqZWN0IiwiYXNzaWduIiwiYW5kIiwiY3JlYXRlU2FmZVRyYW5zcG9ydCIsInBpbm8iLCJ0cmFuc3BvcnQiLCJhZGFwdGVyRm9yVHJhbnNwb3J0IiwiUGlub0FkYXB0ZXIiLCJhZGFwdGVyIiwicGlub1JlY2lwZSIsImNvbmZpZ3VyZSIsIkRlZmF1bHRMb2dMZXZlbCIsImVudmlyb25tZW50IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiRGVmYXVsdEVudmlyb25tZW50IiwiY29uZmlncyIsIkFycmF5IiwiaXNBcnJheSIsImZpbHRlciIsIml0ZW0iLCJsZW5ndGgiLCJMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yIiwiYXQiLCJzaWxlbmNlRXJyb3JzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQWlHYUE7ZUFBQUE7O1FBdEVKQztlQUFBQSxrQ0FBYzs7UUFnTVZDO2VBQUFBOzs7K0JBM05hO3dCQUMyQjt3QkFROUM7NkRBTUE7OEJBRXFCOzRCQU1yQjtvQ0FDK0M7Ozs7Ozs7Ozs7Ozs7OztBQXlFL0MsTUFBTUY7SUFDWixPQUNjRyxTQUNiQyxPQUFlLEVBQ2ZDLE1BQTJDLEVBQzNDQyxRQUFpQyxFQUNoQztRQUNELE9BQU9DLGdCQUFnQkgsU0FBUztZQUFFRTtRQUFTLEdBQUdEO0lBQy9DO0lBRUEsT0FDY0csZUFDYkosT0FBZSxFQUNmSyxpQkFBb0UsRUFDbkU7UUFDRCxNQUFNQyxTQUFTQyxlQUFlRjtRQUM5QixPQUFPRyxhQUFhUixTQUFTO1lBQUVNO1lBQVFKLFVBQVVJLE9BQU9KLFFBQVE7UUFBQztJQUNsRTtJQUVBLE9BQ2NPLGFBQWFULE9BQWUsRUFBRVUsT0FBOEIsRUFBRTtRQUMzRSxPQUFPRixhQUFhUixTQUFTO1lBQUVXLE1BQU1EO1lBQVNSLFVBQVVRLFFBQVFSLFFBQVE7UUFBQztJQUMxRTtJQUVBLE9BQ2NVLGVBQ2JaLE9BQWUsRUFDZlUsT0FBMkMsRUFDMUM7UUFDRCxNQUFNLEVBQUVHLE1BQU0sRUFBRUMsVUFBVSxFQUFFLEdBQUdKLFdBQVcsQ0FBQztRQUMzQyxPQUFPUCxnQkFBZ0JILFNBQVNhLFFBQVFDO0lBQ3pDO0FBQ0Q7OztRQS9Cc0JDLFFBQVE7Ozs7Ozs7Ozs7OztRQVNSQSxRQUFROzs7Ozs7Ozs7OztRQVNSQSxRQUFROzs7Ozs7Ozs7OztRQUtSQSxRQUFROzs7Ozs7Ozs7QUFVOUIsU0FBU1IsZUFDUkYsaUJBQW9FO0lBRXBFLElBQUlBLHFCQUFxQixNQUFNO1FBQzlCLE9BQU8sQ0FBQztJQUNUO0lBQ0EsSUFBSSxPQUFPQSxzQkFBc0Is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
@@ -5,6 +5,7 @@ export class PinoAdapter extends LogAdapter {
5
5
  options;
6
6
  stream;
7
7
  disposed = false;
8
+ retired = false;
8
9
  constructor(options, stream){
9
10
  super();
10
11
  this.options = options;
@@ -34,19 +35,56 @@ export class PinoAdapter extends LogAdapter {
34
35
  return logger;
35
36
  }
36
37
  flush(cb) {
38
+ if (this.retired || !this._pino) {
39
+ cb?.();
40
+ return;
41
+ }
37
42
  this._pino.flush(cb);
38
43
  }
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
+ }
39
59
  async [Symbol.asyncDispose]() {
40
60
  if (this.disposed) {
41
61
  return;
42
62
  }
43
63
  this.disposed = true;
44
- if (this._pino) {
64
+ if (this._pino && !this.retired) {
45
65
  await new Promise((resolve)=>{
46
- this._pino.flush(()=>resolve());
66
+ try {
67
+ this._pino.flush(()=>resolve());
68
+ } catch {
69
+ resolve();
70
+ }
47
71
  });
48
72
  }
49
- await endDestination(this.stream);
73
+ if (!this.retired) {
74
+ await endDestination(this.stream);
75
+ }
76
+ // Mark dead after graceful end (or immediately if already force-retired).
77
+ this.retire();
78
+ }
79
+ }
80
+ function destroyDestination(stream) {
81
+ const destroyable = stream;
82
+ if (typeof destroyable?.destroy === "function") {
83
+ try {
84
+ destroyable.destroy();
85
+ } catch {
86
+ // already dead
87
+ }
50
88
  }
51
89
  }
52
90
  function endDestination(stream) {
@@ -102,4 +140,4 @@ function pinoMix(logger) {
102
140
  });
103
141
  }
104
142
 
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5hZGFwYXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIEJhc2VMb2dnZXIsXG5cdGZvcm1hdEVycm9yLFxuXHRMb2dBZGFwdGVyLFxuXHR0eXBlIExvZ2dlcixcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxufSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHBpbm8sIHsgdHlwZSBMb2dGbiB9IGZyb20gXCJwaW5vXCI7XG5cbmV4cG9ydCB0eXBlIFBpbm9BZGFwYXRlck9wdGlvbnMgPSB7XG5cdG9wdGlvbnM/OiBwaW5vLkxvZ2dlck9wdGlvbnM7XG5cdHN0cmVhbT86IHBpbm8uRGVzdGluYXRpb25TdHJlYW07XG59O1xuXG50eXBlIEVuZGFibGVTdHJlYW0gPSB7XG5cdGVuZD86IChjYj86IChlcnI/OiBFcnJvciB8IG51bGwpID0+IHZvaWQpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgY2xhc3MgUGlub0FkYXB0ZXIgZXh0ZW5kcyBMb2dBZGFwdGVyIHtcblx0cHJpdmF0ZSBfcGlubzogcGluby5Mb2dnZXI7XG5cdHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogcGluby5Mb2dnZXJPcHRpb25zO1xuXHRwcml2YXRlIHJlYWRvbmx5IHN0cmVhbTogcGluby5EZXN0aW5hdGlvblN0cmVhbSB8IHVuZGVmaW5lZDtcblx0cHJpdmF0ZSBkaXNwb3NlZCA9IGZhbHNlO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnMsIHN0cmVhbT86IHBpbm8uRGVzdGluYXRpb25TdHJlYW0pIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdHJlYW0gPSBzdHJlYW07XG5cdH1cblxuXHRwdWJsaWMgY29uZmlndXJlPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0XHRzY3JpYmVPcHRpb25zOiBTY3JpYmVPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHQpIHtcblx0XHRjb25zdCB7IGxvZ0xldmVsLCByZWRhY3Rpb25zIH0gPSBzY3JpYmVPcHRpb25zO1xuXHRcdGNvbnN0IGN1c3RvbUxldmVscyA9IHRoaXMuZ2V0TG9nTGV2ZWxzKHNjcmliZU9wdGlvbnMpO1xuXG5cdFx0Y29uc3QgcGlub09wdGlvbnM6IHBpbm8uTG9nZ2VyT3B0aW9ucyA9IHtcblx0XHRcdGN1c3RvbUxldmVscyxcblx0XHRcdGxldmVsOiBsb2dMZXZlbCxcblx0XHRcdGhvb2tzOiB7IGxvZ01ldGhvZCB9LFxuXHRcdFx0c2VyaWFsaXplcnM6IHtcblx0XHRcdFx0ZXJyb3I6IHBpbm8uc3RkU2VyaWFsaXplcnMuZXJyLFxuXHRcdFx0fSxcblx0XHRcdHJlZGFjdDogcmVkYWN0aW9ucyxcblx0XHRcdC4uLnRoaXMub3B0aW9ucyxcblx0XHR9O1xuXHRcdHRoaXMuX3Bpbm8gPSBwaW5vKHBpbm9PcHRpb25zLCB0aGlzLnN0cmVhbSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TG9nZ2VyPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0XHRuYW1lOiBzdHJpbmcsXG5cdCk6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdFx0Y29uc3QgbG9nZ2VyID0gcGlub01peDxULCBDdXN0b21Pbmx5Pih0aGlzLl9waW5vLmNoaWxkKHsgbmFtZSB9KSk7XG5cdFx0cmV0dXJuIGxvZ2dlcjtcblx0fVxuXG5cdHB1YmxpYyBmbHVzaChjYj86ICgpID0+IHZvaWQpOiB2b2lkIHtcblx0XHR0aGlzLl9waW5vLmZsdXNoKGNiKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuZGlzcG9zZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5kaXNwb3NlZCA9IHRydWU7XG5cdFx0aWYgKHRoaXMuX3Bpbm8pIHtcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3Bpbm8uZmx1c2goKCkgPT4gcmVzb2x2ZSgpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhd2FpdCBlbmREZXN0aW5hdGlvbih0aGlzLnN0cmVhbSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZW5kRGVzdGluYXRpb24oc3RyZWFtOiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IGVuZGFibGUgPSBzdHJlYW0gYXMgRW5kYWJsZVN0cmVhbSB8IHVuZGVmaW5lZDtcblx0aWYgKHR5cGVvZiBlbmRhYmxlPy5lbmQgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0ZW5kYWJsZS5lbmQoKCkgPT4gcmVzb2x2ZSgpKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBsb2dNZXRob2QodGhpczogcGluby5Mb2dnZXIsIGFyZ3M6IFBhcmFtZXRlcnM8TG9nRm4+LCBtZXRob2Q6IExvZ0ZuKSB7XG5cdGxldCBtZXNzYWdlID0gYXJncy5hdCgwKTtcblx0Y29uc3QgZGF0YSA9IGFyZ3MuYXQoMSk7XG5cblx0aWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdG1ldGhvZC5jYWxsKHRoaXMsIHsgZXJyOiBtZXNzYWdlIH0sIGZvcm1hdEVycm9yKG1lc3NhZ2UpKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoZGF0YSBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCAuLi57IGVycm9yOiBkYXRhIH0gfTtcblx0fSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIikge1xuXHRcdG1lc3NhZ2UgPSB7IG1zZzogbWVzc2FnZSwgLi4uZGF0YSB9O1xuXHR9IGVsc2Uge1xuXHRcdG1lc3NhZ2UgPSB7IG1zZzogbWVzc2FnZSwgZGF0YSB9O1xuXHR9XG5cblx0bWV0aG9kLmNhbGwodGhpcywgbWVzc2FnZSk7XG59XG5cbmZ1bmN0aW9uIHBpbm9NaXg8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRsb2dnZXI6IHBpbm8uTG9nZ2VyLFxuKTogTG9nZ2VyPFQsIEN1c3RvbU9ubHk+IHtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ248cGluby5Mb2dnZXIsIEJhc2VMb2dnZXI+KGxvZ2dlciwge1xuXHRcdGdldCBjdXJyZW50TGV2ZWwoKSB7XG5cdFx0XHRyZXR1cm4gbG9nZ2VyLmxldmVsO1xuXHRcdH0sXG5cdFx0Z2V0IGxvZ0xldmVscygpIHtcblx0XHRcdHJldHVybiBsb2dnZXIubGV2ZWxzLnZhbHVlcztcblx0XHR9LFxuXHR9KSBhcyBMb2dnZXI8VCwgQ3VzdG9tT25seT47XG59XG4iXSwibmFtZXMiOlsiZm9ybWF0RXJyb3IiLCJMb2dBZGFwdGVyIiwicGlubyIsIlBpbm9BZGFwdGVyIiwiX3Bpbm8iLCJvcHRpb25zIiwic3RyZWFtIiwiZGlzcG9zZWQiLCJjb25maWd1cmUiLCJzY3JpYmVPcHRpb25zIiwibG9nTGV2ZWwiLCJyZWRhY3Rpb25zIiwiY3VzdG9tTGV2ZWxzIiwiZ2V0TG9nTGV2ZWxzIiwicGlub09wdGlvbnMiLCJsZXZlbCIsImhvb2tzIiwibG9nTWV0aG9kIiwic2VyaWFsaXplcnMiLCJlcnJvciIsInN0ZFNlcmlhbGl6ZXJzIiwiZXJyIiwicmVkYWN0IiwiZ2V0TG9nZ2VyIiwibmFtZSIsImxvZ2dlciIsInBpbm9NaXgiLCJjaGlsZCIsImZsdXNoIiwiY2IiLCJTeW1ib2wiLCJhc3luY0Rpc3Bvc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsImVuZERlc3RpbmF0aW9uIiwiZW5kYWJsZSIsImVuZCIsImFyZ3MiLCJtZXRob2QiLCJtZXNzYWdlIiwiYXQiLCJkYXRhIiwiRXJyb3IiLCJjYWxsIiwibXNnIiwiT2JqZWN0IiwiYXNzaWduIiwiY3VycmVudExldmVsIiwibG9nTGV2ZWxzIiwibGV2ZWxzIiwidmFsdWVzIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUVDQSxXQUFXLEVBQ1hDLFVBQVUsUUFHSixtQkFBbUI7QUFDMUIsT0FBT0MsVUFBMEIsT0FBTztBQVd4QyxPQUFPLE1BQU1DLG9CQUFvQkY7SUFDeEJHLE1BQW1CO0lBQ1ZDLFFBQTRCO0lBQzVCQyxPQUEyQztJQUNwREMsV0FBVyxNQUFNO0lBRXpCLFlBQW1CRixPQUEyQixFQUFFQyxNQUErQixDQUFFO1FBQ2hGLEtBQUs7UUFDTCxJQUFJLENBQUNELE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNDLE1BQU0sR0FBR0E7SUFDZjtJQUVPRSxVQUNOQyxhQUEyQyxFQUMxQztRQUNELE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxVQUFVLEVBQUUsR0FBR0Y7UUFDakMsTUFBTUcsZUFBZSxJQUFJLENBQUNDLFlBQVksQ0FBQ0o7UUFFdkMsTUFBTUssY0FBa0M7WUFDdkNGO1lBQ0FHLE9BQU9MO1lBQ1BNLE9BQU87Z0JBQUVDO1lBQVU7WUFDbkJDLGFBQWE7Z0JBQ1pDLE9BQU9qQixLQUFLa0IsY0FBYyxDQUFDQyxHQUFHO1lBQy9CO1lBQ0FDLFFBQVFYO1lBQ1IsR0FBRyxJQUFJLENBQUNOLE9BQU87UUFDaEI7UUFDQSxJQUFJLENBQUNELEtBQUssR0FBR0YsS0FBS1ksYUFBYSxJQUFJLENBQUNSLE1BQU07SUFDM0M7SUFFT2lCLFVBQ05DLElBQVksRUFDWTtRQUN4QixNQUFNQyxTQUFTQyxRQUF1QixJQUFJLENBQUN0QixLQUFLLENBQUN1QixLQUFLLENBQUM7WUFBRUg7UUFBSztRQUM5RCxPQUFPQztJQUNSO0lBRU9HLE1BQU1DLEVBQWUsRUFBUTtRQUNuQyxJQUFJLENBQUN6QixLQUFLLENBQUN3QixLQUFLLENBQUNDO0lBQ2xCO0lBRUEsTUFBYSxDQUFDQyxPQUFPQyxZQUFZLENBQUMsR0FBa0I7UUFDbkQsSUFBSSxJQUFJLENBQUN4QixRQUFRLEVBQUU7WUFDbEI7UUFDRDtRQUNBLElBQUksQ0FBQ0EsUUFBUSxHQUFHO1FBQ2hCLElBQUksSUFBSSxDQUFDSCxLQUFLLEVBQUU7WUFDZixNQUFNLElBQUk0QixRQUFjLENBQUNDO2dCQUN4QixJQUFJLENBQUM3QixLQUFLLENBQUN3QixLQUFLLENBQUMsSUFBTUs7WUFDeEI7UUFDRDtRQUNBLE1BQU1DLGVBQWUsSUFBSSxDQUFDNUIsTUFBTTtJQUNqQztBQUNEO0FBRUEsU0FBUzRCLGVBQWU1QixNQUEwQztJQUNqRSxNQUFNNkIsVUFBVTdCO0lBQ2hCLElBQUksT0FBTzZCLFNBQVNDLFFBQVEsWUFBWTtRQUN2QyxPQUFPSixRQUFRQyxPQUFPO0lBQ3ZCO0lBQ0EsT0FBTyxJQUFJRCxRQUFjLENBQUNDO1FBQ3pCLElBQUk7WUFDSEUsUUFBUUMsR0FBRyxDQUFDLElBQU1IO1FBQ25CLEVBQUUsT0FBTTtZQUNQQTtRQUNEO0lBQ0Q7QUFDRDtBQUVBLFNBQVNoQixVQUE2Qm9CLElBQXVCLEVBQUVDLE1BQWE7SUFDM0UsSUFBSUMsVUFBVUYsS0FBS0csRUFBRSxDQUFDO0lBQ3RCLE1BQU1DLE9BQU9KLEtBQUtHLEVBQUUsQ0FBQztJQUVyQixJQUFJRCxtQkFBbUJHLE9BQU87UUFDN0JKLE9BQU9LLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFBRXRCLEtBQUtrQjtRQUFRLEdBQUd2QyxZQUFZdUM7UUFDaEQ7SUFDRDtJQUVBLElBQUlFLGdCQUFnQkMsT0FBTztRQUMxQkgsVUFBVTtZQUFFSyxLQUFLTDtZQUFTLEdBQUc7Z0JBQUVwQixPQUFPc0I7WUFBSyxDQUFDO1FBQUM7SUFDOUMsT0FBTyxJQUFJLE9BQU9BLFNBQVMsVUFBVTtRQUNwQ0YsVUFBVTtZQUFFSyxLQUFLTDtZQUFTLEdBQUdFLElBQUk7UUFBQztJQUNuQyxPQUFPO1FBQ05GLFVBQVU7WUFBRUssS0FBS0w7WUFBU0U7UUFBSztJQUNoQztJQUVBSCxPQUFPSyxJQUFJLENBQUMsSUFBSSxFQUFFSjtBQUNuQjtBQUVBLFNBQVNiLFFBQ1JELE1BQW1CO0lBRW5CLE9BQU9vQixPQUFPQyxNQUFNLENBQTBCckIsUUFBUTtRQUNyRCxJQUFJc0IsZ0JBQWU7WUFDbEIsT0FBT3RCLE9BQU9WLEtBQUs7UUFDcEI7UUFDQSxJQUFJaUMsYUFBWTtZQUNmLE9BQU92QixPQUFPd0IsTUFBTSxDQUFDQyxNQUFNO1FBQzVCO0lBQ0Q7QUFDRCJ9
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5hZGFwYXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIEJhc2VMb2dnZXIsXG5cdGZvcm1hdEVycm9yLFxuXHRMb2dBZGFwdGVyLFxuXHR0eXBlIExvZ2dlcixcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxufSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHBpbm8sIHsgdHlwZSBMb2dGbiB9IGZyb20gXCJwaW5vXCI7XG5cbmltcG9ydCB0eXBlIHsgR3VhcmRlZFRyYW5zcG9ydCB9IGZyb20gXCIuL3Bpbm8udHJhbnNwb3J0LWd1YXJkLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFBpbm9BZGFwYXRlck9wdGlvbnMgPSB7XG5cdG9wdGlvbnM/OiBwaW5vLkxvZ2dlck9wdGlvbnM7XG5cdHN0cmVhbT86IHBpbm8uRGVzdGluYXRpb25TdHJlYW07XG59O1xuXG50eXBlIEVuZGFibGVTdHJlYW0gPSB7XG5cdGVuZD86IChjYj86IChlcnI/OiBFcnJvciB8IG51bGwpID0+IHZvaWQpID0+IHZvaWQ7XG5cdGRlc3Ryb3k/OiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBjbGFzcyBQaW5vQWRhcHRlciBleHRlbmRzIExvZ0FkYXB0ZXIge1xuXHRwcml2YXRlIF9waW5vOiBwaW5vLkxvZ2dlcjtcblx0cHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnM7XG5cdHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtIHwgdW5kZWZpbmVkO1xuXHRwcml2YXRlIGRpc3Bvc2VkID0gZmFsc2U7XG5cdHByaXZhdGUgcmV0aXJlZCA9IGZhbHNlO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnMsIHN0cmVhbT86IHBpbm8uRGVzdGluYXRpb25TdHJlYW0pIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdHJlYW0gPSBzdHJlYW07XG5cdH1cblxuXHRwdWJsaWMgY29uZmlndXJlPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0XHRzY3JpYmVPcHRpb25zOiBTY3JpYmVPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHQpIHtcblx0XHRjb25zdCB7IGxvZ0xldmVsLCByZWRhY3Rpb25zIH0gPSBzY3JpYmVPcHRpb25zO1xuXHRcdGNvbnN0IGN1c3RvbUxldmVscyA9IHRoaXMuZ2V0TG9nTGV2ZWxzKHNjcmliZU9wdGlvbnMpO1xuXG5cdFx0Y29uc3QgcGlub09wdGlvbnM6IHBpbm8uTG9nZ2VyT3B0aW9ucyA9IHtcblx0XHRcdGN1c3RvbUxldmVscyxcblx0XHRcdGxldmVsOiBsb2dMZXZlbCxcblx0XHRcdGhvb2tzOiB7IGxvZ01ldGhvZCB9LFxuXHRcdFx0c2VyaWFsaXplcnM6IHtcblx0XHRcdFx0ZXJyb3I6IHBpbm8uc3RkU2VyaWFsaXplcnMuZXJyLFxuXHRcdFx0fSxcblx0XHRcdHJlZGFjdDogcmVkYWN0aW9ucyxcblx0XHRcdC4uLnRoaXMub3B0aW9ucyxcblx0XHR9O1xuXHRcdHRoaXMuX3Bpbm8gPSBwaW5vKHBpbm9PcHRpb25zLCB0aGlzLnN0cmVhbSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TG9nZ2VyPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0XHRuYW1lOiBzdHJpbmcsXG5cdCk6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdFx0Y29uc3QgbG9nZ2VyID0gcGlub01peDxULCBDdXN0b21Pbmx5Pih0aGlzLl9waW5vLmNoaWxkKHsgbmFtZSB9KSk7XG5cdFx0cmV0dXJuIGxvZ2dlcjtcblx0fVxuXG5cdHB1YmxpYyBmbHVzaChjYj86ICgpID0+IHZvaWQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5yZXRpcmVkIHx8ICF0aGlzLl9waW5vKSB7XG5cdFx0XHRjYj8uKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuX3Bpbm8uZmx1c2goY2IpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEltbWVkaWF0ZWx5IHN0b3AgYWNjZXB0aW5nIHdyaXRlcyBpbnRvIHRoZSBkZXN0aW5hdGlvbiAoVGhyZWFkU3RyZWFtKS5cblx0ICogRG9lcyBub3Qgd2FpdCBmb3IgZmx1c2gg4oCUIHVzZSBgc3RvcCgpYCBmb3IgYXN5bmMgZHJhaW4gYWZ0ZXIgcmV0aXJlLlxuXHQgKi9cblx0cHVibGljIHJldGlyZSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5yZXRpcmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMucmV0aXJlZCA9IHRydWU7XG5cdFx0Y29uc3QgZ3VhcmRlZCA9IHRoaXMuc3RyZWFtIGFzIEd1YXJkZWRUcmFuc3BvcnQgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKHR5cGVvZiBndWFyZGVkPy5yZXRpcmUgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0Z3VhcmRlZC5yZXRpcmUoXCJhZGFwdGVyIHJldGlyZWRcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGRlc3Ryb3lEZXN0aW5hdGlvbih0aGlzLnN0cmVhbSk7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmRpc3Bvc2VkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xuXHRcdGlmICh0aGlzLl9waW5vICYmICF0aGlzLnJldGlyZWQpIHtcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dGhpcy5fcGluby5mbHVzaCgoKSA9PiByZXNvbHZlKCkpO1xuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMucmV0aXJlZCkge1xuXHRcdFx0YXdhaXQgZW5kRGVzdGluYXRpb24odGhpcy5zdHJlYW0pO1xuXHRcdH1cblx0XHQvLyBNYXJrIGRlYWQgYWZ0ZXIgZ3JhY2VmdWwgZW5kIChvciBpbW1lZGlhdGVseSBpZiBhbHJlYWR5IGZvcmNlLXJldGlyZWQpLlxuXHRcdHRoaXMucmV0aXJlKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVzdHJveURlc3RpbmF0aW9uKHN0cmVhbTogcGluby5EZXN0aW5hdGlvblN0cmVhbSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRjb25zdCBkZXN0cm95YWJsZSA9IHN0cmVhbSBhcyBFbmRhYmxlU3RyZWFtIHwgdW5kZWZpbmVkO1xuXHRpZiAodHlwZW9mIGRlc3Ryb3lhYmxlPy5kZXN0cm95ID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHR0cnkge1xuXHRcdFx0ZGVzdHJveWFibGUuZGVzdHJveSgpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0Ly8gYWxyZWFkeSBkZWFkXG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGVuZERlc3RpbmF0aW9uKHN0cmVhbTogcGluby5EZXN0aW5hdGlvblN0cmVhbSB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBlbmRhYmxlID0gc3RyZWFtIGFzIEVuZGFibGVTdHJlYW0gfCB1bmRlZmluZWQ7XG5cdGlmICh0eXBlb2YgZW5kYWJsZT8uZW5kICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGVuZGFibGUuZW5kKCgpID0+IHJlc29sdmUoKSk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gbG9nTWV0aG9kKHRoaXM6IHBpbm8uTG9nZ2VyLCBhcmdzOiBQYXJhbWV0ZXJzPExvZ0ZuPiwgbWV0aG9kOiBMb2dGbikge1xuXHRsZXQgbWVzc2FnZSA9IGFyZ3MuYXQoMCk7XG5cdGNvbnN0IGRhdGEgPSBhcmdzLmF0KDEpO1xuXG5cdGlmIChtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRtZXRob2QuY2FsbCh0aGlzLCB7IGVycjogbWVzc2FnZSB9LCBmb3JtYXRFcnJvcihtZXNzYWdlKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGRhdGEgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdG1lc3NhZ2UgPSB7IG1zZzogbWVzc2FnZSwgLi4ueyBlcnJvcjogZGF0YSB9IH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIpIHtcblx0XHRtZXNzYWdlID0geyBtc2c6IG1lc3NhZ2UsIC4uLmRhdGEgfTtcblx0fSBlbHNlIHtcblx0XHRtZXNzYWdlID0geyBtc2c6IG1lc3NhZ2UsIGRhdGEgfTtcblx0fVxuXG5cdG1ldGhvZC5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiBwaW5vTWl4PFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0bG9nZ2VyOiBwaW5vLkxvZ2dlcixcbik6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdHJldHVybiBPYmplY3QuYXNzaWduPHBpbm8uTG9nZ2VyLCBCYXNlTG9nZ2VyPihsb2dnZXIsIHtcblx0XHRnZXQgY3VycmVudExldmVsKCkge1xuXHRcdFx0cmV0dXJuIGxvZ2dlci5sZXZlbDtcblx0XHR9LFxuXHRcdGdldCBsb2dMZXZlbHMoKSB7XG5cdFx0XHRyZXR1cm4gbG9nZ2VyLmxldmVscy52YWx1ZXM7XG5cdFx0fSxcblx0fSkgYXMgTG9nZ2VyPFQsIEN1c3RvbU9ubHk+O1xufVxuIl0sIm5hbWVzIjpbImZvcm1hdEVycm9yIiwiTG9nQWRhcHRlciIsInBpbm8iLCJQaW5vQWRhcHRlciIsIl9waW5vIiwib3B0aW9ucyIsInN0cmVhbSIsImRpc3Bvc2VkIiwicmV0aXJlZCIsImNvbmZpZ3VyZSIsInNjcmliZU9wdGlvbnMiLCJsb2dMZXZlbCIsInJlZGFjdGlvbnMiLCJjdXN0b21MZXZlbHMiLCJnZXRMb2dMZXZlbHMiLCJwaW5vT3B0aW9ucyIsImxldmVsIiwiaG9va3MiLCJsb2dNZXRob2QiLCJzZXJpYWxpemVycyIsImVycm9yIiwic3RkU2VyaWFsaXplcnMiLCJlcnIiLCJyZWRhY3QiLCJnZXRMb2dnZXIiLCJuYW1lIiwibG9nZ2VyIiwicGlub01peCIsImNoaWxkIiwiZmx1c2giLCJjYiIsInJldGlyZSIsImd1YXJkZWQiLCJkZXN0cm95RGVzdGluYXRpb24iLCJTeW1ib2wiLCJhc3luY0Rpc3Bvc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsImVuZERlc3RpbmF0aW9uIiwiZGVzdHJveWFibGUiLCJkZXN0cm95IiwiZW5kYWJsZSIsImVuZCIsImFyZ3MiLCJtZXRob2QiLCJtZXNzYWdlIiwiYXQiLCJkYXRhIiwiRXJyb3IiLCJjYWxsIiwibXNnIiwiT2JqZWN0IiwiYXNzaWduIiwiY3VycmVudExldmVsIiwibG9nTGV2ZWxzIiwibGV2ZWxzIiwidmFsdWVzIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUVDQSxXQUFXLEVBQ1hDLFVBQVUsUUFHSixtQkFBbUI7QUFDMUIsT0FBT0MsVUFBMEIsT0FBTztBQWN4QyxPQUFPLE1BQU1DLG9CQUFvQkY7SUFDeEJHLE1BQW1CO0lBQ1ZDLFFBQTRCO0lBQzVCQyxPQUEyQztJQUNwREMsV0FBVyxNQUFNO0lBQ2pCQyxVQUFVLE1BQU07SUFFeEIsWUFBbUJILE9BQTJCLEVBQUVDLE1BQStCLENBQUU7UUFDaEYsS0FBSztRQUNMLElBQUksQ0FB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
@@ -0,0 +1,63 @@
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
+ }
62
+
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby50cmFuc3BvcnQtZ3VhcmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEZXN0aW5hdGlvblN0cmVhbSB9IGZyb20gXCJwaW5vXCI7XG5cbmV4cG9ydCB0eXBlIEd1YXJkZWRUcmFuc3BvcnQgPSBEZXN0aW5hdGlvblN0cmVhbSAmIHtcblx0cmVhZG9ubHkgcmV0aXJlZDogYm9vbGVhbjtcblx0cmV0aXJlKHJlYXNvbj86IHN0cmluZyk6IHZvaWQ7XG59O1xuXG50eXBlIFdyaXRhYmxlTGlrZSA9IERlc3RpbmF0aW9uU3RyZWFtICYge1xuXHR3cml0ZT86ICguLi5hcmdzOiBuZXZlcltdKSA9PiB1bmtub3duO1xuXHRvbj86IChldmVudDogXCJlcnJvclwiLCBsaXN0ZW5lcjogKGVycjogRXJyb3IpID0+IHZvaWQpID0+IHVua25vd247XG5cdGRlc3Ryb3k/OiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZDtcbn07XG5cbi8qKlxuICogV3JhcCBhIHBpbm8gd29ya2VyIHRyYW5zcG9ydCBzbyBhIGRlYWQgVGhyZWFkU3RyZWFtIGNhbm5vdCBzcGFtIG9yIGNyYXNoLlxuICogT24gZmlyc3QgZXJyb3IgLyB3cml0ZSB0aHJvdzogcmVwb3J0IG9uY2UsIGRlc3Ryb3ksIG5vLW9wIGZ1cnRoZXIgd3JpdGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3VhcmRUcmFuc3BvcnQodHJhbnNwb3J0OiBEZXN0aW5hdGlvblN0cmVhbSk6IEd1YXJkZWRUcmFuc3BvcnQge1xuXHRjb25zdCBzdHJlYW0gPSB0cmFuc3BvcnQgYXMgV3JpdGFibGVMaWtlO1xuXHRsZXQgcmV0aXJlZCA9IGZhbHNlO1xuXHRsZXQgcmVwb3J0ZWQgPSBmYWxzZTtcblxuXHRjb25zdCByZXRpcmUgPSAocmVhc29uID0gXCJyZXRpcmVkXCIpOiB2b2lkID0+IHtcblx0XHRpZiAocmV0aXJlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXRpcmVkID0gdHJ1ZTtcblx0XHRpZiAoIXJlcG9ydGVkKSB7XG5cdFx0XHRyZXBvcnRlZCA9IHRydWU7XG5cdFx0XHRwcm9jZXNzLnN0ZGVyci53cml0ZShgW3NjcmliZS1waW5vXSB0cmFuc3BvcnQgcmV0aXJlZDogJHtyZWFzb259XFxuYCk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2Ygc3RyZWFtLmRlc3Ryb3kgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c3RyZWFtLmRlc3Ryb3koKTtcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHQvLyBhbHJlYWR5IGRlYWRcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0aWYgKHR5cGVvZiBzdHJlYW0ub24gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHN0cmVhbS5vbihcImVycm9yXCIsIChlcnIpID0+IHtcblx0XHRcdHJldGlyZShlcnI/Lm1lc3NhZ2UgPz8gU3RyaW5nKGVycikpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBzdHJlYW0ud3JpdGUgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGNvbnN0IG9yaWdpbmFsV3JpdGUgPSBzdHJlYW0ud3JpdGUuYmluZChzdHJlYW0pIGFzIChcblx0XHRcdGNodW5rOiB1bmtub3duLFxuXHRcdFx0ZW5jb2RpbmdPckNiPzogdW5rbm93bixcblx0XHRcdGNiPzogdW5rbm93bixcblx0XHQpID0+IHVua25vd247XG5cblx0XHRzdHJlYW0ud3JpdGUgPSAoKGNodW5rOiB1bmtub3duLCBlbmNvZGluZ09yQ2I/OiB1bmtub3duLCBjYj86IHVua25vd24pID0+IHtcblx0XHRcdGlmIChyZXRpcmVkKSB7XG5cdFx0XHRcdGNvbXBsZXRlV3JpdGUoZW5jb2RpbmdPckNiLCBjYik7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIG9yaWdpbmFsV3JpdGUoY2h1bmssIGVuY29kaW5nT3JDYiwgY2IpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdHJldGlyZShlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycikpO1xuXHRcdFx0XHRjb21wbGV0ZVdyaXRlKGVuY29kaW5nT3JDYiwgY2IpO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KSBhcyB0eXBlb2Ygc3RyZWFtLndyaXRlO1xuXHR9XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0cmVhbSwgXCJyZXRpcmVkXCIsIHtcblx0XHRnZXQ6ICgpID0+IHJldGlyZWQsXG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0fSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHJlYW0sIFwicmV0aXJlXCIsIHtcblx0XHR2YWx1ZTogcmV0aXJlLFxuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdH0pO1xuXG5cdHJldHVybiBzdHJlYW0gYXMgR3VhcmRlZFRyYW5zcG9ydDtcbn1cblxuZnVuY3Rpb24gY29tcGxldGVXcml0ZShlbmNvZGluZ09yQ2I6IHVua25vd24sIGNiOiB1bmtub3duKTogdm9pZCB7XG5cdGNvbnN0IGRvbmUgPVxuXHRcdHR5cGVvZiBlbmNvZGluZ09yQ2IgPT09IFwiZnVuY3Rpb25cIlxuXHRcdFx0PyBlbmNvZGluZ09yQ2Jcblx0XHRcdDogdHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCJcblx0XHRcdFx0PyBjYlxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0aWYgKHR5cGVvZiBkb25lID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRkb25lKCk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJndWFyZFRyYW5zcG9ydCIsInRyYW5zcG9ydCIsInN0cmVhbSIsInJldGlyZWQiLCJyZXBvcnRlZCIsInJldGlyZSIsInJlYXNvbiIsInByb2Nlc3MiLCJzdGRlcnIiLCJ3cml0ZSIsImRlc3Ryb3kiLCJvbiIsImVyciIsIm1lc3NhZ2UiLCJTdHJpbmciLCJvcmlnaW5hbFdyaXRlIiwiYmluZCIsImNodW5rIiwiZW5jb2RpbmdPckNiIiwiY2IiLCJjb21wbGV0ZVdyaXRlIiwiRXJyb3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsImVudW1lcmFibGUiLCJ2YWx1ZSIsImRvbmUiLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiJBQWFBOzs7Q0FHQyxHQUNELE9BQU8sU0FBU0EsZUFBZUMsU0FBNEI7SUFDMUQsTUFBTUMsU0FBU0Q7SUFDZixJQUFJRSxVQUFVO0lBQ2QsSUFBSUMsV0FBVztJQUVmLE1BQU1DLFNBQVMsQ0FBQ0MsU0FBUyxTQUFTO1FBQ2pDLElBQUlILFNBQVM7WUFDWjtRQUNEO1FBQ0FBLFVBQVU7UUFDVixJQUFJLENBQUNDLFVBQVU7WUFDZEEsV0FBVztZQUNYRyxRQUFRQyxNQUFNLENBQUNDLEtBQUssQ0FBQyxDQUFDLGlDQUFpQyxFQUFFSCxPQUFPLEVBQUUsQ0FBQztRQUNwRTtRQUNBLElBQUksT0FBT0osT0FBT1EsT0FBTyxLQUFLLFlBQVk7WUFDekMsSUFBSTtnQkFDSFIsT0FBT1EsT0FBTztZQUNmLEVBQUUsT0FBTTtZQUNQLGVBQWU7WUFDaEI7UUFDRDtJQUNEO0lBRUEsSUFBSSxPQUFPUixPQUFPUyxFQUFFLEtBQUssWUFBWTtRQUNwQ1QsT0FBT1MsRUFBRSxDQUFDLFNBQVMsQ0FBQ0M7WUFDbkJQLE9BQU9PLEtBQUtDLFdBQVdDLE9BQU9GO1FBQy9CO0lBQ0Q7SUFFQSxJQUFJLE9BQU9WLE9BQU9PLEtBQUssS0FBSyxZQUFZO1FBQ3ZDLE1BQU1NLGdCQUFnQmIsT0FBT08sS0FBSyxDQUFDTyxJQUFJLENBQUNkO1FBTXhDQSxPQUFPTyxLQUFLLEdBQUksQ0FBQ1EsT0FBZ0JDLGNBQXdCQztZQUN4RCxJQUFJaEIsU0FBUztnQkFDWmlCLGNBQWNGLGNBQWNDO2dCQUM1QixPQUFPO1lBQ1I7WUFDQSxJQUFJO2dCQUNILE9BQU9KLGNBQWNFLE9BQU9DLGNBQWNDO1lBQzNDLEVBQUUsT0FBT1AsS0FBSztnQkFDYlAsT0FBT08sZUFBZVMsUUFBUVQsSUFBSUMsT0FBTyxHQUFHQyxPQUFPRjtnQkFDbkRRLGNBQWNGLGNBQWNDO2dCQUM1QixPQUFPO1lBQ1I7UUFDRDtJQUNEO0lBRUFHLE9BQU9DLGNBQWMsQ0FBQ3JCLFFBQVEsV0FBVztRQUN4Q3NCLEtBQUssSUFBTXJCO1FBQ1hzQixZQUFZO0lBQ2I7SUFDQUgsT0FBT0MsY0FBYyxDQUFDckIsUUFBUSxVQUFVO1FBQ3ZDd0IsT0FBT3JCO1FBQ1BvQixZQUFZO0lBQ2I7SUFFQSxPQUFPdkI7QUFDUjtBQUVBLFNBQVNrQixjQUFjRixZQUFxQixFQUFFQyxFQUFXO0lBQ3hELE1BQU1RLE9BQ0wsT0FBT1QsaUJBQWlCLGFBQ3JCQSxlQUNBLE9BQU9DLE9BQU8sYUFDYkEsS0FDQVM7SUFDTCxJQUFJLE9BQU9ELFNBQVMsWUFBWTtRQUMvQkE7SUFDRDtBQUNEIn0=
@@ -13,6 +13,8 @@ import { DefaultLogLevel, LoggingConfigurationError, scribe } from "@decohere/sc
13
13
  import pino from "pino";
14
14
  import { PinoAdapter } from "./pino.adapater.js";
15
15
  import { pinoRecipe } from "./pino.recipe.js";
16
+ import { guardTransport } from "./pino.transport-guard.js";
17
+ export { guardTransport } from "./pino.transport-guard.js";
16
18
  export class PinoExtensions {
17
19
  static withPino(factory, config, logLevel) {
18
20
  return configureScribe(factory, {
@@ -120,18 +122,10 @@ function attachRecipe(factory, plan) {
120
122
  });
121
123
  }
122
124
  /**
123
- * Attach a listener so worker transport failures (e.g. pino-roll symlink EEXIST)
124
- * never become Node's default unhandled `error` crash.
125
- */ function silenceErrors(transport) {
126
- transport.on("error", (err)=>{
127
- const detail = err?.stack ?? String(err);
128
- process.stderr.write(`[scribe-pino] transport error: ${detail}\n`);
129
- });
130
- }
131
- function createSafeTransport(options) {
132
- const transport = pino.transport(options);
133
- silenceErrors(transport);
134
- return transport;
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));
135
129
  }
136
130
  function adapterForTransport(transport) {
137
131
  if (transport == null) {
@@ -165,9 +159,13 @@ function configureScribe(factory, options, config) {
165
159
  adapter
166
160
  });
167
161
  }
162
+ /** @deprecated Use {@link guardTransport} — kept for callers/tests from the silence-only era. */ function silenceErrors(transport) {
163
+ return guardTransport(transport);
164
+ }
168
165
  export const pinoTransport = {
169
166
  createSafeTransport,
167
+ guardTransport,
170
168
  silenceErrors
171
169
  };
172
170
 
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvc2NyaWJlLXBpbm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5zaW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9leHRlbnNpYmlsaXR5XCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnQsIHR5cGUgRW52aXJvbm1lbnQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL3N5c3RlbVwiO1xuaW1wb3J0IHtcblx0dHlwZSBEZWZhdWx0TGV2ZWxzLFxuXHREZWZhdWx0TG9nTGV2ZWwsXG5cdHR5cGUgTG9nZ2VyLFxuXHRMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yLFxuXHR0eXBlIFNjcmliZU9wdGlvbnMsXG5cdHNjcmliZSxcbn0gZnJvbSBcIkBkZWNvaGVyZS9zY3JpYmVcIjtcbmltcG9ydCBwaW5vLCB7XG5cdHR5cGUgRGVzdGluYXRpb25TdHJlYW0sXG5cdHR5cGUgVHJhbnNwb3J0TXVsdGlPcHRpb25zLFxuXHR0eXBlIFRyYW5zcG9ydFBpcGVsaW5lT3B0aW9ucyxcblx0dHlwZSBUcmFuc3BvcnRTaW5nbGVPcHRpb25zLFxufSBmcm9tIFwicGlub1wiO1xuXG5pbXBvcnQgeyBQaW5vQWRhcHRlciB9IGZyb20gXCIuL3Bpbm8uYWRhcGF0ZXIuanNcIjtcbmltcG9ydCB7XG5cdHR5cGUgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdHR5cGUgUGlub1JlY2lwZVBsYW4sXG5cdHR5cGUgUGlub1JvbGxSZWNpcGVPcHRpb25zLFxuXHRwaW5vUmVjaXBlLFxufSBmcm9tIFwiLi9waW5vLnJlY2lwZS5qc1wiO1xuXG50eXBlIFRyYW5zcG9ydE9wdGlvbnMgPVxuXHR8IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnNcblx0fCBUcmFuc3BvcnRNdWx0aU9wdGlvbnNcblx0fCBUcmFuc3BvcnRQaXBlbGluZU9wdGlvbnM7XG5cbnR5cGUgVHJhbnNwb3J0Q29uZmlnID0ge1xuXHRlbnZpcm9ubWVudD86IEVudmlyb25tZW50O1xuXHR0cmFuc3BvcnRzOiBUcmFuc3BvcnRPcHRpb25zO1xufTtcblxudHlwZSBDdXN0b21MZXZlbE9wdGlvbnM8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSA9IHVuZGVmaW5lZD4gPSB7XG5cdHNjcmliZT86IFNjcmliZU9wdGlvbnM8VCwgQ3VzdG9tT25seT47XG5cdHRyYW5zcG9ydHM/OiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFBpbm9Mb2dnZXJGYWN0b3J5ID0gKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjtcblxuZXhwb3J0IHR5cGUgUGlub1JlY2lwZUNoYWluID0ge1xuXHR3aXRoUGlub1ByZXR0eShcblx0XHRsb2dMZXZlbE9yT3B0aW9ucz86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcgfCBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyxcblx0KTogUGlub1JlY2lwZTtcblx0d2l0aFBpbm9Sb2xsKG9wdGlvbnM6IFBpbm9Sb2xsUmVjaXBlT3B0aW9ucyk6IFBpbm9SZWNpcGU7XG59O1xuXG5leHBvcnQgdHlwZSBQaW5vUmVjaXBlID0gUGlub0xvZ2dlckZhY3RvcnkgJlxuXHRQaW5vUmVjaXBlQ2hhaW4gJiB7XG5cdFx0cmVhZG9ubHkgYW5kOiBQaW5vUmVjaXBlQ2hhaW47XG5cdH07XG5cbmRlY2xhcmUgbW9kdWxlIFwiQGRlY29oZXJlL3NjcmliZVwiIHtcblx0aW50ZXJmYWNlIHNjcmliZSB7XG5cdFx0d2l0aFBpbm8oXG5cdFx0XHR0cmFuc3BvcnRzOiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcblx0XHRcdGxvZ2xldmVsPzogRGVmYXVsdExldmVscyB8IHN0cmluZyxcblx0XHQpOiBQaW5vTG9nZ2VyRmFjdG9yeTtcblx0XHQvKipcblx0XHQgKiBDb2xvcml6ZWQgcHJldHR5IHRyYW5zcG9ydC4gRGV2ZWxvcG1lbnQgb25seSB1bmxlc3MgYHsgd2hlbjogXCJhbHdheXNcIiB9YC5cblx0XHQgKiBDaGFpbiB3aXRoIGAuYW5kLndpdGhQaW5vUm9sbCh7IGZpbGUgfSlgLiBQcm9kdWN0aW9uIHdyaXRlcyBKU09OIHRvIHN0ZG91dFxuXHRcdCAqIHNvIGxvZyBzaGlwcGluZyBzdGF5cyBvdXRzaWRlIHRoZSBwcm9jZXNzLlxuXHRcdCAqL1xuXHRcdHdpdGhQaW5vUHJldHR5KFxuXHRcdFx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdFx0KTogUGlub1JlY2lwZTtcblx0XHQvKipcblx0XHQgKiBSb2xsaW5nIGxvZyBmaWxlcy4gRGV2ZWxvcG1lbnQgb25seSB1bmxlc3MgYHsgd2hlbjogXCJhbHdheXNcIiB9YC5cblx0XHQgKiBEbyBub3QgZW5hYmxlIGluIHByb2R1Y3Rpb24g4oCUIHNoaXAgc3Rkb3V0IGZyb20gYSBzaWRlY2FyIG9yIHBsYXRmb3JtIGFnZW50LlxuXHRcdCAqIGBzeW1saW5rYCBkZWZhdWx0cyBvZmY7IGVuYWJsaW5nIGl0IGNhbiByYWNlIHVuZGVyIG11bHRpLXdvcmtlciAvIEhNUi5cblx0XHQgKi9cblx0XHR3aXRoUGlub1JvbGwob3B0aW9uczogUGlub1JvbGxSZWNpcGVPcHRpb25zKTogUGlub1JlY2lwZTtcblx0XHR3aXRoUGlub0N1c3RvbTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPihcblx0XHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdFx0KTogUGlub0xvZ2dlckZhY3Rvcnk7XG5cdH1cblx0bmFtZXNwYWNlIHNjcmliZSB7XG5cdFx0ZnVuY3Rpb24gd2l0aFBpbm8oXG5cdFx0XHR0cmFuc3BvcnRzOiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcblx0XHRcdGxvZ2xldmVsPzogRGVmYXVsdExldmVscyB8IHN0cmluZyxcblx0XHQpOiBQaW5vTG9nZ2VyRmFjdG9yeTtcblx0XHRmdW5jdGlvbiB3aXRoUGlub1ByZXR0eShcblx0XHRcdGxvZ0xldmVsT3JPcHRpb25zPzogRGVmYXVsdExldmVscyB8IHN0cmluZyB8IFBpbm9QcmV0dHlSZWNpcGVPcHRpb25zLFxuXHRcdCk6IFBpbm9SZWNpcGU7XG5cdFx0ZnVuY3Rpb24gd2l0aFBpbm9Sb2xsKG9wdGlvbnM6IFBpbm9Sb2xsUmVjaXBlT3B0aW9ucyk6IFBpbm9SZWNpcGU7XG5cdFx0ZnVuY3Rpb24gd2l0aFBpbm9DdXN0b208VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSA9IHVuZGVmaW5lZD4oXG5cdFx0XHRvcHRpb25zPzogQ3VzdG9tTGV2ZWxPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHRcdCk6IFBpbm9Mb2dnZXJGYWN0b3J5O1xuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBQaW5vRXh0ZW5zaW9ucyB7XG5cdEBleHRlbnNpb24oc2NyaWJlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuXHRwdWJsaWMgc3RhdGljIHdpdGhQaW5vKFxuXHRcdGZhY3Rvcnk6IHNjcmliZSxcblx0XHRjb25maWc6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuXHRcdGxvZ0xldmVsPzogRGVmYXVsdExldmVscyB8IHN0cmluZyxcblx0KSB7XG5cdFx0cmV0dXJuIGNvbmZpZ3VyZVNjcmliZShmYWN0b3J5LCB7IGxvZ0xldmVsIH0sIGNvbmZpZyk7XG5cdH1cblxuXHRAZXh0ZW5zaW9uKHNjcmliZSwgeyBzdGF0aWM6IHRydWUgfSlcblx0cHVibGljIHN0YXRpYyB3aXRoUGlub1ByZXR0eShcblx0XHRmYWN0b3J5OiBzY3JpYmUsXG5cdFx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdCkge1xuXHRcdGNvbnN0IHByZXR0eSA9IHBhcnNlUHJldHR5QXJnKGxvZ0xldmVsT3JPcHRpb25zKTtcblx0XHRyZXR1cm4gYXR0YWNoUmVjaXBlKGZhY3RvcnksIHsgcHJldHR5LCBsb2dMZXZlbDogcHJldHR5LmxvZ0xldmVsIH0pO1xuXHR9XG5cblx0QGV4dGVuc2lvbihzY3JpYmUsIHsgc3RhdGljOiB0cnVlIH0pXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm9Sb2xsKGZhY3Rvcnk6IHNjcmliZSwgb3B0aW9uczogUGlub1JvbGxSZWNpcGVPcHRpb25zKSB7XG5cdFx0cmV0dXJuIGF0dGFjaFJlY2lwZShmYWN0b3J5LCB7IHJvbGw6IG9wdGlvbnMsIGxvZ0xldmVsOiBvcHRpb25zLmxvZ0xldmVsIH0pO1xuXHR9XG5cblx0QGV4dGVuc2lvbihzY3JpYmUsIHsgc3RhdGljOiB0cnVlIH0pXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm9DdXN0b208VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSA9IHVuZGVmaW5lZD4oXG5cdFx0ZmFjdG9yeTogc2NyaWJlLFxuXHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdCkge1xuXHRcdGNvbnN0IHsgc2NyaWJlLCB0cmFuc3BvcnRzIH0gPSBvcHRpb25zID8/IHt9O1xuXHRcdHJldHVybiBjb25maWd1cmVTY3JpYmUoZmFjdG9yeSwgc2NyaWJlLCB0cmFuc3BvcnRzKTtcblx0fVxufVxuXG5mdW5jdGlvbiBwYXJzZVByZXR0eUFyZyhcblx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG4pOiBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyB7XG5cdGlmIChsb2dMZXZlbE9yT3B0aW9ucyA9PSBudWxsKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGlmICh0eXBlb2YgbG9nTGV2ZWxPck9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4geyBsb2dMZXZlbDogbG9nTGV2ZWxPck9wdGlvbnMgfTtcblx0fVxuXHRyZXR1cm4gbG9nTGV2ZWxPck9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFJlY2lwZShmYWN0b3J5OiBzY3JpYmUsIHBsYW46IFBpbm9SZWNpcGVQbGFuKTogUGlub1JlY2lwZSB7XG5cdGNvbnN0IGxvZ2dlckZhY3RvcnkgPSBhcHBseVJlY2lwZShmYWN0b3J5LCBwbGFuKTtcblx0Y29uc3QgY2hhaW46IFBpbm9SZWNpcGVDaGFpbiA9IHtcblx0XHR3aXRoUGlub1ByZXR0eShsb2dMZXZlbE9yT3B0aW9ucykge1xuXHRcdFx0Y29uc3QgcHJldHR5ID0gcGFyc2VQcmV0dHlBcmcobG9nTGV2ZWxPck9wdGlvbnMpO1xuXHRcdFx0cmV0dXJuIGF0dGFjaFJlY2lwZShmYWN0b3J5LCB7XG5cdFx0XHRcdC4uLnBsYW4sXG5cdFx0XHRcdHByZXR0eTogeyAuLi5wbGFuLnByZXR0eSwgLi4ucHJldHR5IH0sXG5cdFx0XHRcdGxvZ0xldmVsOiBwcmV0dHkubG9nTGV2ZWwgPz8gcGxhbi5sb2dMZXZlbCxcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0d2l0aFBpbm9Sb2xsKG9wdGlvbnMpIHtcblx0XHRcdHJldHVybiBhdHRhY2hSZWNpcGUoZmFjdG9yeSwge1xuXHRcdFx0XHQuLi5wbGFuLFxuXHRcdFx0XHRyb2xsOiBvcHRpb25zLFxuXHRcdFx0XHRsb2dMZXZlbDogb3B0aW9ucy5sb2dMZXZlbCA/PyBwbGFuLmxvZ0xldmVsLFxuXHRcdFx0fSk7XG5cdFx0fSxcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obG9nZ2VyRmFjdG9yeSwgY2hhaW4sIHsgYW5kOiBjaGFpbiB9KTtcbn1cblxuLyoqXG4gKiBBdHRhY2ggYSBsaXN0ZW5lciBzbyB3b3JrZXIgdHJhbnNwb3J0IGZhaWx1cmVzIChlLmcuIHBpbm8tcm9sbCBzeW1saW5rIEVFWElTVClcbiAqIG5ldmVyIGJlY29tZSBOb2RlJ3MgZGVmYXVsdCB1bmhhbmRsZWQgYGVycm9yYCBjcmFzaC5cbiAqL1xuZnVuY3Rpb24gc2lsZW5jZUVycm9ycyh0cmFuc3BvcnQ6IHtcblx0b24oZXZlbnQ6IFwiZXJyb3JcIiwgbGlzdGVuZXI6IChlcnI6IEVycm9yKSA9PiB2b2lkKTogdW5rbm93bjtcbn0pOiB2b2lkIHtcblx0dHJhbnNwb3J0Lm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuXHRcdGNvbnN0IGRldGFpbCA9IGVycj8uc3RhY2sgPz8gU3RyaW5nKGVycik7XG5cdFx0cHJvY2Vzcy5zdGRlcnIud3JpdGUoYFtzY3JpYmUtcGlub10gdHJhbnNwb3J0IGVycm9yOiAke2RldGFpbH1cXG5gKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNhZmVUcmFuc3BvcnQob3B0aW9uczogVHJhbnNwb3J0T3B0aW9ucyk6IERlc3RpbmF0aW9uU3RyZWFtIHtcblx0Y29uc3QgdHJhbnNwb3J0ID0gcGluby50cmFuc3BvcnQob3B0aW9ucyk7XG5cdHNpbGVuY2VFcnJvcnModHJhbnNwb3J0KTtcblx0cmV0dXJuIHRyYW5zcG9ydDtcbn1cblxuZnVuY3Rpb24gYWRhcHRlckZvclRyYW5zcG9ydCh0cmFuc3BvcnQ/OiBUcmFuc3BvcnRPcHRpb25zKTogUGlub0FkYXB0ZXIge1xuXHRpZiAodHJhbnNwb3J0ID09IG51bGwpIHtcblx0XHRyZXR1cm4gbmV3IFBpbm9BZGFwdGVyKHt9KTtcblx0fVxuXHRyZXR1cm4gbmV3IFBpbm9BZGFwdGVyKHt9LCBjcmVhdGVTYWZlVHJhbnNwb3J0KHRyYW5zcG9ydCkpO1xufVxuXG5mdW5jdGlvbiBhcHBseVJlY2lwZShmYWN0b3J5OiBzY3JpYmUsIHBsYW46IFBpbm9SZWNpcGVQbGFuKTogUGlub0xvZ2dlckZhY3Rvcnkge1xuXHRjb25zdCBhZGFwdGVyID0gYWRhcHRlckZvclRyYW5zcG9ydChwaW5vUmVjaXBlLnRyYW5zcG9ydChwbGFuKSk7XG5cdHJldHVybiBmYWN0b3J5LmNvbmZpZ3VyZSh7XG5cdFx0b3B0aW9uczogeyBsb2dMZXZlbDogcGxhbi5sb2dMZXZlbCA/PyBEZWZhdWx0TG9nTGV2ZWwgfSxcblx0XHRhZGFwdGVyLFxuXHR9KTtcbn1cblxuZnVuY3Rpb24gY29uZmlndXJlU2NyaWJlPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0ZmFjdG9yeTogc2NyaWJlLFxuXHRvcHRpb25zOiBTY3JpYmVPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHRjb25maWc/OiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcbikge1xuXHRjb25zdCBlbnZpcm9ubWVudCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID8/IERlZmF1bHRFbnZpcm9ubWVudDtcblx0Y29uc3QgY29uZmlncyA9IChBcnJheS5pc0FycmF5KGNvbmZpZykgPyBjb25maWcgOiBjb25maWcgIT0gbnVsbCA/IFtjb25maWddIDogW10pLmZpbHRlcihcblx0XHQoaXRlbSkgPT4gaXRlbS5lbnZpcm9ubWVudCA9PSBudWxsIHx8IGl0ZW0uZW52aXJvbm1lbnQgPT09IGVudmlyb25tZW50LFxuXHQpO1xuXG5cdGlmIChjb25maWdzLmxlbmd0aCA+IDEpIHtcblx0XHR0aHJvdyBuZXcgTG9nZ2luZ0NvbmZpZ3VyYXRpb25FcnJvcihcblx0XHRcdGBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUgY29uZmlndXJhdGlvbiBwZXIgZW52aXJvbm1lbnQgZm9yIGxvZ2dpbmdgLFxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBhZGFwdGVyID0gYWRhcHRlckZvclRyYW5zcG9ydChjb25maWdzLmF0KDApPy50cmFuc3BvcnRzKTtcblx0cmV0dXJuIGZhY3RvcnkuY29uZmlndXJlKHtcblx0XHRvcHRpb25zOiB7IC4uLm9wdGlvbnMsIGxvZ0xldmVsOiBvcHRpb25zPy5sb2dMZXZlbCA/PyBEZWZhdWx0TG9nTGV2ZWwgfSxcblx0XHRhZGFwdGVyLFxuXHR9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHBpbm9UcmFuc3BvcnQgPSB7IGNyZWF0ZVNhZmVUcmFuc3BvcnQsIHNpbGVuY2VFcnJvcnMgfTtcbiJdLCJuYW1lcyI6WyJleHRlbnNpb24iLCJEZWZhdWx0RW52aXJvbm1lbnQiLCJEZWZhdWx0TG9nTGV2ZWwiLCJMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yIiwic2NyaWJlIiwicGlubyIsIlBpbm9BZGFwdGVyIiwicGlub1JlY2lwZSIsIlBpbm9FeHRlbnNpb25zIiwid2l0aFBpbm8iLCJmYWN0b3J5IiwiY29uZmlnIiwibG9nTGV2ZWwiLCJjb25maWd1cmVTY3JpYmUiLCJ3aXRoUGlub1ByZXR0eSIsImxvZ0xldmVsT3JPcHRpb25zIiwicHJldHR5IiwicGFyc2VQcmV0dHlBcmciLCJhdHRhY2hSZWNpcGUiLCJ3aXRoUGlub1JvbGwiLCJvcHRpb25zIiwicm9sbCIsIndpdGhQaW5vQ3VzdG9tIiwidHJhbnNwb3J0cyIsInN0YXRpYyIsInBsYW4iLCJsb2dnZXJGYWN0b3J5IiwiYXBwbHlSZWNpcGUiLCJjaGFpbiIsIk9iamVjdCIsImFzc2lnbiIsImFuZCIsInNpbGVuY2VFcnJvcnMiLCJ0cmFuc3BvcnQiLCJvbiIsImVyciIsImRldGFpbCIsInN0YWNrIiwiU3RyaW5nIiwicHJvY2VzcyIsInN0ZGVyciIsIndyaXRlIiwiY3JlYXRlU2FmZVRyYW5zcG9ydCIsImFkYXB0ZXJGb3JUcmFuc3BvcnQiLCJhZGFwdGVyIiwiY29uZmlndXJlIiwiZW52aXJvbm1lbnQiLCJlbnYiLCJOT0RFX0VOViIsImNvbmZpZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJpdGVtIiwibGVuZ3RoIiwiYXQiLCJwaW5vVHJhbnNwb3J0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxTQUFTQSxTQUFTLFFBQVEsZ0NBQWdDO0FBQzFELFNBQVNDLGtCQUFrQixRQUEwQix5QkFBeUI7QUFDOUUsU0FFQ0Ms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
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvc2NyaWJlLXBpbm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5zaW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9leHRlbnNpYmlsaXR5XCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnQsIHR5cGUgRW52aXJvbm1lbnQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL3N5c3RlbVwiO1xuaW1wb3J0IHtcblx0dHlwZSBEZWZhdWx0TGV2ZWxzLFxuXHREZWZhdWx0TG9nTGV2ZWwsXG5cdHR5cGUgTG9nZ2VyLFxuXHRMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yLFxuXHR0eXBlIFNjcmliZU9wdGlvbnMsXG5cdHNjcmliZSxcbn0gZnJvbSBcIkBkZWNvaGVyZS9zY3JpYmVcIjtcbmltcG9ydCBwaW5vLCB7XG5cdHR5cGUgRGVzdGluYXRpb25TdHJlYW0sXG5cdHR5cGUgVHJhbnNwb3J0TXVsdGlPcHRpb25zLFxuXHR0eXBlIFRyYW5zcG9ydFBpcGVsaW5lT3B0aW9ucyxcblx0dHlwZSBUcmFuc3BvcnRTaW5nbGVPcHRpb25zLFxufSBmcm9tIFwicGlub1wiO1xuXG5pbXBvcnQgeyBQaW5vQWRhcHRlciB9IGZyb20gXCIuL3Bpbm8uYWRhcGF0ZXIuanNcIjtcbmltcG9ydCB7XG5cdHR5cGUgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdHR5cGUgUGlub1JlY2lwZVBsYW4sXG5cdHR5cGUgUGlub1JvbGxSZWNpcGVPcHRpb25zLFxuXHRwaW5vUmVjaXBlLFxufSBmcm9tIFwiLi9waW5vLnJlY2lwZS5qc1wiO1xuaW1wb3J0IHsgdHlwZSBHdWFyZGVkVHJhbnNwb3J0LCBndWFyZFRyYW5zcG9ydCB9IGZyb20gXCIuL3Bpbm8udHJhbnNwb3J0LWd1YXJkLmpzXCI7XG5cbmV4cG9ydCB0eXBlIHsgR3VhcmRlZFRyYW5zcG9ydCB9IGZyb20gXCIuL3Bpbm8udHJhbnNwb3J0LWd1YXJkLmpzXCI7XG5leHBvcnQgeyBndWFyZFRyYW5zcG9ydCB9IGZyb20gXCIuL3Bpbm8udHJhbnNwb3J0LWd1YXJkLmpzXCI7XG5cbnR5cGUgVHJhbnNwb3J0T3B0aW9ucyA9XG5cdHwgVHJhbnNwb3J0U2luZ2xlT3B0aW9uc1xuXHR8IFRyYW5zcG9ydE11bHRpT3B0aW9uc1xuXHR8IFRyYW5zcG9ydFBpcGVsaW5lT3B0aW9ucztcblxudHlwZSBUcmFuc3BvcnRDb25maWcgPSB7XG5cdGVudmlyb25tZW50PzogRW52aXJvbm1lbnQ7XG5cdHRyYW5zcG9ydHM6IFRyYW5zcG9ydE9wdGlvbnM7XG59O1xuXG50eXBlIEN1c3RvbUxldmVsT3B0aW9uczxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPiA9IHtcblx0c2NyaWJlPzogU2NyaWJlT3B0aW9uczxULCBDdXN0b21Pbmx5Pjtcblx0dHJhbnNwb3J0cz86IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgUGlub0xvZ2dlckZhY3RvcnkgPSAobmFtZT86IHN0cmluZykgPT4gTG9nZ2VyO1xuXG5leHBvcnQgdHlwZSBQaW5vUmVjaXBlQ2hhaW4gPSB7XG5cdHdpdGhQaW5vUHJldHR5KFxuXHRcdGxvZ0xldmVsT3JPcHRpb25zPzogRGVmYXVsdExldmVscyB8IHN0cmluZyB8IFBpbm9QcmV0dHlSZWNpcGVPcHRpb25zLFxuXHQpOiBQaW5vUmVjaXBlO1xuXHR3aXRoUGlub1JvbGwob3B0aW9uczogUGlub1JvbGxSZWNpcGVPcHRpb25zKTogUGlub1JlY2lwZTtcbn07XG5cbmV4cG9ydCB0eXBlIFBpbm9SZWNpcGUgPSBQaW5vTG9nZ2VyRmFjdG9yeSAmXG5cdFBpbm9SZWNpcGVDaGFpbiAmIHtcblx0XHRyZWFkb25seSBhbmQ6IFBpbm9SZWNpcGVDaGFpbjtcblx0fTtcblxuZGVjbGFyZSBtb2R1bGUgXCJAZGVjb2hlcmUvc2NyaWJlXCIge1xuXHRpbnRlcmZhY2Ugc2NyaWJlIHtcblx0XHR3aXRoUGlubyhcblx0XHRcdHRyYW5zcG9ydHM6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuXHRcdFx0bG9nbGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHRcdCk6IFBpbm9Mb2dnZXJGYWN0b3J5O1xuXHRcdC8qKlxuXHRcdCAqIENvbG9yaXplZCBwcmV0dHkgdHJhbnNwb3J0LiBEZXZlbG9wbWVudCBvbmx5IHVubGVzcyBgeyB3aGVuOiBcImFsd2F5c1wiIH1gLlxuXHRcdCAqIENoYWluIHdpdGggYC5hbmQud2l0aFBpbm9Sb2xsKHsgZmlsZSB9KWAuIFByb2R1Y3Rpb24gd3JpdGVzIEpTT04gdG8gc3Rkb3V0XG5cdFx0ICogc28gbG9nIHNoaXBwaW5nIHN0YXlzIG91dHNpZGUgdGhlIHByb2Nlc3MuXG5cdFx0ICovXG5cdFx0d2l0aFBpbm9QcmV0dHkoXG5cdFx0XHRsb2dMZXZlbE9yT3B0aW9ucz86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcgfCBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyxcblx0XHQpOiBQaW5vUmVjaXBlO1xuXHRcdC8qKlxuXHRcdCAqIFJvbGxpbmcgbG9nIGZpbGVzLiBEZXZlbG9wbWVudCBvbmx5IHVubGVzcyBgeyB3aGVuOiBcImFsd2F5c1wiIH1gLlxuXHRcdCAqIERvIG5vdCBlbmFibGUgaW4gcHJvZHVjdGlvbiDigJQgc2hpcCBzdGRvdXQgZnJvbSBhIHNpZGVjYXIgb3IgcGxhdGZvcm0gYWdlbnQuXG5cdFx0ICogYHN5bWxpbmtgIGRlZmF1bHRzIG9mZjsgZW5hYmxpbmcgaXQgY2FuIHJhY2UgdW5kZXIgbXVsdGktd29ya2VyIC8gSE1SLlxuXHRcdCAqL1xuXHRcdHdpdGhQaW5vUm9sbChvcHRpb25zOiBQaW5vUm9sbFJlY2lwZU9wdGlvbnMpOiBQaW5vUmVjaXBlO1xuXHRcdHdpdGhQaW5vQ3VzdG9tPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgPSB1bmRlZmluZWQ+KFxuXHRcdFx0b3B0aW9ucz86IEN1c3RvbUxldmVsT3B0aW9uczxULCBDdXN0b21Pbmx5Pixcblx0XHQpOiBQaW5vTG9nZ2VyRmFjdG9yeTtcblx0fVxuXHRuYW1lc3BhY2Ugc2NyaWJlIHtcblx0XHRmdW5jdGlvbiB3aXRoUGlubyhcblx0XHRcdHRyYW5zcG9ydHM6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuXHRcdFx0bG9nbGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHRcdCk6IFBpbm9Mb2dnZXJGYWN0b3J5O1xuXHRcdGZ1bmN0aW9uIHdpdGhQaW5vUHJldHR5KFxuXHRcdFx0bG9nTGV2ZWxPck9wdGlvbnM/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nIHwgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMsXG5cdFx0KTogUGlub1JlY2lwZTtcblx0XHRmdW5jdGlvbiB3aXRoUGlub1JvbGwob3B0aW9uczogUGlub1JvbGxSZWNpcGVPcHRpb25zKTogUGlub1JlY2lwZTtcblx0XHRmdW5jdGlvbiB3aXRoUGlub0N1c3RvbTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPihcblx0XHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdFx0KTogUGlub0xvZ2dlckZhY3Rvcnk7XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpbm9FeHRlbnNpb25zIHtcblx0QGV4dGVuc2lvbihzY3JpYmUsIHsgc3RhdGljOiB0cnVlIH0pXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm8oXG5cdFx0ZmFjdG9yeTogc2NyaWJlLFxuXHRcdGNvbmZpZzogVHJhbnNwb3J0Q29uZmlnIHwgVHJhbnNwb3J0Q29uZmlnW10sXG5cdFx0bG9nTGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHQpIHtcblx0XHRyZXR1cm4gY29uZmlndXJlU2NyaWJlKGZhY3RvcnksIHsgbG9nTGV2ZWwgfSwgY29uZmlnKTtcblx0fVxuXG5cdEBleHRlbnNpb24oc2NyaWJlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuXHRwdWJsaWMgc3RhdGljIHdpdGhQaW5vUHJldHR5KFxuXHRcdGZhY3Rvcnk6IHNjcmliZSxcblx0XHRsb2dMZXZlbE9yT3B0aW9ucz86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcgfCBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyxcblx0KSB7XG5cdFx0Y29uc3QgcHJldHR5ID0gcGFyc2VQcmV0dHlBcmcobG9nTGV2ZWxPck9wdGlvbnMpO1xuXHRcdHJldHVybiBhdHRhY2hSZWNpcGUoZmFjdG9yeSwgeyBwcmV0dHksIGxvZ0xldmVsOiBwcmV0dHkubG9nTGV2ZWwgfSk7XG5cdH1cblxuXHRAZXh0ZW5zaW9uKHNjcmliZSwgeyBzdGF0aWM6IHRydWUgfSlcblx0cHVibGljIHN0YXRpYyB3aXRoUGlub1JvbGwoZmFjdG9yeTogc2NyaWJlLCBvcHRpb25zOiBQaW5vUm9sbFJlY2lwZU9wdGlvbnMpIHtcblx0XHRyZXR1cm4gYXR0YWNoUmVjaXBlKGZhY3RvcnksIHsgcm9sbDogb3B0aW9ucywgbG9nTGV2ZWw6IG9wdGlvbnMubG9nTGV2ZWwgfSk7XG5cdH1cblxuXHRAZXh0ZW5zaW9uKHNjcmliZSwgeyBzdGF0aWM6IHRydWUgfSlcblx0cHVibGljIHN0YXRpYyB3aXRoUGlub0N1c3RvbTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPihcblx0XHRmYWN0b3J5OiBzY3JpYmUsXG5cdFx0b3B0aW9ucz86IEN1c3RvbUxldmVsT3B0aW9uczxULCBDdXN0b21Pbmx5Pixcblx0KSB7XG5cdFx0Y29uc3QgeyBzY3JpYmUsIHRyYW5zcG9ydHMgfSA9IG9wdGlvbnMgPz8ge307XG5cdFx0cmV0dXJuIGNvbmZpZ3VyZVNjcmliZShmYWN0b3J5LCBzY3JpYmUsIHRyYW5zcG9ydHMpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJldHR5QXJnKFxuXHRsb2dMZXZlbE9yT3B0aW9ucz86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcgfCBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyxcbik6IFBpbm9QcmV0dHlSZWNpcGVPcHRpb25zIHtcblx0aWYgKGxvZ0xldmVsT3JPcHRpb25zID09IG51bGwpIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0aWYgKHR5cGVvZiBsb2dMZXZlbE9yT3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiB7IGxvZ0xldmVsOiBsb2dMZXZlbE9yT3B0aW9ucyB9O1xuXHR9XG5cdHJldHVybiBsb2dMZXZlbE9yT3B0aW9ucztcbn1cblxuZnVuY3Rpb24gYXR0YWNoUmVjaXBlKGZhY3Rvcnk6IHNjcmliZSwgcGxhbjogUGlub1JlY2lwZVBsYW4pOiBQaW5vUmVjaXBlIHtcblx0Y29uc3QgbG9nZ2VyRmFjdG9yeSA9IGFwcGx5UmVjaXBlKGZhY3RvcnksIHBsYW4pO1xuXHRjb25zdCBjaGFpbjogUGlub1JlY2lwZUNoYWluID0ge1xuXHRcdHdpdGhQaW5vUHJldHR5KGxvZ0xldmVsT3JPcHRpb25zKSB7XG5cdFx0XHRjb25zdCBwcmV0dHkgPSBwYXJzZVByZXR0eUFyZyhsb2dMZXZlbE9yT3B0aW9ucyk7XG5cdFx0XHRyZXR1cm4gYXR0YWNoUmVjaXBlKGZhY3RvcnksIHtcblx0XHRcdFx0Li4ucGxhbixcblx0XHRcdFx0cHJldHR5OiB7IC4uLnBsYW4ucHJldHR5LCAuLi5wcmV0dHkgfSxcblx0XHRcdFx0bG9nTGV2ZWw6IHByZXR0eS5sb2dMZXZlbCA/PyBwbGFuLmxvZ0xldmVsLFxuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHR3aXRoUGlub1JvbGwob3B0aW9ucykge1xuXHRcdFx0cmV0dXJuIGF0dGFjaFJlY2lwZShmYWN0b3J5LCB7XG5cdFx0XHRcdC4uLnBsYW4sXG5cdFx0XHRcdHJvbGw6IG9wdGlvbnMsXG5cdFx0XHRcdGxvZ0xldmVsOiBvcHRpb25zLmxvZ0xldmVsID8/IHBsYW4ubG9nTGV2ZWwsXG5cdFx0XHR9KTtcblx0XHR9LFxuXHR9O1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihsb2dnZXJGYWN0b3J5LCBjaGFpbiwgeyBhbmQ6IGNoYWluIH0pO1xufVxuXG4vKipcbiAqIEd1YXJkIGEgd29ya2VyIHRyYW5zcG9ydCBzbyBmYWlsdXJlcyAocm9sbCBFRVhJU1QsIHdvcmtlciBleGl0KSBuZWl0aGVyXG4gKiBjcmFzaCB0aGUgcHJvY2VzcyBub3Igc3BhbSBzdGRlcnIgb24gZXZlcnkgc3Vic2VxdWVudCBsb2cgd3JpdGUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNhZmVUcmFuc3BvcnQob3B0aW9uczogVHJhbnNwb3J0T3B0aW9ucyk6IERlc3RpbmF0aW9uU3RyZWFtIHtcblx0cmV0dXJuIGd1YXJkVHJhbnNwb3J0KHBpbm8udHJhbnNwb3J0KG9wdGlvbnMpKTtcbn1cblxuZnVuY3Rpb24gYWRhcHRlckZvclRyYW5zcG9ydCh0cmFuc3BvcnQ/OiBUcmFuc3BvcnRPcHRpb25zKTogUGlub0FkYXB0ZXIge1xuXHRpZiAodHJhbnNwb3J0ID09IG51bGwpIHtcblx0XHRyZXR1cm4gbmV3IFBpbm9BZGFwdGVyKHt9KTtcblx0fVxuXHRyZXR1cm4gbmV3IFBpbm9BZGFwdGVyKHt9LCBjcmVhdGVTYWZlVHJhbnNwb3J0KHRyYW5zcG9ydCkpO1xufVxuXG5mdW5jdGlvbiBhcHBseVJlY2lwZShmYWN0b3J5OiBzY3JpYmUsIHBsYW46IFBpbm9SZWNpcGVQbGFuKTogUGlub0xvZ2dlckZhY3Rvcnkge1xuXHRjb25zdCBhZGFwdGVyID0gYWRhcHRlckZvclRyYW5zcG9ydChwaW5vUmVjaXBlLnRyYW5zcG9ydChwbGFuKSk7XG5cdHJldHVybiBmYWN0b3J5LmNvbmZpZ3VyZSh7XG5cdFx0b3B0aW9uczogeyBsb2dMZXZlbDogcGxhbi5sb2dMZXZlbCA/PyBEZWZhdWx0TG9nTGV2ZWwgfSxcblx0XHRhZGFwdGVyLFxuXHR9KTtcbn1cblxuZnVuY3Rpb24gY29uZmlndXJlU2NyaWJlPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0ZmFjdG9yeTogc2NyaWJlLFxuXHRvcHRpb25zOiBTY3JpYmVPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHRjb25maWc/OiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcbikge1xuXHRjb25zdCBlbnZpcm9ubWVudCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID8/IERlZmF1bHRFbnZpcm9ubWVudDtcblx0Y29uc3QgY29uZmlncyA9IChBcnJheS5pc0FycmF5KGNvbmZpZykgPyBjb25maWcgOiBjb25maWcgIT0gbnVsbCA/IFtjb25maWddIDogW10pLmZpbHRlcihcblx0XHQoaXRlbSkgPT4gaXRlbS5lbnZpcm9ubWVudCA9PSBudWxsIHx8IGl0ZW0uZW52aXJvbm1lbnQgPT09IGVudmlyb25tZW50LFxuXHQpO1xuXG5cdGlmIChjb25maWdzLmxlbmd0aCA+IDEpIHtcblx0XHR0aHJvdyBuZXcgTG9nZ2luZ0NvbmZpZ3VyYXRpb25FcnJvcihcblx0XHRcdGBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUgY29uZmlndXJhdGlvbiBwZXIgZW52aXJvbm1lbnQgZm9yIGxvZ2dpbmdgLFxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBhZGFwdGVyID0gYWRhcHRlckZvclRyYW5zcG9ydChjb25maWdzLmF0KDApPy50cmFuc3BvcnRzKTtcblx0cmV0dXJuIGZhY3RvcnkuY29uZmlndXJlKHtcblx0XHRvcHRpb25zOiB7IC4uLm9wdGlvbnMsIGxvZ0xldmVsOiBvcHRpb25zPy5sb2dMZXZlbCA/PyBEZWZhdWx0TG9nTGV2ZWwgfSxcblx0XHRhZGFwdGVyLFxuXHR9KTtcbn1cblxuLyoqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgZ3VhcmRUcmFuc3BvcnR9IOKAlCBrZXB0IGZvciBjYWxsZXJzL3Rlc3RzIGZyb20gdGhlIHNpbGVuY2Utb25seSBlcmEuICovXG5mdW5jdGlvbiBzaWxlbmNlRXJyb3JzKHRyYW5zcG9ydDoge1xuXHRvbihldmVudDogXCJlcnJvclwiLCBsaXN0ZW5lcjogKGVycjogRXJyb3IpID0+IHZvaWQpOiB1bmtub3duO1xuXHR3cml0ZT86ICguLi5hcmdzOiBuZXZlcltdKSA9PiB1bmtub3duO1xufSk6IEd1YXJkZWRUcmFuc3BvcnQge1xuXHRyZXR1cm4gZ3VhcmRUcmFuc3BvcnQodHJhbnNwb3J0IGFzIERlc3RpbmF0aW9uU3RyZWFtKTtcbn1cblxuZXhwb3J0IGNvbnN0IHBpbm9UcmFuc3BvcnQgPSB7IGNyZWF0ZVNhZmVUcmFuc3BvcnQsIGd1YXJkVHJhbnNwb3J0LCBzaWxlbmNlRXJyb3JzIH07XG4iXSwibmFtZXMiOlsiZXh0ZW5zaW9uIiwiRGVmYXVsdEVudmlyb25tZW50IiwiRGVmYXVsdExvZ0xldmVsIiwiTG9nZ2luZ0NvbmZpZ3VyYXRpb25FcnJvciIsInNjcmliZSIsInBpbm8iLCJQaW5vQWRhcHRlciIsInBpbm9SZWNpcGUiLCJndWFyZFRyYW5zcG9ydCIsIlBpbm9FeHRlbnNpb25zIiwid2l0aFBpbm8iLCJmYWN0b3J5IiwiY29uZmlnIiwibG9nTGV2ZWwiLCJjb25maWd1cmVTY3JpYmUiLCJ3aXRoUGlub1ByZXR0eSIsImxvZ0xldmVsT3JPcHRpb25zIiwicHJldHR5IiwicGFyc2VQcmV0dHlBcmciLCJhdHRhY2hSZWNpcGUiLCJ3aXRoUGlub1JvbGwiLCJvcHRpb25zIiwicm9sbCIsIndpdGhQaW5vQ3VzdG9tIiwidHJhbnNwb3J0cyIsInN0YXRpYyIsInBsYW4iLCJsb2dnZXJGYWN0b3J5IiwiYXBwbHlSZWNpcGUiLCJjaGFpbiIsIk9iamVjdCIsImFzc2lnbiIsImFuZCIsImNyZWF0ZVNhZmVUcmFuc3BvcnQiLCJ0cmFuc3BvcnQiLCJhZGFwdGVyRm9yVHJhbnNwb3J0IiwiYWRhcHRlciIsImNvbmZpZ3VyZSIsImVudmlyb25tZW50IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY29uZmlncyIsIkFycmF5IiwiaXNBcnJheSIsImZpbHRlciIsIml0ZW0iLCJsZW5ndGgiLCJhdCIsInNpbGVuY2VFcnJvcnMiLCJwaW5vVHJhbnNwb3J0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxTQUFTQSxTQUFTLFFBQVEsZ0NBQWdDO0FBQzFELFNBQVNDLGtCQUFrQixRQUEwQix5QkFBeUI7QUFDOUUsU0FFQ0MsZUFBZSxFQUVmQyx5QkFBeUIsRUFFekJDLE1BQU0sUUFDQSxtQkFBbUI7QUFDMUIsT0FBT0MsVUFLQSxPQUFPO0FBRWQsU0FBU0MsV0FBVyxRQUFRLHFCQUFxQjtBQUNqRCxTQUlDQyxVQUFVLFFBQ0osbUJBQW1CO0FBQzFCLFNBQWdDQyxjQUFjLFFBQVEsNEJBQTRCO0FBR2xGLFNBQVNBLGNBQWMsUUFBUSw0QkFBNEI7QUFzRTNELE9BQU8sTUFBTUM7SUFDWixPQUNjQyxTQUNiQyxPQUFlLEVBQ2ZDLE1BQTJDLEVBQzNDQyxRQUFpQyxFQUNoQztRQUNELE9BQU9DLGdCQUFnQkgsU0FBUztZQUFFRTtRQUFTLEdBQUdEO0lBQy9DO0lBRUEsT0FDY0csZUFDYkosT0FBZSxFQUNmSyxpQkFBb0UsRUFDbkU7UUFDRCxNQUFNQyxTQUFTQyxlQUFlRjtRQUM5QixPQUFPRyxhQUFhUixTQUFTO1lBQUVNO1lBQVFKLFVBQVVJLE9BQU9KLFFBQVE7UUFBQztJQUNsRTtJQUVBLE9BQ2NPLGFBQWFULE9BQWUsRUFBRVUsT0FBOEIsRUFBRTtRQUMzRSxPQUFPRixhQUFhUixTQUFTO1lBQUVXLE1BQU1EO1lBQVNSLFVBQVVRLFFBQVFSLFFBQVE7UUFBQztJQUMxRTtJQUVBLE9BQ2NVLGVBQ2JaLE9BQWUsRUFDZlUsT0FBMkMsRUFDMUM7UUFDRCxNQUFNLEVBQUVqQixNQUFNLEVBQUVvQixVQUFVLEVBQUUsR0FBR0gsV0FBVyxDQUFDO1FBQzNDLE9BQU9QLGdCQUFnQkgsU0FBU1AsUUFBUW9CO0lBQ3pDO0FBQ0Q7OztRQS9Cc0JDLFFBQVE7Ozs7Ozs7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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decohere/scribe-pino",
3
- "version": "0.0.1-dev.69",
3
+ "version": "0.0.1-dev.70",
4
4
  "description": "Pino adapter for @decohere/scribe",
5
5
  "keywords": [
6
6
  "typescript",
@@ -23,8 +23,8 @@
23
23
  "test": "echo \"Error: no test specified\" && exit 1"
24
24
  },
25
25
  "dependencies": {
26
- "@decohere/nexus": "0.0.1-dev.69",
27
- "@decohere/scribe": "0.0.1-dev.69",
26
+ "@decohere/nexus": "0.0.1-dev.70",
27
+ "@decohere/scribe": "0.0.1-dev.70",
28
28
  "pino": "^10.3.0"
29
29
  },
30
30
  "devDependencies": {},
@@ -9,9 +9,15 @@ export declare class PinoAdapter extends LogAdapter {
9
9
  private readonly options;
10
10
  private readonly stream;
11
11
  private disposed;
12
+ private retired;
12
13
  constructor(options: pino.LoggerOptions, stream?: pino.DestinationStream);
13
14
  configure<T extends string = never, CustomOnly extends true | false = false>(scribeOptions: ScribeOptions<T, CustomOnly>): void;
14
15
  getLogger<T extends string = never, CustomOnly extends true | false = false>(name: string): Logger<T, CustomOnly>;
15
16
  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;
16
22
  [Symbol.asyncDispose](): Promise<void>;
17
23
  }
@@ -0,0 +1,10 @@
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;
@@ -2,6 +2,9 @@ import { type Environment } from "@decohere/nexus/system";
2
2
  import { type DefaultLevels, type Logger, type ScribeOptions, scribe } from "@decohere/scribe";
3
3
  import { type DestinationStream, type TransportMultiOptions, type TransportPipelineOptions, type TransportSingleOptions } from "pino";
4
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";
5
8
  type TransportOptions = TransportSingleOptions | TransportMultiOptions | TransportPipelineOptions;
6
9
  type TransportConfig = {
7
10
  environment?: Environment;
@@ -50,15 +53,17 @@ export declare class PinoExtensions {
50
53
  static withPinoCustom<T extends string = never, CustomOnly extends true = undefined>(factory: scribe, options?: CustomLevelOptions<T, CustomOnly>): (name?: string) => Logger<T, CustomOnly>;
51
54
  }
52
55
  /**
53
- * Attach a listener so worker transport failures (e.g. pino-roll symlink EEXIST)
54
- * never become Node's default unhandled `error` crash.
56
+ * Guard a worker transport so failures (roll EEXIST, worker exit) neither
57
+ * crash the process nor spam stderr on every subsequent log write.
55
58
  */
59
+ declare function createSafeTransport(options: TransportOptions): DestinationStream;
60
+ /** @deprecated Use {@link guardTransport} — kept for callers/tests from the silence-only era. */
56
61
  declare function silenceErrors(transport: {
57
62
  on(event: "error", listener: (err: Error) => void): unknown;
58
- }): void;
59
- declare function createSafeTransport(options: TransportOptions): DestinationStream;
63
+ write?: (...args: never[]) => unknown;
64
+ }): GuardedTransport;
60
65
  export declare const pinoTransport: {
61
66
  createSafeTransport: typeof createSafeTransport;
67
+ guardTransport: typeof guardTransport;
62
68
  silenceErrors: typeof silenceErrors;
63
69
  };
64
- export {};