@workflow/core 5.0.0-beta.3 → 5.0.0-beta.31

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 (268) hide show
  1. package/dist/attribute-changes.d.ts +7 -0
  2. package/dist/attribute-changes.d.ts.map +1 -0
  3. package/dist/attribute-changes.js +25 -0
  4. package/dist/capabilities.d.ts +22 -1
  5. package/dist/capabilities.d.ts.map +1 -1
  6. package/dist/capabilities.js +41 -4
  7. package/dist/capture-stack.d.ts +16 -0
  8. package/dist/capture-stack.d.ts.map +1 -0
  9. package/dist/capture-stack.js +21 -0
  10. package/dist/class-serialization.d.ts +32 -0
  11. package/dist/class-serialization.d.ts.map +1 -1
  12. package/dist/class-serialization.js +37 -1
  13. package/dist/classify-error.d.ts +26 -3
  14. package/dist/classify-error.d.ts.map +1 -1
  15. package/dist/classify-error.js +103 -6
  16. package/dist/context-errors.d.ts +27 -0
  17. package/dist/context-errors.d.ts.map +1 -0
  18. package/dist/context-errors.js +101 -0
  19. package/dist/context-violation-error.d.ts +97 -0
  20. package/dist/context-violation-error.d.ts.map +1 -0
  21. package/dist/context-violation-error.js +147 -0
  22. package/dist/create-hook.d.ts +42 -3
  23. package/dist/create-hook.d.ts.map +1 -1
  24. package/dist/create-hook.js +4 -3
  25. package/dist/define-hook.d.ts.map +1 -1
  26. package/dist/define-hook.js +20 -5
  27. package/dist/describe-error.d.ts +70 -0
  28. package/dist/describe-error.d.ts.map +1 -0
  29. package/dist/describe-error.js +165 -0
  30. package/dist/encryption.d.ts +22 -1
  31. package/dist/encryption.d.ts.map +1 -1
  32. package/dist/encryption.js +72 -27
  33. package/dist/events-consumer.d.ts +25 -1
  34. package/dist/events-consumer.d.ts.map +1 -1
  35. package/dist/events-consumer.js +95 -16
  36. package/dist/flushable-stream.d.ts +10 -10
  37. package/dist/flushable-stream.d.ts.map +1 -1
  38. package/dist/flushable-stream.js +26 -15
  39. package/dist/global.d.ts +35 -1
  40. package/dist/global.d.ts.map +1 -1
  41. package/dist/global.js +21 -3
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +2 -1
  45. package/dist/log-format.d.ts +25 -0
  46. package/dist/log-format.d.ts.map +1 -0
  47. package/dist/log-format.js +250 -0
  48. package/dist/logger.d.ts +29 -30
  49. package/dist/logger.d.ts.map +1 -1
  50. package/dist/logger.js +82 -32
  51. package/dist/private.d.ts +107 -2
  52. package/dist/private.d.ts.map +1 -1
  53. package/dist/private.js +80 -3
  54. package/dist/runtime/constants.d.ts +189 -0
  55. package/dist/runtime/constants.d.ts.map +1 -1
  56. package/dist/runtime/constants.js +310 -15
  57. package/dist/runtime/get-port-lazy.d.ts +25 -0
  58. package/dist/runtime/get-port-lazy.d.ts.map +1 -0
  59. package/dist/runtime/get-port-lazy.js +92 -0
  60. package/dist/runtime/get-world-lazy.d.ts +23 -0
  61. package/dist/runtime/get-world-lazy.d.ts.map +1 -0
  62. package/dist/runtime/get-world-lazy.js +46 -0
  63. package/dist/runtime/helpers.d.ts +57 -6
  64. package/dist/runtime/helpers.d.ts.map +1 -1
  65. package/dist/runtime/helpers.js +169 -32
  66. package/dist/runtime/replay-budget.d.ts +98 -0
  67. package/dist/runtime/replay-budget.d.ts.map +1 -0
  68. package/dist/runtime/replay-budget.js +192 -0
  69. package/dist/runtime/resume-hook.d.ts.map +1 -1
  70. package/dist/runtime/resume-hook.js +39 -23
  71. package/dist/runtime/run-id-time.d.ts +10 -0
  72. package/dist/runtime/run-id-time.d.ts.map +1 -0
  73. package/dist/runtime/run-id-time.js +31 -0
  74. package/dist/runtime/run.d.ts +6 -2
  75. package/dist/runtime/run.d.ts.map +1 -1
  76. package/dist/runtime/run.js +52 -10
  77. package/dist/runtime/runs.d.ts +36 -2
  78. package/dist/runtime/runs.d.ts.map +1 -1
  79. package/dist/runtime/runs.js +18 -7
  80. package/dist/runtime/start.d.ts +58 -1
  81. package/dist/runtime/start.d.ts.map +1 -1
  82. package/dist/runtime/start.js +160 -46
  83. package/dist/runtime/step-executor.d.ts +131 -0
  84. package/dist/runtime/step-executor.d.ts.map +1 -0
  85. package/dist/runtime/step-executor.js +818 -0
  86. package/dist/runtime/step-handler.d.ts.map +1 -1
  87. package/dist/runtime/step-handler.js +718 -557
  88. package/dist/runtime/step-latency.d.ts +131 -0
  89. package/dist/runtime/step-latency.d.ts.map +1 -0
  90. package/dist/runtime/step-latency.js +155 -0
  91. package/dist/runtime/step-ownership.d.ts +72 -0
  92. package/dist/runtime/step-ownership.d.ts.map +1 -0
  93. package/dist/runtime/step-ownership.js +114 -0
  94. package/dist/runtime/step-single-flight.d.ts +12 -0
  95. package/dist/runtime/step-single-flight.d.ts.map +1 -0
  96. package/dist/runtime/step-single-flight.js +69 -0
  97. package/dist/runtime/suspension-handler.d.ts +81 -7
  98. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  99. package/dist/runtime/suspension-handler.js +355 -137
  100. package/dist/runtime/wait-continuation.d.ts +84 -0
  101. package/dist/runtime/wait-continuation.d.ts.map +1 -0
  102. package/dist/runtime/wait-continuation.js +105 -0
  103. package/dist/runtime/wait-until.d.ts +18 -0
  104. package/dist/runtime/wait-until.d.ts.map +1 -0
  105. package/dist/runtime/wait-until.js +42 -0
  106. package/dist/runtime/world-compatibility.d.ts +5 -0
  107. package/dist/runtime/world-compatibility.d.ts.map +1 -0
  108. package/dist/runtime/world-compatibility.js +12 -0
  109. package/dist/runtime/world-init.d.ts +50 -0
  110. package/dist/runtime/world-init.d.ts.map +1 -0
  111. package/dist/runtime/world-init.js +50 -0
  112. package/dist/runtime/world-target.d.ts +11 -0
  113. package/dist/runtime/world-target.d.ts.map +1 -0
  114. package/dist/runtime/world-target.js +15 -0
  115. package/dist/runtime/world.d.ts +21 -9
  116. package/dist/runtime/world.d.ts.map +1 -1
  117. package/dist/runtime/world.js +58 -83
  118. package/dist/runtime.d.ts +15 -10
  119. package/dist/runtime.d.ts.map +1 -1
  120. package/dist/runtime.js +1757 -326
  121. package/dist/schemas.d.ts +1 -1
  122. package/dist/schemas.d.ts.map +1 -1
  123. package/dist/schemas.js +1 -1
  124. package/dist/serialization/client.d.ts +17 -0
  125. package/dist/serialization/client.d.ts.map +1 -0
  126. package/dist/serialization/client.js +48 -0
  127. package/dist/serialization/codec-devalue.d.ts +14 -0
  128. package/dist/serialization/codec-devalue.d.ts.map +1 -0
  129. package/dist/serialization/codec-devalue.js +98 -0
  130. package/dist/serialization/codec.d.ts +106 -0
  131. package/dist/serialization/codec.d.ts.map +1 -0
  132. package/dist/serialization/codec.js +17 -0
  133. package/dist/serialization/compression.d.ts +104 -0
  134. package/dist/serialization/compression.d.ts.map +1 -0
  135. package/dist/serialization/compression.js +260 -0
  136. package/dist/serialization/encryption.d.ts +33 -0
  137. package/dist/serialization/encryption.d.ts.map +1 -0
  138. package/dist/serialization/encryption.js +70 -0
  139. package/dist/serialization/errors.d.ts +34 -0
  140. package/dist/serialization/errors.d.ts.map +1 -0
  141. package/dist/serialization/errors.js +59 -0
  142. package/dist/serialization/format.d.ts +60 -0
  143. package/dist/serialization/format.d.ts.map +1 -0
  144. package/dist/serialization/format.js +97 -0
  145. package/dist/serialization/index.d.ts +19 -0
  146. package/dist/serialization/index.d.ts.map +1 -0
  147. package/dist/serialization/index.js +22 -0
  148. package/dist/serialization/reducers/class.d.ts +11 -0
  149. package/dist/serialization/reducers/class.d.ts.map +1 -0
  150. package/dist/serialization/reducers/class.js +68 -0
  151. package/dist/serialization/reducers/common.d.ts +16 -0
  152. package/dist/serialization/reducers/common.d.ts.map +1 -0
  153. package/dist/serialization/reducers/common.js +417 -0
  154. package/dist/serialization/reducers/step-function.d.ts +35 -0
  155. package/dist/serialization/reducers/step-function.d.ts.map +1 -0
  156. package/dist/serialization/reducers/step-function.js +88 -0
  157. package/dist/serialization/step.d.ts +17 -0
  158. package/dist/serialization/step.d.ts.map +1 -0
  159. package/dist/serialization/step.js +48 -0
  160. package/dist/serialization/types.d.ts +253 -0
  161. package/dist/serialization/types.d.ts.map +1 -0
  162. package/dist/serialization/types.js +25 -0
  163. package/dist/serialization/workflow.d.ts +29 -0
  164. package/dist/serialization/workflow.d.ts.map +1 -0
  165. package/dist/serialization/workflow.js +54 -0
  166. package/dist/serialization-format.d.ts +16 -0
  167. package/dist/serialization-format.d.ts.map +1 -1
  168. package/dist/serialization-format.js +213 -50
  169. package/dist/serialization.d.ts +322 -214
  170. package/dist/serialization.d.ts.map +1 -1
  171. package/dist/serialization.js +1575 -664
  172. package/dist/set-attributes.d.ts +18 -0
  173. package/dist/set-attributes.d.ts.map +1 -0
  174. package/dist/set-attributes.js +61 -0
  175. package/dist/sleep.d.ts.map +1 -1
  176. package/dist/sleep.js +3 -2
  177. package/dist/source-map.d.ts +5 -0
  178. package/dist/source-map.d.ts.map +1 -1
  179. package/dist/source-map.js +102 -10
  180. package/dist/step/context-storage.d.ts +53 -0
  181. package/dist/step/context-storage.d.ts.map +1 -1
  182. package/dist/step/context-storage.js +1 -1
  183. package/dist/step/get-closure-vars.d.ts.map +1 -1
  184. package/dist/step/get-closure-vars.js +3 -2
  185. package/dist/step/get-step-metadata.d.ts.map +1 -1
  186. package/dist/step/get-step-metadata.js +3 -2
  187. package/dist/step/get-workflow-metadata.d.ts.map +1 -1
  188. package/dist/step/get-workflow-metadata.js +3 -2
  189. package/dist/step/writable-stream.d.ts.map +1 -1
  190. package/dist/step/writable-stream.js +58 -6
  191. package/dist/step-hydration-cache.d.ts +148 -0
  192. package/dist/step-hydration-cache.d.ts.map +1 -0
  193. package/dist/step-hydration-cache.js +171 -0
  194. package/dist/step.d.ts.map +1 -1
  195. package/dist/step.js +144 -25
  196. package/dist/symbols.d.ts +28 -0
  197. package/dist/symbols.d.ts.map +1 -1
  198. package/dist/symbols.js +29 -1
  199. package/dist/telemetry/semantic-conventions.d.ts +98 -2
  200. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  201. package/dist/telemetry/semantic-conventions.js +66 -1
  202. package/dist/telemetry.d.ts +68 -0
  203. package/dist/telemetry.d.ts.map +1 -1
  204. package/dist/telemetry.js +106 -4
  205. package/dist/types.d.ts +6 -0
  206. package/dist/types.d.ts.map +1 -1
  207. package/dist/types.js +23 -1
  208. package/dist/util.d.ts +16 -6
  209. package/dist/util.d.ts.map +1 -1
  210. package/dist/util.js +25 -16
  211. package/dist/version.d.ts +1 -1
  212. package/dist/version.d.ts.map +1 -1
  213. package/dist/version.js +2 -2
  214. package/dist/vm/index.d.ts.map +1 -1
  215. package/dist/vm/index.js +3 -2
  216. package/dist/vm/script-cache.d.ts +28 -0
  217. package/dist/vm/script-cache.d.ts.map +1 -0
  218. package/dist/vm/script-cache.js +140 -0
  219. package/dist/workflow/abort-controller.d.ts +65 -0
  220. package/dist/workflow/abort-controller.d.ts.map +1 -0
  221. package/dist/workflow/abort-controller.js +277 -0
  222. package/dist/workflow/attribute-dispatcher.d.ts +6 -0
  223. package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
  224. package/dist/workflow/attribute-dispatcher.js +48 -0
  225. package/dist/workflow/create-hook.d.ts.map +1 -1
  226. package/dist/workflow/create-hook.js +25 -3
  227. package/dist/workflow/define-hook.d.ts +1 -1
  228. package/dist/workflow/define-hook.d.ts.map +1 -1
  229. package/dist/workflow/define-hook.js +8 -4
  230. package/dist/workflow/get-workflow-metadata.d.ts.map +1 -1
  231. package/dist/workflow/get-workflow-metadata.js +14 -3
  232. package/dist/workflow/hook.d.ts.map +1 -1
  233. package/dist/workflow/hook.js +207 -33
  234. package/dist/workflow/index.d.ts +1 -0
  235. package/dist/workflow/index.d.ts.map +1 -1
  236. package/dist/workflow/index.js +5 -3
  237. package/dist/workflow/set-attributes.d.ts +77 -0
  238. package/dist/workflow/set-attributes.d.ts.map +1 -0
  239. package/dist/workflow/set-attributes.js +65 -0
  240. package/dist/workflow/sleep.d.ts.map +1 -1
  241. package/dist/workflow/sleep.js +45 -8
  242. package/dist/workflow/world-init-stub.d.ts +15 -0
  243. package/dist/workflow/world-init-stub.d.ts.map +1 -0
  244. package/dist/workflow/world-init-stub.js +15 -0
  245. package/dist/workflow.d.ts +17 -1
  246. package/dist/workflow.d.ts.map +1 -1
  247. package/dist/workflow.js +190 -56
  248. package/docs/api-reference/create-hook.mdx +38 -0
  249. package/docs/api-reference/create-webhook.mdx +1 -0
  250. package/docs/api-reference/fetch.mdx +5 -0
  251. package/docs/api-reference/index.mdx +3 -0
  252. package/docs/api-reference/set-attributes.mdx +65 -0
  253. package/docs/foundations/cancellation.mdx +459 -0
  254. package/docs/foundations/errors-and-retries.mdx +7 -3
  255. package/docs/foundations/hooks.mdx +29 -0
  256. package/docs/foundations/idempotency.mdx +236 -11
  257. package/docs/foundations/index.mdx +1 -23
  258. package/docs/foundations/meta.json +3 -1
  259. package/docs/foundations/serialization.mdx +77 -41
  260. package/docs/foundations/starting-workflows.mdx +5 -1
  261. package/docs/foundations/streaming.mdx +14 -23
  262. package/docs/foundations/versioning.mdx +263 -0
  263. package/docs/how-it-works/cancellation.mdx +287 -0
  264. package/docs/how-it-works/code-transform.mdx +2 -2
  265. package/docs/how-it-works/encryption.mdx +2 -2
  266. package/docs/how-it-works/event-sourcing.mdx +2 -2
  267. package/docs/how-it-works/meta.json +2 -1
  268. package/package.json +32 -11
