@workflow/core 5.0.0-beta.5 → 5.0.0-beta.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/attribute-changes.d.ts +5 -0
- package/dist/attribute-changes.d.ts.map +1 -0
- package/dist/attribute-changes.js +25 -0
- package/dist/capabilities.d.ts +35 -2
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +74 -5
- package/dist/capture-stack.d.ts +1 -1
- package/dist/capture-stack.js +2 -2
- package/dist/class-serialization.d.ts +32 -0
- package/dist/class-serialization.d.ts.map +1 -1
- package/dist/class-serialization.js +37 -1
- package/dist/classify-error.d.ts +19 -3
- package/dist/classify-error.d.ts.map +1 -1
- package/dist/classify-error.js +98 -6
- package/dist/context-violation-error.d.ts +5 -5
- package/dist/context-violation-error.d.ts.map +1 -1
- package/dist/context-violation-error.js +8 -6
- package/dist/create-hook.d.ts +72 -7
- package/dist/create-hook.d.ts.map +1 -1
- package/dist/create-hook.js +1 -1
- package/dist/define-hook.js +2 -2
- package/dist/describe-error.d.ts +7 -7
- package/dist/describe-error.d.ts.map +1 -1
- package/dist/describe-error.js +97 -12
- package/dist/encryption.d.ts +38 -4
- package/dist/encryption.d.ts.map +1 -1
- package/dist/encryption.js +96 -14
- package/dist/events-consumer.d.ts +271 -0
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +646 -42
- package/dist/flushable-stream.d.ts +56 -1
- package/dist/flushable-stream.d.ts.map +1 -1
- package/dist/flushable-stream.js +123 -11
- package/dist/global.d.ts +36 -2
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +21 -6
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/log-format.d.ts +2 -2
- package/dist/log-format.js +7 -7
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +10 -6
- package/dist/private.d.ts +226 -9
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +626 -7
- package/dist/replay-payload-cache.d.ts +64 -0
- package/dist/replay-payload-cache.d.ts.map +1 -0
- package/dist/replay-payload-cache.js +158 -0
- package/dist/runtime/compute-instance.d.ts +13 -0
- package/dist/runtime/compute-instance.d.ts.map +1 -0
- package/dist/runtime/compute-instance.js +14 -0
- package/dist/runtime/constants.d.ts +315 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +502 -16
- package/dist/runtime/count-step-started-events.d.ts +52 -0
- package/dist/runtime/count-step-started-events.d.ts.map +1 -0
- package/dist/runtime/count-step-started-events.js +72 -0
- package/dist/runtime/deployment-guard.d.ts +99 -0
- package/dist/runtime/deployment-guard.d.ts.map +1 -0
- package/dist/runtime/deployment-guard.js +154 -0
- package/dist/runtime/get-port-lazy.d.ts +15 -0
- package/dist/runtime/get-port-lazy.d.ts.map +1 -1
- package/dist/runtime/get-port-lazy.js +75 -6
- package/dist/runtime/get-world-lazy.d.ts +5 -14
- package/dist/runtime/get-world-lazy.d.ts.map +1 -1
- package/dist/runtime/get-world-lazy.js +19 -29
- package/dist/runtime/helpers.d.ts +341 -29
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +559 -57
- package/dist/runtime/quickjs-assets.generated.d.ts +14 -0
- package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -0
- package/dist/runtime/quickjs-assets.generated.js +30 -0
- package/dist/runtime/quickjs-entrypoint.d.ts +136 -0
- package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -0
- package/dist/runtime/quickjs-entrypoint.js +1686 -0
- package/dist/runtime/quickjs-runtime.d.ts +244 -0
- package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
- package/dist/runtime/quickjs-runtime.js +2427 -0
- package/dist/runtime/quickjs-serde.d.ts +107 -0
- package/dist/runtime/quickjs-serde.d.ts.map +1 -0
- package/dist/runtime/quickjs-serde.js +2159 -0
- package/dist/runtime/replay-budget.d.ts +97 -0
- package/dist/runtime/replay-budget.d.ts.map +1 -0
- package/dist/runtime/replay-budget.js +139 -0
- package/dist/runtime/replay-recovery-reporter.d.ts +36 -0
- package/dist/runtime/replay-recovery-reporter.d.ts.map +1 -0
- package/dist/runtime/replay-recovery-reporter.js +64 -0
- package/dist/runtime/resume-hook.d.ts +91 -8
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +512 -89
- package/dist/runtime/resume-latency.d.ts +150 -0
- package/dist/runtime/resume-latency.d.ts.map +1 -0
- package/dist/runtime/resume-latency.js +155 -0
- package/dist/runtime/run-id-time.d.ts +19 -0
- package/dist/runtime/run-id-time.d.ts.map +1 -0
- package/dist/runtime/run-id-time.js +42 -0
- package/dist/runtime/run.d.ts +72 -7
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +280 -53
- package/dist/runtime/runs.d.ts +54 -3
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +126 -16
- package/dist/runtime/start.d.ts +101 -2
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +352 -61
- package/dist/runtime/step-executor.d.ts +205 -5
- package/dist/runtime/step-executor.d.ts.map +1 -1
- package/dist/runtime/step-executor.js +760 -127
- package/dist/runtime/step-latency.d.ts +220 -0
- package/dist/runtime/step-latency.d.ts.map +1 -0
- package/dist/runtime/step-latency.js +215 -0
- package/dist/runtime/step-ownership.d.ts +72 -0
- package/dist/runtime/step-ownership.d.ts.map +1 -0
- package/dist/runtime/step-ownership.js +114 -0
- package/dist/runtime/step-single-flight.d.ts +12 -0
- package/dist/runtime/step-single-flight.d.ts.map +1 -0
- package/dist/runtime/step-single-flight.js +75 -0
- package/dist/runtime/suspension-handler.d.ts +269 -7
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +1253 -125
- package/dist/runtime/unserializable-step.d.ts +34 -0
- package/dist/runtime/unserializable-step.d.ts.map +1 -0
- package/dist/runtime/unserializable-step.js +52 -0
- package/dist/runtime/vm-mode.d.ts +44 -0
- package/dist/runtime/vm-mode.d.ts.map +1 -0
- package/dist/runtime/vm-mode.js +62 -0
- package/dist/runtime/vm-serde-bundle.generated.d.ts +14 -0
- package/dist/runtime/vm-serde-bundle.generated.d.ts.map +1 -0
- package/dist/runtime/vm-serde-bundle.generated.js +16 -0
- package/dist/runtime/wait-continuation.d.ts +106 -0
- package/dist/runtime/wait-continuation.d.ts.map +1 -0
- package/dist/runtime/wait-continuation.js +136 -0
- package/dist/runtime/wait-until.d.ts +18 -0
- package/dist/runtime/wait-until.d.ts.map +1 -0
- package/dist/runtime/wait-until.js +42 -0
- package/dist/runtime/world-compatibility.d.ts +32 -0
- package/dist/runtime/world-compatibility.d.ts.map +1 -0
- package/dist/runtime/world-compatibility.js +44 -0
- package/dist/runtime/world-init.d.ts +17 -42
- package/dist/runtime/world-init.d.ts.map +1 -1
- package/dist/runtime/world-init.js +18 -43
- package/dist/runtime/world.d.ts +14 -2
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +75 -19
- package/dist/runtime.d.ts +10 -6
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +3741 -490
- package/dist/sealed-box.d.ts +167 -0
- package/dist/sealed-box.d.ts.map +1 -0
- package/dist/sealed-box.js +571 -0
- package/dist/serialization/client.d.ts +3 -3
- package/dist/serialization/client.d.ts.map +1 -1
- package/dist/serialization/client.js +8 -4
- package/dist/serialization/codec-devalue-vm.d.ts +16 -0
- package/dist/serialization/codec-devalue-vm.d.ts.map +1 -0
- package/dist/serialization/codec-devalue-vm.js +148 -0
- package/dist/serialization/codec-devalue.d.ts +1 -1
- package/dist/serialization/codec-devalue.d.ts.map +1 -1
- package/dist/serialization/codec-devalue.js +24 -6
- package/dist/serialization/codec.d.ts +37 -2
- package/dist/serialization/codec.d.ts.map +1 -1
- package/dist/serialization/codec.js +2 -2
- package/dist/serialization/compression.d.ts +105 -0
- package/dist/serialization/compression.d.ts.map +1 -0
- package/dist/serialization/compression.js +261 -0
- package/dist/serialization/encryption.d.ts +119 -17
- package/dist/serialization/encryption.d.ts.map +1 -1
- package/dist/serialization/encryption.js +152 -17
- package/dist/serialization/errors.d.ts +13 -0
- package/dist/serialization/errors.d.ts.map +1 -1
- package/dist/serialization/errors.js +20 -2
- package/dist/serialization/format.d.ts +6 -6
- package/dist/serialization/format.js +7 -7
- package/dist/serialization/hardened.d.ts +156 -0
- package/dist/serialization/hardened.d.ts.map +1 -0
- package/dist/serialization/hardened.js +538 -0
- package/dist/serialization/index.d.ts +10 -8
- package/dist/serialization/index.d.ts.map +1 -1
- package/dist/serialization/index.js +10 -8
- package/dist/serialization/reducers/class-vm.d.ts +20 -0
- package/dist/serialization/reducers/class-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/class-vm.js +77 -0
- package/dist/serialization/reducers/class.d.ts.map +1 -1
- package/dist/serialization/reducers/class.js +11 -6
- package/dist/serialization/reducers/common-vm.d.ts +15 -0
- package/dist/serialization/reducers/common-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/common-vm.js +616 -0
- package/dist/serialization/reducers/common.d.ts +1 -1
- package/dist/serialization/reducers/common.d.ts.map +1 -1
- package/dist/serialization/reducers/common.js +202 -62
- package/dist/serialization/reducers/step-function-vm.d.ts +44 -0
- package/dist/serialization/reducers/step-function-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/step-function-vm.js +97 -0
- package/dist/serialization/reducers/step-function.d.ts.map +1 -1
- package/dist/serialization/reducers/step-function.js +25 -9
- package/dist/serialization/step.d.ts +4 -4
- package/dist/serialization/step.d.ts.map +1 -1
- package/dist/serialization/step.js +9 -5
- package/dist/serialization/types.d.ts +80 -1
- package/dist/serialization/types.d.ts.map +1 -1
- package/dist/serialization/types.js +15 -1
- package/dist/serialization/workflow-vm.d.ts +29 -0
- package/dist/serialization/workflow-vm.d.ts.map +1 -0
- package/dist/serialization/workflow-vm.js +74 -0
- package/dist/serialization-format.d.ts +64 -8
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +225 -73
- package/dist/serialization.d.ts +262 -34
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +1879 -274
- package/dist/set-attributes.d.ts +13 -0
- package/dist/set-attributes.d.ts.map +1 -0
- package/dist/set-attributes.js +60 -0
- package/dist/source-map.d.ts +25 -0
- package/dist/source-map.d.ts.map +1 -1
- package/dist/source-map.js +154 -10
- package/dist/step/context-storage.d.ts +61 -2
- package/dist/step/context-storage.d.ts.map +1 -1
- package/dist/step/context-storage.js +7 -5
- package/dist/step/writable-stream.d.ts +3 -3
- package/dist/step/writable-stream.d.ts.map +1 -1
- package/dist/step/writable-stream.js +72 -9
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +148 -27
- package/dist/symbols.d.ts +50 -0
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +51 -1
- package/dist/telemetry/semantic-conventions.d.ts +397 -2
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +297 -3
- package/dist/telemetry.d.ts +91 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +244 -17
- package/dist/test-support/orchestrator-context.d.ts +25 -0
- package/dist/test-support/orchestrator-context.d.ts.map +1 -0
- package/dist/test-support/orchestrator-context.js +101 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +23 -1
- package/dist/util.d.ts +0 -5
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +1 -15
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/index.d.ts.map +1 -1
- package/dist/vm/index.js +84 -14
- package/dist/vm/script-cache.d.ts +26 -0
- package/dist/vm/script-cache.d.ts.map +1 -0
- package/dist/vm/script-cache.js +131 -0
- package/dist/vm/uint8array-base64.js +1 -1
- package/dist/workflow/abort-controller.d.ts +2 -2
- package/dist/workflow/abort-controller.d.ts.map +1 -1
- package/dist/workflow/abort-controller.js +88 -21
- package/dist/workflow/attribute-dispatcher.d.ts +6 -0
- package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
- package/dist/workflow/attribute-dispatcher.js +45 -0
- package/dist/workflow/create-hook.d.ts.map +1 -1
- package/dist/workflow/create-hook.js +24 -3
- package/dist/workflow/get-workflow-metadata.js +2 -2
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +304 -47
- package/dist/workflow/index.d.ts +1 -0
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +2 -1
- package/dist/workflow/set-attributes.d.ts +68 -0
- package/dist/workflow/set-attributes.d.ts.map +1 -0
- package/dist/workflow/set-attributes.js +60 -0
- package/dist/workflow/sleep.d.ts.map +1 -1
- package/dist/workflow/sleep.js +58 -12
- package/dist/workflow/world-init-stub.d.ts +3 -3
- package/dist/workflow/world-init-stub.js +4 -4
- package/dist/workflow.d.ts +95 -3
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +895 -561
- package/docs/api-reference/create-hook.mdx +89 -10
- package/docs/api-reference/create-webhook.mdx +16 -15
- package/docs/api-reference/define-hook.mdx +35 -33
- package/docs/api-reference/fatal-error.mdx +30 -8
- package/docs/api-reference/fetch.mdx +14 -10
- package/docs/api-reference/get-step-metadata.mdx +2 -2
- package/docs/api-reference/get-workflow-metadata.mdx +3 -3
- package/docs/api-reference/get-writable.mdx +7 -7
- package/docs/api-reference/index.mdx +4 -1
- package/docs/api-reference/retryable-error.mdx +1 -1
- package/docs/api-reference/set-attributes.mdx +61 -0
- package/docs/api-reference/sleep.mdx +4 -4
- package/docs/foundations/cancellation.mdx +31 -32
- package/docs/foundations/errors-and-retries.mdx +42 -11
- package/docs/foundations/hooks.mdx +64 -35
- package/docs/foundations/idempotency.mdx +244 -12
- package/docs/foundations/index.mdx +1 -23
- package/docs/foundations/meta.json +2 -1
- package/docs/foundations/serialization.mdx +21 -22
- package/docs/foundations/starting-workflows.mdx +106 -30
- package/docs/foundations/streaming.mdx +107 -59
- package/docs/foundations/versioning.mdx +263 -0
- package/docs/foundations/workflows-and-steps.mdx +9 -9
- package/docs/how-it-works/cancellation.mdx +63 -63
- package/docs/how-it-works/code-transform.mdx +83 -67
- package/docs/how-it-works/encryption.mdx +30 -26
- package/docs/how-it-works/event-sourcing.mdx +98 -34
- package/docs/how-it-works/framework-integrations.mdx +96 -337
- package/docs/how-it-works/understanding-directives.mdx +22 -22
- package/package.json +24 -15
- package/dist/runtime/step-handler.d.ts +0 -2
- package/dist/runtime/step-handler.d.ts.map +0 -1
- package/dist/runtime/step-handler.js +0 -776
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { ReplayDivergenceError } from '@workflow/errors';
|
|
1
2
|
import { EventConsumerResult } from '../events-consumer.js';
|
|
3
|
+
import { awaitEarlierDeliveries, registerDeliveryBarrier, } from '../private.js';
|
|
2
4
|
import { hydrateStepReturnValue } from '../serialization.js';
|
|
3
5
|
import { ABORT_HOOK_TOKEN, ABORT_STREAM_NAME } from '../symbols.js';
|
|
4
6
|
import { getAbortStreamId } from '../util.js';
|
|
@@ -36,7 +38,7 @@ export class WorkflowAbortSignal {
|
|
|
36
38
|
/**
|
|
37
39
|
* @internal Sets aborted state and fires listeners.
|
|
38
40
|
* Called by abort() on first-run, or by the events consumer on replay.
|
|
39
|
-
* Idempotent
|
|
41
|
+
* Idempotent: second call is a no-op.
|
|
40
42
|
*/
|
|
41
43
|
_setAborted(reason) {
|
|
42
44
|
if (this.aborted)
|
|
@@ -118,6 +120,16 @@ export function createCreateAbortController(ctx) {
|
|
|
118
120
|
if (event.correlationId !== correlationId) {
|
|
119
121
|
return EventConsumerResult.NotConsumed;
|
|
120
122
|
}
|
|
123
|
+
const eventToken = 'eventData' in event && event.eventData && 'token' in event.eventData
|
|
124
|
+
? event.eventData.token
|
|
125
|
+
: undefined;
|
|
126
|
+
if (typeof eventToken === 'string' &&
|
|
127
|
+
eventToken !== this[ABORT_HOOK_TOKEN]) {
|
|
128
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
129
|
+
ctx.onWorkflowError(new ReplayDivergenceError(`Replay divergence: abort hook event ${event.eventType} for ${correlationId} belongs to token "${eventToken}", but the current abort hook expects "${this[ABORT_HOOK_TOKEN]}"`, { eventId: event.eventId }));
|
|
130
|
+
});
|
|
131
|
+
return EventConsumerResult.Finished;
|
|
132
|
+
}
|
|
121
133
|
if (event.eventType === 'hook_created') {
|
|
122
134
|
const queueItem = ctx.invocationsQueue.get(correlationId);
|
|
123
135
|
if (queueItem && queueItem.type === 'hook') {
|
|
@@ -129,38 +141,93 @@ export function createCreateAbortController(ctx) {
|
|
|
129
141
|
// The abort was recorded in the event log (from a previous run's
|
|
130
142
|
// abort() call, or from a step/external abort). Update signal
|
|
131
143
|
// state and fire listeners at this deterministic point in the
|
|
132
|
-
// promiseQueue
|
|
144
|
+
// promiseQueue, the same ordering as hook payload delivery.
|
|
133
145
|
//
|
|
134
146
|
// The payload is the dehydrated form written by the suspension
|
|
135
147
|
// handler (a Uint8Array, possibly encrypted). Hydrate it via the
|
|
136
148
|
// same machinery as regular hook payloads (workflow/hook.ts:117)
|
|
137
149
|
// so the reason round-trips with full type fidelity. Reading the
|
|
138
|
-
// raw payload here is a bug
|
|
150
|
+
// raw payload here is a bug: it's not a plain object after
|
|
139
151
|
// dehydration, so `'reason' in payload` is false and reason
|
|
140
152
|
// ends up undefined on replay.
|
|
141
153
|
const rawPayload = event.eventData?.payload;
|
|
154
|
+
// An abort is a branch-deciding delivery: `_setAborted` fires the
|
|
155
|
+
// signal's listeners, and a listener is free to invoke a step and
|
|
156
|
+
// draw a ULID. So it registers in the delivery-barrier registry as a
|
|
157
|
+
// 'hook' (which is exactly what the event is) so that wait, hook
|
|
158
|
+
// and step deliveries order against it by event-log position rather
|
|
159
|
+
// than by whose hydration finished first. It is always ARMED: unlike
|
|
160
|
+
// a buffered user hook payload, nothing about its delivery waits on
|
|
161
|
+
// workflow code asking for it.
|
|
162
|
+
//
|
|
163
|
+
// Resolving straight off the queue slot was sufficient only while
|
|
164
|
+
// every other delivery also resolved from its slot. Step results no
|
|
165
|
+
// longer do (see step.ts), so an abort whose slot ran while a
|
|
166
|
+
// log-earlier step sat behind a barrier would overtake it; see
|
|
167
|
+
// `delivery-barrier-coverage.test.ts`.
|
|
168
|
+
//
|
|
169
|
+
// The deferral is captured HERE, at event-consumption time, for the
|
|
170
|
+
// same two reasons spelled out in step.ts: the set of earlier
|
|
171
|
+
// deliveries stays a function of log position alone, and barriers
|
|
172
|
+
// that retire before this slot runs are still seen.
|
|
173
|
+
const eventIndex = ctx.eventsConsumer.eventIndex;
|
|
174
|
+
const barrier = registerDeliveryBarrier(ctx, eventIndex, 'hook');
|
|
175
|
+
const earlierDelivered = awaitEarlierDeliveries(ctx, eventIndex, 'hook');
|
|
176
|
+
// Account this abort as a pending delivery, exactly like step
|
|
177
|
+
// results (step.ts) and hook payloads (workflow/hook.ts) do. The
|
|
178
|
+
// suspension handler dehydrates queued step arguments only once
|
|
179
|
+
// `scheduleWhenIdle` observes `pendingDeliveries === 0`. Without
|
|
180
|
+
// this counter, a step dispatched right after the abort (e.g. one
|
|
181
|
+
// that receives `controller.signal`) can have its arguments
|
|
182
|
+
// serialized while the abort is still in flight behind
|
|
183
|
+
// `await hydrateStepReturnValue`, capturing `signal.aborted === false`
|
|
184
|
+
// (and a missing reason). Bumping the counter holds the suspension
|
|
185
|
+
// until `_setAborted` has landed, so downstream serialization is
|
|
186
|
+
// deterministic regardless of reason-hydration (decryption) latency.
|
|
187
|
+
//
|
|
188
|
+
// It is released inside the slot, before the detached deferral, so
|
|
189
|
+
// `scheduleWhenIdle` can still reach idle and retire the barriers
|
|
190
|
+
// that deferral may be waiting on, the same shape as the hook and
|
|
191
|
+
// step paths.
|
|
192
|
+
ctx.pendingDeliveries++;
|
|
142
193
|
ctx.promiseQueue = ctx.promiseQueue.then(async () => {
|
|
143
|
-
let reason
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
194
|
+
let reason;
|
|
195
|
+
try {
|
|
196
|
+
if (rawPayload !== undefined) {
|
|
197
|
+
try {
|
|
198
|
+
const prepared = await ctx.replayPayloadCache.prepareEventPayload(event.eventId, 'payload', rawPayload);
|
|
199
|
+
const hydrated = (await hydrateStepReturnValue(rawPayload, ctx.runId, ctx.encryptionKey, ctx.globalThis, {}, prepared));
|
|
200
|
+
if (hydrated &&
|
|
201
|
+
typeof hydrated === 'object' &&
|
|
202
|
+
'reason' in hydrated) {
|
|
203
|
+
reason = hydrated.reason;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
// Best-effort: if hydration fails, fall back to undefined
|
|
208
|
+
// reason. The signal still aborts; the user won't see
|
|
209
|
+
// the original reason. Matches WorkflowAbortSignal's spec
|
|
210
|
+
// fallback (DOMException AbortError).
|
|
151
211
|
}
|
|
152
212
|
}
|
|
153
|
-
catch {
|
|
154
|
-
// Best-effort: if hydration fails, fall back to undefined
|
|
155
|
-
// reason. The signal still aborts; the user just won't see
|
|
156
|
-
// the original reason. Matches WorkflowAbortSignal's spec
|
|
157
|
-
// fallback (DOMException AbortError).
|
|
158
|
-
}
|
|
159
213
|
}
|
|
160
|
-
|
|
214
|
+
finally {
|
|
215
|
+
ctx.pendingDeliveries--;
|
|
216
|
+
}
|
|
217
|
+
// Detached, like the other deliveries: `awaitEarlierDeliveries`
|
|
218
|
+
// may be waiting on a delivery this queue itself drives, and
|
|
219
|
+
// blocking a slot on that would deadlock the queue.
|
|
220
|
+
void earlierDelivered.then(() => {
|
|
221
|
+
barrier.markDelivered();
|
|
222
|
+
this.signal._setAborted(reason);
|
|
223
|
+
});
|
|
161
224
|
});
|
|
162
225
|
ctx.invocationsQueue.delete(correlationId);
|
|
163
|
-
|
|
226
|
+
// Multiple handlers can observe the same pending abort request and
|
|
227
|
+
// durably record it before replay removes the queue item. Abort is
|
|
228
|
+
// idempotent, so consume later matching receipts as no-ops instead
|
|
229
|
+
// of surfacing a corrupted event log after the first receipt.
|
|
230
|
+
return EventConsumerResult.Consumed;
|
|
164
231
|
}
|
|
165
232
|
if (event.eventType === 'hook_disposed') {
|
|
166
233
|
ctx.invocationsQueue.delete(correlationId);
|
|
@@ -208,7 +275,7 @@ export function createAbortSignalStatics() {
|
|
|
208
275
|
return composite;
|
|
209
276
|
}
|
|
210
277
|
}
|
|
211
|
-
// Listen to each signal
|
|
278
|
+
// Listen to each signal; first one to abort wins. Track listeners so
|
|
212
279
|
// we can remove them after the composite aborts; otherwise the closures
|
|
213
280
|
// (capturing `composite`) prevent GC for any input signal that outlives
|
|
214
281
|
// the composite (e.g. a long-lived external controller).
|
|
@@ -242,4 +309,4 @@ export function createAbortSignalStatics() {
|
|
|
242
309
|
},
|
|
243
310
|
};
|
|
244
311
|
}
|
|
245
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJvcnQtY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvdy9hYm9ydC1jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFOUM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixNQUFNLEdBQVksU0FBUyxDQUFDO0lBRW5CLENBQUMsaUJBQWlCLENBQUMsQ0FBUztJQUM1QixDQUFDLGdCQUFnQixDQUFDLENBQVM7SUFFcEMsVUFBVSxHQUFzQixFQUFFLENBQUM7SUFDbkMsUUFBUSxHQUFpRCxJQUFJLENBQUM7SUFFOUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFxRDtRQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksVUFBa0IsRUFBRSxTQUFpQjtRQUMvQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxD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QVEsRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUM3QyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO3dCQUMvQixNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUNoRCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDdkIsQ0FBQyxDQUFDO1lBRUYsS0FBSyxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0I7b0JBQUUsU0FBUztnQkFDdkMsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO29CQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUN2QixTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDckMsT0FBTyxFQUFFLENBQUM7b0JBQ1osQ0FBQztnQkFDSCxDQUFDLENBQUM7Z0JBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFFRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsT0FBTztZQUNMLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0VBQWdFO2dCQUM5RCwrQ0FBK0M7Z0JBQy9DLG9EQUFvRCxDQUN2RCxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCB9IGZyb20gJy4uL3ByaXZhdGUuanMnO1xuaW1wb3J0IHsgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZSB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24uanMnO1xuaW1wb3J0IHsgQUJPUlRfSE9PS19UT0tFTiwgQUJPUlRfU1RSRUFNX05BTUUgfSBmcm9tICcuLi9zeW1ib2xzLmpzJztcbmltcG9ydCB7IGdldEFib3J0U3RyZWFtSWQgfSBmcm9tICcuLi91dGlsLmpzJztcblxuLyoqXG4gKiBBIGxpZ2h0d2VpZ2h0IEFib3J0U2lnbmFsIGltcGxlbWVudGF0aW9uIGZvciB0aGUgd29ya2Zsb3cgVk0gY29udGV4dC5cbiAqXG4gKiBgc2lnbmFsLmFib3J0ZWRgIGFuZCBsaXN0ZW5lcnMgYXJlIHVwZGF0ZWQgaW4gdHdvIHNjZW5hcmlvczpcbiAqIDEuIE9uIGZpcnN0LXJ1bjogd2hlbiBgYWJvcnQoKWAgaXMgY2FsbGVkIGluIHRoZSB3b3JrZmxvdyBjb2RlXG4gKiAyLiBPbiByZXBsYXk6IHdoZW4gdGhlIGV2ZW50cyBjb25zdW1lciBwcm9jZXNzZXMgdGhlIGBob29rX3JlY2VpdmVkYFxuICogICAgZXZlbnQgKGNoYWluZWQgdGhyb3VnaCBwcm9taXNlUXVldWUgZm9yIGRldGVybWluaXN0aWMgb3JkZXJpbmcpXG4gKlxuICogT24gcmVwbGF5LCBgYWJvcnQoKWAgaW4gdGhlIHdvcmtmbG93IGNvZGUgYmVjb21lcyBhIG5vLW9wIHNpbmNlXG4gKiBgX3NldEFib3J0ZWRgIHdhcyBhbHJlYWR5IGNhbGxlZCBieSB0aGUgZXZlbnRzIGNvbnN1bWVyLlxuICovXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dBYm9ydFNpZ25hbCB7XG4gIGFib3J0ZWQgPSBmYWxzZTtcbiAgcmVhc29uOiB1bmtub3duID0gdW5kZWZpbmVkO1xuXG4gIHJlYWRvbmx5IFtBQk9SVF9TVFJFQU1fTkFNRV06IHN0cmluZztcbiAgcmVhZG9ubHkgW0FCT1JUX0hPT0tfVE9LRU5dOiBzdHJpbmc7XG5cbiAgI2xpc3RlbmVyczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcbiAgI29uYWJvcnQ6ICgodGhpczogV29ya2Zsb3dBYm9ydFNpZ25hbCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBnZXQgb25hYm9ydCgpOiAoKHRoaXM6IFdvcmtmbG93QWJvcnRTaWduYWwpID0+IHZvaWQpIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuI29uYWJvcnQ7XG4gIH1cblxuICBzZXQgb25hYm9ydChoYW5kbGVyOiAoKHRoaXM6IFdvcmtmbG93QWJvcnRTaWduYWwpID0+IHZvaWQpIHwgbnVsbCkge1xuICAgIHRoaXMuI29uYWJvcnQgPSBoYW5kbGVyO1xuICAgIGlmIChoYW5kbGVyICYmIHRoaXMuYWJvcnRlZCkge1xuICAgICAgaGFuZGxlci5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbU5hbWU6IHN0cmluZywgaG9va1Rva2VuOiBzdHJpbmcpIHtcbiAgICB0aGlzW0FCT1JUX1NUUkVBTV9OQU1FXSA9IHN0cmVhbU5hbWU7XG4gICAgdGhpc1tBQk9SVF9IT09LX1RPS0VOXSA9IGhvb2tUb2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgU2V0cyBhYm9ydGVkIHN0YXRlIGFuZCBmaXJlcyBsaXN0ZW5lcnMuXG4gICAqIENhbGxlZCBieSBhYm9ydCgpIG9uIGZpcnN0LXJ1biwgb3IgYnkgdGhlIGV2ZW50cyBjb25zdW1lciBvbiByZXBsYXkuXG4gICAqIElkZW1wb3RlbnQg4oCUIHNlY29uZCBjYWxsIGlzIGEgbm8tb3AuXG4gICAqL1xuICBfc2V0QWJvcnRlZChyZWFzb24/OiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkgcmV0dXJuO1xuICAgIHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5yZWFzb24gPSByZWFzb247XG4gICAgaWYgKHRoaXMuI29uYWJvcnQpIHtcbiAgICAgIHRoaXMuI29uYWJvcnQuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNsaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfVxuICAgIHRoaXMuI2xpc3RlbmVycyA9IFtdO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHR5cGUgIT09ICdhYm9ydCcpIHJldHVybjtcbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICAvLyBGaXJlIHN5bmNocm9ub3VzbHksIG5vdCBvbiBhIG1pY3JvdGFzay4gTmF0aXZlIEFib3J0U2lnbmFsIGZpcmVzIG9uIGFcbiAgICAgIC8vIG1pY3JvdGFzayBwZXIgc3BlYywgYnV0IGluc2lkZSB0aGUgd29ya2Zsb3cgVk0gd2UgZGVsaWJlcmF0ZWx5IGRpdmVyZ2VcbiAgICAgIC8vIGZvciBkZXRlcm1pbmlzdGljIHJlcGxheTogbGlzdGVuZXIgb3JkZXJpbmcgbXVzdCBiZSB0aWVkIHRvIHRoZVxuICAgICAgLy8gb3JjaGVzdHJhdG9yJ3Mgc3luYyBleGVjdXRpb24gcGF0aCwgbm90IHRvIG1pY3JvdGFzayBzY2hlZHVsaW5nLlxuICAgICAgbGlzdGVuZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy4jbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHR5cGUgIT09ICdhYm9ydCcpIHJldHVybjtcbiAgICB0aGlzLiNsaXN0ZW5lcnMgPSB0aGlzLiNsaXN0ZW5lcnMuZmlsdGVyKChsKSA9PiBsICE9PSBsaXN0ZW5lcik7XG4gIH1cblxuICB0aHJvd0lmQWJvcnRlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICB0aHJvdyAoXG4gICAgICAgIHRoaXMucmVhc29uID8/XG4gICAgICAgIG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgd29ya2Zsb3ctY29udGV4dCBgQWJvcnRDb250cm9sbGVyYCBjbGFzcyB0aGF0IHVzZXMgaG9va3MgZm9yXG4gKiBkdXJhYmxlIHN0YXRlIGFuZCBzdHJlYW1zIGZvciByZWFsLXRpbWUgc3RlcCBwcm9wYWdhdGlvbi5cbiAqXG4gKiBGb2xsb3dzIHRoZSBzYW1lIHBhdHRlcm4gYXMgYGNyZWF0ZUNyZWF0ZUhvb2soKWAgaW4gYHdvcmtmbG93L2hvb2sudHNgOlxuICogLSBSZWdpc3RlcnMgYSBob29rIGluIHRoZSBpbnZvY2F0aW9ucyBxdWV1ZSBvbiBjb25zdHJ1Y3Rpb25cbiAqIC0gU3Vic2NyaWJlcyB0byB0aGUgZXZlbnRzIGNvbnN1bWVyIGZvciBob29rX2NyZWF0ZWQvaG9va19yZWNlaXZlZCBldmVudHNcbiAqIC0gYGFib3J0KClgIGNhbGxzIGBfc2V0QWJvcnRlZGAgKyBtYXJrcyB0aGUgaG9vayBmb3IgcmVzdW1wdGlvblxuICogLSBUaGUgc3VzcGVuc2lvbiBoYW5kbGVyIHByb2Nlc3NlcyB0aGUgYWJvcnQgKGNyZWF0ZXMgZXZlbnQgKyB3cml0ZXMgc3RyZWFtKVxuICogLSBPbiByZXBsYXksIHRoZSBldmVudHMgY29uc3VtZXIgY2FsbHMgYF9zZXRBYm9ydGVkYCB3aGVuIGhvb2tfcmVjZWl2ZWRcbiAqICAgaXMgcHJvY2Vzc2VkLCBhbmQgYGFib3J0KClgIGluIHRoZSB3b3JrZmxvdyBjb2RlIGJlY29tZXMgYSBuby1vcFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3JlYXRlQWJvcnRDb250cm9sbGVyKGN0eDogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBjbGFzcyBXb3JrZmxvd0Fib3J0Q29udHJvbGxlciB7XG4gICAgcmVhZG9ubHkgc2lnbmFsOiBXb3JrZmxvd0Fib3J0U2lnbmFsO1xuICAgIHJlYWRvbmx5IFtBQk9SVF9TVFJFQU1fTkFNRV06IHN0cmluZztcbiAgICByZWFkb25seSBbQUJPUlRfSE9PS19UT0tFTl06IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgY29uc3QgaWQgPSBjdHguZ2VuZXJhdGVVbGlkKCk7XG4gICAgICBjb25zdCBzdHJlYW1OYW1lID0gZ2V0QWJvcnRTdHJlYW1JZChpZCk7XG4gICAgICBjb25zdCBob29rVG9rZW4gPSBgYWJydF8ke2lkfWA7XG5cbiAgICAgIHRoaXNbQUJPUlRfU1RSRUFNX05BTUVdID0gc3RyZWFtTmFtZTtcbiAgICAgIHRoaXNbQUJPUlRfSE9PS19UT0tFTl0gPSBob29rVG9rZW47XG4gICAgICB0aGlzLnNpZ25hbCA9IG5ldyBXb3JrZmxvd0Fib3J0U2lnbmFsKHN0cmVhbU5hbWUsIGhvb2tUb2tlbik7XG5cbiAgICAgIC8vIFJlZ2lzdGVyIGFuIGludGVybmFsIHN5c3RlbSBob29rIGluIHRoZSBpbnZvY2F0aW9ucyBxdWV1ZS5cbiAgICAgIC8vIGlzU3lzdGVtIHByZXZlbnRzIHRva2VuIG5hbWVzcGFjZSBjb25mbGljdHMgd2l0aCB1c2VyIGhvb2tzLlxuICAgICAgY29uc3QgY29ycmVsYXRpb25JZCA9IGBob29rXyR7Y3R4LmdlbmVyYXRlVWxpZCgpfWA7XG4gICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5zZXQoY29ycmVsYXRpb25JZCwge1xuICAgICAgICB0eXBlOiAnaG9vaycsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgIHRva2VuOiBob29rVG9rZW4sXG4gICAgICAgIGlzV2ViaG9vazogZmFsc2UsXG4gICAgICAgIGlzU3lzdGVtOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFN1YnNjcmliZSB0byBldmVudHMgZm9yIHRoaXMgaG9vaydzIGxpZmVjeWNsZVxuICAgICAgY3R4LmV2ZW50c0NvbnN1bWVyLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmNvcnJlbGF0aW9uSWQgIT09IGNvcnJlbGF0aW9uSWQpIHtcbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX2NyZWF0ZWQnKSB7XG4gICAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICdob29rJykge1xuICAgICAgICAgICAgcXVldWVJdGVtLmhhc0NyZWF0ZWRFdmVudCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfcmVjZWl2ZWQnKSB7XG4gICAgICAgICAgLy8gVGhlIGFib3J0IHdhcyByZWNvcmRlZCBpbiB0aGUgZXZlbnQgbG9nIChmcm9tIGEgcHJldmlvdXMgcnVuJ3NcbiAgICAgICAgICAvLyBhYm9ydCgpIGNhbGwsIG9yIGZyb20gYSBzdGVwL2V4dGVybmFsIGFib3J0KS4gVXBkYXRlIHNpZ25hbFxuICAgICAgICAgIC8vIHN0YXRlIGFuZCBmaXJlIGxpc3RlbmVycyBhdCB0aGlzIGRldGVybWluaXN0aWMgcG9pbnQgaW4gdGhlXG4gICAgICAgICAgLy8gcHJvbWlzZVF1ZXVlIOKAlCBzYW1lIG9yZGVyaW5nIGFzIGhvb2sgcGF5bG9hZCBkZWxpdmVyeS5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFRoZSBwYXlsb2FkIGlzIHRoZSBkZWh5ZHJhdGVkIGZvcm0gd3JpdHRlbiBieSB0aGUgc3VzcGVuc2lvblxuICAgICAgICAgIC8vIGhhbmRsZXIgKGEgVWludDhBcnJheSwgcG9zc2libHkgZW5jcnlwdGVkKS4gSHlkcmF0ZSBpdCB2aWEgdGhlXG4gICAgICAgICAgLy8gc2FtZSBtYWNoaW5lcnkgYXMgcmVndWxhciBob29rIHBheWxvYWRzICh3b3JrZmxvdy9ob29rLnRzOjExNylcbiAgICAgICAgICAvLyBzbyB0aGUgcmVhc29uIHJvdW5kLXRyaXBzIHdpdGggZnVsbCB0eXBlIGZpZGVsaXR5LiBSZWFkaW5nIHRoZVxuICAgICAgICAgIC8vIHJhdyBwYXlsb2FkIGhlcmUgaXMgYSBidWcg4oCUIGl0J3Mgbm90IGEgcGxhaW4gb2JqZWN0IGFmdGVyXG4gICAgICAgICAgLy8gZGVoeWRyYXRpb24sIHNvIGAncmVhc29uJyBpbiBwYXlsb2FkYCBpcyBmYWxzZSBhbmQgcmVhc29uXG4gICAgICAgICAgLy8gZW5kcyB1cCB1bmRlZmluZWQgb24gcmVwbGF5LlxuICAgICAgICAgIGNvbnN0IHJhd1BheWxvYWQgPSBldmVudC5ldmVudERhdGE/LnBheWxvYWQ7XG4gICAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVhc29uOiB1bmtub3duID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHJhd1BheWxvYWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGh5ZHJhdGVkID0gKGF3YWl0IGh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUoXG4gICAgICAgICAgICAgICAgICByYXdQYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgY3R4LnJ1bklkLFxuICAgICAgICAgICAgICAgICAgY3R4LmVuY3J5cHRpb25LZXksXG4gICAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpc1xuICAgICAgICAgICAgICAgICkpIGFzIHsgcmVhc29uPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVkICYmXG4gICAgICAgICAgICAgICAgICB0eXBlb2YgaHlkcmF0ZWQgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgICAncmVhc29uJyBpbiBoeWRyYXRlZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcmVhc29uID0gaHlkcmF0ZWQucmVhc29uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gQmVzdC1lZmZvcnQ6IGlmIGh5ZHJhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIC8vIHJlYXNvbi4gVGhlIHNpZ25hbCBzdGlsbCBhYm9ydHM7IHRoZSB1c2VyIGp1c3Qgd29uJ3Qgc2VlXG4gICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIHJlYXNvbi4gTWF0Y2hlcyBXb3JrZmxvd0Fib3J0U2lnbmFsJ3Mgc3BlY1xuICAgICAgICAgICAgICAgIC8vIGZhbGxiYWNrIChET01FeGNlcHRpb24gQWJvcnRFcnJvcikuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2lnbmFsLl9zZXRBYm9ydGVkKHJlYXNvbik7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19kaXNwb3NlZCcpIHtcbiAgICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGFib3J0KHJlYXNvbj86IHVua25vd24pOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSByZXR1cm47IC8vIG5vLW9wIChhbHJlYWR5IGFib3J0ZWQsIGUuZy4gZnJvbSByZXBsYXkpXG5cbiAgICAgIC8vIFVwZGF0ZSBzaWduYWwgc3RhdGUgYW5kIGZpcmUgbGlzdGVuZXJzIHN5bmNocm9ub3VzbHlcbiAgICAgIHRoaXMuc2lnbmFsLl9zZXRBYm9ydGVkKHJlYXNvbik7XG5cbiAgICAgIC8vIE1hcmsgdGhlIGhvb2sgZm9yIHJlc3VtcHRpb24gc28gdGhlIHN1c3BlbnNpb24gaGFuZGxlciByZWNvcmRzXG4gICAgICAvLyB0aGUgYWJvcnQgaW4gdGhlIGV2ZW50IGxvZyBhbmQgd3JpdGVzIHRoZSBzdHJlYW0gcGFja2V0LlxuICAgICAgZm9yIChjb25zdCBbLCBpdGVtXSBvZiBjdHguaW52b2NhdGlvbnNRdWV1ZSkge1xuICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnaG9vaycgJiYgaXRlbS50b2tlbiA9PT0gdGhpc1tBQk9SVF9IT09LX1RPS0VOXSkge1xuICAgICAgICAgIGl0ZW0uYWJvcnRSZXF1ZXN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGl0ZW0uYWJvcnRSZWFzb24gPSByZWFzb247XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHdvcmtmbG93LWNvbnRleHQgYEFib3J0U2lnbmFsYCBvYmplY3Qgd2l0aCBzdGF0aWMgbWV0aG9kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFib3J0U2lnbmFsU3RhdGljcygpOiB7XG4gIGFib3J0OiAocmVhc29uPzogdW5rbm93bikgPT4gV29ya2Zsb3dBYm9ydFNpZ25hbDtcbiAgYW55OiAoXG4gICAgc2lnbmFsczogSXRlcmFibGU8e1xuICAgICAgYWJvcnRlZDogYm9vbGVhbjtcbiAgICAgIHJlYXNvbj86IHVua25vd247XG4gICAgICBhZGRFdmVudExpc3RlbmVyPzogRnVuY3Rpb247XG4gICAgfT5cbiAgKSA9PiBXb3JrZmxvd0Fib3J0U2lnbmFsO1xuICB0aW1lb3V0OiAoKSA9PiBuZXZlcjtcbn0ge1xuICByZXR1cm4ge1xuICAgIGFib3J0KHJlYXNvbj86IHVua25vd24pOiBXb3JrZmxvd0Fib3J0U2lnbmFsIHtcbiAgICAgIGNvbnN0IHNpZ25hbCA9IG5ldyBXb3JrZmxvd0Fib3J0U2lnbmFsKCcnLCAnJyk7XG4gICAgICBzaWduYWwuX3NldEFib3J0ZWQoXG4gICAgICAgIHJlYXNvbiA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgICAgICk7XG4gICAgICByZXR1cm4gc2lnbmFsO1xuICAgIH0sXG5cbiAgICBhbnkoXG4gICAgICBzaWduYWxzOiBJdGVyYWJsZTx7XG4gICAgICAgIGFib3J0ZWQ6IGJvb2xlYW47XG4gICAgICAgIHJlYXNvbj86IHVua25vd247XG4gICAgICAgIGFkZEV2ZW50TGlzdGVuZXI/OiBGdW5jdGlvbjtcbiAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcj86IEZ1bmN0aW9uO1xuICAgICAgfT5cbiAgICApOiBXb3JrZmxvd0Fib3J0U2lnbmFsIHtcbiAgICAgIGNvbnN0IGNvbXBvc2l0ZSA9IG5ldyBXb3JrZmxvd0Fib3J0U2lnbmFsKCcnLCAnJyk7XG5cbiAgICAgIC8vIE1hdGVyaWFsaXplIHRoZSBpdGVyYWJsZSBvbmNlLiBOYXRpdmUgQWJvcnRTaWduYWwuYW55IGRvZXMgdGhlIHNhbWU6XG4gICAgICAvLyBzaW5nbGUtc2hvdCBpdGVyYWJsZXMgKGUuZy4gZ2VuZXJhdG9ycykgd291bGQgb3RoZXJ3aXNlIHByb2R1Y2UgemVyb1xuICAgICAgLy8gZW50cmllcyBvbiB0aGUgc2Vjb25kIHBhc3MgYmVsb3cuXG4gICAgICBjb25zdCBhcnIgPSBBcnJheS5mcm9tKHNpZ25hbHMpO1xuXG4gICAgICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBhcnIpIHtcbiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgY29tcG9zaXRlLl9zZXRBYm9ydGVkKHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgIHJldHVybiBjb21wb3NpdGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTGlzdGVuIHRvIGVhY2ggc2lnbmFsIOKAlCBmaXJzdCBvbmUgdG8gYWJvcnQgd2lucy4gVHJhY2sgbGlzdGVuZXJzIHNvXG4gICAgICAvLyB3ZSBjYW4gcmVtb3ZlIHRoZW0gYWZ0ZXIgdGhlIGNvbXBvc2l0ZSBhYm9ydHM7IG90aGVyd2lzZSB0aGUgY2xvc3VyZXNcbiAgICAgIC8vIChjYXB0dXJpbmcgYGNvbXBvc2l0ZWApIHByZXZlbnQgR0MgZm9yIGFueSBpbnB1dCBzaWduYWwgdGhhdCBvdXRsaXZlc1xuICAgICAgLy8gdGhlIGNvbXBvc2l0ZSAoZS5nLiBhIGxvbmctbGl2ZWQgZXh0ZXJuYWwgY29udHJvbGxlcikuXG4gICAgICBjb25zdCBsaXN0ZW5lcnM6IEFycmF5PHtcbiAgICAgICAgc2lnbmFsOiAodHlwZW9mIGFycilbbnVtYmVyXTtcbiAgICAgICAgbGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gICAgICB9PiA9IFtdO1xuICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB7IHNpZ25hbCwgbGlzdGVuZXIgfSBvZiBsaXN0ZW5lcnMpIHtcbiAgICAgICAgICBpZiAoc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGlzdGVuZXJzLmxlbmd0aCA9IDA7XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBhcnIpIHtcbiAgICAgICAgaWYgKCFzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcikgY29udGludWU7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgIGlmICghY29tcG9zaXRlLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIGNvbXBvc2l0ZS5fc2V0QWJvcnRlZChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKHsgc2lnbmFsLCBsaXN0ZW5lciB9KTtcbiAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcG9zaXRlO1xuICAgIH0sXG5cbiAgICB0aW1lb3V0KCk6IG5ldmVyIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0Fib3J0U2lnbmFsLnRpbWVvdXQoKSBpcyBub3Qgc3VwcG9ydGVkIGluIHdvcmtmbG93IGZ1bmN0aW9ucy4gJyArXG4gICAgICAgICAgJ1VzZSBzbGVlcCgpIHdpdGggYW4gQWJvcnRDb250cm9sbGVyIGluc3RlYWQuICcgK1xuICAgICAgICAgICdTZWU6IC9kb2NzL2Vycm9ycy9hYm9ydC1zaWduYWwtdGltZW91dC1pbi13b3JrZmxvdydcbiAgICAgICk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
312
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJvcnQtY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvdy9hYm9ydC1jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsdUJBQXVCLEdBRXhCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFOUM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixNQUFNLEdBQVksU0FBUyxDQUFDO0lBRW5CLENBQUMsaUJBQWlCLENBQUMsQ0FBUztJQUM1QixDQUFDLGdCQUFnQixDQUFDLENBQVM7SUFFcEMsVUFBVSxHQUFzQixFQUFFLENBQUM7SUFDbkMsUUFBUSxHQUFpRCxJQUFJLENBQUM7SUFFOUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFxRDtRQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksVUFBa0IsRUFBRSxTQUFpQjtRQUMvQyxJQUFJLENBQUMsaUJB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bUJBQW1CLEVBQUUsQ0FBQzt3QkFDL0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDaEQsQ0FBQztnQkFDSCxDQUFDO2dCQUNELFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLENBQUMsQ0FBQztZQUVGLEtBQUssTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCO29CQUFFLFNBQVM7Z0JBQ3ZDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDdkIsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ3JDLE9BQU8sRUFBRSxDQUFDO29CQUNaLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDO2dCQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDckMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3QyxDQUFDO1lBRUQsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE9BQU87WUFDTCxNQUFNLElBQUksS0FBSyxDQUNiLGdFQUFnRTtnQkFDOUQsK0NBQStDO2dCQUMvQyxvREFBb0QsQ0FDdkQsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcGxheURpdmVyZ2VuY2VFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQge1xuICBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzLFxuICByZWdpc3RlckRlbGl2ZXJ5QmFycmllcixcbiAgdHlwZSBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQsXG59IGZyb20gJy4uL3ByaXZhdGUuanMnO1xuaW1wb3J0IHsgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZSB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24uanMnO1xuaW1wb3J0IHsgQUJPUlRfSE9PS19UT0tFTiwgQUJPUlRfU1RSRUFNX05BTUUgfSBmcm9tICcuLi9zeW1ib2xzLmpzJztcbmltcG9ydCB7IGdldEFib3J0U3RyZWFtSWQgfSBmcm9tICcuLi91dGlsLmpzJztcblxuLyoqXG4gKiBBIGxpZ2h0d2VpZ2h0IEFib3J0U2lnbmFsIGltcGxlbWVudGF0aW9uIGZvciB0aGUgd29ya2Zsb3cgVk0gY29udGV4dC5cbiAqXG4gKiBgc2lnbmFsLmFib3J0ZWRgIGFuZCBsaXN0ZW5lcnMgYXJlIHVwZGF0ZWQgaW4gdHdvIHNjZW5hcmlvczpcbiAqIDEuIE9uIGZpcnN0LXJ1bjogd2hlbiBgYWJvcnQoKWAgaXMgY2FsbGVkIGluIHRoZSB3b3JrZmxvdyBjb2RlXG4gKiAyLiBPbiByZXBsYXk6IHdoZW4gdGhlIGV2ZW50cyBjb25zdW1lciBwcm9jZXNzZXMgdGhlIGBob29rX3JlY2VpdmVkYFxuICogICAgZXZlbnQgKGNoYWluZWQgdGhyb3VnaCBwcm9taXNlUXVldWUgZm9yIGRldGVybWluaXN0aWMgb3JkZXJpbmcpXG4gKlxuICogT24gcmVwbGF5LCBgYWJvcnQoKWAgaW4gdGhlIHdvcmtmbG93IGNvZGUgYmVjb21lcyBhIG5vLW9wIHNpbmNlXG4gKiBgX3NldEFib3J0ZWRgIHdhcyBhbHJlYWR5IGNhbGxlZCBieSB0aGUgZXZlbnRzIGNvbnN1bWVyLlxuICovXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dBYm9ydFNpZ25hbCB7XG4gIGFib3J0ZWQgPSBmYWxzZTtcbiAgcmVhc29uOiB1bmtub3duID0gdW5kZWZpbmVkO1xuXG4gIHJlYWRvbmx5IFtBQk9SVF9TVFJFQU1fTkFNRV06IHN0cmluZztcbiAgcmVhZG9ubHkgW0FCT1JUX0hPT0tfVE9LRU5dOiBzdHJpbmc7XG5cbiAgI2xpc3RlbmVyczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcbiAgI29uYWJvcnQ6ICgodGhpczogV29ya2Zsb3dBYm9ydFNpZ25hbCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBnZXQgb25hYm9ydCgpOiAoKHRoaXM6IFdvcmtmbG93QWJvcnRTaWduYWwpID0+IHZvaWQpIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuI29uYWJvcnQ7XG4gIH1cblxuICBzZXQgb25hYm9ydChoYW5kbGVyOiAoKHRoaXM6IFdvcmtmbG93QWJvcnRTaWduYWwpID0+IHZvaWQpIHwgbnVsbCkge1xuICAgIHRoaXMuI29uYWJvcnQgPSBoYW5kbGVyO1xuICAgIGlmIChoYW5kbGVyICYmIHRoaXMuYWJvcnRlZCkge1xuICAgICAgaGFuZGxlci5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbU5hbWU6IHN0cmluZywgaG9va1Rva2VuOiBzdHJpbmcpIHtcbiAgICB0aGlzW0FCT1JUX1NUUkVBTV9OQU1FXSA9IHN0cmVhbU5hbWU7XG4gICAgdGhpc1tBQk9SVF9IT09LX1RPS0VOXSA9IGhvb2tUb2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgU2V0cyBhYm9ydGVkIHN0YXRlIGFuZCBmaXJlcyBsaXN0ZW5lcnMuXG4gICAqIENhbGxlZCBieSBhYm9ydCgpIG9uIGZpcnN0LXJ1biwgb3IgYnkgdGhlIGV2ZW50cyBjb25zdW1lciBvbiByZXBsYXkuXG4gICAqIElkZW1wb3RlbnQ6IHNlY29uZCBjYWxsIGlzIGEgbm8tb3AuXG4gICAqL1xuICBfc2V0QWJvcnRlZChyZWFzb24/OiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkgcmV0dXJuO1xuICAgIHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5yZWFzb24gPSByZWFzb247XG4gICAgaWYgKHRoaXMuI29uYWJvcnQpIHtcbiAgICAgIHRoaXMuI29uYWJvcnQuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNsaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfVxuICAgIHRoaXMuI2xpc3RlbmVycyA9IFtdO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHR5cGUgIT09ICdhYm9ydCcpIHJldHVybjtcbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICAvLyBGaXJlIHN5bmNocm9ub3VzbHksIG5vdCBvbiBhIG1pY3JvdGFzay4gTmF0aXZlIEFib3J0U2lnbmFsIGZpcmVzIG9uIGFcbiAgICAgIC8vIG1pY3JvdGFzayBwZXIgc3BlYywgYnV0IGluc2lkZSB0aGUgd29ya2Zsb3cgVk0gd2UgZGVsaWJlcmF0ZWx5IGRpdmVyZ2VcbiAgICAgIC8vIGZvciBkZXRlcm1pbmlzdGljIHJlcGxheTogbGlzdGVuZXIgb3JkZXJpbmcgbXVzdCBiZSB0aWVkIHRvIHRoZVxuICAgICAgLy8gb3JjaGVzdHJhdG9yJ3Mgc3luYyBleGVjdXRpb24gcGF0aCwgbm90IHRvIG1pY3JvdGFzayBzY2hlZHVsaW5nLlxuICAgICAgbGlzdGVuZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy4jbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHR5cGUgIT09ICdhYm9ydCcpIHJldHVybjtcbiAgICB0aGlzLiNsaXN0ZW5lcnMgPSB0aGlzLiNsaXN0ZW5lcnMuZmlsdGVyKChsKSA9PiBsICE9PSBsaXN0ZW5lcik7XG4gIH1cblxuICB0aHJvd0lmQWJvcnRlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICB0aHJvdyAoXG4gICAgICAgIHRoaXMucmVhc29uID8/XG4gICAgICAgIG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgd29ya2Zsb3ctY29udGV4dCBgQWJvcnRDb250cm9sbGVyYCBjbGFzcyB0aGF0IHVzZXMgaG9va3MgZm9yXG4gKiBkdXJhYmxlIHN0YXRlIGFuZCBzdHJlYW1zIGZvciByZWFsLXRpbWUgc3RlcCBwcm9wYWdhdGlvbi5cbiAqXG4gKiBGb2xsb3dzIHRoZSBzYW1lIHBhdHRlcm4gYXMgYGNyZWF0ZUNyZWF0ZUhvb2soKWAgaW4gYHdvcmtmbG93L2hvb2sudHNgOlxuICogLSBSZWdpc3RlcnMgYSBob29rIGluIHRoZSBpbnZvY2F0aW9ucyBxdWV1ZSBvbiBjb25zdHJ1Y3Rpb25cbiAqIC0gU3Vic2NyaWJlcyB0byB0aGUgZXZlbnRzIGNvbnN1bWVyIGZvciBob29rX2NyZWF0ZWQvaG9va19yZWNlaXZlZCBldmVudHNcbiAqIC0gYGFib3J0KClgIGNhbGxzIGBfc2V0QWJvcnRlZGAgKyBtYXJrcyB0aGUgaG9vayBmb3IgcmVzdW1wdGlvblxuICogLSBUaGUgc3VzcGVuc2lvbiBoYW5kbGVyIHByb2Nlc3NlcyB0aGUgYWJvcnQgKGNyZWF0ZXMgZXZlbnQgKyB3cml0ZXMgc3RyZWFtKVxuICogLSBPbiByZXBsYXksIHRoZSBldmVudHMgY29uc3VtZXIgY2FsbHMgYF9zZXRBYm9ydGVkYCB3aGVuIGhvb2tfcmVjZWl2ZWRcbiAqICAgaXMgcHJvY2Vzc2VkLCBhbmQgYGFib3J0KClgIGluIHRoZSB3b3JrZmxvdyBjb2RlIGJlY29tZXMgYSBuby1vcFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3JlYXRlQWJvcnRDb250cm9sbGVyKGN0eDogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBjbGFzcyBXb3JrZmxvd0Fib3J0Q29udHJvbGxlciB7XG4gICAgcmVhZG9ubHkgc2lnbmFsOiBXb3JrZmxvd0Fib3J0U2lnbmFsO1xuICAgIHJlYWRvbmx5IFtBQk9SVF9TVFJFQU1fTkFNRV06IHN0cmluZztcbiAgICByZWFkb25seSBbQUJPUlRfSE9PS19UT0tFTl06IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgY29uc3QgaWQgPSBjdHguZ2VuZXJhdGVVbGlkKCk7XG4gICAgICBjb25zdCBzdHJlYW1OYW1lID0gZ2V0QWJvcnRTdHJlYW1JZChpZCk7XG4gICAgICBjb25zdCBob29rVG9rZW4gPSBgYWJydF8ke2lkfWA7XG5cbiAgICAgIHRoaXNbQUJPUlRfU1RSRUFNX05BTUVdID0gc3RyZWFtTmFtZTtcbiAgICAgIHRoaXNbQUJPUlRfSE9PS19UT0tFTl0gPSBob29rVG9rZW47XG4gICAgICB0aGlzLnNpZ25hbCA9IG5ldyBXb3JrZmxvd0Fib3J0U2lnbmFsKHN0cmVhbU5hbWUsIGhvb2tUb2tlbik7XG5cbiAgICAgIC8vIFJlZ2lzdGVyIGFuIGludGVybmFsIHN5c3RlbSBob29rIGluIHRoZSBpbnZvY2F0aW9ucyBxdWV1ZS5cbiAgICAgIC8vIGlzU3lzdGVtIHByZXZlbnRzIHRva2VuIG5hbWVzcGFjZSBjb25mbGljdHMgd2l0aCB1c2VyIGhvb2tzLlxuICAgICAgY29uc3QgY29ycmVsYXRpb25JZCA9IGBob29rXyR7Y3R4LmdlbmVyYXRlVWxpZCgpfWA7XG4gICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5zZXQoY29ycmVsYXRpb25JZCwge1xuICAgICAgICB0eXBlOiAnaG9vaycsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgIHRva2VuOiBob29rVG9rZW4sXG4gICAgICAgIGlzV2ViaG9vazogZmFsc2UsXG4gICAgICAgIGlzU3lzdGVtOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFN1YnNjcmliZSB0byBldmVudHMgZm9yIHRoaXMgaG9vaydzIGxpZmVjeWNsZVxuICAgICAgY3R4LmV2ZW50c0NvbnN1bWVyLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmNvcnJlbGF0aW9uSWQgIT09IGNvcnJlbGF0aW9uSWQpIHtcbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV2ZW50VG9rZW4gPVxuICAgICAgICAgICdldmVudERhdGEnIGluIGV2ZW50ICYmIGV2ZW50LmV2ZW50RGF0YSAmJiAndG9rZW4nIGluIGV2ZW50LmV2ZW50RGF0YVxuICAgICAgICAgICAgPyBldmVudC5ldmVudERhdGEudG9rZW5cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgZXZlbnRUb2tlbiA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBldmVudFRva2VuICE9PSB0aGlzW0FCT1JUX0hPT0tfVE9LRU5dXG4gICAgICAgICkge1xuICAgICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgICAgbmV3IFJlcGxheURpdmVyZ2VuY2VFcnJvcihcbiAgICAgICAgICAgICAgICBgUmVwbGF5IGRpdmVyZ2VuY2U6IGFib3J0IGhvb2sgZXZlbnQgJHtldmVudC5ldmVudFR5cGV9IGZvciAke2NvcnJlbGF0aW9uSWR9IGJlbG9uZ3MgdG8gdG9rZW4gXCIke2V2ZW50VG9rZW59XCIsIGJ1dCB0aGUgY3VycmVudCBhYm9ydCBob29rIGV4cGVjdHMgXCIke3RoaXNbQUJPUlRfSE9PS19UT0tFTl19XCJgLFxuICAgICAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19jcmVhdGVkJykge1xuICAgICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnaG9vaycpIHtcbiAgICAgICAgICAgIHF1ZXVlSXRlbS5oYXNDcmVhdGVkRXZlbnQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX3JlY2VpdmVkJykge1xuICAgICAgICAgIC8vIFRoZSBhYm9ydCB3YXMgcmVjb3JkZWQgaW4gdGhlIGV2ZW50IGxvZyAoZnJvbSBhIHByZXZpb3VzIHJ1bidzXG4gICAgICAgICAgLy8gYWJvcnQoKSBjYWxsLCBvciBmcm9tIGEgc3RlcC9leHRlcm5hbCBhYm9ydCkuIFVwZGF0ZSBzaWduYWxcbiAgICAgICAgICAvLyBzdGF0ZSBhbmQgZmlyZSBsaXN0ZW5lcnMgYXQgdGhpcyBkZXRlcm1pbmlzdGljIHBvaW50IGluIHRoZVxuICAgICAgICAgIC8vIHByb21pc2VRdWV1ZSwgdGhlIHNhbWUgb3JkZXJpbmcgYXMgaG9vayBwYXlsb2FkIGRlbGl2ZXJ5LlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhlIHBheWxvYWQgaXMgdGhlIGRlaHlkcmF0ZWQgZm9ybSB3cml0dGVuIGJ5IHRoZSBzdXNwZW5zaW9uXG4gICAgICAgICAgLy8gaGFuZGxlciAoYSBVaW50OEFycmF5LCBwb3NzaWJseSBlbmNyeXB0ZWQpLiBIeWRyYXRlIGl0IHZpYSB0aGVcbiAgICAgICAgICAvLyBzYW1lIG1hY2hpbmVyeSBhcyByZWd1bGFyIGhvb2sgcGF5bG9hZHMgKHdvcmtmbG93L2hvb2sudHM6MTE3KVxuICAgICAgICAgIC8vIHNvIHRoZSByZWFzb24gcm91bmQtdHJpcHMgd2l0aCBmdWxsIHR5cGUgZmlkZWxpdHkuIFJlYWRpbmcgdGhlXG4gICAgICAgICAgLy8gcmF3IHBheWxvYWQgaGVyZSBpcyBhIGJ1ZzogaXQncyBub3QgYSBwbGFpbiBvYmplY3QgYWZ0ZXJcbiAgICAgICAgICAvLyBkZWh5ZHJhdGlvbiwgc28gYCdyZWFzb24nIGluIHBheWxvYWRgIGlzIGZhbHNlIGFuZCByZWFzb25cbiAgICAgICAgICAvLyBlbmRzIHVwIHVuZGVmaW5lZCBvbiByZXBsYXkuXG4gICAgICAgICAgY29uc3QgcmF3UGF5bG9hZCA9IGV2ZW50LmV2ZW50RGF0YT8ucGF5bG9hZDtcbiAgICAgICAgICAvLyBBbiBhYm9ydCBpcyBhIGJyYW5jaC1kZWNpZGluZyBkZWxpdmVyeTogYF9zZXRBYm9ydGVkYCBmaXJlcyB0aGVcbiAgICAgICAgICAvLyBzaWduYWwncyBsaXN0ZW5lcnMsIGFuZCBhIGxpc3RlbmVyIGlzIGZyZWUgdG8gaW52b2tlIGEgc3RlcCBhbmRcbiAgICAgICAgICAvLyBkcmF3IGEgVUxJRC4gU28gaXQgcmVnaXN0ZXJzIGluIHRoZSBkZWxpdmVyeS1iYXJyaWVyIHJlZ2lzdHJ5IGFzIGFcbiAgICAgICAgICAvLyAnaG9vaycgKHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB0aGUgZXZlbnQgaXMpIHNvIHRoYXQgd2FpdCwgaG9va1xuICAgICAgICAgIC8vIGFuZCBzdGVwIGRlbGl2ZXJpZXMgb3JkZXIgYWdhaW5zdCBpdCBieSBldmVudC1sb2cgcG9zaXRpb24gcmF0aGVyXG4gICAgICAgICAgLy8gdGhhbiBieSB3aG9zZSBoeWRyYXRpb24gZmluaXNoZWQgZmlyc3QuIEl0IGlzIGFsd2F5cyBBUk1FRDogdW5saWtlXG4gICAgICAgICAgLy8gYSBidWZmZXJlZCB1c2VyIGhvb2sgcGF5bG9hZCwgbm90aGluZyBhYm91dCBpdHMgZGVsaXZlcnkgd2FpdHMgb25cbiAgICAgICAgICAvLyB3b3JrZmxvdyBjb2RlIGFza2luZyBmb3IgaXQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBSZXNvbHZpbmcgc3RyYWlnaHQgb2ZmIHRoZSBxdWV1ZSBzbG90IHdhcyBzdWZmaWNpZW50IG9ubHkgd2hpbGVcbiAgICAgICAgICAvLyBldmVyeSBvdGhlciBkZWxpdmVyeSBhbHNvIHJlc29sdmVkIGZyb20gaXRzIHNsb3QuIFN0ZXAgcmVzdWx0cyBub1xuICAgICAgICAgIC8vIGxvbmdlciBkbyAoc2VlIHN0ZXAudHMpLCBzbyBhbiBhYm9ydCB3aG9zZSBzbG90IHJhbiB3aGlsZSBhXG4gICAgICAgICAgLy8gbG9nLWVhcmxpZXIgc3RlcCBzYXQgYmVoaW5kIGEgYmFycmllciB3b3VsZCBvdmVydGFrZSBpdDsgc2VlXG4gICAgICAgICAgLy8gYGRlbGl2ZXJ5LWJhcnJpZXItY292ZXJhZ2UudGVzdC50c2AuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGUgZGVmZXJyYWwgaXMgY2FwdHVyZWQgSEVSRSwgYXQgZXZlbnQtY29uc3VtcHRpb24gdGltZSwgZm9yIHRoZVxuICAgICAgICAgIC8vIHNhbWUgdHdvIHJlYXNvbnMgc3BlbGxlZCBvdXQgaW4gc3RlcC50czogdGhlIHNldCBvZiBlYXJsaWVyXG4gICAgICAgICAgLy8gZGVsaXZlcmllcyBzdGF5cyBhIGZ1bmN0aW9uIG9mIGxvZyBwb3NpdGlvbiBhbG9uZSwgYW5kIGJhcnJpZXJzXG4gICAgICAgICAgLy8gdGhhdCByZXRpcmUgYmVmb3JlIHRoaXMgc2xvdCBydW5zIGFyZSBzdGlsbCBzZWVuLlxuICAgICAgICAgIGNvbnN0IGV2ZW50SW5kZXggPSBjdHguZXZlbnRzQ29uc3VtZXIuZXZlbnRJbmRleDtcbiAgICAgICAgICBjb25zdCBiYXJyaWVyID0gcmVnaXN0ZXJEZWxpdmVyeUJhcnJpZXIoY3R4LCBldmVudEluZGV4LCAnaG9vaycpO1xuICAgICAgICAgIGNvbnN0IGVhcmxpZXJEZWxpdmVyZWQgPSBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzKFxuICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgZXZlbnRJbmRleCxcbiAgICAgICAgICAgICdob29rJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gQWNjb3VudCB0aGlzIGFib3J0IGFzIGEgcGVuZGluZyBkZWxpdmVyeSwgZXhhY3RseSBsaWtlIHN0ZXBcbiAgICAgICAgICAvLyByZXN1bHRzIChzdGVwLnRzKSBhbmQgaG9vayBwYXlsb2FkcyAod29ya2Zsb3cvaG9vay50cykgZG8uIFRoZVxuICAgICAgICAgIC8vIHN1c3BlbnNpb24gaGFuZGxlciBkZWh5ZHJhdGVzIHF1ZXVlZCBzdGVwIGFyZ3VtZW50cyBvbmx5IG9uY2VcbiAgICAgICAgICAvLyBgc2NoZWR1bGVXaGVuSWRsZWAgb2JzZXJ2ZXMgYHBlbmRpbmdEZWxpdmVyaWVzID09PSAwYC4gV2l0aG91dFxuICAgICAgICAgIC8vIHRoaXMgY291bnRlciwgYSBzdGVwIGRpc3BhdGNoZWQgcmlnaHQgYWZ0ZXIgdGhlIGFib3J0IChlLmcuIG9uZVxuICAgICAgICAgIC8vIHRoYXQgcmVjZWl2ZXMgYGNvbnRyb2xsZXIuc2lnbmFsYCkgY2FuIGhhdmUgaXRzIGFyZ3VtZW50c1xuICAgICAgICAgIC8vIHNlcmlhbGl6ZWQgd2hpbGUgdGhlIGFib3J0IGlzIHN0aWxsIGluIGZsaWdodCBiZWhpbmRcbiAgICAgICAgICAvLyBgYXdhaXQgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZWAsIGNhcHR1cmluZyBgc2lnbmFsLmFib3J0ZWQgPT09IGZhbHNlYFxuICAgICAgICAgIC8vIChhbmQgYSBtaXNzaW5nIHJlYXNvbikuIEJ1bXBpbmcgdGhlIGNvdW50ZXIgaG9sZHMgdGhlIHN1c3BlbnNpb25cbiAgICAgICAgICAvLyB1bnRpbCBgX3NldEFib3J0ZWRgIGhhcyBsYW5kZWQsIHNvIGRvd25zdHJlYW0gc2VyaWFsaXphdGlvbiBpc1xuICAgICAgICAgIC8vIGRldGVybWluaXN0aWMgcmVnYXJkbGVzcyBvZiByZWFzb24taHlkcmF0aW9uIChkZWNyeXB0aW9uKSBsYXRlbmN5LlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gSXQgaXMgcmVsZWFzZWQgaW5zaWRlIHRoZSBzbG90LCBiZWZvcmUgdGhlIGRldGFjaGVkIGRlZmVycmFsLCBzb1xuICAgICAgICAgIC8vIGBzY2hlZHVsZVdoZW5JZGxlYCBjYW4gc3RpbGwgcmVhY2ggaWRsZSBhbmQgcmV0aXJlIHRoZSBiYXJyaWVyc1xuICAgICAgICAgIC8vIHRoYXQgZGVmZXJyYWwgbWF5IGJlIHdhaXRpbmcgb24sIHRoZSBzYW1lIHNoYXBlIGFzIHRoZSBob29rIGFuZFxuICAgICAgICAgIC8vIHN0ZXAgcGF0aHMuXG4gICAgICAgICAgY3R4LnBlbmRpbmdEZWxpdmVyaWVzKys7XG4gICAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVhc29uOiB1bmtub3duO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKHJhd1BheWxvYWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwcmVwYXJlZCA9XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGN0eC5yZXBsYXlQYXlsb2FkQ2FjaGUucHJlcGFyZUV2ZW50UGF5bG9hZChcbiAgICAgICAgICAgICAgICAgICAgICBldmVudC5ldmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICdwYXlsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgICByYXdQYXlsb2FkXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBoeWRyYXRlZCA9IChhd2FpdCBoeWRyYXRlU3RlcFJldHVyblZhbHVlKFxuICAgICAgICAgICAgICAgICAgICByYXdQYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgICBjdHgucnVuSWQsXG4gICAgICAgICAgICAgICAgICAgIGN0eC5lbmNyeXB0aW9uS2V5LFxuICAgICAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpcyxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIHByZXBhcmVkXG4gICAgICAgICAgICAgICAgICApKSBhcyB7IHJlYXNvbj86IHVua25vd24gfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgaHlkcmF0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGh5ZHJhdGVkID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgICAgICAncmVhc29uJyBpbiBoeWRyYXRlZFxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbiA9IGh5ZHJhdGVkLnJlYXNvbjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgIC8vIEJlc3QtZWZmb3J0OiBpZiBoeWRyYXRpb24gZmFpbHMsIGZhbGwgYmFjayB0byB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgIC8vIHJlYXNvbi4gVGhlIHNpZ25hbCBzdGlsbCBhYm9ydHM7IHRoZSB1c2VyIHdvbid0IHNlZVxuICAgICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIHJlYXNvbi4gTWF0Y2hlcyBXb3JrZmxvd0Fib3J0U2lnbmFsJ3Mgc3BlY1xuICAgICAgICAgICAgICAgICAgLy8gZmFsbGJhY2sgKERPTUV4Y2VwdGlvbiBBYm9ydEVycm9yKS5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcy0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRGV0YWNoZWQsIGxpa2UgdGhlIG90aGVyIGRlbGl2ZXJpZXM6IGBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzYFxuICAgICAgICAgICAgLy8gbWF5IGJlIHdhaXRpbmcgb24gYSBkZWxpdmVyeSB0aGlzIHF1ZXVlIGl0c2VsZiBkcml2ZXMsIGFuZFxuICAgICAgICAgICAgLy8gYmxvY2tpbmcgYSBzbG90IG9uIHRoYXQgd291bGQgZGVhZGxvY2sgdGhlIHF1ZXVlLlxuICAgICAgICAgICAgdm9pZCBlYXJsaWVyRGVsaXZlcmVkLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBiYXJyaWVyLm1hcmtEZWxpdmVyZWQoKTtcbiAgICAgICAgICAgICAgdGhpcy5zaWduYWwuX3NldEFib3J0ZWQocmVhc29uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgIC8vIE11bHRpcGxlIGhhbmRsZXJzIGNhbiBvYnNlcnZlIHRoZSBzYW1lIHBlbmRpbmcgYWJvcnQgcmVxdWVzdCBhbmRcbiAgICAgICAgICAvLyBkdXJhYmx5IHJlY29yZCBpdCBiZWZvcmUgcmVwbGF5IHJlbW92ZXMgdGhlIHF1ZXVlIGl0ZW0uIEFib3J0IGlzXG4gICAgICAgICAgLy8gaWRlbXBvdGVudCwgc28gY29uc3VtZSBsYXRlciBtYXRjaGluZyByZWNlaXB0cyBhcyBuby1vcHMgaW5zdGVhZFxuICAgICAgICAgIC8vIG9mIHN1cmZhY2luZyBhIGNvcnJ1cHRlZCBldmVudCBsb2cgYWZ0ZXIgdGhlIGZpcnN0IHJlY2VpcHQuXG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuQ29uc3VtZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19kaXNwb3NlZCcpIHtcbiAgICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGFib3J0KHJlYXNvbj86IHVua25vd24pOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSByZXR1cm47IC8vIG5vLW9wIChhbHJlYWR5IGFib3J0ZWQsIGUuZy4gZnJvbSByZXBsYXkpXG5cbiAgICAgIC8vIFVwZGF0ZSBzaWduYWwgc3RhdGUgYW5kIGZpcmUgbGlzdGVuZXJzIHN5bmNocm9ub3VzbHlcbiAgICAgIHRoaXMuc2lnbmFsLl9zZXRBYm9ydGVkKHJlYXNvbik7XG5cbiAgICAgIC8vIE1hcmsgdGhlIGhvb2sgZm9yIHJlc3VtcHRpb24gc28gdGhlIHN1c3BlbnNpb24gaGFuZGxlciByZWNvcmRzXG4gICAgICAvLyB0aGUgYWJvcnQgaW4gdGhlIGV2ZW50IGxvZyBhbmQgd3JpdGVzIHRoZSBzdHJlYW0gcGFja2V0LlxuICAgICAgZm9yIChjb25zdCBbLCBpdGVtXSBvZiBjdHguaW52b2NhdGlvbnNRdWV1ZSkge1xuICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnaG9vaycgJiYgaXRlbS50b2tlbiA9PT0gdGhpc1tBQk9SVF9IT09LX1RPS0VOXSkge1xuICAgICAgICAgIGl0ZW0uYWJvcnRSZXF1ZXN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGl0ZW0uYWJvcnRSZWFzb24gPSByZWFzb247XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHdvcmtmbG93LWNvbnRleHQgYEFib3J0U2lnbmFsYCBvYmplY3Qgd2l0aCBzdGF0aWMgbWV0aG9kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFib3J0U2lnbmFsU3RhdGljcygpOiB7XG4gIGFib3J0OiAocmVhc29uPzogdW5rbm93bikgPT4gV29ya2Zsb3dBYm9ydFNpZ25hbDtcbiAgYW55OiAoXG4gICAgc2lnbmFsczogSXRlcmFibGU8e1xuICAgICAgYWJvcnRlZDogYm9vbGVhbjtcbiAgICAgIHJlYXNvbj86IHVua25vd247XG4gICAgICBhZGRFdmVudExpc3RlbmVyPzogRnVuY3Rpb247XG4gICAgfT5cbiAgKSA9PiBXb3JrZmxvd0Fib3J0U2lnbmFsO1xuICB0aW1lb3V0OiAoKSA9PiBuZXZlcjtcbn0ge1xuICByZXR1cm4ge1xuICAgIGFib3J0KHJlYXNvbj86IHVua25vd24pOiBXb3JrZmxvd0Fib3J0U2lnbmFsIHtcbiAgICAgIGNvbnN0IHNpZ25hbCA9IG5ldyBXb3JrZmxvd0Fib3J0U2lnbmFsKCcnLCAnJyk7XG4gICAgICBzaWduYWwuX3NldEFib3J0ZWQoXG4gICAgICAgIHJlYXNvbiA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgICAgICk7XG4gICAgICByZXR1cm4gc2lnbmFsO1xuICAgIH0sXG5cbiAgICBhbnkoXG4gICAgICBzaWduYWxzOiBJdGVyYWJsZTx7XG4gICAgICAgIGFib3J0ZWQ6IGJvb2xlYW47XG4gICAgICAgIHJlYXNvbj86IHVua25vd247XG4gICAgICAgIGFkZEV2ZW50TGlzdGVuZXI/OiBGdW5jdGlvbjtcbiAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcj86IEZ1bmN0aW9uO1xuICAgICAgfT5cbiAgICApOiBXb3JrZmxvd0Fib3J0U2lnbmFsIHtcbiAgICAgIGNvbnN0IGNvbXBvc2l0ZSA9IG5ldyBXb3JrZmxvd0Fib3J0U2lnbmFsKCcnLCAnJyk7XG5cbiAgICAgIC8vIE1hdGVyaWFsaXplIHRoZSBpdGVyYWJsZSBvbmNlLiBOYXRpdmUgQWJvcnRTaWduYWwuYW55IGRvZXMgdGhlIHNhbWU6XG4gICAgICAvLyBzaW5nbGUtc2hvdCBpdGVyYWJsZXMgKGUuZy4gZ2VuZXJhdG9ycykgd291bGQgb3RoZXJ3aXNlIHByb2R1Y2UgemVyb1xuICAgICAgLy8gZW50cmllcyBvbiB0aGUgc2Vjb25kIHBhc3MgYmVsb3cuXG4gICAgICBjb25zdCBhcnIgPSBBcnJheS5mcm9tKHNpZ25hbHMpO1xuXG4gICAgICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBhcnIpIHtcbiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgY29tcG9zaXRlLl9zZXRBYm9ydGVkKHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgIHJldHVybiBjb21wb3NpdGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTGlzdGVuIHRvIGVhY2ggc2lnbmFsOyBmaXJzdCBvbmUgdG8gYWJvcnQgd2lucy4gVHJhY2sgbGlzdGVuZXJzIHNvXG4gICAgICAvLyB3ZSBjYW4gcmVtb3ZlIHRoZW0gYWZ0ZXIgdGhlIGNvbXBvc2l0ZSBhYm9ydHM7IG90aGVyd2lzZSB0aGUgY2xvc3VyZXNcbiAgICAgIC8vIChjYXB0dXJpbmcgYGNvbXBvc2l0ZWApIHByZXZlbnQgR0MgZm9yIGFueSBpbnB1dCBzaWduYWwgdGhhdCBvdXRsaXZlc1xuICAgICAgLy8gdGhlIGNvbXBvc2l0ZSAoZS5nLiBhIGxvbmctbGl2ZWQgZXh0ZXJuYWwgY29udHJvbGxlcikuXG4gICAgICBjb25zdCBsaXN0ZW5lcnM6IEFycmF5PHtcbiAgICAgICAgc2lnbmFsOiAodHlwZW9mIGFycilbbnVtYmVyXTtcbiAgICAgICAgbGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gICAgICB9PiA9IFtdO1xuICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB7IHNpZ25hbCwgbGlzdGVuZXIgfSBvZiBsaXN0ZW5lcnMpIHtcbiAgICAgICAgICBpZiAoc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGlzdGVuZXJzLmxlbmd0aCA9IDA7XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBhcnIpIHtcbiAgICAgICAgaWYgKCFzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcikgY29udGludWU7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgIGlmICghY29tcG9zaXRlLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIGNvbXBvc2l0ZS5fc2V0QWJvcnRlZChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKHsgc2lnbmFsLCBsaXN0ZW5lciB9KTtcbiAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcG9zaXRlO1xuICAgIH0sXG5cbiAgICB0aW1lb3V0KCk6IG5ldmVyIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0Fib3J0U2lnbmFsLnRpbWVvdXQoKSBpcyBub3Qgc3VwcG9ydGVkIGluIHdvcmtmbG93IGZ1bmN0aW9ucy4gJyArXG4gICAgICAgICAgJ1VzZSBzbGVlcCgpIHdpdGggYW4gQWJvcnRDb250cm9sbGVyIGluc3RlYWQuICcgK1xuICAgICAgICAgICdTZWU6IC9kb2NzL2Vycm9ycy9hYm9ydC1zaWduYWwtdGltZW91dC1pbi13b3JrZmxvdydcbiAgICAgICk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AttributeChange } from '@workflow/world';
|
|
2
|
+
import { type WorkflowOrchestratorContext } from '../private.js';
|
|
3
|
+
export declare function createSetAttributes(ctx: WorkflowOrchestratorContext): (changes: AttributeChange[], options?: {
|
|
4
|
+
allowReservedAttributes?: boolean;
|
|
5
|
+
}) => Promise<void>;
|
|
6
|
+
//# sourceMappingURL=attribute-dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribute-dispatcher.d.ts","sourceRoot":"","sources":["../../src/workflow/attribute-dispatcher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,eAAe,CAAC;AAEvB,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,2BAA2B,IAEhE,SAAS,eAAe,EAAE,EAC1B,UAAS;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAO,KAClD,OAAO,CAAC,IAAI,CAAC,CAkDjB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ReplayDivergenceError } from '@workflow/errors';
|
|
2
|
+
import { withResolvers } from '@workflow/utils';
|
|
3
|
+
import { EventConsumerResult } from '../events-consumer.js';
|
|
4
|
+
import { scheduleWorkflowSuspension, } from '../private.js';
|
|
5
|
+
export function createSetAttributes(ctx) {
|
|
6
|
+
return async function setAttributes(changes, options = {}) {
|
|
7
|
+
const { promise, resolve } = withResolvers();
|
|
8
|
+
const correlationId = `attr_${ctx.generateUlid()}`;
|
|
9
|
+
const queueItem = {
|
|
10
|
+
type: 'attribute',
|
|
11
|
+
correlationId,
|
|
12
|
+
changes,
|
|
13
|
+
...(options.allowReservedAttributes === true
|
|
14
|
+
? { allowReservedAttributes: true }
|
|
15
|
+
: {}),
|
|
16
|
+
};
|
|
17
|
+
ctx.invocationsQueue.set(correlationId, queueItem);
|
|
18
|
+
ctx.eventsConsumer.subscribe((event) => {
|
|
19
|
+
if (!event) {
|
|
20
|
+
scheduleWorkflowSuspension(ctx);
|
|
21
|
+
return EventConsumerResult.NotConsumed;
|
|
22
|
+
}
|
|
23
|
+
if (event.correlationId !== correlationId) {
|
|
24
|
+
return EventConsumerResult.NotConsumed;
|
|
25
|
+
}
|
|
26
|
+
if (event.eventType !== 'attr_set' ||
|
|
27
|
+
event.eventData.writer.type !== 'workflow' ||
|
|
28
|
+
JSON.stringify(event.eventData.changes) !== JSON.stringify(changes) ||
|
|
29
|
+
(event.eventData.allowReservedAttributes === true) !==
|
|
30
|
+
(options.allowReservedAttributes === true)) {
|
|
31
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
32
|
+
ctx.onWorkflowError(new ReplayDivergenceError(`Replay divergence: Unexpected attribute event for ${correlationId}`, { eventId: event.eventId }));
|
|
33
|
+
});
|
|
34
|
+
return EventConsumerResult.Finished;
|
|
35
|
+
}
|
|
36
|
+
ctx.invocationsQueue.delete(correlationId);
|
|
37
|
+
ctx.promiseQueue = ctx.promiseQueue.then(() => {
|
|
38
|
+
resolve();
|
|
39
|
+
});
|
|
40
|
+
return EventConsumerResult.Finished;
|
|
41
|
+
});
|
|
42
|
+
return promise;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWRpc3BhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvYXR0cmlidXRlLWRpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFDTCwwQkFBMEIsR0FFM0IsTUFBTSxlQUFlLENBQUM7QUFFdkIsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEdBQWdDO0lBQ2xFLE9BQU8sS0FBSyxVQUFVLGFBQWEsQ0FDakMsT0FBMEIsRUFDMUIsVUFBaUQsRUFBRTtRQUVuRCxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsRUFBUSxDQUFDO1FBQ25ELE1BQU0sYUFBYSxHQUFHLFFBQVEsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7UUFDbkQsTUFBTSxTQUFTLEdBQWlDO1lBQzlDLElBQUksRUFBRSxXQUFXO1lBQ2pCLGFBQWE7WUFDYixPQUFPO1lBQ1AsR0FBRyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsS0FBSyxJQUFJO2dCQUMxQyxDQUFDLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUU7Z0JBQ25DLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDUixDQUFDO1FBQ0YsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFbkQsR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsMEJBQTBCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hDLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQ3pDLENBQUM7WUFFRCxJQUFJLEtBQUssQ0FBQyxhQUFhLEtBQUssYUFBYSxFQUFFLENBQUM7Z0JBQzFDLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQ3pDLENBQUM7WUFFRCxJQUNFLEtBQUssQ0FBQyxTQUFTLEtBQUssVUFBVTtnQkFDOUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVU7Z0JBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztnQkFDbkUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLHVCQUF1QixLQUFLLElBQUksQ0FBQztvQkFDaEQsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEtBQUssSUFBSSxDQUFDLEVBQzVDLENBQUM7Z0JBQ0QsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQzVDLEdBQUcsQ0FBQyxlQUFlLENBQ2pCLElBQUkscUJBQXFCLENBQ3ZCLHFEQUFxRCxhQUFhLEVBQUUsRUFDcEUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUMzQixDQUNGLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7WUFDdEMsQ0FBQztZQUVELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDM0MsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQzVDLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXBsYXlEaXZlcmdlbmNlRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IHdpdGhSZXNvbHZlcnMgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBBdHRyaWJ1dGVDaGFuZ2UgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgdHlwZSB7IEF0dHJpYnV0ZUludm9jYXRpb25RdWV1ZUl0ZW0gfSBmcm9tICcuLi9nbG9iYWwuanMnO1xuaW1wb3J0IHtcbiAgc2NoZWR1bGVXb3JrZmxvd1N1c3BlbnNpb24sXG4gIHR5cGUgV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0LFxufSBmcm9tICcuLi9wcml2YXRlLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNldEF0dHJpYnV0ZXMoY3R4OiBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMoXG4gICAgY2hhbmdlczogQXR0cmlidXRlQ2hhbmdlW10sXG4gICAgb3B0aW9uczogeyBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcz86IGJvb2xlYW4gfSA9IHt9XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgcHJvbWlzZSwgcmVzb2x2ZSB9ID0gd2l0aFJlc29sdmVyczx2b2lkPigpO1xuICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSBgYXR0cl8ke2N0eC5nZW5lcmF0ZVVsaWQoKX1gO1xuICAgIGNvbnN0IHF1ZXVlSXRlbTogQXR0cmlidXRlSW52b2NhdGlvblF1ZXVlSXRlbSA9IHtcbiAgICAgIHR5cGU6ICdhdHRyaWJ1dGUnLFxuICAgICAgY29ycmVsYXRpb25JZCxcbiAgICAgIGNoYW5nZXMsXG4gICAgICAuLi4ob3B0aW9ucy5hbGxvd1Jlc2VydmVkQXR0cmlidXRlcyA9PT0gdHJ1ZVxuICAgICAgICA/IHsgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM6IHRydWUgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLnNldChjb3JyZWxhdGlvbklkLCBxdWV1ZUl0ZW0pO1xuXG4gICAgY3R4LmV2ZW50c0NvbnN1bWVyLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgc2NoZWR1bGVXb3JrZmxvd1N1c3BlbnNpb24oY3R4KTtcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5jb3JyZWxhdGlvbklkICE9PSBjb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50LmV2ZW50VHlwZSAhPT0gJ2F0dHJfc2V0JyB8fFxuICAgICAgICBldmVudC5ldmVudERhdGEud3JpdGVyLnR5cGUgIT09ICd3b3JrZmxvdycgfHxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZXZlbnQuZXZlbnREYXRhLmNoYW5nZXMpICE9PSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzKSB8fFxuICAgICAgICAoZXZlbnQuZXZlbnREYXRhLmFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzID09PSB0cnVlKSAhPT1cbiAgICAgICAgICAob3B0aW9ucy5hbGxvd1Jlc2VydmVkQXR0cmlidXRlcyA9PT0gdHJ1ZSlcbiAgICAgICkge1xuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgbmV3IFJlcGxheURpdmVyZ2VuY2VFcnJvcihcbiAgICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiBVbmV4cGVjdGVkIGF0dHJpYnV0ZSBldmVudCBmb3IgJHtjb3JyZWxhdGlvbklkfWAsXG4gICAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgfVxuXG4gICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoY29ycmVsYXRpb25JZCk7XG4gICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICB9KTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-hook.d.ts","sourceRoot":"","sources":["../../src/workflow/create-hook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-hook.d.ts","sourceRoot":"","sources":["../../src/workflow/create-hook.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,IAAI,EACJ,WAAW,EACX,mBAAmB,EACnB,OAAO,EACP,cAAc,EACf,MAAM,mBAAmB,CAAC;AAwB3B,wBAAgB,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAalE;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,GAAG;IAAE,WAAW,EAAE,QAAQ,CAAA;CAAE,GAClD,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAChC,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC"}
|
|
@@ -1,6 +1,27 @@
|
|
|
1
|
+
import { createWorkflowUrl } from '@workflow/utils';
|
|
2
|
+
import { aliasSerializationClass, RUN_CLASS_ID, } from '../class-serialization.js';
|
|
1
3
|
import { throwNotInWorkflowContext } from '../context-errors.js';
|
|
4
|
+
import { Run } from '../runtime/run.js';
|
|
2
5
|
import { WORKFLOW_CREATE_HOOK } from '../symbols.js';
|
|
3
6
|
import { getWorkflowMetadata } from './get-workflow-metadata.js';
|
|
7
|
+
// Alias this bundle's `Run` class in the serialization class registry
|
|
8
|
+
// under the stable id, so the host-side hook event consumer can construct
|
|
9
|
+
// the conflicting run resolved by `hook.getConflict()` via the same
|
|
10
|
+
// registry that revives serialized `Run` instances (the SWC plugin
|
|
11
|
+
// already auto-registers `Run` here, but under a path-derived id the
|
|
12
|
+
// host cannot know statically).
|
|
13
|
+
//
|
|
14
|
+
// In workflow mode this module is compiled into the workflow bundle and
|
|
15
|
+
// executes inside the VM, so `Run` here is the plugin-compiled variant
|
|
16
|
+
// whose methods are durable step proxies. No environment guard is
|
|
17
|
+
// needed: the registry is keyed per-global, so a stray host-side import
|
|
18
|
+
// of this module registers the host's `Run` on the host's registry,
|
|
19
|
+
// which is the correct class for that context.
|
|
20
|
+
//
|
|
21
|
+
// The value import of `Run` also guarantees `runtime/run.js` is included
|
|
22
|
+
// in any bundle that uses hooks, so the registry entry exists whenever
|
|
23
|
+
// `getConflict()` can resolve.
|
|
24
|
+
aliasSerializationClass(RUN_CLASS_ID, Run);
|
|
4
25
|
export function createHook(options) {
|
|
5
26
|
// Inside the workflow VM, the hook function is stored in the globalThis object behind a symbol
|
|
6
27
|
const createHookFn = globalThis[WORKFLOW_CREATE_HOOK];
|
|
@@ -12,7 +33,7 @@ export function createHook(options) {
|
|
|
12
33
|
export function createWebhook(options) {
|
|
13
34
|
const { respondWith, token, ...rest } = (options ?? {});
|
|
14
35
|
if (token !== undefined) {
|
|
15
|
-
throw new Error('`createWebhook()` does not accept a `token` option. Webhook tokens are always
|
|
36
|
+
throw new Error('`createWebhook()` does not accept a `token` option. Webhook tokens are always generated for you. Use `createHook()` with `resumeHook()` for deterministic token patterns.');
|
|
16
37
|
}
|
|
17
38
|
let metadata;
|
|
18
39
|
if (typeof respondWith !== 'undefined') {
|
|
@@ -20,7 +41,7 @@ export function createWebhook(options) {
|
|
|
20
41
|
}
|
|
21
42
|
const hook = createHook({ ...rest, metadata, isWebhook: true });
|
|
22
43
|
const { url } = getWorkflowMetadata();
|
|
23
|
-
hook.url =
|
|
44
|
+
hook.url = createWorkflowUrl(url, { type: 'webhook', token: hook.token });
|
|
24
45
|
return hook;
|
|
25
46
|
}
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvY3JlYXRlLWhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixZQUFZLEdBQ2IsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQVFqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWpFLHNFQUFzRTtBQUN0RSwwRUFBMEU7QUFDMUUsb0VBQW9FO0FBQ3BFLG1FQUFtRTtBQUNuRSxxRUFBcUU7QUFDckUsZ0NBQWdDO0FBQ2hDLEVBQUU7QUFDRix3RUFBd0U7QUFDeEUsdUVBQXVFO0FBQ3ZFLGtFQUFrRTtBQUNsRSx3RUFBd0U7QUFDeEUsb0VBQW9FO0FBQ3BFLCtDQUErQztBQUMvQyxFQUFFO0FBQ0YseUVBQXlFO0FBQ3pFLHVFQUF1RTtBQUN2RSwrQkFBK0I7QUFDL0IsdUJBQXVCLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRTNDLE1BQU0sVUFBVSxVQUFVLENBQVUsT0FBcUI7SUFDdkQsK0ZBQStGO0lBQy9GLE1BQU0sWUFBWSxHQUFJLFVBQWtCLENBQ3RDLG9CQUFvQixDQUNHLENBQUM7SUFDMUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLHlCQUF5QixDQUN2QixjQUFjLEVBQ2Qsa0VBQWtFLEVBQ2xFLFVBQVUsQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFNRCxNQUFNLFVBQVUsYUFBYSxDQUMzQixPQUF3QjtJQUV4QixNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FFckQsQ0FBQztJQUVGLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMktBQTJLLENBQzVLLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxRQUF5RCxDQUFDO0lBQzlELElBQUksT0FBTyxXQUFXLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDdkMsUUFBUSxHQUFHLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBRTlCLENBQUM7SUFFakMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLG1CQUFtQixFQUFFLENBQUM7SUFDdEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUUxRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVXb3JrZmxvd1VybCB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQge1xuICBhbGlhc1NlcmlhbGl6YXRpb25DbGFzcyxcbiAgUlVOX0NMQVNTX0lELFxufSBmcm9tICcuLi9jbGFzcy1zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IHRocm93Tm90SW5Xb3JrZmxvd0NvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0LWVycm9ycy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEhvb2ssXG4gIEhvb2tPcHRpb25zLFxuICBSZXF1ZXN0V2l0aFJlc3BvbnNlLFxuICBXZWJob29rLFxuICBXZWJob29rT3B0aW9ucyxcbn0gZnJvbSAnLi4vY3JlYXRlLWhvb2suanMnO1xuaW1wb3J0IHsgUnVuIH0gZnJvbSAnLi4vcnVudGltZS9ydW4uanMnO1xuaW1wb3J0IHsgV09SS0ZMT1dfQ1JFQVRFX0hPT0sgfSBmcm9tICcuLi9zeW1ib2xzLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93TWV0YWRhdGEgfSBmcm9tICcuL2dldC13b3JrZmxvdy1tZXRhZGF0YS5qcyc7XG5cbi8vIEFsaWFzIHRoaXMgYnVuZGxlJ3MgYFJ1bmAgY2xhc3MgaW4gdGhlIHNlcmlhbGl6YXRpb24gY2xhc3MgcmVnaXN0cnlcbi8vIHVuZGVyIHRoZSBzdGFibGUgaWQsIHNvIHRoZSBob3N0LXNpZGUgaG9vayBldmVudCBjb25zdW1lciBjYW4gY29uc3RydWN0XG4vLyB0aGUgY29uZmxpY3RpbmcgcnVuIHJlc29sdmVkIGJ5IGBob29rLmdldENvbmZsaWN0KClgIHZpYSB0aGUgc2FtZVxuLy8gcmVnaXN0cnkgdGhhdCByZXZpdmVzIHNlcmlhbGl6ZWQgYFJ1bmAgaW5zdGFuY2VzICh0aGUgU1dDIHBsdWdpblxuLy8gYWxyZWFkeSBhdXRvLXJlZ2lzdGVycyBgUnVuYCBoZXJlLCBidXQgdW5kZXIgYSBwYXRoLWRlcml2ZWQgaWQgdGhlXG4vLyBob3N0IGNhbm5vdCBrbm93IHN0YXRpY2FsbHkpLlxuLy9cbi8vIEluIHdvcmtmbG93IG1vZGUgdGhpcyBtb2R1bGUgaXMgY29tcGlsZWQgaW50byB0aGUgd29ya2Zsb3cgYnVuZGxlIGFuZFxuLy8gZXhlY3V0ZXMgaW5zaWRlIHRoZSBWTSwgc28gYFJ1bmAgaGVyZSBpcyB0aGUgcGx1Z2luLWNvbXBpbGVkIHZhcmlhbnRcbi8vIHdob3NlIG1ldGhvZHMgYXJlIGR1cmFibGUgc3RlcCBwcm94aWVzLiBObyBlbnZpcm9ubWVudCBndWFyZCBpc1xuLy8gbmVlZGVkOiB0aGUgcmVnaXN0cnkgaXMga2V5ZWQgcGVyLWdsb2JhbCwgc28gYSBzdHJheSBob3N0LXNpZGUgaW1wb3J0XG4vLyBvZiB0aGlzIG1vZHVsZSByZWdpc3RlcnMgdGhlIGhvc3QncyBgUnVuYCBvbiB0aGUgaG9zdCdzIHJlZ2lzdHJ5LFxuLy8gd2hpY2ggaXMgdGhlIGNvcnJlY3QgY2xhc3MgZm9yIHRoYXQgY29udGV4dC5cbi8vXG4vLyBUaGUgdmFsdWUgaW1wb3J0IG9mIGBSdW5gIGFsc28gZ3VhcmFudGVlcyBgcnVudGltZS9ydW4uanNgIGlzIGluY2x1ZGVkXG4vLyBpbiBhbnkgYnVuZGxlIHRoYXQgdXNlcyBob29rcywgc28gdGhlIHJlZ2lzdHJ5IGVudHJ5IGV4aXN0cyB3aGVuZXZlclxuLy8gYGdldENvbmZsaWN0KClgIGNhbiByZXNvbHZlLlxuYWxpYXNTZXJpYWxpemF0aW9uQ2xhc3MoUlVOX0NMQVNTX0lELCBSdW4pO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSG9vazxUID0gYW55PihvcHRpb25zPzogSG9va09wdGlvbnMpOiBIb29rPFQ+IHtcbiAgLy8gSW5zaWRlIHRoZSB3b3JrZmxvdyBWTSwgdGhlIGhvb2sgZnVuY3Rpb24gaXMgc3RvcmVkIGluIHRoZSBnbG9iYWxUaGlzIG9iamVjdCBiZWhpbmQgYSBzeW1ib2xcbiAgY29uc3QgY3JlYXRlSG9va0ZuID0gKGdsb2JhbFRoaXMgYXMgYW55KVtcbiAgICBXT1JLRkxPV19DUkVBVEVfSE9PS1xuICBdIGFzIHR5cGVvZiBjcmVhdGVIb29rPFQ+O1xuICBpZiAoIWNyZWF0ZUhvb2tGbikge1xuICAgIHRocm93Tm90SW5Xb3JrZmxvd0NvbnRleHQoXG4gICAgICAnY3JlYXRlSG9vaygpJyxcbiAgICAgICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9hcGktcmVmZXJlbmNlL3dvcmtmbG93L2NyZWF0ZS1ob29rJyxcbiAgICAgIGNyZWF0ZUhvb2tcbiAgICApO1xuICB9XG4gIHJldHVybiBjcmVhdGVIb29rRm4ob3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXZWJob29rKFxuICBvcHRpb25zOiBXZWJob29rT3B0aW9ucyAmIHsgcmVzcG9uZFdpdGg6ICdtYW51YWwnIH1cbik6IFdlYmhvb2s8UmVxdWVzdFdpdGhSZXNwb25zZT47XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2ViaG9vayhvcHRpb25zPzogV2ViaG9va09wdGlvbnMpOiBXZWJob29rPFJlcXVlc3Q+O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYmhvb2soXG4gIG9wdGlvbnM/OiBXZWJob29rT3B0aW9uc1xuKTogV2ViaG9vazxSZXF1ZXN0PiB8IFdlYmhvb2s8UmVxdWVzdFdpdGhSZXNwb25zZT4ge1xuICBjb25zdCB7IHJlc3BvbmRXaXRoLCB0b2tlbiwgLi4ucmVzdCB9ID0gKG9wdGlvbnMgPz8ge30pIGFzIFdlYmhvb2tPcHRpb25zICYge1xuICAgIHRva2VuPzogc3RyaW5nO1xuICB9O1xuXG4gIGlmICh0b2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ2BjcmVhdGVXZWJob29rKClgIGRvZXMgbm90IGFjY2VwdCBhIGB0b2tlbmAgb3B0aW9uLiBXZWJob29rIHRva2VucyBhcmUgYWx3YXlzIGdlbmVyYXRlZCBmb3IgeW91LiBVc2UgYGNyZWF0ZUhvb2soKWAgd2l0aCBgcmVzdW1lSG9vaygpYCBmb3IgZGV0ZXJtaW5pc3RpYyB0b2tlbiBwYXR0ZXJucy4nXG4gICAgKTtcbiAgfVxuXG4gIGxldCBtZXRhZGF0YTogUGljazxXZWJob29rT3B0aW9ucywgJ3Jlc3BvbmRXaXRoJz4gfCB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgcmVzcG9uZFdpdGggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbWV0YWRhdGEgPSB7IHJlc3BvbmRXaXRoIH07XG4gIH1cblxuICBjb25zdCBob29rID0gY3JlYXRlSG9vayh7IC4uLnJlc3QsIG1ldGFkYXRhLCBpc1dlYmhvb2s6IHRydWUgfSkgYXNcbiAgICB8IFdlYmhvb2s8UmVxdWVzdD5cbiAgICB8IFdlYmhvb2s8UmVxdWVzdFdpdGhSZXNwb25zZT47XG5cbiAgY29uc3QgeyB1cmwgfSA9IGdldFdvcmtmbG93TWV0YWRhdGEoKTtcbiAgaG9vay51cmwgPSBjcmVhdGVXb3JrZmxvd1VybCh1cmwsIHsgdHlwZTogJ3dlYmhvb2snLCB0b2tlbjogaG9vay50b2tlbiB9KTtcblxuICByZXR1cm4gaG9vaztcbn1cbiJdfQ==
|
|
@@ -7,7 +7,7 @@ export function getWorkflowMetadata() {
|
|
|
7
7
|
// behind a symbol.
|
|
8
8
|
const ctx = globalThis[WORKFLOW_CONTEXT_SYMBOL];
|
|
9
9
|
if (!ctx) {
|
|
10
|
-
// Use the shared `NotInWorkflowOrStepContextError
|
|
10
|
+
// Use the shared `NotInWorkflowOrStepContextError`: it lives in
|
|
11
11
|
// `context-violation-error.ts` specifically so this file can throw it
|
|
12
12
|
// without creating a module-init cycle (the full `context-errors.ts`
|
|
13
13
|
// depends on this file's `WORKFLOW_CONTEXT_SYMBOL`).
|
|
@@ -19,4 +19,4 @@ export function getWorkflowMetadata() {
|
|
|
19
19
|
}
|
|
20
20
|
return ctx;
|
|
21
21
|
}
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXdvcmtmbG93LW1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmtmbG93L2dldC13b3JrZmxvdy1tZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQW9DaEYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCO0FBQ2xDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFakQsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyx5RUFBeUU7SUFDekUsbUJBQW1CO0lBQ25CLE1BQU0sR0FBRyxHQUFJLFVBQWtCLENBQUMsdUJBQXVCLENBQXFCLENBQUM7SUFDN0UsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsZ0VBQWdFO1FBQ2hFLHNFQUFzRTtRQUN0RSxxRUFBcUU7UUFDckUscURBQXFEO1FBQ3JELE1BQU0sR0FBRyxHQUFHLElBQUksK0JBQStCLENBQzdDLHVCQUF1QixFQUN2Qiw0RUFBNEUsQ0FDN0UsQ0FBQztRQUNGLGtFQUFrRTtRQUNsRSx1RUFBdUU7UUFDdkUscUJBQXFCLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDaEQsTUFBTSxHQUFHLENBQUM7SUFDWixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVkaXJlY3RTdGFja1RvQ2FsbGVyIH0gZnJvbSAnLi4vY2FwdHVyZS1zdGFjay5qcyc7XG5pbXBvcnQgeyBOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yIH0gZnJvbSAnLi4vY29udGV4dC12aW9sYXRpb24tZXJyb3IuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93TWV0YWRhdGEge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHdvcmtmbG93LlxuICAgKi9cbiAgd29ya2Zsb3dOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgd29ya2Zsb3dSdW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgd2hlbiB0aGUgd29ya2Zsb3cgcnVuIHN0YXJ0ZWQuXG4gICAqL1xuICB3b3JrZmxvd1N0YXJ0ZWRBdDogRGF0ZTtcblxuICAvKipcbiAgICogVGhlIFVSTCB3aGVyZSB0aGUgd29ya2Zsb3cgY2FuIGJlIHRyaWdnZXJlZC5cbiAgICovXG4gIHVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGZWF0dXJlIGZsYWdzIGluZGljYXRpbmcgd2hpY2ggY2FwYWJpbGl0aWVzIGFyZSBhY3RpdmUgZm9yIHRoaXMgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgZmVhdHVyZXM6IHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGVuY3J5cHRpb24gaXMgZW5hYmxlZCBmb3IgdGhpcyB3b3JrZmxvdyBydW4uXG4gICAgICogV2hlbiBgdHJ1ZWAsIHN0ZXAgaW5wdXRzLCBvdXRwdXRzLCBhbmQgb3RoZXIgc2VyaWFsaXplZCBkYXRhXG4gICAgICogYXJlIGVuY3J5cHRlZCBhdCByZXN0LlxuICAgICAqL1xuICAgIGVuY3J5cHRpb246IGJvb2xlYW47XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBXT1JLRkxPV19DT05URVhUX1NZTUJPTCA9XG4gIC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKCdXT1JLRkxPV19DT05URVhUJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3JrZmxvd01ldGFkYXRhKCk6IFdvcmtmbG93TWV0YWRhdGEge1xuICAvLyBJbnNpZGUgdGhlIHdvcmtmbG93IFZNLCB0aGUgY29udGV4dCBpcyBzdG9yZWQgaW4gdGhlIGdsb2JhbFRoaXMgb2JqZWN0XG4gIC8vIGJlaGluZCBhIHN5bWJvbC5cbiAgY29uc3QgY3R4ID0gKGdsb2JhbFRoaXMgYXMgYW55KVtXT1JLRkxPV19DT05URVhUX1NZTUJPTF0gYXMgV29ya2Zsb3dNZXRhZGF0YTtcbiAgaWYgKCFjdHgpIHtcbiAgICAvLyBVc2UgdGhlIHNoYXJlZCBgTm90SW5Xb3JrZmxvd09yU3RlcENvbnRleHRFcnJvcmA6IGl0IGxpdmVzIGluXG4gICAgLy8gYGNvbnRleHQtdmlvbGF0aW9uLWVycm9yLnRzYCBzcGVjaWZpY2FsbHkgc28gdGhpcyBmaWxlIGNhbiB0aHJvdyBpdFxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgYSBtb2R1bGUtaW5pdCBjeWNsZSAodGhlIGZ1bGwgYGNvbnRleHQtZXJyb3JzLnRzYFxuICAgIC8vIGRlcGVuZHMgb24gdGhpcyBmaWxlJ3MgYFdPUktGTE9XX0NPTlRFWFRfU1lNQk9MYCkuXG4gICAgY29uc3QgZXJyID0gbmV3IE5vdEluV29ya2Zsb3dPclN0ZXBDb250ZXh0RXJyb3IoXG4gICAgICAnZ2V0V29ya2Zsb3dNZXRhZGF0YSgpJyxcbiAgICAgICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9hcGktcmVmZXJlbmNlL3dvcmtmbG93L2dldC13b3JrZmxvdy1tZXRhZGF0YSdcbiAgICApO1xuICAgIC8vIFJlZGlyZWN0IHRoZSBzdGFjayB0byB0aGUgY2FsbGVyIHNvIHRlcm1pbmFsIG92ZXJsYXlzIChOZXh0LmpzLFxuICAgIC8vIFR1cmJvcGFjaywgVlMgQ29kZSkgcG9pbnQgYXQgdGhlIHVzZXIncyBjb2RlIHJhdGhlciB0aGFuIHRoaXMgZnJhbWUuXG4gICAgcmVkaXJlY3RTdGFja1RvQ2FsbGVyKGVyciwgZ2V0V29ya2Zsb3dNZXRhZGF0YSk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIHJldHVybiBjdHg7XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/workflow/hook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/workflow/hook.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAIL,KAAK,2BAA2B,EACjC,MAAM,eAAe,CAAC;AA2CvB,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,2BAA2B,IAChC,CAAC,GAAG,GAAG,EAAE,UAAS,WAAgB,KAAG,IAAI,CAAC,CAAC,CAAC,CAqiB5E"}
|