@riddance/host 0.0.14 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/context.d.ts CHANGED
@@ -10,17 +10,6 @@ export type Logger = {
10
10
  error(message: string, error?: unknown, fields?: object): void;
11
11
  fatal(message: string, error?: unknown, fields?: object): void;
12
12
  };
13
- export type AbortSignal = {
14
- aborted: boolean;
15
- addEventListener: (type: 'abort', listener: (this: AbortSignal, event: unknown) => unknown, options?: {
16
- capture?: boolean;
17
- once?: boolean;
18
- passive?: boolean;
19
- }) => void;
20
- removeEventListener: (type: 'abort', listener: (this: AbortSignal, event: unknown) => unknown, options?: {
21
- capture?: boolean;
22
- }) => void;
23
- };
24
13
  export type MutableJson = null | boolean | number | string | MutableJson[] | {
25
14
  [key: string]: MutableJson;
26
15
  };
package/context.js CHANGED
@@ -1,4 +1,4 @@
1
- import { performance } from 'perf_hooks';
1
+ import { performance } from 'node:perf_hooks';
2
2
  import { highPrecisionISODate } from './host/logging.js';
3
3
  /*@__INLINE__*/
4
4
  export function objectSpreadable(json) {
@@ -44,9 +44,9 @@ export async function measure(logger, name, fn, fields) {
44
44
  logger.trace(`Measurement of ${name} time`, undefined, {
45
45
  start: highPrecisionISODate(start),
46
46
  end: highPrecisionISODate(end),
47
- duration: (Math.round(end * 10000) - Math.round(start * 10000)) / 10000,
47
+ duration: (Math.round(end * 10_000) - Math.round(start * 10_000)) / 10_000,
48
48
  ...fields,
49
49
  });
50
50
  }
51
51
  }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQStDeEQsZUFBZTtBQUNmLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUFXO0lBQ3hDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNSLE9BQU8sRUFBRSxDQUFBO0lBQ2IsQ0FBQztJQUNELE9BQU8sSUFBbUQsQ0FBQTtBQUM5RCxDQUFDO0FBRUQsZUFBZTtBQUNmLE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBVztJQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sRUFBRSxDQUFBO0lBQ2IsQ0FBQztJQUNELE9BQU8sSUFBdUIsQ0FBQTtBQUNsQyxDQUFDO0FBc0RELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxPQUFnQjtJQUMvQyxNQUFNLE9BQU8sR0FBOEI7UUFDdkMsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxJQUFJLEdBQUcsRUFBRTtLQUN2RixDQUFBO0lBQ0QsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUE7SUFDakQsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2pCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUE7UUFDOUMsQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQy9DLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFBO1FBQzFGLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLDRCQUE0QixDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUE7UUFDcEUsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQTtBQUNsQixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLENBQ3pCLE1BQXFFLEVBQ3JFLElBQVksRUFDWixFQUF3QixFQUN4QixNQUFlO0lBRWYsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQy9CLElBQUksQ0FBQztRQUNELE9BQU8sTUFBTSxFQUFFLEVBQUUsQ0FBQTtJQUNyQixDQUFDO1lBQVMsQ0FBQztRQUNQLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixJQUFJLE9BQU8sRUFBRSxTQUFTLEVBQUU7WUFDbkQsS0FBSyxFQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQztZQUNsQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDO1lBQzlCLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSztZQUN2RSxHQUFHLE1BQU07U0FDWixDQUFDLENBQUE7SUFDTixDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBlcmZvcm1hbmNlIH0gZnJvbSAncGVyZl9ob29rcydcbmltcG9ydCB7IGhpZ2hQcmVjaXNpb25JU09EYXRlIH0gZnJvbSAnLi9ob3N0L2xvZ2dpbmcuanMnXG5cbmV4cG9ydCB0eXBlIEVudmlyb25tZW50ID0ge1xuICAgIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBMb2dnZXIgPSB7XG4gICAgZW5yaWNoKGZpZWxkczogb2JqZWN0KTogTG9nZ2VyXG4gICAgdHJhY2UobWVzc2FnZTogc3RyaW5nLCBlcnJvcj86IHVua25vd24sIGZpZWxkcz86IG9iamVjdCk6IHZvaWRcbiAgICBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcsIGVycm9yPzogdW5rbm93biwgZmllbGRzPzogb2JqZWN0KTogdm9pZFxuICAgIGluZm8obWVzc2FnZTogc3RyaW5nLCBlcnJvcj86IHVua25vd24sIGZpZWxkcz86IG9iamVjdCk6IHZvaWRcbiAgICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I/OiB1bmtub3duLCBmaWVsZHM/OiBvYmplY3QpOiB2b2lkXG4gICAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBlcnJvcj86IHVua25vd24sIGZpZWxkcz86IG9iamVjdCk6IHZvaWRcbiAgICBmYXRhbChtZXNzYWdlOiBzdHJpbmcsIGVycm9yPzogdW5rbm93biwgZmllbGRzPzogb2JqZWN0KTogdm9pZFxufVxuXG5leHBvcnQgdHlwZSBBYm9ydFNpZ25hbCA9IHtcbiAgICBhYm9ydGVkOiBib29sZWFuXG5cbiAgICBhZGRFdmVudExpc3RlbmVyOiAoXG4gICAgICAgIHR5cGU6ICdhYm9ydCcsXG4gICAgICAgIGxpc3RlbmVyOiAodGhpczogQWJvcnRTaWduYWwsIGV2ZW50OiB1bmtub3duKSA9PiB1bmtub3duLFxuICAgICAgICBvcHRpb25zPzogeyBjYXB0dXJlPzogYm9vbGVhbjsgb25jZT86IGJvb2xlYW47IHBhc3NpdmU/OiBib29sZWFuIH0sXG4gICAgKSA9PiB2b2lkXG5cbiAgICByZW1vdmVFdmVudExpc3RlbmVyOiAoXG4gICAgICAgIHR5cGU6ICdhYm9ydCcsXG4gICAgICAgIGxpc3RlbmVyOiAodGhpczogQWJvcnRTaWduYWwsIGV2ZW50OiB1bmtub3duKSA9PiB1bmtub3duLFxuICAgICAgICBvcHRpb25zPzogeyBjYXB0dXJlPzogYm9vbGVhbiB9LFxuICAgICkgPT4gdm9pZFxufVxuXG5leHBvcnQgdHlwZSBNdXRhYmxlSnNvbiA9XG4gICAgfCBudWxsXG4gICAgfCBib29sZWFuXG4gICAgfCBudW1iZXJcbiAgICB8IHN0cmluZ1xuICAgIHwgTXV0YWJsZUpzb25bXVxuICAgIHwgeyBba2V5OiBzdHJpbmddOiBNdXRhYmxlSnNvbiB9XG5leHBvcnQgdHlwZSBKc29uID1cbiAgICB8IG51bGxcbiAgICB8IGJvb2xlYW5cbiAgICB8IG51bWJlclxuICAgIHwgc3RyaW5nXG4gICAgfCByZWFkb25seSBKc29uW11cbiAgICB8IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogSnNvbiB9XG5cbi8qQF9fSU5MSU5FX18qL1xuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdFNwcmVhZGFibGUoanNvbj86IEpzb24pOiB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IEpzb24gfSB7XG4gICAgaWYgKCFqc29uKSB7XG4gICAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgICByZXR1cm4ganNvbiBhcyB1bmtub3duIGFzIHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogSnNvbiB9XG59XG5cbi8qQF9fSU5MSU5FX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGFycmF5U3ByZWFkYWJsZShqc29uPzogSnNvbik6IHJlYWRvbmx5IEpzb25bXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgICByZXR1cm4ganNvbiBhcyByZWFkb25seSBKc29uW11cbn1cblxuZXhwb3J0IHR5cGUgSGFuZGxlckNvbmZpZ3VyYXRpb24gPSB7XG4gICAgLyoqXG4gICAgICogQW4gaW5kaWNhdGlvbiBvZiBDUFUgdXNhZ2Ugb2YgdGhlIGhhbmRsZXIuXG4gICAgICogQGRlZmF1bHQgJ2xvdydcbiAgICAgKi9cbiAgICByZWFkb25seSBjb21wdXRlPzogJ2hpZ2gnIHwgJ2xvdydcbiAgICAvKipcbiAgICAgKiBBbiBpbmRpY2F0aW9uIG9mIG1lbW9yeSB1c2FnZSBvZiB0aGUgaGFuZGxlci5cbiAgICAgKiBAZGVmYXVsdCAnbG93J1xuICAgICAqL1xuICAgIHJlYWRvbmx5IG1lbW9yeT86ICdoaWdoJyB8ICdsb3cnXG4gICAgLyoqXG4gICAgICogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBlbnJpY2ggdGhlIGxvZyB3aXRoIHRoZSBib2R5IG9mIGV2ZW50cywgcmVxdWVzdHMgb3IgcmVzcG9uc2VzLiBTZXQgdG8gZmFsc2UgaWYgdGhlIGJvZHkgaXMgbGFyZ2Ugb3IgY29udGFpbiB2ZXJ5IHNlbnNpdGl2ZSBkYXRhLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXhjbHVkZUJvZHlGcm9tTG9ncz86IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgbGV2ZWwgYmVsb3cgd2hpY2ggbG9nIGVudHJpZXMgd2lsbCBiZSBkaXNjYXJkZWQuXG4gICAgICogQGRlZmF1bHQgJ3RyYWNlJ1xuICAgICAqL1xuICAgIHJlYWRvbmx5IG1pbmltdW1Mb2dMZXZlbD86ICd0cmFjZScgfCAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJyB8ICdmYXRhbCdcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdGhlIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIGZpbmlzaCBleGVjdXRpbmcgaW4uXG4gICAgICovXG4gICAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBDb250ZXh0ID0ge1xuICAgIHJlYWRvbmx5IGVudjogRW52aXJvbm1lbnRcbiAgICByZWFkb25seSBsb2c6IExvZ2dlclxuICAgIHJlYWRvbmx5IHNpZ25hbDogQWJvcnRTaWduYWxcbiAgICBub3coKTogRGF0ZVxuXG4gICAgcmVhZG9ubHkgb3BlcmF0aW9uSWQ/OiBzdHJpbmdcbiAgICByZWFkb25seSBjbGllbnQ/OiB7XG4gICAgICAgIHJlYWRvbmx5IGlkPzogc3RyaW5nXG4gICAgICAgIHJlYWRvbmx5IGlwPzogc3RyaW5nXG4gICAgICAgIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXJcbiAgICAgICAgcmVhZG9ubHkgdXNlckFnZW50Pzogc3RyaW5nXG4gICAgfVxuICAgIHJlYWRvbmx5IG1ldGE/OiB7XG4gICAgICAgIHJlYWRvbmx5IHBhY2thZ2VOYW1lOiBzdHJpbmdcbiAgICAgICAgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZ1xuICAgICAgICByZWFkb25seSByZXZpc2lvbj86IHN0cmluZ1xuICAgIH1cblxuICAgIGVtaXQodG9waWM6IHN0cmluZywgdHlwZTogc3RyaW5nLCBzdWJqZWN0OiBzdHJpbmcsIGRhdGE/OiBKc29uLCBtZXNzYWdlSWQ/OiBzdHJpbmcpOiB2b2lkXG4gICAgZXZlbnRCYXJyaWVyKCk6IFByb21pc2U8dm9pZD5cblxuICAgIG9uU3VjY2VzcyhmbjogKCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQpOiB2b2lkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBodHRwUmVxdWVzdEhlYWRlcnMoY29udGV4dDogQ29udGV4dCkge1xuICAgIGNvbnN0IGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICd1c2VyLWFnZW50JzogYCR7Y29udGV4dC5tZXRhPy5wYWNrYWdlTmFtZSA/PyAnPyd9LyR7Y29udGV4dC5tZXRhPy5yZXZpc2lvbiA/PyAnPyd9YCxcbiAgICB9XG4gICAgaWYgKGNvbnRleHQub3BlcmF0aW9uSWQpIHtcbiAgICAgICAgaGVhZGVyc1sneC1yZXF1ZXN0LWlkJ10gPSBjb250ZXh0Lm9wZXJhdGlvbklkXG4gICAgfVxuICAgIGlmIChjb250ZXh0LmNsaWVudCkge1xuICAgICAgICBpZiAoY29udGV4dC5jbGllbnQuaWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbJ3gtY2xpZW50LWlkJ10gPSBjb250ZXh0LmNsaWVudC5pZFxuICAgICAgICB9XG4gICAgICAgIGlmICghIWNvbnRleHQuY2xpZW50LmlwIHx8ICEhY29udGV4dC5jbGllbnQucG9ydCkge1xuICAgICAgICAgICAgaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yJ10gPSBgJHtjb250ZXh0LmNsaWVudC5pcCA/PyAnJ306JHtjb250ZXh0LmNsaWVudC5wb3J0ID8/ICcnfWBcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGV4dC5jbGllbnQudXNlckFnZW50KSB7XG4gICAgICAgICAgICBoZWFkZXJzWyd4LWZvcndhcmRlZC1mb3ItdXNlci1hZ2VudCddID0gY29udGV4dC5jbGllbnQudXNlckFnZW50XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhlYWRlcnNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1lYXN1cmU8VD4oXG4gICAgbG9nZ2VyOiB7IHRyYWNlOiAobWVzc2FnZTogc3RyaW5nLCBfOiB1bmRlZmluZWQsIGY6IG9iamVjdCkgPT4gdm9pZCB9LFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmbjogKCkgPT4gUHJvbWlzZTxUPiB8IFQsXG4gICAgZmllbGRzPzogb2JqZWN0LFxuKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmbigpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY29uc3QgZW5kID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICAgICAgbG9nZ2VyLnRyYWNlKGBNZWFzdXJlbWVudCBvZiAke25hbWV9IHRpbWVgLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIHN0YXJ0OiBoaWdoUHJlY2lzaW9uSVNPRGF0ZShzdGFydCksXG4gICAgICAgICAgICBlbmQ6IGhpZ2hQcmVjaXNpb25JU09EYXRlKGVuZCksXG4gICAgICAgICAgICBkdXJhdGlvbjogKE1hdGgucm91bmQoZW5kICogMTAwMDApIC0gTWF0aC5yb3VuZChzdGFydCAqIDEwMDAwKSkgLyAxMDAwMCxcbiAgICAgICAgICAgIC4uLmZpZWxkcyxcbiAgICAgICAgfSlcbiAgICB9XG59XG4iXX0=
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBK0J4RCxlQUFlO0FBQ2YsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQVc7SUFDeEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1IsT0FBTyxFQUFFLENBQUE7SUFDYixDQUFDO0lBQ0QsT0FBTyxJQUFtRCxDQUFBO0FBQzlELENBQUM7QUFFRCxlQUFlO0FBQ2YsTUFBTSxVQUFVLGVBQWUsQ0FBQyxJQUFXO0lBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyxFQUFFLENBQUE7SUFDYixDQUFDO0lBQ0QsT0FBTyxJQUF1QixDQUFBO0FBQ2xDLENBQUM7QUFzREQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQWdCO0lBQy9DLE1BQU0sT0FBTyxHQUE4QjtRQUN2QyxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLElBQUksR0FBRyxFQUFFO0tBQ3ZGLENBQUE7SUFDRCxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQTtJQUNqRCxDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDakIsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQTtRQUM5QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDL0MsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUE7UUFDMUYsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsNEJBQTRCLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQTtRQUNwRSxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFBO0FBQ2xCLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sQ0FDekIsTUFBcUUsRUFDckUsSUFBWSxFQUNaLEVBQXdCLEVBQ3hCLE1BQWU7SUFFZixNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDL0IsSUFBSSxDQUFDO1FBQ0QsT0FBTyxNQUFNLEVBQUUsRUFBRSxDQUFBO0lBQ3JCLENBQUM7WUFBUyxDQUFDO1FBQ1AsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQzdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLElBQUksT0FBTyxFQUFFLFNBQVMsRUFBRTtZQUNuRCxLQUFLLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxDQUFDO1lBQ2xDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxHQUFHLENBQUM7WUFDOUIsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNO1lBQzFFLEdBQUcsTUFBTTtTQUNaLENBQUMsQ0FBQTtJQUNOLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGVyZm9ybWFuY2UgfSBmcm9tICdub2RlOnBlcmZfaG9va3MnXG5pbXBvcnQgeyBoaWdoUHJlY2lzaW9uSVNPRGF0ZSB9IGZyb20gJy4vaG9zdC9sb2dnaW5nLmpzJ1xuXG5leHBvcnQgdHlwZSBFbnZpcm9ubWVudCA9IHtcbiAgICByZWFkb25seSBba2V5OiBzdHJpbmddOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgTG9nZ2VyID0ge1xuICAgIGVucmljaChmaWVsZHM6IG9iamVjdCk6IExvZ2dlclxuICAgIHRyYWNlKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I/OiB1bmtub3duLCBmaWVsZHM/OiBvYmplY3QpOiB2b2lkXG4gICAgZGVidWcobWVzc2FnZTogc3RyaW5nLCBlcnJvcj86IHVua25vd24sIGZpZWxkcz86IG9iamVjdCk6IHZvaWRcbiAgICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I/OiB1bmtub3duLCBmaWVsZHM/OiBvYmplY3QpOiB2b2lkXG4gICAgd2FybihtZXNzYWdlOiBzdHJpbmcsIGVycm9yPzogdW5rbm93biwgZmllbGRzPzogb2JqZWN0KTogdm9pZFxuICAgIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I/OiB1bmtub3duLCBmaWVsZHM/OiBvYmplY3QpOiB2b2lkXG4gICAgZmF0YWwobWVzc2FnZTogc3RyaW5nLCBlcnJvcj86IHVua25vd24sIGZpZWxkcz86IG9iamVjdCk6IHZvaWRcbn1cblxuZXhwb3J0IHR5cGUgTXV0YWJsZUpzb24gPVxuICAgIHwgbnVsbFxuICAgIHwgYm9vbGVhblxuICAgIHwgbnVtYmVyXG4gICAgfCBzdHJpbmdcbiAgICB8IE11dGFibGVKc29uW11cbiAgICB8IHsgW2tleTogc3RyaW5nXTogTXV0YWJsZUpzb24gfVxuZXhwb3J0IHR5cGUgSnNvbiA9XG4gICAgfCBudWxsXG4gICAgfCBib29sZWFuXG4gICAgfCBudW1iZXJcbiAgICB8IHN0cmluZ1xuICAgIHwgcmVhZG9ubHkgSnNvbltdXG4gICAgfCB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IEpzb24gfVxuXG4vKkBfX0lOTElORV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RTcHJlYWRhYmxlKGpzb24/OiBKc29uKTogeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBKc29uIH0ge1xuICAgIGlmICghanNvbikge1xuICAgICAgICByZXR1cm4ge31cbiAgICB9XG4gICAgcmV0dXJuIGpzb24gYXMgdW5rbm93biBhcyB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IEpzb24gfVxufVxuXG4vKkBfX0lOTElORV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheVNwcmVhZGFibGUoanNvbj86IEpzb24pOiByZWFkb25seSBKc29uW10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShqc29uKSkge1xuICAgICAgICByZXR1cm4gW11cbiAgICB9XG4gICAgcmV0dXJuIGpzb24gYXMgcmVhZG9ubHkgSnNvbltdXG59XG5cbmV4cG9ydCB0eXBlIEhhbmRsZXJDb25maWd1cmF0aW9uID0ge1xuICAgIC8qKlxuICAgICAqIEFuIGluZGljYXRpb24gb2YgQ1BVIHVzYWdlIG9mIHRoZSBoYW5kbGVyLlxuICAgICAqIEBkZWZhdWx0ICdsb3cnXG4gICAgICovXG4gICAgcmVhZG9ubHkgY29tcHV0ZT86ICdoaWdoJyB8ICdsb3cnXG4gICAgLyoqXG4gICAgICogQW4gaW5kaWNhdGlvbiBvZiBtZW1vcnkgdXNhZ2Ugb2YgdGhlIGhhbmRsZXIuXG4gICAgICogQGRlZmF1bHQgJ2xvdydcbiAgICAgKi9cbiAgICByZWFkb25seSBtZW1vcnk/OiAnaGlnaCcgfCAnbG93J1xuICAgIC8qKlxuICAgICAqIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gZW5yaWNoIHRoZSBsb2cgd2l0aCB0aGUgYm9keSBvZiBldmVudHMsIHJlcXVlc3RzIG9yIHJlc3BvbnNlcy4gU2V0IHRvIGZhbHNlIGlmIHRoZSBib2R5IGlzIGxhcmdlIG9yIGNvbnRhaW4gdmVyeSBzZW5zaXRpdmUgZGF0YS5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGV4Y2x1ZGVCb2R5RnJvbUxvZ3M/OiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIGxldmVsIGJlbG93IHdoaWNoIGxvZyBlbnRyaWVzIHdpbGwgYmUgZGlzY2FyZGVkLlxuICAgICAqIEBkZWZhdWx0ICd0cmFjZSdcbiAgICAgKi9cbiAgICByZWFkb25seSBtaW5pbXVtTG9nTGV2ZWw/OiAndHJhY2UnIHwgJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuaW5nJyB8ICdlcnJvcicgfCAnZmF0YWwnXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRoZSBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byBmaW5pc2ggZXhlY3V0aW5nIGluLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHRpbWVvdXQ/OiBudW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgQ29udGV4dCA9IHtcbiAgICByZWFkb25seSBlbnY6IEVudmlyb25tZW50XG4gICAgcmVhZG9ubHkgbG9nOiBMb2dnZXJcbiAgICByZWFkb25seSBzaWduYWw6IEFib3J0U2lnbmFsXG4gICAgbm93KCk6IERhdGVcblxuICAgIHJlYWRvbmx5IG9wZXJhdGlvbklkPzogc3RyaW5nXG4gICAgcmVhZG9ubHkgY2xpZW50Pzoge1xuICAgICAgICByZWFkb25seSBpZD86IHN0cmluZ1xuICAgICAgICByZWFkb25seSBpcD86IHN0cmluZ1xuICAgICAgICByZWFkb25seSBwb3J0PzogbnVtYmVyXG4gICAgICAgIHJlYWRvbmx5IHVzZXJBZ2VudD86IHN0cmluZ1xuICAgIH1cbiAgICByZWFkb25seSBtZXRhPzoge1xuICAgICAgICByZWFkb25seSBwYWNrYWdlTmFtZTogc3RyaW5nXG4gICAgICAgIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmdcbiAgICAgICAgcmVhZG9ubHkgcmV2aXNpb24/OiBzdHJpbmdcbiAgICB9XG5cbiAgICBlbWl0KHRvcGljOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgc3ViamVjdDogc3RyaW5nLCBkYXRhPzogSnNvbiwgbWVzc2FnZUlkPzogc3RyaW5nKTogdm9pZFxuICAgIGV2ZW50QmFycmllcigpOiBQcm9taXNlPHZvaWQ+XG5cbiAgICBvblN1Y2Nlc3MoZm46ICgpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkKTogdm9pZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaHR0cFJlcXVlc3RIZWFkZXJzKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICBjb25zdCBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAndXNlci1hZ2VudCc6IGAke2NvbnRleHQubWV0YT8ucGFja2FnZU5hbWUgPz8gJz8nfS8ke2NvbnRleHQubWV0YT8ucmV2aXNpb24gPz8gJz8nfWAsXG4gICAgfVxuICAgIGlmIChjb250ZXh0Lm9wZXJhdGlvbklkKSB7XG4gICAgICAgIGhlYWRlcnNbJ3gtcmVxdWVzdC1pZCddID0gY29udGV4dC5vcGVyYXRpb25JZFxuICAgIH1cbiAgICBpZiAoY29udGV4dC5jbGllbnQpIHtcbiAgICAgICAgaWYgKGNvbnRleHQuY2xpZW50LmlkKSB7XG4gICAgICAgICAgICBoZWFkZXJzWyd4LWNsaWVudC1pZCddID0gY29udGV4dC5jbGllbnQuaWRcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFjb250ZXh0LmNsaWVudC5pcCB8fCAhIWNvbnRleHQuY2xpZW50LnBvcnQpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbJ3gtZm9yd2FyZGVkLWZvciddID0gYCR7Y29udGV4dC5jbGllbnQuaXAgPz8gJyd9OiR7Y29udGV4dC5jbGllbnQucG9ydCA/PyAnJ31gXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHQuY2xpZW50LnVzZXJBZ2VudCkge1xuICAgICAgICAgICAgaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yLXVzZXItYWdlbnQnXSA9IGNvbnRleHQuY2xpZW50LnVzZXJBZ2VudFxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoZWFkZXJzXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtZWFzdXJlPFQ+KFxuICAgIGxvZ2dlcjogeyB0cmFjZTogKG1lc3NhZ2U6IHN0cmluZywgXzogdW5kZWZpbmVkLCBmOiBvYmplY3QpID0+IHZvaWQgfSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZm46ICgpID0+IFByb21pc2U8VD4gfCBULFxuICAgIGZpZWxkcz86IG9iamVjdCxcbikge1xuICAgIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZm4oKVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNvbnN0IGVuZCA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICAgIGxvZ2dlci50cmFjZShgTWVhc3VyZW1lbnQgb2YgJHtuYW1lfSB0aW1lYCwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBzdGFydDogaGlnaFByZWNpc2lvbklTT0RhdGUoc3RhcnQpLFxuICAgICAgICAgICAgZW5kOiBoaWdoUHJlY2lzaW9uSVNPRGF0ZShlbmQpLFxuICAgICAgICAgICAgZHVyYXRpb246IChNYXRoLnJvdW5kKGVuZCAqIDEwXzAwMCkgLSBNYXRoLnJvdW5kKHN0YXJ0ICogMTBfMDAwKSkgLyAxMF8wMDAsXG4gICAgICAgICAgICAuLi5maWVsZHMsXG4gICAgICAgIH0pXG4gICAgfVxufVxuIl19
@@ -0,0 +1,5 @@
1
+ // @ts-check
2
+
3
+ import { configuration } from '@riddance/env/lib/eslint-config.js'
4
+
5
+ export default configuration(import.meta.dirname)
package/host/context.d.ts CHANGED
@@ -1,5 +1,4 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { AbortSignal, Context, Environment, Logger } from '../context.js';
1
+ import { Context, Environment, Logger } from '../context.js';
3
2
  import { FullConfiguration, Metadata } from './registry.js';
