@riddance/host 0.1.2 → 0.2.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/host/http.js CHANGED
@@ -1,3 +1,5 @@
1
+ import { hash } from 'node:crypto';
2
+ import { brotliCompress } from 'node:zlib';
1
3
  import { measure } from '../context.js';
2
4
  export async function executeRequest(log, context, handler, options, success) {
3
5
  const isShallow = context.env.SHALLOW_KEY && options.headers?.['x-shallow'] === context.env.SHALLOW_KEY;
@@ -5,15 +7,15 @@ export async function executeRequest(log, context, handler, options, success) {
5
7
  const logRequest = includeBodyInLogs
6
8
  ? { method: handler.method, ...options }
7
9
  : withoutRequestBody({ method: handler.method, ...options });
8
- log = log.enrichReserved({ meta: context.meta, request: logRequest });
10
+ let enrichedLog = log.enrichReserved({ meta: context.meta, request: logRequest });
9
11
  if (isShallow) {
10
- log.trace('Shallow request');
12
+ enrichedLog.trace('Shallow request');
11
13
  return {
12
14
  headers: {},
13
15
  status: 204,
14
16
  };
15
17
  }
16
- log.trace('Request BEGIN');
18
+ enrichedLog.trace('Request BEGIN');
17
19
  try {
18
20
  let parsedUrl;
19
21
  let pathSteps;
@@ -61,7 +63,7 @@ export async function executeRequest(log, context, handler, options, success) {
61
63
  body: requestBody(options),
62
64
  headers: options.headers ?? {},
63
65
  };
64
- const result = await measure(log, 'execution', () => handler.entry({ ...context, log }, req));
66
+ const result = await measure(log.enrichReserved({ meta: context.meta }), 'execution', () => handler.entry({ ...context, log: enrichedLog }, req));
65
67
  const response = resultToResponse(result, includeBodyInLogs);
66
68
  if (context.signal.aborted) {
67
69
  response.headers = {
@@ -69,7 +71,7 @@ export async function executeRequest(log, context, handler, options, success) {
69
71
  ...response.headers,
70
72
  };
71
73
  }
72
- log = log.enrichReserved({
74
+ enrichedLog = enrichedLog.enrichReserved({
73
75
  response: {
74
76
  status: response.status,
75
77
  headers: response.headers,
@@ -77,23 +79,23 @@ export async function executeRequest(log, context, handler, options, success) {
77
79
  },
78
80
  });
79
81
  if (response.status < 300) {
80
- log.debug('Request END');
82
+ enrichedLog.debug('Request END');
81
83
  await success();
82
84
  }
83
85
  else {
84
- log.warn('Request END');
86
+ enrichedLog.warn('Request END');
85
87
  }
86
- return response;
88
+ return await compressed(req.headers, eTagged(req.headers, response));
87
89
  }
88
90
  catch (e) {
89
91
  try {
90
92
  const response = errorToResponse(e);
91
- log = log.enrichReserved({ response });
92
- log.error('Request END', e);
93
+ enrichedLog = enrichedLog.enrichReserved({ response });
94
+ enrichedLog.error('Request END', e);
93
95
  return response;
94
96
  }
95
97
  catch (convertError) {
96
- log.error('Could not convert exception to error response.', convertError);
98
+ enrichedLog.error('Could not convert exception to error response.', convertError);
97
99
  return {
98
100
  headers: {},
99
101
  status: 500,
@@ -181,9 +183,7 @@ function withContentType(headers, contentType) {
181
183
  'content-type': contentType,
182
184
  };
183
185
  }
184
- if (!headers['content-type']) {
185
- headers['content-type'] = contentType;
186
- }
186
+ headers['content-type'] ??= contentType;
187
187
  return headers;
188
188
  }
189
189
  function errorToResponse(e) {
@@ -217,14 +217,56 @@ export function clientFromHeaders(headers) {
217
217
  if (!headers) {
218
218
  return {};
219
219
  }
220
+ const address = headers['x-forwarded-for']?.split(':');
220
221
  return {
221
222
  operationId: headers['x-request-id'] ?? headers['request-id'],
222
223
  clientId: headers['x-client-id'] ??
223
224
  headers['x-installation-id'] ??
224
225
  headers['client-id'] ??
225
226
  headers['installation-id'],
226
- clientIp: headers['x-forwarded-for'],
227
+ clientIp: address?.[0],
228
+ clientPort: Number(address?.[1]) || undefined,
227
229
  userAgent: headers['x-forwarded-for-user-agent'] ?? headers['user-agent'],
228
230
  };
229
231
  }
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImh0dHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFXLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQTBCaEQsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQ2hDLEdBQWUsRUFDZixPQUE2QixFQUM3QixPQUFvQixFQUNwQixPQUF1QixFQUN2QixPQUErQjtJQUUvQixNQUFNLFNBQVMsR0FDWCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUE7SUFDekYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUE7SUFDOUQsTUFBTSxVQUFVLEdBQUcsaUJBQWlCO1FBQ2hDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFO1FBQ3hDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUNoRSxHQUFHLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO0lBQ3JFLElBQUksU0FBUyxFQUFFLENBQUM7UUFDWixHQUFHLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDNUIsT0FBTztZQUNILE9BQU8sRUFBRSxFQUFFO1lBQ1gsTUFBTSxFQUFFLEdBQUc7U0FDZCxDQUFBO0lBQ0wsQ0FBQztJQUNELEdBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDMUIsSUFBSSxDQUFDO1FBQ0QsSUFBSSxTQU9XLENBQUE7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QUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQzdELFFBQVEsRUFDSixPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztZQUM1QixPQUFPLENBQUMsV0FBVyxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUM5QixRQUFRLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQ3BDLFNBQVMsRUFBRSxPQUFPLENBQUMsNEJBQTRCLENBQUMsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDO0tBQzVFLENBQUE7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGV4dCwgbWVhc3VyZSB9IGZyb20gJy4uL2NvbnRleHQuanMnXG5pbXBvcnQgdHlwZSB7IEpzb24sIFBhcnNlZFVybCwgUmVzcG9uc2VIZWFkZXJzLCBSZXN1bHQgfSBmcm9tICcuLi9odHRwLmpzJ1xuaW1wb3J0IHsgQ2xpZW50SW5mbywgUm9vdExvZ2dlciB9IGZyb20gJy4vY29udGV4dC5qcydcbmltcG9ydCB0eXBlIHsgSHR0cEhhbmRsZXIgfSBmcm9tICcuL3JlZ2lzdHJ5LmpzJ1xuXG5leHBvcnQgdHlwZSBSZXNwb25zZSA9IHtcbiAgICBoZWFkZXJzOiB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gICAgc3RhdHVzOiBudW1iZXJcbiAgICBib2R5Pzogc3RyaW5nIHwgQnVmZmVyXG59XG5cbnR5cGUgUmVxdWVzdE9wdGlvbnMgPSBCb2R5bGVzc1JlcXVlc3RPcHRpb25zIHwgU3RyaW5nUmVxdWVzdE9wdGlvbnMgfCBKc29uUmVxdWVzdE9wdGlvbnNcblxudHlwZSBCb2R5bGVzc1JlcXVlc3RPcHRpb25zID0ge1xuICAgIHVyaTogc3RyaW5nXG4gICAgaGVhZGVycz86IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbn1cblxudHlwZSBTdHJpbmdSZXF1ZXN0T3B0aW9ucyA9IEJvZHlsZXNzUmVxdWVzdE9wdGlvbnMgJiB7XG4gICAgYm9keTogc3RyaW5nXG59XG5cbnR5cGUgSnNvblJlcXVlc3RPcHRpb25zID0gQm9keWxlc3NSZXF1ZXN0T3B0aW9ucyAmIHtcbiAgICBqc29uOiBKc29uXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlUmVxdWVzdChcbiAgICBsb2c6IFJvb3RMb2dnZXIsXG4gICAgY29udGV4dDogT21pdDxDb250ZXh0LCAnbG9nJz4sXG4gICAgaGFuZGxlcjogSHR0cEhhbmRsZXIsXG4gICAgb3B0aW9uczogUmVxdWVzdE9wdGlvbnMsXG4gICAgc3VjY2VzczogKCkgPT4gUHJvbWlzZTx1bmtub3duPixcbik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICBjb25zdCBpc1NoYWxsb3cgPVxuICAgICAgICBjb250ZXh0LmVudi5TSEFMTE9XX0tFWSAmJiBvcHRpb25zLmhlYWRlcnM/LlsneC1zaGFsbG93J10gPT09IGNvbnRleHQuZW52LlNIQUxMT1dfS0VZXG4gICAgY29uc3QgaW5jbHVkZUJvZHlJbkxvZ3MgPSAhaGFuZGxlci5jb25maWc/LmV4Y2x1ZGVCb2R5RnJvbUxvZ3NcbiAgICBjb25zdCBsb2dSZXF1ZXN0ID0gaW5jbHVkZUJvZHlJbkxvZ3NcbiAgICAgICAgPyB7IG1ldGhvZDogaGFuZGxlci5tZXRob2QsIC4uLm9wdGlvbnMgfVxuICAgICAgICA6IHdpdGhvdXRSZXF1ZXN0Qm9keSh7IG1ldGhvZDogaGFuZGxlci5tZXRob2QsIC4uLm9wdGlvbnMgfSlcbiAgICBsb2cgPSBsb2cuZW5yaWNoUmVzZXJ2ZWQoeyBtZXRhOiBjb250ZXh0Lm1ldGEsIHJlcXVlc3Q6IGxvZ1JlcXVlc3QgfSlcbiAgICBpZiAoaXNTaGFsbG93KSB7XG4gICAgICAgIGxvZy50cmFjZSgnU2hhbGxvdyByZXF1ZXN0JylcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgc3RhdHVzOiAyMDQsXG4gICAgICAgIH1cbiAgICB9XG4gICAgbG9nLnRyYWNlKCdSZXF1ZXN0IEJFR0lOJylcbiAgICB0cnkge1xuICAgICAgICBsZXQgcGFyc2VkVXJsOlxuICAgICAgICAgICAgfCAoUGFyc2VkVXJsICYge1xuICAgICAgICAgICAgICAgICAgLyoqIEBpZ25vcmUgKi9cbiAgICAgICAgICAgICAgICAgIF9fcHJvdG9fXzogdW5rbm93blxuICAgICAgICAgICAgICAgICAgLyoqIEBpZ25vcmUgKi9cbiAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiBzdHJpbmdcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHwgdW5kZWZpbmVkXG4gICAgICAgIGxldCBwYXRoU3RlcHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkXG4gICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICAgIHJhd1VybDogb3B0aW9ucy51cmksXG4gICAgICAgICAgICBnZXQgdXJsKCkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWRVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZFVybFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHRoaXMucmF3VXJsKVxuICAgICAgICAgICAgICAgIHBhcnNlZFVybCA9IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tbnVsbFxuICAgICAgICAgICAgICAgICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhhc2g6IHVybC5oYXNoLFxuICAgICAgICAgICAgICAgICAgICBob3N0OiB1cmwuaG9zdCxcbiAgICAgICAgICAgICAgICAgICAgaG9zdG5hbWU6IHVybC5ob3N0bmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaHJlZjogdXJsLmhyZWYsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHVybC5wYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWU6IHVybC5wYXRobmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcG9ydDogdXJsLnBvcnQsXG4gICAgICAgICAgICAgICAgICAgIHByb3RvY29sOiB1cmwucHJvdG9jb2wsXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaDogdXJsLnNlYXJjaCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0IHNlYXJjaFBhcmFtcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmwuc2VhcmNoUGFyYW1zXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRvSlNPTjogKCkgPT4gdXJsLnRvSlNPTigpLFxuICAgICAgICAgICAgICAgICAgICB0b1N0cmluZzogKCkgPT4gdXJsLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB1cmwudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGhTdGVwQXQ6IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGVwcyA9IChwYXRoU3RlcHMgPz89IHVybC5wYXRobmFtZS5zcGxpdCgnLycpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RlcCA9IHN0ZXBzW2luZGV4ICsgMV1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RlcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBSYW5nZUVycm9yKGBQYXRoIGRvZXMgbm90IGhhdmUgYSBzdGVwIGF0IGluZGV4ICR7aW5kZXh9LmApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdVcmw6IHRoaXMucmF3VXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aE5hbWU6IHVybC5wYXRobmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBzOiBzdGVwcy5zbGljZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RlcFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkVXJsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogcmVxdWVzdEJvZHkob3B0aW9ucyksXG4gICAgICAgICAgICBoZWFkZXJzOiBvcHRpb25zLmhlYWRlcnMgPz8ge30sXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtZWFzdXJlKGxvZywgJ2V4ZWN1dGlvbicsICgpID0+XG4gICAgICAgICAgICBoYW5kbGVyLmVudHJ5KHsgLi4uY29udGV4dCwgbG9nIH0sIHJlcSksXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdFRvUmVzcG9uc2UocmVzdWx0LCBpbmNsdWRlQm9keUluTG9ncylcblxuICAgICAgICBpZiAoY29udGV4dC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAneC10aW1lb3V0JzogJzEnLFxuICAgICAgICAgICAgICAgIC4uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2cgPSBsb2cuZW5yaWNoUmVzZXJ2ZWQoe1xuICAgICAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlc3BvbnNlLmxvZ0JvZHksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoJ1JlcXVlc3QgRU5EJylcbiAgICAgICAgICAgIGF3YWl0IHN1Y2Nlc3MoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nLndhcm4oJ1JlcXVlc3QgRU5EJylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGVycm9yVG9SZXNwb25zZShlKVxuICAgICAgICAgICAgbG9nID0gbG9nLmVucmljaFJlc2VydmVkKHsgcmVzcG9uc2UgfSlcbiAgICAgICAgICAgIGxvZy5lcnJvcignUmVxdWVzdCBFTkQnLCBlKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH0gY2F0Y2ggKGNvbnZlcnRFcnJvcikge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdDb3VsZCBub3QgY29udmVydCBleGNlcHRpb24gdG8gZXJyb3IgcmVzcG9uc2UuJywgY29udmVydEVycm9yKVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVzdWx0VG9SZXNwb25zZShyZXN1bHQ6IFJlc3VsdCwgd2l0aExvZ0JvZHk6IGJvb2xlYW4pOiBSZXNwb25zZSAmIHsgbG9nQm9keT86IHVua25vd24gfSB7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgc3RhdHVzOiAyMDQsXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IGxvZ0JvZHkgPSB3aXRoTG9nQm9keSA/IHJlc3VsdCA6IHVuZGVmaW5lZFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICBib2R5OiByZXN1bHQsXG4gICAgICAgICAgICBsb2dCb2R5LFxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlc3VsdC5ib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogcmVzdWx0LmhlYWRlcnMgPz8ge30sXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzID8/IDIwMCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdWx0LmJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBsb2dCb2R5ID0gd2l0aExvZ0JvZHkgPyByZXN1bHQuYm9keSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB3aXRoQ29udGVudFR5cGUocmVzdWx0LmhlYWRlcnMsICd0ZXh0L3BsYWluJyksXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzID8/IDIwMCxcbiAgICAgICAgICAgICAgICBib2R5OiByZXN1bHQuYm9keSxcbiAgICAgICAgICAgICAgICBsb2dCb2R5LFxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihyZXN1bHQuYm9keSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ0JvZHkgPSB3aXRoTG9nQm9keSA/IHJlc3VsdC5ib2R5LnRvU3RyaW5nKCdiYXNlNjQnKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB3aXRoQ29udGVudFR5cGUocmVzdWx0LmhlYWRlcnMsICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMgPz8gMjAwLFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlc3VsdC5ib2R5LFxuICAgICAgICAgICAgICAgIGxvZ0JvZHksXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBsb2dCb2R5ID0gd2l0aExvZ0JvZHkgPyByZXN1bHQuYm9keSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB3aXRoQ29udGVudFR5cGUocmVzdWx0LmhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uJyksXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzID8/IDIwMCxcbiAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXN1bHQuYm9keSksXG4gICAgICAgICAgICAgICAgbG9nQm9keSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gd2l0aG91dFJlcXVlc3RCb2R5KG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zICYgeyBtZXRob2Q6IHN0cmluZyB9KSB7XG4gICAgaWYgKCdqc29uJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsganNvbiwgLi4uYm9keWxlc3MgfSA9IG9wdGlvbnNcbiAgICAgICAgcmV0dXJuIGJvZHlsZXNzXG4gICAgfVxuICAgIGlmICgnYm9keScgaW4gb3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IGJvZHksIC4uLmJvZHlsZXNzIH0gPSBvcHRpb25zXG4gICAgICAgIHJldHVybiBib2R5bGVzc1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0Qm9keShvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyk6IEpzb24gfCBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICgnanNvbicgaW4gb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5qc29uXG4gICAgfVxuICAgIGlmICgnYm9keScgaW4gb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5ib2R5XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gd2l0aENvbnRlbnRUeXBlKGhlYWRlcnM6IFJlc3BvbnNlSGVhZGVycyB8IHVuZGVmaW5lZCwgY29udGVudFR5cGU6IHN0cmluZykge1xuICAgIGlmICghaGVhZGVycykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6IGNvbnRlbnRUeXBlLFxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghaGVhZGVyc1snY29udGVudC10eXBlJ10pIHtcbiAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBjb250ZW50VHlwZVxuICAgIH1cbiAgICByZXR1cm4gaGVhZGVyc1xufVxuXG5mdW5jdGlvbiBlcnJvclRvUmVzcG9uc2UoZTogdW5rbm93bik6IFJlc3BvbnNlIHtcbiAgICBjb25zdCB7IGJvZHksIHN0YXR1c0NvZGU6IHN0YXR1cyB9ID0gZSBhcyB7IGJvZHk/OiB1bmtub3duOyBzdGF0dXNDb2RlPzogbnVtYmVyIH1cbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA/PyA1MDAsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID8/IDUwMCxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPz8gNTAwLFxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xpZW50RnJvbUhlYWRlcnMoXG4gICAgaGVhZGVyczogeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCxcbik6IENsaWVudEluZm8ge1xuICAgIGlmICghaGVhZGVycykge1xuICAgICAgICByZXR1cm4ge31cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3BlcmF0aW9uSWQ6IGhlYWRlcnNbJ3gtcmVxdWVzdC1pZCddID8/IGhlYWRlcnNbJ3JlcXVlc3QtaWQnXSxcbiAgICAgICAgY2xpZW50SWQ6XG4gICAgICAgICAgICBoZWFkZXJzWyd4LWNsaWVudC1pZCddID8/XG4gICAgICAgICAgICBoZWFkZXJzWyd4LWluc3RhbGxhdGlvbi1pZCddID8/XG4gICAgICAgICAgICBoZWFkZXJzWydjbGllbnQtaWQnXSA/P1xuICAgICAgICAgICAgaGVhZGVyc1snaW5zdGFsbGF0aW9uLWlkJ10sXG4gICAgICAgIGNsaWVudElwOiBoZWFkZXJzWyd4LWZvcndhcmRlZC1mb3InXSxcbiAgICAgICAgdXNlckFnZW50OiBoZWFkZXJzWyd4LWZvcndhcmRlZC1mb3ItdXNlci1hZ2VudCddID8/IGhlYWRlcnNbJ3VzZXItYWdlbnQnXSxcbiAgICB9XG59XG4iXX0=
232
+ function eTagged(requestHeaders, response) {
233
+ if (response.headers.etag || !response.body) {
234
+ return response;
235
+ }
236
+ const etag = hash('sha1', response.body, 'base64').slice(0, -1);
237
+ response.headers.etag = etag;
238
+ if (requestHeaders['if-none-match'] === etag) {
239
+ response.status = 304;
240
+ delete response.body;
241
+ }
242
+ return response;
243
+ }
244
+ async function compressed(requestHeaders, response) {
245
+ if (!response.body || response.body.length < 32_768 || response.headers['content-encoding']) {
246
+ return response;
247
+ }
248
+ const encodings = requestHeaders['accept-encoding']?.split(',').map(e => e.trim());
249
+ if (!encodings?.includes('br')) {
250
+ return response;
251
+ }
252
+ return {
253
+ status: response.status,
254
+ headers: {
255
+ 'content-encoding': 'br',
256
+ ...response.headers,
257
+ },
258
+ body: await compress(response.body),
259
+ };
260
+ }
261
+ function compress(body) {
262
+ return new Promise((resolve, reject) => {
263
+ brotliCompress(body, {}, (error, result) => {
264
+ if (error) {
265
+ reject(error);
266
+ return;
267
+ }
268
+ resolve(result);
269
+ });
270
+ });
271
+ }
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImh0dHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNsQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzFDLE9BQU8sRUFBVyxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUE7QUEwQmhELE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUNoQyxHQUFlLEVBQ2YsT0FBNkIsRUFDN0IsT0FBb0IsRUFDcEIsT0FBdUIsRUFDdkIsT0FBK0I7SUFFL0IsTUFBTSxTQUFTLEdBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFBO0lBQ3pGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFBO0lBQzlELE1BQU0sVUFBVSxHQUFHLGlCQUFpQjtRQUNoQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRTtRQUN4QyxDQUFDLENBQUMsa0JBQWtCLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDaEUsSUFBSSxXQUFXLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO0lBQ2pGLElBQUksU0FBUyxFQUFFLENBQUM7UUFDWixXQUFXLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDcEMsT0FBTztZQUNILE9BQU8sRUFBRSxFQUFFO1lBQ1gsTUFBTSxFQUFFLEdBQUc7U0FDZCxDQUFB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RSxFQUFFO1lBQ3ZDLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNiLE9BQU07WUFDVixDQUFDO1lBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ25CLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaGFzaCB9IGZyb20gJ25vZGU6Y3J5cHRvJ1xuaW1wb3J0IHsgYnJvdGxpQ29tcHJlc3MgfSBmcm9tICdub2RlOnpsaWInXG5pbXBvcnQgeyBDb250ZXh0LCBtZWFzdXJlIH0gZnJvbSAnLi4vY29udGV4dC5qcydcbmltcG9ydCB0eXBlIHsgSnNvbiwgUGFyc2VkVXJsLCBSZXNwb25zZUhlYWRlcnMsIFJlc3VsdCB9IGZyb20gJy4uL2h0dHAuanMnXG5pbXBvcnQgeyBDbGllbnRJbmZvLCBSb290TG9nZ2VyIH0gZnJvbSAnLi9jb250ZXh0LmpzJ1xuaW1wb3J0IHR5cGUgeyBIdHRwSGFuZGxlciB9IGZyb20gJy4vaHR0cC1yZWdpc3RyeS5qcydcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2UgPSB7XG4gICAgaGVhZGVyczogeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICAgIHN0YXR1czogbnVtYmVyXG4gICAgYm9keT86IHN0cmluZyB8IEJ1ZmZlclxufVxuXG50eXBlIFJlcXVlc3RPcHRpb25zID0gQm9keWxlc3NSZXF1ZXN0T3B0aW9ucyB8IFN0cmluZ1JlcXVlc3RPcHRpb25zIHwgSnNvblJlcXVlc3RPcHRpb25zXG5cbnR5cGUgQm9keWxlc3NSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICB1cmk6IHN0cmluZ1xuICAgIGhlYWRlcnM/OiB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG59XG5cbnR5cGUgU3RyaW5nUmVxdWVzdE9wdGlvbnMgPSBCb2R5bGVzc1JlcXVlc3RPcHRpb25zICYge1xuICAgIGJvZHk6IHN0cmluZ1xufVxuXG50eXBlIEpzb25SZXF1ZXN0T3B0aW9ucyA9IEJvZHlsZXNzUmVxdWVzdE9wdGlvbnMgJiB7XG4gICAganNvbjogSnNvblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVJlcXVlc3QoXG4gICAgbG9nOiBSb290TG9nZ2VyLFxuICAgIGNvbnRleHQ6IE9taXQ8Q29udGV4dCwgJ2xvZyc+LFxuICAgIGhhbmRsZXI6IEh0dHBIYW5kbGVyLFxuICAgIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLFxuICAgIHN1Y2Nlc3M6ICgpID0+IFByb21pc2U8dW5rbm93bj4sXG4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgaXNTaGFsbG93ID1cbiAgICAgICAgY29udGV4dC5lbnYuU0hBTExPV19LRVkgJiYgb3B0aW9ucy5oZWFkZXJzPy5bJ3gtc2hhbGxvdyddID09PSBjb250ZXh0LmVudi5TSEFMTE9XX0tFWVxuICAgIGNvbnN0IGluY2x1ZGVCb2R5SW5Mb2dzID0gIWhhbmRsZXIuY29uZmlnPy5leGNsdWRlQm9keUZyb21Mb2dzXG4gICAgY29uc3QgbG9nUmVxdWVzdCA9IGluY2x1ZGVCb2R5SW5Mb2dzXG4gICAgICAgID8geyBtZXRob2Q6IGhhbmRsZXIubWV0aG9kLCAuLi5vcHRpb25zIH1cbiAgICAgICAgOiB3aXRob3V0UmVxdWVzdEJvZHkoeyBtZXRob2Q6IGhhbmRsZXIubWV0aG9kLCAuLi5vcHRpb25zIH0pXG4gICAgbGV0IGVucmljaGVkTG9nID0gbG9nLmVucmljaFJlc2VydmVkKHsgbWV0YTogY29udGV4dC5tZXRhLCByZXF1ZXN0OiBsb2dSZXF1ZXN0IH0pXG4gICAgaWYgKGlzU2hhbGxvdykge1xuICAgICAgICBlbnJpY2hlZExvZy50cmFjZSgnU2hhbGxvdyByZXF1ZXN0JylcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgc3RhdHVzOiAyMDQsXG4gICAgICAgIH1cbiAgICB9XG4gICAgZW5yaWNoZWRMb2cudHJhY2UoJ1JlcXVlc3QgQkVHSU4nKVxuICAgIHRyeSB7XG4gICAgICAgIGxldCBwYXJzZWRVcmw6XG4gICAgICAgICAgICB8IChQYXJzZWRVcmwgJiB7XG4gICAgICAgICAgICAgICAgICAvKiogQGlnbm9yZSAqL1xuICAgICAgICAgICAgICAgICAgX19wcm90b19fOiB1bmtub3duXG4gICAgICAgICAgICAgICAgICAvKiogQGlnbm9yZSAqL1xuICAgICAgICAgICAgICAgICAgdG9TdHJpbmc6ICgpID0+IHN0cmluZ1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfCB1bmRlZmluZWRcbiAgICAgICAgbGV0IHBhdGhTdGVwczogc3RyaW5nW10gfCB1bmRlZmluZWRcbiAgICAgICAgY29uc3QgcmVxID0ge1xuICAgICAgICAgICAgcmF3VXJsOiBvcHRpb25zLnVyaSxcbiAgICAgICAgICAgIGdldCB1cmwoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZFVybCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkVXJsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodGhpcy5yYXdVcmwpXG4gICAgICAgICAgICAgICAgcGFyc2VkVXJsID0ge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1udWxsXG4gICAgICAgICAgICAgICAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaGFzaDogdXJsLmhhc2gsXG4gICAgICAgICAgICAgICAgICAgIGhvc3Q6IHVybC5ob3N0LFxuICAgICAgICAgICAgICAgICAgICBob3N0bmFtZTogdXJsLmhvc3RuYW1lLFxuICAgICAgICAgICAgICAgICAgICBocmVmOiB1cmwuaHJlZixcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiB1cmwub3JpZ2luLFxuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDogdXJsLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZTogdXJsLnBhdGhuYW1lLFxuICAgICAgICAgICAgICAgICAgICBwb3J0OiB1cmwucG9ydCxcbiAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2w6IHVybC5wcm90b2NvbCxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoOiB1cmwuc2VhcmNoLFxuICAgICAgICAgICAgICAgICAgICBnZXQgc2VhcmNoUGFyYW1zKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybC5zZWFyY2hQYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdG9KU09OOiAoKSA9PiB1cmwudG9KU09OKCksXG4gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiAoKSA9PiB1cmwudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6IHVybC51c2VybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aFN0ZXBBdDogKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZXBzID0gKHBhdGhTdGVwcyA/Pz0gdXJsLnBhdGhuYW1lLnNwbGl0KCcvJykpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGVwID0gc3RlcHNbaW5kZXggKyAxXVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGVwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJhbmdlRXJyb3IoYFBhdGggZG9lcyBub3QgaGF2ZSBhIHN0ZXAgYXQgaW5kZXggJHtpbmRleH0uYCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1VybDogdGhpcy5yYXdVcmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoTmFtZTogdXJsLnBhdGhuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHM6IHN0ZXBzLnNsaWNlKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGVwXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWRVcmxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiByZXF1ZXN0Qm9keShvcHRpb25zKSxcbiAgICAgICAgICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyA/PyB7fSxcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1lYXN1cmUobG9nLmVucmljaFJlc2VydmVkKHsgbWV0YTogY29udGV4dC5tZXRhIH0pLCAnZXhlY3V0aW9uJywgKCkgPT5cbiAgICAgICAgICAgIGhhbmRsZXIuZW50cnkoeyAuLi5jb250ZXh0LCBsb2c6IGVucmljaGVkTG9nIH0sIHJlcSksXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdFRvUmVzcG9uc2UocmVzdWx0LCBpbmNsdWRlQm9keUluTG9ncylcblxuICAgICAgICBpZiAoY29udGV4dC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAneC10aW1lb3V0JzogJzEnLFxuICAgICAgICAgICAgICAgIC4uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBlbnJpY2hlZExvZyA9IGVucmljaGVkTG9nLmVucmljaFJlc2VydmVkKHtcbiAgICAgICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgICAgICBib2R5OiByZXNwb25zZS5sb2dCb2R5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA8IDMwMCkge1xuICAgICAgICAgICAgZW5yaWNoZWRMb2cuZGVidWcoJ1JlcXVlc3QgRU5EJylcbiAgICAgICAgICAgIGF3YWl0IHN1Y2Nlc3MoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW5yaWNoZWRMb2cud2FybignUmVxdWVzdCBFTkQnKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBjb21wcmVzc2VkKHJlcS5oZWFkZXJzLCBlVGFnZ2VkKHJlcS5oZWFkZXJzLCByZXNwb25zZSkpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBlcnJvclRvUmVzcG9uc2UoZSlcbiAgICAgICAgICAgIGVucmljaGVkTG9nID0gZW5yaWNoZWRMb2cuZW5yaWNoUmVzZXJ2ZWQoeyByZXNwb25zZSB9KVxuICAgICAgICAgICAgZW5yaWNoZWRMb2cuZXJyb3IoJ1JlcXVlc3QgRU5EJywgZSlcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9IGNhdGNoIChjb252ZXJ0RXJyb3IpIHtcbiAgICAgICAgICAgIGVucmljaGVkTG9nLmVycm9yKCdDb3VsZCBub3QgY29udmVydCBleGNlcHRpb24gdG8gZXJyb3IgcmVzcG9uc2UuJywgY29udmVydEVycm9yKVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVzdWx0VG9SZXNwb25zZShyZXN1bHQ6IFJlc3VsdCwgd2l0aExvZ0JvZHk6IGJvb2xlYW4pOiBSZXNwb25zZSAmIHsgbG9nQm9keT86IHVua25vd24gfSB7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgc3RhdHVzOiAyMDQsXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IGxvZ0JvZHkgPSB3aXRoTG9nQm9keSA/IHJlc3VsdCA6IHVuZGVmaW5lZFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICBib2R5OiByZXN1bHQsXG4gICAgICAgICAgICBsb2dCb2R5LFxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlc3VsdC5ib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogcmVzdWx0LmhlYWRlcnMgPz8ge30sXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzID8/IDIwMCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdWx0LmJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBsb2dCb2R5ID0gd2l0aExvZ0JvZHkgPyByZXN1bHQuYm9keSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB3aXRoQ29udGVudFR5cGUocmVzdWx0LmhlYWRlcnMsICd0ZXh0L3BsYWluJyksXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzID8/IDIwMCxcbiAgICAgICAgICAgICAgICBib2R5OiByZXN1bHQuYm9keSxcbiAgICAgICAgICAgICAgICBsb2dCb2R5LFxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihyZXN1bHQuYm9keSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ0JvZHkgPSB3aXRoTG9nQm9keSA/IHJlc3VsdC5ib2R5LnRvU3RyaW5nKCdiYXNlNjQnKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB3aXRoQ29udGVudFR5cGUocmVzdWx0LmhlYWRlcnMsICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMgPz8gMjAwLFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlc3VsdC5ib2R5LFxuICAgICAgICAgICAgICAgIGxvZ0JvZHksXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBsb2dCb2R5ID0gd2l0aExvZ0JvZHkgPyByZXN1bHQuYm9keSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB3aXRoQ29udGVudFR5cGUocmVzdWx0LmhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uJyksXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzID8/IDIwMCxcbiAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXN1bHQuYm9keSksXG4gICAgICAgICAgICAgICAgbG9nQm9keSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gd2l0aG91dFJlcXVlc3RCb2R5KG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zICYgeyBtZXRob2Q6IHN0cmluZyB9KSB7XG4gICAgaWYgKCdqc29uJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsganNvbiwgLi4uYm9keWxlc3MgfSA9IG9wdGlvbnNcbiAgICAgICAgcmV0dXJuIGJvZHlsZXNzXG4gICAgfVxuICAgIGlmICgnYm9keScgaW4gb3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IGJvZHksIC4uLmJvZHlsZXNzIH0gPSBvcHRpb25zXG4gICAgICAgIHJldHVybiBib2R5bGVzc1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0Qm9keShvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyk6IEpzb24gfCBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICgnanNvbicgaW4gb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5qc29uXG4gICAgfVxuICAgIGlmICgnYm9keScgaW4gb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5ib2R5XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gd2l0aENvbnRlbnRUeXBlKGhlYWRlcnM6IFJlc3BvbnNlSGVhZGVycyB8IHVuZGVmaW5lZCwgY29udGVudFR5cGU6IHN0cmluZykge1xuICAgIGlmICghaGVhZGVycykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6IGNvbnRlbnRUeXBlLFxuICAgICAgICB9XG4gICAgfVxuICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID8/PSBjb250ZW50VHlwZVxuICAgIHJldHVybiBoZWFkZXJzXG59XG5cbmZ1bmN0aW9uIGVycm9yVG9SZXNwb25zZShlOiB1bmtub3duKTogUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgYm9keSwgc3RhdHVzQ29kZTogc3RhdHVzIH0gPSBlIGFzIHsgYm9keT86IHVua25vd247IHN0YXR1c0NvZGU/OiBudW1iZXIgfVxuICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJzogJ3RleHQvcGxhaW4nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID8/IDUwMCxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPz8gNTAwLFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA/PyA1MDAsXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGllbnRGcm9tSGVhZGVycyhcbiAgICBoZWFkZXJzOiB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgdW5kZWZpbmVkLFxuKTogQ2xpZW50SW5mbyB7XG4gICAgaWYgKCFoZWFkZXJzKSB7XG4gICAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgICBjb25zdCBhZGRyZXNzID0gaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yJ10/LnNwbGl0KCc6JylcbiAgICByZXR1cm4ge1xuICAgICAgICBvcGVyYXRpb25JZDogaGVhZGVyc1sneC1yZXF1ZXN0LWlkJ10gPz8gaGVhZGVyc1sncmVxdWVzdC1pZCddLFxuICAgICAgICBjbGllbnRJZDpcbiAgICAgICAgICAgIGhlYWRlcnNbJ3gtY2xpZW50LWlkJ10gPz9cbiAgICAgICAgICAgIGhlYWRlcnNbJ3gtaW5zdGFsbGF0aW9uLWlkJ10gPz9cbiAgICAgICAgICAgIGhlYWRlcnNbJ2NsaWVudC1pZCddID8/XG4gICAgICAgICAgICBoZWFkZXJzWydpbnN0YWxsYXRpb24taWQnXSxcbiAgICAgICAgY2xpZW50SXA6IGFkZHJlc3M/LlswXSxcbiAgICAgICAgY2xpZW50UG9ydDogTnVtYmVyKGFkZHJlc3M/LlsxXSkgfHwgdW5kZWZpbmVkLFxuICAgICAgICB1c2VyQWdlbnQ6IGhlYWRlcnNbJ3gtZm9yd2FyZGVkLWZvci11c2VyLWFnZW50J10gPz8gaGVhZGVyc1sndXNlci1hZ2VudCddLFxuICAgIH1cbn1cblxuZnVuY3Rpb24gZVRhZ2dlZChcbiAgICByZXF1ZXN0SGVhZGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICByZXNwb25zZTogUmVzcG9uc2UgJiB7IGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfSxcbik6IFJlc3BvbnNlIHtcbiAgICBpZiAocmVzcG9uc2UuaGVhZGVycy5ldGFnIHx8ICFyZXNwb25zZS5ib2R5KSB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH1cbiAgICBjb25zdCBldGFnID0gaGFzaCgnc2hhMScsIHJlc3BvbnNlLmJvZHksICdiYXNlNjQnKS5zbGljZSgwLCAtMSlcbiAgICByZXNwb25zZS5oZWFkZXJzLmV0YWcgPSBldGFnXG4gICAgaWYgKHJlcXVlc3RIZWFkZXJzWydpZi1ub25lLW1hdGNoJ10gPT09IGV0YWcpIHtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzID0gMzA0XG4gICAgICAgIGRlbGV0ZSByZXNwb25zZS5ib2R5XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb21wcmVzc2VkKFxuICAgIHJlcXVlc3RIZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuICAgIHJlc3BvbnNlOiBSZXNwb25zZSAmIHsgaGVhZGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9LFxuKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGlmICghcmVzcG9uc2UuYm9keSB8fCByZXNwb25zZS5ib2R5Lmxlbmd0aCA8IDMyXzc2OCB8fCByZXNwb25zZS5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfVxuICAgIGNvbnN0IGVuY29kaW5ncyA9IHJlcXVlc3RIZWFkZXJzWydhY2NlcHQtZW5jb2RpbmcnXT8uc3BsaXQoJywnKS5tYXAoZSA9PiBlLnRyaW0oKSlcbiAgICBpZiAoIWVuY29kaW5ncz8uaW5jbHVkZXMoJ2JyJykpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnY29udGVudC1lbmNvZGluZyc6ICdicicsXG4gICAgICAgICAgICAuLi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBhd2FpdCBjb21wcmVzcyhyZXNwb25zZS5ib2R5KSxcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbXByZXNzKGJvZHk6IHN0cmluZyB8IEJ1ZmZlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYnJvdGxpQ29tcHJlc3MoYm9keSwge30sIChlcnJvciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgfSlcbiAgICB9KVxufVxuIl19
package/host/logging.js CHANGED
@@ -25,22 +25,9 @@ class LogBuffer {
25
25
  }
26
26
  collect(level, numericLogLevel, message, error, fields, reservedEnrichment, customEnrichment) {
27
27
  const offset = performance.now();
28
- const json = JSON.stringify({
29
- timestamp: highPrecisionISODate(offset),
30
- level,
31
- message,
32
- error: errorAsJson(error),
33
- ...reservedEnrichment,
34
- ...extra(fields, customEnrichment),
35
- });
36
- this.#entries.push({
37
- timestamp: offset,
38
- level,
39
- message,
40
- error,
41
- json,
42
- });
43
- this.#size += json.length;
28
+ const entry = this.#toEntry(highPrecisionISODate(offset), offset, level, message, error, fields, reservedEnrichment, customEnrichment);
29
+ this.#entries.push(entry);
30
+ this.#size += entry.json.length;
44
31
  if (this.#asyncTransport === false) {
45
32
  // eslint-disable-next-line no-void
46
33
  void this.#transport.sendEntries(this.#entries, this.#signal);
@@ -99,6 +86,41 @@ class LogBuffer {
99
86
  this.#flusher = this.#transport.sendEntries(entries, this.#signal);
100
87
  }
101
88
  }
89
+ #toEntry(timestamp, offset, level, message, error, fields, reservedEnrichment, customEnrichment) {
90
+ try {
91
+ return {
92
+ timestamp: offset,
93
+ level,
94
+ message,
95
+ error,
96
+ json: JSON.stringify({
97
+ timestamp,
98
+ level,
99
+ message,
100
+ error: errorAsJson(error, 0),
101
+ ...reservedEnrichment,
102
+ ...extra(fields, customEnrichment),
103
+ }),
104
+ };
105
+ }
106
+ catch (e) {
107
+ this.collect('warning', 2, 'Error serializing error.', e, undefined, reservedEnrichment, customEnrichment);
108
+ return {
109
+ timestamp: offset,
110
+ level,
111
+ message,
112
+ error,
113
+ json: JSON.stringify({
114
+ timestamp,
115
+ level,
116
+ message,
117
+ error: safeErrorAsJson(error, 0),
118
+ ...reservedEnrichment,
119
+ ...extra(fields, customEnrichment),
120
+ }),
121
+ };
122
+ }
123
+ }
102
124
  }
103
125
  function extra(fields, customEnrichment) {
104
126
  if (!fields) {
@@ -172,20 +194,59 @@ class EnrichingLogger {
172
194
  this.#buffer.collect('fatal', 0, message, error, fields, this.#reservedEnrichment, this.#customEnrichment);
173
195
  }
174
196
  }
175
- function errorAsJson(error) {
197
+ function errorAsJson(error, depth) {
176
198
  if (error === undefined || error === null) {
177
199
  return undefined;
178
200
  }
201
+ if (depth > 5) {
202
+ return undefined;
203
+ }
179
204
  if (error instanceof Error) {
180
205
  return {
181
206
  message: error.message,
182
207
  name: error.name,
183
208
  stack: error.stack,
209
+ cause: errorAsJson(error.cause, depth + 1),
210
+ errors: errorAsJson(error.errors, depth + 1),
184
211
  ...error,
185
212
  };
186
213
  }
187
214
  if (error instanceof Object) {
215
+ if (Array.isArray(error)) {
216
+ return error.map(errorAsJson);
217
+ }
218
+ return {
219
+ // eslint-disable-next-line @typescript-eslint/no-misused-spread
220
+ ...error,
221
+ };
222
+ }
223
+ return {
224
+ message: error?.toString(),
225
+ name: typeof error,
226
+ };
227
+ }
228
+ function safeErrorAsJson(error, depth) {
229
+ if (error === undefined || error === null) {
230
+ return undefined;
231
+ }
232
+ if (depth > 5) {
233
+ return undefined;
234
+ }
235
+ if (error instanceof Error) {
236
+ return {
237
+ message: error.message,
238
+ name: error.name,
239
+ stack: error.stack,
240
+ cause: safeErrorAsJson(error.cause, depth + 1),
241
+ errors: safeErrorAsJson(error.errors, depth + 1),
242
+ };
243
+ }
244
+ if (error instanceof Object) {
245
+ if (Array.isArray(error)) {
246
+ return error.map(safeErrorAsJson);
247
+ }
188
248
  return {
249
+ // eslint-disable-next-line @typescript-eslint/no-misused-spread
189
250
  ...error,
190
251
  };
191
252
  }
@@ -194,4 +255,4 @@ function errorAsJson(error) {
194
255
  name: typeof error,
195
256
  };
196
257
  }
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxvZ2dpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBSTdDLE1BQU0sVUFBVSxVQUFVLENBQ3RCLFNBQXVCLEVBQ3ZCLGVBQXFDLEVBQ3JDLE1BQW1CO0lBRW5CLE9BQU8sSUFBSSxlQUFlLENBQ3RCLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFDaEMsZUFBZTtRQUNYLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUNsRixDQUFDLENBQUMsQ0FBQyxFQUNQLE1BQU0sQ0FDVCxDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFBO0FBRTlFLE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxjQUFzQjtJQUN2RCxNQUFNLFFBQVEsR0FBRywwQkFBMEIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsQ0FBQTtJQUNqRixPQUFPLENBQ0gsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RELENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ25ELEdBQUcsQ0FDTixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sU0FBUztJQUNGLFVBQVUsQ0FBYztJQUNqQyxRQUFRLEdBQWUsRUFBRSxDQUFBO0lBQ3pCLEtBQUssR0FBRyxD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TSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU07UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2hCLE9BQU8sRUFDUCxDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBMEI7UUFDN0QsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU07UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2hCLE9BQU8sRUFDUCxDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0lBQ0QsSUFBSSxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBMEI7UUFDNUQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU07UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2hCLE1BQU0sRUFDTixDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0lBQ0QsSUFBSSxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBMEI7UUFDNUQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU07UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2hCLFNBQVMsRUFDVCxDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBMEI7UUFDN0QsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU07UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2hCLE9BQU8sRUFDUCxDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBMEI7UUFDN0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2hCLE9BQU8sRUFDUCxDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0NBQ0o7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFjO0lBQy9CLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDeEMsT0FBTyxTQUFTLENBQUE7SUFDcEIsQ0FBQztJQUNELElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE9BQU87WUFDSCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztZQUNsQixHQUFJLEtBQStDO1NBQzlDLENBQUE7SUFDYixDQUFDO0lBQ0QsSUFBSSxLQUFLLFlBQVksTUFBTSxFQUFFLENBQUM7UUFDMUIsT0FBTztZQUNILEdBQUcsS0FBSztTQUNILENBQUE7SUFDYixDQUFDO0lBQ0QsT0FBTztRQUNILE9BQU8sRUFBRyxLQUE0QixFQUFFLFFBQVEsRUFBRTtRQUNsRCxJQUFJLEVBQUUsT0FBTyxLQUFLO0tBQ2IsQ0FBQTtBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwZXJmb3JtYW5jZSB9IGZyb20gJ25vZGU6cGVyZl9ob29rcydcbmltcG9ydCB7IEpzb24sIExvZ2dlciB9IGZyb20gJy4uL2NvbnRleHQuanMnXG5pbXBvcnQgeyBMb2dFbnRyeSwgTG9nTGV2ZWwsIExvZ1RyYW5zcG9ydCwgUm9vdExvZ2dlciB9IGZyb20gJy4vY29udGV4dC5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VMb2dnZXIoXG4gICAgdHJhbnNwb3J0OiBMb2dUcmFuc3BvcnQsXG4gICAgbWluaW11bUxvZ0xldmVsOiBMb2dMZXZlbCB8IHVuZGVmaW5lZCxcbiAgICBzaWduYWw6IEFib3J0U2lnbmFsLFxuKTogUm9vdExvZ2dlciB7XG4gICAgcmV0dXJuIG5ldyBFbnJpY2hpbmdMb2dnZXIoXG4gICAgICAgIG5ldyBMb2dCdWZmZXIodHJhbnNwb3J0LCBzaWduYWwpLFxuICAgICAgICBtaW5pbXVtTG9nTGV2ZWxcbiAgICAgICAgICAgID8gWydmYXRhbCcsICdlcnJvcicsICd3YXJuaW5nJywgJ2luZm8nLCAnZGVidWcnLCAndHJhY2UnXS5pbmRleE9mKG1pbmltdW1Mb2dMZXZlbClcbiAgICAgICAgICAgIDogNSxcbiAgICAgICAgc2lnbmFsLFxuICAgIClcbn1cblxuY29uc3QgcGVyZm9ybWFuY2VUaW1lT3JpZ2luMTAwbnMgPSBNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKiAxMF8wMDApXG5cbmV4cG9ydCBmdW5jdGlvbiBoaWdoUHJlY2lzaW9uSVNPRGF0ZShwZXJmb3JtYW5jZU5vdzogbnVtYmVyKSB7XG4gICAgY29uc3Qgbm93MTAwbnMgPSBwZXJmb3JtYW5jZVRpbWVPcmlnaW4xMDBucyArIE1hdGgucm91bmQocGVyZm9ybWFuY2VOb3cgKiAxMF8wMDApXG4gICAgcmV0dXJuIChcbiAgICAgICAgbmV3IERhdGUobm93MTAwbnMgLyAxMF8wMDApLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMjApICtcbiAgICAgICAgKG5vdzEwMG5zICUgMTBfMDAwXzAwMCkudG9TdHJpbmcoKS5wYWRTdGFydCg3LCAnMCcpICtcbiAgICAgICAgJ1onXG4gICAgKVxufVxuXG5jbGFzcyBMb2dCdWZmZXIge1xuICAgIHJlYWRvbmx5ICN0cmFuc3BvcnQ6IExvZ1RyYW5zcG9ydFxuICAgICNlbnRyaWVzOiBMb2dFbnRyeVtdID0gW11cbiAgICAjc2l6ZSA9IDBcbiAgICAjZmx1c2hlcj86IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWRcbiAgICByZWFkb25seSAjc2lnbmFsOiBBYm9ydFNpZ25hbFxuICAgICNhc3luY1RyYW5zcG9ydDogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAgICN0aW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZFxuXG4gICAgY29uc3RydWN0b3IodHJhbnNwb3J0OiBMb2dUcmFuc3BvcnQsIHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgICAgICAgdGhpcy4jdHJhbnNwb3J0ID0gdHJhbnNwb3J0XG4gICAgICAgIHRoaXMuI3NpZ25hbCA9IHNpZ25hbFxuICAgIH1cblxuICAgIGNvbGxlY3QoXG4gICAgICAgIGxldmVsOiBMb2dMZXZlbCxcbiAgICAgICAgbnVtZXJpY0xvZ0xldmVsOiBudW1iZXIsXG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgICAgZXJyb3I6IHVua25vd24sXG4gICAgICAgIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkLFxuICAgICAgICByZXNlcnZlZEVucmljaG1lbnQ6IG9iamVjdCB8IHVuZGVmaW5lZCxcbiAgICAgICAgY3VzdG9tRW5yaWNobWVudDogb2JqZWN0IHwgdW5kZWZpbmVkLFxuICAgICkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgdGltZXN0YW1wOiBoaWdoUHJlY2lzaW9uSVNPRGF0ZShvZmZzZXQpLFxuICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yQXNKc29uKGVycm9yKSxcbiAgICAgICAgICAgIC4uLnJlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgIC4uLmV4dHJhKGZpZWxkcywgY3VzdG9tRW5yaWNobWVudCksXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuI2VudHJpZXMucHVzaCh7XG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9mZnNldCxcbiAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAganNvbixcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy4jc2l6ZSArPSBqc29uLmxlbmd0aFxuXG4gICAgICAgIGlmICh0aGlzLiNhc3luY1RyYW5zcG9ydCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICAgICAgICB2b2lkIHRoaXMuI3RyYW5zcG9ydC5zZW5kRW50cmllcyh0aGlzLiNlbnRyaWVzLCB0aGlzLiNzaWduYWwpXG4gICAgICAgICAgICB0aGlzLiNlbnRyaWVzID0gW11cbiAgICAgICAgICAgIHRoaXMuI3NpemUgPSAwXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jYXN5bmNUcmFuc3BvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy4jYXN5bmNUcmFuc3BvcnQgPSB0cnVlXG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNmbHVzaGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzZW5kUmVzdWx0ID0gdGhpcy4jdHJhbnNwb3J0LnNlbmRFbnRyaWVzKHRoaXMuI2VudHJpZXMsIHRoaXMuI3NpZ25hbClcbiAgICAgICAgICAgICAgICB0aGlzLiNlbnRyaWVzID0gW11cbiAgICAgICAgICAgICAgICB0aGlzLiNzaXplID0gMFxuICAgICAgICAgICAgICAgIGlmIChzZW5kUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2ZsdXNoZXIgPSBzZW5kUmVzdWx0XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jYXN5bmNUcmFuc3BvcnQgPSBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobnVtZXJpY0xvZ0xldmVsIDwgMiB8fCB0aGlzLiNlbnRyaWVzLmxlbmd0aCA+IDggfHwgdGhpcy4jc2l6ZSA+IDY0XzAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICAgICAgICAgICAgdm9pZCB0aGlzLmZsdXNoKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgICAgICAgICAgICAgICB2b2lkIHRoaXMuZmx1c2goKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiN0aW1lb3V0ID0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSwgMjAwMClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy4jZW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3N0YXJ0Rmx1c2godGhpcy4jZW50cmllcylcbiAgICAgICAgdGhpcy4jZW50cmllcyA9IFtdXG4gICAgICAgIHRoaXMuI3NpemUgPSAwXG4gICAgICAgIGlmICh0aGlzLiN0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy4jdGltZW91dClcbiAgICAgICAgICAgIHRoaXMuI3RpbWVvdXQgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy4jZmx1c2hlclxuICAgIH1cblxuICAgICNzdGFydEZsdXNoKGVudHJpZXM6IExvZ0VudHJ5W10pIHtcbiAgICAgICAgaWYgKHRoaXMuI2ZsdXNoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI2ZsdXNoZXIgPSB0aGlzLiNmbHVzaGVyLnRoZW4oKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLiN0cmFuc3BvcnQuc2VuZEVudHJpZXMoZW50cmllcywgdGhpcy4jc2lnbmFsKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2ZsdXNoZXIgPSB0aGlzLiN0cmFuc3BvcnQuc2VuZEVudHJpZXMoZW50cmllcywgdGhpcy4jc2lnbmFsKVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBleHRyYShmaWVsZHM6IG9iamVjdCB8IHVuZGVmaW5lZCwgY3VzdG9tRW5yaWNobWVudDogb2JqZWN0IHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgaWYgKCFjdXN0b21FbnJpY2htZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1c3RvbUVucmljaG1lbnRcbiAgICB9XG4gICAgaWYgKCFjdXN0b21FbnJpY2htZW50KSB7XG4gICAgICAgIHJldHVybiBmaWVsZHNcbiAgICB9XG4gICAgcmV0dXJuIHsgLi4uY3VzdG9tRW5yaWNobWVudCwgLi4uZmllbGRzIH1cbn1cblxuY2xhc3MgRW5yaWNoaW5nTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyIHtcbiAgICByZWFkb25seSAjYnVmZmVyOiBMb2dCdWZmZXJcbiAgICByZWFkb25seSAjcmVzZXJ2ZWRFbnJpY2htZW50Pzogb2JqZWN0XG4gICAgcmVhZG9ubHkgI2N1c3RvbUVucmljaG1lbnQ/OiBvYmplY3RcbiAgICByZWFkb25seSAjbGV2ZWw6IG51bWJlclxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGJ1ZmZlcjogTG9nQnVmZmVyLFxuICAgICAgICBsZXZlbDogbnVtYmVyLFxuICAgICAgICByZXNlcnZlZEVucmljaG1lbnQ/OiBvYmplY3QsXG4gICAgICAgIGN1c3RvbUVucmljaG1lbnQ/OiBvYmplY3QsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuI2J1ZmZlciA9IGJ1ZmZlclxuICAgICAgICB0aGlzLiNsZXZlbCA9IGxldmVsXG4gICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCA9IHJlc2VydmVkRW5yaWNobWVudFxuICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50ID0gY3VzdG9tRW5yaWNobWVudFxuICAgIH1cblxuICAgIGVucmljaChmaWVsZHM6IG9iamVjdCk6IExvZ2dlciB7XG4gICAgICAgIHJldHVybiBuZXcgRW5yaWNoaW5nTG9nZ2VyKHRoaXMuI2J1ZmZlciwgdGhpcy4jbGV2ZWwsIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCwge1xuICAgICAgICAgICAgLi4udGhpcy4jY3VzdG9tRW5yaWNobWVudCxcbiAgICAgICAgICAgIC4uLmZpZWxkcyxcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBmbHVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2J1ZmZlci5mbHVzaCgpXG4gICAgfVxuXG4gICAgZW5yaWNoUmVzZXJ2ZWQoZmllbGRzOiBvYmplY3QpOiBFbnJpY2hpbmdMb2dnZXIge1xuICAgICAgICByZXR1cm4gbmV3IEVucmljaGluZ0xvZ2dlcihcbiAgICAgICAgICAgIHRoaXMuI2J1ZmZlcixcbiAgICAgICAgICAgIHRoaXMuI2xldmVsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgICAgICAuLi5maWVsZHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy4jY3VzdG9tRW5yaWNobWVudCxcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHRyYWNlKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLiNsZXZlbCA8IDUpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2J1ZmZlci5jb2xsZWN0KFxuICAgICAgICAgICAgJ3RyYWNlJyxcbiAgICAgICAgICAgIDUsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICB0aGlzLiNyZXNlcnZlZEVucmljaG1lbnQsXG4gICAgICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50LFxuICAgICAgICApXG4gICAgfVxuICAgIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLiNsZXZlbCA8IDQpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2J1ZmZlci5jb2xsZWN0KFxuICAgICAgICAgICAgJ2RlYnVnJyxcbiAgICAgICAgICAgIDQsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICB0aGlzLiNyZXNlcnZlZEVucmljaG1lbnQsXG4gICAgICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50LFxuICAgICAgICApXG4gICAgfVxuICAgIGluZm8obWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuI2xldmVsIDwgMykge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXG4gICAgICAgICAgICAnaW5mbycsXG4gICAgICAgICAgICAzLFxuICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgZmllbGRzLFxuICAgICAgICAgICAgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LFxuICAgICAgICAgICAgdGhpcy4jY3VzdG9tRW5yaWNobWVudCxcbiAgICAgICAgKVxuICAgIH1cbiAgICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLiNsZXZlbCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2J1ZmZlci5jb2xsZWN0KFxuICAgICAgICAgICAgJ3dhcm5pbmcnLFxuICAgICAgICAgICAgMixcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgIHRoaXMuI2N1c3RvbUVucmljaG1lbnQsXG4gICAgICAgIClcbiAgICB9XG4gICAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuI2xldmVsIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXG4gICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgIHRoaXMuI2N1c3RvbUVucmljaG1lbnQsXG4gICAgICAgIClcbiAgICB9XG4gICAgZmF0YWwobWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXG4gICAgICAgICAgICAnZmF0YWwnLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgIHRoaXMuI2N1c3RvbUVucmljaG1lbnQsXG4gICAgICAgIClcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVycm9yQXNKc29uKGVycm9yOiB1bmtub3duKTogSnNvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGVycm9yID09PSB1bmRlZmluZWQgfHwgZXJyb3IgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2ssXG4gICAgICAgICAgICAuLi4oZXJyb3IgYXMgdW5rbm93biBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSksXG4gICAgICAgIH0gYXMgSnNvblxuICAgIH1cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmVycm9yLFxuICAgICAgICB9IGFzIEpzb25cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWVzc2FnZTogKGVycm9yIGFzIG9iamVjdCB8IHVuZGVmaW5lZCk/LnRvU3RyaW5nKCksXG4gICAgICAgIG5hbWU6IHR5cGVvZiBlcnJvcixcbiAgICB9IGFzIEpzb25cbn1cbiJdfQ==
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxvZ2dpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBSTdDLE1BQU0sVUFBVSxVQUFVLENBQ3RCLFNBQXVCLEVBQ3ZCLGVBQXFDLEVBQ3JDLE1BQW1CO0lBRW5CLE9BQU8sSUFBSSxlQUFlLENBQ3RCLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFDaEMsZUFBZTtRQUNYLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUNsRixDQUFDLENBQUMsQ0FBQyxFQUNQLE1BQU0sQ0FDVCxDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFBO0FBRTlFLE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxjQUFzQjtJQUN2RCxNQUFNLFFBQVEsR0FBRywwQkFBMEIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsQ0FBQTtJQUNqRixPQUFPLENBQ0gsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RELENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ25ELEdBQUcsQ0FDTixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sU0FBUztJQUNGLFVBQVUsQ0FBYztJQUNqQyxRQUFRLEdBQWUsRUFBRSxDQUFBO0lBQ3pCLEtBQUssR0FBRyxD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RyxLQUFpQixFQUFFLFFBQVEsRUFBRTtRQUN2QyxJQUFJLEVBQUUsT0FBTyxLQUFLO0tBQ2IsQ0FBQTtBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwZXJmb3JtYW5jZSB9IGZyb20gJ25vZGU6cGVyZl9ob29rcydcbmltcG9ydCB7IEpzb24sIExvZ2dlciB9IGZyb20gJy4uL2NvbnRleHQuanMnXG5pbXBvcnQgeyBMb2dFbnRyeSwgTG9nTGV2ZWwsIExvZ1RyYW5zcG9ydCwgUm9vdExvZ2dlciB9IGZyb20gJy4vY29udGV4dC5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VMb2dnZXIoXG4gICAgdHJhbnNwb3J0OiBMb2dUcmFuc3BvcnQsXG4gICAgbWluaW11bUxvZ0xldmVsOiBMb2dMZXZlbCB8IHVuZGVmaW5lZCxcbiAgICBzaWduYWw6IEFib3J0U2lnbmFsLFxuKTogUm9vdExvZ2dlciB7XG4gICAgcmV0dXJuIG5ldyBFbnJpY2hpbmdMb2dnZXIoXG4gICAgICAgIG5ldyBMb2dCdWZmZXIodHJhbnNwb3J0LCBzaWduYWwpLFxuICAgICAgICBtaW5pbXVtTG9nTGV2ZWxcbiAgICAgICAgICAgID8gWydmYXRhbCcsICdlcnJvcicsICd3YXJuaW5nJywgJ2luZm8nLCAnZGVidWcnLCAndHJhY2UnXS5pbmRleE9mKG1pbmltdW1Mb2dMZXZlbClcbiAgICAgICAgICAgIDogNSxcbiAgICAgICAgc2lnbmFsLFxuICAgIClcbn1cblxuY29uc3QgcGVyZm9ybWFuY2VUaW1lT3JpZ2luMTAwbnMgPSBNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKiAxMF8wMDApXG5cbmV4cG9ydCBmdW5jdGlvbiBoaWdoUHJlY2lzaW9uSVNPRGF0ZShwZXJmb3JtYW5jZU5vdzogbnVtYmVyKSB7XG4gICAgY29uc3Qgbm93MTAwbnMgPSBwZXJmb3JtYW5jZVRpbWVPcmlnaW4xMDBucyArIE1hdGgucm91bmQocGVyZm9ybWFuY2VOb3cgKiAxMF8wMDApXG4gICAgcmV0dXJuIChcbiAgICAgICAgbmV3IERhdGUobm93MTAwbnMgLyAxMF8wMDApLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMjApICtcbiAgICAgICAgKG5vdzEwMG5zICUgMTBfMDAwXzAwMCkudG9TdHJpbmcoKS5wYWRTdGFydCg3LCAnMCcpICtcbiAgICAgICAgJ1onXG4gICAgKVxufVxuXG5jbGFzcyBMb2dCdWZmZXIge1xuICAgIHJlYWRvbmx5ICN0cmFuc3BvcnQ6IExvZ1RyYW5zcG9ydFxuICAgICNlbnRyaWVzOiBMb2dFbnRyeVtdID0gW11cbiAgICAjc2l6ZSA9IDBcbiAgICAjZmx1c2hlcj86IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQgfCB2b2lkXG4gICAgcmVhZG9ubHkgI3NpZ25hbDogQWJvcnRTaWduYWxcbiAgICAjYXN5bmNUcmFuc3BvcnQ6IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICAjdGltZW91dDogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWRcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zcG9ydDogTG9nVHJhbnNwb3J0LCBzaWduYWw6IEFib3J0U2lnbmFsKSB7XG4gICAgICAgIHRoaXMuI3RyYW5zcG9ydCA9IHRyYW5zcG9ydFxuICAgICAgICB0aGlzLiNzaWduYWwgPSBzaWduYWxcbiAgICB9XG5cbiAgICBjb2xsZWN0KFxuICAgICAgICBsZXZlbDogTG9nTGV2ZWwsXG4gICAgICAgIG51bWVyaWNMb2dMZXZlbDogbnVtYmVyLFxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICAgIGVycm9yOiB1bmtub3duLFxuICAgICAgICBmaWVsZHM6IG9iamVjdCB8IHVuZGVmaW5lZCxcbiAgICAgICAgcmVzZXJ2ZWRFbnJpY2htZW50OiBvYmplY3QgfCB1bmRlZmluZWQsXG4gICAgICAgIGN1c3RvbUVucmljaG1lbnQ6IG9iamVjdCB8IHVuZGVmaW5lZCxcbiAgICApIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiN0b0VudHJ5KFxuICAgICAgICAgICAgaGlnaFByZWNpc2lvbklTT0RhdGUob2Zmc2V0KSxcbiAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgZmllbGRzLFxuICAgICAgICAgICAgcmVzZXJ2ZWRFbnJpY2htZW50LFxuICAgICAgICAgICAgY3VzdG9tRW5yaWNobWVudCxcbiAgICAgICAgKVxuICAgICAgICB0aGlzLiNlbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICAgIHRoaXMuI3NpemUgKz0gZW50cnkuanNvbi5sZW5ndGhcblxuICAgICAgICBpZiAodGhpcy4jYXN5bmNUcmFuc3BvcnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgICAgICAgdm9pZCB0aGlzLiN0cmFuc3BvcnQuc2VuZEVudHJpZXModGhpcy4jZW50cmllcywgdGhpcy4jc2lnbmFsKVxuICAgICAgICAgICAgdGhpcy4jZW50cmllcyA9IFtdXG4gICAgICAgICAgICB0aGlzLiNzaXplID0gMFxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2FzeW5jVHJhbnNwb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuI2FzeW5jVHJhbnNwb3J0ID0gdHJ1ZVxuICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jZmx1c2hlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VuZFJlc3VsdCA9IHRoaXMuI3RyYW5zcG9ydC5zZW5kRW50cmllcyh0aGlzLiNlbnRyaWVzLCB0aGlzLiNzaWduYWwpXG4gICAgICAgICAgICAgICAgdGhpcy4jZW50cmllcyA9IFtdXG4gICAgICAgICAgICAgICAgdGhpcy4jc2l6ZSA9IDBcbiAgICAgICAgICAgICAgICBpZiAoc2VuZFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNmbHVzaGVyID0gc2VuZFJlc3VsdFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2FzeW5jVHJhbnNwb3J0ID0gZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG51bWVyaWNMb2dMZXZlbCA8IDIgfHwgdGhpcy4jZW50cmllcy5sZW5ndGggPiA4IHx8IHRoaXMuI3NpemUgPiA2NF8wMDApIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5mbHVzaCgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuI3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgICAgICAgICAgICAgICAgdm9pZCB0aGlzLmZsdXNoKClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jdGltZW91dCA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH0sIDIwMDApXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuI2VudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNzdGFydEZsdXNoKHRoaXMuI2VudHJpZXMpXG4gICAgICAgIHRoaXMuI2VudHJpZXMgPSBbXVxuICAgICAgICB0aGlzLiNzaXplID0gMFxuICAgICAgICBpZiAodGhpcy4jdGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI3RpbWVvdXQpXG4gICAgICAgICAgICB0aGlzLiN0aW1lb3V0ID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuI2ZsdXNoZXJcbiAgICB9XG5cbiAgICAjc3RhcnRGbHVzaChlbnRyaWVzOiBMb2dFbnRyeVtdKSB7XG4gICAgICAgIGlmICh0aGlzLiNmbHVzaGVyKSB7XG4gICAgICAgICAgICB0aGlzLiNmbHVzaGVyID0gdGhpcy4jZmx1c2hlci50aGVuKCgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy4jdHJhbnNwb3J0LnNlbmRFbnRyaWVzKGVudHJpZXMsIHRoaXMuI3NpZ25hbCksXG4gICAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNmbHVzaGVyID0gdGhpcy4jdHJhbnNwb3J0LnNlbmRFbnRyaWVzKGVudHJpZXMsIHRoaXMuI3NpZ25hbClcbiAgICAgICAgfVxuICAgIH1cblxuICAgICN0b0VudHJ5KFxuICAgICAgICB0aW1lc3RhbXA6IHN0cmluZyxcbiAgICAgICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgICAgIGxldmVsOiBMb2dMZXZlbCxcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgICBlcnJvcjogdW5rbm93bixcbiAgICAgICAgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQsXG4gICAgICAgIHJlc2VydmVkRW5yaWNobWVudDogb2JqZWN0IHwgdW5kZWZpbmVkLFxuICAgICAgICBjdXN0b21FbnJpY2htZW50OiBvYmplY3QgfCB1bmRlZmluZWQsXG4gICAgKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogb2Zmc2V0LFxuICAgICAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAganNvbjogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JBc0pzb24oZXJyb3IsIDApLFxuICAgICAgICAgICAgICAgICAgICAuLi5yZXNlcnZlZEVucmljaG1lbnQsXG4gICAgICAgICAgICAgICAgICAgIC4uLmV4dHJhKGZpZWxkcywgY3VzdG9tRW5yaWNobWVudCksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdChcbiAgICAgICAgICAgICAgICAnd2FybmluZycsXG4gICAgICAgICAgICAgICAgMixcbiAgICAgICAgICAgICAgICAnRXJyb3Igc2VyaWFsaXppbmcgZXJyb3IuJyxcbiAgICAgICAgICAgICAgICBlLFxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByZXNlcnZlZEVucmljaG1lbnQsXG4gICAgICAgICAgICAgICAgY3VzdG9tRW5yaWNobWVudCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBvZmZzZXQsXG4gICAgICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICBqc29uOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBzYWZlRXJyb3JBc0pzb24oZXJyb3IsIDApLFxuICAgICAgICAgICAgICAgICAgICAuLi5yZXNlcnZlZEVucmljaG1lbnQsXG4gICAgICAgICAgICAgICAgICAgIC4uLmV4dHJhKGZpZWxkcywgY3VzdG9tRW5yaWNobWVudCksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhKGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkLCBjdXN0b21FbnJpY2htZW50OiBvYmplY3QgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWZpZWxkcykge1xuICAgICAgICBpZiAoIWN1c3RvbUVucmljaG1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VzdG9tRW5yaWNobWVudFxuICAgIH1cbiAgICBpZiAoIWN1c3RvbUVucmljaG1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkc1xuICAgIH1cbiAgICByZXR1cm4geyAuLi5jdXN0b21FbnJpY2htZW50LCAuLi5maWVsZHMgfVxufVxuXG5jbGFzcyBFbnJpY2hpbmdMb2dnZXIgaW1wbGVtZW50cyBMb2dnZXIge1xuICAgIHJlYWRvbmx5ICNidWZmZXI6IExvZ0J1ZmZlclxuICAgIHJlYWRvbmx5ICNyZXNlcnZlZEVucmljaG1lbnQ/OiBvYmplY3RcbiAgICByZWFkb25seSAjY3VzdG9tRW5yaWNobWVudD86IG9iamVjdFxuICAgIHJlYWRvbmx5ICNsZXZlbDogbnVtYmVyXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgYnVmZmVyOiBMb2dCdWZmZXIsXG4gICAgICAgIGxldmVsOiBudW1iZXIsXG4gICAgICAgIHJlc2VydmVkRW5yaWNobWVudD86IG9iamVjdCxcbiAgICAgICAgY3VzdG9tRW5yaWNobWVudD86IG9iamVjdCxcbiAgICApIHtcbiAgICAgICAgdGhpcy4jYnVmZmVyID0gYnVmZmVyXG4gICAgICAgIHRoaXMuI2xldmVsID0gbGV2ZWxcbiAgICAgICAgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50ID0gcmVzZXJ2ZWRFbnJpY2htZW50XG4gICAgICAgIHRoaXMuI2N1c3RvbUVucmljaG1lbnQgPSBjdXN0b21FbnJpY2htZW50XG4gICAgfVxuXG4gICAgZW5yaWNoKGZpZWxkczogb2JqZWN0KTogTG9nZ2VyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFbnJpY2hpbmdMb2dnZXIodGhpcy4jYnVmZmVyLCB0aGlzLiNsZXZlbCwgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LCB7XG4gICAgICAgICAgICAuLi50aGlzLiNjdXN0b21FbnJpY2htZW50LFxuICAgICAgICAgICAgLi4uZmllbGRzLFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGZsdXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYnVmZmVyLmZsdXNoKClcbiAgICB9XG5cbiAgICBlbnJpY2hSZXNlcnZlZChmaWVsZHM6IG9iamVjdCk6IEVucmljaGluZ0xvZ2dlciB7XG4gICAgICAgIHJldHVybiBuZXcgRW5yaWNoaW5nTG9nZ2VyKFxuICAgICAgICAgICAgdGhpcy4jYnVmZmVyLFxuICAgICAgICAgICAgdGhpcy4jbGV2ZWwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LFxuICAgICAgICAgICAgICAgIC4uLmZpZWxkcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50LFxuICAgICAgICApXG4gICAgfVxuXG4gICAgdHJhY2UobWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuI2xldmVsIDwgNSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXG4gICAgICAgICAgICAndHJhY2UnLFxuICAgICAgICAgICAgNSxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgIHRoaXMuI2N1c3RvbUVucmljaG1lbnQsXG4gICAgICAgIClcbiAgICB9XG4gICAgZGVidWcobWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuI2xldmVsIDwgNCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXG4gICAgICAgICAgICAnZGVidWcnLFxuICAgICAgICAgICAgNCxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcbiAgICAgICAgICAgIHRoaXMuI2N1c3RvbUVucmljaG1lbnQsXG4gICAgICAgIClcbiAgICB9XG4gICAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIGVycm9yOiB1bmtub3duLCBmaWVsZHM6IG9iamVjdCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy4jbGV2ZWwgPCAzKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNidWZmZXIuY29sbGVjdChcbiAgICAgICAgICAgICdpbmZvJyxcbiAgICAgICAgICAgIDMsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICB0aGlzLiNyZXNlcnZlZEVucmljaG1lbnQsXG4gICAgICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50LFxuICAgICAgICApXG4gICAgfVxuICAgIHdhcm4obWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuI2xldmVsIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXG4gICAgICAgICAgICAnd2FybmluZycsXG4gICAgICAgICAgICAyLFxuICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgZmllbGRzLFxuICAgICAgICAgICAgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LFxuICAgICAgICAgICAgdGhpcy4jY3VzdG9tRW5yaWNobWVudCxcbiAgICAgICAgKVxuICAgIH1cbiAgICBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIGVycm9yOiB1bmtub3duLCBmaWVsZHM6IG9iamVjdCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy4jbGV2ZWwgPCAxKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNidWZmZXIuY29sbGVjdChcbiAgICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgZmllbGRzLFxuICAgICAgICAgICAgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LFxuICAgICAgICAgICAgdGhpcy4jY3VzdG9tRW5yaWNobWVudCxcbiAgICAgICAgKVxuICAgIH1cbiAgICBmYXRhbChtZXNzYWdlOiBzdHJpbmcsIGVycm9yOiB1bmtub3duLCBmaWVsZHM6IG9iamVjdCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICB0aGlzLiNidWZmZXIuY29sbGVjdChcbiAgICAgICAgICAgICdmYXRhbCcsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgZmllbGRzLFxuICAgICAgICAgICAgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LFxuICAgICAgICAgICAgdGhpcy4jY3VzdG9tRW5yaWNobWVudCxcbiAgICAgICAgKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZXJyb3JBc0pzb24oZXJyb3I6IHVua25vd24sIGRlcHRoOiBudW1iZXIpOiBKc29uIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZXJyb3IgPT09IHVuZGVmaW5lZCB8fCBlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICAgIGlmIChkZXB0aCA+IDUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2ssXG4gICAgICAgICAgICBjYXVzZTogZXJyb3JBc0pzb24oZXJyb3IuY2F1c2UsIGRlcHRoICsgMSksXG4gICAgICAgICAgICBlcnJvcnM6IGVycm9yQXNKc29uKChlcnJvciBhcyB7IGVycm9ycz86IHVua25vd24gfSkuZXJyb3JzLCBkZXB0aCArIDEpLFxuICAgICAgICAgICAgLi4uKGVycm9yIGFzIHVua25vd24gYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pLFxuICAgICAgICB9IGFzIEpzb25cbiAgICB9XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVycm9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yLm1hcChlcnJvckFzSnNvbikgYXMgSnNvblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtc3ByZWFkXG4gICAgICAgICAgICAuLi5lcnJvcixcbiAgICAgICAgfSBhcyBKc29uXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG1lc3NhZ2U6IChlcnJvciBhcyB1bmtub3duKT8udG9TdHJpbmcoKSxcbiAgICAgICAgbmFtZTogdHlwZW9mIGVycm9yLFxuICAgIH0gYXMgSnNvblxufVxuXG5mdW5jdGlvbiBzYWZlRXJyb3JBc0pzb24oZXJyb3I6IHVua25vd24sIGRlcHRoOiBudW1iZXIpOiBKc29uIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZXJyb3IgPT09IHVuZGVmaW5lZCB8fCBlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICAgIGlmIChkZXB0aCA+IDUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2ssXG4gICAgICAgICAgICBjYXVzZTogc2FmZUVycm9yQXNKc29uKGVycm9yLmNhdXNlLCBkZXB0aCArIDEpLFxuICAgICAgICAgICAgZXJyb3JzOiBzYWZlRXJyb3JBc0pzb24oKGVycm9yIGFzIHsgZXJyb3JzPzogdW5rbm93biB9KS5lcnJvcnMsIGRlcHRoICsgMSksXG4gICAgICAgIH0gYXMgSnNvblxuICAgIH1cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyb3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3IubWFwKHNhZmVFcnJvckFzSnNvbikgYXMgSnNvblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtc3ByZWFkXG4gICAgICAgICAgICAuLi5lcnJvcixcbiAgICAgICAgfSBhcyBKc29uXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG1lc3NhZ2U6IChlcnJvciBhcyB1bmtub3duKT8udG9TdHJpbmcoKSxcbiAgICAgICAgbmFtZTogdHlwZW9mIGVycm9yLFxuICAgIH0gYXMgSnNvblxufVxuIl19
package/host/meta.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ import type { HandlerConfiguration } from '../context.js';
2
+ export type PackageConfiguration = HandlerConfiguration & {};
3
+ export type FullConfiguration = PackageConfiguration & HandlerConfiguration;
4
+ export declare function combineConfig(base: PackageConfiguration | undefined, override: HandlerConfiguration | undefined): FullConfiguration | undefined;
5
+ export declare function setMeta(packageName: string, fileName: string, revision: string | undefined, config: PackageConfiguration | undefined): void;
6
+ export type Metadata = {
7
+ packageName: string;
8
+ fileName: string;
9
+ revision: string | undefined;
10
+ config?: PackageConfiguration;
11
+ };
12
+ export declare function getMetadata(): Metadata | undefined;
package/host/meta.js ADDED
@@ -0,0 +1,22 @@
1
+ export function combineConfig(base, override) {
2
+ if (base === undefined) {
3
+ return override;
4
+ }
5
+ else if (override === undefined) {
6
+ return base;
7
+ }
8
+ return { ...base, ...override };
9
+ }
10
+ let metadata;
11
+ export function setMeta(packageName, fileName, revision, config) {
12
+ metadata = {
13
+ packageName,
14
+ fileName,
15
+ revision,
16
+ config,
17
+ };
18
+ }
19
+ export function getMetadata() {
20
+ return metadata;
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1ldGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsTUFBTSxVQUFVLGFBQWEsQ0FDekIsSUFBc0MsRUFDdEMsUUFBMEM7SUFFMUMsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDckIsT0FBTyxRQUFRLENBQUE7SUFDbkIsQ0FBQztTQUFNLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUNELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFBO0FBQ25DLENBQUM7QUFFRCxJQUFJLFFBQThCLENBQUE7QUFFbEMsTUFBTSxVQUFVLE9BQU8sQ0FDbkIsV0FBbUIsRUFDbkIsUUFBZ0IsRUFDaEIsUUFBNEIsRUFDNUIsTUFBd0M7SUFFeEMsUUFBUSxHQUFHO1FBQ1AsV0FBVztRQUNYLFFBQVE7UUFDUixRQUFRO1FBQ1IsTUFBTTtLQUNULENBQUE7QUFDTCxDQUFDO0FBU0QsTUFBTSxVQUFVLFdBQVc7SUFDdkIsT0FBTyxRQUFRLENBQUE7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSGFuZGxlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9jb250ZXh0LmpzJ1xuXG5leHBvcnQgdHlwZSBQYWNrYWdlQ29uZmlndXJhdGlvbiA9IEhhbmRsZXJDb25maWd1cmF0aW9uICYge1xuICAgIC8vIFBsYWNlaG9sZGVyIGZvciBwYWNrYWdlLWxldmVsIGNvbmZpZ3VyYXRpb25zXG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHVwbGljYXRlLXR5cGUtY29uc3RpdHVlbnRzXG5leHBvcnQgdHlwZSBGdWxsQ29uZmlndXJhdGlvbiA9IFBhY2thZ2VDb25maWd1cmF0aW9uICYgSGFuZGxlckNvbmZpZ3VyYXRpb25cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVDb25maWcoXG4gICAgYmFzZTogUGFja2FnZUNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXG4gICAgb3ZlcnJpZGU6IEhhbmRsZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuKTogRnVsbENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuICAgIGlmIChiYXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG92ZXJyaWRlXG4gICAgfSBlbHNlIGlmIChvdmVycmlkZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBiYXNlXG4gICAgfVxuICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLm92ZXJyaWRlIH1cbn1cblxubGV0IG1ldGFkYXRhOiBNZXRhZGF0YSB8IHVuZGVmaW5lZFxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TWV0YShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIGZpbGVOYW1lOiBzdHJpbmcsXG4gICAgcmV2aXNpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBjb25maWc6IFBhY2thZ2VDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxuKSB7XG4gICAgbWV0YWRhdGEgPSB7XG4gICAgICAgIHBhY2thZ2VOYW1lLFxuICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgcmV2aXNpb24sXG4gICAgICAgIGNvbmZpZyxcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIE1ldGFkYXRhID0ge1xuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmdcbiAgICBmaWxlTmFtZTogc3RyaW5nXG4gICAgcmV2aXNpb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgIGNvbmZpZz86IFBhY2thZ2VDb25maWd1cmF0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRhZGF0YSgpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFcbn1cbiJdfQ==
package/host/reflect.d.ts CHANGED
@@ -1,4 +1,6 @@
1
- import { HttpHandlerConfiguration } from '../http.js';
1
+ import type { HandlerConfiguration } from '../context.js';
2
+ import type { HttpHandlerConfiguration } from '../http.js';
3
+ import type { TimerHandlerConfiguration } from '../timer.js';
2
4
  type CPU = 'arm' | 'arm64' | 'ia32' | 'mips' | 'mipsel' | 'ppc' | 'ppc64' | 's390' | 's390x' | 'x32' | 'x64';
3
5
  type CpuConfig = CPU | `!${CPU}`;
4
6
  type OSConfig = NodeJS.Platform | `!${NodeJS.Platform}`;
@@ -9,13 +11,24 @@ export type PackageJsonConfiguration = {
9
11
  };
10
12
  export type Reflection = {
11
13
  name: string;
14
+ revision: string | undefined;
12
15
  http: {
13
16
  name: string;
14
17
  method: string;
15
18
  pathPattern: string;
16
- pathRegExp: RegExp;
17
19
  config: HttpHandlerConfiguration & PackageJsonConfiguration;
18
20
  }[];
21
+ timers: {
22
+ name: string;
23
+ schedule: string;
24
+ config: TimerHandlerConfiguration & PackageJsonConfiguration;
25
+ }[];
26
+ events: {
27
+ name: string;
28
+ topic: string;
29
+ type: string;
30
+ config: HandlerConfiguration & PackageJsonConfiguration;
31
+ }[];
19
32
  };
20
33
  export declare function resolveCpu(config: PackageJsonConfiguration, supported: CPU[]): CPU;
21
34
  export declare function resolveOS(config: PackageJsonConfiguration, supported: NodeJS.Platform[]): NodeJS.Platform;