@workflow/core 5.0.0-beta.2 → 5.0.0-beta.21
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 +11 -3
- package/dist/classify-error.d.ts.map +1 -1
- package/dist/classify-error.js +59 -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 +40 -1
- 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 +24 -0
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +79 -16
- package/dist/flushable-stream.d.ts +10 -10
- package/dist/flushable-stream.d.ts.map +1 -1
- package/dist/flushable-stream.js +18 -13
- package/dist/global.d.ts +15 -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 +28 -30
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +77 -31
- 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 +121 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +206 -8
- 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 +32 -0
- package/dist/runtime/get-world-lazy.d.ts.map +1 -0
- package/dist/runtime/get-world-lazy.js +56 -0
- package/dist/runtime/helpers.d.ts +50 -7
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +149 -31
- 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 +191 -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.map +1 -1
- package/dist/runtime/run.js +44 -9
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +4 -1
- package/dist/runtime/start.d.ts +30 -1
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +138 -20
- package/dist/runtime/step-executor.d.ts +108 -0
- package/dist/runtime/step-executor.d.ts.map +1 -0
- package/dist/runtime/step-executor.js +715 -0
- package/dist/runtime/step-handler.d.ts.map +1 -1
- package/dist/runtime/step-handler.js +715 -556
- package/dist/runtime/suspension-handler.d.ts +74 -7
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +308 -116
- 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 +92 -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-init.d.ts +75 -0
- package/dist/runtime/world-init.d.ts.map +1 -0
- package/dist/runtime/world-init.js +75 -0
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +47 -18
- package/dist/runtime.d.ts +11 -8
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +1395 -319
- 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 +15 -0
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +209 -11
- package/dist/serialization.d.ts +313 -214
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +1430 -658
- package/dist/set-attributes.d.ts +13 -0
- package/dist/set-attributes.d.ts.map +1 -0
- package/dist/set-attributes.js +42 -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 +43 -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 +49 -5
- 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 +115 -21
- 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 +30 -2
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +21 -1
- package/dist/telemetry.d.ts +60 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +82 -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 +23 -2
- 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 +73 -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 +10 -1
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +168 -49
- package/docs/api-reference/create-hook.mdx +38 -0
- package/docs/api-reference/create-webhook.mdx +1 -0
- package/docs/api-reference/experimental-set-attributes.mdx +65 -0
- package/docs/api-reference/fetch.mdx +5 -0
- package/docs/api-reference/index.mdx +3 -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 +3 -3
- package/docs/foundations/meta.json +3 -2
- package/docs/foundations/serialization.mdx +78 -42
- package/docs/foundations/starting-workflows.mdx +6 -2
- 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 +22 -10
- package/docs/foundations/common-patterns.mdx +0 -265
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { FatalError } from '@workflow/errors';
|
|
2
|
+
import { normalizeAttributeChanges } from '../attribute-changes.js';
|
|
3
|
+
import { WORKFLOW_SET_ATTRIBUTES } from '../symbols.js';
|
|
4
|
+
/**
|
|
5
|
+
* Attach plaintext string key/value metadata to the current workflow run.
|
|
6
|
+
*
|
|
7
|
+
* **EXPERIMENTAL.** The `experimental_` prefix is deliberate — the
|
|
8
|
+
* shape, semantics, and dispatch path are likely to change before this
|
|
9
|
+
* is renamed to a stable export. Use only when you can absorb a
|
|
10
|
+
* breaking rename later.
|
|
11
|
+
*
|
|
12
|
+
* Callable only from a workflow body (`'use workflow'`). The call is
|
|
13
|
+
* dispatched as a native `attr_set` event and materialized on the run.
|
|
14
|
+
*
|
|
15
|
+
* Validation runs in the VM (cheap, deterministic) before event
|
|
16
|
+
* dispatch - violations throw `FatalError` without writing an event. An
|
|
17
|
+
* empty record is a no-op. `value: undefined` removes the key from the
|
|
18
|
+
* run's attribute map.
|
|
19
|
+
*
|
|
20
|
+
* **Reserved namespace.** Keys starting with `$` are reserved for
|
|
21
|
+
* framework/library code (telemetry, agent metadata, etc.). User code
|
|
22
|
+
* trying to write a `$`-prefixed key throws `FatalError`. If you are a
|
|
23
|
+
* framework author and need to set a reserved key, pass
|
|
24
|
+
* `{ allowReservedAttributes: true }` as the second argument — see
|
|
25
|
+
* `ExperimentalSetAttributesOptions` for the trade-offs.
|
|
26
|
+
*
|
|
27
|
+
* **WARNING**: While this feature is experimental, calling e.g.
|
|
28
|
+
* `Promise.all([experimental_setAttributes({ a: '1' }), experimental_setAttributes({ a: '2' })])`
|
|
29
|
+
* is not guaranteed to be ordered consistently, but the equivalent
|
|
30
|
+
* sequential `.then()` chain is.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* import { experimental_setAttributes } from 'workflow';
|
|
35
|
+
*
|
|
36
|
+
* export async function myWorkflow() {
|
|
37
|
+
* 'use workflow';
|
|
38
|
+
* await experimental_setAttributes({ phase: 'init' });
|
|
39
|
+
* // ... work ...
|
|
40
|
+
* await experimental_setAttributes({ phase: 'done', orderId: 'ord_123' });
|
|
41
|
+
* await experimental_setAttributes({ orderId: undefined }); // remove
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @example Framework / library code writing into the reserved namespace.
|
|
46
|
+
* ```ts
|
|
47
|
+
* await experimental_setAttributes(
|
|
48
|
+
* { '$agent.kind': 'durable-agent' },
|
|
49
|
+
* { allowReservedAttributes: true }
|
|
50
|
+
* );
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export async function experimental_setAttributes(attrs, options = {}) {
|
|
54
|
+
const changes = normalizeAttributeChanges(attrs, options);
|
|
55
|
+
if (changes.length === 0)
|
|
56
|
+
return;
|
|
57
|
+
const allowReservedAttributes = options.allowReservedAttributes === true;
|
|
58
|
+
const setAttributes = globalThis[WORKFLOW_SET_ATTRIBUTES];
|
|
59
|
+
if (!setAttributes) {
|
|
60
|
+
throw new FatalError('experimental_setAttributes() called outside a workflow runtime context. ' +
|
|
61
|
+
'It must be called from within a workflow body (`use workflow`).');
|
|
62
|
+
}
|
|
63
|
+
await setAttributes(changes, allowReservedAttributes ? { allowReservedAttributes: true } : {});
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWF0dHJpYnV0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2V0LWF0dHJpYnV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQXlCeEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdERztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsMEJBQTBCLENBQzlDLEtBQXlDLEVBQ3pDLFVBQTRDLEVBQUU7SUFFOUMsTUFBTSxPQUFPLEdBQUcseUJBQXlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTztJQUNqQyxNQUFNLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsS0FBSyxJQUFJLENBQUM7SUFDekUsTUFBTSxhQUFhLEdBQUksVUFBc0MsQ0FDM0QsdUJBQXVCLENBTVosQ0FBQztJQUNkLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixNQUFNLElBQUksVUFBVSxDQUNsQiwwRUFBMEU7WUFDeEUsaUVBQWlFLENBQ3BFLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxhQUFhLENBQ2pCLE9BQU8sRUFDUCx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNqRSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZhdGFsRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB0eXBlIHsgQXR0cmlidXRlQ2hhbmdlIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IG5vcm1hbGl6ZUF0dHJpYnV0ZUNoYW5nZXMgfSBmcm9tICcuLi9hdHRyaWJ1dGUtY2hhbmdlcy5qcyc7XG5pbXBvcnQgeyBXT1JLRkxPV19TRVRfQVRUUklCVVRFUyB9IGZyb20gJy4uL3N5bWJvbHMuanMnO1xuXG4vKipcbiAqIE9wdGlvbnMgYWNjZXB0ZWQgYnkgYGV4cGVyaW1lbnRhbF9zZXRBdHRyaWJ1dGVzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBlcmltZW50YWxTZXRBdHRyaWJ1dGVzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQZXJtaXQgYXR0cmlidXRlIGtleXMgdGhhdCBzdGFydCB3aXRoIHRoZSByZXNlcnZlZCBgJGAgcHJlZml4LlxuICAgKiAqKkRlZmF1bHQ6IGBmYWxzZWAuKipcbiAgICpcbiAgICogVGhlIGAkYCBuYW1lc3BhY2UgaXMgcmVzZXJ2ZWQgZm9yIGZyYW1ld29yayBhbmQgbGlicmFyeSBjb2RlIHRoYXRcbiAgICogaXMgYnVpbHQgb24gdG9wIG9mIHRoZSB3b3JrZmxvdyBTREsgKHRlbGVtZXRyeSwgYWdlbnQgbWV0YWRhdGEsXG4gICAqIHBsYXRmb3JtLWVtaXR0ZWQgdGFncywgZXRjLikuIFVzZXIgY29kZSBNVVNUIE5PVCB3cml0ZSBrZXlzIGluXG4gICAqIHRoaXMgbmFtZXNwYWNlOyB2YWxpZGF0aW9uIHJlamVjdHMgdGhlbSBzbyBhY2NpZGVudGFsIGNvbGxpc2lvbnNcbiAgICogd2l0aCB0b29saW5nLW93bmVkIGtleXMgY2FuJ3Qgc2xpcCB0aHJvdWdoLlxuICAgKlxuICAgKiBPbmx5IGZsaXAgdGhpcyB0byBgdHJ1ZWAgaWYgeW91ciBjYWxsZXIgaXMgaXRzZWxmIGEgZnJhbWV3b3JrIG9yXG4gICAqIGxpYnJhcnkgdGhhdCBvd25zIGEgYCRgLXByZWZpeGVkIHN1Yi1uYW1lc3BhY2UgYW5kIGtub3dzIHRoZVxuICAgKiBjb252ZW50aW9ucyBvZiBhbnkgb3RoZXIgdG9vbHMgd3JpdGluZyBpbnRvIGl0LiBNaXN1c2UgY2FuXG4gICAqIGNvbmZsaWN0IHdpdGggb2JzZXJ2YWJpbGl0eSBzdXJmYWNlcywgYWdlbnQgZGFzaGJvYXJkcywgb3IgZnV0dXJlXG4gICAqIHBsYXRmb3JtIGZlYXR1cmVzIHRoYXQgcmVseSBvbiB0aGUgcmVzZXJ2ZWQgbmFtZXNwYWNlLlxuICAgKi9cbiAgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEF0dGFjaCBwbGFpbnRleHQgc3RyaW5nIGtleS92YWx1ZSBtZXRhZGF0YSB0byB0aGUgY3VycmVudCB3b3JrZmxvdyBydW4uXG4gKlxuICogKipFWFBFUklNRU5UQUwuKiogVGhlIGBleHBlcmltZW50YWxfYCBwcmVmaXggaXMgZGVsaWJlcmF0ZSDigJQgdGhlXG4gKiBzaGFwZSwgc2VtYW50aWNzLCBhbmQgZGlzcGF0Y2ggcGF0aCBhcmUgbGlrZWx5IHRvIGNoYW5nZSBiZWZvcmUgdGhpc1xuICogaXMgcmVuYW1lZCB0byBhIHN0YWJsZSBleHBvcnQuIFVzZSBvbmx5IHdoZW4geW91IGNhbiBhYnNvcmIgYVxuICogYnJlYWtpbmcgcmVuYW1lIGxhdGVyLlxuICpcbiAqIENhbGxhYmxlIG9ubHkgZnJvbSBhIHdvcmtmbG93IGJvZHkgKGAndXNlIHdvcmtmbG93J2ApLiBUaGUgY2FsbCBpc1xuICogZGlzcGF0Y2hlZCBhcyBhIG5hdGl2ZSBgYXR0cl9zZXRgIGV2ZW50IGFuZCBtYXRlcmlhbGl6ZWQgb24gdGhlIHJ1bi5cbiAqXG4gKiBWYWxpZGF0aW9uIHJ1bnMgaW4gdGhlIFZNIChjaGVhcCwgZGV0ZXJtaW5pc3RpYykgYmVmb3JlIGV2ZW50XG4gKiBkaXNwYXRjaCAtIHZpb2xhdGlvbnMgdGhyb3cgYEZhdGFsRXJyb3JgIHdpdGhvdXQgd3JpdGluZyBhbiBldmVudC4gQW5cbiAqIGVtcHR5IHJlY29yZCBpcyBhIG5vLW9wLiBgdmFsdWU6IHVuZGVmaW5lZGAgcmVtb3ZlcyB0aGUga2V5IGZyb20gdGhlXG4gKiBydW4ncyBhdHRyaWJ1dGUgbWFwLlxuICpcbiAqICoqUmVzZXJ2ZWQgbmFtZXNwYWNlLioqIEtleXMgc3RhcnRpbmcgd2l0aCBgJGAgYXJlIHJlc2VydmVkIGZvclxuICogZnJhbWV3b3JrL2xpYnJhcnkgY29kZSAodGVsZW1ldHJ5LCBhZ2VudCBtZXRhZGF0YSwgZXRjLikuIFVzZXIgY29kZVxuICogdHJ5aW5nIHRvIHdyaXRlIGEgYCRgLXByZWZpeGVkIGtleSB0aHJvd3MgYEZhdGFsRXJyb3JgLiBJZiB5b3UgYXJlIGFcbiAqIGZyYW1ld29yayBhdXRob3IgYW5kIG5lZWQgdG8gc2V0IGEgcmVzZXJ2ZWQga2V5LCBwYXNzXG4gKiBgeyBhbGxvd1Jlc2VydmVkQXR0cmlidXRlczogdHJ1ZSB9YCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IOKAlCBzZWVcbiAqIGBFeHBlcmltZW50YWxTZXRBdHRyaWJ1dGVzT3B0aW9uc2AgZm9yIHRoZSB0cmFkZS1vZmZzLlxuICpcbiAqICoqV0FSTklORyoqOiBXaGlsZSB0aGlzIGZlYXR1cmUgaXMgZXhwZXJpbWVudGFsLCBjYWxsaW5nIGUuZy5cbiAqIGBQcm9taXNlLmFsbChbZXhwZXJpbWVudGFsX3NldEF0dHJpYnV0ZXMoeyBhOiAnMScgfSksIGV4cGVyaW1lbnRhbF9zZXRBdHRyaWJ1dGVzKHsgYTogJzInIH0pXSlgXG4gKiBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBvcmRlcmVkIGNvbnNpc3RlbnRseSwgYnV0IHRoZSBlcXVpdmFsZW50XG4gKiBzZXF1ZW50aWFsIGAudGhlbigpYCBjaGFpbiBpcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGV4cGVyaW1lbnRhbF9zZXRBdHRyaWJ1dGVzIH0gZnJvbSAnd29ya2Zsb3cnO1xuICpcbiAqIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBteVdvcmtmbG93KCkge1xuICogICAndXNlIHdvcmtmbG93JztcbiAqICAgYXdhaXQgZXhwZXJpbWVudGFsX3NldEF0dHJpYnV0ZXMoeyBwaGFzZTogJ2luaXQnIH0pO1xuICogICAvLyAuLi4gd29yayAuLi5cbiAqICAgYXdhaXQgZXhwZXJpbWVudGFsX3NldEF0dHJpYnV0ZXMoeyBwaGFzZTogJ2RvbmUnLCBvcmRlcklkOiAnb3JkXzEyMycgfSk7XG4gKiAgIGF3YWl0IGV4cGVyaW1lbnRhbF9zZXRBdHRyaWJ1dGVzKHsgb3JkZXJJZDogdW5kZWZpbmVkIH0pOyAvLyByZW1vdmVcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEZyYW1ld29yayAvIGxpYnJhcnkgY29kZSB3cml0aW5nIGludG8gdGhlIHJlc2VydmVkIG5hbWVzcGFjZS5cbiAqIGBgYHRzXG4gKiBhd2FpdCBleHBlcmltZW50YWxfc2V0QXR0cmlidXRlcyhcbiAqICAgeyAnJGFnZW50LmtpbmQnOiAnZHVyYWJsZS1hZ2VudCcgfSxcbiAqICAgeyBhbGxvd1Jlc2VydmVkQXR0cmlidXRlczogdHJ1ZSB9XG4gKiApO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBlcmltZW50YWxfc2V0QXR0cmlidXRlcyhcbiAgYXR0cnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gIG9wdGlvbnM6IEV4cGVyaW1lbnRhbFNldEF0dHJpYnV0ZXNPcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjaGFuZ2VzID0gbm9ybWFsaXplQXR0cmlidXRlQ2hhbmdlcyhhdHRycywgb3B0aW9ucyk7XG4gIGlmIChjaGFuZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBjb25zdCBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcyA9IG9wdGlvbnMuYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXMgPT09IHRydWU7XG4gIGNvbnN0IHNldEF0dHJpYnV0ZXMgPSAoZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPilbXG4gICAgV09SS0ZMT1dfU0VUX0FUVFJJQlVURVNcbiAgXSBhc1xuICAgIHwgKChcbiAgICAgICAgY2hhbmdlczogQXR0cmlidXRlQ2hhbmdlW10sXG4gICAgICAgIG9wdGlvbnM/OiB7IGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzPzogYm9vbGVhbiB9XG4gICAgICApID0+IFByb21pc2U8dm9pZD4pXG4gICAgfCB1bmRlZmluZWQ7XG4gIGlmICghc2V0QXR0cmlidXRlcykge1xuICAgIHRocm93IG5ldyBGYXRhbEVycm9yKFxuICAgICAgJ2V4cGVyaW1lbnRhbF9zZXRBdHRyaWJ1dGVzKCkgY2FsbGVkIG91dHNpZGUgYSB3b3JrZmxvdyBydW50aW1lIGNvbnRleHQuICcgK1xuICAgICAgICAnSXQgbXVzdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSB3b3JrZmxvdyBib2R5IChgdXNlIHdvcmtmbG93YCkuJ1xuICAgICk7XG4gIH1cbiAgYXdhaXQgc2V0QXR0cmlidXRlcyhcbiAgICBjaGFuZ2VzLFxuICAgIGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzID8geyBhbGxvd1Jlc2VydmVkQXR0cmlidXRlczogdHJ1ZSB9IDoge31cbiAgKTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/workflow/sleep.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAGtC,OAAO,
|
|
1
|
+
{"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/workflow/sleep.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAGtC,OAAO,EAIL,KAAK,2BAA2B,EACjC,MAAM,eAAe,CAAC;AAEvB,wBAAgB,WAAW,CAAC,GAAG,EAAE,2BAA2B,IAExD,OAAO,WAAW,GAAG,IAAI,GAAG,MAAM,KACjC,OAAO,CAAC,IAAI,CAAC,CAoHjB"}
|
package/dist/workflow/sleep.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ReplayDivergenceError } from '@workflow/errors';
|
|
2
2
|
import { parseDurationToDate, withResolvers } from '@workflow/utils';
|
|
3
3
|
import { EventConsumerResult } from '../events-consumer.js';
|
|
4
4
|
import { WorkflowSuspension } from '../global.js';
|
|
5
|
-
import { scheduleWhenIdle, } from '../private.js';
|
|
5
|
+
import { awaitEarlierDeliveries, registerDeliveryBarrier, scheduleWhenIdle, } from '../private.js';
|
|
6
6
|
export function createSleep(ctx) {
|
|
7
7
|
return async function sleepImpl(param) {
|
|
8
8
|
const { promise, resolve } = withResolvers();
|
|
@@ -42,22 +42,59 @@ export function createSleep(ctx) {
|
|
|
42
42
|
}
|
|
43
43
|
// Check for wait_completed event
|
|
44
44
|
if (event.eventType === 'wait_completed') {
|
|
45
|
+
const eventResumeAt = event.eventData?.resumeAt;
|
|
46
|
+
if (eventResumeAt !== undefined) {
|
|
47
|
+
const queueItem = ctx.invocationsQueue.get(correlationId);
|
|
48
|
+
const expectedResumeAt = queueItem && queueItem.type === 'wait'
|
|
49
|
+
? queueItem.resumeAt
|
|
50
|
+
: resumeAt;
|
|
51
|
+
const eventResumeAtDate = new Date(eventResumeAt);
|
|
52
|
+
const eventResumeAtMs = eventResumeAtDate.getTime();
|
|
53
|
+
const expectedResumeAtMs = expectedResumeAt.getTime();
|
|
54
|
+
const eventResumeAtForMessage = Number.isFinite(eventResumeAtMs)
|
|
55
|
+
? eventResumeAtDate.toISOString()
|
|
56
|
+
: String(eventResumeAt);
|
|
57
|
+
if (eventResumeAtMs !== expectedResumeAtMs) {
|
|
58
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
59
|
+
ctx.onWorkflowError(new ReplayDivergenceError(`Replay divergence: wait_completed event for ${correlationId} has resumeAt "${eventResumeAtForMessage}", but the current wait consumer expects "${expectedResumeAt.toISOString()}"`, { eventId: event.eventId }));
|
|
60
|
+
});
|
|
61
|
+
return EventConsumerResult.Finished;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
45
64
|
// Remove this wait from the invocations queue (O(1) delete using Map)
|
|
46
65
|
ctx.invocationsQueue.delete(correlationId);
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
|
|
66
|
+
// This `wait_completed` is a branch-deciding resolution the workflow
|
|
67
|
+
// may `Promise.race` against a hook payload. Order it deterministically
|
|
68
|
+
// by event-log position (see `pendingDeliveryBarriers`):
|
|
69
|
+
// - Register a 'wait' barrier at this event's index so a LATER-in-log
|
|
70
|
+
// hook payload is delivered only after this wait.
|
|
71
|
+
// - Before resolving, defer behind every EARLIER-in-log HOOK delivery
|
|
72
|
+
// so this wait does not preempt a hook the committed log ordered
|
|
73
|
+
// first. Then mark this wait delivered to release later hooks.
|
|
74
|
+
const eventIndex = ctx.eventsConsumer.eventIndex;
|
|
75
|
+
const barrier = registerDeliveryBarrier(ctx, eventIndex, 'wait');
|
|
76
|
+
// Defer + resolve in a DETACHED promise (not chained onto the serial
|
|
77
|
+
// `promiseQueue`). `awaitEarlierDeliveries` may wait on an earlier
|
|
78
|
+
// hook delivery whose own resolution is itself driven by the
|
|
79
|
+
// promiseQueue; blocking a queue slot on it would deadlock the serial
|
|
80
|
+
// queue. We still anchor to the queue tail first so prior queued
|
|
81
|
+
// hydration/ordering work runs in event-log order.
|
|
82
|
+
const queueAtCompletion = ctx.promiseQueue;
|
|
83
|
+
void queueAtCompletion
|
|
84
|
+
.then(() => awaitEarlierDeliveries(ctx, eventIndex, ['hook']))
|
|
85
|
+
.then(() => {
|
|
86
|
+
barrier.markDelivered();
|
|
50
87
|
resolve();
|
|
51
88
|
});
|
|
52
89
|
return EventConsumerResult.Finished;
|
|
53
90
|
}
|
|
54
|
-
//
|
|
91
|
+
// This replay installed a different consumer than the stored event needs.
|
|
55
92
|
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
56
|
-
ctx.onWorkflowError(new
|
|
93
|
+
ctx.onWorkflowError(new ReplayDivergenceError(`Replay divergence: Unexpected event type for wait ${correlationId} "${event.eventType}"`, { eventId: event.eventId }));
|
|
57
94
|
});
|
|
58
95
|
return EventConsumerResult.Finished;
|
|
59
96
|
});
|
|
60
97
|
return promise;
|
|
61
98
|
};
|
|
62
99
|
}
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2xlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBZ0Msa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEYsT0FBTyxFQUNMLGdCQUFnQixHQUVqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQWdDO0lBQzFELE9BQU8sS0FBSyxVQUFVLFNBQVMsQ0FDN0IsS0FBa0M7UUFFbEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxhQUFhLEVBQVEsQ0FBQztRQUNuRCxNQUFNLGFBQWEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1FBRW5ELDRCQUE0QjtRQUM1QixNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QyxnRUFBZ0U7UUFDaEUsTUFBTSxRQUFRLEdBQTRCO1lBQ3hDLElBQUksRUFBRSxNQUFNO1lBQ1osYUFBYTtZQUNiLFFBQVE7U0FDVCxDQUFDO1FBQ0YsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFbEQsR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQywrREFBK0Q7WUFDL0QsNENBQTRDO1lBQzVDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO29CQUN6QixHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQzdELENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7WUFDekMsQ0FBQztZQUVELElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyxhQUFhLEVBQUUsQ0FBQztnQkFDMUMsdUZBQXVGO2dCQUN2RixPQUFPLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztZQUN6QyxDQUFDO1lBRUQsNkVBQTZFO1lBQzdFLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxjQUFjLEVBQUUsQ0FBQztnQkFDdkMsdUVBQXVFO2dCQUN2RSx3QkFBd0I7Z0JBQ3hCLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzFELElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQzNDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUNqQyxTQUFTLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO2dCQUNoRCxDQUFDO2dCQUNELE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1lBQ3RDLENBQUM7WUFFRCxpQ0FBaUM7WUFDakMsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3pDLHNFQUFzRTtnQkFDdEUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFM0MsMERBQTBEO2dCQUMxRCxxREFBcUQ7Z0JBQ3JELEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUM1QyxPQUFPLEVBQUUsQ0FBQztnQkFDWixDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztZQUN0QyxDQUFDO1lBRUQsc0dBQXNHO1lBQ3RHLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUM1QyxHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLG9CQUFvQixDQUN0QixrQ0FBa0MsYUFBYSxLQUFLLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FDdkUsQ0FDRixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXb3JrZmxvd1J1bnRpbWVFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgcGFyc2VEdXJhdGlvblRvRGF0ZSwgd2l0aFJlc29sdmVycyB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1ZhbHVlIH0gZnJvbSAnbXMnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyB0eXBlIFdhaXRJbnZvY2F0aW9uUXVldWVJdGVtLCBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuLi9nbG9iYWwuanMnO1xuaW1wb3J0IHtcbiAgc2NoZWR1bGVXaGVuSWRsZSxcbiAgdHlwZSBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQsXG59IGZyb20gJy4uL3ByaXZhdGUuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2xlZXAoY3R4OiBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHNsZWVwSW1wbChcbiAgICBwYXJhbTogU3RyaW5nVmFsdWUgfCBEYXRlIHwgbnVtYmVyXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgcHJvbWlzZSwgcmVzb2x2ZSB9ID0gd2l0aFJlc29sdmVyczx2b2lkPigpO1xuICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSBgd2FpdF8ke2N0eC5nZW5lcmF0ZVVsaWQoKX1gO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSByZXN1bWUgdGltZVxuICAgIGNvbnN0IHJlc3VtZUF0ID0gcGFyc2VEdXJhdGlvblRvRGF0ZShwYXJhbSk7XG5cbiAgICAvLyBBZGQgd2FpdCB0byBpbnZvY2F0aW9ucyBxdWV1ZSAodXNpbmcgTWFwIGZvciBPKDEpIG9wZXJhdGlvbnMpXG4gICAgY29uc3Qgd2FpdEl0ZW06IFdhaXRJbnZvY2F0aW9uUXVldWVJdGVtID0ge1xuICAgICAgdHlwZTogJ3dhaXQnLFxuICAgICAgY29ycmVsYXRpb25JZCxcbiAgICAgIHJlc3VtZUF0LFxuICAgIH07XG4gICAgY3R4Lmludm9jYXRpb25zUXVldWUuc2V0KGNvcnJlbGF0aW9uSWQsIHdhaXRJdGVtKTtcblxuICAgIGN0eC5ldmVudHNDb25zdW1lci5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZXZlbnRzIGFuZCB3ZSdyZSB3YWl0aW5nIGZvciB3YWl0X2NvbXBsZXRlZCxcbiAgICAgIC8vIHN1c3BlbmQgdGhlIHdvcmtmbG93IHVudGlsIHRoZSB3YWl0IGZpcmVzXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmNvcnJlbGF0aW9uSWQgIT09IGNvcnJlbGF0aW9uSWQpIHtcbiAgICAgICAgLy8gV2UncmUgbm90IGludGVyZXN0ZWQgaW4gdGhpcyBldmVudCAtIHRoZSBjb3JyZWxhdGlvbklkIGJlbG9uZ3MgdG8gYSBkaWZmZXJlbnQgZW50aXR5XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igd2FpdF9jcmVhdGVkIGV2ZW50IHRvIG1hcmsgdGhpcyB3YWl0IGFzIGhhdmluZyB0aGUgZXZlbnQgY3JlYXRlZFxuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3dhaXRfY3JlYXRlZCcpIHtcbiAgICAgICAgLy8gTWFyayB0aGlzIHdhaXQgYXMgaGF2aW5nIHRoZSBjcmVhdGVkIGV2ZW50LCBidXQga2VlcCBpdCBpbiB0aGUgcXVldWVcbiAgICAgICAgLy8gTygxKSBsb29rdXAgdXNpbmcgTWFwXG4gICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgaWYgKHF1ZXVlSXRlbSAmJiBxdWV1ZUl0ZW0udHlwZSA9PT0gJ3dhaXQnKSB7XG4gICAgICAgICAgcXVldWVJdGVtLmhhc0NyZWF0ZWRFdmVudCA9IHRydWU7XG4gICAgICAgICAgcXVldWVJdGVtLnJlc3VtZUF0ID0gZXZlbnQuZXZlbnREYXRhLnJlc3VtZUF0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igd2FpdF9jb21wbGV0ZWQgZXZlbnRcbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NvbXBsZXRlZCcpIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoaXMgd2FpdCBmcm9tIHRoZSBpbnZvY2F0aW9ucyBxdWV1ZSAoTygxKSBkZWxldGUgdXNpbmcgTWFwKVxuICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoY29ycmVsYXRpb25JZCk7XG5cbiAgICAgICAgLy8gV2FpdCBoYXMgZWxhcHNlZCAtIGNoYWluIHRocm91Z2ggcHJvbWlzZVF1ZXVlIHRvIGVuc3VyZVxuICAgICAgICAvLyBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIG9mIGFsbCBwcm9taXNlIHJlc29sdXRpb25zLlxuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgIH1cblxuICAgICAgLy8gQW4gdW5leHBlY3RlZCBldmVudCB0eXBlIGhhcyBiZWVuIHJlY2VpdmVkLCB0aGlzIGV2ZW50IGxvZyBsb29rcyBjb3JydXB0ZWQuIExldCdzIGZhaWwgaW1tZWRpYXRlbHkuXG4gICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgICAgICBgVW5leHBlY3RlZCBldmVudCB0eXBlIGZvciB3YWl0ICR7Y29ycmVsYXRpb25JZH0gXCIke2V2ZW50LmV2ZW50VHlwZX1cImBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH07XG59XG4iXX0=
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2xlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBZ0Msa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEYsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBRWpCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBZ0M7SUFDMUQsT0FBTyxLQUFLLFVBQVUsU0FBUyxDQUM3QixLQUFrQztRQUVsQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsRUFBUSxDQUFDO1FBQ25ELE1BQU0sYUFBYSxHQUFHLFFBQVEsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7UUFFbkQsNEJBQTRCO1FBQzVCLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVDLGdFQUFnRTtRQUNoRSxNQUFNLFFBQVEsR0FBNEI7WUFDeEMsSUFBSSxFQUFFLE1BQU07WUFDWixhQUFhO1lBQ2IsUUFBUTtTQUNULENBQUM7UUFDRixHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVsRCxHQUFHLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JDLCtEQUErRDtZQUMvRCw0Q0FBNEM7WUFDNUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7b0JBQ3pCLEdBQUcsQ0FBQyxlQUFlLENBQ2pCLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FDN0QsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztZQUN6QyxDQUFDO1lBRUQsSUFBSSxLQUFLLENBQUMsYUFBYSxLQUFLLGFBQWEsRUFBRSxDQUFDO2dCQUMxQyx1RkFBdUY7Z0JBQ3ZGLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQ3pDLENBQUM7WUFFRCw2RUFBNkU7WUFDN0UsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLGNBQWMsRUFBRSxDQUFDO2dCQUN2Qyx1RUFBdUU7Z0JBQ3ZFLHdCQUF3QjtnQkFDeEIsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDM0MsU0FBUyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7b0JBQ2pDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Z0JBQ2hELENBQUM7Z0JBQ0QsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7WUFDdEMsQ0FBQztZQUVELGlDQUFpQztZQUNqQyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7Z0JBQ2hELElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNoQyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUMxRCxNQUFNLGdCQUFnQixHQUNwQixTQUFTLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxNQUFNO3dCQUNwQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVE7d0JBQ3BCLENBQUMsQ0FBQyxRQUFRLENBQUM7b0JBQ2YsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDbEQsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3BELE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3RELE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7d0JBQzlELENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUU7d0JBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBRTFCLElBQUksZUFBZSxLQUFLLGtCQUFrQixFQUFFLENBQUM7d0JBQzNDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFOzRCQUM1QyxHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLHFCQUFxQixDQUN2QiwrQ0FBK0MsYUFBYSxrQkFBa0IsdUJBQXVCLDZDQUE2QyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUNuTCxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQzNCLENBQ0YsQ0FBQzt3QkFDSixDQUFDLENBQUMsQ0FBQzt3QkFDSCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztvQkFDdEMsQ0FBQztnQkFDSCxDQUFDO2dCQUVELHNFQUFzRTtnQkFDdEUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFM0MscUVBQXFFO2dCQUNyRSx3RUFBd0U7Z0JBQ3hFLHlEQUF5RDtnQkFDekQsdUVBQXVFO2dCQUN2RSxxREFBcUQ7Z0JBQ3JELHVFQUF1RTtnQkFDdkUsb0VBQW9FO2dCQUNwRSxrRUFBa0U7Z0JBQ2xFLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO2dCQUNqRCxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNqRSxxRUFBcUU7Z0JBQ3JFLG1FQUFtRTtnQkFDbkUsNkRBQTZEO2dCQUM3RCxzRUFBc0U7Z0JBQ3RFLGlFQUFpRTtnQkFDakUsbURBQW1EO2dCQUNuRCxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7Z0JBQzNDLEtBQUssaUJBQWlCO3FCQUNuQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7cUJBQzdELElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ1QsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN4QixPQUFPLEVBQUUsQ0FBQztnQkFDWixDQUFDLENBQUMsQ0FBQztnQkFDTCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztZQUN0QyxDQUFDO1lBRUQsMEVBQTBFO1lBQzFFLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUM1QyxHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLHFCQUFxQixDQUN2QixxREFBcUQsYUFBYSxLQUFLLEtBQUssQ0FBQyxTQUFTLEdBQUcsRUFDekYsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUMzQixDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcGxheURpdmVyZ2VuY2VFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgcGFyc2VEdXJhdGlvblRvRGF0ZSwgd2l0aFJlc29sdmVycyB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1ZhbHVlIH0gZnJvbSAnbXMnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyB0eXBlIFdhaXRJbnZvY2F0aW9uUXVldWVJdGVtLCBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuLi9nbG9iYWwuanMnO1xuaW1wb3J0IHtcbiAgYXdhaXRFYXJsaWVyRGVsaXZlcmllcyxcbiAgcmVnaXN0ZXJEZWxpdmVyeUJhcnJpZXIsXG4gIHNjaGVkdWxlV2hlbklkbGUsXG4gIHR5cGUgV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0LFxufSBmcm9tICcuLi9wcml2YXRlLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNsZWVwKGN0eDogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBzbGVlcEltcGwoXG4gICAgcGFyYW06IFN0cmluZ1ZhbHVlIHwgRGF0ZSB8IG51bWJlclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHByb21pc2UsIHJlc29sdmUgfSA9IHdpdGhSZXNvbHZlcnM8dm9pZD4oKTtcbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gYHdhaXRfJHtjdHguZ2VuZXJhdGVVbGlkKCl9YDtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgcmVzdW1lIHRpbWVcbiAgICBjb25zdCByZXN1bWVBdCA9IHBhcnNlRHVyYXRpb25Ub0RhdGUocGFyYW0pO1xuXG4gICAgLy8gQWRkIHdhaXQgdG8gaW52b2NhdGlvbnMgcXVldWUgKHVzaW5nIE1hcCBmb3IgTygxKSBvcGVyYXRpb25zKVxuICAgIGNvbnN0IHdhaXRJdGVtOiBXYWl0SW52b2NhdGlvblF1ZXVlSXRlbSA9IHtcbiAgICAgIHR5cGU6ICd3YWl0JyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICByZXN1bWVBdCxcbiAgICB9O1xuICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLnNldChjb3JyZWxhdGlvbklkLCB3YWl0SXRlbSk7XG5cbiAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBhbmQgd2UncmUgd2FpdGluZyBmb3Igd2FpdF9jb21wbGV0ZWQsXG4gICAgICAvLyBzdXNwZW5kIHRoZSB3b3JrZmxvdyB1bnRpbCB0aGUgd2FpdCBmaXJlc1xuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICBuZXcgV29ya2Zsb3dTdXNwZW5zaW9uKGN0eC5pbnZvY2F0aW9uc1F1ZXVlLCBjdHguZ2xvYmFsVGhpcylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5jb3JyZWxhdGlvbklkICE9PSBjb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHdhaXRfY3JlYXRlZCBldmVudCB0byBtYXJrIHRoaXMgd2FpdCBhcyBoYXZpbmcgdGhlIGV2ZW50IGNyZWF0ZWRcbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnKSB7XG4gICAgICAgIC8vIE1hcmsgdGhpcyB3YWl0IGFzIGhhdmluZyB0aGUgY3JlYXRlZCBldmVudCwgYnV0IGtlZXAgaXQgaW4gdGhlIHF1ZXVlXG4gICAgICAgIC8vIE8oMSkgbG9va3VwIHVzaW5nIE1hcFxuICAgICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICd3YWl0Jykge1xuICAgICAgICAgIHF1ZXVlSXRlbS5oYXNDcmVhdGVkRXZlbnQgPSB0cnVlO1xuICAgICAgICAgIHF1ZXVlSXRlbS5yZXN1bWVBdCA9IGV2ZW50LmV2ZW50RGF0YS5yZXN1bWVBdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHdhaXRfY29tcGxldGVkIGV2ZW50XG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnd2FpdF9jb21wbGV0ZWQnKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXQgPSBldmVudC5ldmVudERhdGE/LnJlc3VtZUF0O1xuICAgICAgICBpZiAoZXZlbnRSZXN1bWVBdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdW1lQXQgPVxuICAgICAgICAgICAgcXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnd2FpdCdcbiAgICAgICAgICAgICAgPyBxdWV1ZUl0ZW0ucmVzdW1lQXRcbiAgICAgICAgICAgICAgOiByZXN1bWVBdDtcbiAgICAgICAgICBjb25zdCBldmVudFJlc3VtZUF0RGF0ZSA9IG5ldyBEYXRlKGV2ZW50UmVzdW1lQXQpO1xuICAgICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXRNcyA9IGV2ZW50UmVzdW1lQXREYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VtZUF0TXMgPSBleHBlY3RlZFJlc3VtZUF0LmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBldmVudFJlc3VtZUF0Rm9yTWVzc2FnZSA9IE51bWJlci5pc0Zpbml0ZShldmVudFJlc3VtZUF0TXMpXG4gICAgICAgICAgICA/IGV2ZW50UmVzdW1lQXREYXRlLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogU3RyaW5nKGV2ZW50UmVzdW1lQXQpO1xuXG4gICAgICAgICAgaWYgKGV2ZW50UmVzdW1lQXRNcyAhPT0gZXhwZWN0ZWRSZXN1bWVBdE1zKSB7XG4gICAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgICAgICBuZXcgUmVwbGF5RGl2ZXJnZW5jZUVycm9yKFxuICAgICAgICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiB3YWl0X2NvbXBsZXRlZCBldmVudCBmb3IgJHtjb3JyZWxhdGlvbklkfSBoYXMgcmVzdW1lQXQgXCIke2V2ZW50UmVzdW1lQXRGb3JNZXNzYWdlfVwiLCBidXQgdGhlIGN1cnJlbnQgd2FpdCBjb25zdW1lciBleHBlY3RzIFwiJHtleHBlY3RlZFJlc3VtZUF0LnRvSVNPU3RyaW5nKCl9XCJgLFxuICAgICAgICAgICAgICAgICAgeyBldmVudElkOiBldmVudC5ldmVudElkIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSB0aGlzIHdhaXQgZnJvbSB0aGUgaW52b2NhdGlvbnMgcXVldWUgKE8oMSkgZGVsZXRlIHVzaW5nIE1hcClcbiAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGNvcnJlbGF0aW9uSWQpO1xuXG4gICAgICAgIC8vIFRoaXMgYHdhaXRfY29tcGxldGVkYCBpcyBhIGJyYW5jaC1kZWNpZGluZyByZXNvbHV0aW9uIHRoZSB3b3JrZmxvd1xuICAgICAgICAvLyBtYXkgYFByb21pc2UucmFjZWAgYWdhaW5zdCBhIGhvb2sgcGF5bG9hZC4gT3JkZXIgaXQgZGV0ZXJtaW5pc3RpY2FsbHlcbiAgICAgICAgLy8gYnkgZXZlbnQtbG9nIHBvc2l0aW9uIChzZWUgYHBlbmRpbmdEZWxpdmVyeUJhcnJpZXJzYCk6XG4gICAgICAgIC8vICAtIFJlZ2lzdGVyIGEgJ3dhaXQnIGJhcnJpZXIgYXQgdGhpcyBldmVudCdzIGluZGV4IHNvIGEgTEFURVItaW4tbG9nXG4gICAgICAgIC8vICAgIGhvb2sgcGF5bG9hZCBpcyBkZWxpdmVyZWQgb25seSBhZnRlciB0aGlzIHdhaXQuXG4gICAgICAgIC8vICAtIEJlZm9yZSByZXNvbHZpbmcsIGRlZmVyIGJlaGluZCBldmVyeSBFQVJMSUVSLWluLWxvZyBIT09LIGRlbGl2ZXJ5XG4gICAgICAgIC8vICAgIHNvIHRoaXMgd2FpdCBkb2VzIG5vdCBwcmVlbXB0IGEgaG9vayB0aGUgY29tbWl0dGVkIGxvZyBvcmRlcmVkXG4gICAgICAgIC8vICAgIGZpcnN0LiBUaGVuIG1hcmsgdGhpcyB3YWl0IGRlbGl2ZXJlZCB0byByZWxlYXNlIGxhdGVyIGhvb2tzLlxuICAgICAgICBjb25zdCBldmVudEluZGV4ID0gY3R4LmV2ZW50c0NvbnN1bWVyLmV2ZW50SW5kZXg7XG4gICAgICAgIGNvbnN0IGJhcnJpZXIgPSByZWdpc3RlckRlbGl2ZXJ5QmFycmllcihjdHgsIGV2ZW50SW5kZXgsICd3YWl0Jyk7XG4gICAgICAgIC8vIERlZmVyICsgcmVzb2x2ZSBpbiBhIERFVEFDSEVEIHByb21pc2UgKG5vdCBjaGFpbmVkIG9udG8gdGhlIHNlcmlhbFxuICAgICAgICAvLyBgcHJvbWlzZVF1ZXVlYCkuIGBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzYCBtYXkgd2FpdCBvbiBhbiBlYXJsaWVyXG4gICAgICAgIC8vIGhvb2sgZGVsaXZlcnkgd2hvc2Ugb3duIHJlc29sdXRpb24gaXMgaXRzZWxmIGRyaXZlbiBieSB0aGVcbiAgICAgICAgLy8gcHJvbWlzZVF1ZXVlOyBibG9ja2luZyBhIHF1ZXVlIHNsb3Qgb24gaXQgd291bGQgZGVhZGxvY2sgdGhlIHNlcmlhbFxuICAgICAgICAvLyBxdWV1ZS4gV2Ugc3RpbGwgYW5jaG9yIHRvIHRoZSBxdWV1ZSB0YWlsIGZpcnN0IHNvIHByaW9yIHF1ZXVlZFxuICAgICAgICAvLyBoeWRyYXRpb24vb3JkZXJpbmcgd29yayBydW5zIGluIGV2ZW50LWxvZyBvcmRlci5cbiAgICAgICAgY29uc3QgcXVldWVBdENvbXBsZXRpb24gPSBjdHgucHJvbWlzZVF1ZXVlO1xuICAgICAgICB2b2lkIHF1ZXVlQXRDb21wbGV0aW9uXG4gICAgICAgICAgLnRoZW4oKCkgPT4gYXdhaXRFYXJsaWVyRGVsaXZlcmllcyhjdHgsIGV2ZW50SW5kZXgsIFsnaG9vayddKSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBiYXJyaWVyLm1hcmtEZWxpdmVyZWQoKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgcmVwbGF5IGluc3RhbGxlZCBhIGRpZmZlcmVudCBjb25zdW1lciB0aGFuIHRoZSBzdG9yZWQgZXZlbnQgbmVlZHMuXG4gICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICBuZXcgUmVwbGF5RGl2ZXJnZW5jZUVycm9yKFxuICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiBVbmV4cGVjdGVkIGV2ZW50IHR5cGUgZm9yIHdhaXQgJHtjb3JyZWxhdGlvbklkfSBcIiR7ZXZlbnQuZXZlbnRUeXBlfVwiYCxcbiAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICB9KTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VM/step-bundle stub for `@workflow/core/runtime/world-init`.
|
|
3
|
+
*
|
|
4
|
+
* Resolved via the `workflow` export condition. Empty by design — the host
|
|
5
|
+
* is responsible for loading `world.ts` and populating the globalThis
|
|
6
|
+
* world cache before any VM or step code executes. Including this module
|
|
7
|
+
* (rather than letting the resolver fall through to the host file) keeps
|
|
8
|
+
* `world.ts` and its server-only deps (`@workflow/world-vercel`,
|
|
9
|
+
* `@workflow/world-local`, `cbor-x`, …) out of the workflow sandbox.
|
|
10
|
+
*
|
|
11
|
+
* See `../runtime/world-init.ts` for the host-side implementation and the
|
|
12
|
+
* full rationale.
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=world-init-stub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"world-init-stub.d.ts","sourceRoot":"","sources":["../../src/workflow/world-init-stub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VM/step-bundle stub for `@workflow/core/runtime/world-init`.
|
|
3
|
+
*
|
|
4
|
+
* Resolved via the `workflow` export condition. Empty by design — the host
|
|
5
|
+
* is responsible for loading `world.ts` and populating the globalThis
|
|
6
|
+
* world cache before any VM or step code executes. Including this module
|
|
7
|
+
* (rather than letting the resolver fall through to the host file) keeps
|
|
8
|
+
* `world.ts` and its server-only deps (`@workflow/world-vercel`,
|
|
9
|
+
* `@workflow/world-local`, `cbor-x`, …) out of the workflow sandbox.
|
|
10
|
+
*
|
|
11
|
+
* See `../runtime/world-init.ts` for the host-side implementation and the
|
|
12
|
+
* full rationale.
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ybGQtaW5pdC1zdHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmtmbG93L3dvcmxkLWluaXQtc3R1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZNL3N0ZXAtYnVuZGxlIHN0dWIgZm9yIGBAd29ya2Zsb3cvY29yZS9ydW50aW1lL3dvcmxkLWluaXRgLlxuICpcbiAqIFJlc29sdmVkIHZpYSB0aGUgYHdvcmtmbG93YCBleHBvcnQgY29uZGl0aW9uLiBFbXB0eSBieSBkZXNpZ24g4oCUIHRoZSBob3N0XG4gKiBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyBgd29ybGQudHNgIGFuZCBwb3B1bGF0aW5nIHRoZSBnbG9iYWxUaGlzXG4gKiB3b3JsZCBjYWNoZSBiZWZvcmUgYW55IFZNIG9yIHN0ZXAgY29kZSBleGVjdXRlcy4gSW5jbHVkaW5nIHRoaXMgbW9kdWxlXG4gKiAocmF0aGVyIHRoYW4gbGV0dGluZyB0aGUgcmVzb2x2ZXIgZmFsbCB0aHJvdWdoIHRvIHRoZSBob3N0IGZpbGUpIGtlZXBzXG4gKiBgd29ybGQudHNgIGFuZCBpdHMgc2VydmVyLW9ubHkgZGVwcyAoYEB3b3JrZmxvdy93b3JsZC12ZXJjZWxgLFxuICogYEB3b3JrZmxvdy93b3JsZC1sb2NhbGAsIGBjYm9yLXhgLCDigKYpIG91dCBvZiB0aGUgd29ya2Zsb3cgc2FuZGJveC5cbiAqXG4gKiBTZWUgYC4uL3J1bnRpbWUvd29ybGQtaW5pdC50c2AgZm9yIHRoZSBob3N0LXNpZGUgaW1wbGVtZW50YXRpb24gYW5kIHRoZVxuICogZnVsbCByYXRpb25hbGUuXG4gKi9cblxuZXhwb3J0IHt9O1xuIl19
|
package/dist/workflow.d.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import type { Event, WorkflowRun } from '@workflow/world';
|
|
2
2
|
import type { CryptoKey } from './encryption.js';
|
|
3
|
-
|
|
3
|
+
import type { StepHydrationCache } from './step-hydration-cache.js';
|
|
4
|
+
export declare function runWorkflow(workflowCode: string, workflowRun: WorkflowRun, events: Event[], encryptionKey: CryptoKey | undefined,
|
|
5
|
+
/**
|
|
6
|
+
* Optional per-run cache for hydrated step return values, owned by the inline
|
|
7
|
+
* replay loop so it survives across the loop's iterations (each of which
|
|
8
|
+
* creates a fresh context). Memoizes the decrypt + devalue-parse of completed
|
|
9
|
+
* step results to turn O(N²) replay hydration into O(N). Omitted by callers
|
|
10
|
+
* that replay only once (then there is nothing to reuse).
|
|
11
|
+
*/
|
|
12
|
+
stepHydrationCache?: StepHydrationCache): Promise<Uint8Array | unknown>;
|
|
4
13
|
//# sourceMappingURL=workflow.d.ts.map
|
package/dist/workflow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAejD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAiGpE,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,KAAK,EAAE,EACf,aAAa,EAAE,SAAS,GAAG,SAAS;AACpC;;;;;;GAMG;AACH,kBAAkB,CAAC,EAAE,kBAAkB,GACtC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,CAowB/B"}
|