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

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 (310) hide show
  1. package/dist/attribute-changes.d.ts +5 -0
  2. package/dist/attribute-changes.d.ts.map +1 -0
  3. package/dist/attribute-changes.js +25 -0
  4. package/dist/capabilities.d.ts +35 -2
  5. package/dist/capabilities.d.ts.map +1 -1
  6. package/dist/capabilities.js +74 -5
  7. package/dist/capture-stack.d.ts +1 -1
  8. package/dist/capture-stack.js +2 -2
  9. package/dist/class-serialization.d.ts +32 -0
  10. package/dist/class-serialization.d.ts.map +1 -1
  11. package/dist/class-serialization.js +37 -1
  12. package/dist/classify-error.d.ts +19 -3
  13. package/dist/classify-error.d.ts.map +1 -1
  14. package/dist/classify-error.js +98 -6
  15. package/dist/context-violation-error.d.ts +5 -5
  16. package/dist/context-violation-error.d.ts.map +1 -1
  17. package/dist/context-violation-error.js +8 -6
  18. package/dist/create-hook.d.ts +72 -7
  19. package/dist/create-hook.d.ts.map +1 -1
  20. package/dist/create-hook.js +1 -1
  21. package/dist/define-hook.js +2 -2
  22. package/dist/describe-error.d.ts +7 -7
  23. package/dist/describe-error.d.ts.map +1 -1
  24. package/dist/describe-error.js +97 -12
  25. package/dist/encryption.d.ts +38 -4
  26. package/dist/encryption.d.ts.map +1 -1
  27. package/dist/encryption.js +96 -14
  28. package/dist/events-consumer.d.ts +271 -0
  29. package/dist/events-consumer.d.ts.map +1 -1
  30. package/dist/events-consumer.js +646 -42
  31. package/dist/flushable-stream.d.ts +56 -1
  32. package/dist/flushable-stream.d.ts.map +1 -1
  33. package/dist/flushable-stream.js +123 -11
  34. package/dist/global.d.ts +36 -2
  35. package/dist/global.d.ts.map +1 -1
  36. package/dist/global.js +21 -6
  37. package/dist/index.d.ts +2 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +3 -2
  40. package/dist/log-format.d.ts +2 -2
  41. package/dist/log-format.js +7 -7
  42. package/dist/logger.d.ts +1 -0
  43. package/dist/logger.d.ts.map +1 -1
  44. package/dist/logger.js +10 -6
  45. package/dist/private.d.ts +226 -9
  46. package/dist/private.d.ts.map +1 -1
  47. package/dist/private.js +626 -7
  48. package/dist/replay-payload-cache.d.ts +64 -0
  49. package/dist/replay-payload-cache.d.ts.map +1 -0
  50. package/dist/replay-payload-cache.js +158 -0
  51. package/dist/runtime/compute-instance.d.ts +13 -0
  52. package/dist/runtime/compute-instance.d.ts.map +1 -0
  53. package/dist/runtime/compute-instance.js +14 -0
  54. package/dist/runtime/constants.d.ts +315 -0
  55. package/dist/runtime/constants.d.ts.map +1 -1
  56. package/dist/runtime/constants.js +502 -16
  57. package/dist/runtime/count-step-started-events.d.ts +52 -0
  58. package/dist/runtime/count-step-started-events.d.ts.map +1 -0
  59. package/dist/runtime/count-step-started-events.js +72 -0
  60. package/dist/runtime/deployment-guard.d.ts +99 -0
  61. package/dist/runtime/deployment-guard.d.ts.map +1 -0
  62. package/dist/runtime/deployment-guard.js +154 -0
  63. package/dist/runtime/get-port-lazy.d.ts +15 -0
  64. package/dist/runtime/get-port-lazy.d.ts.map +1 -1
  65. package/dist/runtime/get-port-lazy.js +75 -6
  66. package/dist/runtime/get-world-lazy.d.ts +5 -14
  67. package/dist/runtime/get-world-lazy.d.ts.map +1 -1
  68. package/dist/runtime/get-world-lazy.js +19 -29
  69. package/dist/runtime/helpers.d.ts +341 -29
  70. package/dist/runtime/helpers.d.ts.map +1 -1
  71. package/dist/runtime/helpers.js +559 -57
  72. package/dist/runtime/quickjs-assets.generated.d.ts +14 -0
  73. package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -0
  74. package/dist/runtime/quickjs-assets.generated.js +30 -0
  75. package/dist/runtime/quickjs-entrypoint.d.ts +136 -0
  76. package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -0
  77. package/dist/runtime/quickjs-entrypoint.js +1686 -0
  78. package/dist/runtime/quickjs-runtime.d.ts +244 -0
  79. package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
  80. package/dist/runtime/quickjs-runtime.js +2427 -0
  81. package/dist/runtime/quickjs-serde.d.ts +107 -0
  82. package/dist/runtime/quickjs-serde.d.ts.map +1 -0
  83. package/dist/runtime/quickjs-serde.js +2159 -0
  84. package/dist/runtime/replay-budget.d.ts +97 -0
  85. package/dist/runtime/replay-budget.d.ts.map +1 -0
  86. package/dist/runtime/replay-budget.js +139 -0
  87. package/dist/runtime/replay-recovery-reporter.d.ts +36 -0
  88. package/dist/runtime/replay-recovery-reporter.d.ts.map +1 -0
  89. package/dist/runtime/replay-recovery-reporter.js +64 -0
  90. package/dist/runtime/resume-hook.d.ts +91 -8
  91. package/dist/runtime/resume-hook.d.ts.map +1 -1
  92. package/dist/runtime/resume-hook.js +512 -89
  93. package/dist/runtime/resume-latency.d.ts +150 -0
  94. package/dist/runtime/resume-latency.d.ts.map +1 -0
  95. package/dist/runtime/resume-latency.js +155 -0
  96. package/dist/runtime/run-id-time.d.ts +19 -0
  97. package/dist/runtime/run-id-time.d.ts.map +1 -0
  98. package/dist/runtime/run-id-time.js +42 -0
  99. package/dist/runtime/run.d.ts +72 -7
  100. package/dist/runtime/run.d.ts.map +1 -1
  101. package/dist/runtime/run.js +280 -53
  102. package/dist/runtime/runs.d.ts +54 -3
  103. package/dist/runtime/runs.d.ts.map +1 -1
  104. package/dist/runtime/runs.js +126 -16
  105. package/dist/runtime/start.d.ts +101 -2
  106. package/dist/runtime/start.d.ts.map +1 -1
  107. package/dist/runtime/start.js +352 -61
  108. package/dist/runtime/step-executor.d.ts +205 -5
  109. package/dist/runtime/step-executor.d.ts.map +1 -1
  110. package/dist/runtime/step-executor.js +760 -127
  111. package/dist/runtime/step-latency.d.ts +220 -0
  112. package/dist/runtime/step-latency.d.ts.map +1 -0
  113. package/dist/runtime/step-latency.js +215 -0
  114. package/dist/runtime/step-ownership.d.ts +72 -0
  115. package/dist/runtime/step-ownership.d.ts.map +1 -0
  116. package/dist/runtime/step-ownership.js +114 -0
  117. package/dist/runtime/step-single-flight.d.ts +12 -0
  118. package/dist/runtime/step-single-flight.d.ts.map +1 -0
  119. package/dist/runtime/step-single-flight.js +75 -0
  120. package/dist/runtime/suspension-handler.d.ts +269 -7
  121. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  122. package/dist/runtime/suspension-handler.js +1253 -125
  123. package/dist/runtime/unserializable-step.d.ts +34 -0
  124. package/dist/runtime/unserializable-step.d.ts.map +1 -0
  125. package/dist/runtime/unserializable-step.js +52 -0
  126. package/dist/runtime/vm-mode.d.ts +44 -0
  127. package/dist/runtime/vm-mode.d.ts.map +1 -0
  128. package/dist/runtime/vm-mode.js +62 -0
  129. package/dist/runtime/vm-serde-bundle.generated.d.ts +14 -0
  130. package/dist/runtime/vm-serde-bundle.generated.d.ts.map +1 -0
  131. package/dist/runtime/vm-serde-bundle.generated.js +16 -0
  132. package/dist/runtime/wait-continuation.d.ts +106 -0
  133. package/dist/runtime/wait-continuation.d.ts.map +1 -0
  134. package/dist/runtime/wait-continuation.js +136 -0
  135. package/dist/runtime/wait-until.d.ts +18 -0
  136. package/dist/runtime/wait-until.d.ts.map +1 -0
  137. package/dist/runtime/wait-until.js +42 -0
  138. package/dist/runtime/world-compatibility.d.ts +32 -0
  139. package/dist/runtime/world-compatibility.d.ts.map +1 -0
  140. package/dist/runtime/world-compatibility.js +44 -0
  141. package/dist/runtime/world-init.d.ts +17 -42
  142. package/dist/runtime/world-init.d.ts.map +1 -1
  143. package/dist/runtime/world-init.js +18 -43
  144. package/dist/runtime/world.d.ts +14 -2
  145. package/dist/runtime/world.d.ts.map +1 -1
  146. package/dist/runtime/world.js +75 -19
  147. package/dist/runtime.d.ts +10 -6
  148. package/dist/runtime.d.ts.map +1 -1
  149. package/dist/runtime.js +3741 -490
  150. package/dist/sealed-box.d.ts +167 -0
  151. package/dist/sealed-box.d.ts.map +1 -0
  152. package/dist/sealed-box.js +571 -0
  153. package/dist/serialization/client.d.ts +3 -3
  154. package/dist/serialization/client.d.ts.map +1 -1
  155. package/dist/serialization/client.js +8 -4
  156. package/dist/serialization/codec-devalue-vm.d.ts +16 -0
  157. package/dist/serialization/codec-devalue-vm.d.ts.map +1 -0
  158. package/dist/serialization/codec-devalue-vm.js +148 -0
  159. package/dist/serialization/codec-devalue.d.ts +1 -1
  160. package/dist/serialization/codec-devalue.d.ts.map +1 -1
  161. package/dist/serialization/codec-devalue.js +24 -6
  162. package/dist/serialization/codec.d.ts +37 -2
  163. package/dist/serialization/codec.d.ts.map +1 -1
  164. package/dist/serialization/codec.js +2 -2
  165. package/dist/serialization/compression.d.ts +105 -0
  166. package/dist/serialization/compression.d.ts.map +1 -0
  167. package/dist/serialization/compression.js +261 -0
  168. package/dist/serialization/encryption.d.ts +119 -17
  169. package/dist/serialization/encryption.d.ts.map +1 -1
  170. package/dist/serialization/encryption.js +152 -17
  171. package/dist/serialization/errors.d.ts +13 -0
  172. package/dist/serialization/errors.d.ts.map +1 -1
  173. package/dist/serialization/errors.js +20 -2
  174. package/dist/serialization/format.d.ts +6 -6
  175. package/dist/serialization/format.js +7 -7
  176. package/dist/serialization/hardened.d.ts +156 -0
  177. package/dist/serialization/hardened.d.ts.map +1 -0
  178. package/dist/serialization/hardened.js +538 -0
  179. package/dist/serialization/index.d.ts +10 -8
  180. package/dist/serialization/index.d.ts.map +1 -1
  181. package/dist/serialization/index.js +10 -8
  182. package/dist/serialization/reducers/class-vm.d.ts +20 -0
  183. package/dist/serialization/reducers/class-vm.d.ts.map +1 -0
  184. package/dist/serialization/reducers/class-vm.js +77 -0
  185. package/dist/serialization/reducers/class.d.ts.map +1 -1
  186. package/dist/serialization/reducers/class.js +11 -6
  187. package/dist/serialization/reducers/common-vm.d.ts +15 -0
  188. package/dist/serialization/reducers/common-vm.d.ts.map +1 -0
  189. package/dist/serialization/reducers/common-vm.js +616 -0
  190. package/dist/serialization/reducers/common.d.ts +1 -1
  191. package/dist/serialization/reducers/common.d.ts.map +1 -1
  192. package/dist/serialization/reducers/common.js +202 -62
  193. package/dist/serialization/reducers/step-function-vm.d.ts +44 -0
  194. package/dist/serialization/reducers/step-function-vm.d.ts.map +1 -0
  195. package/dist/serialization/reducers/step-function-vm.js +97 -0
  196. package/dist/serialization/reducers/step-function.d.ts.map +1 -1
  197. package/dist/serialization/reducers/step-function.js +25 -9
  198. package/dist/serialization/step.d.ts +4 -4
  199. package/dist/serialization/step.d.ts.map +1 -1
  200. package/dist/serialization/step.js +9 -5
  201. package/dist/serialization/types.d.ts +80 -1
  202. package/dist/serialization/types.d.ts.map +1 -1
  203. package/dist/serialization/types.js +15 -1
  204. package/dist/serialization/workflow-vm.d.ts +29 -0
  205. package/dist/serialization/workflow-vm.d.ts.map +1 -0
  206. package/dist/serialization/workflow-vm.js +74 -0
  207. package/dist/serialization-format.d.ts +64 -8
  208. package/dist/serialization-format.d.ts.map +1 -1
  209. package/dist/serialization-format.js +225 -73
  210. package/dist/serialization.d.ts +262 -34
  211. package/dist/serialization.d.ts.map +1 -1
  212. package/dist/serialization.js +1879 -274
  213. package/dist/set-attributes.d.ts +13 -0
  214. package/dist/set-attributes.d.ts.map +1 -0
  215. package/dist/set-attributes.js +60 -0
  216. package/dist/source-map.d.ts +25 -0
  217. package/dist/source-map.d.ts.map +1 -1
  218. package/dist/source-map.js +154 -10
  219. package/dist/step/context-storage.d.ts +61 -2
  220. package/dist/step/context-storage.d.ts.map +1 -1
  221. package/dist/step/context-storage.js +7 -5
  222. package/dist/step/writable-stream.d.ts +3 -3
  223. package/dist/step/writable-stream.d.ts.map +1 -1
  224. package/dist/step/writable-stream.js +72 -9
  225. package/dist/step.d.ts.map +1 -1
  226. package/dist/step.js +148 -27
  227. package/dist/symbols.d.ts +50 -0
  228. package/dist/symbols.d.ts.map +1 -1
  229. package/dist/symbols.js +51 -1
  230. package/dist/telemetry/semantic-conventions.d.ts +397 -2
  231. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  232. package/dist/telemetry/semantic-conventions.js +297 -3
  233. package/dist/telemetry.d.ts +91 -0
  234. package/dist/telemetry.d.ts.map +1 -1
  235. package/dist/telemetry.js +244 -17
  236. package/dist/test-support/orchestrator-context.d.ts +25 -0
  237. package/dist/test-support/orchestrator-context.d.ts.map +1 -0
  238. package/dist/test-support/orchestrator-context.js +101 -0
  239. package/dist/types.d.ts +6 -0
  240. package/dist/types.d.ts.map +1 -1
  241. package/dist/types.js +23 -1
  242. package/dist/util.d.ts +0 -5
  243. package/dist/util.d.ts.map +1 -1
  244. package/dist/util.js +1 -15
  245. package/dist/version.d.ts +1 -1
  246. package/dist/version.d.ts.map +1 -1
  247. package/dist/version.js +2 -2
  248. package/dist/vm/index.d.ts.map +1 -1
  249. package/dist/vm/index.js +84 -14
  250. package/dist/vm/script-cache.d.ts +26 -0
  251. package/dist/vm/script-cache.d.ts.map +1 -0
  252. package/dist/vm/script-cache.js +131 -0
  253. package/dist/vm/uint8array-base64.js +1 -1
  254. package/dist/workflow/abort-controller.d.ts +2 -2
  255. package/dist/workflow/abort-controller.d.ts.map +1 -1
  256. package/dist/workflow/abort-controller.js +88 -21
  257. package/dist/workflow/attribute-dispatcher.d.ts +6 -0
  258. package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
  259. package/dist/workflow/attribute-dispatcher.js +45 -0
  260. package/dist/workflow/create-hook.d.ts.map +1 -1
  261. package/dist/workflow/create-hook.js +24 -3
  262. package/dist/workflow/get-workflow-metadata.js +2 -2
  263. package/dist/workflow/hook.d.ts.map +1 -1
  264. package/dist/workflow/hook.js +304 -47
  265. package/dist/workflow/index.d.ts +1 -0
  266. package/dist/workflow/index.d.ts.map +1 -1
  267. package/dist/workflow/index.js +2 -1
  268. package/dist/workflow/set-attributes.d.ts +68 -0
  269. package/dist/workflow/set-attributes.d.ts.map +1 -0
  270. package/dist/workflow/set-attributes.js +60 -0
  271. package/dist/workflow/sleep.d.ts.map +1 -1
  272. package/dist/workflow/sleep.js +58 -12
  273. package/dist/workflow/world-init-stub.d.ts +3 -3
  274. package/dist/workflow/world-init-stub.js +4 -4
  275. package/dist/workflow.d.ts +95 -3
  276. package/dist/workflow.d.ts.map +1 -1
  277. package/dist/workflow.js +895 -561
  278. package/docs/api-reference/create-hook.mdx +89 -10
  279. package/docs/api-reference/create-webhook.mdx +16 -15
  280. package/docs/api-reference/define-hook.mdx +35 -33
  281. package/docs/api-reference/fatal-error.mdx +30 -8
  282. package/docs/api-reference/fetch.mdx +14 -10
  283. package/docs/api-reference/get-step-metadata.mdx +2 -2
  284. package/docs/api-reference/get-workflow-metadata.mdx +3 -3
  285. package/docs/api-reference/get-writable.mdx +7 -7
  286. package/docs/api-reference/index.mdx +4 -1
  287. package/docs/api-reference/retryable-error.mdx +1 -1
  288. package/docs/api-reference/set-attributes.mdx +61 -0
  289. package/docs/api-reference/sleep.mdx +4 -4
  290. package/docs/foundations/cancellation.mdx +31 -32
  291. package/docs/foundations/errors-and-retries.mdx +42 -11
  292. package/docs/foundations/hooks.mdx +64 -35
  293. package/docs/foundations/idempotency.mdx +244 -12
  294. package/docs/foundations/index.mdx +1 -23
  295. package/docs/foundations/meta.json +2 -1
  296. package/docs/foundations/serialization.mdx +21 -22
  297. package/docs/foundations/starting-workflows.mdx +106 -30
  298. package/docs/foundations/streaming.mdx +107 -59
  299. package/docs/foundations/versioning.mdx +263 -0
  300. package/docs/foundations/workflows-and-steps.mdx +9 -9
  301. package/docs/how-it-works/cancellation.mdx +63 -63
  302. package/docs/how-it-works/code-transform.mdx +83 -67
  303. package/docs/how-it-works/encryption.mdx +30 -26
  304. package/docs/how-it-works/event-sourcing.mdx +98 -34
  305. package/docs/how-it-works/framework-integrations.mdx +96 -337
  306. package/docs/how-it-works/understanding-directives.mdx +22 -22
  307. package/package.json +24 -15
  308. package/dist/runtime/step-handler.d.ts +0 -2
  309. package/dist/runtime/step-handler.d.ts.map +0 -1
  310. package/dist/runtime/step-handler.js +0 -776
