@workflow/core 5.0.0-beta.5 → 5.0.0-beta.51

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 (317) hide show
  1. package/README.md +5 -0
  2. package/dist/attribute-changes.d.ts +5 -0
  3. package/dist/attribute-changes.d.ts.map +1 -0
  4. package/dist/attribute-changes.js +25 -0
  5. package/dist/capabilities.d.ts +35 -2
  6. package/dist/capabilities.d.ts.map +1 -1
  7. package/dist/capabilities.js +74 -5
  8. package/dist/capture-stack.d.ts +1 -1
  9. package/dist/capture-stack.js +2 -2
  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 +19 -3
  14. package/dist/classify-error.d.ts.map +1 -1
  15. package/dist/classify-error.js +98 -6
  16. package/dist/context-violation-error.d.ts +5 -5
  17. package/dist/context-violation-error.d.ts.map +1 -1
  18. package/dist/context-violation-error.js +8 -6
  19. package/dist/create-hook.d.ts +72 -7
  20. package/dist/create-hook.d.ts.map +1 -1
  21. package/dist/create-hook.js +1 -1
  22. package/dist/define-hook.js +2 -2
  23. package/dist/describe-error.d.ts +7 -7
  24. package/dist/describe-error.d.ts.map +1 -1
  25. package/dist/describe-error.js +97 -12
  26. package/dist/encryption.d.ts +38 -4
  27. package/dist/encryption.d.ts.map +1 -1
  28. package/dist/encryption.js +96 -14
  29. package/dist/events-consumer.d.ts +297 -0
  30. package/dist/events-consumer.d.ts.map +1 -1
  31. package/dist/events-consumer.js +673 -42
  32. package/dist/flushable-stream.d.ts +97 -1
  33. package/dist/flushable-stream.d.ts.map +1 -1
  34. package/dist/flushable-stream.js +291 -11
  35. package/dist/global.d.ts +36 -2
  36. package/dist/global.d.ts.map +1 -1
  37. package/dist/global.js +21 -6
  38. package/dist/index.d.ts +2 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +3 -2
  41. package/dist/log-format.d.ts +2 -2
  42. package/dist/log-format.js +19 -12
  43. package/dist/logger.d.ts +1 -0
  44. package/dist/logger.d.ts.map +1 -1
  45. package/dist/logger.js +10 -6
  46. package/dist/private.d.ts +226 -9
  47. package/dist/private.d.ts.map +1 -1
  48. package/dist/private.js +626 -7
  49. package/dist/replay-divergence.d.ts +25 -0
  50. package/dist/replay-divergence.d.ts.map +1 -0
  51. package/dist/replay-divergence.js +61 -0
  52. package/dist/replay-payload-cache.d.ts +64 -0
  53. package/dist/replay-payload-cache.d.ts.map +1 -0
  54. package/dist/replay-payload-cache.js +158 -0
  55. package/dist/runtime/compute-instance.d.ts +13 -0
  56. package/dist/runtime/compute-instance.d.ts.map +1 -0
  57. package/dist/runtime/compute-instance.js +14 -0
  58. package/dist/runtime/constants.d.ts +315 -0
  59. package/dist/runtime/constants.d.ts.map +1 -1
  60. package/dist/runtime/constants.js +502 -16
  61. package/dist/runtime/count-step-started-events.d.ts +52 -0
  62. package/dist/runtime/count-step-started-events.d.ts.map +1 -0
  63. package/dist/runtime/count-step-started-events.js +72 -0
  64. package/dist/runtime/deployment-guard.d.ts +99 -0
  65. package/dist/runtime/deployment-guard.d.ts.map +1 -0
  66. package/dist/runtime/deployment-guard.js +154 -0
  67. package/dist/runtime/get-port-lazy.d.ts +15 -0
  68. package/dist/runtime/get-port-lazy.d.ts.map +1 -1
  69. package/dist/runtime/get-port-lazy.js +75 -6
  70. package/dist/runtime/get-world-lazy.d.ts +5 -14
  71. package/dist/runtime/get-world-lazy.d.ts.map +1 -1
  72. package/dist/runtime/get-world-lazy.js +19 -29
  73. package/dist/runtime/helpers.d.ts +415 -29
  74. package/dist/runtime/helpers.d.ts.map +1 -1
  75. package/dist/runtime/helpers.js +686 -57
  76. package/dist/runtime/quickjs-assets.generated.d.ts +14 -0
  77. package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -0
  78. package/dist/runtime/quickjs-assets.generated.js +30 -0
  79. package/dist/runtime/quickjs-entrypoint.d.ts +158 -0
  80. package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -0
  81. package/dist/runtime/quickjs-entrypoint.js +1863 -0
  82. package/dist/runtime/quickjs-log-view.d.ts +129 -0
  83. package/dist/runtime/quickjs-log-view.d.ts.map +1 -0
  84. package/dist/runtime/quickjs-log-view.js +229 -0
  85. package/dist/runtime/quickjs-runtime.d.ts +244 -0
  86. package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
  87. package/dist/runtime/quickjs-runtime.js +2427 -0
  88. package/dist/runtime/quickjs-serde.d.ts +107 -0
  89. package/dist/runtime/quickjs-serde.d.ts.map +1 -0
  90. package/dist/runtime/quickjs-serde.js +2159 -0
  91. package/dist/runtime/replay-budget.d.ts +97 -0
  92. package/dist/runtime/replay-budget.d.ts.map +1 -0
  93. package/dist/runtime/replay-budget.js +139 -0
  94. package/dist/runtime/replay-recovery-reporter.d.ts +36 -0
  95. package/dist/runtime/replay-recovery-reporter.d.ts.map +1 -0
  96. package/dist/runtime/replay-recovery-reporter.js +64 -0
  97. package/dist/runtime/resume-hook.d.ts +91 -8
  98. package/dist/runtime/resume-hook.d.ts.map +1 -1
  99. package/dist/runtime/resume-hook.js +512 -89
  100. package/dist/runtime/resume-latency.d.ts +150 -0
  101. package/dist/runtime/resume-latency.d.ts.map +1 -0
  102. package/dist/runtime/resume-latency.js +155 -0
  103. package/dist/runtime/run-id-time.d.ts +19 -0
  104. package/dist/runtime/run-id-time.d.ts.map +1 -0
  105. package/dist/runtime/run-id-time.js +42 -0
  106. package/dist/runtime/run.d.ts +72 -7
  107. package/dist/runtime/run.d.ts.map +1 -1
  108. package/dist/runtime/run.js +280 -53
  109. package/dist/runtime/runs.d.ts +54 -3
  110. package/dist/runtime/runs.d.ts.map +1 -1
  111. package/dist/runtime/runs.js +126 -16
  112. package/dist/runtime/start.d.ts +101 -2
  113. package/dist/runtime/start.d.ts.map +1 -1
  114. package/dist/runtime/start.js +352 -61
  115. package/dist/runtime/step-executor.d.ts +186 -5
  116. package/dist/runtime/step-executor.d.ts.map +1 -1
  117. package/dist/runtime/step-executor.js +768 -130
  118. package/dist/runtime/step-latency.d.ts +220 -0
  119. package/dist/runtime/step-latency.d.ts.map +1 -0
  120. package/dist/runtime/step-latency.js +215 -0
  121. package/dist/runtime/step-ownership.d.ts +72 -0
  122. package/dist/runtime/step-ownership.d.ts.map +1 -0
  123. package/dist/runtime/step-ownership.js +114 -0
  124. package/dist/runtime/step-single-flight.d.ts +12 -0
  125. package/dist/runtime/step-single-flight.d.ts.map +1 -0
  126. package/dist/runtime/step-single-flight.js +75 -0
  127. package/dist/runtime/suspension-handler.d.ts +247 -7
  128. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  129. package/dist/runtime/suspension-handler.js +1304 -125
  130. package/dist/runtime/unserializable-step.d.ts +34 -0
  131. package/dist/runtime/unserializable-step.d.ts.map +1 -0
  132. package/dist/runtime/unserializable-step.js +52 -0
  133. package/dist/runtime/vm-mode.d.ts +44 -0
  134. package/dist/runtime/vm-mode.d.ts.map +1 -0
  135. package/dist/runtime/vm-mode.js +62 -0
  136. package/dist/runtime/vm-serde-bundle.generated.d.ts +14 -0
  137. package/dist/runtime/vm-serde-bundle.generated.d.ts.map +1 -0
  138. package/dist/runtime/vm-serde-bundle.generated.js +16 -0
  139. package/dist/runtime/wait-continuation.d.ts +106 -0
  140. package/dist/runtime/wait-continuation.d.ts.map +1 -0
  141. package/dist/runtime/wait-continuation.js +136 -0
  142. package/dist/runtime/wait-until.d.ts +18 -0
  143. package/dist/runtime/wait-until.d.ts.map +1 -0
  144. package/dist/runtime/wait-until.js +42 -0
  145. package/dist/runtime/world-compatibility.d.ts +32 -0
  146. package/dist/runtime/world-compatibility.d.ts.map +1 -0
  147. package/dist/runtime/world-compatibility.js +44 -0
  148. package/dist/runtime/world-init.d.ts +17 -42
  149. package/dist/runtime/world-init.d.ts.map +1 -1
  150. package/dist/runtime/world-init.js +18 -43
  151. package/dist/runtime/world.d.ts +14 -2
  152. package/dist/runtime/world.d.ts.map +1 -1
  153. package/dist/runtime/world.js +75 -19
  154. package/dist/runtime.d.ts +10 -6
  155. package/dist/runtime.d.ts.map +1 -1
  156. package/dist/runtime.js +3911 -489
  157. package/dist/sealed-box.d.ts +167 -0
  158. package/dist/sealed-box.d.ts.map +1 -0
  159. package/dist/sealed-box.js +571 -0
  160. package/dist/serialization/client.d.ts +3 -3
  161. package/dist/serialization/client.d.ts.map +1 -1
  162. package/dist/serialization/client.js +8 -4
  163. package/dist/serialization/codec-devalue-vm.d.ts +16 -0
  164. package/dist/serialization/codec-devalue-vm.d.ts.map +1 -0
  165. package/dist/serialization/codec-devalue-vm.js +148 -0
  166. package/dist/serialization/codec-devalue.d.ts +1 -1
  167. package/dist/serialization/codec-devalue.d.ts.map +1 -1
  168. package/dist/serialization/codec-devalue.js +24 -6
  169. package/dist/serialization/codec.d.ts +37 -2
  170. package/dist/serialization/codec.d.ts.map +1 -1
  171. package/dist/serialization/codec.js +2 -2
  172. package/dist/serialization/compression.d.ts +105 -0
  173. package/dist/serialization/compression.d.ts.map +1 -0
  174. package/dist/serialization/compression.js +261 -0
  175. package/dist/serialization/encryption.d.ts +119 -17
  176. package/dist/serialization/encryption.d.ts.map +1 -1
  177. package/dist/serialization/encryption.js +152 -17
  178. package/dist/serialization/errors.d.ts +13 -0
  179. package/dist/serialization/errors.d.ts.map +1 -1
  180. package/dist/serialization/errors.js +20 -2
  181. package/dist/serialization/format.d.ts +6 -6
  182. package/dist/serialization/format.js +7 -7
  183. package/dist/serialization/hardened.d.ts +156 -0
  184. package/dist/serialization/hardened.d.ts.map +1 -0
  185. package/dist/serialization/hardened.js +538 -0
  186. package/dist/serialization/index.d.ts +10 -8
  187. package/dist/serialization/index.d.ts.map +1 -1
  188. package/dist/serialization/index.js +10 -8
  189. package/dist/serialization/reducers/class-vm.d.ts +20 -0
  190. package/dist/serialization/reducers/class-vm.d.ts.map +1 -0
  191. package/dist/serialization/reducers/class-vm.js +77 -0
  192. package/dist/serialization/reducers/class.d.ts.map +1 -1
  193. package/dist/serialization/reducers/class.js +11 -6
  194. package/dist/serialization/reducers/common-vm.d.ts +15 -0
  195. package/dist/serialization/reducers/common-vm.d.ts.map +1 -0
  196. package/dist/serialization/reducers/common-vm.js +616 -0
  197. package/dist/serialization/reducers/common.d.ts +1 -1
  198. package/dist/serialization/reducers/common.d.ts.map +1 -1
  199. package/dist/serialization/reducers/common.js +202 -62
  200. package/dist/serialization/reducers/step-function-vm.d.ts +44 -0
  201. package/dist/serialization/reducers/step-function-vm.d.ts.map +1 -0
  202. package/dist/serialization/reducers/step-function-vm.js +97 -0
  203. package/dist/serialization/reducers/step-function.d.ts.map +1 -1
  204. package/dist/serialization/reducers/step-function.js +25 -9
  205. package/dist/serialization/step.d.ts +4 -4
  206. package/dist/serialization/step.d.ts.map +1 -1
  207. package/dist/serialization/step.js +9 -5
  208. package/dist/serialization/types.d.ts +80 -1
  209. package/dist/serialization/types.d.ts.map +1 -1
  210. package/dist/serialization/types.js +15 -1
  211. package/dist/serialization/workflow-vm.d.ts +29 -0
  212. package/dist/serialization/workflow-vm.d.ts.map +1 -0
  213. package/dist/serialization/workflow-vm.js +74 -0
  214. package/dist/serialization-format.d.ts +64 -8
  215. package/dist/serialization-format.d.ts.map +1 -1
  216. package/dist/serialization-format.js +225 -73
  217. package/dist/serialization.d.ts +262 -34
  218. package/dist/serialization.d.ts.map +1 -1
  219. package/dist/serialization.js +1885 -277
  220. package/dist/set-attributes.d.ts +13 -0
  221. package/dist/set-attributes.d.ts.map +1 -0
  222. package/dist/set-attributes.js +60 -0
  223. package/dist/source-map.d.ts +25 -0
  224. package/dist/source-map.d.ts.map +1 -1
  225. package/dist/source-map.js +154 -10
  226. package/dist/step/context-storage.d.ts +63 -2
  227. package/dist/step/context-storage.d.ts.map +1 -1
  228. package/dist/step/context-storage.js +7 -5
  229. package/dist/step/writable-stream.d.ts +3 -3
  230. package/dist/step/writable-stream.d.ts.map +1 -1
  231. package/dist/step/writable-stream.js +80 -13
  232. package/dist/step.d.ts.map +1 -1
  233. package/dist/step.js +148 -27
  234. package/dist/symbols.d.ts +50 -0
  235. package/dist/symbols.d.ts.map +1 -1
  236. package/dist/symbols.js +51 -1
  237. package/dist/telemetry/semantic-conventions.d.ts +433 -2
  238. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  239. package/dist/telemetry/semantic-conventions.js +319 -3
  240. package/dist/telemetry.d.ts +91 -0
  241. package/dist/telemetry.d.ts.map +1 -1
  242. package/dist/telemetry.js +244 -17
  243. package/dist/test-support/orchestrator-context.d.ts +25 -0
  244. package/dist/test-support/orchestrator-context.d.ts.map +1 -0
  245. package/dist/test-support/orchestrator-context.js +107 -0
  246. package/dist/types.d.ts +6 -0
  247. package/dist/types.d.ts.map +1 -1
  248. package/dist/types.js +23 -1
  249. package/dist/util.d.ts +0 -5
  250. package/dist/util.d.ts.map +1 -1
  251. package/dist/util.js +1 -15
  252. package/dist/version.d.ts +1 -1
  253. package/dist/version.d.ts.map +1 -1
  254. package/dist/version.js +2 -2
  255. package/dist/vm/index.d.ts.map +1 -1
  256. package/dist/vm/index.js +84 -14
  257. package/dist/vm/script-cache.d.ts +26 -0
  258. package/dist/vm/script-cache.d.ts.map +1 -0
  259. package/dist/vm/script-cache.js +131 -0
  260. package/dist/vm/uint8array-base64.js +1 -1
  261. package/dist/workflow/abort-controller.d.ts +2 -2
  262. package/dist/workflow/abort-controller.d.ts.map +1 -1
  263. package/dist/workflow/abort-controller.js +88 -21
  264. package/dist/workflow/attribute-dispatcher.d.ts +6 -0
  265. package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
  266. package/dist/workflow/attribute-dispatcher.js +45 -0
  267. package/dist/workflow/create-hook.d.ts.map +1 -1
  268. package/dist/workflow/create-hook.js +24 -3
  269. package/dist/workflow/get-workflow-metadata.js +2 -2
  270. package/dist/workflow/hook.d.ts.map +1 -1
  271. package/dist/workflow/hook.js +304 -47
  272. package/dist/workflow/index.d.ts +1 -0
  273. package/dist/workflow/index.d.ts.map +1 -1
  274. package/dist/workflow/index.js +2 -1
  275. package/dist/workflow/set-attributes.d.ts +68 -0
  276. package/dist/workflow/set-attributes.d.ts.map +1 -0
  277. package/dist/workflow/set-attributes.js +60 -0
  278. package/dist/workflow/sleep.d.ts.map +1 -1
  279. package/dist/workflow/sleep.js +58 -12
  280. package/dist/workflow/world-init-stub.d.ts +3 -3
  281. package/dist/workflow/world-init-stub.js +4 -4
  282. package/dist/workflow.d.ts +95 -3
  283. package/dist/workflow.d.ts.map +1 -1
  284. package/dist/workflow.js +900 -561
  285. package/docs/api-reference/create-hook.mdx +89 -10
  286. package/docs/api-reference/create-webhook.mdx +16 -15
  287. package/docs/api-reference/define-hook.mdx +35 -33
  288. package/docs/api-reference/fatal-error.mdx +30 -8
  289. package/docs/api-reference/fetch.mdx +14 -10
  290. package/docs/api-reference/get-step-metadata.mdx +2 -2
  291. package/docs/api-reference/get-workflow-metadata.mdx +3 -3
  292. package/docs/api-reference/get-writable.mdx +7 -7
  293. package/docs/api-reference/index.mdx +4 -1
  294. package/docs/api-reference/retryable-error.mdx +1 -1
  295. package/docs/api-reference/set-attributes.mdx +61 -0
  296. package/docs/api-reference/sleep.mdx +4 -4
  297. package/docs/foundations/cancellation.mdx +31 -32
  298. package/docs/foundations/errors-and-retries.mdx +42 -11
  299. package/docs/foundations/hooks.mdx +64 -35
  300. package/docs/foundations/idempotency.mdx +244 -12
  301. package/docs/foundations/index.mdx +1 -23
  302. package/docs/foundations/meta.json +2 -1
  303. package/docs/foundations/serialization.mdx +21 -22
  304. package/docs/foundations/starting-workflows.mdx +106 -30
  305. package/docs/foundations/streaming.mdx +108 -60
  306. package/docs/foundations/versioning.mdx +263 -0
  307. package/docs/foundations/workflows-and-steps.mdx +9 -9
  308. package/docs/how-it-works/cancellation.mdx +63 -63
  309. package/docs/how-it-works/code-transform.mdx +83 -67
  310. package/docs/how-it-works/encryption.mdx +30 -26
  311. package/docs/how-it-works/event-sourcing.mdx +125 -34
  312. package/docs/how-it-works/framework-integrations.mdx +96 -337
  313. package/docs/how-it-works/understanding-directives.mdx +22 -22
  314. package/package.json +24 -15
  315. package/dist/runtime/step-handler.d.ts +0 -2
  316. package/dist/runtime/step-handler.d.ts.map +0 -1
  317. package/dist/runtime/step-handler.js +0 -776