@@ -0,0 +1,18 @@
1
+ import type { ExperimentalSetAttributesOptions, SetAttributesOptions } from './workflow/set-attributes.js';
2
+ export type { ExperimentalSetAttributesOptions, 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
+ /**
14
+ * @deprecated The feature is no longer experimental — use
15
+ * {@link setAttributes} instead.
16
+ */
17
+ export declare const experimental_setAttributes: typeof setAttributes;
18
+ //# 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,EACV,gCAAgC,EAChC,oBAAoB,EACrB,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EAAE,gCAAgC,EAAE,oBAAoB,EAAE,CAAC;AAEvE;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACzC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CA2Cf;AAED;;;GAGG;AACH,eAAO,MAAM,0BAA0B,sBAAgB,CAAC"}
@@ -0,0 +1,61 @@
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
+ await world.events.create(runId, {
41
+ eventType: 'attr_set',
42
+ specVersion: SPEC_VERSION_CURRENT,
43
+ eventData: {
44
+ changes,
45
+ writer: {
46
+ type: 'step',
47
+ stepId: store.stepMetadata.stepId,
48
+ attempt: store.stepMetadata.attempt,
49
+ },
50
+ ...(options.allowReservedAttributes === true
51
+ ? { allowReservedAttributes: true }
52
+ : {}),
53
+ },
54
+ });
55
+ }
56
+ /**
57
+ * @deprecated The feature is no longer experimental — use
58
+ * {@link setAttributes} instead.
59
+ */
60
+ export const experimental_setAttributes = setAttributes;
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWF0dHJpYnV0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2V0LWF0dHJpYnV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFRM0Q7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FDakMsS0FBeUMsRUFDekMsVUFBZ0MsRUFBRTtJQUVsQyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsQ0FBQztJQUNyRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksVUFBVSxDQUNsQiwrRUFBK0U7WUFDN0UsbURBQW1ELENBQ3RELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcseUJBQXlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTztJQUVqQyxvRUFBb0U7SUFDcEUsNkVBQTZFO0lBQzdFLDBFQUEwRTtJQUMxRSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSxJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUM7UUFDOUIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLGtEQUFrRDtRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxFQUFFLENBQUM7SUFDbkMsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDL0IsU0FBUyxFQUFFLFVBQVU7UUFDckIsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxTQUFTLEVBQUU7WUFDVCxPQUFPO1lBQ1AsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxNQUFNO2dCQUNaLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU07Z0JBQ2pDLE9BQU8sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU87YUFDcEM7WUFDRCxHQUFHLENBQUMsT0FBTyxDQUFDLHVCQUF1QixLQUFLLElBQUk7Z0JBQzFDLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRTtnQkFDbkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNSO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZhdGFsRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IFNQRUNfVkVSU0lPTl9DVVJSRU5UIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IG5vcm1hbGl6ZUF0dHJpYnV0ZUNoYW5nZXMgfSBmcm9tICcuL2F0dHJpYnV0ZS1jaGFuZ2VzLmpzJztcbmltcG9ydCB7IGdldFdvcmxkTGF6eSB9IGZyb20gJy4vcnVudGltZS9nZXQtd29ybGQtbGF6eS5qcyc7XG5pbXBvcnQgeyBjb250ZXh0U3RvcmFnZSB9IGZyb20gJy4vc3RlcC9jb250ZXh0LXN0b3JhZ2UuanMnO1xuaW1wb3J0IHR5cGUge1xuICBFeHBlcmltZW50YWxTZXRBdHRyaWJ1dGVzT3B0aW9ucyxcbiAgU2V0QXR0cmlidXRlc09wdGlvbnMsXG59IGZyb20gJy4vd29ya2Zsb3cvc2V0LWF0dHJpYnV0ZXMuanMnO1xuXG5leHBvcnQgdHlwZSB7IEV4cGVyaW1lbnRhbFNldEF0dHJpYnV0ZXNPcHRpb25zLCBTZXRBdHRyaWJ1dGVzT3B0aW9ucyB9O1xuXG4vKipcbiAqIEhvc3Qtc2lkZSBpbXBsZW1lbnRhdGlvbiBmb3IgYHNldEF0dHJpYnV0ZXNgLiBXb3JrZmxvdyBib2RpZXMgcmVzb2x2ZVxuICogdG8gYC4vd29ya2Zsb3cvc2V0LWF0dHJpYnV0ZXMudHNgIHZpYSB0aGUgYHdvcmtmbG93YCBwYWNrYWdlLWV4cG9ydHNcbiAqIGNvbmRpdGlvbjsgc3RlcCBib2RpZXMgcmVzb2x2ZSBoZXJlIGFuZCBjYW4gcGVyZm9ybSB0aGUgd29ybGQgd3JpdGVcbiAqIGRpcmVjdGx5IGJlY2F1c2UgdGhleSBhbHJlYWR5IHJ1biBpbiBob3N0IGNvbnRleHQuXG4gKlxuICogUGxhaW4gYXBwbGljYXRpb24gY29kZSBzdGlsbCBoYXMgbm8gYWN0aXZlIHdvcmtmbG93IHJ1biwgc28gaXQgdGhyb3dzXG4gKiBhIGNsZWFyIGBGYXRhbEVycm9yYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMoXG4gIGF0dHJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+LFxuICBvcHRpb25zOiBTZXRBdHRyaWJ1dGVzT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RvcmUgPSBjb250ZXh0U3RvcmFnZS5nZXRTdG9yZSgpO1xuICBjb25zdCBydW5JZCA9IHN0b3JlPy53b3JrZmxvd01ldGFkYXRhPy53b3JrZmxvd1J1bklkO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgdGhyb3cgbmV3IEZhdGFsRXJyb3IoXG4gICAgICBcInNldEF0dHJpYnV0ZXMoKSBtdXN0IGJlIGNhbGxlZCBmcm9tIGEgJ3VzZSB3b3JrZmxvdycgb3IgJ3VzZSBzdGVwJyBmdW5jdGlvbi4gXCIgK1xuICAgICAgICAnQ2FsbGluZyBpdCBmcm9tIHBsYWluIGhvc3QgY29kZSBpcyBub3Qgc3VwcG9ydGVkLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2hhbmdlcyA9IG5vcm1hbGl6ZUF0dHJpYnV0ZUNoYW5nZXMoYXR0cnMsIG9wdGlvbnMpO1xuICBpZiAoY2hhbmdlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAvLyBUdXJibyBvcHRpbWlzdGljIHN0YXJ0IHJ1bnMgdGhlIHN0ZXAgYm9keSBiZWZvcmUgdGhlIGJhY2tncm91bmRlZFxuICAvLyBgcnVuX3N0YXJ0ZWRgIGlzIGR1cmFibGUuIE9yZGVyIHRoaXMgYGF0dHJfc2V0YCBhZnRlciB0aGUgcnVuIGV4aXN0cyBzbyBpdFxuICAvLyBuZXZlciByZWFjaGVzIHRoZSBXb3JsZCBiZWZvcmUgdGhlIHJ1biBkb2VzICh3aGljaCB3b3VsZCBiZSByZWplY3RlZCBhc1xuICAvLyBydW4tbm90LWZvdW5kKS4gQSBuby1vcCBvdXRzaWRlIHR1cmJvIChiYXJyaWVyIHVuZGVmaW5lZCkgYW5kIG9uIHRoZSBhd2FpdFxuICAvLyBwYXRoLiBUaGUgcmVqZWN0aW9uIGlzIHN3YWxsb3dlZCBmb3Igb3JkZXJpbmcgb25seTogaWYgYHJ1bl9zdGFydGVkYCB0cnVseVxuICAvLyBmYWlsZWQgdGhlIHJ1biBkb2VzIG5vdCBleGlzdCwgc28gdGhlIGNyZWF0ZSBiZWxvdyBzdXJmYWNlcyB0aGUgcmVhbCBlcnJvci5cbiAgaWYgKHN0b3JlLnJ1blJlYWR5QmFycmllcikge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzdG9yZS5ydW5SZWFkeUJhcnJpZXI7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpbnRlbnRpb25hbDogb3JkZXJpbmcgYmFycmllciBvbmx5IOKAlCBzZWUgYWJvdmUuXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgd29ybGQgPSBhd2FpdCBnZXRXb3JsZExhenkoKTtcbiAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZShydW5JZCwge1xuICAgIGV2ZW50VHlwZTogJ2F0dHJfc2V0JyxcbiAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgZXZlbnREYXRhOiB7XG4gICAgICBjaGFuZ2VzLFxuICAgICAgd3JpdGVyOiB7XG4gICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgc3RlcElkOiBzdG9yZS5zdGVwTWV0YWRhdGEuc3RlcElkLFxuICAgICAgICBhdHRlbXB0OiBzdG9yZS5zdGVwTWV0YWRhdGEuYXR0ZW1wdCxcbiAgICAgIH0sXG4gICAgICAuLi4ob3B0aW9ucy5hbGxvd1Jlc2VydmVkQXR0cmlidXRlcyA9PT0gdHJ1ZVxuICAgICAgICA/IHsgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM6IHRydWUgfVxuICAgICAgICA6IHt9KSxcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBUaGUgZmVhdHVyZSBpcyBubyBsb25nZXIgZXhwZXJpbWVudGFsIOKAlCB1c2VcbiAqIHtAbGluayBzZXRBdHRyaWJ1dGVzfSBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgZXhwZXJpbWVudGFsX3NldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../src/sleep.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAGtC;;;;;;;;;GASG;AACH,wBAAsB,KAAK,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAElE;;;;;;;;GAQG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvD;;;;;;;;GAQG;AACH,wBAAsB,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../src/sleep.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAItC;;;;;;;;;GASG;AACH,wBAAsB,KAAK,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAElE;;;;;;;;GAQG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvD;;;;;;;;GAQG;AACH,wBAAsB,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
package/dist/sleep.js CHANGED
@@ -1,10 +1,11 @@
1
+ import { throwNotInWorkflowContext } from './context-errors.js';
1
2
  import { WORKFLOW_SLEEP } from './symbols.js';
