@workflow/core 5.0.0-beta.2 → 5.0.0-beta.20

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 (247) hide show
  1. package/dist/attribute-changes.d.ts +7 -0
  2. package/dist/attribute-changes.d.ts.map +1 -0
  3. package/dist/attribute-changes.js +25 -0
  4. package/dist/capabilities.d.ts +22 -1
  5. package/dist/capabilities.d.ts.map +1 -1
  6. package/dist/capabilities.js +41 -4
  7. package/dist/capture-stack.d.ts +16 -0
  8. package/dist/capture-stack.d.ts.map +1 -0
  9. package/dist/capture-stack.js +21 -0
  10. package/dist/class-serialization.d.ts +32 -0
  11. package/dist/class-serialization.d.ts.map +1 -1
  12. package/dist/class-serialization.js +37 -1
  13. package/dist/classify-error.d.ts +11 -3
  14. package/dist/classify-error.d.ts.map +1 -1
  15. package/dist/classify-error.js +59 -6
  16. package/dist/context-errors.d.ts +27 -0
  17. package/dist/context-errors.d.ts.map +1 -0
  18. package/dist/context-errors.js +101 -0
  19. package/dist/context-violation-error.d.ts +97 -0
  20. package/dist/context-violation-error.d.ts.map +1 -0
  21. package/dist/context-violation-error.js +147 -0
  22. package/dist/create-hook.d.ts +40 -1
  23. package/dist/create-hook.d.ts.map +1 -1
  24. package/dist/create-hook.js +4 -3
  25. package/dist/define-hook.d.ts.map +1 -1
  26. package/dist/define-hook.js +20 -5
  27. package/dist/describe-error.d.ts +70 -0
  28. package/dist/describe-error.d.ts.map +1 -0
  29. package/dist/describe-error.js +165 -0
  30. package/dist/encryption.d.ts +22 -1
  31. package/dist/encryption.d.ts.map +1 -1
  32. package/dist/encryption.js +72 -27
  33. package/dist/events-consumer.d.ts +24 -0
  34. package/dist/events-consumer.d.ts.map +1 -1
  35. package/dist/events-consumer.js +79 -16
  36. package/dist/flushable-stream.d.ts +10 -10
  37. package/dist/flushable-stream.d.ts.map +1 -1
  38. package/dist/flushable-stream.js +18 -13
  39. package/dist/global.d.ts +15 -1
  40. package/dist/global.d.ts.map +1 -1
  41. package/dist/global.js +21 -3
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +2 -1
  45. package/dist/log-format.d.ts +25 -0
  46. package/dist/log-format.d.ts.map +1 -0
  47. package/dist/log-format.js +250 -0
  48. package/dist/logger.d.ts +28 -30
  49. package/dist/logger.d.ts.map +1 -1
  50. package/dist/logger.js +77 -31
  51. package/dist/private.d.ts +84 -0
  52. package/dist/private.d.ts.map +1 -1
  53. package/dist/private.js +80 -3
  54. package/dist/runtime/constants.d.ts +93 -0
  55. package/dist/runtime/constants.d.ts.map +1 -1
  56. package/dist/runtime/constants.js +168 -8
  57. package/dist/runtime/get-port-lazy.d.ts +25 -0
  58. package/dist/runtime/get-port-lazy.d.ts.map +1 -0
  59. package/dist/runtime/get-port-lazy.js +92 -0
  60. package/dist/runtime/get-world-lazy.d.ts +32 -0
  61. package/dist/runtime/get-world-lazy.d.ts.map +1 -0
  62. package/dist/runtime/get-world-lazy.js +56 -0
  63. package/dist/runtime/helpers.d.ts +50 -7
  64. package/dist/runtime/helpers.d.ts.map +1 -1
  65. package/dist/runtime/helpers.js +149 -31
  66. package/dist/runtime/replay-budget.d.ts +98 -0
  67. package/dist/runtime/replay-budget.d.ts.map +1 -0
  68. package/dist/runtime/replay-budget.js +191 -0
  69. package/dist/runtime/resume-hook.d.ts.map +1 -1
  70. package/dist/runtime/resume-hook.js +39 -23
  71. package/dist/runtime/run-id-time.d.ts +10 -0
  72. package/dist/runtime/run-id-time.d.ts.map +1 -0
  73. package/dist/runtime/run-id-time.js +31 -0
  74. package/dist/runtime/run.d.ts.map +1 -1
  75. package/dist/runtime/run.js +44 -9
  76. package/dist/runtime/runs.d.ts.map +1 -1
  77. package/dist/runtime/runs.js +4 -1
  78. package/dist/runtime/start.d.ts +30 -1
  79. package/dist/runtime/start.d.ts.map +1 -1
  80. package/dist/runtime/start.js +138 -20
  81. package/dist/runtime/step-executor.d.ts +91 -0
  82. package/dist/runtime/step-executor.d.ts.map +1 -0
  83. package/dist/runtime/step-executor.js +659 -0
  84. package/dist/runtime/step-handler.d.ts.map +1 -1
  85. package/dist/runtime/step-handler.js +699 -556
  86. package/dist/runtime/suspension-handler.d.ts +55 -6
  87. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  88. package/dist/runtime/suspension-handler.js +282 -115
  89. package/dist/runtime/wait-continuation.d.ts +84 -0
  90. package/dist/runtime/wait-continuation.d.ts.map +1 -0
  91. package/dist/runtime/wait-continuation.js +92 -0
  92. package/dist/runtime/wait-until.d.ts +18 -0
  93. package/dist/runtime/wait-until.d.ts.map +1 -0
  94. package/dist/runtime/wait-until.js +42 -0
  95. package/dist/runtime/world-init.d.ts +75 -0
  96. package/dist/runtime/world-init.d.ts.map +1 -0
  97. package/dist/runtime/world-init.js +75 -0
  98. package/dist/runtime/world.d.ts.map +1 -1
  99. package/dist/runtime/world.js +47 -18
  100. package/dist/runtime.d.ts +11 -8
  101. package/dist/runtime.d.ts.map +1 -1
  102. package/dist/runtime.js +1234 -334
  103. package/dist/schemas.d.ts +1 -1
  104. package/dist/schemas.d.ts.map +1 -1
  105. package/dist/schemas.js +1 -1
  106. package/dist/serialization/client.d.ts +17 -0
  107. package/dist/serialization/client.d.ts.map +1 -0
  108. package/dist/serialization/client.js +48 -0
  109. package/dist/serialization/codec-devalue.d.ts +14 -0
  110. package/dist/serialization/codec-devalue.d.ts.map +1 -0
  111. package/dist/serialization/codec-devalue.js +98 -0
  112. package/dist/serialization/codec.d.ts +106 -0
  113. package/dist/serialization/codec.d.ts.map +1 -0
  114. package/dist/serialization/codec.js +17 -0
  115. package/dist/serialization/compression.d.ts +104 -0
  116. package/dist/serialization/compression.d.ts.map +1 -0
  117. package/dist/serialization/compression.js +260 -0
  118. package/dist/serialization/encryption.d.ts +33 -0
  119. package/dist/serialization/encryption.d.ts.map +1 -0
  120. package/dist/serialization/encryption.js +70 -0
  121. package/dist/serialization/errors.d.ts +34 -0
  122. package/dist/serialization/errors.d.ts.map +1 -0
  123. package/dist/serialization/errors.js +59 -0
  124. package/dist/serialization/format.d.ts +60 -0
  125. package/dist/serialization/format.d.ts.map +1 -0
  126. package/dist/serialization/format.js +97 -0
  127. package/dist/serialization/index.d.ts +19 -0
  128. package/dist/serialization/index.d.ts.map +1 -0
  129. package/dist/serialization/index.js +22 -0
  130. package/dist/serialization/reducers/class.d.ts +11 -0
  131. package/dist/serialization/reducers/class.d.ts.map +1 -0
  132. package/dist/serialization/reducers/class.js +68 -0
  133. package/dist/serialization/reducers/common.d.ts +16 -0
  134. package/dist/serialization/reducers/common.d.ts.map +1 -0
  135. package/dist/serialization/reducers/common.js +417 -0
  136. package/dist/serialization/reducers/step-function.d.ts +35 -0
  137. package/dist/serialization/reducers/step-function.d.ts.map +1 -0
  138. package/dist/serialization/reducers/step-function.js +88 -0
  139. package/dist/serialization/step.d.ts +17 -0
  140. package/dist/serialization/step.d.ts.map +1 -0
  141. package/dist/serialization/step.js +48 -0
  142. package/dist/serialization/types.d.ts +253 -0
  143. package/dist/serialization/types.d.ts.map +1 -0
  144. package/dist/serialization/types.js +25 -0
  145. package/dist/serialization/workflow.d.ts +29 -0
  146. package/dist/serialization/workflow.d.ts.map +1 -0
  147. package/dist/serialization/workflow.js +54 -0
  148. package/dist/serialization-format.d.ts +15 -0
  149. package/dist/serialization-format.d.ts.map +1 -1
  150. package/dist/serialization-format.js +209 -11
  151. package/dist/serialization.d.ts +313 -214
  152. package/dist/serialization.d.ts.map +1 -1
  153. package/dist/serialization.js +1417 -658
  154. package/dist/set-attributes.d.ts +13 -0
  155. package/dist/set-attributes.d.ts.map +1 -0
  156. package/dist/set-attributes.js +42 -0
  157. package/dist/sleep.d.ts.map +1 -1
  158. package/dist/sleep.js +3 -2
  159. package/dist/source-map.d.ts +5 -0
  160. package/dist/source-map.d.ts.map +1 -1
  161. package/dist/source-map.js +102 -10
  162. package/dist/step/context-storage.d.ts +16 -0
  163. package/dist/step/context-storage.d.ts.map +1 -1
  164. package/dist/step/context-storage.js +1 -1
  165. package/dist/step/get-closure-vars.d.ts.map +1 -1
  166. package/dist/step/get-closure-vars.js +3 -2
  167. package/dist/step/get-step-metadata.d.ts.map +1 -1
  168. package/dist/step/get-step-metadata.js +3 -2
  169. package/dist/step/get-workflow-metadata.d.ts.map +1 -1
  170. package/dist/step/get-workflow-metadata.js +3 -2
  171. package/dist/step/writable-stream.d.ts.map +1 -1
  172. package/dist/step/writable-stream.js +49 -5
  173. package/dist/step.d.ts.map +1 -1
  174. package/dist/step.js +98 -20
  175. package/dist/symbols.d.ts +28 -0
  176. package/dist/symbols.d.ts.map +1 -1
  177. package/dist/symbols.js +29 -1
  178. package/dist/telemetry/semantic-conventions.d.ts +30 -2
  179. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  180. package/dist/telemetry/semantic-conventions.js +21 -1
  181. package/dist/telemetry.d.ts +60 -0
  182. package/dist/telemetry.d.ts.map +1 -1
  183. package/dist/telemetry.js +82 -4
  184. package/dist/types.d.ts +6 -0
  185. package/dist/types.d.ts.map +1 -1
  186. package/dist/types.js +23 -1
  187. package/dist/util.d.ts +16 -6
  188. package/dist/util.d.ts.map +1 -1
  189. package/dist/util.js +25 -16
  190. package/dist/version.d.ts +1 -1
  191. package/dist/version.d.ts.map +1 -1
  192. package/dist/version.js +2 -2
  193. package/dist/vm/index.d.ts.map +1 -1
  194. package/dist/vm/index.js +3 -2
  195. package/dist/vm/script-cache.d.ts +28 -0
  196. package/dist/vm/script-cache.d.ts.map +1 -0
  197. package/dist/vm/script-cache.js +140 -0
  198. package/dist/workflow/abort-controller.d.ts +65 -0
  199. package/dist/workflow/abort-controller.d.ts.map +1 -0
  200. package/dist/workflow/abort-controller.js +260 -0
  201. package/dist/workflow/attribute-dispatcher.d.ts +6 -0
  202. package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
  203. package/dist/workflow/attribute-dispatcher.js +48 -0
  204. package/dist/workflow/create-hook.d.ts.map +1 -1
  205. package/dist/workflow/create-hook.js +23 -2
  206. package/dist/workflow/define-hook.d.ts +1 -1
  207. package/dist/workflow/define-hook.d.ts.map +1 -1
  208. package/dist/workflow/define-hook.js +8 -4
  209. package/dist/workflow/get-workflow-metadata.d.ts.map +1 -1
  210. package/dist/workflow/get-workflow-metadata.js +14 -3
  211. package/dist/workflow/hook.d.ts.map +1 -1
  212. package/dist/workflow/hook.js +207 -33
  213. package/dist/workflow/index.d.ts +1 -0
  214. package/dist/workflow/index.d.ts.map +1 -1
  215. package/dist/workflow/index.js +5 -3
  216. package/dist/workflow/set-attributes.d.ts +73 -0
  217. package/dist/workflow/set-attributes.d.ts.map +1 -0
  218. package/dist/workflow/set-attributes.js +65 -0
  219. package/dist/workflow/sleep.d.ts.map +1 -1
  220. package/dist/workflow/sleep.js +45 -8
  221. package/dist/workflow/world-init-stub.d.ts +15 -0
  222. package/dist/workflow/world-init-stub.d.ts.map +1 -0
  223. package/dist/workflow/world-init-stub.js +15 -0
  224. package/dist/workflow.d.ts.map +1 -1
  225. package/dist/workflow.js +148 -47
  226. package/docs/api-reference/create-hook.mdx +38 -0
  227. package/docs/api-reference/create-webhook.mdx +1 -0
  228. package/docs/api-reference/experimental-set-attributes.mdx +65 -0
  229. package/docs/api-reference/fetch.mdx +5 -0
  230. package/docs/api-reference/index.mdx +3 -0
  231. package/docs/foundations/cancellation.mdx +459 -0
  232. package/docs/foundations/errors-and-retries.mdx +7 -3
  233. package/docs/foundations/hooks.mdx +29 -0
  234. package/docs/foundations/idempotency.mdx +236 -11
  235. package/docs/foundations/index.mdx +3 -3
  236. package/docs/foundations/meta.json +3 -2
  237. package/docs/foundations/serialization.mdx +78 -42
  238. package/docs/foundations/starting-workflows.mdx +6 -2
  239. package/docs/foundations/streaming.mdx +14 -23
  240. package/docs/foundations/versioning.mdx +263 -0
  241. package/docs/how-it-works/cancellation.mdx +287 -0
  242. package/docs/how-it-works/code-transform.mdx +2 -2
  243. package/docs/how-it-works/encryption.mdx +2 -2
  244. package/docs/how-it-works/event-sourcing.mdx +2 -2
  245. package/docs/how-it-works/meta.json +2 -1
  246. package/package.json +22 -10
  247. package/docs/foundations/common-patterns.mdx +0 -265
@@ -1,5 +1,58 @@
1
1
  import type * as api from '@opentelemetry/api';
2
2
  import type { Span, SpanKind, SpanOptions } from '@opentelemetry/api';