@@ -0,0 +1,107 @@
1
+ import { WorkflowRuntimeError } from '@workflow/errors';
2
+ import { withResolvers } from '@workflow/utils';
3
+ import * as nanoid from 'nanoid';
4
+ import { monotonicFactory } from 'ulid';
5
+ import { vi } from 'vitest';
6
+ import { EventsConsumer } from '../events-consumer.js';
7
+ import { describeDivergenceContext } from '../replay-divergence.js';
8
+ import { ReplayPayloadCache } from '../replay-payload-cache.js';
9
+ import { createContext } from '../vm/index.js';
10
+ /**
11
+ * Builds an orchestrator context that replays a hand-written event log through
12
+ * the real workflow primitives (`createUseStep`, `createSleep`,
13
+ * `createCreateHook`), without a World or a VM entrypoint.
14
+ */
15
+ export function setupWorkflowContext(events, options = {}) {
16
+ const context = createContext({
17
+ seed: 'test',
18
+ fixedTimestamp: 1753481739458,
19
+ });
20
+ const ulid = monotonicFactory(() => context.globalThis.Math.random());
21
+ // Real-session parity: the log-order-draws quiescence fixpoint keys its
22
+ // progress metric on `mintCount`. Without it the loop degrades to a single
23
+ // turn and these suites would only exercise a degraded variant.
24
+ let mintCount = 0;
25
+ const workflowStartedAt = context.globalThis.Date.now();
26
+ const promiseQueueHolder = { current: Promise.resolve() };
27
+ // Forward onUnconsumedEvent through ctx.onWorkflowError so tests that wire
28
+ // onWorkflowError to a discontinuation promise (see runWithDiscontinuation)
29
+ // actually observe false-positive unconsumed-event detections instead of
30
+ // silently dropping them.
31
+ const ctxRef = {};
32
+ const ctx = {
33
+ suspensionGeneration: 0,
34
+ runId: 'wrun_test',
35
+ encryptionKey: undefined,
36
+ replayPayloadCache: new ReplayPayloadCache(undefined),
37
+ globalThis: context.globalThis,
38
+ eventsConsumer: new EventsConsumer(events, {
39
+ // Fake context: no deliveries are modeled, so the gate is a no-op here.
40
+ isDeliveryIdle: () => true,
41
+ onUnconsumedEvent: (event) => {
42
+ const current = ctxRef.current;
43
+ if (!current)
44
+ return;
45
+ // Same detail the production path appends (see `onUnconsumedEvent` in
46
+ // workflow.ts), so a test can assert on what a user would read.
47
+ current.onWorkflowError(new WorkflowRuntimeError(`Unconsumed event in event log: eventType=${event.eventType}, correlationId=${event.correlationId}, eventId=${event.eventId}. This indicates a corrupted or invalid event log. ${describeDivergenceContext(event, current.invocationsQueue, current.eventsConsumer)}`));
48
+ },
49
+ onDuplicateEvent: options.onDuplicateEvent,
50
+ getPromiseQueue: () => promiseQueueHolder.current,
51
+ }),
52
+ invocationsQueue: new Map(),
53
+ generateUlid: () => {
54
+ mintCount += 1;
55
+ return ulid(workflowStartedAt);
56
+ },
57
+ get mintCount() {
58
+ return mintCount;
59
+ },
60
+ generateNanoid: nanoid.customRandom(nanoid.urlAlphabet, 21, (size) => new Uint8Array(size).map(() => 256 * context.globalThis.Math.random())),
61
+ onWorkflowError: vi.fn(),
62
+ get promiseQueue() {
63
+ return promiseQueueHolder.current;
64
+ },
65
+ set promiseQueue(value) {
66
+ promiseQueueHolder.current = value;
67
+ },
68
+ pendingDeliveries: 0,
69
+ pendingDeliveryBarriers: new Map(),
70
+ };
71
+ ctxRef.current = ctx;
72
+ return ctx;
73
+ }
74
+ /**
75
+ * Deterministic correlation IDs from the ULID generator with seed 'test', in
76
+ * the order {@link setupWorkflowContext}'s generator mints them.
77
+ */
78
+ export const CORR_IDS = [
79
+ '01K11TFZ62YS0YYFDQ3E8B9YCV',
80
+ '01K11TFZ62YS0YYFDQ3E8B9YCW',
81
+ '01K11TFZ62YS0YYFDQ3E8B9YCX',
82
+ '01K11TFZ62YS0YYFDQ3E8B9YCY',
83
+ '01K11TFZ62YS0YYFDQ3E8B9YCZ',
84
+ '01K11TFZ62YS0YYFDQ3E8B9YD0',
85
+ ];
86
+ /**
87
+ * Runs `workflowFn` against `ctx`, racing it against the context's error
88
+ * channel so a `WorkflowSuspension` or a detected divergence surfaces as
89
+ * `error` rather than hanging.
90
+ */
91
+ export async function runWithDiscontinuation(ctx, workflowFn) {
92
+ const workflowDiscontinuation = withResolvers();
93
+ ctx.onWorkflowError = workflowDiscontinuation.reject;
94
+ let result;
95
+ let error;
96
+ try {
97
+ result = await Promise.race([
98
+ workflowFn(),
99
+ workflowDiscontinuation.promise,
100
+ ]);
101
+ }
102
+ catch (err) {
103
+ error = err;
104
+ }
105
+ return { result, error };
106
+ }
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGVzdHJhdG9yLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC1zdXBwb3J0L29yY2hlc3RyYXRvci1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLE1BQWUsRUFDZixVQUF5RCxFQUFFO0lBRTNELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQztRQUM1QixJQUFJLEVBQUUsTUFBTTtRQUNaLGNBQWMsRUFBRSxhQUFhO0tBQzlCLENBQUMsQ0FBQztJQUNILE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdEUsd0VBQXdFO0lBQ3hFLDJFQUEyRTtJQUMzRSxnRUFBZ0U7SUFDaEUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMs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LENBQUMsZUFBZSxHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQztJQUVyRCxJQUFJLE1BQVcsQ0FBQztJQUNoQixJQUFJLEtBQVUsQ0FBQztJQUNmLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDMUIsVUFBVSxFQUFFO1lBQ1osdUJBQXVCLENBQUMsT0FBTztTQUNoQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV29ya2Zsb3dSdW50aW1lRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IHdpdGhSZXNvbHZlcnMgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBFdmVudCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgKiBhcyBuYW5vaWQgZnJvbSAnbmFub2lkJztcbmltcG9ydCB7IG1vbm90b25pY0ZhY3RvcnkgfSBmcm9tICd1bGlkJztcbmltcG9ydCB7IHZpIH0gZnJvbSAndml0ZXN0JztcbmltcG9ydCB7IEV2ZW50c0NvbnN1bWVyIH0gZnJvbSAnLi4vZXZlbnRzLWNvbnN1bWVyLmpzJztcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0IH0gZnJvbSAnLi4vcHJpdmF0ZS5qcyc7XG5pbXBvcnQgeyBkZXNjcmliZURpdmVyZ2VuY2VDb250ZXh0IH0gZnJvbSAnLi4vcmVwbGF5LWRpdmVyZ2VuY2UuanMnO1xuaW1wb3J0IHsgUmVwbGF5UGF5bG9hZENhY2hlIH0gZnJvbSAnLi4vcmVwbGF5LXBheWxvYWQtY2FjaGUuanMnO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJy4uL3ZtL2luZGV4LmpzJztcblxuLyoqXG4gKiBCdWlsZHMgYW4gb3JjaGVzdHJhdG9yIGNvbnRleHQgdGhhdCByZXBsYXlzIGEgaGFuZC13cml0dGVuIGV2ZW50IGxvZyB0aHJvdWdoXG4gKiB0aGUgcmVhbCB3b3JrZmxvdyBwcmltaXRpdmVzIChgY3JlYXRlVXNlU3RlcGAsIGBjcmVhdGVTbGVlcGAsXG4gKiBgY3JlYXRlQ3JlYXRlSG9va2ApLCB3aXRob3V0IGEgV29ybGQgb3IgYSBWTSBlbnRyeXBvaW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBXb3JrZmxvd0NvbnRleHQoXG4gIGV2ZW50czogRXZlbnRbXSxcbiAgb3B0aW9uczogeyBvbkR1cGxpY2F0ZUV2ZW50PzogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCB9ID0ge31cbik6IFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCB7XG4gIGNvbnN0IGNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgICBzZWVkOiAndGVzdCcsXG4gICAgZml4ZWRUaW1lc3RhbXA6IDE3NTM0ODE3Mzk0NTgsXG4gIH0pO1xuICBjb25zdCB1bGlkID0gbW9ub3RvbmljRmFjdG9yeSgoKSA9PiBjb250ZXh0Lmdsb2JhbFRoaXMuTWF0aC5yYW5kb20oKSk7XG4gIC8vIFJlYWwtc2Vzc2lvbiBwYXJpdHk6IHRoZSBsb2ctb3JkZXItZHJhd3MgcXVpZXNjZW5jZSBmaXhwb2ludCBrZXlzIGl0c1xuICAvLyBwcm9ncmVzcyBtZXRyaWMgb24gYG1pbnRDb3VudGAuIFdpdGhvdXQgaXQgdGhlIGxvb3AgZGVncmFkZXMgdG8gYSBzaW5nbGVcbiAgLy8gdHVybiBhbmQgdGhlc2Ugc3VpdGVzIHdvdWxkIG9ubHkgZXhlcmNpc2UgYSBkZWdyYWRlZCB2YXJpYW50LlxuICBsZXQgbWludENvdW50ID0gMDtcbiAgY29uc3Qgd29ya2Zsb3dTdGFydGVkQXQgPSBjb250ZXh0Lmdsb2JhbFRoaXMuRGF0ZS5ub3coKTtcbiAgY29uc3QgcHJvbWlzZVF1ZXVlSG9sZGVyID0geyBjdXJyZW50OiBQcm9taXNlLnJlc29sdmUoKSB9O1xuICAvLyBGb3J3YXJkIG9uVW5jb25zdW1lZEV2ZW50IHRocm91Z2ggY3R4Lm9uV29ya2Zsb3dFcnJvciBzbyB0ZXN0cyB0aGF0IHdpcmVcbiAgLy8gb25Xb3JrZmxvd0Vycm9yIHRvIGEgZGlzY29udGludWF0aW9uIHByb21pc2UgKHNlZSBydW5XaXRoRGlzY29udGludWF0aW9uKVxuICAvLyBhY3R1YWxseSBvYnNlcnZlIGZhbHNlLXBvc2l0aXZlIHVuY29uc3VtZWQtZXZlbnQgZGV0ZWN0aW9ucyBpbnN0ZWFkIG9mXG4gIC8vIHNpbGVudGx5IGRyb3BwaW5nIHRoZW0uXG4gIGNvbnN0IGN0eFJlZjogeyBjdXJyZW50PzogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0IH0gPSB7fTtcbiAgY29uc3QgY3R4OiBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQgPSB7XG4gICAgc3VzcGVuc2lvbkdlbmVyYXRpb246IDAsXG4gICAgcnVuSWQ6ICd3cnVuX3Rlc3QnLFxuICAgIGVuY3J5cHRpb25LZXk6IHVuZGVmaW5lZCxcbiAgICByZXBsYXlQYXlsb2FkQ2FjaGU6IG5ldyBSZXBsYXlQYXlsb2FkQ2FjaGUodW5kZWZpbmVkKSxcbiAgICBnbG9iYWxUaGlzOiBjb250ZXh0Lmdsb2JhbFRoaXMsXG4gICAgZXZlbnRzQ29uc3VtZXI6IG5ldyBFdmVudHNDb25zdW1lcihldmVudHMsIHtcbiAgICAgIC8vIEZha2UgY29udGV4dDogbm8gZGVsaXZlcmllcyBhcmUgbW9kZWxlZCwgc28gdGhlIGdhdGUgaXMgYSBuby1vcCBoZXJlLlxuICAgICAgaXNEZWxpdmVyeUlkbGU6ICgpID0+IHRydWUsXG4gICAgICBvblVuY29uc3VtZWRFdmVudDogKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBjdHhSZWYuY3VycmVudDtcbiAgICAgICAgaWYgKCFjdXJyZW50KSByZXR1cm47XG4gICAgICAgIC8vIFNhbWUgZGV0YWlsIHRoZSBwcm9kdWN0aW9uIHBhdGggYXBwZW5kcyAoc2VlIGBvblVuY29uc3VtZWRFdmVudGAgaW5cbiAgICAgICAgLy8gd29ya2Zsb3cudHMpLCBzbyBhIHRlc3QgY2FuIGFzc2VydCBvbiB3aGF0IGEgdXNlciB3b3VsZCByZWFkLlxuICAgICAgICBjdXJyZW50Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgICAgICBgVW5jb25zdW1lZCBldmVudCBpbiBldmVudCBsb2c6IGV2ZW50VHlwZT0ke2V2ZW50LmV2ZW50VHlwZX0sIGNvcnJlbGF0aW9uSWQ9JHtldmVudC5jb3JyZWxhdGlvbklkfSwgZXZlbnRJZD0ke2V2ZW50LmV2ZW50SWR9LiBUaGlzIGluZGljYXRlcyBhIGNvcnJ1cHRlZCBvciBpbnZhbGlkIGV2ZW50IGxvZy4gJHtkZXNjcmliZURpdmVyZ2VuY2VDb250ZXh0KGV2ZW50LCBjdXJyZW50Lmludm9jYXRpb25zUXVldWUsIGN1cnJlbnQuZXZlbnRzQ29uc3VtZXIpfWBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgb25EdXBsaWNhdGVFdmVudDogb3B0aW9ucy5vbkR1cGxpY2F0ZUV2ZW50LFxuICAgICAgZ2V0UHJvbWlzZVF1ZXVlOiAoKSA9PiBwcm9taXNlUXVldWVIb2xkZXIuY3VycmVudCxcbiAgICB9KSxcbiAgICBpbnZvY2F0aW9uc1F1ZXVlOiBuZXcgTWFwKCksXG4gICAgZ2VuZXJhdGVVbGlkOiAoKSA9PiB7XG4gICAgICBtaW50Q291bnQgKz0gMTtcbiAgICAgIHJldHVybiB1bGlkKHdvcmtmbG93U3RhcnRlZEF0KTtcbiAgICB9LFxuICAgIGdldCBtaW50Q291bnQoKSB7XG4gICAgICByZXR1cm4gbWludENvdW50O1xuICAgIH0sXG4gICAgZ2VuZXJhdGVOYW5vaWQ6IG5hbm9pZC5jdXN0b21SYW5kb20obmFub2lkLnVybEFscGhhYmV0LCAyMSwgKHNpemUpID0+XG4gICAgICBuZXcgVWludDhBcnJheShzaXplKS5tYXAoKCkgPT4gMjU2ICogY29udGV4dC5nbG9iYWxUaGlzLk1hdGgucmFuZG9tKCkpXG4gICAgKSxcbiAgICBvbldvcmtmbG93RXJyb3I6IHZpLmZuKCksXG4gICAgZ2V0IHByb21pc2VRdWV1ZSgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUXVldWVIb2xkZXIuY3VycmVudDtcbiAgICB9LFxuICAgIHNldCBwcm9taXNlUXVldWUodmFsdWU6IFByb21pc2U8dm9pZD4pIHtcbiAgICAgIHByb21pc2VRdWV1ZUhvbGRlci5jdXJyZW50ID0gdmFsdWU7XG4gICAgfSxcbiAgICBwZW5kaW5nRGVsaXZlcmllczogMCxcbiAgICBwZW5kaW5nRGVsaXZlcnlCYXJyaWVyczogbmV3IE1hcCgpLFxuICB9O1xuICBjdHhSZWYuY3VycmVudCA9IGN0eDtcbiAgcmV0dXJuIGN0eDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmlzdGljIGNvcnJlbGF0aW9uIElEcyBmcm9tIHRoZSBVTElEIGdlbmVyYXRvciB3aXRoIHNlZWQgJ3Rlc3QnLCBpblxuICogdGhlIG9yZGVyIHtAbGluayBzZXR1cFdvcmtmbG93Q29udGV4dH0ncyBnZW5lcmF0b3IgbWludHMgdGhlbS5cbiAqL1xuZXhwb3J0IGNvbnN0IENPUlJfSURTID0gW1xuICAnMDFLMTFURlo2MllTMFlZRkRRM0U4QjlZQ1YnLFxuICAnMDFLMTFURlo2MllTMFlZRkRRM0U4QjlZQ1cnLFxuICAnMDFLMTFURlo2MllTMFlZRkRRM0U4QjlZQ1gnLFxuICAnMDFLMTFURlo2MllTMFlZRkRRM0U4QjlZQ1knLFxuICAnMDFLMTFURlo2MllTMFlZRkRRM0U4QjlZQ1onLFxuICAnMDFLMTFURlo2MllTMFlZRkRRM0U4QjlZRDAnLFxuXTtcblxuLyoqXG4gKiBSdW5zIGB3b3JrZmxvd0ZuYCBhZ2FpbnN0IGBjdHhgLCByYWNpbmcgaXQgYWdhaW5zdCB0aGUgY29udGV4dCdzIGVycm9yXG4gKiBjaGFubmVsIHNvIGEgYFdvcmtmbG93U3VzcGVuc2lvbmAgb3IgYSBkZXRlY3RlZCBkaXZlcmdlbmNlIHN1cmZhY2VzIGFzXG4gKiBgZXJyb3JgIHJhdGhlciB0aGFuIGhhbmdpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5XaXRoRGlzY29udGludWF0aW9uKFxuICBjdHg6IFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCxcbiAgd29ya2Zsb3dGbjogKCkgPT4gUHJvbWlzZTxhbnk+XG4pOiBQcm9taXNlPHsgcmVzdWx0PzogYW55OyBlcnJvcj86IGFueSB9PiB7XG4gIGNvbnN0IHdvcmtmbG93RGlzY29udGludWF0aW9uID0gd2l0aFJlc29sdmVyczx2b2lkPigpO1xuICBjdHgub25Xb3JrZmxvd0Vycm9yID0gd29ya2Zsb3dEaXNjb250aW51YXRpb24ucmVqZWN0O1xuXG4gIGxldCByZXN1bHQ6IGFueTtcbiAgbGV0IGVycm9yOiBhbnk7XG4gIHRyeSB7XG4gICAgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIHdvcmtmbG93Rm4oKSxcbiAgICAgIHdvcmtmbG93RGlzY29udGludWF0aW9uLnByb21pc2UsXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yID0gZXJyO1xuICB9XG4gIHJldHVybiB7IHJlc3VsdCwgZXJyb3IgfTtcbn1cbiJdfQ==
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
@@ -32,9 +32,4 @@ export declare function getAbortStreamId(id: string): string;
32
32
  * `strm_{id}_system_abort`.
