@workflow/core 5.0.0-beta.6 → 5.0.0-beta.8

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.
Files changed (69) hide show
  1. package/dist/classify-error.d.ts +4 -3
  2. package/dist/classify-error.d.ts.map +1 -1
  3. package/dist/classify-error.js +29 -5
  4. package/dist/describe-error.d.ts.map +1 -1
  5. package/dist/describe-error.js +52 -6
  6. package/dist/encryption.d.ts +7 -1
  7. package/dist/encryption.d.ts.map +1 -1
  8. package/dist/encryption.js +13 -6
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -1
  12. package/dist/runtime/constants.d.ts +47 -0
  13. package/dist/runtime/constants.d.ts.map +1 -1
  14. package/dist/runtime/constants.js +86 -8
  15. package/dist/runtime/helpers.d.ts.map +1 -1
  16. package/dist/runtime/helpers.js +10 -2
  17. package/dist/runtime/replay-budget.d.ts +98 -0
  18. package/dist/runtime/replay-budget.d.ts.map +1 -0
  19. package/dist/runtime/replay-budget.js +191 -0
  20. package/dist/runtime/resume-hook.d.ts.map +1 -1
  21. package/dist/runtime/resume-hook.js +2 -1
  22. package/dist/runtime/runs.d.ts.map +1 -1
  23. package/dist/runtime/runs.js +4 -1
  24. package/dist/runtime/step-executor.d.ts.map +1 -1
  25. package/dist/runtime/step-executor.js +8 -1
  26. package/dist/runtime/step-handler.d.ts.map +1 -1
  27. package/dist/runtime/step-handler.js +10 -1
  28. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  29. package/dist/runtime/suspension-handler.js +6 -2
  30. package/dist/runtime.d.ts.map +1 -1
  31. package/dist/runtime.js +288 -174
  32. package/dist/serialization/types.d.ts +7 -0
  33. package/dist/serialization/types.d.ts.map +1 -1
  34. package/dist/serialization/types.js +1 -1
  35. package/dist/serialization.d.ts +1 -0
  36. package/dist/serialization.d.ts.map +1 -1
  37. package/dist/serialization.js +100 -11
  38. package/dist/set-attributes.d.ts +15 -0
  39. package/dist/set-attributes.d.ts.map +1 -0
  40. package/dist/set-attributes.js +17 -0
  41. package/dist/source-map.d.ts.map +1 -1
  42. package/dist/source-map.js +44 -6
  43. package/dist/step/context-storage.d.ts +14 -0
  44. package/dist/step/context-storage.d.ts.map +1 -1
  45. package/dist/step/context-storage.js +1 -1
  46. package/dist/step/writable-stream.d.ts.map +1 -1
  47. package/dist/step/writable-stream.js +36 -3
  48. package/dist/step.d.ts.map +1 -1
  49. package/dist/step.js +15 -4
  50. package/dist/symbols.d.ts +16 -0
  51. package/dist/symbols.d.ts.map +1 -1
  52. package/dist/symbols.js +17 -1
  53. package/dist/version.d.ts +1 -1
  54. package/dist/version.js +2 -2
  55. package/dist/workflow/abort-controller.d.ts.map +1 -1
  56. package/dist/workflow/abort-controller.js +13 -2
  57. package/dist/workflow/hook.d.ts.map +1 -1
  58. package/dist/workflow/hook.js +12 -3
  59. package/dist/workflow/index.d.ts +1 -0
  60. package/dist/workflow/index.d.ts.map +1 -1
  61. package/dist/workflow/index.js +2 -1
  62. package/dist/workflow/set-attributes.d.ts +74 -0
  63. package/dist/workflow/set-attributes.d.ts.map +1 -0
  64. package/dist/workflow/set-attributes.js +81 -0
  65. package/dist/workflow/sleep.d.ts.map +1 -1
  66. package/dist/workflow/sleep.js +22 -3
  67. package/dist/workflow.d.ts.map +1 -1
  68. package/dist/workflow.js +14 -5
  69. package/package.json +7 -7