3
+ /**
4
+ * Controls how workflow/step queue-handler spans relate to the run-origin
5
+ * trace context carried in queue messages:
6
+ *
7
+ * - `'linked'` (default): each invocation starts a NEW root trace; the
8
+ * run-origin context (and the incoming delivery context) are attached as
9
+ * span links. This keeps traces bounded per invocation instead of
10
+ * stitching a long-lived run into one giant trace.
11
+ * - `'continuous'`: the restored run-origin context becomes the parent of
12
+ * the invocation span (legacy behavior), producing a single trace that
13
+ * spans the entire run.
14
+ */
15
+ export type WorkflowTraceMode = 'linked' | 'continuous';
16
+ /**
17
+ * Resolves the active trace mode from the `WORKFLOW_TRACE_MODE` env var.
18
+ * Defaults to `'linked'`; any value other than `'continuous'` selects it.
19
+ * Unrecognized non-empty values (e.g. typos like `continous`) emit a
20
+ * one-time warning so silent fallback to `linked` is at least visible.
21
+ */
22
+ export declare function getWorkflowTraceMode(): WorkflowTraceMode;
23
+ /**
24
+ * Returns whether a serialized trace carrier is usable, i.e. present and
25
+ * non-empty. `serializeTraceCarrier()` returns `{}` when no OTEL SDK is
26
+ * registered or no span is active, and `start()` always attaches the
27
+ * carrier to the first queue message — so an empty carrier must be treated
28
+ * the same as an absent one wherever the trace-mode logic branches.
29
+ */
30
+ export declare function isUsableTraceCarrier(carrier: Record<string, string> | undefined): carrier is Record<string, string>;
31
+ /**
32
+ * Returns the trace carrier to attach to messages the current invocation
33
+ * enqueues. In `linked` mode the ORIGINAL run-origin carrier is forwarded
34
+ * unchanged (when usable) so every future invocation links back to the same
35
+ * origin; otherwise — `continuous` mode, or no usable incoming carrier —
36
+ * the current (active) context is serialized, so the trace keeps chaining
37
+ * (continuous) or the first instrumented invocation becomes the de-facto
38
+ * origin (linked).
39
+ */
40
+ export declare function getNextTraceCarrier(traceMode: WorkflowTraceMode, incomingCarrier: Record<string, string> | undefined): Promise<Record<string, string>>;
41
+ /**
42
+ * Builds the span links for a queue-delivered invocation span
43
+ * (`workflow.execute` / `step.execute`):
44
+ *
45
+ * - In `linked` mode the invocation span is a CHILD of the local delivery
46
+ * (flow-route) context, so the only link is to the run-origin context
47
+ * from the message's trace carrier — connecting this bounded per-invocation
48
+ * trace back to where the run was started. The run-origin context is a
49
+ * link, never a parent, and re-enqueues forward the original carrier
50
+ * unchanged, so the whole run is never stitched into one giant trace.
51
+ * The link is skipped when the carrier is absent, empty, or invalid.
52
+ * - In `continuous` mode the run-origin context is restored as the parent
53
+ * instead, and the link points at the incoming delivery context.
54
+ */
55
+ export declare function buildInvocationSpanLinks(traceMode: WorkflowTraceMode, incomingCarrier: Record<string, string> | undefined): Promise<api.Link[] | undefined>;
3
56
  /**
4
57
  * Serializes the current trace context into a format that can be passed through queues
5
58
  * @returns A record of strings representing the trace context
@@ -31,6 +84,13 @@ export declare function instrumentObject<T extends object>(prefix: string, o: T)
31
84
  export declare function getSpanKind(field: keyof typeof SpanKind): Promise<api.SpanKind | undefined>;
32
85
  export declare function withOtel<T>(fn: (otel: typeof api) => T): Promise<Awaited<T> | undefined>;
33
86
  export declare function linkToCurrentContext(): Promise<[api.Link] | undefined>;
87
+ /**
88
+ * Builds a span link pointing at the span context embedded in a serialized
89
+ * trace carrier (e.g. the run-origin context flowing through queue
90
+ * messages). Returns `undefined` when OTEL is unavailable, the carrier is
91
+ * absent, or it does not contain a valid span context.
92
+ */
93
+ export declare function linkToTraceCarrier(carrier: Record<string, string> | undefined): Promise<api.Link | undefined>;
34
94
  /**
35
95
  * Workflow context to propagate via baggage
36
96
  */
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAUtE;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAO7E;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,oCAMrC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAChD,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAcZ;AAiBD,wBAAsB,KAAK,CAAC,CAAC,EAC3B,QAAQ,EAAE,MAAM,EAChB,GAAG,IAAI,EACH,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GACjC,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GACvD,OAAO,CAAC,CAAC,CAAC,CA4BZ;AAwBD,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,wCAQhC;AAED,wBAAsB,aAAa,kCAElC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAa1E;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,OAAO,QAAQ,qCAE7D;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC,GAC1B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAIjC;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAMtE;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,OAAO,EAAE,sBAAsB,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAiBZ;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CACjD,sBAAsB,GAAG,SAAS,CACnC,CAgBA"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
package/dist/telemetry.js CHANGED
@@ -2,9 +2,68 @@ import { once } from '@workflow/utils';
2
2
  import { WorkflowSuspension } from './global.js';
3
3
  import { runtimeLogger } from './logger.js';
4
4
  import * as Attr from './telemetry/semantic-conventions.js';
