@decohere/scribe-pino 0.0.1-dev.9 → 0.0.1-dev.90

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.
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
5
  _export_star(require("./pino.adapater.js"), exports);
6
+ _export_star(require("./pino.recipe.js"), exports);
6
7
  _export_star(require("./scribe-pino.js"), exports);
7
8
  function _export_star(from, to) {
8
9
  Object.keys(from).forEach(function(k) {
@@ -18,4 +19,4 @@ function _export_star(from, to) {
18
19
  return from;
19
20
  }
20
21
 
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vcGluby5hZGFwYXRlci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2NyaWJlLXBpbm8uanNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUFjO3FCQUNBIn0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vcGluby5hZGFwYXRlci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGluby5yZWNpcGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NjcmliZS1waW5vLmpzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBYztxQkFDQTtxQkFDQSJ9
@@ -19,6 +19,8 @@ class PinoAdapter extends _scribe.LogAdapter {
19
19
  _pino;
20
20
  options;
21
21
  stream;
22
+ disposed = false;
23
+ retired = false;
22
24
  constructor(options, stream){
23
25
  super();
24
26
  this.options = options;
@@ -48,12 +50,132 @@ class PinoAdapter extends _scribe.LogAdapter {
48
50
  return logger;
49
51
  }
50
52
  flush(cb) {
53
+ if (this.retired || !this._pino) {
54
+ cb?.();
55
+ return;
56
+ }
51
57
  this._pino.flush(cb);
52
58
  }
59
+ /**
60
+ * Immediately stop accepting writes into the destination (ThreadStream).
61
+ * Does not wait for flush — use `stop()` for async drain after retire.
62
+ */ retire() {
63
+ if (this.retired) {
64
+ return;
65
+ }
66
+ this.retired = true;
67
+ const guarded = this.stream;
68
+ if (typeof guarded?.retire === "function") {
69
+ guarded.retire("adapter retired");
70
+ return;
71
+ }
72
+ destroyDestination(this.stream);
73
+ }
74
+ async [Symbol.asyncDispose]() {
75
+ if (this.disposed) {
76
+ return;
77
+ }
78
+ this.disposed = true;
79
+ if (!this.retired) {
80
+ const dest = this.stream;
81
+ if (dest != null && typeof dest.end === "function") {
82
+ // pino.transport() is a ThreadStream: pino.flush() → Atomics.waitAsync can
83
+ // hang forever after concurrent writes. end() flushSyncs then signals
84
+ // finish/close (it does not accept a Node Writable callback).
85
+ await endDestination(dest);
86
+ } else if (this._pino) {
87
+ await new Promise((resolve, reject)=>{
88
+ try {
89
+ this._pino.flush((err)=>{
90
+ if (err != null) {
91
+ reject(err);
92
+ return;
93
+ }
94
+ resolve();
95
+ });
96
+ } catch (err) {
97
+ reject(err instanceof Error ? err : new Error(String(err)));
98
+ }
99
+ });
100
+ }
101
+ }
102
+ // Mark dead after graceful end (or immediately if already force-retired).
103
+ this.retire();
104
+ }
105
+ }
106
+ function destroyDestination(stream) {
107
+ const destroyable = stream;
108
+ if (typeof destroyable?.destroy === "function") {
109
+ try {
110
+ destroyable.destroy();
111
+ } catch {
112
+ // already dead
113
+ }
114
+ }
115
+ }
116
+ /**
117
+ * Drain a pino destination.
118
+ *
119
+ * Node `Writable.end(cb)` invokes `cb`. `pino.transport()` returns a
120
+ * ThreadStream whose `end()` takes no callback and signals via `finish`/`close`
121
+ * instead — waiting only on `end(cb)` hangs forever and blocks Flux HMR.
122
+ */ function endDestination(stream) {
123
+ if (typeof stream.end !== "function") {
124
+ return Promise.resolve();
125
+ }
126
+ if (stream.destroyed || stream.closed || stream.writableFinished) {
127
+ return Promise.resolve();
128
+ }
129
+ return new Promise((resolve, reject)=>{
130
+ let settled = false;
131
+ const settle = (err)=>{
132
+ if (settled) {
133
+ return;
134
+ }
135
+ settled = true;
136
+ stream.off?.("finish", onFinish);
137
+ stream.off?.("close", onClose);
138
+ stream.off?.("error", onError);
139
+ if (err != null) {
140
+ reject(err);
141
+ return;
142
+ }
143
+ resolve();
144
+ };
145
+ const onFinish = ()=>settle();
146
+ const onClose = ()=>settle();
147
+ const onError = (err)=>{
148
+ // ThreadStream may emit error then close during teardown; closed = done.
149
+ if (stream.destroyed || stream.closed) {
150
+ settle();
151
+ return;
152
+ }
153
+ settle(err);
154
+ };
155
+ stream.once?.("finish", onFinish);
156
+ stream.once?.("close", onClose);
157
+ stream.once?.("error", onError);
158
+ try {
159
+ stream.end((err)=>settle(err));
160
+ } catch (err) {
161
+ settle(err instanceof Error ? err : new Error(String(err)));
162
+ return;
163
+ }
164
+ // ThreadStream.end() is a no-op when already destroyed (no events).
165
+ if (stream.destroyed || stream.closed || stream.writableFinished) {
166
+ settle();
167
+ }
168
+ });
53
169
  }
54
170
  function logMethod(args, method) {
55
171
  let message = args.at(0);
56
172
  const data = args.at(1);
173
+ if (message instanceof Error) {
174
+ method.call(this, {
175
+ err: message
176
+ }, (0, _scribe.formatError)(message));
177
+ return;
178
+ }
57
179
  if (data instanceof Error) {
58
180
  message = {
59
181
  msg: message,
@@ -85,4 +207,4 @@ function pinoMix(logger) {
85
207
  });
86
208
  }
87
209
 
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5hZGFwYXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIEJhc2VMb2dnZXIsXG5cdExvZ0FkYXB0ZXIsXG5cdHR5cGUgTG9nZ2VyLFxuXHR0eXBlIFNjcmliZU9wdGlvbnMsXG59IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgcGlubywgeyB0eXBlIExvZ0ZuIH0gZnJvbSBcInBpbm9cIjtcblxuZXhwb3J0IHR5cGUgUGlub0FkYXBhdGVyT3B0aW9ucyA9IHtcblx0b3B0aW9ucz86IHBpbm8uTG9nZ2VyT3B0aW9ucztcblx0c3RyZWFtPzogcGluby5EZXN0aW5hdGlvblN0cmVhbTtcbn07XG5cbmV4cG9ydCBjbGFzcyBQaW5vQWRhcHRlciBleHRlbmRzIExvZ0FkYXB0ZXIge1xuXHRwcml2YXRlIF9waW5vOiBwaW5vLkxvZ2dlcjtcblx0cHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnM7XG5cdHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtO1xuXHRwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogcGluby5Mb2dnZXJPcHRpb25zLCBzdHJlYW0/OiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuXHR9XG5cblx0cHVibGljIGNvbmZpZ3VyZTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdFx0c2NyaWJlT3B0aW9uczogU2NyaWJlT3B0aW9uczxULCBDdXN0b21Pbmx5Pixcblx0KSB7XG5cdFx0Y29uc3QgeyBsb2dMZXZlbCwgcmVkYWN0aW9ucyB9ID0gc2NyaWJlT3B0aW9ucztcblx0XHRjb25zdCBjdXN0b21MZXZlbHMgPSB0aGlzLmdldExvZ0xldmVscyhzY3JpYmVPcHRpb25zKTtcblxuXHRcdGNvbnN0IHBpbm9PcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnMgPSB7XG5cdFx0XHRjdXN0b21MZXZlbHMsXG5cdFx0XHRsZXZlbDogbG9nTGV2ZWwsXG5cdFx0XHRob29rczogeyBsb2dNZXRob2QgfSxcblx0XHRcdHNlcmlhbGl6ZXJzOiB7XG5cdFx0XHRcdGVycm9yOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLmVycixcblx0XHRcdH0sXG5cdFx0XHRyZWRhY3Q6IHJlZGFjdGlvbnMsXG5cdFx0XHQuLi50aGlzLm9wdGlvbnMsXG5cdFx0fTtcblx0XHR0aGlzLl9waW5vID0gcGlubyhwaW5vT3B0aW9ucywgdGhpcy5zdHJlYW0pO1xuXHR9XG5cblx0cHVibGljIGdldExvZ2dlcjxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdFx0bmFtZTogc3RyaW5nLFxuXHQpOiBMb2dnZXI8VCwgQ3VzdG9tT25seT4ge1xuXHRcdGNvbnN0IGxvZ2dlciA9IHBpbm9NaXg8VCwgQ3VzdG9tT25seT4odGhpcy5fcGluby5jaGlsZCh7IG5hbWUgfSkpO1xuXHRcdHJldHVybiBsb2dnZXI7XG5cdH1cblxuXHRwdWJsaWMgZmx1c2goY2I/OiAoKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0dGhpcy5fcGluby5mbHVzaChjYik7XG5cdH1cbn1cblxuZnVuY3Rpb24gbG9nTWV0aG9kKHRoaXM6IHBpbm8uTG9nZ2VyLCBhcmdzOiBQYXJhbWV0ZXJzPExvZ0ZuPiwgbWV0aG9kOiBMb2dGbikge1xuXHRsZXQgbWVzc2FnZSA9IGFyZ3MuYXQoMCk7XG5cdGNvbnN0IGRhdGEgPSBhcmdzLmF0KDEpO1xuXG5cdGlmIChkYXRhIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRtZXNzYWdlID0geyBtc2c6IG1lc3NhZ2UsIC4uLnsgZXJyb3I6IGRhdGEgfSB9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCAuLi5kYXRhIH07XG5cdH0gZWxzZSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCBkYXRhIH07XG5cdH1cblxuXHRtZXRob2QuY2FsbCh0aGlzLCBtZXNzYWdlKTtcbn1cblxuZnVuY3Rpb24gcGlub01peDxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdGxvZ2dlcjogcGluby5Mb2dnZXIsXG4pOiBMb2dnZXI8VCwgQ3VzdG9tT25seT4ge1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbjxwaW5vLkxvZ2dlciwgQmFzZUxvZ2dlcj4obG9nZ2VyLCB7XG5cdFx0Z2V0IGN1cnJlbnRMZXZlbCgpIHtcblx0XHRcdHJldHVybiBsb2dnZXIubGV2ZWw7XG5cdFx0fSxcblx0XHRnZXQgbG9nTGV2ZWxzKCkge1xuXHRcdFx0cmV0dXJuIGxvZ2dlci5sZXZlbHMudmFsdWVzO1xuXHRcdH0sXG5cdH0pIGFzIExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcbn1cbiJdLCJuYW1lcyI6WyJQaW5vQWRhcHRlciIsIkxvZ0FkYXB0ZXIiLCJfcGlubyIsIm9wdGlvbnMiLCJzdHJlYW0iLCJjb25maWd1cmUiLCJzY3JpYmVPcHRpb25zIiwibG9nTGV2ZWwiLCJyZWRhY3Rpb25zIiwiY3VzdG9tTGV2ZWxzIiwiZ2V0TG9nTGV2ZWxzIiwicGlub09wdGlvbnMiLCJsZXZlbCIsImhvb2tzIiwibG9nTWV0aG9kIiwic2VyaWFsaXplcnMiLCJlcnJvciIsInBpbm8iLCJzdGRTZXJpYWxpemVycyIsImVyciIsInJlZGFjdCIsImdldExvZ2dlciIsIm5hbWUiLCJsb2dnZXIiLCJwaW5vTWl4IiwiY2hpbGQiLCJmbHVzaCIsImNiIiwiYXJncyIsIm1ldGhvZCIsIm1lc3NhZ2UiLCJhdCIsImRhdGEiLCJFcnJvciIsIm1zZyIsImNhbGwiLCJPYmplY3QiLCJhc3NpZ24iLCJjdXJyZW50TGV2ZWwiLCJsb2dMZXZlbHMiLCJsZXZlbHMiLCJ2YWx1ZXMiXSwibWFwcGluZ3MiOiI7Ozs7K0JBYWFBOzs7ZUFBQUE7Ozt3QkFSTjs2REFDMEI7Ozs7OztBQU8xQixNQUFNQSxvQkFBb0JDLGtCQUFVO0lBQ2xDQyxNQUFtQjtJQUNWQyxRQUE0QjtJQUM1QkMsT0FBK0I7SUFDaEQsWUFBbUJELE9BQTJCLEVBQUVDLE1BQStCLENBQUU7UUFDaEYsS0FBSztRQUNMLElBQUksQ0FBQ0QsT0FBTyxHQUFHQTtRQUNmLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtJQUNmO0lBRU9DLFVBQ05DLGFBQTJDLEVBQzFDO1FBQ0QsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLFVBQVUsRUFBRSxHQUFHRjtRQUNqQyxNQUFNRyxlQUFlLElBQUksQ0FBQ0MsWUFBWSxDQUFDSjtRQUV2QyxNQUFNSyxjQUFrQztZQUN2Q0Y7WUFDQUcsT0FBT0w7WUFDUE0sT0FBTztnQkFBRUM7WUFBVTtZQUNuQkMsYUFBYTtnQkFDWkMsT0FBT0MsYUFBSSxDQUFDQyxjQUFjLENBQUNDLEdBQUc7WUFDL0I7WUFDQUMsUUFBUVo7WUFDUixHQUFHLElBQUksQ0FBQ0wsT0FBTztRQUNoQjtRQUNBLElBQUksQ0FBQ0QsS0FBSyxHQUFHZSxJQUFBQSxhQUFJLEVBQUNOLGFBQWEsSUFBSSxDQUFDUCxNQUFNO0lBQzNDO0lBRU9pQixVQUNOQyxJQUFZLEVBQ1k7UUFDeEIsTUFBTUMsU0FBU0MsUUFBdUIsSUFBSSxDQUFDdEIsS0FBSyxDQUFDdUIsS0FBSyxDQUFDO1lBQUVIO1FBQUs7UUFDOUQsT0FBT0M7SUFDUjtJQUVPRyxNQUFNQyxFQUFlLEVBQVE7UUFDbkMsSUFBSSxDQUFDekIsS0FBSyxDQUFDd0IsS0FBSyxDQUFDQztJQUNsQjtBQUNEO0FBRUEsU0FBU2IsVUFBNkJjLElBQXVCLEVBQUVDLE1BQWE7SUFDM0UsSUFBSUMsVUFBVUYsS0FBS0csRUFBRSxDQUFDO0lBQ3RCLE1BQU1DLE9BQU9KLEtBQUtHLEVBQUUsQ0FBQztJQUVyQixJQUFJQyxnQkFBZ0JDLE9BQU87UUFDMUJILFVBQVU7WUFBRUksS0FBS0o7WUFBUyxHQUFHO2dCQUFFZCxPQUFPZ0I7WUFBSyxDQUFDO1FBQUM7SUFDOUMsT0FBTyxJQUFJLE9BQU9BLFNBQVMsVUFBVTtRQUNwQ0YsVUFBVTtZQUFFSSxLQUFLSjtZQUFTLEdBQUdFLElBQUk7UUFBQztJQUNuQyxPQUFPO1FBQ05GLFVBQVU7WUFBRUksS0FBS0o7WUFBU0U7UUFBSztJQUNoQztJQUVBSCxPQUFPTSxJQUFJLENBQUMsSUFBSSxFQUFFTDtBQUNuQjtBQUVBLFNBQVNOLFFBQ1JELE1BQW1CO0lBRW5CLE9BQU9hLE9BQU9DLE1BQU0sQ0FBMEJkLFFBQVE7UUFDckQsSUFBSWUsZ0JBQWU7WUFDbEIsT0FBT2YsT0FBT1gsS0FBSztRQUNwQjtRQUNBLElBQUkyQixhQUFZO1lBQ2YsT0FBT2hCLE9BQU9pQixNQUFNLENBQUNDLE1BQU07UUFDNUI7SUFDRDtBQUNEIn0=
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5hZGFwYXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIEJhc2VMb2dnZXIsXG5cdGZvcm1hdEVycm9yLFxuXHRMb2dBZGFwdGVyLFxuXHR0eXBlIExvZ2dlcixcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxufSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHBpbm8sIHsgdHlwZSBMb2dGbiB9IGZyb20gXCJwaW5vXCI7XG5cbmltcG9ydCB0eXBlIHsgR3VhcmRlZFRyYW5zcG9ydCB9IGZyb20gXCIuL3Bpbm8udHJhbnNwb3J0LWd1YXJkLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFBpbm9BZGFwYXRlck9wdGlvbnMgPSB7XG5cdG9wdGlvbnM/OiBwaW5vLkxvZ2dlck9wdGlvbnM7XG5cdHN0cmVhbT86IHBpbm8uRGVzdGluYXRpb25TdHJlYW07XG59O1xuXG50eXBlIEVuZGFibGVTdHJlYW0gPSB7XG5cdGVuZD86IChjYj86IChlcnI/OiBFcnJvciB8IG51bGwpID0+IHZvaWQpID0+IHZvaWQ7XG5cdGRlc3Ryb3k/OiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZDtcblx0ZGVzdHJveWVkPzogYm9vbGVhbjtcblx0Y2xvc2VkPzogYm9vbGVhbjtcblx0d3JpdGFibGVGaW5pc2hlZD86IGJvb2xlYW47XG5cdG9uY2U/OiAoXG5cdFx0ZXZlbnQ6IFwiZmluaXNoXCIgfCBcImNsb3NlXCIgfCBcImVycm9yXCIsXG5cdFx0bGlzdGVuZXI6ICguLi5hcmdzOiBuZXZlcltdKSA9PiB2b2lkLFxuXHQpID0+IHVua25vd247XG5cdG9mZj86IChldmVudDogXCJmaW5pc2hcIiB8IFwiY2xvc2VcIiB8IFwiZXJyb3JcIiwgbGlzdGVuZXI6ICguLi5hcmdzOiBuZXZlcltdKSA9PiB2b2lkKSA9PiB1bmtub3duO1xufTtcblxuZXhwb3J0IGNsYXNzIFBpbm9BZGFwdGVyIGV4dGVuZHMgTG9nQWRhcHRlciB7XG5cdHByaXZhdGUgX3Bpbm86IHBpbm8uTG9nZ2VyO1xuXHRwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IHBpbm8uTG9nZ2VyT3B0aW9ucztcblx0cHJpdmF0ZSByZWFkb25seSBzdHJlYW06IHBpbm8uRGVzdGluYXRpb25TdHJlYW0gfCB1bmRlZmluZWQ7XG5cdHByaXZhdGUgZGlzcG9zZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSByZXRpcmVkID0gZmFsc2U7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHBpbm8uTG9nZ2VyT3B0aW9ucywgc3RyZWFtPzogcGluby5EZXN0aW5hdGlvblN0cmVhbSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLnN0cmVhbSA9IHN0cmVhbTtcblx0fVxuXG5cdHB1YmxpYyBjb25maWd1cmU8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRcdHNjcmliZU9wdGlvbnM6IFNjcmliZU9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdCkge1xuXHRcdGNvbnN0IHsgbG9nTGV2ZWwsIHJlZGFjdGlvbnMgfSA9IHNjcmliZU9wdGlvbnM7XG5cdFx0Y29uc3QgY3VzdG9tTGV2ZWxzID0gdGhpcy5nZXRMb2dMZXZlbHMoc2NyaWJlT3B0aW9ucyk7XG5cblx0XHRjb25zdCBwaW5vT3B0aW9uczogcGluby5Mb2dnZXJPcHRpb25zID0ge1xuXHRcdFx0Y3VzdG9tTGV2ZWxzLFxuXHRcdFx0bGV2ZWw6IGxvZ0xldmVsLFxuXHRcdFx0aG9va3M6IHsgbG9nTWV0aG9kIH0sXG5cdFx0XHRzZXJpYWxpemVyczoge1xuXHRcdFx0XHRlcnJvcjogcGluby5zdGRTZXJpYWxpemVycy5lcnIsXG5cdFx0XHR9LFxuXHRcdFx0cmVkYWN0OiByZWRhY3Rpb25zLFxuXHRcdFx0Li4udGhpcy5vcHRpb25zLFxuXHRcdH07XG5cdFx0dGhpcy5fcGlubyA9IHBpbm8ocGlub09wdGlvbnMsIHRoaXMuc3RyZWFtKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRMb2dnZXI8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRcdG5hbWU6IHN0cmluZyxcblx0KTogTG9nZ2VyPFQsIEN1c3RvbU9ubHk+IHtcblx0XHRjb25zdCBsb2dnZXIgPSBwaW5vTWl4PFQsIEN1c3RvbU9ubHk+KHRoaXMuX3Bpbm8uY2hpbGQoeyBuYW1lIH0pKTtcblx0XHRyZXR1cm4gbG9nZ2VyO1xuXHR9XG5cblx0cHVibGljIGZsdXNoKGNiPzogKCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnJldGlyZWQgfHwgIXRoaXMuX3Bpbm8pIHtcblx0XHRcdGNiPy4oKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5fcGluby5mbHVzaChjYik7XG5cdH1cblxuXHQvKipcblx0ICogSW1tZWRpYXRlbHkgc3RvcCBhY2NlcHRpbmcgd3JpdGVzIGludG8gdGhlIGRlc3RpbmF0aW9uIChUaHJlYWRTdHJlYW0pLlxuXHQgKiBEb2VzIG5vdCB3YWl0IGZvciBmbHVzaCDigJQgdXNlIGBzdG9wKClgIGZvciBhc3luYyBkcmFpbiBhZnRlciByZXRpcmUuXG5cdCAqL1xuXHRwdWJsaWMgcmV0aXJlKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnJldGlyZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5yZXRpcmVkID0gdHJ1ZTtcblx0XHRjb25zdCBndWFyZGVkID0gdGhpcy5zdHJlYW0gYXMgR3VhcmRlZFRyYW5zcG9ydCB8IHVuZGVmaW5lZDtcblx0XHRpZiAodHlwZW9mIGd1YXJkZWQ/LnJldGlyZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRndWFyZGVkLnJldGlyZShcImFkYXB0ZXIgcmV0aXJlZFwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0ZGVzdHJveURlc3RpbmF0aW9uKHRoaXMuc3RyZWFtKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuZGlzcG9zZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5kaXNwb3NlZCA9IHRydWU7XG5cdFx0aWYgKCF0aGlzLnJldGlyZWQpIHtcblx0XHRcdGNvbnN0IGRlc3QgPSB0aGlzLnN0cmVhbSBhcyBFbmRhYmxlU3RyZWFtIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGRlc3QgIT0gbnVsbCAmJiB0eXBlb2YgZGVzdC5lbmQgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHQvLyBwaW5vLnRyYW5zcG9ydCgpIGlzIGEgVGhyZWFkU3RyZWFtOiBwaW5vLmZsdXNoKCkg4oaSIEF0b21pY3Mud2FpdEFzeW5jIGNhblxuXHRcdFx0XHQvLyBoYW5nIGZvcmV2ZXIgYWZ0ZXIgY29uY3VycmVudCB3cml0ZXMuIGVuZCgpIGZsdXNoU3luY3MgdGhlbiBzaWduYWxzXG5cdFx0XHRcdC8vIGZpbmlzaC9jbG9zZSAoaXQgZG9lcyBub3QgYWNjZXB0IGEgTm9kZSBXcml0YWJsZSBjYWxsYmFjaykuXG5cdFx0XHRcdGF3YWl0IGVuZERlc3RpbmF0aW9uKGRlc3QpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLl9waW5vKSB7XG5cdFx0XHRcdGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0dGhpcy5fcGluby5mbHVzaCgoZXJyPzogRXJyb3IgfCBudWxsKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChlcnIgIT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRcdHJlamVjdChlcnIpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRcdHJlamVjdChlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyKSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIE1hcmsgZGVhZCBhZnRlciBncmFjZWZ1bCBlbmQgKG9yIGltbWVkaWF0ZWx5IGlmIGFscmVhZHkgZm9yY2UtcmV0aXJlZCkuXG5cdFx0dGhpcy5yZXRpcmUoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBkZXN0cm95RGVzdGluYXRpb24oc3RyZWFtOiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdGNvbnN0IGRlc3Ryb3lhYmxlID0gc3RyZWFtIGFzIEVuZGFibGVTdHJlYW0gfCB1bmRlZmluZWQ7XG5cdGlmICh0eXBlb2YgZGVzdHJveWFibGU/LmRlc3Ryb3kgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHRyeSB7XG5cdFx0XHRkZXN0cm95YWJsZS5kZXN0cm95KCk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHQvLyBhbHJlYWR5IGRlYWRcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBEcmFpbiBhIHBpbm8gZGVzdGluYXRpb24uXG4gKlxuICogTm9kZSBgV3JpdGFibGUuZW5kKGNiKWAgaW52b2tlcyBgY2JgLiBgcGluby50cmFuc3BvcnQoKWAgcmV0dXJucyBhXG4gKiBUaHJlYWRTdHJlYW0gd2hvc2UgYGVuZCgpYCB0YWtlcyBubyBjYWxsYmFjayBhbmQgc2lnbmFscyB2aWEgYGZpbmlzaGAvYGNsb3NlYFxuICogaW5zdGVhZCDigJQgd2FpdGluZyBvbmx5IG9uIGBlbmQoY2IpYCBoYW5ncyBmb3JldmVyIGFuZCBibG9ja3MgRmx1eCBITVIuXG4gKi9cbmZ1bmN0aW9uIGVuZERlc3RpbmF0aW9uKHN0cmVhbTogRW5kYWJsZVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAodHlwZW9mIHN0cmVhbS5lbmQgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXHRpZiAoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW0uY2xvc2VkIHx8IHN0cmVhbS53cml0YWJsZUZpbmlzaGVkKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRsZXQgc2V0dGxlZCA9IGZhbHNlO1xuXHRcdGNvbnN0IHNldHRsZSA9IChlcnI/OiBFcnJvciB8IG51bGwpID0+IHtcblx0XHRcdGlmIChzZXR0bGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHNldHRsZWQgPSB0cnVlO1xuXHRcdFx0c3RyZWFtLm9mZj8uKFwiZmluaXNoXCIsIG9uRmluaXNoKTtcblx0XHRcdHN0cmVhbS5vZmY/LihcImNsb3NlXCIsIG9uQ2xvc2UpO1xuXHRcdFx0c3RyZWFtLm9mZj8uKFwiZXJyb3JcIiwgb25FcnJvcik7XG5cdFx0XHRpZiAoZXJyICE9IG51bGwpIHtcblx0XHRcdFx0cmVqZWN0KGVycik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHJlc29sdmUoKTtcblx0XHR9O1xuXG5cdFx0Y29uc3Qgb25GaW5pc2ggPSAoKSA9PiBzZXR0bGUoKTtcblx0XHRjb25zdCBvbkNsb3NlID0gKCkgPT4gc2V0dGxlKCk7XG5cdFx0Y29uc3Qgb25FcnJvciA9IChlcnI6IEVycm9yKSA9PiB7XG5cdFx0XHQvLyBUaHJlYWRTdHJlYW0gbWF5IGVtaXQgZXJyb3IgdGhlbiBjbG9zZSBkdXJpbmcgdGVhcmRvd247IGNsb3NlZCA9IGRvbmUuXG5cdFx0XHRpZiAoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW0uY2xvc2VkKSB7XG5cdFx0XHRcdHNldHRsZSgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRzZXR0bGUoZXJyKTtcblx0XHR9O1xuXG5cdFx0c3RyZWFtLm9uY2U/LihcImZpbmlzaFwiLCBvbkZpbmlzaCk7XG5cdFx0c3RyZWFtLm9uY2U/LihcImNsb3NlXCIsIG9uQ2xvc2UpO1xuXHRcdHN0cmVhbS5vbmNlPy4oXCJlcnJvclwiLCBvbkVycm9yKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRzdHJlYW0uZW5kKChlcnI/OiBFcnJvciB8IG51bGwpID0+IHNldHRsZShlcnIpKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHNldHRsZShlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyKSkpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFRocmVhZFN0cmVhbS5lbmQoKSBpcyBhIG5vLW9wIHdoZW4gYWxyZWFkeSBkZXN0cm95ZWQgKG5vIGV2ZW50cykuXG5cdFx0aWYgKHN0cmVhbS5kZXN0cm95ZWQgfHwgc3RyZWFtLmNsb3NlZCB8fCBzdHJlYW0ud3JpdGFibGVGaW5pc2hlZCkge1xuXHRcdFx0c2V0dGxlKCk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gbG9nTWV0aG9kKHRoaXM6IHBpbm8uTG9nZ2VyLCBhcmdzOiBQYXJhbWV0ZXJzPExvZ0ZuPiwgbWV0aG9kOiBMb2dGbikge1xuXHRsZXQgbWVzc2FnZSA9IGFyZ3MuYXQoMCk7XG5cdGNvbnN0IGRhdGEgPSBhcmdzLmF0KDEpO1xuXG5cdGlmIChtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRtZXRob2QuY2FsbCh0aGlzLCB7IGVycjogbWVzc2FnZSB9LCBmb3JtYXRFcnJvcihtZXNzYWdlKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGRhdGEgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdG1lc3NhZ2UgPSB7IG1zZzogbWVzc2FnZSwgLi4ueyBlcnJvcjogZGF0YSB9IH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIpIHtcblx0XHRtZXNzYWdlID0geyBtc2c6IG1lc3NhZ2UsIC4uLmRhdGEgfTtcblx0fSBlbHNlIHtcblx0XHRtZXNzYWdlID0geyBtc2c6IG1lc3NhZ2UsIGRhdGEgfTtcblx0fVxuXG5cdG1ldGhvZC5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiBwaW5vTWl4PFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0bG9nZ2VyOiBwaW5vLkxvZ2dlcixcbik6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdHJldHVybiBPYmplY3QuYXNzaWduPHBpbm8uTG9nZ2VyLCBCYXNlTG9nZ2VyPihsb2dnZXIsIHtcblx0XHRnZXQgY3VycmVudExldmVsKCkge1xuXHRcdFx0cmV0dXJuIGxvZ2dlci5sZXZlbDtcblx0XHR9LFxuXHRcdGdldCBsb2dMZXZlbHMoKSB7XG5cdFx0XHRyZXR1cm4gbG9nZ2VyLmxldmVscy52YWx1ZXM7XG5cdFx0fSxcblx0fSkgYXMgTG9nZ2VyPFQsIEN1c3RvbU9ubHk+O1xufVxuIl0sIm5hbWVzIjpbIlBpbm9BZGFwdGVyIiwiTG9nQWRhcHRlciIsIl9waW5vIiwib3B0aW9ucyIsInN0cmVhbSIsImRpc3Bvc2VkIiwicmV0aXJlZCIsImNvbmZpZ3VyZSIsInNjcmliZU9wdGlvbnMiLCJsb2dMZXZlbCIsInJlZGFjdGlvbnMiLCJjdXN0b21MZXZlbHMiLCJnZXRMb2dMZXZlbHMiLCJwaW5vT3B0aW9ucyIsImxldmVsIiwiaG9va3MiLCJsb2dNZXRob2QiLCJzZXJpYWxpemVycyIsImVycm9yIiwicGlubyIsInN0ZFNlcmlhbGl6ZXJzIiwiZXJyIiwicmVkYWN0IiwiZ2V0TG9nZ2VyIiwibmFtZSIsImxvZ2dlciIsInBpbm9NaXgiLCJjaGlsZCIsImZsdXNoIiwiY2IiLCJyZXRpcmUiLCJndWFyZGVkIiwiZGVzdHJveURlc3RpbmF0aW9uIiwiU3ltYm9sIiwiYXN5bmNEaXNwb3NlIiwiZGVzdCIsImVuZCIsImVuZERlc3RpbmF0aW9uIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJFcnJvciIsIlN0cmluZyIsImRlc3Ryb3lhYmxlIiwiZGVzdHJveSIsImRlc3Ryb3llZCIsImNsb3NlZCIsIndyaXRhYmxlRmluaXNoZWQiLCJzZXR0bGVkIiwic2V0dGxlIiwib2ZmIiwib25GaW5pc2giLCJvbkNsb3NlIiwib25FcnJvciIsIm9uY2UiLCJhcmdzIiwibWV0aG9kIiwibWVzc2FnZSIsImF0IiwiZGF0YSIsImNhbGwiLCJmb3JtYXRFcnJvciIsIm1zZyIsIk9iamVjdCIsImFzc2lnbiIsImN1cnJlbnRMZXZlbCIsImxvZ0xldmVscyIsImxldmVscyIsInZhbHVlcyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkE2QmFBOzs7ZUFBQUE7Ozt3QkF2Qk47NkRBQzBCOzs7Ozs7QUFzQjFCLE1BQU1BLG9CQUFvQkMsa0JBQVU7SUFDbENDLE1BQW1CO0lBQ1ZDLFFBQTRCO0lBQzVCQyxPQUEyQztJQUNwREMsV0FBVyxNQUFNO0lBQ2pCQyxVQUFVLE1BQU07SUFFeEIsWUFBbUJILE9BQTJCLEVBQUVDLE1BQStCLENBQUU7UUFDaEYsS0FBSztRQUNMLElBQUksQ0FBQ0QsT0FBTyxHQUFHQTtRQUNmLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtJQUNmO0lBRU9HLFVBQ05DLGFBQTJDLEVBQzFDO1FBQ0QsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLFVBQVUsRUFBRSxHQUFHRjtRQUNqQyxNQUFNRyxlQUFlLElBQUksQ0FBQ0MsWUFBWSxDQUFDSjtRQUV2QyxNQUFNSyxjQUFrQztZQUN2Q0Y7WUFDQUcsT0FBT0w7WUFDUE0sT0FBTztnQkFBRUM7WUFBVTtZQUNuQkMsYUFBYTtnQkFDWkMsT0FBT0MsYUFBSSxDQUFDQyxjQUFjLENBQUNDLEdBQUc7WUFDL0I7WUFDQUMsUUFBUVo7WUFDUixHQUFHLElBQUksQ0FBQ1AsT0FBTztRQUNoQjtRQUNBLElBQUksQ0FB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
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "pinoRecipe", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return pinoRecipe;
9
+ }
10
+ });
11
+ const _system = require("@decohere/nexus/system");
12
+ const DEFAULT_ROLL_SIZE = "10m";
13
+ const DEFAULT_ROLL_FREQUENCY = "daily";
14
+ const DEFAULT_ROLL_KEEP = 14;
15
+ const ENV_LOG_FILE = "SCRIBE_LOG_FILE";
16
+ const ENV_LOG_SIZE = "SCRIBE_LOG_SIZE";
17
+ const ENV_LOG_FREQUENCY = "SCRIBE_LOG_FREQUENCY";
18
+ const ENV_LOG_KEEP = "SCRIBE_LOG_KEEP";
19
+ function currentEnvironment() {
20
+ return process.env.NODE_ENV === _system.Environments.production ? _system.Environments.production : _system.Environments.development;
21
+ }
22
+ function isEnabled(when, environment) {
23
+ return (when ?? "development") === "always" || environment === _system.Environments.development;
24
+ }
25
+ function envString(name) {
26
+ const value = process.env[name]?.trim();
27
+ return value ? value : undefined;
28
+ }
29
+ function envFrequency() {
30
+ const raw = envString(ENV_LOG_FREQUENCY);
31
+ if (raw == null) {
32
+ return undefined;
33
+ }
34
+ if (/^\d+$/.test(raw)) {
35
+ return Number(raw);
36
+ }
37
+ return raw;
38
+ }
39
+ function envKeep() {
40
+ const raw = envString(ENV_LOG_KEEP);
41
+ if (raw == null) {
42
+ return undefined;
43
+ }
44
+ const keep = Number(raw);
45
+ return Number.isFinite(keep) && keep >= 0 ? keep : undefined;
46
+ }
47
+ /**
48
+ * Resolve roll options. `SCRIBE_LOG_FILE` overrides `file` so ops can redirect
49
+ * without touching app code. Size / frequency / keep: explicit > env > default.
50
+ */ function resolveRoll(options) {
51
+ return {
52
+ file: envString(ENV_LOG_FILE) ?? options.file,
53
+ size: options.size ?? envString(ENV_LOG_SIZE) ?? DEFAULT_ROLL_SIZE,
54
+ frequency: options.frequency ?? envFrequency() ?? DEFAULT_ROLL_FREQUENCY,
55
+ keep: options.keep ?? envKeep() ?? DEFAULT_ROLL_KEEP,
56
+ mkdir: options.mkdir ?? true,
57
+ symlink: options.symlink ?? false
58
+ };
59
+ }
60
+ function prettyTarget(options) {
61
+ return {
62
+ target: "pino-pretty",
63
+ options: {
64
+ colorize: options.colorize ?? true
65
+ }
66
+ };
67
+ }
68
+ function rollTarget(options) {
69
+ const roll = resolveRoll(options);
70
+ return {
71
+ target: "pino-roll",
72
+ options: {
73
+ file: roll.file,
74
+ mkdir: roll.mkdir,
75
+ size: roll.size,
76
+ frequency: roll.frequency,
77
+ limit: {
78
+ count: roll.keep
79
+ },
80
+ symlink: roll.symlink
81
+ }
82
+ };
83
+ }
84
+ function transport(plan, environment = currentEnvironment()) {
85
+ const targets = [];
86
+ if (plan.pretty && isEnabled(plan.pretty.when, environment)) {
87
+ targets.push(prettyTarget(plan.pretty));
88
+ }
89
+ if (plan.roll && isEnabled(plan.roll.when, environment)) {
90
+ targets.push(rollTarget(plan.roll));
91
+ }
92
+ if (targets.length === 0) {
93
+ return undefined;
94
+ }
95
+ if (targets.length === 1) {
96
+ return targets[0];
97
+ }
98
+ return {
99
+ targets
100
+ };
101
+ }
102
+ const pinoRecipe = {
103
+ transport,
104
+ currentEnvironment,
105
+ resolveRoll
106
+ };
107
+
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5yZWNpcGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBFbnZpcm9ubWVudCwgRW52aXJvbm1lbnRzIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9zeXN0ZW1cIjtcbmltcG9ydCB0eXBlIHsgVHJhbnNwb3J0TXVsdGlPcHRpb25zLCBUcmFuc3BvcnRTaW5nbGVPcHRpb25zIH0gZnJvbSBcInBpbm9cIjtcblxuLyoqIFByZXR0eSBhbmQgcm9sbCBhcmUgbG9jYWwtZGV2IGNvbnZlbmllbmNlcy4gUHJvZHVjdGlvbiBzaGlwcyBKU09OIG9uIHN0ZG91dC4gKi9cbmV4cG9ydCB0eXBlIFBpbm9XaGVuID0gXCJkZXZlbG9wbWVudFwiIHwgXCJhbHdheXNcIjtcblxuZXhwb3J0IHR5cGUgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMgPSB7XG5cdGNvbG9yaXplPzogYm9vbGVhbjtcblx0bG9nTGV2ZWw/OiBzdHJpbmc7XG5cdHdoZW4/OiBQaW5vV2hlbjtcbn07XG5cbmV4cG9ydCB0eXBlIFBpbm9Sb2xsUmVjaXBlT3B0aW9ucyA9IHtcblx0LyoqIERlZmF1bHQgcm9sbCBwYXRoLiBPdmVycmlkZGVuIGF0IHJ1bnRpbWUgYnkgYFNDUklCRV9MT0dfRklMRWAgd2hlbiBzZXQuICovXG5cdGZpbGU6IHN0cmluZztcblx0c2l6ZT86IHN0cmluZztcblx0ZnJlcXVlbmN5Pzogc3RyaW5nIHwgbnVtYmVyO1xuXHRrZWVwPzogbnVtYmVyO1xuXHRta2Rpcj86IGJvb2xlYW47XG5cdHN5bWxpbms/OiBib29sZWFuO1xuXHRsb2dMZXZlbD86IHN0cmluZztcblx0d2hlbj86IFBpbm9XaGVuO1xufTtcblxuZXhwb3J0IHR5cGUgUGlub1JlY2lwZVBsYW4gPSB7XG5cdHByZXR0eT86IFBpbm9QcmV0dHlSZWNpcGVPcHRpb25zO1xuXHRyb2xsPzogUGlub1JvbGxSZWNpcGVPcHRpb25zO1xuXHRsb2dMZXZlbD86IHN0cmluZztcbn07XG5cbmNvbnN0IERFRkFVTFRfUk9MTF9TSVpFID0gXCIxMG1cIjtcbmNvbnN0IERFRkFVTFRfUk9MTF9GUkVRVUVOQ1kgPSBcImRhaWx5XCI7XG5jb25zdCBERUZBVUxUX1JPTExfS0VFUCA9IDE0O1xuXG5jb25zdCBFTlZfTE9HX0ZJTEUgPSBcIlNDUklCRV9MT0dfRklMRVwiO1xuY29uc3QgRU5WX0xPR19TSVpFID0gXCJTQ1JJQkVfTE9HX1NJWkVcIjtcbmNvbnN0IEVOVl9MT0dfRlJFUVVFTkNZID0gXCJTQ1JJQkVfTE9HX0ZSRVFVRU5DWVwiO1xuY29uc3QgRU5WX0xPR19LRUVQID0gXCJTQ1JJQkVfTE9HX0tFRVBcIjtcblxuZnVuY3Rpb24gY3VycmVudEVudmlyb25tZW50KCk6IEVudmlyb25tZW50IHtcblx0cmV0dXJuIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBFbnZpcm9ubWVudHMucHJvZHVjdGlvblxuXHRcdD8gRW52aXJvbm1lbnRzLnByb2R1Y3Rpb25cblx0XHQ6IEVudmlyb25tZW50cy5kZXZlbG9wbWVudDtcbn1cblxuZnVuY3Rpb24gaXNFbmFibGVkKHdoZW46IFBpbm9XaGVuIHwgdW5kZWZpbmVkLCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQpOiBib29sZWFuIHtcblx0cmV0dXJuICh3aGVuID8/IFwiZGV2ZWxvcG1lbnRcIikgPT09IFwiYWx3YXlzXCIgfHwgZW52aXJvbm1lbnQgPT09IEVudmlyb25tZW50cy5kZXZlbG9wbWVudDtcbn1cblxuZnVuY3Rpb24gZW52U3RyaW5nKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnZbbmFtZV0/LnRyaW0oKTtcblx0cmV0dXJuIHZhbHVlID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGVudkZyZXF1ZW5jeSgpOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRjb25zdCByYXcgPSBlbnZTdHJpbmcoRU5WX0xPR19GUkVRVUVOQ1kpO1xuXHRpZiAocmF3ID09IG51bGwpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmICgvXlxcZCskLy50ZXN0KHJhdykpIHtcblx0XHRyZXR1cm4gTnVtYmVyKHJhdyk7XG5cdH1cblx0cmV0dXJuIHJhdztcbn1cblxuZnVuY3Rpb24gZW52S2VlcCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRjb25zdCByYXcgPSBlbnZTdHJpbmcoRU5WX0xPR19LRUVQKTtcblx0aWYgKHJhdyA9PSBudWxsKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBrZWVwID0gTnVtYmVyKHJhdyk7XG5cdHJldHVybiBOdW1iZXIuaXNGaW5pdGUoa2VlcCkgJiYga2VlcCA+PSAwID8ga2VlcCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHJvbGwgb3B0aW9ucy4gYFNDUklCRV9MT0dfRklMRWAgb3ZlcnJpZGVzIGBmaWxlYCBzbyBvcHMgY2FuIHJlZGlyZWN0XG4gKiB3aXRob3V0IHRvdWNoaW5nIGFwcCBjb2RlLiBTaXplIC8gZnJlcXVlbmN5IC8ga2VlcDogZXhwbGljaXQgPiBlbnYgPiBkZWZhdWx0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlUm9sbChvcHRpb25zOiBQaW5vUm9sbFJlY2lwZU9wdGlvbnMpOiB7XG5cdGZpbGU6IHN0cmluZztcblx0c2l6ZTogc3RyaW5nO1xuXHRmcmVxdWVuY3k6IHN0cmluZyB8IG51bWJlcjtcblx0a2VlcDogbnVtYmVyO1xuXHRta2RpcjogYm9vbGVhbjtcblx0c3ltbGluazogYm9vbGVhbjtcbn0ge1xuXHRyZXR1cm4ge1xuXHRcdGZpbGU6IGVudlN0cmluZyhFTlZfTE9HX0ZJTEUpID8/IG9wdGlvbnMuZmlsZSxcblx0XHRzaXplOiBvcHRpb25zLnNpemUgPz8gZW52U3RyaW5nKEVOVl9MT0dfU0laRSkgPz8gREVGQVVMVF9ST0xMX1NJWkUsXG5cdFx0ZnJlcXVlbmN5OiBvcHRpb25zLmZyZXF1ZW5jeSA/PyBlbnZGcmVxdWVuY3koKSA/PyBERUZBVUxUX1JPTExfRlJFUVVFTkNZLFxuXHRcdGtlZXA6IG9wdGlvbnMua2VlcCA/PyBlbnZLZWVwKCkgPz8gREVGQVVMVF9ST0xMX0tFRVAsXG5cdFx0bWtkaXI6IG9wdGlvbnMubWtkaXIgPz8gdHJ1ZSxcblx0XHRzeW1saW5rOiBvcHRpb25zLnN5bWxpbmsgPz8gZmFsc2UsXG5cdH07XG59XG5cbmZ1bmN0aW9uIHByZXR0eVRhcmdldChvcHRpb25zOiBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyk6IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnMge1xuXHRyZXR1cm4ge1xuXHRcdHRhcmdldDogXCJwaW5vLXByZXR0eVwiLFxuXHRcdG9wdGlvbnM6IHsgY29sb3JpemU6IG9wdGlvbnMuY29sb3JpemUgPz8gdHJ1ZSB9LFxuXHR9O1xufVxuXG5mdW5jdGlvbiByb2xsVGFyZ2V0KG9wdGlvbnM6IFBpbm9Sb2xsUmVjaXBlT3B0aW9ucyk6IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnMge1xuXHRjb25zdCByb2xsID0gcmVzb2x2ZVJvbGwob3B0aW9ucyk7XG5cdHJldHVybiB7XG5cdFx0dGFyZ2V0OiBcInBpbm8tcm9sbFwiLFxuXHRcdG9wdGlvbnM6IHtcblx0XHRcdGZpbGU6IHJvbGwuZmlsZSxcblx0XHRcdG1rZGlyOiByb2xsLm1rZGlyLFxuXHRcdFx0c2l6ZTogcm9sbC5zaXplLFxuXHRcdFx0ZnJlcXVlbmN5OiByb2xsLmZyZXF1ZW5jeSxcblx0XHRcdGxpbWl0OiB7IGNvdW50OiByb2xsLmtlZXAgfSxcblx0XHRcdHN5bWxpbms6IHJvbGwuc3ltbGluayxcblx0XHR9LFxuXHR9O1xufVxuXG5mdW5jdGlvbiB0cmFuc3BvcnQoXG5cdHBsYW46IFBpbm9SZWNpcGVQbGFuLFxuXHRlbnZpcm9ubWVudDogRW52aXJvbm1lbnQgPSBjdXJyZW50RW52aXJvbm1lbnQoKSxcbik6IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnMgfCBUcmFuc3BvcnRNdWx0aU9wdGlvbnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCB0YXJnZXRzOiBUcmFuc3BvcnRTaW5nbGVPcHRpb25zW10gPSBbXTtcblx0aWYgKHBsYW4ucHJldHR5ICYmIGlzRW5hYmxlZChwbGFuLnByZXR0eS53aGVuLCBlbnZpcm9ubWVudCkpIHtcblx0XHR0YXJnZXRzLnB1c2gocHJldHR5VGFyZ2V0KHBsYW4ucHJldHR5KSk7XG5cdH1cblx0aWYgKHBsYW4ucm9sbCAmJiBpc0VuYWJsZWQocGxhbi5yb2xsLndoZW4sIGVudmlyb25tZW50KSkge1xuXHRcdHRhcmdldHMucHVzaChyb2xsVGFyZ2V0KHBsYW4ucm9sbCkpO1xuXHR9XG5cdGlmICh0YXJnZXRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKHRhcmdldHMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIHRhcmdldHNbMF07XG5cdH1cblx0cmV0dXJuIHsgdGFyZ2V0cyB9O1xufVxuXG5leHBvcnQgY29uc3QgcGlub1JlY2lwZSA9IHsgdHJhbnNwb3J0LCBjdXJyZW50RW52aXJvbm1lbnQsIHJlc29sdmVSb2xsIH07XG4iXSwibmFtZXMiOlsicGlub1JlY2lwZSIsIkRFRkFVTFRfUk9MTF9TSVpFIiwiREVGQVVMVF9ST0xMX0ZSRVFVRU5DWSIsIkRFRkFVTFRfUk9MTF9LRUVQIiwiRU5WX0xPR19GSUxFIiwiRU5WX0xPR19TSVpFIiwiRU5WX0xPR19GUkVRVUVOQ1kiLCJFTlZfTE9HX0tFRVAiLCJjdXJyZW50RW52aXJvbm1lbnQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJFbnZpcm9ubWVudHMiLCJwcm9kdWN0aW9uIiwiZGV2ZWxvcG1lbnQiLCJpc0VuYWJsZWQiLCJ3aGVuIiwiZW52aXJvbm1lbnQiLCJlbnZTdHJpbmciLCJuYW1lIiwidmFsdWUiLCJ0cmltIiwidW5kZWZpbmVkIiwiZW52RnJlcXVlbmN5IiwicmF3IiwidGVzdCIsIk51bWJlciIsImVudktlZXAiLCJrZWVwIiwiaXNGaW5pdGUiLCJyZXNvbHZlUm9sbCIsIm9wdGlvbnMiLCJmaWxlIiwic2l6ZSIsImZyZXF1ZW5jeSIsIm1rZGlyIiwic3ltbGluayIsInByZXR0eVRhcmdldCIsInRhcmdldCIsImNvbG9yaXplIiwicm9sbFRhcmdldCIsInJvbGwiLCJsaW1pdCIsImNvdW50IiwidHJhbnNwb3J0IiwicGxhbiIsInRhcmdldHMiLCJwcmV0dHkiLCJwdXNoIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiOzs7OytCQTBJYUE7OztlQUFBQTs7O3dCQTFJa0M7QUE4Qi9DLE1BQU1DLG9CQUFvQjtBQUMxQixNQUFNQyx5QkFBeUI7QUFDL0IsTUFBTUMsb0JBQW9CO0FBRTFCLE1BQU1DLGVBQWU7QUFDckIsTUFBTUMsZUFBZTtBQUNyQixNQUFNQyxvQkFBb0I7QUFDMUIsTUFBTUMsZUFBZTtBQUVyQixTQUFTQztJQUNSLE9BQU9DLFFBQVFDLEdBQUcsQ0FBQ0MsUUFBUSxLQUFLQyxvQkFBWSxDQUFDQyxVQUFVLEdBQ3BERCxvQkFBWSxDQUFDQyxVQUFVLEdBQ3ZCRCxvQkFBWSxDQUFDRSxXQUFXO0FBQzVCO0FBRUEsU0FBU0MsVUFBVUMsSUFBMEIsRUFBRUMsV0FBd0I7SUFDdEUsT0FBTyxBQUFDRCxDQUFBQSxRQUFRLGFBQVksTUFBTyxZQUFZQyxnQkFBZ0JMLG9CQUFZLENBQUNFLFdBQVc7QUFDeEY7QUFFQSxTQUFTSSxVQUFVQyxJQUFZO0lBQzlCLE1BQU1DLFFBQVFYLFFBQVFDLEdBQUcsQ0FBQ1MsS0FBSyxFQUFFRTtJQUNqQyxPQUFPRCxRQUFRQSxRQUFRRTtBQUN4QjtBQUVBLFNBQVNDO0lBQ1IsTUFBTUMsTUFBTU4sVUFBVVo7SUFDdEIsSUFBSWtCLE9BQU8sTUFBTTtRQUNoQixPQUFPRjtJQUNSO0lBQ0EsSUFBSSxRQUFRRyxJQUFJLENBQUNELE1BQU07UUFDdEIsT0FBT0UsT0FBT0Y7SUFDZjtJQUNBLE9BQU9BO0FBQ1I7QUFFQSxTQUFTRztJQUNSLE1BQU1ILE1BQU1OLFVBQVVYO0lBQ3RCLElBQUlpQixPQUFPLE1BQU07UUFDaEIsT0FBT0Y7SUFDUjtJQUNBLE1BQU1NLE9BQU9GLE9BQU9GO0lBQ3BCLE9BQU9FLE9BQU9HLFFBQVEsQ0FBQ0QsU0FBU0EsUUFBUSxJQUFJQSxPQUFPTjtBQUNwRDtBQUVBOzs7Q0FHQyxHQUNELFNBQVNRLFlBQVlDLE9BQThCO0lBUWxELE9BQU87UUFDTkMsTUFBTWQsVUFBVWQsaUJBQWlCMkIsUUFBUUMsSUFBSTtRQUM3Q0MsTUFBTUYsUUFBUUUsSUFBSSxJQUFJZixVQUFVYixpQkFBaUJKO1FBQ2pEaUMsV0FBV0gsUUFBUUcsU0FBUyxJQUFJWCxrQkFBa0JyQjtRQUNsRDBCLE1BQU1HLFFBQVFILElBQUksSUFBSUQsYUFBYXhCO1FBQ25DZ0MsT0FBT0osUUFBUUksS0FBSyxJQUFJO1FBQ3hCQyxTQUFTTCxRQUFRSyxPQUFPLElBQUk7SUFDN0I7QUFDRDtBQUVBLFNBQVNDLGFBQWFOLE9BQWdDO0lBQ3JELE9BQU87UUFDTk8sUUFBUTtRQUNSUCxTQUFTO1lBQUVRLFVBQVVSLFFBQVFRLFFBQVEsSUFBSTtRQUFLO0lBQy9DO0FBQ0Q7QUFFQSxTQUFTQyxXQUFXVCxPQUE4QjtJQUNqRCxNQUFNVSxPQUFPWCxZQUFZQztJQUN6QixPQUFPO1FBQ05PLFFBQVE7UUFDUlAsU0FBUztZQUNSQyxNQUFNUyxLQUFLVCxJQUFJO1lBQ2ZHLE9BQU9NLEtBQUtOLEtBQUs7WUFDakJGLE1BQU1RLEtBQUtSLElBQUk7WUFDZkMsV0FBV08sS0FBS1AsU0FBUztZQUN6QlEsT0FBTztnQkFBRUMsT0FBT0YsS0FBS2IsSUFBSTtZQUFDO1lBQzFCUSxTQUFTSyxLQUFLTCxPQUFPO1FBQ3RCO0lBQ0Q7QUFDRDtBQUVBLFNBQVNRLFVBQ1JDLElBQW9CLEVBQ3BCNUIsY0FBMkJULG9CQUFvQjtJQUUvQyxNQUFNc0MsVUFBb0MsRUFBRTtJQUM1QyxJQUFJRCxLQUFLRSxNQUFNLElBQUloQyxVQUFVOEIsS0FBS0UsTUFBTSxDQUFDL0IsSUFBSSxFQUFFQyxjQUFjO1FBQzVENkIsUUFBUUUsSUFBSSxDQUFDWCxhQUFhUSxLQUFLRSxNQUFNO0lBQ3RDO0lBQ0EsSUFBSUYsS0FBS0osSUFBSSxJQUFJMUIsVUFBVThCLEtBQUtKLElBQUksQ0FBQ3pCLElBQUksRUFBRUMsY0FBYztRQUN4RDZCLFFBQVFFLElBQUksQ0FBQ1IsV0FBV0ssS0FBS0osSUFBSTtJQUNsQztJQUNBLElBQUlLLFFBQVFHLE1BQU0sS0FBSyxHQUFHO1FBQ3pCLE9BQU8zQjtJQUNSO0lBQ0EsSUFBSXdCLFFBQVFHLE1BQU0sS0FBSyxHQUFHO1FBQ3pCLE9BQU9ILE9BQU8sQ0FBQyxFQUFFO0lBQ2xCO0lBQ0EsT0FBTztRQUFFQTtJQUFRO0FBQ2xCO0FBRU8sTUFBTTlDLGFBQWE7SUFBRTRDO0lBQVdwQztJQUFvQnNCO0FBQVkifQ==
@@ -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=