@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.
- package/dist/attribute-changes.d.ts +7 -0
- package/dist/attribute-changes.d.ts.map +1 -0
- package/dist/attribute-changes.js +25 -0
- package/dist/capabilities.d.ts +22 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +41 -4
- package/dist/capture-stack.d.ts +16 -0
- package/dist/capture-stack.d.ts.map +1 -0
- package/dist/capture-stack.js +21 -0
- 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 +26 -3
- package/dist/classify-error.d.ts.map +1 -1
- package/dist/classify-error.js +103 -6
- package/dist/context-errors.d.ts +27 -0
- package/dist/context-errors.d.ts.map +1 -0
- package/dist/context-errors.js +101 -0
- package/dist/context-violation-error.d.ts +97 -0
- package/dist/context-violation-error.d.ts.map +1 -0
- package/dist/context-violation-error.js +147 -0
- package/dist/create-hook.d.ts +42 -3
- package/dist/create-hook.d.ts.map +1 -1
- package/dist/create-hook.js +4 -3
- package/dist/define-hook.d.ts.map +1 -1
- package/dist/define-hook.js +20 -5
- package/dist/describe-error.d.ts +70 -0
- package/dist/describe-error.d.ts.map +1 -0
- package/dist/describe-error.js +165 -0
- package/dist/encryption.d.ts +22 -1
- package/dist/encryption.d.ts.map +1 -1
- package/dist/encryption.js +72 -27
- package/dist/events-consumer.d.ts +25 -1
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +95 -16
- package/dist/flushable-stream.d.ts +10 -10
- package/dist/flushable-stream.d.ts.map +1 -1
- package/dist/flushable-stream.js +26 -15
- package/dist/global.d.ts +35 -1
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +21 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/log-format.d.ts +25 -0
- package/dist/log-format.d.ts.map +1 -0
- package/dist/log-format.js +250 -0
- package/dist/logger.d.ts +29 -30
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +82 -32
- package/dist/private.d.ts +107 -2
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +80 -3
- package/dist/runtime/constants.d.ts +189 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +310 -15
- package/dist/runtime/get-port-lazy.d.ts +25 -0
- package/dist/runtime/get-port-lazy.d.ts.map +1 -0
- package/dist/runtime/get-port-lazy.js +92 -0
- package/dist/runtime/get-world-lazy.d.ts +23 -0
- package/dist/runtime/get-world-lazy.d.ts.map +1 -0
- package/dist/runtime/get-world-lazy.js +46 -0
- package/dist/runtime/helpers.d.ts +57 -6
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +169 -32
- package/dist/runtime/replay-budget.d.ts +98 -0
- package/dist/runtime/replay-budget.d.ts.map +1 -0
- package/dist/runtime/replay-budget.js +192 -0
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +39 -23
- package/dist/runtime/run-id-time.d.ts +10 -0
- package/dist/runtime/run-id-time.d.ts.map +1 -0
- package/dist/runtime/run-id-time.js +31 -0
- package/dist/runtime/run.d.ts +6 -2
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +52 -10
- package/dist/runtime/runs.d.ts +36 -2
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +18 -7
- package/dist/runtime/start.d.ts +58 -1
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +160 -46
- package/dist/runtime/step-executor.d.ts +131 -0
- package/dist/runtime/step-executor.d.ts.map +1 -0
- package/dist/runtime/step-executor.js +818 -0
- package/dist/runtime/step-handler.d.ts.map +1 -1
- package/dist/runtime/step-handler.js +718 -557
- package/dist/runtime/step-latency.d.ts +131 -0
- package/dist/runtime/step-latency.d.ts.map +1 -0
- package/dist/runtime/step-latency.js +155 -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 +69 -0
- package/dist/runtime/suspension-handler.d.ts +81 -7
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +355 -137
- package/dist/runtime/wait-continuation.d.ts +84 -0
- package/dist/runtime/wait-continuation.d.ts.map +1 -0
- package/dist/runtime/wait-continuation.js +105 -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 +5 -0
- package/dist/runtime/world-compatibility.d.ts.map +1 -0
- package/dist/runtime/world-compatibility.js +12 -0
- package/dist/runtime/world-init.d.ts +50 -0
- package/dist/runtime/world-init.d.ts.map +1 -0
- package/dist/runtime/world-init.js +50 -0
- package/dist/runtime/world-target.d.ts +11 -0
- package/dist/runtime/world-target.d.ts.map +1 -0
- package/dist/runtime/world-target.js +15 -0
- package/dist/runtime/world.d.ts +21 -9
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +58 -83
- package/dist/runtime.d.ts +15 -10
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +1757 -326
- package/dist/schemas.d.ts +1 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +1 -1
- package/dist/serialization/client.d.ts +17 -0
- package/dist/serialization/client.d.ts.map +1 -0
- package/dist/serialization/client.js +48 -0
- package/dist/serialization/codec-devalue.d.ts +14 -0
- package/dist/serialization/codec-devalue.d.ts.map +1 -0
- package/dist/serialization/codec-devalue.js +98 -0
- package/dist/serialization/codec.d.ts +106 -0
- package/dist/serialization/codec.d.ts.map +1 -0
- package/dist/serialization/codec.js +17 -0
- package/dist/serialization/compression.d.ts +104 -0
- package/dist/serialization/compression.d.ts.map +1 -0
- package/dist/serialization/compression.js +260 -0
- package/dist/serialization/encryption.d.ts +33 -0
- package/dist/serialization/encryption.d.ts.map +1 -0
- package/dist/serialization/encryption.js +70 -0
- package/dist/serialization/errors.d.ts +34 -0
- package/dist/serialization/errors.d.ts.map +1 -0
- package/dist/serialization/errors.js +59 -0
- package/dist/serialization/format.d.ts +60 -0
- package/dist/serialization/format.d.ts.map +1 -0
- package/dist/serialization/format.js +97 -0
- package/dist/serialization/index.d.ts +19 -0
- package/dist/serialization/index.d.ts.map +1 -0
- package/dist/serialization/index.js +22 -0
- package/dist/serialization/reducers/class.d.ts +11 -0
- package/dist/serialization/reducers/class.d.ts.map +1 -0
- package/dist/serialization/reducers/class.js +68 -0
- package/dist/serialization/reducers/common.d.ts +16 -0
- package/dist/serialization/reducers/common.d.ts.map +1 -0
- package/dist/serialization/reducers/common.js +417 -0
- package/dist/serialization/reducers/step-function.d.ts +35 -0
- package/dist/serialization/reducers/step-function.d.ts.map +1 -0
- package/dist/serialization/reducers/step-function.js +88 -0
- package/dist/serialization/step.d.ts +17 -0
- package/dist/serialization/step.d.ts.map +1 -0
- package/dist/serialization/step.js +48 -0
- package/dist/serialization/types.d.ts +253 -0
- package/dist/serialization/types.d.ts.map +1 -0
- package/dist/serialization/types.js +25 -0
- package/dist/serialization/workflow.d.ts +29 -0
- package/dist/serialization/workflow.d.ts.map +1 -0
- package/dist/serialization/workflow.js +54 -0
- package/dist/serialization-format.d.ts +16 -0
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +213 -50
- package/dist/serialization.d.ts +322 -214
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +1575 -664
- package/dist/set-attributes.d.ts +18 -0
- package/dist/set-attributes.d.ts.map +1 -0
- package/dist/set-attributes.js +61 -0
- package/dist/sleep.d.ts.map +1 -1
- package/dist/sleep.js +3 -2
- package/dist/source-map.d.ts +5 -0
- package/dist/source-map.d.ts.map +1 -1
- package/dist/source-map.js +102 -10
- package/dist/step/context-storage.d.ts +53 -0
- package/dist/step/context-storage.d.ts.map +1 -1
- package/dist/step/context-storage.js +1 -1
- package/dist/step/get-closure-vars.d.ts.map +1 -1
- package/dist/step/get-closure-vars.js +3 -2
- package/dist/step/get-step-metadata.d.ts.map +1 -1
- package/dist/step/get-step-metadata.js +3 -2
- package/dist/step/get-workflow-metadata.d.ts.map +1 -1
- package/dist/step/get-workflow-metadata.js +3 -2
- package/dist/step/writable-stream.d.ts.map +1 -1
- package/dist/step/writable-stream.js +58 -6
- package/dist/step-hydration-cache.d.ts +148 -0
- package/dist/step-hydration-cache.d.ts.map +1 -0
- package/dist/step-hydration-cache.js +171 -0
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +144 -25
- package/dist/symbols.d.ts +28 -0
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +29 -1
- package/dist/telemetry/semantic-conventions.d.ts +98 -2
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +66 -1
- package/dist/telemetry.d.ts +68 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +106 -4
- 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 +16 -6
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +25 -16
- 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 +3 -2
- package/dist/vm/script-cache.d.ts +28 -0
- package/dist/vm/script-cache.d.ts.map +1 -0
- package/dist/vm/script-cache.js +140 -0
- package/dist/workflow/abort-controller.d.ts +65 -0
- package/dist/workflow/abort-controller.d.ts.map +1 -0
- package/dist/workflow/abort-controller.js +277 -0
- 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 +48 -0
- package/dist/workflow/create-hook.d.ts.map +1 -1
- package/dist/workflow/create-hook.js +25 -3
- package/dist/workflow/define-hook.d.ts +1 -1
- package/dist/workflow/define-hook.d.ts.map +1 -1
- package/dist/workflow/define-hook.js +8 -4
- package/dist/workflow/get-workflow-metadata.d.ts.map +1 -1
- package/dist/workflow/get-workflow-metadata.js +14 -3
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +207 -33
- package/dist/workflow/index.d.ts +1 -0
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +5 -3
- package/dist/workflow/set-attributes.d.ts +77 -0
- package/dist/workflow/set-attributes.d.ts.map +1 -0
- package/dist/workflow/set-attributes.js +65 -0
- package/dist/workflow/sleep.d.ts.map +1 -1
- package/dist/workflow/sleep.js +45 -8
- package/dist/workflow/world-init-stub.d.ts +15 -0
- package/dist/workflow/world-init-stub.d.ts.map +1 -0
- package/dist/workflow/world-init-stub.js +15 -0
- package/dist/workflow.d.ts +17 -1
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +190 -56
- package/docs/api-reference/create-hook.mdx +38 -0
- package/docs/api-reference/create-webhook.mdx +1 -0
- package/docs/api-reference/fetch.mdx +5 -0
- package/docs/api-reference/index.mdx +3 -0
- package/docs/api-reference/set-attributes.mdx +65 -0
- package/docs/foundations/cancellation.mdx +459 -0
- package/docs/foundations/errors-and-retries.mdx +7 -3
- package/docs/foundations/hooks.mdx +29 -0
- package/docs/foundations/idempotency.mdx +236 -11
- package/docs/foundations/index.mdx +1 -23
- package/docs/foundations/meta.json +3 -1
- package/docs/foundations/serialization.mdx +77 -41
- package/docs/foundations/starting-workflows.mdx +5 -1
- package/docs/foundations/streaming.mdx +14 -23
- package/docs/foundations/versioning.mdx +263 -0
- package/docs/how-it-works/cancellation.mdx +287 -0
- package/docs/how-it-works/code-transform.mdx +2 -2
- package/docs/how-it-works/encryption.mdx +2 -2
- package/docs/how-it-works/event-sourcing.mdx +2 -2
- package/docs/how-it-works/meta.json +2 -1
- package/package.json +32 -11
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type AttributeChange } from '@workflow/world';
|
|
2
|
+
interface AttributeChangeOptions {
|
|
3
|
+
allowReservedAttributes?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function normalizeAttributeChanges(attrs: Record<string, string | undefined>, options?: AttributeChangeOptions): AttributeChange[];
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=attribute-changes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribute-changes.d.ts","sourceRoot":"","sources":["../src/attribute-changes.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,iBAAiB,CAAC;AAEzB,UAAU,sBAAsB;IAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACzC,OAAO,GAAE,sBAA2B,GACnC,eAAe,EAAE,CA4BnB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { FatalError } from '@workflow/errors';
|
|
2
|
+
import { AttributeValidationError, validateAttributeChanges, } from '@workflow/world';
|
|
3
|
+
export function normalizeAttributeChanges(attrs, options = {}) {
|
|
4
|
+
if (attrs === null || typeof attrs !== 'object' || Array.isArray(attrs)) {
|
|
5
|
+
throw new FatalError(`setAttributes requires a plain object, got ${attrs === null ? 'null' : Array.isArray(attrs) ? 'array' : typeof attrs}`);
|
|
6
|
+
}
|
|
7
|
+
const changes = Object.entries(attrs).map(([key, value]) => ({
|
|
8
|
+
key,
|
|
9
|
+
value: value === undefined ? null : value,
|
|
10
|
+
}));
|
|
11
|
+
if (changes.length === 0)
|
|
12
|
+
return changes;
|
|
13
|
+
const allowReservedAttributes = options.allowReservedAttributes === true;
|
|
14
|
+
try {
|
|
15
|
+
validateAttributeChanges(changes, { allowReservedAttributes });
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
if (err instanceof AttributeValidationError) {
|
|
19
|
+
throw new FatalError(err.message);
|
|
20
|
+
}
|
|
21
|
+
throw err;
|
|
22
|
+
}
|
|
23
|
+
return changes;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWNoYW5nZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXR0cmlidXRlLWNoYW5nZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFFTCx3QkFBd0IsRUFDeEIsd0JBQXdCLEdBQ3pCLE1BQU0saUJBQWlCLENBQUM7QUFNekIsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxLQUF5QyxFQUN6QyxVQUFrQyxFQUFFO0lBRXBDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hFLE1BQU0sSUFBSSxVQUFVLENBQ2xCLDhDQUNFLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQ3BFLEVBQUUsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFzQixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FDMUQsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixHQUFHO1FBQ0gsS0FBSyxFQUFFLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztLQUMxQyxDQUFDLENBQ0gsQ0FBQztJQUNGLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFFekMsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEtBQUssSUFBSSxDQUFDO0lBQ3pFLElBQUksQ0FBQztRQUNILHdCQUF3QixDQUFDLE9BQU8sRUFBRSxFQUFFLHVCQUF1QixFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksR0FBRyxZQUFZLHdCQUF3QixFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELE1BQU0sR0FBRyxDQUFDO0lBQ1osQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGYXRhbEVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQge1xuICB0eXBlIEF0dHJpYnV0ZUNoYW5nZSxcbiAgQXR0cmlidXRlVmFsaWRhdGlvbkVycm9yLFxuICB2YWxpZGF0ZUF0dHJpYnV0ZUNoYW5nZXMsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5cbmludGVyZmFjZSBBdHRyaWJ1dGVDaGFuZ2VPcHRpb25zIHtcbiAgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQXR0cmlidXRlQ2hhbmdlcyhcbiAgYXR0cnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gIG9wdGlvbnM6IEF0dHJpYnV0ZUNoYW5nZU9wdGlvbnMgPSB7fVxuKTogQXR0cmlidXRlQ2hhbmdlW10ge1xuICBpZiAoYXR0cnMgPT09IG51bGwgfHwgdHlwZW9mIGF0dHJzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGF0dHJzKSkge1xuICAgIHRocm93IG5ldyBGYXRhbEVycm9yKFxuICAgICAgYHNldEF0dHJpYnV0ZXMgcmVxdWlyZXMgYSBwbGFpbiBvYmplY3QsIGdvdCAke1xuICAgICAgICBhdHRycyA9PT0gbnVsbCA/ICdudWxsJyA6IEFycmF5LmlzQXJyYXkoYXR0cnMpID8gJ2FycmF5JyA6IHR5cGVvZiBhdHRyc1xuICAgICAgfWBcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2hhbmdlczogQXR0cmlidXRlQ2hhbmdlW10gPSBPYmplY3QuZW50cmllcyhhdHRycykubWFwKFxuICAgIChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZTogdmFsdWUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB2YWx1ZSxcbiAgICB9KVxuICApO1xuICBpZiAoY2hhbmdlcy5sZW5ndGggPT09IDApIHJldHVybiBjaGFuZ2VzO1xuXG4gIGNvbnN0IGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzID0gb3B0aW9ucy5hbGxvd1Jlc2VydmVkQXR0cmlidXRlcyA9PT0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICB2YWxpZGF0ZUF0dHJpYnV0ZUNoYW5nZXMoY2hhbmdlcywgeyBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcyB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEF0dHJpYnV0ZVZhbGlkYXRpb25FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEZhdGFsRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cblxuICByZXR1cm4gY2hhbmdlcztcbn1cbiJdfQ==
|
package/dist/capabilities.d.ts
CHANGED
|
@@ -15,11 +15,22 @@
|
|
|
15
15
|
* `@workflow/core` version that supports it
|
|
16
16
|
* 3. The `getRunCapabilities()` function will automatically include it
|
|
17
17
|
*
|
|
18
|
+
* ## Adding a new non-format capability
|
|
19
|
+
*
|
|
20
|
+
* Some capabilities aren't serialization format prefixes — e.g.
|
|
21
|
+
* byte-stream wire framing is an envelope around chunks rather than
|
|
22
|
+
* a content format. For those, add a boolean field to `RunCapabilities`
|
|
23
|
+
* and an entry in `CAPABILITY_VERSION_TABLE` below.
|
|
24
|
+
*
|
|
18
25
|
* ## History
|
|
19
26
|
*
|
|
20
27
|
* - `encr` (AES-256-GCM encryption): added in `4.2.0-beta.64`
|
|
21
28
|
* Commit: 7618ac36 "Wire AES-GCM encryption into serialization layer (#1251)"
|
|
22
29
|
* https://github.com/vercel/workflow/commit/7618ac36
|
|
30
|
+
* - `framedByteStreams` (wire-level chunk framing for byte streams): added in `5.0.0-beta.15`
|
|
31
|
+
* - `gzip` (gzip payload compression): added in `5.0.0-beta.18`
|
|
32
|
+
* - `zstd` (zstd payload compression, preferred codec): added in `5.0.0-beta.18`
|
|
33
|
+
* alongside gzip — they co-ship, so any run that can read one can read both.
|
|
23
34
|
*/
|
|
24
35
|
import { type SerializationFormatType } from './serialization.js';
|
|
25
36
|
/**
|
|
@@ -32,6 +43,15 @@ export interface RunCapabilities {
|
|
|
32
43
|
* if encryption is supported, etc.
|
|
33
44
|
*/
|
|
34
45
|
supportedFormats: ReadonlySet<SerializationFormatType>;
|
|
46
|
+
/**
|
|
47
|
+
* Whether the target run can decode wire-framed byte streams. When true,
|
|
48
|
+
* byte streams (`type: 'bytes'` ReadableStreams passed across boundaries)
|
|
49
|
+
* are wrapped in a length-prefixed frame envelope on the wire so the
|
|
50
|
+
* reader can identify chunk boundaries — which enables auto-reconnect
|
|
51
|
+
* on transient stream errors. When false, byte streams are written as
|
|
52
|
+
* raw bytes (the legacy format) for compatibility with older runs.
|
|
53
|
+
*/
|
|
54
|
+
framedByteStreams: boolean;
|
|
35
55
|
}
|
|
36
56
|
/**
|
|
37
57
|
* Look up what serialization capabilities a workflow run supports based on
|
|
@@ -39,7 +59,8 @@ export interface RunCapabilities {
|
|
|
39
59
|
*
|
|
40
60
|
* When the version is `undefined`, not a string, or not a valid semver string
|
|
41
61
|
* (e.g. very old runs that predate the field, or corrupted metadata),
|
|
42
|
-
* we assume the most conservative capabilities (baseline formats only
|
|
62
|
+
* we assume the most conservative capabilities (baseline formats only,
|
|
63
|
+
* non-format capabilities all `false`).
|
|
43
64
|
*/
|
|
44
65
|
export declare function getRunCapabilities(workflowCoreVersion: string | undefined): RunCapabilities;
|
|
45
66
|
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,gBAAgB,EAAE,WAAW,CAAC,uBAAuB,CAAC,CAAC;IAEvD;;;;;;;OAOG;IACH,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAgDD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,mBAAmB,EAAE,MAAM,GAAG,SAAS,GACtC,eAAe,CA4BjB"}
|
package/dist/capabilities.js
CHANGED
|
@@ -15,11 +15,22 @@
|
|
|
15
15
|
* `@workflow/core` version that supports it
|
|
16
16
|
* 3. The `getRunCapabilities()` function will automatically include it
|
|
17
17
|
*
|
|
18
|
+
* ## Adding a new non-format capability
|
|
19
|
+
*
|
|
20
|
+
* Some capabilities aren't serialization format prefixes — e.g.
|
|
21
|
+
* byte-stream wire framing is an envelope around chunks rather than
|
|
22
|
+
* a content format. For those, add a boolean field to `RunCapabilities`
|
|
23
|
+
* and an entry in `CAPABILITY_VERSION_TABLE` below.
|
|
24
|
+
*
|
|
18
25
|
* ## History
|
|
19
26
|
*
|
|
20
27
|
* - `encr` (AES-256-GCM encryption): added in `4.2.0-beta.64`
|
|
21
28
|
* Commit: 7618ac36 "Wire AES-GCM encryption into serialization layer (#1251)"
|
|
22
29
|
* https://github.com/vercel/workflow/commit/7618ac36
|
|
30
|
+
* - `framedByteStreams` (wire-level chunk framing for byte streams): added in `5.0.0-beta.15`
|
|
31
|
+
* - `gzip` (gzip payload compression): added in `5.0.0-beta.18`
|
|
32
|
+
* - `zstd` (zstd payload compression, preferred codec): added in `5.0.0-beta.18`
|
|
33
|
+
* alongside gzip — they co-ship, so any run that can read one can read both.
|
|
23
34
|
*/
|
|
24
35
|
import semver from 'semver';
|
|
25
36
|
import { SerializationFormat, } from './serialization.js';
|
|
@@ -30,10 +41,23 @@ import { SerializationFormat, } from './serialization.js';
|
|
|
30
41
|
*/
|
|
31
42
|
const FORMAT_VERSION_TABLE = [
|
|
32
43
|
{ format: SerializationFormat.ENCRYPTED, minVersion: '4.2.0-beta.64' },
|
|
44
|
+
// TODO(release): verify this matches the actual version that ships payload
|
|
45
|
+
// compression. If a "Version Packages (beta)" PR merges before this change,
|
|
46
|
+
// bump to the next beta. A too-low cutoff makes new producers write
|
|
47
|
+
// compressed payloads to consumers that cannot decompress them; too-high
|
|
48
|
+
// merely delays the optimization (safe). gzip and zstd ship together, so
|
|
49
|
+
// they share a min version — a run that can read one can read both.
|
|
50
|
+
{ format: SerializationFormat.GZIP, minVersion: '5.0.0-beta.18' },
|
|
51
|
+
{ format: SerializationFormat.ZSTD, minVersion: '5.0.0-beta.18' },
|
|
33
52
|
// Future entries:
|
|
34
53
|
// { format: SerializationFormat.CBOR, minVersion: '5.x.y' },
|
|
35
54
|
// { format: SerializationFormat.ENCRYPTED_V2, minVersion: '5.x.y' },
|
|
36
55
|
];
|
|
56
|
+
/**
|
|
57
|
+
* Maps non-format capability flags (booleans on `RunCapabilities`) to the
|
|
58
|
+
* minimum `@workflow/core` version that introduced support for them.
|
|
59
|
+
*/
|
|
60
|
+
const CAPABILITY_VERSION_TABLE = [{ capability: 'framedByteStreams', minVersion: '5.0.0-beta.15' }];
|
|
37
61
|
/**
|
|
38
62
|
* The set of formats supported by all specVersion 2 runs, regardless of
|
|
39
63
|
* `@workflow/core` version. These are the baseline formats that were present
|
|
@@ -48,11 +72,15 @@ const BASELINE_FORMATS = new Set([
|
|
|
48
72
|
*
|
|
49
73
|
* When the version is `undefined`, not a string, or not a valid semver string
|
|
50
74
|
* (e.g. very old runs that predate the field, or corrupted metadata),
|
|
51
|
-
* we assume the most conservative capabilities (baseline formats only
|
|
75
|
+
* we assume the most conservative capabilities (baseline formats only,
|
|
76
|
+
* non-format capabilities all `false`).
|
|
52
77
|
*/
|
|
53
78
|
export function getRunCapabilities(workflowCoreVersion) {
|
|
54
79
|
if (!workflowCoreVersion || !semver.valid(workflowCoreVersion)) {
|
|
55
|
-
return {
|
|
80
|
+
return {
|
|
81
|
+
supportedFormats: BASELINE_FORMATS,
|
|
82
|
+
framedByteStreams: false,
|
|
83
|
+
};
|
|
56
84
|
}
|
|
57
85
|
const formats = new Set(BASELINE_FORMATS);
|
|
58
86
|
for (const { format, minVersion } of FORMAT_VERSION_TABLE) {
|
|
@@ -60,6 +88,15 @@ export function getRunCapabilities(workflowCoreVersion) {
|
|
|
60
88
|
formats.add(format);
|
|
61
89
|
}
|
|
62
90
|
}
|
|
63
|
-
|
|
91
|
+
const result = {
|
|
92
|
+
supportedFormats: formats,
|
|
93
|
+
framedByteStreams: false,
|
|
94
|
+
};
|
|
95
|
+
for (const { capability, minVersion } of CAPABILITY_VERSION_TABLE) {
|
|
96
|
+
if (semver.gte(workflowCoreVersion, minVersion)) {
|
|
97
|
+
result[capability] = true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return result;
|
|
64
101
|
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWJpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NhcGFiaWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQ0wsbUJBQW1CLEdBRXBCLE1BQU0sb0JBQW9CLENBQUM7QUFjNUI7Ozs7R0FJRztBQUNILE1BQU0sb0JBQW9CLEdBR3JCO0lBQ0gsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUU7SUFDdEUsa0JBQWtCO0lBQ2xCLDZEQUE2RDtJQUM3RCxxRUFBcUU7Q0FDdEUsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLGdCQUFnQixHQUF5QyxJQUFJLEdBQUcsQ0FBQztJQUNyRSxtQkFBbUIsQ0FBQyxVQUFVO0NBQy9CLENBQUMsQ0FBQztBQUVIOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLG1CQUF1QztJQUV2QyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztRQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQTBCLGdCQUFnQixDQUFDLENBQUM7SUFFbkUsS0FBSyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDMUQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDYXBhYmlsaXRpZXMgdGFibGUgZm9yIHdvcmtmbG93IHJ1bnMgYmFzZWQgb24gdGhlaXIgYEB3b3JrZmxvdy9jb3JlYCB2ZXJzaW9uLlxuICpcbiAqIFdoZW4gcmVzdW1pbmcgYSBob29rIG9yIHdlYmhvb2ssIHRoZSBwYXlsb2FkIG11c3QgYmUgZW5jb2RlZCBpbiBhIGZvcm1hdFxuICogdGhhdCB0aGUgKnRhcmdldCogd29ya2Zsb3cgcnVuJ3MgZGVwbG95bWVudCBjYW4gZGVjb2RlLiBUaGlzIG1vZHVsZSBwcm92aWRlc1xuICogYSB3YXkgdG8gbG9vayB1cCB3aGF0IHNlcmlhbGl6YXRpb24gZm9ybWF0cyBhIGdpdmVuIGBAd29ya2Zsb3cvY29yZWAgdmVyc2lvblxuICogc3VwcG9ydHMsIHNvIHRoYXQgbmV3ZXIgZGVwbG95bWVudHMgY2FuIGF2b2lkIGVuY29kaW5nIHBheWxvYWRzIGluIGZvcm1hdHNcbiAqIHRoYXQgb2xkZXIgZGVwbG95bWVudHMgZG9uJ3QgdW5kZXJzdGFuZCAoZS5nLiwgdGhlIGBlbmNyYCBlbmNyeXB0aW9uIGZvcm1hdCkuXG4gKlxuICogIyMgQWRkaW5nIGEgbmV3IGZvcm1hdFxuICpcbiAqIFdoZW4gYSBuZXcgc2VyaWFsaXphdGlvbiBmb3JtYXQgaXMgaW50cm9kdWNlZDpcbiAqIDEuIEFkZCB0aGUgZm9ybWF0IGNvbnN0YW50IHRvIGBTZXJpYWxpemF0aW9uRm9ybWF0YCBpbiBgc2VyaWFsaXphdGlvbi50c2BcbiAqIDIuIEFkZCBhbiBlbnRyeSB0byBgRk9STUFUX1ZFUlNJT05fVEFCTEVgIGJlbG93IHdpdGggdGhlIG1pbmltdW1cbiAqICAgIGBAd29ya2Zsb3cvY29yZWAgdmVyc2lvbiB0aGF0IHN1cHBvcnRzIGl0XG4gKiAzLiBUaGUgYGdldFJ1bkNhcGFiaWxpdGllcygpYCBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgaW5jbHVkZSBpdFxuICpcbiAqICMjIEhpc3RvcnlcbiAqXG4gKiAtIGBlbmNyYCAoQUVTLTI1Ni1HQ00gZW5jcnlwdGlvbik6IGFkZGVkIGluIGA0LjIuMC1iZXRhLjY0YFxuICogICBDb21taXQ6IDc2MThhYzM2IFwiV2lyZSBBRVMtR0NNIGVuY3J5cHRpb24gaW50byBzZXJpYWxpemF0aW9uIGxheWVyICgjMTI1MSlcIlxuICogICBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3dvcmtmbG93L2NvbW1pdC83NjE4YWMzNlxuICovXG5cbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7XG4gIFNlcmlhbGl6YXRpb25Gb3JtYXQsXG4gIHR5cGUgU2VyaWFsaXphdGlvbkZvcm1hdFR5cGUsXG59IGZyb20gJy4vc2VyaWFsaXphdGlvbi5qcyc7XG5cbi8qKlxuICogQ2FwYWJpbGl0aWVzIG9mIGEgd29ya2Zsb3cgcnVuIGJhc2VkIG9uIGl0cyBgQHdvcmtmbG93L2NvcmVgIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuQ2FwYWJpbGl0aWVzIHtcbiAgLyoqXG4gICAqIFRoZSBzZXQgb2Ygc2VyaWFsaXphdGlvbiBmb3JtYXQgcHJlZml4ZXMgdGhhdCB0aGUgdGFyZ2V0IHJ1biBjYW4gZGVjb2RlLlxuICAgKiBVc2UgYHN1cHBvcnRlZEZvcm1hdHMuaGFzKFNlcmlhbGl6YXRpb25Gb3JtYXQuRU5DUllQVEVEKWAgdG8gY2hlY2tcbiAgICogaWYgZW5jcnlwdGlvbiBpcyBzdXBwb3J0ZWQsIGV0Yy5cbiAgICovXG4gIHN1cHBvcnRlZEZvcm1hdHM6IFJlYWRvbmx5U2V0PFNlcmlhbGl6YXRpb25Gb3JtYXRUeXBlPjtcbn1cblxuLyoqXG4gKiBNYXBzIHNlcmlhbGl6YXRpb24gZm9ybWF0IGlkZW50aWZpZXJzIHRvIHRoZSBtaW5pbXVtIGBAd29ya2Zsb3cvY29yZWBcbiAqIHZlcnNpb24gdGhhdCBpbnRyb2R1Y2VkIHN1cHBvcnQgZm9yIHRoZW0uIEZvcm1hdHMgbm90IGxpc3RlZCBoZXJlIGFyZVxuICogYXNzdW1lZCB0byBiZSBzdXBwb3J0ZWQgYnkgYWxsIHNwZWNWZXJzaW9uIDIgcnVucyAoZS5nLiwgYGRldmxgKS5cbiAqL1xuY29uc3QgRk9STUFUX1ZFUlNJT05fVEFCTEU6IFJlYWRvbmx5QXJyYXk8e1xuICBmb3JtYXQ6IFNlcmlhbGl6YXRpb25Gb3JtYXRUeXBlO1xuICBtaW5WZXJzaW9uOiBzdHJpbmc7XG59PiA9IFtcbiAgeyBmb3JtYXQ6IFNlcmlhbGl6YXRpb25Gb3JtYXQuRU5DUllQVEVELCBtaW5WZXJzaW9uOiAnNC4yLjAtYmV0YS42NCcgfSxcbiAgLy8gRnV0dXJlIGVudHJpZXM6XG4gIC8vIHsgZm9ybWF0OiBTZXJpYWxpemF0aW9uRm9ybWF0LkNCT1IsIG1pblZlcnNpb246ICc1LngueScgfSxcbiAgLy8geyBmb3JtYXQ6IFNlcmlhbGl6YXRpb25Gb3JtYXQuRU5DUllQVEVEX1YyLCBtaW5WZXJzaW9uOiAnNS54LnknIH0sXG5dO1xuXG4vKipcbiAqIFRoZSBzZXQgb2YgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgYWxsIHNwZWNWZXJzaW9uIDIgcnVucywgcmVnYXJkbGVzcyBvZlxuICogYEB3b3JrZmxvdy9jb3JlYCB2ZXJzaW9uLiBUaGVzZSBhcmUgdGhlIGJhc2VsaW5lIGZvcm1hdHMgdGhhdCB3ZXJlIHByZXNlbnRcbiAqIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzcGVjVmVyc2lvbiAyIHByb3RvY29sLlxuICovXG5jb25zdCBCQVNFTElORV9GT1JNQVRTOiBSZWFkb25seVNldDxTZXJpYWxpemF0aW9uRm9ybWF0VHlwZT4gPSBuZXcgU2V0KFtcbiAgU2VyaWFsaXphdGlvbkZvcm1hdC5ERVZBTFVFX1YxLFxuXSk7XG5cbi8qKlxuICogTG9vayB1cCB3aGF0IHNlcmlhbGl6YXRpb24gY2FwYWJpbGl0aWVzIGEgd29ya2Zsb3cgcnVuIHN1cHBvcnRzIGJhc2VkIG9uXG4gKiBpdHMgYEB3b3JrZmxvdy9jb3JlYCB2ZXJzaW9uIHN0cmluZyAoZnJvbSBgZXhlY3V0aW9uQ29udGV4dC53b3JrZmxvd0NvcmVWZXJzaW9uYCkuXG4gKlxuICogV2hlbiB0aGUgdmVyc2lvbiBpcyBgdW5kZWZpbmVkYCwgbm90IGEgc3RyaW5nLCBvciBub3QgYSB2YWxpZCBzZW12ZXIgc3RyaW5nXG4gKiAoZS5nLiB2ZXJ5IG9sZCBydW5zIHRoYXQgcHJlZGF0ZSB0aGUgZmllbGQsIG9yIGNvcnJ1cHRlZCBtZXRhZGF0YSksXG4gKiB3ZSBhc3N1bWUgdGhlIG1vc3QgY29uc2VydmF0aXZlIGNhcGFiaWxpdGllcyAoYmFzZWxpbmUgZm9ybWF0cyBvbmx5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJ1bkNhcGFiaWxpdGllcyhcbiAgd29ya2Zsb3dDb3JlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBSdW5DYXBhYmlsaXRpZXMge1xuICBpZiAoIXdvcmtmbG93Q29yZVZlcnNpb24gfHwgIXNlbXZlci52YWxpZCh3b3JrZmxvd0NvcmVWZXJzaW9uKSkge1xuICAgIHJldHVybiB7IHN1cHBvcnRlZEZvcm1hdHM6IEJBU0VMSU5FX0ZPUk1BVFMgfTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdHMgPSBuZXcgU2V0PFNlcmlhbGl6YXRpb25Gb3JtYXRUeXBlPihCQVNFTElORV9GT1JNQVRTKTtcblxuICBmb3IgKGNvbnN0IHsgZm9ybWF0LCBtaW5WZXJzaW9uIH0gb2YgRk9STUFUX1ZFUlNJT05fVEFCTEUpIHtcbiAgICBpZiAoc2VtdmVyLmd0ZSh3b3JrZmxvd0NvcmVWZXJzaW9uLCBtaW5WZXJzaW9uKSkge1xuICAgICAgZm9ybWF0cy5hZGQoZm9ybWF0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBzdXBwb3J0ZWRGb3JtYXRzOiBmb3JtYXRzIH07XG59XG4iXX0=
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWJpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NhcGFiaWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNHO0FBRUgsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFDTCxtQkFBbUIsR0FFcEIsTUFBTSxvQkFBb0IsQ0FBQztBQXdCNUI7Ozs7R0FJRztBQUNILE1BQU0sb0JBQW9CLEdBR3JCO0lBQ0gsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUU7SUFDdEUsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSxvRUFBb0U7SUFDcEUseUVBQXlFO0lBQ3pFLHlFQUF5RTtJQUN6RSxvRUFBb0U7SUFDcEUsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUU7SUFDakUsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUU7SUFDakUsa0JBQWtCO0lBQ2xCLDZEQUE2RDtJQUM3RCxxRUFBcUU7Q0FDdEUsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sd0JBQXdCLEdBUXpCLENBQUMsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFFeEU7Ozs7R0FJRztBQUNILE1BQU0sZ0JBQWdCLEdBQXlDLElBQUksR0FBRyxDQUFDO0lBQ3JFLG1CQUFtQixDQUFDLFVBQVU7Q0FDL0IsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLG1CQUF1QztJQUV2QyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztRQUMvRCxPQUFPO1lBQ0wsZ0JBQWdCLEVBQUUsZ0JBQWdCO1lBQ2xDLGlCQUFpQixFQUFFLEtBQUs7U0FDekIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBMEIsZ0JBQWdCLENBQUMsQ0FBQztJQUVuRSxLQUFLLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUMxRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQW9CO1FBQzlCLGdCQUFnQixFQUFFLE9BQU87UUFDekIsaUJBQWlCLEVBQUUsS0FBSztLQUN6QixDQUFDO0lBRUYsS0FBSyxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLHdCQUF3QixFQUFFLENBQUM7UUFDbEUsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDaEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENhcGFiaWxpdGllcyB0YWJsZSBmb3Igd29ya2Zsb3cgcnVucyBiYXNlZCBvbiB0aGVpciBgQHdvcmtmbG93L2NvcmVgIHZlcnNpb24uXG4gKlxuICogV2hlbiByZXN1bWluZyBhIGhvb2sgb3Igd2ViaG9vaywgdGhlIHBheWxvYWQgbXVzdCBiZSBlbmNvZGVkIGluIGEgZm9ybWF0XG4gKiB0aGF0IHRoZSAqdGFyZ2V0KiB3b3JrZmxvdyBydW4ncyBkZXBsb3ltZW50IGNhbiBkZWNvZGUuIFRoaXMgbW9kdWxlIHByb3ZpZGVzXG4gKiBhIHdheSB0byBsb29rIHVwIHdoYXQgc2VyaWFsaXphdGlvbiBmb3JtYXRzIGEgZ2l2ZW4gYEB3b3JrZmxvdy9jb3JlYCB2ZXJzaW9uXG4gKiBzdXBwb3J0cywgc28gdGhhdCBuZXdlciBkZXBsb3ltZW50cyBjYW4gYXZvaWQgZW5jb2RpbmcgcGF5bG9hZHMgaW4gZm9ybWF0c1xuICogdGhhdCBvbGRlciBkZXBsb3ltZW50cyBkb24ndCB1bmRlcnN0YW5kIChlLmcuLCB0aGUgYGVuY3JgIGVuY3J5cHRpb24gZm9ybWF0KS5cbiAqXG4gKiAjIyBBZGRpbmcgYSBuZXcgZm9ybWF0XG4gKlxuICogV2hlbiBhIG5ldyBzZXJpYWxpemF0aW9uIGZvcm1hdCBpcyBpbnRyb2R1Y2VkOlxuICogMS4gQWRkIHRoZSBmb3JtYXQgY29uc3RhbnQgdG8gYFNlcmlhbGl6YXRpb25Gb3JtYXRgIGluIGBzZXJpYWxpemF0aW9uLnRzYFxuICogMi4gQWRkIGFuIGVudHJ5IHRvIGBGT1JNQVRfVkVSU0lPTl9UQUJMRWAgYmVsb3cgd2l0aCB0aGUgbWluaW11bVxuICogICAgYEB3b3JrZmxvdy9jb3JlYCB2ZXJzaW9uIHRoYXQgc3VwcG9ydHMgaXRcbiAqIDMuIFRoZSBgZ2V0UnVuQ2FwYWJpbGl0aWVzKClgIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBpbmNsdWRlIGl0XG4gKlxuICogIyMgQWRkaW5nIGEgbmV3IG5vbi1mb3JtYXQgY2FwYWJpbGl0eVxuICpcbiAqIFNvbWUgY2FwYWJpbGl0aWVzIGFyZW4ndCBzZXJpYWxpemF0aW9uIGZvcm1hdCBwcmVmaXhlcyDigJQgZS5nLlxuICogYnl0ZS1zdHJlYW0gd2lyZSBmcmFtaW5nIGlzIGFuIGVudmVsb3BlIGFyb3VuZCBjaHVua3MgcmF0aGVyIHRoYW5cbiAqIGEgY29udGVudCBmb3JtYXQuIEZvciB0aG9zZSwgYWRkIGEgYm9vbGVhbiBmaWVsZCB0byBgUnVuQ2FwYWJpbGl0aWVzYFxuICogYW5kIGFuIGVudHJ5IGluIGBDQVBBQklMSVRZX1ZFUlNJT05fVEFCTEVgIGJlbG93LlxuICpcbiAqICMjIEhpc3RvcnlcbiAqXG4gKiAtIGBlbmNyYCAoQUVTLTI1Ni1HQ00gZW5jcnlwdGlvbik6IGFkZGVkIGluIGA0LjIuMC1iZXRhLjY0YFxuICogICBDb21taXQ6IDc2MThhYzM2IFwiV2lyZSBBRVMtR0NNIGVuY3J5cHRpb24gaW50byBzZXJpYWxpemF0aW9uIGxheWVyICgjMTI1MSlcIlxuICogICBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3dvcmtmbG93L2NvbW1pdC83NjE4YWMzNlxuICogLSBgZnJhbWVkQnl0ZVN0cmVhbXNgICh3aXJlLWxldmVsIGNodW5rIGZyYW1pbmcgZm9yIGJ5dGUgc3RyZWFtcyk6IGFkZGVkIGluIGA1LjAuMC1iZXRhLjE1YFxuICogLSBgZ3ppcGAgKGd6aXAgcGF5bG9hZCBjb21wcmVzc2lvbik6IGFkZGVkIGluIGA1LjAuMC1iZXRhLjE4YFxuICogLSBgenN0ZGAgKHpzdGQgcGF5bG9hZCBjb21wcmVzc2lvbiwgcHJlZmVycmVkIGNvZGVjKTogYWRkZWQgaW4gYDUuMC4wLWJldGEuMThgXG4gKiAgIGFsb25nc2lkZSBnemlwIOKAlCB0aGV5IGNvLXNoaXAsIHNvIGFueSBydW4gdGhhdCBjYW4gcmVhZCBvbmUgY2FuIHJlYWQgYm90aC5cbiAqL1xuXG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQge1xuICBTZXJpYWxpemF0aW9uRm9ybWF0LFxuICB0eXBlIFNlcmlhbGl6YXRpb25Gb3JtYXRUeXBlLFxufSBmcm9tICcuL3NlcmlhbGl6YXRpb24uanMnO1xuXG4vKipcbiAqIENhcGFiaWxpdGllcyBvZiBhIHdvcmtmbG93IHJ1biBiYXNlZCBvbiBpdHMgYEB3b3JrZmxvdy9jb3JlYCB2ZXJzaW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bkNhcGFiaWxpdGllcyB7XG4gIC8qKlxuICAgKiBUaGUgc2V0IG9mIHNlcmlhbGl6YXRpb24gZm9ybWF0IHByZWZpeGVzIHRoYXQgdGhlIHRhcmdldCBydW4gY2FuIGRlY29kZS5cbiAgICogVXNlIGBzdXBwb3J0ZWRGb3JtYXRzLmhhcyhTZXJpYWxpemF0aW9uRm9ybWF0LkVOQ1JZUFRFRClgIHRvIGNoZWNrXG4gICAqIGlmIGVuY3J5cHRpb24gaXMgc3VwcG9ydGVkLCBldGMuXG4gICAqL1xuICBzdXBwb3J0ZWRGb3JtYXRzOiBSZWFkb25seVNldDxTZXJpYWxpemF0aW9uRm9ybWF0VHlwZT47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHRhcmdldCBydW4gY2FuIGRlY29kZSB3aXJlLWZyYW1lZCBieXRlIHN0cmVhbXMuIFdoZW4gdHJ1ZSxcbiAgICogYnl0ZSBzdHJlYW1zIChgdHlwZTogJ2J5dGVzJ2AgUmVhZGFibGVTdHJlYW1zIHBhc3NlZCBhY3Jvc3MgYm91bmRhcmllcylcbiAgICogYXJlIHdyYXBwZWQgaW4gYSBsZW5ndGgtcHJlZml4ZWQgZnJhbWUgZW52ZWxvcGUgb24gdGhlIHdpcmUgc28gdGhlXG4gICAqIHJlYWRlciBjYW4gaWRlbnRpZnkgY2h1bmsgYm91bmRhcmllcyDigJQgd2hpY2ggZW5hYmxlcyBhdXRvLXJlY29ubmVjdFxuICAgKiBvbiB0cmFuc2llbnQgc3RyZWFtIGVycm9ycy4gV2hlbiBmYWxzZSwgYnl0ZSBzdHJlYW1zIGFyZSB3cml0dGVuIGFzXG4gICAqIHJhdyBieXRlcyAodGhlIGxlZ2FjeSBmb3JtYXQpIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgcnVucy5cbiAgICovXG4gIGZyYW1lZEJ5dGVTdHJlYW1zOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1hcHMgc2VyaWFsaXphdGlvbiBmb3JtYXQgaWRlbnRpZmllcnMgdG8gdGhlIG1pbmltdW0gYEB3b3JrZmxvdy9jb3JlYFxuICogdmVyc2lvbiB0aGF0IGludHJvZHVjZWQgc3VwcG9ydCBmb3IgdGhlbS4gRm9ybWF0cyBub3QgbGlzdGVkIGhlcmUgYXJlXG4gKiBhc3N1bWVkIHRvIGJlIHN1cHBvcnRlZCBieSBhbGwgc3BlY1ZlcnNpb24gMiBydW5zIChlLmcuLCBgZGV2bGApLlxuICovXG5jb25zdCBGT1JNQVRfVkVSU0lPTl9UQUJMRTogUmVhZG9ubHlBcnJheTx7XG4gIGZvcm1hdDogU2VyaWFsaXphdGlvbkZvcm1hdFR5cGU7XG4gIG1pblZlcnNpb246IHN0cmluZztcbn0+ID0gW1xuICB7IGZvcm1hdDogU2VyaWFsaXphdGlvbkZvcm1hdC5FTkNSWVBURUQsIG1pblZlcnNpb246ICc0LjIuMC1iZXRhLjY0JyB9LFxuICAvLyBUT0RPKHJlbGVhc2UpOiB2ZXJpZnkgdGhpcyBtYXRjaGVzIHRoZSBhY3R1YWwgdmVyc2lvbiB0aGF0IHNoaXBzIHBheWxvYWRcbiAgLy8gY29tcHJlc3Npb24uIElmIGEgXCJWZXJzaW9uIFBhY2thZ2VzIChiZXRhKVwiIFBSIG1lcmdlcyBiZWZvcmUgdGhpcyBjaGFuZ2UsXG4gIC8vIGJ1bXAgdG8gdGhlIG5leHQgYmV0YS4gQSB0b28tbG93IGN1dG9mZiBtYWtlcyBuZXcgcHJvZHVjZXJzIHdyaXRlXG4gIC8vIGNvbXByZXNzZWQgcGF5bG9hZHMgdG8gY29uc3VtZXJzIHRoYXQgY2Fubm90IGRlY29tcHJlc3MgdGhlbTsgdG9vLWhpZ2hcbiAgLy8gbWVyZWx5IGRlbGF5cyB0aGUgb3B0aW1pemF0aW9uIChzYWZlKS4gZ3ppcCBhbmQgenN0ZCBzaGlwIHRvZ2V0aGVyLCBzb1xuICAvLyB0aGV5IHNoYXJlIGEgbWluIHZlcnNpb24g4oCUIGEgcnVuIHRoYXQgY2FuIHJlYWQgb25lIGNhbiByZWFkIGJvdGguXG4gIHsgZm9ybWF0OiBTZXJpYWxpemF0aW9uRm9ybWF0LkdaSVAsIG1pblZlcnNpb246ICc1LjAuMC1iZXRhLjE4JyB9LFxuICB7IGZvcm1hdDogU2VyaWFsaXphdGlvbkZvcm1hdC5aU1RELCBtaW5WZXJzaW9uOiAnNS4wLjAtYmV0YS4xOCcgfSxcbiAgLy8gRnV0dXJlIGVudHJpZXM6XG4gIC8vIHsgZm9ybWF0OiBTZXJpYWxpemF0aW9uRm9ybWF0LkNCT1IsIG1pblZlcnNpb246ICc1LngueScgfSxcbiAgLy8geyBmb3JtYXQ6IFNlcmlhbGl6YXRpb25Gb3JtYXQuRU5DUllQVEVEX1YyLCBtaW5WZXJzaW9uOiAnNS54LnknIH0sXG5dO1xuXG4vKipcbiAqIE1hcHMgbm9uLWZvcm1hdCBjYXBhYmlsaXR5IGZsYWdzIChib29sZWFucyBvbiBgUnVuQ2FwYWJpbGl0aWVzYCkgdG8gdGhlXG4gKiBtaW5pbXVtIGBAd29ya2Zsb3cvY29yZWAgdmVyc2lvbiB0aGF0IGludHJvZHVjZWQgc3VwcG9ydCBmb3IgdGhlbS5cbiAqL1xuY29uc3QgQ0FQQUJJTElUWV9WRVJTSU9OX1RBQkxFOiBSZWFkb25seUFycmF5PHtcbiAgY2FwYWJpbGl0eToga2V5b2YgT21pdDxSdW5DYXBhYmlsaXRpZXMsICdzdXBwb3J0ZWRGb3JtYXRzJz47XG4gIG1pblZlcnNpb246IHN0cmluZztcbiAgLy8gVE9ETyhyZWxlYXNlKTogdmVyaWZ5IHRoaXMgbWF0Y2hlcyB0aGUgYWN0dWFsIHZlcnNpb24gdGhhdCBzaGlwcyBieXRlLXN0cmVhbVxuICAvLyBmcmFtaW5nLiBJZiBhIFwiVmVyc2lvbiBQYWNrYWdlcyAoYmV0YSlcIiBQUiBtZXJnZXMgYmVmb3JlIHRoaXMgY2hhbmdlLCBidW1wXG4gIC8vIHRvIHRoZSBuZXh0IGJldGEuIEEgdG9vLWxvdyBjdXRvZmYgbWFrZXMgbmV3IHByb2R1Y2VycyB3cml0ZSBmcmFtZWQgYnl0ZXMgdG9cbiAgLy8gY29uc3VtZXJzIHRoYXQgY2Fubm90IHVuZnJhbWUgdGhlbSAoc2lsZW50IGNvcnJ1cHRpb24pOyB0b28taGlnaCBtZXJlbHlcbiAgLy8gZGVsYXlzIHRoZSBvcHRpbWl6YXRpb24gKHNhZmUpLlxufT4gPSBbeyBjYXBhYmlsaXR5OiAnZnJhbWVkQnl0ZVN0cmVhbXMnLCBtaW5WZXJzaW9uOiAnNS4wLjAtYmV0YS4xNScgfV07XG5cbi8qKlxuICogVGhlIHNldCBvZiBmb3JtYXRzIHN1cHBvcnRlZCBieSBhbGwgc3BlY1ZlcnNpb24gMiBydW5zLCByZWdhcmRsZXNzIG9mXG4gKiBgQHdvcmtmbG93L2NvcmVgIHZlcnNpb24uIFRoZXNlIGFyZSB0aGUgYmFzZWxpbmUgZm9ybWF0cyB0aGF0IHdlcmUgcHJlc2VudFxuICogZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHNwZWNWZXJzaW9uIDIgcHJvdG9jb2wuXG4gKi9cbmNvbnN0IEJBU0VMSU5FX0ZPUk1BVFM6IFJlYWRvbmx5U2V0PFNlcmlhbGl6YXRpb25Gb3JtYXRUeXBlPiA9IG5ldyBTZXQoW1xuICBTZXJpYWxpemF0aW9uRm9ybWF0LkRFVkFMVUVfVjEsXG5dKTtcblxuLyoqXG4gKiBMb29rIHVwIHdoYXQgc2VyaWFsaXphdGlvbiBjYXBhYmlsaXRpZXMgYSB3b3JrZmxvdyBydW4gc3VwcG9ydHMgYmFzZWQgb25cbiAqIGl0cyBgQHdvcmtmbG93L2NvcmVgIHZlcnNpb24gc3RyaW5nIChmcm9tIGBleGVjdXRpb25Db250ZXh0LndvcmtmbG93Q29yZVZlcnNpb25gKS5cbiAqXG4gKiBXaGVuIHRoZSB2ZXJzaW9uIGlzIGB1bmRlZmluZWRgLCBub3QgYSBzdHJpbmcsIG9yIG5vdCBhIHZhbGlkIHNlbXZlciBzdHJpbmdcbiAqIChlLmcuIHZlcnkgb2xkIHJ1bnMgdGhhdCBwcmVkYXRlIHRoZSBmaWVsZCwgb3IgY29ycnVwdGVkIG1ldGFkYXRhKSxcbiAqIHdlIGFzc3VtZSB0aGUgbW9zdCBjb25zZXJ2YXRpdmUgY2FwYWJpbGl0aWVzIChiYXNlbGluZSBmb3JtYXRzIG9ubHksXG4gKiBub24tZm9ybWF0IGNhcGFiaWxpdGllcyBhbGwgYGZhbHNlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSdW5DYXBhYmlsaXRpZXMoXG4gIHdvcmtmbG93Q29yZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogUnVuQ2FwYWJpbGl0aWVzIHtcbiAgaWYgKCF3b3JrZmxvd0NvcmVWZXJzaW9uIHx8ICFzZW12ZXIudmFsaWQod29ya2Zsb3dDb3JlVmVyc2lvbikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3VwcG9ydGVkRm9ybWF0czogQkFTRUxJTkVfRk9STUFUUyxcbiAgICAgIGZyYW1lZEJ5dGVTdHJlYW1zOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgZm9ybWF0cyA9IG5ldyBTZXQ8U2VyaWFsaXphdGlvbkZvcm1hdFR5cGU+KEJBU0VMSU5FX0ZPUk1BVFMpO1xuXG4gIGZvciAoY29uc3QgeyBmb3JtYXQsIG1pblZlcnNpb24gfSBvZiBGT1JNQVRfVkVSU0lPTl9UQUJMRSkge1xuICAgIGlmIChzZW12ZXIuZ3RlKHdvcmtmbG93Q29yZVZlcnNpb24sIG1pblZlcnNpb24pKSB7XG4gICAgICBmb3JtYXRzLmFkZChmb3JtYXQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogUnVuQ2FwYWJpbGl0aWVzID0ge1xuICAgIHN1cHBvcnRlZEZvcm1hdHM6IGZvcm1hdHMsXG4gICAgZnJhbWVkQnl0ZVN0cmVhbXM6IGZhbHNlLFxuICB9O1xuXG4gIGZvciAoY29uc3QgeyBjYXBhYmlsaXR5LCBtaW5WZXJzaW9uIH0gb2YgQ0FQQUJJTElUWV9WRVJTSU9OX1RBQkxFKSB7XG4gICAgaWYgKHNlbXZlci5ndGUod29ya2Zsb3dDb3JlVmVyc2lvbiwgbWluVmVyc2lvbikpIHtcbiAgICAgIHJlc3VsdFtjYXBhYmlsaXR5XSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V8-only (Node, Bun, Chrome, Deno). Rewrites `err.stack` so the top frame is
|
|
3
|
+
* the caller of `stackStartFn` instead of the framework function that threw.
|
|
4
|
+
* Without this, terminal overlays (Next.js, Turbopack, VS Code) render the
|
|
5
|
+
* code frame at our `throw` site inside `@workflow/core`, which is useless
|
|
6
|
+
* to the user.
|
|
7
|
+
*
|
|
8
|
+
* No-op on engines that don't expose `Error.captureStackTrace` — the stack
|
|
9
|
+
* degrades gracefully to the default behavior.
|
|
10
|
+
*
|
|
11
|
+
* Kept in its own tiny module so callers that can't participate in the
|
|
12
|
+
* `context-errors.ts` ↔ `workflow/get-workflow-metadata.ts` import cycle can
|
|
13
|
+
* still pull in the helper without pulling in the full error classes.
|
|
14
|
+
*/
|
|
15
|
+
export declare function redirectStackToCaller(err: Error, stackStartFn: Function): void;
|
|
16
|
+
//# sourceMappingURL=capture-stack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-stack.d.ts","sourceRoot":"","sources":["../src/capture-stack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,KAAK,EAEV,YAAY,EAAE,QAAQ,GACrB,IAAI,CAON"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V8-only (Node, Bun, Chrome, Deno). Rewrites `err.stack` so the top frame is
|
|
3
|
+
* the caller of `stackStartFn` instead of the framework function that threw.
|
|
4
|
+
* Without this, terminal overlays (Next.js, Turbopack, VS Code) render the
|
|
5
|
+
* code frame at our `throw` site inside `@workflow/core`, which is useless
|
|
6
|
+
* to the user.
|
|
7
|
+
*
|
|
8
|
+
* No-op on engines that don't expose `Error.captureStackTrace` — the stack
|
|
9
|
+
* degrades gracefully to the default behavior.
|
|
10
|
+
*
|
|
11
|
+
* Kept in its own tiny module so callers that can't participate in the
|
|
12
|
+
* `context-errors.ts` ↔ `workflow/get-workflow-metadata.ts` import cycle can
|
|
13
|
+
* still pull in the helper without pulling in the full error classes.
|
|
14
|
+
*/
|
|
15
|
+
export function redirectStackToCaller(err,
|
|
16
|
+
// biome-ignore lint/complexity/noBannedTypes: signature matches Error.captureStackTrace
|
|
17
|
+
stackStartFn) {
|
|
18
|
+
const capture = Error.captureStackTrace;
|
|
19
|
+
capture?.(err, stackStartFn);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdHVyZS1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jYXB0dXJlLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLEdBQVU7QUFDVix3RkFBd0Y7QUFDeEYsWUFBc0I7SUFFdEIsTUFBTSxPQUFPLEdBQ1gsS0FHRCxDQUFDLGlCQUFpQixDQUFDO0lBQ3BCLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBWOC1vbmx5IChOb2RlLCBCdW4sIENocm9tZSwgRGVubykuIFJld3JpdGVzIGBlcnIuc3RhY2tgIHNvIHRoZSB0b3AgZnJhbWUgaXNcbiAqIHRoZSBjYWxsZXIgb2YgYHN0YWNrU3RhcnRGbmAgaW5zdGVhZCBvZiB0aGUgZnJhbWV3b3JrIGZ1bmN0aW9uIHRoYXQgdGhyZXcuXG4gKiBXaXRob3V0IHRoaXMsIHRlcm1pbmFsIG92ZXJsYXlzIChOZXh0LmpzLCBUdXJib3BhY2ssIFZTIENvZGUpIHJlbmRlciB0aGVcbiAqIGNvZGUgZnJhbWUgYXQgb3VyIGB0aHJvd2Agc2l0ZSBpbnNpZGUgYEB3b3JrZmxvdy9jb3JlYCwgd2hpY2ggaXMgdXNlbGVzc1xuICogdG8gdGhlIHVzZXIuXG4gKlxuICogTm8tb3Agb24gZW5naW5lcyB0aGF0IGRvbid0IGV4cG9zZSBgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2VgIOKAlCB0aGUgc3RhY2tcbiAqIGRlZ3JhZGVzIGdyYWNlZnVsbHkgdG8gdGhlIGRlZmF1bHQgYmVoYXZpb3IuXG4gKlxuICogS2VwdCBpbiBpdHMgb3duIHRpbnkgbW9kdWxlIHNvIGNhbGxlcnMgdGhhdCBjYW4ndCBwYXJ0aWNpcGF0ZSBpbiB0aGVcbiAqIGBjb250ZXh0LWVycm9ycy50c2Ag4oaUIGB3b3JrZmxvdy9nZXQtd29ya2Zsb3ctbWV0YWRhdGEudHNgIGltcG9ydCBjeWNsZSBjYW5cbiAqIHN0aWxsIHB1bGwgaW4gdGhlIGhlbHBlciB3aXRob3V0IHB1bGxpbmcgaW4gdGhlIGZ1bGwgZXJyb3IgY2xhc3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZGlyZWN0U3RhY2tUb0NhbGxlcihcbiAgZXJyOiBFcnJvcixcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0Jhbm5lZFR5cGVzOiBzaWduYXR1cmUgbWF0Y2hlcyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZVxuICBzdGFja1N0YXJ0Rm46IEZ1bmN0aW9uXG4pOiB2b2lkIHtcbiAgY29uc3QgY2FwdHVyZSA9IChcbiAgICBFcnJvciBhcyB1bmtub3duIGFzIHtcbiAgICAgIGNhcHR1cmVTdGFja1RyYWNlPzogKHRhcmdldDogb2JqZWN0LCBmbjogRnVuY3Rpb24pID0+IHZvaWQ7XG4gICAgfVxuICApLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlPy4oZXJyLCBzdGFja1N0YXJ0Rm4pO1xufVxuIl19
|
|
@@ -18,6 +18,38 @@
|
|
|
18
18
|
* when serializing instances (e.g., step return values).
|
|
19
19
|
*/
|
|
20
20
|
export declare function registerSerializationClass(classId: string, cls: Function): void;
|
|
21
|
+
/**
|
|
22
|
+
* Stable, well-known registry id for the SDK's `Run` class.
|
|
23
|
+
*
|
|
24
|
+
* The SWC plugin auto-registers `Run` under a *path-derived* id (e.g.
|
|
25
|
+
* `class//./node_modules/@workflow/core/dist/runtime/run//Run`), which
|
|
26
|
+
* varies with the app's dependency layout and bundler. Host-side code
|
|
27
|
+
* that needs to construct `Run` instances inside the workflow VM (e.g.
|
|
28
|
+
* the hook event consumer resolving `hook.getConflict()`) cannot know
|
|
29
|
+
* that id statically, so the workflow-mode `create-hook` module also
|
|
30
|
+
* aliases the bundle's `Run` under this stable id at evaluation time.
|
|
31
|
+
*
|
|
32
|
+
* The `workflow` pseudo-path cannot collide with plugin-derived ids,
|
|
33
|
+
* which always use real relative module paths (`./…` / `../…`).
|
|
34
|
+
*/
|
|
35
|
+
export declare const RUN_CLASS_ID = "class//workflow//Run";
|
|
36
|
+
/**
|
|
37
|
+
* Register an additional registry id for a class without touching its
|
|
38
|
+
* `classId` property.
|
|
39
|
+
*
|
|
40
|
+
* Unlike {@link registerSerializationClass}, this is safe to call for a
|
|
41
|
+
* class the SWC plugin has already registered: the plugin's inlined IIFE
|
|
42
|
+
* defines `classId` as non-configurable, so a second `defineProperty`
|
|
43
|
+
* would throw. Aliasing only adds a registry entry — the class keeps
|
|
44
|
+
* serializing under its primary (path-derived) id, while lookups succeed
|
|
45
|
+
* under both.
|
|
46
|
+
*
|
|
47
|
+
* Registration is per-global by construction: evaluated inside the
|
|
48
|
+
* workflow VM it registers the VM's compiled class on the VM's registry;
|
|
49
|
+
* evaluated on the host it registers the host class on the host's
|
|
50
|
+
* registry. Each context resolves its own correct variant.
|
|
51
|
+
*/
|
|
52
|
+
export declare function aliasSerializationClass(classId: string, cls: Function, global?: Record<string, any>): void;
|
|
21
53
|
/**
|
|
22
54
|
* Find a registered class constructor by ID (used during deserialization)
|
|
23
55
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-serialization.d.ts","sourceRoot":"","sources":["../src/class-serialization.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH;;;;;;;;;;;GAWG;AAEH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,QASxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAE1B,QAAQ,GAAG,SAAS,CAEtB"}
|
|
1
|
+
{"version":3,"file":"class-serialization.d.ts","sourceRoot":"","sources":["../src/class-serialization.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH;;;;;;;;;;;GAWG;AAEH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,QASxE;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,yBAAyB,CAAC;AAEnD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EAEf,GAAG,EAAE,QAAQ,EACb,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAc,QAGzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAE1B,QAAQ,GAAG,SAAS,CAEtB"}
|
|
@@ -44,6 +44,42 @@ export function registerSerializationClass(classId, cls) {
|
|
|
44
44
|
configurable: false,
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Stable, well-known registry id for the SDK's `Run` class.
|
|
49
|
+
*
|
|
50
|
+
* The SWC plugin auto-registers `Run` under a *path-derived* id (e.g.
|
|
51
|
+
* `class//./node_modules/@workflow/core/dist/runtime/run//Run`), which
|
|
52
|
+
* varies with the app's dependency layout and bundler. Host-side code
|
|
53
|
+
* that needs to construct `Run` instances inside the workflow VM (e.g.
|
|
54
|
+
* the hook event consumer resolving `hook.getConflict()`) cannot know
|
|
55
|
+
* that id statically, so the workflow-mode `create-hook` module also
|
|
56
|
+
* aliases the bundle's `Run` under this stable id at evaluation time.
|
|
57
|
+
*
|
|
58
|
+
* The `workflow` pseudo-path cannot collide with plugin-derived ids,
|
|
59
|
+
* which always use real relative module paths (`./…` / `../…`).
|
|
60
|
+
*/
|
|
61
|
+
export const RUN_CLASS_ID = 'class//workflow//Run';
|
|
62
|
+
/**
|
|
63
|
+
* Register an additional registry id for a class without touching its
|
|
64
|
+
* `classId` property.
|
|
65
|
+
*
|
|
66
|
+
* Unlike {@link registerSerializationClass}, this is safe to call for a
|
|
67
|
+
* class the SWC plugin has already registered: the plugin's inlined IIFE
|
|
68
|
+
* defines `classId` as non-configurable, so a second `defineProperty`
|
|
69
|
+
* would throw. Aliasing only adds a registry entry — the class keeps
|
|
70
|
+
* serializing under its primary (path-derived) id, while lookups succeed
|
|
71
|
+
* under both.
|
|
72
|
+
*
|
|
73
|
+
* Registration is per-global by construction: evaluated inside the
|
|
74
|
+
* workflow VM it registers the VM's compiled class on the VM's registry;
|
|
75
|
+
* evaluated on the host it registers the host class on the host's
|
|
76
|
+
* registry. Each context resolves its own correct variant.
|
|
77
|
+
*/
|
|
78
|
+
export function aliasSerializationClass(classId,
|
|
79
|
+
// biome-ignore lint/complexity/noBannedTypes: We need to use Function to represent class constructors
|
|
80
|
+
cls, global = globalThis) {
|
|
81
|
+
getRegistry(global).set(classId, cls);
|
|
82
|
+
}
|
|
47
83
|
/**
|
|
48
84
|
* Find a registered class constructor by ID (used during deserialization)
|
|
49
85
|
*
|
|
@@ -58,4 +94,4 @@ export function getSerializationClass(classId, global
|
|
|
58
94
|
) {
|
|
59
95
|
return getRegistry(global).get(classId);
|
|
60
96
|
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Mtc2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGFzcy1zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUt2RDs7Ozs7R0FLRztBQUNILFNBQVMsV0FBVyxDQUFDLFNBQThCLFVBQVU7SUFDM0QsTUFBTSxDQUFDLEdBQUcsTUFBYSxDQUFDO0lBQ3hCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyx1QkFBdUIsQ0FBOEIsQ0FBQztJQUN2RSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDeEMsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILHNHQUFzRztBQUN0RyxNQUFNLFVBQVUsMEJBQTBCLENBQUMsT0FBZSxFQUFFLEdBQWE7SUFDdkUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoQyw2Q0FBNkM7SUFDN0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFO1FBQ3BDLEtBQUssRUFBRSxPQUFPO1FBQ2QsUUFBUSxFQUFFLEtBQUs7UUFDZixVQUFVLEVBQUUsS0FBSztRQUNqQixZQUFZLEVBQUUsS0FBSztLQUNwQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxzQkFBc0IsQ0FBQztBQUVuRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE9BQWU7QUFDZixzR0FBc0c7QUFDdEcsR0FBYSxFQUNiLFNBQThCLFVBQVU7SUFFeEMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxPQUFlLEVBQ2YsTUFBMkI7QUFDM0Isc0dBQXNHOztJQUV0RyxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhc3Mgc2VyaWFsaXphdGlvbiB1dGlsaXRpZXMuXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgc2VwYXJhdGUgZnJvbSBwcml2YXRlLnRzIHRvIGF2b2lkIHB1bGxpbmcgaW4gTm9kZS5qcy1vbmx5XG4gKiBkZXBlbmRlbmNpZXMgKGxpa2UgYXN5bmNfaG9va3MgdmlhIGdldC1jbG9zdXJlLXZhcnMudHMpIHdoZW4gdXNlZCBpblxuICogd29ya2Zsb3cgYnVuZGxlcy5cbiAqL1xuXG5pbXBvcnQgeyBXT1JLRkxPV19DTEFTU19SRUdJU1RSWSB9IGZyb20gJy4vc3ltYm9scy5qcyc7XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9CYW5uZWRUeXBlczogV2UgbmVlZCB0byB1c2UgRnVuY3Rpb24gdG8gcmVwcmVzZW50IGNsYXNzIGNvbnN0cnVjdG9yc1xudHlwZSBDbGFzc1JlZ2lzdHJ5ID0gTWFwPHN0cmluZywgRnVuY3Rpb24+O1xuXG4vKipcbiAqIEdldCBvciBjcmVhdGUgdGhlIGNsYXNzIHJlZ2lzdHJ5IG9uIHRoZSBnaXZlbiBnbG9iYWwgb2JqZWN0LlxuICogVGhpcyB3b3JrcyBpc29tb3JwaGljYWxseSBpbiBib3RoIHN0ZXAgbW9kZSAobWFpbiBjb250ZXh0KSBhbmQgd29ya2Zsb3cgbW9kZSAoVk0gY29udGV4dCkuXG4gKlxuICogQHBhcmFtIGdsb2JhbCAtIFRoZSBnbG9iYWwgb2JqZWN0IHRvIHVzZS4gRGVmYXVsdHMgdG8gZ2xvYmFsVGhpcywgYnV0IGNhbiBiZSBhIFZNJ3MgZ2xvYmFsLlxuICovXG5mdW5jdGlvbiBnZXRSZWdpc3RyeShnbG9iYWw6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBnbG9iYWxUaGlzKTogQ2xhc3NSZWdpc3RyeSB7XG4gIGNvbnN0IGcgPSBnbG9iYWwgYXMgYW55O1xuICBsZXQgcmVnaXN0cnkgPSBnW1dPUktGTE9XX0NMQVNTX1JFR0lTVFJZXSBhcyBDbGFzc1JlZ2lzdHJ5IHwgdW5kZWZpbmVkO1xuICBpZiAoIXJlZ2lzdHJ5KSB7XG4gICAgcmVnaXN0cnkgPSBuZXcgTWFwKCk7XG4gICAgZ1tXT1JLRkxPV19DTEFTU19SRUdJU1RSWV0gPSByZWdpc3RyeTtcbiAgfVxuICByZXR1cm4gcmVnaXN0cnk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBjbGFzcyBjb25zdHJ1Y3RvciBmb3Igc2VyaWFsaXphdGlvbi5cbiAqIFRoaXMgYWxsb3dzIGNsYXNzIGNvbnN0cnVjdG9ycyB0byBiZSBkZXNlcmlhbGl6ZWQgYnkgbG9va2luZyB1cCB0aGUgY2xhc3NJZC5cbiAqXG4gKiBOb3RlOiBUaGUgU1dDIHBsdWdpbiBub3cgaW5saW5lcyBlcXVpdmFsZW50IHJlZ2lzdHJhdGlvbiBsb2dpYyBhcyBhXG4gKiBzZWxmLWNvbnRhaW5lZCBJSUZFICh1c2luZyB0aGUgc2FtZSBnbG9iYWxUaGlzIFN5bWJvbC1rZXllZCByZWdpc3RyeSksXG4gKiBzbyB0aGlzIGZ1bmN0aW9uIGlzIG5vIGxvbmdlciBpbXBvcnRlZCBieSBnZW5lcmF0ZWQgY29kZS4gSXQgaXMgcmV0YWluZWRcbiAqIGZvciBwcm9ncmFtbWF0aWMgdXNlIGFuZCB0ZXN0aW5nLlxuICpcbiAqIEFsc28gc2V0cyB0aGUgYGNsYXNzSWRgIHByb3BlcnR5IG9uIHRoZSBjbGFzcyBzbyB0aGUgc2VyaWFsaXplciBjYW4gZmluZCBpdFxuICogd2hlbiBzZXJpYWxpemluZyBpbnN0YW5jZXMgKGUuZy4sIHN0ZXAgcmV0dXJuIHZhbHVlcykuXG4gKi9cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9CYW5uZWRUeXBlczogV2UgbmVlZCB0byB1c2UgRnVuY3Rpb24gdG8gcmVwcmVzZW50IGNsYXNzIGNvbnN0cnVjdG9yc1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyU2VyaWFsaXphdGlvbkNsYXNzKGNsYXNzSWQ6IHN0cmluZywgY2xzOiBGdW5jdGlvbikge1xuICBnZXRSZWdpc3RyeSgpLnNldChjbGFzc0lkLCBjbHMpO1xuICAvLyBTZXQgY2xhc3NJZCBvbiB0aGUgY2xhc3MgZm9yIHNlcmlhbGl6YXRpb25cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNscywgJ2NsYXNzSWQnLCB7XG4gICAgdmFsdWU6IGNsYXNzSWQsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gIH0pO1xufVxuXG4vKipcbiAqIFN0YWJsZSwgd2VsbC1rbm93biByZWdpc3RyeSBpZCBmb3IgdGhlIFNESydzIGBSdW5gIGNsYXNzLlxuICpcbiAqIFRoZSBTV0MgcGx1Z2luIGF1dG8tcmVnaXN0ZXJzIGBSdW5gIHVuZGVyIGEgKnBhdGgtZGVyaXZlZCogaWQgKGUuZy5cbiAqIGBjbGFzcy8vLi9ub2RlX21vZHVsZXMvQHdvcmtmbG93L2NvcmUvZGlzdC9ydW50aW1lL3J1bi8vUnVuYCksIHdoaWNoXG4gKiB2YXJpZXMgd2l0aCB0aGUgYXBwJ3MgZGVwZW5kZW5jeSBsYXlvdXQgYW5kIGJ1bmRsZXIuIEhvc3Qtc2lkZSBjb2RlXG4gKiB0aGF0IG5lZWRzIHRvIGNvbnN0cnVjdCBgUnVuYCBpbnN0YW5jZXMgaW5zaWRlIHRoZSB3b3JrZmxvdyBWTSAoZS5nLlxuICogdGhlIGhvb2sgZXZlbnQgY29uc3VtZXIgcmVzb2x2aW5nIGBob29rLmdldENvbmZsaWN0KClgKSBjYW5ub3Qga25vd1xuICogdGhhdCBpZCBzdGF0aWNhbGx5LCBzbyB0aGUgd29ya2Zsb3ctbW9kZSBgY3JlYXRlLWhvb2tgIG1vZHVsZSBhbHNvXG4gKiBhbGlhc2VzIHRoZSBidW5kbGUncyBgUnVuYCB1bmRlciB0aGlzIHN0YWJsZSBpZCBhdCBldmFsdWF0aW9uIHRpbWUuXG4gKlxuICogVGhlIGB3b3JrZmxvd2AgcHNldWRvLXBhdGggY2Fubm90IGNvbGxpZGUgd2l0aCBwbHVnaW4tZGVyaXZlZCBpZHMsXG4gKiB3aGljaCBhbHdheXMgdXNlIHJlYWwgcmVsYXRpdmUgbW9kdWxlIHBhdGhzIChgLi/igKZgIC8gYC4uL+KApmApLlxuICovXG5leHBvcnQgY29uc3QgUlVOX0NMQVNTX0lEID0gJ2NsYXNzLy93b3JrZmxvdy8vUnVuJztcblxuLyoqXG4gKiBSZWdpc3RlciBhbiBhZGRpdGlvbmFsIHJlZ2lzdHJ5IGlkIGZvciBhIGNsYXNzIHdpdGhvdXQgdG91Y2hpbmcgaXRzXG4gKiBgY2xhc3NJZGAgcHJvcGVydHkuXG4gKlxuICogVW5saWtlIHtAbGluayByZWdpc3RlclNlcmlhbGl6YXRpb25DbGFzc30sIHRoaXMgaXMgc2FmZSB0byBjYWxsIGZvciBhXG4gKiBjbGFzcyB0aGUgU1dDIHBsdWdpbiBoYXMgYWxyZWFkeSByZWdpc3RlcmVkOiB0aGUgcGx1Z2luJ3MgaW5saW5lZCBJSUZFXG4gKiBkZWZpbmVzIGBjbGFzc0lkYCBhcyBub24tY29uZmlndXJhYmxlLCBzbyBhIHNlY29uZCBgZGVmaW5lUHJvcGVydHlgXG4gKiB3b3VsZCB0aHJvdy4gQWxpYXNpbmcgb25seSBhZGRzIGEgcmVnaXN0cnkgZW50cnkg4oCUIHRoZSBjbGFzcyBrZWVwc1xuICogc2VyaWFsaXppbmcgdW5kZXIgaXRzIHByaW1hcnkgKHBhdGgtZGVyaXZlZCkgaWQsIHdoaWxlIGxvb2t1cHMgc3VjY2VlZFxuICogdW5kZXIgYm90aC5cbiAqXG4gKiBSZWdpc3RyYXRpb24gaXMgcGVyLWdsb2JhbCBieSBjb25zdHJ1Y3Rpb246IGV2YWx1YXRlZCBpbnNpZGUgdGhlXG4gKiB3b3JrZmxvdyBWTSBpdCByZWdpc3RlcnMgdGhlIFZNJ3MgY29tcGlsZWQgY2xhc3Mgb24gdGhlIFZNJ3MgcmVnaXN0cnk7XG4gKiBldmFsdWF0ZWQgb24gdGhlIGhvc3QgaXQgcmVnaXN0ZXJzIHRoZSBob3N0IGNsYXNzIG9uIHRoZSBob3N0J3NcbiAqIHJlZ2lzdHJ5LiBFYWNoIGNvbnRleHQgcmVzb2x2ZXMgaXRzIG93biBjb3JyZWN0IHZhcmlhbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGlhc1NlcmlhbGl6YXRpb25DbGFzcyhcbiAgY2xhc3NJZDogc3RyaW5nLFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vQmFubmVkVHlwZXM6IFdlIG5lZWQgdG8gdXNlIEZ1bmN0aW9uIHRvIHJlcHJlc2VudCBjbGFzcyBjb25zdHJ1Y3RvcnNcbiAgY2xzOiBGdW5jdGlvbixcbiAgZ2xvYmFsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gZ2xvYmFsVGhpc1xuKSB7XG4gIGdldFJlZ2lzdHJ5KGdsb2JhbCkuc2V0KGNsYXNzSWQsIGNscyk7XG59XG5cbi8qKlxuICogRmluZCBhIHJlZ2lzdGVyZWQgY2xhc3MgY29uc3RydWN0b3IgYnkgSUQgKHVzZWQgZHVyaW5nIGRlc2VyaWFsaXphdGlvbilcbiAqXG4gKiBAcGFyYW0gY2xhc3NJZCAtIFRoZSBjbGFzcyBJRCB0byBsb29rIHVwXG4gKiBAcGFyYW0gZ2xvYmFsIC0gVGhlIGdsb2JhbCBvYmplY3QgdG8gY2hlY2suIFRoaXMgZW5zdXJlcyB3b3JrZmxvdyBjb2RlIHJ1bm5pbmdcbiAqICAgICAgICAgICAgICAgICBpbiBhIFZNIG9ubHkgYWNjZXNzZXMgY2xhc3NlcyByZWdpc3RlcmVkIG9uIHRoZSBWTSdzIGdsb2JhbCxcbiAqICAgICAgICAgICAgICAgICBtYXRjaGluZyBwcm9kdWN0aW9uIHNlcnZlcmxlc3MgYmVoYXZpb3Igd2hlcmUgd29ya2Zsb3cgY29kZVxuICogICAgICAgICAgICAgICAgIHJ1bnMgaW4gaXNvbGF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VyaWFsaXphdGlvbkNsYXNzKFxuICBjbGFzc0lkOiBzdHJpbmcsXG4gIGdsb2JhbDogUmVjb3JkPHN0cmluZywgYW55PlxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vQmFubmVkVHlwZXM6IFdlIG5lZWQgdG8gdXNlIEZ1bmN0aW9uIHRvIHJlcHJlc2VudCBjbGFzcyBjb25zdHJ1Y3RvcnNcbik6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldFJlZ2lzdHJ5KGdsb2JhbCkuZ2V0KGNsYXNzSWQpO1xufVxuIl19
|
package/dist/classify-error.d.ts
CHANGED
|
@@ -1,12 +1,35 @@
|
|
|
1
|
-
import { type RunErrorCode } from '@workflow/errors';
|
|
1
|
+
import { type RunErrorCode, WorkflowWorldError } from '@workflow/errors';
|
|
2
2
|
/**
|
|
3
3
|
* Classify an error that caused a workflow run to fail.
|
|
4
4
|
*
|
|
5
5
|
* After the structural separation of infrastructure vs user code error
|
|
6
6
|
* handling, the only errors that reach the `run_failed` try/catch are:
|
|
7
7
|
* - User code errors (throws from workflow functions, propagated step failures)
|
|
8
|
-
* - WorkflowRuntimeError and subclasses (
|
|
9
|
-
*
|
|
8
|
+
* - WorkflowRuntimeError and subclasses (missing timestamps, workflow/step
|
|
9
|
+
* not registered, corrupted event log, etc.)
|
|
10
|
+
*
|
|
11
|
+
* Uses each subclass's `.is()` static (a name-based duck check) instead of
|
|
12
|
+
* a single `instanceof` check because workflows execute in a separate
|
|
13
|
+
* `vm` realm: the VM-context `WorkflowRuntimeError` and the host-context
|
|
14
|
+
* one are distinct classes, so `instanceof` returns `false` for any error
|
|
15
|
+
* thrown inside the workflow VM and we'd misclassify genuine runtime
|
|
16
|
+
* errors as user errors.
|
|
17
|
+
*/
|
|
18
|
+
export declare function isWorldContractError(err: unknown): err is WorkflowWorldError;
|
|
19
|
+
/**
|
|
20
|
+
* True when an error from a world (workflow-server) call is a transient
|
|
21
|
+
* infrastructure failure that should be retried by redelivering the queue
|
|
22
|
+
* message, rather than failing the run. A fresh invocation will likely
|
|
23
|
+
* succeed once the backend (or the firewall in front of it) recovers.
|
|
24
|
+
*
|
|
25
|
+
* - `ThrottleError` (429): rate limited / load shed
|
|
26
|
+
* - `WorkflowWorldError` with `status >= 500`: server-side error
|
|
27
|
+
* - `WorkflowWorldError` with a retryable transport `code` (`TRANSPORT` /
|
|
28
|
+
* `TIMEOUT`): the request never produced a usable response
|
|
29
|
+
*
|
|
30
|
+
* Uses `.is()` name-based duck checks (not `instanceof`) for the same
|
|
31
|
+
* cross-`vm`-realm reason described on `classifyRunError`.
|
|
10
32
|
*/
|
|
33
|
+
export declare function isRetryableWorldError(err: unknown): boolean;
|
|
11
34
|
export declare function classifyRunError(err: unknown): RunErrorCode;
|
|
12
35
|
//# sourceMappingURL=classify-error.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classify-error.d.ts","sourceRoot":"","sources":["../src/classify-error.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"classify-error.d.ts","sourceRoot":"","sources":["../src/classify-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,YAAY,EAMjB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAsC1B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,kBAAkB,CAe5E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAW3D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CA0B3D"}
|
package/dist/classify-error.js
CHANGED
|
@@ -1,17 +1,114 @@
|
|
|
1
|
-
import { RUN_ERROR_CODES, WorkflowRuntimeError, } from '@workflow/errors';
|
|
1
|
+
import { CorruptedEventLogError, ReplayDivergenceError, RUN_ERROR_CODES, RuntimeDecryptionError, StepNotRegisteredError, ThrottleError, WorkflowNotRegisteredError, WorkflowRuntimeError, WorkflowWorldError, } from '@workflow/errors';
|
|
2
|
+
const WORLD_CONTRACT_ERROR_CODES = new Set([
|
|
3
|
+
'PARSE_ERROR',
|
|
4
|
+
'SCHEMA_VALIDATION',
|
|
5
|
+
RUN_ERROR_CODES.WORLD_CONTRACT_ERROR,
|
|
6
|
+
]);
|
|
7
|
+
/**
|
|
8
|
+
* `WorkflowWorldError.code` values that mark a transient transport failure
|
|
9
|
+
* (set by world-vercel's HTTP client): `TRANSPORT` covers an exhausted
|
|
10
|
+
* RetryAgent (`UND_ERR_REQ_RETRY` — e.g. the firewall in front of
|
|
11
|
+
* workflow-server shedding load with 429/503), a dropped socket, or a
|
|
12
|
+
* connect/DNS failure; `TIMEOUT` covers a request that exceeded the client
|
|
13
|
+
* timeout. Both are infrastructure failures a fresh invocation can recover
|
|
14
|
+
* from. Kept distinct from `WORLD_CONTRACT_ERROR_CODES` so a transport blip is
|
|
15
|
+
* never misclassified as the server returning a malformed response.
|
|
16
|
+
*/
|
|
17
|
+
const RETRYABLE_WORLD_ERROR_CODES = new Set(['TRANSPORT', 'TIMEOUT']);
|
|
18
|
+
/**
|
|
19
|
+
* Set of error names that should classify as generic `RUNTIME_ERROR`. Each
|
|
20
|
+
* `*.is()` static does a name-based duck check, so subclassing alone is
|
|
21
|
+
* not enough — we have to enumerate every concrete subclass we want to
|
|
22
|
+
* recognize. Keep in sync with the `WorkflowRuntimeError` class hierarchy
|
|
23
|
+
* in `@workflow/errors`.
|
|
24
|
+
*/
|
|
25
|
+
const RUNTIME_ERROR_CHECKS = [
|
|
26
|
+
WorkflowRuntimeError.is,
|
|
27
|
+
StepNotRegisteredError.is,
|
|
28
|
+
WorkflowNotRegisteredError.is,
|
|
29
|
+
// SDK-level encryption failures (most notably AES-GCM auth-tag
|
|
30
|
+
// mismatches surfacing as a native `OperationError` from
|
|
31
|
+
// `AESCipherJob.onDone`) are wrapped in `RuntimeDecryptionError` at
|
|
32
|
+
// the encryption module boundary.
|
|
33
|
+
RuntimeDecryptionError.is,
|
|
34
|
+
];
|
|
2
35
|
/**
|
|
3
36
|
* Classify an error that caused a workflow run to fail.
|
|
4
37
|
*
|
|
5
38
|
* After the structural separation of infrastructure vs user code error
|
|
6
39
|
* handling, the only errors that reach the `run_failed` try/catch are:
|
|
7
40
|
* - User code errors (throws from workflow functions, propagated step failures)
|
|
8
|
-
* - WorkflowRuntimeError and subclasses (
|
|
9
|
-
*
|
|
41
|
+
* - WorkflowRuntimeError and subclasses (missing timestamps, workflow/step
|
|
42
|
+
* not registered, corrupted event log, etc.)
|
|
43
|
+
*
|
|
44
|
+
* Uses each subclass's `.is()` static (a name-based duck check) instead of
|
|
45
|
+
* a single `instanceof` check because workflows execute in a separate
|
|
46
|
+
* `vm` realm: the VM-context `WorkflowRuntimeError` and the host-context
|
|
47
|
+
* one are distinct classes, so `instanceof` returns `false` for any error
|
|
48
|
+
* thrown inside the workflow VM and we'd misclassify genuine runtime
|
|
49
|
+
* errors as user errors.
|
|
50
|
+
*/
|
|
51
|
+
export function isWorldContractError(err) {
|
|
52
|
+
if (!WorkflowWorldError.is(err) || err.status !== undefined) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
const cause = 'cause' in err ? err.cause : undefined;
|
|
56
|
+
return ((err.code !== undefined && WORLD_CONTRACT_ERROR_CODES.has(err.code)) ||
|
|
57
|
+
err.message.startsWith('Failed to parse response body for ') ||
|
|
58
|
+
err.message.startsWith('Schema validation failed for ') ||
|
|
59
|
+
(typeof cause === 'object' &&
|
|
60
|
+
cause !== null &&
|
|
61
|
+
'name' in cause &&
|
|
62
|
+
cause.name === 'ZodError'));
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* True when an error from a world (workflow-server) call is a transient
|
|
66
|
+
* infrastructure failure that should be retried by redelivering the queue
|
|
67
|
+
* message, rather than failing the run. A fresh invocation will likely
|
|
68
|
+
* succeed once the backend (or the firewall in front of it) recovers.
|
|
69
|
+
*
|
|
70
|
+
* - `ThrottleError` (429): rate limited / load shed
|
|
71
|
+
* - `WorkflowWorldError` with `status >= 500`: server-side error
|
|
72
|
+
* - `WorkflowWorldError` with a retryable transport `code` (`TRANSPORT` /
|
|
73
|
+
* `TIMEOUT`): the request never produced a usable response
|
|
74
|
+
*
|
|
75
|
+
* Uses `.is()` name-based duck checks (not `instanceof`) for the same
|
|
76
|
+
* cross-`vm`-realm reason described on `classifyRunError`.
|
|
10
77
|
*/
|
|
78
|
+
export function isRetryableWorldError(err) {
|
|
79
|
+
if (ThrottleError.is(err)) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
if (!WorkflowWorldError.is(err)) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
if (err.status !== undefined && err.status >= 500) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
return err.code !== undefined && RETRYABLE_WORLD_ERROR_CODES.has(err.code);
|
|
89
|
+
}
|
|
11
90
|
export function classifyRunError(err) {
|
|
12
|
-
if (err
|
|
13
|
-
return RUN_ERROR_CODES.
|
|
91
|
+
if (ReplayDivergenceError.is(err)) {
|
|
92
|
+
return RUN_ERROR_CODES.REPLAY_DIVERGENCE;
|
|
93
|
+
}
|
|
94
|
+
if (CorruptedEventLogError.is(err)) {
|
|
95
|
+
return RUN_ERROR_CODES.CORRUPTED_EVENT_LOG;
|
|
96
|
+
}
|
|
97
|
+
// World-layer faults — both a malformed response (contract violation) and a
|
|
98
|
+
// transient infrastructure failure (throttle / 5xx / transport / timeout,
|
|
99
|
+
// e.g. a firewall challenge) — are the backend's fault, not the user's.
|
|
100
|
+
// Bucket them under WORLD_CONTRACT_ERROR rather than USER_ERROR so dashboards
|
|
101
|
+
// attribute an outage correctly. Note the retryable variants are normally
|
|
102
|
+
// redelivered via the queue (see `isRetryableWorldError`) and only reach this
|
|
103
|
+
// terminal classification if the run ultimately gives up.
|
|
104
|
+
if (isWorldContractError(err) || isRetryableWorldError(err)) {
|
|
105
|
+
return RUN_ERROR_CODES.WORLD_CONTRACT_ERROR;
|
|
106
|
+
}
|
|
107
|
+
for (const isMatch of RUNTIME_ERROR_CHECKS) {
|
|
108
|
+
if (isMatch(err)) {
|
|
109
|
+
return RUN_ERROR_CODES.RUNTIME_ERROR;
|
|
110
|
+
}
|
|
14
111
|
}
|
|
15
112
|
return RUN_ERROR_CODES.USER_ERROR;
|
|
16
113
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NpZnktZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xhc3NpZnktZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGVBQWUsRUFDZixvQkFBb0IsR0FDckIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFZO0lBQzNDLElBQUksR0FBRyxZQUFZLG9CQUFvQixFQUFFLENBQUM7UUFDeEMsT0FBTyxlQUFlLENBQUMsYUFBYSxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxPQUFPLGVBQWUsQ0FBQyxVQUFVLENBQUM7QUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgUnVuRXJyb3JDb2RlLFxuICBSVU5fRVJST1JfQ09ERVMsXG4gIFdvcmtmbG93UnVudGltZUVycm9yLFxufSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcblxuLyoqXG4gKiBDbGFzc2lmeSBhbiBlcnJvciB0aGF0IGNhdXNlZCBhIHdvcmtmbG93IHJ1biB0byBmYWlsLlxuICpcbiAqIEFmdGVyIHRoZSBzdHJ1Y3R1cmFsIHNlcGFyYXRpb24gb2YgaW5mcmFzdHJ1Y3R1cmUgdnMgdXNlciBjb2RlIGVycm9yXG4gKiBoYW5kbGluZywgdGhlIG9ubHkgZXJyb3JzIHRoYXQgcmVhY2ggdGhlIGBydW5fZmFpbGVkYCB0cnkvY2F0Y2ggYXJlOlxuICogLSBVc2VyIGNvZGUgZXJyb3JzICh0aHJvd3MgZnJvbSB3b3JrZmxvdyBmdW5jdGlvbnMsIHByb3BhZ2F0ZWQgc3RlcCBmYWlsdXJlcylcbiAqIC0gV29ya2Zsb3dSdW50aW1lRXJyb3IgYW5kIHN1YmNsYXNzZXMgKGNvcnJ1cHRlZCBldmVudCBsb2csIG1pc3NpbmdcbiAqICAgdGltZXN0YW1wcywgd29ya2Zsb3cvc3RlcCBub3QgcmVnaXN0ZXJlZCwgZXRjLilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5UnVuRXJyb3IoZXJyOiB1bmtub3duKTogUnVuRXJyb3JDb2RlIHtcbiAgaWYgKGVyciBpbnN0YW5jZW9mIFdvcmtmbG93UnVudGltZUVycm9yKSB7XG4gICAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5SVU5USU1FX0VSUk9SO1xuICB9XG4gIHJldHVybiBSVU5fRVJST1JfQ09ERVMuVVNFUl9FUlJPUjtcbn1cbiJdfQ==
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NpZnktZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xhc3NpZnktZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsZUFBZSxFQUVmLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsYUFBYSxFQUNiLDBCQUEwQixFQUMxQixvQkFBb0IsRUFDcEIsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN6QyxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLGVBQWUsQ0FBQyxvQkFBb0I7Q0FDckMsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBRXRFOzs7Ozs7R0FNRztBQUNILE1BQU0sb0JBQW9CLEdBQUc7SUFDM0Isb0JBQW9CLENBQUMsRUFBRTtJQUN2QixzQkFBc0IsQ0FBQyxFQUFFO0lBQ3pCLDBCQUEwQixDQUFDLEVBQUU7SUFDN0IsK0RBQStEO0lBQy9ELHlEQUF5RDtJQUN6RCxvRUFBb0U7SUFDcEUsa0NBQWtDO0lBQ2xDLHNCQUFzQixDQUFDLEVBQUU7Q0FDMUIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxHQUFZO0lBQy9DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDckQsT0FBTyxDQUNMLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksMEJBQTBCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxvQ0FBb0MsQ0FBQztRQUM1RCxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQywrQkFBK0IsQ0FBQztRQUN2RCxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFDeEIsS0FBSyxLQUFLLElBQUk7WUFDZCxNQUFNLElBQUksS0FBSztZQUNmLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQzdCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxHQUFZO0lBQ2hELElBQUksYUFBYSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSwyQkFBMkIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBWTtJQUMzQyxJQUFJLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sZUFBZSxDQUFDLGlCQUFpQixDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ25DLE9BQU8sZUFBZSxDQUFDLG1CQUFtQixDQUFDO0lBQzdDLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsMEVBQTBFO0lBQzFFLHdFQUF3RTtJQUN4RSw4RUFBOEU7SUFDOUUsMEVBQTBFO0lBQzFFLDhFQUE4RTtJQUM5RSwwREFBMEQ7SUFDMUQsSUFBSSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVELE9BQU8sZUFBZSxDQUFDLG9CQUFvQixDQUFDO0lBQzlDLENBQUM7SUFFRCxLQUFLLE1BQU0sT0FBTyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDM0MsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqQixPQUFPLGVBQWUsQ0FBQyxhQUFhLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLGVBQWUsQ0FBQyxVQUFVLENBQUM7QUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvcnJ1cHRlZEV2ZW50TG9nRXJyb3IsXG4gIFJlcGxheURpdmVyZ2VuY2VFcnJvcixcbiAgUlVOX0VSUk9SX0NPREVTLFxuICB0eXBlIFJ1bkVycm9yQ29kZSxcbiAgUnVudGltZURlY3J5cHRpb25FcnJvcixcbiAgU3RlcE5vdFJlZ2lzdGVyZWRFcnJvcixcbiAgVGhyb3R0bGVFcnJvcixcbiAgV29ya2Zsb3dOb3RSZWdpc3RlcmVkRXJyb3IsXG4gIFdvcmtmbG93UnVudGltZUVycm9yLFxuICBXb3JrZmxvd1dvcmxkRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuXG5jb25zdCBXT1JMRF9DT05UUkFDVF9FUlJPUl9DT0RFUyA9IG5ldyBTZXQoW1xuICAnUEFSU0VfRVJST1InLFxuICAnU0NIRU1BX1ZBTElEQVRJT04nLFxuICBSVU5fRVJST1JfQ09ERVMuV09STERfQ09OVFJBQ1RfRVJST1IsXG5dKTtcblxuLyoqXG4gKiBgV29ya2Zsb3dXb3JsZEVycm9yLmNvZGVgIHZhbHVlcyB0aGF0IG1hcmsgYSB0cmFuc2llbnQgdHJhbnNwb3J0IGZhaWx1cmVcbiAqIChzZXQgYnkgd29ybGQtdmVyY2VsJ3MgSFRUUCBjbGllbnQpOiBgVFJBTlNQT1JUYCBjb3ZlcnMgYW4gZXhoYXVzdGVkXG4gKiBSZXRyeUFnZW50IChgVU5EX0VSUl9SRVFfUkVUUllgIOKAlCBlLmcuIHRoZSBmaXJld2FsbCBpbiBmcm9udCBvZlxuICogd29ya2Zsb3ctc2VydmVyIHNoZWRkaW5nIGxvYWQgd2l0aCA0MjkvNTAzKSwgYSBkcm9wcGVkIHNvY2tldCwgb3IgYVxuICogY29ubmVjdC9ETlMgZmFpbHVyZTsgYFRJTUVPVVRgIGNvdmVycyBhIHJlcXVlc3QgdGhhdCBleGNlZWRlZCB0aGUgY2xpZW50XG4gKiB0aW1lb3V0LiBCb3RoIGFyZSBpbmZyYXN0cnVjdHVyZSBmYWlsdXJlcyBhIGZyZXNoIGludm9jYXRpb24gY2FuIHJlY292ZXJcbiAqIGZyb20uIEtlcHQgZGlzdGluY3QgZnJvbSBgV09STERfQ09OVFJBQ1RfRVJST1JfQ09ERVNgIHNvIGEgdHJhbnNwb3J0IGJsaXAgaXNcbiAqIG5ldmVyIG1pc2NsYXNzaWZpZWQgYXMgdGhlIHNlcnZlciByZXR1cm5pbmcgYSBtYWxmb3JtZWQgcmVzcG9uc2UuXG4gKi9cbmNvbnN0IFJFVFJZQUJMRV9XT1JMRF9FUlJPUl9DT0RFUyA9IG5ldyBTZXQoWydUUkFOU1BPUlQnLCAnVElNRU9VVCddKTtcblxuLyoqXG4gKiBTZXQgb2YgZXJyb3IgbmFtZXMgdGhhdCBzaG91bGQgY2xhc3NpZnkgYXMgZ2VuZXJpYyBgUlVOVElNRV9FUlJPUmAuIEVhY2hcbiAqIGAqLmlzKClgIHN0YXRpYyBkb2VzIGEgbmFtZS1iYXNlZCBkdWNrIGNoZWNrLCBzbyBzdWJjbGFzc2luZyBhbG9uZSBpc1xuICogbm90IGVub3VnaCDigJQgd2UgaGF2ZSB0byBlbnVtZXJhdGUgZXZlcnkgY29uY3JldGUgc3ViY2xhc3Mgd2Ugd2FudCB0b1xuICogcmVjb2duaXplLiBLZWVwIGluIHN5bmMgd2l0aCB0aGUgYFdvcmtmbG93UnVudGltZUVycm9yYCBjbGFzcyBoaWVyYXJjaHlcbiAqIGluIGBAd29ya2Zsb3cvZXJyb3JzYC5cbiAqL1xuY29uc3QgUlVOVElNRV9FUlJPUl9DSEVDS1MgPSBbXG4gIFdvcmtmbG93UnVudGltZUVycm9yLmlzLFxuICBTdGVwTm90UmVnaXN0ZXJlZEVycm9yLmlzLFxuICBXb3JrZmxvd05vdFJlZ2lzdGVyZWRFcnJvci5pcyxcbiAgLy8gU0RLLWxldmVsIGVuY3J5cHRpb24gZmFpbHVyZXMgKG1vc3Qgbm90YWJseSBBRVMtR0NNIGF1dGgtdGFnXG4gIC8vIG1pc21hdGNoZXMgc3VyZmFjaW5nIGFzIGEgbmF0aXZlIGBPcGVyYXRpb25FcnJvcmAgZnJvbVxuICAvLyBgQUVTQ2lwaGVySm9iLm9uRG9uZWApIGFyZSB3cmFwcGVkIGluIGBSdW50aW1lRGVjcnlwdGlvbkVycm9yYCBhdFxuICAvLyB0aGUgZW5jcnlwdGlvbiBtb2R1bGUgYm91bmRhcnkuXG4gIFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3IuaXMsXG5dO1xuXG4vKipcbiAqIENsYXNzaWZ5IGFuIGVycm9yIHRoYXQgY2F1c2VkIGEgd29ya2Zsb3cgcnVuIHRvIGZhaWwuXG4gKlxuICogQWZ0ZXIgdGhlIHN0cnVjdHVyYWwgc2VwYXJhdGlvbiBvZiBpbmZyYXN0cnVjdHVyZSB2cyB1c2VyIGNvZGUgZXJyb3JcbiAqIGhhbmRsaW5nLCB0aGUgb25seSBlcnJvcnMgdGhhdCByZWFjaCB0aGUgYHJ1bl9mYWlsZWRgIHRyeS9jYXRjaCBhcmU6XG4gKiAtIFVzZXIgY29kZSBlcnJvcnMgKHRocm93cyBmcm9tIHdvcmtmbG93IGZ1bmN0aW9ucywgcHJvcGFnYXRlZCBzdGVwIGZhaWx1cmVzKVxuICogLSBXb3JrZmxvd1J1bnRpbWVFcnJvciBhbmQgc3ViY2xhc3NlcyAobWlzc2luZyB0aW1lc3RhbXBzLCB3b3JrZmxvdy9zdGVwXG4gKiAgIG5vdCByZWdpc3RlcmVkLCBjb3JydXB0ZWQgZXZlbnQgbG9nLCBldGMuKVxuICpcbiAqIFVzZXMgZWFjaCBzdWJjbGFzcydzIGAuaXMoKWAgc3RhdGljIChhIG5hbWUtYmFzZWQgZHVjayBjaGVjaykgaW5zdGVhZCBvZlxuICogYSBzaW5nbGUgYGluc3RhbmNlb2ZgIGNoZWNrIGJlY2F1c2Ugd29ya2Zsb3dzIGV4ZWN1dGUgaW4gYSBzZXBhcmF0ZVxuICogYHZtYCByZWFsbTogdGhlIFZNLWNvbnRleHQgYFdvcmtmbG93UnVudGltZUVycm9yYCBhbmQgdGhlIGhvc3QtY29udGV4dFxuICogb25lIGFyZSBkaXN0aW5jdCBjbGFzc2VzLCBzbyBgaW5zdGFuY2VvZmAgcmV0dXJucyBgZmFsc2VgIGZvciBhbnkgZXJyb3JcbiAqIHRocm93biBpbnNpZGUgdGhlIHdvcmtmbG93IFZNIGFuZCB3ZSdkIG1pc2NsYXNzaWZ5IGdlbnVpbmUgcnVudGltZVxuICogZXJyb3JzIGFzIHVzZXIgZXJyb3JzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXb3JsZENvbnRyYWN0RXJyb3IoZXJyOiB1bmtub3duKTogZXJyIGlzIFdvcmtmbG93V29ybGRFcnJvciB7XG4gIGlmICghV29ya2Zsb3dXb3JsZEVycm9yLmlzKGVycikgfHwgZXJyLnN0YXR1cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY2F1c2UgPSAnY2F1c2UnIGluIGVyciA/IGVyci5jYXVzZSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIChcbiAgICAoZXJyLmNvZGUgIT09IHVuZGVmaW5lZCAmJiBXT1JMRF9DT05UUkFDVF9FUlJPUl9DT0RFUy5oYXMoZXJyLmNvZGUpKSB8fFxuICAgIGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0ZhaWxlZCB0byBwYXJzZSByZXNwb25zZSBib2R5IGZvciAnKSB8fFxuICAgIGVyci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ1NjaGVtYSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgJykgfHxcbiAgICAodHlwZW9mIGNhdXNlID09PSAnb2JqZWN0JyAmJlxuICAgICAgY2F1c2UgIT09IG51bGwgJiZcbiAgICAgICduYW1lJyBpbiBjYXVzZSAmJlxuICAgICAgY2F1c2UubmFtZSA9PT0gJ1pvZEVycm9yJylcbiAgKTtcbn1cblxuLyoqXG4gKiBUcnVlIHdoZW4gYW4gZXJyb3IgZnJvbSBhIHdvcmxkICh3b3JrZmxvdy1zZXJ2ZXIpIGNhbGwgaXMgYSB0cmFuc2llbnRcbiAqIGluZnJhc3RydWN0dXJlIGZhaWx1cmUgdGhhdCBzaG91bGQgYmUgcmV0cmllZCBieSByZWRlbGl2ZXJpbmcgdGhlIHF1ZXVlXG4gKiBtZXNzYWdlLCByYXRoZXIgdGhhbiBmYWlsaW5nIHRoZSBydW4uIEEgZnJlc2ggaW52b2NhdGlvbiB3aWxsIGxpa2VseVxuICogc3VjY2VlZCBvbmNlIHRoZSBiYWNrZW5kIChvciB0aGUgZmlyZXdhbGwgaW4gZnJvbnQgb2YgaXQpIHJlY292ZXJzLlxuICpcbiAqIC0gYFRocm90dGxlRXJyb3JgICg0MjkpOiByYXRlIGxpbWl0ZWQgLyBsb2FkIHNoZWRcbiAqIC0gYFdvcmtmbG93V29ybGRFcnJvcmAgd2l0aCBgc3RhdHVzID49IDUwMGA6IHNlcnZlci1zaWRlIGVycm9yXG4gKiAtIGBXb3JrZmxvd1dvcmxkRXJyb3JgIHdpdGggYSByZXRyeWFibGUgdHJhbnNwb3J0IGBjb2RlYCAoYFRSQU5TUE9SVGAgL1xuICogICBgVElNRU9VVGApOiB0aGUgcmVxdWVzdCBuZXZlciBwcm9kdWNlZCBhIHVzYWJsZSByZXNwb25zZVxuICpcbiAqIFVzZXMgYC5pcygpYCBuYW1lLWJhc2VkIGR1Y2sgY2hlY2tzIChub3QgYGluc3RhbmNlb2ZgKSBmb3IgdGhlIHNhbWVcbiAqIGNyb3NzLWB2bWAtcmVhbG0gcmVhc29uIGRlc2NyaWJlZCBvbiBgY2xhc3NpZnlSdW5FcnJvcmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JldHJ5YWJsZVdvcmxkRXJyb3IoZXJyOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmIChUaHJvdHRsZUVycm9yLmlzKGVycikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoIVdvcmtmbG93V29ybGRFcnJvci5pcyhlcnIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChlcnIuc3RhdHVzICE9PSB1bmRlZmluZWQgJiYgZXJyLnN0YXR1cyA+PSA1MDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZXJyLmNvZGUgIT09IHVuZGVmaW5lZCAmJiBSRVRSWUFCTEVfV09STERfRVJST1JfQ09ERVMuaGFzKGVyci5jb2RlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5UnVuRXJyb3IoZXJyOiB1bmtub3duKTogUnVuRXJyb3JDb2RlIHtcbiAgaWYgKFJlcGxheURpdmVyZ2VuY2VFcnJvci5pcyhlcnIpKSB7XG4gICAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5SRVBMQVlfRElWRVJHRU5DRTtcbiAgfVxuXG4gIGlmIChDb3JydXB0ZWRFdmVudExvZ0Vycm9yLmlzKGVycikpIHtcbiAgICByZXR1cm4gUlVOX0VSUk9SX0NPREVTLkNPUlJVUFRFRF9FVkVOVF9MT0c7XG4gIH1cblxuICAvLyBXb3JsZC1sYXllciBmYXVsdHMg4oCUIGJvdGggYSBtYWxmb3JtZWQgcmVzcG9uc2UgKGNvbnRyYWN0IHZpb2xhdGlvbikgYW5kIGFcbiAgLy8gdHJhbnNpZW50IGluZnJhc3RydWN0dXJlIGZhaWx1cmUgKHRocm90dGxlIC8gNXh4IC8gdHJhbnNwb3J0IC8gdGltZW91dCxcbiAgLy8gZS5nLiBhIGZpcmV3YWxsIGNoYWxsZW5nZSkg4oCUIGFyZSB0aGUgYmFja2VuZCdzIGZhdWx0LCBub3QgdGhlIHVzZXIncy5cbiAgLy8gQnVja2V0IHRoZW0gdW5kZXIgV09STERfQ09OVFJBQ1RfRVJST1IgcmF0aGVyIHRoYW4gVVNFUl9FUlJPUiBzbyBkYXNoYm9hcmRzXG4gIC8vIGF0dHJpYnV0ZSBhbiBvdXRhZ2UgY29ycmVjdGx5LiBOb3RlIHRoZSByZXRyeWFibGUgdmFyaWFudHMgYXJlIG5vcm1hbGx5XG4gIC8vIHJlZGVsaXZlcmVkIHZpYSB0aGUgcXVldWUgKHNlZSBgaXNSZXRyeWFibGVXb3JsZEVycm9yYCkgYW5kIG9ubHkgcmVhY2ggdGhpc1xuICAvLyB0ZXJtaW5hbCBjbGFzc2lmaWNhdGlvbiBpZiB0aGUgcnVuIHVsdGltYXRlbHkgZ2l2ZXMgdXAuXG4gIGlmIChpc1dvcmxkQ29udHJhY3RFcnJvcihlcnIpIHx8IGlzUmV0cnlhYmxlV29ybGRFcnJvcihlcnIpKSB7XG4gICAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5XT1JMRF9DT05UUkFDVF9FUlJPUjtcbiAgfVxuXG4gIGZvciAoY29uc3QgaXNNYXRjaCBvZiBSVU5USU1FX0VSUk9SX0NIRUNLUykge1xuICAgIGlmIChpc01hdGNoKGVycikpIHtcbiAgICAgIHJldHVybiBSVU5fRVJST1JfQ09ERVMuUlVOVElNRV9FUlJPUjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5VU0VSX0VSUk9SO1xufVxuIl19
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ContextViolationError, type DocsUrl, NotInStepContextError, NotInWorkflowContextError, NotInWorkflowOrStepContextError } from './context-violation-error.js';
|
|
2
|
+
export { ContextViolationError, NotInStepContextError, NotInWorkflowContextError, NotInWorkflowOrStepContextError, };
|
|
3
|
+
/**
|
|
4
|
+
* Thrown when an API that MUST NOT run inside a workflow function is called
|
|
5
|
+
* from one (e.g. `resumeHook()`, which would cause determinism issues).
|
|
6
|
+
* The message names the specific workflow that made the offending call.
|
|
7
|
+
*/
|
|
8
|
+
export declare class UnavailableInWorkflowContextError extends ContextViolationError {
|
|
9
|
+
name: string;
|
|
10
|
+
constructor(functionName: string, docsUrl: DocsUrl);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Throw a {@link NotInWorkflowContextError} whose stack trace points at the
|
|
14
|
+
* user code that called `stackStartFn`, not at our framework internals.
|
|
15
|
+
*
|
|
16
|
+
* Prefer this over `throw new NotInWorkflowContextError(...)` so tooling
|
|
17
|
+
* (Next.js error overlay, VS Code terminal linkifier, Sentry, etc.) shows
|
|
18
|
+
* the user's call site as the relevant frame.
|
|
19
|
+
*/
|
|
20
|
+
export declare function throwNotInWorkflowContext(functionName: string, docsUrl: DocsUrl, stackStartFn: Function): never;
|
|
21
|
+
/** See {@link throwNotInWorkflowContext}. */
|
|
22
|
+
export declare function throwNotInStepContext(functionName: string, docsUrl: DocsUrl, stackStartFn: Function): never;
|
|
23
|
+
/** See {@link throwNotInWorkflowContext}. */
|
|
24
|
+
export declare function throwNotInWorkflowOrStepContext(functionName: string, docsUrl: DocsUrl, stackStartFn: Function): never;
|
|
25
|
+
/** See {@link throwNotInWorkflowContext}. */
|
|
26
|
+
export declare function throwUnavailableInWorkflowContext(functionName: string, docsUrl: DocsUrl, stackStartFn: Function): never;
|
|
27
|
+
//# sourceMappingURL=context-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-errors.d.ts","sourceRoot":"","sources":["../src/context-errors.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EAErB,KAAK,OAAO,EACZ,qBAAqB,EACrB,yBAAyB,EACzB,+BAA+B,EAChC,MAAM,8BAA8B,CAAC;AAUtC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,+BAA+B,GAChC,CAAC;AAEF;;;;GAIG;AACH,qBAAa,iCAAkC,SAAQ,qBAAqB;IAC1E,IAAI,SAAuC;gBAE/B,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAgDnD;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAEhB,YAAY,EAAE,QAAQ,GACrB,KAAK,CAIP;AAED,6CAA6C;AAC7C,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAEhB,YAAY,EAAE,QAAQ,GACrB,KAAK,CAIP;AAED,6CAA6C;AAC7C,wBAAgB,+BAA+B,CAC7C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAEhB,YAAY,EAAE,QAAQ,GACrB,KAAK,CAIP;AAED,6CAA6C;AAC7C,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAEhB,YAAY,EAAE,QAAQ,GACrB,KAAK,CAIP"}
|