5
- // ============================================================
6
- // Trace Context Propagation Utilities
7
- // ============================================================
5
+ /** Unrecognized `WORKFLOW_TRACE_MODE` values we already warned about. */
6
+ const warnedUnrecognizedTraceModes = new Set();
7
+ /**
8
+ * Resolves the active trace mode from the `WORKFLOW_TRACE_MODE` env var.
9
+ * Defaults to `'linked'`; any value other than `'continuous'` selects it.
10
+ * Unrecognized non-empty values (e.g. typos like `continous`) emit a
11
+ * one-time warning so silent fallback to `linked` is at least visible.
12
+ */
13
+ export function getWorkflowTraceMode() {
14
+ const value = process.env.WORKFLOW_TRACE_MODE;
15
+ if (value === 'continuous')
16
+ return 'continuous';
17
+ if (value && value !== 'linked' && !warnedUnrecognizedTraceModes.has(value)) {
18
+ warnedUnrecognizedTraceModes.add(value);
19
+ runtimeLogger.warn(`Unrecognized WORKFLOW_TRACE_MODE value "${value}"; expected "linked" or "continuous". Falling back to "linked".`);
20
+ }
21
+ return 'linked';
22
+ }
23
+ /**
24
+ * Returns whether a serialized trace carrier is usable, i.e. present and
25
+ * non-empty. `serializeTraceCarrier()` returns `{}` when no OTEL SDK is
26
+ * registered or no span is active, and `start()` always attaches the
27
+ * carrier to the first queue message — so an empty carrier must be treated
28
+ * the same as an absent one wherever the trace-mode logic branches.
29
+ */
30
+ export function isUsableTraceCarrier(carrier) {
31
+ return carrier !== undefined && Object.keys(carrier).length > 0;
32
+ }
33
+ /**
34
+ * Returns the trace carrier to attach to messages the current invocation
35
+ * enqueues. In `linked` mode the ORIGINAL run-origin carrier is forwarded
36
+ * unchanged (when usable) so every future invocation links back to the same
37
+ * origin; otherwise — `continuous` mode, or no usable incoming carrier —
38
+ * the current (active) context is serialized, so the trace keeps chaining
39
+ * (continuous) or the first instrumented invocation becomes the de-facto
40
+ * origin (linked).
41
+ */
42
+ export function getNextTraceCarrier(traceMode, incomingCarrier) {
43
+ return traceMode === 'linked' && isUsableTraceCarrier(incomingCarrier)
44
+ ? Promise.resolve(incomingCarrier)
45
+ : serializeTraceCarrier();
46
+ }
47
+ /**
48
+ * Builds the span links for a queue-delivered invocation span
49
+ * (`workflow.execute` / `step.execute`):
50
+ *
51
+ * - In `linked` mode the invocation span is a CHILD of the local delivery
52
+ * (flow-route) context, so the only link is to the run-origin context
53
+ * from the message's trace carrier — connecting this bounded per-invocation
54
+ * trace back to where the run was started. The run-origin context is a
55
+ * link, never a parent, and re-enqueues forward the original carrier
56
+ * unchanged, so the whole run is never stitched into one giant trace.
57
+ * The link is skipped when the carrier is absent, empty, or invalid.
58
+ * - In `continuous` mode the run-origin context is restored as the parent
59
+ * instead, and the link points at the incoming delivery context.
60
+ */
61
+ export async function buildInvocationSpanLinks(traceMode, incomingCarrier) {
62
+ if (traceMode !== 'linked')
63
+ return linkToCurrentContext();
64
+ const originLink = await linkToTraceCarrier(isUsableTraceCarrier(incomingCarrier) ? incomingCarrier : undefined);
65
+ return originLink ? [originLink] : undefined;
66
+ }
8
67
  /**
9
68
  * Serializes the current trace context into a format that can be passed through queues
10
69
  * @returns A record of strings representing the trace context
@@ -158,6 +217,25 @@ export function linkToCurrentContext() {
158
217
  return [{ context }];
159
218
  });
160
219
  }
220
+ /**
221
+ * Builds a span link pointing at the span context embedded in a serialized
222
+ * trace carrier (e.g. the run-origin context flowing through queue
223
+ * messages). Returns `undefined` when OTEL is unavailable, the carrier is
224
+ * absent, or it does not contain a valid span context.
225
+ */
226
+ export async function linkToTraceCarrier(carrier) {
227
+ if (!carrier)
228
+ return;
229
+ const [context, otel] = await Promise.all([
230
+ getSpanContextForTraceCarrier(carrier),
231
+ OtelApi.value,
232
+ ]);
233
+ if (!context || !otel)
234
+ return;
235
+ if (!otel.trace.isSpanContextValid(context))
236
+ return;
237
+ return { context };
238
+ }
161
239
  /**
162
240
  * Sets workflow context as OTEL baggage for automatic propagation.
163
241
  * Baggage is propagated across service boundaries via HTTP headers.
@@ -197,4 +275,4 @@ export async function getWorkflowBaggage() {
197
275
  workflowName: name,
198
276
  };
199
277
  }
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlbGVtZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxLQUFLLElBQUksTUFBTSxxQ0FBcUMsQ0FBQztBQUU1RCwrREFBK0Q7QUFDL0Qsc0NBQXNDO0FBQ3RDLCtEQUErRDtBQUUvRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHFCQUFxQjtJQUN6QyxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDakMsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyQixNQUFNLE9BQU8sR0FBMkIsRUFBRSxDQUFDO0lBQzNDLDhDQUE4QztJQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsWUFBb0M7SUFFcEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTztJQUNsQix1Q0FBdUM7SUFDdkMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdC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SUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0I7SUFHdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFL0IsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUN6RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUV0RCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXRDLE9BQU87UUFDTCxhQUFhLEVBQUUsS0FBSztRQUNwQixZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgYXBpIGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgdHlwZSB7IFNwYW4sIFNwYW5LaW5kLCBTcGFuT3B0aW9ucyB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBvbmNlIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcbmltcG9ydCB7IFdvcmtmbG93U3VzcGVuc2lvbiB9IGZyb20gJy4vZ2xvYmFsLmpzJztcbmltcG9ydCB7IHJ1bnRpbWVMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgKiBhcyBBdHRyIGZyb20gJy4vdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUcmFjZSBDb250ZXh0IFByb3BhZ2F0aW9uIFV0aWxpdGllc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgY3VycmVudCB0cmFjZSBjb250ZXh0IGludG8gYSBmb3JtYXQgdGhhdCBjYW4gYmUgcGFzc2VkIHRocm91Z2ggcXVldWVzXG4gKiBAcmV0dXJucyBBIHJlY29yZCBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgdHJhY2UgY29udGV4dFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VyaWFsaXplVHJhY2VDYXJyaWVyKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4ge307XG4gIGNvbnN0IGNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgLy8gSW5qZWN0IHRoZSBjdXJyZW50IGNvbnRleHQgaW50byB0aGUgY2FycmllclxuICBvdGVsLnByb3BhZ2F0aW9uLmluamVjdChvdGVsLmNvbnRleHQuYWN0aXZlKCksIGNhcnJpZXIpO1xuICByZXR1cm4gY2Fycmllcjtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgdHJhY2UgY29udGV4dCBhbmQgcmV0dXJucyBhIGNvbnRleHQgdGhhdCBjYW4gYmUgdXNlZCB0byBjb250aW51ZSB0aGUgdHJhY2VcbiAqIEBwYXJhbSB0cmFjZUNhcnJpZXIgVGhlIHNlcmlhbGl6ZWQgdHJhY2UgY29udGV4dFxuICogQHJldHVybnMgT3BlblRlbGVtZXRyeSBjb250ZXh0IHdpdGggdGhlIHJlc3RvcmVkIHRyYWNlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXNlcmlhbGl6ZVRyYWNlQ2FycmllcihcbiAgdHJhY2VDYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4pIHtcbiAgY29uc3Qgb3RlbCA9IGF3YWl0IE90ZWxBcGkudmFsdWU7XG4gIGlmICghb3RlbCkgcmV0dXJuO1xuICAvLyBFeHRyYWN0IHRoZSBjb250ZXh0IGZyb20gdGhlIGNhcnJpZXJcbiAgcmV0dXJuIG90ZWwucHJvcGFnYXRpb24uZXh0cmFjdChvdGVsLmNvbnRleHQuYWN0aXZlKCksIHRyYWNlQ2Fycmllcik7XG59XG5cbi8qKlxuICogUnVucyBhIGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIGRlc2VyaWFsaXplZCB0cmFjZVxuICogQHBhcmFtIHRyYWNlQ2FycmllciBUaGUgc2VyaWFsaXplZCB0cmFjZSBjYXJyaWVyIChvcHRpb25hbClcbiAqIEBwYXJhbSBmbiBUaGUgZnVuY3Rpb24gdG8gcnVuIHdpdGhpbiB0aGUgdHJhY2UgY29udGV4dFxuICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhUcmFjZUNvbnRleHQ8VD4oXG4gIHRyYWNlQ2FycmllcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCxcbiAgZm46ICgpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8VD4ge1xuICBpZiAoIXRyYWNlQ2Fycmllcikge1xuICAgIHJldHVybiBmbigpO1xuICB9XG5cbiAgY29uc3Qgb3RlbCA9IGF3YWl0IE90ZWxBcGkudmFsdWU7XG4gIGlmICghb3RlbCkgcmV0dXJuIGZuKCk7XG5cbiAgY29uc3QgZXh0cmFjdGVkQ29udGV4dCA9IGF3YWl0IGRlc2VyaWFsaXplVHJhY2VDYXJyaWVyKHRyYWNlQ2Fycmllcik7XG4gIGlmICghZXh0cmFjdGVkQ29udGV4dCkge1xuICAgIHJldHVybiBmbigpO1xuICB9XG5cbiAgcmV0dXJuIG90ZWwuY29udGV4dC53aXRoKGV4dHJhY3RlZENvbnRleHQsIGFzeW5jICgpID0+IGF3YWl0IGZuKCkpO1xufVxuXG5jb25zdCBPdGVsQXBpID0gb25jZShhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGltcG9ydCgnQG9wZW50ZWxlbWV0cnkvYXBpJyk7XG4gIH0gY2F0Y2gge1xuICAgIHJ1bnRpbWVMb2dnZXIuaW5mbygnT3BlblRlbGVtZXRyeSBub3QgYXZhaWxhYmxlLCB0cmFjaW5nIHdpbGwgYmUgZGlzYWJsZWQnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufSk7XG5cbmNvbnN0IFRyYWNlciA9IG9uY2UoYXN5bmMgKCkgPT4ge1xuICBjb25zdCBhcGkgPSBhd2FpdCBPdGVsQXBpLnZhbHVlO1xuICBpZiAoIWFwaSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBhcGkudHJhY2UuZ2V0VHJhY2VyKCd3b3JrZmxvdycpO1xufSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFjZTxUPihcbiAgc3Bhbk5hbWU6IHN0cmluZyxcbiAgLi4uYXJnczpcbiAgICB8IFtmbjogKHNwYW4/OiBTcGFuKSA9PiBQcm9taXNlPFQ+XVxuICAgIHwgW29wdHM6IFNwYW5PcHRpb25zLCBmbjogKHNwYW4/OiBTcGFuKSA9PiBQcm9taXNlPFQ+XVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IFt0cmFjZXIsIG90ZWxdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1RyYWNlci52YWx1ZSwgT3RlbEFwaS52YWx1ZV0pO1xuICBjb25zdCB7IGZuLCBvcHRzIH0gPVxuICAgIHR5cGVvZiBhcmdzWzBdID09PSAnZnVuY3Rpb24nXG4gICAgICA/IHsgZm46IGFyZ3NbMF0sIG9wdHM6IHt9IH1cbiAgICAgIDogeyBmbjogYXJnc1sxXSwgb3B0czogYXJnc1swXSB9O1xuICBpZiAoIWZuKSB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIHRvIHRyYWNlIG11c3QgYmUgcHJvdmlkZWQnKTtcblxuICBpZiAoIXRyYWNlciB8fCAhb3RlbCkge1xuICAgIHJldHVybiBhd2FpdCBmbigpO1xuICB9XG5cbiAgcmV0dXJuIHRyYWNlci5zdGFydEFjdGl2ZVNwYW4oc3Bhbk5hbWUsIG9wdHMsIGFzeW5jIChzcGFuKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZuKHNwYW4pO1xuICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBvdGVsLlNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzcGFuLnNldFN0YXR1cyh7XG4gICAgICAgIGNvZGU6IG90ZWwuU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IChlIGFzIEVycm9yKS5tZXNzYWdlLFxuICAgICAgfSk7XG4gICAgICBhcHBseVdvcmtmbG93U3VzcGVuc2lvblRvU3BhbihlLCBvdGVsLCBzcGFuKTtcbiAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIHdvcmtmbG93IHN1c3BlbnNpb24gYXR0cmlidXRlcyB0byB0aGUgZ2l2ZW4gc3BhbiBpZiB0aGUgZXJyb3IgaXMgYSBXb3JrZmxvd1N1c3BlbnNpb25cbiAqIHdoaWNoIGlzIHRlY2huaWNhbGx5IG5vdCBhbiBlcnJvciwgYnV0IGFuIGFsZ2VicmFpYyBlZmZlY3QgaW5kaWNhdGluZyBzdXNwZW5zaW9uLlxuICovXG5mdW5jdGlvbiBhcHBseVdvcmtmbG93U3VzcGVuc2lvblRvU3BhbihcbiAgZXJyb3I6IHVua25vd24sXG4gIG90ZWw6IHR5cGVvZiBhcGksXG4gIHNwYW46IGFwaS5TcGFuXG4pIHtcbiAgaWYgKCFlcnJvciB8fCAhV29ya2Zsb3dTdXNwZW5zaW9uLmlzKGVycm9yKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogb3RlbC5TcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAgICAuLi5BdHRyLldvcmtmbG93U3VzcGVuc2lvblN0YXRlKCdzdXNwZW5kZWQnKSxcbiAgICAuLi5BdHRyLldvcmtmbG93U3VzcGVuc2lvblN0ZXBDb3VudChlcnJvci5zdGVwQ291bnQpLFxuICAgIC4uLkF0dHIuV29ya2Zsb3dTdXNwZW5zaW9uSG9va0NvdW50KGVycm9yLmhvb2tDb3VudCksXG4gICAgLi4uQXR0ci5Xb3JrZmxvd1N1c3BlbnNpb25XYWl0Q291bnQoZXJyb3Iud2FpdENvdW50KSxcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTcGFuQ29udGV4dEZvclRyYWNlQ2FycmllcihcbiAgY2FycmllcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuKSB7XG4gIGNvbnN0IFtkZXNlcmlhbGl6ZWQsIG90ZWxdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGRlc2VyaWFsaXplVHJhY2VDYXJyaWVyKGNhcnJpZXIpLFxuICAgIE90ZWxBcGkudmFsdWUsXG4gIF0pO1xuICBpZiAoIWRlc2VyaWFsaXplZCB8fCAhb3RlbCkgcmV0dXJuO1xuICByZXR1cm4gb3RlbC50cmFjZS5nZXRTcGFuQ29udGV4dChkZXNlcmlhbGl6ZWQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWN0aXZlU3BhbigpIHtcbiAgcmV0dXJuIGF3YWl0IHdpdGhPdGVsKChvdGVsKSA9PiBvdGVsLnRyYWNlLmdldEFjdGl2ZVNwYW4oKSk7XG59XG5cbi8qKlxuICogV3JhcHMgYWxsIG1ldGhvZHMgb2YgYW4gb2JqZWN0IHdpdGggdHJhY2luZyBzcGFucy5cbiAqIEBwYXJhbSBwcmVmaXggLSBQcmVmaXggZm9yIHNwYW4gbmFtZXMgKGUuZy4sIFwiV09STEQucnVuc1wiKVxuICogQHBhcmFtIG8gLSBPYmplY3Qgd2l0aCBtZXRob2RzIHRvIGluc3RydW1lbnRcbiAqIEByZXR1cm5zIEluc3RydW1lbnRlZCBvYmplY3Qgd2l0aCBzYW1lIGludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zdHJ1bWVudE9iamVjdDxUIGV4dGVuZHMgb2JqZWN0PihwcmVmaXg6IHN0cmluZywgbzogVCk6IFQge1xuICBjb25zdCBoYW5kbGVycyA9IHt9IGFzIFQ7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG8pIGFzIChrZXlvZiBUKVtdKSB7XG4gICAgaWYgKHR5cGVvZiBvW2tleV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGhhbmRsZXJzW2tleV0gPSBvW2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGYgPSBvW2tleV07XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBoYW5kbGVyc1trZXldID0gYXN5bmMgKC4uLmFyZ3M6IGFueVtdKSA9PlxuICAgICAgICB0cmFjZShgJHtwcmVmaXh9LiR7U3RyaW5nKGtleSl9YCwge30sICgpID0+IGYoLi4uYXJncykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaGFuZGxlcnM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTcGFuS2luZChmaWVsZDoga2V5b2YgdHlwZW9mIFNwYW5LaW5kKSB7XG4gIHJldHVybiB3aXRoT3RlbCgoeCkgPT4geC5TcGFuS2luZFtmaWVsZF0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aE90ZWw8VD4oXG4gIGZuOiAob3RlbDogdHlwZW9mIGFwaSkgPT4gVFxuKTogUHJvbWlzZTxBd2FpdGVkPFQ+IHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IG90ZWwgPSBhd2FpdCBPdGVsQXBpLnZhbHVlO1xuICBpZiAoIW90ZWwpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBhd2FpdCBmbihvdGVsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmtUb0N1cnJlbnRDb250ZXh0KCk6IFByb21pc2U8W2FwaS5MaW5rXSB8IHVuZGVmaW5lZD4ge1xuICByZXR1cm4gd2l0aE90ZWwoKG90ZWwpOiBbYXBpLkxpbmtdIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gb3RlbC50cmFjZS5nZXRBY3RpdmVTcGFuKCk/LnNwYW5Db250ZXh0KCk7XG4gICAgaWYgKCFjb250ZXh0KSByZXR1cm47XG4gICAgcmV0dXJuIFt7IGNvbnRleHQgfV07XG4gIH0pO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJhZ2dhZ2UgUHJvcGFnYXRpb24gVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBXb3JrZmxvdyBjb250ZXh0IHRvIHByb3BhZ2F0ZSB2aWEgYmFnZ2FnZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93QmFnZ2FnZUNvbnRleHQge1xuICB3b3JrZmxvd1J1bklkOiBzdHJpbmc7XG4gIHdvcmtmbG93TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNldHMgd29ya2Zsb3cgY29udGV4dCBhcyBPVEVMIGJhZ2dhZ2UgZm9yIGF1dG9tYXRpYyBwcm9wYWdhdGlvbi5cbiAqIEJhZ2dhZ2UgaXMgcHJvcGFnYXRlZCBhY3Jvc3Mgc2VydmljZSBib3VuZGFyaWVzIHZpYSBIVFRQIGhlYWRlcnMuXG4gKiBAcGFyYW0gY29udGV4dCAtIFdvcmtmbG93IGNvbnRleHQgdG8gc2V0IGFzIGJhZ2dhZ2VcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdG8gcnVuIHdpdGhpbiB0aGUgYmFnZ2FnZSBjb250ZXh0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoV29ya2Zsb3dCYWdnYWdlPFQ+KFxuICBjb250ZXh0OiBXb3JrZmxvd0JhZ2dhZ2VDb250ZXh0LFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IG90ZWwgPSBhd2FpdCBPdGVsQXBpLnZhbHVlO1xuICBpZiAoIW90ZWwpIHJldHVybiBmbigpO1xuXG4gIC8vIENyZWF0ZSBiYWdnYWdlIHdpdGggd29ya2Zsb3cgY29udGV4dFxuICBjb25zdCBiYWdnYWdlID0gb3RlbC5wcm9wYWdhdGlvbi5jcmVhdGVCYWdnYWdlKHtcbiAgICAnd29ya2Zsb3cucnVuX2lkJzogeyB2YWx1ZTogY29udGV4dC53b3JrZmxvd1J1bklkIH0sXG4gICAgJ3dvcmtmbG93Lm5hbWUnOiB7IHZhbHVlOiBjb250ZXh0LndvcmtmbG93TmFtZSB9LFxuICB9KTtcblxuICAvLyBTZXQgYmFnZ2FnZSBpbiBjb250ZXh0IGFuZCBydW4gZnVuY3Rpb25cbiAgY29uc3QgY29udGV4dFdpdGhCYWdnYWdlID0gb3RlbC5wcm9wYWdhdGlvbi5zZXRCYWdnYWdlKFxuICAgIG90ZWwuY29udGV4dC5hY3RpdmUoKSxcbiAgICBiYWdnYWdlXG4gICk7XG5cbiAgcmV0dXJuIG90ZWwuY29udGV4dC53aXRoKGNvbnRleHRXaXRoQmFnZ2FnZSwgKCkgPT4gZm4oKSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHdvcmtmbG93IGNvbnRleHQgZnJvbSBPVEVMIGJhZ2dhZ2UuXG4gKiBAcmV0dXJucyBXb3JrZmxvdyBjb250ZXh0IGlmIHByZXNlbnQgaW4gYmFnZ2FnZSwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V29ya2Zsb3dCYWdnYWdlKCk6IFByb21pc2U8XG4gIFdvcmtmbG93QmFnZ2FnZUNvbnRleHQgfCB1bmRlZmluZWRcbj4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJhZ2dhZ2UgPSBvdGVsLnByb3BhZ2F0aW9uLmdldEJhZ2dhZ2Uob3RlbC5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgaWYgKCFiYWdnYWdlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHJ1bklkID0gYmFnZ2FnZS5nZXRFbnRyeSgnd29ya2Zsb3cucnVuX2lkJyk/LnZhbHVlO1xuICBjb25zdCBuYW1lID0gYmFnZ2FnZS5nZXRFbnRyeSgnd29ya2Zsb3cubmFtZScpPy52YWx1ZTtcblxuICBpZiAoIXJ1bklkIHx8ICFuYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIHJldHVybiB7XG4gICAgd29ya2Zsb3dSdW5JZDogcnVuSWQsXG4gICAgd29ya2Zsb3dOYW1lOiBuYW1lLFxuICB9O1xufVxuIl19
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlbGVtZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxLQUFLLElBQUksTUFBTSxxQ0FBcUMsQ0FBQztBQW9CNUQseUVBQXlFO0FBQ3pFLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQUV2RDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztJQUM5QyxJQUFJLEtBQUssS0FBSyxZQUFZO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDaEQsSUFBSSxLQUFLLElBQUksS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVFLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxhQUFhLENBQUMsSUFBSSxDQUNoQiwyQ0FBMkMsS0FBSyxpRUFBaUUsQ0FDbEgsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxPQUEyQztJQUUzQyxPQUFPLE9BQU8sS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsU0FBNEIsRUFDNUIsZUFB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QUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDekQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLENBQUM7SUFFdEQsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUV0QyxPQUFPO1FBQ0wsYUFBYSxFQUFFLEtBQUs7UUFDcEIsWUFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGFwaSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHR5cGUgeyBTcGFuLCBTcGFuS2luZCwgU3Bhbk9wdGlvbnMgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgb25jZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgeyBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuL2dsb2JhbC5qcyc7XG5pbXBvcnQgeyBydW50aW1lTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0ICogYXMgQXR0ciBmcm9tICcuL3RlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9ucy5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVHJhY2UgQ29udGV4dCBQcm9wYWdhdGlvbiBVdGlsaXRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENvbnRyb2xzIGhvdyB3b3JrZmxvdy9zdGVwIHF1ZXVlLWhhbmRsZXIgc3BhbnMgcmVsYXRlIHRvIHRoZSBydW4tb3JpZ2luXG4gKiB0cmFjZSBjb250ZXh0IGNhcnJpZWQgaW4gcXVldWUgbWVzc2FnZXM6XG4gKlxuICogLSBgJ2xpbmtlZCdgIChkZWZhdWx0KTogZWFjaCBpbnZvY2F0aW9uIHN0YXJ0cyBhIE5FVyByb290IHRyYWNlOyB0aGVcbiAqICAgcnVuLW9yaWdpbiBjb250ZXh0IChhbmQgdGhlIGluY29taW5nIGRlbGl2ZXJ5IGNvbnRleHQpIGFyZSBhdHRhY2hlZCBhc1xuICogICBzcGFuIGxpbmtzLiBUaGlzIGtlZXBzIHRyYWNlcyBib3VuZGVkIHBlciBpbnZvY2F0aW9uIGluc3RlYWQgb2ZcbiAqICAgc3RpdGNoaW5nIGEgbG9uZy1saXZlZCBydW4gaW50byBvbmUgZ2lhbnQgdHJhY2UuXG4gKiAtIGAnY29udGludW91cydgOiB0aGUgcmVzdG9yZWQgcnVuLW9yaWdpbiBjb250ZXh0IGJlY29tZXMgdGhlIHBhcmVudCBvZlxuICogICB0aGUgaW52b2NhdGlvbiBzcGFuIChsZWdhY3kgYmVoYXZpb3IpLCBwcm9kdWNpbmcgYSBzaW5nbGUgdHJhY2UgdGhhdFxuICogICBzcGFucyB0aGUgZW50aXJlIHJ1bi5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya2Zsb3dUcmFjZU1vZGUgPSAnbGlua2VkJyB8ICdjb250aW51b3VzJztcblxuLyoqIFVucmVjb2duaXplZCBgV09SS0ZMT1dfVFJBQ0VfTU9ERWAgdmFsdWVzIHdlIGFscmVhZHkgd2FybmVkIGFib3V0LiAqL1xuY29uc3Qgd2FybmVkVW5yZWNvZ25pemVkVHJhY2VNb2RlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBhY3RpdmUgdHJhY2UgbW9kZSBmcm9tIHRoZSBgV09SS0ZMT1dfVFJBQ0VfTU9ERWAgZW52IHZhci5cbiAqIERlZmF1bHRzIHRvIGAnbGlua2VkJ2A7IGFueSB2YWx1ZSBvdGhlciB0aGFuIGAnY29udGludW91cydgIHNlbGVjdHMgaXQuXG4gKiBVbnJlY29nbml6ZWQgbm9uLWVtcHR5IHZhbHVlcyAoZS5nLiB0eXBvcyBsaWtlIGBjb250aW5vdXNgKSBlbWl0IGFcbiAqIG9uZS10aW1lIHdhcm5pbmcgc28gc2lsZW50IGZhbGxiYWNrIHRvIGBsaW5rZWRgIGlzIGF0IGxlYXN0IHZpc2libGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3JrZmxvd1RyYWNlTW9kZSgpOiBXb3JrZmxvd1RyYWNlTW9kZSB7XG4gIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVFJBQ0VfTU9ERTtcbiAgaWYgKHZhbHVlID09PSAnY29udGludW91cycpIHJldHVybiAnY29udGludW91cyc7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJ2xpbmtlZCcgJiYgIXdhcm5lZFVucmVjb2duaXplZFRyYWNlTW9kZXMuaGFzKHZhbHVlKSkge1xuICAgIHdhcm5lZFVucmVjb2duaXplZFRyYWNlTW9kZXMuYWRkKHZhbHVlKTtcbiAgICBydW50aW1lTG9nZ2VyLndhcm4oXG4gICAgICBgVW5yZWNvZ25pemVkIFdPUktGTE9XX1RSQUNFX01PREUgdmFsdWUgXCIke3ZhbHVlfVwiOyBleHBlY3RlZCBcImxpbmtlZFwiIG9yIFwiY29udGludW91c1wiLiBGYWxsaW5nIGJhY2sgdG8gXCJsaW5rZWRcIi5gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gJ2xpbmtlZCc7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIGEgc2VyaWFsaXplZCB0cmFjZSBjYXJyaWVyIGlzIHVzYWJsZSwgaS5lLiBwcmVzZW50IGFuZFxuICogbm9uLWVtcHR5LiBgc2VyaWFsaXplVHJhY2VDYXJyaWVyKClgIHJldHVybnMgYHt9YCB3aGVuIG5vIE9URUwgU0RLIGlzXG4gKiByZWdpc3RlcmVkIG9yIG5vIHNwYW4gaXMgYWN0aXZlLCBhbmQgYHN0YXJ0KClgIGFsd2F5cyBhdHRhY2hlcyB0aGVcbiAqIGNhcnJpZXIgdG8gdGhlIGZpcnN0IHF1ZXVlIG1lc3NhZ2Ug4oCUIHNvIGFuIGVtcHR5IGNhcnJpZXIgbXVzdCBiZSB0cmVhdGVkXG4gKiB0aGUgc2FtZSBhcyBhbiBhYnNlbnQgb25lIHdoZXJldmVyIHRoZSB0cmFjZS1tb2RlIGxvZ2ljIGJyYW5jaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVc2FibGVUcmFjZUNhcnJpZXIoXG4gIGNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IGNhcnJpZXIgaXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBjYXJyaWVyICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXMoY2FycmllcikubGVuZ3RoID4gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cmFjZSBjYXJyaWVyIHRvIGF0dGFjaCB0byBtZXNzYWdlcyB0aGUgY3VycmVudCBpbnZvY2F0aW9uXG4gKiBlbnF1ZXVlcy4gSW4gYGxpbmtlZGAgbW9kZSB0aGUgT1JJR0lOQUwgcnVuLW9yaWdpbiBjYXJyaWVyIGlzIGZvcndhcmRlZFxuICogdW5jaGFuZ2VkICh3aGVuIHVzYWJsZSkgc28gZXZlcnkgZnV0dXJlIGludm9jYXRpb24gbGlua3MgYmFjayB0byB0aGUgc2FtZVxuICogb3JpZ2luOyBvdGhlcndpc2Ug4oCUIGBjb250aW51b3VzYCBtb2RlLCBvciBubyB1c2FibGUgaW5jb21pbmcgY2FycmllciDigJRcbiAqIHRoZSBjdXJyZW50IChhY3RpdmUpIGNvbnRleHQgaXMgc2VyaWFsaXplZCwgc28gdGhlIHRyYWNlIGtlZXBzIGNoYWluaW5nXG4gKiAoY29udGludW91cykgb3IgdGhlIGZpcnN0IGluc3RydW1lbnRlZCBpbnZvY2F0aW9uIGJlY29tZXMgdGhlIGRlLWZhY3RvXG4gKiBvcmlnaW4gKGxpbmtlZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0VHJhY2VDYXJyaWVyKFxuICB0cmFjZU1vZGU6IFdvcmtmbG93VHJhY2VNb2RlLFxuICBpbmNvbWluZ0NhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICByZXR1cm4gdHJhY2VNb2RlID09PSAnbGlua2VkJyAmJiBpc1VzYWJsZVRyYWNlQ2FycmllcihpbmNvbWluZ0NhcnJpZXIpXG4gICAgPyBQcm9taXNlLnJlc29sdmUoaW5jb21pbmdDYXJyaWVyKVxuICAgIDogc2VyaWFsaXplVHJhY2VDYXJyaWVyKCk7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBzcGFuIGxpbmtzIGZvciBhIHF1ZXVlLWRlbGl2ZXJlZCBpbnZvY2F0aW9uIHNwYW5cbiAqIChgd29ya2Zsb3cuZXhlY3V0ZWAgLyBgc3RlcC5leGVjdXRlYCk6XG4gKlxuICogLSBJbiBgbGlua2VkYCBtb2RlIHRoZSBpbnZvY2F0aW9uIHNwYW4gaXMgYSBDSElMRCBvZiB0aGUgbG9jYWwgZGVsaXZlcnlcbiAqICAgKGZsb3ctcm91dGUpIGNvbnRleHQsIHNvIHRoZSBvbmx5IGxpbmsgaXMgdG8gdGhlIHJ1bi1vcmlnaW4gY29udGV4dFxuICogICBmcm9tIHRoZSBtZXNzYWdlJ3MgdHJhY2UgY2FycmllciDigJQgY29ubmVjdGluZyB0aGlzIGJvdW5kZWQgcGVyLWludm9jYXRpb25cbiAqICAgdHJhY2UgYmFjayB0byB3aGVyZSB0aGUgcnVuIHdhcyBzdGFydGVkLiBUaGUgcnVuLW9yaWdpbiBjb250ZXh0IGlzIGFcbiAqICAgbGluaywgbmV2ZXIgYSBwYXJlbnQsIGFuZCByZS1lbnF1ZXVlcyBmb3J3YXJkIHRoZSBvcmlnaW5hbCBjYXJyaWVyXG4gKiAgIHVuY2hhbmdlZCwgc28gdGhlIHdob2xlIHJ1biBpcyBuZXZlciBzdGl0Y2hlZCBpbnRvIG9uZSBnaWFudCB0cmFjZS5cbiAqICAgVGhlIGxpbmsgaXMgc2tpcHBlZCB3aGVuIHRoZSBjYXJyaWVyIGlzIGFic2VudCwgZW1wdHksIG9yIGludmFsaWQuXG4gKiAtIEluIGBjb250aW51b3VzYCBtb2RlIHRoZSBydW4tb3JpZ2luIGNvbnRleHQgaXMgcmVzdG9yZWQgYXMgdGhlIHBhcmVudFxuICogICBpbnN0ZWFkLCBhbmQgdGhlIGxpbmsgcG9pbnRzIGF0IHRoZSBpbmNvbWluZyBkZWxpdmVyeSBjb250ZXh0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRJbnZvY2F0aW9uU3BhbkxpbmtzKFxuICB0cmFjZU1vZGU6IFdvcmtmbG93VHJhY2VNb2RlLFxuICBpbmNvbWluZ0NhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IFByb21pc2U8YXBpLkxpbmtbXSB8IHVuZGVmaW5lZD4ge1xuICBpZiAodHJhY2VNb2RlICE9PSAnbGlua2VkJykgcmV0dXJuIGxpbmtUb0N1cnJlbnRDb250ZXh0KCk7XG4gIGNvbnN0IG9yaWdpbkxpbmsgPSBhd2FpdCBsaW5rVG9UcmFjZUNhcnJpZXIoXG4gICAgaXNVc2FibGVUcmFjZUNhcnJpZXIoaW5jb21pbmdDYXJyaWVyKSA/IGluY29taW5nQ2FycmllciA6IHVuZGVmaW5lZFxuICApO1xuICByZXR1cm4gb3JpZ2luTGluayA/IFtvcmlnaW5MaW5rXSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBjdXJyZW50IHRyYWNlIGNvbnRleHQgaW50byBhIGZvcm1hdCB0aGF0IGNhbiBiZSBwYXNzZWQgdGhyb3VnaCBxdWV1ZXNcbiAqIEByZXR1cm5zIEEgcmVjb3JkIG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSB0cmFjZSBjb250ZXh0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXJpYWxpemVUcmFjZUNhcnJpZXIoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IG90ZWwgPSBhd2FpdCBPdGVsQXBpLnZhbHVlO1xuICBpZiAoIW90ZWwpIHJldHVybiB7fTtcbiAgY29uc3QgY2FycmllcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAvLyBJbmplY3QgdGhlIGN1cnJlbnQgY29udGV4dCBpbnRvIHRoZSBjYXJyaWVyXG4gIG90ZWwucHJvcGFnYXRpb24uaW5qZWN0KG90ZWwuY29udGV4dC5hY3RpdmUoKSwgY2Fycmllcik7XG4gIHJldHVybiBjYXJyaWVyO1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplcyB0cmFjZSBjb250ZXh0IGFuZCByZXR1cm5zIGEgY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIHRoZSB0cmFjZVxuICogQHBhcmFtIHRyYWNlQ2FycmllciBUaGUgc2VyaWFsaXplZCB0cmFjZSBjb250ZXh0XG4gKiBAcmV0dXJucyBPcGVuVGVsZW1ldHJ5IGNvbnRleHQgd2l0aCB0aGUgcmVzdG9yZWQgdHJhY2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc2VyaWFsaXplVHJhY2VDYXJyaWVyKFxuICB0cmFjZUNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbikge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm47XG4gIC8vIEV4dHJhY3QgdGhlIGNvbnRleHQgZnJvbSB0aGUgY2FycmllclxuICByZXR1cm4gb3RlbC5wcm9wYWdhdGlvbi5leHRyYWN0KG90ZWwuY29udGV4dC5hY3RpdmUoKSwgdHJhY2VDYXJyaWVyKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgZnVuY3Rpb24gd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgZGVzZXJpYWxpemVkIHRyYWNlXG4gKiBAcGFyYW0gdHJhY2VDYXJyaWVyIFRoZSBzZXJpYWxpemVkIHRyYWNlIGNhcnJpZXIgKG9wdGlvbmFsKVxuICogQHBhcmFtIGZuIFRoZSBmdW5jdGlvbiB0byBydW4gd2l0aGluIHRoZSB0cmFjZSBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFRyYWNlQ29udGV4dDxUPihcbiAgdHJhY2VDYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkLFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGlmICghdHJhY2VDYXJyaWVyKSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gZm4oKTtcblxuICBjb25zdCBleHRyYWN0ZWRDb250ZXh0ID0gYXdhaXQgZGVzZXJpYWxpemVUcmFjZUNhcnJpZXIodHJhY2VDYXJyaWVyKTtcbiAgaWYgKCFleHRyYWN0ZWRDb250ZXh0KSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICByZXR1cm4gb3RlbC5jb250ZXh0LndpdGgoZXh0cmFjdGVkQ29udGV4dCwgYXN5bmMgKCkgPT4gYXdhaXQgZm4oKSk7XG59XG5cbmNvbnN0IE90ZWxBcGkgPSBvbmNlKGFzeW5jICgpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgaW1wb3J0KCdAb3BlbnRlbGVtZXRyeS9hcGknKTtcbiAgfSBjYXRjaCB7XG4gICAgcnVudGltZUxvZ2dlci5pbmZvKCdPcGVuVGVsZW1ldHJ5IG5vdCBhdmFpbGFibGUsIHRyYWNpbmcgd2lsbCBiZSBkaXNhYmxlZCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59KTtcblxuY29uc3QgVHJhY2VyID0gb25jZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGFwaSA9IGF3YWl0IE90ZWxBcGkudmFsdWU7XG4gIGlmICghYXBpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGFwaS50cmFjZS5nZXRUcmFjZXIoJ3dvcmtmbG93Jyk7XG59KTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYWNlPFQ+KFxuICBzcGFuTmFtZTogc3RyaW5nLFxuICAuLi5hcmdzOlxuICAgIHwgW2ZuOiAoc3Bhbj86IFNwYW4pID0+IFByb21pc2U8VD5dXG4gICAgfCBbb3B0czogU3Bhbk9wdGlvbnMsIGZuOiAoc3Bhbj86IFNwYW4pID0+IFByb21pc2U8VD5dXG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgW3RyYWNlciwgb3RlbF0gPSBhd2FpdCBQcm9taXNlLmFsbChbVHJhY2VyLnZhbHVlLCBPdGVsQXBpLnZhbHVlXSk7XG4gIGNvbnN0IHsgZm4sIG9wdHMgfSA9XG4gICAgdHlwZW9mIGFyZ3NbMF0gPT09ICdmdW5jdGlvbidcbiAgICAgID8geyBmbjogYXJnc1swXSwgb3B0czoge30gfVxuICAgICAgOiB7IGZuOiBhcmdzWzFdLCBvcHRzOiBhcmdzWzBdIH07XG4gIGlmICghZm4pIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gdG8gdHJhY2UgbXVzdCBiZSBwcm92aWRlZCcpO1xuXG4gIGlmICghdHJhY2VyIHx8ICFvdGVsKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gIH1cblxuICByZXR1cm4gdHJhY2VyLnN0YXJ0QWN0aXZlU3BhbihzcGFuTmFtZSwgb3B0cywgYXN5bmMgKHNwYW4pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oc3Bhbik7XG4gICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IG90ZWwuU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgY29kZTogb3RlbC5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogKGUgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICAgIGFwcGx5V29ya2Zsb3dTdXNwZW5zaW9uVG9TcGFuKGUsIG90ZWwsIHNwYW4pO1xuICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc3Bhbi5lbmQoKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgd29ya2Zsb3cgc3VzcGVuc2lvbiBhdHRyaWJ1dGVzIHRvIHRoZSBnaXZlbiBzcGFuIGlmIHRoZSBlcnJvciBpcyBhIFdvcmtmbG93U3VzcGVuc2lvblxuICogd2hpY2ggaXMgdGVjaG5pY2FsbHkgbm90IGFuIGVycm9yLCBidXQgYW4gYWxnZWJyYWljIGVmZmVjdCBpbmRpY2F0aW5nIHN1c3BlbnNpb24uXG4gKi9cbmZ1bmN0aW9uIGFwcGx5V29ya2Zsb3dTdXNwZW5zaW9uVG9TcGFuKFxuICBlcnJvcjogdW5rbm93bixcbiAgb3RlbDogdHlwZW9mIGFwaSxcbiAgc3BhbjogYXBpLlNwYW5cbikge1xuICBpZiAoIWVycm9yIHx8ICFXb3JrZmxvd1N1c3BlbnNpb24uaXMoZXJyb3IpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBvdGVsLlNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgIC4uLkF0dHIuV29ya2Zsb3dTdXNwZW5zaW9uU3RhdGUoJ3N1c3BlbmRlZCcpLFxuICAgIC4uLkF0dHIuV29ya2Zsb3dTdXNwZW5zaW9uU3RlcENvdW50KGVycm9yLnN0ZXBDb3VudCksXG4gICAgLi4uQXR0ci5Xb3JrZmxvd1N1c3BlbnNpb25Ib29rQ291bnQoZXJyb3IuaG9va0NvdW50KSxcbiAgICAuLi5BdHRyLldvcmtmbG93U3VzcGVuc2lvbldhaXRDb3VudChlcnJvci53YWl0Q291bnQpLFxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNwYW5Db250ZXh0Rm9yVHJhY2VDYXJyaWVyKFxuICBjYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4pIHtcbiAgY29uc3QgW2Rlc2VyaWFsaXplZCwgb3RlbF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZGVzZXJpYWxpemVUcmFjZUNhcnJpZXIoY2FycmllciksXG4gICAgT3RlbEFwaS52YWx1ZSxcbiAgXSk7XG4gIGlmICghZGVzZXJpYWxpemVkIHx8ICFvdGVsKSByZXR1cm47XG4gIHJldHVybiBvdGVsLnRyYWNlLmdldFNwYW5Db250ZXh0KGRlc2VyaWFsaXplZCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBY3RpdmVTcGFuKCkge1xuICByZXR1cm4gYXdhaXQgd2l0aE90ZWwoKG90ZWwpID0+IG90ZWwudHJhY2UuZ2V0QWN0aXZlU3BhbigpKTtcbn1cblxuLyoqXG4gKiBXcmFwcyBhbGwgbWV0aG9kcyBvZiBhbiBvYmplY3Qgd2l0aCB0cmFjaW5nIHNwYW5zLlxuICogQHBhcmFtIHByZWZpeCAtIFByZWZpeCBmb3Igc3BhbiBuYW1lcyAoZS5nLiwgXCJXT1JMRC5ydW5zXCIpXG4gKiBAcGFyYW0gbyAtIE9iamVjdCB3aXRoIG1ldGhvZHMgdG8gaW5zdHJ1bWVudFxuICogQHJldHVybnMgSW5zdHJ1bWVudGVkIG9iamVjdCB3aXRoIHNhbWUgaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0cnVtZW50T2JqZWN0PFQgZXh0ZW5kcyBvYmplY3Q+KHByZWZpeDogc3RyaW5nLCBvOiBUKTogVCB7XG4gIGNvbnN0IGhhbmRsZXJzID0ge30gYXMgVDtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobykgYXMgKGtleW9mIFQpW10pIHtcbiAgICBpZiAodHlwZW9mIG9ba2V5XSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaGFuZGxlcnNba2V5XSA9IG9ba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZiA9IG9ba2V5XTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIGhhbmRsZXJzW2tleV0gPSBhc3luYyAoLi4uYXJnczogYW55W10pID0+XG4gICAgICAgIHRyYWNlKGAke3ByZWZpeH0uJHtTdHJpbmcoa2V5KX1gLCB7fSwgKCkgPT4gZiguLi5hcmdzKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBoYW5kbGVycztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNwYW5LaW5kKGZpZWxkOiBrZXlvZiB0eXBlb2YgU3BhbktpbmQpIHtcbiAgcmV0dXJuIHdpdGhPdGVsKCh4KSA9PiB4LlNwYW5LaW5kW2ZpZWxkXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoT3RlbDxUPihcbiAgZm46IChvdGVsOiB0eXBlb2YgYXBpKSA9PiBUXG4pOiBQcm9taXNlPEF3YWl0ZWQ8VD4gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3Qgb3RlbCA9IGF3YWl0IE90ZWxBcGkudmFsdWU7XG4gIGlmICghb3RlbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIGF3YWl0IGZuKG90ZWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua1RvQ3VycmVudENvbnRleHQoKTogUHJvbWlzZTxbYXBpLkxpbmtdIHwgdW5kZWZpbmVkPiB7XG4gIHJldHVybiB3aXRoT3RlbCgob3RlbCk6IFthcGkuTGlua10gfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBvdGVsLnRyYWNlLmdldEFjdGl2ZVNwYW4oKT8uc3BhbkNvbnRleHQoKTtcbiAgICBpZiAoIWNvbnRleHQpIHJldHVybjtcbiAgICByZXR1cm4gW3sgY29udGV4dCB9XTtcbiAgfSk7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgc3BhbiBsaW5rIHBvaW50aW5nIGF0IHRoZSBzcGFuIGNvbnRleHQgZW1iZWRkZWQgaW4gYSBzZXJpYWxpemVkXG4gKiB0cmFjZSBjYXJyaWVyIChlLmcuIHRoZSBydW4tb3JpZ2luIGNvbnRleHQgZmxvd2luZyB0aHJvdWdoIHF1ZXVlXG4gKiBtZXNzYWdlcykuIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiBPVEVMIGlzIHVuYXZhaWxhYmxlLCB0aGUgY2FycmllciBpc1xuICogYWJzZW50LCBvciBpdCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgc3BhbiBjb250ZXh0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlua1RvVHJhY2VDYXJyaWVyKFxuICBjYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPGFwaS5MaW5rIHwgdW5kZWZpbmVkPiB7XG4gIGlmICghY2FycmllcikgcmV0dXJuO1xuICBjb25zdCBbY29udGV4dCwgb3RlbF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZ2V0U3BhbkNvbnRleHRGb3JUcmFjZUNhcnJpZXIoY2FycmllciksXG4gICAgT3RlbEFwaS52YWx1ZSxcbiAgXSk7XG4gIGlmICghY29udGV4dCB8fCAhb3RlbCkgcmV0dXJuO1xuICBpZiAoIW90ZWwudHJhY2UuaXNTcGFuQ29udGV4dFZhbGlkKGNvbnRleHQpKSByZXR1cm47XG4gIHJldHVybiB7IGNvbnRleHQgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCYWdnYWdlIFByb3BhZ2F0aW9uIFV0aWxpdGllc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogV29ya2Zsb3cgY29udGV4dCB0byBwcm9wYWdhdGUgdmlhIGJhZ2dhZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd0JhZ2dhZ2VDb250ZXh0IHtcbiAgd29ya2Zsb3dSdW5JZDogc3RyaW5nO1xuICB3b3JrZmxvd05hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZXRzIHdvcmtmbG93IGNvbnRleHQgYXMgT1RFTCBiYWdnYWdlIGZvciBhdXRvbWF0aWMgcHJvcGFnYXRpb24uXG4gKiBCYWdnYWdlIGlzIHByb3BhZ2F0ZWQgYWNyb3NzIHNlcnZpY2UgYm91bmRhcmllcyB2aWEgSFRUUCBoZWFkZXJzLlxuICogQHBhcmFtIGNvbnRleHQgLSBXb3JrZmxvdyBjb250ZXh0IHRvIHNldCBhcyBiYWdnYWdlXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRvIHJ1biB3aXRoaW4gdGhlIGJhZ2dhZ2UgY29udGV4dFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFdvcmtmbG93QmFnZ2FnZTxUPihcbiAgY29udGV4dDogV29ya2Zsb3dCYWdnYWdlQ29udGV4dCxcbiAgZm46ICgpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gZm4oKTtcblxuICAvLyBDcmVhdGUgYmFnZ2FnZSB3aXRoIHdvcmtmbG93IGNvbnRleHRcbiAgY29uc3QgYmFnZ2FnZSA9IG90ZWwucHJvcGFnYXRpb24uY3JlYXRlQmFnZ2FnZSh7XG4gICAgJ3dvcmtmbG93LnJ1bl9pZCc6IHsgdmFsdWU6IGNvbnRleHQud29ya2Zsb3dSdW5JZCB9LFxuICAgICd3b3JrZmxvdy5uYW1lJzogeyB2YWx1ZTogY29udGV4dC53b3JrZmxvd05hbWUgfSxcbiAgfSk7XG5cbiAgLy8gU2V0IGJhZ2dhZ2UgaW4gY29udGV4dCBhbmQgcnVuIGZ1bmN0aW9uXG4gIGNvbnN0IGNvbnRleHRXaXRoQmFnZ2FnZSA9IG90ZWwucHJvcGFnYXRpb24uc2V0QmFnZ2FnZShcbiAgICBvdGVsLmNvbnRleHQuYWN0aXZlKCksXG4gICAgYmFnZ2FnZVxuICApO1xuXG4gIHJldHVybiBvdGVsLmNvbnRleHQud2l0aChjb250ZXh0V2l0aEJhZ2dhZ2UsICgpID0+IGZuKCkpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB3b3JrZmxvdyBjb250ZXh0IGZyb20gT1RFTCBiYWdnYWdlLlxuICogQHJldHVybnMgV29ya2Zsb3cgY29udGV4dCBpZiBwcmVzZW50IGluIGJhZ2dhZ2UsIHVuZGVmaW5lZCBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdvcmtmbG93QmFnZ2FnZSgpOiBQcm9taXNlPFxuICBXb3JrZmxvd0JhZ2dhZ2VDb250ZXh0IHwgdW5kZWZpbmVkXG4+IHtcbiAgY29uc3Qgb3RlbCA9IGF3YWl0IE90ZWxBcGkudmFsdWU7XG4gIGlmICghb3RlbCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBiYWdnYWdlID0gb3RlbC5wcm9wYWdhdGlvbi5nZXRCYWdnYWdlKG90ZWwuY29udGV4dC5hY3RpdmUoKSk7XG4gIGlmICghYmFnZ2FnZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBydW5JZCA9IGJhZ2dhZ2UuZ2V0RW50cnkoJ3dvcmtmbG93LnJ1bl9pZCcpPy52YWx1ZTtcbiAgY29uc3QgbmFtZSA9IGJhZ2dhZ2UuZ2V0RW50cnkoJ3dvcmtmbG93Lm5hbWUnKT8udmFsdWU7XG5cbiAgaWYgKCFydW5JZCB8fCAhbmFtZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICByZXR1cm4ge1xuICAgIHdvcmtmbG93UnVuSWQ6IHJ1bklkLFxuICAgIHdvcmtmbG93TmFtZTogbmFtZSxcbiAgfTtcbn1cbiJdfQ==
package/dist/types.d.ts CHANGED
@@ -1,5 +1,11 @@
1
1
  export declare function getErrorName(v: unknown): string;
2
2
  export declare function getErrorStack(v: unknown): string;
3
+ export declare function isAbortError(value: unknown): value is {
4
+ name: 'AbortError';
5
+ message: string;
6
+ stack?: string;
7
+ };
8
+ export declare function promoteAbortErrorToFatal(value: unknown): unknown;
3
9
  export interface NormalizedUnknownError {
4
10
  name: string;
5
11
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAK/C;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKhD;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AA2CD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,sBAAsB,CAAC,CAmBjC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAK/C;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKhD;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAYlE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAUhE;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AA2CD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,sBAAsB,CAAC,CAmBjC"}
package/dist/types.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { types } from 'node:util';
2
+ import { FatalError } from '@workflow/errors';
2
3
  export function getErrorName(v) {
3
4
  if (types.isNativeError(v)) {
4
5
  return v.name;
@@ -11,6 +12,27 @@ export function getErrorStack(v) {
11
12
  }
12
13
  return '';
13
14
  }
15
+ export function isAbortError(value) {
16
+ return (typeof value === 'object' &&
17
+ value !== null &&
18
+ 'name' in value &&
19
+ value.name === 'AbortError' &&
20
+ 'message' in value &&
21
+ typeof value.message === 'string' &&
22
+ (!('stack' in value) ||
23
+ value.stack === undefined ||
24
+ typeof value.stack === 'string'));
25
+ }
26
+ export function promoteAbortErrorToFatal(value) {
27
+ if (!isAbortError(value) || FatalError.is(value)) {
28
+ return value;
29
+ }
30
+ const fatalError = new FatalError(`Aborted: ${value.message}`);
31
+ if (value.stack) {
32
+ fatalError.stack = value.stack;
33
+ }
34
+ return fatalError;
35
+ }
14
36
  function isThenable(value) {
15
37
  return (typeof value === 'object' &&
16
38
  value !== null &&
@@ -72,4 +94,4 @@ export async function normalizeUnknownError(value) {
72
94
  }
73
95
  return normalizeSyncError(value);
74
96
  }
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVsQyxNQUFNLFVBQVUsWUFBWSxDQUFDLENBQVU7SUFDckMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxDQUFVO0lBQ3RDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQVFELFNBQVMsVUFBVSxDQUFDLEtBQWM7SUFDaEMsT0FBTyxDQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsS0FBSyxLQUFLLElBQUk7UUFDZCxNQUFNLElBQUksS0FBSztRQUNmLE9BQVEsS0FBNEIsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUN6RCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsQ0FBVTtJQUNwQyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPO1lBQ0wsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1lBQ1osT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO1lBQ2xCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7U0FDckIsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFCLE9BQU87WUFDTCxJQUFJLEVBQUUsT0FBTztZQUNiLE9BQU8sRUFBRSxDQUFDO1lBQ1YsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE9BQU87WUFDTCxJQUFJLEVBQUUsT0FBTztZQUNiLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMxQixLQUFLLEVBQUUsRUFBRTtTQUNWLENBQUM7SUFDSixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTztZQUNMLElBQUksRUFBRSxPQUFPO1lBQ2IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDbEIsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxxQkFBcUIsQ0FDekMsS0FBYztJQUVkLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUM7WUFDN0IsTUFBTSxVQUFVLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6RCxPQUFPO2dCQUNMLEdBQUcsVUFBVTtnQkFDYixPQUFPLEVBQUUsc0JBQXNCLFVBQVUsQ0FBQyxPQUFPLEVBQUU7YUFDcEQsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sVUFBVSxHQUFHLE1BQU0scUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDMUQsT0FBTztnQkFDTCxHQUFHLFVBQVU7Z0JBQ2IsT0FBTyxFQUFFLHNCQUFzQixVQUFVLENBQUMsT0FBTyxFQUFFO2FBQ3BELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGVzIH0gZnJvbSAnbm9kZTp1dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9yTmFtZSh2OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVzLmlzTmF0aXZlRXJyb3IodikpIHtcbiAgICByZXR1cm4gdi5uYW1lO1xuICB9XG4gIHJldHVybiAnRXJyb3InO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXJyb3JTdGFjayh2OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVzLmlzTmF0aXZlRXJyb3IodikpIHtcbiAgICByZXR1cm4gdi5zdGFjayA/PyAnJztcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9ybWFsaXplZFVua25vd25FcnJvciB7XG4gIG5hbWU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzdGFjazogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgJ3RoZW4nIGluIHZhbHVlICYmXG4gICAgdHlwZW9mICh2YWx1ZSBhcyB7IHRoZW4/OiB1bmtub3duIH0pLnRoZW4gPT09ICdmdW5jdGlvbidcbiAgKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU3luY0Vycm9yKHY6IHVua25vd24pOiBOb3JtYWxpemVkVW5rbm93bkVycm9yIHtcbiAgaWYgKHR5cGVzLmlzTmF0aXZlRXJyb3IodikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdi5uYW1lLFxuICAgICAgbWVzc2FnZTogdi5tZXNzYWdlLFxuICAgICAgc3RhY2s6IHYuc3RhY2sgPz8gJycsXG4gICAgfTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6IHYsXG4gICAgICBzdGFjazogJycsXG4gICAgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdFcnJvcicsXG4gICAgICBtZXNzYWdlOiBKU09OLnN0cmluZ2lmeSh2KSxcbiAgICAgIHN0YWNrOiAnJyxcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6IFN0cmluZyh2KSxcbiAgICAgIHN0YWNrOiAnJyxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyB1bmtub3duIHRocm93biB2YWx1ZXMgaW50byBhIHN0YWJsZSBlcnJvciBzaGFwZS5cbiAqIFRoaXMgaGFuZGxlcyBQcm9taXNlL3RoZW5hYmxlIHRocm93IHZhbHVlcyBzbyBsb2dzL2V2ZW50cyBuZXZlciBlbmQgdXBcbiAqIHdpdGggdW5oZWxwZnVsIFwiW29iamVjdCBQcm9taXNlXVwiIG1lc3NhZ2VzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbm9ybWFsaXplVW5rbm93bkVycm9yKFxuICB2YWx1ZTogdW5rbm93blxuKTogUHJvbWlzZTxOb3JtYWxpemVkVW5rbm93bkVycm9yPiB7XG4gIGlmIChpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHZhbHVlO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGF3YWl0IG5vcm1hbGl6ZVVua25vd25FcnJvcihyZXNvbHZlZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ub3JtYWxpemVkLFxuICAgICAgICBtZXNzYWdlOiBgUHJvbWlzZSByZWplY3Rpb246ICR7bm9ybWFsaXplZC5tZXNzYWdlfWAsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHJlamVjdGlvbikge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGF3YWl0IG5vcm1hbGl6ZVVua25vd25FcnJvcihyZWplY3Rpb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubm9ybWFsaXplZCxcbiAgICAgICAgbWVzc2FnZTogYFByb21pc2UgcmVqZWN0aW9uOiAke25vcm1hbGl6ZWQubWVzc2FnZX1gLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplU3luY0Vycm9yKHZhbHVlKTtcbn1cbiJdfQ==
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFOUMsTUFBTSxVQUFVLFlBQVksQ0FBQyxDQUFVO0lBQ3JDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsQ0FBVTtJQUN0QyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixLQUFjO0lBRWQsT0FBTyxDQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsS0FBSyxLQUFLLElBQUk7UUFDZCxNQUFNLElBQUksS0FBSztRQUNmLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWTtRQUMzQixTQUFTLElBQUksS0FBSztRQUNsQixPQUFPLEtBQUssQ0FBQyxPQUFPLEtBQUssUUFBUTtRQUNqQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUztZQUN6QixPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQ25DLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFDLEtBQWM7SUFDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsWUFBWSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvRCxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixVQUFVLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFRRCxTQUFTLFVBQVUsQ0FBQyxLQUFjO0lBQ2hDLE9BQU8sQ0FDTCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLEtBQUssS0FBSyxJQUFJO1FBQ2QsTUFBTSxJQUFJLEtBQUs7UUFDZixPQUFRLEtBQTRCLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FDekQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLENBQVU7SUFDcEMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0IsT0FBTztZQUNMLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtZQUNaLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztZQUNsQixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO1NBQ3JCLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMxQixPQUFPO1lBQ0wsSUFBSSxFQUFFLE9BQU87WUFDYixPQUFPLEVBQUUsQ0FBQztZQUNWLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxPQUFPO1lBQ0wsSUFBSSxFQUFFLE9BQU87WUFDYixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU87WUFDTCxJQUFJLEVBQUUsT0FBTztZQUNiLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLEtBQWM7SUFFZCxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDO1lBQzdCLE1BQU0sVUFBVSxHQUFHLE1BQU0scUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekQsT0FBTztnQkFDTCxHQUFHLFVBQVU7Z0JBQ2IsT0FBTyxFQUFFLHNCQUFzQixVQUFVLENBQUMsT0FBTyxFQUFFO2FBQ3BELENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxTQUFTLEVBQUUsQ0FBQztZQUNuQixNQUFNLFVBQVUsR0FBRyxNQUFNLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFELE9BQU87Z0JBQ0wsR0FBRyxVQUFVO2dCQUNiLE9BQU8sRUFBRSxzQkFBc0IsVUFBVSxDQUFDLE9BQU8sRUFBRTthQUNwRCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlcyB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgeyBGYXRhbEVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvck5hbWUodjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlcy5pc05hdGl2ZUVycm9yKHYpKSB7XG4gICAgcmV0dXJuIHYubmFtZTtcbiAgfVxuICByZXR1cm4gJ0Vycm9yJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9yU3RhY2sodjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlcy5pc05hdGl2ZUVycm9yKHYpKSB7XG4gICAgcmV0dXJuIHYuc3RhY2sgPz8gJyc7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBYm9ydEVycm9yKFxuICB2YWx1ZTogdW5rbm93blxuKTogdmFsdWUgaXMgeyBuYW1lOiAnQWJvcnRFcnJvcic7IG1lc3NhZ2U6IHN0cmluZzsgc3RhY2s/OiBzdHJpbmcgfSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgJ25hbWUnIGluIHZhbHVlICYmXG4gICAgdmFsdWUubmFtZSA9PT0gJ0Fib3J0RXJyb3InICYmXG4gICAgJ21lc3NhZ2UnIGluIHZhbHVlICYmXG4gICAgdHlwZW9mIHZhbHVlLm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmXG4gICAgKCEoJ3N0YWNrJyBpbiB2YWx1ZSkgfHxcbiAgICAgIHZhbHVlLnN0YWNrID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHR5cGVvZiB2YWx1ZS5zdGFjayA9PT0gJ3N0cmluZycpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9tb3RlQWJvcnRFcnJvclRvRmF0YWwodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKCFpc0Fib3J0RXJyb3IodmFsdWUpIHx8IEZhdGFsRXJyb3IuaXModmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgY29uc3QgZmF0YWxFcnJvciA9IG5ldyBGYXRhbEVycm9yKGBBYm9ydGVkOiAke3ZhbHVlLm1lc3NhZ2V9YCk7XG4gIGlmICh2YWx1ZS5zdGFjaykge1xuICAgIGZhdGFsRXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgfVxuICByZXR1cm4gZmF0YWxFcnJvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3JtYWxpemVkVW5rbm93bkVycm9yIHtcbiAgbmFtZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHN0YWNrOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGlzVGhlbmFibGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAndGhlbicgaW4gdmFsdWUgJiZcbiAgICB0eXBlb2YgKHZhbHVlIGFzIHsgdGhlbj86IHVua25vd24gfSkudGhlbiA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTeW5jRXJyb3IodjogdW5rbm93bik6IE5vcm1hbGl6ZWRVbmtub3duRXJyb3Ige1xuICBpZiAodHlwZXMuaXNOYXRpdmVFcnJvcih2KSkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB2Lm5hbWUsXG4gICAgICBtZXNzYWdlOiB2Lm1lc3NhZ2UsXG4gICAgICBzdGFjazogdi5zdGFjayA/PyAnJyxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnRXJyb3InLFxuICAgICAgbWVzc2FnZTogdixcbiAgICAgIHN0YWNrOiAnJyxcbiAgICB9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6IEpTT04uc3RyaW5naWZ5KHYpLFxuICAgICAgc3RhY2s6ICcnLFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnRXJyb3InLFxuICAgICAgbWVzc2FnZTogU3RyaW5nKHYpLFxuICAgICAgc3RhY2s6ICcnLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIHVua25vd24gdGhyb3duIHZhbHVlcyBpbnRvIGEgc3RhYmxlIGVycm9yIHNoYXBlLlxuICogVGhpcyBoYW5kbGVzIFByb21pc2UvdGhlbmFibGUgdGhyb3cgdmFsdWVzIHNvIGxvZ3MvZXZlbnRzIG5ldmVyIGVuZCB1cFxuICogd2l0aCB1bmhlbHBmdWwgXCJbb2JqZWN0IFByb21pc2VdXCIgbWVzc2FnZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBub3JtYWxpemVVbmtub3duRXJyb3IoXG4gIHZhbHVlOiB1bmtub3duXG4pOiBQcm9taXNlPE5vcm1hbGl6ZWRVbmtub3duRXJyb3I+IHtcbiAgaWYgKGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgdmFsdWU7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gYXdhaXQgbm9ybWFsaXplVW5rbm93bkVycm9yKHJlc29sdmVkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5vcm1hbGl6ZWQsXG4gICAgICAgIG1lc3NhZ2U6IGBQcm9taXNlIHJlamVjdGlvbjogJHtub3JtYWxpemVkLm1lc3NhZ2V9YCxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAocmVqZWN0aW9uKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gYXdhaXQgbm9ybWFsaXplVW5rbm93bkVycm9yKHJlamVjdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ub3JtYWxpemVkLFxuICAgICAgICBtZXNzYWdlOiBgUHJvbWlzZSByZWplY3Rpb246ICR7bm9ybWFsaXplZC5tZXNzYWdlfWAsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVTeW5jRXJyb3IodmFsdWUpO1xufVxuIl19
package/dist/util.d.ts CHANGED
@@ -1,12 +1,13 @@
1
1
  /**
2
- * Builds a workflow suspension log message based on the counts of steps, hooks, and waits.
3
- * @param runId - The workflow run ID
2
+ * Builds a workflow suspension log message based on the counts of steps,
3
+ * hooks, and waits. The structured logger attaches the run context, so the
4
+ * message itself only describes what's being enqueued.
4
5
  * @param stepCount - Number of steps to be enqueued
5
6
  * @param hookCount - Number of hooks to be enqueued
6
7
  * @param waitCount - Number of waits to be enqueued
7
8
  * @returns The formatted log message or null if all counts are 0
8
9
  */