33
33
  */
34
34
  export declare function getAbortStreamIdFromToken(hookToken: string): string;
35
- /**
36
- * A small wrapper around `waitUntil` that also returns
37
- * the result of the awaited promise.
38
- */
39
- export declare function waitedUntil<T>(fn: () => Promise<T>): Promise<T>;
40
35
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAGA;;;;;;;;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;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,4 +1,3 @@
1
- import { waitUntil } from '@vercel/functions';
2
1
  import { pluralize } from '@workflow/utils';
3
2
  /**
4
3
  * Builds a workflow suspension log message based on the counts of steps,
@@ -76,17 +75,4 @@ export function getAbortStreamIdFromToken(hookToken) {
76
75
  }
77
76
  return getAbortStreamId(hookToken.slice(ABORT_TOKEN_PREFIX.length));
78
77
  }
79
- /**
80
- * A small wrapper around `waitUntil` that also returns
81
- * the result of the awaited promise.
82
- */
83
- export async function waitedUntil(fn) {
84
- const result = fn();
85
- waitUntil(result.catch(() => {
86
- // Ignore error from the promise being rejected.
87
- // It's expected that the invoker of `waitedUntil`
88
- // will handle the error.
89
- }));
90
- return result;
91
- }
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFNUM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsOEJBQThCLENBQzVDLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLFNBQWlCO0lBRWpCLElBQUksU0FBUyxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDakIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO0lBQ3BDLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xCLGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEIsY0FBYyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixjQUFjLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFL0MsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLDREQUE0RCxTQUFTLEVBQUUsQ0FBQztBQUN2RyxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBYSxFQUFFLFNBQWtCO0lBQ3RFLE1BQU0sUUFBUSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUMzRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsaUdBQWlHO0lBQ2pHLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUMvRCxXQUFXLENBQ1osQ0FBQztJQUNGLE9BQU8sR0FBRyxRQUFRLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQUMzQyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEVBQVU7SUFDekMsT0FBTyxRQUFRLEVBQUUsZUFBZSxDQUFDO0FBQ25DLENBQUM7QUFFRCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQztBQUVuQzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUFDLFNBQWlCO0lBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztRQUM5QyxNQUFNLElBQUksS0FBSyxDQUNiLGtFQUFrRSxTQUFTLEdBQUcsQ0FDL0UsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUksRUFBb0I7SUFDdkQsTUFBTSxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDcEIsU0FBUyxDQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ2hCLGdEQUFnRDtRQUNoRCxrREFBa0Q7UUFDbEQseUJBQXlCO0lBQzNCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2FpdFVudGlsIH0gZnJvbSAnQHZlcmNlbC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgcGx1cmFsaXplIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcblxuLyoqXG4gKiBCdWlsZHMgYSB3b3JrZmxvdyBzdXNwZW5zaW9uIGxvZyBtZXNzYWdlIGJhc2VkIG9uIHRoZSBjb3VudHMgb2Ygc3RlcHMsXG4gKiBob29rcywgYW5kIHdhaXRzLiBUaGUgc3RydWN0dXJlZCBsb2dnZXIgYXR0YWNoZXMgdGhlIHJ1biBjb250ZXh0LCBzbyB0aGVcbiAqIG1lc3NhZ2UgaXRzZWxmIG9ubHkgZGVzY3JpYmVzIHdoYXQncyBiZWluZyBlbnF1ZXVlZC5cbiAqIEBwYXJhbSBzdGVwQ291bnQgLSBOdW1iZXIgb2Ygc3RlcHMgdG8gYmUgZW5xdWV1ZWRcbiAqIEBwYXJhbSBob29rQ291bnQgLSBOdW1iZXIgb2YgaG9va3MgdG8gYmUgZW5xdWV1ZWRcbiAqIEBwYXJhbSB3YWl0Q291bnQgLSBOdW1iZXIgb2Ygd2FpdHMgdG8gYmUgZW5xdWV1ZWRcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgbG9nIG1lc3NhZ2Ugb3IgbnVsbCBpZiBhbGwgY291bnRzIGFyZSAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFdvcmtmbG93U3VzcGVuc2lvbk1lc3NhZ2UoXG4gIHN0ZXBDb3VudDogbnVtYmVyLFxuICBob29rQ291bnQ6IG51bWJlcixcbiAgd2FpdENvdW50OiBudW1iZXJcbik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoc3RlcENvdW50ID09PSAwICYmIGhvb2tDb3VudCA9PT0gMCAmJiB3YWl0Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhcnRzID0gW107XG4gIGlmIChzdGVwQ291bnQgPiAwKSB7XG4gICAgcGFydHMucHVzaChgJHtzdGVwQ291bnR9ICR7cGx1cmFsaXplKCdzdGVwJywgJ3N0ZXBzJywgc3RlcENvdW50KX1gKTtcbiAgfVxuICBpZiAoaG9va0NvdW50ID4gMCkge1xuICAgIHBhcnRzLnB1c2goYCR7aG9va0NvdW50fSAke3BsdXJhbGl6ZSgnaG9vaycsICdob29rcycsIGhvb2tDb3VudCl9YCk7XG4gIH1cbiAgaWYgKHdhaXRDb3VudCA+IDApIHtcbiAgICBwYXJ0cy5wdXNoKGAke3dhaXRDb3VudH0gJHtwbHVyYWxpemUoJ3RpbWVyJywgJ3RpbWVycycsIHdhaXRDb3VudCl9YCk7XG4gIH1cblxuICBjb25zdCByZXN1bWVNc2dQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgaWYgKHN0ZXBDb3VudCA+IDApIHtcbiAgICByZXN1bWVNc2dQYXJ0cy5wdXNoKCdzdGVwcyBhcmUgY29tcGxldGVkJyk7XG4gIH1cbiAgaWYgKGhvb2tDb3VudCA+IDApIHtcbiAgICByZXN1bWVNc2dQYXJ0cy5wdXNoKCdob29rcyBhcmUgcmVjZWl2ZWQnKTtcbiAgfVxuICBpZiAod2FpdENvdW50ID4gMCkge1xuICAgIHJlc3VtZU1zZ1BhcnRzLnB1c2goJ3RpbWVycyBoYXZlIGVsYXBzZWQnKTtcbiAgfVxuICBjb25zdCByZXN1bWVNc2cgPSByZXN1bWVNc2dQYXJ0cy5qb2luKCcgYW5kICcpO1xuXG4gIHJldHVybiBgJHtwYXJ0cy5qb2luKCcgYW5kICcpfSB0byBiZSBlbnF1ZXVlZFxcbiAgV29ya2Zsb3cgd2lsbCBzdXNwZW5kIGFuZCByZXN1bWUgd2hlbiAke3Jlc3VtZU1zZ31gO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHN0cmVhbSBJRCBmb3IgYSB3b3JrZmxvdyBydW4uXG4gKiBVc2VyLWRlZmluZWQgc3RyZWFtcyBpbmNsdWRlIGEgXCJ1c2VyXCIgc2VnbWVudCBmb3IgaXNvbGF0aW9uIGZyb20gZnV0dXJlIHN5c3RlbS1kZWZpbmVkIHN0cmVhbXMuXG4gKiBOYW1lc3BhY2VzIGFyZSBiYXNlNjQtZW5jb2RlZCB0byBoYW5kbGUgY2hhcmFjdGVycyBub3QgYWxsb3dlZCBpbiBSZWRpcyBrZXkgbmFtZXMuXG4gKlxuICogQHBhcmFtIHJ1bklkIC0gVGhlIHdvcmtmbG93IHJ1biBJRFxuICogQHBhcmFtIG5hbWVzcGFjZSAtIE9wdGlvbmFsIG5hbWVzcGFjZSBmb3IgdGhlIHN0cmVhbVxuICogQHJldHVybnMgVGhlIHN0cmVhbSBJRCBpbiBmb3JtYXQ6IGBzdHJtX3tVTElEfV91c2VyX3tiYXNlNjQobmFtZXNwYWNlKT99YFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya2Zsb3dSdW5TdHJlYW1JZChydW5JZDogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcpIHtcbiAgY29uc3Qgc3RyZWFtSWQgPSBgJHtydW5JZC5yZXBsYWNlKCd3cnVuXycsICdzdHJtXycpfV91c2VyYDtcbiAgaWYgKCFuYW1lc3BhY2UpIHtcbiAgICByZXR1cm4gc3RyZWFtSWQ7XG4gIH1cbiAgLy8gQmFzZTY0IGVuY29kZSB0aGUgbmFtZXNwYWNlIHRvIGhhbmRsZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCBtYXkgbm90IGJlIGFsbG93ZWQgaW4gUmVkaXMga2V5c1xuICBjb25zdCBlbmNvZGVkTmFtZXNwYWNlID0gQnVmZmVyLmZyb20obmFtZXNwYWNlLCAndXRmLTgnKS50b1N0cmluZyhcbiAgICAnYmFzZTY0dXJsJ1xuICApO1xuICByZXR1cm4gYCR7c3RyZWFtSWR9XyR7ZW5jb2RlZE5hbWVzcGFjZX1gO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgc3RyZWFtIElEIGZvciBhbiBhYm9ydCBzaWduYWwncyBiYWNraW5nIHN0cmVhbS5cbiAqIFVzZXMgdGhlIFwiX3N5c3RlbV9hYm9ydFwiIG5hbWVzcGFjZSB0byBpc29sYXRlIGZyb20gdXNlci1kZWZpbmVkIHN0cmVhbXMuXG4gKlxuICogQHBhcmFtIGlkIC0gQSB1bmlxdWUgaWRlbnRpZmllciAodHlwaWNhbGx5IGEgVUxJRClcbiAqIEByZXR1cm5zIFRoZSBzdHJlYW0gSUQgaW4gZm9ybWF0OiBgc3RybV97aWR9X3N5c3RlbV9hYm9ydGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFib3J0U3RyZWFtSWQoaWQ6IHN0cmluZykge1xuICByZXR1cm4gYHN0cm1fJHtpZH1fc3lzdGVtX2Fib3J0YDtcbn1cblxuY29uc3QgQUJPUlRfVE9LRU5fUFJFRklYID0gJ2FicnRfJztcblxuLyoqXG4gKiBEZXJpdmUgdGhlIGFib3J0IHN0cmVhbSBuYW1lIGZyb20gYSBob29rIHRva2VuLlxuICogSG9vayB0b2tlbnMgdXNlIHRoZSBmb3JtYXQgYGFicnRfe2lkfWAsIGFuZCB0aGUgY29ycmVzcG9uZGluZyBzdHJlYW0gaXNcbiAqIGBzdHJtX3tpZH1fc3lzdGVtX2Fib3J0YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFib3J0U3RyZWFtSWRGcm9tVG9rZW4oaG9va1Rva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWhvb2tUb2tlbi5zdGFydHNXaXRoKEFCT1JUX1RPS0VOX1BSRUZJWCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBhYm9ydCBob29rIHRva2VuIGZvcm1hdDogZXhwZWN0ZWQgXCJhYnJ0X1wiIHByZWZpeCwgZ290IFwiJHtob29rVG9rZW59XCJgXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZ2V0QWJvcnRTdHJlYW1JZChob29rVG9rZW4uc2xpY2UoQUJPUlRfVE9LRU5fUFJFRklYLmxlbmd0aCkpO1xufVxuXG4vKipcbiAqIEEgc21hbGwgd3JhcHBlciBhcm91bmQgYHdhaXRVbnRpbGAgdGhhdCBhbHNvIHJldHVybnNcbiAqIHRoZSByZXN1bHQgb2YgdGhlIGF3YWl0ZWQgcHJvbWlzZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRlZFVudGlsPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHJlc3VsdCA9IGZuKCk7XG4gIHdhaXRVbnRpbChcbiAgICByZXN1bHQuY2F0Y2goKCkgPT4ge1xuICAgICAgLy8gSWdub3JlIGVycm9yIGZyb20gdGhlIHByb21pc2UgYmVpbmcgcmVqZWN0ZWQuXG4gICAgICAvLyBJdCdzIGV4cGVjdGVkIHRoYXQgdGhlIGludm9rZXIgb2YgYHdhaXRlZFVudGlsYFxuICAgICAgLy8gd2lsbCBoYW5kbGUgdGhlIGVycm9yLlxuICAgIH0pXG4gICk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
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.5";
1
+ export declare const version = "5.0.0-beta.51";
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.5';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUMzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGdlbnZlcnNpb24uXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICc1LjAuMC1iZXRhLjUnXG4iXX0=
2
+ export const version = '5.0.0-beta.51';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUMzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGdlbnZlcnNpb24uXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICc1LjAuMC1iZXRhLjUxJ1xuIl19
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vm/index.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IAEb,cAAc,EAAE,MAAM,CAAC;CACxB;AAgCD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB;;;iCA4J1B,MAAM;EAItC"}
package/dist/vm/index.js CHANGED
@@ -1,8 +1,34 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { types } from 'node:util';
1
3
  import { runInContext, createContext as vmCreateContext } from 'node:vm';
2
4
  import { WorkflowRuntimeError } from '@workflow/errors';
3
5
  import seedrandom from 'seedrandom';
4
6
  import { installUint8ArrayBase64 } from './uint8array-base64.js';
5
7
  import { createRandomUUID } from './uuid.js';
8
+ // WebCrypto digest algorithm names → node:crypto (OpenSSL) names.
9
+ const DIGEST_ALGORITHMS = {
10
+ 'SHA-1': 'sha1',
11
+ 'SHA-256': 'sha256',
12
+ 'SHA-384': 'sha384',
13
+ 'SHA-512': 'sha512',
14
+ };
15
+ // WebCrypto BufferSource conversion. The `util.types` brand checks work
16
+ // across vm realms, and node:crypto's `hash.update()` reads view ranges from
17
+ // internal slots (own properties shadowing `byteOffset`/`byteLength` are
18
+ // ignored), matching WebCrypto, which also reads internal slots.
19
+ function toDigestInput(data) {
20
+ if (types.isTypedArray(data) || types.isDataView(data)) {
21
+ // WebCrypto's BufferSource excludes SharedArrayBuffer-backed views.
22
+ if (types.isSharedArrayBuffer(data.buffer)) {
23
+ throw new TypeError('crypto.subtle.digest does not accept SharedArrayBuffer-backed views');
24
+ }
25
+ return data;
26
+ }
27
+ if (!types.isArrayBuffer(data)) {
28
+ throw new TypeError('data must be an ArrayBuffer or ArrayBufferView');
29
+ }
30
+ return new Uint8Array(data);
31
+ }
6
32
  /**
7
33
  * Creates a Node.js `vm.Context` configured to be usable for
8
34
  * executing workflow logic in a deterministic environment.
@@ -18,15 +44,18 @@ export function createContext(options) {
18
44
  const g = runInContext('globalThis', context);
19
45
  // Deterministic `Math.random()`
20
46
  g.Math.random = rng;
21
- // Override `Date` constructor to return fixed time when called without arguments
47
+ // Override `Date` constructor to return fixed time when called without
48
+ // arguments. Constructing through `Reflect.construct` with `new.target`
49
+ // keeps subclassing intact (e.g. `TZDate` from `@date-fns/tz`), while a
50
+ // plain function (rather than a `class`) keeps `Date()` callable without
51
+ // `new`, which per spec ignores its arguments and returns the time string.
22
52
  const Date_ = g.Date;
23
53
  // biome-ignore lint/suspicious/noShadowRestrictedNames: We're shadowing the global `Date` property to make it deterministic.
24
54
  g.Date = function Date(...args) {
25
- if (args.length === 0) {
26
- return new Date_(fixedTimestamp);
55
+ if (new.target === undefined) {
56
+ return new Date_(fixedTimestamp).toString();
27
57
  }
28
- // @ts-expect-error - Args is `Date` constructor arguments
29
- return new Date_(...args);
58
+ return Reflect.construct(Date_, args.length === 0 ? [fixedTimestamp] : args, new.target);
30
59
  };
31
60
  g.Date.prototype = Date_.prototype;
32
61
  // Preserve static methods
@@ -42,7 +71,45 @@ export function createContext(options) {
42
71
  return array;
43
72
  }
44
73
  const randomUUID = createRandomUUID(rng);
45
- const boundDigest = originalSubtle.digest.bind(originalSubtle);
74
+ // The sandbox must not hand workflow code a promise that settles on host
75
+ // timing or a way to observe host state (best-effort, for non-adversarial
76
+ // code): every promise a workflow creates settles either from the event log
77
+ // or within its own microtask cascade, so a suspended VM is fully quiescent
78
+ // and can be retained across inline steps.
79
+ //
80
+ // - `Atomics.waitAsync` is a wall-clock timer (via SharedArrayBuffer).
81
+ // - The async `WebAssembly` entry points resolve on compile-thread timing;
82
+ // the synchronous `new WebAssembly.Module()` / `Instance()` remain.
83
+ // - `WeakRef.deref()` and finalizer callbacks observe GC timing.
84
+ // - Dynamic `import()` settles within a microtask (rejected: no
85
+ // `importModuleDynamically`), so it needs no handling.
86
+ // - All `crypto.subtle` methods except the deterministic `digest` override
87
+ // below throw explicitly (see the subtle proxy); binding them to the
88
+ // host subtle would hand workflows a host-timing promise.
89
+ const intrinsics = g;
90
+ delete intrinsics.Atomics.waitAsync;
91
+ delete intrinsics.WebAssembly.compile;
92
+ delete intrinsics.WebAssembly.instantiate;
93
+ delete intrinsics.WebAssembly.compileStreaming;
94
+ delete intrinsics.WebAssembly.instantiateStreaming;
95
+ delete intrinsics.WeakRef;
96
+ delete intrinsics.FinalizationRegistry;
97
+ // `crypto.subtle.digest` computes synchronously via node:crypto, so its
98
+ // promise settles on a deterministic microtask instead of host threadpool
99
+ // timing: a digest can never advance a suspended workflow, and
100
+ // digest-using VMs stay retainable. Values are byte-identical to WebCrypto.
101
+ const digest = async (algorithm, data) => {
102
+ const name = typeof algorithm === 'string' ? algorithm : algorithm.name;
103
+ const ossl = DIGEST_ALGORITHMS[name.toUpperCase()];
104
+ if (!ossl) {
105
+ throw new DOMException(`Unrecognized algorithm name: ${name}`, 'NotSupportedError');
106
+ }
107
+ const hash = createHash(ossl).update(toDigestInput(data)).digest();
108
+ // Copy out: small Buffers share the internal pool allocation.
109
+ const out = new ArrayBuffer(hash.byteLength);
110
+ new Uint8Array(out).set(hash);
111
+ return out;
112
+ };
46
113
  g.crypto = new Proxy(originalCrypto, {
47
114
  get(target, prop) {
48
115
  if (prop === 'getRandomValues') {
@@ -54,15 +121,18 @@ export function createContext(options) {
54
121
  if (prop === 'subtle') {
55
122
  return new Proxy(originalSubtle, {
56
123
  get(target, prop) {
57
- if (prop === 'generateKey') {
58
- return () => {
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.');
60
- };
124
+ if (prop === 'digest') {
125
+ return digest;
61
126
  }
62
- else if (prop === 'digest') {
63
- return boundDigest;
127
+ const value = target[prop];
128
+ if (typeof value !== 'function') {
129
+ return value;
64
130
  }
65
- return target[prop];
131
+ // Every other subtle method (`encrypt`, `sign`, `importKey`, …)
132
+ // settles on host threadpool timing, which cannot be replayed.
133
+ return () => {
134
+ throw new WorkflowRuntimeError(`\`crypto.subtle.${String(prop)}()\` is not available inside a workflow function. Move it to a step function where full Node.js crypto is available.`);
135
+ };
66
136
  },
67
137
  });
68
138
  }
@@ -100,4 +170,4 @@ export function createContext(options) {
100
170
  },
101
171
  };
102
172
  }
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdm0vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLElBQUksZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFRN0M7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUE2QjtJQUN6RCxJQUFJLEVBQUUsY0FBYyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDekIsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLE1BQU0sT0FBTyxHQUFHLGVBQWUsRUFBRSxDQUFDO0lBRWxDLE1BQU0sQ0FBQyxHQUFzQixZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWpFLGdDQUFnQztJQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFFcEIsaUZBQWlGO0lBQ2pGLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckIsNkhBQTZIO0lBQzVILENBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxJQUFJLENBQzdCLEdBQUcsSUFBK0M7UUFFbEQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELDBEQUEwRDtRQUMxRCxPQUFPLElB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QUMvQyxDQUFDLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7SUFDL0MsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztJQUV6QixvRUFBb0U7SUFDcEUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXRDLGlFQUFpRTtJQUNoRSxDQUFDLENBQUMsTUFBYyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUQsQ0FBQyxDQUFDLE1BQWMsQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRXJFLHNDQUFzQztJQUN0QyxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNkLENBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRTNDLE9BQU87UUFDTCxPQUFPO1FBQ1AsVUFBVSxFQUFFLENBQUM7UUFDYixlQUFlLEVBQUUsQ0FBQyxTQUFpQixFQUFFLEVBQUU7WUFDckMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUM3QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBydW5JbkNvbnRleHQsIGNyZWF0ZUNvbnRleHQgYXMgdm1DcmVhdGVDb250ZXh0IH0gZnJvbSAnbm9kZTp2bSc7XG5pbXBvcnQgeyBXb3JrZmxvd1J1bnRpbWVFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHNlZWRyYW5kb20gZnJvbSAnc2VlZHJhbmRvbSc7XG5pbXBvcnQgeyBpbnN0YWxsVWludDhBcnJheUJhc2U2NCB9IGZyb20gJy4vdWludDhhcnJheS1iYXNlNjQuanMnO1xuaW1wb3J0IHsgY3JlYXRlUmFuZG9tVVVJRCB9IGZyb20gJy4vdXVpZC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQ29udGV4dE9wdGlvbnMge1xuICBzZWVkOiBzdHJpbmc7XG4gIC8vIEZpeGVkIHRpbWVzdGFtcCBmb3IgZGV0ZXJtaW5pc3RpYyBEYXRlIG9wZXJhdGlvbnNcbiAgZml4ZWRUaW1lc3RhbXA6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgTm9kZS5qcyBgdm0uQ29udGV4dGAgY29uZmlndXJlZCB0byBiZSB1c2FibGUgZm9yXG4gKiBleGVjdXRpbmcgd29ya2Zsb3cgbG9naWMgaW4gYSBkZXRlcm1pbmlzdGljIGVudmlyb25tZW50LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb250ZXh0KG9wdGlvbnM6IENyZWF0ZUNvbnRleHRPcHRpb25zKSB7XG4gIGxldCB7IGZpeGVkVGltZXN0YW1wIH0gPSBvcHRpb25zO1xuICBjb25zdCB7IHNlZWQgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJuZyA9IHNlZWRyYW5kb20oc2VlZCk7XG4gIGNvbnN0IGNvbnRleHQgPSB2bUNyZWF0ZUNvbnRleHQoKTtcblxuICBjb25zdCBnOiB0eXBlb2YgZ2xvYmFsVGhpcyA9IHJ1bkluQ29udGV4dCgnZ2xvYmFsVGhpcycsIGNvbnRleHQpO1xuXG4gIC8vIERldGVybWluaXN0aWMgYE1hdGgucmFuZG9tKClgXG4gIGcuTWF0aC5yYW5kb20gPSBybmc7XG5cbiAgLy8gT3ZlcnJpZGUgYERhdGVgIGNvbnN0cnVjdG9yIHRvIHJldHVybiBmaXhlZCB0aW1lIHdoZW4gY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzXG4gIGNvbnN0IERhdGVfID0gZy5EYXRlO1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vU2hhZG93UmVzdHJpY3RlZE5hbWVzOiBXZSdyZSBzaGFkb3dpbmcgdGhlIGdsb2JhbCBgRGF0ZWAgcHJvcGVydHkgdG8gbWFrZSBpdCBkZXRlcm1pbmlzdGljLlxuICAoZyBhcyBhbnkpLkRhdGUgPSBmdW5jdGlvbiBEYXRlKFxuICAgIC4uLmFyZ3M6IFBhcmFtZXRlcnM8KHR5cGVvZiBnbG9iYWxUaGlzKVsnRGF0ZSddPltdXG4gICkge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlXyhmaXhlZFRpbWVzdGFtcCk7XG4gICAgfVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBBcmdzIGlzIGBEYXRlYCBjb25zdHJ1Y3RvciBhcmd1bWVudHNcbiAgICByZXR1cm4gbmV3IERhdGVfKC4uLmFyZ3MpO1xuICB9O1xuICAoZyBhcyBhbnkpLkRhdGUucHJvdG90eXBlID0gRGF0ZV8ucHJvdG90eXBlO1xuICAvLyBQcmVzZXJ2ZSBzdGF0aWMgbWV0aG9kc1xuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZy5EYXRlLCBEYXRlXyk7XG4gIGcuRGF0ZS5ub3cgPSAoKSA9PiBmaXhlZFRpbWVzdGFtcDtcblxuICAvLyBEZXRlcm1pbmlzdGljIGBjcnlwdG9gIHVzaW5nIFByb3h5IHRvIGF2b2lkIG11dGF0aW5nIGdsb2JhbCBvYmplY3RzXG4gIGNvbnN0IG9yaWdpbmFsQ3J5cHRvID0gZ2xvYmFsVGhpcy5jcnlwdG87XG4gIGNvbnN0IG9yaWdpbmFsU3VidGxlID0gb3JpZ2luYWxDcnlwdG8uc3VidGxlO1xuXG4gIGZ1bmN0aW9uIGdldFJhbmRvbVZhbHVlcyhhcnJheTogVWludDhBcnJheSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycmF5W2ldID0gTWF0aC5mbG9vcihybmcoKSAqIDI1Nik7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIGNvbnN0IHJhbmRvbVVVSUQgPSBjcmVhdGVSYW5kb21VVUlEKHJuZyk7XG5cbiAgY29uc3QgYm91bmREaWdlc3QgPSBvcmlnaW5hbFN1YnRsZS5kaWdlc3QuYmluZChvcmlnaW5hbFN1YnRsZSk7XG5cbiAgZy5jcnlwdG8gPSBuZXcgUHJveHkob3JpZ2luYWxDcnlwdG8sIHtcbiAgICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgICBpZiAocHJvcCA9PT0gJ2dldFJhbmRvbVZhbHVlcycpIHtcbiAgICAgICAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wID09PSAncmFuZG9tVVVJRCcpIHtcbiAgICAgICAgcmV0dXJuIHJhbmRvbVVVSUQ7XG4gICAgICB9XG4gICAgICBpZiAocHJvcCA9PT0gJ3N1YnRsZScpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eShvcmlnaW5hbFN1YnRsZSwge1xuICAgICAgICAgIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIGlmIChwcm9wID09PSAnZ2VuZXJhdGVLZXknKSB7XG4gICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgICAgICAgICAgICAgICAgJ2BjcnlwdG8uc3VidGxlLmdlbmVyYXRlS2V5KClgIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIGEgd29ya2Zsb3cgZnVuY3Rpb24uIE1vdmUga2V5IGdlbmVyYXRpb24gdG8gYSBzdGVwIGZ1bmN0aW9uIHdoZXJlIGZ1bGwgTm9kZS5qcyBjcnlwdG8gaXMgYXZhaWxhYmxlLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wID09PSAnZGlnZXN0Jykge1xuICAgICAgICAgICAgICByZXR1cm4gYm91bmREaWdlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3AgYXMga2V5b2YgdHlwZW9mIG9yaWdpbmFsU3VidGxlXTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXRbcHJvcCBhcyBrZXlvZiB0eXBlb2Ygb3JpZ2luYWxDcnlwdG9dO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFByb3BhZ2F0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgKGcgYXMgYW55KS5wcm9jZXNzID0ge1xuICAgIGVudjogT2JqZWN0LmZyZWV6ZSh7IC4uLnByb2Nlc3MuZW52IH0pLFxuICB9O1xuXG4gIC8vIFN0YXRlbGVzcyArIHN5bmNocm9ub3VzIFdlYiBBUElzIHRoYXQgYXJlIG1hZGUgYXZhaWxhYmxlIGluc2lkZSB0aGUgc2FuZGJveFxuICBnLkRPTUV4Y2VwdGlvbiA9IGdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uO1xuICBnLkhlYWRlcnMgPSBnbG9iYWxUaGlzLkhlYWRlcnM7XG4gIGcuVGV4dEVuY29kZXIgPSBnbG9iYWxUaGlzLlRleHRFbmNvZGVyO1xuICBnLlRleHREZWNvZGVyID0gZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcjtcbiAgZy5jb25zb2xlID0gZ2xvYmFsVGhpcy5jb25zb2xlO1xuICBnLlVSTCA9IGdsb2JhbFRoaXMuVVJMO1xuICBnLlVSTFNlYXJjaFBhcmFtcyA9IGdsb2JhbFRoaXMuVVJMU2VhcmNoUGFyYW1zO1xuICBnLnN0cnVjdHVyZWRDbG9uZSA9IGdsb2JhbFRoaXMuc3RydWN0dXJlZENsb25lO1xuICBnLmF0b2IgPSBnbG9iYWxUaGlzLmF0b2I7XG4gIGcuYnRvYSA9IGdsb2JhbFRoaXMuYnRvYTtcblxuICAvLyBUQzM5IFVpbnQ4QXJyYXkgYmFzZTY0L2hleCBwb2x5ZmlsbCAocHJvcG9zYWwtYXJyYXlidWZmZXItYmFzZTY0KVxuICBpbnN0YWxsVWludDhBcnJheUJhc2U2NChnLlVpbnQ4QXJyYXkpO1xuXG4gIC8vIFRDMzkgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBwb2x5ZmlsbCBmb3IgYHVzaW5nYCBrZXl3b3JkXG4gIChnLlN5bWJvbCBhcyBhbnkpLmRpc3Bvc2UgPz89IFN5bWJvbC5mb3IoJ1N5bWJvbC5kaXNwb3NlJyk7XG4gIChnLlN5bWJvbCBhcyBhbnkpLmFzeW5jRGlzcG9zZSA/Pz0gU3ltYm9sLmZvcignU3ltYm9sLmFzeW5jRGlzcG9zZScpO1xuXG4gIC8vIEhBQ0s6IFNoaW0gYGV4cG9ydHNgIGZvciB0aGUgYnVuZGxlXG4gIGcuZXhwb3J0cyA9IHt9O1xuICAoZyBhcyBhbnkpLm1vZHVsZSA9IHsgZXhwb3J0czogZy5leHBvcnRzIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0LFxuICAgIGdsb2JhbFRoaXM6IGcsXG4gICAgdXBkYXRlVGltZXN0YW1wOiAodGltZXN0YW1wOiBudW1iZXIpID0+IHtcbiAgICAgIGZpeGVkVGltZXN0YW1wID0gdGltZXN0YW1wO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdm0vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxJQUFJLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLFVBQVUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBUTdDLGtFQUFrRTtBQUNsRSxNQUFNLGlCQUFpQixHQUEyQjtJQUNoRCxPQUFPLEVBQUUsTUFBTTtJQUNmLFNBQVMsRUFBRSxRQUFRO0lBQ25CLFNBQVMsRUFBRSxRQUFRO0lBQ25CLFNBQVMsRUFBRSxRQUFRO0NBQ3BCLENBQUM7QUFFRix3RUFBd0U7QUFDeEUsNkVBQTZFO0FBQzdFLHlFQUF5RTtBQUN6RSxpRUFBaUU7QUFDakUsU0FBUyxhQUFhLENBQ3BCLElBQW1DO0lBRW5DLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkQsb0VBQW9FO1FBQ3BFLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sSUFBSSxTQUFTLENBQ2pCLHFFQUFxRSxDQUN0RSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxD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QyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztJQUN2QyxDQUFDLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztJQUMvQyxDQUFDLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7SUFDL0MsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztJQUV6QixvRUFBb0U7SUFDcEUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXRDLGlFQUFpRTtJQUNoRSxDQUFDLENBQUMsTUFBYyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUQsQ0FBQyxDQUFDLE1BQWMsQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRXJFLHNDQUFzQztJQUN0QyxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNkLENBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRTNDLE9BQU87UUFDTCxPQUFPO1FBQ1AsVUFBVSxFQUFFLENBQUM7UUFDYixlQUFlLEVBQUUsQ0FBQyxTQUFpQixFQUFFLEVBQUU7WUFDckMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUM3QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgdHlwZXMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgcnVuSW5Db250ZXh0LCBjcmVhdGVDb250ZXh0IGFzIHZtQ3JlYXRlQ29udGV4dCB9IGZyb20gJ25vZGU6dm0nO1xuaW1wb3J0IHsgV29ya2Zsb3dSdW50aW1lRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCBzZWVkcmFuZG9tIGZyb20gJ3NlZWRyYW5kb20nO1xuaW1wb3J0IHsgaW5zdGFsbFVpbnQ4QXJyYXlCYXNlNjQgfSBmcm9tICcuL3VpbnQ4YXJyYXktYmFzZTY0LmpzJztcbmltcG9ydCB7IGNyZWF0ZVJhbmRvbVVVSUQgfSBmcm9tICcuL3V1aWQuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUNvbnRleHRPcHRpb25zIHtcbiAgc2VlZDogc3RyaW5nO1xuICAvLyBGaXhlZCB0aW1lc3RhbXAgZm9yIGRldGVybWluaXN0aWMgRGF0ZSBvcGVyYXRpb25zXG4gIGZpeGVkVGltZXN0YW1wOiBudW1iZXI7XG59XG5cbi8vIFdlYkNyeXB0byBkaWdlc3QgYWxnb3JpdGhtIG5hbWVzIOKGkiBub2RlOmNyeXB0byAoT3BlblNTTCkgbmFtZXMuXG5jb25zdCBESUdFU1RfQUxHT1JJVEhNUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ1NIQS0xJzogJ3NoYTEnLFxuICAnU0hBLTI1Nic6ICdzaGEyNTYnLFxuICAnU0hBLTM4NCc6ICdzaGEzODQnLFxuICAnU0hBLTUxMic6ICdzaGE1MTInLFxufTtcblxuLy8gV2ViQ3J5cHRvIEJ1ZmZlclNvdXJjZSBjb252ZXJzaW9uLiBUaGUgYHV0aWwudHlwZXNgIGJyYW5kIGNoZWNrcyB3b3JrXG4vLyBhY3Jvc3Mgdm0gcmVhbG1zLCBhbmQgbm9kZTpjcnlwdG8ncyBgaGFzaC51cGRhdGUoKWAgcmVhZHMgdmlldyByYW5nZXMgZnJvbVxuLy8gaW50ZXJuYWwgc2xvdHMgKG93biBwcm9wZXJ0aWVzIHNoYWRvd2luZyBgYnl0ZU9mZnNldGAvYGJ5dGVMZW5ndGhgIGFyZVxuLy8gaWdub3JlZCksIG1hdGNoaW5nIFdlYkNyeXB0bywgd2hpY2ggYWxzbyByZWFkcyBpbnRlcm5hbCBzbG90cy5cbmZ1bmN0aW9uIHRvRGlnZXN0SW5wdXQoXG4gIGRhdGE6IEFycmF5QnVmZmVyIHwgQXJyYXlCdWZmZXJWaWV3XG4pOiBOb2RlSlMuQXJyYXlCdWZmZXJWaWV3IHtcbiAgaWYgKHR5cGVzLmlzVHlwZWRBcnJheShkYXRhKSB8fCB0eXBlcy5pc0RhdGFWaWV3KGRhdGEpKSB7XG4gICAgLy8gV2ViQ3J5cHRvJ3MgQnVmZmVyU291cmNlIGV4Y2x1ZGVzIFNoYXJlZEFycmF5QnVmZmVyLWJhY2tlZCB2aWV3cy5cbiAgICBpZiAodHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihkYXRhLmJ1ZmZlcikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdjcnlwdG8uc3VidGxlLmRpZ2VzdCBkb2VzIG5vdCBhY2NlcHQgU2hhcmVkQXJyYXlCdWZmZXItYmFja2VkIHZpZXdzJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgaWYgKCF0eXBlcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldycpO1xuICB9XG4gIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgTm9kZS5qcyBgdm0uQ29udGV4dGAgY29uZmlndXJlZCB0byBiZSB1c2FibGUgZm9yXG4gKiBleGVjdXRpbmcgd29ya2Zsb3cgbG9naWMgaW4gYSBkZXRlcm1pbmlzdGljIGVudmlyb25tZW50LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb250ZXh0KG9wdGlvbnM6IENyZWF0ZUNvbnRleHRPcHRpb25zKSB7XG4gIGxldCB7IGZpeGVkVGltZXN0YW1wIH0gPSBvcHRpb25zO1xuICBjb25zdCB7IHNlZWQgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJuZyA9IHNlZWRyYW5kb20oc2VlZCk7XG4gIGNvbnN0IGNvbnRleHQgPSB2bUNyZWF0ZUNvbnRleHQoKTtcblxuICBjb25zdCBnOiB0eXBlb2YgZ2xvYmFsVGhpcyA9IHJ1bkluQ29udGV4dCgnZ2xvYmFsVGhpcycsIGNvbnRleHQpO1xuXG4gIC8vIERldGVybWluaXN0aWMgYE1hdGgucmFuZG9tKClgXG4gIGcuTWF0aC5yYW5kb20gPSBybmc7XG5cbiAgLy8gT3ZlcnJpZGUgYERhdGVgIGNvbnN0cnVjdG9yIHRvIHJldHVybiBmaXhlZCB0aW1lIHdoZW4gY2FsbGVkIHdpdGhvdXRcbiAgLy8gYXJndW1lbnRzLiBDb25zdHJ1Y3RpbmcgdGhyb3VnaCBgUmVmbGVjdC5jb25zdHJ1Y3RgIHdpdGggYG5ldy50YXJnZXRgXG4gIC8vIGtlZXBzIHN1YmNsYXNzaW5nIGludGFjdCAoZS5nLiBgVFpEYXRlYCBmcm9tIGBAZGF0ZS1mbnMvdHpgKSwgd2hpbGUgYVxuICAvLyBwbGFpbiBmdW5jdGlvbiAocmF0aGVyIHRoYW4gYSBgY2xhc3NgKSBrZWVwcyBgRGF0ZSgpYCBjYWxsYWJsZSB3aXRob3V0XG4gIC8vIGBuZXdgLCB3aGljaCBwZXIgc3BlYyBpZ25vcmVzIGl0cyBhcmd1bWVudHMgYW5kIHJldHVybnMgdGhlIHRpbWUgc3RyaW5nLlxuICBjb25zdCBEYXRlXyA9IGcuRGF0ZTtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1NoYWRvd1Jlc3RyaWN0ZWROYW1lczogV2UncmUgc2hhZG93aW5nIHRoZSBnbG9iYWwgYERhdGVgIHByb3BlcnR5IHRvIG1ha2UgaXQgZGV0ZXJtaW5pc3RpYy5cbiAgKGcgYXMgYW55KS5EYXRlID0gZnVuY3Rpb24gRGF0ZSguLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmIChuZXcudGFyZ2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZV8oZml4ZWRUaW1lc3RhbXApLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBSZWZsZWN0LmNvbnN0cnVjdChcbiAgICAgIERhdGVfLFxuICAgICAgYXJncy5sZW5ndGggPT09IDAgPyBbZml4ZWRUaW1lc3RhbXBdIDogYXJncyxcbiAgICAgIG5ldy50YXJnZXRcbiAgICApO1xuICB9O1xuICAoZyBhcyBhbnkpLkRhdGUucHJvdG90eXBlID0gRGF0ZV8ucHJvdG90eXBlO1xuICAvLyBQcmVzZXJ2ZSBzdGF0aWMgbWV0aG9kc1xuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZy5EYXRlLCBEYXRlXyk7XG4gIGcuRGF0ZS5ub3cgPSAoKSA9PiBmaXhlZFRpbWVzdGFtcDtcblxuICAvLyBEZXRlcm1pbmlzdGljIGBjcnlwdG9gIHVzaW5nIFByb3h5IHRvIGF2b2lkIG11dGF0aW5nIGdsb2JhbCBvYmplY3RzXG4gIGNvbnN0IG9yaWdpbmFsQ3J5cHRvID0gZ2xvYmFsVGhpcy5jcnlwdG87XG4gIGNvbnN0IG9yaWdpbmFsU3VidGxlID0gb3JpZ2luYWxDcnlwdG8uc3VidGxlO1xuXG4gIGZ1bmN0aW9uIGdldFJhbmRvbVZhbHVlcyhhcnJheTogVWludDhBcnJheSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycmF5W2ldID0gTWF0aC5mbG9vcihybmcoKSAqIDI1Nik7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIGNvbnN0IHJhbmRvbVVVSUQgPSBjcmVhdGVSYW5kb21VVUlEKHJuZyk7XG5cbiAgLy8gVGhlIHNhbmRib3ggbXVzdCBub3QgaGFuZCB3b3JrZmxvdyBjb2RlIGEgcHJvbWlzZSB0aGF0IHNldHRsZXMgb24gaG9zdFxuICAvLyB0aW1pbmcgb3IgYSB3YXkgdG8gb2JzZXJ2ZSBob3N0IHN0YXRlIChiZXN0LWVmZm9ydCwgZm9yIG5vbi1hZHZlcnNhcmlhbFxuICAvLyBjb2RlKTogZXZlcnkgcHJvbWlzZSBhIHdvcmtmbG93IGNyZWF0ZXMgc2V0dGxlcyBlaXRoZXIgZnJvbSB0aGUgZXZlbnQgbG9nXG4gIC8vIG9yIHdpdGhpbiBpdHMgb3duIG1pY3JvdGFzayBjYXNjYWRlLCBzbyBhIHN1c3BlbmRlZCBWTSBpcyBmdWxseSBxdWllc2NlbnRcbiAgLy8gYW5kIGNhbiBiZSByZXRhaW5lZCBhY3Jvc3MgaW5saW5lIHN0ZXBzLlxuICAvL1xuICAvLyAtIGBBdG9taWNzLndhaXRBc3luY2AgaXMgYSB3YWxsLWNsb2NrIHRpbWVyICh2aWEgU2hhcmVkQXJyYXlCdWZmZXIpLlxuICAvLyAtIFRoZSBhc3luYyBgV2ViQXNzZW1ibHlgIGVudHJ5IHBvaW50cyByZXNvbHZlIG9uIGNvbXBpbGUtdGhyZWFkIHRpbWluZztcbiAgLy8gICB0aGUgc3luY2hyb25vdXMgYG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoKWAgLyBgSW5zdGFuY2UoKWAgcmVtYWluLlxuICAvLyAtIGBXZWFrUmVmLmRlcmVmKClgIGFuZCBmaW5hbGl6ZXIgY2FsbGJhY2tzIG9ic2VydmUgR0MgdGltaW5nLlxuICAvLyAtIER5bmFtaWMgYGltcG9ydCgpYCBzZXR0bGVzIHdpdGhpbiBhIG1pY3JvdGFzayAocmVqZWN0ZWQ6IG5vXG4gIC8vICAgYGltcG9ydE1vZHVsZUR5bmFtaWNhbGx5YCksIHNvIGl0IG5lZWRzIG5vIGhhbmRsaW5nLlxuICAvLyAtIEFsbCBgY3J5cHRvLnN1YnRsZWAgbWV0aG9kcyBleGNlcHQgdGhlIGRldGVybWluaXN0aWMgYGRpZ2VzdGAgb3ZlcnJpZGVcbiAgLy8gICBiZWxvdyB0aHJvdyBleHBsaWNpdGx5IChzZWUgdGhlIHN1YnRsZSBwcm94eSk7IGJpbmRpbmcgdGhlbSB0byB0aGVcbiAgLy8gICBob3N0IHN1YnRsZSB3b3VsZCBoYW5kIHdvcmtmbG93cyBhIGhvc3QtdGltaW5nIHByb21pc2UuXG4gIGNvbnN0IGludHJpbnNpY3MgPSBnIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICBkZWxldGUgaW50cmluc2ljcy5BdG9taWNzLndhaXRBc3luYztcbiAgZGVsZXRlIGludHJpbnNpY3MuV2ViQXNzZW1ibHkuY29tcGlsZTtcbiAgZGVsZXRlIGludHJpbnNpY3MuV2ViQXNzZW1ibHkuaW5zdGFudGlhdGU7XG4gIGRlbGV0ZSBpbnRyaW5zaWNzLldlYkFzc2VtYmx5LmNvbXBpbGVTdHJlYW1pbmc7XG4gIGRlbGV0ZSBpbnRyaW5zaWNzLldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nO1xuICBkZWxldGUgaW50cmluc2ljcy5XZWFrUmVmO1xuICBkZWxldGUgaW50cmluc2ljcy5GaW5hbGl6YXRpb25SZWdpc3RyeTtcblxuICAvLyBgY3J5cHRvLnN1YnRsZS5kaWdlc3RgIGNvbXB1dGVzIHN5bmNocm9ub3VzbHkgdmlhIG5vZGU6Y3J5cHRvLCBzbyBpdHNcbiAgLy8gcHJvbWlzZSBzZXR0bGVzIG9uIGEgZGV0ZXJtaW5pc3RpYyBtaWNyb3Rhc2sgaW5zdGVhZCBvZiBob3N0IHRocmVhZHBvb2xcbiAgLy8gdGltaW5nOiBhIGRpZ2VzdCBjYW4gbmV2ZXIgYWR2YW5jZSBhIHN1c3BlbmRlZCB3b3JrZmxvdywgYW5kXG4gIC8vIGRpZ2VzdC11c2luZyBWTXMgc3RheSByZXRhaW5hYmxlLiBWYWx1ZXMgYXJlIGJ5dGUtaWRlbnRpY2FsIHRvIFdlYkNyeXB0by5cbiAgY29uc3QgZGlnZXN0ID0gYXN5bmMgKFxuICAgIGFsZ29yaXRobTogc3RyaW5nIHwgeyBuYW1lOiBzdHJpbmcgfSxcbiAgICBkYXRhOiBBcnJheUJ1ZmZlciB8IEFycmF5QnVmZmVyVmlld1xuICApOiBQcm9taXNlPEFycmF5QnVmZmVyPiA9PiB7XG4gICAgY29uc3QgbmFtZSA9IHR5cGVvZiBhbGdvcml0aG0gPT09ICdzdHJpbmcnID8gYWxnb3JpdGhtIDogYWxnb3JpdGhtLm5hbWU7XG4gICAgY29uc3Qgb3NzbCA9IERJR0VTVF9BTEdPUklUSE1TW25hbWUudG9VcHBlckNhc2UoKV07XG4gICAgaWYgKCFvc3NsKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICBgVW5yZWNvZ25pemVkIGFsZ29yaXRobSBuYW1lOiAke25hbWV9YCxcbiAgICAgICAgJ05vdFN1cHBvcnRlZEVycm9yJ1xuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2gob3NzbCkudXBkYXRlKHRvRGlnZXN0SW5wdXQoZGF0YSkpLmRpZ2VzdCgpO1xuICAgIC8vIENvcHkgb3V0OiBzbWFsbCBCdWZmZXJzIHNoYXJlIHRoZSBpbnRlcm5hbCBwb29sIGFsbG9jYXRpb24uXG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5QnVmZmVyKGhhc2guYnl0ZUxlbmd0aCk7XG4gICAgbmV3IFVpbnQ4QXJyYXkob3V0KS5zZXQoaGFzaCk7XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcblxuICBnLmNyeXB0byA9IG5ldyBQcm94eShvcmlnaW5hbENyeXB0bywge1xuICAgIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICAgIGlmIChwcm9wID09PSAnZ2V0UmFuZG9tVmFsdWVzJykge1xuICAgICAgICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3AgPT09ICdyYW5kb21VVUlEJykge1xuICAgICAgICByZXR1cm4gcmFuZG9tVVVJRDtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wID09PSAnc3VidGxlJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3h5KG9yaWdpbmFsU3VidGxlLCB7XG4gICAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgaWYgKHByb3AgPT09ICdkaWdlc3QnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkaWdlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldFtwcm9wIGFzIGtleW9mIHR5cGVvZiBvcmlnaW5hbFN1YnRsZV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEV2ZXJ5IG90aGVyIHN1YnRsZSBtZXRob2QgKGBlbmNyeXB0YCwgYHNpZ25gLCBgaW1wb3J0S2V5YCwg4oCmKVxuICAgICAgICAgICAgLy8gc2V0dGxlcyBvbiBob3N0IHRocmVhZHBvb2wgdGltaW5nLCB3aGljaCBjYW5ub3QgYmUgcmVwbGF5ZWQuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgICAgICAgICAgYFxcYGNyeXB0by5zdWJ0bGUuJHtTdHJpbmcocHJvcCl9KClcXGAgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgYSB3b3JrZmxvdyBmdW5jdGlvbi4gTW92ZSBpdCB0byBhIHN0ZXAgZnVuY3Rpb24gd2hlcmUgZnVsbCBOb2RlLmpzIGNyeXB0byBpcyBhdmFpbGFibGUuYFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXRbcHJvcCBhcyBrZXlvZiB0eXBlb2Ygb3JpZ2luYWxDcnlwdG9dO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFByb3BhZ2F0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgKGcgYXMgYW55KS5wcm9jZXNzID0ge1xuICAgIGVudjogT2JqZWN0LmZyZWV6ZSh7IC4uLnByb2Nlc3MuZW52IH0pLFxuICB9O1xuXG4gIC8vIFN0YXRlbGVzcyArIHN5bmNocm9ub3VzIFdlYiBBUElzIHRoYXQgYXJlIG1hZGUgYXZhaWxhYmxlIGluc2lkZSB0aGUgc2FuZGJveFxuICBnLkRPTUV4Y2VwdGlvbiA9IGdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uO1xuICBnLkhlYWRlcnMgPSBnbG9iYWxUaGlzLkhlYWRlcnM7XG4gIGcuVGV4dEVuY29kZXIgPSBnbG9iYWxUaGlzLlRleHRFbmNvZGVyO1xuICBnLlRleHREZWNvZGVyID0gZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcjtcbiAgZy5jb25zb2xlID0gZ2xvYmFsVGhpcy5jb25zb2xlO1xuICBnLlVSTCA9IGdsb2JhbFRoaXMuVVJMO1xuICBnLlVSTFNlYXJjaFBhcmFtcyA9IGdsb2JhbFRoaXMuVVJMU2VhcmNoUGFyYW1zO1xuICBnLnN0cnVjdHVyZWRDbG9uZSA9IGdsb2JhbFRoaXMuc3RydWN0dXJlZENsb25lO1xuICBnLmF0b2IgPSBnbG9iYWxUaGlzLmF0b2I7XG4gIGcuYnRvYSA9IGdsb2JhbFRoaXMuYnRvYTtcblxuICAvLyBUQzM5IFVpbnQ4QXJyYXkgYmFzZTY0L2hleCBwb2x5ZmlsbCAocHJvcG9zYWwtYXJyYXlidWZmZXItYmFzZTY0KVxuICBpbnN0YWxsVWludDhBcnJheUJhc2U2NChnLlVpbnQ4QXJyYXkpO1xuXG4gIC8vIFRDMzkgRXhwbGljaXQgUmVzb3VyY2UgTWFuYWdlbWVudCBwb2x5ZmlsbCBmb3IgYHVzaW5nYCBrZXl3b3JkXG4gIChnLlN5bWJvbCBhcyBhbnkpLmRpc3Bvc2UgPz89IFN5bWJvbC5mb3IoJ1N5bWJvbC5kaXNwb3NlJyk7XG4gIChnLlN5bWJvbCBhcyBhbnkpLmFzeW5jRGlzcG9zZSA/Pz0gU3ltYm9sLmZvcignU3ltYm9sLmFzeW5jRGlzcG9zZScpO1xuXG4gIC8vIEhBQ0s6IFNoaW0gYGV4cG9ydHNgIGZvciB0aGUgYnVuZGxlXG4gIGcuZXhwb3J0cyA9IHt9O1xuICAoZyBhcyBhbnkpLm1vZHVsZSA9IHsgZXhwb3J0czogZy5leHBvcnRzIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0LFxuICAgIGdsb2JhbFRoaXM6IGcsXG4gICAgdXBkYXRlVGltZXN0YW1wOiAodGltZXN0YW1wOiBudW1iZXIpID0+IHtcbiAgICAgIGZpeGVkVGltZXN0YW1wID0gdGltZXN0YW1wO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
@@ -0,0 +1,26 @@
1
+ import { Script } from 'node:vm';
2
+ /**
3
+ * Returns a compiled `vm.Script` for the given source code and filename,
4
+ * compiling and caching it on first use. Subsequent calls with the same
5
+ * `(code, filename)` return the cached `Script`.
6
+ *
7
+ * The returned `Script` is not yet bound to any context; the caller runs it
8
+ * against a specific VM context via `script.runInContext(context)`. This is
9
+ * equivalent to `vm.runInContext(code, context, { filename })` but skips the
10
+ * recompile.
11
+ */
12
+ export declare function getCachedWorkflowScript(code: string, filename: string): {
13
+ script: Script;
14
+ cacheHit: boolean;
15
+ };
16
+ /**
17
+ * Clears the compiled-script cache. Intended for tests that want to assert
18
+ * compile-vs-cache behaviour in isolation; not used on the hot path.
19
+ */
20
+ export declare function clearWorkflowScriptCache(): void;
21
+ /**
22
+ * Number of distinct script source strings currently retained. Exposed for
23
+ * tests asserting the LRU bound; not used on the hot path.
24
+ */
25
+ export declare function workflowScriptCacheSize(): number;
26
+ //# sourceMappingURL=script-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-cache.d.ts","sourceRoot":"","sources":["../../src/vm/script-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAuFjC;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAsBvC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}