@@ -0,0 +1,13 @@
1
+ import type { SetAttributesOptions } from './workflow/set-attributes.js';
2
+ export type { SetAttributesOptions };
3
+ /**
4
+ * Host-side implementation for `setAttributes`. Workflow bodies resolve
5
+ * to `./workflow/set-attributes.ts` via the `workflow` package-exports
6
+ * condition; step bodies resolve here and can perform the world write
7
+ * directly because they already run in host context.
8
+ *
9
+ * Plain application code still has no active workflow run, so it throws
10
+ * a clear `FatalError`.
11
+ */
12
+ export declare function setAttributes(attrs: Record<string, string | undefined>, options?: SetAttributesOptions): Promise<void>;
13
+ //# sourceMappingURL=set-attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-attributes.d.ts","sourceRoot":"","sources":["../src/set-attributes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACzC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
@@ -0,0 +1,60 @@
1
+ import { FatalError } from '@workflow/errors';
2
+ import { SPEC_VERSION_CURRENT } from '@workflow/world';
3
+ import { normalizeAttributeChanges } from './attribute-changes.js';
4
+ import { getWorldLazy } from './runtime/get-world-lazy.js';
5
+ import { contextStorage } from './step/context-storage.js';
6
+ /**
7
+ * Host-side implementation for `setAttributes`. Workflow bodies resolve
8
+ * to `./workflow/set-attributes.ts` via the `workflow` package-exports
9
+ * condition; step bodies resolve here and can perform the world write
10
+ * directly because they already run in host context.
11
+ *
12
+ * Plain application code still has no active workflow run, so it throws
13
+ * a clear `FatalError`.
14
+ */
15
+ export async function setAttributes(attrs, options = {}) {
16
+ const store = contextStorage.getStore();
17
+ const runId = store?.workflowMetadata?.workflowRunId;
18
+ if (!runId) {
19
+ throw new FatalError("setAttributes() must be called from a 'use workflow' or 'use step' function. " +
20
+ 'Calling it from plain host code is not supported.');
21
+ }
22
+ const changes = normalizeAttributeChanges(attrs, options);
23
+ if (changes.length === 0)
24
+ return;
25
+ // Turbo optimistic start runs the step body before the backgrounded
26
+ // `run_started` is durable. Order this `attr_set` after the run exists so it
27
+ // never reaches the World before the run does (which would be rejected as
28
+ // run-not-found). A no-op outside turbo (barrier undefined) and on the await
29
+ // path. The rejection is swallowed for ordering only: if `run_started` truly
30
+ // failed the run does not exist, so the create below surfaces the real error.
31
+ if (store.runReadyBarrier) {
32
+ try {
33
+ await store.runReadyBarrier;
34
+ }
35
+ catch {
36
+ // intentional: ordering barrier only, see above.
37
+ }
38
+ }
39
+ const world = await getWorldLazy();
40
+ // Deliberately unguarded, unlike the attr_set a suspension writes: this call
41
+ // runs inside a step body, which holds no replay snapshot, so there is no
42
+ // event log to compare against and nothing a precondition could fence. It is
43
+ // a genuinely out-of-band write from the event log's point of view.
44
+ await world.events.create(runId, {
45
+ eventType: 'attr_set',
46
+ specVersion: SPEC_VERSION_CURRENT,
47
+ eventData: {
48
+ changes,
49
+ writer: {
50
+ type: 'step',
51
+ stepId: store.stepMetadata.stepId,
52
+ attempt: store.stepMetadata.attempt,
53
+ },
54
+ ...(options.allowReservedAttributes === true
55
+ ? { allowReservedAttributes: true }
56
+ : {}),
57
+ },
58
+ });
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWF0dHJpYnV0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2V0LWF0dHJpYnV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFLM0Q7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FDakMsS0FBeUMsRUFDekMsVUFBZ0MsRUFBRTtJQUVsQyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsQ0FBQztJQUNyRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksVUFBVSxDQUNsQiwrRUFBK0U7WUFDN0UsbURBQW1ELENBQ3RELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcseUJBQXlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTztJQUVqQyxvRUFBb0U7SUFDcEUsNkVBQTZFO0lBQzdFLDBFQUEwRTtJQUMxRSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSxJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUM7UUFDOUIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLGlEQUFpRDtRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxFQUFFLENBQUM7SUFDbkMsNkVBQTZFO0lBQzdFLDBFQUEwRTtJQUMxRSw2RUFBNkU7SUFDN0Usb0VBQW9FO0lBQ3BFLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQy9CLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLFdBQVcsRUFBRSxvQkFBb0I7UUFDakMsU0FBUyxFQUFFO1lBQ1QsT0FBTztZQUNQLE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsTUFBTTtnQkFDWixNQUFNLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNO2dCQUNqQyxPQUFPLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPO2FBQ3BDO1lBQ0QsR0FBRyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsS0FBSyxJQUFJO2dCQUMxQyxDQUFDLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUU7Z0JBQ25DLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDUjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGYXRhbEVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgeyBTUEVDX1ZFUlNJT05fQ1VSUkVOVCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBub3JtYWxpemVBdHRyaWJ1dGVDaGFuZ2VzIH0gZnJvbSAnLi9hdHRyaWJ1dGUtY2hhbmdlcy5qcyc7XG5pbXBvcnQgeyBnZXRXb3JsZExhenkgfSBmcm9tICcuL3J1bnRpbWUvZ2V0LXdvcmxkLWxhenkuanMnO1xuaW1wb3J0IHsgY29udGV4dFN0b3JhZ2UgfSBmcm9tICcuL3N0ZXAvY29udGV4dC1zdG9yYWdlLmpzJztcbmltcG9ydCB0eXBlIHsgU2V0QXR0cmlidXRlc09wdGlvbnMgfSBmcm9tICcuL3dvcmtmbG93L3NldC1hdHRyaWJ1dGVzLmpzJztcblxuZXhwb3J0IHR5cGUgeyBTZXRBdHRyaWJ1dGVzT3B0aW9ucyB9O1xuXG4vKipcbiAqIEhvc3Qtc2lkZSBpbXBsZW1lbnRhdGlvbiBmb3IgYHNldEF0dHJpYnV0ZXNgLiBXb3JrZmxvdyBib2RpZXMgcmVzb2x2ZVxuICogdG8gYC4vd29ya2Zsb3cvc2V0LWF0dHJpYnV0ZXMudHNgIHZpYSB0aGUgYHdvcmtmbG93YCBwYWNrYWdlLWV4cG9ydHNcbiAqIGNvbmRpdGlvbjsgc3RlcCBib2RpZXMgcmVzb2x2ZSBoZXJlIGFuZCBjYW4gcGVyZm9ybSB0aGUgd29ybGQgd3JpdGVcbiAqIGRpcmVjdGx5IGJlY2F1c2UgdGhleSBhbHJlYWR5IHJ1biBpbiBob3N0IGNvbnRleHQuXG4gKlxuICogUGxhaW4gYXBwbGljYXRpb24gY29kZSBzdGlsbCBoYXMgbm8gYWN0aXZlIHdvcmtmbG93IHJ1biwgc28gaXQgdGhyb3dzXG4gKiBhIGNsZWFyIGBGYXRhbEVycm9yYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMoXG4gIGF0dHJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+LFxuICBvcHRpb25zOiBTZXRBdHRyaWJ1dGVzT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RvcmUgPSBjb250ZXh0U3RvcmFnZS5nZXRTdG9yZSgpO1xuICBjb25zdCBydW5JZCA9IHN0b3JlPy53b3JrZmxvd01ldGFkYXRhPy53b3JrZmxvd1J1bklkO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgdGhyb3cgbmV3IEZhdGFsRXJyb3IoXG4gICAgICBcInNldEF0dHJpYnV0ZXMoKSBtdXN0IGJlIGNhbGxlZCBmcm9tIGEgJ3VzZSB3b3JrZmxvdycgb3IgJ3VzZSBzdGVwJyBmdW5jdGlvbi4gXCIgK1xuICAgICAgICAnQ2FsbGluZyBpdCBmcm9tIHBsYWluIGhvc3QgY29kZSBpcyBub3Qgc3VwcG9ydGVkLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2hhbmdlcyA9IG5vcm1hbGl6ZUF0dHJpYnV0ZUNoYW5nZXMoYXR0cnMsIG9wdGlvbnMpO1xuICBpZiAoY2hhbmdlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAvLyBUdXJibyBvcHRpbWlzdGljIHN0YXJ0IHJ1bnMgdGhlIHN0ZXAgYm9keSBiZWZvcmUgdGhlIGJhY2tncm91bmRlZFxuICAvLyBgcnVuX3N0YXJ0ZWRgIGlzIGR1cmFibGUuIE9yZGVyIHRoaXMgYGF0dHJfc2V0YCBhZnRlciB0aGUgcnVuIGV4aXN0cyBzbyBpdFxuICAvLyBuZXZlciByZWFjaGVzIHRoZSBXb3JsZCBiZWZvcmUgdGhlIHJ1biBkb2VzICh3aGljaCB3b3VsZCBiZSByZWplY3RlZCBhc1xuICAvLyBydW4tbm90LWZvdW5kKS4gQSBuby1vcCBvdXRzaWRlIHR1cmJvIChiYXJyaWVyIHVuZGVmaW5lZCkgYW5kIG9uIHRoZSBhd2FpdFxuICAvLyBwYXRoLiBUaGUgcmVqZWN0aW9uIGlzIHN3YWxsb3dlZCBmb3Igb3JkZXJpbmcgb25seTogaWYgYHJ1bl9zdGFydGVkYCB0cnVseVxuICAvLyBmYWlsZWQgdGhlIHJ1biBkb2VzIG5vdCBleGlzdCwgc28gdGhlIGNyZWF0ZSBiZWxvdyBzdXJmYWNlcyB0aGUgcmVhbCBlcnJvci5cbiAgaWYgKHN0b3JlLnJ1blJlYWR5QmFycmllcikge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzdG9yZS5ydW5SZWFkeUJhcnJpZXI7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpbnRlbnRpb25hbDogb3JkZXJpbmcgYmFycmllciBvbmx5LCBzZWUgYWJvdmUuXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgd29ybGQgPSBhd2FpdCBnZXRXb3JsZExhenkoKTtcbiAgLy8gRGVsaWJlcmF0ZWx5IHVuZ3VhcmRlZCwgdW5saWtlIHRoZSBhdHRyX3NldCBhIHN1c3BlbnNpb24gd3JpdGVzOiB0aGlzIGNhbGxcbiAgLy8gcnVucyBpbnNpZGUgYSBzdGVwIGJvZHksIHdoaWNoIGhvbGRzIG5vIHJlcGxheSBzbmFwc2hvdCwgc28gdGhlcmUgaXMgbm9cbiAgLy8gZXZlbnQgbG9nIHRvIGNvbXBhcmUgYWdhaW5zdCBhbmQgbm90aGluZyBhIHByZWNvbmRpdGlvbiBjb3VsZCBmZW5jZS4gSXQgaXNcbiAgLy8gYSBnZW51aW5lbHkgb3V0LW9mLWJhbmQgd3JpdGUgZnJvbSB0aGUgZXZlbnQgbG9nJ3MgcG9pbnQgb2Ygdmlldy5cbiAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZShydW5JZCwge1xuICAgIGV2ZW50VHlwZTogJ2F0dHJfc2V0JyxcbiAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgZXZlbnREYXRhOiB7XG4gICAgICBjaGFuZ2VzLFxuICAgICAgd3JpdGVyOiB7XG4gICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgc3RlcElkOiBzdG9yZS5zdGVwTWV0YWRhdGEuc3RlcElkLFxuICAgICAgICBhdHRlbXB0OiBzdG9yZS5zdGVwTWV0YWRhdGEuYXR0ZW1wdCxcbiAgICAgIH0sXG4gICAgICAuLi4ob3B0aW9ucy5hbGxvd1Jlc2VydmVkQXR0cmlidXRlcyA9PT0gdHJ1ZVxuICAgICAgICA/IHsgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM6IHRydWUgfVxuICAgICAgICA6IHt9KSxcbiAgICB9LFxuICB9KTtcbn1cbiJdfQ==
@@ -1,6 +1,31 @@
1
+ /**
2
+ * Strip the trailing `//# sourceMappingURL=data:…` comment from a JS
3
+ * bundle. Returns the input unchanged if no trailing inline map is
4
+ * present.
5
+ *
6
+ * Use this on the host side before evaluating workflow bundles inside
7
+ * the QuickJS VM: the inline map can account for several MB of bundle
8
+ * text (measured ~30%+ of VM heap bytes on the example workbench's
9
+ * bundle), and the VM never needs it; only host-side `remapErrorStack`
10
+ * reads the map (and it can do so against the original, unstripped
11
+ * string).
12
+ *
13
+ * Implemented as a linear `lastIndexOf` + character scan rather than a
14
+ * regex: on webpack dev-server bundles (tens of MB, with hundreds of
15
+ * per-module inline map comments embedded in eval strings) a
16
+ * `String.replace` regex over the bundle blows V8's call stack
17
+ * ("RangeError: Maximum call stack size exceeded"), wedging every
18
+ * workflow invocation on that framework.
19
+ */
20
+ export declare function stripInlineSourceMap(workflowCode: string): string;
1
21
  /**
2
22
  * Remaps an error stack trace using inline source maps to show original source locations.
3
23
  *
24
+ * Degrades gracefully when the bundle has no inline source map (e.g. production
25
+ * builds, where maps are off by default): the original stack is returned
26
+ * unchanged. A cheap `filename` presence check skips all work when no frame
27
+ * references the workflow file, and parsed source maps are memoized per bundle.
28
+ *
4
29
  * @param stack - The error stack trace to remap
5
30
  * @param filename - The workflow filename to match in stack frames
6
31
  * @param workflowCode - The workflow bundle code containing inline source maps
@@ -1 +1 @@
1
- {"version":3,"file":"source-map.d.ts","sourceRoot":"","sources":["../src/source-map.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,MAAM,CA0DR"}
1
+ {"version":3,"file":"source-map.d.ts","sourceRoot":"","sources":["../src/source-map.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAqBjE;AA4GD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,MAAM,CAsDR"}
@@ -1,24 +1,168 @@
1
1
  import { originalPositionFor, TraceMap } from '@jridgewell/trace-mapping';
2
+ import { globalSingleton } from '@workflow/utils';
3
+ /** Marker prefix of an inline source map comment emitted by bundlers. */
4
+ const INLINE_SOURCE_MAP_MARKER = '//# sourceMappingURL=data:application/json;base64,';
5
+ /**
6
+ * Strip the trailing `//# sourceMappingURL=data:…` comment from a JS
7
+ * bundle. Returns the input unchanged if no trailing inline map is
8
+ * present.
9
+ *
10
+ * Use this on the host side before evaluating workflow bundles inside
11
+ * the QuickJS VM: the inline map can account for several MB of bundle
12
+ * text (measured ~30%+ of VM heap bytes on the example workbench's
13
+ * bundle), and the VM never needs it; only host-side `remapErrorStack`
14
+ * reads the map (and it can do so against the original, unstripped
15
+ * string).
16
+ *
17
+ * Implemented as a linear `lastIndexOf` + character scan rather than a
18
+ * regex: on webpack dev-server bundles (tens of MB, with hundreds of
19
+ * per-module inline map comments embedded in eval strings) a
20
+ * `String.replace` regex over the bundle blows V8's call stack
21
+ * ("RangeError: Maximum call stack size exceeded"), wedging every
22
+ * workflow invocation on that framework.
23
+ */
24
+ export function stripInlineSourceMap(workflowCode) {
25
+ const idx = workflowCode.lastIndexOf(INLINE_SOURCE_MAP_MARKER);
26
+ if (idx === -1)
27
+ return workflowCode;
28
+ // Only strip when the comment is the TRAILING content: everything
29
+ // after the marker must be base64 payload followed by optional
30
+ // whitespace. A mid-bundle occurrence (e.g. inside a string literal)
31
+ // is left untouched.
32
+ let i = idx + INLINE_SOURCE_MAP_MARKER.length;
33
+ const payloadStart = i;
34
+ const n = workflowCode.length;
35
+ while (i < n && isBase64Char(workflowCode.charCodeAt(i)))
36
+ i++;
37
+ if (i === payloadStart)
38
+ return workflowCode;
39
+ while (i < n) {
40
+ const c = workflowCode.charCodeAt(i);
41
+ // space, tab, newline, carriage return
42
+ if (c !== 0x20 && c !== 0x09 && c !== 0x0a && c !== 0x0d) {
43
+ return workflowCode;
44
+ }
45
+ i++;
46
+ }
47
+ return workflowCode.slice(0, idx);
48
+ }
49
+ function isBase64Char(code) {
50
+ return ((code >= 0x41 && code <= 0x5a) ||
51
+ (code >= 0x61 && code <= 0x7a) ||
52
+ (code >= 0x30 && code <= 0x39) ||
53
+ code === 0x2b ||
54
+ code === 0x2f ||
55
+ code === 0x3d);
56
+ }
57
+ function extractInlineSourceMapBase64(source) {
58
+ const sourceMapPrefix = '//# sourceMappingURL=data:application/json';
59
+ const base64Marker = ';base64,';
60
+ let scanFrom = 0;
61
+ while (scanFrom < source.length) {
62
+ const prefixIdx = source.indexOf(sourceMapPrefix, scanFrom);
63
+ if (prefixIdx === -1)
64
+ return undefined;
65
+ const base64Start = source.indexOf(base64Marker, prefixIdx + sourceMapPrefix.length);
66
+ if (base64Start === -1) {
67
+ scanFrom = prefixIdx + sourceMapPrefix.length;
68
+ continue;
69
+ }
70
+ const commaBefore = source.indexOf(',', prefixIdx);
71
+ if (commaBefore !== -1 && commaBefore < base64Start) {
72
+ scanFrom = base64Start + base64Marker.length;
73
+ continue;
74
+ }
75
+ const valueStart = base64Start + base64Marker.length;
76
+ let valueEnd = valueStart;
77
+ while (valueEnd < source.length) {
78
+ if (!isBase64Char(source.charCodeAt(valueEnd))) {
79
+ break;
80
+ }
81
+ valueEnd++;
82
+ }
83
+ if (valueEnd > valueStart) {
84
+ return source.slice(valueStart, valueEnd);
85
+ }
86
+ scanFrom = valueEnd;
87
+ }
88
+ }
89
+ /**
90
+ * Memoized `TraceMap | null` per workflow bundle. `null` records "this bundle
91
+ * has no usable inline source map" so repeated failures don't rescan the whole
92
+ * (potentially multi-MB) bundle string or re-parse the map. This matters most
93
+ * in production, where source maps are off by default: the first failure scans
94
+ * once and caches `null`, every later failure is O(1).
95
+ *
96
+ * Keyed by the bundle `code`. Insertion-ordered LRU capped at `MAX_TRACERS`,
97
+ * mirroring `vm/script-cache.ts`: production serves a single build-time bundle
98
+ * literal for the process lifetime, while dev/watch produces a new bundle
99
+ * string per edit; the bound keeps the few most-recent ones and evicts the
100
+ * rest instead of pinning every historical version.
101
+ */
102
+ // On `globalThis` (see `globalSingleton`): the cache exists to avoid re-parsing
103
+ // one build-time bundle for the life of the process, which per-copy state would
104
+ // do once per bundler layer.
105
+ const tracers = globalSingleton('@workflow/core//sourceMapTracers', 1, () => ({
106
+ byCode: new Map(),
107
+ }));
108
+ const MAX_TRACERS = 8;
109
+ function getTraceMapForCode(workflowCode) {
110
+ const cached = tracers.byCode.get(workflowCode);
111
+ if (cached !== undefined) {
112
+ // Move to most-recently-used position (end of insertion order).
113
+ tracers.byCode.delete(workflowCode);
114
+ tracers.byCode.set(workflowCode, cached);
115
+ return cached;
116
+ }
117
+ let tracer = null;
118
+ const base64 = extractInlineSourceMapBase64(workflowCode);
119
+ if (base64) {
120
+ try {
121
+ const sourceMapJson = Buffer.from(base64, 'base64').toString('utf-8');
122
+ const sourceMapData = JSON.parse(sourceMapJson);
123
+ // Use TraceMap (pure JS, no WASM required)
124
+ tracer = new TraceMap(sourceMapData);
125
+ }
126
+ catch {
127
+ // Malformed inline map: treat as absent so we don't retry parsing it.
128
+ tracer = null;
129
+ }
130
+ }
131
+ tracers.byCode.set(workflowCode, tracer);
132
+ // Evict the least-recently-used entries when over the cap. New entries are
133
+ // appended at the end, so the oldest live at the front.
134
+ while (tracers.byCode.size > MAX_TRACERS) {
135
+ const oldest = tracers.byCode.keys().next().value;
136
+ if (oldest === undefined)
137
+ break;
138
+ tracers.byCode.delete(oldest);
139
+ }
140
+ return tracer;
141
+ }
2
142
  /**
3
143
  * Remaps an error stack trace using inline source maps to show original source locations.
4
144
  *
145
+ * Degrades gracefully when the bundle has no inline source map (e.g. production
146
+ * builds, where maps are off by default): the original stack is returned
147
+ * unchanged. A cheap `filename` presence check skips all work when no frame
148
+ * references the workflow file, and parsed source maps are memoized per bundle.
149
+ *
5
150
  * @param stack - The error stack trace to remap
6
151
  * @param filename - The workflow filename to match in stack frames
7
152
  * @param workflowCode - The workflow bundle code containing inline source maps
8
153
  * @returns The remapped stack trace with original source locations
9
154
  */
10
155
  export function remapErrorStack(stack, filename, workflowCode) {
11
- // Extract inline source map from workflow code
12
- const sourceMapMatch = workflowCode.match(/\/\/# sourceMappingURL=data:application\/json;base64,(.+)/);
13
- if (!sourceMapMatch) {
156
+ // Nothing to remap if no frame references the workflow file. Avoids touching
157
+ // the (large) bundle string entirely for errors thrown elsewhere.
158
+ if (!stack.includes(filename)) {
159
+ return stack;
160
+ }
161
+ const tracer = getTraceMapForCode(workflowCode);
162
+ if (!tracer) {
14
163
  return stack; // No source map found
15
164
  }
16
165
  try {
17
- const base64 = sourceMapMatch[1];
18
- const sourceMapJson = Buffer.from(base64, 'base64').toString('utf-8');
19
- const sourceMapData = JSON.parse(sourceMapJson);
20
- // Use TraceMap (pure JS, no WASM required)
21
- const tracer = new TraceMap(sourceMapData);
22
166
  // Parse and remap each line in the stack trace
23
167
  const lines = stack.split('\n');
24
168
  const remappedLines = lines.map((line) => {
@@ -48,9 +192,9 @@ export function remapErrorStack(stack, filename, workflowCode) {
48
192
  });
49
193
  return remappedLines.join('\n');
50
194
  }
51
- catch (e) {
195
+ catch {
52
196
  // If source map processing fails, return original stack
53
197
  return stack;
54
198
  }
55
199
  }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zb3VyY2UtbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsS0FBYSxFQUNiLFFBQWdCLEVBQ2hCLFlBQW9CO0lBRXBCLCtDQUErQztJQUMvQyxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUN2QywyREFBMkQsQ0FDNUQsQ0FBQztJQUNGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixPQUFPLEtBQUssQ0FBQyxDQUFDLHNCQUFzQjtJQUN0QyxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWhELDJDQUEyQztRQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUzQywrQ0FBK0M7UUFDL0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdkMsNEZBQTRGO1lBQzVGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQzNCLCtDQUErQyxDQUNoRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixPQUFPLElBQUksQ0FBQyxDQUFDLGtDQUFrQztZQUNqRCxDQUFDO1lBRUQsTUFBTSxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBRTNELDJDQUEyQztZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFMUMsa0NBQWtDO1lBQ2xDLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtnQkFDM0MsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLE1BQU0sRUFBRSxZQUFZO2FBQ3JCLENBQUMsQ0FBQztZQUVILElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM5QyxNQUFNLElBQUksR0FBRyxZQUFZLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUM7Z0JBQzFELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0JBQ3RFLE9BQU8sVUFBVSxJQUFJLEtBQUssUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQ3ZFLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxDQUFDLGdDQUFnQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLHdEQUF3RDtRQUN4RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgb3JpZ2luYWxQb3NpdGlvbkZvciwgVHJhY2VNYXAgfSBmcm9tICdAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nJztcblxuLyoqXG4gKiBSZW1hcHMgYW4gZXJyb3Igc3RhY2sgdHJhY2UgdXNpbmcgaW5saW5lIHNvdXJjZSBtYXBzIHRvIHNob3cgb3JpZ2luYWwgc291cmNlIGxvY2F0aW9ucy5cbiAqXG4gKiBAcGFyYW0gc3RhY2sgLSBUaGUgZXJyb3Igc3RhY2sgdHJhY2UgdG8gcmVtYXBcbiAqIEBwYXJhbSBmaWxlbmFtZSAtIFRoZSB3b3JrZmxvdyBmaWxlbmFtZSB0byBtYXRjaCBpbiBzdGFjayBmcmFtZXNcbiAqIEBwYXJhbSB3b3JrZmxvd0NvZGUgLSBUaGUgd29ya2Zsb3cgYnVuZGxlIGNvZGUgY29udGFpbmluZyBpbmxpbmUgc291cmNlIG1hcHNcbiAqIEByZXR1cm5zIFRoZSByZW1hcHBlZCBzdGFjayB0cmFjZSB3aXRoIG9yaWdpbmFsIHNvdXJjZSBsb2NhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbWFwRXJyb3JTdGFjayhcbiAgc3RhY2s6IHN0cmluZyxcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgd29ya2Zsb3dDb2RlOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIC8vIEV4dHJhY3QgaW5saW5lIHNvdXJjZSBtYXAgZnJvbSB3b3JrZmxvdyBjb2RlXG4gIGNvbnN0IHNvdXJjZU1hcE1hdGNoID0gd29ya2Zsb3dDb2RlLm1hdGNoKFxuICAgIC9cXC9cXC8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvblxcL2pzb247YmFzZTY0LCguKykvXG4gICk7XG4gIGlmICghc291cmNlTWFwTWF0Y2gpIHtcbiAgICByZXR1cm4gc3RhY2s7IC8vIE5vIHNvdXJjZSBtYXAgZm91bmRcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYmFzZTY0ID0gc291cmNlTWFwTWF0Y2hbMV07XG4gICAgY29uc3Qgc291cmNlTWFwSnNvbiA9IEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgIGNvbnN0IHNvdXJjZU1hcERhdGEgPSBKU09OLnBhcnNlKHNvdXJjZU1hcEpzb24pO1xuXG4gICAgLy8gVXNlIFRyYWNlTWFwIChwdXJlIEpTLCBubyBXQVNNIHJlcXVpcmVkKVxuICAgIGNvbnN0IHRyYWNlciA9IG5ldyBUcmFjZU1hcChzb3VyY2VNYXBEYXRhKTtcblxuICAgIC8vIFBhcnNlIGFuZCByZW1hcCBlYWNoIGxpbmUgaW4gdGhlIHN0YWNrIHRyYWNlXG4gICAgY29uc3QgbGluZXMgPSBzdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgcmVtYXBwZWRMaW5lcyA9IGxpbmVzLm1hcCgobGluZSkgPT4ge1xuICAgICAgLy8gTWF0Y2ggc3RhY2sgZnJhbWVzOiBcImF0IGZ1bmN0aW9uTmFtZSAoZmlsZW5hbWU6bGluZTpjb2x1bW4pXCIgb3IgXCJhdCBmaWxlbmFtZTpsaW5lOmNvbHVtblwiXG4gICAgICBjb25zdCBmcmFtZU1hdGNoID0gbGluZS5tYXRjaChcbiAgICAgICAgL15cXHMqYXRcXHMrKD86KC4rPylcXHMrXFwoKT8oLis/KTooXFxkKyk6KFxcZCspXFwpPyQvXG4gICAgICApO1xuICAgICAgaWYgKCFmcmFtZU1hdGNoKSB7XG4gICAgICAgIHJldHVybiBsaW5lOyAvLyBOb3QgYSBzdGFjayBmcmFtZSwgcmV0dXJuIGFzLWlzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFssIGZ1bmN0aW9uTmFtZSwgZmlsZSwgbGluZVN0ciwgY29sU3RyXSA9IGZyYW1lTWF0Y2g7XG5cbiAgICAgIC8vIE9ubHkgcmVtYXAgZnJhbWVzIGZyb20gb3VyIHdvcmtmbG93IGZpbGVcbiAgICAgIGlmICghZmlsZS5pbmNsdWRlcyhmaWxlbmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGxpbmU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpbmVOdW1iZXIgPSBwYXJzZUludChsaW5lU3RyLCAxMCk7XG4gICAgICBjb25zdCBjb2x1bW5OdW1iZXIgPSBwYXJzZUludChjb2xTdHIsIDEwKTtcblxuICAgICAgLy8gTWFwIHRvIG9yaWdpbmFsIHNvdXJjZSBwb3NpdGlvblxuICAgICAgY29uc3Qgb3JpZ2luYWwgPSBvcmlnaW5hbFBvc2l0aW9uRm9yKHRyYWNlciwge1xuICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICBjb2x1bW46IGNvbHVtbk51bWJlcixcbiAgICAgIH0pO1xuXG4gICAgICBpZiAob3JpZ2luYWwuc291cmNlICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZnVuYyA9IGZ1bmN0aW9uTmFtZSB8fCBvcmlnaW5hbC5uYW1lIHx8ICdhbm9ueW1vdXMnO1xuICAgICAgICBjb25zdCBjb2wgPSBvcmlnaW5hbC5jb2x1bW4gIT09IG51bGwgPyBvcmlnaW5hbC5jb2x1bW4gOiBjb2x1bW5OdW1iZXI7XG4gICAgICAgIHJldHVybiBgICAgIGF0ICR7ZnVuY30gKCR7b3JpZ2luYWwuc291cmNlfToke29yaWdpbmFsLmxpbmV9OiR7Y29sfSlgO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGluZTsgLy8gQ291bGRuJ3QgbWFwLCByZXR1cm4gb3JpZ2luYWxcbiAgICB9KTtcblxuICAgIHJldHVybiByZW1hcHBlZExpbmVzLmpvaW4oJ1xcbicpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSWYgc291cmNlIG1hcCBwcm9jZXNzaW5nIGZhaWxzLCByZXR1cm4gb3JpZ2luYWwgc3RhY2tcbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cbn1cbiJdfQ==
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zb3VyY2UtbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbEQseUVBQXlFO0FBQ3pFLE1BQU0sd0JBQXdCLEdBQzVCLG9EQUFvRCxDQUFDO0FBRXZEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsWUFBb0I7SUFDdkQsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQy9ELElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ3BDLGtFQUFrRTtJQUNsRSwrREFBK0Q7SUFDL0QscUVBQXFFO0lBQ3JFLHFCQUFxQjtJQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxDQUFDO0lBQzlDLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztJQUN2QixNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFFLENBQUMsRUFBRSxDQUFDO0lBQzlELElBQUksQ0FBQyxLQUFLLFlBQVk7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNiLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJ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LENBQUMsQ0FBQztZQUN6QyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTFDLGtDQUFrQztZQUNsQyxNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUU7Z0JBQzNDLElBQUksRUFBRSxVQUFVO2dCQUNoQixNQUFNLEVBQUUsWUFBWTthQUNyQixDQUFDLENBQUM7WUFFSCxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxJQUFJLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDO2dCQUMxRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dCQUN0RSxPQUFPLFVBQVUsSUFBSSxLQUFLLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztZQUN2RSxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsQ0FBQyxnQ0FBZ0M7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLHdEQUF3RDtRQUN4RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgb3JpZ2luYWxQb3NpdGlvbkZvciwgVHJhY2VNYXAgfSBmcm9tICdAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nJztcbmltcG9ydCB7IGdsb2JhbFNpbmdsZXRvbiB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5cbi8qKiBNYXJrZXIgcHJlZml4IG9mIGFuIGlubGluZSBzb3VyY2UgbWFwIGNvbW1lbnQgZW1pdHRlZCBieSBidW5kbGVycy4gKi9cbmNvbnN0IElOTElORV9TT1VSQ0VfTUFQX01BUktFUiA9XG4gICcvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCc7XG5cbi8qKlxuICogU3RyaXAgdGhlIHRyYWlsaW5nIGAvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOuKApmAgY29tbWVudCBmcm9tIGEgSlNcbiAqIGJ1bmRsZS4gUmV0dXJucyB0aGUgaW5wdXQgdW5jaGFuZ2VkIGlmIG5vIHRyYWlsaW5nIGlubGluZSBtYXAgaXNcbiAqIHByZXNlbnQuXG4gKlxuICogVXNlIHRoaXMgb24gdGhlIGhvc3Qgc2lkZSBiZWZvcmUgZXZhbHVhdGluZyB3b3JrZmxvdyBidW5kbGVzIGluc2lkZVxuICogdGhlIFF1aWNrSlMgVk06IHRoZSBpbmxpbmUgbWFwIGNhbiBhY2NvdW50IGZvciBzZXZlcmFsIE1CIG9mIGJ1bmRsZVxuICogdGV4dCAobWVhc3VyZWQgfjMwJSsgb2YgVk0gaGVhcCBieXRlcyBvbiB0aGUgZXhhbXBsZSB3b3JrYmVuY2gnc1xuICogYnVuZGxlKSwgYW5kIHRoZSBWTSBuZXZlciBuZWVkcyBpdDsgb25seSBob3N0LXNpZGUgYHJlbWFwRXJyb3JTdGFja2BcbiAqIHJlYWRzIHRoZSBtYXAgKGFuZCBpdCBjYW4gZG8gc28gYWdhaW5zdCB0aGUgb3JpZ2luYWwsIHVuc3RyaXBwZWRcbiAqIHN0cmluZykuXG4gKlxuICogSW1wbGVtZW50ZWQgYXMgYSBsaW5lYXIgYGxhc3RJbmRleE9mYCArIGNoYXJhY3RlciBzY2FuIHJhdGhlciB0aGFuIGFcbiAqIHJlZ2V4OiBvbiB3ZWJwYWNrIGRldi1zZXJ2ZXIgYnVuZGxlcyAodGVucyBvZiBNQiwgd2l0aCBodW5kcmVkcyBvZlxuICogcGVyLW1vZHVsZSBpbmxpbmUgbWFwIGNvbW1lbnRzIGVtYmVkZGVkIGluIGV2YWwgc3RyaW5ncykgYVxuICogYFN0cmluZy5yZXBsYWNlYCByZWdleCBvdmVyIHRoZSBidW5kbGUgYmxvd3MgVjgncyBjYWxsIHN0YWNrXG4gKiAoXCJSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiKSwgd2VkZ2luZyBldmVyeVxuICogd29ya2Zsb3cgaW52b2NhdGlvbiBvbiB0aGF0IGZyYW1ld29yay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwSW5saW5lU291cmNlTWFwKHdvcmtmbG93Q29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgaWR4ID0gd29ya2Zsb3dDb2RlLmxhc3RJbmRleE9mKElOTElORV9TT1VSQ0VfTUFQX01BUktFUik7XG4gIGlmIChpZHggPT09IC0xKSByZXR1cm4gd29ya2Zsb3dDb2RlO1xuICAvLyBPbmx5IHN0cmlwIHdoZW4gdGhlIGNvbW1lbnQgaXMgdGhlIFRSQUlMSU5HIGNvbnRlbnQ6IGV2ZXJ5dGhpbmdcbiAgLy8gYWZ0ZXIgdGhlIG1hcmtlciBtdXN0IGJlIGJhc2U2NCBwYXlsb2FkIGZvbGxvd2VkIGJ5IG9wdGlvbmFsXG4gIC8vIHdoaXRlc3BhY2UuIEEgbWlkLWJ1bmRsZSBvY2N1cnJlbmNlIChlLmcuIGluc2lkZSBhIHN0cmluZyBsaXRlcmFsKVxuICAvLyBpcyBsZWZ0IHVudG91Y2hlZC5cbiAgbGV0IGkgPSBpZHggKyBJTkxJTkVfU09VUkNFX01BUF9NQVJLRVIubGVuZ3RoO1xuICBjb25zdCBwYXlsb2FkU3RhcnQgPSBpO1xuICBjb25zdCBuID0gd29ya2Zsb3dDb2RlLmxlbmd0aDtcbiAgd2hpbGUgKGkgPCBuICYmIGlzQmFzZTY0Q2hhcih3b3JrZmxvd0NvZGUuY2hhckNvZGVBdChpKSkpIGkrKztcbiAgaWYgKGkgPT09IHBheWxvYWRTdGFydCkgcmV0dXJuIHdvcmtmbG93Q29kZTtcbiAgd2hpbGUgKGkgPCBuKSB7XG4gICAgY29uc3QgYyA9IHdvcmtmbG93Q29kZS5jaGFyQ29kZUF0KGkpO1xuICAgIC8vIHNwYWNlLCB0YWIsIG5ld2xpbmUsIGNhcnJpYWdlIHJldHVyblxuICAgIGlmIChjICE9PSAweDIwICYmIGMgIT09IDB4MDkgJiYgYyAhPT0gMHgwYSAmJiBjICE9PSAweDBkKSB7XG4gICAgICByZXR1cm4gd29ya2Zsb3dDb2RlO1xuICAgIH1cbiAgICBpKys7XG4gIH1cbiAgcmV0dXJuIHdvcmtmbG93Q29kZS5zbGljZSgwLCBpZHgpO1xufVxuXG5mdW5jdGlvbiBpc0Jhc2U2NENoYXIoY29kZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgKGNvZGUgPj0gMHg0MSAmJiBjb2RlIDw9IDB4NWEpIHx8XG4gICAgKGNvZGUgPj0gMHg2MSAmJiBjb2RlIDw9IDB4N2EpIHx8XG4gICAgKGNvZGUgPj0gMHgzMCAmJiBjb2RlIDw9IDB4MzkpIHx8XG4gICAgY29kZSA9PT0gMHgyYiB8fFxuICAgIGNvZGUgPT09IDB4MmYgfHxcbiAgICBjb2RlID09PSAweDNkXG4gICk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RJbmxpbmVTb3VyY2VNYXBCYXNlNjQoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBzb3VyY2VNYXBQcmVmaXggPSAnLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uJztcbiAgY29uc3QgYmFzZTY0TWFya2VyID0gJztiYXNlNjQsJztcbiAgbGV0IHNjYW5Gcm9tID0gMDtcblxuICB3aGlsZSAoc2NhbkZyb20gPCBzb3VyY2UubGVuZ3RoKSB7XG4gICAgY29uc3QgcHJlZml4SWR4ID0gc291cmNlLmluZGV4T2Yoc291cmNlTWFwUHJlZml4LCBzY2FuRnJvbSk7XG4gICAgaWYgKHByZWZpeElkeCA9PT0gLTEpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBiYXNlNjRTdGFydCA9IHNvdXJjZS5pbmRleE9mKFxuICAgICAgYmFzZTY0TWFya2VyLFxuICAgICAgcHJlZml4SWR4ICsgc291cmNlTWFwUHJlZml4Lmxlbmd0aFxuICAgICk7XG4gICAgaWYgKGJhc2U2NFN0YXJ0ID09PSAtMSkge1xuICAgICAgc2NhbkZyb20gPSBwcmVmaXhJZHggKyBzb3VyY2VNYXBQcmVmaXgubGVuZ3RoO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWFCZWZvcmUgPSBzb3VyY2UuaW5kZXhPZignLCcsIHByZWZpeElkeCk7XG4gICAgaWYgKGNvbW1hQmVmb3JlICE9PSAtMSAmJiBjb21tYUJlZm9yZSA8IGJhc2U2NFN0YXJ0KSB7XG4gICAgICBzY2FuRnJvbSA9IGJhc2U2NFN0YXJ0ICsgYmFzZTY0TWFya2VyLmxlbmd0aDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlU3RhcnQgPSBiYXNlNjRTdGFydCArIGJhc2U2NE1hcmtlci5sZW5ndGg7XG4gICAgbGV0IHZhbHVlRW5kID0gdmFsdWVTdGFydDtcbiAgICB3aGlsZSAodmFsdWVFbmQgPCBzb3VyY2UubGVuZ3RoKSB7XG4gICAgICBpZiAoIWlzQmFzZTY0Q2hhcihzb3VyY2UuY2hhckNvZGVBdCh2YWx1ZUVuZCkpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdmFsdWVFbmQrKztcbiAgICB9XG5cbiAgICBpZiAodmFsdWVFbmQgPiB2YWx1ZVN0YXJ0KSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKHZhbHVlU3RhcnQsIHZhbHVlRW5kKTtcbiAgICB9XG4gICAgc2NhbkZyb20gPSB2YWx1ZUVuZDtcbiAgfVxufVxuXG4vKipcbiAqIE1lbW9pemVkIGBUcmFjZU1hcCB8IG51bGxgIHBlciB3b3JrZmxvdyBidW5kbGUuIGBudWxsYCByZWNvcmRzIFwidGhpcyBidW5kbGVcbiAqIGhhcyBubyB1c2FibGUgaW5saW5lIHNvdXJjZSBtYXBcIiBzbyByZXBlYXRlZCBmYWlsdXJlcyBkb24ndCByZXNjYW4gdGhlIHdob2xlXG4gKiAocG90ZW50aWFsbHkgbXVsdGktTUIpIGJ1bmRsZSBzdHJpbmcgb3IgcmUtcGFyc2UgdGhlIG1hcC4gVGhpcyBtYXR0ZXJzIG1vc3RcbiAqIGluIHByb2R1Y3Rpb24sIHdoZXJlIHNvdXJjZSBtYXBzIGFyZSBvZmYgYnkgZGVmYXVsdDogdGhlIGZpcnN0IGZhaWx1cmUgc2NhbnNcbiAqIG9uY2UgYW5kIGNhY2hlcyBgbnVsbGAsIGV2ZXJ5IGxhdGVyIGZhaWx1cmUgaXMgTygxKS5cbiAqXG4gKiBLZXllZCBieSB0aGUgYnVuZGxlIGBjb2RlYC4gSW5zZXJ0aW9uLW9yZGVyZWQgTFJVIGNhcHBlZCBhdCBgTUFYX1RSQUNFUlNgLFxuICogbWlycm9yaW5nIGB2bS9zY3JpcHQtY2FjaGUudHNgOiBwcm9kdWN0aW9uIHNlcnZlcyBhIHNpbmdsZSBidWlsZC10aW1lIGJ1bmRsZVxuICogbGl0ZXJhbCBmb3IgdGhlIHByb2Nlc3MgbGlmZXRpbWUsIHdoaWxlIGRldi93YXRjaCBwcm9kdWNlcyBhIG5ldyBidW5kbGVcbiAqIHN0cmluZyBwZXIgZWRpdDsgdGhlIGJvdW5kIGtlZXBzIHRoZSBmZXcgbW9zdC1yZWNlbnQgb25lcyBhbmQgZXZpY3RzIHRoZVxuICogcmVzdCBpbnN0ZWFkIG9mIHBpbm5pbmcgZXZlcnkgaGlzdG9yaWNhbCB2ZXJzaW9uLlxuICovXG4vLyBPbiBgZ2xvYmFsVGhpc2AgKHNlZSBgZ2xvYmFsU2luZ2xldG9uYCk6IHRoZSBjYWNoZSBleGlzdHMgdG8gYXZvaWQgcmUtcGFyc2luZ1xuLy8gb25lIGJ1aWxkLXRpbWUgYnVuZGxlIGZvciB0aGUgbGlmZSBvZiB0aGUgcHJvY2Vzcywgd2hpY2ggcGVyLWNvcHkgc3RhdGUgd291bGRcbi8vIGRvIG9uY2UgcGVyIGJ1bmRsZXIgbGF5ZXIuXG5jb25zdCB0cmFjZXJzID0gZ2xvYmFsU2luZ2xldG9uKCdAd29ya2Zsb3cvY29yZS8vc291cmNlTWFwVHJhY2VycycsIDEsICgpID0+ICh7XG4gIGJ5Q29kZTogbmV3IE1hcDxzdHJpbmcsIFRyYWNlTWFwIHwgbnVsbD4oKSxcbn0pKTtcbmNvbnN0IE1BWF9UUkFDRVJTID0gODtcblxuZnVuY3Rpb24gZ2V0VHJhY2VNYXBGb3JDb2RlKHdvcmtmbG93Q29kZTogc3RyaW5nKTogVHJhY2VNYXAgfCBudWxsIHtcbiAgY29uc3QgY2FjaGVkID0gdHJhY2Vycy5ieUNvZGUuZ2V0KHdvcmtmbG93Q29kZSk7XG4gIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE1vdmUgdG8gbW9zdC1yZWNlbnRseS11c2VkIHBvc2l0aW9uIChlbmQgb2YgaW5zZXJ0aW9uIG9yZGVyKS5cbiAgICB0cmFjZXJzLmJ5Q29kZS5kZWxldGUod29ya2Zsb3dDb2RlKTtcbiAgICB0cmFjZXJzLmJ5Q29kZS5zZXQod29ya2Zsb3dDb2RlLCBjYWNoZWQpO1xuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cblxuICBsZXQgdHJhY2VyOiBUcmFjZU1hcCB8IG51bGwgPSBudWxsO1xuICBjb25zdCBiYXNlNjQgPSBleHRyYWN0SW5saW5lU291cmNlTWFwQmFzZTY0KHdvcmtmbG93Q29kZSk7XG4gIGlmIChiYXNlNjQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc291cmNlTWFwSnNvbiA9IEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgY29uc3Qgc291cmNlTWFwRGF0YSA9IEpTT04ucGFyc2Uoc291cmNlTWFwSnNvbik7XG4gICAgICAvLyBVc2UgVHJhY2VNYXAgKHB1cmUgSlMsIG5vIFdBU00gcmVxdWlyZWQpXG4gICAgICB0cmFjZXIgPSBuZXcgVHJhY2VNYXAoc291cmNlTWFwRGF0YSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBNYWxmb3JtZWQgaW5saW5lIG1hcDogdHJlYXQgYXMgYWJzZW50IHNvIHdlIGRvbid0IHJldHJ5IHBhcnNpbmcgaXQuXG4gICAgICB0cmFjZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHRyYWNlcnMuYnlDb2RlLnNldCh3b3JrZmxvd0NvZGUsIHRyYWNlcik7XG4gIC8vIEV2aWN0IHRoZSBsZWFzdC1yZWNlbnRseS11c2VkIGVudHJpZXMgd2hlbiBvdmVyIHRoZSBjYXAuIE5ldyBlbnRyaWVzIGFyZVxuICAvLyBhcHBlbmRlZCBhdCB0aGUgZW5kLCBzbyB0aGUgb2xkZXN0IGxpdmUgYXQgdGhlIGZyb250LlxuICB3aGlsZSAodHJhY2Vycy5ieUNvZGUuc2l6ZSA+IE1BWF9UUkFDRVJTKSB7XG4gICAgY29uc3Qgb2xkZXN0ID0gdHJhY2Vycy5ieUNvZGUua2V5cygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAob2xkZXN0ID09PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgIHRyYWNlcnMuYnlDb2RlLmRlbGV0ZShvbGRlc3QpO1xuICB9XG4gIHJldHVybiB0cmFjZXI7XG59XG5cbi8qKlxuICogUmVtYXBzIGFuIGVycm9yIHN0YWNrIHRyYWNlIHVzaW5nIGlubGluZSBzb3VyY2UgbWFwcyB0byBzaG93IG9yaWdpbmFsIHNvdXJjZSBsb2NhdGlvbnMuXG4gKlxuICogRGVncmFkZXMgZ3JhY2VmdWxseSB3aGVuIHRoZSBidW5kbGUgaGFzIG5vIGlubGluZSBzb3VyY2UgbWFwIChlLmcuIHByb2R1Y3Rpb25cbiAqIGJ1aWxkcywgd2hlcmUgbWFwcyBhcmUgb2ZmIGJ5IGRlZmF1bHQpOiB0aGUgb3JpZ2luYWwgc3RhY2sgaXMgcmV0dXJuZWRcbiAqIHVuY2hhbmdlZC4gQSBjaGVhcCBgZmlsZW5hbWVgIHByZXNlbmNlIGNoZWNrIHNraXBzIGFsbCB3b3JrIHdoZW4gbm8gZnJhbWVcbiAqIHJlZmVyZW5jZXMgdGhlIHdvcmtmbG93IGZpbGUsIGFuZCBwYXJzZWQgc291cmNlIG1hcHMgYXJlIG1lbW9pemVkIHBlciBidW5kbGUuXG4gKlxuICogQHBhcmFtIHN0YWNrIC0gVGhlIGVycm9yIHN0YWNrIHRyYWNlIHRvIHJlbWFwXG4gKiBAcGFyYW0gZmlsZW5hbWUgLSBUaGUgd29ya2Zsb3cgZmlsZW5hbWUgdG8gbWF0Y2ggaW4gc3RhY2sgZnJhbWVzXG4gKiBAcGFyYW0gd29ya2Zsb3dDb2RlIC0gVGhlIHdvcmtmbG93IGJ1bmRsZSBjb2RlIGNvbnRhaW5pbmcgaW5saW5lIHNvdXJjZSBtYXBzXG4gKiBAcmV0dXJucyBUaGUgcmVtYXBwZWQgc3RhY2sgdHJhY2Ugd2l0aCBvcmlnaW5hbCBzb3VyY2UgbG9jYXRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1hcEVycm9yU3RhY2soXG4gIHN0YWNrOiBzdHJpbmcsXG4gIGZpbGVuYW1lOiBzdHJpbmcsXG4gIHdvcmtmbG93Q29kZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICAvLyBOb3RoaW5nIHRvIHJlbWFwIGlmIG5vIGZyYW1lIHJlZmVyZW5jZXMgdGhlIHdvcmtmbG93IGZpbGUuIEF2b2lkcyB0b3VjaGluZ1xuICAvLyB0aGUgKGxhcmdlKSBidW5kbGUgc3RyaW5nIGVudGlyZWx5IGZvciBlcnJvcnMgdGhyb3duIGVsc2V3aGVyZS5cbiAgaWYgKCFzdGFjay5pbmNsdWRlcyhmaWxlbmFtZSkpIHtcbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cblxuICBjb25zdCB0cmFjZXIgPSBnZXRUcmFjZU1hcEZvckNvZGUod29ya2Zsb3dDb2RlKTtcbiAgaWYgKCF0cmFjZXIpIHtcbiAgICByZXR1cm4gc3RhY2s7IC8vIE5vIHNvdXJjZSBtYXAgZm91bmRcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gUGFyc2UgYW5kIHJlbWFwIGVhY2ggbGluZSBpbiB0aGUgc3RhY2sgdHJhY2VcbiAgICBjb25zdCBsaW5lcyA9IHN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICBjb25zdCByZW1hcHBlZExpbmVzID0gbGluZXMubWFwKChsaW5lKSA9PiB7XG4gICAgICAvLyBNYXRjaCBzdGFjayBmcmFtZXM6IFwiYXQgZnVuY3Rpb25OYW1lIChmaWxlbmFtZTpsaW5lOmNvbHVtbilcIiBvciBcImF0IGZpbGVuYW1lOmxpbmU6Y29sdW1uXCJcbiAgICAgIGNvbnN0IGZyYW1lTWF0Y2ggPSBsaW5lLm1hdGNoKFxuICAgICAgICAvXlxccyphdFxccysoPzooLis/KVxccytcXCgpPyguKz8pOihcXGQrKTooXFxkKylcXCk/JC9cbiAgICAgICk7XG4gICAgICBpZiAoIWZyYW1lTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIGxpbmU7IC8vIE5vdCBhIHN0YWNrIGZyYW1lLCByZXR1cm4gYXMtaXNcbiAgICAgIH1cblxuICAgICAgY29uc3QgWywgZnVuY3Rpb25OYW1lLCBmaWxlLCBsaW5lU3RyLCBjb2xTdHJdID0gZnJhbWVNYXRjaDtcblxuICAgICAgLy8gT25seSByZW1hcCBmcmFtZXMgZnJvbSBvdXIgd29ya2Zsb3cgZmlsZVxuICAgICAgaWYgKCFmaWxlLmluY2x1ZGVzKGZpbGVuYW1lKSkge1xuICAgICAgICByZXR1cm4gbGluZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGluZU51bWJlciA9IHBhcnNlSW50KGxpbmVTdHIsIDEwKTtcbiAgICAgIGNvbnN0IGNvbHVtbk51bWJlciA9IHBhcnNlSW50KGNvbFN0ciwgMTApO1xuXG4gICAgICAvLyBNYXAgdG8gb3JpZ2luYWwgc291cmNlIHBvc2l0aW9uXG4gICAgICBjb25zdCBvcmlnaW5hbCA9IG9yaWdpbmFsUG9zaXRpb25Gb3IodHJhY2VyLCB7XG4gICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgIGNvbHVtbjogY29sdW1uTnVtYmVyLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChvcmlnaW5hbC5zb3VyY2UgJiYgb3JpZ2luYWwubGluZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmdW5jID0gZnVuY3Rpb25OYW1lIHx8IG9yaWdpbmFsLm5hbWUgfHwgJ2Fub255bW91cyc7XG4gICAgICAgIGNvbnN0IGNvbCA9IG9yaWdpbmFsLmNvbHVtbiAhPT0gbnVsbCA/IG9yaWdpbmFsLmNvbHVtbiA6IGNvbHVtbk51bWJlcjtcbiAgICAgICAgcmV0dXJuIGAgICAgYXQgJHtmdW5jfSAoJHtvcmlnaW5hbC5zb3VyY2V9OiR7b3JpZ2luYWwubGluZX06JHtjb2x9KWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaW5lOyAvLyBDb3VsZG4ndCBtYXAsIHJldHVybiBvcmlnaW5hbFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlbWFwcGVkTGluZXMuam9pbignXFxuJyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIHNvdXJjZSBtYXAgcHJvY2Vzc2luZyBmYWlscywgcmV0dXJuIG9yaWdpbmFsIHN0YWNrXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG59XG4iXX0=
@@ -1,13 +1,72 @@
1
1
  import { AsyncLocalStorage } from 'node:async_hooks';
2
- import type { CryptoKey } from '../encryption.js';
2
+ import type { FlushableStreamState } from '../flushable-stream.js';
3
+ import type { PayloadKey } from '../serialization/encryption.js';
3
4
  import type { WorkflowMetadata } from '../workflow/get-workflow-metadata.js';
4
5
  import type { StepMetadata } from './get-step-metadata.js';
6
+ /**
7
+ * Per-step cache entry for a `(runId, namespace)` writable stream.
8
+ *
9
+ * Holds the user-facing `WritableStream` and the shared `FlushableStreamState`
10
+ * driving the background pipe to the workflow server. Re-used so repeat calls
11
+ * to `getWritable()` within the same step return the same handle instead of
12
+ * spawning racing pipes; see https://github.com/vercel/workflow/issues/2058.
13
+ */
14
+ export interface CachedWritable {
15
+ writable: WritableStream<any>;
16
+ state: FlushableStreamState;
17
+ }
5
18
  export type StepContext = {
6
19
  stepMetadata: StepMetadata;
7
20
  workflowMetadata: WorkflowMetadata;
21
+ /** Deployment that owns the current workflow run, used for forwarded streams. */
22
+ workflowDeploymentId?: string;
23
+ /**
24
+ * Root run id of the current run's lineage (`$rootRunId`), so a nested
25
+ * `start()` inherits it without reloading the parent. Set by the runtime from
26
+ * the run it already has loaded.
27
+ */
28
+ rootRunId?: string;
8
29
  ops: Promise<void>[];
30
+ /**
31
+ * Operations that MUST be durably committed before the step's
32
+ * `step_completed`/`step_failed` event is written, because the workflow
33
+ * continuation triggered by that event depends on them.
34
+ *
35
+ * The canonical case is a step-initiated `AbortController.abort()`: the
36
+ * durable `hook_received` event records the cancellation in the workflow's
37
+ * event log. If it is flushed in the background (like `ops`), the workflow
38
+ * continuation enqueued by `step_completed` can run (and advance past the
39
+ * abort, dispatching a later step with a stale, non-aborted `signal`) before
40
+ * the `hook_received` event exists. Awaiting these inline before completion
41
+ * guarantees the abort is ordered ahead of any continuation that observes the
42
+ * step's result. Unlike these, `ops` holds best-effort real-time stream
43
+ * writes that should fire ASAP and are intentionally left in the background.
44
+ *
45
+ * Contract: producers MUST NOT push a promise that can reject; these are
46
+ * awaited only to enforce ordering, never to surface an outcome. A rejection
47
+ * here would propagate as an infra error (queue re-delivery), not the
48
+ * user-code failure path, so each producer swallows its own errors (see
49
+ * `reviveAbortController` in serialization.ts). The await sites also
50
+ * defensively `.catch()` so ordering is all this bucket can ever enforce.
51
+ *
52
+ * Required (not optional) so a new step-context construction site that
53
+ * forgets to wire it fails at compile time, rather than silently regressing
54
+ * the ordering guarantee back to background-flush behavior.
55
+ */
56
+ preCompletionOps: Promise<void>[];
9
57
  closureVars?: Record<string, any>;
10
- encryptionKey?: CryptoKey;
58
+ encryptionKey?: PayloadKey;
59
+ writables?: Map<string, CachedWritable>;
60
+ /**
61
+ * Turbo mode only: a promise that resolves once the backgrounded
62
+ * `run_started` has landed (the run exists). Set when the step body runs
63
+ * optimistically (before `run_started`/`step_started` are confirmed), so a
64
+ * direct step-body world write (e.g. `setAttributes`, which
65
+ * resolves to a host-side `attr_set` create) can gate on it and never race
66
+ * ahead of the run's creation. `undefined` outside turbo and on the await
67
+ * path, where `run_started` was already durable before the body ran.
68
+ */
69
+ runReadyBarrier?: Promise<unknown>;
11
70
  };
12
71
  export declare const contextStorage: AsyncLocalStorage<StepContext>;
13
72
  //# sourceMappingURL=context-storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-storage.d.ts","sourceRoot":"","sources":["../../src/step/context-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B,CAAC;AAoBF,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,WAAW,CAKjB,CAAC"}
1
+ {"version":3,"file":"context-storage.d.ts","sourceRoot":"","sources":["../../src/step/context-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC9B,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,iFAAiF;IACjF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACrB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CACpC,CAAC;AAoBF,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,WAAW,CAItD,CAAC"}
@@ -4,7 +4,7 @@ import { AsyncLocalStorage } from 'node:async_hooks';
4
4
  *
5
5
  * Uses `Symbol.for()` on globalThis to guarantee a single instance even when
6
6
  * bundlers (e.g. Vercel's production bundler) create multiple copies of this
7
- * module. Without this, `contextStorage.run()` in the step handler and
7
+ * module. Without this, `contextStorage.run()` in the step executor and
8
8
  * `contextStorage.getStore()` in user code (via getWorkflowMetadata /
9
9
  * getStepMetadata) can reference different AsyncLocalStorage instances,
10
10
  * causing the store to appear empty.
@@ -16,7 +16,9 @@ import { AsyncLocalStorage } from 'node:async_hooks';
16
16
  * See: https://github.com/vercel/workflow/issues/1577
17
17
  */
18
18
  const CONTEXT_STORAGE_SYMBOL = Symbol.for('WORKFLOW_STEP_CONTEXT_STORAGE');
19
- export const contextStorage = globalThis[CONTEXT_STORAGE_SYMBOL] ??
20
- (globalThis[CONTEXT_STORAGE_SYMBOL] =
21
- new AsyncLocalStorage());
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvY29udGV4dC1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBYXJEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FDdkIsVUFBa0IsQ0FBQyxzQkFBc0IsQ0FFN0I7SUFDZCxDQUFFLFVBQWtCLENBQUMsc0JBQXNCLENBQUM7UUFDMUMsSUFBSSxpQkFBaUIsRUFBZSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY0xvY2FsU3RvcmFnZSB9IGZyb20gJ25vZGU6YXN5bmNfaG9va3MnO1xuaW1wb3J0IHR5cGUgeyBDcnlwdG9LZXkgfSBmcm9tICcuLi9lbmNyeXB0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dNZXRhZGF0YSB9IGZyb20gJy4uL3dvcmtmbG93L2dldC13b3JrZmxvdy1tZXRhZGF0YS5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0ZXBNZXRhZGF0YSB9IGZyb20gJy4vZ2V0LXN0ZXAtbWV0YWRhdGEuanMnO1xuXG5leHBvcnQgdHlwZSBTdGVwQ29udGV4dCA9IHtcbiAgc3RlcE1ldGFkYXRhOiBTdGVwTWV0YWRhdGE7XG4gIHdvcmtmbG93TWV0YWRhdGE6IFdvcmtmbG93TWV0YWRhdGE7XG4gIG9wczogUHJvbWlzZTx2b2lkPltdO1xuICBjbG9zdXJlVmFycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVuY3J5cHRpb25LZXk/OiBDcnlwdG9LZXk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3Mtd2lkZSBzaW5nbGV0b24gQXN5bmNMb2NhbFN0b3JhZ2UgZm9yIHN0ZXAgZXhlY3V0aW9uIGNvbnRleHQuXG4gKlxuICogVXNlcyBgU3ltYm9sLmZvcigpYCBvbiBnbG9iYWxUaGlzIHRvIGd1YXJhbnRlZSBhIHNpbmdsZSBpbnN0YW5jZSBldmVuIHdoZW5cbiAqIGJ1bmRsZXJzIChlLmcuIFZlcmNlbCdzIHByb2R1Y3Rpb24gYnVuZGxlcikgY3JlYXRlIG11bHRpcGxlIGNvcGllcyBvZiB0aGlzXG4gKiBtb2R1bGUuIFdpdGhvdXQgdGhpcywgYGNvbnRleHRTdG9yYWdlLnJ1bigpYCBpbiB0aGUgc3RlcCBoYW5kbGVyIGFuZFxuICogYGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKClgIGluIHVzZXIgY29kZSAodmlhIGdldFdvcmtmbG93TWV0YWRhdGEgL1xuICogZ2V0U3RlcE1ldGFkYXRhKSBjYW4gcmVmZXJlbmNlIGRpZmZlcmVudCBBc3luY0xvY2FsU3RvcmFnZSBpbnN0YW5jZXMsXG4gKiBjYXVzaW5nIHRoZSBzdG9yZSB0byBhcHBlYXIgZW1wdHkuXG4gKlxuICogTm90ZSB0aGF0IHdlIHdlcmUgdW5hYmxlIHRvIHJlcHJvZHVjZSB0aGlzIGlzc3VlLiBUaGlzIGlzIGEgZml4IGZvciB0aGUgb25seSBzeW50aGV0aWMgd2F5XG4gKiB3YXkgaW4gd2hpY2ggd2UgY291bGQgZ2V0IHRoZSBidWlsZGVyIHRvIGJyZWFrIHdpdGggdGhlIHJlcG9ydGVkIGVycm9yIG1lc3NhZ2UsIGFuZFxuICogc2VydmVzIGFzIGRlZmVuc2UtaW4tZGVwdGgsIHNpbmNlIHRoZSBjaGFuZ2UgaXMgb3RoZXJ3aXNlIHNhZmUuXG4gKlxuICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3dvcmtmbG93L2lzc3Vlcy8xNTc3XG4gKi9cbmNvbnN0IENPTlRFWFRfU1RPUkFHRV9TWU1CT0wgPSBTeW1ib2wuZm9yKCdXT1JLRkxPV19TVEVQX0NPTlRFWFRfU1RPUkFHRScpO1xuXG5leHBvcnQgY29uc3QgY29udGV4dFN0b3JhZ2U6IEFzeW5jTG9jYWxTdG9yYWdlPFN0ZXBDb250ZXh0PiA9XG4gICgoZ2xvYmFsVGhpcyBhcyBhbnkpW0NPTlRFWFRfU1RPUkFHRV9TWU1CT0xdIGFzXG4gICAgfCBBc3luY0xvY2FsU3RvcmFnZTxTdGVwQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZCkgPz9cbiAgKChnbG9iYWxUaGlzIGFzIGFueSlbQ09OVEVYVF9TVE9SQUdFX1NZTUJPTF0gPVxuICAgIG5ldyBBc3luY0xvY2FsU3RvcmFnZTxTdGVwQ29udGV4dD4oKSk7XG4iXX0=
19
+ export const contextStorage = (() => {
20
+ const store = globalThis;
21
+ store[CONTEXT_STORAGE_SYMBOL] ??= new AsyncLocalStorage();
22
+ return store[CONTEXT_STORAGE_SYMBOL];
23
+ })();
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvY29udGV4dC1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBeUVyRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQUUzRSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQW1DLENBQUMsR0FBRyxFQUFFO0lBQ2xFLE1BQU0sS0FBSyxHQUFHLFVBQWlCLENBQUM7SUFDaEMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLEtBQUssSUFBSSxpQkFBaUIsRUFBZSxDQUFDO0lBQ3ZFLE9BQU8sS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jTG9jYWxTdG9yYWdlIH0gZnJvbSAnbm9kZTphc3luY19ob29rcyc7XG5pbXBvcnQgdHlwZSB7IEZsdXNoYWJsZVN0cmVhbVN0YXRlIH0gZnJvbSAnLi4vZmx1c2hhYmxlLXN0cmVhbS5qcyc7XG5pbXBvcnQgdHlwZSB7IFBheWxvYWRLZXkgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL2VuY3J5cHRpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBXb3JrZmxvd01ldGFkYXRhIH0gZnJvbSAnLi4vd29ya2Zsb3cvZ2V0LXdvcmtmbG93LW1ldGFkYXRhLmpzJztcbmltcG9ydCB0eXBlIHsgU3RlcE1ldGFkYXRhIH0gZnJvbSAnLi9nZXQtc3RlcC1tZXRhZGF0YS5qcyc7XG5cbi8qKlxuICogUGVyLXN0ZXAgY2FjaGUgZW50cnkgZm9yIGEgYChydW5JZCwgbmFtZXNwYWNlKWAgd3JpdGFibGUgc3RyZWFtLlxuICpcbiAqIEhvbGRzIHRoZSB1c2VyLWZhY2luZyBgV3JpdGFibGVTdHJlYW1gIGFuZCB0aGUgc2hhcmVkIGBGbHVzaGFibGVTdHJlYW1TdGF0ZWBcbiAqIGRyaXZpbmcgdGhlIGJhY2tncm91bmQgcGlwZSB0byB0aGUgd29ya2Zsb3cgc2VydmVyLiBSZS11c2VkIHNvIHJlcGVhdCBjYWxsc1xuICogdG8gYGdldFdyaXRhYmxlKClgIHdpdGhpbiB0aGUgc2FtZSBzdGVwIHJldHVybiB0aGUgc2FtZSBoYW5kbGUgaW5zdGVhZCBvZlxuICogc3Bhd25pbmcgcmFjaW5nIHBpcGVzOyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC93b3JrZmxvdy9pc3N1ZXMvMjA1OC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWNoZWRXcml0YWJsZSB7XG4gIHdyaXRhYmxlOiBXcml0YWJsZVN0cmVhbTxhbnk+O1xuICBzdGF0ZTogRmx1c2hhYmxlU3RyZWFtU3RhdGU7XG59XG5cbmV4cG9ydCB0eXBlIFN0ZXBDb250ZXh0ID0ge1xuICBzdGVwTWV0YWRhdGE6IFN0ZXBNZXRhZGF0YTtcbiAgd29ya2Zsb3dNZXRhZGF0YTogV29ya2Zsb3dNZXRhZGF0YTtcbiAgLyoqIERlcGxveW1lbnQgdGhhdCBvd25zIHRoZSBjdXJyZW50IHdvcmtmbG93IHJ1biwgdXNlZCBmb3IgZm9yd2FyZGVkIHN0cmVhbXMuICovXG4gIHdvcmtmbG93RGVwbG95bWVudElkPzogc3RyaW5nO1xuICAvKipcbiAgICogUm9vdCBydW4gaWQgb2YgdGhlIGN1cnJlbnQgcnVuJ3MgbGluZWFnZSAoYCRyb290UnVuSWRgKSwgc28gYSBuZXN0ZWRcbiAgICogYHN0YXJ0KClgIGluaGVyaXRzIGl0IHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBwYXJlbnQuIFNldCBieSB0aGUgcnVudGltZSBmcm9tXG4gICAqIHRoZSBydW4gaXQgYWxyZWFkeSBoYXMgbG9hZGVkLlxuICAgKi9cbiAgcm9vdFJ1bklkPzogc3RyaW5nO1xuICBvcHM6IFByb21pc2U8dm9pZD5bXTtcbiAgLyoqXG4gICAqIE9wZXJhdGlvbnMgdGhhdCBNVVNUIGJlIGR1cmFibHkgY29tbWl0dGVkIGJlZm9yZSB0aGUgc3RlcCdzXG4gICAqIGBzdGVwX2NvbXBsZXRlZGAvYHN0ZXBfZmFpbGVkYCBldmVudCBpcyB3cml0dGVuLCBiZWNhdXNlIHRoZSB3b3JrZmxvd1xuICAgKiBjb250aW51YXRpb24gdHJpZ2dlcmVkIGJ5IHRoYXQgZXZlbnQgZGVwZW5kcyBvbiB0aGVtLlxuICAgKlxuICAgKiBUaGUgY2Fub25pY2FsIGNhc2UgaXMgYSBzdGVwLWluaXRpYXRlZCBgQWJvcnRDb250cm9sbGVyLmFib3J0KClgOiB0aGVcbiAgICogZHVyYWJsZSBgaG9va19yZWNlaXZlZGAgZXZlbnQgcmVjb3JkcyB0aGUgY2FuY2VsbGF0aW9uIGluIHRoZSB3b3JrZmxvdydzXG4gICAqIGV2ZW50IGxvZy4gSWYgaXQgaXMgZmx1c2hlZCBpbiB0aGUgYmFja2dyb3VuZCAobGlrZSBgb3BzYCksIHRoZSB3b3JrZmxvd1xuICAgKiBjb250aW51YXRpb24gZW5xdWV1ZWQgYnkgYHN0ZXBfY29tcGxldGVkYCBjYW4gcnVuIChhbmQgYWR2YW5jZSBwYXN0IHRoZVxuICAgKiBhYm9ydCwgZGlzcGF0Y2hpbmcgYSBsYXRlciBzdGVwIHdpdGggYSBzdGFsZSwgbm9uLWFib3J0ZWQgYHNpZ25hbGApIGJlZm9yZVxuICAgKiB0aGUgYGhvb2tfcmVjZWl2ZWRgIGV2ZW50IGV4aXN0cy4gQXdhaXRpbmcgdGhlc2UgaW5saW5lIGJlZm9yZSBjb21wbGV0aW9uXG4gICAqIGd1YXJhbnRlZXMgdGhlIGFib3J0IGlzIG9yZGVyZWQgYWhlYWQgb2YgYW55IGNvbnRpbnVhdGlvbiB0aGF0IG9ic2VydmVzIHRoZVxuICAgKiBzdGVwJ3MgcmVzdWx0LiBVbmxpa2UgdGhlc2UsIGBvcHNgIGhvbGRzIGJlc3QtZWZmb3J0IHJlYWwtdGltZSBzdHJlYW1cbiAgICogd3JpdGVzIHRoYXQgc2hvdWxkIGZpcmUgQVNBUCBhbmQgYXJlIGludGVudGlvbmFsbHkgbGVmdCBpbiB0aGUgYmFja2dyb3VuZC5cbiAgICpcbiAgICogQ29udHJhY3Q6IHByb2R1Y2VycyBNVVNUIE5PVCBwdXNoIGEgcHJvbWlzZSB0aGF0IGNhbiByZWplY3Q7IHRoZXNlIGFyZVxuICAgKiBhd2FpdGVkIG9ubHkgdG8gZW5mb3JjZSBvcmRlcmluZywgbmV2ZXIgdG8gc3VyZmFjZSBhbiBvdXRjb21lLiBBIHJlamVjdGlvblxuICAgKiBoZXJlIHdvdWxkIHByb3BhZ2F0ZSBhcyBhbiBpbmZyYSBlcnJvciAocXVldWUgcmUtZGVsaXZlcnkpLCBub3QgdGhlXG4gICAqIHVzZXItY29kZSBmYWlsdXJlIHBhdGgsIHNvIGVhY2ggcHJvZHVjZXIgc3dhbGxvd3MgaXRzIG93biBlcnJvcnMgKHNlZVxuICAgKiBgcmV2aXZlQWJvcnRDb250cm9sbGVyYCBpbiBzZXJpYWxpemF0aW9uLnRzKS4gVGhlIGF3YWl0IHNpdGVzIGFsc29cbiAgICogZGVmZW5zaXZlbHkgYC5jYXRjaCgpYCBzbyBvcmRlcmluZyBpcyBhbGwgdGhpcyBidWNrZXQgY2FuIGV2ZXIgZW5mb3JjZS5cbiAgICpcbiAgICogUmVxdWlyZWQgKG5vdCBvcHRpb25hbCkgc28gYSBuZXcgc3RlcC1jb250ZXh0IGNvbnN0cnVjdGlvbiBzaXRlIHRoYXRcbiAgICogZm9yZ2V0cyB0byB3aXJlIGl0IGZhaWxzIGF0IGNvbXBpbGUgdGltZSwgcmF0aGVyIHRoYW4gc2lsZW50bHkgcmVncmVzc2luZ1xuICAgKiB0aGUgb3JkZXJpbmcgZ3VhcmFudGVlIGJhY2sgdG8gYmFja2dyb3VuZC1mbHVzaCBiZWhhdmlvci5cbiAgICovXG4gIHByZUNvbXBsZXRpb25PcHM6IFByb21pc2U8dm9pZD5bXTtcbiAgY2xvc3VyZVZhcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbmNyeXB0aW9uS2V5PzogUGF5bG9hZEtleTtcbiAgd3JpdGFibGVzPzogTWFwPHN0cmluZywgQ2FjaGVkV3JpdGFibGU+O1xuICAvKipcbiAgICogVHVyYm8gbW9kZSBvbmx5OiBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBiYWNrZ3JvdW5kZWRcbiAgICogYHJ1bl9zdGFydGVkYCBoYXMgbGFuZGVkICh0aGUgcnVuIGV4aXN0cykuIFNldCB3aGVuIHRoZSBzdGVwIGJvZHkgcnVuc1xuICAgKiBvcHRpbWlzdGljYWxseSAoYmVmb3JlIGBydW5fc3RhcnRlZGAvYHN0ZXBfc3RhcnRlZGAgYXJlIGNvbmZpcm1lZCksIHNvIGFcbiAgICogZGlyZWN0IHN0ZXAtYm9keSB3b3JsZCB3cml0ZSAoZS5nLiBgc2V0QXR0cmlidXRlc2AsIHdoaWNoXG4gICAqIHJlc29sdmVzIHRvIGEgaG9zdC1zaWRlIGBhdHRyX3NldGAgY3JlYXRlKSBjYW4gZ2F0ZSBvbiBpdCBhbmQgbmV2ZXIgcmFjZVxuICAgKiBhaGVhZCBvZiB0aGUgcnVuJ3MgY3JlYXRpb24uIGB1bmRlZmluZWRgIG91dHNpZGUgdHVyYm8gYW5kIG9uIHRoZSBhd2FpdFxuICAgKiBwYXRoLCB3aGVyZSBgcnVuX3N0YXJ0ZWRgIHdhcyBhbHJlYWR5IGR1cmFibGUgYmVmb3JlIHRoZSBib2R5IHJhbi5cbiAgICovXG4gIHJ1blJlYWR5QmFycmllcj86IFByb21pc2U8dW5rbm93bj47XG59O1xuXG4vKipcbiAqIFByb2Nlc3Mtd2lkZSBzaW5nbGV0b24gQXN5bmNMb2NhbFN0b3JhZ2UgZm9yIHN0ZXAgZXhlY3V0aW9uIGNvbnRleHQuXG4gKlxuICogVXNlcyBgU3ltYm9sLmZvcigpYCBvbiBnbG9iYWxUaGlzIHRvIGd1YXJhbnRlZSBhIHNpbmdsZSBpbnN0YW5jZSBldmVuIHdoZW5cbiAqIGJ1bmRsZXJzIChlLmcuIFZlcmNlbCdzIHByb2R1Y3Rpb24gYnVuZGxlcikgY3JlYXRlIG11bHRpcGxlIGNvcGllcyBvZiB0aGlzXG4gKiBtb2R1bGUuIFdpdGhvdXQgdGhpcywgYGNvbnRleHRTdG9yYWdlLnJ1bigpYCBpbiB0aGUgc3RlcCBleGVjdXRvciBhbmRcbiAqIGBjb250ZXh0U3RvcmFnZS5nZXRTdG9yZSgpYCBpbiB1c2VyIGNvZGUgKHZpYSBnZXRXb3JrZmxvd01ldGFkYXRhIC9cbiAqIGdldFN0ZXBNZXRhZGF0YSkgY2FuIHJlZmVyZW5jZSBkaWZmZXJlbnQgQXN5bmNMb2NhbFN0b3JhZ2UgaW5zdGFuY2VzLFxuICogY2F1c2luZyB0aGUgc3RvcmUgdG8gYXBwZWFyIGVtcHR5LlxuICpcbiAqIE5vdGUgdGhhdCB3ZSB3ZXJlIHVuYWJsZSB0byByZXByb2R1Y2UgdGhpcyBpc3N1ZS4gVGhpcyBpcyBhIGZpeCBmb3IgdGhlIG9ubHkgc3ludGhldGljIHdheVxuICogd2F5IGluIHdoaWNoIHdlIGNvdWxkIGdldCB0aGUgYnVpbGRlciB0byBicmVhayB3aXRoIHRoZSByZXBvcnRlZCBlcnJvciBtZXNzYWdlLCBhbmRcbiAqIHNlcnZlcyBhcyBkZWZlbnNlLWluLWRlcHRoLCBzaW5jZSB0aGUgY2hhbmdlIGlzIG90aGVyd2lzZSBzYWZlLlxuICpcbiAqIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC93b3JrZmxvdy9pc3N1ZXMvMTU3N1xuICovXG5jb25zdCBDT05URVhUX1NUT1JBR0VfU1lNQk9MID0gU3ltYm9sLmZvcignV09SS0ZMT1dfU1RFUF9DT05URVhUX1NUT1JBR0UnKTtcblxuZXhwb3J0IGNvbnN0IGNvbnRleHRTdG9yYWdlOiBBc3luY0xvY2FsU3RvcmFnZTxTdGVwQ29udGV4dD4gPSAoKCkgPT4ge1xuICBjb25zdCBzdG9yZSA9IGdsb2JhbFRoaXMgYXMgYW55O1xuICBzdG9yZVtDT05URVhUX1NUT1JBR0VfU1lNQk9MXSA/Pz0gbmV3IEFzeW5jTG9jYWxTdG9yYWdlPFN0ZXBDb250ZXh0PigpO1xuICByZXR1cm4gc3RvcmVbQ09OVEVYVF9TVE9SQUdFX1NZTUJPTF07XG59KSgpO1xuIl19
@@ -9,10 +9,10 @@ export interface WorkflowWritableStreamOptions {
9
9
  namespace?: string;
10
10
  }
11
11
  /**
12
- * Retrieves a writable stream that is associated with the current workflow.
12
+ * Retrieves the writable stream associated with the current workflow.
13
13
  *
14
- * The writable stream is intended to be used within step functions to write
15
- * data that can be read outside the workflow by using the readable method of getRun.
14
+ * Use the writable stream within step functions to write data. Read the data
15
+ * outside the workflow by using the readable method of `getRun`.
16
16
  *
17
17
  * @param options - Optional configuration for the writable stream
18
18
  * @returns The writable stream associated with the current workflow run
@@ -1 +1 @@
1
- {"version":3,"file":"writable-stream.d.ts","sourceRoot":"","sources":["../../src/step/writable-stream.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EACjC,OAAO,GAAE,6BAAkC,GAC1C,cAAc,CAAC,CAAC,CAAC,CAoCnB"}
1
+ {"version":3,"file":"writable-stream.d.ts","sourceRoot":"","sources":["../../src/step/writable-stream.ts"],"names":[],"mappings":"AAsBA;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EACjC,OAAO,GAAE,6BAAkC,GAC1C,cAAc,CAAC,CAAC,CAAC,CAkHnB"}