9
- export declare function buildWorkflowSuspensionMessage(runId: string, stepCount: number, hookCount: number, waitCount: number): string | null;
10
+ export declare function buildWorkflowSuspensionMessage(stepCount: number, hookCount: number, waitCount: number): string | null;
10
11
  /**
11
12
  * Generates a stream ID for a workflow run.
12
13
  * User-defined streams include a "user" segment for isolation from future system-defined streams.
@@ -18,8 +19,17 @@ export declare function buildWorkflowSuspensionMessage(runId: string, stepCount:
18
19
  */
19
20
  export declare function getWorkflowRunStreamId(runId: string, namespace?: string): string;
20
21
  /**
21
- * A small wrapper around `waitUntil` that also returns
22
- * the result of the awaited promise.
22
+ * Generate a stream ID for an abort signal's backing stream.
23
+ * Uses the "_system_abort" namespace to isolate from user-defined streams.
24
+ *
25
+ * @param id - A unique identifier (typically a ULID)
26
+ * @returns The stream ID in format: `strm_{id}_system_abort`
27
+ */
28
+ export declare function getAbortStreamId(id: string): string;
29
+ /**
30
+ * Derive the abort stream name from a hook token.
31
+ * Hook tokens use the format `abrt_{id}`, and the corresponding stream is
32
+ * `strm_{id}_system_abort`.
23
33
  */