4
3
  export type ClientInfo = {
5
4
  readonly operationId?: string;
package/host/context.js CHANGED
@@ -1,4 +1,4 @@
1
- import { EventEmitter } from './emitter.js';
1
+ import { EventCollector } from './events.js';
2
2
  import { makeLogger } from './logging.js';
3
3
  class LogMulticaster {
4
4
  #transports;
@@ -18,7 +18,7 @@ class LogMulticaster {
18
18
  export function createContext(clientInfo, loggers, eventTransport, timeouts, outerController, config, meta, environment, now) {
19
19
  const timeout = (timeouts.cap
20
20
  ? Math.min(config?.timeout ?? timeouts.default, timeouts.cap)
21
- : config?.timeout ?? timeouts.default) * 1000;
21
+ : (config?.timeout ?? timeouts.default)) * 1000;
22
22
  const innerController = new AbortController();
23
23
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
24
24
  const logTransport = loggers.length === 1 ? loggers[0] : new LogMulticaster(loggers);
@@ -32,7 +32,7 @@ export function createContext(clientInfo, loggers, eventTransport, timeouts, out
32
32
  },
33
33
  });
34
34
  globalLogger = logger;
35
- const emitter = new EventEmitter(eventTransport, logger, clientInfo, timeout, outerController.signal);
35
+ const emitter = new EventCollector(eventTransport, logger, clientInfo, timeout, outerController.signal);
36
36
  const successHandlers = [];
37
37
  const ctx = {
38
38
  env: environment ?? process.env,
@@ -52,7 +52,9 @@ export function createContext(clientInfo, loggers, eventTransport, timeouts, out
52
52
  revision: meta.revision,
53
53
  }
54
54
  : undefined,
55
- emit: (topic, type, subject, data, messageId) => emitter.emit({ topic, type, subject, id: messageId }, data),
55
+ emit: (topic, type, subject, data, messageId) => {
56
+ emitter.emit({ topic, type, subject, id: messageId }, data);
57
+ },
56
58
  eventBarrier: () => emitter.flush(),
57
59
  onSuccess: (fn) => successHandlers.push(fn),
58
60
  };
@@ -67,7 +69,7 @@ export function createContext(clientInfo, loggers, eventTransport, timeouts, out
67
69
  const flushHandle = setTimeout(() => {
68
70
  logger.error('Aborting flush.', undefined, undefined);
69
71
  outerController.abort();
70
- }, timeout + 15000);
72
+ }, timeout + 15_000);
71
73
  return {
72
74
  log: logger,
73
75
  context: ctx,
@@ -87,4 +89,4 @@ process.on('uncaughtException', err => {
87
89
  process.on('unhandledRejection', reason => {
88
90
  globalLogger?.fatal('Unhandled rejection.', reason, undefined);
89
91
  });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBNkN6QyxNQUFNLGNBQWM7SUFDUCxXQUFXLENBQWdCO0lBQzNCLFdBQVcsQ0FBUTtJQUU1QixZQUFZLFVBQTBCO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFBO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUE7SUFDOUYsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFtQixFQUFFLE1BQW1CO1FBQ2hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDM0YsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU07UUFDVixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBNkIsQ0FBQTtJQUM1RCxDQUFDO0NBQ0o7QUFPRCxNQUFNLFVBQVUsYUFBYSxDQUN6QixVQUFzQixFQUN0QixPQUF1QixFQUN2QixjQUE4QixFQUM5QixRQUEyQyxFQUMzQyxlQUFnQyxFQUNoQyxNQUEwQixFQUMxQixJQUFlLEVBQ2YsV0FBcUMsRUFDckMsR0FBOEI7SUFP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bEUsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYm9ydFNpZ25hbCwgQ29udGV4dCwgRW52aXJvbm1lbnQsIEpzb24sIExvZ2dlciB9IGZyb20gJy4uL2NvbnRleHQuanMnXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuL2VtaXR0ZXIuanMnXG5pbXBvcnQgeyBtYWtlTG9nZ2VyIH0gZnJvbSAnLi9sb2dnaW5nLmpzJ1xuaW1wb3J0IHsgRnVsbENvbmZpZ3VyYXRpb24sIE1ldGFkYXRhIH0gZnJvbSAnLi9yZWdpc3RyeS5qcydcblxuZXhwb3J0IHR5cGUgQ2xpZW50SW5mbyA9IHtcbiAgICByZWFkb25seSBvcGVyYXRpb25JZD86IHN0cmluZ1xuICAgIHJlYWRvbmx5IGNsaWVudElkPzogc3RyaW5nXG4gICAgcmVhZG9ubHkgY2xpZW50SXA/OiBzdHJpbmdcbiAgICByZWFkb25seSBjbGllbnRQb3J0PzogbnVtYmVyXG4gICAgcmVhZG9ubHkgdXNlckFnZW50Pzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEV2ZW50TWV0YWRhdGEgPSB7XG4gICAgdG9waWM6IHN0cmluZ1xuICAgIHR5cGU6IHN0cmluZ1xuICAgIHN1YmplY3Q6IHN0cmluZ1xuICAgIGlkPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEJ1ZmZlcmVkRXZlbnQgPSB7XG4gICAgZXZlbnRUaW1lOiBEYXRlXG4gICAgbWV0YTogT21pdDxFdmVudE1ldGFkYXRhLCAndG9waWMnPlxuICAgIGlkczogQ2xpZW50SW5mb1xuICAgIGpzb24/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgRXZlbnRUcmFuc3BvcnQgPSB7XG4gICAgcmVhZG9ubHkgcHVibGlzaFJhdGU6IG51bWJlclxuICAgIHNlbmRFdmVudHModG9waWM6IHN0cmluZywgZXZlbnRzOiBCdWZmZXJlZEV2ZW50W10sIHNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+XG59XG5cbmV4cG9ydCB0eXBlIExvZ0xldmVsID0gJ3RyYWNlJyB8ICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybmluZycgfCAnZXJyb3InIHwgJ2ZhdGFsJ1xuXG5leHBvcnQgdHlwZSBMb2dFbnRyeSA9IHtcbiAgICByZWFkb25seSBsZXZlbDogTG9nTGV2ZWxcbiAgICByZWFkb25seSB0aW1lc3RhbXA6IG51bWJlclxuICAgIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZ1xuICAgIHJlYWRvbmx5IGVycm9yOiB1bmtub3duXG4gICAgcmVhZG9ubHkganNvbjogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIExvZ1RyYW5zcG9ydCA9IHtcbiAgICByZWFkb25seSBwdWJsaXNoUmF0ZT86IG51bWJlclxuICAgIHNlbmRFbnRyaWVzKGVudHJpZXM6IExvZ0VudHJ5W10sIHNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkXG59XG5cbmNsYXNzIExvZ011bHRpY2FzdGVyIGltcGxlbWVudHMgTG9nVHJhbnNwb3J0IHtcbiAgICByZWFkb25seSAjdHJhbnNwb3J0czogTG9nVHJhbnNwb3J0W11cbiAgICByZWFkb25seSBwdWJsaXNoUmF0ZTogbnVtYmVyXG5cbiAgICBjb25zdHJ1Y3Rvcih0cmFuc3BvcnRzOiBMb2dUcmFuc3BvcnRbXSkge1xuICAgICAgICB0aGlzLiN0cmFuc3BvcnRzID0gdHJhbnNwb3J0c1xuICAgICAgICB0aGlzLnB1Ymxpc2hSYXRlID0gdHJhbnNwb3J0cy5tYXAodCA9PiB0LnB1Ymxpc2hSYXRlKS5zb3J0KClbMF0gPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgICB9XG5cbiAgICBzZW5kRW50cmllcyhlbnRyaWVzOiBMb2dFbnRyeVtdLCBzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gdGhpcy4jdHJhbnNwb3J0cy5tYXAodCA9PiB0LnNlbmRFbnRyaWVzKGVudHJpZXMsIHNpZ25hbCkpLmZpbHRlcihwID0+ICEhcClcbiAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKSBhcyB1bmtub3duIGFzIFByb21pc2U8dm9pZD5cbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFJvb3RMb2dnZXIgPSB7XG4gICAgZW5yaWNoUmVzZXJ2ZWQoZmllbGRzOiBvYmplY3QpOiBSb290TG9nZ2VyXG4gICAgZmx1c2goKTogUHJvbWlzZTx2b2lkPlxufSAmIExvZ2dlclxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29udGV4dChcbiAgICBjbGllbnRJbmZvOiBDbGllbnRJbmZvLFxuICAgIGxvZ2dlcnM6IExvZ1RyYW5zcG9ydFtdLFxuICAgIGV2ZW50VHJhbnNwb3J0OiBFdmVudFRyYW5zcG9ydCxcbiAgICB0aW1lb3V0czogeyBkZWZhdWx0OiBudW1iZXI7IGNhcD86IG51bWJlciB9LFxuICAgIG91dGVyQ29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyLFxuICAgIGNvbmZpZz86IEZ1bGxDb25maWd1cmF0aW9uLFxuICAgIG1ldGE/OiBNZXRhZGF0YSxcbiAgICBlbnZpcm9ubWVudD86IEVudmlyb25tZW50IHwgdW5kZWZpbmVkLFxuICAgIG5vdz86ICgoKSA9PiBEYXRlKSB8IHVuZGVmaW5lZCxcbik6IHtcbiAgICBsb2c6IFJvb3RMb2dnZXJcbiAgICBjb250ZXh0OiBPbWl0PENvbnRleHQsICdsb2cnPlxuICAgIHN1Y2Nlc3M6ICgpID0+IFByb21pc2U8dW5rbm93bj5cbiAgICBmbHVzaDogKCkgPT4gUHJvbWlzZTx2b2lkPlxufSB7XG4gICAgY29uc3QgdGltZW91dCA9XG4gICAgICAgICh0aW1lb3V0cy5jYXBcbiAgICAgICAgICAgID8gTWF0aC5taW4oY29uZmlnPy50aW1lb3V0ID8/IHRpbWVvdXRzLmRlZmF1bHQsIHRpbWVvdXRzLmNhcClcbiAgICAgICAgICAgIDogY29uZmlnPy50aW1lb3V0ID8/IHRpbWVvdXRzLmRlZmF1bHQpICogMTAwMFxuICAgIGNvbnN0IGlubmVyQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgY29uc3QgbG9nVHJhbnNwb3J0ID0gbG9nZ2Vycy5sZW5ndGggPT09IDEgPyBsb2dnZXJzWzBdISA6IG5ldyBMb2dNdWx0aWNhc3Rlcihsb2dnZXJzKVxuICAgIGNvbnN0IGxvZ2dlciA9IG1ha2VMb2dnZXIoXG4gICAgICAgIGxvZ1RyYW5zcG9ydCxcbiAgICAgICAgY29uZmlnPy5taW5pbXVtTG9nTGV2ZWwsXG4gICAgICAgIG91dGVyQ29udHJvbGxlci5zaWduYWwgYXMgQWJvcnRTaWduYWwsXG4gICAgKS5lbnJpY2hSZXNlcnZlZCh7XG4gICAgICAgIG9wZXJhdGlvbklkOiBjbGllbnRJbmZvLm9wZXJhdGlvbklkLFxuICAgICAgICBjbGllbnQ6IHtcbiAgICAgICAgICAgIGlkOiBjbGllbnRJbmZvLmNsaWVudElkLFxuICAgICAgICAgICAgaXA6IGNsaWVudEluZm8uY2xpZW50SXAsXG4gICAgICAgICAgICBwb3J0OiBjbGllbnRJbmZvLmNsaWVudFBvcnQsXG4gICAgICAgICAgICB1c2VyQWdlbnQ6IGNsaWVudEluZm8udXNlckFnZW50LFxuICAgICAgICB9LFxuICAgIH0pXG4gICAgZ2xvYmFsTG9nZ2VyID0gbG9nZ2VyXG4gICAgY29uc3QgZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoXG4gICAgICAgIGV2ZW50VHJhbnNwb3J0LFxuICAgICAgICBsb2dnZXIsXG4gICAgICAgIGNsaWVudEluZm8sXG4gICAgICAgIHRpbWVvdXQsXG4gICAgICAgIG91dGVyQ29udHJvbGxlci5zaWduYWwgYXMgQWJvcnRTaWduYWwsXG4gICAgKVxuICAgIGNvbnN0IHN1Y2Nlc3NIYW5kbGVyczogKCgpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkKVtdID0gW11cbiAgICBjb25zdCBjdHggPSB7XG4gICAgICAgIGVudjogZW52aXJvbm1lbnQgPz8gKHByb2Nlc3MuZW52IGFzIEVudmlyb25tZW50KSxcbiAgICAgICAgc2lnbmFsOiBpbm5lckNvbnRyb2xsZXIuc2lnbmFsIGFzIEFib3J0U2lnbmFsLFxuICAgICAgICBub3c6IG5vdyA/PyAoKCkgPT4gbmV3IERhdGUoKSksXG4gICAgICAgIG9wZXJhdGlvbklkOiBjbGllbnRJbmZvLm9wZXJhdGlvbklkLFxuICAgICAgICBjbGllbnQ6IHtcbiAgICAgICAgICAgIGlkOiBjbGllbnRJbmZvLmNsaWVudElkLFxuICAgICAgICAgICAgaXA6IGNsaWVudEluZm8uY2xpZW50SXAsXG4gICAgICAgICAgICBwb3J0OiBjbGllbnRJbmZvLmNsaWVudFBvcnQsXG4gICAgICAgICAgICB1c2VyQWdlbnQ6IGNsaWVudEluZm8udXNlckFnZW50LFxuICAgICAgICB9LFxuICAgICAgICBtZXRhOiBtZXRhXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIHBhY2thZ2VOYW1lOiBtZXRhLnBhY2thZ2VOYW1lLFxuICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IG1ldGEuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICByZXZpc2lvbjogbWV0YS5yZXZpc2lvbixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGVtaXQ6ICh0b3BpYzogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHN1YmplY3Q6IHN0cmluZywgZGF0YT86IEpzb24sIG1lc3NhZ2VJZD86IHN0cmluZykgPT5cbiAgICAgICAgICAgIGVtaXR0ZXIuZW1pdCh7IHRvcGljLCB0eXBlLCBzdWJqZWN0LCBpZDogbWVzc2FnZUlkIH0sIGRhdGEpLFxuICAgICAgICBldmVudEJhcnJpZXI6ICgpID0+IGVtaXR0ZXIuZmx1c2goKSxcbiAgICAgICAgb25TdWNjZXNzOiAoZm46ICgpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkKSA9PiBzdWNjZXNzSGFuZGxlcnMucHVzaChmbiksXG4gICAgfVxuICAgIGNvbnN0IHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdUaW1lb3V0LicsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxuICAgICAgICBpbm5lckNvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgICB2b2lkIGxvZ2dlci5mbHVzaCgpXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICAgIHZvaWQgZW1pdHRlci5mbHVzaCgpXG4gICAgfSwgdGltZW91dClcbiAgICBjb25zdCBmbHVzaEhhbmRsZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0Fib3J0aW5nIGZsdXNoLicsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxuICAgICAgICBvdXRlckNvbnRyb2xsZXIuYWJvcnQoKVxuICAgIH0sIHRpbWVvdXQgKyAxNTAwMClcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2c6IGxvZ2dlcixcbiAgICAgICAgY29udGV4dDogY3R4LFxuICAgICAgICBzdWNjZXNzOiAoKSA9PiBQcm9taXNlLmFsbChzdWNjZXNzSGFuZGxlcnMubWFwKGZuID0+IGZuKCkpKSxcbiAgICAgICAgZmx1c2g6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SGFuZGxlKVxuICAgICAgICAgICAgYXdhaXQgZW1pdHRlci5mbHVzaCgpXG4gICAgICAgICAgICBhd2FpdCBsb2dnZXIuZmx1c2goKVxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGZsdXNoSGFuZGxlKVxuICAgICAgICB9LFxuICAgIH1cbn1cblxubGV0IGdsb2JhbExvZ2dlcjogTG9nZ2VyIHwgdW5kZWZpbmVkXG5cbnByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZXJyID0+IHtcbiAgICBnbG9iYWxMb2dnZXI/LmZhdGFsKCdVbmNhdWdodCBleGNlcHRpb24uJywgZXJyLCB1bmRlZmluZWQpXG59KVxucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgcmVhc29uID0+IHtcbiAgICBnbG9iYWxMb2dnZXI/LmZhdGFsKCdVbmhhbmRsZWQgcmVqZWN0aW9uLicsIHJlYXNvbiwgdW5kZWZpbmVkKVxufSlcbiJdfQ==
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBNkN6QyxNQUFNLGNBQWM7SUFDUCxXQUFXLENBQWdCO0lBQzNCLFdBQVcsQ0FBUTtJQUU1QixZQUFZLFVBQTBCO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFBO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUE7SUFDOUYsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFtQixFQUFFLE1BQW1CO1FBQ2hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDM0YsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU07UUFDVixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBNkIsQ0FBQTtJQUM1RCxDQUFDO0NBQ0o7QUFPRCxNQUFNLFVBQVUsYUFBYSxDQUN6QixVQUFzQixFQUN0QixPQUF1QixFQUN2QixjQUE4QixFQUM5QixRQUEyQyxFQUMzQyxlQUFnQyxFQUNoQyxNQUEwQixFQUMxQixJQUFlLEVBQ2YsV0FBcUMsRUFDckMsR0FBOEI7SUFP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QUFFLFNBQVMsQ0FBQyxDQUFBO0FBQ2xFLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGV4dCwgRW52aXJvbm1lbnQsIEpzb24sIExvZ2dlciB9IGZyb20gJy4uL2NvbnRleHQuanMnXG5pbXBvcnQgeyBFdmVudENvbGxlY3RvciB9IGZyb20gJy4vZXZlbnRzLmpzJ1xuaW1wb3J0IHsgbWFrZUxvZ2dlciB9IGZyb20gJy4vbG9nZ2luZy5qcydcbmltcG9ydCB7IEZ1bGxDb25maWd1cmF0aW9uLCBNZXRhZGF0YSB9IGZyb20gJy4vcmVnaXN0cnkuanMnXG5cbmV4cG9ydCB0eXBlIENsaWVudEluZm8gPSB7XG4gICAgcmVhZG9ubHkgb3BlcmF0aW9uSWQ/OiBzdHJpbmdcbiAgICByZWFkb25seSBjbGllbnRJZD86IHN0cmluZ1xuICAgIHJlYWRvbmx5IGNsaWVudElwPzogc3RyaW5nXG4gICAgcmVhZG9ubHkgY2xpZW50UG9ydD86IG51bWJlclxuICAgIHJlYWRvbmx5IHVzZXJBZ2VudD86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBFdmVudE1ldGFkYXRhID0ge1xuICAgIHRvcGljOiBzdHJpbmdcbiAgICB0eXBlOiBzdHJpbmdcbiAgICBzdWJqZWN0OiBzdHJpbmdcbiAgICBpZD86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBCdWZmZXJlZEV2ZW50ID0ge1xuICAgIGV2ZW50VGltZTogRGF0ZVxuICAgIG1ldGE6IE9taXQ8RXZlbnRNZXRhZGF0YSwgJ3RvcGljJz5cbiAgICBpZHM6IENsaWVudEluZm9cbiAgICBqc29uPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEV2ZW50VHJhbnNwb3J0ID0ge1xuICAgIHJlYWRvbmx5IHB1Ymxpc2hSYXRlOiBudW1iZXJcbiAgICBzZW5kRXZlbnRzKHRvcGljOiBzdHJpbmcsIGV2ZW50czogQnVmZmVyZWRFdmVudFtdLCBzaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTx2b2lkPlxufVxuXG5leHBvcnQgdHlwZSBMb2dMZXZlbCA9ICd0cmFjZScgfCAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJyB8ICdmYXRhbCdcblxuZXhwb3J0IHR5cGUgTG9nRW50cnkgPSB7XG4gICAgcmVhZG9ubHkgbGV2ZWw6IExvZ0xldmVsXG4gICAgcmVhZG9ubHkgdGltZXN0YW1wOiBudW1iZXJcbiAgICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmdcbiAgICByZWFkb25seSBlcnJvcjogdW5rbm93blxuICAgIHJlYWRvbmx5IGpzb246IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBMb2dUcmFuc3BvcnQgPSB7XG4gICAgcmVhZG9ubHkgcHVibGlzaFJhdGU/OiBudW1iZXJcbiAgICBzZW5kRW50cmllcyhlbnRyaWVzOiBMb2dFbnRyeVtdLCBzaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZFxufVxuXG5jbGFzcyBMb2dNdWx0aWNhc3RlciBpbXBsZW1lbnRzIExvZ1RyYW5zcG9ydCB7XG4gICAgcmVhZG9ubHkgI3RyYW5zcG9ydHM6IExvZ1RyYW5zcG9ydFtdXG4gICAgcmVhZG9ubHkgcHVibGlzaFJhdGU6IG51bWJlclxuXG4gICAgY29uc3RydWN0b3IodHJhbnNwb3J0czogTG9nVHJhbnNwb3J0W10pIHtcbiAgICAgICAgdGhpcy4jdHJhbnNwb3J0cyA9IHRyYW5zcG9ydHNcbiAgICAgICAgdGhpcy5wdWJsaXNoUmF0ZSA9IHRyYW5zcG9ydHMubWFwKHQgPT4gdC5wdWJsaXNoUmF0ZSkuc29ydCgpWzBdID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG4gICAgfVxuXG4gICAgc2VuZEVudHJpZXMoZW50cmllczogTG9nRW50cnlbXSwgc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IHRoaXMuI3RyYW5zcG9ydHMubWFwKHQgPT4gdC5zZW5kRW50cmllcyhlbnRyaWVzLCBzaWduYWwpKS5maWx0ZXIocCA9PiAhIXApXG4gICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykgYXMgdW5rbm93biBhcyBQcm9taXNlPHZvaWQ+XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBSb290TG9nZ2VyID0ge1xuICAgIGVucmljaFJlc2VydmVkKGZpZWxkczogb2JqZWN0KTogUm9vdExvZ2dlclxuICAgIGZsdXNoKCk6IFByb21pc2U8dm9pZD5cbn0gJiBMb2dnZXJcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQoXG4gICAgY2xpZW50SW5mbzogQ2xpZW50SW5mbyxcbiAgICBsb2dnZXJzOiBMb2dUcmFuc3BvcnRbXSxcbiAgICBldmVudFRyYW5zcG9ydDogRXZlbnRUcmFuc3BvcnQsXG4gICAgdGltZW91dHM6IHsgZGVmYXVsdDogbnVtYmVyOyBjYXA/OiBudW1iZXIgfSxcbiAgICBvdXRlckNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcixcbiAgICBjb25maWc/OiBGdWxsQ29uZmlndXJhdGlvbixcbiAgICBtZXRhPzogTWV0YWRhdGEsXG4gICAgZW52aXJvbm1lbnQ/OiBFbnZpcm9ubWVudCB8IHVuZGVmaW5lZCxcbiAgICBub3c/OiAoKCkgPT4gRGF0ZSkgfCB1bmRlZmluZWQsXG4pOiB7XG4gICAgbG9nOiBSb290TG9nZ2VyXG4gICAgY29udGV4dDogT21pdDxDb250ZXh0LCAnbG9nJz5cbiAgICBzdWNjZXNzOiAoKSA9PiBQcm9taXNlPHVua25vd24+XG4gICAgZmx1c2g6ICgpID0+IFByb21pc2U8dm9pZD5cbn0ge1xuICAgIGNvbnN0IHRpbWVvdXQgPVxuICAgICAgICAodGltZW91dHMuY2FwXG4gICAgICAgICAgICA/IE1hdGgubWluKGNvbmZpZz8udGltZW91dCA/PyB0aW1lb3V0cy5kZWZhdWx0LCB0aW1lb3V0cy5jYXApXG4gICAgICAgICAgICA6IChjb25maWc/LnRpbWVvdXQgPz8gdGltZW91dHMuZGVmYXVsdCkpICogMTAwMFxuICAgIGNvbnN0IGlubmVyQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgY29uc3QgbG9nVHJhbnNwb3J0ID0gbG9nZ2Vycy5sZW5ndGggPT09IDEgPyBsb2dnZXJzWzBdISA6IG5ldyBMb2dNdWx0aWNhc3Rlcihsb2dnZXJzKVxuICAgIGNvbnN0IGxvZ2dlciA9IG1ha2VMb2dnZXIoXG4gICAgICAgIGxvZ1RyYW5zcG9ydCxcbiAgICAgICAgY29uZmlnPy5taW5pbXVtTG9nTGV2ZWwsXG4gICAgICAgIG91dGVyQ29udHJvbGxlci5zaWduYWwsXG4gICAgKS5lbnJpY2hSZXNlcnZlZCh7XG4gICAgICAgIG9wZXJhdGlvbklkOiBjbGllbnRJbmZvLm9wZXJhdGlvbklkLFxuICAgICAgICBjbGllbnQ6IHtcbiAgICAgICAgICAgIGlkOiBjbGllbnRJbmZvLmNsaWVudElkLFxuICAgICAgICAgICAgaXA6IGNsaWVudEluZm8uY2xpZW50SXAsXG4gICAgICAgICAgICBwb3J0OiBjbGllbnRJbmZvLmNsaWVudFBvcnQsXG4gICAgICAgICAgICB1c2VyQWdlbnQ6IGNsaWVudEluZm8udXNlckFnZW50LFxuICAgICAgICB9LFxuICAgIH0pXG4gICAgZ2xvYmFsTG9nZ2VyID0gbG9nZ2VyXG4gICAgY29uc3QgZW1pdHRlciA9IG5ldyBFdmVudENvbGxlY3RvcihcbiAgICAgICAgZXZlbnRUcmFuc3BvcnQsXG4gICAgICAgIGxvZ2dlcixcbiAgICAgICAgY2xpZW50SW5mbyxcbiAgICAgICAgdGltZW91dCxcbiAgICAgICAgb3V0ZXJDb250cm9sbGVyLnNpZ25hbCxcbiAgICApXG4gICAgY29uc3Qgc3VjY2Vzc0hhbmRsZXJzOiAoKCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQpW10gPSBbXVxuICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgZW52OiBlbnZpcm9ubWVudCA/PyAocHJvY2Vzcy5lbnYgYXMgRW52aXJvbm1lbnQpLFxuICAgICAgICBzaWduYWw6IGlubmVyQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIG5vdzogbm93ID8/ICgoKSA9PiBuZXcgRGF0ZSgpKSxcbiAgICAgICAgb3BlcmF0aW9uSWQ6IGNsaWVudEluZm8ub3BlcmF0aW9uSWQsXG4gICAgICAgIGNsaWVudDoge1xuICAgICAgICAgICAgaWQ6IGNsaWVudEluZm8uY2xpZW50SWQsXG4gICAgICAgICAgICBpcDogY2xpZW50SW5mby5jbGllbnRJcCxcbiAgICAgICAgICAgIHBvcnQ6IGNsaWVudEluZm8uY2xpZW50UG9ydCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogY2xpZW50SW5mby51c2VyQWdlbnQsXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGE6IG1ldGFcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgcGFja2FnZU5hbWU6IG1ldGEucGFja2FnZU5hbWUsXG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWV0YS5maWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiBtZXRhLnJldmlzaW9uLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZW1pdDogKHRvcGljOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgc3ViamVjdDogc3RyaW5nLCBkYXRhPzogSnNvbiwgbWVzc2FnZUlkPzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBlbWl0dGVyLmVtaXQoeyB0b3BpYywgdHlwZSwgc3ViamVjdCwgaWQ6IG1lc3NhZ2VJZCB9LCBkYXRhKVxuICAgICAgICB9LFxuICAgICAgICBldmVudEJhcnJpZXI6ICgpID0+IGVtaXR0ZXIuZmx1c2goKSxcbiAgICAgICAgb25TdWNjZXNzOiAoZm46ICgpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkKSA9PiBzdWNjZXNzSGFuZGxlcnMucHVzaChmbiksXG4gICAgfVxuICAgIGNvbnN0IHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdUaW1lb3V0LicsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxuICAgICAgICBpbm5lckNvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgICB2b2lkIGxvZ2dlci5mbHVzaCgpXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICAgIHZvaWQgZW1pdHRlci5mbHVzaCgpXG4gICAgfSwgdGltZW91dClcbiAgICBjb25zdCBmbHVzaEhhbmRsZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0Fib3J0aW5nIGZsdXNoLicsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxuICAgICAgICBvdXRlckNvbnRyb2xsZXIuYWJvcnQoKVxuICAgIH0sIHRpbWVvdXQgKyAxNV8wMDApXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9nOiBsb2dnZXIsXG4gICAgICAgIGNvbnRleHQ6IGN0eCxcbiAgICAgICAgc3VjY2VzczogKCkgPT4gUHJvbWlzZS5hbGwoc3VjY2Vzc0hhbmRsZXJzLm1hcChmbiA9PiBmbigpKSksXG4gICAgICAgIGZsdXNoOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dEhhbmRsZSlcbiAgICAgICAgICAgIGF3YWl0IGVtaXR0ZXIuZmx1c2goKVxuICAgICAgICAgICAgYXdhaXQgbG9nZ2VyLmZsdXNoKClcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChmbHVzaEhhbmRsZSlcbiAgICAgICAgfSxcbiAgICB9XG59XG5cbmxldCBnbG9iYWxMb2dnZXI6IExvZ2dlciB8IHVuZGVmaW5lZFxuXG5wcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIGVyciA9PiB7XG4gICAgZ2xvYmFsTG9nZ2VyPy5mYXRhbCgnVW5jYXVnaHQgZXhjZXB0aW9uLicsIGVyciwgdW5kZWZpbmVkKVxufSlcbnByb2Nlc3Mub24oJ3VuaGFuZGxlZFJlamVjdGlvbicsIHJlYXNvbiA9PiB7XG4gICAgZ2xvYmFsTG9nZ2VyPy5mYXRhbCgnVW5oYW5kbGVkIHJlamVjdGlvbi4nLCByZWFzb24sIHVuZGVmaW5lZClcbn0pXG4iXX0=
@@ -1,6 +1,6 @@
1
- import { AbortSignal, Json, Logger } from '../context.js';
1
+ import { Json, Logger } from '../context.js';
2
2
  import { EventMetadata, EventTransport } from './context.js';
3
- export declare class EventEmitter {
3
+ export declare class EventCollector {
4
4
  #private;
5
5
  constructor(transport: EventTransport, logger: Logger, ids: {
6
6
  operationId?: string;
package/host/events.js ADDED
@@ -0,0 +1,68 @@
1
+ export class EventCollector {
2
+ #transport;
3
+ #logger;
4
+ #ids;
5
+ #emitted = {};
6
+ #size = 0;
7
+ #flusher;
8
+ #deadline;
9
+ #buffered;
10
+ #signal;
11
+ constructor(transport, logger, ids, timeout, signal) {
12
+ this.#transport = transport;
13
+ this.#logger = logger;
14
+ this.#ids = ids;
15
+ this.#deadline = Date.now() + timeout;
16
+ this.#buffered = 0;
17
+ this.#signal = signal;
18
+ }
19
+ emit(meta, data) {
20
+ const eventTime = new Date();
21
+ const timeLeft = this.#deadline - Date.now();
22
+ if (this.#buffered / this.#transport.publishRate > timeLeft) {
23
+ throw new Error('Event overflow.');
24
+ }
25
+ const event = data === undefined
26
+ ? { meta, ids: this.#ids, eventTime }
27
+ : { meta, ids: this.#ids, eventTime, json: JSON.stringify(data) };
28
+ const events = this.#emitted[meta.topic];
29
+ if (events) {
30
+ events.push(event);
31
+ if (events.length > 64 || this.#size > 64_000) {
32
+ // eslint-disable-next-line no-void
33
+ void this.flush();
34
+ }
35
+ }
36
+ else {
37
+ this.#emitted[meta.topic] = [event];
38
+ }
39
+ ++this.#buffered;
40
+ this.#size += event.json?.length ?? 0;
41
+ }
42
+ async flush() {
43
+ this.#startFlush(this.#emitted);
44
+ this.#emitted = {};
45
+ this.#size = 0;
46
+ return await this.#flusher;
47
+ }
48
+ #startFlush(emitted) {
49
+ if (this.#flusher) {
50
+ this.#flusher = this.#flusher.then(() => this.#flushEvents(emitted));
51
+ }
52
+ else {
53
+ this.#flusher = this.#flushEvents(emitted);
54
+ }
55
+ }
56
+ async #flushEvents(emitted) {
57
+ await Promise.all(Object.entries(emitted).map(async ([topic, events]) => {
58
+ try {
59
+ await this.#transport.sendEvents(topic, events, this.#signal);
60
+ }
61
+ catch (e) {
62
+ this.#logger.fatal('Error sending events.', e, { events });
63
+ }
64
+ this.#buffered -= events.length;
65
+ }));
66
+ }
67
+ }
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sT0FBTyxjQUFjO0lBQ2QsVUFBVSxDQUFnQjtJQUMxQixPQUFPLENBQVE7SUFDZixJQUFJLENBQVk7SUFDekIsUUFBUSxHQUFlLEVBQUUsQ0FBQTtJQUN6QixLQUFLLEdBQUcsQ0FBQyxDQUFBO0lBQ1QsUUFBUSxDQUFnQjtJQUNmLFNBQVMsQ0FBUTtJQUMxQixTQUFTLENBQVE7SUFDUixPQUFPLENBQWE7SUFFN0IsWUFDSSxTQUF5QixFQUN6QixNQUFjLEVBQ2QsR0FBdUYsRUFDdkYsT0FBZSxFQUNmLE1BQW1CO1FBRW5CLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFBO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFBO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO0lBQ3pCLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBbUIsRUFBRSxJQUFXO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDNUMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLFFBQVEsRUFBRSxDQUFDO1lBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUN0QyxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQ1AsSUFBSSxLQUFLLFNBQVM7WUFDZCxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQ3JDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQTtRQUN6RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN4QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNsQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUM7Z0JBQzVDLG1DQUFtQztnQkFDbkMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDckIsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN2QyxDQUFDO1FBQ0QsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFBO1FBQ2hCLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFBO1FBQ2QsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDOUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFtQjtRQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUN4RSxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM5QyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBbUI7UUFDbEMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNiLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQztnQkFDRCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ2pFLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7WUFDOUQsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQTtRQUNuQyxDQUFDLENBQUMsQ0FDTCxDQUFBO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSnNvbiwgTG9nZ2VyIH0gZnJvbSAnLi4vY29udGV4dC5qcydcbmltcG9ydCB7IEJ1ZmZlcmVkRXZlbnQsIENsaWVudEluZm8sIEV2ZW50TWV0YWRhdGEsIEV2ZW50VHJhbnNwb3J0IH0gZnJvbSAnLi9jb250ZXh0LmpzJ1xuXG50eXBlIEVtaXRCdWZmZXIgPSB7XG4gICAgW3RvcGljOiBzdHJpbmddOiBCdWZmZXJlZEV2ZW50W11cbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50Q29sbGVjdG9yIHtcbiAgICByZWFkb25seSAjdHJhbnNwb3J0OiBFdmVudFRyYW5zcG9ydFxuICAgIHJlYWRvbmx5ICNsb2dnZXI6IExvZ2dlclxuICAgIHJlYWRvbmx5ICNpZHM6IENsaWVudEluZm9cbiAgICAjZW1pdHRlZDogRW1pdEJ1ZmZlciA9IHt9XG4gICAgI3NpemUgPSAwXG4gICAgI2ZsdXNoZXI/OiBQcm9taXNlPHZvaWQ+XG4gICAgcmVhZG9ubHkgI2RlYWRsaW5lOiBudW1iZXJcbiAgICAjYnVmZmVyZWQ6IG51bWJlclxuICAgIHJlYWRvbmx5ICNzaWduYWw6IEFib3J0U2lnbmFsXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgdHJhbnNwb3J0OiBFdmVudFRyYW5zcG9ydCxcbiAgICAgICAgbG9nZ2VyOiBMb2dnZXIsXG4gICAgICAgIGlkczogeyBvcGVyYXRpb25JZD86IHN0cmluZzsgY2xpZW50SWQ/OiBzdHJpbmc7IGNsaWVudElwPzogc3RyaW5nOyB1c2VyQWdlbnQ/OiBzdHJpbmcgfSxcbiAgICAgICAgdGltZW91dDogbnVtYmVyLFxuICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLFxuICAgICkge1xuICAgICAgICB0aGlzLiN0cmFuc3BvcnQgPSB0cmFuc3BvcnRcbiAgICAgICAgdGhpcy4jbG9nZ2VyID0gbG9nZ2VyXG4gICAgICAgIHRoaXMuI2lkcyA9IGlkc1xuICAgICAgICB0aGlzLiNkZWFkbGluZSA9IERhdGUubm93KCkgKyB0aW1lb3V0XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkID0gMFxuICAgICAgICB0aGlzLiNzaWduYWwgPSBzaWduYWxcbiAgICB9XG5cbiAgICBlbWl0KG1ldGE6IEV2ZW50TWV0YWRhdGEsIGRhdGE/OiBKc29uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50VGltZSA9IG5ldyBEYXRlKClcbiAgICAgICAgY29uc3QgdGltZUxlZnQgPSB0aGlzLiNkZWFkbGluZSAtIERhdGUubm93KClcbiAgICAgICAgaWYgKHRoaXMuI2J1ZmZlcmVkIC8gdGhpcy4jdHJhbnNwb3J0LnB1Ymxpc2hSYXRlID4gdGltZUxlZnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXZlbnQgb3ZlcmZsb3cuJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudCA9XG4gICAgICAgICAgICBkYXRhID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHsgbWV0YSwgaWRzOiB0aGlzLiNpZHMsIGV2ZW50VGltZSB9XG4gICAgICAgICAgICAgICAgOiB7IG1ldGEsIGlkczogdGhpcy4jaWRzLCBldmVudFRpbWUsIGpzb246IEpTT04uc3RyaW5naWZ5KGRhdGEpIH1cbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy4jZW1pdHRlZFttZXRhLnRvcGljXVxuICAgICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgICAgICBldmVudHMucHVzaChldmVudClcbiAgICAgICAgICAgIGlmIChldmVudHMubGVuZ3RoID4gNjQgfHwgdGhpcy4jc2l6ZSA+IDY0XzAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICAgICAgICAgICAgdm9pZCB0aGlzLmZsdXNoKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2VtaXR0ZWRbbWV0YS50b3BpY10gPSBbZXZlbnRdXG4gICAgICAgIH1cbiAgICAgICAgKyt0aGlzLiNidWZmZXJlZFxuICAgICAgICB0aGlzLiNzaXplICs9IGV2ZW50Lmpzb24/Lmxlbmd0aCA/PyAwXG4gICAgfVxuXG4gICAgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuI3N0YXJ0Rmx1c2godGhpcy4jZW1pdHRlZClcbiAgICAgICAgdGhpcy4jZW1pdHRlZCA9IHt9XG4gICAgICAgIHRoaXMuI3NpemUgPSAwXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLiNmbHVzaGVyXG4gICAgfVxuXG4gICAgI3N0YXJ0Rmx1c2goZW1pdHRlZDogRW1pdEJ1ZmZlcikge1xuICAgICAgICBpZiAodGhpcy4jZmx1c2hlcikge1xuICAgICAgICAgICAgdGhpcy4jZmx1c2hlciA9IHRoaXMuI2ZsdXNoZXIudGhlbigoKSA9PiB0aGlzLiNmbHVzaEV2ZW50cyhlbWl0dGVkKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2ZsdXNoZXIgPSB0aGlzLiNmbHVzaEV2ZW50cyhlbWl0dGVkKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgI2ZsdXNoRXZlbnRzKGVtaXR0ZWQ6IEVtaXRCdWZmZXIpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhlbWl0dGVkKS5tYXAoYXN5bmMgKFt0b3BpYywgZXZlbnRzXSkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuI3RyYW5zcG9ydC5zZW5kRXZlbnRzKHRvcGljLCBldmVudHMsIHRoaXMuI3NpZ25hbClcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2xvZ2dlci5mYXRhbCgnRXJyb3Igc2VuZGluZyBldmVudHMuJywgZSwgeyBldmVudHMgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jYnVmZmVyZWQgLT0gZXZlbnRzLmxlbmd0aFxuICAgICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICB9XG59XG4iXX0=
package/host/http.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import { Context } from '../context.js';
3
2
  import type { Json } from '../http.js';
4
3
  import { ClientInfo, RootLogger } from './context.js';
package/host/http.js CHANGED
@@ -1,4 +1,3 @@
1
- import { parse } from 'node:url';
2
1
  import { measure } from '../context.js';
3
2
  export async function executeRequest(log, context, handler, options, success) {
4
3
  const isShallow = context.env.SHALLOW_KEY && options.headers?.['x-shallow'] === context.env.SHALLOW_KEY;
@@ -21,18 +20,43 @@ export async function executeRequest(log, context, handler, options, success) {
21
20
  const req = {
22
21
  rawUrl: options.uri,
23
22
  get url() {
24
- return (parsedUrl ??= {
25
- ...parse(this.rawUrl, true),
23
+ if (parsedUrl) {
24
+ return parsedUrl;
25
+ }
26
+ const url = new URL(this.rawUrl);
27
+ parsedUrl = {
28
+ // eslint-disable-next-line unicorn/no-null
29
+ __proto__: null,
30
+ hash: url.hash,
31
+ host: url.host,
32
+ hostname: url.hostname,
33
+ href: url.href,
34
+ origin: url.origin,
35
+ password: url.password,
36
+ pathname: url.pathname,
37
+ port: url.port,
38
+ protocol: url.protocol,
39
+ search: url.search,
40
+ get searchParams() {
41
+ return url.searchParams;
42
+ },
43
+ toJSON: () => url.toJSON(),
44
+ toString: () => url.toString(),
45
+ username: url.username,
26
46
  pathStepAt: (index) => {
27
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
28
- const steps = (pathSteps ??= parsedUrl.pathname?.split('/') ?? []);
47
+ const steps = (pathSteps ??= url.pathname.split('/'));
29
48
  const step = steps[index + 1];
30
49
  if (!step) {
31
- throw new RangeError(`Path does not have a step at index ${index}.`);
50
+ throw Object.assign(new RangeError(`Path does not have a step at index ${index}.`), {
51
+ rawUrl: this.rawUrl,
52
+ pathName: url.pathname,
53
+ steps: steps.slice(1),
54
+ });
32
55
  }
33
56
  return step;
34
57
  },
35
- });
58
+ };
59
+ return parsedUrl;
36
60
  },
37
61
  body: requestBody(options),
38
62
  headers: options.headers ?? {},
@@ -209,4 +233,4 @@ export function clientFromHeaders(headers) {
209
233
  userAgent: headers['x-forwarded-for-user-agent'] ?? headers['user-agent'],
210
234
  };
211
235
  }
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImh0dHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBc0IsTUFBTSxVQUFVLENBQUE7QUFDcEQsT0FBTyxFQUFXLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQTBCaEQsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQ2hDLEdBQWUsRUFDZixPQUE2QixFQUM3QixPQUFvQixFQUNwQixPQUF1QixFQUN2QixPQUErQjtJQUUvQixNQUFNLFNBQVMsR0FDWCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUE7SUFDekYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUE7SUFDOUQsTUFBTSxVQUFVLEdBQUcsaUJBQWlCO1FBQ2hDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFO1FBQ3hDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUNoRSxHQUFHLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO0lBQ3JFLElBQUksU0FBUyxFQUFFLENBQUM7UUFDWixHQUFHLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDNUIsT0FBTztZQUNILE9BQU8sRUFBRSxFQUFFO1lBQ1gsTUFBTSxFQUFFLEdBQUc7U0FDZCxDQUFBO0lBQ0wsQ0FBQztJQUNELEdBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFD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QUFFLENBQUM7UUFDbEMsT0FBTztZQUNILE9BQU8sRUFBRTtnQkFDTCxjQUFjLEVBQUUsa0JBQWtCO2FBQ3JDO1lBQ0QsTUFBTSxFQUFFLE1BQU0sSUFBSSxHQUFHO1lBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztTQUM3QixDQUFBO0lBQ0wsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPO1lBQ0gsT0FBTyxFQUFFLEVBQUU7WUFDWCxNQUFNLEVBQUUsTUFBTSxJQUFJLEdBQUc7U0FDeEIsQ0FBQTtJQUNMLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUM3QixPQUF1RDtJQUV2RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDWCxPQUFPLEVBQUUsQ0FBQTtJQUNiLENBQUM7SUFDRCxPQUFPO1FBQ0gsV0FBVyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQzdELFFBQVEsRUFDSixPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztZQUM1QixPQUFPLENBQUMsV0FBVyxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUM5QixRQUFRLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQ3BDLFNBQVMsRUFBRSxPQUFPLENBQUMsNEJBQTRCLENBQUMsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDO0tBQzVFLENBQUE7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGFyc2UsIFVybFdpdGhQYXJzZWRRdWVyeSB9IGZyb20gJ25vZGU6dXJsJ1xuaW1wb3J0IHsgQ29udGV4dCwgbWVhc3VyZSB9IGZyb20gJy4uL2NvbnRleHQuanMnXG5pbXBvcnQgdHlwZSB7IEpzb24sIFJlc3BvbnNlSGVhZGVycywgUmVzdWx0IH0gZnJvbSAnLi4vaHR0cC5qcydcbmltcG9ydCB7IENsaWVudEluZm8sIFJvb3RMb2dnZXIgfSBmcm9tICcuL2NvbnRleHQuanMnXG5pbXBvcnQgdHlwZSB7IEh0dHBIYW5kbGVyIH0gZnJvbSAnLi9yZWdpc3RyeS5qcydcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2UgPSB7XG4gICAgaGVhZGVyczogeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICAgIHN0YXR1czogbnVtYmVyXG4gICAgYm9keT86IHN0cmluZyB8IEJ1ZmZlclxufVxuXG50eXBlIFJlcXVlc3RPcHRpb25zID0gQm9keWxlc3NSZXF1ZXN0T3B0aW9ucyB8IFN0cmluZ1JlcXVlc3RPcHRpb25zIHwgSnNvblJlcXVlc3RPcHRpb25zXG5cbnR5cGUgQm9keWxlc3NSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICB1cmk6IHN0cmluZ1xuICAgIGhlYWRlcnM/OiB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG59XG5cbnR5cGUgU3RyaW5nUmVxdWVzdE9wdGlvbnMgPSBCb2R5bGVzc1JlcXVlc3RPcHRpb25zICYge1xuICAgIGJvZHk6IHN0cmluZ1xufVxuXG50eXBlIEpzb25SZXF1ZXN0T3B0aW9ucyA9IEJvZHlsZXNzUmVxdWVzdE9wdGlvbnMgJiB7XG4gICAganNvbjogSnNvblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVJlcXVlc3QoXG4gICAgbG9nOiBSb290TG9nZ2VyLFxuICAgIGNvbnRleHQ6IE9taXQ8Q29udGV4dCwgJ2xvZyc+LFxuICAgIGhhbmRsZXI6IEh0dHBIYW5kbGVyLFxuICAgIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLFxuICAgIHN1Y2Nlc3M6ICgpID0+IFByb21pc2U8dW5rbm93bj4sXG4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgaXNTaGFsbG93ID1cbiAgICAgICAgY29udGV4dC5lbnYuU0hBTExPV19LRVkgJiYgb3B0aW9ucy5oZWFkZXJzPy5bJ3gtc2hhbGxvdyddID09PSBjb250ZXh0LmVudi5TSEFMTE9XX0tFWVxuICAgIGNvbnN0IGluY2x1ZGVCb2R5SW5Mb2dzID0gIWhhbmRsZXIuY29uZmlnPy5leGNsdWRlQm9keUZyb21Mb2dzXG4gICAgY29uc3QgbG9nUmVxdWVzdCA9IGluY2x1ZGVCb2R5SW5Mb2dzXG4gICAgICAgID8geyBtZXRob2Q6IGhhbmRsZXIubWV0aG9kLCAuLi5vcHRpb25zIH1cbiAgICAgICAgOiB3aXRob3V0UmVxdWVzdEJvZHkoeyBtZXRob2Q6IGhhbmRsZXIubWV0aG9kLCAuLi5vcHRpb25zIH0pXG4gICAgbG9nID0gbG9nLmVucmljaFJlc2VydmVkKHsgbWV0YTogY29udGV4dC5tZXRhLCByZXF1ZXN0OiBsb2dSZXF1ZXN0IH0pXG4gICAgaWYgKGlzU2hhbGxvdykge1xuICAgICAgICBsb2cudHJhY2UoJ1NoYWxsb3cgcmVxdWVzdCcpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgIHN0YXR1czogMjA0LFxuICAgICAgICB9XG4gICAgfVxuICAgIGxvZy50cmFjZSgnUmVxdWVzdCBCRUdJTicpXG4gICAgdHJ5IHtcbiAgICAgICAgbGV0IHBhcnNlZFVybDogKFVybFdpdGhQYXJzZWRRdWVyeSAmIHsgcGF0aFN0ZXBBdDogKGluZGV4OiBudW1iZXIpID0+IHN0cmluZyB9KSB8IHVuZGVmaW5lZFxuICAgICAgICBsZXQgcGF0aFN0ZXBzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICAgICAgICBjb25zdCByZXEgPSB7XG4gICAgICAgICAgICByYXdVcmw6IG9wdGlvbnMudXJpLFxuICAgICAgICAgICAgZ2V0IHVybCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHBhcnNlZFVybCA/Pz0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5wYXJzZSh0aGlzLnJhd1VybCwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIHBhdGhTdGVwQXQ6IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RlcHMgPSAocGF0aFN0ZXBzID8/PSBwYXJzZWRVcmwhLnBhdGhuYW1lPy5zcGxpdCgnLycpID8/IFtdKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RlcCA9IHN0ZXBzW2luZGV4ICsgMV1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RlcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBQYXRoIGRvZXMgbm90IGhhdmUgYSBzdGVwIGF0IGluZGV4ICR7aW5kZXh9LmApXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RlcFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogcmVxdWVzdEJvZHkob3B0aW9ucyksXG4gICAgICAgICAgICBoZWFkZXJzOiBvcHRpb25zLmhlYWRlcnMgPz8ge30sXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtZWFzdXJlKGxvZywgJ2V4ZWN1dGlvbicsICgpID0+XG4gICAgICAgICAgICBoYW5kbGVyLmVudHJ5KHsgLi4uY29udGV4dCwgbG9nIH0sIHJlcSksXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdFRvUmVzcG9uc2UocmVzdWx0LCBpbmNsdWRlQm9keUluTG9ncylcblxuICAgICAgICBpZiAoY29udGV4dC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAneC10aW1lb3V0JzogJzEnLFxuICAgICAgICAgICAgICAgIC4uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2cgPSBsb2cuZW5yaWNoUmVzZXJ2ZWQoe1xuICAgICAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlc3BvbnNlLmxvZ0JvZHksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoJ1JlcXVlc3QgRU5EJylcbiAgICAgICAgICAgIGF3YWl0IHN1Y2Nlc3MoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nLndhcm4oJ1JlcXVlc3QgRU5EJylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGVycm9yVG9SZXNwb25zZShlKVxuICAgICAgICAgICAgbG9nID0gbG9nLmVucmljaFJlc2VydmVkKHsgcmVzcG9uc2UgfSlcbiAgICAgICAgICAgIGxvZy5lcnJvcignUmVxdWVzdCBFTkQnLCBlKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0gY2F0Y2ggKGNvbnZlcnRFcnJvcikge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdDb3VsZCBub3QgY29udmVydCBleGNlcHRpb24gdG8gZXJyb3IgcmVzcG9uc2UuJywgY29udmVydEVycm9yKVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVzdWx0VG9SZXNwb25zZShyZXN1bHQ6IFJlc3VsdCwgd2l0aExvZ0JvZHk6IGJvb2xlYW4pOiBSZXNwb25zZSAmIHsgbG9nQm9keT86IHVua25vd24gfSB7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgc3RhdHVzOiAyMDQsXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IGxvZ0JvZHkgPSB3aXRoTG9nQm9keSA/IHJlc3VsdCA6IHVuZGVmaW5lZFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICBib2R5OiByZXN1bHQsXG4gICAgICAgICAgICBsb2dCb2R5LFxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlc3VsdC5ib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogcmVzdWx0LmhlYWRlcnMgPz8ge30sXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzID8/IDIwMCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdWx0LmJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBsb2dCb2R5ID0gd2l0aExvZ0JvZHkgPyByZXN1bHQuYm9keSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB3aXRoQ29udGVudFR5cGUocmVzdWx0LmhlYWRlcnMsICd0ZXh0L3BsYWluJyksXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzID8/IDIwMCxcbiAgICAgICAgICAgICAgICBib2R5OiByZXN1bHQuYm9keSxcbiAgICAgICAgICAgICAgICBsb2dCb2R5LFxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihyZXN1bHQuYm9keSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ0JvZHkgPSB3aXRoTG9nQm9keSA/IHJlc3VsdC5ib2R5LnRvU3RyaW5nKCdiYXNlNjQnKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB3aXRoQ29udGVudFR5cGUocmVzdWx0LmhlYWRlcnMsICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMgPz8gMjAwLFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlc3VsdC5ib2R5LFxuICAgICAgICAgICAgICAgIGxvZ0JvZHksXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBsb2dCb2R5ID0gd2l0aExvZ0JvZHkgPyByZXN1bHQuYm9keSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB3aXRoQ29udGVudFR5cGUocmVzdWx0LmhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uJyksXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzID8/IDIwMCxcbiAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXN1bHQuYm9keSksXG4gICAgICAgICAgICAgICAgbG9nQm9keSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gd2l0aG91dFJlcXVlc3RCb2R5KG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zICYgeyBtZXRob2Q6IHN0cmluZyB9KSB7XG4gICAgaWYgKGhhc0pzb25Cb2R5KG9wdGlvbnMpKSB7XG4gICAgICAgIGNvbnN0IHsganNvbiwgLi4uYm9keWxlc3MgfSA9IG9wdGlvbnNcbiAgICAgICAgcmV0dXJuIGJvZHlsZXNzXG4gICAgfVxuICAgIGlmIChoYXNTdHJpbmdCb2R5KG9wdGlvbnMpKSB7XG4gICAgICAgIGNvbnN0IHsgYm9keSwgLi4uYm9keWxlc3MgfSA9IG9wdGlvbnNcbiAgICAgICAgcmV0dXJuIGJvZHlsZXNzXG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RCb2R5KG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zKTogSnNvbiB8IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGhhc0pzb25Cb2R5KG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmpzb25cbiAgICB9XG4gICAgaWYgKGhhc1N0cmluZ0JvZHkob3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuYm9keVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGhhc0pzb25Cb2R5KG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zKTogb3B0aW9ucyBpcyBKc29uUmVxdWVzdE9wdGlvbnMge1xuICAgIHJldHVybiAob3B0aW9ucyBhcyB7IGpzb24/OiB1bmtub3duIH0pLmpzb24gIT09IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBoYXNTdHJpbmdCb2R5KG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zKTogb3B0aW9ucyBpcyBTdHJpbmdSZXF1ZXN0T3B0aW9ucyB7XG4gICAgcmV0dXJuIChvcHRpb25zIGFzIHsgYm9keT86IHVua25vd24gfSkuYm9keSAhPT0gdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIHdpdGhDb250ZW50VHlwZShoZWFkZXJzOiBSZXNwb25zZUhlYWRlcnMgfCB1bmRlZmluZWQsIGNvbnRlbnRUeXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoIWhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiBjb250ZW50VHlwZSxcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKSB7XG4gICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gY29udGVudFR5cGVcbiAgICB9XG4gICAgcmV0dXJuIGhlYWRlcnNcbn1cblxuZnVuY3Rpb24gZXJyb3JUb1Jlc3BvbnNlKGU6IHVua25vd24pOiBSZXNwb25zZSB7XG4gICAgY29uc3QgeyBib2R5LCBzdGF0dXNDb2RlOiBzdGF0dXMgfSA9IGUgYXMgeyBib2R5PzogdW5rbm93bjsgc3RhdHVzQ29kZT86IG51bWJlciB9XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPz8gNTAwLFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA/PyA1MDAsXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID8/IDUwMCxcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsaWVudEZyb21IZWFkZXJzKFxuICAgIGhlYWRlcnM6IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQsXG4pOiBDbGllbnRJbmZvIHtcbiAgICBpZiAoIWhlYWRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG9wZXJhdGlvbklkOiBoZWFkZXJzWyd4LXJlcXVlc3QtaWQnXSA/PyBoZWFkZXJzWydyZXF1ZXN0LWlkJ10sXG4gICAgICAgIGNsaWVudElkOlxuICAgICAgICAgICAgaGVhZGVyc1sneC1jbGllbnQtaWQnXSA/P1xuICAgICAgICAgICAgaGVhZGVyc1sneC1pbnN0YWxsYXRpb24taWQnXSA/P1xuICAgICAgICAgICAgaGVhZGVyc1snY2xpZW50LWlkJ10gPz9cbiAgICAgICAgICAgIGhlYWRlcnNbJ2luc3RhbGxhdGlvbi1pZCddLFxuICAgICAgICBjbGllbnRJcDogaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yJ10sXG4gICAgICAgIHVzZXJBZ2VudDogaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yLXVzZXItYWdlbnQnXSA/PyBoZWFkZXJzWyd1c2VyLWFnZW50J10sXG4gICAgfVxufVxuIl19
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImh0dHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFXLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQTBCaEQsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQ2hDLEdBQWUsRUFDZixPQUE2QixFQUM3QixPQUFvQixFQUNwQixPQUF1QixFQUN2QixPQUErQjtJQUUvQixNQUFNLFNBQVMsR0FDWCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUE7SUFDekYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUE7SUFDOUQsTUFBTSxVQUFVLEdBQUcsaUJBQWlCO1FBQ2hDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFO1FBQ3hDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUNoRSxHQUFHLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO0lBQ3JFLElBQUksU0FBUyxFQUFFLENBQUM7UUFDWixHQUFHLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDNUIsT0FBTztZQUNILE9BQU8sRUFBRSxFQUFFO1lBQ1gsTUFBTSxFQUFFLEdBQUc7U0FDZCxDQUFBO0lBQ0wsQ0FBQztJQUNELEdBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDMUIsSUFBSSxDQUFDO1FBQ0QsSUFBSSxTQU9XLENBQUE7UUFDZixJQUFJLFNBQStCLENBQUE7UUFDbkMsTUFBTSxHQUFHLEdBQUc7WUFDUixNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDbkIsSUFBSSxHQUFHO2dCQUNILElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ1osT0FBTyxTQUFTLENBQUE7Z0JBQ3BCLENBQUM7Z0JBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUNoQyxTQUFTLEdBQUc7b0JBQ1IsMkNBQTJDO29CQUMzQyxTQUFTLEVBQUUsSUFBSTtvQkFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7b0JBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO29CQUNkLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtvQkFDdEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO29CQUNkLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtvQkFDbEIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO29CQUN0QixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7b0JBQ3RCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtvQkFDZCxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7b0JBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtvQkFDbEIsSUFBSSxZQUFZO3dCQUNaLE9BQU8sR0FBRyxDQUFDLFlBQVksQ0FBQTtvQkFDM0IsQ0FBQztvQkFDRCxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTtvQkFDMUIsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUU7b0JBQzlCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtvQkFDdEIsVUFBVSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7d0JBQzFCLE1BQU0sS0FBSyxHQUFHLENBQUMsU0FBUyxLQUFLLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7d0JBQ3JELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUE7d0JBQzdCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzs0QkFDUixNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQ2YsSUFBSSxVQUFVLENBQUMsc0NBQXNDLEtBQUssR0FBRyxDQUFDLEVBQzlEO2dDQUNJLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQ0FDbkIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO2dDQUN0QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7NkJBQ3hCLENBQ0osQ0FBQTt3QkFDTCxDQUFDO3dCQUNELE9BQU8sSUFBSSxDQUFBO29CQUNmLENBQUM7aUJBQ0osQ0FBQTtnQkFDRCxPQUFPLFNBQVMsQ0FBQTtZQUNwQixDQUFDO1lBQ0QsSUFBSSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDMUIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRTtTQUNqQyxDQUFBO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FDaEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUMxQyxDQUFBO1FBRUQsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUE7UUFFNUQsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLFFBQVEsQ0FBQyxPQUFPLEdBQUc7Z0JBQ2YsV0FBVyxFQUFFLEdBQUc7Z0JBQ2hCLEdBQUcsUUFBUSxDQUFDLE9BQU87YUFDdEIsQ0FBQTtRQUNMLENBQUM7UUFFRCxHQUFHLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQztZQUNyQixRQUFRLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO2dCQUN2QixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87Z0JBQ3pCLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTzthQUN6QjtTQUNKLENBQUMsQ0FBQTtRQUNGLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBQ3hCLE1BQU0sT0FBTyxFQUFFLENBQUE7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDSixHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQzNCLENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQTtJQUNuQixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNULElBQUksQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNuQyxHQUFHLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7WUFDdEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDM0IsT0FBTyxRQUFRLENBQUE7UUFDbkIsQ0FBQztRQUFDLE9BQU8sWUFBWSxFQUFFLENBQUM7WUFDcEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxnREFBZ0QsRUFBRSxZQUFZLENBQUMsQ0FBQTtZQUN6RSxPQUFPO2dCQUNILE9BQU8sRUFBRSxFQUFFO2dCQUNYLE1BQU0sRUFBRSxHQUFHO2FBQ2QsQ0FBQTtRQUNMLENBQUM7SUFDTCxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsTUFBYyxFQUFFLFdBQW9CO0lBQzFELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNWLE9BQU87WUFDSCxPQUFPLEVBQUUsRUFBRTtZQUNYLE1BQU0sRUFBRSxHQUFHO1NBQ2QsQ0FBQTtJQUNMLENBQUM7U0FBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFDaEQsT0FBTztZQUNILE9BQU8sRUFBRTtnQkFDTCxjQUFjLEVBQUUsWUFBWTthQUMvQjtZQUNELE1BQU0sRUFBRSxHQUFHO1lBQ1gsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPO1NBQ1YsQ0FBQTtJQUNMLENBQUM7U0FBTSxDQUFDO1FBQ0osSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVCLE9BQU87Z0JBQ0gsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRTtnQkFDN0IsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRzthQUMvQixDQUFBO1FBQ0wsQ0FBQzthQUFNLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1lBQ3JELE9BQU87Z0JBQ0gsT0FBTyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztnQkFDdEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRztnQkFDNUIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixPQUFPO2FBQ1YsQ0FBQTtRQUNMLENBQUM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1lBQ3hFLE9BQU87Z0JBQ0gsT0FBTyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLDBCQUEwQixDQUFDO2dCQUNwRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHO2dCQUM1QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLE9BQU87YUFDVixDQUFBO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtZQUNyRCxPQUFPO2dCQUNILE9BQU8sRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQztnQkFDNUQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRztnQkFDNUIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDakMsT0FBTzthQUNWLENBQUE7UUFDTCxDQUFDO0lBQ0wsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLE9BQTRDO0lBQ3BFLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDdkIsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUNyQyxPQUFPLFFBQVEsQ0FBQTtJQUNuQixDQUFDO0lBQ0QsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN6QixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFBO1FBQ3JDLE9BQU8sUUFBUSxDQUFBO0lBQ25CLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQTtBQUNsQixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsT0FBdUI7SUFDeEMsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUE7SUFDdkIsQ0FBQztJQUNELElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFBO0lBQ3ZCLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQTtBQUNwQixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsT0FBdUI7SUFDeEMsT0FBUSxPQUE4QixDQUFDLElBQUksS0FBSyxTQUFTLENBQUE7QUFDN0QsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLE9BQXVCO0lBQzFDLE9BQVEsT0FBOEIsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFBO0FBQzdELENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxPQUFvQyxFQUFFLFdBQW1CO0lBQzlFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNYLE9BQU87WUFDSCxjQUFjLEVBQUUsV0FBVztTQUM5QixDQUFBO0lBQ0wsQ0FBQztJQUNELElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsV0FBVyxDQUFBO0lBQ3pDLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQTtBQUNsQixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsQ0FBVTtJQUMvQixNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUE0QyxDQUFBO0lBQ2pGLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDM0IsT0FBTztZQUNILE9BQU8sRUFBRTtnQkFDTCxjQUFjLEVBQUUsWUFBWTthQUMvQjtZQUNELE1BQU0sRUFBRSxNQUFNLElBQUksR0FBRztZQUNyQixJQUFJO1NBQ1AsQ0FBQTtJQUNMLENBQUM7U0FBTSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLE9BQU87WUFDSCxPQUFPLEVBQUU7Z0JBQ0wsY0FBYyxFQUFFLGtCQUFrQjthQUNyQztZQUNELE1BQU0sRUFBRSxNQUFNLElBQUksR0FBRztZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7U0FDN0IsQ0FBQTtJQUNMLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTztZQUNILE9BQU8sRUFBRSxFQUFFO1lBQ1gsTUFBTSxFQUFFLE1BQU0sSUFBSSxHQUFHO1NBQ3hCLENBQUE7SUFDTCxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDN0IsT0FBdUQ7SUFFdkQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ1gsT0FBTyxFQUFFLENBQUE7SUFDYixDQUFDO0lBQ0QsT0FBTztRQUNILFdBQVcsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQztRQUM3RCxRQUFRLEVBQ0osT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUN0QixPQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDNUIsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUNwQixPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDOUIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUNwQyxTQUFTLEVBQUUsT0FBTyxDQUFDLDRCQUE0QixDQUFDLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQztLQUM1RSxDQUFBO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRleHQsIG1lYXN1cmUgfSBmcm9tICcuLi9jb250ZXh0LmpzJ1xuaW1wb3J0IHR5cGUgeyBKc29uLCBQYXJzZWRVcmwsIFJlc3BvbnNlSGVhZGVycywgUmVzdWx0IH0gZnJvbSAnLi4vaHR0cC5qcydcbmltcG9ydCB7IENsaWVudEluZm8sIFJvb3RMb2dnZXIgfSBmcm9tICcuL2NvbnRleHQuanMnXG5pbXBvcnQgdHlwZSB7IEh0dHBIYW5kbGVyIH0gZnJvbSAnLi9yZWdpc3RyeS5qcydcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2UgPSB7XG4gICAgaGVhZGVyczogeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICAgIHN0YXR1czogbnVtYmVyXG4gICAgYm9keT86IHN0cmluZyB8IEJ1ZmZlclxufVxuXG50eXBlIFJlcXVlc3RPcHRpb25zID0gQm9keWxlc3NSZXF1ZXN0T3B0aW9ucyB8IFN0cmluZ1JlcXVlc3RPcHRpb25zIHwgSnNvblJlcXVlc3RPcHRpb25zXG5cbnR5cGUgQm9keWxlc3NSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICB1cmk6IHN0cmluZ1xuICAgIGhlYWRlcnM/OiB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG59XG5cbnR5cGUgU3RyaW5nUmVxdWVzdE9wdGlvbnMgPSBCb2R5bGVzc1JlcXVlc3RPcHRpb25zICYge1xuICAgIGJvZHk6IHN0cmluZ1xufVxuXG50eXBlIEpzb25SZXF1ZXN0T3B0aW9ucyA9IEJvZHlsZXNzUmVxdWVzdE9wdGlvbnMgJiB7XG4gICAganNvbjogSnNvblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVJlcXVlc3QoXG4gICAgbG9nOiBSb290TG9nZ2VyLFxuICAgIGNvbnRleHQ6IE9taXQ8Q29udGV4dCwgJ2xvZyc+LFxuICAgIGhhbmRsZXI6IEh0dHBIYW5kbGVyLFxuICAgIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLFxuICAgIHN1Y2Nlc3M6ICgpID0+IFByb21pc2U8dW5rbm93bj4sXG4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgaXNTaGFsbG93ID1cbiAgICAgICAgY29udGV4dC5lbnYuU0hBTExPV19LRVkgJiYgb3B0aW9ucy5oZWFkZXJzPy5bJ3gtc2hhbGxvdyddID09PSBjb250ZXh0LmVudi5TSEFMTE9XX0tFWVxuICAgIGNvbnN0IGluY2x1ZGVCb2R5SW5Mb2dzID0gIWhhbmRsZXIuY29uZmlnPy5leGNsdWRlQm9keUZyb21Mb2dzXG4gICAgY29uc3QgbG9nUmVxdWVzdCA9IGluY2x1ZGVCb2R5SW5Mb2dzXG4gICAgICAgID8geyBtZXRob2Q6IGhhbmRsZXIubWV0aG9kLCAuLi5vcHRpb25zIH1cbiAgICAgICAgOiB3aXRob3V0UmVxdWVzdEJvZHkoeyBtZXRob2Q6IGhhbmRsZXIubWV0aG9kLCAuLi5vcHRpb25zIH0pXG4gICAgbG9nID0gbG9nLmVucmljaFJlc2VydmVkKHsgbWV0YTogY29udGV4dC5tZXRhLCByZXF1ZXN0OiBsb2dSZXF1ZXN0IH0pXG4gICAgaWYgKGlzU2hhbGxvdykge1xuICAgICAgICBsb2cudHJhY2UoJ1NoYWxsb3cgcmVxdWVzdCcpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgIHN0YXR1czogMjA0LFxuICAgICAgICB9XG4gICAgfVxuICAgIGxvZy50cmFjZSgnUmVxdWVzdCBCRUdJTicpXG4gICAgdHJ5IHtcbiAgICAgICAgbGV0IHBhcnNlZFVybDpcbiAgICAgICAgICAgIHwgKFBhcnNlZFVybCAmIHtcbiAgICAgICAgICAgICAgICAgIC8qKiBAaWdub3JlICovXG4gICAgICAgICAgICAgICAgICBfX3Byb3RvX186IHVua25vd25cbiAgICAgICAgICAgICAgICAgIC8qKiBAaWdub3JlICovXG4gICAgICAgICAgICAgICAgICB0b1N0cmluZzogKCkgPT4gc3RyaW5nXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB8IHVuZGVmaW5lZFxuICAgICAgICBsZXQgcGF0aFN0ZXBzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICAgICAgICBjb25zdCByZXEgPSB7XG4gICAgICAgICAgICByYXdVcmw6IG9wdGlvbnMudXJpLFxuICAgICAgICAgICAgZ2V0IHVybCgpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWRVcmxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLnJhd1VybClcbiAgICAgICAgICAgICAgICBwYXJzZWRVcmwgPSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLW51bGxcbiAgICAgICAgICAgICAgICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBoYXNoOiB1cmwuaGFzaCxcbiAgICAgICAgICAgICAgICAgICAgaG9zdDogdXJsLmhvc3QsXG4gICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGhyZWY6IHVybC5ocmVmLFxuICAgICAgICAgICAgICAgICAgICBvcmlnaW46IHVybC5vcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkOiB1cmwucGFzc3dvcmQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lOiB1cmwucGF0aG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBvcnQ6IHVybC5wb3J0LFxuICAgICAgICAgICAgICAgICAgICBwcm90b2NvbDogdXJsLnByb3RvY29sLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2g6IHVybC5zZWFyY2gsXG4gICAgICAgICAgICAgICAgICAgIGdldCBzZWFyY2hQYXJhbXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnNlYXJjaFBhcmFtc1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0b0pTT046ICgpID0+IHVybC50b0pTT04oKSxcbiAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmc6ICgpID0+IHVybC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICB1c2VybmFtZTogdXJsLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgICAgICBwYXRoU3RlcEF0OiAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RlcHMgPSAocGF0aFN0ZXBzID8/PSB1cmwucGF0aG5hbWUuc3BsaXQoJy8nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBzdGVwc1tpbmRleCArIDFdXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0ZXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUmFuZ2VFcnJvcihgUGF0aCBkb2VzIG5vdCBoYXZlIGEgc3RlcCBhdCBpbmRleCAke2luZGV4fS5gKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3VXJsOiB0aGlzLnJhd1VybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhOYW1lOiB1cmwucGF0aG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwczogc3RlcHMuc2xpY2UoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZXBcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZFVybFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5KG9wdGlvbnMpLFxuICAgICAgICAgICAgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzID8/IHt9LFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbWVhc3VyZShsb2csICdleGVjdXRpb24nLCAoKSA9PlxuICAgICAgICAgICAgaGFuZGxlci5lbnRyeSh7IC4uLmNvbnRleHQsIGxvZyB9LCByZXEpLFxuICAgICAgICApXG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXN1bHRUb1Jlc3BvbnNlKHJlc3VsdCwgaW5jbHVkZUJvZHlJbkxvZ3MpXG5cbiAgICAgICAgaWYgKGNvbnRleHQuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ3gtdGltZW91dCc6ICcxJyxcbiAgICAgICAgICAgICAgICAuLi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbG9nID0gbG9nLmVucmljaFJlc2VydmVkKHtcbiAgICAgICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZS5sb2dCb2R5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA8IDMwMCkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKCdSZXF1ZXN0IEVORCcpXG4gICAgICAgICAgICBhd2FpdCBzdWNjZXNzKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZy53YXJuKCdSZXF1ZXN0IEVORCcpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBlcnJvclRvUmVzcG9uc2UoZSlcbiAgICAgICAgICAgIGxvZyA9IGxvZy5lbnJpY2hSZXNlcnZlZCh7IHJlc3BvbnNlIH0pXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1JlcXVlc3QgRU5EJywgZSlcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9IGNhdGNoIChjb252ZXJ0RXJyb3IpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignQ291bGQgbm90IGNvbnZlcnQgZXhjZXB0aW9uIHRvIGVycm9yIHJlc3BvbnNlLicsIGNvbnZlcnRFcnJvcilcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VsdFRvUmVzcG9uc2UocmVzdWx0OiBSZXN1bHQsIHdpdGhMb2dCb2R5OiBib29sZWFuKTogUmVzcG9uc2UgJiB7IGxvZ0JvZHk/OiB1bmtub3duIH0ge1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgIHN0YXR1czogMjA0LFxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBsb2dCb2R5ID0gd2l0aExvZ0JvZHkgPyByZXN1bHQgOiB1bmRlZmluZWRcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJzogJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICAgICAgYm9keTogcmVzdWx0LFxuICAgICAgICAgICAgbG9nQm9keSxcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChyZXN1bHQuYm9keSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlc3VsdC5oZWFkZXJzID8/IHt9LFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyA/PyAyMDAsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlc3VsdC5ib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgbG9nQm9keSA9IHdpdGhMb2dCb2R5ID8gcmVzdWx0LmJvZHkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogd2l0aENvbnRlbnRUeXBlKHJlc3VsdC5oZWFkZXJzLCAndGV4dC9wbGFpbicpLFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyA/PyAyMDAsXG4gICAgICAgICAgICAgICAgYm9keTogcmVzdWx0LmJvZHksXG4gICAgICAgICAgICAgICAgbG9nQm9keSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIocmVzdWx0LmJvZHkpKSB7XG4gICAgICAgICAgICBjb25zdCBsb2dCb2R5ID0gd2l0aExvZ0JvZHkgPyByZXN1bHQuYm9keS50b1N0cmluZygnYmFzZTY0JykgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogd2l0aENvbnRlbnRUeXBlKHJlc3VsdC5oZWFkZXJzLCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyksXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzID8/IDIwMCxcbiAgICAgICAgICAgICAgICBib2R5OiByZXN1bHQuYm9keSxcbiAgICAgICAgICAgICAgICBsb2dCb2R5LFxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbG9nQm9keSA9IHdpdGhMb2dCb2R5ID8gcmVzdWx0LmJvZHkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogd2l0aENvbnRlbnRUeXBlKHJlc3VsdC5oZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbicpLFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyA/PyAyMDAsXG4gICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVzdWx0LmJvZHkpLFxuICAgICAgICAgICAgICAgIGxvZ0JvZHksXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHdpdGhvdXRSZXF1ZXN0Qm9keShvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyAmIHsgbWV0aG9kOiBzdHJpbmcgfSkge1xuICAgIGlmIChoYXNKc29uQm9keShvcHRpb25zKSkge1xuICAgICAgICBjb25zdCB7IGpzb24sIC4uLmJvZHlsZXNzIH0gPSBvcHRpb25zXG4gICAgICAgIHJldHVybiBib2R5bGVzc1xuICAgIH1cbiAgICBpZiAoaGFzU3RyaW5nQm9keShvcHRpb25zKSkge1xuICAgICAgICBjb25zdCB7IGJvZHksIC4uLmJvZHlsZXNzIH0gPSBvcHRpb25zXG4gICAgICAgIHJldHVybiBib2R5bGVzc1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0Qm9keShvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyk6IEpzb24gfCBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChoYXNKc29uQm9keShvcHRpb25zKSkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5qc29uXG4gICAgfVxuICAgIGlmIChoYXNTdHJpbmdCb2R5KG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmJvZHlcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBoYXNKc29uQm9keShvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyk6IG9wdGlvbnMgaXMgSnNvblJlcXVlc3RPcHRpb25zIHtcbiAgICByZXR1cm4gKG9wdGlvbnMgYXMgeyBqc29uPzogdW5rbm93biB9KS5qc29uICE9PSB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gaGFzU3RyaW5nQm9keShvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyk6IG9wdGlvbnMgaXMgU3RyaW5nUmVxdWVzdE9wdGlvbnMge1xuICAgIHJldHVybiAob3B0aW9ucyBhcyB7IGJvZHk/OiB1bmtub3duIH0pLmJvZHkgIT09IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiB3aXRoQ29udGVudFR5cGUoaGVhZGVyczogUmVzcG9uc2VIZWFkZXJzIHwgdW5kZWZpbmVkLCBjb250ZW50VHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCFoZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogY29udGVudFR5cGUsXG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFoZWFkZXJzWydjb250ZW50LXR5cGUnXSkge1xuICAgICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IGNvbnRlbnRUeXBlXG4gICAgfVxuICAgIHJldHVybiBoZWFkZXJzXG59XG5cbmZ1bmN0aW9uIGVycm9yVG9SZXNwb25zZShlOiB1bmtub3duKTogUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgYm9keSwgc3RhdHVzQ29kZTogc3RhdHVzIH0gPSBlIGFzIHsgYm9keT86IHVua25vd247IHN0YXR1c0NvZGU/OiBudW1iZXIgfVxuICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJzogJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID8/IDUwMCxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPz8gNTAwLFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA/PyA1MDAsXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGllbnRGcm9tSGVhZGVycyhcbiAgICBoZWFkZXJzOiB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgdW5kZWZpbmVkLFxuKTogQ2xpZW50SW5mbyB7XG4gICAgaWYgKCFoZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBvcGVyYXRpb25JZDogaGVhZGVyc1sneC1yZXF1ZXN0LWlkJ10gPz8gaGVhZGVyc1sncmVxdWVzdC1pZCddLFxuICAgICAgICBjbGllbnRJZDpcbiAgICAgICAgICAgIGhlYWRlcnNbJ3gtY2xpZW50LWlkJ10gPz9cbiAgICAgICAgICAgIGhlYWRlcnNbJ3gtaW5zdGFsbGF0aW9uLWlkJ10gPz9cbiAgICAgICAgICAgIGhlYWRlcnNbJ2NsaWVudC1pZCddID8/XG4gICAgICAgICAgICBoZWFkZXJzWydpbnN0YWxsYXRpb24taWQnXSxcbiAgICAgICAgY2xpZW50SXA6IGhlYWRlcnNbJ3gtZm9yd2FyZGVkLWZvciddLFxuICAgICAgICB1c2VyQWdlbnQ6IGhlYWRlcnNbJ3gtZm9yd2FyZGVkLWZvci11c2VyLWFnZW50J10gPz8gaGVhZGVyc1sndXNlci1hZ2VudCddLFxuICAgIH1cbn1cbiJdfQ==
package/host/logging.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { AbortSignal } from '../context.js';
2
1
  import { LogLevel, LogTransport, RootLogger } from './context.js';
3
2
  export declare function makeLogger(transport: LogTransport, minimumLogLevel: LogLevel | undefined, signal: AbortSignal): RootLogger;
4
3
  export declare function highPrecisionISODate(performanceNow: number): string;
package/host/logging.js CHANGED
@@ -1,14 +1,14 @@
1
- import { performance } from 'perf_hooks';
1
+ import { performance } from 'node:perf_hooks';
2
2
  export function makeLogger(transport, minimumLogLevel, signal) {
3
3
  return new EnrichingLogger(new LogBuffer(transport, signal), minimumLogLevel
4
4
  ? ['fatal', 'error', 'warning', 'info', 'debug', 'trace'].indexOf(minimumLogLevel)
5
5
  : 5, signal);
6
6
  }
7
- const performanceTimeOrigin100ns = Math.round(performance.timeOrigin * 10000);
7
+ const performanceTimeOrigin100ns = Math.round(performance.timeOrigin * 10_000);
8
8
  export function highPrecisionISODate(performanceNow) {
9
- const now100ns = performanceTimeOrigin100ns + Math.round(performanceNow * 10000);
10
- return (new Date(now100ns / 10000).toISOString().substring(0, 20) +
11
- (now100ns % 10000000).toString().padStart(7, '0') +
9
+ const now100ns = performanceTimeOrigin100ns + Math.round(performanceNow * 10_000);
10
+ return (new Date(now100ns / 10_000).toISOString().slice(0, 20) +
11
+ (now100ns % 10_000_000).toString().padStart(7, '0') +
12
12
  'Z');
13
13
  }
14
14
  class LogBuffer {
@@ -31,13 +31,7 @@ class LogBuffer {
31
31
  message,
32
32
  error: errorAsJson(error),
33
33
  ...reservedEnrichment,
34
- ...((!!fields || !!customEnrichment) && {
35
- fields: customEnrichment
36
- ? fields
37
- ? { ...customEnrichment, ...fields }
38
- : customEnrichment
39
- : fields,
40
- }),
34
+ ...extra(fields, customEnrichment),
41
35
  });
42
36
  this.#entries.push({
43
37
  timestamp: offset,
@@ -71,7 +65,7 @@ class LogBuffer {
71
65
  });
72
66
  }
73
67
  else {
74
- if (numericLogLevel < 2 || this.#entries.length > 8 || this.#size > 64000) {
68
+ if (numericLogLevel < 2 || this.#entries.length > 8 || this.#size > 64_000) {
75
69
  // eslint-disable-next-line no-void
76
70
  void this.flush();
77
71
  }
@@ -106,6 +100,18 @@ class LogBuffer {
106
100
  }
107
101
  }
108
102
  }
103
+ function extra(fields, customEnrichment) {
104
+ if (!fields) {
105
+ if (!customEnrichment) {
106
+ return undefined;
107
+ }
108
+ return customEnrichment;
109
+ }
110
+ if (!customEnrichment) {
111
+ return fields;
112
+ }
113
+ return { ...customEnrichment, ...fields };
114
+ }
109
115
  class EnrichingLogger {
110
116
  #buffer;
111
117
  #reservedEnrichment;
@@ -119,7 +125,7 @@ class EnrichingLogger {
119
125
  }
120
126
  enrich(fields) {
121
127
  return new EnrichingLogger(this.#buffer, this.#level, this.#reservedEnrichment, {
122
- ...(this.#customEnrichment ?? {}),
128
+ ...this.#customEnrichment,
123
129
  ...fields,
124
130
  });
125
131
  }
@@ -128,7 +134,7 @@ class EnrichingLogger {
128
134
  }
129
135
  enrichReserved(fields) {
130
136
  return new EnrichingLogger(this.#buffer, this.#level, {
131
- ...(this.#reservedEnrichment ?? {}),
137
+ ...this.#reservedEnrichment,
132
138
  ...fields,
133
139
  }, this.#customEnrichment);
134
140
  }
@@ -188,4 +194,4 @@ function errorAsJson(error) {
188
194
  name: typeof error,
189
195
  };
190
196
  }
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxvZ2dpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUl4QyxNQUFNLFVBQVUsVUFBVSxDQUN0QixTQUF1QixFQUN2QixlQUFxQyxFQUNyQyxNQUFtQjtJQUVuQixPQUFPLElBQUksZUFBZSxDQUN0QixJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQ2hDLGVBQWU7UUFDWCxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7UUFDbEYsQ0FBQyxDQUFDLENBQUMsRUFDUCxNQUFNLENBQ1QsQ0FBQTtBQUNMLENBQUM7QUFFRCxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQTtBQUU3RSxNQUFNLFVBQVUsb0JBQW9CLENBQUMsY0FBc0I7SUFDdkQsTUFBTSxRQUFRLEdBQUcsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUE7SUFDaEYsT0FBTyxDQUNILElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN6RCxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUNqRCxHQUFHLENBQ04sQ0FBQTtBQUNMLENBQUM7QUFFRCxNQUFNLFNBQVM7SUFDRixVQUFVLENBQWM7SUFDakMsUUFBUSxHQUFlLEVBQUUsQ0FBQTtJQUN6QixLQUFLLEdBQUcsQ0FB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b250ZW50IjpbImltcG9ydCB7IHBlcmZvcm1hbmNlIH0gZnJvbSAncGVyZl9ob29rcydcbmltcG9ydCB7IEFib3J0U2lnbmFsLCBKc29uLCBMb2dnZXIgfSBmcm9tICcuLi9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgTG9nRW50cnksIExvZ0xldmVsLCBMb2dUcmFuc3BvcnQsIFJvb3RMb2dnZXIgfSBmcm9tICcuL2NvbnRleHQuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9nZ2VyKFxuICAgIHRyYW5zcG9ydDogTG9nVHJhbnNwb3J0LFxuICAgIG1pbmltdW1Mb2dMZXZlbDogTG9nTGV2ZWwgfCB1bmRlZmluZWQsXG4gICAgc2lnbmFsOiBBYm9ydFNpZ25hbCxcbik6IFJvb3RMb2dnZXIge1xuICAgIHJldHVybiBuZXcgRW5yaWNoaW5nTG9nZ2VyKFxuICAgICAgICBuZXcgTG9nQnVmZmVyKHRyYW5zcG9ydCwgc2lnbmFsKSxcbiAgICAgICAgbWluaW11bUxvZ0xldmVsXG4gICAgICAgICAgICA/IFsnZmF0YWwnLCAnZXJyb3InLCAnd2FybmluZycsICdpbmZvJywgJ2RlYnVnJywgJ3RyYWNlJ10uaW5kZXhPZihtaW5pbXVtTG9nTGV2ZWwpXG4gICAgICAgICAgICA6IDUsXG4gICAgICAgIHNpZ25hbCxcbiAgICApXG59XG5cbmNvbnN0IHBlcmZvcm1hbmNlVGltZU9yaWdpbjEwMG5zID0gTWF0aC5yb3VuZChwZXJmb3JtYW5jZS50aW1lT3JpZ2luICogMTAwMDApXG5cbmV4cG9ydCBmdW5jdGlvbiBoaWdoUHJlY2lzaW9uSVNPRGF0ZShwZXJmb3JtYW5jZU5vdzogbnVtYmVyKSB7XG4gICAgY29uc3Qgbm93MTAwbnMgPSBwZXJmb3JtYW5jZVRpbWVPcmlnaW4xMDBucyArIE1hdGgucm91bmQocGVyZm9ybWFuY2VOb3cgKiAxMDAwMClcbiAgICByZXR1cm4gKFxuICAgICAgICBuZXcgRGF0ZShub3cxMDBucyAvIDEwMDAwKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAyMCkgK1xuICAgICAgICAobm93MTAwbnMgJSAxMDAwMDAwMCkudG9TdHJpbmcoKS5wYWRTdGFydCg3LCAnMCcpICtcbiAgICAgICAgJ1onXG4gICAgKVxufVxuXG5jbGFzcyBMb2dCdWZmZXIge1xuICAgIHJlYWRvbmx5ICN0cmFuc3BvcnQ6IExvZ1RyYW5zcG9ydFxuICAgICNlbnRyaWVzOiBMb2dFbnRyeVtdID0gW11cbiAgICAjc2l6ZSA9IDBcbiAgICAjZmx1c2hlcj86IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWRcbiAgICByZWFkb25seSAjc2lnbmFsOiBBYm9ydFNpZ25hbFxuICAgICNhc3luY1RyYW5zcG9ydDogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAgICN0aW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZFxuXG4gICAgY29uc3RydWN0b3IodHJhbnNwb3J0OiBMb2dUcmFuc3BvcnQsIHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgICAgICAgdGhpcy4jdHJhbnNwb3J0ID0gdHJhbnNwb3J0XG4gICAgICAgIHRoaXMuI3NpZ25hbCA9IHNpZ25hbFxuICAgIH1cblxuICAgIGNvbGxlY3QoXG4gICAgICAgIGxldmVsOiBMb2dMZXZlbCxcbiAgICAgICAgbnVtZXJpY0xvZ0xldmVsOiBudW1iZXIsXG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgICAgZXJyb3I6IHVua25vd24sXG4gICAgICAgIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkLFxuICAgICAgICByZXNlcnZlZEVucmljaG1lbnQ6IG9iamVjdCB8IHVuZGVmaW5lZCxcbiAgICAgICAgY3VzdG9tRW5yaWNobWVudDogb2JqZWN0IHwgdW5kZWZpbmVkLFxuICAgICkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgdGltZXN0YW1wOiBoaWdoUHJlY2lzaW9uSVNPRGF0ZShvZmZzZXQpLFxuICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yQXNKc29uKGVycm9yKSxcbiAgICAgICAgICAgIC4uLnJlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgIC4uLigoISFmaWVsZHMgfHwgISFjdXN0b21FbnJpY2htZW50KSAmJiB7XG4gICAgICAgICAgICAgICAgZmllbGRzOiBjdXN0b21FbnJpY2htZW50XG4gICAgICAgICAgICAgICAgICAgID8gZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHsgLi4uY3VzdG9tRW5yaWNobWVudCwgLi4uZmllbGRzIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogY3VzdG9tRW5yaWNobWVudFxuICAgICAgICAgICAgICAgICAgICA6IGZpZWxkcyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KVxuICAgICAgICB0aGlzLiNlbnRyaWVzLnB1c2goe1xuICAgICAgICAgICAgdGltZXN0YW1wOiBvZmZzZXQsXG4gICAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIGpzb24sXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuI3NpemUgKz0ganNvbi5sZW5ndGhcblxuICAgICAgICBpZiAodGhpcy4jYXN5bmNUcmFuc3BvcnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgICAgICAgdm9pZCB0aGlzLiN0cmFuc3BvcnQuc2VuZEVudHJpZXModGhpcy4jZW50cmllcywgdGhpcy4jc2lnbmFsKVxuICAgICAgICAgICAgdGhpcy4jZW50cmllcyA9IFtdXG4gICAgICAgICAgICB0aGlzLiNzaXplID0gMFxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2FzeW5jVHJhbnNwb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuI2FzeW5jVHJhbnNwb3J0ID0gdHJ1ZVxuICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jZmx1c2hlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VuZFJlc3VsdCA9IHRoaXMuI3RyYW5zcG9ydC5zZW5kRW50cmllcyh0aGlzLiNlbnRyaWVzLCB0aGlzLiNzaWduYWwpXG4gICAgICAgICAgICAgICAgdGhpcy4jZW50cmllcyA9IFtdXG4gICAgICAgICAgICAgICAgdGhpcy4jc2l6ZSA9IDBcbiAgICAgICAgICAgICAgICBpZiAoc2VuZFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNmbHVzaGVyID0gc2VuZFJlc3VsdFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2FzeW5jVHJhbnNwb3J0ID0gZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG51bWVyaWNMb2dMZXZlbCA8IDIgfHwgdGhpcy4jZW50cmllcy5sZW5ndGggPiA4IHx8IHRoaXMuI3NpemUgPiA2NDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICAgICAgICAgICAgdm9pZCB0aGlzLmZsdXNoKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgICAgICAgICAgICAgICB2b2lkIHRoaXMuZmx1c2goKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiN0aW1lb3V0ID0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSwgMjAwMClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy4jZW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3N0YXJ0Rmx1c2godGhpcy4jZW50cmllcylcbiAgICAgICAgdGhpcy4jZW50cmllcyA9IFtdXG4gICAgICAgIHRoaXMuI3NpemUgPSAwXG4gICAgICAgIGlmICh0aGlzLiN0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy4jdGltZW91dClcbiAgICAgICAgICAgIHRoaXMuI3RpbWVvdXQgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy4jZmx1c2hlclxuICAgIH1cblxuICAgICNzdGFydEZsdXNoKGVudHJpZXM6IExvZ0VudHJ5W10pIHtcbiAgICAgICAgaWYgKHRoaXMuI2ZsdXNoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI2ZsdXNoZXIgPSB0aGlzLiNmbHVzaGVyLnRoZW4oKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLiN0cmFuc3BvcnQuc2VuZEVudHJpZXMoZW50cmllcywgdGhpcy4jc2lnbmFsKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2ZsdXNoZXIgPSB0aGlzLiN0cmFuc3BvcnQuc2VuZEVudHJpZXMoZW50cmllcywgdGhpcy4jc2lnbmFsKVxuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBFbnJpY2hpbmdMb2dnZXIgaW1wbGVtZW50cyBMb2dnZXIge1xuICAgIHJlYWRvbmx5ICNidWZmZXI6IExvZ0J1ZmZlclxuICAgIHJlYWRvbmx5ICNyZXNlcnZlZEVucmljaG1lbnQ/OiBvYmplY3RcbiAgICByZWFkb25seSAjY3VzdG9tRW5yaWNobWVudD86IG9iamVjdFxuICAgIHJlYWRvbmx5ICNsZXZlbDogbnVtYmVyXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgYnVmZmVyOiBMb2dCdWZmZXIsXG4gICAgICAgIGxldmVsOiBudW1iZXIsXG4gICAgICAgIHJlc2VydmVkRW5yaWNobWVudD86IG9iamVjdCxcbiAgICAgICAgY3VzdG9tRW5yaWNobWVudD86IG9iamVjdCxcbiAgICApIHtcbiAgICAgICAgdGhpcy4jYnVmZmVyID0gYnVmZmVyXG4gICAgICAgIHRoaXMuI2xldmVsID0gbGV2ZWxcbiAgICAgICAgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50ID0gcmVzZXJ2ZWRFbnJpY2htZW50XG4gICAgICAgIHRoaXMuI2N1c3RvbUVucmljaG1lbnQgPSBjdXN0b21FbnJpY2htZW50XG4gICAgfVxuXG4gICAgZW5yaWNoKGZpZWxkczogb2JqZWN0KTogTG9nZ2VyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFbnJpY2hpbmdMb2dnZXIodGhpcy4jYnVmZmVyLCB0aGlzLiNsZXZlbCwgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LCB7XG4gICAgICAgICAgICAuLi4odGhpcy4jY3VzdG9tRW5yaWNobWVudCA/PyB7fSksXG4gICAgICAgICAgICAuLi5maWVsZHMsXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZmx1c2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNidWZmZXIuZmx1c2goKVxuICAgIH1cblxuICAgIGVucmljaFJlc2VydmVkKGZpZWxkczogb2JqZWN0KTogRW5yaWNoaW5nTG9nZ2VyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFbnJpY2hpbmdMb2dnZXIoXG4gICAgICAgICAgICB0aGlzLiNidWZmZXIsXG4gICAgICAgICAgICB0aGlzLiNsZXZlbCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi4odGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50ID8/IHt9KSxcbiAgICAgICAgICAgICAgICAuLi5maWVsZHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy4jY3VzdG9tRW5yaWNobWVudCxcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHRyYWNlKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLiNsZXZlbCA8IDUpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2J1ZmZlci5jb2xsZWN0KFxuICAgICAgICAgICAgJ3RyYWNlJyxcbiAgICAgICAgICAgIDUsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICB0aGlzLiNyZXNlcnZlZEVucmljaG1lbnQsXG4gICAgICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50LFxuICAgICAgICApXG4gICAgfVxuICAgIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLiNsZXZlbCA8IDQpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2J1ZmZlci5jb2xsZWN0KFxuICAgICAgICAgICAgJ2RlYnVnJyxcbiAgICAgICAgICAgIDQsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICB0aGlzLiNyZXNlcnZlZEVucmljaG1lbnQsXG4gICAgICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50LFxuICAgICAgICApXG4gICAgfVxuICAgIGluZm8obWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuI2xldmVsIDwgMykge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXG4gICAgICAgICAgICAnaW5mbycsXG4gICAgICAgICAgICAzLFxuICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgZmllbGRzLFxuICAgICAgICAgICAgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LFxuICAgICAgICAgICAgdGhpcy4jY3VzdG9tRW5yaWNobWVudCxcbiAgICAgICAgKVxuICAgIH1cbiAgICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLiNsZXZlbCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2J1ZmZlci5jb2xsZWN0KFxuICAgICAgICAgICAgJ3dhcm5pbmcnLFxuICAgICAgICAgICAgMixcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgIHRoaXMuI2N1c3RvbUVucmljaG1lbnQsXG4gICAgICAgIClcbiAgICB9XG4gICAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuI2xldmVsIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXG4gICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgIHRoaXMuI2N1c3RvbUVucmljaG1lbnQsXG4gICAgICAgIClcbiAgICB9XG4gICAgZmF0YWwobWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXG4gICAgICAgICAgICAnZmF0YWwnLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgIHRoaXMuI2N1c3RvbUVucmljaG1lbnQsXG4gICAgICAgIClcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVycm9yQXNKc29uKGVycm9yOiB1bmtub3duKTogSnNvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGVycm9yID09PSB1bmRlZmluZWQgfHwgZXJyb3IgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2ssXG4gICAgICAgICAgICAuLi4oZXJyb3IgYXMgdW5rbm93biBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSksXG4gICAgICAgIH0gYXMgSnNvblxuICAgIH1cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmVycm9yLFxuICAgICAgICB9IGFzIEpzb25cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWVzc2FnZTogKGVycm9yIGFzIG9iamVjdCB8IHVuZGVmaW5lZCk/LnRvU3RyaW5nKCksXG4gICAgICAgIG5hbWU6IHR5cGVvZiBlcnJvcixcbiAgICB9IGFzIEpzb25cbn1cbiJdfQ==
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxvZ2dpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBSTdDLE1BQU0sVUFBVSxVQUFVLENBQ3RCLFNBQXVCLEVBQ3ZCLGVBQXFDLEVBQ3JDLE1BQW1CO0lBRW5CLE9BQU8sSUFBSSxlQUFlLENBQ3RCLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFDaEMsZUFBZTtRQUNYLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUNsRixDQUFDLENBQUMsQ0FBQyxFQUNQLE1BQU0sQ0FDVCxDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFBO0FBRTlFLE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxjQUFzQjtJQUN2RCxNQUFNLFFBQVEsR0FBRywwQkFBMEIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsQ0FBQTtJQUNqRixPQUFPLENBQ0gsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RELENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ25ELEdBQUcsQ0FDTixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sU0FBUztJQUNGLFVBQVUsQ0FBYztJQUNqQyxRQUFRLEdBQWUsRUFBRSxDQUFBO0lBQ3pCLEtBQUssR0FBRyxD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TSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU07UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2hCLE9BQU8sRUFDUCxDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBMEI7UUFDN0QsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU07UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2hCLE9BQU8sRUFDUCxDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0lBQ0QsSUFBSSxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBMEI7UUFDNUQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU07UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2hCLE1BQU0sRUFDTixDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0lBQ0QsSUFBSSxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBMEI7UUFDNUQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU07UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2hCLFNBQVMsRUFDVCxDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBMEI7UUFDN0QsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU07UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2hCLE9BQU8sRUFDUCxDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBMEI7UUFDN0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2hCLE9BQU8sRUFDUCxDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0NBQ0o7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFjO0lBQy9CLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDeEMsT0FBTyxTQUFTLENBQUE7SUFDcEIsQ0FBQztJQUNELElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE9BQU87WUFDSCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztZQUNsQixHQUFJLEtBQStDO1NBQzlDLENBQUE7SUFDYixDQUFDO0lBQ0QsSUFBSSxLQUFLLFlBQVksTUFBTSxFQUFFLENBQUM7UUFDMUIsT0FBTztZQUNILEdBQUcsS0FBSztTQUNILENBQUE7SUFDYixDQUFDO0lBQ0QsT0FBTztRQUNILE9BQU8sRUFBRyxLQUE0QixFQUFFLFFBQVEsRUFBRTtRQUNsRCxJQUFJLEVBQUUsT0FBTyxLQUFLO0tBQ2IsQ0FBQTtBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwZXJmb3JtYW5jZSB9IGZyb20gJ25vZGU6cGVyZl9ob29rcydcbmltcG9ydCB7IEpzb24sIExvZ2dlciB9IGZyb20gJy4uL2NvbnRleHQuanMnXG5pbXBvcnQgeyBMb2dFbnRyeSwgTG9nTGV2ZWwsIExvZ1RyYW5zcG9ydCwgUm9vdExvZ2dlciB9IGZyb20gJy4vY29udGV4dC5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VMb2dnZXIoXG4gICAgdHJhbnNwb3J0OiBMb2dUcmFuc3BvcnQsXG4gICAgbWluaW11bUxvZ0xldmVsOiBMb2dMZXZlbCB8IHVuZGVmaW5lZCxcbiAgICBzaWduYWw6IEFib3J0U2lnbmFsLFxuKTogUm9vdExvZ2dlciB7XG4gICAgcmV0dXJuIG5ldyBFbnJpY2hpbmdMb2dnZXIoXG4gICAgICAgIG5ldyBMb2dCdWZmZXIodHJhbnNwb3J0LCBzaWduYWwpLFxuICAgICAgICBtaW5pbXVtTG9nTGV2ZWxcbiAgICAgICAgICAgID8gWydmYXRhbCcsICdlcnJvcicsICd3YXJuaW5nJywgJ2luZm8nLCAnZGVidWcnLCAndHJhY2UnXS5pbmRleE9mKG1pbmltdW1Mb2dMZXZlbClcbiAgICAgICAgICAgIDogNSxcbiAgICAgICAgc2lnbmFsLFxuICAgIClcbn1cblxuY29uc3QgcGVyZm9ybWFuY2VUaW1lT3JpZ2luMTAwbnMgPSBNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKiAxMF8wMDApXG5cbmV4cG9ydCBmdW5jdGlvbiBoaWdoUHJlY2lzaW9uSVNPRGF0ZShwZXJmb3JtYW5jZU5vdzogbnVtYmVyKSB7XG4gICAgY29uc3Qgbm93MTAwbnMgPSBwZXJmb3JtYW5jZVRpbWVPcmlnaW4xMDBucyArIE1hdGgucm91bmQocGVyZm9ybWFuY2VOb3cgKiAxMF8wMDApXG4gICAgcmV0dXJuIChcbiAgICAgICAgbmV3IERhdGUobm93MTAwbnMgLyAxMF8wMDApLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMjApICtcbiAgICAgICAgKG5vdzEwMG5zICUgMTBfMDAwXzAwMCkudG9TdHJpbmcoKS5wYWRTdGFydCg3LCAnMCcpICtcbiAgICAgICAgJ1onXG4gICAgKVxufVxuXG5jbGFzcyBMb2dCdWZmZXIge1xuICAgIHJlYWRvbmx5ICN0cmFuc3BvcnQ6IExvZ1RyYW5zcG9ydFxuICAgICNlbnRyaWVzOiBMb2dFbnRyeVtdID0gW11cbiAgICAjc2l6ZSA9IDBcbiAgICAjZmx1c2hlcj86IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWRcbiAgICByZWFkb25seSAjc2lnbmFsOiBBYm9ydFNpZ25hbFxuICAgICNhc3luY1RyYW5zcG9ydDogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAgICN0aW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZFxuXG4gICAgY29uc3RydWN0b3IodHJhbnNwb3J0OiBMb2dUcmFuc3BvcnQsIHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgICAgICAgdGhpcy4jdHJhbnNwb3J0ID0gdHJhbnNwb3J0XG4gICAgICAgIHRoaXMuI3NpZ25hbCA9IHNpZ25hbFxuICAgIH1cblxuICAgIGNvbGxlY3QoXG4gICAgICAgIGxldmVsOiBMb2dMZXZlbCxcbiAgICAgICAgbnVtZXJpY0xvZ0xldmVsOiBudW1iZXIsXG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgICAgZXJyb3I6IHVua25vd24sXG4gICAgICAgIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkLFxuICAgICAgICByZXNlcnZlZEVucmljaG1lbnQ6IG9iamVjdCB8IHVuZGVmaW5lZCxcbiAgICAgICAgY3VzdG9tRW5yaWNobWVudDogb2JqZWN0IHwgdW5kZWZpbmVkLFxuICAgICkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgdGltZXN0YW1wOiBoaWdoUHJlY2lzaW9uSVNPRGF0ZShvZmZzZXQpLFxuICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yQXNKc29uKGVycm9yKSxcbiAgICAgICAgICAgIC4uLnJlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgIC4uLmV4dHJhKGZpZWxkcywgY3VzdG9tRW5yaWNobWVudCksXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuI2VudHJpZXMucHVzaCh7XG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9mZnNldCxcbiAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAganNvbixcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy4jc2l6ZSArPSBqc29uLmxlbmd0aFxuXG4gICAgICAgIGlmICh0aGlzLiNhc3luY1RyYW5zcG9ydCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICAgICAgICB2b2lkIHRoaXMuI3RyYW5zcG9ydC5zZW5kRW50cmllcyh0aGlzLiNlbnRyaWVzLCB0aGlzLiNzaWduYWwpXG4gICAgICAgICAgICB0aGlzLiNlbnRyaWVzID0gW11cbiAgICAgICAgICAgIHRoaXMuI3NpemUgPSAwXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jYXN5bmNUcmFuc3BvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy4jYXN5bmNUcmFuc3BvcnQgPSB0cnVlXG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNmbHVzaGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzZW5kUmVzdWx0ID0gdGhpcy4jdHJhbnNwb3J0LnNlbmRFbnRyaWVzKHRoaXMuI2VudHJpZXMsIHRoaXMuI3NpZ25hbClcbiAgICAgICAgICAgICAgICB0aGlzLiNlbnRyaWVzID0gW11cbiAgICAgICAgICAgICAgICB0aGlzLiNzaXplID0gMFxuICAgICAgICAgICAgICAgIGlmIChzZW5kUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2ZsdXNoZXIgPSBzZW5kUmVzdWx0XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jYXN5bmNUcmFuc3BvcnQgPSBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobnVtZXJpY0xvZ0xldmVsIDwgMiB8fCB0aGlzLiNlbnRyaWVzLmxlbmd0aCA+IDggfHwgdGhpcy4jc2l6ZSA+IDY0XzAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICAgICAgICAgICAgdm9pZCB0aGlzLmZsdXNoKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgICAgICAgICAgICAgICB2b2lkIHRoaXMuZmx1c2goKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiN0aW1lb3V0ID0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSwgMjAwMClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy4jZW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3N0YXJ0Rmx1c2godGhpcy4jZW50cmllcylcbiAgICAgICAgdGhpcy4jZW50cmllcyA9IFtdXG4gICAgICAgIHRoaXMuI3NpemUgPSAwXG4gICAgICAgIGlmICh0aGlzLiN0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy4jdGltZW91dClcbiAgICAgICAgICAgIHRoaXMuI3RpbWVvdXQgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy4jZmx1c2hlclxuICAgIH1cblxuICAgICNzdGFydEZsdXNoKGVudHJpZXM6IExvZ0VudHJ5W10pIHtcbiAgICAgICAgaWYgKHRoaXMuI2ZsdXNoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI2ZsdXNoZXIgPSB0aGlzLiNmbHVzaGVyLnRoZW4oKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLiN0cmFuc3BvcnQuc2VuZEVudHJpZXMoZW50cmllcywgdGhpcy4jc2lnbmFsKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2ZsdXNoZXIgPSB0aGlzLiN0cmFuc3BvcnQuc2VuZEVudHJpZXMoZW50cmllcywgdGhpcy4jc2lnbmFsKVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBleHRyYShmaWVsZHM6IG9iamVjdCB8IHVuZGVmaW5lZCwgY3VzdG9tRW5yaWNobWVudDogb2JqZWN0IHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgaWYgKCFjdXN0b21FbnJpY2htZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1c3RvbUVucmljaG1lbnRcbiAgICB9XG4gICAgaWYgKCFjdXN0b21FbnJpY2htZW50KSB7XG4gICAgICAgIHJldHVybiBmaWVsZHNcbiAgICB9XG4gICAgcmV0dXJuIHsgLi4uY3VzdG9tRW5yaWNobWVudCwgLi4uZmllbGRzIH1cbn1cblxuY2xhc3MgRW5yaWNoaW5nTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyIHtcbiAgICByZWFkb25seSAjYnVmZmVyOiBMb2dCdWZmZXJcbiAgICByZWFkb25seSAjcmVzZXJ2ZWRFbnJpY2htZW50Pzogb2JqZWN0XG4gICAgcmVhZG9ubHkgI2N1c3RvbUVucmljaG1lbnQ/OiBvYmplY3RcbiAgICByZWFkb25seSAjbGV2ZWw6IG51bWJlclxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGJ1ZmZlcjogTG9nQnVmZmVyLFxuICAgICAgICBsZXZlbDogbnVtYmVyLFxuICAgICAgICByZXNlcnZlZEVucmljaG1lbnQ/OiBvYmplY3QsXG4gICAgICAgIGN1c3RvbUVucmljaG1lbnQ/OiBvYmplY3QsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuI2J1ZmZlciA9IGJ1ZmZlclxuICAgICAgICB0aGlzLiNsZXZlbCA9IGxldmVsXG4gICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCA9IHJlc2VydmVkRW5yaWNobWVudFxuICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50ID0gY3VzdG9tRW5yaWNobWVudFxuICAgIH1cblxuICAgIGVucmljaChmaWVsZHM6IG9iamVjdCk6IExvZ2dlciB7XG4gICAgICAgIHJldHVybiBuZXcgRW5yaWNoaW5nTG9nZ2VyKHRoaXMuI2J1ZmZlciwgdGhpcy4jbGV2ZWwsIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCwge1xuICAgICAgICAgICAgLi4udGhpcy4jY3VzdG9tRW5yaWNobWVudCxcbiAgICAgICAgICAgIC4uLmZpZWxkcyxcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBmbHVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2J1ZmZlci5mbHVzaCgpXG4gICAgfVxuXG4gICAgZW5yaWNoUmVzZXJ2ZWQoZmllbGRzOiBvYmplY3QpOiBFbnJpY2hpbmdMb2dnZXIge1xuICAgICAgICByZXR1cm4gbmV3IEVucmljaGluZ0xvZ2dlcihcbiAgICAgICAgICAgIHRoaXMuI2J1ZmZlcixcbiAgICAgICAgICAgIHRoaXMuI2xldmVsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgICAgICAuLi5maWVsZHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy4jY3VzdG9tRW5yaWNobWVudCxcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHRyYWNlKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLiNsZXZlbCA8IDUpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2J1ZmZlci5jb2xsZWN0KFxuICAgICAgICAgICAgJ3RyYWNlJyxcbiAgICAgICAgICAgIDUsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICB0aGlzLiNyZXNlcnZlZEVucmljaG1lbnQsXG4gICAgICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50LFxuICAgICAgICApXG4gICAgfVxuICAgIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLiNsZXZlbCA8IDQpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2J1ZmZlci5jb2xsZWN0KFxuICAgICAgICAgICAgJ2RlYnVnJyxcbiAgICAgICAgICAgIDQsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICB0aGlzLiNyZXNlcnZlZEVucmljaG1lbnQsXG4gICAgICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50LFxuICAgICAgICApXG4gICAgfVxuICAgIGluZm8obWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuI2xldmVsIDwgMykge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXG4gICAgICAgICAgICAnaW5mbycsXG4gICAgICAgICAgICAzLFxuICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgZmllbGRzLFxuICAgICAgICAgICAgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LFxuICAgICAgICAgICAgdGhpcy4jY3VzdG9tRW5yaWNobWVudCxcbiAgICAgICAgKVxuICAgIH1cbiAgICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLiNsZXZlbCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2J1ZmZlci5jb2xsZWN0KFxuICAgICAgICAgICAgJ3dhcm5pbmcnLFxuICAgICAgICAgICAgMixcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgIHRoaXMuI2N1c3RvbUVucmljaG1lbnQsXG4gICAgICAgIClcbiAgICB9XG4gICAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuI2xldmVsIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXG4gICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgIHRoaXMuI2N1c3RvbUVucmljaG1lbnQsXG4gICAgICAgIClcbiAgICB9XG4gICAgZmF0YWwobWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXG4gICAgICAgICAgICAnZmF0YWwnLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgIHRoaXMuI2N1c3RvbUVucmljaG1lbnQsXG4gICAgICAgIClcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVycm9yQXNKc29uKGVycm9yOiB1bmtub3duKTogSnNvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGVycm9yID09PSB1bmRlZmluZWQgfHwgZXJyb3IgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2ssXG4gICAgICAgICAgICAuLi4oZXJyb3IgYXMgdW5rbm93biBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSksXG4gICAgICAgIH0gYXMgSnNvblxuICAgIH1cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmVycm9yLFxuICAgICAgICB9IGFzIEpzb25cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWVzc2FnZTogKGVycm9yIGFzIG9iamVjdCB8IHVuZGVmaW5lZCk/LnRvU3RyaW5nKCksXG4gICAgICAgIG5hbWU6IHR5cGVvZiBlcnJvcixcbiAgICB9IGFzIEpzb25cbn1cbiJdfQ==
package/host/reflect.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import { HttpHandlerConfiguration } from '../http.js';
3
2
  type CPU = 'arm' | 'arm64' | 'ia32' | 'mips' | 'mipsel' | 'ppc' | 'ppc64' | 's390' | 's390x' | 'x32' | 'x64';
4
3
  type CpuConfig = CPU | `!${CPU}`;
package/host/registry.js CHANGED
@@ -1,6 +1,5 @@
1
1
  const handlers = {};
2
2
  function addHandler(type, handler) {
3
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
4
3
  ;
5
4
  (handlers[type] ??= []).push(handler);
6
5
  }
@@ -36,7 +35,7 @@ function getMetadata() {
36
35
  }
37
36
  function pathToRegExp(path) {
38
37
  return new RegExp(('^' +
39
- path.replace(/[/\\^$+?.()|[\]{}]/gu, '\\$&').replaceAll('*', '[^/\\?]+') +
38
+ path.replaceAll(/[/\\^$+?.()|[\]{}]/gu, '\\$&').replaceAll('*', '[^/\\?]+') +
40
39
  '(\\?.*)?$').replace('[^/\\?]+[^/\\?]+(\\?.*)?$', ''), 'u');
41
40
  }
42
41
  function combineConfig(base, override) {
@@ -70,4 +69,4 @@ export function registerHttpHandler(method, path, configOrHandler, fn) {
70
69
  httpHostRegistry(getMetadata(), configOrHandler, method, path, fn);
71
70
  }
72
71
  }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsTUFBTSxRQUFRLEdBQWlDLEVBQUUsQ0FBQTtBQUVqRCxTQUFTLFVBQVUsQ0FBQyxJQUF3QixFQUFFLE9BQW9CO0lBQzlELHVFQUF1RTtJQUN2RSxDQUFDO0lBQUEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQzFDLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQXdCO0lBQ2hELE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFrQixDQUFBO0FBQ2xELENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQXdCO0lBQy9DLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM1QixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ3BCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLHNCQUFzQixDQUFDLENBQUE7SUFDckQsQ0FBQztJQUNELElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksSUFBSSx1QkFBdUIsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQTtBQUNsQixDQUFDO0FBVUQsSUFBSSxnQkFBMEIsQ0FBQTtBQUU5QixTQUFTLFdBQVcsQ0FBQyxJQUFjO0lBQy9CLGdCQUFnQixHQUFHLElBQUksQ0FBQTtBQUMzQixDQUFDO0FBRUQsSUFBSSxRQUE4QixDQUFBO0FBRWxDLE1BQU0sVUFBVSxPQUFPLENBQ25CLFdBQW1CLEVBQ25CLFFBQWdCLEVBQ2hCLFFBQTRCLEVBQzVCLE1BQXdDO0lBRXhDLFFBQVEsR0FBRztRQUNQLFdBQVc7UUFDWCxRQUFRO1FBQ1IsUUFBUTtRQUNSLE1BQU07S0FDVCxDQUFBO0FBQ0wsQ0FBQztBQWlCRCxTQUFTLFdBQVc7SUFDaEIsT0FBTyxRQUFRLENBQUE7QUFDbkIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDOUIsT0FBTyxJQUFJLE1BQU0sQ0FDYixDQUNJLEdBQUc7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDO1FBQ3hFLFdBQVcsQ0FDZCxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLENBQUMsRUFDMUMsR0FBRyxDQUNOLENBQUE7QUFDTCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQ2xCLElBQXNDLEVBQ3RDLFFBQTBDO0lBRzFDLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sUUFBUSxDQUFBO0lBQ25CLENBQUM7U0FBTSxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFDRCxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQTtBQUNuQyxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQ2IsSUFBMEIsRUFDMUIsR0FBcUMsRUFDckMsTUFBYyxFQUNkLElBQVksRUFDWixLQUFjO0lBRWQsVUFBVSxDQUFDLE1BQU0sRUFBRTtRQUNmLElBQUk7UUFDSixNQUFNLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDO1FBQ3hDLE1BQU07UUFDTixXQUFXLEVBQUUsSUFBSTtRQUNqQixVQUFVLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQztRQUM5QixLQUFLO0tBQ1IsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUlyQixNQUFNLFVBQVUsbUJBQW1CLENBQy9CLE1BQWMsRUFDZCxJQUFZLEVBQ1osZUFBK0MsRUFDL0MsRUFBWTtJQUVaLElBQUksT0FBTyxlQUFlLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDeEMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFDN0UsQ0FBQztTQUFNLENBQUM7UUFDSixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUE7UUFDekQsQ0FBQztRQUNELGdCQUFnQixDQUFDLFdBQVcsRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3RFLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSGFuZGxlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gJy4uL2h0dHAuanMnXG5cbmV4cG9ydCB0eXBlIEh0dHBIYW5kbGVyID0ge1xuICAgIG1ldGE6IE1ldGFkYXRhIHwgdW5kZWZpbmVkXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1kdXBsaWNhdGUtdHlwZS1jb25zdGl0dWVudHNcbiAgICBjb25maWc6IEZ1bGxDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkXG4gICAgbWV0aG9kOiBNZXRob2RcbiAgICBwYXRoUGF0dGVybjogc3RyaW5nXG4gICAgcGF0aFJlZ0V4cDogUmVnRXhwXG4gICAgZW50cnk6IEhhbmRsZXJcbn1cblxudHlwZSBIYW5kbGVyVHlwZXMgPSB7XG4gICAgaHR0cDogSHR0cEhhbmRsZXJcbn1cblxuY29uc3QgaGFuZGxlcnM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93bltdIH0gPSB7fVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyKHR5cGU6IGtleW9mIEhhbmRsZXJUeXBlcywgaGFuZGxlcjogSHR0cEhhbmRsZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICAgIDsoaGFuZGxlcnNbdHlwZV0gPz89IFtdKS5wdXNoKGhhbmRsZXIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIYW5kbGVycyh0eXBlOiBrZXlvZiBIYW5kbGVyVHlwZXMpIHtcbiAgICByZXR1cm4gKGhhbmRsZXJzW3R5cGVdID8/IFtdKSBhcyBIdHRwSGFuZGxlcltdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIYW5kbGVyKHR5cGU6IGtleW9mIEhhbmRsZXJUeXBlcykge1xuICAgIGNvbnN0IGhzID0gZ2V0SGFuZGxlcnModHlwZSlcbiAgICBjb25zdCBbaGFuZGxlcl0gPSBoc1xuICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vICR7dHlwZX0gaGFuZGxlciByZWdpc3RlcmVkLmApXG4gICAgfVxuICAgIGlmIChocy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBsZSAke3R5cGV9IGhhbmRsZXJzIHJlZ2lzdGVyZWQuYClcbiAgICB9XG4gICAgcmV0dXJuIGhhbmRsZXJcbn1cblxudHlwZSBIdHRwSG9zdCA9IChcbiAgICBtZXRhOiBNZXRhZGF0YSB8IHVuZGVmaW5lZCxcbiAgICBjb25maWc6IEhhbmRsZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuICAgIG1ldGhvZDogTWV0aG9kLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBoYW5kbGVyOiBIYW5kbGVyLFxuKSA9PiB2b2lkXG5cbmxldCBodHRwSG9zdFJlZ2lzdHJ5OiBIdHRwSG9zdFxuXG5mdW5jdGlvbiBzZXRIdHRwSG9zdChob3N0OiBIdHRwSG9zdCkge1xuICAgIGh0dHBIb3N0UmVnaXN0cnkgPSBob3N0XG59XG5cbmxldCBtZXRhZGF0YTogTWV0YWRhdGEgfCB1bmRlZmluZWRcblxuZXhwb3J0IGZ1bmN0aW9uIHNldE1ldGEoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBmaWxlTmFtZTogc3RyaW5nLFxuICAgIHJldmlzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgY29uZmlnOiBQYWNrYWdlQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcbikge1xuICAgIG1ldGFkYXRhID0ge1xuICAgICAgICBwYWNrYWdlTmFtZSxcbiAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgIHJldmlzaW9uLFxuICAgICAgICBjb25maWcsXG4gICAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IHR5cGUgUGFja2FnZUNvbmZpZ3VyYXRpb24gPSBIYW5kbGVyQ29uZmlndXJhdGlvbiAmIHtcbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgcGFja2FnZS1sZXZlbCBjb25maWd1cmF0aW9uc1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR1cGxpY2F0ZS10eXBlLWNvbnN0aXR1ZW50c1xuZXhwb3J0IHR5cGUgRnVsbENvbmZpZ3VyYXRpb24gPSBQYWNrYWdlQ29uZmlndXJhdGlvbiAmIEhhbmRsZXJDb25maWd1cmF0aW9uXG5cbmV4cG9ydCB0eXBlIE1ldGFkYXRhID0ge1xuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmdcbiAgICBmaWxlTmFtZTogc3RyaW5nXG4gICAgcmV2aXNpb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgIGNvbmZpZz86IFBhY2thZ2VDb25maWd1cmF0aW9uXG59XG5cbmZ1bmN0aW9uIGdldE1ldGFkYXRhKCkge1xuICAgIHJldHVybiBtZXRhZGF0YVxufVxuXG5mdW5jdGlvbiBwYXRoVG9SZWdFeHAocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXG4gICAgICAgIChcbiAgICAgICAgICAgICdeJyArXG4gICAgICAgICAgICBwYXRoLnJlcGxhY2UoL1svXFxcXF4kKz8uKCl8W1xcXXt9XS9ndSwgJ1xcXFwkJicpLnJlcGxhY2VBbGwoJyonLCAnW14vXFxcXD9dKycpICtcbiAgICAgICAgICAgICcoXFxcXD8uKik/JCdcbiAgICAgICAgKS5yZXBsYWNlKCdbXi9cXFxcP10rW14vXFxcXD9dKyhcXFxcPy4qKT8kJywgJycpLFxuICAgICAgICAndScsXG4gICAgKVxufVxuXG5mdW5jdGlvbiBjb21iaW5lQ29uZmlnKFxuICAgIGJhc2U6IFBhY2thZ2VDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuICAgIG92ZXJyaWRlOiBIYW5kbGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR1cGxpY2F0ZS10eXBlLWNvbnN0aXR1ZW50c1xuKTogRnVsbENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuICAgIGlmIChiYXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG92ZXJyaWRlXG4gICAgfSBlbHNlIGlmIChvdmVycmlkZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBiYXNlXG4gICAgfVxuICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLm92ZXJyaWRlIH1cbn1cblxuZnVuY3Rpb24gaHR0cEhvc3QoXG4gICAgbWV0YTogTWV0YWRhdGEgfCB1bmRlZmluZWQsXG4gICAgY2ZnOiBIYW5kbGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcbiAgICBtZXRob2Q6IE1ldGhvZCxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgZW50cnk6IEhhbmRsZXIsXG4pIHtcbiAgICBhZGRIYW5kbGVyKCdodHRwJywge1xuICAgICAgICBtZXRhLFxuICAgICAgICBjb25maWc6IGNvbWJpbmVDb25maWcobWV0YT8uY29uZmlnLCBjZmcpLFxuICAgICAgICBtZXRob2QsXG4gICAgICAgIHBhdGhQYXR0ZXJuOiBwYXRoLFxuICAgICAgICBwYXRoUmVnRXhwOiBwYXRoVG9SZWdFeHAocGF0aCksXG4gICAgICAgIGVudHJ5LFxuICAgIH0pXG59XG5cbnNldEh0dHBIb3N0KGh0dHBIb3N0KVxuXG5leHBvcnQgdHlwZSBNZXRob2QgPSAnR0VUJyB8ICdQT1NUJyB8ICdQVVQnIHwgJ1BBVENIJyB8ICdERUxFVEUnXG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlckh0dHBIYW5kbGVyKFxuICAgIG1ldGhvZDogTWV0aG9kLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBjb25maWdPckhhbmRsZXI6IEhhbmRsZXJDb25maWd1cmF0aW9uIHwgSGFuZGxlcixcbiAgICBmbj86IEhhbmRsZXIsXG4pOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09ySGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBodHRwSG9zdFJlZ2lzdHJ5KGdldE1ldGFkYXRhKCksIHVuZGVmaW5lZCwgbWV0aG9kLCBwYXRoLCBjb25maWdPckhhbmRsZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFmbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSBhIGhhbmRsZXIgZnVuY3Rpb24uJylcbiAgICAgICAgfVxuICAgICAgICBodHRwSG9zdFJlZ2lzdHJ5KGdldE1ldGFkYXRhKCksIGNvbmZpZ09ySGFuZGxlciwgbWV0aG9kLCBwYXRoLCBmbilcbiAgICB9XG59XG4iXX0=
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQkEsTUFBTSxRQUFRLEdBQWlDLEVBQUUsQ0FBQTtBQUVqRCxTQUFTLFVBQVUsQ0FBQyxJQUF3QixFQUFFLE9BQW9CO0lBQzlELENBQUM7SUFBQSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDMUMsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBd0I7SUFDaEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQWtCLENBQUE7QUFDbEQsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBd0I7SUFDL0MsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDcEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksc0JBQXNCLENBQUMsQ0FBQTtJQUNyRCxDQUFDO0lBQ0QsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxJQUFJLHVCQUF1QixDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFBO0FBQ2xCLENBQUM7QUFVRCxJQUFJLGdCQUEwQixDQUFBO0FBRTlCLFNBQVMsV0FBVyxDQUFDLElBQWM7SUFDL0IsZ0JBQWdCLEdBQUcsSUFBSSxDQUFBO0FBQzNCLENBQUM7QUFFRCxJQUFJLFFBQThCLENBQUE7QUFFbEMsTUFBTSxVQUFVLE9BQU8sQ0FDbkIsV0FBbUIsRUFDbkIsUUFBZ0IsRUFDaEIsUUFBNEIsRUFDNUIsTUFBd0M7SUFFeEMsUUFBUSxHQUFHO1FBQ1AsV0FBVztRQUNYLFFBQVE7UUFDUixRQUFRO1FBQ1IsTUFBTTtLQUNULENBQUE7QUFDTCxDQUFDO0FBZ0JELFNBQVMsV0FBVztJQUNoQixPQUFPLFFBQVEsQ0FBQTtBQUNuQixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsSUFBWTtJQUM5QixPQUFPLElBQUksTUFBTSxDQUNiLENBQ0ksR0FBRztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUM7UUFDM0UsV0FBVyxDQUNkLENBQUMsT0FBTyxDQUFDLDJCQUEyQixFQUFFLEVBQUUsQ0FBQyxFQUMxQyxHQUFHLENBQ04sQ0FBQTtBQUNMLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FDbEIsSUFBc0MsRUFDdEMsUUFBMEM7SUFFMUMsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDckIsT0FBTyxRQUFRLENBQUE7SUFDbkIsQ0FBQztTQUFNLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUNELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFBO0FBQ25DLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FDYixJQUEwQixFQUMxQixHQUFxQyxFQUNyQyxNQUFjLEVBQ2QsSUFBWSxFQUNaLEtBQWM7SUFFZCxVQUFVLENBQUMsTUFBTSxFQUFFO1FBQ2YsSUFBSTtRQUNKLE1BQU0sRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUM7UUFDeEMsTUFBTTtRQUNOLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLFVBQVUsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQzlCLEtBQUs7S0FDUixDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBSXJCLE1BQU0sVUFBVSxtQkFBbUIsQ0FDL0IsTUFBYyxFQUNkLElBQVksRUFDWixlQUErQyxFQUMvQyxFQUFZO0lBRVosSUFBSSxPQUFPLGVBQWUsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN4QyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQTtJQUM3RSxDQUFDO1NBQU0sQ0FBQztRQUNKLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQTtRQUN6RCxDQUFDO1FBQ0QsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDdEUsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIYW5kbGVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2NvbnRleHQuanMnXG5pbXBvcnQgeyBIYW5kbGVyIH0gZnJvbSAnLi4vaHR0cC5qcydcblxuZXhwb3J0IHR5cGUgSHR0cEhhbmRsZXIgPSB7XG4gICAgbWV0YTogTWV0YWRhdGEgfCB1bmRlZmluZWRcbiAgICBjb25maWc6IEZ1bGxDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkXG4gICAgbWV0aG9kOiBNZXRob2RcbiAgICBwYXRoUGF0dGVybjogc3RyaW5nXG4gICAgcGF0aFJlZ0V4cDogUmVnRXhwXG4gICAgZW50cnk6IEhhbmRsZXJcbn1cblxudHlwZSBIYW5kbGVyVHlwZXMgPSB7XG4gICAgaHR0cDogSHR0cEhhbmRsZXJcbn1cblxuY29uc3QgaGFuZGxlcnM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93bltdIH0gPSB7fVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyKHR5cGU6IGtleW9mIEhhbmRsZXJUeXBlcywgaGFuZGxlcjogSHR0cEhhbmRsZXIpIHtcbiAgICA7KGhhbmRsZXJzW3R5cGVdID8/PSBbXSkucHVzaChoYW5kbGVyKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGFuZGxlcnModHlwZToga2V5b2YgSGFuZGxlclR5cGVzKSB7XG4gICAgcmV0dXJuIChoYW5kbGVyc1t0eXBlXSA/PyBbXSkgYXMgSHR0cEhhbmRsZXJbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGFuZGxlcih0eXBlOiBrZXlvZiBIYW5kbGVyVHlwZXMpIHtcbiAgICBjb25zdCBocyA9IGdldEhhbmRsZXJzKHR5cGUpXG4gICAgY29uc3QgW2hhbmRsZXJdID0gaHNcbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyAke3R5cGV9IGhhbmRsZXIgcmVnaXN0ZXJlZC5gKVxuICAgIH1cbiAgICBpZiAoaHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgJHt0eXBlfSBoYW5kbGVycyByZWdpc3RlcmVkLmApXG4gICAgfVxuICAgIHJldHVybiBoYW5kbGVyXG59XG5cbnR5cGUgSHR0cEhvc3QgPSAoXG4gICAgbWV0YTogTWV0YWRhdGEgfCB1bmRlZmluZWQsXG4gICAgY29uZmlnOiBIYW5kbGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcbiAgICBtZXRob2Q6IE1ldGhvZCxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgaGFuZGxlcjogSGFuZGxlcixcbikgPT4gdm9pZFxuXG5sZXQgaHR0cEhvc3RSZWdpc3RyeTogSHR0cEhvc3RcblxuZnVuY3Rpb24gc2V0SHR0cEhvc3QoaG9zdDogSHR0cEhvc3QpIHtcbiAgICBodHRwSG9zdFJlZ2lzdHJ5ID0gaG9zdFxufVxuXG5sZXQgbWV0YWRhdGE6IE1ldGFkYXRhIHwgdW5kZWZpbmVkXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRNZXRhKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgZmlsZU5hbWU6IHN0cmluZyxcbiAgICByZXZpc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGNvbmZpZzogUGFja2FnZUNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXG4pIHtcbiAgICBtZXRhZGF0YSA9IHtcbiAgICAgICAgcGFja2FnZU5hbWUsXG4gICAgICAgIGZpbGVOYW1lLFxuICAgICAgICByZXZpc2lvbixcbiAgICAgICAgY29uZmlnLFxuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgUGFja2FnZUNvbmZpZ3VyYXRpb24gPSBIYW5kbGVyQ29uZmlndXJhdGlvbiAmIHtcbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgcGFja2FnZS1sZXZlbCBjb25maWd1cmF0aW9uc1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR1cGxpY2F0ZS10eXBlLWNvbnN0aXR1ZW50c1xuZXhwb3J0IHR5cGUgRnVsbENvbmZpZ3VyYXRpb24gPSBQYWNrYWdlQ29uZmlndXJhdGlvbiAmIEhhbmRsZXJDb25maWd1cmF0aW9uXG5cbmV4cG9ydCB0eXBlIE1ldGFkYXRhID0ge1xuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmdcbiAgICBmaWxlTmFtZTogc3RyaW5nXG4gICAgcmV2aXNpb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgIGNvbmZpZz86IFBhY2thZ2VDb25maWd1cmF0aW9uXG59XG5cbmZ1bmN0aW9uIGdldE1ldGFkYXRhKCkge1xuICAgIHJldHVybiBtZXRhZGF0YVxufVxuXG5mdW5jdGlvbiBwYXRoVG9SZWdFeHAocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXG4gICAgICAgIChcbiAgICAgICAgICAgICdeJyArXG4gICAgICAgICAgICBwYXRoLnJlcGxhY2VBbGwoL1svXFxcXF4kKz8uKCl8W1xcXXt9XS9ndSwgJ1xcXFwkJicpLnJlcGxhY2VBbGwoJyonLCAnW14vXFxcXD9dKycpICtcbiAgICAgICAgICAgICcoXFxcXD8uKik/JCdcbiAgICAgICAgKS5yZXBsYWNlKCdbXi9cXFxcP10rW14vXFxcXD9dKyhcXFxcPy4qKT8kJywgJycpLFxuICAgICAgICAndScsXG4gICAgKVxufVxuXG5mdW5jdGlvbiBjb21iaW5lQ29uZmlnKFxuICAgIGJhc2U6IFBhY2thZ2VDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuICAgIG92ZXJyaWRlOiBIYW5kbGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcbik6IEZ1bGxDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoYmFzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvdmVycmlkZVxuICAgIH0gZWxzZSBpZiAob3ZlcnJpZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gYmFzZVxuICAgIH1cbiAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5vdmVycmlkZSB9XG59XG5cbmZ1bmN0aW9uIGh0dHBIb3N0KFxuICAgIG1ldGE6IE1ldGFkYXRhIHwgdW5kZWZpbmVkLFxuICAgIGNmZzogSGFuZGxlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXG4gICAgbWV0aG9kOiBNZXRob2QsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGVudHJ5OiBIYW5kbGVyLFxuKSB7XG4gICAgYWRkSGFuZGxlcignaHR0cCcsIHtcbiAgICAgICAgbWV0YSxcbiAgICAgICAgY29uZmlnOiBjb21iaW5lQ29uZmlnKG1ldGE/LmNvbmZpZywgY2ZnKSxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBwYXRoUGF0dGVybjogcGF0aCxcbiAgICAgICAgcGF0aFJlZ0V4cDogcGF0aFRvUmVnRXhwKHBhdGgpLFxuICAgICAgICBlbnRyeSxcbiAgICB9KVxufVxuXG5zZXRIdHRwSG9zdChodHRwSG9zdClcblxuZXhwb3J0IHR5cGUgTWV0aG9kID0gJ0dFVCcgfCAnUE9TVCcgfCAnUFVUJyB8ICdQQVRDSCcgfCAnREVMRVRFJ1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJIdHRwSGFuZGxlcihcbiAgICBtZXRob2Q6IE1ldGhvZCxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgY29uZmlnT3JIYW5kbGVyOiBIYW5kbGVyQ29uZmlndXJhdGlvbiB8IEhhbmRsZXIsXG4gICAgZm4/OiBIYW5kbGVyLFxuKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjb25maWdPckhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaHR0cEhvc3RSZWdpc3RyeShnZXRNZXRhZGF0YSgpLCB1bmRlZmluZWQsIG1ldGhvZCwgcGF0aCwgY29uZmlnT3JIYW5kbGVyKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghZm4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHByb3ZpZGUgYSBoYW5kbGVyIGZ1bmN0aW9uLicpXG4gICAgICAgIH1cbiAgICAgICAgaHR0cEhvc3RSZWdpc3RyeShnZXRNZXRhZGF0YSgpLCBjb25maWdPckhhbmRsZXIsIG1ldGhvZCwgcGF0aCwgZm4pXG4gICAgfVxufVxuIl19
package/http.d.ts CHANGED
@@ -1,5 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import type { UrlWithParsedQuery } from 'node:url';
3
1
  import { Context, HandlerConfiguration, Json } from './context.js';
4
2
  export * from './context.js';
5
3
  export type ResponseHeaders = {
@@ -13,12 +11,179 @@ export type FullResult = {
13
11
  export type Result = void | string | FullResult;
14
12
  export type HttpRequest = {
15
13
  readonly rawUrl: string;
16
- readonly url: Readonly<UrlWithParsedQuery> & {
17
- pathStepAt: (index: number) => string;
18
- };
14
+ readonly url: ParsedUrl;
19
15
  readonly headers: Readonly<ResponseHeaders>;
20
16
  readonly body?: Json | string;
21
17
  };
18
+ type Gone = 'Gone' | undefined;
19
+ export type ParsedUrl = {
20
+ /**
21
+ * Gets the fragment portion of the URL.
22
+ *
23
+ * ```js
24
+ * const myURL = new URL('https://example.org/foo#bar');
25
+ * console.log(myURL.hash);
26
+ * // Prints #bar
27
+ * ```
28
+ */
29
+ readonly hash: string;
30
+ /**
31
+ * Gets the host portion of the URL.
32
+ *
33
+ * ```js
34
+ * const myURL = new URL('https://example.org:81/foo');
35
+ * console.log(myURL.host);
36
+ * // Prints example.org:81
37
+ */
38
+ readonly host: string;
39
+ /**
40
+ * Gets the host name portion of the URL. The key difference between`url.host` and `url.hostname` is that `url.hostname` does _not_ include the
41
+ * port.
42
+ *
43
+ * ```js
44
+ * const myURL = new URL('https://example.org:81/foo');
45
+ * console.log(myURL.hostname);
46
+ * // Prints example.org
47
+ */
48
+ readonly hostname: string;
49
+ /**
50
+ * Gets the serialized URL.
51
+ *
52
+ * ```js
53
+ * const myURL = new URL('https://example.org/foo');
54
+ * console.log(myURL.href);
55
+ * // Prints https://example.org/foo
56
+ * ```
57
+ */
58
+ readonly href: string;
59
+ /**
60
+ * Gets the serialization of the URL's origin.
61
+ *
62
+ * ```js
63
+ * const myURL = new URL('https://example.org/foo/bar?baz');
64
+ * console.log(myURL.origin);
65
+ * // Prints https://example.org
66
+ * ```
67
+ *
68
+ * ```js
69
+ * const idnURL = new URL('https://測試');
70
+ * console.log(idnURL.origin);
71
+ * // Prints https://xn--g6w251d
72
+ *
73
+ * console.log(idnURL.hostname);
74
+ * // Prints xn--g6w251d
75
+ * ```
76
+ */
77
+ readonly origin: string;
78
+ /**
79
+ * Gets the password portion of the URL.
80
+ *
81
+ * ```js
82
+ * const myURL = new URL('https://abc:xyz@example.com');
83
+ * console.log(myURL.password);
84
+ * // Prints xyz
85
+ *
86
+ * myURL.password = '123';
87
+ * console.log(myURL.href);
88
+ * // Prints https://abc:123@example.com/
89
+ * ```
90
+ */
91
+ readonly password: string;
92
+ /**
93
+ * Gets the path portion of the URL.
94
+ *
95
+ * ```js
96
+ * const myURL = new URL('https://example.org/abc/xyz?123');
97
+ * console.log(myURL.pathname);
98
+ * // Prints /abc/xyz
99
+ * ```
100
+ */
101
+ readonly pathname: string;
102
+ /**
103
+ * Gets the port portion of the URL.
104
+ *
105
+ * The port value may be a number or a string containing a number in the range `0` to `65535` (inclusive). Setting the value to the default port of the `URL` objects given `protocol` will
106
+ * result in the `port` value becoming
107
+ * the empty string (`''`).
108
+ *
109
+ * The port value can be an empty string in which case the port depends on
110
+ * the protocol/scheme.
111
+ *
112
+ * If that string is invalid but it begins with a number, the leading number is
113
+ * assigned to `port`.
114
+ * If the number lies outside the range denoted above, it is ignored.
115
+ *
116
+ * ```js
117
+ * const myURL = new URL('https://example.org:8888');
118
+ * console.log(myURL.port);
119
+ * // Prints 8888
120
+ * ```
121
+ */
122
+ readonly port: string;
123
+ /**
124
+ * Gets the protocol portion of the URL.
125
+ *
126
+ * ```js
127
+ * const myURL = new URL('https://example.org');
128
+ * console.log(myURL.protocol);
129
+ * // Prints https:
130
+ * ```
131
+ */
132
+ readonly protocol: string;
133
+ /**
134
+ * Gets the serialized query portion of the URL.
135
+ *
136
+ * ```js
137
+ * const myURL = new URL('https://example.org/abc?123');
138
+ * console.log(myURL.search);
139
+ * // Prints ?123
140
+ * ```
141
+ *
142
+ * Any invalid URL characters appearing in the value assigned the `search`property will be `percent-encoded`.
143
+ */
144
+ readonly search: string;
145
+ /**
146
+ * Gets the `URLSearchParams` object representing the query parameters of the
147
+ * URL.
148
+ *
149
+ * ```js
150
+ * const myURL = new URL('https://example.org/abc?foo=~bar');
151
+ *
152
+ * console.log(myURL.search); // prints ?foo=~bar
153
+ * ```
154
+ */
155
+ readonly searchParams: URLSearchParams;
156
+ /**
157
+ * Gets the username portion of the URL.
158
+ *
159
+ * ```js
160
+ * const myURL = new URL('https://abc:xyz@example.com');
161
+ * console.log(myURL.username);
162
+ * // Prints abc
163
+ * ```
164
+ *
165
+ * Any invalid URL characters appearing in the value assigned the `username` property will be `percent-encoded`.
166
+ */
167
+ readonly username: string;
168
+ /**
169
+ * Gets a step of the path portion of the URL.
170
+ *
171
+ * ```js
172
+ * const myURL = new URL('https://example.org/abc/xyz?123');
173
+ * console.log(myURL.pathStepAt(0));
174
+ * // Prints abc
175
+ * console.log(myURL.pathStepAt(1));
176
+ * // Prints xyz
177
+ * ```
178
+ */
179
+ pathStepAt: (index: number) => string;
180
+ /**
181
+ * Gone, use searchParams instead.
182
+ */
183
+ query?: Gone;
184
+ /** @ignore */
185
+ toJSON: () => string;
186
+ };
22
187
  export type HttpHandlerConfiguration = HandlerConfiguration & {
23
188
  /**
24
189
  * A string identifying which domains can access the endpoint cross-origin.
package/http.js CHANGED
@@ -15,4 +15,4 @@ export function patch(path, configOrHandler, fn) {
15
15
  export function del(path, configOrHandler, fn) {
16
16
  registerHttpHandler('DELETE', path, configOrHandler, fn);
17
17
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImh0dHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFeEQsY0FBYyxjQUFjLENBQUE7QUFpQzVCLE1BQU0sVUFBVSxHQUFHLENBQ2YsSUFBWSxFQUNaLGVBQW1ELEVBQ25ELEVBQVk7SUFFWixtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUN6RCxDQUFDO0FBR0QsTUFBTSxVQUFVLElBQUksQ0FDaEIsSUFBWSxFQUNaLGVBQW1ELEVBQ25ELEVBQVk7SUFFWixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUMxRCxDQUFDO0FBR0QsTUFBTSxVQUFVLEdBQUcsQ0FDZixJQUFZLEVBQ1osZUFBbUQsRUFDbkQsRUFBWTtJQUVaLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQ3pELENBQUM7QUFHRCxNQUFNLFVBQVUsS0FBSyxDQUNqQixJQUFZLEVBQ1osZUFBbUQsRUFDbkQsRUFBWTtJQUVaLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQzNELENBQUM7QUFHRCxNQUFNLFVBQVUsR0FBRyxDQUNmLElBQVksRUFDWixlQUFtRCxFQUNuRCxFQUFZO0lBRVosbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVXJsV2l0aFBhcnNlZFF1ZXJ5IH0gZnJvbSAnbm9kZTp1cmwnXG5pbXBvcnQgeyBDb250ZXh0LCBIYW5kbGVyQ29uZmlndXJhdGlvbiwgSnNvbiB9IGZyb20gJy4vY29udGV4dC5qcydcbmltcG9ydCB7IHJlZ2lzdGVySHR0cEhhbmRsZXIgfSBmcm9tICcuL2hvc3QvcmVnaXN0cnkuanMnXG5cbmV4cG9ydCAqIGZyb20gJy4vY29udGV4dC5qcydcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VIZWFkZXJzID0ge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBGdWxsUmVzdWx0ID0ge1xuICAgIGhlYWRlcnM/OiBSZXNwb25zZUhlYWRlcnNcbiAgICBzdGF0dXM/OiBudW1iZXJcbiAgICBib2R5PzogdW5rbm93blxufVxuXG5leHBvcnQgdHlwZSBSZXN1bHQgPSB2b2lkIHwgc3RyaW5nIHwgRnVsbFJlc3VsdFxuXG5leHBvcnQgdHlwZSBIdHRwUmVxdWVzdCA9IHtcbiAgICByZWFkb25seSByYXdVcmw6IHN0cmluZ1xuICAgIHJlYWRvbmx5IHVybDogUmVhZG9ubHk8VXJsV2l0aFBhcnNlZFF1ZXJ5PiAmIHsgcGF0aFN0ZXBBdDogKGluZGV4OiBudW1iZXIpID0+IHN0cmluZyB9XG4gICAgcmVhZG9ubHkgaGVhZGVyczogUmVhZG9ubHk8UmVzcG9uc2VIZWFkZXJzPlxuICAgIHJlYWRvbmx5IGJvZHk/OiBKc29uIHwgc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEh0dHBIYW5kbGVyQ29uZmlndXJhdGlvbiA9IEhhbmRsZXJDb25maWd1cmF0aW9uICYge1xuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIGlkZW50aWZ5aW5nIHdoaWNoIGRvbWFpbnMgY2FuIGFjY2VzcyB0aGUgZW5kcG9pbnQgY3Jvc3Mtb3JpZ2luLlxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvcnM/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgSGFuZGxlciA9IChjb250ZXh0OiBDb250ZXh0LCByZXF1ZXN0OiBIdHRwUmVxdWVzdCkgPT4gUHJvbWlzZTxSZXN1bHQ+IHwgUmVzdWx0XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXQocGF0aDogc3RyaW5nLCBmbjogSGFuZGxlcik6IHZvaWRcbmV4cG9ydCBmdW5jdGlvbiBnZXQocGF0aDogc3RyaW5nLCBjb25maWc6IEh0dHBIYW5kbGVyQ29uZmlndXJhdGlvbiwgZm46IEhhbmRsZXIpOiB2b2lkXG5leHBvcnQgZnVuY3Rpb24gZ2V0KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBjb25maWdPckhhbmRsZXI6IEh0dHBIYW5kbGVyQ29uZmlndXJhdGlvbiB8IEhhbmRsZXIsXG4gICAgZm4/OiBIYW5kbGVyLFxuKTogdm9pZCB7XG4gICAgcmVnaXN0ZXJIdHRwSGFuZGxlcignR0VUJywgcGF0aCwgY29uZmlnT3JIYW5kbGVyLCBmbilcbn1cbmV4cG9ydCBmdW5jdGlvbiBwb3N0KHBhdGg6IHN0cmluZywgZm46IEhhbmRsZXIpOiB2b2lkXG5leHBvcnQgZnVuY3Rpb24gcG9zdChwYXRoOiBzdHJpbmcsIGNvbmZpZzogSHR0cEhhbmRsZXJDb25maWd1cmF0aW9uLCBmbjogSGFuZGxlcik6IHZvaWRcbmV4cG9ydCBmdW5jdGlvbiBwb3N0KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBjb25maWdPckhhbmRsZXI6IEh0dHBIYW5kbGVyQ29uZmlndXJhdGlvbiB8IEhhbmRsZXIsXG4gICAgZm4/OiBIYW5kbGVyLFxuKTogdm9pZCB7XG4gICAgcmVnaXN0ZXJIdHRwSGFuZGxlcignUE9TVCcsIHBhdGgsIGNvbmZpZ09ySGFuZGxlciwgZm4pXG59XG5leHBvcnQgZnVuY3Rpb24gcHV0KHBhdGg6IHN0cmluZywgZm46IEhhbmRsZXIpOiB2b2lkXG5leHBvcnQgZnVuY3Rpb24gcHV0KHBhdGg6IHN0cmluZywgY29uZmlnOiBIdHRwSGFuZGxlckNvbmZpZ3VyYXRpb24sIGZuOiBIYW5kbGVyKTogdm9pZFxuZXhwb3J0IGZ1bmN0aW9uIHB1dChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgY29uZmlnT3JIYW5kbGVyOiBIdHRwSGFuZGxlckNvbmZpZ3VyYXRpb24gfCBIYW5kbGVyLFxuICAgIGZuPzogSGFuZGxlcixcbik6IHZvaWQge1xuICAgIHJlZ2lzdGVySHR0cEhhbmRsZXIoJ1BVVCcsIHBhdGgsIGNvbmZpZ09ySGFuZGxlciwgZm4pXG59XG5leHBvcnQgZnVuY3Rpb24gcGF0Y2gocGF0aDogc3RyaW5nLCBmbjogSGFuZGxlcik6IHZvaWRcbmV4cG9ydCBmdW5jdGlvbiBwYXRjaChwYXRoOiBzdHJpbmcsIGNvbmZpZzogSHR0cEhhbmRsZXJDb25maWd1cmF0aW9uLCBmbjogSGFuZGxlcik6IHZvaWRcbmV4cG9ydCBmdW5jdGlvbiBwYXRjaChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgY29uZmlnT3JIYW5kbGVyOiBIdHRwSGFuZGxlckNvbmZpZ3VyYXRpb24gfCBIYW5kbGVyLFxuICAgIGZuPzogSGFuZGxlcixcbik6IHZvaWQge1xuICAgIHJlZ2lzdGVySHR0cEhhbmRsZXIoJ1BBVENIJywgcGF0aCwgY29uZmlnT3JIYW5kbGVyLCBmbilcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWwocGF0aDogc3RyaW5nLCBmbjogSGFuZGxlcik6IHZvaWRcbmV4cG9ydCBmdW5jdGlvbiBkZWwocGF0aDogc3RyaW5nLCBjb25maWc6IEh0dHBIYW5kbGVyQ29uZmlndXJhdGlvbiwgZm46IEhhbmRsZXIpOiB2b2lkXG5leHBvcnQgZnVuY3Rpb24gZGVsKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBjb25maWdPckhhbmRsZXI6IEh0dHBIYW5kbGVyQ29uZmlndXJhdGlvbiB8IEhhbmRsZXIsXG4gICAgZm4/OiBIYW5kbGVyLFxuKTogdm9pZCB7XG4gICAgcmVnaXN0ZXJIdHRwSGFuZGxlcignREVMRVRFJywgcGF0aCwgY29uZmlnT3JIYW5kbGVyLCBmbilcbn1cbiJdfQ==
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImh0dHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFeEQsY0FBYyxjQUFjLENBQUE7QUErTTVCLE1BQU0sVUFBVSxHQUFHLENBQ2YsSUFBWSxFQUNaLGVBQW1ELEVBQ25ELEVBQVk7SUFFWixtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUN6RCxDQUFDO0FBR0QsTUFBTSxVQUFVLElBQUksQ0FDaEIsSUFBWSxFQUNaLGVBQW1ELEVBQ25ELEVBQVk7SUFFWixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUMxRCxDQUFDO0FBR0QsTUFBTSxVQUFVLEdBQUcsQ0FDZixJQUFZLEVBQ1osZUFBbUQsRUFDbkQsRUFBWTtJQUVaLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQ3pELENBQUM7QUFHRCxNQUFNLFVBQVUsS0FBSyxDQUNqQixJQUFZLEVBQ1osZUFBbUQsRUFDbkQsRUFBWTtJQUVaLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQzNELENBQUM7QUFHRCxNQUFNLFVBQVUsR0FBRyxDQUNmLElBQVksRUFDWixlQUFtRCxFQUNuRCxFQUFZO0lBRVosbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRleHQsIEhhbmRsZXJDb25maWd1cmF0aW9uLCBKc29uIH0gZnJvbSAnLi9jb250ZXh0LmpzJ1xuaW1wb3J0IHsgcmVnaXN0ZXJIdHRwSGFuZGxlciB9IGZyb20gJy4vaG9zdC9yZWdpc3RyeS5qcydcblxuZXhwb3J0ICogZnJvbSAnLi9jb250ZXh0LmpzJ1xuXG5leHBvcnQgdHlwZSBSZXNwb25zZUhlYWRlcnMgPSB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEZ1bGxSZXN1bHQgPSB7XG4gICAgaGVhZGVycz86IFJlc3BvbnNlSGVhZGVyc1xuICAgIHN0YXR1cz86IG51bWJlclxuICAgIGJvZHk/OiB1bmtub3duXG59XG5cbmV4cG9ydCB0eXBlIFJlc3VsdCA9IHZvaWQgfCBzdHJpbmcgfCBGdWxsUmVzdWx0XG5cbmV4cG9ydCB0eXBlIEh0dHBSZXF1ZXN0ID0ge1xuICAgIHJlYWRvbmx5IHJhd1VybDogc3RyaW5nXG4gICAgcmVhZG9ubHkgdXJsOiBQYXJzZWRVcmxcbiAgICByZWFkb25seSBoZWFkZXJzOiBSZWFkb25seTxSZXNwb25zZUhlYWRlcnM+XG4gICAgcmVhZG9ubHkgYm9keT86IEpzb24gfCBzdHJpbmdcbn1cblxudHlwZSBHb25lID0gJ0dvbmUnIHwgdW5kZWZpbmVkXG5cbmV4cG9ydCB0eXBlIFBhcnNlZFVybCA9IHtcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBmcmFnbWVudCBwb3J0aW9uIG9mIHRoZSBVUkwuXG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IG15VVJMID0gbmV3IFVSTCgnaHR0cHM6Ly9leGFtcGxlLm9yZy9mb28jYmFyJyk7XG4gICAgICogY29uc29sZS5sb2cobXlVUkwuaGFzaCk7XG4gICAgICogLy8gUHJpbnRzICNiYXJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZWFkb25seSBoYXNoOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBob3N0IHBvcnRpb24gb2YgdGhlIFVSTC5cbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgbXlVUkwgPSBuZXcgVVJMKCdodHRwczovL2V4YW1wbGUub3JnOjgxL2ZvbycpO1xuICAgICAqIGNvbnNvbGUubG9nKG15VVJMLmhvc3QpO1xuICAgICAqIC8vIFByaW50cyBleGFtcGxlLm9yZzo4MVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGhvc3Q6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGhvc3QgbmFtZSBwb3J0aW9uIG9mIHRoZSBVUkwuIFRoZSBrZXkgZGlmZmVyZW5jZSBiZXR3ZWVuYHVybC5ob3N0YCBhbmQgYHVybC5ob3N0bmFtZWAgaXMgdGhhdCBgdXJsLmhvc3RuYW1lYCBkb2VzIF9ub3RfIGluY2x1ZGUgdGhlXG4gICAgICogcG9ydC5cbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgbXlVUkwgPSBuZXcgVVJMKCdodHRwczovL2V4YW1wbGUub3JnOjgxL2ZvbycpO1xuICAgICAqIGNvbnNvbGUubG9nKG15VVJMLmhvc3RuYW1lKTtcbiAgICAgKiAvLyBQcmludHMgZXhhbXBsZS5vcmdcbiAgICAgKi9cbiAgICByZWFkb25seSBob3N0bmFtZTogc3RyaW5nXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc2VyaWFsaXplZCBVUkwuXG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IG15VVJMID0gbmV3IFVSTCgnaHR0cHM6Ly9leGFtcGxlLm9yZy9mb28nKTtcbiAgICAgKiBjb25zb2xlLmxvZyhteVVSTC5ocmVmKTtcbiAgICAgKiAvLyBQcmludHMgaHR0cHM6Ly9leGFtcGxlLm9yZy9mb29cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZWFkb25seSBocmVmOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBVUkwncyBvcmlnaW4uXG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IG15VVJMID0gbmV3IFVSTCgnaHR0cHM6Ly9leGFtcGxlLm9yZy9mb28vYmFyP2JheicpO1xuICAgICAqIGNvbnNvbGUubG9nKG15VVJMLm9yaWdpbik7XG4gICAgICogLy8gUHJpbnRzIGh0dHBzOi8vZXhhbXBsZS5vcmdcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgaWRuVVJMID0gbmV3IFVSTCgnaHR0cHM6Ly/muKzoqaYnKTtcbiAgICAgKiBjb25zb2xlLmxvZyhpZG5VUkwub3JpZ2luKTtcbiAgICAgKiAvLyBQcmludHMgaHR0cHM6Ly94bi0tZzZ3MjUxZFxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coaWRuVVJMLmhvc3RuYW1lKTtcbiAgICAgKiAvLyBQcmludHMgeG4tLWc2dzI1MWRcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZWFkb25seSBvcmlnaW46IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHBhc3N3b3JkIHBvcnRpb24gb2YgdGhlIFVSTC5cbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgbXlVUkwgPSBuZXcgVVJMKCdodHRwczovL2FiYzp4eXpAZXhhbXBsZS5jb20nKTtcbiAgICAgKiBjb25zb2xlLmxvZyhteVVSTC5wYXNzd29yZCk7XG4gICAgICogLy8gUHJpbnRzIHh5elxuICAgICAqXG4gICAgICogbXlVUkwucGFzc3dvcmQgPSAnMTIzJztcbiAgICAgKiBjb25zb2xlLmxvZyhteVVSTC5ocmVmKTtcbiAgICAgKiAvLyBQcmludHMgaHR0cHM6Ly9hYmM6MTIzQGV4YW1wbGUuY29tL1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHJlYWRvbmx5IHBhc3N3b3JkOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwYXRoIHBvcnRpb24gb2YgdGhlIFVSTC5cbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgbXlVUkwgPSBuZXcgVVJMKCdodHRwczovL2V4YW1wbGUub3JnL2FiYy94eXo/MTIzJyk7XG4gICAgICogY29uc29sZS5sb2cobXlVUkwucGF0aG5hbWUpO1xuICAgICAqIC8vIFByaW50cyAvYWJjL3h5elxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHJlYWRvbmx5IHBhdGhuYW1lOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwb3J0IHBvcnRpb24gb2YgdGhlIFVSTC5cbiAgICAgKlxuICAgICAqIFRoZSBwb3J0IHZhbHVlIG1heSBiZSBhIG51bWJlciBvciBhIHN0cmluZyBjb250YWluaW5nIGEgbnVtYmVyIGluIHRoZSByYW5nZSBgMGAgdG8gYDY1NTM1YCAoaW5jbHVzaXZlKS4gU2V0dGluZyB0aGUgdmFsdWUgdG8gdGhlIGRlZmF1bHQgcG9ydCBvZiB0aGUgYFVSTGAgb2JqZWN0cyBnaXZlbiBgcHJvdG9jb2xgIHdpbGxcbiAgICAgKiByZXN1bHQgaW4gdGhlIGBwb3J0YCB2YWx1ZSBiZWNvbWluZ1xuICAgICAqIHRoZSBlbXB0eSBzdHJpbmcgKGAnJ2ApLlxuICAgICAqXG4gICAgICogVGhlIHBvcnQgdmFsdWUgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBpbiB3aGljaCBjYXNlIHRoZSBwb3J0IGRlcGVuZHMgb25cbiAgICAgKiB0aGUgcHJvdG9jb2wvc2NoZW1lLlxuICAgICAqXG4gICAgICogSWYgdGhhdCBzdHJpbmcgaXMgaW52YWxpZCBidXQgaXQgYmVnaW5zIHdpdGggYSBudW1iZXIsIHRoZSBsZWFkaW5nIG51bWJlciBpc1xuICAgICAqIGFzc2lnbmVkIHRvIGBwb3J0YC5cbiAgICAgKiBJZiB0aGUgbnVtYmVyIGxpZXMgb3V0c2lkZSB0aGUgcmFuZ2UgZGVub3RlZCBhYm92ZSwgaXQgaXMgaWdub3JlZC5cbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgbXlVUkwgPSBuZXcgVVJMKCdodHRwczovL2V4YW1wbGUub3JnOjg4ODgnKTtcbiAgICAgKiBjb25zb2xlLmxvZyhteVVSTC5wb3J0KTtcbiAgICAgKiAvLyBQcmludHMgODg4OFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHJlYWRvbmx5IHBvcnQ6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByb3RvY29sIHBvcnRpb24gb2YgdGhlIFVSTC5cbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgbXlVUkwgPSBuZXcgVVJMKCdodHRwczovL2V4YW1wbGUub3JnJyk7XG4gICAgICogY29uc29sZS5sb2cobXlVUkwucHJvdG9jb2wpO1xuICAgICAqIC8vIFByaW50cyBodHRwczpcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZWFkb25seSBwcm90b2NvbDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc2VyaWFsaXplZCBxdWVyeSBwb3J0aW9uIG9mIHRoZSBVUkwuXG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IG15VVJMID0gbmV3IFVSTCgnaHR0cHM6Ly9leGFtcGxlLm9yZy9hYmM/MTIzJyk7XG4gICAgICogY29uc29sZS5sb2cobXlVUkwuc2VhcmNoKTtcbiAgICAgKiAvLyBQcmludHMgPzEyM1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQW55IGludmFsaWQgVVJMIGNoYXJhY3RlcnMgYXBwZWFyaW5nIGluIHRoZSB2YWx1ZSBhc3NpZ25lZCB0aGUgYHNlYXJjaGBwcm9wZXJ0eSB3aWxsIGJlIGBwZXJjZW50LWVuY29kZWRgLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHNlYXJjaDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYFVSTFNlYXJjaFBhcmFtc2Agb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcXVlcnkgcGFyYW1ldGVycyBvZiB0aGVcbiAgICAgKiBVUkwuXG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IG15VVJMID0gbmV3IFVSTCgnaHR0cHM6Ly9leGFtcGxlLm9yZy9hYmM/Zm9vPX5iYXInKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG15VVJMLnNlYXJjaCk7ICAvLyBwcmludHMgP2Zvbz1+YmFyXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcmVhZG9ubHkgc2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXNcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB1c2VybmFtZSBwb3J0aW9uIG9mIHRoZSBVUkwuXG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IG15VVJMID0gbmV3IFVSTCgnaHR0cHM6Ly9hYmM6eHl6QGV4YW1wbGUuY29tJyk7XG4gICAgICogY29uc29sZS5sb2cobXlVUkwudXNlcm5hbWUpO1xuICAgICAqIC8vIFByaW50cyBhYmNcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEFueSBpbnZhbGlkIFVSTCBjaGFyYWN0ZXJzIGFwcGVhcmluZyBpbiB0aGUgdmFsdWUgYXNzaWduZWQgdGhlIGB1c2VybmFtZWAgcHJvcGVydHkgd2lsbCBiZSBgcGVyY2VudC1lbmNvZGVkYC5cbiAgICAgKi9cbiAgICByZWFkb25seSB1c2VybmFtZTogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgc3RlcCBvZiB0aGUgcGF0aCBwb3J0aW9uIG9mIHRoZSBVUkwuXG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IG15VVJMID0gbmV3IFVSTCgnaHR0cHM6Ly9leGFtcGxlLm9yZy9hYmMveHl6PzEyMycpO1xuICAgICAqIGNvbnNvbGUubG9nKG15VVJMLnBhdGhTdGVwQXQoMCkpO1xuICAgICAqIC8vIFByaW50cyBhYmNcbiAgICAgKiBjb25zb2xlLmxvZyhteVVSTC5wYXRoU3RlcEF0KDEpKTtcbiAgICAgKiAvLyBQcmludHMgeHl6XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcGF0aFN0ZXBBdDogKGluZGV4OiBudW1iZXIpID0+IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogR29uZSwgdXNlIHNlYXJjaFBhcmFtcyBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHF1ZXJ5PzogR29uZVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICB0b0pTT046ICgpID0+IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBIdHRwSGFuZGxlckNvbmZpZ3VyYXRpb24gPSBIYW5kbGVyQ29uZmlndXJhdGlvbiAmIHtcbiAgICAvKipcbiAgICAgKiBBIHN0cmluZyBpZGVudGlmeWluZyB3aGljaCBkb21haW5zIGNhbiBhY2Nlc3MgdGhlIGVuZHBvaW50IGNyb3NzLW9yaWdpbi5cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBjb3JzPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEhhbmRsZXIgPSAoY29udGV4dDogQ29udGV4dCwgcmVxdWVzdDogSHR0cFJlcXVlc3QpID0+IFByb21pc2U8UmVzdWx0PiB8IFJlc3VsdFxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KHBhdGg6IHN0cmluZywgZm46IEhhbmRsZXIpOiB2b2lkXG5leHBvcnQgZnVuY3Rpb24gZ2V0KHBhdGg6IHN0cmluZywgY29uZmlnOiBIdHRwSGFuZGxlckNvbmZpZ3VyYXRpb24sIGZuOiBIYW5kbGVyKTogdm9pZFxuZXhwb3J0IGZ1bmN0aW9uIGdldChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgY29uZmlnT3JIYW5kbGVyOiBIdHRwSGFuZGxlckNvbmZpZ3VyYXRpb24gfCBIYW5kbGVyLFxuICAgIGZuPzogSGFuZGxlcixcbik6IHZvaWQge1xuICAgIHJlZ2lzdGVySHR0cEhhbmRsZXIoJ0dFVCcsIHBhdGgsIGNvbmZpZ09ySGFuZGxlciwgZm4pXG59XG5leHBvcnQgZnVuY3Rpb24gcG9zdChwYXRoOiBzdHJpbmcsIGZuOiBIYW5kbGVyKTogdm9pZFxuZXhwb3J0IGZ1bmN0aW9uIHBvc3QocGF0aDogc3RyaW5nLCBjb25maWc6IEh0dHBIYW5kbGVyQ29uZmlndXJhdGlvbiwgZm46IEhhbmRsZXIpOiB2b2lkXG5leHBvcnQgZnVuY3Rpb24gcG9zdChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgY29uZmlnT3JIYW5kbGVyOiBIdHRwSGFuZGxlckNvbmZpZ3VyYXRpb24gfCBIYW5kbGVyLFxuICAgIGZuPzogSGFuZGxlcixcbik6IHZvaWQge1xuICAgIHJlZ2lzdGVySHR0cEhhbmRsZXIoJ1BPU1QnLCBwYXRoLCBjb25maWdPckhhbmRsZXIsIGZuKVxufVxuZXhwb3J0IGZ1bmN0aW9uIHB1dChwYXRoOiBzdHJpbmcsIGZuOiBIYW5kbGVyKTogdm9pZFxuZXhwb3J0IGZ1bmN0aW9uIHB1dChwYXRoOiBzdHJpbmcsIGNvbmZpZzogSHR0cEhhbmRsZXJDb25maWd1cmF0aW9uLCBmbjogSGFuZGxlcik6IHZvaWRcbmV4cG9ydCBmdW5jdGlvbiBwdXQoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGNvbmZpZ09ySGFuZGxlcjogSHR0cEhhbmRsZXJDb25maWd1cmF0aW9uIHwgSGFuZGxlcixcbiAgICBmbj86IEhhbmRsZXIsXG4pOiB2b2lkIHtcbiAgICByZWdpc3Rlckh0dHBIYW5kbGVyKCdQVVQnLCBwYXRoLCBjb25maWdPckhhbmRsZXIsIGZuKVxufVxuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoKHBhdGg6IHN0cmluZywgZm46IEhhbmRsZXIpOiB2b2lkXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2gocGF0aDogc3RyaW5nLCBjb25maWc6IEh0dHBIYW5kbGVyQ29uZmlndXJhdGlvbiwgZm46IEhhbmRsZXIpOiB2b2lkXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2goXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGNvbmZpZ09ySGFuZGxlcjogSHR0cEhhbmRsZXJDb25maWd1cmF0aW9uIHwgSGFuZGxlcixcbiAgICBmbj86IEhhbmRsZXIsXG4pOiB2b2lkIHtcbiAgICByZWdpc3Rlckh0dHBIYW5kbGVyKCdQQVRDSCcsIHBhdGgsIGNvbmZpZ09ySGFuZGxlciwgZm4pXG59XG5leHBvcnQgZnVuY3Rpb24gZGVsKHBhdGg6IHN0cmluZywgZm46IEhhbmRsZXIpOiB2b2lkXG5leHBvcnQgZnVuY3Rpb24gZGVsKHBhdGg6IHN0cmluZywgY29uZmlnOiBIdHRwSGFuZGxlckNvbmZpZ3VyYXRpb24sIGZuOiBIYW5kbGVyKTogdm9pZFxuZXhwb3J0IGZ1bmN0aW9uIGRlbChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgY29uZmlnT3JIYW5kbGVyOiBIdHRwSGFuZGxlckNvbmZpZ3VyYXRpb24gfCBIYW5kbGVyLFxuICAgIGZuPzogSGFuZGxlcixcbik6IHZvaWQge1xuICAgIHJlZ2lzdGVySHR0cEhhbmRsZXIoJ0RFTEVURScsIHBhdGgsIGNvbmZpZ09ySGFuZGxlciwgZm4pXG59XG4iXX0=
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@riddance/host",
3
- "version": "0.0.14",
3
+ "version": "0.1.1",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "engines": {
7
- "node": ">=18"
7
+ "node": ">=20"
8
8
  },
9
9
  "keywords": [
10
10
  "riddance",
@@ -35,7 +35,7 @@
35
35
  "postpublish": "riddance-sync"
36
36
  },
37
37
  "devDependencies": {
38
- "@riddance/env": "0.4.5"
38
+ "@riddance/env": "0.6.1"
39
39
  },
40
- "gitHead": "0ee838b3761f266345058b38e01f9ae12e4bd4e0"
40
+ "gitHead": "eab34e513ea503dd6629eab653bfd8aa0c69479b"
41
41
  }
package/host/emitter.js DELETED
@@ -1,68 +0,0 @@
1
- export class EventEmitter {
2
- #transport;
3
- #logger;
4
- #ids;
5
- #emitted = {};
6
- #size = 0;
7
- #flusher;
8
- #deadline;
9
- #buffered;
10
- #signal;
11
- constructor(transport, logger, ids, timeout, signal) {
12
- this.#transport = transport;
13
- this.#logger = logger;
14
- this.#ids = ids;
15
- this.#deadline = new Date().getTime() + timeout;
16
- this.#buffered = 0;
17
- this.#signal = signal;
18
- }
19
- emit(meta, data) {
20
- const eventTime = new Date();
21
- const timeLeft = this.#deadline - new Date().getTime();
22
- if (this.#buffered / this.#transport.publishRate > timeLeft) {
23
- throw new Error('Event overflow.');
24
- }
25
- const event = data === undefined
26
- ? { meta, ids: this.#ids, eventTime }
27
- : { meta, ids: this.#ids, eventTime, json: JSON.stringify(data) };
28
- const events = this.#emitted[meta.topic];
29
- if (!events) {
30
- this.#emitted[meta.topic] = [event];
31
- }
32
- else {
33
- events.push(event);
34
- if (events.length > 64 || this.#size > 64000) {
35
- // eslint-disable-next-line no-void
36
- void this.flush();
37
- }
38
- }
39
- ++this.#buffered;
40
- this.#size += event.json?.length ?? 0;
41
- }
42
- async flush() {
43
- this.#startFlush(this.#emitted);
44
- this.#emitted = {};
45
- this.#size = 0;
46
- return await this.#flusher;
47
- }
48
- #startFlush(emitted) {
49
- if (this.#flusher) {
50
- this.#flusher = this.#flusher.then(() => this.#flushEvents(emitted));
51
- }
52
- else {
53
- this.#flusher = this.#flushEvents(emitted);
54
- }
55
- }
56
- async #flushEvents(emitted) {
57
- await Promise.all(Object.entries(emitted).map(async ([topic, events]) => {
58
- try {
59
- await this.#transport.sendEvents(topic, events, this.#signal);
60
- }
61
- catch (e) {
62
- this.#logger.fatal('Error sending events.', e, { events });
63
- }
64
- this.#buffered -= events.length;
65
- }));
66
- }
67
- }
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVtaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsTUFBTSxPQUFPLFlBQVk7SUFDWixVQUFVLENBQWdCO0lBQzFCLE9BQU8sQ0FBUTtJQUNmLElBQUksQ0FBWTtJQUN6QixRQUFRLEdBQWUsRUFBRSxDQUFBO0lBQ3pCLEtBQUssR0FBRyxDQUFDLENBQUE7SUFDVCxRQUFRLENBQWdCO0lBQ2YsU0FBUyxDQUFRO0lBQzFCLFNBQVMsQ0FBUTtJQUNSLE9BQU8sQ0FBYTtJQUU3QixZQUNJLFNBQXlCLEVBQ3pCLE1BQWMsRUFDZCxHQUF1RixFQUN2RixPQUFlLEVBQ2YsTUFBbUI7UUFFbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUE7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUE7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUE7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFBO1FBQy9DLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO0lBQ3pCLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBbUIsRUFBRSxJQUFXO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ3RELElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDdEMsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUNQLElBQUksS0FBSyxTQUFTO1lBQ2QsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUNyQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUE7UUFDekUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDeEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDbEIsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDO2dCQUMzQyxtQ0FBbUM7Z0JBQ25DLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO1lBQ3JCLENBQUM7UUFDTCxDQUFDO1FBQ0QsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFBO1FBQ2hCLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFBO1FBQ2QsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDOUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFtQjtRQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUN4RSxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM5QyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBbUI7UUFDbEMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNiLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQztnQkFDRCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ2pFLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7WUFDOUQsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQTtRQUNuQyxDQUFDLENBQUMsQ0FDTCxDQUFBO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJvcnRTaWduYWwsIEpzb24sIExvZ2dlciB9IGZyb20gJy4uL2NvbnRleHQuanMnXG5pbXBvcnQgeyBCdWZmZXJlZEV2ZW50LCBDbGllbnRJbmZvLCBFdmVudE1ldGFkYXRhLCBFdmVudFRyYW5zcG9ydCB9IGZyb20gJy4vY29udGV4dC5qcydcblxudHlwZSBFbWl0QnVmZmVyID0ge1xuICAgIFt0b3BpYzogc3RyaW5nXTogQnVmZmVyZWRFdmVudFtdXG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudEVtaXR0ZXIge1xuICAgIHJlYWRvbmx5ICN0cmFuc3BvcnQ6IEV2ZW50VHJhbnNwb3J0XG4gICAgcmVhZG9ubHkgI2xvZ2dlcjogTG9nZ2VyXG4gICAgcmVhZG9ubHkgI2lkczogQ2xpZW50SW5mb1xuICAgICNlbWl0dGVkOiBFbWl0QnVmZmVyID0ge31cbiAgICAjc2l6ZSA9IDBcbiAgICAjZmx1c2hlcj86IFByb21pc2U8dm9pZD5cbiAgICByZWFkb25seSAjZGVhZGxpbmU6IG51bWJlclxuICAgICNidWZmZXJlZDogbnVtYmVyXG4gICAgcmVhZG9ubHkgI3NpZ25hbDogQWJvcnRTaWduYWxcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICB0cmFuc3BvcnQ6IEV2ZW50VHJhbnNwb3J0LFxuICAgICAgICBsb2dnZXI6IExvZ2dlcixcbiAgICAgICAgaWRzOiB7IG9wZXJhdGlvbklkPzogc3RyaW5nOyBjbGllbnRJZD86IHN0cmluZzsgY2xpZW50SXA/OiBzdHJpbmc7IHVzZXJBZ2VudD86IHN0cmluZyB9LFxuICAgICAgICB0aW1lb3V0OiBudW1iZXIsXG4gICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuI3RyYW5zcG9ydCA9IHRyYW5zcG9ydFxuICAgICAgICB0aGlzLiNsb2dnZXIgPSBsb2dnZXJcbiAgICAgICAgdGhpcy4jaWRzID0gaWRzXG4gICAgICAgIHRoaXMuI2RlYWRsaW5lID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyB0aW1lb3V0XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkID0gMFxuICAgICAgICB0aGlzLiNzaWduYWwgPSBzaWduYWxcbiAgICB9XG5cbiAgICBlbWl0KG1ldGE6IEV2ZW50TWV0YWRhdGEsIGRhdGE/OiBKc29uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50VGltZSA9IG5ldyBEYXRlKClcbiAgICAgICAgY29uc3QgdGltZUxlZnQgPSB0aGlzLiNkZWFkbGluZSAtIG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICAgIGlmICh0aGlzLiNidWZmZXJlZCAvIHRoaXMuI3RyYW5zcG9ydC5wdWJsaXNoUmF0ZSA+IHRpbWVMZWZ0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V2ZW50IG92ZXJmbG93LicpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnQgPVxuICAgICAgICAgICAgZGF0YSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB7IG1ldGEsIGlkczogdGhpcy4jaWRzLCBldmVudFRpbWUgfVxuICAgICAgICAgICAgICAgIDogeyBtZXRhLCBpZHM6IHRoaXMuI2lkcywgZXZlbnRUaW1lLCBqc29uOiBKU09OLnN0cmluZ2lmeShkYXRhKSB9XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuI2VtaXR0ZWRbbWV0YS50b3BpY11cbiAgICAgICAgaWYgKCFldmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuI2VtaXR0ZWRbbWV0YS50b3BpY10gPSBbZXZlbnRdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBldmVudHMucHVzaChldmVudClcbiAgICAgICAgICAgIGlmIChldmVudHMubGVuZ3RoID4gNjQgfHwgdGhpcy4jc2l6ZSA+IDY0MDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgICAgICAgICAgICB2b2lkIHRoaXMuZmx1c2goKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICsrdGhpcy4jYnVmZmVyZWRcbiAgICAgICAgdGhpcy4jc2l6ZSArPSBldmVudC5qc29uPy5sZW5ndGggPz8gMFxuICAgIH1cblxuICAgIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLiNzdGFydEZsdXNoKHRoaXMuI2VtaXR0ZWQpXG4gICAgICAgIHRoaXMuI2VtaXR0ZWQgPSB7fVxuICAgICAgICB0aGlzLiNzaXplID0gMFxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy4jZmx1c2hlclxuICAgIH1cblxuICAgICNzdGFydEZsdXNoKGVtaXR0ZWQ6IEVtaXRCdWZmZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuI2ZsdXNoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI2ZsdXNoZXIgPSB0aGlzLiNmbHVzaGVyLnRoZW4oKCkgPT4gdGhpcy4jZmx1c2hFdmVudHMoZW1pdHRlZCkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNmbHVzaGVyID0gdGhpcy4jZmx1c2hFdmVudHMoZW1pdHRlZClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jICNmbHVzaEV2ZW50cyhlbWl0dGVkOiBFbWl0QnVmZmVyKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZW1pdHRlZCkubWFwKGFzeW5jIChbdG9waWMsIGV2ZW50c10pID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLiN0cmFuc3BvcnQuc2VuZEV2ZW50cyh0b3BpYywgZXZlbnRzLCB0aGlzLiNzaWduYWwpXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2dnZXIuZmF0YWwoJ0Vycm9yIHNlbmRpbmcgZXZlbnRzLicsIGUsIHsgZXZlbnRzIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuI2J1ZmZlcmVkIC09IGV2ZW50cy5sZW5ndGhcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgfVxufVxuIl19