@decohere/scribe-pino 0.0.1-dev.7 → 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.
@@ -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,80 @@ 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._pino && !this.retired) {
80
+ await new Promise((resolve)=>{
81
+ try {
82
+ this._pino.flush(()=>resolve());
83
+ } catch {
84
+ resolve();
85
+ }
86
+ });
87
+ }
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
+ }
103
+ }
104
+ }
105
+ function endDestination(stream) {
106
+ const endable = stream;
107
+ if (typeof endable?.end !== "function") {
108
+ return Promise.resolve();
109
+ }
110
+ return new Promise((resolve)=>{
111
+ try {
112
+ endable.end(()=>resolve());
113
+ } catch {
114
+ resolve();
115
+ }
116
+ });
53
117
  }
54
118
  function logMethod(args, method) {
55
119
  let message = args.at(0);
56
120
  const data = args.at(1);
121
+ if (message instanceof Error) {
122
+ method.call(this, {
123
+ err: message
124
+ }, (0, _scribe.formatError)(message));
125
+ return;
126
+ }
57
127
  if (data instanceof Error) {
58
128
  message = {
59
129
  msg: message,
@@ -85,4 +155,4 @@ function pinoMix(logger) {
85
155
  });
86
156
  }
87
157
 
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5hZGFwYXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIEJhc2VMb2dnZXIsXG5cdExvZ0FkYXB0ZXIsXG5cdHR5cGUgTG9nZ2VyLFxuXHR0eXBlIFNjcmliZU9wdGlvbnMsXG59IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgcGlubywgeyB0eXBlIExvZ0ZuIH0gZnJvbSBcInBpbm9cIjtcblxuZXhwb3J0IHR5cGUgUGlub0FkYXBhdGVyT3B0aW9ucyA9IHtcblx0b3B0aW9ucz86IHBpbm8uTG9nZ2VyT3B0aW9ucztcblx0c3RyZWFtPzogcGluby5EZXN0aW5hdGlvblN0cmVhbTtcbn07XG5cbmV4cG9ydCBjbGFzcyBQaW5vQWRhcHRlciBleHRlbmRzIExvZ0FkYXB0ZXIge1xuXHRwcml2YXRlIF9waW5vOiBwaW5vLkxvZ2dlcjtcblx0cHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnM7XG5cdHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtO1xuXHRwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogcGluby5Mb2dnZXJPcHRpb25zLCBzdHJlYW0/OiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuXHR9XG5cblx0cHVibGljIGNvbmZpZ3VyZTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdFx0c2NyaWJlT3B0aW9uczogU2NyaWJlT3B0aW9uczxULCBDdXN0b21Pbmx5Pixcblx0KSB7XG5cdFx0Y29uc3QgeyBsb2dMZXZlbCwgcmVkYWN0aW9ucyB9ID0gc2NyaWJlT3B0aW9ucztcblx0XHRjb25zdCBjdXN0b21MZXZlbHMgPSB0aGlzLmdldExvZ0xldmVscyhzY3JpYmVPcHRpb25zKTtcblxuXHRcdGNvbnN0IHBpbm9PcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnMgPSB7XG5cdFx0XHRjdXN0b21MZXZlbHMsXG5cdFx0XHRsZXZlbDogbG9nTGV2ZWwsXG5cdFx0XHRob29rczogeyBsb2dNZXRob2QgfSxcblx0XHRcdHNlcmlhbGl6ZXJzOiB7XG5cdFx0XHRcdGVycm9yOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLmVycixcblx0XHRcdH0sXG5cdFx0XHRyZWRhY3Q6IHJlZGFjdGlvbnMsXG5cdFx0XHQuLi50aGlzLm9wdGlvbnMsXG5cdFx0fTtcblx0XHR0aGlzLl9waW5vID0gcGlubyhwaW5vT3B0aW9ucywgdGhpcy5zdHJlYW0pO1xuXHR9XG5cblx0cHVibGljIGdldExvZ2dlcjxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdFx0bmFtZTogc3RyaW5nLFxuXHQpOiBMb2dnZXI8VCwgQ3VzdG9tT25seT4ge1xuXHRcdGNvbnN0IGxvZ2dlciA9IHBpbm9NaXg8VCwgQ3VzdG9tT25seT4odGhpcy5fcGluby5jaGlsZCh7IG5hbWUgfSkpO1xuXHRcdHJldHVybiBsb2dnZXI7XG5cdH1cblxuXHRwdWJsaWMgZmx1c2goY2I/OiAoKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0dGhpcy5fcGluby5mbHVzaChjYik7XG5cdH1cbn1cblxuZnVuY3Rpb24gbG9nTWV0aG9kKHRoaXM6IHBpbm8uTG9nZ2VyLCBhcmdzOiBQYXJhbWV0ZXJzPExvZ0ZuPiwgbWV0aG9kOiBMb2dGbikge1xuXHRsZXQgbWVzc2FnZSA9IGFyZ3MuYXQoMCk7XG5cdGNvbnN0IGRhdGEgPSBhcmdzLmF0KDEpO1xuXG5cdGlmIChkYXRhIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRtZXNzYWdlID0geyBtc2c6IG1lc3NhZ2UsIC4uLnsgZXJyb3I6IGRhdGEgfSB9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCAuLi5kYXRhIH07XG5cdH0gZWxzZSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCBkYXRhIH07XG5cdH1cblxuXHRtZXRob2QuY2FsbCh0aGlzLCBtZXNzYWdlKTtcbn1cblxuZnVuY3Rpb24gcGlub01peDxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdGxvZ2dlcjogcGluby5Mb2dnZXIsXG4pOiBMb2dnZXI8VCwgQ3VzdG9tT25seT4ge1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbjxwaW5vLkxvZ2dlciwgQmFzZUxvZ2dlcj4obG9nZ2VyLCB7XG5cdFx0Z2V0IGN1cnJlbnRMZXZlbCgpIHtcblx0XHRcdHJldHVybiBsb2dnZXIubGV2ZWw7XG5cdFx0fSxcblx0XHRnZXQgbG9nTGV2ZWxzKCkge1xuXHRcdFx0cmV0dXJuIGxvZ2dlci5sZXZlbHMudmFsdWVzO1xuXHRcdH0sXG5cdH0pIGFzIExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcbn1cbiJdLCJuYW1lcyI6WyJQaW5vQWRhcHRlciIsIkxvZ0FkYXB0ZXIiLCJfcGlubyIsIm9wdGlvbnMiLCJzdHJlYW0iLCJjb25maWd1cmUiLCJzY3JpYmVPcHRpb25zIiwibG9nTGV2ZWwiLCJyZWRhY3Rpb25zIiwiY3VzdG9tTGV2ZWxzIiwiZ2V0TG9nTGV2ZWxzIiwicGlub09wdGlvbnMiLCJsZXZlbCIsImhvb2tzIiwibG9nTWV0aG9kIiwic2VyaWFsaXplcnMiLCJlcnJvciIsInBpbm8iLCJzdGRTZXJpYWxpemVycyIsImVyciIsInJlZGFjdCIsImdldExvZ2dlciIsIm5hbWUiLCJsb2dnZXIiLCJwaW5vTWl4IiwiY2hpbGQiLCJmbHVzaCIsImNiIiwiYXJncyIsIm1ldGhvZCIsIm1lc3NhZ2UiLCJhdCIsImRhdGEiLCJFcnJvciIsIm1zZyIsImNhbGwiLCJPYmplY3QiLCJhc3NpZ24iLCJjdXJyZW50TGV2ZWwiLCJsb2dMZXZlbHMiLCJsZXZlbHMiLCJ2YWx1ZXMiXSwibWFwcGluZ3MiOiI7Ozs7K0JBYWFBOzs7ZUFBQUE7Ozt3QkFSTjs2REFDMEI7Ozs7OztBQU8xQixNQUFNQSxvQkFBb0JDLGtCQUFVO0lBQ2xDQyxNQUFtQjtJQUNWQyxRQUE0QjtJQUM1QkMsT0FBK0I7SUFDaEQsWUFBbUJELE9BQTJCLEVBQUVDLE1BQStCLENBQUU7UUFDaEYsS0FBSztRQUNMLElBQUksQ0FBQ0QsT0FBTyxHQUFHQTtRQUNmLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtJQUNmO0lBRU9DLFVBQ05DLGFBQTJDLEVBQzFDO1FBQ0QsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLFVBQVUsRUFBRSxHQUFHRjtRQUNqQyxNQUFNRyxlQUFlLElBQUksQ0FBQ0MsWUFBWSxDQUFDSjtRQUV2QyxNQUFNSyxjQUFrQztZQUN2Q0Y7WUFDQUcsT0FBT0w7WUFDUE0sT0FBTztnQkFBRUM7WUFBVTtZQUNuQkMsYUFBYTtnQkFDWkMsT0FBT0MsYUFBSSxDQUFDQyxjQUFjLENBQUNDLEdBQUc7WUFDL0I7WUFDQUMsUUFBUVo7WUFDUixHQUFHLElBQUksQ0FBQ0wsT0FBTztRQUNoQjtRQUNBLElBQUksQ0FBQ0QsS0FBSyxHQUFHZSxJQUFBQSxhQUFJLEVBQUNOLGFBQWEsSUFBSSxDQUFDUCxNQUFNO0lBQzNDO0lBRU9pQixVQUNOQyxJQUFZLEVBQ1k7UUFDeEIsTUFBTUMsU0FBU0MsUUFBdUIsSUFBSSxDQUFDdEIsS0FBSyxDQUFDdUIsS0FBSyxDQUFDO1lBQUVIO1FBQUs7UUFDOUQsT0FBT0M7SUFDUjtJQUVPRyxNQUFNQyxFQUFlLEVBQVE7UUFDbkMsSUFBSSxDQUFDekIsS0FBSyxDQUFDd0IsS0FBSyxDQUFDQztJQUNsQjtBQUNEO0FBRUEsU0FBU2IsVUFBNkJjLElBQXVCLEVBQUVDLE1BQWE7SUFDM0UsSUFBSUMsVUFBVUYsS0FBS0csRUFBRSxDQUFDO0lBQ3RCLE1BQU1DLE9BQU9KLEtBQUtHLEVBQUUsQ0FBQztJQUVyQixJQUFJQyxnQkFBZ0JDLE9BQU87UUFDMUJILFVBQVU7WUFBRUksS0FBS0o7WUFBUyxHQUFHO2dCQUFFZCxPQUFPZ0I7WUFBSyxDQUFDO1FBQUM7SUFDOUMsT0FBTyxJQUFJLE9BQU9BLFNBQVMsVUFBVTtRQUNwQ0YsVUFBVTtZQUFFSSxLQUFLSjtZQUFTLEdBQUdFLElBQUk7UUFBQztJQUNuQyxPQUFPO1FBQ05GLFVBQVU7WUFBRUksS0FBS0o7WUFBU0U7UUFBSztJQUNoQztJQUVBSCxPQUFPTSxJQUFJLENBQUMsSUFBSSxFQUFFTDtBQUNuQjtBQUVBLFNBQVNOLFFBQ1JELE1BQW1CO0lBRW5CLE9BQU9hLE9BQU9DLE1BQU0sQ0FBMEJkLFFBQVE7UUFDckQsSUFBSWUsZ0JBQWU7WUFDbEIsT0FBT2YsT0FBT1gsS0FBSztRQUNwQjtRQUNBLElBQUkyQixhQUFZO1lBQ2YsT0FBT2hCLE9BQU9pQixNQUFNLENBQUNDLE1BQU07UUFDNUI7SUFDRDtBQUNEIn0=
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,67 @@
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
+ function currentEnvironment() {
16
+ return process.env.NODE_ENV === _system.Environments.production ? _system.Environments.production : _system.Environments.development;
17
+ }
18
+ function isEnabled(when, environment) {
19
+ return (when ?? "development") === "always" || environment === _system.Environments.development;
20
+ }
21
+ function prettyTarget(options) {
22
+ return {
23
+ target: "pino-pretty",
24
+ options: {
25
+ colorize: options.colorize ?? true
26
+ }
27
+ };
28
+ }
29
+ function rollTarget(options) {
30
+ return {
31
+ target: "pino-roll",
32
+ options: {
33
+ file: options.file,
34
+ mkdir: options.mkdir ?? true,
35
+ size: options.size ?? DEFAULT_ROLL_SIZE,
36
+ frequency: options.frequency ?? DEFAULT_ROLL_FREQUENCY,
37
+ limit: {
38
+ count: options.keep ?? DEFAULT_ROLL_KEEP
39
+ },
40
+ symlink: options.symlink ?? false
41
+ }
42
+ };
43
+ }
44
+ function transport(plan, environment = currentEnvironment()) {
45
+ const targets = [];
46
+ if (plan.pretty && isEnabled(plan.pretty.when, environment)) {
47
+ targets.push(prettyTarget(plan.pretty));
48
+ }
49
+ if (plan.roll && isEnabled(plan.roll.when, environment)) {
50
+ targets.push(rollTarget(plan.roll));
51
+ }
52
+ if (targets.length === 0) {
53
+ return undefined;
54
+ }
55
+ if (targets.length === 1) {
56
+ return targets[0];
57
+ }
58
+ return {
59
+ targets
60
+ };
61
+ }
62
+ const pinoRecipe = {
63
+ transport,
64
+ currentEnvironment
65
+ };
66
+
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5yZWNpcGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBFbnZpcm9ubWVudCwgRW52aXJvbm1lbnRzIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9zeXN0ZW1cIjtcbmltcG9ydCB0eXBlIHsgVHJhbnNwb3J0TXVsdGlPcHRpb25zLCBUcmFuc3BvcnRTaW5nbGVPcHRpb25zIH0gZnJvbSBcInBpbm9cIjtcblxuLyoqIFByZXR0eSBhbmQgcm9sbCBhcmUgbG9jYWwtZGV2IGNvbnZlbmllbmNlcy4gUHJvZHVjdGlvbiBzaGlwcyBKU09OIG9uIHN0ZG91dC4gKi9cbmV4cG9ydCB0eXBlIFBpbm9XaGVuID0gXCJkZXZlbG9wbWVudFwiIHwgXCJhbHdheXNcIjtcblxuZXhwb3J0IHR5cGUgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMgPSB7XG5cdGNvbG9yaXplPzogYm9vbGVhbjtcblx0bG9nTGV2ZWw/OiBzdHJpbmc7XG5cdHdoZW4/OiBQaW5vV2hlbjtcbn07XG5cbmV4cG9ydCB0eXBlIFBpbm9Sb2xsUmVjaXBlT3B0aW9ucyA9IHtcblx0ZmlsZTogc3RyaW5nO1xuXHRzaXplPzogc3RyaW5nO1xuXHRmcmVxdWVuY3k/OiBzdHJpbmcgfCBudW1iZXI7XG5cdGtlZXA/OiBudW1iZXI7XG5cdG1rZGlyPzogYm9vbGVhbjtcblx0c3ltbGluaz86IGJvb2xlYW47XG5cdGxvZ0xldmVsPzogc3RyaW5nO1xuXHR3aGVuPzogUGlub1doZW47XG59O1xuXG5leHBvcnQgdHlwZSBQaW5vUmVjaXBlUGxhbiA9IHtcblx0cHJldHR5PzogUGlub1ByZXR0eVJlY2lwZU9wdGlvbnM7XG5cdHJvbGw/OiBQaW5vUm9sbFJlY2lwZU9wdGlvbnM7XG5cdGxvZ0xldmVsPzogc3RyaW5nO1xufTtcblxuY29uc3QgREVGQVVMVF9ST0xMX1NJWkUgPSBcIjEwbVwiO1xuY29uc3QgREVGQVVMVF9ST0xMX0ZSRVFVRU5DWSA9IFwiZGFpbHlcIjtcbmNvbnN0IERFRkFVTFRfUk9MTF9LRUVQID0gMTQ7XG5cbmZ1bmN0aW9uIGN1cnJlbnRFbnZpcm9ubWVudCgpOiBFbnZpcm9ubWVudCB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gRW52aXJvbm1lbnRzLnByb2R1Y3Rpb25cblx0XHQ/IEVudmlyb25tZW50cy5wcm9kdWN0aW9uXG5cdFx0OiBFbnZpcm9ubWVudHMuZGV2ZWxvcG1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzRW5hYmxlZCh3aGVuOiBQaW5vV2hlbiB8IHVuZGVmaW5lZCwgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50KTogYm9vbGVhbiB7XG5cdHJldHVybiAod2hlbiA/PyBcImRldmVsb3BtZW50XCIpID09PSBcImFsd2F5c1wiIHx8IGVudmlyb25tZW50ID09PSBFbnZpcm9ubWVudHMuZGV2ZWxvcG1lbnQ7XG59XG5cbmZ1bmN0aW9uIHByZXR0eVRhcmdldChvcHRpb25zOiBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyk6IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnMge1xuXHRyZXR1cm4ge1xuXHRcdHRhcmdldDogXCJwaW5vLXByZXR0eVwiLFxuXHRcdG9wdGlvbnM6IHsgY29sb3JpemU6IG9wdGlvbnMuY29sb3JpemUgPz8gdHJ1ZSB9LFxuXHR9O1xufVxuXG5mdW5jdGlvbiByb2xsVGFyZ2V0KG9wdGlvbnM6IFBpbm9Sb2xsUmVjaXBlT3B0aW9ucyk6IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnMge1xuXHRyZXR1cm4ge1xuXHRcdHRhcmdldDogXCJwaW5vLXJvbGxcIixcblx0XHRvcHRpb25zOiB7XG5cdFx0XHRmaWxlOiBvcHRpb25zLmZpbGUsXG5cdFx0XHRta2Rpcjogb3B0aW9ucy5ta2RpciA/PyB0cnVlLFxuXHRcdFx0c2l6ZTogb3B0aW9ucy5zaXplID8/IERFRkFVTFRfUk9MTF9TSVpFLFxuXHRcdFx0ZnJlcXVlbmN5OiBvcHRpb25zLmZyZXF1ZW5jeSA/PyBERUZBVUxUX1JPTExfRlJFUVVFTkNZLFxuXHRcdFx0bGltaXQ6IHsgY291bnQ6IG9wdGlvbnMua2VlcCA/PyBERUZBVUxUX1JPTExfS0VFUCB9LFxuXHRcdFx0c3ltbGluazogb3B0aW9ucy5zeW1saW5rID8/IGZhbHNlLFxuXHRcdH0sXG5cdH07XG59XG5cbmZ1bmN0aW9uIHRyYW5zcG9ydChcblx0cGxhbjogUGlub1JlY2lwZVBsYW4sXG5cdGVudmlyb25tZW50OiBFbnZpcm9ubWVudCA9IGN1cnJlbnRFbnZpcm9ubWVudCgpLFxuKTogVHJhbnNwb3J0U2luZ2xlT3B0aW9ucyB8IFRyYW5zcG9ydE11bHRpT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhcmdldHM6IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnNbXSA9IFtdO1xuXHRpZiAocGxhbi5wcmV0dHkgJiYgaXNFbmFibGVkKHBsYW4ucHJldHR5LndoZW4sIGVudmlyb25tZW50KSkge1xuXHRcdHRhcmdldHMucHVzaChwcmV0dHlUYXJnZXQocGxhbi5wcmV0dHkpKTtcblx0fVxuXHRpZiAocGxhbi5yb2xsICYmIGlzRW5hYmxlZChwbGFuLnJvbGwud2hlbiwgZW52aXJvbm1lbnQpKSB7XG5cdFx0dGFyZ2V0cy5wdXNoKHJvbGxUYXJnZXQocGxhbi5yb2xsKSk7XG5cdH1cblx0aWYgKHRhcmdldHMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRpZiAodGFyZ2V0cy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gdGFyZ2V0c1swXTtcblx0fVxuXHRyZXR1cm4geyB0YXJnZXRzIH07XG59XG5cbmV4cG9ydCBjb25zdCBwaW5vUmVjaXBlID0geyB0cmFuc3BvcnQsIGN1cnJlbnRFbnZpcm9ubWVudCB9O1xuIl0sIm5hbWVzIjpbInBpbm9SZWNpcGUiLCJERUZBVUxUX1JPTExfU0laRSIsIkRFRkFVTFRfUk9MTF9GUkVRVUVOQ1kiLCJERUZBVUxUX1JPTExfS0VFUCIsImN1cnJlbnRFbnZpcm9ubWVudCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIkVudmlyb25tZW50cyIsInByb2R1Y3Rpb24iLCJkZXZlbG9wbWVudCIsImlzRW5hYmxlZCIsIndoZW4iLCJlbnZpcm9ubWVudCIsInByZXR0eVRhcmdldCIsIm9wdGlvbnMiLCJ0YXJnZXQiLCJjb2xvcml6ZSIsInJvbGxUYXJnZXQiLCJmaWxlIiwibWtkaXIiLCJzaXplIiwiZnJlcXVlbmN5IiwibGltaXQiLCJjb3VudCIsImtlZXAiLCJzeW1saW5rIiwidHJhbnNwb3J0IiwicGxhbiIsInRhcmdldHMiLCJwcmV0dHkiLCJwdXNoIiwicm9sbCIsImxlbmd0aCIsInVuZGVmaW5lZCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFvRmFBOzs7ZUFBQUE7Ozt3QkFwRmtDO0FBNkIvQyxNQUFNQyxvQkFBb0I7QUFDMUIsTUFBTUMseUJBQXlCO0FBQy9CLE1BQU1DLG9CQUFvQjtBQUUxQixTQUFTQztJQUNSLE9BQU9DLFFBQVFDLEdBQUcsQ0FBQ0MsUUFBUSxLQUFLQyxvQkFBWSxDQUFDQyxVQUFVLEdBQ3BERCxvQkFBWSxDQUFDQyxVQUFVLEdBQ3ZCRCxvQkFBWSxDQUFDRSxXQUFXO0FBQzVCO0FBRUEsU0FBU0MsVUFBVUMsSUFBMEIsRUFBRUMsV0FBd0I7SUFDdEUsT0FBTyxBQUFDRCxDQUFBQSxRQUFRLGFBQVksTUFBTyxZQUFZQyxnQkFBZ0JMLG9CQUFZLENBQUNFLFdBQVc7QUFDeEY7QUFFQSxTQUFTSSxhQUFhQyxPQUFnQztJQUNyRCxPQUFPO1FBQ05DLFFBQVE7UUFDUkQsU0FBUztZQUFFRSxVQUFVRixRQUFRRSxRQUFRLElBQUk7UUFBSztJQUMvQztBQUNEO0FBRUEsU0FBU0MsV0FBV0gsT0FBOEI7SUFDakQsT0FBTztRQUNOQyxRQUFRO1FBQ1JELFNBQVM7WUFDUkksTUFBTUosUUFBUUksSUFBSTtZQUNsQkMsT0FBT0wsUUFBUUssS0FBSyxJQUFJO1lBQ3hCQyxNQUFNTixRQUFRTSxJQUFJLElBQUlwQjtZQUN0QnFCLFdBQVdQLFFBQVFPLFNBQVMsSUFBSXBCO1lBQ2hDcUIsT0FBTztnQkFBRUMsT0FBT1QsUUFBUVUsSUFBSSxJQUFJdEI7WUFBa0I7WUFDbER1QixTQUFTWCxRQUFRVyxPQUFPLElBQUk7UUFDN0I7SUFDRDtBQUNEO0FBRUEsU0FBU0MsVUFDUkMsSUFBb0IsRUFDcEJmLGNBQTJCVCxvQkFBb0I7SUFFL0MsTUFBTXlCLFVBQW9DLEVBQUU7SUFDNUMsSUFBSUQsS0FBS0UsTUFBTSxJQUFJbkIsVUFBVWlCLEtBQUtFLE1BQU0sQ0FBQ2xCLElBQUksRUFBRUMsY0FBYztRQUM1RGdCLFFBQVFFLElBQUksQ0FBQ2pCLGFBQWFjLEtBQUtFLE1BQU07SUFDdEM7SUFDQSxJQUFJRixLQUFLSSxJQUFJLElBQUlyQixVQUFVaUIsS0FBS0ksSUFBSSxDQUFDcEIsSUFBSSxFQUFFQyxjQUFjO1FBQ3hEZ0IsUUFBUUUsSUFBSSxDQUFDYixXQUFXVSxLQUFLSSxJQUFJO0lBQ2xDO0lBQ0EsSUFBSUgsUUFBUUksTUFBTSxLQUFLLEdBQUc7UUFDekIsT0FBT0M7SUFDUjtJQUNBLElBQUlMLFFBQVFJLE1BQU0sS0FBSyxHQUFHO1FBQ3pCLE9BQU9KLE9BQU8sQ0FBQyxFQUFFO0lBQ2xCO0lBQ0EsT0FBTztRQUFFQTtJQUFRO0FBQ2xCO0FBRU8sTUFBTTdCLGFBQWE7SUFBRTJCO0lBQVd2QjtBQUFtQiJ9
@@ -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=
@@ -2,16 +2,35 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "PinoExtensions", {
6
- enumerable: true,
7
- get: function() {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get PinoExtensions () {
8
13
  return PinoExtensions;
14
+ },
15
+ get guardTransport () {
16
+ return _pinotransportguard.guardTransport;
17
+ },
18
+ get pinoTransport () {
19
+ return pinoTransport;
9
20
  }
10
21
  });
11
22
  const _extensibility = require("@decohere/nexus/extensibility");
12
23
  const _system = require("@decohere/nexus/system");
13
24
  const _scribe = require("@decohere/scribe");
25
+ const _pino = /*#__PURE__*/ _interop_require_default(require("pino"));
14
26
  const _pinoadapater = require("./pino.adapater.js");
27
+ const _pinorecipe = require("./pino.recipe.js");
28
+ const _pinotransportguard = require("./pino.transport-guard.js");
29
+ function _interop_require_default(obj) {
30
+ return obj && obj.__esModule ? obj : {
31
+ default: obj
32
+ };
33
+ }
15
34
  function _ts_decorate(decorators, target, key, desc) {
16
35
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
17
36
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -27,23 +46,28 @@ class PinoExtensions {
27
46
  logLevel
28
47
  }, config);
29
48
  }
30
- static withPinoPretty(factory, logLevel) {
31
- return PinoExtensions.withPino(factory, {
32
- transports: {
33
- target: "pino-pretty",
34
- options: {
35
- colorize: true
36
- }
37
- }
38
- }, logLevel);
49
+ static withPinoPretty(factory, logLevelOrOptions) {
50
+ const pretty = parsePrettyArg(logLevelOrOptions);
51
+ return attachRecipe(factory, {
52
+ pretty,
53
+ logLevel: pretty.logLevel
54
+ });
55
+ }
56
+ static withPinoRoll(factory, options) {
57
+ return attachRecipe(factory, {
58
+ roll: options,
59
+ logLevel: options.logLevel
60
+ });
39
61
  }
40
62
  static withPinoCustom(factory, options) {
41
- const { scribe, transports } = options;
63
+ const { scribe, transports } = options ?? {};
42
64
  return configureScribe(factory, scribe, transports);
43
65
  }
44
66
  }
45
67
  _ts_decorate([
46
- (0, _extensibility.extension)(_scribe.scribe),
68
+ (0, _extensibility.extension)(_scribe.scribe, {
69
+ static: true
70
+ }),
47
71
  _ts_metadata("design:type", Function),
48
72
  _ts_metadata("design:paramtypes", [
49
73
  typeof _scribe.scribe === "undefined" ? Object : _scribe.scribe,
@@ -53,7 +77,9 @@ _ts_decorate([
53
77
  _ts_metadata("design:returntype", void 0)
54
78
  ], PinoExtensions, "withPino", null);
55
79
  _ts_decorate([
56
- (0, _extensibility.extension)(_scribe.scribe),
80
+ (0, _extensibility.extension)(_scribe.scribe, {
81
+ static: true
82
+ }),
57
83
  _ts_metadata("design:type", Function),
58
84
  _ts_metadata("design:paramtypes", [
59
85
  typeof _scribe.scribe === "undefined" ? Object : _scribe.scribe,
@@ -62,7 +88,20 @@ _ts_decorate([
62
88
  _ts_metadata("design:returntype", void 0)
63
89
  ], PinoExtensions, "withPinoPretty", null);
64
90
  _ts_decorate([
65
- (0, _extensibility.extension)(_scribe.scribe),
91
+ (0, _extensibility.extension)(_scribe.scribe, {
92
+ static: true
93
+ }),
94
+ _ts_metadata("design:type", Function),
95
+ _ts_metadata("design:paramtypes", [
96
+ typeof _scribe.scribe === "undefined" ? Object : _scribe.scribe,
97
+ typeof PinoRollRecipeOptions === "undefined" ? Object : PinoRollRecipeOptions
98
+ ]),
99
+ _ts_metadata("design:returntype", void 0)
100
+ ], PinoExtensions, "withPinoRoll", null);
101
+ _ts_decorate([
102
+ (0, _extensibility.extension)(_scribe.scribe, {
103
+ static: true
104
+ }),
66
105
  _ts_metadata("design:type", Function),
67
106
  _ts_metadata("design:paramtypes", [
68
107
  typeof _scribe.scribe === "undefined" ? Object : _scribe.scribe,
@@ -70,23 +109,88 @@ _ts_decorate([
70
109
  ]),
71
110
  _ts_metadata("design:returntype", void 0)
72
111
  ], PinoExtensions, "withPinoCustom", null);
112
+ function parsePrettyArg(logLevelOrOptions) {
113
+ if (logLevelOrOptions == null) {
114
+ return {};
115
+ }
116
+ if (typeof logLevelOrOptions === "string") {
117
+ return {
118
+ logLevel: logLevelOrOptions
119
+ };
120
+ }
121
+ return logLevelOrOptions;
122
+ }
123
+ function attachRecipe(factory, plan) {
124
+ const loggerFactory = applyRecipe(factory, plan);
125
+ const chain = {
126
+ withPinoPretty (logLevelOrOptions) {
127
+ const pretty = parsePrettyArg(logLevelOrOptions);
128
+ return attachRecipe(factory, {
129
+ ...plan,
130
+ pretty: {
131
+ ...plan.pretty,
132
+ ...pretty
133
+ },
134
+ logLevel: pretty.logLevel ?? plan.logLevel
135
+ });
136
+ },
137
+ withPinoRoll (options) {
138
+ return attachRecipe(factory, {
139
+ ...plan,
140
+ roll: options,
141
+ logLevel: options.logLevel ?? plan.logLevel
142
+ });
143
+ }
144
+ };
145
+ return Object.assign(loggerFactory, chain, {
146
+ and: chain
147
+ });
148
+ }
149
+ /**
150
+ * Guard a worker transport so failures (roll EEXIST, worker exit) neither
151
+ * crash the process nor spam stderr on every subsequent log write.
152
+ */ function createSafeTransport(options) {
153
+ return (0, _pinotransportguard.guardTransport)(_pino.default.transport(options));
154
+ }
155
+ function adapterForTransport(transport) {
156
+ if (transport == null) {
157
+ return new _pinoadapater.PinoAdapter({});
158
+ }
159
+ return new _pinoadapater.PinoAdapter({}, createSafeTransport(transport));
160
+ }
161
+ function applyRecipe(factory, plan) {
162
+ const adapter = adapterForTransport(_pinorecipe.pinoRecipe.transport(plan));
163
+ return factory.configure({
164
+ options: {
165
+ logLevel: plan.logLevel ?? _scribe.DefaultLogLevel
166
+ },
167
+ adapter
168
+ });
169
+ }
73
170
  function configureScribe(factory, options, config) {
74
171
  const environment = process.env.NODE_ENV ?? _system.DefaultEnvironment;
75
- const configs = Array.isArray(config) ? config : [
172
+ const configs = (Array.isArray(config) ? config : config != null ? [
76
173
  config
77
- ];
78
- const transports = configs.filter((config)=>config.environment && config.environment === environment || true);
79
- if (transports.length > 1) {
174
+ ] : []).filter((item)=>item.environment == null || item.environment === environment);
175
+ if (configs.length > 1) {
80
176
  throw new _scribe.LoggingConfigurationError(`There should only be one configuration per environment for logging`);
81
177
  }
82
- const transport = transports.at(0)?.transports;
83
- const adapter = new _pinoadapater.PinoAdapter({
84
- transport
85
- });
178
+ const adapter = adapterForTransport(configs.at(0)?.transports);
86
179
  return factory.configure({
87
- options,
180
+ options: {
181
+ ...options,
182
+ logLevel: options?.logLevel ?? _scribe.DefaultLogLevel
183
+ },
88
184
  adapter
89
185
  });
90
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
+ }
190
+ const pinoTransport = {
191
+ createSafeTransport,
192
+ guardTransport: _pinotransportguard.guardTransport,
193
+ silenceErrors
194
+ };
91
195
 
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvc2NyaWJlLXBpbm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5zaW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9leHRlbnNpYmlsaXR5XCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnQsIHR5cGUgRW52aXJvbm1lbnQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL3N5c3RlbVwiO1xuaW1wb3J0IHtcblx0dHlwZSBEZWZhdWx0TGV2ZWxzLFxuXHR0eXBlIExvZ2dlcixcblx0TG9nZ2luZ0NvbmZpZ3VyYXRpb25FcnJvcixcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxuXHRzY3JpYmUsXG59IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgdHlwZSB7XG5cdFRyYW5zcG9ydE11bHRpT3B0aW9ucyxcblx0VHJhbnNwb3J0UGlwZWxpbmVPcHRpb25zLFxuXHRUcmFuc3BvcnRTaW5nbGVPcHRpb25zLFxufSBmcm9tIFwicGlub1wiO1xuXG5pbXBvcnQgeyBQaW5vQWRhcHRlciB9IGZyb20gXCIuL3Bpbm8uYWRhcGF0ZXIuanNcIjtcblxudHlwZSBUcmFuc3BvcnRDb25maWcgPSB7XG5cdGVudmlyb25tZW50PzogRW52aXJvbm1lbnQ7XG5cdHRyYW5zcG9ydHM6IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnMgfCBUcmFuc3BvcnRNdWx0aU9wdGlvbnMgfCBUcmFuc3BvcnRQaXBlbGluZU9wdGlvbnM7XG59O1xuXG50eXBlIEN1c3RvbUxldmVsT3B0aW9uczxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPiA9IHtcblx0c2NyaWJlPzogU2NyaWJlT3B0aW9uczxULCBDdXN0b21Pbmx5Pjtcblx0dHJhbnNwb3J0cz86IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdO1xufTtcblxuZGVjbGFyZSBtb2R1bGUgXCJAZGVjb2hlcmUvc2NyaWJlXCIge1xuXHRpbnRlcmZhY2Ugc2NyaWJlIHtcblx0XHR3aXRoUGlubyhcblx0XHRcdHRyYW5zcG9ydHM6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuXHRcdFx0bG9nbGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHRcdCk6IChuYW1lPzogc3RyaW5nKSA9PiBMb2dnZXI7XG5cdFx0d2l0aFBpbm9QcmV0dHkobG9nTGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nKTogKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjtcblx0XHR3aXRoUGlub0N1c3RvbTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPihcblx0XHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdFx0KTogKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgUGlub0V4dGVuc2lvbnMge1xuXHRAZXh0ZW5zaW9uKHNjcmliZSlcblx0cHVibGljIHN0YXRpYyB3aXRoUGlubyhcblx0XHRmYWN0b3J5OiBzY3JpYmUsXG5cdFx0Y29uZmlnOiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcblx0XHRsb2dMZXZlbD86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcsXG5cdCkge1xuXHRcdHJldHVybiBjb25maWd1cmVTY3JpYmUoZmFjdG9yeSwgeyBsb2dMZXZlbCB9LCBjb25maWcpO1xuXHR9XG5cblx0QGV4dGVuc2lvbihzY3JpYmUpXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm9QcmV0dHkoZmFjdG9yeTogc2NyaWJlLCBsb2dMZXZlbD86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gUGlub0V4dGVuc2lvbnMud2l0aFBpbm8oXG5cdFx0XHRmYWN0b3J5LFxuXHRcdFx0eyB0cmFuc3BvcnRzOiB7IHRhcmdldDogXCJwaW5vLXByZXR0eVwiLCBvcHRpb25zOiB7IGNvbG9yaXplOiB0cnVlIH0gfSB9LFxuXHRcdFx0bG9nTGV2ZWwsXG5cdFx0KTtcblx0fVxuXG5cdEBleHRlbnNpb24oc2NyaWJlKVxuXHRwdWJsaWMgc3RhdGljIHdpdGhQaW5vQ3VzdG9tPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgPSB1bmRlZmluZWQ+KFxuXHRcdGZhY3Rvcnk6IHNjcmliZSxcblx0XHRvcHRpb25zPzogQ3VzdG9tTGV2ZWxPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHQpIHtcblx0XHRjb25zdCB7IHNjcmliZSwgdHJhbnNwb3J0cyB9ID0gb3B0aW9ucztcblx0XHRyZXR1cm4gY29uZmlndXJlU2NyaWJlKGZhY3RvcnksIHNjcmliZSwgdHJhbnNwb3J0cyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY29uZmlndXJlU2NyaWJlPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0ZmFjdG9yeTogc2NyaWJlLFxuXHRvcHRpb25zOiBTY3JpYmVPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHRjb25maWc6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuKSB7XG5cdGNvbnN0IGVudmlyb25tZW50ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gRGVmYXVsdEVudmlyb25tZW50O1xuXHRjb25zdCBjb25maWdzID0gQXJyYXkuaXNBcnJheShjb25maWcpID8gY29uZmlnIDogW2NvbmZpZ107XG5cdGNvbnN0IHRyYW5zcG9ydHMgPSBjb25maWdzLmZpbHRlcihcblx0XHQoY29uZmlnKSA9PiAoY29uZmlnLmVudmlyb25tZW50ICYmIGNvbmZpZy5lbnZpcm9ubWVudCA9PT0gZW52aXJvbm1lbnQpIHx8IHRydWUsXG5cdCk7XG5cblx0aWYgKHRyYW5zcG9ydHMubGVuZ3RoID4gMSkge1xuXHRcdHRocm93IG5ldyBMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yKFxuXHRcdFx0YFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBjb25maWd1cmF0aW9uIHBlciBlbnZpcm9ubWVudCBmb3IgbG9nZ2luZ2AsXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuYXQoMCk/LnRyYW5zcG9ydHM7XG5cdGNvbnN0IGFkYXB0ZXIgPSBuZXcgUGlub0FkYXB0ZXIoeyB0cmFuc3BvcnQgfSk7XG5cdHJldHVybiBmYWN0b3J5LmNvbmZpZ3VyZSh7XG5cdFx0b3B0aW9ucyxcblx0XHRhZGFwdGVyLFxuXHR9KTtcbn1cbiJdLCJuYW1lcyI6WyJQaW5vRXh0ZW5zaW9ucyIsIndpdGhQaW5vIiwiZmFjdG9yeSIsImNvbmZpZyIsImxvZ0xldmVsIiwiY29uZmlndXJlU2NyaWJlIiwid2l0aFBpbm9QcmV0dHkiLCJ0cmFuc3BvcnRzIiwidGFyZ2V0Iiwib3B0aW9ucyIsImNvbG9yaXplIiwid2l0aFBpbm9DdXN0b20iLCJzY3JpYmUiLCJlbnZpcm9ubWVudCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIkRlZmF1bHRFbnZpcm9ubWVudCIsImNvbmZpZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJsZW5ndGgiLCJMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yIiwidHJhbnNwb3J0IiwiYXQiLCJhZGFwdGVyIiwiUGlub0FkYXB0ZXIiLCJjb25maWd1cmUiXSwibWFwcGluZ3MiOiI7Ozs7K0JBd0NhQTs7O2VBQUFBOzs7K0JBeENhO3dCQUMyQjt3QkFPOUM7OEJBT3FCOzs7Ozs7Ozs7O0FBeUJyQixNQUFNQTtJQUNaLE9BQ2NDLFNBQ2JDLE9BQWUsRUFDZkMsTUFBMkMsRUFDM0NDLFFBQWlDLEVBQ2hDO1FBQ0QsT0FBT0MsZ0JBQWdCSCxTQUFTO1lBQUVFO1FBQVMsR0FBR0Q7SUFDL0M7SUFFQSxPQUNjRyxlQUFlSixPQUFlLEVBQUVFLFFBQWlDLEVBQUU7UUFDaEYsT0FBT0osZUFBZUMsUUFBUSxDQUM3QkMsU0FDQTtZQUFFSyxZQUFZO2dCQUFFQyxRQUFRO2dCQUFlQyxTQUFTO29CQUFFQyxVQUFVO2dCQUFLO1lBQUU7UUFBRSxHQUNyRU47SUFFRjtJQUVBLE9BQ2NPLGVBQ2JULE9BQWUsRUFDZk8sT0FBMkMsRUFDMUM7UUFDRCxNQUFNLEVBQUVHLE1BQU0sRUFBRUwsVUFBVSxFQUFFLEdBQUdFO1FBQy9CLE9BQU9KLGdCQUFnQkgsU0FBU1UsUUFBUUw7SUFDekM7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxTQUFTRixnQkFDUkgsT0FBZSxFQUNmTyxPQUFxQyxFQUNyQ04sTUFBMkM7SUFFM0MsTUFBTVUsY0FBY0MsUUFBUUMsR0FBRyxDQUFDQyxRQUFRLElBQUlDLDBCQUFrQjtJQUM5RCxNQUFNQyxVQUFVQyxNQUFNQyxPQUFPLENBQUNqQixVQUFVQSxTQUFTO1FBQUNBO0tBQU87SUFDekQsTUFBTUksYUFBYVcsUUFBUUcsTUFBTSxDQUNoQyxDQUFDbEIsU0FBVyxBQUFDQSxPQUFPVSxXQUFXLElBQUlWLE9BQU9VLFdBQVcsS0FBS0EsZUFBZ0I7SUFHM0UsSUFBSU4sV0FBV2UsTUFBTSxHQUFHLEdBQUc7UUFDMUIsTUFBTSxJQUFJQyxpQ0FBeUIsQ0FDbEMsQ0FBQyxrRUFBa0UsQ0FBQztJQUV0RTtJQUVBLE1BQU1DLFlBQVlqQixXQUFXa0IsRUFBRSxDQUFDLElBQUlsQjtJQUNwQyxNQUFNbUIsVUFBVSxJQUFJQyx5QkFBVyxDQUFDO1FBQUVIO0lBQVU7SUFDNUMsT0FBT3RCLFFBQVEwQixTQUFTLENBQUM7UUFDeEJuQjtRQUNBaUI7SUFDRDtBQUNEIn0=
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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
package/es6/src/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./pino.adapater.js";
2
+ export * from "./pino.recipe.js";
2
3
  export * from "./scribe-pino.js";
3
4
 
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vcGluby5hZGFwYXRlci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2NyaWJlLXBpbm8uanNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLG1CQUFtQiJ9
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vcGluby5hZGFwYXRlci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGluby5yZWNpcGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NjcmliZS1waW5vLmpzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxtQkFBbUI7QUFDakMsY0FBYyxtQkFBbUIifQ==
@@ -1,9 +1,11 @@
1
- import { LogAdapter } from "@decohere/scribe";
1
+ import { formatError, LogAdapter } from "@decohere/scribe";
2
2
  import pino from "pino";
3
3
  export class PinoAdapter extends LogAdapter {
4
4
  _pino;
5
5
  options;
6
6
  stream;
7
+ disposed = false;
8
+ retired = false;
7
9
  constructor(options, stream){
8
10
  super();
9
11
  this.options = options;
@@ -33,12 +35,80 @@ export class PinoAdapter extends LogAdapter {
33
35
  return logger;
34
36
  }
35
37
  flush(cb) {
38
+ if (this.retired || !this._pino) {
39
+ cb?.();
40
+ return;
41
+ }
36
42
  this._pino.flush(cb);
37
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
+ }
59
+ async [Symbol.asyncDispose]() {
60
+ if (this.disposed) {
61
+ return;
62
+ }
63
+ this.disposed = true;
64
+ if (this._pino && !this.retired) {
65
+ await new Promise((resolve)=>{
66
+ try {
67
+ this._pino.flush(()=>resolve());
68
+ } catch {
69
+ resolve();
70
+ }
71
+ });
72
+ }
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
+ }
88
+ }
89
+ }
90
+ function endDestination(stream) {
91
+ const endable = stream;
92
+ if (typeof endable?.end !== "function") {
93
+ return Promise.resolve();
94
+ }
95
+ return new Promise((resolve)=>{
96
+ try {
97
+ endable.end(()=>resolve());
98
+ } catch {
99
+ resolve();
100
+ }
101
+ });
38
102
  }
39
103
  function logMethod(args, method) {
40
104
  let message = args.at(0);
41
105
  const data = args.at(1);
106
+ if (message instanceof Error) {
107
+ method.call(this, {
108
+ err: message
109
+ }, formatError(message));
110
+ return;
111
+ }
42
112
  if (data instanceof Error) {
43
113
  message = {
44
114
  msg: message,
@@ -70,4 +140,4 @@ function pinoMix(logger) {
70
140
  });
71
141
  }
72
142
 
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5hZGFwYXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHR0eXBlIEJhc2VMb2dnZXIsXG5cdExvZ0FkYXB0ZXIsXG5cdHR5cGUgTG9nZ2VyLFxuXHR0eXBlIFNjcmliZU9wdGlvbnMsXG59IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgcGlubywgeyB0eXBlIExvZ0ZuIH0gZnJvbSBcInBpbm9cIjtcblxuZXhwb3J0IHR5cGUgUGlub0FkYXBhdGVyT3B0aW9ucyA9IHtcblx0b3B0aW9ucz86IHBpbm8uTG9nZ2VyT3B0aW9ucztcblx0c3RyZWFtPzogcGluby5EZXN0aW5hdGlvblN0cmVhbTtcbn07XG5cbmV4cG9ydCBjbGFzcyBQaW5vQWRhcHRlciBleHRlbmRzIExvZ0FkYXB0ZXIge1xuXHRwcml2YXRlIF9waW5vOiBwaW5vLkxvZ2dlcjtcblx0cHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnM7XG5cdHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtO1xuXHRwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogcGluby5Mb2dnZXJPcHRpb25zLCBzdHJlYW0/OiBwaW5vLkRlc3RpbmF0aW9uU3RyZWFtKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuXHR9XG5cblx0cHVibGljIGNvbmZpZ3VyZTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdFx0c2NyaWJlT3B0aW9uczogU2NyaWJlT3B0aW9uczxULCBDdXN0b21Pbmx5Pixcblx0KSB7XG5cdFx0Y29uc3QgeyBsb2dMZXZlbCwgcmVkYWN0aW9ucyB9ID0gc2NyaWJlT3B0aW9ucztcblx0XHRjb25zdCBjdXN0b21MZXZlbHMgPSB0aGlzLmdldExvZ0xldmVscyhzY3JpYmVPcHRpb25zKTtcblxuXHRcdGNvbnN0IHBpbm9PcHRpb25zOiBwaW5vLkxvZ2dlck9wdGlvbnMgPSB7XG5cdFx0XHRjdXN0b21MZXZlbHMsXG5cdFx0XHRsZXZlbDogbG9nTGV2ZWwsXG5cdFx0XHRob29rczogeyBsb2dNZXRob2QgfSxcblx0XHRcdHNlcmlhbGl6ZXJzOiB7XG5cdFx0XHRcdGVycm9yOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLmVycixcblx0XHRcdH0sXG5cdFx0XHRyZWRhY3Q6IHJlZGFjdGlvbnMsXG5cdFx0XHQuLi50aGlzLm9wdGlvbnMsXG5cdFx0fTtcblx0XHR0aGlzLl9waW5vID0gcGlubyhwaW5vT3B0aW9ucywgdGhpcy5zdHJlYW0pO1xuXHR9XG5cblx0cHVibGljIGdldExvZ2dlcjxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdFx0bmFtZTogc3RyaW5nLFxuXHQpOiBMb2dnZXI8VCwgQ3VzdG9tT25seT4ge1xuXHRcdGNvbnN0IGxvZ2dlciA9IHBpbm9NaXg8VCwgQ3VzdG9tT25seT4odGhpcy5fcGluby5jaGlsZCh7IG5hbWUgfSkpO1xuXHRcdHJldHVybiBsb2dnZXI7XG5cdH1cblxuXHRwdWJsaWMgZmx1c2goY2I/OiAoKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0dGhpcy5fcGluby5mbHVzaChjYik7XG5cdH1cbn1cblxuZnVuY3Rpb24gbG9nTWV0aG9kKHRoaXM6IHBpbm8uTG9nZ2VyLCBhcmdzOiBQYXJhbWV0ZXJzPExvZ0ZuPiwgbWV0aG9kOiBMb2dGbikge1xuXHRsZXQgbWVzc2FnZSA9IGFyZ3MuYXQoMCk7XG5cdGNvbnN0IGRhdGEgPSBhcmdzLmF0KDEpO1xuXG5cdGlmIChkYXRhIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRtZXNzYWdlID0geyBtc2c6IG1lc3NhZ2UsIC4uLnsgZXJyb3I6IGRhdGEgfSB9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCAuLi5kYXRhIH07XG5cdH0gZWxzZSB7XG5cdFx0bWVzc2FnZSA9IHsgbXNnOiBtZXNzYWdlLCBkYXRhIH07XG5cdH1cblxuXHRtZXRob2QuY2FsbCh0aGlzLCBtZXNzYWdlKTtcbn1cblxuZnVuY3Rpb24gcGlub01peDxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSBmYWxzZT4oXG5cdGxvZ2dlcjogcGluby5Mb2dnZXIsXG4pOiBMb2dnZXI8VCwgQ3VzdG9tT25seT4ge1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbjxwaW5vLkxvZ2dlciwgQmFzZUxvZ2dlcj4obG9nZ2VyLCB7XG5cdFx0Z2V0IGN1cnJlbnRMZXZlbCgpIHtcblx0XHRcdHJldHVybiBsb2dnZXIubGV2ZWw7XG5cdFx0fSxcblx0XHRnZXQgbG9nTGV2ZWxzKCkge1xuXHRcdFx0cmV0dXJuIGxvZ2dlci5sZXZlbHMudmFsdWVzO1xuXHRcdH0sXG5cdH0pIGFzIExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcbn1cbiJdLCJuYW1lcyI6WyJMb2dBZGFwdGVyIiwicGlubyIsIlBpbm9BZGFwdGVyIiwiX3Bpbm8iLCJvcHRpb25zIiwic3RyZWFtIiwiY29uZmlndXJlIiwic2NyaWJlT3B0aW9ucyIsImxvZ0xldmVsIiwicmVkYWN0aW9ucyIsImN1c3RvbUxldmVscyIsImdldExvZ0xldmVscyIsInBpbm9PcHRpb25zIiwibGV2ZWwiLCJob29rcyIsImxvZ01ldGhvZCIsInNlcmlhbGl6ZXJzIiwiZXJyb3IiLCJzdGRTZXJpYWxpemVycyIsImVyciIsInJlZGFjdCIsImdldExvZ2dlciIsIm5hbWUiLCJsb2dnZXIiLCJwaW5vTWl4IiwiY2hpbGQiLCJmbHVzaCIsImNiIiwiYXJncyIsIm1ldGhvZCIsIm1lc3NhZ2UiLCJhdCIsImRhdGEiLCJFcnJvciIsIm1zZyIsImNhbGwiLCJPYmplY3QiLCJhc3NpZ24iLCJjdXJyZW50TGV2ZWwiLCJsb2dMZXZlbHMiLCJsZXZlbHMiLCJ2YWx1ZXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBRUNBLFVBQVUsUUFHSixtQkFBbUI7QUFDMUIsT0FBT0MsVUFBMEIsT0FBTztBQU94QyxPQUFPLE1BQU1DLG9CQUFvQkY7SUFDeEJHLE1BQW1CO0lBQ1ZDLFFBQTRCO0lBQzVCQyxPQUErQjtJQUNoRCxZQUFtQkQsT0FBMkIsRUFBRUMsTUFBK0IsQ0FBRTtRQUNoRixLQUFLO1FBQ0wsSUFBSSxDQUFDRCxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO0lBQ2Y7SUFFT0MsVUFDTkMsYUFBMkMsRUFDMUM7UUFDRCxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsVUFBVSxFQUFFLEdBQUdGO1FBQ2pDLE1BQU1HLGVBQWUsSUFBSSxDQUFDQyxZQUFZLENBQUNKO1FBRXZDLE1BQU1LLGNBQWtDO1lBQ3ZDRjtZQUNBRyxPQUFPTDtZQUNQTSxPQUFPO2dCQUFFQztZQUFVO1lBQ25CQyxhQUFhO2dCQUNaQyxPQUFPaEIsS0FBS2lCLGNBQWMsQ0FBQ0MsR0FBRztZQUMvQjtZQUNBQyxRQUFRWDtZQUNSLEdBQUcsSUFBSSxDQUFDTCxPQUFPO1FBQ2hCO1FBQ0EsSUFBSSxDQUFDRCxLQUFLLEdBQUdGLEtBQUtXLGFBQWEsSUFBSSxDQUFDUCxNQUFNO0lBQzNDO0lBRU9nQixVQUNOQyxJQUFZLEVBQ1k7UUFDeEIsTUFBTUMsU0FBU0MsUUFBdUIsSUFBSSxDQUFDckIsS0FBSyxDQUFDc0IsS0FBSyxDQUFDO1lBQUVIO1FBQUs7UUFDOUQsT0FBT0M7SUFDUjtJQUVPRyxNQUFNQyxFQUFlLEVBQVE7UUFDbkMsSUFBSSxDQUFDeEIsS0FBSyxDQUFDdUIsS0FBSyxDQUFDQztJQUNsQjtBQUNEO0FBRUEsU0FBU1osVUFBNkJhLElBQXVCLEVBQUVDLE1BQWE7SUFDM0UsSUFBSUMsVUFBVUYsS0FBS0csRUFBRSxDQUFDO0lBQ3RCLE1BQU1DLE9BQU9KLEtBQUtHLEVBQUUsQ0FBQztJQUVyQixJQUFJQyxnQkFBZ0JDLE9BQU87UUFDMUJILFVBQVU7WUFBRUksS0FBS0o7WUFBUyxHQUFHO2dCQUFFYixPQUFPZTtZQUFLLENBQUM7UUFBQztJQUM5QyxPQUFPLElBQUksT0FBT0EsU0FBUyxVQUFVO1FBQ3BDRixVQUFVO1lBQUVJLEtBQUtKO1lBQVMsR0FBR0UsSUFBSTtRQUFDO0lBQ25DLE9BQU87UUFDTkYsVUFBVTtZQUFFSSxLQUFLSjtZQUFTRTtRQUFLO0lBQ2hDO0lBRUFILE9BQU9NLElBQUksQ0FBQyxJQUFJLEVBQUVMO0FBQ25CO0FBRUEsU0FBU04sUUFDUkQsTUFBbUI7SUFFbkIsT0FBT2EsT0FBT0MsTUFBTSxDQUEwQmQsUUFBUTtRQUNyRCxJQUFJZSxnQkFBZTtZQUNsQixPQUFPZixPQUFPVixLQUFLO1FBQ3BCO1FBQ0EsSUFBSTBCLGFBQVk7WUFDZixPQUFPaEIsT0FBT2lCLE1BQU0sQ0FBQ0MsTUFBTTtRQUM1QjtJQUNEO0FBQ0QifQ==
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,57 @@
1
+ import { Environments } from "@decohere/nexus/system";
2
+ const DEFAULT_ROLL_SIZE = "10m";
3
+ const DEFAULT_ROLL_FREQUENCY = "daily";
4
+ const DEFAULT_ROLL_KEEP = 14;
5
+ function currentEnvironment() {
6
+ return process.env.NODE_ENV === Environments.production ? Environments.production : Environments.development;
7
+ }
8
+ function isEnabled(when, environment) {
9
+ return (when ?? "development") === "always" || environment === Environments.development;
10
+ }
11
+ function prettyTarget(options) {
12
+ return {
13
+ target: "pino-pretty",
14
+ options: {
15
+ colorize: options.colorize ?? true
16
+ }
17
+ };
18
+ }
19
+ function rollTarget(options) {
20
+ return {
21
+ target: "pino-roll",
22
+ options: {
23
+ file: options.file,
24
+ mkdir: options.mkdir ?? true,
25
+ size: options.size ?? DEFAULT_ROLL_SIZE,
26
+ frequency: options.frequency ?? DEFAULT_ROLL_FREQUENCY,
27
+ limit: {
28
+ count: options.keep ?? DEFAULT_ROLL_KEEP
29
+ },
30
+ symlink: options.symlink ?? false
31
+ }
32
+ };
33
+ }
34
+ function transport(plan, environment = currentEnvironment()) {
35
+ const targets = [];
36
+ if (plan.pretty && isEnabled(plan.pretty.when, environment)) {
37
+ targets.push(prettyTarget(plan.pretty));
38
+ }
39
+ if (plan.roll && isEnabled(plan.roll.when, environment)) {
40
+ targets.push(rollTarget(plan.roll));
41
+ }
42
+ if (targets.length === 0) {
43
+ return undefined;
44
+ }
45
+ if (targets.length === 1) {
46
+ return targets[0];
47
+ }
48
+ return {
49
+ targets
50
+ };
51
+ }
52
+ export const pinoRecipe = {
53
+ transport,
54
+ currentEnvironment
55
+ };
56
+
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvcGluby5yZWNpcGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBFbnZpcm9ubWVudCwgRW52aXJvbm1lbnRzIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9zeXN0ZW1cIjtcbmltcG9ydCB0eXBlIHsgVHJhbnNwb3J0TXVsdGlPcHRpb25zLCBUcmFuc3BvcnRTaW5nbGVPcHRpb25zIH0gZnJvbSBcInBpbm9cIjtcblxuLyoqIFByZXR0eSBhbmQgcm9sbCBhcmUgbG9jYWwtZGV2IGNvbnZlbmllbmNlcy4gUHJvZHVjdGlvbiBzaGlwcyBKU09OIG9uIHN0ZG91dC4gKi9cbmV4cG9ydCB0eXBlIFBpbm9XaGVuID0gXCJkZXZlbG9wbWVudFwiIHwgXCJhbHdheXNcIjtcblxuZXhwb3J0IHR5cGUgUGlub1ByZXR0eVJlY2lwZU9wdGlvbnMgPSB7XG5cdGNvbG9yaXplPzogYm9vbGVhbjtcblx0bG9nTGV2ZWw/OiBzdHJpbmc7XG5cdHdoZW4/OiBQaW5vV2hlbjtcbn07XG5cbmV4cG9ydCB0eXBlIFBpbm9Sb2xsUmVjaXBlT3B0aW9ucyA9IHtcblx0ZmlsZTogc3RyaW5nO1xuXHRzaXplPzogc3RyaW5nO1xuXHRmcmVxdWVuY3k/OiBzdHJpbmcgfCBudW1iZXI7XG5cdGtlZXA/OiBudW1iZXI7XG5cdG1rZGlyPzogYm9vbGVhbjtcblx0c3ltbGluaz86IGJvb2xlYW47XG5cdGxvZ0xldmVsPzogc3RyaW5nO1xuXHR3aGVuPzogUGlub1doZW47XG59O1xuXG5leHBvcnQgdHlwZSBQaW5vUmVjaXBlUGxhbiA9IHtcblx0cHJldHR5PzogUGlub1ByZXR0eVJlY2lwZU9wdGlvbnM7XG5cdHJvbGw/OiBQaW5vUm9sbFJlY2lwZU9wdGlvbnM7XG5cdGxvZ0xldmVsPzogc3RyaW5nO1xufTtcblxuY29uc3QgREVGQVVMVF9ST0xMX1NJWkUgPSBcIjEwbVwiO1xuY29uc3QgREVGQVVMVF9ST0xMX0ZSRVFVRU5DWSA9IFwiZGFpbHlcIjtcbmNvbnN0IERFRkFVTFRfUk9MTF9LRUVQID0gMTQ7XG5cbmZ1bmN0aW9uIGN1cnJlbnRFbnZpcm9ubWVudCgpOiBFbnZpcm9ubWVudCB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gRW52aXJvbm1lbnRzLnByb2R1Y3Rpb25cblx0XHQ/IEVudmlyb25tZW50cy5wcm9kdWN0aW9uXG5cdFx0OiBFbnZpcm9ubWVudHMuZGV2ZWxvcG1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzRW5hYmxlZCh3aGVuOiBQaW5vV2hlbiB8IHVuZGVmaW5lZCwgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50KTogYm9vbGVhbiB7XG5cdHJldHVybiAod2hlbiA/PyBcImRldmVsb3BtZW50XCIpID09PSBcImFsd2F5c1wiIHx8IGVudmlyb25tZW50ID09PSBFbnZpcm9ubWVudHMuZGV2ZWxvcG1lbnQ7XG59XG5cbmZ1bmN0aW9uIHByZXR0eVRhcmdldChvcHRpb25zOiBQaW5vUHJldHR5UmVjaXBlT3B0aW9ucyk6IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnMge1xuXHRyZXR1cm4ge1xuXHRcdHRhcmdldDogXCJwaW5vLXByZXR0eVwiLFxuXHRcdG9wdGlvbnM6IHsgY29sb3JpemU6IG9wdGlvbnMuY29sb3JpemUgPz8gdHJ1ZSB9LFxuXHR9O1xufVxuXG5mdW5jdGlvbiByb2xsVGFyZ2V0KG9wdGlvbnM6IFBpbm9Sb2xsUmVjaXBlT3B0aW9ucyk6IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnMge1xuXHRyZXR1cm4ge1xuXHRcdHRhcmdldDogXCJwaW5vLXJvbGxcIixcblx0XHRvcHRpb25zOiB7XG5cdFx0XHRmaWxlOiBvcHRpb25zLmZpbGUsXG5cdFx0XHRta2Rpcjogb3B0aW9ucy5ta2RpciA/PyB0cnVlLFxuXHRcdFx0c2l6ZTogb3B0aW9ucy5zaXplID8/IERFRkFVTFRfUk9MTF9TSVpFLFxuXHRcdFx0ZnJlcXVlbmN5OiBvcHRpb25zLmZyZXF1ZW5jeSA/PyBERUZBVUxUX1JPTExfRlJFUVVFTkNZLFxuXHRcdFx0bGltaXQ6IHsgY291bnQ6IG9wdGlvbnMua2VlcCA/PyBERUZBVUxUX1JPTExfS0VFUCB9LFxuXHRcdFx0c3ltbGluazogb3B0aW9ucy5zeW1saW5rID8/IGZhbHNlLFxuXHRcdH0sXG5cdH07XG59XG5cbmZ1bmN0aW9uIHRyYW5zcG9ydChcblx0cGxhbjogUGlub1JlY2lwZVBsYW4sXG5cdGVudmlyb25tZW50OiBFbnZpcm9ubWVudCA9IGN1cnJlbnRFbnZpcm9ubWVudCgpLFxuKTogVHJhbnNwb3J0U2luZ2xlT3B0aW9ucyB8IFRyYW5zcG9ydE11bHRpT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhcmdldHM6IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnNbXSA9IFtdO1xuXHRpZiAocGxhbi5wcmV0dHkgJiYgaXNFbmFibGVkKHBsYW4ucHJldHR5LndoZW4sIGVudmlyb25tZW50KSkge1xuXHRcdHRhcmdldHMucHVzaChwcmV0dHlUYXJnZXQocGxhbi5wcmV0dHkpKTtcblx0fVxuXHRpZiAocGxhbi5yb2xsICYmIGlzRW5hYmxlZChwbGFuLnJvbGwud2hlbiwgZW52aXJvbm1lbnQpKSB7XG5cdFx0dGFyZ2V0cy5wdXNoKHJvbGxUYXJnZXQocGxhbi5yb2xsKSk7XG5cdH1cblx0aWYgKHRhcmdldHMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRpZiAodGFyZ2V0cy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gdGFyZ2V0c1swXTtcblx0fVxuXHRyZXR1cm4geyB0YXJnZXRzIH07XG59XG5cbmV4cG9ydCBjb25zdCBwaW5vUmVjaXBlID0geyB0cmFuc3BvcnQsIGN1cnJlbnRFbnZpcm9ubWVudCB9O1xuIl0sIm5hbWVzIjpbIkVudmlyb25tZW50cyIsIkRFRkFVTFRfUk9MTF9TSVpFIiwiREVGQVVMVF9ST0xMX0ZSRVFVRU5DWSIsIkRFRkFVTFRfUk9MTF9LRUVQIiwiY3VycmVudEVudmlyb25tZW50IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicHJvZHVjdGlvbiIsImRldmVsb3BtZW50IiwiaXNFbmFibGVkIiwid2hlbiIsImVudmlyb25tZW50IiwicHJldHR5VGFyZ2V0Iiwib3B0aW9ucyIsInRhcmdldCIsImNvbG9yaXplIiwicm9sbFRhcmdldCIsImZpbGUiLCJta2RpciIsInNpemUiLCJmcmVxdWVuY3kiLCJsaW1pdCIsImNvdW50Iiwia2VlcCIsInN5bWxpbmsiLCJ0cmFuc3BvcnQiLCJwbGFuIiwidGFyZ2V0cyIsInByZXR0eSIsInB1c2giLCJyb2xsIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwicGlub1JlY2lwZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBMkJBLFlBQVksUUFBUSx5QkFBeUI7QUE2QnhFLE1BQU1DLG9CQUFvQjtBQUMxQixNQUFNQyx5QkFBeUI7QUFDL0IsTUFBTUMsb0JBQW9CO0FBRTFCLFNBQVNDO0lBQ1IsT0FBT0MsUUFBUUMsR0FBRyxDQUFDQyxRQUFRLEtBQUtQLGFBQWFRLFVBQVUsR0FDcERSLGFBQWFRLFVBQVUsR0FDdkJSLGFBQWFTLFdBQVc7QUFDNUI7QUFFQSxTQUFTQyxVQUFVQyxJQUEwQixFQUFFQyxXQUF3QjtJQUN0RSxPQUFPLEFBQUNELENBQUFBLFFBQVEsYUFBWSxNQUFPLFlBQVlDLGdCQUFnQlosYUFBYVMsV0FBVztBQUN4RjtBQUVBLFNBQVNJLGFBQWFDLE9BQWdDO0lBQ3JELE9BQU87UUFDTkMsUUFBUTtRQUNSRCxTQUFTO1lBQUVFLFVBQVVGLFFBQVFFLFFBQVEsSUFBSTtRQUFLO0lBQy9DO0FBQ0Q7QUFFQSxTQUFTQyxXQUFXSCxPQUE4QjtJQUNqRCxPQUFPO1FBQ05DLFFBQVE7UUFDUkQsU0FBUztZQUNSSSxNQUFNSixRQUFRSSxJQUFJO1lBQ2xCQyxPQUFPTCxRQUFRSyxLQUFLLElBQUk7WUFDeEJDLE1BQU1OLFFBQVFNLElBQUksSUFBSW5CO1lBQ3RCb0IsV0FBV1AsUUFBUU8sU0FBUyxJQUFJbkI7WUFDaENvQixPQUFPO2dCQUFFQyxPQUFPVCxRQUFRVSxJQUFJLElBQUlyQjtZQUFrQjtZQUNsRHNCLFNBQVNYLFFBQVFXLE9BQU8sSUFBSTtRQUM3QjtJQUNEO0FBQ0Q7QUFFQSxTQUFTQyxVQUNSQyxJQUFvQixFQUNwQmYsY0FBMkJSLG9CQUFvQjtJQUUvQyxNQUFNd0IsVUFBb0MsRUFBRTtJQUM1QyxJQUFJRCxLQUFLRSxNQUFNLElBQUluQixVQUFVaUIsS0FBS0UsTUFBTSxDQUFDbEIsSUFBSSxFQUFFQyxjQUFjO1FBQzVEZ0IsUUFBUUUsSUFBSSxDQUFDakIsYUFBYWMsS0FBS0UsTUFBTTtJQUN0QztJQUNBLElBQUlGLEtBQUtJLElBQUksSUFBSXJCLFVBQVVpQixLQUFLSSxJQUFJLENBQUNwQixJQUFJLEVBQUVDLGNBQWM7UUFDeERnQixRQUFRRSxJQUFJLENBQUNiLFdBQVdVLEtBQUtJLElBQUk7SUFDbEM7SUFDQSxJQUFJSCxRQUFRSSxNQUFNLEtBQUssR0FBRztRQUN6QixPQUFPQztJQUNSO0lBQ0EsSUFBSUwsUUFBUUksTUFBTSxLQUFLLEdBQUc7UUFDekIsT0FBT0osT0FBTyxDQUFDLEVBQUU7SUFDbEI7SUFDQSxPQUFPO1FBQUVBO0lBQVE7QUFDbEI7QUFFQSxPQUFPLE1BQU1NLGFBQWE7SUFBRVI7SUFBV3RCO0FBQW1CLEVBQUUifQ==
@@ -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=
@@ -9,31 +9,40 @@ function _ts_metadata(k, v) {
9
9
  }
10
10
  import { extension } from "@decohere/nexus/extensibility";
11
11
  import { DefaultEnvironment } from "@decohere/nexus/system";
12
- import { LoggingConfigurationError, scribe } from "@decohere/scribe";
12
+ import { DefaultLogLevel, LoggingConfigurationError, scribe } from "@decohere/scribe";
13
+ import pino from "pino";
13
14
  import { PinoAdapter } from "./pino.adapater.js";
15
+ import { pinoRecipe } from "./pino.recipe.js";
16
+ import { guardTransport } from "./pino.transport-guard.js";
17
+ export { guardTransport } from "./pino.transport-guard.js";
14
18
  export class PinoExtensions {
15
19
  static withPino(factory, config, logLevel) {
16
20
  return configureScribe(factory, {
17
21
  logLevel
18
22
  }, config);
19
23
  }
20
- static withPinoPretty(factory, logLevel) {
21
- return PinoExtensions.withPino(factory, {
22
- transports: {
23
- target: "pino-pretty",
24
- options: {
25
- colorize: true
26
- }
27
- }
28
- }, logLevel);
24
+ static withPinoPretty(factory, logLevelOrOptions) {
25
+ const pretty = parsePrettyArg(logLevelOrOptions);
26
+ return attachRecipe(factory, {
27
+ pretty,
28
+ logLevel: pretty.logLevel
29
+ });
30
+ }
31
+ static withPinoRoll(factory, options) {
32
+ return attachRecipe(factory, {
33
+ roll: options,
34
+ logLevel: options.logLevel
35
+ });
29
36
  }
30
37
  static withPinoCustom(factory, options) {
31
- const { scribe, transports } = options;
38
+ const { scribe, transports } = options ?? {};
32
39
  return configureScribe(factory, scribe, transports);
33
40
  }
34
41
  }
35
42
  _ts_decorate([
36
- extension(scribe),
43
+ extension(scribe, {
44
+ static: true
45
+ }),
37
46
  _ts_metadata("design:type", Function),
38
47
  _ts_metadata("design:paramtypes", [
39
48
  typeof scribe === "undefined" ? Object : scribe,
@@ -43,7 +52,9 @@ _ts_decorate([
43
52
  _ts_metadata("design:returntype", void 0)
44
53
  ], PinoExtensions, "withPino", null);
45
54
  _ts_decorate([
46
- extension(scribe),
55
+ extension(scribe, {
56
+ static: true
57
+ }),
47
58
  _ts_metadata("design:type", Function),
48
59
  _ts_metadata("design:paramtypes", [
49
60
  typeof scribe === "undefined" ? Object : scribe,
@@ -52,7 +63,20 @@ _ts_decorate([
52
63
  _ts_metadata("design:returntype", void 0)
53
64
  ], PinoExtensions, "withPinoPretty", null);
54
65
  _ts_decorate([
55
- extension(scribe),
66
+ extension(scribe, {
67
+ static: true
68
+ }),
69
+ _ts_metadata("design:type", Function),
70
+ _ts_metadata("design:paramtypes", [
71
+ typeof scribe === "undefined" ? Object : scribe,
72
+ typeof PinoRollRecipeOptions === "undefined" ? Object : PinoRollRecipeOptions
73
+ ]),
74
+ _ts_metadata("design:returntype", void 0)
75
+ ], PinoExtensions, "withPinoRoll", null);
76
+ _ts_decorate([
77
+ extension(scribe, {
78
+ static: true
79
+ }),
56
80
  _ts_metadata("design:type", Function),
57
81
  _ts_metadata("design:paramtypes", [
58
82
  typeof scribe === "undefined" ? Object : scribe,
@@ -60,23 +84,88 @@ _ts_decorate([
60
84
  ]),
61
85
  _ts_metadata("design:returntype", void 0)
62
86
  ], PinoExtensions, "withPinoCustom", null);
87
+ function parsePrettyArg(logLevelOrOptions) {
88
+ if (logLevelOrOptions == null) {
89
+ return {};
90
+ }
91
+ if (typeof logLevelOrOptions === "string") {
92
+ return {
93
+ logLevel: logLevelOrOptions
94
+ };
95
+ }
96
+ return logLevelOrOptions;
97
+ }
98
+ function attachRecipe(factory, plan) {
99
+ const loggerFactory = applyRecipe(factory, plan);
100
+ const chain = {
101
+ withPinoPretty (logLevelOrOptions) {
102
+ const pretty = parsePrettyArg(logLevelOrOptions);
103
+ return attachRecipe(factory, {
104
+ ...plan,
105
+ pretty: {
106
+ ...plan.pretty,
107
+ ...pretty
108
+ },
109
+ logLevel: pretty.logLevel ?? plan.logLevel
110
+ });
111
+ },
112
+ withPinoRoll (options) {
113
+ return attachRecipe(factory, {
114
+ ...plan,
115
+ roll: options,
116
+ logLevel: options.logLevel ?? plan.logLevel
117
+ });
118
+ }
119
+ };
120
+ return Object.assign(loggerFactory, chain, {
121
+ and: chain
122
+ });
123
+ }
124
+ /**
125
+ * Guard a worker transport so failures (roll EEXIST, worker exit) neither
126
+ * crash the process nor spam stderr on every subsequent log write.
127
+ */ function createSafeTransport(options) {
128
+ return guardTransport(pino.transport(options));
129
+ }
130
+ function adapterForTransport(transport) {
131
+ if (transport == null) {
132
+ return new PinoAdapter({});
133
+ }
134
+ return new PinoAdapter({}, createSafeTransport(transport));
135
+ }
136
+ function applyRecipe(factory, plan) {
137
+ const adapter = adapterForTransport(pinoRecipe.transport(plan));
138
+ return factory.configure({
139
+ options: {
140
+ logLevel: plan.logLevel ?? DefaultLogLevel
141
+ },
142
+ adapter
143
+ });
144
+ }
63
145
  function configureScribe(factory, options, config) {
64
146
  const environment = process.env.NODE_ENV ?? DefaultEnvironment;
65
- const configs = Array.isArray(config) ? config : [
147
+ const configs = (Array.isArray(config) ? config : config != null ? [
66
148
  config
67
- ];
68
- const transports = configs.filter((config)=>config.environment && config.environment === environment || true);
69
- if (transports.length > 1) {
149
+ ] : []).filter((item)=>item.environment == null || item.environment === environment);
150
+ if (configs.length > 1) {
70
151
  throw new LoggingConfigurationError(`There should only be one configuration per environment for logging`);
71
152
  }
72
- const transport = transports.at(0)?.transports;
73
- const adapter = new PinoAdapter({
74
- transport
75
- });
153
+ const adapter = adapterForTransport(configs.at(0)?.transports);
76
154
  return factory.configure({
77
- options,
155
+ options: {
156
+ ...options,
157
+ logLevel: options?.logLevel ?? DefaultLogLevel
158
+ },
78
159
  adapter
79
160
  });
80
161
  }
162
+ /** @deprecated Use {@link guardTransport} — kept for callers/tests from the silence-only era. */ function silenceErrors(transport) {
163
+ return guardTransport(transport);
164
+ }
165
+ export const pinoTransport = {
166
+ createSafeTransport,
167
+ guardTransport,
168
+ silenceErrors
169
+ };
81
170
 
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUtcGluby9zcmMvc2NyaWJlLXBpbm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5zaW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9leHRlbnNpYmlsaXR5XCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnQsIHR5cGUgRW52aXJvbm1lbnQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL3N5c3RlbVwiO1xuaW1wb3J0IHtcblx0dHlwZSBEZWZhdWx0TGV2ZWxzLFxuXHR0eXBlIExvZ2dlcixcblx0TG9nZ2luZ0NvbmZpZ3VyYXRpb25FcnJvcixcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxuXHRzY3JpYmUsXG59IGZyb20gXCJAZGVjb2hlcmUvc2NyaWJlXCI7XG5pbXBvcnQgdHlwZSB7XG5cdFRyYW5zcG9ydE11bHRpT3B0aW9ucyxcblx0VHJhbnNwb3J0UGlwZWxpbmVPcHRpb25zLFxuXHRUcmFuc3BvcnRTaW5nbGVPcHRpb25zLFxufSBmcm9tIFwicGlub1wiO1xuXG5pbXBvcnQgeyBQaW5vQWRhcHRlciB9IGZyb20gXCIuL3Bpbm8uYWRhcGF0ZXIuanNcIjtcblxudHlwZSBUcmFuc3BvcnRDb25maWcgPSB7XG5cdGVudmlyb25tZW50PzogRW52aXJvbm1lbnQ7XG5cdHRyYW5zcG9ydHM6IFRyYW5zcG9ydFNpbmdsZU9wdGlvbnMgfCBUcmFuc3BvcnRNdWx0aU9wdGlvbnMgfCBUcmFuc3BvcnRQaXBlbGluZU9wdGlvbnM7XG59O1xuXG50eXBlIEN1c3RvbUxldmVsT3B0aW9uczxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPiA9IHtcblx0c2NyaWJlPzogU2NyaWJlT3B0aW9uczxULCBDdXN0b21Pbmx5Pjtcblx0dHJhbnNwb3J0cz86IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdO1xufTtcblxuZGVjbGFyZSBtb2R1bGUgXCJAZGVjb2hlcmUvc2NyaWJlXCIge1xuXHRpbnRlcmZhY2Ugc2NyaWJlIHtcblx0XHR3aXRoUGlubyhcblx0XHRcdHRyYW5zcG9ydHM6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuXHRcdFx0bG9nbGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nLFxuXHRcdCk6IChuYW1lPzogc3RyaW5nKSA9PiBMb2dnZXI7XG5cdFx0d2l0aFBpbm9QcmV0dHkobG9nTGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nKTogKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjtcblx0XHR3aXRoUGlub0N1c3RvbTxUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsIEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlID0gdW5kZWZpbmVkPihcblx0XHRcdG9wdGlvbnM/OiBDdXN0b21MZXZlbE9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdFx0KTogKG5hbWU/OiBzdHJpbmcpID0+IExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgUGlub0V4dGVuc2lvbnMge1xuXHRAZXh0ZW5zaW9uKHNjcmliZSlcblx0cHVibGljIHN0YXRpYyB3aXRoUGlubyhcblx0XHRmYWN0b3J5OiBzY3JpYmUsXG5cdFx0Y29uZmlnOiBUcmFuc3BvcnRDb25maWcgfCBUcmFuc3BvcnRDb25maWdbXSxcblx0XHRsb2dMZXZlbD86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcsXG5cdCkge1xuXHRcdHJldHVybiBjb25maWd1cmVTY3JpYmUoZmFjdG9yeSwgeyBsb2dMZXZlbCB9LCBjb25maWcpO1xuXHR9XG5cblx0QGV4dGVuc2lvbihzY3JpYmUpXG5cdHB1YmxpYyBzdGF0aWMgd2l0aFBpbm9QcmV0dHkoZmFjdG9yeTogc2NyaWJlLCBsb2dMZXZlbD86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gUGlub0V4dGVuc2lvbnMud2l0aFBpbm8oXG5cdFx0XHRmYWN0b3J5LFxuXHRcdFx0eyB0cmFuc3BvcnRzOiB7IHRhcmdldDogXCJwaW5vLXByZXR0eVwiLCBvcHRpb25zOiB7IGNvbG9yaXplOiB0cnVlIH0gfSB9LFxuXHRcdFx0bG9nTGV2ZWwsXG5cdFx0KTtcblx0fVxuXG5cdEBleHRlbnNpb24oc2NyaWJlKVxuXHRwdWJsaWMgc3RhdGljIHdpdGhQaW5vQ3VzdG9tPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgPSB1bmRlZmluZWQ+KFxuXHRcdGZhY3Rvcnk6IHNjcmliZSxcblx0XHRvcHRpb25zPzogQ3VzdG9tTGV2ZWxPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHQpIHtcblx0XHRjb25zdCB7IHNjcmliZSwgdHJhbnNwb3J0cyB9ID0gb3B0aW9ucztcblx0XHRyZXR1cm4gY29uZmlndXJlU2NyaWJlKGZhY3RvcnksIHNjcmliZSwgdHJhbnNwb3J0cyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY29uZmlndXJlU2NyaWJlPFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgQ3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlPihcblx0ZmFjdG9yeTogc2NyaWJlLFxuXHRvcHRpb25zOiBTY3JpYmVPcHRpb25zPFQsIEN1c3RvbU9ubHk+LFxuXHRjb25maWc6IFRyYW5zcG9ydENvbmZpZyB8IFRyYW5zcG9ydENvbmZpZ1tdLFxuKSB7XG5cdGNvbnN0IGVudmlyb25tZW50ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gRGVmYXVsdEVudmlyb25tZW50O1xuXHRjb25zdCBjb25maWdzID0gQXJyYXkuaXNBcnJheShjb25maWcpID8gY29uZmlnIDogW2NvbmZpZ107XG5cdGNvbnN0IHRyYW5zcG9ydHMgPSBjb25maWdzLmZpbHRlcihcblx0XHQoY29uZmlnKSA9PiAoY29uZmlnLmVudmlyb25tZW50ICYmIGNvbmZpZy5lbnZpcm9ubWVudCA9PT0gZW52aXJvbm1lbnQpIHx8IHRydWUsXG5cdCk7XG5cblx0aWYgKHRyYW5zcG9ydHMubGVuZ3RoID4gMSkge1xuXHRcdHRocm93IG5ldyBMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yKFxuXHRcdFx0YFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBjb25maWd1cmF0aW9uIHBlciBlbnZpcm9ubWVudCBmb3IgbG9nZ2luZ2AsXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuYXQoMCk/LnRyYW5zcG9ydHM7XG5cdGNvbnN0IGFkYXB0ZXIgPSBuZXcgUGlub0FkYXB0ZXIoeyB0cmFuc3BvcnQgfSk7XG5cdHJldHVybiBmYWN0b3J5LmNvbmZpZ3VyZSh7XG5cdFx0b3B0aW9ucyxcblx0XHRhZGFwdGVyLFxuXHR9KTtcbn1cbiJdLCJuYW1lcyI6WyJleHRlbnNpb24iLCJEZWZhdWx0RW52aXJvbm1lbnQiLCJMb2dnaW5nQ29uZmlndXJhdGlvbkVycm9yIiwic2NyaWJlIiwiUGlub0FkYXB0ZXIiLCJQaW5vRXh0ZW5zaW9ucyIsIndpdGhQaW5vIiwiZmFjdG9yeSIsImNvbmZpZyIsImxvZ0xldmVsIiwiY29uZmlndXJlU2NyaWJlIiwid2l0aFBpbm9QcmV0dHkiLCJ0cmFuc3BvcnRzIiwidGFyZ2V0Iiwib3B0aW9ucyIsImNvbG9yaXplIiwid2l0aFBpbm9DdXN0b20iLCJlbnZpcm9ubWVudCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImNvbmZpZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJsZW5ndGgiLCJ0cmFuc3BvcnQiLCJhdCIsImFkYXB0ZXIiLCJjb25maWd1cmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLFNBQVNBLFNBQVMsUUFBUSxnQ0FBZ0M7QUFDMUQsU0FBU0Msa0JBQWtCLFFBQTBCLHlCQUF5QjtBQUM5RSxTQUdDQyx5QkFBeUIsRUFFekJDLE1BQU0sUUFDQSxtQkFBbUI7QUFPMUIsU0FBU0MsV0FBVyxRQUFRLHFCQUFxQjtBQXlCakQsT0FBTyxNQUFNQztJQUNaLE9BQ2NDLFNBQ2JDLE9BQWUsRUFDZkMsTUFBMkMsRUFDM0NDLFFBQWlDLEVBQ2hDO1FBQ0QsT0FBT0MsZ0JBQWdCSCxTQUFTO1lBQUVFO1FBQVMsR0FBR0Q7SUFDL0M7SUFFQSxPQUNjRyxlQUFlSixPQUFlLEVBQUVFLFFBQWlDLEVBQUU7UUFDaEYsT0FBT0osZUFBZUMsUUFBUSxDQUM3QkMsU0FDQTtZQUFFSyxZQUFZO2dCQUFFQyxRQUFRO2dCQUFlQyxTQUFTO29CQUFFQyxVQUFVO2dCQUFLO1lBQUU7UUFBRSxHQUNyRU47SUFFRjtJQUVBLE9BQ2NPLGVBQ2JULE9BQWUsRUFDZk8sT0FBMkMsRUFDMUM7UUFDRCxNQUFNLEVBQUVYLE1BQU0sRUFBRVMsVUFBVSxFQUFFLEdBQUdFO1FBQy9CLE9BQU9KLGdCQUFnQkgsU0FBU0osUUFBUVM7SUFDekM7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxTQUFTRixnQkFDUkgsT0FBZSxFQUNmTyxPQUFxQyxFQUNyQ04sTUFBMkM7SUFFM0MsTUFBTVMsY0FBY0MsUUFBUUMsR0FBRyxDQUFDQyxRQUFRLElBQUluQjtJQUM1QyxNQUFNb0IsVUFBVUMsTUFBTUMsT0FBTyxDQUFDZixVQUFVQSxTQUFTO1FBQUNBO0tBQU87SUFDekQsTUFBTUksYUFBYVMsUUFBUUcsTUFBTSxDQUNoQyxDQUFDaEIsU0FBVyxBQUFDQSxPQUFPUyxXQUFXLElBQUlULE9BQU9TLFdBQVcsS0FBS0EsZUFBZ0I7SUFHM0UsSUFBSUwsV0FBV2EsTUFBTSxHQUFHLEdBQUc7UUFDMUIsTUFBTSxJQUFJdkIsMEJBQ1QsQ0FBQyxrRUFBa0UsQ0FBQztJQUV0RTtJQUVBLE1BQU13QixZQUFZZCxXQUFXZSxFQUFFLENBQUMsSUFBSWY7SUFDcEMsTUFBTWdCLFVBQVUsSUFBSXhCLFlBQVk7UUFBRXNCO0lBQVU7SUFDNUMsT0FBT25CLFFBQVFzQixTQUFTLENBQUM7UUFDeEJmO1FBQ0FjO0lBQ0Q7QUFDRCJ9
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.7",
3
+ "version": "0.0.1-dev.70",
4
4
  "description": "Pino adapter for @decohere/scribe",
5
5
  "keywords": [
6
6
  "typescript",
@@ -23,9 +23,21 @@
23
23
  "test": "echo \"Error: no test specified\" && exit 1"
24
24
  },
25
25
  "dependencies": {
26
- "@decohere/nexus": "0.0.1-dev.7",
27
- "@decohere/scribe": "0.0.1-dev.7",
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
- "devDependencies": {}
30
+ "devDependencies": {},
31
+ "peerDependencies": {
32
+ "pino-pretty": "^13.0.0",
33
+ "pino-roll": "^4.0.0"
34
+ },
35
+ "peerDependenciesMeta": {
36
+ "pino-pretty": {
37
+ "optional": true
38
+ },
39
+ "pino-roll": {
40
+ "optional": true
41
+ }
42
+ }
31
43
  }
@@ -1,2 +1,3 @@
1
1
  export * from "./pino.adapater.js";
2
+ export * from "./pino.recipe.js";
2
3
  export * from "./scribe-pino.js";
@@ -8,8 +8,16 @@ export declare class PinoAdapter extends LogAdapter {
8
8
  private _pino;
9
9
  private readonly options;
10
10
  private readonly stream;
11
+ private disposed;
12
+ private retired;
11
13
  constructor(options: pino.LoggerOptions, stream?: pino.DestinationStream);
12
14
  configure<T extends string = never, CustomOnly extends true | false = false>(scribeOptions: ScribeOptions<T, CustomOnly>): void;
13
15
  getLogger<T extends string = never, CustomOnly extends true | false = false>(name: string): Logger<T, CustomOnly>;
14
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;
22
+ [Symbol.asyncDispose](): Promise<void>;
15
23
  }
@@ -0,0 +1,31 @@
1
+ import { type Environment } from "@decohere/nexus/system";
2
+ import type { TransportMultiOptions, TransportSingleOptions } from "pino";
3
+ /** Pretty and roll are local-dev conveniences. Production ships JSON on stdout. */
4
+ export type PinoWhen = "development" | "always";
5
+ export type PinoPrettyRecipeOptions = {
6
+ colorize?: boolean;
7
+ logLevel?: string;
8
+ when?: PinoWhen;
9
+ };
10
+ export type PinoRollRecipeOptions = {
11
+ file: string;
12
+ size?: string;
13
+ frequency?: string | number;
14
+ keep?: number;
15
+ mkdir?: boolean;
16
+ symlink?: boolean;
17
+ logLevel?: string;
18
+ when?: PinoWhen;
19
+ };
20
+ export type PinoRecipePlan = {
21
+ pretty?: PinoPrettyRecipeOptions;
22
+ roll?: PinoRollRecipeOptions;
23
+ logLevel?: string;
24
+ };
25
+ declare function currentEnvironment(): Environment;
26
+ declare function transport(plan: PinoRecipePlan, environment?: Environment): TransportSingleOptions | TransportMultiOptions | undefined;
27
+ export declare const pinoRecipe: {
28
+ transport: typeof transport;
29
+ currentEnvironment: typeof currentEnvironment;
30
+ };
31
+ export {};
@@ -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;
@@ -1,24 +1,69 @@
1
1
  import { type Environment } from "@decohere/nexus/system";
2
2
  import { type DefaultLevels, type Logger, type ScribeOptions, scribe } from "@decohere/scribe";
3
- import type { TransportMultiOptions, TransportPipelineOptions, TransportSingleOptions } from "pino";
3
+ import { type DestinationStream, type TransportMultiOptions, type TransportPipelineOptions, type TransportSingleOptions } from "pino";
4
+ import { type PinoPrettyRecipeOptions, type PinoRollRecipeOptions } from "./pino.recipe.js";
5
+ import { type GuardedTransport, guardTransport } from "./pino.transport-guard.js";
6
+ export type { GuardedTransport } from "./pino.transport-guard.js";
7
+ export { guardTransport } from "./pino.transport-guard.js";
8
+ type TransportOptions = TransportSingleOptions | TransportMultiOptions | TransportPipelineOptions;
4
9
  type TransportConfig = {
5
10
  environment?: Environment;
6
- transports: TransportSingleOptions | TransportMultiOptions | TransportPipelineOptions;
11
+ transports: TransportOptions;
7
12
  };
8
13
  type CustomLevelOptions<T extends string = never, CustomOnly extends true = undefined> = {
9
14
  scribe?: ScribeOptions<T, CustomOnly>;
10
15
  transports?: TransportConfig | TransportConfig[];
11
16
  };
17
+ export type PinoLoggerFactory = (name?: string) => Logger;
18
+ export type PinoRecipeChain = {
19
+ withPinoPretty(logLevelOrOptions?: DefaultLevels | string | PinoPrettyRecipeOptions): PinoRecipe;
20
+ withPinoRoll(options: PinoRollRecipeOptions): PinoRecipe;
21
+ };
22
+ export type PinoRecipe = PinoLoggerFactory & PinoRecipeChain & {
23
+ readonly and: PinoRecipeChain;
24
+ };
12
25
  declare module "@decohere/scribe" {
13
26
  interface scribe {
14
- withPino(transports: TransportConfig | TransportConfig[], loglevel?: DefaultLevels | string): (name?: string) => Logger;
15
- withPinoPretty(logLevel?: DefaultLevels | string): (name?: string) => Logger;
16
- withPinoCustom<T extends string = never, CustomOnly extends true = undefined>(options?: CustomLevelOptions<T, CustomOnly>): (name?: string) => Logger<T, CustomOnly>;
27
+ withPino(transports: TransportConfig | TransportConfig[], loglevel?: DefaultLevels | string): PinoLoggerFactory;
28
+ /**
29
+ * Colorized pretty transport. Development only unless `{ when: "always" }`.
30
+ * Chain with `.and.withPinoRoll({ file })`. Production writes JSON to stdout
31
+ * so log shipping stays outside the process.
32
+ */
33
+ withPinoPretty(logLevelOrOptions?: DefaultLevels | string | PinoPrettyRecipeOptions): PinoRecipe;
34
+ /**
35
+ * Rolling log files. Development only unless `{ when: "always" }`.
36
+ * Do not enable in production — ship stdout from a sidecar or platform agent.
37
+ * `symlink` defaults off; enabling it can race under multi-worker / HMR.
38
+ */
39
+ withPinoRoll(options: PinoRollRecipeOptions): PinoRecipe;
40
+ withPinoCustom<T extends string = never, CustomOnly extends true = undefined>(options?: CustomLevelOptions<T, CustomOnly>): PinoLoggerFactory;
41
+ }
42
+ namespace scribe {
43
+ function withPino(transports: TransportConfig | TransportConfig[], loglevel?: DefaultLevels | string): PinoLoggerFactory;
44
+ function withPinoPretty(logLevelOrOptions?: DefaultLevels | string | PinoPrettyRecipeOptions): PinoRecipe;
45
+ function withPinoRoll(options: PinoRollRecipeOptions): PinoRecipe;
46
+ function withPinoCustom<T extends string = never, CustomOnly extends true = undefined>(options?: CustomLevelOptions<T, CustomOnly>): PinoLoggerFactory;
17
47
  }
18
48
  }
19
49
  export declare class PinoExtensions {
20
- static withPino(factory: scribe, config: TransportConfig | TransportConfig[], logLevel?: DefaultLevels | string): any;
21
- static withPinoPretty(factory: scribe, logLevel?: DefaultLevels | string): any;
22
- static withPinoCustom<T extends string = never, CustomOnly extends true = undefined>(factory: scribe, options?: CustomLevelOptions<T, CustomOnly>): any;
50
+ static withPino(factory: scribe, config: TransportConfig | TransportConfig[], logLevel?: DefaultLevels | string): (name?: string) => Logger<never, false>;
51
+ static withPinoPretty(factory: scribe, logLevelOrOptions?: DefaultLevels | string | PinoPrettyRecipeOptions): PinoRecipe;
52
+ static withPinoRoll(factory: scribe, options: PinoRollRecipeOptions): PinoRecipe;
53
+ static withPinoCustom<T extends string = never, CustomOnly extends true = undefined>(factory: scribe, options?: CustomLevelOptions<T, CustomOnly>): (name?: string) => Logger<T, CustomOnly>;
23
54
  }
24
- export {};
55
+ /**
56
+ * Guard a worker transport so failures (roll EEXIST, worker exit) neither
57
+ * crash the process nor spam stderr on every subsequent log write.
58
+ */
59
+ declare function createSafeTransport(options: TransportOptions): DestinationStream;
60
+ /** @deprecated Use {@link guardTransport} — kept for callers/tests from the silence-only era. */
61
+ declare function silenceErrors(transport: {
62
+ on(event: "error", listener: (err: Error) => void): unknown;
63
+ write?: (...args: never[]) => unknown;
64
+ }): GuardedTransport;
65
+ export declare const pinoTransport: {
66
+ createSafeTransport: typeof createSafeTransport;
67
+ guardTransport: typeof guardTransport;
68
+ silenceErrors: typeof silenceErrors;
69
+ };