@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.
- package/dist/attribute-changes.d.ts +5 -0
- package/dist/attribute-changes.d.ts.map +1 -0
- package/dist/attribute-changes.js +25 -0
- package/dist/capabilities.d.ts +35 -2
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +74 -5
- package/dist/capture-stack.d.ts +1 -1
- package/dist/capture-stack.js +2 -2
- package/dist/class-serialization.d.ts +32 -0
- package/dist/class-serialization.d.ts.map +1 -1
- package/dist/class-serialization.js +37 -1
- package/dist/classify-error.d.ts +19 -3
- package/dist/classify-error.d.ts.map +1 -1
- package/dist/classify-error.js +98 -6
- package/dist/context-violation-error.d.ts +5 -5
- package/dist/context-violation-error.d.ts.map +1 -1
- package/dist/context-violation-error.js +8 -6
- package/dist/create-hook.d.ts +72 -7
- package/dist/create-hook.d.ts.map +1 -1
- package/dist/create-hook.js +1 -1
- package/dist/define-hook.js +2 -2
- package/dist/describe-error.d.ts +7 -7
- package/dist/describe-error.d.ts.map +1 -1
- package/dist/describe-error.js +97 -12
- package/dist/encryption.d.ts +38 -4
- package/dist/encryption.d.ts.map +1 -1
- package/dist/encryption.js +96 -14
- package/dist/events-consumer.d.ts +271 -0
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +646 -42
- package/dist/flushable-stream.d.ts +56 -1
- package/dist/flushable-stream.d.ts.map +1 -1
- package/dist/flushable-stream.js +123 -11
- package/dist/global.d.ts +36 -2
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +21 -6
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/log-format.d.ts +2 -2
- package/dist/log-format.js +7 -7
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +10 -6
- package/dist/private.d.ts +226 -9
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +626 -7
- package/dist/replay-payload-cache.d.ts +64 -0
- package/dist/replay-payload-cache.d.ts.map +1 -0
- package/dist/replay-payload-cache.js +158 -0
- package/dist/runtime/compute-instance.d.ts +13 -0
- package/dist/runtime/compute-instance.d.ts.map +1 -0
- package/dist/runtime/compute-instance.js +14 -0
- package/dist/runtime/constants.d.ts +315 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +502 -16
- package/dist/runtime/count-step-started-events.d.ts +52 -0
- package/dist/runtime/count-step-started-events.d.ts.map +1 -0
- package/dist/runtime/count-step-started-events.js +72 -0
- package/dist/runtime/deployment-guard.d.ts +99 -0
- package/dist/runtime/deployment-guard.d.ts.map +1 -0
- package/dist/runtime/deployment-guard.js +154 -0
- package/dist/runtime/get-port-lazy.d.ts +15 -0
- package/dist/runtime/get-port-lazy.d.ts.map +1 -1
- package/dist/runtime/get-port-lazy.js +75 -6
- package/dist/runtime/get-world-lazy.d.ts +5 -14
- package/dist/runtime/get-world-lazy.d.ts.map +1 -1
- package/dist/runtime/get-world-lazy.js +19 -29
- package/dist/runtime/helpers.d.ts +341 -29
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +559 -57
- package/dist/runtime/quickjs-assets.generated.d.ts +14 -0
- package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -0
- package/dist/runtime/quickjs-assets.generated.js +30 -0
- package/dist/runtime/quickjs-entrypoint.d.ts +136 -0
- package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -0
- package/dist/runtime/quickjs-entrypoint.js +1686 -0
- package/dist/runtime/quickjs-runtime.d.ts +244 -0
- package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
- package/dist/runtime/quickjs-runtime.js +2427 -0
- package/dist/runtime/quickjs-serde.d.ts +107 -0
- package/dist/runtime/quickjs-serde.d.ts.map +1 -0
- package/dist/runtime/quickjs-serde.js +2159 -0
- package/dist/runtime/replay-budget.d.ts +97 -0
- package/dist/runtime/replay-budget.d.ts.map +1 -0
- package/dist/runtime/replay-budget.js +139 -0
- package/dist/runtime/replay-recovery-reporter.d.ts +36 -0
- package/dist/runtime/replay-recovery-reporter.d.ts.map +1 -0
- package/dist/runtime/replay-recovery-reporter.js +64 -0
- package/dist/runtime/resume-hook.d.ts +91 -8
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +512 -89
- package/dist/runtime/resume-latency.d.ts +150 -0
- package/dist/runtime/resume-latency.d.ts.map +1 -0
- package/dist/runtime/resume-latency.js +155 -0
- package/dist/runtime/run-id-time.d.ts +19 -0
- package/dist/runtime/run-id-time.d.ts.map +1 -0
- package/dist/runtime/run-id-time.js +42 -0
- package/dist/runtime/run.d.ts +72 -7
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +280 -53
- package/dist/runtime/runs.d.ts +54 -3
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +126 -16
- package/dist/runtime/start.d.ts +101 -2
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +352 -61
- package/dist/runtime/step-executor.d.ts +205 -5
- package/dist/runtime/step-executor.d.ts.map +1 -1
- package/dist/runtime/step-executor.js +760 -127
- package/dist/runtime/step-latency.d.ts +220 -0
- package/dist/runtime/step-latency.d.ts.map +1 -0
- package/dist/runtime/step-latency.js +215 -0
- package/dist/runtime/step-ownership.d.ts +72 -0
- package/dist/runtime/step-ownership.d.ts.map +1 -0
- package/dist/runtime/step-ownership.js +114 -0
- package/dist/runtime/step-single-flight.d.ts +12 -0
- package/dist/runtime/step-single-flight.d.ts.map +1 -0
- package/dist/runtime/step-single-flight.js +75 -0
- package/dist/runtime/suspension-handler.d.ts +269 -7
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +1253 -125
- package/dist/runtime/unserializable-step.d.ts +34 -0
- package/dist/runtime/unserializable-step.d.ts.map +1 -0
- package/dist/runtime/unserializable-step.js +52 -0
- package/dist/runtime/vm-mode.d.ts +44 -0
- package/dist/runtime/vm-mode.d.ts.map +1 -0
- package/dist/runtime/vm-mode.js +62 -0
- package/dist/runtime/vm-serde-bundle.generated.d.ts +14 -0
- package/dist/runtime/vm-serde-bundle.generated.d.ts.map +1 -0
- package/dist/runtime/vm-serde-bundle.generated.js +16 -0
- package/dist/runtime/wait-continuation.d.ts +106 -0
- package/dist/runtime/wait-continuation.d.ts.map +1 -0
- package/dist/runtime/wait-continuation.js +136 -0
- package/dist/runtime/wait-until.d.ts +18 -0
- package/dist/runtime/wait-until.d.ts.map +1 -0
- package/dist/runtime/wait-until.js +42 -0
- package/dist/runtime/world-compatibility.d.ts +32 -0
- package/dist/runtime/world-compatibility.d.ts.map +1 -0
- package/dist/runtime/world-compatibility.js +44 -0
- package/dist/runtime/world-init.d.ts +17 -42
- package/dist/runtime/world-init.d.ts.map +1 -1
- package/dist/runtime/world-init.js +18 -43
- package/dist/runtime/world.d.ts +14 -2
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +75 -19
- package/dist/runtime.d.ts +10 -6
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +3741 -490
- package/dist/sealed-box.d.ts +167 -0
- package/dist/sealed-box.d.ts.map +1 -0
- package/dist/sealed-box.js +571 -0
- package/dist/serialization/client.d.ts +3 -3
- package/dist/serialization/client.d.ts.map +1 -1
- package/dist/serialization/client.js +8 -4
- package/dist/serialization/codec-devalue-vm.d.ts +16 -0
- package/dist/serialization/codec-devalue-vm.d.ts.map +1 -0
- package/dist/serialization/codec-devalue-vm.js +148 -0
- package/dist/serialization/codec-devalue.d.ts +1 -1
- package/dist/serialization/codec-devalue.d.ts.map +1 -1
- package/dist/serialization/codec-devalue.js +24 -6
- package/dist/serialization/codec.d.ts +37 -2
- package/dist/serialization/codec.d.ts.map +1 -1
- package/dist/serialization/codec.js +2 -2
- package/dist/serialization/compression.d.ts +105 -0
- package/dist/serialization/compression.d.ts.map +1 -0
- package/dist/serialization/compression.js +261 -0
- package/dist/serialization/encryption.d.ts +119 -17
- package/dist/serialization/encryption.d.ts.map +1 -1
- package/dist/serialization/encryption.js +152 -17
- package/dist/serialization/errors.d.ts +13 -0
- package/dist/serialization/errors.d.ts.map +1 -1
- package/dist/serialization/errors.js +20 -2
- package/dist/serialization/format.d.ts +6 -6
- package/dist/serialization/format.js +7 -7
- package/dist/serialization/hardened.d.ts +156 -0
- package/dist/serialization/hardened.d.ts.map +1 -0
- package/dist/serialization/hardened.js +538 -0
- package/dist/serialization/index.d.ts +10 -8
- package/dist/serialization/index.d.ts.map +1 -1
- package/dist/serialization/index.js +10 -8
- package/dist/serialization/reducers/class-vm.d.ts +20 -0
- package/dist/serialization/reducers/class-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/class-vm.js +77 -0
- package/dist/serialization/reducers/class.d.ts.map +1 -1
- package/dist/serialization/reducers/class.js +11 -6
- package/dist/serialization/reducers/common-vm.d.ts +15 -0
- package/dist/serialization/reducers/common-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/common-vm.js +616 -0
- package/dist/serialization/reducers/common.d.ts +1 -1
- package/dist/serialization/reducers/common.d.ts.map +1 -1
- package/dist/serialization/reducers/common.js +202 -62
- package/dist/serialization/reducers/step-function-vm.d.ts +44 -0
- package/dist/serialization/reducers/step-function-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/step-function-vm.js +97 -0
- package/dist/serialization/reducers/step-function.d.ts.map +1 -1
- package/dist/serialization/reducers/step-function.js +25 -9
- package/dist/serialization/step.d.ts +4 -4
- package/dist/serialization/step.d.ts.map +1 -1
- package/dist/serialization/step.js +9 -5
- package/dist/serialization/types.d.ts +80 -1
- package/dist/serialization/types.d.ts.map +1 -1
- package/dist/serialization/types.js +15 -1
- package/dist/serialization/workflow-vm.d.ts +29 -0
- package/dist/serialization/workflow-vm.d.ts.map +1 -0
- package/dist/serialization/workflow-vm.js +74 -0
- package/dist/serialization-format.d.ts +64 -8
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +225 -73
- package/dist/serialization.d.ts +262 -34
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +1879 -274
- package/dist/set-attributes.d.ts +13 -0
- package/dist/set-attributes.d.ts.map +1 -0
- package/dist/set-attributes.js +60 -0
- package/dist/source-map.d.ts +25 -0
- package/dist/source-map.d.ts.map +1 -1
- package/dist/source-map.js +154 -10
- package/dist/step/context-storage.d.ts +61 -2
- package/dist/step/context-storage.d.ts.map +1 -1
- package/dist/step/context-storage.js +7 -5
- package/dist/step/writable-stream.d.ts +3 -3
- package/dist/step/writable-stream.d.ts.map +1 -1
- package/dist/step/writable-stream.js +72 -9
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +148 -27
- package/dist/symbols.d.ts +50 -0
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +51 -1
- package/dist/telemetry/semantic-conventions.d.ts +397 -2
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +297 -3
- package/dist/telemetry.d.ts +91 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +244 -17
- package/dist/test-support/orchestrator-context.d.ts +25 -0
- package/dist/test-support/orchestrator-context.d.ts.map +1 -0
- package/dist/test-support/orchestrator-context.js +101 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +23 -1
- package/dist/util.d.ts +0 -5
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +1 -15
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/index.d.ts.map +1 -1
- package/dist/vm/index.js +84 -14
- package/dist/vm/script-cache.d.ts +26 -0
- package/dist/vm/script-cache.d.ts.map +1 -0
- package/dist/vm/script-cache.js +131 -0
- package/dist/vm/uint8array-base64.js +1 -1
- package/dist/workflow/abort-controller.d.ts +2 -2
- package/dist/workflow/abort-controller.d.ts.map +1 -1
- package/dist/workflow/abort-controller.js +88 -21
- package/dist/workflow/attribute-dispatcher.d.ts +6 -0
- package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
- package/dist/workflow/attribute-dispatcher.js +45 -0
- package/dist/workflow/create-hook.d.ts.map +1 -1
- package/dist/workflow/create-hook.js +24 -3
- package/dist/workflow/get-workflow-metadata.js +2 -2
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +304 -47
- package/dist/workflow/index.d.ts +1 -0
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +2 -1
- package/dist/workflow/set-attributes.d.ts +68 -0
- package/dist/workflow/set-attributes.d.ts.map +1 -0
- package/dist/workflow/set-attributes.js +60 -0
- package/dist/workflow/sleep.d.ts.map +1 -1
- package/dist/workflow/sleep.js +58 -12
- package/dist/workflow/world-init-stub.d.ts +3 -3
- package/dist/workflow/world-init-stub.js +4 -4
- package/dist/workflow.d.ts +95 -3
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +895 -561
- package/docs/api-reference/create-hook.mdx +89 -10
- package/docs/api-reference/create-webhook.mdx +16 -15
- package/docs/api-reference/define-hook.mdx +35 -33
- package/docs/api-reference/fatal-error.mdx +30 -8
- package/docs/api-reference/fetch.mdx +14 -10
- package/docs/api-reference/get-step-metadata.mdx +2 -2
- package/docs/api-reference/get-workflow-metadata.mdx +3 -3
- package/docs/api-reference/get-writable.mdx +7 -7
- package/docs/api-reference/index.mdx +4 -1
- package/docs/api-reference/retryable-error.mdx +1 -1
- package/docs/api-reference/set-attributes.mdx +61 -0
- package/docs/api-reference/sleep.mdx +4 -4
- package/docs/foundations/cancellation.mdx +31 -32
- package/docs/foundations/errors-and-retries.mdx +42 -11
- package/docs/foundations/hooks.mdx +64 -35
- package/docs/foundations/idempotency.mdx +244 -12
- package/docs/foundations/index.mdx +1 -23
- package/docs/foundations/meta.json +2 -1
- package/docs/foundations/serialization.mdx +21 -22
- package/docs/foundations/starting-workflows.mdx +106 -30
- package/docs/foundations/streaming.mdx +107 -59
- package/docs/foundations/versioning.mdx +263 -0
- package/docs/foundations/workflows-and-steps.mdx +9 -9
- package/docs/how-it-works/cancellation.mdx +63 -63
- package/docs/how-it-works/code-transform.mdx +83 -67
- package/docs/how-it-works/encryption.mdx +30 -26
- package/docs/how-it-works/event-sourcing.mdx +98 -34
- package/docs/how-it-works/framework-integrations.mdx +96 -337
- package/docs/how-it-works/understanding-directives.mdx +22 -22
- package/package.json +24 -15
- package/dist/runtime/step-handler.d.ts +0 -2
- package/dist/runtime/step-handler.d.ts.map +0 -1
- 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==
|
package/dist/source-map.d.ts
CHANGED
|
@@ -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
|
package/dist/source-map.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-map.d.ts","sourceRoot":"","sources":["../src/source-map.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/source-map.js
CHANGED
|
@@ -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
|
-
//
|
|
12
|
-
|
|
13
|
-
if (!
|
|
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
|
|
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 {
|
|
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?:
|
|
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,
|
|
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
|
|
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 =
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
12
|
+
* Retrieves the writable stream associated with the current workflow.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
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":"
|
|
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"}
|