24
- export declare function waitedUntil<T>(fn: () => Promise<T>): Promise<T>;
34
+ export declare function getAbortStreamIdFromToken(hookToken: string): string;
25
35
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CA6Bf;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,UAUvE;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAUrE"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CA6Bf;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,UAUvE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,UAE1C;AAID;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOnE"}
package/dist/util.js CHANGED
@@ -1,14 +1,14 @@
1
- import { waitUntil } from '@vercel/functions';
2
1
  import { pluralize } from '@workflow/utils';
3
2
  /**
4
- * Builds a workflow suspension log message based on the counts of steps, hooks, and waits.
5
- * @param runId - The workflow run ID
3
+ * Builds a workflow suspension log message based on the counts of steps,
4
+ * hooks, and waits. The structured logger attaches the run context, so the
5
+ * message itself only describes what's being enqueued.
6
6
  * @param stepCount - Number of steps to be enqueued
7
7
  * @param hookCount - Number of hooks to be enqueued
8
8
  * @param waitCount - Number of waits to be enqueued
9
9
  * @returns The formatted log message or null if all counts are 0
10
10
  */
11
- export function buildWorkflowSuspensionMessage(runId, stepCount, hookCount, waitCount) {
11
+ export function buildWorkflowSuspensionMessage(stepCount, hookCount, waitCount) {
12
12
  if (stepCount === 0 && hookCount === 0 && waitCount === 0) {
13
13
  return null;
14
14
  }
@@ -33,7 +33,7 @@ export function buildWorkflowSuspensionMessage(runId, stepCount, hookCount, wait
33
33
  resumeMsgParts.push('timers have elapsed');
34
34
  }
35
35
  const resumeMsg = resumeMsgParts.join(' and ');
36
- return `[Workflows] "${runId}" - ${parts.join(' and ')} to be enqueued\n Workflow will suspend and resume when ${resumeMsg}`;
36
+ return `${parts.join(' and ')} to be enqueued\n Workflow will suspend and resume when ${resumeMsg}`;
37
37
  }
38
38
  /**
39
39
  * Generates a stream ID for a workflow run.
@@ -54,16 +54,25 @@ export function getWorkflowRunStreamId(runId, namespace) {
54
54
  return `${streamId}_${encodedNamespace}`;
55
55
  }
56
56
  /**
57
- * A small wrapper around `waitUntil` that also returns
58
- * the result of the awaited promise.
57
+ * Generate a stream ID for an abort signal's backing stream.
58
+ * Uses the "_system_abort" namespace to isolate from user-defined streams.
59
+ *
60
+ * @param id - A unique identifier (typically a ULID)
61
+ * @returns The stream ID in format: `strm_{id}_system_abort`
62
+ */
63
+ export function getAbortStreamId(id) {
64
+ return `strm_${id}_system_abort`;
65
+ }
66
+ const ABORT_TOKEN_PREFIX = 'abrt_';
67
+ /**
68
+ * Derive the abort stream name from a hook token.
69
+ * Hook tokens use the format `abrt_{id}`, and the corresponding stream is
70
+ * `strm_{id}_system_abort`.
59
71
  */
60
- export async function waitedUntil(fn) {
61
- const result = fn();
62
- waitUntil(result.catch(() => {
63
- // Ignore error from the promise being rejected.
64
- // It's expected that the invoker of `waitedUntil`
65
- // will handle the error.
66
- }));
67
- return result;
72
+ export function getAbortStreamIdFromToken(hookToken) {
73
+ if (!hookToken.startsWith(ABORT_TOKEN_PREFIX)) {
74
+ throw new Error(`Invalid abort hook token format: expected "abrt_" prefix, got "${hookToken}"`);
75
+ }
76
+ return getAbortStreamId(hookToken.slice(ABORT_TOKEN_PREFIX.length));
68
77
  }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFNUM7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSw4QkFBOEIsQ0FDNUMsS0FBYSxFQUNiLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLFNBQWlCO0lBRWpCLElBQUksU0FBUyxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDakIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO0lBQ3BDLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xCLGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEIsY0FBYyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixjQUFjLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFL0MsT0FBTyxnQkFBZ0IsS0FBSyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLDREQUE0RCxTQUFTLEVBQUUsQ0FBQztBQUNoSSxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBYSxFQUFFLFNBQWtCO0lBQ3RFLE1BQU0sUUFBUSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUMzRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsaUdBQWlHO0lBQ2pHLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUMvRCxXQUFXLENBQ1osQ0FBQztJQUNGLE9BQU8sR0FBRyxRQUFRLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQUMzQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUksRUFBb0I7SUFDdkQsTUFBTSxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDcEIsU0FBUyxDQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ2hCLGdEQUFnRDtRQUNoRCxrREFBa0Q7UUFDbEQseUJBQXlCO0lBQzNCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2FpdFVudGlsIH0gZnJvbSAnQHZlcmNlbC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgcGx1cmFsaXplIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcblxuLyoqXG4gKiBCdWlsZHMgYSB3b3JrZmxvdyBzdXNwZW5zaW9uIGxvZyBtZXNzYWdlIGJhc2VkIG9uIHRoZSBjb3VudHMgb2Ygc3RlcHMsIGhvb2tzLCBhbmQgd2FpdHMuXG4gKiBAcGFyYW0gcnVuSWQgLSBUaGUgd29ya2Zsb3cgcnVuIElEXG4gKiBAcGFyYW0gc3RlcENvdW50IC0gTnVtYmVyIG9mIHN0ZXBzIHRvIGJlIGVucXVldWVkXG4gKiBAcGFyYW0gaG9va0NvdW50IC0gTnVtYmVyIG9mIGhvb2tzIHRvIGJlIGVucXVldWVkXG4gKiBAcGFyYW0gd2FpdENvdW50IC0gTnVtYmVyIG9mIHdhaXRzIHRvIGJlIGVucXVldWVkXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGxvZyBtZXNzYWdlIG9yIG51bGwgaWYgYWxsIGNvdW50cyBhcmUgMFxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRXb3JrZmxvd1N1c3BlbnNpb25NZXNzYWdlKFxuICBydW5JZDogc3RyaW5nLFxuICBzdGVwQ291bnQ6IG51bWJlcixcbiAgaG9va0NvdW50OiBudW1iZXIsXG4gIHdhaXRDb3VudDogbnVtYmVyXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKHN0ZXBDb3VudCA9PT0gMCAmJiBob29rQ291bnQgPT09IDAgJiYgd2FpdENvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IFtdO1xuICBpZiAoc3RlcENvdW50ID4gMCkge1xuICAgIHBhcnRzLnB1c2goYCR7c3RlcENvdW50fSAke3BsdXJhbGl6ZSgnc3RlcCcsICdzdGVwcycsIHN0ZXBDb3VudCl9YCk7XG4gIH1cbiAgaWYgKGhvb2tDb3VudCA+IDApIHtcbiAgICBwYXJ0cy5wdXNoKGAke2hvb2tDb3VudH0gJHtwbHVyYWxpemUoJ2hvb2snLCAnaG9va3MnLCBob29rQ291bnQpfWApO1xuICB9XG4gIGlmICh3YWl0Q291bnQgPiAwKSB7XG4gICAgcGFydHMucHVzaChgJHt3YWl0Q291bnR9ICR7cGx1cmFsaXplKCd0aW1lcicsICd0aW1lcnMnLCB3YWl0Q291bnQpfWApO1xuICB9XG5cbiAgY29uc3QgcmVzdW1lTXNnUGFydHM6IHN0cmluZ1tdID0gW107XG4gIGlmIChzdGVwQ291bnQgPiAwKSB7XG4gICAgcmVzdW1lTXNnUGFydHMucHVzaCgnc3RlcHMgYXJlIGNvbXBsZXRlZCcpO1xuICB9XG4gIGlmIChob29rQ291bnQgPiAwKSB7XG4gICAgcmVzdW1lTXNnUGFydHMucHVzaCgnaG9va3MgYXJlIHJlY2VpdmVkJyk7XG4gIH1cbiAgaWYgKHdhaXRDb3VudCA+IDApIHtcbiAgICByZXN1bWVNc2dQYXJ0cy5wdXNoKCd0aW1lcnMgaGF2ZSBlbGFwc2VkJyk7XG4gIH1cbiAgY29uc3QgcmVzdW1lTXNnID0gcmVzdW1lTXNnUGFydHMuam9pbignIGFuZCAnKTtcblxuICByZXR1cm4gYFtXb3JrZmxvd3NdIFwiJHtydW5JZH1cIiAtICR7cGFydHMuam9pbignIGFuZCAnKX0gdG8gYmUgZW5xdWV1ZWRcXG4gIFdvcmtmbG93IHdpbGwgc3VzcGVuZCBhbmQgcmVzdW1lIHdoZW4gJHtyZXN1bWVNc2d9YDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBzdHJlYW0gSUQgZm9yIGEgd29ya2Zsb3cgcnVuLlxuICogVXNlci1kZWZpbmVkIHN0cmVhbXMgaW5jbHVkZSBhIFwidXNlclwiIHNlZ21lbnQgZm9yIGlzb2xhdGlvbiBmcm9tIGZ1dHVyZSBzeXN0ZW0tZGVmaW5lZCBzdHJlYW1zLlxuICogTmFtZXNwYWNlcyBhcmUgYmFzZTY0LWVuY29kZWQgdG8gaGFuZGxlIGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgaW4gUmVkaXMga2V5IG5hbWVzLlxuICpcbiAqIEBwYXJhbSBydW5JZCAtIFRoZSB3b3JrZmxvdyBydW4gSURcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBPcHRpb25hbCBuYW1lc3BhY2UgZm9yIHRoZSBzdHJlYW1cbiAqIEByZXR1cm5zIFRoZSBzdHJlYW0gSUQgaW4gZm9ybWF0OiBgc3RybV97VUxJRH1fdXNlcl97YmFzZTY0KG5hbWVzcGFjZSk/fWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtmbG93UnVuU3RyZWFtSWQocnVuSWQ6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nKSB7XG4gIGNvbnN0IHN0cmVhbUlkID0gYCR7cnVuSWQucmVwbGFjZSgnd3J1bl8nLCAnc3RybV8nKX1fdXNlcmA7XG4gIGlmICghbmFtZXNwYWNlKSB7XG4gICAgcmV0dXJuIHN0cmVhbUlkO1xuICB9XG4gIC8vIEJhc2U2NCBlbmNvZGUgdGhlIG5hbWVzcGFjZSB0byBoYW5kbGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgbWF5IG5vdCBiZSBhbGxvd2VkIGluIFJlZGlzIGtleXNcbiAgY29uc3QgZW5jb2RlZE5hbWVzcGFjZSA9IEJ1ZmZlci5mcm9tKG5hbWVzcGFjZSwgJ3V0Zi04JykudG9TdHJpbmcoXG4gICAgJ2Jhc2U2NHVybCdcbiAgKTtcbiAgcmV0dXJuIGAke3N0cmVhbUlkfV8ke2VuY29kZWROYW1lc3BhY2V9YDtcbn1cblxuLyoqXG4gKiBBIHNtYWxsIHdyYXBwZXIgYXJvdW5kIGB3YWl0VW50aWxgIHRoYXQgYWxzbyByZXR1cm5zXG4gKiB0aGUgcmVzdWx0IG9mIHRoZSBhd2FpdGVkIHByb21pc2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0ZWRVbnRpbDxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBjb25zdCByZXN1bHQgPSBmbigpO1xuICB3YWl0VW50aWwoXG4gICAgcmVzdWx0LmNhdGNoKCgpID0+IHtcbiAgICAgIC8vIElnbm9yZSBlcnJvciBmcm9tIHRoZSBwcm9taXNlIGJlaW5nIHJlamVjdGVkLlxuICAgICAgLy8gSXQncyBleHBlY3RlZCB0aGF0IHRoZSBpbnZva2VyIG9mIGB3YWl0ZWRVbnRpbGBcbiAgICAgIC8vIHdpbGwgaGFuZGxlIHRoZSBlcnJvci5cbiAgICB9KVxuICApO1xuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1Qzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSw4QkFBOEIsQ0FDNUMsU0FBaUIsRUFDakIsU0FBaUIsRUFDakIsU0FBaUI7SUFFakIsSUFBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNqQixJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBYSxFQUFFLENBQUM7SUFDcEMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEIsY0FBYyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixjQUFjLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNELElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xCLGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUvQyxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsNERBQTRELFNBQVMsRUFBRSxDQUFDO0FBQ3ZHLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxLQUFhLEVBQUUsU0FBa0I7SUFDdEUsTUFBTSxRQUFRLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQzNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxpR0FBaUc7SUFDakcsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQy9ELFdBQVcsQ0FDWixDQUFDO0lBQ0YsT0FBTyxHQUFHLFFBQVEsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0FBQzNDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsRUFBVTtJQUN6QyxPQUFPLFFBQVEsRUFBRSxlQUFlLENBQUM7QUFDbkMsQ0FBQztBQUVELE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDO0FBRW5DOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsU0FBaUI7SUFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBQzlDLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0VBQWtFLFNBQVMsR0FBRyxDQUMvRSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwbHVyYWxpemUgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHdvcmtmbG93IHN1c3BlbnNpb24gbG9nIG1lc3NhZ2UgYmFzZWQgb24gdGhlIGNvdW50cyBvZiBzdGVwcyxcbiAqIGhvb2tzLCBhbmQgd2FpdHMuIFRoZSBzdHJ1Y3R1cmVkIGxvZ2dlciBhdHRhY2hlcyB0aGUgcnVuIGNvbnRleHQsIHNvIHRoZVxuICogbWVzc2FnZSBpdHNlbGYgb25seSBkZXNjcmliZXMgd2hhdCdzIGJlaW5nIGVucXVldWVkLlxuICogQHBhcmFtIHN0ZXBDb3VudCAtIE51bWJlciBvZiBzdGVwcyB0byBiZSBlbnF1ZXVlZFxuICogQHBhcmFtIGhvb2tDb3VudCAtIE51bWJlciBvZiBob29rcyB0byBiZSBlbnF1ZXVlZFxuICogQHBhcmFtIHdhaXRDb3VudCAtIE51bWJlciBvZiB3YWl0cyB0byBiZSBlbnF1ZXVlZFxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBsb2cgbWVzc2FnZSBvciBudWxsIGlmIGFsbCBjb3VudHMgYXJlIDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkV29ya2Zsb3dTdXNwZW5zaW9uTWVzc2FnZShcbiAgc3RlcENvdW50OiBudW1iZXIsXG4gIGhvb2tDb3VudDogbnVtYmVyLFxuICB3YWl0Q291bnQ6IG51bWJlclxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChzdGVwQ291bnQgPT09IDAgJiYgaG9va0NvdW50ID09PSAwICYmIHdhaXRDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcGFydHMgPSBbXTtcbiAgaWYgKHN0ZXBDb3VudCA+IDApIHtcbiAgICBwYXJ0cy5wdXNoKGAke3N0ZXBDb3VudH0gJHtwbHVyYWxpemUoJ3N0ZXAnLCAnc3RlcHMnLCBzdGVwQ291bnQpfWApO1xuICB9XG4gIGlmIChob29rQ291bnQgPiAwKSB7XG4gICAgcGFydHMucHVzaChgJHtob29rQ291bnR9ICR7cGx1cmFsaXplKCdob29rJywgJ2hvb2tzJywgaG9va0NvdW50KX1gKTtcbiAgfVxuICBpZiAod2FpdENvdW50ID4gMCkge1xuICAgIHBhcnRzLnB1c2goYCR7d2FpdENvdW50fSAke3BsdXJhbGl6ZSgndGltZXInLCAndGltZXJzJywgd2FpdENvdW50KX1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VtZU1zZ1BhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoc3RlcENvdW50ID4gMCkge1xuICAgIHJlc3VtZU1zZ1BhcnRzLnB1c2goJ3N0ZXBzIGFyZSBjb21wbGV0ZWQnKTtcbiAgfVxuICBpZiAoaG9va0NvdW50ID4gMCkge1xuICAgIHJlc3VtZU1zZ1BhcnRzLnB1c2goJ2hvb2tzIGFyZSByZWNlaXZlZCcpO1xuICB9XG4gIGlmICh3YWl0Q291bnQgPiAwKSB7XG4gICAgcmVzdW1lTXNnUGFydHMucHVzaCgndGltZXJzIGhhdmUgZWxhcHNlZCcpO1xuICB9XG4gIGNvbnN0IHJlc3VtZU1zZyA9IHJlc3VtZU1zZ1BhcnRzLmpvaW4oJyBhbmQgJyk7XG5cbiAgcmV0dXJuIGAke3BhcnRzLmpvaW4oJyBhbmQgJyl9IHRvIGJlIGVucXVldWVkXFxuICBXb3JrZmxvdyB3aWxsIHN1c3BlbmQgYW5kIHJlc3VtZSB3aGVuICR7cmVzdW1lTXNnfWA7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgc3RyZWFtIElEIGZvciBhIHdvcmtmbG93IHJ1bi5cbiAqIFVzZXItZGVmaW5lZCBzdHJlYW1zIGluY2x1ZGUgYSBcInVzZXJcIiBzZWdtZW50IGZvciBpc29sYXRpb24gZnJvbSBmdXR1cmUgc3lzdGVtLWRlZmluZWQgc3RyZWFtcy5cbiAqIE5hbWVzcGFjZXMgYXJlIGJhc2U2NC1lbmNvZGVkIHRvIGhhbmRsZSBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGluIFJlZGlzIGtleSBuYW1lcy5cbiAqXG4gKiBAcGFyYW0gcnVuSWQgLSBUaGUgd29ya2Zsb3cgcnVuIElEXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gT3B0aW9uYWwgbmFtZXNwYWNlIGZvciB0aGUgc3RyZWFtXG4gKiBAcmV0dXJucyBUaGUgc3RyZWFtIElEIGluIGZvcm1hdDogYHN0cm1fe1VMSUR9X3VzZXJfe2Jhc2U2NChuYW1lc3BhY2UpP31gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3JrZmxvd1J1blN0cmVhbUlkKHJ1bklkOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZykge1xuICBjb25zdCBzdHJlYW1JZCA9IGAke3J1bklkLnJlcGxhY2UoJ3dydW5fJywgJ3N0cm1fJyl9X3VzZXJgO1xuICBpZiAoIW5hbWVzcGFjZSkge1xuICAgIHJldHVybiBzdHJlYW1JZDtcbiAgfVxuICAvLyBCYXNlNjQgZW5jb2RlIHRoZSBuYW1lc3BhY2UgdG8gaGFuZGxlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IG1heSBub3QgYmUgYWxsb3dlZCBpbiBSZWRpcyBrZXlzXG4gIGNvbnN0IGVuY29kZWROYW1lc3BhY2UgPSBCdWZmZXIuZnJvbShuYW1lc3BhY2UsICd1dGYtOCcpLnRvU3RyaW5nKFxuICAgICdiYXNlNjR1cmwnXG4gICk7XG4gIHJldHVybiBgJHtzdHJlYW1JZH1fJHtlbmNvZGVkTmFtZXNwYWNlfWA7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzdHJlYW0gSUQgZm9yIGFuIGFib3J0IHNpZ25hbCdzIGJhY2tpbmcgc3RyZWFtLlxuICogVXNlcyB0aGUgXCJfc3lzdGVtX2Fib3J0XCIgbmFtZXNwYWNlIHRvIGlzb2xhdGUgZnJvbSB1c2VyLWRlZmluZWQgc3RyZWFtcy5cbiAqXG4gKiBAcGFyYW0gaWQgLSBBIHVuaXF1ZSBpZGVudGlmaWVyICh0eXBpY2FsbHkgYSBVTElEKVxuICogQHJldHVybnMgVGhlIHN0cmVhbSBJRCBpbiBmb3JtYXQ6IGBzdHJtX3tpZH1fc3lzdGVtX2Fib3J0YFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJvcnRTdHJlYW1JZChpZDogc3RyaW5nKSB7XG4gIHJldHVybiBgc3RybV8ke2lkfV9zeXN0ZW1fYWJvcnRgO1xufVxuXG5jb25zdCBBQk9SVF9UT0tFTl9QUkVGSVggPSAnYWJydF8nO1xuXG4vKipcbiAqIERlcml2ZSB0aGUgYWJvcnQgc3RyZWFtIG5hbWUgZnJvbSBhIGhvb2sgdG9rZW4uXG4gKiBIb29rIHRva2VucyB1c2UgdGhlIGZvcm1hdCBgYWJydF97aWR9YCwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHN0cmVhbSBpc1xuICogYHN0cm1fe2lkfV9zeXN0ZW1fYWJvcnRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJvcnRTdHJlYW1JZEZyb21Ub2tlbihob29rVG9rZW46IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaG9va1Rva2VuLnN0YXJ0c1dpdGgoQUJPUlRfVE9LRU5fUFJFRklYKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGFib3J0IGhvb2sgdG9rZW4gZm9ybWF0OiBleHBlY3RlZCBcImFicnRfXCIgcHJlZml4LCBnb3QgXCIke2hvb2tUb2tlbn1cImBcbiAgICApO1xuICB9XG4gIHJldHVybiBnZXRBYm9ydFN0cmVhbUlkKGhvb2tUb2tlbi5zbGljZShBQk9SVF9UT0tFTl9QUkVGSVgubGVuZ3RoKSk7XG59XG4iXX0=
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const version = "5.0.0-beta.2";
1
+ export declare const version = "5.0.0-beta.20";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,iBAAiB,CAAA"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,kBAAkB,CAAA"}
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // Generated by genversion.
2
- export const version = '5.0.0-beta.2';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUMzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGdlbnZlcnNpb24uXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICc1LjAuMC1iZXRhLjInXG4iXX0=
2
+ export const version = '5.0.0-beta.20';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUMzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGdlbnZlcnNpb24uXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICc1LjAuMC1iZXRhLjIwJ1xuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vm/index.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IAEb,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB;;;iCAoG1B,MAAM;EAItC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vm/index.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IAEb,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB;;;iCAsG1B,MAAM;EAItC"}
package/dist/vm/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { runInContext, createContext as vmCreateContext } from 'node:vm';
2
+ import { WorkflowRuntimeError } from '@workflow/errors';
2
3
  import seedrandom from 'seedrandom';
3
4
  import { installUint8ArrayBase64 } from './uint8array-base64.js';
4
5
  import { createRandomUUID } from './uuid.js';
@@ -55,7 +56,7 @@ export function createContext(options) {
55
56
  get(target, prop) {
56
57
  if (prop === 'generateKey') {
57
58
  return () => {
58
- throw new Error('Not implemented');
59
+ throw new WorkflowRuntimeError('`crypto.subtle.generateKey()` is not available inside a workflow function. Move key generation to a step function where full Node.js crypto is available.');
59
60
  };
60
61
  }
61
62
  else if (prop === 'digest') {
@@ -99,4 +100,4 @@ export function createContext(options) {
99
100
  },
100
101
  };
101
102
  }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdm0vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLElBQUksZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pFLE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFRN0M7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUE2QjtJQUN6RCxJQUFJLEVBQUUsY0FBYyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDekIsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLE1BQU0sT0FBTyxHQUFHLGVBQWUsRUFBRSxDQUFDO0lBRWxDLE1BQU0sQ0FBQyxHQUFzQixZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWpFLGdDQUFnQztJQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFFcEIsaUZBQWlGO0lBQ2pGLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckIsNkhBQTZIO0lBQzVILENBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxJQUFJLENBQzdCLEdBQUcsSUFBK0M7UUFFbEQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELDBEQUEwRDtRQUMxRCxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDO0lBQ0QsQ0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUM1QywwQkFBMEI7SUFDMUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQztJQUVsQyxzRUFBc0U7SUFDdEUsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUN6QyxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBRTdDLFNBQVMsZUFBZSxDQUFDLEtBQWlCO1FBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXpDLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRS9ELENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFO1FBQ25DLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSTtZQUNkLElBQUksSUFBSSxLQUFLLGlCQUFpQixFQUFFLENBQUM7Z0JBQy9CLE9BQU8sZUFBZSxDQUFDO1lBQ3pCLENBQUM7WUFDRCxJQUFJLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxVQUFVLENBQUM7WUFDcEIsQ0FBQztZQUNELElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN0QixPQUFPLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRTtvQkFDL0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJO3dCQUNkLElBQUksSUFBSSxLQUFLLGFBQWEsRUFBRSxDQUFDOzRCQUMzQixPQUFPLEdBQUcsRUFBRTtnQ0FDVixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7NEJBQ3JDLENBQUMsQ0FBQzt3QkFDSixDQUFDOzZCQUFNLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDOzRCQUM3QixPQUFPLFdBQVcsQ0FBQzt3QkFDckIsQ0FBQzt3QkFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFtQyxDQUFDLENBQUM7b0JBQ3JELENBQUM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDLElBQW1DLENBQUMsQ0FBQztRQUNyRCxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsa0NBQWtDO0lBQ2pDLENBQVMsQ0FBQyxPQUFPLEdBQUc7UUFDbkIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN2QyxDQUFDO0lBRUYsOEVBQThFO0lBQzlFLENBQUMsQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztJQUN6QyxDQUFDLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztJQUN2QyxDQUFDLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztJQUMvQyxDQUFDLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7SUFDL0MsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztJQUV6QixvRUFBb0U7SUFDcEUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXRDLGlFQUFpRTtJQUNoRSxDQUFDLENBQUMsTUFBYyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUQsQ0FBQyxDQUFDLE1BQWMsQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRXJFLHNDQUFzQztJQUN0QyxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNkLENBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRTNDLE9BQU87UUFDTCxPQUFPO1FBQ1AsVUFBVSxFQUFFLENBQUM7UUFDYixlQUFlLEVBQUUsQ0FBQyxTQUFpQixFQUFFLEVBQUU7WUFDckMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUM3QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBydW5JbkNvbnRleHQsIGNyZWF0ZUNvbnRleHQgYXMgdm1DcmVhdGVDb250ZXh0IH0gZnJvbSAnbm9kZTp2bSc7XG5pbXBvcnQgc2VlZHJhbmRvbSBmcm9tICdzZWVkcmFuZG9tJztcbmltcG9ydCB7IGluc3RhbGxVaW50OEFycmF5QmFzZTY0IH0gZnJvbSAnLi91aW50OGFycmF5LWJhc2U2NC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVSYW5kb21VVUlEIH0gZnJvbSAnLi91dWlkLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVDb250ZXh0T3B0aW9ucyB7XG4gIHNlZWQ6IHN0cmluZztcbiAgLy8gRml4ZWQgdGltZXN0YW1wIGZvciBkZXRlcm1pbmlzdGljIERhdGUgb3BlcmF0aW9uc1xuICBmaXhlZFRpbWVzdGFtcDogbnVtYmVyO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBOb2RlLmpzIGB2bS5Db250ZXh0YCBjb25maWd1cmVkIHRvIGJlIHVzYWJsZSBmb3JcbiAqIGV4ZWN1dGluZyB3b3JrZmxvdyBsb2dpYyBpbiBhIGRldGVybWluaXN0aWMgZW52aXJvbm1lbnQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgY29udGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQob3B0aW9uczogQ3JlYXRlQ29udGV4dE9wdGlvbnMpIHtcbiAgbGV0IHsgZml4ZWRUaW1lc3RhbXAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHsgc2VlZCB9ID0gb3B0aW9ucztcbiAgY29uc3Qgcm5nID0gc2VlZHJhbmRvbShzZWVkKTtcbiAgY29uc3QgY29udGV4dCA9IHZtQ3JlYXRlQ29udGV4dCgpO1xuXG4gIGNvbnN0IGc6IHR5cGVvZiBnbG9iYWxUaGlzID0gcnVuSW5Db250ZXh0KCdnbG9iYWxUaGlzJywgY29udGV4dCk7XG5cbiAgLy8gRGV0ZXJtaW5pc3RpYyBgTWF0aC5yYW5kb20oKWBcbiAgZy5NYXRoLnJhbmRvbSA9IHJuZztcblxuICAvLyBPdmVycmlkZSBgRGF0ZWAgY29uc3RydWN0b3IgdG8gcmV0dXJuIGZpeGVkIHRpbWUgd2hlbiBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHNcbiAgY29uc3QgRGF0ZV8gPSBnLkRhdGU7XG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9TaGFkb3dSZXN0cmljdGVkTmFtZXM6IFdlJ3JlIHNoYWRvd2luZyB0aGUgZ2xvYmFsIGBEYXRlYCBwcm9wZXJ0eSB0byBtYWtlIGl0IGRldGVybWluaXN0aWMuXG4gIChnIGFzIGFueSkuRGF0ZSA9IGZ1bmN0aW9uIERhdGUoXG4gICAgLi4uYXJnczogUGFyYW1ldGVyczwodHlwZW9mIGdsb2JhbFRoaXMpWydEYXRlJ10+W11cbiAgKSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGVfKGZpeGVkVGltZXN0YW1wKTtcbiAgICB9XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIEFyZ3MgaXMgYERhdGVgIGNvbnN0cnVjdG9yIGFyZ3VtZW50c1xuICAgIHJldHVybiBuZXcgRGF0ZV8oLi4uYXJncyk7XG4gIH07XG4gIChnIGFzIGFueSkuRGF0ZS5wcm90b3R5cGUgPSBEYXRlXy5wcm90b3R5cGU7XG4gIC8vIFByZXNlcnZlIHN0YXRpYyBtZXRob2RzXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihnLkRhdGUsIERhdGVfKTtcbiAgZy5EYXRlLm5vdyA9ICgpID0+IGZpeGVkVGltZXN0YW1wO1xuXG4gIC8vIERldGVybWluaXN0aWMgYGNyeXB0b2AgdXNpbmcgUHJveHkgdG8gYXZvaWQgbXV0YXRpbmcgZ2xvYmFsIG9iamVjdHNcbiAgY29uc3Qgb3JpZ2luYWxDcnlwdG8gPSBnbG9iYWxUaGlzLmNyeXB0bztcbiAgY29uc3Qgb3JpZ2luYWxTdWJ0bGUgPSBvcmlnaW5hbENyeXB0by5zdWJ0bGU7XG5cbiAgZnVuY3Rpb24gZ2V0UmFuZG9tVmFsdWVzKGFycmF5OiBVaW50OEFycmF5KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgYXJyYXlbaV0gPSBNYXRoLmZsb29yKHJuZygpICogMjU2KTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgY29uc3QgcmFuZG9tVVVJRCA9IGNyZWF0ZVJhbmRvbVVVSUQocm5nKTtcblxuICBjb25zdCBib3VuZERpZ2VzdCA9IG9yaWdpbmFsU3VidGxlLmRpZ2VzdC5iaW5kKG9yaWdpbmFsU3VidGxlKTtcblxuICBnLmNyeXB0byA9IG5ldyBQcm94eShvcmlnaW5hbENyeXB0bywge1xuICAgIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICAgIGlmIChwcm9wID09PSAnZ2V0UmFuZG9tVmFsdWVzJykge1xuICAgICAgICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3AgPT09ICdyYW5kb21VVUlEJykge1xuICAgICAgICByZXR1cm4gcmFuZG9tVVVJRDtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wID09PSAnc3VidGxlJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3h5KG9yaWdpbmFsU3VidGxlLCB7XG4gICAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgaWYgKHByb3AgPT09ICdnZW5lcmF0ZUtleScpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wID09PSAnZGlnZXN0Jykge1xuICAgICAgICAgICAgICByZXR1cm4gYm91bmREaWdlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3AgYXMga2V5b2YgdHlwZW9mIG9yaWdpbmFsU3VidGxlXTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXRbcHJvcCBhcyBrZXlvZiB0eXBlb2Ygb3JpZ2luYWxDcnlwdG9dO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFByb3BhZ2F0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgKGcgYXMgYW55KS5wcm9jZXNzID0ge1xuICAgIGVudjogT2JqZWN0LmZyZWV6ZSh7IC4uLnByb2Nlc3MuZW52IH0pLFxuICB9O1xuXG4gIC8vIFN0YXRlbGVzcyArIHN5bmNocm9ub3VzIFdlYiBBUElzIHRoYXQgYXJlIG1hZGUgYXZhaWxhYmxlIGluc2lkZSB0aGUgc2FuZGJveFxuICBnLkRPTUV4Y2VwdGlvbiA9IGdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uO1xuICBnLkhlYWRlcnMgPSBnbG9iYWxUaGlzLkhlYWRlcnM7XG4gIGcuVGV4dEVuY29kZXIgPSBnbG9iYWxUaGlzLlRleHRFbmNvZGVyO1xuICBnLlRleHREZWNvZGVyID0gZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcjtcbiAgZy5jb25zb2xlID0gZ2xvYmFsVGhpcy5jb25zb2xlO1xuICBnLlVSTCA9IGdsb2JhbFRoaXMuVVJMO1xuICBnLlVSTFNlYXJjaFBhcmFtcyA9IGdsb2JhbFRoaXMuVVJMU2VhcmNoUGFyYW1zO1xuICBnLnN0cnVjdHVyZWRDbG9uZSA9IGdsb2JhbFRoaXMuc3RydWN0dXJlZENsb25lO1xuICBnLmF0b2IgPSBnbG9iYWxUaGlzLmF0b2I7XG4gIGcuYnRvYSA9IGdsb2JhbFRoaXMuYnRvYTtcblxuICAvLyBUQzM5IFVpbnQ4QXJyYXkgYmFzZTY0L2hleCBwb2x5ZmlsbCAocHJvcG9zYWwtYXJyYXlidWZmZXItYmFzZTY0KVxuICBpbnN0YWxsVWludDhBcnJheUJhc2U2NChnLlVpbnQ4QXJyYXkpO1xuXG4gIC8vIFRDMzkgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBwb2x5ZmlsbCBmb3IgYHVzaW5nYCBrZXl3b3JkXG4gIChnLlN5bWJvbCBhcyBhbnkpLmRpc3Bvc2UgPz89IFN5bWJvbC5mb3IoJ1N5bWJvbC5kaXNwb3NlJyk7XG4gIChnLlN5bWJvbCBhcyBhbnkpLmFzeW5jRGlzcG9zZSA/Pz0gU3ltYm9sLmZvcignU3ltYm9sLmFzeW5jRGlzcG9zZScpO1xuXG4gIC8vIEhBQ0s6IFNoaW0gYGV4cG9ydHNgIGZvciB0aGUgYnVuZGxlXG4gIGcuZXhwb3J0cyA9IHt9O1xuICAoZyBhcyBhbnkpLm1vZHVsZSA9IHsgZXhwb3J0czogZy5leHBvcnRzIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0LFxuICAgIGdsb2JhbFRoaXM6IGcsXG4gICAgdXBkYXRlVGltZXN0YW1wOiAodGltZXN0YW1wOiBudW1iZXIpID0+IHtcbiAgICAgIGZpeGVkVGltZXN0YW1wID0gdGltZXN0YW1wO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdm0vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLElBQUksZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFRN0M7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUE2QjtJQUN6RCxJQUFJLEVBQUUsY0FBYyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDekIsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLE1BQU0sT0FBTyxHQUFHLGVBQWUsRUFBRSxDQUFDO0lBRWxDLE1BQU0sQ0FBQyxHQUFzQixZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWpFLGdDQUFnQztJQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFFcEIsaUZBQWlGO0lBQ2pGLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckIsNkhBQTZIO0lBQzVILENBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxJQUFJLENBQzdCLEdBQUcsSUFBK0M7UUFFbEQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELDBEQUEwRDtRQUMxRCxPQUFPLElB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QUMvQyxDQUFDLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7SUFDL0MsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztJQUV6QixvRUFBb0U7SUFDcEUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXRDLGlFQUFpRTtJQUNoRSxDQUFDLENBQUMsTUFBYyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUQsQ0FBQyxDQUFDLE1BQWMsQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRXJFLHNDQUFzQztJQUN0QyxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNkLENBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRTNDLE9BQU87UUFDTCxPQUFPO1FBQ1AsVUFBVSxFQUFFLENBQUM7UUFDYixlQUFlLEVBQUUsQ0FBQyxTQUFpQixFQUFFLEVBQUU7WUFDckMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUM3QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBydW5JbkNvbnRleHQsIGNyZWF0ZUNvbnRleHQgYXMgdm1DcmVhdGVDb250ZXh0IH0gZnJvbSAnbm9kZTp2bSc7XG5pbXBvcnQgeyBXb3JrZmxvd1J1bnRpbWVFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHNlZWRyYW5kb20gZnJvbSAnc2VlZHJhbmRvbSc7XG5pbXBvcnQgeyBpbnN0YWxsVWludDhBcnJheUJhc2U2NCB9IGZyb20gJy4vdWludDhhcnJheS1iYXNlNjQuanMnO1xuaW1wb3J0IHsgY3JlYXRlUmFuZG9tVVVJRCB9IGZyb20gJy4vdXVpZC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQ29udGV4dE9wdGlvbnMge1xuICBzZWVkOiBzdHJpbmc7XG4gIC8vIEZpeGVkIHRpbWVzdGFtcCBmb3IgZGV0ZXJtaW5pc3RpYyBEYXRlIG9wZXJhdGlvbnNcbiAgZml4ZWRUaW1lc3RhbXA6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgTm9kZS5qcyBgdm0uQ29udGV4dGAgY29uZmlndXJlZCB0byBiZSB1c2FibGUgZm9yXG4gKiBleGVjdXRpbmcgd29ya2Zsb3cgbG9naWMgaW4gYSBkZXRlcm1pbmlzdGljIGVudmlyb25tZW50LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb250ZXh0KG9wdGlvbnM6IENyZWF0ZUNvbnRleHRPcHRpb25zKSB7XG4gIGxldCB7IGZpeGVkVGltZXN0YW1wIH0gPSBvcHRpb25zO1xuICBjb25zdCB7IHNlZWQgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJuZyA9IHNlZWRyYW5kb20oc2VlZCk7XG4gIGNvbnN0IGNvbnRleHQgPSB2bUNyZWF0ZUNvbnRleHQoKTtcblxuICBjb25zdCBnOiB0eXBlb2YgZ2xvYmFsVGhpcyA9IHJ1bkluQ29udGV4dCgnZ2xvYmFsVGhpcycsIGNvbnRleHQpO1xuXG4gIC8vIERldGVybWluaXN0aWMgYE1hdGgucmFuZG9tKClgXG4gIGcuTWF0aC5yYW5kb20gPSBybmc7XG5cbiAgLy8gT3ZlcnJpZGUgYERhdGVgIGNvbnN0cnVjdG9yIHRvIHJldHVybiBmaXhlZCB0aW1lIHdoZW4gY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzXG4gIGNvbnN0IERhdGVfID0gZy5EYXRlO1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vU2hhZG93UmVzdHJpY3RlZE5hbWVzOiBXZSdyZSBzaGFkb3dpbmcgdGhlIGdsb2JhbCBgRGF0ZWAgcHJvcGVydHkgdG8gbWFrZSBpdCBkZXRlcm1pbmlzdGljLlxuICAoZyBhcyBhbnkpLkRhdGUgPSBmdW5jdGlvbiBEYXRlKFxuICAgIC4uLmFyZ3M6IFBhcmFtZXRlcnM8KHR5cGVvZiBnbG9iYWxUaGlzKVsnRGF0ZSddPltdXG4gICkge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlXyhmaXhlZFRpbWVzdGFtcCk7XG4gICAgfVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBBcmdzIGlzIGBEYXRlYCBjb25zdHJ1Y3RvciBhcmd1bWVudHNcbiAgICByZXR1cm4gbmV3IERhdGVfKC4uLmFyZ3MpO1xuICB9O1xuICAoZyBhcyBhbnkpLkRhdGUucHJvdG90eXBlID0gRGF0ZV8ucHJvdG90eXBlO1xuICAvLyBQcmVzZXJ2ZSBzdGF0aWMgbWV0aG9kc1xuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZy5EYXRlLCBEYXRlXyk7XG4gIGcuRGF0ZS5ub3cgPSAoKSA9PiBmaXhlZFRpbWVzdGFtcDtcblxuICAvLyBEZXRlcm1pbmlzdGljIGBjcnlwdG9gIHVzaW5nIFByb3h5IHRvIGF2b2lkIG11dGF0aW5nIGdsb2JhbCBvYmplY3RzXG4gIGNvbnN0IG9yaWdpbmFsQ3J5cHRvID0gZ2xvYmFsVGhpcy5jcnlwdG87XG4gIGNvbnN0IG9yaWdpbmFsU3VidGxlID0gb3JpZ2luYWxDcnlwdG8uc3VidGxlO1xuXG4gIGZ1bmN0aW9uIGdldFJhbmRvbVZhbHVlcyhhcnJheTogVWludDhBcnJheSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycmF5W2ldID0gTWF0aC5mbG9vcihybmcoKSAqIDI1Nik7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIGNvbnN0IHJhbmRvbVVVSUQgPSBjcmVhdGVSYW5kb21VVUlEKHJuZyk7XG5cbiAgY29uc3QgYm91bmREaWdlc3QgPSBvcmlnaW5hbFN1YnRsZS5kaWdlc3QuYmluZChvcmlnaW5hbFN1YnRsZSk7XG5cbiAgZy5jcnlwdG8gPSBuZXcgUHJveHkob3JpZ2luYWxDcnlwdG8sIHtcbiAgICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgICBpZiAocHJvcCA9PT0gJ2dldFJhbmRvbVZhbHVlcycpIHtcbiAgICAgICAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wID09PSAncmFuZG9tVVVJRCcpIHtcbiAgICAgICAgcmV0dXJuIHJhbmRvbVVVSUQ7XG4gICAgICB9XG4gICAgICBpZiAocHJvcCA9PT0gJ3N1YnRsZScpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eShvcmlnaW5hbFN1YnRsZSwge1xuICAgICAgICAgIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIGlmIChwcm9wID09PSAnZ2VuZXJhdGVLZXknKSB7XG4gICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgICAgICAgICAgICAgICAgJ2BjcnlwdG8uc3VidGxlLmdlbmVyYXRlS2V5KClgIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIGEgd29ya2Zsb3cgZnVuY3Rpb24uIE1vdmUga2V5IGdlbmVyYXRpb24gdG8gYSBzdGVwIGZ1bmN0aW9uIHdoZXJlIGZ1bGwgTm9kZS5qcyBjcnlwdG8gaXMgYXZhaWxhYmxlLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wID09PSAnZGlnZXN0Jykge1xuICAgICAgICAgICAgICByZXR1cm4gYm91bmREaWdlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3AgYXMga2V5b2YgdHlwZW9mIG9yaWdpbmFsU3VidGxlXTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXRbcHJvcCBhcyBrZXlvZiB0eXBlb2Ygb3JpZ2luYWxDcnlwdG9dO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFByb3BhZ2F0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgKGcgYXMgYW55KS5wcm9jZXNzID0ge1xuICAgIGVudjogT2JqZWN0LmZyZWV6ZSh7IC4uLnByb2Nlc3MuZW52IH0pLFxuICB9O1xuXG4gIC8vIFN0YXRlbGVzcyArIHN5bmNocm9ub3VzIFdlYiBBUElzIHRoYXQgYXJlIG1hZGUgYXZhaWxhYmxlIGluc2lkZSB0aGUgc2FuZGJveFxuICBnLkRPTUV4Y2VwdGlvbiA9IGdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uO1xuICBnLkhlYWRlcnMgPSBnbG9iYWxUaGlzLkhlYWRlcnM7XG4gIGcuVGV4dEVuY29kZXIgPSBnbG9iYWxUaGlzLlRleHRFbmNvZGVyO1xuICBnLlRleHREZWNvZGVyID0gZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcjtcbiAgZy5jb25zb2xlID0gZ2xvYmFsVGhpcy5jb25zb2xlO1xuICBnLlVSTCA9IGdsb2JhbFRoaXMuVVJMO1xuICBnLlVSTFNlYXJjaFBhcmFtcyA9IGdsb2JhbFRoaXMuVVJMU2VhcmNoUGFyYW1zO1xuICBnLnN0cnVjdHVyZWRDbG9uZSA9IGdsb2JhbFRoaXMuc3RydWN0dXJlZENsb25lO1xuICBnLmF0b2IgPSBnbG9iYWxUaGlzLmF0b2I7XG4gIGcuYnRvYSA9IGdsb2JhbFRoaXMuYnRvYTtcblxuICAvLyBUQzM5IFVpbnQ4QXJyYXkgYmFzZTY0L2hleCBwb2x5ZmlsbCAocHJvcG9zYWwtYXJyYXlidWZmZXItYmFzZTY0KVxuICBpbnN0YWxsVWludDhBcnJheUJhc2U2NChnLlVpbnQ4QXJyYXkpO1xuXG4gIC8vIFRDMzkgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBwb2x5ZmlsbCBmb3IgYHVzaW5nYCBrZXl3b3JkXG4gIChnLlN5bWJvbCBhcyBhbnkpLmRpc3Bvc2UgPz89IFN5bWJvbC5mb3IoJ1N5bWJvbC5kaXNwb3NlJyk7XG4gIChnLlN5bWJvbCBhcyBhbnkpLmFzeW5jRGlzcG9zZSA/Pz0gU3ltYm9sLmZvcignU3ltYm9sLmFzeW5jRGlzcG9zZScpO1xuXG4gIC8vIEhBQ0s6IFNoaW0gYGV4cG9ydHNgIGZvciB0aGUgYnVuZGxlXG4gIGcuZXhwb3J0cyA9IHt9O1xuICAoZyBhcyBhbnkpLm1vZHVsZSA9IHsgZXhwb3J0czogZy5leHBvcnRzIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0LFxuICAgIGdsb2JhbFRoaXM6IGcsXG4gICAgdXBkYXRlVGltZXN0YW1wOiAodGltZXN0YW1wOiBudW1iZXIpID0+IHtcbiAgICAgIGZpeGVkVGltZXN0YW1wID0gdGltZXN0YW1wO1xuICAgIH0sXG4gIH07XG59XG4iXX0=