@@ -0,0 +1,15 @@
1
+ import type { ExperimentalSetAttributesOptions } from './workflow/set-attributes.js';
2
+ export type { ExperimentalSetAttributesOptions };
3
+ /**
4
+ * Host-side stub for `experimental_setAttributes`. The real
5
+ * implementation lives in `./workflow/set-attributes.ts` and is
6
+ * selected by the `workflow` package-exports condition when the
7
+ * workflow VM bundle is resolved.
8
+ *
9
+ * Reaching this stub means the function was called outside a workflow
10
+ * body — most likely from a `'use step'` function or plain host code.
11
+ * That isn't supported in the MVP: attribute mutations must be
12
+ * event-sourced through the workflow runtime so they survive replay.
13
+ */
14
+ export declare function experimental_setAttributes(_attrs: Record<string, string | undefined>, _options?: ExperimentalSetAttributesOptions): Promise<void>;
15
+ //# sourceMappingURL=set-attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-attributes.d.ts","sourceRoot":"","sources":["../src/set-attributes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AAErF,YAAY,EAAE,gCAAgC,EAAE,CAAC;AAEjD;;;;;;;;;;GAUG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC1C,QAAQ,CAAC,EAAE,gCAAgC,GAC1C,OAAO,CAAC,IAAI,CAAC,CAKf"}
@@ -0,0 +1,17 @@
1
+ import { FatalError } from '@workflow/errors';
2
+ /**
3
+ * Host-side stub for `experimental_setAttributes`. The real
4
+ * implementation lives in `./workflow/set-attributes.ts` and is
5
+ * selected by the `workflow` package-exports condition when the
6
+ * workflow VM bundle is resolved.
7
+ *
8
+ * Reaching this stub means the function was called outside a workflow
9
+ * body — most likely from a `'use step'` function or plain host code.
10
+ * That isn't supported in the MVP: attribute mutations must be
11
+ * event-sourced through the workflow runtime so they survive replay.
12
+ */
13
+ export async function experimental_setAttributes(_attrs, _options) {
14
+ throw new FatalError("experimental_setAttributes() must be called from a 'use workflow' function. " +
15
+ 'Calling it from a step body or plain host code is not supported.');
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWF0dHJpYnV0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2V0LWF0dHJpYnV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSzlDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLDBCQUEwQixDQUM5QyxNQUEwQyxFQUMxQyxRQUEyQztJQUUzQyxNQUFNLElBQUksVUFBVSxDQUNsQiw4RUFBOEU7UUFDNUUsa0VBQWtFLENBQ3JFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmF0YWxFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBFeHBlcmltZW50YWxTZXRBdHRyaWJ1dGVzT3B0aW9ucyB9IGZyb20gJy4vd29ya2Zsb3cvc2V0LWF0dHJpYnV0ZXMuanMnO1xuXG5leHBvcnQgdHlwZSB7IEV4cGVyaW1lbnRhbFNldEF0dHJpYnV0ZXNPcHRpb25zIH07XG5cbi8qKlxuICogSG9zdC1zaWRlIHN0dWIgZm9yIGBleHBlcmltZW50YWxfc2V0QXR0cmlidXRlc2AuIFRoZSByZWFsXG4gKiBpbXBsZW1lbnRhdGlvbiBsaXZlcyBpbiBgLi93b3JrZmxvdy9zZXQtYXR0cmlidXRlcy50c2AgYW5kIGlzXG4gKiBzZWxlY3RlZCBieSB0aGUgYHdvcmtmbG93YCBwYWNrYWdlLWV4cG9ydHMgY29uZGl0aW9uIHdoZW4gdGhlXG4gKiB3b3JrZmxvdyBWTSBidW5kbGUgaXMgcmVzb2x2ZWQuXG4gKlxuICogUmVhY2hpbmcgdGhpcyBzdHViIG1lYW5zIHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkIG91dHNpZGUgYSB3b3JrZmxvd1xuICogYm9keSDigJQgbW9zdCBsaWtlbHkgZnJvbSBhIGAndXNlIHN0ZXAnYCBmdW5jdGlvbiBvciBwbGFpbiBob3N0IGNvZGUuXG4gKiBUaGF0IGlzbid0IHN1cHBvcnRlZCBpbiB0aGUgTVZQOiBhdHRyaWJ1dGUgbXV0YXRpb25zIG11c3QgYmVcbiAqIGV2ZW50LXNvdXJjZWQgdGhyb3VnaCB0aGUgd29ya2Zsb3cgcnVudGltZSBzbyB0aGV5IHN1cnZpdmUgcmVwbGF5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwZXJpbWVudGFsX3NldEF0dHJpYnV0ZXMoXG4gIF9hdHRyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPixcbiAgX29wdGlvbnM/OiBFeHBlcmltZW50YWxTZXRBdHRyaWJ1dGVzT3B0aW9uc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRocm93IG5ldyBGYXRhbEVycm9yKFxuICAgIFwiZXhwZXJpbWVudGFsX3NldEF0dHJpYnV0ZXMoKSBtdXN0IGJlIGNhbGxlZCBmcm9tIGEgJ3VzZSB3b3JrZmxvdycgZnVuY3Rpb24uIFwiICtcbiAgICAgICdDYWxsaW5nIGl0IGZyb20gYSBzdGVwIGJvZHkgb3IgcGxhaW4gaG9zdCBjb2RlIGlzIG5vdCBzdXBwb3J0ZWQuJ1xuICApO1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"source-map.d.ts","sourceRoot":"","sources":["../src/source-map.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,MAAM,CA0DR"}
1
+ {"version":3,"file":"source-map.d.ts","sourceRoot":"","sources":["../src/source-map.ts"],"names":[],"mappings":"AAqDA;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,MAAM,CAsDR"}
@@ -1,4 +1,44 @@
1
1
  import { originalPositionFor, TraceMap } from '@jridgewell/trace-mapping';
2
+ function isBase64Char(code) {
3
+ return ((code >= 0x41 && code <= 0x5a) ||
4
+ (code >= 0x61 && code <= 0x7a) ||
5
+ (code >= 0x30 && code <= 0x39) ||
6
+ code === 0x2b ||
7
+ code === 0x2f ||
8
+ code === 0x3d);
9
+ }
10
+ function extractInlineSourceMapBase64(source) {
11
+ const sourceMapPrefix = '//# sourceMappingURL=data:application/json';
12
+ const base64Marker = ';base64,';
13
+ let scanFrom = 0;
14
+ while (scanFrom < source.length) {
15
+ const prefixIdx = source.indexOf(sourceMapPrefix, scanFrom);
16
+ if (prefixIdx === -1)
17
+ return undefined;
18
+ const base64Start = source.indexOf(base64Marker, prefixIdx + sourceMapPrefix.length);
19
+ if (base64Start === -1) {
20
+ scanFrom = prefixIdx + sourceMapPrefix.length;
21
+ continue;
22
+ }
23
+ const commaBefore = source.indexOf(',', prefixIdx);
24
+ if (commaBefore !== -1 && commaBefore < base64Start) {
25
+ scanFrom = base64Start + base64Marker.length;
26
+ continue;
27
+ }
28
+ const valueStart = base64Start + base64Marker.length;
29
+ let valueEnd = valueStart;
30
+ while (valueEnd < source.length) {
31
+ if (!isBase64Char(source.charCodeAt(valueEnd))) {
32
+ break;
33
+ }
34
+ valueEnd++;
35
+ }
36
+ if (valueEnd > valueStart) {
37
+ return source.slice(valueStart, valueEnd);
38
+ }
39
+ scanFrom = valueEnd;
40
+ }
41
+ }
2
42
  /**
3
43
  * Remaps an error stack trace using inline source maps to show original source locations.
4
44
  *
@@ -8,13 +48,11 @@ import { originalPositionFor, TraceMap } from '@jridgewell/trace-mapping';
8
48
  * @returns The remapped stack trace with original source locations
9
49
  */
10
50
  export function remapErrorStack(stack, filename, workflowCode) {
11
- // Extract inline source map from workflow code
12
- const sourceMapMatch = workflowCode.match(/\/\/# sourceMappingURL=data:application\/json;base64,(.+)/);
13
- if (!sourceMapMatch) {
51
+ const base64 = extractInlineSourceMapBase64(workflowCode);
52
+ if (!base64) {
14
53
  return stack; // No source map found
15
54
  }
16
55
  try {
17
- const base64 = sourceMapMatch[1];
18
56
  const sourceMapJson = Buffer.from(base64, 'base64').toString('utf-8');
19
57
  const sourceMapData = JSON.parse(sourceMapJson);
20
58
  // Use TraceMap (pure JS, no WASM required)
@@ -48,9 +86,9 @@ export function remapErrorStack(stack, filename, workflowCode) {
48
86
  });
49
87
  return remappedLines.join('\n');
50
88
  }
51
- catch (e) {
89
+ catch {
52
90
  // If source map processing fails, return original stack
53
91
  return stack;
54
92
  }
55
93
  }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zb3VyY2UtbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsS0FBYSxFQUNiLFFBQWdCLEVBQ2hCLFlBQW9CO0lBRXBCLCtDQUErQztJQUMvQyxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUN2QywyREFBMkQsQ0FDNUQsQ0FBQztJQUNGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixPQUFPLEtBQUssQ0FBQyxDQUFDLHNCQUFzQjtJQUN0QyxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWhELDJDQUEyQztRQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUzQywrQ0FBK0M7UUFDL0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdkMsNEZBQTRGO1lBQzVGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQzNCLCtDQUErQyxDQUNoRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixPQUFPLElBQUksQ0FBQyxDQUFDLGtDQUFrQztZQUNqRCxDQUFDO1lBRUQsTUFBTSxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBRTNELDJDQUEyQztZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFMUMsa0NBQWtDO1lBQ2xDLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtnQkFDM0MsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLE1BQU0sRUFBRSxZQUFZO2FBQ3JCLENBQUMsQ0FBQztZQUVILElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM5QyxNQUFNLElBQUksR0FBRyxZQUFZLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUM7Z0JBQzFELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0JBQ3RFLE9BQU8sVUFBVSxJQUFJLEtBQUssUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQ3ZFLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxDQUFDLGdDQUFnQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLHdEQUF3RDtRQUN4RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgb3JpZ2luYWxQb3NpdGlvbkZvciwgVHJhY2VNYXAgfSBmcm9tICdAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nJztcblxuLyoqXG4gKiBSZW1hcHMgYW4gZXJyb3Igc3RhY2sgdHJhY2UgdXNpbmcgaW5saW5lIHNvdXJjZSBtYXBzIHRvIHNob3cgb3JpZ2luYWwgc291cmNlIGxvY2F0aW9ucy5cbiAqXG4gKiBAcGFyYW0gc3RhY2sgLSBUaGUgZXJyb3Igc3RhY2sgdHJhY2UgdG8gcmVtYXBcbiAqIEBwYXJhbSBmaWxlbmFtZSAtIFRoZSB3b3JrZmxvdyBmaWxlbmFtZSB0byBtYXRjaCBpbiBzdGFjayBmcmFtZXNcbiAqIEBwYXJhbSB3b3JrZmxvd0NvZGUgLSBUaGUgd29ya2Zsb3cgYnVuZGxlIGNvZGUgY29udGFpbmluZyBpbmxpbmUgc291cmNlIG1hcHNcbiAqIEByZXR1cm5zIFRoZSByZW1hcHBlZCBzdGFjayB0cmFjZSB3aXRoIG9yaWdpbmFsIHNvdXJjZSBsb2NhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbWFwRXJyb3JTdGFjayhcbiAgc3RhY2s6IHN0cmluZyxcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgd29ya2Zsb3dDb2RlOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIC8vIEV4dHJhY3QgaW5saW5lIHNvdXJjZSBtYXAgZnJvbSB3b3JrZmxvdyBjb2RlXG4gIGNvbnN0IHNvdXJjZU1hcE1hdGNoID0gd29ya2Zsb3dDb2RlLm1hdGNoKFxuICAgIC9cXC9cXC8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvblxcL2pzb247YmFzZTY0LCguKykvXG4gICk7XG4gIGlmICghc291cmNlTWFwTWF0Y2gpIHtcbiAgICByZXR1cm4gc3RhY2s7IC8vIE5vIHNvdXJjZSBtYXAgZm91bmRcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYmFzZTY0ID0gc291cmNlTWFwTWF0Y2hbMV07XG4gICAgY29uc3Qgc291cmNlTWFwSnNvbiA9IEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgIGNvbnN0IHNvdXJjZU1hcERhdGEgPSBKU09OLnBhcnNlKHNvdXJjZU1hcEpzb24pO1xuXG4gICAgLy8gVXNlIFRyYWNlTWFwIChwdXJlIEpTLCBubyBXQVNNIHJlcXVpcmVkKVxuICAgIGNvbnN0IHRyYWNlciA9IG5ldyBUcmFjZU1hcChzb3VyY2VNYXBEYXRhKTtcblxuICAgIC8vIFBhcnNlIGFuZCByZW1hcCBlYWNoIGxpbmUgaW4gdGhlIHN0YWNrIHRyYWNlXG4gICAgY29uc3QgbGluZXMgPSBzdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgcmVtYXBwZWRMaW5lcyA9IGxpbmVzLm1hcCgobGluZSkgPT4ge1xuICAgICAgLy8gTWF0Y2ggc3RhY2sgZnJhbWVzOiBcImF0IGZ1bmN0aW9uTmFtZSAoZmlsZW5hbWU6bGluZTpjb2x1bW4pXCIgb3IgXCJhdCBmaWxlbmFtZTpsaW5lOmNvbHVtblwiXG4gICAgICBjb25zdCBmcmFtZU1hdGNoID0gbGluZS5tYXRjaChcbiAgICAgICAgL15cXHMqYXRcXHMrKD86KC4rPylcXHMrXFwoKT8oLis/KTooXFxkKyk6KFxcZCspXFwpPyQvXG4gICAgICApO1xuICAgICAgaWYgKCFmcmFtZU1hdGNoKSB7XG4gICAgICAgIHJldHVybiBsaW5lOyAvLyBOb3QgYSBzdGFjayBmcmFtZSwgcmV0dXJuIGFzLWlzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFssIGZ1bmN0aW9uTmFtZSwgZmlsZSwgbGluZVN0ciwgY29sU3RyXSA9IGZyYW1lTWF0Y2g7XG5cbiAgICAgIC8vIE9ubHkgcmVtYXAgZnJhbWVzIGZyb20gb3VyIHdvcmtmbG93IGZpbGVcbiAgICAgIGlmICghZmlsZS5pbmNsdWRlcyhmaWxlbmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGxpbmU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpbmVOdW1iZXIgPSBwYXJzZUludChsaW5lU3RyLCAxMCk7XG4gICAgICBjb25zdCBjb2x1bW5OdW1iZXIgPSBwYXJzZUludChjb2xTdHIsIDEwKTtcblxuICAgICAgLy8gTWFwIHRvIG9yaWdpbmFsIHNvdXJjZSBwb3NpdGlvblxuICAgICAgY29uc3Qgb3JpZ2luYWwgPSBvcmlnaW5hbFBvc2l0aW9uRm9yKHRyYWNlciwge1xuICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICBjb2x1bW46IGNvbHVtbk51bWJlcixcbiAgICAgIH0pO1xuXG4gICAgICBpZiAob3JpZ2luYWwuc291cmNlICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZnVuYyA9IGZ1bmN0aW9uTmFtZSB8fCBvcmlnaW5hbC5uYW1lIHx8ICdhbm9ueW1vdXMnO1xuICAgICAgICBjb25zdCBjb2wgPSBvcmlnaW5hbC5jb2x1bW4gIT09IG51bGwgPyBvcmlnaW5hbC5jb2x1bW4gOiBjb2x1bW5OdW1iZXI7XG4gICAgICAgIHJldHVybiBgICAgIGF0ICR7ZnVuY30gKCR7b3JpZ2luYWwuc291cmNlfToke29yaWdpbmFsLmxpbmV9OiR7Y29sfSlgO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGluZTsgLy8gQ291bGRuJ3QgbWFwLCByZXR1cm4gb3JpZ2luYWxcbiAgICB9KTtcblxuICAgIHJldHVybiByZW1hcHBlZExpbmVzLmpvaW4oJ1xcbicpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSWYgc291cmNlIG1hcCBwcm9jZXNzaW5nIGZhaWxzLCByZXR1cm4gb3JpZ2luYWwgc3RhY2tcbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cbn1cbiJdfQ==
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zb3VyY2UtbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRSxTQUFTLFlBQVksQ0FBQyxJQUFZO0lBQ2hDLE9BQU8sQ0FDTCxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQztRQUM5QixDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQztRQUM5QixDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQztRQUM5QixJQUFJLEtBQUssSUFBSTtRQUNiLElBQUksS0FBSyxJQUFJO1FBQ2IsSUFBSSxLQUFLLElBQUksQ0FDZCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQUMsTUFBYztJQUNsRCxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztJQUNyRSxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUM7SUFDaEMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRWpCLE9BQU8sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1RCxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUV2QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUNoQyxZQUFZLEVBQ1osU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQ25DLENBQUM7UUFDRixJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLFFBQVEsR0FBRyxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztZQUM5QyxT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UUFBUSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUM7Z0JBQzFELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0JBQ3RFLE9BQU8sVUFBVSxJQUFJLEtBQUssUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQ3ZFLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxDQUFDLGdDQUFnQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1Asd0RBQXdEO1FBQ3hELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBvcmlnaW5hbFBvc2l0aW9uRm9yLCBUcmFjZU1hcCB9IGZyb20gJ0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcnO1xuXG5mdW5jdGlvbiBpc0Jhc2U2NENoYXIoY29kZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgKGNvZGUgPj0gMHg0MSAmJiBjb2RlIDw9IDB4NWEpIHx8XG4gICAgKGNvZGUgPj0gMHg2MSAmJiBjb2RlIDw9IDB4N2EpIHx8XG4gICAgKGNvZGUgPj0gMHgzMCAmJiBjb2RlIDw9IDB4MzkpIHx8XG4gICAgY29kZSA9PT0gMHgyYiB8fFxuICAgIGNvZGUgPT09IDB4MmYgfHxcbiAgICBjb2RlID09PSAweDNkXG4gICk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RJbmxpbmVTb3VyY2VNYXBCYXNlNjQoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBzb3VyY2VNYXBQcmVmaXggPSAnLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uJztcbiAgY29uc3QgYmFzZTY0TWFya2VyID0gJztiYXNlNjQsJztcbiAgbGV0IHNjYW5Gcm9tID0gMDtcblxuICB3aGlsZSAoc2NhbkZyb20gPCBzb3VyY2UubGVuZ3RoKSB7XG4gICAgY29uc3QgcHJlZml4SWR4ID0gc291cmNlLmluZGV4T2Yoc291cmNlTWFwUHJlZml4LCBzY2FuRnJvbSk7XG4gICAgaWYgKHByZWZpeElkeCA9PT0gLTEpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBiYXNlNjRTdGFydCA9IHNvdXJjZS5pbmRleE9mKFxuICAgICAgYmFzZTY0TWFya2VyLFxuICAgICAgcHJlZml4SWR4ICsgc291cmNlTWFwUHJlZml4Lmxlbmd0aFxuICAgICk7XG4gICAgaWYgKGJhc2U2NFN0YXJ0ID09PSAtMSkge1xuICAgICAgc2NhbkZyb20gPSBwcmVmaXhJZHggKyBzb3VyY2VNYXBQcmVmaXgubGVuZ3RoO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWFCZWZvcmUgPSBzb3VyY2UuaW5kZXhPZignLCcsIHByZWZpeElkeCk7XG4gICAgaWYgKGNvbW1hQmVmb3JlICE9PSAtMSAmJiBjb21tYUJlZm9yZSA8IGJhc2U2NFN0YXJ0KSB7XG4gICAgICBzY2FuRnJvbSA9IGJhc2U2NFN0YXJ0ICsgYmFzZTY0TWFya2VyLmxlbmd0aDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlU3RhcnQgPSBiYXNlNjRTdGFydCArIGJhc2U2NE1hcmtlci5sZW5ndGg7XG4gICAgbGV0IHZhbHVlRW5kID0gdmFsdWVTdGFydDtcbiAgICB3aGlsZSAodmFsdWVFbmQgPCBzb3VyY2UubGVuZ3RoKSB7XG4gICAgICBpZiAoIWlzQmFzZTY0Q2hhcihzb3VyY2UuY2hhckNvZGVBdCh2YWx1ZUVuZCkpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdmFsdWVFbmQrKztcbiAgICB9XG5cbiAgICBpZiAodmFsdWVFbmQgPiB2YWx1ZVN0YXJ0KSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKHZhbHVlU3RhcnQsIHZhbHVlRW5kKTtcbiAgICB9XG4gICAgc2NhbkZyb20gPSB2YWx1ZUVuZDtcbiAgfVxufVxuXG4vKipcbiAqIFJlbWFwcyBhbiBlcnJvciBzdGFjayB0cmFjZSB1c2luZyBpbmxpbmUgc291cmNlIG1hcHMgdG8gc2hvdyBvcmlnaW5hbCBzb3VyY2UgbG9jYXRpb25zLlxuICpcbiAqIEBwYXJhbSBzdGFjayAtIFRoZSBlcnJvciBzdGFjayB0cmFjZSB0byByZW1hcFxuICogQHBhcmFtIGZpbGVuYW1lIC0gVGhlIHdvcmtmbG93IGZpbGVuYW1lIHRvIG1hdGNoIGluIHN0YWNrIGZyYW1lc1xuICogQHBhcmFtIHdvcmtmbG93Q29kZSAtIFRoZSB3b3JrZmxvdyBidW5kbGUgY29kZSBjb250YWluaW5nIGlubGluZSBzb3VyY2UgbWFwc1xuICogQHJldHVybnMgVGhlIHJlbWFwcGVkIHN0YWNrIHRyYWNlIHdpdGggb3JpZ2luYWwgc291cmNlIGxvY2F0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtYXBFcnJvclN0YWNrKFxuICBzdGFjazogc3RyaW5nLFxuICBmaWxlbmFtZTogc3RyaW5nLFxuICB3b3JrZmxvd0NvZGU6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZTY0ID0gZXh0cmFjdElubGluZVNvdXJjZU1hcEJhc2U2NCh3b3JrZmxvd0NvZGUpO1xuICBpZiAoIWJhc2U2NCkge1xuICAgIHJldHVybiBzdGFjazsgLy8gTm8gc291cmNlIG1hcCBmb3VuZFxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzb3VyY2VNYXBKc29uID0gQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgY29uc3Qgc291cmNlTWFwRGF0YSA9IEpTT04ucGFyc2Uoc291cmNlTWFwSnNvbik7XG5cbiAgICAvLyBVc2UgVHJhY2VNYXAgKHB1cmUgSlMsIG5vIFdBU00gcmVxdWlyZWQpXG4gICAgY29uc3QgdHJhY2VyID0gbmV3IFRyYWNlTWFwKHNvdXJjZU1hcERhdGEpO1xuXG4gICAgLy8gUGFyc2UgYW5kIHJlbWFwIGVhY2ggbGluZSBpbiB0aGUgc3RhY2sgdHJhY2VcbiAgICBjb25zdCBsaW5lcyA9IHN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICBjb25zdCByZW1hcHBlZExpbmVzID0gbGluZXMubWFwKChsaW5lKSA9PiB7XG4gICAgICAvLyBNYXRjaCBzdGFjayBmcmFtZXM6IFwiYXQgZnVuY3Rpb25OYW1lIChmaWxlbmFtZTpsaW5lOmNvbHVtbilcIiBvciBcImF0IGZpbGVuYW1lOmxpbmU6Y29sdW1uXCJcbiAgICAgIGNvbnN0IGZyYW1lTWF0Y2ggPSBsaW5lLm1hdGNoKFxuICAgICAgICAvXlxccyphdFxccysoPzooLis/KVxccytcXCgpPyguKz8pOihcXGQrKTooXFxkKylcXCk/JC9cbiAgICAgICk7XG4gICAgICBpZiAoIWZyYW1lTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIGxpbmU7IC8vIE5vdCBhIHN0YWNrIGZyYW1lLCByZXR1cm4gYXMtaXNcbiAgICAgIH1cblxuICAgICAgY29uc3QgWywgZnVuY3Rpb25OYW1lLCBmaWxlLCBsaW5lU3RyLCBjb2xTdHJdID0gZnJhbWVNYXRjaDtcblxuICAgICAgLy8gT25seSByZW1hcCBmcmFtZXMgZnJvbSBvdXIgd29ya2Zsb3cgZmlsZVxuICAgICAgaWYgKCFmaWxlLmluY2x1ZGVzKGZpbGVuYW1lKSkge1xuICAgICAgICByZXR1cm4gbGluZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGluZU51bWJlciA9IHBhcnNlSW50KGxpbmVTdHIsIDEwKTtcbiAgICAgIGNvbnN0IGNvbHVtbk51bWJlciA9IHBhcnNlSW50KGNvbFN0ciwgMTApO1xuXG4gICAgICAvLyBNYXAgdG8gb3JpZ2luYWwgc291cmNlIHBvc2l0aW9uXG4gICAgICBjb25zdCBvcmlnaW5hbCA9IG9yaWdpbmFsUG9zaXRpb25Gb3IodHJhY2VyLCB7XG4gICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgIGNvbHVtbjogY29sdW1uTnVtYmVyLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChvcmlnaW5hbC5zb3VyY2UgJiYgb3JpZ2luYWwubGluZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmdW5jID0gZnVuY3Rpb25OYW1lIHx8IG9yaWdpbmFsLm5hbWUgfHwgJ2Fub255bW91cyc7XG4gICAgICAgIGNvbnN0IGNvbCA9IG9yaWdpbmFsLmNvbHVtbiAhPT0gbnVsbCA/IG9yaWdpbmFsLmNvbHVtbiA6IGNvbHVtbk51bWJlcjtcbiAgICAgICAgcmV0dXJuIGAgICAgYXQgJHtmdW5jfSAoJHtvcmlnaW5hbC5zb3VyY2V9OiR7b3JpZ2luYWwubGluZX06JHtjb2x9KWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaW5lOyAvLyBDb3VsZG4ndCBtYXAsIHJldHVybiBvcmlnaW5hbFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlbWFwcGVkTGluZXMuam9pbignXFxuJyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIHNvdXJjZSBtYXAgcHJvY2Vzc2luZyBmYWlscywgcmV0dXJuIG9yaWdpbmFsIHN0YWNrXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG59XG4iXX0=
@@ -1,13 +1,27 @@
1
1
  import { AsyncLocalStorage } from 'node:async_hooks';
2
2
  import type { CryptoKey } from '../encryption.js';
3
+ import type { FlushableStreamState } from '../flushable-stream.js';
3
4
  import type { WorkflowMetadata } from '../workflow/get-workflow-metadata.js';
4
5
  import type { StepMetadata } from './get-step-metadata.js';
6
+ /**
7
+ * Per-step cache entry for a `(runId, namespace)` writable stream.
8
+ *
9
+ * Holds the user-facing `WritableStream` and the shared `FlushableStreamState`
10
+ * driving the background pipe to the workflow server. Re-used so repeat calls
11
+ * to `getWritable()` within the same step return the same handle instead of
12
+ * spawning racing pipes — see https://github.com/vercel/workflow/issues/2058.
13
+ */
14
+ export interface CachedWritable {
15
+ writable: WritableStream<any>;
16
+ state: FlushableStreamState;
17
+ }
5
18
  export type StepContext = {
6
19
  stepMetadata: StepMetadata;
7
20
  workflowMetadata: WorkflowMetadata;
8
21
  ops: Promise<void>[];
9
22
  closureVars?: Record<string, any>;
10
23
  encryptionKey?: CryptoKey;
24
+ writables?: Map<string, CachedWritable>;
11
25
  };
12
26
  export declare const contextStorage: AsyncLocalStorage<StepContext>;
13
27
  //# sourceMappingURL=context-storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-storage.d.ts","sourceRoot":"","sources":["../../src/step/context-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B,CAAC;AAoBF,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,WAAW,CAKjB,CAAC"}
1
+ {"version":3,"file":"context-storage.d.ts","sourceRoot":"","sources":["../../src/step/context-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC9B,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACzC,CAAC;AAoBF,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,WAAW,CAKjB,CAAC"}
@@ -19,4 +19,4 @@ const CONTEXT_STORAGE_SYMBOL = Symbol.for('WORKFLOW_STEP_CONTEXT_STORAGE');
19
19
  export const contextStorage = globalThis[CONTEXT_STORAGE_SYMBOL] ??
20
20
  (globalThis[CONTEXT_STORAGE_SYMBOL] =
21
21
  new AsyncLocalStorage());
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvY29udGV4dC1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBYXJEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FDdkIsVUFBa0IsQ0FBQyxzQkFBc0IsQ0FFN0I7SUFDZCxDQUFFLFVBQWtCLENBQUMsc0JBQXNCLENBQUM7UUFDMUMsSUFBSSxpQkFBaUIsRUFBZSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY0xvY2FsU3RvcmFnZSB9IGZyb20gJ25vZGU6YXN5bmNfaG9va3MnO1xuaW1wb3J0IHR5cGUgeyBDcnlwdG9LZXkgfSBmcm9tICcuLi9lbmNyeXB0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dNZXRhZGF0YSB9IGZyb20gJy4uL3dvcmtmbG93L2dldC13b3JrZmxvdy1tZXRhZGF0YS5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0ZXBNZXRhZGF0YSB9IGZyb20gJy4vZ2V0LXN0ZXAtbWV0YWRhdGEuanMnO1xuXG5leHBvcnQgdHlwZSBTdGVwQ29udGV4dCA9IHtcbiAgc3RlcE1ldGFkYXRhOiBTdGVwTWV0YWRhdGE7XG4gIHdvcmtmbG93TWV0YWRhdGE6IFdvcmtmbG93TWV0YWRhdGE7XG4gIG9wczogUHJvbWlzZTx2b2lkPltdO1xuICBjbG9zdXJlVmFycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVuY3J5cHRpb25LZXk/OiBDcnlwdG9LZXk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3Mtd2lkZSBzaW5nbGV0b24gQXN5bmNMb2NhbFN0b3JhZ2UgZm9yIHN0ZXAgZXhlY3V0aW9uIGNvbnRleHQuXG4gKlxuICogVXNlcyBgU3ltYm9sLmZvcigpYCBvbiBnbG9iYWxUaGlzIHRvIGd1YXJhbnRlZSBhIHNpbmdsZSBpbnN0YW5jZSBldmVuIHdoZW5cbiAqIGJ1bmRsZXJzIChlLmcuIFZlcmNlbCdzIHByb2R1Y3Rpb24gYnVuZGxlcikgY3JlYXRlIG11bHRpcGxlIGNvcGllcyBvZiB0aGlzXG4gKiBtb2R1bGUuIFdpdGhvdXQgdGhpcywgYGNvbnRleHRTdG9yYWdlLnJ1bigpYCBpbiB0aGUgc3RlcCBoYW5kbGVyIGFuZFxuICogYGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKClgIGluIHVzZXIgY29kZSAodmlhIGdldFdvcmtmbG93TWV0YWRhdGEgL1xuICogZ2V0U3RlcE1ldGFkYXRhKSBjYW4gcmVmZXJlbmNlIGRpZmZlcmVudCBBc3luY0xvY2FsU3RvcmFnZSBpbnN0YW5jZXMsXG4gKiBjYXVzaW5nIHRoZSBzdG9yZSB0byBhcHBlYXIgZW1wdHkuXG4gKlxuICogTm90ZSB0aGF0IHdlIHdlcmUgdW5hYmxlIHRvIHJlcHJvZHVjZSB0aGlzIGlzc3VlLiBUaGlzIGlzIGEgZml4IGZvciB0aGUgb25seSBzeW50aGV0aWMgd2F5XG4gKiB3YXkgaW4gd2hpY2ggd2UgY291bGQgZ2V0IHRoZSBidWlsZGVyIHRvIGJyZWFrIHdpdGggdGhlIHJlcG9ydGVkIGVycm9yIG1lc3NhZ2UsIGFuZFxuICogc2VydmVzIGFzIGRlZmVuc2UtaW4tZGVwdGgsIHNpbmNlIHRoZSBjaGFuZ2UgaXMgb3RoZXJ3aXNlIHNhZmUuXG4gKlxuICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3dvcmtmbG93L2lzc3Vlcy8xNTc3XG4gKi9cbmNvbnN0IENPTlRFWFRfU1RPUkFHRV9TWU1CT0wgPSBTeW1ib2wuZm9yKCdXT1JLRkxPV19TVEVQX0NPTlRFWFRfU1RPUkFHRScpO1xuXG5leHBvcnQgY29uc3QgY29udGV4dFN0b3JhZ2U6IEFzeW5jTG9jYWxTdG9yYWdlPFN0ZXBDb250ZXh0PiA9XG4gICgoZ2xvYmFsVGhpcyBhcyBhbnkpW0NPTlRFWFRfU1RPUkFHRV9TWU1CT0xdIGFzXG4gICAgfCBBc3luY0xvY2FsU3RvcmFnZTxTdGVwQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZCkgPz9cbiAgKChnbG9iYWxUaGlzIGFzIGFueSlbQ09OVEVYVF9TVE9SQUdFX1NZTUJPTF0gPVxuICAgIG5ldyBBc3luY0xvY2FsU3RvcmFnZTxTdGVwQ29udGV4dD4oKSk7XG4iXX0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvY29udGV4dC1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBNEJyRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQUUzRSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQ3ZCLFVBQWtCLENBQUMsc0JBQXNCLENBRTdCO0lBQ2QsQ0FBRSxVQUFrQixDQUFDLHNCQUFzQixDQUFDO1FBQzFDLElBQUksaUJBQWlCLEVBQWUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tICdub2RlOmFzeW5jX2hvb2tzJztcbmltcG9ydCB0eXBlIHsgQ3J5cHRvS2V5IH0gZnJvbSAnLi4vZW5jcnlwdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsdXNoYWJsZVN0cmVhbVN0YXRlIH0gZnJvbSAnLi4vZmx1c2hhYmxlLXN0cmVhbS5qcyc7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93TWV0YWRhdGEgfSBmcm9tICcuLi93b3JrZmxvdy9nZXQtd29ya2Zsb3ctbWV0YWRhdGEuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGVwTWV0YWRhdGEgfSBmcm9tICcuL2dldC1zdGVwLW1ldGFkYXRhLmpzJztcblxuLyoqXG4gKiBQZXItc3RlcCBjYWNoZSBlbnRyeSBmb3IgYSBgKHJ1bklkLCBuYW1lc3BhY2UpYCB3cml0YWJsZSBzdHJlYW0uXG4gKlxuICogSG9sZHMgdGhlIHVzZXItZmFjaW5nIGBXcml0YWJsZVN0cmVhbWAgYW5kIHRoZSBzaGFyZWQgYEZsdXNoYWJsZVN0cmVhbVN0YXRlYFxuICogZHJpdmluZyB0aGUgYmFja2dyb3VuZCBwaXBlIHRvIHRoZSB3b3JrZmxvdyBzZXJ2ZXIuIFJlLXVzZWQgc28gcmVwZWF0IGNhbGxzXG4gKiB0byBgZ2V0V3JpdGFibGUoKWAgd2l0aGluIHRoZSBzYW1lIHN0ZXAgcmV0dXJuIHRoZSBzYW1lIGhhbmRsZSBpbnN0ZWFkIG9mXG4gKiBzcGF3bmluZyByYWNpbmcgcGlwZXMg4oCUIHNlZSBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3dvcmtmbG93L2lzc3Vlcy8yMDU4LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlZFdyaXRhYmxlIHtcbiAgd3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtPGFueT47XG4gIHN0YXRlOiBGbHVzaGFibGVTdHJlYW1TdGF0ZTtcbn1cblxuZXhwb3J0IHR5cGUgU3RlcENvbnRleHQgPSB7XG4gIHN0ZXBNZXRhZGF0YTogU3RlcE1ldGFkYXRhO1xuICB3b3JrZmxvd01ldGFkYXRhOiBXb3JrZmxvd01ldGFkYXRhO1xuICBvcHM6IFByb21pc2U8dm9pZD5bXTtcbiAgY2xvc3VyZVZhcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbmNyeXB0aW9uS2V5PzogQ3J5cHRvS2V5O1xuICB3cml0YWJsZXM/OiBNYXA8c3RyaW5nLCBDYWNoZWRXcml0YWJsZT47XG59O1xuXG4vKipcbiAqIFByb2Nlc3Mtd2lkZSBzaW5nbGV0b24gQXN5bmNMb2NhbFN0b3JhZ2UgZm9yIHN0ZXAgZXhlY3V0aW9uIGNvbnRleHQuXG4gKlxuICogVXNlcyBgU3ltYm9sLmZvcigpYCBvbiBnbG9iYWxUaGlzIHRvIGd1YXJhbnRlZSBhIHNpbmdsZSBpbnN0YW5jZSBldmVuIHdoZW5cbiAqIGJ1bmRsZXJzIChlLmcuIFZlcmNlbCdzIHByb2R1Y3Rpb24gYnVuZGxlcikgY3JlYXRlIG11bHRpcGxlIGNvcGllcyBvZiB0aGlzXG4gKiBtb2R1bGUuIFdpdGhvdXQgdGhpcywgYGNvbnRleHRTdG9yYWdlLnJ1bigpYCBpbiB0aGUgc3RlcCBoYW5kbGVyIGFuZFxuICogYGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKClgIGluIHVzZXIgY29kZSAodmlhIGdldFdvcmtmbG93TWV0YWRhdGEgL1xuICogZ2V0U3RlcE1ldGFkYXRhKSBjYW4gcmVmZXJlbmNlIGRpZmZlcmVudCBBc3luY0xvY2FsU3RvcmFnZSBpbnN0YW5jZXMsXG4gKiBjYXVzaW5nIHRoZSBzdG9yZSB0byBhcHBlYXIgZW1wdHkuXG4gKlxuICogTm90ZSB0aGF0IHdlIHdlcmUgdW5hYmxlIHRvIHJlcHJvZHVjZSB0aGlzIGlzc3VlLiBUaGlzIGlzIGEgZml4IGZvciB0aGUgb25seSBzeW50aGV0aWMgd2F5XG4gKiB3YXkgaW4gd2hpY2ggd2UgY291bGQgZ2V0IHRoZSBidWlsZGVyIHRvIGJyZWFrIHdpdGggdGhlIHJlcG9ydGVkIGVycm9yIG1lc3NhZ2UsIGFuZFxuICogc2VydmVzIGFzIGRlZmVuc2UtaW4tZGVwdGgsIHNpbmNlIHRoZSBjaGFuZ2UgaXMgb3RoZXJ3aXNlIHNhZmUuXG4gKlxuICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3dvcmtmbG93L2lzc3Vlcy8xNTc3XG4gKi9cbmNvbnN0IENPTlRFWFRfU1RPUkFHRV9TWU1CT0wgPSBTeW1ib2wuZm9yKCdXT1JLRkxPV19TVEVQX0NPTlRFWFRfU1RPUkFHRScpO1xuXG5leHBvcnQgY29uc3QgY29udGV4dFN0b3JhZ2U6IEFzeW5jTG9jYWxTdG9yYWdlPFN0ZXBDb250ZXh0PiA9XG4gICgoZ2xvYmFsVGhpcyBhcyBhbnkpW0NPTlRFWFRfU1RPUkFHRV9TWU1CT0xdIGFzXG4gICAgfCBBc3luY0xvY2FsU3RvcmFnZTxTdGVwQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZCkgPz9cbiAgKChnbG9iYWxUaGlzIGFzIGFueSlbQ09OVEVYVF9TVE9SQUdFX1NZTUJPTF0gPVxuICAgIG5ldyBBc3luY0xvY2FsU3RvcmFnZTxTdGVwQ29udGV4dD4oKSk7XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"writable-stream.d.ts","sourceRoot":"","sources":["../../src/step/writable-stream.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EACjC,OAAO,GAAE,6BAAkC,GAC1C,cAAc,CAAC,CAAC,CAAC,CAoCnB"}
1
+ {"version":3,"file":"writable-stream.d.ts","sourceRoot":"","sources":["../../src/step/writable-stream.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EACjC,OAAO,GAAE,6BAAkC,GAC1C,cAAc,CAAC,CAAC,CAAC,CAuEnB"}
@@ -1,6 +1,7 @@
1
1
  import { throwNotInWorkflowOrStepContext } from '../context-errors.js';
2
2
  import { createFlushableState, flushablePipe, pollWritableLock, } from '../flushable-stream.js';
3
3
  import { getExternalReducers, getSerializeStream, WorkflowServerWritableStream, } from '../serialization.js';
4
+ import { STREAM_NAME_SYMBOL, STREAM_SERVER_RUN_ID_SYMBOL } from '../symbols.js';
4
5
  import { getWorkflowRunStreamId } from '../util.js';
5
6
  import { contextStorage } from './context-storage.js';
6
7
  /**
@@ -21,7 +22,24 @@ export function getWritable(options = {}) {
21
22
  const { namespace } = options;
22
23
  const runId = ctx.workflowMetadata.workflowRunId;
23
24
  const name = getWorkflowRunStreamId(runId, namespace);
24
- // Create a transform stream that serializes chunks and pipes to the workflow server
25
+ // Cache the writable per (runId, namespace) within the step context.
26
+ //
27
+ // The previous behavior — constructing a fresh TransformStream and
28
+ // background pipe on every call — produced non-deterministic chunk
29
+ // ordering when callers acquired a new writer per write (e.g. a
30
+ // per-chunk loop). Each pipe flushed to the same (runId, name) server
31
+ // stream independently, and on Vercel the 50-100ms HTTP latency
32
+ // turned the race window from microseconds into something prod-visible.
33
+ //
34
+ // Sharing a single TransformStream + pipe across calls makes the
35
+ // unsafe pattern correct: writes go through one serial sink in the
36
+ // order the user wrote them. See
37
+ // https://github.com/vercel/workflow/issues/2058.
38
+ const cache = (ctx.writables ??= new Map());
39
+ const cached = cache.get(name);
40
+ if (cached) {
41
+ return cached.writable;
42
+ }
25
43
  const serialize = getSerializeStream(getExternalReducers(globalThis, ctx.ops, runId, ctx.encryptionKey), ctx.encryptionKey);
26
44
  // Use flushable pipe so the ops promise resolves when the user releases
27
45
  // their writer lock, not only when the stream is explicitly closed.
@@ -34,7 +52,22 @@ export function getWritable(options = {}) {
34
52
  // Errors are handled via state.reject
35
53
  });
36
54
  pollWritableLock(serialize.writable, state);
37
- // Return the writable side of the transform stream
55
+ // Tag the writable with its underlying `(runId, name)` so downstream
56
+ // reducers can recognize that it's already backed by a workflow
57
+ // server stream. Calling `start(child, [args, theWritable])` from
58
+ // the same step uses these tags to emit `{ name, runId }` in the
59
+ // dehydrated descriptor, so the child's reviver can open the
60
+ // writable against the original `(runId, name)` directly — no
61
+ // in-process bridge tied to this step's lifetime.
62
+ Object.defineProperty(serialize.writable, STREAM_NAME_SYMBOL, {
63
+ value: name,
64
+ writable: false,
65
+ });
66
+ Object.defineProperty(serialize.writable, STREAM_SERVER_RUN_ID_SYMBOL, {
67
+ value: runId,
68
+ writable: false,
69
+ });
70
+ cache.set(name, { writable: serialize.writable, state });
38
71
  return serialize.writable;
39
72
  }
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGFibGUtc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvd3JpdGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLGdCQUFnQixHQUNqQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLDRCQUE0QixHQUM3QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFhdEQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsVUFBeUMsRUFBRTtJQUUzQyxNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsK0JBQStCLENBQzdCLGVBQWUsRUFDZixtRUFBbUUsRUFDbkUsV0FBVyxDQUNaLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUM5QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO0lBQ2pELE1BQU0sSUFBSSxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUV0RCxvRkFBb0Y7SUFDcEYsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQ2xDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQ2xFLEdBQUcsQ0FBQyxhQUFhLENBQ2xCLENBQUM7SUFFRix3RUFBd0U7SUFDeEUsb0VBQW9FO0lBQ3BFLHdFQUF3RTtJQUN4RSwyQ0FBMkM7SUFDM0MsTUFBTSxjQUFjLEdBQUcsSUFBSSw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckUsTUFBTSxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztJQUNyQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFNUIsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDbEUsc0NBQXNDO0lBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBRUgsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUU1QyxtREFBbUQ7SUFDbkQsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0aHJvd05vdEluV29ya2Zsb3dPclN0ZXBDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC1lcnJvcnMuanMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlRmx1c2hhYmxlU3RhdGUsXG4gIGZsdXNoYWJsZVBpcGUsXG4gIHBvbGxXcml0YWJsZUxvY2ssXG59IGZyb20gJy4uL2ZsdXNoYWJsZS1zdHJlYW0uanMnO1xuaW1wb3J0IHtcbiAgZ2V0RXh0ZXJuYWxSZWR1Y2VycyxcbiAgZ2V0U2VyaWFsaXplU3RyZWFtLFxuICBXb3JrZmxvd1NlcnZlcldyaXRhYmxlU3RyZWFtLFxufSBmcm9tICcuLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93UnVuU3RyZWFtSWQgfSBmcm9tICcuLi91dGlsLmpzJztcbmltcG9ydCB7IGNvbnRleHRTdG9yYWdlIH0gZnJvbSAnLi9jb250ZXh0LXN0b3JhZ2UuanMnO1xuXG4vKipcbiAqIFRoZSBvcHRpb25zIGZvciB7QGxpbmsgZ2V0V3JpdGFibGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93V3JpdGFibGVTdHJlYW1PcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIG5hbWVzcGFjZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG11bHRpcGxlIHN0cmVhbXMgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSBzYW1lIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIG5hbWVzcGFjZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSB3cml0YWJsZSBzdHJlYW0gdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgd29ya2Zsb3cuXG4gKlxuICogVGhlIHdyaXRhYmxlIHN0cmVhbSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGhpbiBzdGVwIGZ1bmN0aW9ucyB0byB3cml0ZVxuICogZGF0YSB0aGF0IGNhbiBiZSByZWFkIG91dHNpZGUgdGhlIHdvcmtmbG93IGJ5IHVzaW5nIHRoZSByZWFkYWJsZSBtZXRob2Qgb2YgZ2V0UnVuLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHdyaXRhYmxlIHN0cmVhbVxuICogQHJldHVybnMgVGhlIHdyaXRhYmxlIHN0cmVhbSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgd29ya2Zsb3cgcnVuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGNhbGxlZCBvdXRzaWRlIGEgd29ya2Zsb3cgb3Igc3RlcCBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V3JpdGFibGU8VyA9IGFueT4oXG4gIG9wdGlvbnM6IFdvcmtmbG93V3JpdGFibGVTdHJlYW1PcHRpb25zID0ge31cbik6IFdyaXRhYmxlU3RyZWFtPFc+IHtcbiAgY29uc3QgY3R4ID0gY29udGV4dFN0b3JhZ2UuZ2V0U3RvcmUoKTtcbiAgaWYgKCFjdHgpIHtcbiAgICB0aHJvd05vdEluV29ya2Zsb3dPclN0ZXBDb250ZXh0KFxuICAgICAgJ2dldFdyaXRhYmxlKCknLFxuICAgICAgJ2h0dHBzOi8vd29ya2Zsb3ctc2RrLmRldi9kb2NzL2FwaS1yZWZlcmVuY2Uvd29ya2Zsb3cvZ2V0LXdyaXRhYmxlJyxcbiAgICAgIGdldFdyaXRhYmxlXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHsgbmFtZXNwYWNlIH0gPSBvcHRpb25zO1xuICBjb25zdCBydW5JZCA9IGN0eC53b3JrZmxvd01ldGFkYXRhLndvcmtmbG93UnVuSWQ7XG4gIGNvbnN0IG5hbWUgPSBnZXRXb3JrZmxvd1J1blN0cmVhbUlkKHJ1bklkLCBuYW1lc3BhY2UpO1xuXG4gIC8vIENyZWF0ZSBhIHRyYW5zZm9ybSBzdHJlYW0gdGhhdCBzZXJpYWxpemVzIGNodW5rcyBhbmQgcGlwZXMgdG8gdGhlIHdvcmtmbG93IHNlcnZlclxuICBjb25zdCBzZXJpYWxpemUgPSBnZXRTZXJpYWxpemVTdHJlYW0oXG4gICAgZ2V0RXh0ZXJuYWxSZWR1Y2VycyhnbG9iYWxUaGlzLCBjdHgub3BzLCBydW5JZCwgY3R4LmVuY3J5cHRpb25LZXkpLFxuICAgIGN0eC5lbmNyeXB0aW9uS2V5XG4gICk7XG5cbiAgLy8gVXNlIGZsdXNoYWJsZSBwaXBlIHNvIHRoZSBvcHMgcHJvbWlzZSByZXNvbHZlcyB3aGVuIHRoZSB1c2VyIHJlbGVhc2VzXG4gIC8vIHRoZWlyIHdyaXRlciBsb2NrLCBub3Qgb25seSB3aGVuIHRoZSBzdHJlYW0gaXMgZXhwbGljaXRseSBjbG9zZWQuXG4gIC8vIFdpdGhvdXQgdGhpcywgVmVyY2VsIGZ1bmN0aW9ucyBoYW5nIHVudGlsIHRoZSBydW50aW1lIHRpbWVvdXQgYmVjYXVzZVxuICAvLyAucGlwZVRvKCkgb25seSByZXNvbHZlcyBvbiBzdHJlYW0gY2xvc2UuXG4gIGNvbnN0IHNlcnZlcldyaXRhYmxlID0gbmV3IFdvcmtmbG93U2VydmVyV3JpdGFibGVTdHJlYW0ocnVuSWQsIG5hbWUpO1xuICBjb25zdCBzdGF0ZSA9IGNyZWF0ZUZsdXNoYWJsZVN0YXRlKCk7XG4gIGN0eC5vcHMucHVzaChzdGF0ZS5wcm9taXNlKTtcblxuICBmbHVzaGFibGVQaXBlKHNlcmlhbGl6ZS5yZWFkYWJsZSwgc2VydmVyV3JpdGFibGUsIHN0YXRlKS5jYXRjaCgoKSA9PiB7XG4gICAgLy8gRXJyb3JzIGFyZSBoYW5kbGVkIHZpYSBzdGF0ZS5yZWplY3RcbiAgfSk7XG5cbiAgcG9sbFdyaXRhYmxlTG9jayhzZXJpYWxpemUud3JpdGFibGUsIHN0YXRlKTtcblxuICAvLyBSZXR1cm4gdGhlIHdyaXRhYmxlIHNpZGUgb2YgdGhlIHRyYW5zZm9ybSBzdHJlYW1cbiAgcmV0dXJuIHNlcmlhbGl6ZS53cml0YWJsZTtcbn1cbiJdfQ==
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGFibGUtc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvd3JpdGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLGdCQUFnQixHQUNqQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLDRCQUE0QixHQUM3QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUF1QixjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWEzRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixVQUF5QyxFQUFFO0lBRTNDLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCwrQkFBK0IsQ0FDN0IsZUFBZSxFQUNmLG1FQUFtRSxFQUNuRSxXQUFXLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQzlCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7SUFDakQsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXRELHFFQUFxRTtJQUNyRSxFQUFFO0lBQ0YsbUVBQW1FO0lBQ25FLG1FQUFtRTtJQUNuRSxnRUFBZ0U7SUFDaEUsc0VBQXNFO0lBQ3RFLGdFQUFnRTtJQUNoRSx3RUFBd0U7SUFDeEUsRUFBRTtJQUNGLGlFQUFpRTtJQUNqRSxtRUFBbUU7SUFDbkUsaUNBQWlDO0lBQ2pDLGtEQUFrRDtJQUNsRCxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEtBQUssSUFBSSxHQUFHLEVBQTBCLENBQUMsQ0FBQztJQUNwRSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxPQUFPLE1BQU0sQ0FBQyxRQUE2QixDQUFDO0lBQzlDLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FDbEMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFDbEUsR0FBRyxDQUFDLGFBQWEsQ0FDbEIsQ0FBQztJQUVGLHdFQUF3RTtJQUN4RSxvRUFBb0U7SUFDcEUsd0VBQXdFO0lBQ3hFLDJDQUEyQztJQUMzQyxNQUFNLGNBQWMsR0FBRyxJQUFJLDRCQUE0QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRSxNQUFNLEtBQUssR0FBRyxvQkFBb0IsRUFBRSxDQUFDO0lBQ3JDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU1QixhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUNsRSxzQ0FBc0M7SUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTVDLHFFQUFxRTtJQUNyRSxnRUFBZ0U7SUFDaEUsa0VBQWtFO0lBQ2xFLGlFQUFpRTtJQUNqRSw2REFBNkQ7SUFDN0QsOERBQThEO0lBQzlELGtEQUFrRDtJQUNsRCxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLEVBQUU7UUFDNUQsS0FBSyxFQUFFLElBQUk7UUFDWCxRQUFRLEVBQUUsS0FBSztLQUNoQixDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsMkJBQTJCLEVBQUU7UUFDckUsS0FBSyxFQUFFLEtBQUs7UUFDWixRQUFRLEVBQUUsS0FBSztLQUNoQixDQUFDLENBQUM7SUFFSCxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFekQsT0FBTyxTQUFTLENBQUMsUUFBNkIsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdGhyb3dOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQtZXJyb3JzLmpzJztcbmltcG9ydCB7XG4gIGNyZWF0ZUZsdXNoYWJsZVN0YXRlLFxuICBmbHVzaGFibGVQaXBlLFxuICBwb2xsV3JpdGFibGVMb2NrLFxufSBmcm9tICcuLi9mbHVzaGFibGUtc3RyZWFtLmpzJztcbmltcG9ydCB7XG4gIGdldEV4dGVybmFsUmVkdWNlcnMsXG4gIGdldFNlcmlhbGl6ZVN0cmVhbSxcbiAgV29ya2Zsb3dTZXJ2ZXJXcml0YWJsZVN0cmVhbSxcbn0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgeyBTVFJFQU1fTkFNRV9TWU1CT0wsIFNUUkVBTV9TRVJWRVJfUlVOX0lEX1NZTUJPTCB9IGZyb20gJy4uL3N5bWJvbHMuanMnO1xuaW1wb3J0IHsgZ2V0V29ya2Zsb3dSdW5TdHJlYW1JZCB9IGZyb20gJy4uL3V0aWwuanMnO1xuaW1wb3J0IHsgdHlwZSBDYWNoZWRXcml0YWJsZSwgY29udGV4dFN0b3JhZ2UgfSBmcm9tICcuL2NvbnRleHQtc3RvcmFnZS5qcyc7XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIHtAbGluayBnZXRXcml0YWJsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dXcml0YWJsZVN0cmVhbU9wdGlvbnMge1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgbmFtZXNwYWNlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gbXVsdGlwbGUgc3RyZWFtcyBhc3NvY2lhdGVkXG4gICAqIHdpdGggdGhlIHNhbWUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgbmFtZXNwYWNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIHdyaXRhYmxlIHN0cmVhbSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCB3b3JrZmxvdy5cbiAqXG4gKiBUaGUgd3JpdGFibGUgc3RyZWFtIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluIHN0ZXAgZnVuY3Rpb25zIHRvIHdyaXRlXG4gKiBkYXRhIHRoYXQgY2FuIGJlIHJlYWQgb3V0c2lkZSB0aGUgd29ya2Zsb3cgYnkgdXNpbmcgdGhlIHJlYWRhYmxlIG1ldGhvZCBvZiBnZXRSdW4uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgd3JpdGFibGUgc3RyZWFtXG4gKiBAcmV0dXJucyBUaGUgd3JpdGFibGUgc3RyZWFtIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCB3b3JrZmxvdyBydW5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgY2FsbGVkIG91dHNpZGUgYSB3b3JrZmxvdyBvciBzdGVwIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXcml0YWJsZTxXID0gYW55PihcbiAgb3B0aW9uczogV29ya2Zsb3dXcml0YWJsZVN0cmVhbU9wdGlvbnMgPSB7fVxuKTogV3JpdGFibGVTdHJlYW08Vz4ge1xuICBjb25zdCBjdHggPSBjb250ZXh0U3RvcmFnZS5nZXRTdG9yZSgpO1xuICBpZiAoIWN0eCkge1xuICAgIHRocm93Tm90SW5Xb3JrZmxvd09yU3RlcENvbnRleHQoXG4gICAgICAnZ2V0V3JpdGFibGUoKScsXG4gICAgICAnaHR0cHM6Ly93b3JrZmxvdy1zZGsuZGV2L2RvY3MvYXBpLXJlZmVyZW5jZS93b3JrZmxvdy9nZXQtd3JpdGFibGUnLFxuICAgICAgZ2V0V3JpdGFibGVcbiAgICApO1xuICB9XG5cbiAgY29uc3QgeyBuYW1lc3BhY2UgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJ1bklkID0gY3R4LndvcmtmbG93TWV0YWRhdGEud29ya2Zsb3dSdW5JZDtcbiAgY29uc3QgbmFtZSA9IGdldFdvcmtmbG93UnVuU3RyZWFtSWQocnVuSWQsIG5hbWVzcGFjZSk7XG5cbiAgLy8gQ2FjaGUgdGhlIHdyaXRhYmxlIHBlciAocnVuSWQsIG5hbWVzcGFjZSkgd2l0aGluIHRoZSBzdGVwIGNvbnRleHQuXG4gIC8vXG4gIC8vIFRoZSBwcmV2aW91cyBiZWhhdmlvciDigJQgY29uc3RydWN0aW5nIGEgZnJlc2ggVHJhbnNmb3JtU3RyZWFtIGFuZFxuICAvLyBiYWNrZ3JvdW5kIHBpcGUgb24gZXZlcnkgY2FsbCDigJQgcHJvZHVjZWQgbm9uLWRldGVybWluaXN0aWMgY2h1bmtcbiAgLy8gb3JkZXJpbmcgd2hlbiBjYWxsZXJzIGFjcXVpcmVkIGEgbmV3IHdyaXRlciBwZXIgd3JpdGUgKGUuZy4gYVxuICAvLyBwZXItY2h1bmsgbG9vcCkuIEVhY2ggcGlwZSBmbHVzaGVkIHRvIHRoZSBzYW1lIChydW5JZCwgbmFtZSkgc2VydmVyXG4gIC8vIHN0cmVhbSBpbmRlcGVuZGVudGx5LCBhbmQgb24gVmVyY2VsIHRoZSA1MC0xMDBtcyBIVFRQIGxhdGVuY3lcbiAgLy8gdHVybmVkIHRoZSByYWNlIHdpbmRvdyBmcm9tIG1pY3Jvc2Vjb25kcyBpbnRvIHNvbWV0aGluZyBwcm9kLXZpc2libGUuXG4gIC8vXG4gIC8vIFNoYXJpbmcgYSBzaW5nbGUgVHJhbnNmb3JtU3RyZWFtICsgcGlwZSBhY3Jvc3MgY2FsbHMgbWFrZXMgdGhlXG4gIC8vIHVuc2FmZSBwYXR0ZXJuIGNvcnJlY3Q6IHdyaXRlcyBnbyB0aHJvdWdoIG9uZSBzZXJpYWwgc2luayBpbiB0aGVcbiAgLy8gb3JkZXIgdGhlIHVzZXIgd3JvdGUgdGhlbS4gU2VlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvd29ya2Zsb3cvaXNzdWVzLzIwNTguXG4gIGNvbnN0IGNhY2hlID0gKGN0eC53cml0YWJsZXMgPz89IG5ldyBNYXA8c3RyaW5nLCBDYWNoZWRXcml0YWJsZT4oKSk7XG4gIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChuYW1lKTtcbiAgaWYgKGNhY2hlZCkge1xuICAgIHJldHVybiBjYWNoZWQud3JpdGFibGUgYXMgV3JpdGFibGVTdHJlYW08Vz47XG4gIH1cblxuICBjb25zdCBzZXJpYWxpemUgPSBnZXRTZXJpYWxpemVTdHJlYW0oXG4gICAgZ2V0RXh0ZXJuYWxSZWR1Y2VycyhnbG9iYWxUaGlzLCBjdHgub3BzLCBydW5JZCwgY3R4LmVuY3J5cHRpb25LZXkpLFxuICAgIGN0eC5lbmNyeXB0aW9uS2V5XG4gICk7XG5cbiAgLy8gVXNlIGZsdXNoYWJsZSBwaXBlIHNvIHRoZSBvcHMgcHJvbWlzZSByZXNvbHZlcyB3aGVuIHRoZSB1c2VyIHJlbGVhc2VzXG4gIC8vIHRoZWlyIHdyaXRlciBsb2NrLCBub3Qgb25seSB3aGVuIHRoZSBzdHJlYW0gaXMgZXhwbGljaXRseSBjbG9zZWQuXG4gIC8vIFdpdGhvdXQgdGhpcywgVmVyY2VsIGZ1bmN0aW9ucyBoYW5nIHVudGlsIHRoZSBydW50aW1lIHRpbWVvdXQgYmVjYXVzZVxuICAvLyAucGlwZVRvKCkgb25seSByZXNvbHZlcyBvbiBzdHJlYW0gY2xvc2UuXG4gIGNvbnN0IHNlcnZlcldyaXRhYmxlID0gbmV3IFdvcmtmbG93U2VydmVyV3JpdGFibGVTdHJlYW0ocnVuSWQsIG5hbWUpO1xuICBjb25zdCBzdGF0ZSA9IGNyZWF0ZUZsdXNoYWJsZVN0YXRlKCk7XG4gIGN0eC5vcHMucHVzaChzdGF0ZS5wcm9taXNlKTtcblxuICBmbHVzaGFibGVQaXBlKHNlcmlhbGl6ZS5yZWFkYWJsZSwgc2VydmVyV3JpdGFibGUsIHN0YXRlKS5jYXRjaCgoKSA9PiB7XG4gICAgLy8gRXJyb3JzIGFyZSBoYW5kbGVkIHZpYSBzdGF0ZS5yZWplY3RcbiAgfSk7XG5cbiAgcG9sbFdyaXRhYmxlTG9jayhzZXJpYWxpemUud3JpdGFibGUsIHN0YXRlKTtcblxuICAvLyBUYWcgdGhlIHdyaXRhYmxlIHdpdGggaXRzIHVuZGVybHlpbmcgYChydW5JZCwgbmFtZSlgIHNvIGRvd25zdHJlYW1cbiAgLy8gcmVkdWNlcnMgY2FuIHJlY29nbml6ZSB0aGF0IGl0J3MgYWxyZWFkeSBiYWNrZWQgYnkgYSB3b3JrZmxvd1xuICAvLyBzZXJ2ZXIgc3RyZWFtLiBDYWxsaW5nIGBzdGFydChjaGlsZCwgW2FyZ3MsIHRoZVdyaXRhYmxlXSlgIGZyb21cbiAgLy8gdGhlIHNhbWUgc3RlcCB1c2VzIHRoZXNlIHRhZ3MgdG8gZW1pdCBgeyBuYW1lLCBydW5JZCB9YCBpbiB0aGVcbiAgLy8gZGVoeWRyYXRlZCBkZXNjcmlwdG9yLCBzbyB0aGUgY2hpbGQncyByZXZpdmVyIGNhbiBvcGVuIHRoZVxuICAvLyB3cml0YWJsZSBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgKHJ1bklkLCBuYW1lKWAgZGlyZWN0bHkg4oCUIG5vXG4gIC8vIGluLXByb2Nlc3MgYnJpZGdlIHRpZWQgdG8gdGhpcyBzdGVwJ3MgbGlmZXRpbWUuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZXJpYWxpemUud3JpdGFibGUsIFNUUkVBTV9OQU1FX1NZTUJPTCwge1xuICAgIHZhbHVlOiBuYW1lLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZXJpYWxpemUud3JpdGFibGUsIFNUUkVBTV9TRVJWRVJfUlVOX0lEX1NZTUJPTCwge1xuICAgIHZhbHVlOiBydW5JZCxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0pO1xuXG4gIGNhY2hlLnNldChuYW1lLCB7IHdyaXRhYmxlOiBzZXJpYWxpemUud3JpdGFibGUsIHN0YXRlIH0pO1xuXG4gIHJldHVybiBzZXJpYWxpemUud3JpdGFibGUgYXMgV3JpdGFibGVTdHJlYW08Vz47XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,wBAAgB,aAAa,CAAC,GAAG,EAAE,2BAA2B,IACpC,IAAI,SAAS,YAAY,EAAE,EAAE,MAAM,EACzD,UAAU,MAAM,EAChB,gBAAgB,MAAM,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,YAI1C,OAAO,WACJ,IAAI,KACZ,OAAO,CAAC,MAAM,CAAC,CAkRrB"}
1
+ {"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,wBAAgB,aAAa,CAAC,GAAG,EAAE,2BAA2B,IACpC,IAAI,SAAS,YAAY,EAAE,EAAE,MAAM,EACzD,UAAU,MAAM,EAChB,gBAAgB,MAAM,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,YAI1C,OAAO,WACJ,IAAI,KACZ,OAAO,CAAC,MAAM,CAAC,CAoSrB"}
package/dist/step.js CHANGED
@@ -1,4 +1,4 @@
1
- import { FatalError, WorkflowRuntimeError } from '@workflow/errors';
1
+ import { CorruptedEventLogError, FatalError } from '@workflow/errors';
2
2
  import { withResolvers } from '@workflow/utils';
3
3
  import { EventConsumerResult } from './events-consumer.js';
4
4
  import { WorkflowSuspension } from './global.js';
@@ -56,6 +56,17 @@ export function createUseStep(ctx) {
56
56
  // We're not interested in this event - the correlationId belongs to a different entity
57
57
  return EventConsumerResult.NotConsumed;
58
58
  }
59
+ const eventStepName = 'eventData' in event &&
60
+ event.eventData &&
61
+ 'stepName' in event.eventData
62
+ ? event.eventData.stepName
63
+ : undefined;
64
+ if (typeof eventStepName === 'string' && eventStepName !== stepName) {
65
+ ctx.promiseQueue = ctx.promiseQueue.then(() => {
66
+ ctx.onWorkflowError(new CorruptedEventLogError(`Corrupted event log: step event ${event.eventType} for ${correlationId} belongs to "${eventStepName}", but the current step consumer is "${stepName}"`));
67
+ });
68
+ return EventConsumerResult.Finished;
69
+ }
59
70
  if (event.eventType === 'step_created') {
60
71
  // Step has been created (registered for execution) - mark as having event
61
72
  // but keep in queue so suspension handler knows to queue execution without
@@ -65,7 +76,7 @@ export function createUseStep(ctx) {
65
76
  // This indicates event log corruption - step_created received
66
77
  // but the step was never invoked in the workflow during replay.
67
78
  ctx.promiseQueue = ctx.promiseQueue.then(() => {
68
- reject(new WorkflowRuntimeError(`Corrupted event log: step ${correlationId} (${stepName}) created but not found in invocation queue`));
79
+ reject(new CorruptedEventLogError(`Corrupted event log: step ${correlationId} (${stepName}) created but not found in invocation queue`));
69
80
  });
70
81
  return EventConsumerResult.Finished;
71
82
  }
@@ -138,7 +149,7 @@ export function createUseStep(ctx) {
138
149
  }
139
150
  // An unexpected event type has been received, this event log looks corrupted. Let's fail immediately.
140
151
  ctx.promiseQueue = ctx.promiseQueue.then(() => {
141
- ctx.onWorkflowError(new WorkflowRuntimeError(`Unexpected event type for step ${correlationId} (name: ${stepName}) "${event.eventType}"`));
152
+ ctx.onWorkflowError(new CorruptedEventLogError(`Unexpected event type for step ${correlationId} (name: ${stepName}) "${event.eventType}"`));
142
153
  });
143
154
  return EventConsumerResult.Finished;
144
155
  });
@@ -230,4 +241,4 @@ export function createUseStep(ctx) {
230
241
  return stepFunction;
231
242
  };
232
243
  }
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFnQyxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxnQkFBZ0IsR0FFakIsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUUsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFnQztJQUM1RCxPQUFPLFNBQVMsT0FBTyxDQUNyQixRQUFnQixFQUNoQixhQUFrRDtRQUVsRCx1RkFBdUY7UUFDdkYsTUFBTSxZQUFZLEdBQUcsVUFFbkIsR0FBRyxJQUFVO1lBRWIsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsYUFBYSxFQUFVLENBQUM7WUFFN0QsTUFBTSxhQUFhLEdBQUcsUUFBUSxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztZQUVuRCxNQUFNLFNBQVMsR0FBNEI7Z0JBQ3pDLElBQUksRUFBRSxNQUFNO2dCQUNaLGFBQWE7Z0JBQ2IsUUFBUTtnQkFDUixJQUFJO2FBQ0wsQ0FBQztZQUVGLHVFQUF1RTtZQUN2RSw4REFBOEQ7WUFDOUQsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUMvRCxTQUFTLENBQUMsT0FBTyxHQUFHLElBQW9CLENBQUM7WUFDM0MsQ0FBQztZQUVELGlFQUFpRTtZQUNqRSxNQUFNLFdBQVcsR0FBRyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLFNBQVMsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1lBQ3RDLENBQUM7WUFFRCxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUVuRCxVQUFVLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFO2dCQUN0QyxhQUFhO2dCQUNiLFFBQVE7Z0JBQ1IsSUFBSTthQUNMLENBQUMsQ0FBQztZQUNILEdBQUcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDWCxxR0FBcUc7b0JBQ3JHLHlEQUF5RDtvQkFDekQsMkVBQTJFO29CQUMzRSx1RkFBdUY7b0JBQ3ZGLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7d0JBQ3pCLEdBQUcsQ0FBQyxlQUFlLENBQ2pCLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FDN0QsQ0FBQztvQkFDSixDQUFDLENBQUMsQ0FBQztvQkFDSCxPQUFPLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztnQkFDekMsQ0FBQztnQkFFRCxVQUFVLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxFQUFFO29CQUNqRCxhQUFhO29CQUNiLFFBQVE7b0JBQ1IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUNyQixxQkFBcUIsRUFBRSxLQUFLLENBQUMsYUFBYTtvQkFDMUMsT0FBTyxFQUFFLGFBQWEsS0FBSyxLQUFLLENBQUMsYUFBYTtvQkFDOUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO2lCQUMzQixDQUFDLENBQUM7Z0JBRUgsSUFBSSxLQUFLLENBQUMsYUFBYSxLQUFLLGFBQWEsRUFBRSxDQUFDO29CQUMxQyx1RkFBdUY7b0JBQ3ZGLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUFDO2dCQUN6QyxDQUFDO2dCQUVELElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxjQUFjLEVBQUUsQ0FBQztvQkFDdkMsMEVBQTBFO29CQUMxRSwyRUFBMkU7b0JBQzNFLDBDQUEwQztvQkFDMUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDMUQsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO3dCQUM1Qyw4REFBOEQ7d0JBQzlELGdFQUFnRTt3QkFDaEUsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7NEJBQzVDLE1BQU0sQ0FDSixJQUFJLG9CQUFvQixDQUN0Qiw2QkFBNkIsYUFBYSxLQUFLLFFBQVEsNkNBQTZDLENBQ3JHLENBQ0YsQ0FBQzt3QkFDSixDQUFDLENBQUMsQ0FBQzt3QkFDSCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztvQkFDdEMsQ0FBQztvQkFDRCxTQUFTLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztvQkFDakMsc0VBQXNFO29CQUN0RSxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztnQkFDdEMsQ0FBQztnQkFFRCxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssY0FBYyxFQUFFLENBQUM7b0JBQ3ZDLHNGQUFzRjtvQkFDdEYseUZBQXlGO29CQUN6RixnQ0FBZ0M7b0JBQ2hDLE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO2dCQUN0QyxDQUFDO2dCQUVELElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxlQUFlLEVBQUUsQ0FBQztvQkFDeEMsZ0ZBQWdGO29CQUNoRixPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztnQkFDdEMsQ0FBQztnQkFFRCxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssYUFBYSxFQUFFLENBQUM7b0JBQ3RDLDBEQUEwRDtvQkFDMUQsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ2pELHFEQUFxRDtvQkFDckQsZ0VBQWdFO29CQUNoRSxnRUFBZ0U7b0JBQ2hFLDhEQUE4RDtvQkFDOUQsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTt3QkFDbEQsSUFBSSxDQUFDOzRCQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sZ0JBQWdCLENBQ3JDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUNyQixHQUFHLENBQUMsS0FBSyxFQUNULEdBQUcsQ0FBQyxhQUFhLEVBQ2pCLEdBQUcsQ0FBQyxVQUFVLENBQ2YsQ0FBQzs0QkFDRixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ25CLENBQUM7d0JBQUMsT0FBTyxVQUFVLEVBQUUsQ0FBQzs0QkFDcEIsNERBQTREOzRCQUM1RCwwREFBMEQ7NEJBQzFELHFEQUFxRDs0QkFDckQsVUFBVSxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsRUFBRTtnQ0FDdEQsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO2dDQUNsQyxLQUFLLEVBQ0gsVUFBVSxZQUFZLEtBQUs7b0NBQ3pCLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTztvQ0FDcEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7NkJBQ3pCLENBQUMsQ0FBQzs0QkFDSCxNQUFNLENBQ0osSUFBSSxVQUFVLENBQ1osaUNBQ0UsVUFBVSxZQUFZLEtBQUs7Z0NBQ3pCLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTztnQ0FDcEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ3ZCLEVBQUUsQ0FDSCxDQUNGLENBQUM7d0JBQ0osQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDSCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztnQkFDdEMsQ0FBQztnQkFFRCxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztvQkFDekMsMERBQTBEO29CQUMxRCxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFFakQscUVBQXFFO29CQUNyRSxvRUFBb0U7b0JBQ3BFLDBEQUEwRDtvQkFDMUQsNERBQTREO29CQUM1RCxpRUFBaUU7b0JBQ2pFLG1FQUFtRTtvQkFDbkUsR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQ3hCLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7d0JBQ2xELElBQUksQ0FBQzs0QkFDSCxNQUFNLGNBQWMsR0FBRyxNQUFNLHNCQUFzQixDQUNqRCxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFDdEIsR0FBRyxDQUFDLEtBQUssRUFDVCxHQUFHLENBQUMsYUFBYSxFQUNqQixHQUFHLENBQUMsVUFBVSxDQUNmLENBQUM7NEJBQ0YsT0FBTyxDQUFDLGNBQXdCLENBQUMsQ0FBQzt3QkFDcEMsQ0FBQzt3QkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDOzRCQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDaEIsQ0FBQztnQ0FBUyxDQUFDOzRCQUNULEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO3dCQUMxQixDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO29CQUNILE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO2dCQUN0QyxDQUFDO2dCQUVELHNHQUFzRztnQkFDdEcsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQzVDLEdBQUcsQ0FBQyxlQUFlLENBQ2pCLElBQUksb0JBQW9CLENBQ3RCLGtDQUFrQyxhQUFhLFdBQVcsUUFBUSxNQUFNLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FDM0YsQ0FDRixDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUYscUVBQXFFO1FBQ3JFLCtFQUErRTtRQUMvRSxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRTtZQUMxQyxLQUFLLEVBQUUsWUFBWTtTQUNwQixDQUFDLENBQUM7UUFFSCwwRUFBMEU7UUFDMUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFO1lBQzVDLEtBQUssRUFBRSxRQUFRO1lBQ2YsUUFBUSxFQUFFLEtBQUs7WUFDZixVQUFVLEVBQUUsS0FBSztZQUNqQixZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDLENBQUM7UUFFSCx5REFBeUQ7UUFDekQsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRTtnQkFDckQsS0FBSyxFQUFFLGFBQWE7Z0JBQ3BCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixZQUFZLEVBQUUsS0FBSzthQUNwQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsa0VBQWtFO1FBQ2xFLHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUsb0VBQW9FO1FBQ3BFLG1FQUFtRTtRQUNuRSwrREFBK0Q7UUFDL0QsK0RBQStEO1FBQy9ELHVEQUF1RDtRQUN2RCxFQUFFO1FBQ0Ysc0VBQXNFO1FBQ3RFLDhCQUE4QjtRQUM5QixnRUFBZ0U7UUFDaEUsbUVBQW1FO1FBQ25FLHlFQUF5RTtRQUN6RSxnRUFBZ0U7UUFDaEUsb0VBQW9FO1FBQ3BFLG9FQUFvRTtRQUNwRSxtRUFBbUU7UUFDbkUscUVBQXFFO1FBQ3JFLHNFQUFzRTtRQUN0RSxvRUFBb0U7UUFDcEUsa0VBQWtFO1FBQ2xFLCtEQUErRDtRQUMvRCxxRUFBcUU7UUFDckUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFO1lBQzFDLEtBQUssRUFBRSxVQUVMLE9BQWdCLEVBQ2hCLEdBQUcsV0FBc0I7Z0JBRXpCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDeEMsSUFBSSxFQUNKLE9BQU8sRUFDUCxHQUFHLFdBQVcsQ0FDZixDQUFDO2dCQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtvQkFDckMsS0FBSyxFQUFFLFFBQVE7b0JBQ2YsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLFlBQVksRUFBRSxLQUFLO2lCQUNwQixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxhQUFhLEVBQUUsQ0FBQztvQkFDbEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7d0JBQzlDLEtBQUssRUFBRSxhQUFhO3dCQUNwQixRQUFRLEVBQUUsS0FBSzt3QkFDZixVQUFVLEVBQUUsS0FBSzt3QkFDakIsWUFBWSxFQUFFLEtBQUs7cUJBQ3BCLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRTtvQkFDMUMsS0FBSyxFQUFFLE9BQU87b0JBQ2QsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLFlBQVksRUFBRSxLQUFLO2lCQUNwQixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMzQixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUU7d0JBQzFDLEtBQUssRUFBRSxXQUFXO3dCQUNsQixRQUFRLEVBQUUsS0FBSzt3QkFDZixVQUFVLEVBQUUsS0FBSzt3QkFDakIsWUFBWSxFQUFFLEtBQUs7cUJBQ3BCLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZhdGFsRXJyb3IsIFdvcmtmbG93UnVudGltZUVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgeyB3aXRoUmVzb2x2ZXJzIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcbmltcG9ydCB7IEV2ZW50Q29uc3VtZXJSZXN1bHQgfSBmcm9tICcuL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyB0eXBlIFN0ZXBJbnZvY2F0aW9uUXVldWVJdGVtLCBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuL2dsb2JhbC5qcyc7XG5pbXBvcnQgeyBzdGVwTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IHtcbiAgc2NoZWR1bGVXaGVuSWRsZSxcbiAgdHlwZSBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQsXG59IGZyb20gJy4vcHJpdmF0ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6YWJsZSB9IGZyb20gJy4vc2NoZW1hcy5qcyc7XG5pbXBvcnQgeyBoeWRyYXRlU3RlcEVycm9yLCBoeWRyYXRlU3RlcFJldHVyblZhbHVlIH0gZnJvbSAnLi9zZXJpYWxpemF0aW9uLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVzZVN0ZXAoY3R4OiBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZVN0ZXA8QXJncyBleHRlbmRzIFNlcmlhbGl6YWJsZVtdLCBSZXN1bHQ+KFxuICAgIHN0ZXBOYW1lOiBzdHJpbmcsXG4gICAgY2xvc3VyZVZhcnNGbj86ICgpID0+IFJlY29yZDxzdHJpbmcsIFNlcmlhbGl6YWJsZT5cbiAgKSB7XG4gICAgLy8gVXNlIGEgcmVndWxhciBmdW5jdGlvbiAobm90IGFycm93KSBzbyB3ZSBjYW4gY2FwdHVyZSBgdGhpc2Agd2hlbiBpbnZva2VkIGFzIGEgbWV0aG9kXG4gICAgY29uc3Qgc3RlcEZ1bmN0aW9uID0gZnVuY3Rpb24gKFxuICAgICAgdGhpczogdW5rbm93bixcbiAgICAgIC4uLmFyZ3M6IEFyZ3NcbiAgICApOiBQcm9taXNlPFJlc3VsdD4ge1xuICAgICAgY29uc3QgeyBwcm9taXNlLCByZXNvbHZlLCByZWplY3QgfSA9IHdpdGhSZXNvbHZlcnM8UmVzdWx0PigpO1xuXG4gICAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gYHN0ZXBfJHtjdHguZ2VuZXJhdGVVbGlkKCl9YDtcblxuICAgICAgY29uc3QgcXVldWVJdGVtOiBTdGVwSW52b2NhdGlvblF1ZXVlSXRlbSA9IHtcbiAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICBjb3JyZWxhdGlvbklkLFxuICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgYXJncyxcbiAgICAgIH07XG5cbiAgICAgIC8vIENhcHR1cmUgYHRoaXNgIHZhbHVlIGZvciBtZXRob2QgaW52b2NhdGlvbnMgKGUuZy4sIE15Q2xhc3MubWV0aG9kKCkpXG4gICAgICAvLyBPbmx5IGluY2x1ZGUgaWYgYHRoaXNgIGlzIGRlZmluZWQgYW5kIG5vdCB0aGUgZ2xvYmFsIG9iamVjdFxuICAgICAgaWYgKHRoaXMgIT09IHVuZGVmaW5lZCAmJiB0aGlzICE9PSBudWxsICYmIHRoaXMgIT09IGdsb2JhbFRoaXMpIHtcbiAgICAgICAgcXVldWVJdGVtLnRoaXNWYWwgPSB0aGlzIGFzIFNlcmlhbGl6YWJsZTtcbiAgICAgIH1cblxuICAgICAgLy8gSW52b2tlIHRoZSBjbG9zdXJlIHZhcmlhYmxlcyBmdW5jdGlvbiB0byBnZXQgdGhlIGNsb3N1cmUgc2NvcGVcbiAgICAgIGNvbnN0IGNsb3N1cmVWYXJzID0gY2xvc3VyZVZhcnNGbj8uKCk7XG4gICAgICBpZiAoY2xvc3VyZVZhcnMpIHtcbiAgICAgICAgcXVldWVJdGVtLmNsb3N1cmVWYXJzID0gY2xvc3VyZVZhcnM7XG4gICAgICB9XG5cbiAgICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLnNldChjb3JyZWxhdGlvbklkLCBxdWV1ZUl0ZW0pO1xuXG4gICAgICBzdGVwTG9nZ2VyLmRlYnVnKCdTdGVwIGNvbnN1bWVyIHNldHVwJywge1xuICAgICAgICBjb3JyZWxhdGlvbklkLFxuICAgICAgICBzdGVwTmFtZSxcbiAgICAgICAgYXJncyxcbiAgICAgIH0pO1xuICAgICAgY3R4LmV2ZW50c0NvbnN1bWVyLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgZXZlbnRzLCBzbyB0aGlzIHN0ZXAgaGFzIGVpdGhlciBub3QgYmVlbiBydW4gb3IgaXMgY3VycmVudGx5IHJ1bm5pbmcuXG4gICAgICAgICAgLy8gQ3J1Y2lhbGx5LCBpZiB3ZSBnb3QgaGVyZSwgdGhlbiB0aGlzIHN0ZXAgUHJvbWlzZSBkb2VzXG4gICAgICAgICAgLy8gbm90IHJlc29sdmUgc28gdGhhdCB0aGUgdXNlciB3b3JrZmxvdyBjb2RlIGRvZXMgbm90IHByb2NlZWQgYW55IGZ1cnRoZXIuXG4gICAgICAgICAgLy8gTm90aWZ5IHRoZSB3b3JrZmxvdyBoYW5kbGVyIHRoYXQgdGhpcyBzdGVwIGhhcyBub3QgYmVlbiBydW4gLyBoYXMgbm90IGNvbXBsZXRlZCB5ZXQuXG4gICAgICAgICAgc2NoZWR1bGVXaGVuSWRsZShjdHgsICgpID0+IHtcbiAgICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ZXBMb2dnZXIuZGVidWcoJ1N0ZXAgY29uc3VtZXIgZXZlbnQgcHJvY2Vzc2luZycsIHtcbiAgICAgICAgICBjb3JyZWxhdGlvbklkLFxuICAgICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICAgIGFyZ3M6IGFyZ3Muam9pbignLCAnKSxcbiAgICAgICAgICBpbmNvbWluZ0NvcnJlbGF0aW9uSWQ6IGV2ZW50LmNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgaXNNYXRjaDogY29ycmVsYXRpb25JZCA9PT0gZXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgICBldmVudFR5cGU6IGV2ZW50LmV2ZW50VHlwZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGV2ZW50LmNvcnJlbGF0aW9uSWQgIT09IGNvcnJlbGF0aW9uSWQpIHtcbiAgICAgICAgICAvLyBXZSdyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGlzIGV2ZW50IC0gdGhlIGNvcnJlbGF0aW9uSWQgYmVsb25ncyB0byBhIGRpZmZlcmVudCBlbnRpdHlcbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdzdGVwX2NyZWF0ZWQnKSB7XG4gICAgICAgICAgLy8gU3RlcCBoYXMgYmVlbiBjcmVhdGVkIChyZWdpc3RlcmVkIGZvciBleGVjdXRpb24pIC0gbWFyayBhcyBoYXZpbmcgZXZlbnRcbiAgICAgICAgICAvLyBidXQga2VlcCBpbiBxdWV1ZSBzbyBzdXNwZW5zaW9uIGhhbmRsZXIga25vd3MgdG8gcXVldWUgZXhlY3V0aW9uIHdpdGhvdXRcbiAgICAgICAgICAvLyBjcmVhdGluZyBhIGR1cGxpY2F0ZSBzdGVwX2NyZWF0ZWQgZXZlbnRcbiAgICAgICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgaWYgKCFxdWV1ZUl0ZW0gfHwgcXVldWVJdGVtLnR5cGUgIT09ICdzdGVwJykge1xuICAgICAgICAgICAgLy8gVGhpcyBpbmRpY2F0ZXMgZXZlbnQgbG9nIGNvcnJ1cHRpb24gLSBzdGVwX2NyZWF0ZWQgcmVjZWl2ZWRcbiAgICAgICAgICAgIC8vIGJ1dCB0aGUgc3RlcCB3YXMgbmV2ZXIgaW52b2tlZCBpbiB0aGUgd29ya2Zsb3cgZHVyaW5nIHJlcGxheS5cbiAgICAgICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgICAgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgICAgICAgICAgICAgICAgYENvcnJ1cHRlZCBldmVudCBsb2c6IHN0ZXAgJHtjb3JyZWxhdGlvbklkfSAoJHtzdGVwTmFtZX0pIGNyZWF0ZWQgYnV0IG5vdCBmb3VuZCBpbiBpbnZvY2F0aW9uIHF1ZXVlYFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlSXRlbS5oYXNDcmVhdGVkRXZlbnQgPSB0cnVlO1xuICAgICAgICAgIC8vIENvbnRpbnVlIHdhaXRpbmcgZm9yIHN0ZXBfc3RhcnRlZC9zdGVwX2NvbXBsZXRlZC9zdGVwX2ZhaWxlZCBldmVudHNcbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdzdGVwX3N0YXJ0ZWQnKSB7XG4gICAgICAgICAgLy8gU3RlcCB3YXMgc3RhcnRlZCAtIGRvbid0IGRvIGFueXRoaW5nLiBUaGUgc3RlcCBpcyBsZWZ0IGluIHRoZSBpbnZvY2F0aW9uUXVldWUgd2hpY2hcbiAgICAgICAgICAvLyB3aWxsIGFsbG93IGl0IHRvIGJlIHJlLWVucXVldWVkLiBXZSByZWx5IG9uIHRoZSBxdWV1ZSdzIGlkZW1wb3RlbmN5IHRvIHByZXZlbnQgaXQgZnJvbVxuICAgICAgICAgIC8vIGFjdHVhbGx5IGJlaW5nIG92ZXIgZW5xdWV1ZWQuXG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuQ29uc3VtZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9yZXRyeWluZycpIHtcbiAgICAgICAgICAvLyBTdGVwIGlzIGJlaW5nIHJldHJpZWQgLSBqdXN0IGNvbnN1bWUgdGhlIGV2ZW50IGFuZCB3YWl0IGZvciBuZXh0IHN0ZXBfc3RhcnRlZFxuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfZmFpbGVkJykge1xuICAgICAgICAgIC8vIFRlcm1pbmFsIHN0YXRlIC0gd2UgY2FuIHJlbW92ZSB0aGUgaW52b2NhdGlvblF1ZXVlIGl0ZW1cbiAgICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoZXZlbnQuY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgLy8gU3RlcCBmYWlsZWQgLSBjaGFpbiB0aHJvdWdoIHByb21pc2VRdWV1ZSB0byBlbnN1cmVcbiAgICAgICAgICAvLyBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIG9mIGFsbCBwcm9taXNlIHJlc29sdXRpb25zL3JlamVjdGlvbnMuXG4gICAgICAgICAgLy8gSHlkcmF0ZSB0aGUgc2VyaWFsaXplZCB0aHJvd24gdmFsdWUgZnJvbSB0aGUgZXZlbnQgbG9nIHNvIHRoZVxuICAgICAgICAgIC8vIG9yaWdpbmFsIHR5cGUgaWRlbnRpdHkgYW5kIGN1c3RvbSBwcm9wZXJ0aWVzIGFyZSBwcmVzZXJ2ZWQuXG4gICAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBoeWRyYXRlZCA9IGF3YWl0IGh5ZHJhdGVTdGVwRXJyb3IoXG4gICAgICAgICAgICAgICAgZXZlbnQuZXZlbnREYXRhLmVycm9yLFxuICAgICAgICAgICAgICAgIGN0eC5ydW5JZCxcbiAgICAgICAgICAgICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZWplY3QoaHlkcmF0ZWQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaHlkcmF0ZUVycikge1xuICAgICAgICAgICAgICAvLyBJZiBoeWRyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sIGZhbGwgYmFjayB0byBhIGdlbmVyaWNcbiAgICAgICAgICAgICAgLy8gRmF0YWxFcnJvciBzbyB0aGUgd29ya2Zsb3cgZG9lc24ndCBoYW5nLiBUaGlzIHNob3VsZCBiZVxuICAgICAgICAgICAgICAvLyBleHRyZW1lbHkgcmFyZSBpbiBwcmFjdGljZSAoY29ycnVwdGVkIGV2ZW50IGRhdGEpLlxuICAgICAgICAgICAgICBzdGVwTG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gaHlkcmF0ZSBzdGVwX2ZhaWxlZCBlcnJvcicsIHtcbiAgICAgICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBldmVudC5jb3JyZWxhdGlvbklkLFxuICAgICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUVyciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICAgICAgICAgID8gaHlkcmF0ZUVyci5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGh5ZHJhdGVFcnIpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBGYXRhbEVycm9yKFxuICAgICAgICAgICAgICAgICAgYEZhaWxlZCB0byBoeWRyYXRlIHN0ZXAgZXJyb3I6ICR7XG4gICAgICAgICAgICAgICAgICAgIGh5ZHJhdGVFcnIgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgICAgICAgICAgID8gaHlkcmF0ZUVyci5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcoaHlkcmF0ZUVycilcbiAgICAgICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfY29tcGxldGVkJykge1xuICAgICAgICAgIC8vIFRlcm1pbmFsIHN0YXRlIC0gd2UgY2FuIHJlbW92ZSB0aGUgaW52b2NhdGlvblF1ZXVlIGl0ZW1cbiAgICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoZXZlbnQuY29ycmVsYXRpb25JZCk7XG5cbiAgICAgICAgICAvLyBTdGVwIGhhcyBjb21wbGV0ZWQsIHNvIHJlc29sdmUgdGhlIFByb21pc2Ugd2l0aCB0aGUgY2FjaGVkIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGUgaHlkcmF0aW9uIGlzIGFzeW5jIChlLmcuLCBkZWNyeXB0aW9uKSwgc28gd2UgY2hhaW4gaXQgdGhyb3VnaFxuICAgICAgICAgIC8vIGN0eC5wcm9taXNlUXVldWUgdG8gZW5zdXJlIHRoYXQgZXZlbiBpZiBkZXNlcmlhbGl6YXRpb25cbiAgICAgICAgICAvLyB0YWtlcyB2YXJpYWJsZSB0aW1lLCBwcm9taXNlcyByZXNvbHZlIGluIGV2ZW50IGxvZyBvcmRlci5cbiAgICAgICAgICAvLyBFYWNoIHN0ZXAncyBoeWRyYXRpb24gKyByZXNvbHZlIHdhaXRzIGZvciBhbGwgcHJpb3IgaHlkcmF0aW9uc1xuICAgICAgICAgIC8vIHRvIGNvbXBsZXRlIGJlZm9yZSBleGVjdXRpbmcsIHByZXNlcnZpbmcgZGV0ZXJtaW5pc3RpYyBvcmRlcmluZy5cbiAgICAgICAgICBjdHgucGVuZGluZ0RlbGl2ZXJpZXMrKztcbiAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGh5ZHJhdGVkUmVzdWx0ID0gYXdhaXQgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZShcbiAgICAgICAgICAgICAgICBldmVudC5ldmVudERhdGEucmVzdWx0LFxuICAgICAgICAgICAgICAgIGN0eC5ydW5JZCxcbiAgICAgICAgICAgICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXNvbHZlKGh5ZHJhdGVkUmVzdWx0IGFzIFJlc3VsdCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgY3R4LnBlbmRpbmdEZWxpdmVyaWVzLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbiB1bmV4cGVjdGVkIGV2ZW50IHR5cGUgaGFzIGJlZW4gcmVjZWl2ZWQsIHRoaXMgZXZlbnQgbG9nIGxvb2tzIGNvcnJ1cHRlZC4gTGV0J3MgZmFpbCBpbW1lZGlhdGVseS5cbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAgICAgICAgICAgYFVuZXhwZWN0ZWQgZXZlbnQgdHlwZSBmb3Igc3RlcCAke2NvcnJlbGF0aW9uSWR9IChuYW1lOiAke3N0ZXBOYW1lfSkgXCIke2V2ZW50LmV2ZW50VHlwZX1cImBcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIC8vIEVuc3VyZSB0aGUgXCJuYW1lXCIgcHJvcGVydHkgbWF0Y2hlcyB0aGUgb3JpZ2luYWwgc3RlcCBmdW5jdGlvbiBuYW1lXG4gICAgLy8gRXh0cmFjdCBmdW5jdGlvbiBuYW1lIGZyb20gc3RlcE5hbWUgKGZvcm1hdDogXCJzdGVwLy9maWxlcGF0aC8vZnVuY3Rpb25OYW1lXCIpXG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gc3RlcE5hbWUuc3BsaXQoJy8vJykucG9wKCk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0ZXBGdW5jdGlvbiwgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb25OYW1lLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIHRoZSBzdGVwIGZ1bmN0aW9uIGlkZW50aWZpZXIgdG8gdGhlIHN0ZXAgZnVuY3Rpb24gZm9yIHNlcmlhbGl6YXRpb25cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3RlcEZ1bmN0aW9uLCAnc3RlcElkJywge1xuICAgICAgdmFsdWU6IHN0ZXBOYW1lLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLy8gU3RvcmUgdGhlIGNsb3N1cmUgdmFyaWFibGVzIGZ1bmN0aW9uIGZvciBzZXJpYWxpemF0aW9uXG4gICAgaWYgKGNsb3N1cmVWYXJzRm4pIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdGVwRnVuY3Rpb24sICdfX2Nsb3N1cmVWYXJzRm4nLCB7XG4gICAgICAgIHZhbHVlOiBjbG9zdXJlVmFyc0ZuLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gT3ZlcnJpZGUgYC5iaW5kYCBzbyB0aGUgYm91bmQgZnVuY3Rpb24gcHJlc2VydmVzIHRoZSBzdGVwIHByb3h5XG4gICAgLy8gbWV0YWRhdGEgdGhhdCBgZ2V0U3RlcEZ1bmN0aW9uUmVkdWNlcmAgcmVsaWVzIG9uIGZvciBzZXJpYWxpemF0aW9uLlxuICAgIC8vIFdpdGhvdXQgdGhpcyBvdmVycmlkZSwgYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCB3b3VsZCByZXR1cm4gYSBuZXdcbiAgICAvLyBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgaW5oZXJpdCBgc3RlcElkYCwgYF9fY2xvc3VyZVZhcnNGbmAsIG9yIGFueVxuICAgIC8vIG90aGVyIG93biBwcm9wZXJ0aWVzIG9mIHRoZSBvcmlnaW5hbCBwcm94eSDigJQgc28gdGhlIFN0ZXBGdW5jdGlvblxuICAgIC8vIHJlZHVjZXIgd291bGQgcmVmdXNlIHRvIHNlcmlhbGl6ZSBpdCAoaXQnZCBsb29rIGxpa2UgYSBwbGFpblxuICAgIC8vIGZ1bmN0aW9uKSwgYW5kIGEgYHVzZVN0ZXAoLi4uKS5iaW5kKHRoaXMpYCBwcm94eSB0aGF0IGZsb3dlZFxuICAgIC8vIHRocm91Z2ggd29ya2Zsb3cgc2VyaWFsaXphdGlvbiB3b3VsZCBzaWxlbnRseSBicmVhay5cbiAgICAvL1xuICAgIC8vIFRoZSBvdmVycmlkZSBzdGFzaGVzIHRocmVlIHBpZWNlcyBvZiBzdGF0ZSBvbiB0aGUgYm91bmQgZnVuY3Rpb24gc29cbiAgICAvLyB0aGUgcm91bmQgdHJpcCBpcyBmYWl0aGZ1bDpcbiAgICAvLyAgIC0gYHN0ZXBJZGAgICAgICAgICAgICAg4oCUIGFscmVhZHkgc2V0IG9uIHRoZSBvcmlnaW5hbCBwcm94eS5cbiAgICAvLyAgIC0gYF9fY2xvc3VyZVZhcnNGbmAgICAg4oCUIG9ubHkgd2hlbiB0aGUgb3JpZ2luYWwgcHJveHkgaGFkIG9uZS5cbiAgICAvLyAgIC0gYF9fYm91bmRUaGlzYCAgICAgICAg4oCUIHRoZSByZWNlaXZlciBwYXNzZWQgdG8gYC5iaW5kKHRoaXNBcmcsIOKApilgLlxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBzZXQgKGV2ZW4gd2hlbiBgdGhpc0FyZ2AgaXNcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBgbnVsbGAvYHVuZGVmaW5lZGApIHNvIHRoZSByZWR1Y2VyIGNhblxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Rpbmd1aXNoIFwid2FzIGJvdW5kXCIgZnJvbSBcIndhc24ndFwiLlxuICAgIC8vICAgLSBgX19ib3VuZEFyZ3NgICAgICAgICDigJQgb25seSB3aGVuIHRoZSB1c2VyIHN1cHBsaWVkIHByZWZpbGxlZFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyAoYC5iaW5kKHRoaXNBcmcsIHgsIHkpYCkuIFRoZVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNXQyBwbHVnaW4gb25seSBldmVyIGVtaXRzIGAuYmluZCh0aGlzKWBcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2RheSwgc28gdGhpcyBpcyByYXJlIGluIHByYWN0aWNlOyB3ZVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsIGNhcHR1cmUgaXQgc28gdGhlIHBhcnRpYWwgYXJnc1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cnZpdmUgc2VyaWFsaXphdGlvbiByYXRoZXIgdGhhblxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbGVudGx5IGRpc2FwcGVhcmluZyBvbiB0aGUgc3RlcCBzaWRlLlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdGVwRnVuY3Rpb24sICdiaW5kJywge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIChcbiAgICAgICAgdGhpczogdHlwZW9mIHN0ZXBGdW5jdGlvbixcbiAgICAgICAgdGhpc0FyZzogdW5rbm93bixcbiAgICAgICAgLi4ucGFydGlhbEFyZ3M6IHVua25vd25bXVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGJvdW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXNBcmcsXG4gICAgICAgICAgLi4ucGFydGlhbEFyZ3NcbiAgICAgICAgKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJvdW5kLCAnc3RlcElkJywge1xuICAgICAgICAgIHZhbHVlOiBzdGVwTmFtZSxcbiAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjbG9zdXJlVmFyc0ZuKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJvdW5kLCAnX19jbG9zdXJlVmFyc0ZuJywge1xuICAgICAgICAgICAgdmFsdWU6IGNsb3N1cmVWYXJzRm4sXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJvdW5kLCAnX19ib3VuZFRoaXMnLCB7XG4gICAgICAgICAgdmFsdWU6IHRoaXNBcmcsXG4gICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocGFydGlhbEFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShib3VuZCwgJ19fYm91bmRBcmdzJywge1xuICAgICAgICAgICAgdmFsdWU6IHBhcnRpYWxBcmdzLFxuICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBib3VuZDtcbiAgICAgIH0sXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RlcEZ1bmN0aW9uO1xuICB9O1xufVxuIl19
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFnQyxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxnQkFBZ0IsR0FFakIsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUUsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFnQztJQUM1RCxPQUFPLFNBQVMsT0FBTyxDQUNyQixRQUFnQixFQUNoQixhQUFrRDtRQUVsRCx1RkFBdUY7UUFDdkYsTUFBTSxZQUFZLEdBQUcsVUFFbkIsR0FBRyxJQUFVO1lBRWIsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsYUFBYSxFQUFVLENBQUM7WUFFN0QsTUFBTSxhQUFhLEdBQUcsUUFBUSxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztZQUVuRCxNQUFNLFNBQVMsR0FBNEI7Z0JBQ3pDLElBQUksRUFBRSxNQUFNO2dCQUNaLGFBQWE7Z0JBQ2IsUUFBUTtnQkFDUixJQUFJO2FBQ0wsQ0FBQztZQUVGLHVFQUF1RTtZQUN2RSw4REFBOEQ7WUFDOUQsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUMvRCxTQUFTLENBQUMsT0FBTyxHQUFHLElBQW9CLENBQUM7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QWMsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7d0JBQzlDLEtBQUssRUFBRSxhQUFhO3dCQUNwQixRQUFRLEVBQUUsS0FBSzt3QkFDZixVQUFVLEVBQUUsS0FBSzt3QkFDakIsWUFBWSxFQUFFLEtBQUs7cUJBQ3BCLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRTtvQkFDMUMsS0FBSyxFQUFFLE9BQU87b0JBQ2QsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLFlBQVksRUFBRSxLQUFLO2lCQUNwQixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMzQixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUU7d0JBQzFDLEtBQUssRUFBRSxXQUFXO3dCQUNsQixRQUFRLEVBQUUsS0FBSzt3QkFDZixVQUFVLEVBQUUsS0FBSzt3QkFDakIsWUFBWSxFQUFFLEtBQUs7cUJBQ3BCLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvcnJ1cHRlZEV2ZW50TG9nRXJyb3IsIEZhdGFsRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IHdpdGhSZXNvbHZlcnMgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4vZXZlbnRzLWNvbnN1bWVyLmpzJztcbmltcG9ydCB7IHR5cGUgU3RlcEludm9jYXRpb25RdWV1ZUl0ZW0sIFdvcmtmbG93U3VzcGVuc2lvbiB9IGZyb20gJy4vZ2xvYmFsLmpzJztcbmltcG9ydCB7IHN0ZXBMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQge1xuICBzY2hlZHVsZVdoZW5JZGxlLFxuICB0eXBlIFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCxcbn0gZnJvbSAnLi9wcml2YXRlLmpzJztcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXphYmxlIH0gZnJvbSAnLi9zY2hlbWFzLmpzJztcbmltcG9ydCB7IGh5ZHJhdGVTdGVwRXJyb3IsIGh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUgfSBmcm9tICcuL3NlcmlhbGl6YXRpb24uanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXNlU3RlcChjdHg6IFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gdXNlU3RlcDxBcmdzIGV4dGVuZHMgU2VyaWFsaXphYmxlW10sIFJlc3VsdD4oXG4gICAgc3RlcE5hbWU6IHN0cmluZyxcbiAgICBjbG9zdXJlVmFyc0ZuPzogKCkgPT4gUmVjb3JkPHN0cmluZywgU2VyaWFsaXphYmxlPlxuICApIHtcbiAgICAvLyBVc2UgYSByZWd1bGFyIGZ1bmN0aW9uIChub3QgYXJyb3cpIHNvIHdlIGNhbiBjYXB0dXJlIGB0aGlzYCB3aGVuIGludm9rZWQgYXMgYSBtZXRob2RcbiAgICBjb25zdCBzdGVwRnVuY3Rpb24gPSBmdW5jdGlvbiAoXG4gICAgICB0aGlzOiB1bmtub3duLFxuICAgICAgLi4uYXJnczogQXJnc1xuICAgICk6IFByb21pc2U8UmVzdWx0PiB7XG4gICAgICBjb25zdCB7IHByb21pc2UsIHJlc29sdmUsIHJlamVjdCB9ID0gd2l0aFJlc29sdmVyczxSZXN1bHQ+KCk7XG5cbiAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSBgc3RlcF8ke2N0eC5nZW5lcmF0ZVVsaWQoKX1gO1xuXG4gICAgICBjb25zdCBxdWV1ZUl0ZW06IFN0ZXBJbnZvY2F0aW9uUXVldWVJdGVtID0ge1xuICAgICAgICB0eXBlOiAnc3RlcCcsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICBhcmdzLFxuICAgICAgfTtcblxuICAgICAgLy8gQ2FwdHVyZSBgdGhpc2AgdmFsdWUgZm9yIG1ldGhvZCBpbnZvY2F0aW9ucyAoZS5nLiwgTXlDbGFzcy5tZXRob2QoKSlcbiAgICAgIC8vIE9ubHkgaW5jbHVkZSBpZiBgdGhpc2AgaXMgZGVmaW5lZCBhbmQgbm90IHRoZSBnbG9iYWwgb2JqZWN0XG4gICAgICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMgIT09IG51bGwgJiYgdGhpcyAhPT0gZ2xvYmFsVGhpcykge1xuICAgICAgICBxdWV1ZUl0ZW0udGhpc1ZhbCA9IHRoaXMgYXMgU2VyaWFsaXphYmxlO1xuICAgICAgfVxuXG4gICAgICAvLyBJbnZva2UgdGhlIGNsb3N1cmUgdmFyaWFibGVzIGZ1bmN0aW9uIHRvIGdldCB0aGUgY2xvc3VyZSBzY29wZVxuICAgICAgY29uc3QgY2xvc3VyZVZhcnMgPSBjbG9zdXJlVmFyc0ZuPy4oKTtcbiAgICAgIGlmIChjbG9zdXJlVmFycykge1xuICAgICAgICBxdWV1ZUl0ZW0uY2xvc3VyZVZhcnMgPSBjbG9zdXJlVmFycztcbiAgICAgIH1cblxuICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuc2V0KGNvcnJlbGF0aW9uSWQsIHF1ZXVlSXRlbSk7XG5cbiAgICAgIHN0ZXBMb2dnZXIuZGVidWcoJ1N0ZXAgY29uc3VtZXIgc2V0dXAnLCB7XG4gICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICBhcmdzLFxuICAgICAgfSk7XG4gICAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBldmVudHMsIHNvIHRoaXMgc3RlcCBoYXMgZWl0aGVyIG5vdCBiZWVuIHJ1biBvciBpcyBjdXJyZW50bHkgcnVubmluZy5cbiAgICAgICAgICAvLyBDcnVjaWFsbHksIGlmIHdlIGdvdCBoZXJlLCB0aGVuIHRoaXMgc3RlcCBQcm9taXNlIGRvZXNcbiAgICAgICAgICAvLyBub3QgcmVzb2x2ZSBzbyB0aGF0IHRoZSB1c2VyIHdvcmtmbG93IGNvZGUgZG9lcyBub3QgcHJvY2VlZCBhbnkgZnVydGhlci5cbiAgICAgICAgICAvLyBOb3RpZnkgdGhlIHdvcmtmbG93IGhhbmRsZXIgdGhhdCB0aGlzIHN0ZXAgaGFzIG5vdCBiZWVuIHJ1biAvIGhhcyBub3QgY29tcGxldGVkIHlldC5cbiAgICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgICAgbmV3IFdvcmtmbG93U3VzcGVuc2lvbihjdHguaW52b2NhdGlvbnNRdWV1ZSwgY3R4Lmdsb2JhbFRoaXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RlcExvZ2dlci5kZWJ1ZygnU3RlcCBjb25zdW1lciBldmVudCBwcm9jZXNzaW5nJywge1xuICAgICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgYXJnczogYXJncy5qb2luKCcsICcpLFxuICAgICAgICAgIGluY29taW5nQ29ycmVsYXRpb25JZDogZXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgICBpc01hdGNoOiBjb3JyZWxhdGlvbklkID09PSBldmVudC5jb3JyZWxhdGlvbklkLFxuICAgICAgICAgIGV2ZW50VHlwZTogZXZlbnQuZXZlbnRUeXBlLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZXZlbnQuY29ycmVsYXRpb25JZCAhPT0gY29ycmVsYXRpb25JZCkge1xuICAgICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRTdGVwTmFtZSA9XG4gICAgICAgICAgJ2V2ZW50RGF0YScgaW4gZXZlbnQgJiZcbiAgICAgICAgICBldmVudC5ldmVudERhdGEgJiZcbiAgICAgICAgICAnc3RlcE5hbWUnIGluIGV2ZW50LmV2ZW50RGF0YVxuICAgICAgICAgICAgPyBldmVudC5ldmVudERhdGEuc3RlcE5hbWVcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnRTdGVwTmFtZSA9PT0gJ3N0cmluZycgJiYgZXZlbnRTdGVwTmFtZSAhPT0gc3RlcE5hbWUpIHtcbiAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICAgIG5ldyBDb3JydXB0ZWRFdmVudExvZ0Vycm9yKFxuICAgICAgICAgICAgICAgIGBDb3JydXB0ZWQgZXZlbnQgbG9nOiBzdGVwIGV2ZW50ICR7ZXZlbnQuZXZlbnRUeXBlfSBmb3IgJHtjb3JyZWxhdGlvbklkfSBiZWxvbmdzIHRvIFwiJHtldmVudFN0ZXBOYW1lfVwiLCBidXQgdGhlIGN1cnJlbnQgc3RlcCBjb25zdW1lciBpcyBcIiR7c3RlcE5hbWV9XCJgXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9jcmVhdGVkJykge1xuICAgICAgICAgIC8vIFN0ZXAgaGFzIGJlZW4gY3JlYXRlZCAocmVnaXN0ZXJlZCBmb3IgZXhlY3V0aW9uKSAtIG1hcmsgYXMgaGF2aW5nIGV2ZW50XG4gICAgICAgICAgLy8gYnV0IGtlZXAgaW4gcXVldWUgc28gc3VzcGVuc2lvbiBoYW5kbGVyIGtub3dzIHRvIHF1ZXVlIGV4ZWN1dGlvbiB3aXRob3V0XG4gICAgICAgICAgLy8gY3JlYXRpbmcgYSBkdXBsaWNhdGUgc3RlcF9jcmVhdGVkIGV2ZW50XG4gICAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgIGlmICghcXVldWVJdGVtIHx8IHF1ZXVlSXRlbS50eXBlICE9PSAnc3RlcCcpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaW5kaWNhdGVzIGV2ZW50IGxvZyBjb3JydXB0aW9uIC0gc3RlcF9jcmVhdGVkIHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBidXQgdGhlIHN0ZXAgd2FzIG5ldmVyIGludm9rZWQgaW4gdGhlIHdvcmtmbG93IGR1cmluZyByZXBsYXkuXG4gICAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBDb3JydXB0ZWRFdmVudExvZ0Vycm9yKFxuICAgICAgICAgICAgICAgICAgYENvcnJ1cHRlZCBldmVudCBsb2c6IHN0ZXAgJHtjb3JyZWxhdGlvbklkfSAoJHtzdGVwTmFtZX0pIGNyZWF0ZWQgYnV0IG5vdCBmb3VuZCBpbiBpbnZvY2F0aW9uIHF1ZXVlYFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlSXRlbS5oYXNDcmVhdGVkRXZlbnQgPSB0cnVlO1xuICAgICAgICAgIC8vIENvbnRpbnVlIHdhaXRpbmcgZm9yIHN0ZXBfc3RhcnRlZC9zdGVwX2NvbXBsZXRlZC9zdGVwX2ZhaWxlZCBldmVudHNcbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdzdGVwX3N0YXJ0ZWQnKSB7XG4gICAgICAgICAgLy8gU3RlcCB3YXMgc3RhcnRlZCAtIGRvbid0IGRvIGFueXRoaW5nLiBUaGUgc3RlcCBpcyBsZWZ0IGluIHRoZSBpbnZvY2F0aW9uUXVldWUgd2hpY2hcbiAgICAgICAgICAvLyB3aWxsIGFsbG93IGl0IHRvIGJlIHJlLWVucXVldWVkLiBXZSByZWx5IG9uIHRoZSBxdWV1ZSdzIGlkZW1wb3RlbmN5IHRvIHByZXZlbnQgaXQgZnJvbVxuICAgICAgICAgIC8vIGFjdHVhbGx5IGJlaW5nIG92ZXIgZW5xdWV1ZWQuXG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuQ29uc3VtZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9yZXRyeWluZycpIHtcbiAgICAgICAgICAvLyBTdGVwIGlzIGJlaW5nIHJldHJpZWQgLSBqdXN0IGNvbnN1bWUgdGhlIGV2ZW50IGFuZCB3YWl0IGZvciBuZXh0IHN0ZXBfc3RhcnRlZFxuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfZmFpbGVkJykge1xuICAgICAgICAgIC8vIFRlcm1pbmFsIHN0YXRlIC0gd2UgY2FuIHJlbW92ZSB0aGUgaW52b2NhdGlvblF1ZXVlIGl0ZW1cbiAgICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoZXZlbnQuY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgLy8gU3RlcCBmYWlsZWQgLSBjaGFpbiB0aHJvdWdoIHByb21pc2VRdWV1ZSB0byBlbnN1cmVcbiAgICAgICAgICAvLyBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIG9mIGFsbCBwcm9taXNlIHJlc29sdXRpb25zL3JlamVjdGlvbnMuXG4gICAgICAgICAgLy8gSHlkcmF0ZSB0aGUgc2VyaWFsaXplZCB0aHJvd24gdmFsdWUgZnJvbSB0aGUgZXZlbnQgbG9nIHNvIHRoZVxuICAgICAgICAgIC8vIG9yaWdpbmFsIHR5cGUgaWRlbnRpdHkgYW5kIGN1c3RvbSBwcm9wZXJ0aWVzIGFyZSBwcmVzZXJ2ZWQuXG4gICAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBoeWRyYXRlZCA9IGF3YWl0IGh5ZHJhdGVTdGVwRXJyb3IoXG4gICAgICAgICAgICAgICAgZXZlbnQuZXZlbnREYXRhLmVycm9yLFxuICAgICAgICAgICAgICAgIGN0eC5ydW5JZCxcbiAgICAgICAgICAgICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZWplY3QoaHlkcmF0ZWQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaHlkcmF0ZUVycikge1xuICAgICAgICAgICAgICAvLyBJZiBoeWRyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sIGZhbGwgYmFjayB0byBhIGdlbmVyaWNcbiAgICAgICAgICAgICAgLy8gRmF0YWxFcnJvciBzbyB0aGUgd29ya2Zsb3cgZG9lc24ndCBoYW5nLiBUaGlzIHNob3VsZCBiZVxuICAgICAgICAgICAgICAvLyBleHRyZW1lbHkgcmFyZSBpbiBwcmFjdGljZSAoY29ycnVwdGVkIGV2ZW50IGRhdGEpLlxuICAgICAgICAgICAgICBzdGVwTG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gaHlkcmF0ZSBzdGVwX2ZhaWxlZCBlcnJvcicsIHtcbiAgICAgICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBldmVudC5jb3JyZWxhdGlvbklkLFxuICAgICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUVyciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICAgICAgICAgID8gaHlkcmF0ZUVyci5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGh5ZHJhdGVFcnIpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBGYXRhbEVycm9yKFxuICAgICAgICAgICAgICAgICAgYEZhaWxlZCB0byBoeWRyYXRlIHN0ZXAgZXJyb3I6ICR7XG4gICAgICAgICAgICAgICAgICAgIGh5ZHJhdGVFcnIgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgICAgICAgICAgID8gaHlkcmF0ZUVyci5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcoaHlkcmF0ZUVycilcbiAgICAgICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfY29tcGxldGVkJykge1xuICAgICAgICAgIC8vIFRlcm1pbmFsIHN0YXRlIC0gd2UgY2FuIHJlbW92ZSB0aGUgaW52b2NhdGlvblF1ZXVlIGl0ZW1cbiAgICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoZXZlbnQuY29ycmVsYXRpb25JZCk7XG5cbiAgICAgICAgICAvLyBTdGVwIGhhcyBjb21wbGV0ZWQsIHNvIHJlc29sdmUgdGhlIFByb21pc2Ugd2l0aCB0aGUgY2FjaGVkIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGUgaHlkcmF0aW9uIGlzIGFzeW5jIChlLmcuLCBkZWNyeXB0aW9uKSwgc28gd2UgY2hhaW4gaXQgdGhyb3VnaFxuICAgICAgICAgIC8vIGN0eC5wcm9taXNlUXVldWUgdG8gZW5zdXJlIHRoYXQgZXZlbiBpZiBkZXNlcmlhbGl6YXRpb25cbiAgICAgICAgICAvLyB0YWtlcyB2YXJpYWJsZSB0aW1lLCBwcm9taXNlcyByZXNvbHZlIGluIGV2ZW50IGxvZyBvcmRlci5cbiAgICAgICAgICAvLyBFYWNoIHN0ZXAncyBoeWRyYXRpb24gKyByZXNvbHZlIHdhaXRzIGZvciBhbGwgcHJpb3IgaHlkcmF0aW9uc1xuICAgICAgICAgIC8vIHRvIGNvbXBsZXRlIGJlZm9yZSBleGVjdXRpbmcsIHByZXNlcnZpbmcgZGV0ZXJtaW5pc3RpYyBvcmRlcmluZy5cbiAgICAgICAgICBjdHgucGVuZGluZ0RlbGl2ZXJpZXMrKztcbiAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGh5ZHJhdGVkUmVzdWx0ID0gYXdhaXQgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZShcbiAgICAgICAgICAgICAgICBldmVudC5ldmVudERhdGEucmVzdWx0LFxuICAgICAgICAgICAgICAgIGN0eC5ydW5JZCxcbiAgICAgICAgICAgICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXNvbHZlKGh5ZHJhdGVkUmVzdWx0IGFzIFJlc3VsdCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgY3R4LnBlbmRpbmdEZWxpdmVyaWVzLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbiB1bmV4cGVjdGVkIGV2ZW50IHR5cGUgaGFzIGJlZW4gcmVjZWl2ZWQsIHRoaXMgZXZlbnQgbG9nIGxvb2tzIGNvcnJ1cHRlZC4gTGV0J3MgZmFpbCBpbW1lZGlhdGVseS5cbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBDb3JydXB0ZWRFdmVudExvZ0Vycm9yKFxuICAgICAgICAgICAgICBgVW5leHBlY3RlZCBldmVudCB0eXBlIGZvciBzdGVwICR7Y29ycmVsYXRpb25JZH0gKG5hbWU6ICR7c3RlcE5hbWV9KSBcIiR7ZXZlbnQuZXZlbnRUeXBlfVwiYFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgLy8gRW5zdXJlIHRoZSBcIm5hbWVcIiBwcm9wZXJ0eSBtYXRjaGVzIHRoZSBvcmlnaW5hbCBzdGVwIGZ1bmN0aW9uIG5hbWVcbiAgICAvLyBFeHRyYWN0IGZ1bmN0aW9uIG5hbWUgZnJvbSBzdGVwTmFtZSAoZm9ybWF0OiBcInN0ZXAvL2ZpbGVwYXRoLy9mdW5jdGlvbk5hbWVcIilcbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBzdGVwTmFtZS5zcGxpdCgnLy8nKS5wb3AoKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3RlcEZ1bmN0aW9uLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbk5hbWUsXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgdGhlIHN0ZXAgZnVuY3Rpb24gaWRlbnRpZmllciB0byB0aGUgc3RlcCBmdW5jdGlvbiBmb3Igc2VyaWFsaXphdGlvblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdGVwRnVuY3Rpb24sICdzdGVwSWQnLCB7XG4gICAgICB2YWx1ZTogc3RlcE5hbWUsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyBTdG9yZSB0aGUgY2xvc3VyZSB2YXJpYWJsZXMgZnVuY3Rpb24gZm9yIHNlcmlhbGl6YXRpb25cbiAgICBpZiAoY2xvc3VyZVZhcnNGbikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0ZXBGdW5jdGlvbiwgJ19fY2xvc3VyZVZhcnNGbicsIHtcbiAgICAgICAgdmFsdWU6IGNsb3N1cmVWYXJzRm4sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBPdmVycmlkZSBgLmJpbmRgIHNvIHRoZSBib3VuZCBmdW5jdGlvbiBwcmVzZXJ2ZXMgdGhlIHN0ZXAgcHJveHlcbiAgICAvLyBtZXRhZGF0YSB0aGF0IGBnZXRTdGVwRnVuY3Rpb25SZWR1Y2VyYCByZWxpZXMgb24gZm9yIHNlcmlhbGl6YXRpb24uXG4gICAgLy8gV2l0aG91dCB0aGlzIG92ZXJyaWRlLCBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIHdvdWxkIHJldHVybiBhIG5ld1xuICAgIC8vIGZ1bmN0aW9uIHRoYXQgZG9lc24ndCBpbmhlcml0IGBzdGVwSWRgLCBgX19jbG9zdXJlVmFyc0ZuYCwgb3IgYW55XG4gICAgLy8gb3RoZXIgb3duIHByb3BlcnRpZXMgb2YgdGhlIG9yaWdpbmFsIHByb3h5IOKAlCBzbyB0aGUgU3RlcEZ1bmN0aW9uXG4gICAgLy8gcmVkdWNlciB3b3VsZCByZWZ1c2UgdG8gc2VyaWFsaXplIGl0IChpdCdkIGxvb2sgbGlrZSBhIHBsYWluXG4gICAgLy8gZnVuY3Rpb24pLCBhbmQgYSBgdXNlU3RlcCguLi4pLmJpbmQodGhpcylgIHByb3h5IHRoYXQgZmxvd2VkXG4gICAgLy8gdGhyb3VnaCB3b3JrZmxvdyBzZXJpYWxpemF0aW9uIHdvdWxkIHNpbGVudGx5IGJyZWFrLlxuICAgIC8vXG4gICAgLy8gVGhlIG92ZXJyaWRlIHN0YXNoZXMgdGhyZWUgcGllY2VzIG9mIHN0YXRlIG9uIHRoZSBib3VuZCBmdW5jdGlvbiBzb1xuICAgIC8vIHRoZSByb3VuZCB0cmlwIGlzIGZhaXRoZnVsOlxuICAgIC8vICAgLSBgc3RlcElkYCAgICAgICAgICAgICDigJQgYWxyZWFkeSBzZXQgb24gdGhlIG9yaWdpbmFsIHByb3h5LlxuICAgIC8vICAgLSBgX19jbG9zdXJlVmFyc0ZuYCAgICDigJQgb25seSB3aGVuIHRoZSBvcmlnaW5hbCBwcm94eSBoYWQgb25lLlxuICAgIC8vICAgLSBgX19ib3VuZFRoaXNgICAgICAgICDigJQgdGhlIHJlY2VpdmVyIHBhc3NlZCB0byBgLmJpbmQodGhpc0FyZywg4oCmKWAuXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIHNldCAoZXZlbiB3aGVuIGB0aGlzQXJnYCBpc1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBudWxsYC9gdW5kZWZpbmVkYCkgc28gdGhlIHJlZHVjZXIgY2FuXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluZ3Vpc2ggXCJ3YXMgYm91bmRcIiBmcm9tIFwid2Fzbid0XCIuXG4gICAgLy8gICAtIGBfX2JvdW5kQXJnc2AgICAgICAgIOKAlCBvbmx5IHdoZW4gdGhlIHVzZXIgc3VwcGxpZWQgcHJlZmlsbGVkXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIChgLmJpbmQodGhpc0FyZywgeCwgeSlgKS4gVGhlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dDIHBsdWdpbiBvbmx5IGV2ZXIgZW1pdHMgYC5iaW5kKHRoaXMpYFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZGF5LCBzbyB0aGlzIGlzIHJhcmUgaW4gcHJhY3RpY2U7IHdlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGwgY2FwdHVyZSBpdCBzbyB0aGUgcGFydGlhbCBhcmdzXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vydml2ZSBzZXJpYWxpemF0aW9uIHJhdGhlciB0aGFuXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lsZW50bHkgZGlzYXBwZWFyaW5nIG9uIHRoZSBzdGVwIHNpZGUuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0ZXBGdW5jdGlvbiwgJ2JpbmQnLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gKFxuICAgICAgICB0aGlzOiB0eXBlb2Ygc3RlcEZ1bmN0aW9uLFxuICAgICAgICB0aGlzQXJnOiB1bmtub3duLFxuICAgICAgICAuLi5wYXJ0aWFsQXJnczogdW5rbm93bltdXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgYm91bmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpc0FyZyxcbiAgICAgICAgICAuLi5wYXJ0aWFsQXJnc1xuICAgICAgICApO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYm91bmQsICdzdGVwSWQnLCB7XG4gICAgICAgICAgdmFsdWU6IHN0ZXBOYW1lLFxuICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNsb3N1cmVWYXJzRm4pIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYm91bmQsICdfX2Nsb3N1cmVWYXJzRm4nLCB7XG4gICAgICAgICAgICB2YWx1ZTogY2xvc3VyZVZhcnNGbixcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYm91bmQsICdfX2JvdW5kVGhpcycsIHtcbiAgICAgICAgICB2YWx1ZTogdGhpc0FyZyxcbiAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwYXJ0aWFsQXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJvdW5kLCAnX19ib3VuZEFyZ3MnLCB7XG4gICAgICAgICAgICB2YWx1ZTogcGFydGlhbEFyZ3MsXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJvdW5kO1xuICAgICAgfSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzdGVwRnVuY3Rpb247XG4gIH07XG59XG4iXX0=
package/dist/symbols.d.ts CHANGED
@@ -6,6 +6,22 @@ export declare const WORKFLOW_GET_STREAM_ID: unique symbol;
6
6
  export declare const STABLE_ULID: unique symbol;
7
7
  export declare const STREAM_NAME_SYMBOL: unique symbol;
8
8
  export declare const STREAM_TYPE_SYMBOL: unique symbol;
9
+ /**
10
+ * Stamped on a real `WritableStream` (the user-visible `serialize.writable`
11
+ * returned from a step-side reviver or step-context `getWritable()`) to
12
+ * record the `runId` of the workflow run that owns the underlying server
13
+ * stream. Used together with `STREAM_NAME_SYMBOL`.
14
+ *
15
+ * When `getExternalReducers.WritableStream` (the dehydration path used by
16
+ * `start()`) sees both symbols on a writable, it includes the `runId` in
17
+ * the descriptor it emits. The child run's step-side reviver then opens
18
+ * a server writable against the original `(runId, name)` and resolves
19
+ * that run's encryption key directly — so the child's writes land on
20
+ * the parent's stream as-is, with no client process in the loop. That
21
+ * keeps the forwarding alive for the full lifetime of the child run,
22
+ * not just for the parent step that initiated `start()`.
23
+ */
24
+ export declare const STREAM_SERVER_RUN_ID_SYMBOL: unique symbol;
9
25
  export declare const BODY_INIT_SYMBOL: unique symbol;
10
26
  export declare const WEBHOOK_RESPONSE_WRITABLE: unique symbol;
11
27
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,eAAkC,CAAC;AACjE,eAAO,MAAM,oBAAoB,eAAqC,CAAC;AACvE,eAAO,MAAM,cAAc,eAA+B,CAAC;AAC3D,eAAO,MAAM,gBAAgB,eAAiC,CAAC;AAC/D,eAAO,MAAM,sBAAsB,eAAuC,CAAC;AAC3E,eAAO,MAAM,WAAW,eAAqC,CAAC;AAC9D,eAAO,MAAM,kBAAkB,eAAqC,CAAC;AACrE,eAAO,MAAM,kBAAkB,eAAqC,CAAC;AACrE,eAAO,MAAM,gBAAgB,eAA0B,CAAC;AACxD,eAAO,MAAM,yBAAyB,eAErC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,eAAwC,CAAC;AAE7E,eAAO,MAAM,iBAAiB,eAA2C,CAAC;AAC1E,eAAO,MAAM,gBAAgB,eAA0C,CAAC;AACxE,eAAO,MAAM,uBAAuB,eAEnC,CAAC;AACF,eAAO,MAAM,mBAAmB,eAA6C,CAAC"}
1
+ {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,eAAkC,CAAC;AACjE,eAAO,MAAM,oBAAoB,eAAqC,CAAC;AACvE,eAAO,MAAM,cAAc,eAA+B,CAAC;AAC3D,eAAO,MAAM,gBAAgB,eAAiC,CAAC;AAC/D,eAAO,MAAM,sBAAsB,eAAuC,CAAC;AAC3E,eAAO,MAAM,WAAW,eAAqC,CAAC;AAC9D,eAAO,MAAM,kBAAkB,eAAqC,CAAC;AACrE,eAAO,MAAM,kBAAkB,eAAqC,CAAC;AACrE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,2BAA2B,eAEvC,CAAC;AACF,eAAO,MAAM,gBAAgB,eAA0B,CAAC;AACxD,eAAO,MAAM,yBAAyB,eAErC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,eAAwC,CAAC;AAE7E,eAAO,MAAM,iBAAiB,eAA2C,CAAC;AAC1E,eAAO,MAAM,gBAAgB,eAA0C,CAAC;AACxE,eAAO,MAAM,uBAAuB,eAEnC,CAAC;AACF,eAAO,MAAM,mBAAmB,eAA6C,CAAC"}
package/dist/symbols.js CHANGED
@@ -6,6 +6,22 @@ export const WORKFLOW_GET_STREAM_ID = Symbol.for('WORKFLOW_GET_STREAM_ID');
6
6
  export const STABLE_ULID = Symbol.for('WORKFLOW_STABLE_ULID');
7
7
  export const STREAM_NAME_SYMBOL = Symbol.for('WORKFLOW_STREAM_NAME');
8
8
  export const STREAM_TYPE_SYMBOL = Symbol.for('WORKFLOW_STREAM_TYPE');
9
+ /**
10
+ * Stamped on a real `WritableStream` (the user-visible `serialize.writable`
11
+ * returned from a step-side reviver or step-context `getWritable()`) to
12
+ * record the `runId` of the workflow run that owns the underlying server
13
+ * stream. Used together with `STREAM_NAME_SYMBOL`.
14
+ *
15
+ * When `getExternalReducers.WritableStream` (the dehydration path used by
16
+ * `start()`) sees both symbols on a writable, it includes the `runId` in
17
+ * the descriptor it emits. The child run's step-side reviver then opens
18
+ * a server writable against the original `(runId, name)` and resolves
19
+ * that run's encryption key directly — so the child's writes land on
20
+ * the parent's stream as-is, with no client process in the loop. That
21
+ * keeps the forwarding alive for the full lifetime of the child run,
22
+ * not just for the parent step that initiated `start()`.
23
+ */
24
+ export const STREAM_SERVER_RUN_ID_SYMBOL = Symbol.for('WORKFLOW_STREAM_SERVER_RUN_ID');
9
25
  export const BODY_INIT_SYMBOL = Symbol.for('BODY_INIT');
10
26
  export const WEBHOOK_RESPONSE_WRITABLE = Symbol.for('WEBHOOK_RESPONSE_WRITABLE');
11
27
  /**
@@ -17,4 +33,4 @@ export const ABORT_STREAM_NAME = Symbol.for('WORKFLOW_ABORT_STREAM_NAME');
17
33
  export const ABORT_HOOK_TOKEN = Symbol.for('WORKFLOW_ABORT_HOOK_TOKEN');
18
34
  export const ABORT_LISTENER_ATTACHED = Symbol.for('WORKFLOW_ABORT_LISTENER_ATTACHED');
19
35
  export const ABORT_READER_CANCEL = Symbol.for('WORKFLOW_ABORT_READER_CANCEL');
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zeW1ib2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDdkUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDL0QsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDOUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUNyRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQ2pELDJCQUEyQixDQUM1QixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBRTdFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUMxRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFDeEUsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FDL0Msa0NBQWtDLENBQ25DLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgV09SS0ZMT1dfVVNFX1NURVAgPSBTeW1ib2wuZm9yKCdXT1JLRkxPV19VU0VfU1RFUCcpO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX0NSRUFURV9IT09LID0gU3ltYm9sLmZvcignV09SS0ZMT1dfQ1JFQVRFX0hPT0snKTtcbmV4cG9ydCBjb25zdCBXT1JLRkxPV19TTEVFUCA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX1NMRUVQJyk7XG5leHBvcnQgY29uc3QgV09SS0ZMT1dfQ09OVEVYVCA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX0NPTlRFWFQnKTtcbmV4cG9ydCBjb25zdCBXT1JLRkxPV19HRVRfU1RSRUFNX0lEID0gU3ltYm9sLmZvcignV09SS0ZMT1dfR0VUX1NUUkVBTV9JRCcpO1xuZXhwb3J0IGNvbnN0IFNUQUJMRV9VTElEID0gU3ltYm9sLmZvcignV09SS0ZMT1dfU1RBQkxFX1VMSUQnKTtcbmV4cG9ydCBjb25zdCBTVFJFQU1fTkFNRV9TWU1CT0wgPSBTeW1ib2wuZm9yKCdXT1JLRkxPV19TVFJFQU1fTkFNRScpO1xuZXhwb3J0IGNvbnN0IFNUUkVBTV9UWVBFX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX1NUUkVBTV9UWVBFJyk7XG5leHBvcnQgY29uc3QgQk9EWV9JTklUX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ0JPRFlfSU5JVCcpO1xuZXhwb3J0IGNvbnN0IFdFQkhPT0tfUkVTUE9OU0VfV1JJVEFCTEUgPSBTeW1ib2wuZm9yKFxuICAnV0VCSE9PS19SRVNQT05TRV9XUklUQUJMRSdcbik7XG5cbi8qKlxuICogU3ltYm9sIHVzZWQgdG8gc3RvcmUgdGhlIGNsYXNzIHJlZ2lzdHJ5IG9uIGdsb2JhbFRoaXMgaW4gd29ya2Zsb3cgbW9kZS5cbiAqIFRoaXMgYWxsb3dzIHRoZSBkZXNlcmlhbGl6ZXIgdG8gZmluZCBjbGFzc2VzIGJ5IGNsYXNzSWQgaW4gdGhlIFZNIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBjb25zdCBXT1JLRkxPV19DTEFTU19SRUdJU1RSWSA9IFN5bWJvbC5mb3IoJ3dvcmtmbG93LWNsYXNzLXJlZ2lzdHJ5Jyk7XG5cbmV4cG9ydCBjb25zdCBBQk9SVF9TVFJFQU1fTkFNRSA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX0FCT1JUX1NUUkVBTV9OQU1FJyk7XG5leHBvcnQgY29uc3QgQUJPUlRfSE9PS19UT0tFTiA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX0FCT1JUX0hPT0tfVE9LRU4nKTtcbmV4cG9ydCBjb25zdCBBQk9SVF9MSVNURU5FUl9BVFRBQ0hFRCA9IFN5bWJvbC5mb3IoXG4gICdXT1JLRkxPV19BQk9SVF9MSVNURU5FUl9BVFRBQ0hFRCdcbik7XG5leHBvcnQgY29uc3QgQUJPUlRfUkVBREVSX0NBTkNFTCA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX0FCT1JUX1JFQURFUl9DQU5DRUwnKTtcbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zeW1ib2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDdkUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDL0QsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDOUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUNyRTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQ25ELCtCQUErQixDQUNoQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN4RCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUNqRCwyQkFBMkIsQ0FDNUIsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUU3RSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFDMUUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQ3hFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQy9DLGtDQUFrQyxDQUNuQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFdPUktGTE9XX1VTRV9TVEVQID0gU3ltYm9sLmZvcignV09SS0ZMT1dfVVNFX1NURVAnKTtcbmV4cG9ydCBjb25zdCBXT1JLRkxPV19DUkVBVEVfSE9PSyA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX0NSRUFURV9IT09LJyk7XG5leHBvcnQgY29uc3QgV09SS0ZMT1dfU0xFRVAgPSBTeW1ib2wuZm9yKCdXT1JLRkxPV19TTEVFUCcpO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX0NPTlRFWFQgPSBTeW1ib2wuZm9yKCdXT1JLRkxPV19DT05URVhUJyk7XG5leHBvcnQgY29uc3QgV09SS0ZMT1dfR0VUX1NUUkVBTV9JRCA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX0dFVF9TVFJFQU1fSUQnKTtcbmV4cG9ydCBjb25zdCBTVEFCTEVfVUxJRCA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX1NUQUJMRV9VTElEJyk7XG5leHBvcnQgY29uc3QgU1RSRUFNX05BTUVfU1lNQk9MID0gU3ltYm9sLmZvcignV09SS0ZMT1dfU1RSRUFNX05BTUUnKTtcbmV4cG9ydCBjb25zdCBTVFJFQU1fVFlQRV9TWU1CT0wgPSBTeW1ib2wuZm9yKCdXT1JLRkxPV19TVFJFQU1fVFlQRScpO1xuLyoqXG4gKiBTdGFtcGVkIG9uIGEgcmVhbCBgV3JpdGFibGVTdHJlYW1gICh0aGUgdXNlci12aXNpYmxlIGBzZXJpYWxpemUud3JpdGFibGVgXG4gKiByZXR1cm5lZCBmcm9tIGEgc3RlcC1zaWRlIHJldml2ZXIgb3Igc3RlcC1jb250ZXh0IGBnZXRXcml0YWJsZSgpYCkgdG9cbiAqIHJlY29yZCB0aGUgYHJ1bklkYCBvZiB0aGUgd29ya2Zsb3cgcnVuIHRoYXQgb3ducyB0aGUgdW5kZXJseWluZyBzZXJ2ZXJcbiAqIHN0cmVhbS4gVXNlZCB0b2dldGhlciB3aXRoIGBTVFJFQU1fTkFNRV9TWU1CT0xgLlxuICpcbiAqIFdoZW4gYGdldEV4dGVybmFsUmVkdWNlcnMuV3JpdGFibGVTdHJlYW1gICh0aGUgZGVoeWRyYXRpb24gcGF0aCB1c2VkIGJ5XG4gKiBgc3RhcnQoKWApIHNlZXMgYm90aCBzeW1ib2xzIG9uIGEgd3JpdGFibGUsIGl0IGluY2x1ZGVzIHRoZSBgcnVuSWRgIGluXG4gKiB0aGUgZGVzY3JpcHRvciBpdCBlbWl0cy4gVGhlIGNoaWxkIHJ1bidzIHN0ZXAtc2lkZSByZXZpdmVyIHRoZW4gb3BlbnNcbiAqIGEgc2VydmVyIHdyaXRhYmxlIGFnYWluc3QgdGhlIG9yaWdpbmFsIGAocnVuSWQsIG5hbWUpYCBhbmQgcmVzb2x2ZXNcbiAqIHRoYXQgcnVuJ3MgZW5jcnlwdGlvbiBrZXkgZGlyZWN0bHkg4oCUIHNvIHRoZSBjaGlsZCdzIHdyaXRlcyBsYW5kIG9uXG4gKiB0aGUgcGFyZW50J3Mgc3RyZWFtIGFzLWlzLCB3aXRoIG5vIGNsaWVudCBwcm9jZXNzIGluIHRoZSBsb29wLiBUaGF0XG4gKiBrZWVwcyB0aGUgZm9yd2FyZGluZyBhbGl2ZSBmb3IgdGhlIGZ1bGwgbGlmZXRpbWUgb2YgdGhlIGNoaWxkIHJ1bixcbiAqIG5vdCBqdXN0IGZvciB0aGUgcGFyZW50IHN0ZXAgdGhhdCBpbml0aWF0ZWQgYHN0YXJ0KClgLlxuICovXG5leHBvcnQgY29uc3QgU1RSRUFNX1NFUlZFUl9SVU5fSURfU1lNQk9MID0gU3ltYm9sLmZvcihcbiAgJ1dPUktGTE9XX1NUUkVBTV9TRVJWRVJfUlVOX0lEJ1xuKTtcbmV4cG9ydCBjb25zdCBCT0RZX0lOSVRfU1lNQk9MID0gU3ltYm9sLmZvcignQk9EWV9JTklUJyk7XG5leHBvcnQgY29uc3QgV0VCSE9PS19SRVNQT05TRV9XUklUQUJMRSA9IFN5bWJvbC5mb3IoXG4gICdXRUJIT09LX1JFU1BPTlNFX1dSSVRBQkxFJ1xuKTtcblxuLyoqXG4gKiBTeW1ib2wgdXNlZCB0byBzdG9yZSB0aGUgY2xhc3MgcmVnaXN0cnkgb24gZ2xvYmFsVGhpcyBpbiB3b3JrZmxvdyBtb2RlLlxuICogVGhpcyBhbGxvd3MgdGhlIGRlc2VyaWFsaXplciB0byBmaW5kIGNsYXNzZXMgYnkgY2xhc3NJZCBpbiB0aGUgVk0gY29udGV4dC5cbiAqL1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX0NMQVNTX1JFR0lTVFJZID0gU3ltYm9sLmZvcignd29ya2Zsb3ctY2xhc3MtcmVnaXN0cnknKTtcblxuZXhwb3J0IGNvbnN0IEFCT1JUX1NUUkVBTV9OQU1FID0gU3ltYm9sLmZvcignV09SS0ZMT1dfQUJPUlRfU1RSRUFNX05BTUUnKTtcbmV4cG9ydCBjb25zdCBBQk9SVF9IT09LX1RPS0VOID0gU3ltYm9sLmZvcignV09SS0ZMT1dfQUJPUlRfSE9PS19UT0tFTicpO1xuZXhwb3J0IGNvbnN0IEFCT1JUX0xJU1RFTkVSX0FUVEFDSEVEID0gU3ltYm9sLmZvcihcbiAgJ1dPUktGTE9XX0FCT1JUX0xJU1RFTkVSX0FUVEFDSEVEJ1xuKTtcbmV4cG9ydCBjb25zdCBBQk9SVF9SRUFERVJfQ0FOQ0VMID0gU3ltYm9sLmZvcignV09SS0ZMT1dfQUJPUlRfUkVBREVSX0NBTkNFTCcpO1xuIl19
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const version = "5.0.0-beta.6";
1
+ export declare const version = "5.0.0-beta.8";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // Generated by genversion.
2
- export const version = '5.0.0-beta.6';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUMzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGdlbnZlcnNpb24uXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICc1LjAuMC1iZXRhLjYnXG4iXX0=
2
+ export const version = '5.0.0-beta.8';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUMzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGdlbnZlcnNpb24uXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICc1LjAuMC1iZXRhLjgnXG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"abort-controller.d.ts","sourceRoot":"","sources":["../../src/workflow/abort-controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGpE;;;;;;;;;;GAUG;AACH,qBAAa,mBAAmB;;IAC9B,OAAO,UAAS;IAChB,MAAM,EAAE,OAAO,CAAa;IAE5B,QAAQ,CAAC,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAKpC,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAAG,IAAI,CAE1D;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAAG,IAAI,EAKhE;gBAEW,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAKjD;;;;OAIG;IACH,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAanC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAa1D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAK7D,cAAc,IAAI,IAAI;CAQvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,2BAA2B;;yBAEvD,mBAAmB;uBAgGrB,OAAO,GAAG,IAAI;sCA/FC,MAAM;qCACP,MAAM;;EA+GtC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI;IAC1C,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,mBAAmB,CAAC;IACjD,GAAG,EAAE,CACH,OAAO,EAAE,QAAQ,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,gBAAgB,CAAC,EAAE,QAAQ,CAAC;KAC7B,CAAC,KACC,mBAAmB,CAAC;IACzB,OAAO,EAAE,MAAM,KAAK,CAAC;CACtB,CAwEA"}
1
+ {"version":3,"file":"abort-controller.d.ts","sourceRoot":"","sources":["../../src/workflow/abort-controller.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGpE;;;;;;;;;;GAUG;AACH,qBAAa,mBAAmB;;IAC9B,OAAO,UAAS;IAChB,MAAM,EAAE,OAAO,CAAa;IAE5B,QAAQ,CAAC,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAKpC,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAAG,IAAI,CAE1D;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAAG,IAAI,EAKhE;gBAEW,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAKjD;;;;OAIG;IACH,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAanC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAa1D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAK7D,cAAc,IAAI,IAAI;CAQvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,2BAA2B;;yBAEvD,mBAAmB;uBAmHrB,OAAO,GAAG,IAAI;sCAlHC,MAAM;qCACP,MAAM;;EAkItC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI;IAC1C,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,mBAAmB,CAAC;IACjD,GAAG,EAAE,CACH,OAAO,EAAE,QAAQ,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,gBAAgB,CAAC,EAAE,QAAQ,CAAC;KAC7B,CAAC,KACC,mBAAmB,CAAC;IACzB,OAAO,EAAE,MAAM,KAAK,CAAC;CACtB,CAwEA"}