2
3
  export async function sleep(param) {
3
4
  // Inside the workflow VM, the sleep function is stored in the globalThis object behind a symbol
4
5
  const sleepFn = globalThis[WORKFLOW_SLEEP];
5
6
  if (!sleepFn) {
6
- throw new Error('`sleep()` can only be called inside a workflow function');
7
+ throwNotInWorkflowContext('sleep()', 'https://workflow-sdk.dev/docs/api-reference/workflow/sleep', sleep);
7
8
  }
8
9
  return sleepFn(param);
9
10
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2xlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQW9DOUMsTUFBTSxDQUFDLEtBQUssVUFBVSxLQUFLLENBQUMsS0FBa0M7SUFDNUQsZ0dBQWdHO0lBQ2hHLE1BQU0sT0FBTyxHQUFJLFVBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTdHJpbmdWYWx1ZSB9IGZyb20gJ21zJztcbmltcG9ydCB7IFdPUktGTE9XX1NMRUVQIH0gZnJvbSAnLi9zeW1ib2xzLmpzJztcblxuLyoqXG4gKiBTbGVlcCB3aXRoaW4gYSB3b3JrZmxvdyBmb3IgYSBnaXZlbiBkdXJhdGlvbi5cbiAqXG4gKiBUaGlzIGlzIGEgYnVpbHQtaW4gcnVudGltZSBmdW5jdGlvbiB0aGF0IHVzZXMgdGltZXIgZXZlbnRzIGluIHRoZSBldmVudCBsb2cuXG4gKlxuICogQHBhcmFtIGR1cmF0aW9uIC0gVGhlIGR1cmF0aW9uIHRvIHNsZWVwIGZvciwgdGhpcyBpcyBhIHN0cmluZyBpbiB0aGUgZm9ybWF0XG4gKiBvZiBgXCIxMDAwbXNcImAsIGBcIjFzXCJgLCBgXCIxbVwiYCwgYFwiMWhcImAsIG9yIGBcIjFkXCJgLlxuICogQG92ZXJsb2FkXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzbGVlcCBpcyBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKGR1cmF0aW9uOiBTdHJpbmdWYWx1ZSk6IFByb21pc2U8dm9pZD47XG5cbi8qKlxuICogU2xlZXAgd2l0aGluIGEgd29ya2Zsb3cgdW50aWwgYSBzcGVjaWZpYyBkYXRlLlxuICpcbiAqIFRoaXMgaXMgYSBidWlsdC1pbiBydW50aW1lIGZ1bmN0aW9uIHRoYXQgdXNlcyB0aW1lciBldmVudHMgaW4gdGhlIGV2ZW50IGxvZy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIHNsZWVwIHVudGlsLCB0aGlzIG11c3QgYmUgYSBmdXR1cmUgZGF0ZS5cbiAqIEBvdmVybG9hZFxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2xlZXAgaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcChkYXRlOiBEYXRlKTogUHJvbWlzZTx2b2lkPjtcblxuLyoqXG4gKiBTbGVlcCB3aXRoaW4gYSB3b3JrZmxvdyBmb3IgYSBnaXZlbiBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMuXG4gKlxuICogVGhpcyBpcyBhIGJ1aWx0LWluIHJ1bnRpbWUgZnVuY3Rpb24gdGhhdCB1c2VzIHRpbWVyIGV2ZW50cyBpbiB0aGUgZXZlbnQgbG9nLlxuICpcbiAqIEBwYXJhbSBkdXJhdGlvbk1zIC0gVGhlIGR1cmF0aW9uIHRvIHNsZWVwIGZvciBpbiBtaWxsaXNlY29uZHMuXG4gKiBAb3ZlcmxvYWRcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNsZWVwIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXAoZHVyYXRpb25NczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKHBhcmFtOiBTdHJpbmdWYWx1ZSB8IERhdGUgfCBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gSW5zaWRlIHRoZSB3b3JrZmxvdyBWTSwgdGhlIHNsZWVwIGZ1bmN0aW9uIGlzIHN0b3JlZCBpbiB0aGUgZ2xvYmFsVGhpcyBvYmplY3QgYmVoaW5kIGEgc3ltYm9sXG4gIGNvbnN0IHNsZWVwRm4gPSAoZ2xvYmFsVGhpcyBhcyBhbnkpW1dPUktGTE9XX1NMRUVQXTtcbiAgaWYgKCFzbGVlcEZuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdgc2xlZXAoKWAgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBhIHdvcmtmbG93IGZ1bmN0aW9uJyk7XG4gIH1cbiAgcmV0dXJuIHNsZWVwRm4ocGFyYW0pO1xufVxuIl19
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2xlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQW9DOUMsTUFBTSxDQUFDLEtBQUssVUFBVSxLQUFLLENBQUMsS0FBa0M7SUFDNUQsZ0dBQWdHO0lBQ2hHLE1BQU0sT0FBTyxHQUFJLFVBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IseUJBQXlCLENBQ3ZCLFNBQVMsRUFDVCw0REFBNEQsRUFDNUQsS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3RyaW5nVmFsdWUgfSBmcm9tICdtcyc7XG5pbXBvcnQgeyB0aHJvd05vdEluV29ya2Zsb3dDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0LWVycm9ycy5qcyc7XG5pbXBvcnQgeyBXT1JLRkxPV19TTEVFUCB9IGZyb20gJy4vc3ltYm9scy5qcyc7XG5cbi8qKlxuICogU2xlZXAgd2l0aGluIGEgd29ya2Zsb3cgZm9yIGEgZ2l2ZW4gZHVyYXRpb24uXG4gKlxuICogVGhpcyBpcyBhIGJ1aWx0LWluIHJ1bnRpbWUgZnVuY3Rpb24gdGhhdCB1c2VzIHRpbWVyIGV2ZW50cyBpbiB0aGUgZXZlbnQgbG9nLlxuICpcbiAqIEBwYXJhbSBkdXJhdGlvbiAtIFRoZSBkdXJhdGlvbiB0byBzbGVlcCBmb3IsIHRoaXMgaXMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdFxuICogb2YgYFwiMTAwMG1zXCJgLCBgXCIxc1wiYCwgYFwiMW1cImAsIGBcIjFoXCJgLCBvciBgXCIxZFwiYC5cbiAqIEBvdmVybG9hZFxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2xlZXAgaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcChkdXJhdGlvbjogU3RyaW5nVmFsdWUpOiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIFNsZWVwIHdpdGhpbiBhIHdvcmtmbG93IHVudGlsIGEgc3BlY2lmaWMgZGF0ZS5cbiAqXG4gKiBUaGlzIGlzIGEgYnVpbHQtaW4gcnVudGltZSBmdW5jdGlvbiB0aGF0IHVzZXMgdGltZXIgZXZlbnRzIGluIHRoZSBldmVudCBsb2cuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBzbGVlcCB1bnRpbCwgdGhpcyBtdXN0IGJlIGEgZnV0dXJlIGRhdGUuXG4gKiBAb3ZlcmxvYWRcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNsZWVwIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXAoZGF0ZTogRGF0ZSk6IFByb21pc2U8dm9pZD47XG5cbi8qKlxuICogU2xlZXAgd2l0aGluIGEgd29ya2Zsb3cgZm9yIGEgZ2l2ZW4gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIFRoaXMgaXMgYSBidWlsdC1pbiBydW50aW1lIGZ1bmN0aW9uIHRoYXQgdXNlcyB0aW1lciBldmVudHMgaW4gdGhlIGV2ZW50IGxvZy5cbiAqXG4gKiBAcGFyYW0gZHVyYXRpb25NcyAtIFRoZSBkdXJhdGlvbiB0byBzbGVlcCBmb3IgaW4gbWlsbGlzZWNvbmRzLlxuICogQG92ZXJsb2FkXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzbGVlcCBpcyBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKGR1cmF0aW9uTXM6IG51bWJlcik6IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcChwYXJhbTogU3RyaW5nVmFsdWUgfCBEYXRlIHwgbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIEluc2lkZSB0aGUgd29ya2Zsb3cgVk0sIHRoZSBzbGVlcCBmdW5jdGlvbiBpcyBzdG9yZWQgaW4gdGhlIGdsb2JhbFRoaXMgb2JqZWN0IGJlaGluZCBhIHN5bWJvbFxuICBjb25zdCBzbGVlcEZuID0gKGdsb2JhbFRoaXMgYXMgYW55KVtXT1JLRkxPV19TTEVFUF07XG4gIGlmICghc2xlZXBGbikge1xuICAgIHRocm93Tm90SW5Xb3JrZmxvd0NvbnRleHQoXG4gICAgICAnc2xlZXAoKScsXG4gICAgICAnaHR0cHM6Ly93b3JrZmxvdy1zZGsuZGV2L2RvY3MvYXBpLXJlZmVyZW5jZS93b3JrZmxvdy9zbGVlcCcsXG4gICAgICBzbGVlcFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHNsZWVwRm4ocGFyYW0pO1xufVxuIl19
@@ -1,6 +1,11 @@
1
1
  /**
2
2
  * Remaps an error stack trace using inline source maps to show original source locations.
3
3
  *
4
+ * Degrades gracefully when the bundle has no inline source map (e.g. production
5
+ * builds, where maps are off by default): the original stack is returned
6
+ * unchanged. A cheap `filename` presence check skips all work when no frame
7
+ * references the workflow file, and parsed source maps are memoized per bundle.
8
+ *
4
9
  * @param stack - The error stack trace to remap
5
10
  * @param filename - The workflow filename to match in stack frames
6
11
  * @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":"AAuGA;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,MAAM,CAsDR"}
@@ -1,24 +1,116 @@
1
1
  import { originalPositionFor, TraceMap } from '@jridgewell/trace-mapping';
2
+ function isBase64Char(code) {
3
+ return ((code >= 0x41 && code <= 0x5a) ||
4
+ (code >= 0x61 && code <= 0x7a) ||
5
+ (code >= 0x30 && code <= 0x39) ||
6
+ code === 0x2b ||
7
+ code === 0x2f ||
8
+ code === 0x3d);
9
+ }
10
+ function extractInlineSourceMapBase64(source) {
11
+ const sourceMapPrefix = '//# sourceMappingURL=data:application/json';
12
+ const base64Marker = ';base64,';
13
+ let scanFrom = 0;
14
+ while (scanFrom < source.length) {
15
+ const prefixIdx = source.indexOf(sourceMapPrefix, scanFrom);
16
+ if (prefixIdx === -1)
17
+ return undefined;
18
+ const base64Start = source.indexOf(base64Marker, prefixIdx + sourceMapPrefix.length);
19
+ if (base64Start === -1) {
20
+ scanFrom = prefixIdx + sourceMapPrefix.length;
21
+ continue;
22
+ }
23
+ const commaBefore = source.indexOf(',', prefixIdx);
24
+ if (commaBefore !== -1 && commaBefore < base64Start) {
25
+ scanFrom = base64Start + base64Marker.length;
26
+ continue;
27
+ }
28
+ const valueStart = base64Start + base64Marker.length;
29
+ let valueEnd = valueStart;
30
+ while (valueEnd < source.length) {
31
+ if (!isBase64Char(source.charCodeAt(valueEnd))) {
32
+ break;
33
+ }
34
+ valueEnd++;
35
+ }
36
+ if (valueEnd > valueStart) {
37
+ return source.slice(valueStart, valueEnd);
38
+ }
39
+ scanFrom = valueEnd;
40
+ }
41
+ }
42
+ /**
43
+ * Memoized `TraceMap | null` per workflow bundle. `null` records "this bundle
44
+ * has no usable inline source map" so repeated failures don't rescan the whole
45
+ * (potentially multi-MB) bundle string or re-parse the map. This matters most
46
+ * in production, where source maps are off by default: the first failure scans
47
+ * once and caches `null`, every later failure is O(1).
48
+ *
49
+ * Keyed by the bundle `code`. Insertion-ordered LRU capped at `MAX_TRACERS`,
50
+ * mirroring `vm/script-cache.ts`: production serves a single build-time bundle
51
+ * literal for the process lifetime, while dev/watch produces a new bundle
52
+ * string per edit — the bound keeps the few most-recent ones and evicts the
53
+ * rest instead of pinning every historical version.
54
+ */
55
+ const tracerCache = new Map();
56
+ const MAX_TRACERS = 8;
57
+ function getTraceMapForCode(workflowCode) {
58
+ const cached = tracerCache.get(workflowCode);
59
+ if (cached !== undefined) {
60
+ // Move to most-recently-used position (end of insertion order).
61
+ tracerCache.delete(workflowCode);
62
+ tracerCache.set(workflowCode, cached);
63
+ return cached;
64
+ }
65
+ let tracer = null;
66
+ const base64 = extractInlineSourceMapBase64(workflowCode);
67
+ if (base64) {
68
+ try {
69
+ const sourceMapJson = Buffer.from(base64, 'base64').toString('utf-8');
70
+ const sourceMapData = JSON.parse(sourceMapJson);
71
+ // Use TraceMap (pure JS, no WASM required)
72
+ tracer = new TraceMap(sourceMapData);
73
+ }
74
+ catch {
75
+ // Malformed inline map — treat as absent so we don't retry parsing it.
76
+ tracer = null;
77
+ }
78
+ }
79
+ tracerCache.set(workflowCode, tracer);
80
+ // Evict the least-recently-used entries when over the cap. New entries are
81
+ // appended at the end, so the oldest live at the front.
82
+ while (tracerCache.size > MAX_TRACERS) {
83
+ const oldest = tracerCache.keys().next().value;
84
+ if (oldest === undefined)
85
+ break;
86
+ tracerCache.delete(oldest);
87
+ }
88
+ return tracer;
89
+ }
2
90
  /**
3
91
  * Remaps an error stack trace using inline source maps to show original source locations.
4
92
  *
93
+ * Degrades gracefully when the bundle has no inline source map (e.g. production
94
+ * builds, where maps are off by default): the original stack is returned
95
+ * unchanged. A cheap `filename` presence check skips all work when no frame
96
+ * references the workflow file, and parsed source maps are memoized per bundle.
97
+ *
5
98
  * @param stack - The error stack trace to remap
6
99
  * @param filename - The workflow filename to match in stack frames
7
100
  * @param workflowCode - The workflow bundle code containing inline source maps
8
101
  * @returns The remapped stack trace with original source locations
9
102
  */
10
103
  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) {
104
+ // Nothing to remap if no frame references the workflow file. Avoids touching
105
+ // the (large) bundle string entirely for errors thrown elsewhere.
106
+ if (!stack.includes(filename)) {
107
+ return stack;
108
+ }
109
+ const tracer = getTraceMapForCode(workflowCode);
110
+ if (!tracer) {
14
111
  return stack; // No source map found
15
112
  }
16
113
  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
114
  // Parse and remap each line in the stack trace
23
115
  const lines = stack.split('\n');
24
116
  const remappedLines = lines.map((line) => {
@@ -48,9 +140,9 @@ export function remapErrorStack(stack, filename, workflowCode) {
48
140
  });
49
141
  return remappedLines.join('\n');
50
142
  }
51
- catch (e) {
143
+ catch {
52
144
  // If source map processing fails, return original stack
53
145
  return stack;
54
146
  }
55
147
  }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zb3VyY2UtbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsS0FBYSxFQUNiLFFBQWdCLEVBQ2hCLFlBQW9CO0lBRXBCLCtDQUErQztJQUMvQyxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUN2QywyREFBMkQsQ0FDNUQsQ0FBQztJQUNGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixPQUFPLEtBQUssQ0FBQyxDQUFDLHNCQUFzQjtJQUN0QyxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWhELDJDQUEyQztRQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUzQywrQ0FBK0M7UUFDL0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdkMsNEZBQTRGO1lBQzVGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQzNCLCtDQUErQyxDQUNoRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixPQUFPLElBQUksQ0FBQyxDQUFDLGtDQUFrQztZQUNqRCxDQUFDO1lBRUQsTUFBTSxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBRTNELDJDQUEyQztZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFMUMsa0NBQWtDO1lBQ2xDLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtnQkFDM0MsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLE1BQU0sRUFBRSxZQUFZO2FBQ3JCLENBQUMsQ0FBQztZQUVILElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM5QyxNQUFNLElBQUksR0FBRyxZQUFZLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUM7Z0JBQzFELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0JBQ3RFLE9BQU8sVUFBVSxJQUFJLEtBQUssUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQ3ZFLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxDQUFDLGdDQUFnQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLHdEQUF3RDtRQUN4RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgb3JpZ2luYWxQb3NpdGlvbkZvciwgVHJhY2VNYXAgfSBmcm9tICdAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nJztcblxuLyoqXG4gKiBSZW1hcHMgYW4gZXJyb3Igc3RhY2sgdHJhY2UgdXNpbmcgaW5saW5lIHNvdXJjZSBtYXBzIHRvIHNob3cgb3JpZ2luYWwgc291cmNlIGxvY2F0aW9ucy5cbiAqXG4gKiBAcGFyYW0gc3RhY2sgLSBUaGUgZXJyb3Igc3RhY2sgdHJhY2UgdG8gcmVtYXBcbiAqIEBwYXJhbSBmaWxlbmFtZSAtIFRoZSB3b3JrZmxvdyBmaWxlbmFtZSB0byBtYXRjaCBpbiBzdGFjayBmcmFtZXNcbiAqIEBwYXJhbSB3b3JrZmxvd0NvZGUgLSBUaGUgd29ya2Zsb3cgYnVuZGxlIGNvZGUgY29udGFpbmluZyBpbmxpbmUgc291cmNlIG1hcHNcbiAqIEByZXR1cm5zIFRoZSByZW1hcHBlZCBzdGFjayB0cmFjZSB3aXRoIG9yaWdpbmFsIHNvdXJjZSBsb2NhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbWFwRXJyb3JTdGFjayhcbiAgc3RhY2s6IHN0cmluZyxcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgd29ya2Zsb3dDb2RlOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIC8vIEV4dHJhY3QgaW5saW5lIHNvdXJjZSBtYXAgZnJvbSB3b3JrZmxvdyBjb2RlXG4gIGNvbnN0IHNvdXJjZU1hcE1hdGNoID0gd29ya2Zsb3dDb2RlLm1hdGNoKFxuICAgIC9cXC9cXC8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvblxcL2pzb247YmFzZTY0LCguKykvXG4gICk7XG4gIGlmICghc291cmNlTWFwTWF0Y2gpIHtcbiAgICByZXR1cm4gc3RhY2s7IC8vIE5vIHNvdXJjZSBtYXAgZm91bmRcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYmFzZTY0ID0gc291cmNlTWFwTWF0Y2hbMV07XG4gICAgY29uc3Qgc291cmNlTWFwSnNvbiA9IEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgIGNvbnN0IHNvdXJjZU1hcERhdGEgPSBKU09OLnBhcnNlKHNvdXJjZU1hcEpzb24pO1xuXG4gICAgLy8gVXNlIFRyYWNlTWFwIChwdXJlIEpTLCBubyBXQVNNIHJlcXVpcmVkKVxuICAgIGNvbnN0IHRyYWNlciA9IG5ldyBUcmFjZU1hcChzb3VyY2VNYXBEYXRhKTtcblxuICAgIC8vIFBhcnNlIGFuZCByZW1hcCBlYWNoIGxpbmUgaW4gdGhlIHN0YWNrIHRyYWNlXG4gICAgY29uc3QgbGluZXMgPSBzdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgcmVtYXBwZWRMaW5lcyA9IGxpbmVzLm1hcCgobGluZSkgPT4ge1xuICAgICAgLy8gTWF0Y2ggc3RhY2sgZnJhbWVzOiBcImF0IGZ1bmN0aW9uTmFtZSAoZmlsZW5hbWU6bGluZTpjb2x1bW4pXCIgb3IgXCJhdCBmaWxlbmFtZTpsaW5lOmNvbHVtblwiXG4gICAgICBjb25zdCBmcmFtZU1hdGNoID0gbGluZS5tYXRjaChcbiAgICAgICAgL15cXHMqYXRcXHMrKD86KC4rPylcXHMrXFwoKT8oLis/KTooXFxkKyk6KFxcZCspXFwpPyQvXG4gICAgICApO1xuICAgICAgaWYgKCFmcmFtZU1hdGNoKSB7XG4gICAgICAgIHJldHVybiBsaW5lOyAvLyBOb3QgYSBzdGFjayBmcmFtZSwgcmV0dXJuIGFzLWlzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFssIGZ1bmN0aW9uTmFtZSwgZmlsZSwgbGluZVN0ciwgY29sU3RyXSA9IGZyYW1lTWF0Y2g7XG5cbiAgICAgIC8vIE9ubHkgcmVtYXAgZnJhbWVzIGZyb20gb3VyIHdvcmtmbG93IGZpbGVcbiAgICAgIGlmICghZmlsZS5pbmNsdWRlcyhmaWxlbmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGxpbmU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpbmVOdW1iZXIgPSBwYXJzZUludChsaW5lU3RyLCAxMCk7XG4gICAgICBjb25zdCBjb2x1bW5OdW1iZXIgPSBwYXJzZUludChjb2xTdHIsIDEwKTtcblxuICAgICAgLy8gTWFwIHRvIG9yaWdpbmFsIHNvdXJjZSBwb3NpdGlvblxuICAgICAgY29uc3Qgb3JpZ2luYWwgPSBvcmlnaW5hbFBvc2l0aW9uRm9yKHRyYWNlciwge1xuICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICBjb2x1bW46IGNvbHVtbk51bWJlcixcbiAgICAgIH0pO1xuXG4gICAgICBpZiAob3JpZ2luYWwuc291cmNlICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZnVuYyA9IGZ1bmN0aW9uTmFtZSB8fCBvcmlnaW5hbC5uYW1lIHx8ICdhbm9ueW1vdXMnO1xuICAgICAgICBjb25zdCBjb2wgPSBvcmlnaW5hbC5jb2x1bW4gIT09IG51bGwgPyBvcmlnaW5hbC5jb2x1bW4gOiBjb2x1bW5OdW1iZXI7XG4gICAgICAgIHJldHVybiBgICAgIGF0ICR7ZnVuY30gKCR7b3JpZ2luYWwuc291cmNlfToke29yaWdpbmFsLmxpbmV9OiR7Y29sfSlgO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGluZTsgLy8gQ291bGRuJ3QgbWFwLCByZXR1cm4gb3JpZ2luYWxcbiAgICB9KTtcblxuICAgIHJldHVybiByZW1hcHBlZExpbmVzLmpvaW4oJ1xcbicpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSWYgc291cmNlIG1hcCBwcm9jZXNzaW5nIGZhaWxzLCByZXR1cm4gb3JpZ2luYWwgc3RhY2tcbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cbn1cbiJdfQ==
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zb3VyY2UtbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRSxTQUFTLFlBQVksQ0FBQyxJQUFZO0lBQ2hDLE9BQU8sQ0FDTCxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQztRQUM5QixDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQztRQUM5QixDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQztRQUM5QixJQUFJLEtBQUssSUFBSTtRQUNiLElBQUksS0FBSyxJQUFJO1FBQ2IsSUFBSSxLQUFLLElBQUksQ0FDZCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQUMsTUFBYztJQUNsRCxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztJQUNyRSxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUM7SUFDaEMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRWpCLE9BQU8sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1RCxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUV2QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUNoQyxZQUFZLEVBQ1osU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQ25DLENBQUM7UUFDRixJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLFFBQVEsR0FBRyxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztZQUM5QyxT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QyxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxJQUFJLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDO2dCQUMxRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dCQUN0RSxPQUFPLFVBQVUsSUFBSSxLQUFLLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztZQUN2RSxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsQ0FBQyxnQ0FBZ0M7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLHdEQUF3RDtRQUN4RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgb3JpZ2luYWxQb3NpdGlvbkZvciwgVHJhY2VNYXAgfSBmcm9tICdAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nJztcblxuZnVuY3Rpb24gaXNCYXNlNjRDaGFyKGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIChjb2RlID49IDB4NDEgJiYgY29kZSA8PSAweDVhKSB8fFxuICAgIChjb2RlID49IDB4NjEgJiYgY29kZSA8PSAweDdhKSB8fFxuICAgIChjb2RlID49IDB4MzAgJiYgY29kZSA8PSAweDM5KSB8fFxuICAgIGNvZGUgPT09IDB4MmIgfHxcbiAgICBjb2RlID09PSAweDJmIHx8XG4gICAgY29kZSA9PT0gMHgzZFxuICApO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0SW5saW5lU291cmNlTWFwQmFzZTY0KHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc291cmNlTWFwUHJlZml4ID0gJy8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbic7XG4gIGNvbnN0IGJhc2U2NE1hcmtlciA9ICc7YmFzZTY0LCc7XG4gIGxldCBzY2FuRnJvbSA9IDA7XG5cbiAgd2hpbGUgKHNjYW5Gcm9tIDwgc291cmNlLmxlbmd0aCkge1xuICAgIGNvbnN0IHByZWZpeElkeCA9IHNvdXJjZS5pbmRleE9mKHNvdXJjZU1hcFByZWZpeCwgc2NhbkZyb20pO1xuICAgIGlmIChwcmVmaXhJZHggPT09IC0xKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgYmFzZTY0U3RhcnQgPSBzb3VyY2UuaW5kZXhPZihcbiAgICAgIGJhc2U2NE1hcmtlcixcbiAgICAgIHByZWZpeElkeCArIHNvdXJjZU1hcFByZWZpeC5sZW5ndGhcbiAgICApO1xuICAgIGlmIChiYXNlNjRTdGFydCA9PT0gLTEpIHtcbiAgICAgIHNjYW5Gcm9tID0gcHJlZml4SWR4ICsgc291cmNlTWFwUHJlZml4Lmxlbmd0aDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1hQmVmb3JlID0gc291cmNlLmluZGV4T2YoJywnLCBwcmVmaXhJZHgpO1xuICAgIGlmIChjb21tYUJlZm9yZSAhPT0gLTEgJiYgY29tbWFCZWZvcmUgPCBiYXNlNjRTdGFydCkge1xuICAgICAgc2NhbkZyb20gPSBiYXNlNjRTdGFydCArIGJhc2U2NE1hcmtlci5sZW5ndGg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZVN0YXJ0ID0gYmFzZTY0U3RhcnQgKyBiYXNlNjRNYXJrZXIubGVuZ3RoO1xuICAgIGxldCB2YWx1ZUVuZCA9IHZhbHVlU3RhcnQ7XG4gICAgd2hpbGUgKHZhbHVlRW5kIDwgc291cmNlLmxlbmd0aCkge1xuICAgICAgaWYgKCFpc0Jhc2U2NENoYXIoc291cmNlLmNoYXJDb2RlQXQodmFsdWVFbmQpKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHZhbHVlRW5kKys7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlRW5kID4gdmFsdWVTdGFydCkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSh2YWx1ZVN0YXJ0LCB2YWx1ZUVuZCk7XG4gICAgfVxuICAgIHNjYW5Gcm9tID0gdmFsdWVFbmQ7XG4gIH1cbn1cblxuLyoqXG4gKiBNZW1vaXplZCBgVHJhY2VNYXAgfCBudWxsYCBwZXIgd29ya2Zsb3cgYnVuZGxlLiBgbnVsbGAgcmVjb3JkcyBcInRoaXMgYnVuZGxlXG4gKiBoYXMgbm8gdXNhYmxlIGlubGluZSBzb3VyY2UgbWFwXCIgc28gcmVwZWF0ZWQgZmFpbHVyZXMgZG9uJ3QgcmVzY2FuIHRoZSB3aG9sZVxuICogKHBvdGVudGlhbGx5IG11bHRpLU1CKSBidW5kbGUgc3RyaW5nIG9yIHJlLXBhcnNlIHRoZSBtYXAuIFRoaXMgbWF0dGVycyBtb3N0XG4gKiBpbiBwcm9kdWN0aW9uLCB3aGVyZSBzb3VyY2UgbWFwcyBhcmUgb2ZmIGJ5IGRlZmF1bHQ6IHRoZSBmaXJzdCBmYWlsdXJlIHNjYW5zXG4gKiBvbmNlIGFuZCBjYWNoZXMgYG51bGxgLCBldmVyeSBsYXRlciBmYWlsdXJlIGlzIE8oMSkuXG4gKlxuICogS2V5ZWQgYnkgdGhlIGJ1bmRsZSBgY29kZWAuIEluc2VydGlvbi1vcmRlcmVkIExSVSBjYXBwZWQgYXQgYE1BWF9UUkFDRVJTYCxcbiAqIG1pcnJvcmluZyBgdm0vc2NyaXB0LWNhY2hlLnRzYDogcHJvZHVjdGlvbiBzZXJ2ZXMgYSBzaW5nbGUgYnVpbGQtdGltZSBidW5kbGVcbiAqIGxpdGVyYWwgZm9yIHRoZSBwcm9jZXNzIGxpZmV0aW1lLCB3aGlsZSBkZXYvd2F0Y2ggcHJvZHVjZXMgYSBuZXcgYnVuZGxlXG4gKiBzdHJpbmcgcGVyIGVkaXQg4oCUIHRoZSBib3VuZCBrZWVwcyB0aGUgZmV3IG1vc3QtcmVjZW50IG9uZXMgYW5kIGV2aWN0cyB0aGVcbiAqIHJlc3QgaW5zdGVhZCBvZiBwaW5uaW5nIGV2ZXJ5IGhpc3RvcmljYWwgdmVyc2lvbi5cbiAqL1xuY29uc3QgdHJhY2VyQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgVHJhY2VNYXAgfCBudWxsPigpO1xuY29uc3QgTUFYX1RSQUNFUlMgPSA4O1xuXG5mdW5jdGlvbiBnZXRUcmFjZU1hcEZvckNvZGUod29ya2Zsb3dDb2RlOiBzdHJpbmcpOiBUcmFjZU1hcCB8IG51bGwge1xuICBjb25zdCBjYWNoZWQgPSB0cmFjZXJDYWNoZS5nZXQod29ya2Zsb3dDb2RlKTtcbiAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gTW92ZSB0byBtb3N0LXJlY2VudGx5LXVzZWQgcG9zaXRpb24gKGVuZCBvZiBpbnNlcnRpb24gb3JkZXIpLlxuICAgIHRyYWNlckNhY2hlLmRlbGV0ZSh3b3JrZmxvd0NvZGUpO1xuICAgIHRyYWNlckNhY2hlLnNldCh3b3JrZmxvd0NvZGUsIGNhY2hlZCk7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuXG4gIGxldCB0cmFjZXI6IFRyYWNlTWFwIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGJhc2U2NCA9IGV4dHJhY3RJbmxpbmVTb3VyY2VNYXBCYXNlNjQod29ya2Zsb3dDb2RlKTtcbiAgaWYgKGJhc2U2NCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzb3VyY2VNYXBKc29uID0gQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBzb3VyY2VNYXBEYXRhID0gSlNPTi5wYXJzZShzb3VyY2VNYXBKc29uKTtcbiAgICAgIC8vIFVzZSBUcmFjZU1hcCAocHVyZSBKUywgbm8gV0FTTSByZXF1aXJlZClcbiAgICAgIHRyYWNlciA9IG5ldyBUcmFjZU1hcChzb3VyY2VNYXBEYXRhKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE1hbGZvcm1lZCBpbmxpbmUgbWFwIOKAlCB0cmVhdCBhcyBhYnNlbnQgc28gd2UgZG9uJ3QgcmV0cnkgcGFyc2luZyBpdC5cbiAgICAgIHRyYWNlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgdHJhY2VyQ2FjaGUuc2V0KHdvcmtmbG93Q29kZSwgdHJhY2VyKTtcbiAgLy8gRXZpY3QgdGhlIGxlYXN0LXJlY2VudGx5LXVzZWQgZW50cmllcyB3aGVuIG92ZXIgdGhlIGNhcC4gTmV3IGVudHJpZXMgYXJlXG4gIC8vIGFwcGVuZGVkIGF0IHRoZSBlbmQsIHNvIHRoZSBvbGRlc3QgbGl2ZSBhdCB0aGUgZnJvbnQuXG4gIHdoaWxlICh0cmFjZXJDYWNoZS5zaXplID4gTUFYX1RSQUNFUlMpIHtcbiAgICBjb25zdCBvbGRlc3QgPSB0cmFjZXJDYWNoZS5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmIChvbGRlc3QgPT09IHVuZGVmaW5lZCkgYnJlYWs7XG4gICAgdHJhY2VyQ2FjaGUuZGVsZXRlKG9sZGVzdCk7XG4gIH1cbiAgcmV0dXJuIHRyYWNlcjtcbn1cblxuLyoqXG4gKiBSZW1hcHMgYW4gZXJyb3Igc3RhY2sgdHJhY2UgdXNpbmcgaW5saW5lIHNvdXJjZSBtYXBzIHRvIHNob3cgb3JpZ2luYWwgc291cmNlIGxvY2F0aW9ucy5cbiAqXG4gKiBEZWdyYWRlcyBncmFjZWZ1bGx5IHdoZW4gdGhlIGJ1bmRsZSBoYXMgbm8gaW5saW5lIHNvdXJjZSBtYXAgKGUuZy4gcHJvZHVjdGlvblxuICogYnVpbGRzLCB3aGVyZSBtYXBzIGFyZSBvZmYgYnkgZGVmYXVsdCk6IHRoZSBvcmlnaW5hbCBzdGFjayBpcyByZXR1cm5lZFxuICogdW5jaGFuZ2VkLiBBIGNoZWFwIGBmaWxlbmFtZWAgcHJlc2VuY2UgY2hlY2sgc2tpcHMgYWxsIHdvcmsgd2hlbiBubyBmcmFtZVxuICogcmVmZXJlbmNlcyB0aGUgd29ya2Zsb3cgZmlsZSwgYW5kIHBhcnNlZCBzb3VyY2UgbWFwcyBhcmUgbWVtb2l6ZWQgcGVyIGJ1bmRsZS5cbiAqXG4gKiBAcGFyYW0gc3RhY2sgLSBUaGUgZXJyb3Igc3RhY2sgdHJhY2UgdG8gcmVtYXBcbiAqIEBwYXJhbSBmaWxlbmFtZSAtIFRoZSB3b3JrZmxvdyBmaWxlbmFtZSB0byBtYXRjaCBpbiBzdGFjayBmcmFtZXNcbiAqIEBwYXJhbSB3b3JrZmxvd0NvZGUgLSBUaGUgd29ya2Zsb3cgYnVuZGxlIGNvZGUgY29udGFpbmluZyBpbmxpbmUgc291cmNlIG1hcHNcbiAqIEByZXR1cm5zIFRoZSByZW1hcHBlZCBzdGFjayB0cmFjZSB3aXRoIG9yaWdpbmFsIHNvdXJjZSBsb2NhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbWFwRXJyb3JTdGFjayhcbiAgc3RhY2s6IHN0cmluZyxcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgd29ya2Zsb3dDb2RlOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIC8vIE5vdGhpbmcgdG8gcmVtYXAgaWYgbm8gZnJhbWUgcmVmZXJlbmNlcyB0aGUgd29ya2Zsb3cgZmlsZS4gQXZvaWRzIHRvdWNoaW5nXG4gIC8vIHRoZSAobGFyZ2UpIGJ1bmRsZSBzdHJpbmcgZW50aXJlbHkgZm9yIGVycm9ycyB0aHJvd24gZWxzZXdoZXJlLlxuICBpZiAoIXN0YWNrLmluY2x1ZGVzKGZpbGVuYW1lKSkge1xuICAgIHJldHVybiBzdGFjaztcbiAgfVxuXG4gIGNvbnN0IHRyYWNlciA9IGdldFRyYWNlTWFwRm9yQ29kZSh3b3JrZmxvd0NvZGUpO1xuICBpZiAoIXRyYWNlcikge1xuICAgIHJldHVybiBzdGFjazsgLy8gTm8gc291cmNlIG1hcCBmb3VuZFxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBQYXJzZSBhbmQgcmVtYXAgZWFjaCBsaW5lIGluIHRoZSBzdGFjayB0cmFjZVxuICAgIGNvbnN0IGxpbmVzID0gc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IHJlbWFwcGVkTGluZXMgPSBsaW5lcy5tYXAoKGxpbmUpID0+IHtcbiAgICAgIC8vIE1hdGNoIHN0YWNrIGZyYW1lczogXCJhdCBmdW5jdGlvbk5hbWUgKGZpbGVuYW1lOmxpbmU6Y29sdW1uKVwiIG9yIFwiYXQgZmlsZW5hbWU6bGluZTpjb2x1bW5cIlxuICAgICAgY29uc3QgZnJhbWVNYXRjaCA9IGxpbmUubWF0Y2goXG4gICAgICAgIC9eXFxzKmF0XFxzKyg/OiguKz8pXFxzK1xcKCk/KC4rPyk6KFxcZCspOihcXGQrKVxcKT8kL1xuICAgICAgKTtcbiAgICAgIGlmICghZnJhbWVNYXRjaCkge1xuICAgICAgICByZXR1cm4gbGluZTsgLy8gTm90IGEgc3RhY2sgZnJhbWUsIHJldHVybiBhcy1pc1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbLCBmdW5jdGlvbk5hbWUsIGZpbGUsIGxpbmVTdHIsIGNvbFN0cl0gPSBmcmFtZU1hdGNoO1xuXG4gICAgICAvLyBPbmx5IHJlbWFwIGZyYW1lcyBmcm9tIG91ciB3b3JrZmxvdyBmaWxlXG4gICAgICBpZiAoIWZpbGUuaW5jbHVkZXMoZmlsZW5hbWUpKSB7XG4gICAgICAgIHJldHVybiBsaW5lO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsaW5lTnVtYmVyID0gcGFyc2VJbnQobGluZVN0ciwgMTApO1xuICAgICAgY29uc3QgY29sdW1uTnVtYmVyID0gcGFyc2VJbnQoY29sU3RyLCAxMCk7XG5cbiAgICAgIC8vIE1hcCB0byBvcmlnaW5hbCBzb3VyY2UgcG9zaXRpb25cbiAgICAgIGNvbnN0IG9yaWdpbmFsID0gb3JpZ2luYWxQb3NpdGlvbkZvcih0cmFjZXIsIHtcbiAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgY29sdW1uOiBjb2x1bW5OdW1iZXIsXG4gICAgICB9KTtcblxuICAgICAgaWYgKG9yaWdpbmFsLnNvdXJjZSAmJiBvcmlnaW5hbC5saW5lICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZ1bmMgPSBmdW5jdGlvbk5hbWUgfHwgb3JpZ2luYWwubmFtZSB8fCAnYW5vbnltb3VzJztcbiAgICAgICAgY29uc3QgY29sID0gb3JpZ2luYWwuY29sdW1uICE9PSBudWxsID8gb3JpZ2luYWwuY29sdW1uIDogY29sdW1uTnVtYmVyO1xuICAgICAgICByZXR1cm4gYCAgICBhdCAke2Z1bmN9ICgke29yaWdpbmFsLnNvdXJjZX06JHtvcmlnaW5hbC5saW5lfToke2NvbH0pYDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpbmU7IC8vIENvdWxkbid0IG1hcCwgcmV0dXJuIG9yaWdpbmFsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVtYXBwZWRMaW5lcy5qb2luKCdcXG4nKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWYgc291cmNlIG1hcCBwcm9jZXNzaW5nIGZhaWxzLCByZXR1cm4gb3JpZ2luYWwgc3RhY2tcbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cbn1cbiJdfQ==
@@ -1,13 +1,66 @@
1
1
  import { AsyncLocalStorage } from 'node:async_hooks';
2
2
  import type { CryptoKey } from '../encryption.js';
3
+ import type { FlushableStreamState } from '../flushable-stream.js';
3
4
  import type { WorkflowMetadata } from '../workflow/get-workflow-metadata.js';
4
5
  import type { StepMetadata } from './get-step-metadata.js';
6
+ /**
7
+ * Per-step cache entry for a `(runId, namespace)` writable stream.
8
+ *
9
+ * Holds the user-facing `WritableStream` and the shared `FlushableStreamState`
10
+ * driving the background pipe to the workflow server. Re-used so repeat calls
11
+ * to `getWritable()` within the same step return the same handle instead of
12
+ * spawning racing pipes — see https://github.com/vercel/workflow/issues/2058.
13
+ */
14
+ export interface CachedWritable {
15
+ writable: WritableStream<any>;
16
+ state: FlushableStreamState;
17
+ }
5
18
  export type StepContext = {
6
19
  stepMetadata: StepMetadata;
7
20
  workflowMetadata: WorkflowMetadata;
21
+ /** Deployment that owns the current workflow run, used for forwarded streams. */
22
+ workflowDeploymentId?: string;
8
23
  ops: Promise<void>[];
24
+ /**
25
+ * Operations that MUST be durably committed before the step's
26
+ * `step_completed`/`step_failed` event is written, because the workflow
27
+ * continuation triggered by that event depends on them.
28
+ *
29
+ * The canonical case is a step-initiated `AbortController.abort()`: the
30
+ * durable `hook_received` event records the cancellation in the workflow's
31
+ * event log. If it is flushed in the background (like `ops`), the workflow
32
+ * continuation enqueued by `step_completed` can run — and advance past the
33
+ * abort, dispatching a later step with a stale, non-aborted `signal` — before
34
+ * the `hook_received` event exists. Awaiting these inline before completion
35
+ * guarantees the abort is ordered ahead of any continuation that observes the
36
+ * step's result. Unlike these, `ops` holds best-effort real-time stream
37
+ * writes that should fire ASAP and are intentionally left in the background.
38
+ *
39
+ * Contract: producers MUST NOT push a promise that can reject — these are
40
+ * awaited only to enforce ordering, never to surface an outcome. A rejection
41
+ * here would propagate as an infra error (queue re-delivery), not the
42
+ * user-code failure path, so each producer swallows its own errors (see
43
+ * `reviveAbortController` in serialization.ts). The await sites also
44
+ * defensively `.catch()` so ordering is all this bucket can ever enforce.
45
+ *
46
+ * Required (not optional) so a new step-context construction site that
47
+ * forgets to wire it fails at compile time, rather than silently regressing
48
+ * the ordering guarantee back to background-flush behavior.
49
+ */
50
+ preCompletionOps: Promise<void>[];
9
51
  closureVars?: Record<string, any>;
10
52
  encryptionKey?: CryptoKey;
53
+ writables?: Map<string, CachedWritable>;
54
+ /**
55
+ * Turbo mode only: a promise that resolves once the backgrounded
56
+ * `run_started` has landed (the run exists). Set when the step body runs
57
+ * optimistically — before `run_started`/`step_started` are confirmed — so a
58
+ * direct step-body world write (e.g. `setAttributes`, which
59
+ * resolves to a host-side `attr_set` create) can gate on it and never race
60
+ * ahead of the run's creation. `undefined` outside turbo and on the await
61
+ * path, where `run_started` was already durable before the body ran.
62
+ */
63
+ runReadyBarrier?: Promise<unknown>;
11
64
  };
12
65
  export declare const contextStorage: AsyncLocalStorage<StepContext>;
13
66
  //# sourceMappingURL=context-storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-storage.d.ts","sourceRoot":"","sources":["../../src/step/context-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B,CAAC;AAoBF,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,WAAW,CAKjB,CAAC"}
1
+ {"version":3,"file":"context-storage.d.ts","sourceRoot":"","sources":["../../src/step/context-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC9B,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,iFAAiF;IACjF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,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,SAAS,CAAC;IAC1B,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,CAKjB,CAAC"}
@@ -19,4 +19,4 @@ const CONTEXT_STORAGE_SYMBOL = Symbol.for('WORKFLOW_STEP_CONTEXT_STORAGE');
19
19
  export const contextStorage = globalThis[CONTEXT_STORAGE_SYMBOL] ??
20
20
  (globalThis[CONTEXT_STORAGE_SYMBOL] =
21
21
  new AsyncLocalStorage());
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvY29udGV4dC1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBYXJEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FDdkIsVUFBa0IsQ0FBQyxzQkFBc0IsQ0FFN0I7SUFDZCxDQUFFLFVBQWtCLENBQUMsc0JBQXNCLENBQUM7UUFDMUMsSUFBSSxpQkFBaUIsRUFBZSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY0xvY2FsU3RvcmFnZSB9IGZyb20gJ25vZGU6YXN5bmNfaG9va3MnO1xuaW1wb3J0IHR5cGUgeyBDcnlwdG9LZXkgfSBmcm9tICcuLi9lbmNyeXB0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dNZXRhZGF0YSB9IGZyb20gJy4uL3dvcmtmbG93L2dldC13b3JrZmxvdy1tZXRhZGF0YS5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0ZXBNZXRhZGF0YSB9IGZyb20gJy4vZ2V0LXN0ZXAtbWV0YWRhdGEuanMnO1xuXG5leHBvcnQgdHlwZSBTdGVwQ29udGV4dCA9IHtcbiAgc3RlcE1ldGFkYXRhOiBTdGVwTWV0YWRhdGE7XG4gIHdvcmtmbG93TWV0YWRhdGE6IFdvcmtmbG93TWV0YWRhdGE7XG4gIG9wczogUHJvbWlzZTx2b2lkPltdO1xuICBjbG9zdXJlVmFycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVuY3J5cHRpb25LZXk/OiBDcnlwdG9LZXk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3Mtd2lkZSBzaW5nbGV0b24gQXN5bmNMb2NhbFN0b3JhZ2UgZm9yIHN0ZXAgZXhlY3V0aW9uIGNvbnRleHQuXG4gKlxuICogVXNlcyBgU3ltYm9sLmZvcigpYCBvbiBnbG9iYWxUaGlzIHRvIGd1YXJhbnRlZSBhIHNpbmdsZSBpbnN0YW5jZSBldmVuIHdoZW5cbiAqIGJ1bmRsZXJzIChlLmcuIFZlcmNlbCdzIHByb2R1Y3Rpb24gYnVuZGxlcikgY3JlYXRlIG11bHRpcGxlIGNvcGllcyBvZiB0aGlzXG4gKiBtb2R1bGUuIFdpdGhvdXQgdGhpcywgYGNvbnRleHRTdG9yYWdlLnJ1bigpYCBpbiB0aGUgc3RlcCBoYW5kbGVyIGFuZFxuICogYGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKClgIGluIHVzZXIgY29kZSAodmlhIGdldFdvcmtmbG93TWV0YWRhdGEgL1xuICogZ2V0U3RlcE1ldGFkYXRhKSBjYW4gcmVmZXJlbmNlIGRpZmZlcmVudCBBc3luY0xvY2FsU3RvcmFnZSBpbnN0YW5jZXMsXG4gKiBjYXVzaW5nIHRoZSBzdG9yZSB0byBhcHBlYXIgZW1wdHkuXG4gKlxuICogTm90ZSB0aGF0IHdlIHdlcmUgdW5hYmxlIHRvIHJlcHJvZHVjZSB0aGlzIGlzc3VlLiBUaGlzIGlzIGEgZml4IGZvciB0aGUgb25seSBzeW50aGV0aWMgd2F5XG4gKiB3YXkgaW4gd2hpY2ggd2UgY291bGQgZ2V0IHRoZSBidWlsZGVyIHRvIGJyZWFrIHdpdGggdGhlIHJlcG9ydGVkIGVycm9yIG1lc3NhZ2UsIGFuZFxuICogc2VydmVzIGFzIGRlZmVuc2UtaW4tZGVwdGgsIHNpbmNlIHRoZSBjaGFuZ2UgaXMgb3RoZXJ3aXNlIHNhZmUuXG4gKlxuICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3dvcmtmbG93L2lzc3Vlcy8xNTc3XG4gKi9cbmNvbnN0IENPTlRFWFRfU1RPUkFHRV9TWU1CT0wgPSBTeW1ib2wuZm9yKCdXT1JLRkxPV19TVEVQX0NPTlRFWFRfU1RPUkFHRScpO1xuXG5leHBvcnQgY29uc3QgY29udGV4dFN0b3JhZ2U6IEFzeW5jTG9jYWxTdG9yYWdlPFN0ZXBDb250ZXh0PiA9XG4gICgoZ2xvYmFsVGhpcyBhcyBhbnkpW0NPTlRFWFRfU1RPUkFHRV9TWU1CT0xdIGFzXG4gICAgfCBBc3luY0xvY2FsU3RvcmFnZTxTdGVwQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZCkgPz9cbiAgKChnbG9iYWxUaGlzIGFzIGFueSlbQ09OVEVYVF9TVE9SQUdFX1NZTUJPTF0gPVxuICAgIG5ldyBBc3luY0xvY2FsU3RvcmFnZTxTdGVwQ29udGV4dD4oKSk7XG4iXX0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvY29udGV4dC1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBbUVyRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQUUzRSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQ3ZCLFVBQWtCLENBQUMsc0JBQXNCLENBRTdCO0lBQ2QsQ0FBRSxVQUFrQixDQUFDLHNCQUFzQixDQUFDO1FBQzFDLElBQUksaUJBQWlCLEVBQWUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tICdub2RlOmFzeW5jX2hvb2tzJztcbmltcG9ydCB0eXBlIHsgQ3J5cHRvS2V5IH0gZnJvbSAnLi4vZW5jcnlwdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsdXNoYWJsZVN0cmVhbVN0YXRlIH0gZnJvbSAnLi4vZmx1c2hhYmxlLXN0cmVhbS5qcyc7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93TWV0YWRhdGEgfSBmcm9tICcuLi93b3JrZmxvdy9nZXQtd29ya2Zsb3ctbWV0YWRhdGEuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGVwTWV0YWRhdGEgfSBmcm9tICcuL2dldC1zdGVwLW1ldGFkYXRhLmpzJztcblxuLyoqXG4gKiBQZXItc3RlcCBjYWNoZSBlbnRyeSBmb3IgYSBgKHJ1bklkLCBuYW1lc3BhY2UpYCB3cml0YWJsZSBzdHJlYW0uXG4gKlxuICogSG9sZHMgdGhlIHVzZXItZmFjaW5nIGBXcml0YWJsZVN0cmVhbWAgYW5kIHRoZSBzaGFyZWQgYEZsdXNoYWJsZVN0cmVhbVN0YXRlYFxuICogZHJpdmluZyB0aGUgYmFja2dyb3VuZCBwaXBlIHRvIHRoZSB3b3JrZmxvdyBzZXJ2ZXIuIFJlLXVzZWQgc28gcmVwZWF0IGNhbGxzXG4gKiB0byBgZ2V0V3JpdGFibGUoKWAgd2l0aGluIHRoZSBzYW1lIHN0ZXAgcmV0dXJuIHRoZSBzYW1lIGhhbmRsZSBpbnN0ZWFkIG9mXG4gKiBzcGF3bmluZyByYWNpbmcgcGlwZXMg4oCUIHNlZSBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3dvcmtmbG93L2lzc3Vlcy8yMDU4LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlZFdyaXRhYmxlIHtcbiAgd3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtPGFueT47XG4gIHN0YXRlOiBGbHVzaGFibGVTdHJlYW1TdGF0ZTtcbn1cblxuZXhwb3J0IHR5cGUgU3RlcENvbnRleHQgPSB7XG4gIHN0ZXBNZXRhZGF0YTogU3RlcE1ldGFkYXRhO1xuICB3b3JrZmxvd01ldGFkYXRhOiBXb3JrZmxvd01ldGFkYXRhO1xuICAvKiogRGVwbG95bWVudCB0aGF0IG93bnMgdGhlIGN1cnJlbnQgd29ya2Zsb3cgcnVuLCB1c2VkIGZvciBmb3J3YXJkZWQgc3RyZWFtcy4gKi9cbiAgd29ya2Zsb3dEZXBsb3ltZW50SWQ/OiBzdHJpbmc7XG4gIG9wczogUHJvbWlzZTx2b2lkPltdO1xuICAvKipcbiAgICogT3BlcmF0aW9ucyB0aGF0IE1VU1QgYmUgZHVyYWJseSBjb21taXR0ZWQgYmVmb3JlIHRoZSBzdGVwJ3NcbiAgICogYHN0ZXBfY29tcGxldGVkYC9gc3RlcF9mYWlsZWRgIGV2ZW50IGlzIHdyaXR0ZW4sIGJlY2F1c2UgdGhlIHdvcmtmbG93XG4gICAqIGNvbnRpbnVhdGlvbiB0cmlnZ2VyZWQgYnkgdGhhdCBldmVudCBkZXBlbmRzIG9uIHRoZW0uXG4gICAqXG4gICAqIFRoZSBjYW5vbmljYWwgY2FzZSBpcyBhIHN0ZXAtaW5pdGlhdGVkIGBBYm9ydENvbnRyb2xsZXIuYWJvcnQoKWA6IHRoZVxuICAgKiBkdXJhYmxlIGBob29rX3JlY2VpdmVkYCBldmVudCByZWNvcmRzIHRoZSBjYW5jZWxsYXRpb24gaW4gdGhlIHdvcmtmbG93J3NcbiAgICogZXZlbnQgbG9nLiBJZiBpdCBpcyBmbHVzaGVkIGluIHRoZSBiYWNrZ3JvdW5kIChsaWtlIGBvcHNgKSwgdGhlIHdvcmtmbG93XG4gICAqIGNvbnRpbnVhdGlvbiBlbnF1ZXVlZCBieSBgc3RlcF9jb21wbGV0ZWRgIGNhbiBydW4g4oCUIGFuZCBhZHZhbmNlIHBhc3QgdGhlXG4gICAqIGFib3J0LCBkaXNwYXRjaGluZyBhIGxhdGVyIHN0ZXAgd2l0aCBhIHN0YWxlLCBub24tYWJvcnRlZCBgc2lnbmFsYCDigJQgYmVmb3JlXG4gICAqIHRoZSBgaG9va19yZWNlaXZlZGAgZXZlbnQgZXhpc3RzLiBBd2FpdGluZyB0aGVzZSBpbmxpbmUgYmVmb3JlIGNvbXBsZXRpb25cbiAgICogZ3VhcmFudGVlcyB0aGUgYWJvcnQgaXMgb3JkZXJlZCBhaGVhZCBvZiBhbnkgY29udGludWF0aW9uIHRoYXQgb2JzZXJ2ZXMgdGhlXG4gICAqIHN0ZXAncyByZXN1bHQuIFVubGlrZSB0aGVzZSwgYG9wc2AgaG9sZHMgYmVzdC1lZmZvcnQgcmVhbC10aW1lIHN0cmVhbVxuICAgKiB3cml0ZXMgdGhhdCBzaG91bGQgZmlyZSBBU0FQIGFuZCBhcmUgaW50ZW50aW9uYWxseSBsZWZ0IGluIHRoZSBiYWNrZ3JvdW5kLlxuICAgKlxuICAgKiBDb250cmFjdDogcHJvZHVjZXJzIE1VU1QgTk9UIHB1c2ggYSBwcm9taXNlIHRoYXQgY2FuIHJlamVjdCDigJQgdGhlc2UgYXJlXG4gICAqIGF3YWl0ZWQgb25seSB0byBlbmZvcmNlIG9yZGVyaW5nLCBuZXZlciB0byBzdXJmYWNlIGFuIG91dGNvbWUuIEEgcmVqZWN0aW9uXG4gICAqIGhlcmUgd291bGQgcHJvcGFnYXRlIGFzIGFuIGluZnJhIGVycm9yIChxdWV1ZSByZS1kZWxpdmVyeSksIG5vdCB0aGVcbiAgICogdXNlci1jb2RlIGZhaWx1cmUgcGF0aCwgc28gZWFjaCBwcm9kdWNlciBzd2FsbG93cyBpdHMgb3duIGVycm9ycyAoc2VlXG4gICAqIGByZXZpdmVBYm9ydENvbnRyb2xsZXJgIGluIHNlcmlhbGl6YXRpb24udHMpLiBUaGUgYXdhaXQgc2l0ZXMgYWxzb1xuICAgKiBkZWZlbnNpdmVseSBgLmNhdGNoKClgIHNvIG9yZGVyaW5nIGlzIGFsbCB0aGlzIGJ1Y2tldCBjYW4gZXZlciBlbmZvcmNlLlxuICAgKlxuICAgKiBSZXF1aXJlZCAobm90IG9wdGlvbmFsKSBzbyBhIG5ldyBzdGVwLWNvbnRleHQgY29uc3RydWN0aW9uIHNpdGUgdGhhdFxuICAgKiBmb3JnZXRzIHRvIHdpcmUgaXQgZmFpbHMgYXQgY29tcGlsZSB0aW1lLCByYXRoZXIgdGhhbiBzaWxlbnRseSByZWdyZXNzaW5nXG4gICAqIHRoZSBvcmRlcmluZyBndWFyYW50ZWUgYmFjayB0byBiYWNrZ3JvdW5kLWZsdXNoIGJlaGF2aW9yLlxuICAgKi9cbiAgcHJlQ29tcGxldGlvbk9wczogUHJvbWlzZTx2b2lkPltdO1xuICBjbG9zdXJlVmFycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVuY3J5cHRpb25LZXk/OiBDcnlwdG9LZXk7XG4gIHdyaXRhYmxlcz86IE1hcDxzdHJpbmcsIENhY2hlZFdyaXRhYmxlPjtcbiAgLyoqXG4gICAqIFR1cmJvIG1vZGUgb25seTogYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgYmFja2dyb3VuZGVkXG4gICAqIGBydW5fc3RhcnRlZGAgaGFzIGxhbmRlZCAodGhlIHJ1biBleGlzdHMpLiBTZXQgd2hlbiB0aGUgc3RlcCBib2R5IHJ1bnNcbiAgICogb3B0aW1pc3RpY2FsbHkg4oCUIGJlZm9yZSBgcnVuX3N0YXJ0ZWRgL2BzdGVwX3N0YXJ0ZWRgIGFyZSBjb25maXJtZWQg4oCUIHNvIGFcbiAgICogZGlyZWN0IHN0ZXAtYm9keSB3b3JsZCB3cml0ZSAoZS5nLiBgc2V0QXR0cmlidXRlc2AsIHdoaWNoXG4gICAqIHJlc29sdmVzIHRvIGEgaG9zdC1zaWRlIGBhdHRyX3NldGAgY3JlYXRlKSBjYW4gZ2F0ZSBvbiBpdCBhbmQgbmV2ZXIgcmFjZVxuICAgKiBhaGVhZCBvZiB0aGUgcnVuJ3MgY3JlYXRpb24uIGB1bmRlZmluZWRgIG91dHNpZGUgdHVyYm8gYW5kIG9uIHRoZSBhd2FpdFxuICAgKiBwYXRoLCB3aGVyZSBgcnVuX3N0YXJ0ZWRgIHdhcyBhbHJlYWR5IGR1cmFibGUgYmVmb3JlIHRoZSBib2R5IHJhbi5cbiAgICovXG4gIHJ1blJlYWR5QmFycmllcj86IFByb21pc2U8dW5rbm93bj47XG59O1xuXG4vKipcbiAqIFByb2Nlc3Mtd2lkZSBzaW5nbGV0b24gQXN5bmNMb2NhbFN0b3JhZ2UgZm9yIHN0ZXAgZXhlY3V0aW9uIGNvbnRleHQuXG4gKlxuICogVXNlcyBgU3ltYm9sLmZvcigpYCBvbiBnbG9iYWxUaGlzIHRvIGd1YXJhbnRlZSBhIHNpbmdsZSBpbnN0YW5jZSBldmVuIHdoZW5cbiAqIGJ1bmRsZXJzIChlLmcuIFZlcmNlbCdzIHByb2R1Y3Rpb24gYnVuZGxlcikgY3JlYXRlIG11bHRpcGxlIGNvcGllcyBvZiB0aGlzXG4gKiBtb2R1bGUuIFdpdGhvdXQgdGhpcywgYGNvbnRleHRTdG9yYWdlLnJ1bigpYCBpbiB0aGUgc3RlcCBoYW5kbGVyIGFuZFxuICogYGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKClgIGluIHVzZXIgY29kZSAodmlhIGdldFdvcmtmbG93TWV0YWRhdGEgL1xuICogZ2V0U3RlcE1ldGFkYXRhKSBjYW4gcmVmZXJlbmNlIGRpZmZlcmVudCBBc3luY0xvY2FsU3RvcmFnZSBpbnN0YW5jZXMsXG4gKiBjYXVzaW5nIHRoZSBzdG9yZSB0byBhcHBlYXIgZW1wdHkuXG4gKlxuICogTm90ZSB0aGF0IHdlIHdlcmUgdW5hYmxlIHRvIHJlcHJvZHVjZSB0aGlzIGlzc3VlLiBUaGlzIGlzIGEgZml4IGZvciB0aGUgb25seSBzeW50aGV0aWMgd2F5XG4gKiB3YXkgaW4gd2hpY2ggd2UgY291bGQgZ2V0IHRoZSBidWlsZGVyIHRvIGJyZWFrIHdpdGggdGhlIHJlcG9ydGVkIGVycm9yIG1lc3NhZ2UsIGFuZFxuICogc2VydmVzIGFzIGRlZmVuc2UtaW4tZGVwdGgsIHNpbmNlIHRoZSBjaGFuZ2UgaXMgb3RoZXJ3aXNlIHNhZmUuXG4gKlxuICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3dvcmtmbG93L2lzc3Vlcy8xNTc3XG4gKi9cbmNvbnN0IENPTlRFWFRfU1RPUkFHRV9TWU1CT0wgPSBTeW1ib2wuZm9yKCdXT1JLRkxPV19TVEVQX0NPTlRFWFRfU1RPUkFHRScpO1xuXG5leHBvcnQgY29uc3QgY29udGV4dFN0b3JhZ2U6IEFzeW5jTG9jYWxTdG9yYWdlPFN0ZXBDb250ZXh0PiA9XG4gICgoZ2xvYmFsVGhpcyBhcyBhbnkpW0NPTlRFWFRfU1RPUkFHRV9TWU1CT0xdIGFzXG4gICAgfCBBc3luY0xvY2FsU3RvcmFnZTxTdGVwQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZCkgPz9cbiAgKChnbG9iYWxUaGlzIGFzIGFueSlbQ09OVEVYVF9TVE9SQUdFX1NZTUJPTF0gPVxuICAgIG5ldyBBc3luY0xvY2FsU3RvcmFnZTxTdGVwQ29udGV4dD4oKSk7XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"get-closure-vars.d.ts","sourceRoot":"","sources":["../../src/step/get-closure-vars.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAQ9D"}
1
+ {"version":3,"file":"get-closure-vars.d.ts","sourceRoot":"","sources":["../../src/step/get-closure-vars.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAQ9D"}
@@ -1,3 +1,4 @@
1
+ import { WorkflowRuntimeError } from '@workflow/errors';
1
2
  import { contextStorage } from './context-storage.js';
2
3
  /**
3
4
  * Returns the closure variables for the current step function.
@@ -9,8 +10,8 @@ import { contextStorage } from './context-storage.js';
9
10
  export function __private_getClosureVars() {
10
11
  const ctx = contextStorage.getStore();
11
12
  if (!ctx) {
12
- throw new Error('Closure variables can only be accessed inside a step function');
13
+ throw new WorkflowRuntimeError('Closure variables can only be accessed inside a step function');
13
14
  }
14
15
  return ctx.closureVars || {};
15
16
  }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNsb3N1cmUtdmFycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGVwL2dldC1jbG9zdXJlLXZhcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXREOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx3QkFBd0I7SUFDdEMsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IsK0RBQStELENBQ2hFLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29udGV4dFN0b3JhZ2UgfSBmcm9tICcuL2NvbnRleHQtc3RvcmFnZS5qcyc7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2xvc3VyZSB2YXJpYWJsZXMgZm9yIHRoZSBjdXJyZW50IHN0ZXAgZnVuY3Rpb24uXG4gKiBUaGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIFNXQyB0cmFuc2Zvcm0gdG8gYWNjZXNzXG4gKiB2YXJpYWJsZXMgZnJvbSB0aGUgcGFyZW50IHdvcmtmbG93IHNjb3BlLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gX19wcml2YXRlX2dldENsb3N1cmVWYXJzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCBjdHggPSBjb250ZXh0U3RvcmFnZS5nZXRTdG9yZSgpO1xuICBpZiAoIWN0eCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdDbG9zdXJlIHZhcmlhYmxlcyBjYW4gb25seSBiZSBhY2Nlc3NlZCBpbnNpZGUgYSBzdGVwIGZ1bmN0aW9uJ1xuICAgICk7XG4gIH1cbiAgcmV0dXJuIGN0eC5jbG9zdXJlVmFycyB8fCB7fTtcbn1cbiJdfQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNsb3N1cmUtdmFycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGVwL2dldC1jbG9zdXJlLXZhcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXREOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx3QkFBd0I7SUFDdEMsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE1BQU0sSUFBSSxvQkFBb0IsQ0FDNUIsK0RBQStELENBQ2hFLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV29ya2Zsb3dSdW50aW1lRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IGNvbnRleHRTdG9yYWdlIH0gZnJvbSAnLi9jb250ZXh0LXN0b3JhZ2UuanMnO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNsb3N1cmUgdmFyaWFibGVzIGZvciB0aGUgY3VycmVudCBzdGVwIGZ1bmN0aW9uLlxuICogVGhpcyBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBTV0MgdHJhbnNmb3JtIHRvIGFjY2Vzc1xuICogdmFyaWFibGVzIGZyb20gdGhlIHBhcmVudCB3b3JrZmxvdyBzY29wZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fcHJpdmF0ZV9nZXRDbG9zdXJlVmFycygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgY29uc3QgY3R4ID0gY29udGV4dFN0b3JhZ2UuZ2V0U3RvcmUoKTtcbiAgaWYgKCFjdHgpIHtcbiAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAnQ2xvc3VyZSB2YXJpYWJsZXMgY2FuIG9ubHkgYmUgYWNjZXNzZWQgaW5zaWRlIGEgc3RlcCBmdW5jdGlvbidcbiAgICApO1xuICB9XG4gIHJldHVybiBjdHguY2xvc3VyZVZhcnMgfHwge307XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"get-step-metadata.d.ts","sourceRoot":"","sources":["../../src/step/get-step-metadata.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;OASG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;;;OAOG;IACH,aAAa,EAAE,IAAI,CAAC;IAEpB;;;;;;;OAOG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAQ9C"}
1
+ {"version":3,"file":"get-step-metadata.d.ts","sourceRoot":"","sources":["../../src/step/get-step-metadata.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;OASG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;;;OAOG;IACH,aAAa,EAAE,IAAI,CAAC;IAEpB;;;;;;;OAOG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAU9C"}
@@ -1,3 +1,4 @@
1
+ import { throwNotInStepContext } from '../context-errors.js';
1
2
  import { contextStorage } from './context-storage.js';
2
3
  /**
3
4
  * Returns metadata available in the current step function.
@@ -7,8 +8,8 @@ import { contextStorage } from './context-storage.js';
7
8
  export function getStepMetadata() {
8
9
  const ctx = contextStorage.getStore();
9
10
  if (!ctx) {
10
- throw new Error('`getStepMetadata()` can only be called inside a step function');
11
+ throwNotInStepContext('getStepMetadata()', 'https://workflow-sdk.dev/docs/api-reference/workflow/get-step-metadata', getStepMetadata);
11
12
  }
12
13
  return ctx.stepMetadata;
13
14
  }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXN0ZXAtbWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RlcC9nZXQtc3RlcC1tZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUF5Q3REOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZTtJQUM3QixNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsTUFBTSxJQUFJLEtBQUssQ0FDYiwrREFBK0QsQ0FDaEUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxZQUFZLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnRleHRTdG9yYWdlIH0gZnJvbSAnLi9jb250ZXh0LXN0b3JhZ2UuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc3RlcC5cbiAgICovXG4gIHN0ZXBOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBzdGVwLlxuICAgKiBVc2VmdWwgdG8gdXNlIGFzIHBhcnQgb2YgYW4gaWRlbXBvdGVuY3kga2V5IGZvciBjcml0aWNhbFxuICAgKiBvcGVyYXRpb25zIHRoYXQgbXVzdCBvbmx5IGJlIGV4ZWN1dGVkIG9uY2UgKHN1Y2ggYXMgY2hhcmdpbmcgYSBjdXN0b21lcikuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqXG4gICAqIE9ubHkgYXZhaWxhYmxlIGluc2lkZSBhIHN0ZXAgZnVuY3Rpb24uXG4gICAqIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IGluIGEgd29ya2Zsb3cgZnVuY3Rpb24gd2lsbCB0aHJvdyBhbiBlcnJvci5cbiAgICovXG4gIHN0ZXBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgd2hlbiB0aGUgY3VycmVudCBzdGVwIHN0YXJ0ZWQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqXG4gICAqIE9ubHkgYXZhaWxhYmxlIGluc2lkZSBhIHN0ZXAgZnVuY3Rpb24uXG4gICAqIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IGluIGEgd29ya2Zsb3cgZnVuY3Rpb24gd2lsbCB0aHJvdyBhbiBlcnJvci5cbiAgICovXG4gIHN0ZXBTdGFydGVkQXQ6IERhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGN1cnJlbnQgc3RlcCBoYXMgYmVlbiBleGVjdXRlZC4gVGhpcyB3aWxsIGluY3JlYXNlIHdpdGggZWFjaCByZXRyeS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICpcbiAgICogT25seSBhdmFpbGFibGUgaW5zaWRlIGEgc3RlcCBmdW5jdGlvbi5cbiAgICogQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgaW4gYSB3b3JrZmxvdyBmdW5jdGlvbiB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgKi9cbiAgYXR0ZW1wdDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJldHVybnMgbWV0YWRhdGEgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IHN0ZXAgZnVuY3Rpb24uXG4gKiBJdCB1c2VzIGBBc3luY0xvY2FsU3RvcmFnZWAgdG8gc3RvcmUgdGhlIGNvbnRleHQgYW5kXG4gKiByZXRyaWV2ZSBpdCBpbiB0aGUgc3RlcCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0ZXBNZXRhZGF0YSgpOiBTdGVwTWV0YWRhdGEge1xuICBjb25zdCBjdHggPSBjb250ZXh0U3RvcmFnZS5nZXRTdG9yZSgpO1xuICBpZiAoIWN0eCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdgZ2V0U3RlcE1ldGFkYXRhKClgIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgYSBzdGVwIGZ1bmN0aW9uJ1xuICAgICk7XG4gIH1cbiAgcmV0dXJuIGN0eC5zdGVwTWV0YWRhdGE7XG59XG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXN0ZXAtbWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RlcC9nZXQtc3RlcC1tZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUF5Q3REOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZTtJQUM3QixNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QscUJBQXFCLENBQ25CLG1CQUFtQixFQUNuQix3RUFBd0UsRUFDeEUsZUFBZSxDQUNoQixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLFlBQVksQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdGhyb3dOb3RJblN0ZXBDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC1lcnJvcnMuanMnO1xuaW1wb3J0IHsgY29udGV4dFN0b3JhZ2UgfSBmcm9tICcuL2NvbnRleHQtc3RvcmFnZS5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcE1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdGVwLlxuICAgKi9cbiAgc3RlcE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIHN0ZXAuXG4gICAqIFVzZWZ1bCB0byB1c2UgYXMgcGFydCBvZiBhbiBpZGVtcG90ZW5jeSBrZXkgZm9yIGNyaXRpY2FsXG4gICAqIG9wZXJhdGlvbnMgdGhhdCBtdXN0IG9ubHkgYmUgZXhlY3V0ZWQgb25jZSAoc3VjaCBhcyBjaGFyZ2luZyBhIGN1c3RvbWVyKS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICpcbiAgICogT25seSBhdmFpbGFibGUgaW5zaWRlIGEgc3RlcCBmdW5jdGlvbi5cbiAgICogQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgaW4gYSB3b3JrZmxvdyBmdW5jdGlvbiB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgKi9cbiAgc3RlcElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHRoZSBjdXJyZW50IHN0ZXAgc3RhcnRlZC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICpcbiAgICogT25seSBhdmFpbGFibGUgaW5zaWRlIGEgc3RlcCBmdW5jdGlvbi5cbiAgICogQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgaW4gYSB3b3JrZmxvdyBmdW5jdGlvbiB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgKi9cbiAgc3RlcFN0YXJ0ZWRBdDogRGF0ZTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY3VycmVudCBzdGVwIGhhcyBiZWVuIGV4ZWN1dGVkLiBUaGlzIHdpbGwgaW5jcmVhc2Ugd2l0aCBlYWNoIHJldHJ5LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKlxuICAgKiBPbmx5IGF2YWlsYWJsZSBpbnNpZGUgYSBzdGVwIGZ1bmN0aW9uLlxuICAgKiBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBpbiBhIHdvcmtmbG93IGZ1bmN0aW9uIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAqL1xuICBhdHRlbXB0OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmV0dXJucyBtZXRhZGF0YSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgc3RlcCBmdW5jdGlvbi5cbiAqIEl0IHVzZXMgYEFzeW5jTG9jYWxTdG9yYWdlYCB0byBzdG9yZSB0aGUgY29udGV4dCBhbmRcbiAqIHJldHJpZXZlIGl0IGluIHRoZSBzdGVwIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RlcE1ldGFkYXRhKCk6IFN0ZXBNZXRhZGF0YSB7XG4gIGNvbnN0IGN0eCA9IGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKCk7XG4gIGlmICghY3R4KSB7XG4gICAgdGhyb3dOb3RJblN0ZXBDb250ZXh0KFxuICAgICAgJ2dldFN0ZXBNZXRhZGF0YSgpJyxcbiAgICAgICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9hcGktcmVmZXJlbmNlL3dvcmtmbG93L2dldC1zdGVwLW1ldGFkYXRhJyxcbiAgICAgIGdldFN0ZXBNZXRhZGF0YVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGN0eC5zdGVwTWV0YWRhdGE7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"get-workflow-metadata.d.ts","sourceRoot":"","sources":["../../src/step/get-workflow-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAG7E,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAQtD"}
1
+ {"version":3,"file":"get-workflow-metadata.d.ts","sourceRoot":"","sources":["../../src/step/get-workflow-metadata.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAG7E,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAUtD"}
@@ -1,3 +1,4 @@
1
+ import { throwNotInWorkflowOrStepContext } from '../context-errors.js';
1
2
  import { contextStorage } from './context-storage.js';
2
3
  /**
3
4
  * Returns metadata available in the current workflow run inside a step function.
@@ -5,8 +6,8 @@ import { contextStorage } from './context-storage.js';
5
6
  export function getWorkflowMetadata() {
6
7
  const ctx = contextStorage.getStore();
7
8
  if (!ctx) {
8
- throw new Error('`getWorkflowMetadata()` can only be called inside a workflow or step function');
9
+ throwNotInWorkflowOrStepContext('getWorkflowMetadata()', 'https://workflow-sdk.dev/docs/api-reference/workflow/get-workflow-metadata', getWorkflowMetadata);
9
10
  }
10
11
  return ctx.workflowMetadata;
11
12
  }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXdvcmtmbG93LW1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvZ2V0LXdvcmtmbG93LW1ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUl0RDs7R0FFRztBQUNILE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IsK0VBQStFLENBQ2hGLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgV29ya2Zsb3dNZXRhZGF0YSB9IGZyb20gJy4uL3dvcmtmbG93L2dldC13b3JrZmxvdy1tZXRhZGF0YS5qcyc7XG5pbXBvcnQgeyBjb250ZXh0U3RvcmFnZSB9IGZyb20gJy4vY29udGV4dC1zdG9yYWdlLmpzJztcblxuZXhwb3J0IHR5cGUgeyBXb3JrZmxvd01ldGFkYXRhIH07XG5cbi8qKlxuICogUmV0dXJucyBtZXRhZGF0YSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgd29ya2Zsb3cgcnVuIGluc2lkZSBhIHN0ZXAgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3JrZmxvd01ldGFkYXRhKCk6IFdvcmtmbG93TWV0YWRhdGEge1xuICBjb25zdCBjdHggPSBjb250ZXh0U3RvcmFnZS5nZXRTdG9yZSgpO1xuICBpZiAoIWN0eCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdgZ2V0V29ya2Zsb3dNZXRhZGF0YSgpYCBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIGEgd29ya2Zsb3cgb3Igc3RlcCBmdW5jdGlvbidcbiAgICApO1xuICB9XG4gIHJldHVybiBjdHgud29ya2Zsb3dNZXRhZGF0YTtcbn1cbiJdfQ==
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXdvcmtmbG93LW1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvZ2V0LXdvcmtmbG93LW1ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUl0RDs7R0FFRztBQUNILE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULCtCQUErQixDQUM3Qix1QkFBdUIsRUFDdkIsNEVBQTRFLEVBQzVFLG1CQUFtQixDQUNwQixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLGdCQUFnQixDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0aHJvd05vdEluV29ya2Zsb3dPclN0ZXBDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC1lcnJvcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBXb3JrZmxvd01ldGFkYXRhIH0gZnJvbSAnLi4vd29ya2Zsb3cvZ2V0LXdvcmtmbG93LW1ldGFkYXRhLmpzJztcbmltcG9ydCB7IGNvbnRleHRTdG9yYWdlIH0gZnJvbSAnLi9jb250ZXh0LXN0b3JhZ2UuanMnO1xuXG5leHBvcnQgdHlwZSB7IFdvcmtmbG93TWV0YWRhdGEgfTtcblxuLyoqXG4gKiBSZXR1cm5zIG1ldGFkYXRhIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCB3b3JrZmxvdyBydW4gaW5zaWRlIGEgc3RlcCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtmbG93TWV0YWRhdGEoKTogV29ya2Zsb3dNZXRhZGF0YSB7XG4gIGNvbnN0IGN0eCA9IGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKCk7XG4gIGlmICghY3R4KSB7XG4gICAgdGhyb3dOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dChcbiAgICAgICdnZXRXb3JrZmxvd01ldGFkYXRhKCknLFxuICAgICAgJ2h0dHBzOi8vd29ya2Zsb3ctc2RrLmRldi9kb2NzL2FwaS1yZWZlcmVuY2Uvd29ya2Zsb3cvZ2V0LXdvcmtmbG93LW1ldGFkYXRhJyxcbiAgICAgIGdldFdvcmtmbG93TWV0YWRhdGFcbiAgICApO1xuICB9XG4gIHJldHVybiBjdHgud29ya2Zsb3dNZXRhZGF0YTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"writable-stream.d.ts","sourceRoot":"","sources":["../../src/step/writable-stream.ts"],"names":[],"mappings":"AAaA;;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,CAkCnB"}
1
+ {"version":3,"file":"writable-stream.d.ts","sourceRoot":"","sources":["../../src/step/writable-stream.ts"],"names":[],"mappings":"AAmBA;;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,CAuGnB"}