@workflow/core 5.0.0-beta.2 → 5.0.0-beta.20
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 +84 -0
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +80 -3
- package/dist/runtime/constants.d.ts +93 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +168 -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 +91 -0
- package/dist/runtime/step-executor.d.ts.map +1 -0
- package/dist/runtime/step-executor.js +659 -0
- package/dist/runtime/step-handler.d.ts.map +1 -1
- package/dist/runtime/step-handler.js +699 -556
- package/dist/runtime/suspension-handler.d.ts +55 -6
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +282 -115
- 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 +1234 -334
- 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 +1417 -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 +16 -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.d.ts.map +1 -1
- package/dist/step.js +98 -20
- 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 +260 -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.map +1 -1
- package/dist/workflow.js +148 -47
- 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
package/dist/events-consumer.js
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { eventsLogger } from './logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Delay before firing the deferred unconsumed-event check after the promise
|
|
4
|
+
* queue has drained. Must be long enough for cross-VM microtask chains to
|
|
5
|
+
* propagate (resolve in host → workflow code in VM → subscribe call back
|
|
6
|
+
* in host). Any subscribe() arriving during this window cancels the check.
|
|
7
|
+
*/
|
|
8
|
+
export const DEFERRED_CHECK_DELAY_MS = 100;
|
|
2
9
|
export var EventConsumerResult;
|
|
3
10
|
(function (EventConsumerResult) {
|
|
4
11
|
/**
|
|
@@ -18,6 +25,7 @@ export class EventsConsumer {
|
|
|
18
25
|
eventIndex;
|
|
19
26
|
events = [];
|
|
20
27
|
callbacks = [];
|
|
28
|
+
onConsumedEvent;
|
|
21
29
|
onUnconsumedEvent;
|
|
22
30
|
getPromiseQueue;
|
|
23
31
|
pendingUnconsumedCheck = null;
|
|
@@ -26,6 +34,7 @@ export class EventsConsumer {
|
|
|
26
34
|
constructor(events, options) {
|
|
27
35
|
this.events = events;
|
|
28
36
|
this.eventIndex = 0;
|
|
37
|
+
this.onConsumedEvent = options.onConsumedEvent;
|
|
29
38
|
this.onUnconsumedEvent = options.onUnconsumedEvent;
|
|
30
39
|
this.getPromiseQueue = options.getPromiseQueue;
|
|
31
40
|
}
|
|
@@ -53,8 +62,54 @@ export class EventsConsumer {
|
|
|
53
62
|
}
|
|
54
63
|
process.nextTick(this.consume);
|
|
55
64
|
}
|
|
65
|
+
notifyConsumedEvent(event) {
|
|
66
|
+
if (!this.onConsumedEvent) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
this.onConsumedEvent(event);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
eventsLogger.error('onConsumedEvent callback threw an error', {
|
|
74
|
+
error,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
56
78
|
consume = () => {
|
|
57
|
-
|
|
79
|
+
// Drain consecutively consumable events synchronously within a single
|
|
80
|
+
// pass instead of paying one `process.nextTick` per consumed event.
|
|
81
|
+
//
|
|
82
|
+
// Why this is safe: a callback only consumes an event using a consumer
|
|
83
|
+
// that is ALREADY registered (e.g. a long-lived step consumer walking
|
|
84
|
+
// `step_created` → `step_started` → `step_completed`, or the structural
|
|
85
|
+
// lifecycle consumer). New consumers are only ever registered by workflow
|
|
86
|
+
// VM body code that runs asynchronously off `ctx.promiseQueue` after a
|
|
87
|
+
// delivery `resolve()`; none of the callbacks here call `subscribe()`
|
|
88
|
+
// synchronously. So within one pass `this.callbacks` is mutated only by
|
|
89
|
+
// this loop (the `Finished` splice), and the next event's consumer is
|
|
90
|
+
// either already present (advance now) or not yet registered — in which
|
|
91
|
+
// case no callback consumes the event and we fall through to the
|
|
92
|
+
// cross-VM-safe deferred unconsumed-event check below, exactly as before.
|
|
93
|
+
while (true) {
|
|
94
|
+
const currentEvent = this.events[this.eventIndex] ?? null;
|
|
95
|
+
if (!this.consumeOne(currentEvent)) {
|
|
96
|
+
// No callback consumed the current event; handle the terminal case.
|
|
97
|
+
this.handleUnconsumed(currentEvent);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// A real event was consumed — advance to the next in the same pass. A
|
|
101
|
+
// consumed `null` sentinel never returns true (see consumeOne), so the
|
|
102
|
+
// synchronous drain can't spin past the end of the log.
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Offer `currentEvent` to each registered callback in turn. Returns true
|
|
107
|
+
* when a callback consumed a real (non-null) event and the drain should
|
|
108
|
+
* advance to the next event in the same synchronous pass; false otherwise
|
|
109
|
+
* (nothing consumed it, or the consumed event was the end-of-events
|
|
110
|
+
* sentinel).
|
|
111
|
+
*/
|
|
112
|
+
consumeOne(currentEvent) {
|
|
58
113
|
for (let i = 0; i < this.callbacks.length; i++) {
|
|
59
114
|
const callback = this.callbacks[i];
|
|
60
115
|
let handled = EventConsumerResult.NotConsumed;
|
|
@@ -64,20 +119,28 @@ export class EventsConsumer {
|
|
|
64
119
|
catch (error) {
|
|
65
120
|
eventsLogger.error('EventConsumer callback threw an error', { error });
|
|
66
121
|
}
|
|
67
|
-
if (handled
|
|
68
|
-
handled
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
this.callbacks.splice(i, 1);
|
|
74
|
-
}
|
|
75
|
-
// continue to the next event
|
|
76
|
-
process.nextTick(this.consume);
|
|
77
|
-
return;
|
|
122
|
+
if (handled !== EventConsumerResult.Consumed &&
|
|
123
|
+
handled !== EventConsumerResult.Finished) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if (currentEvent !== null) {
|
|
127
|
+
this.notifyConsumedEvent(currentEvent);
|
|
78
128
|
}
|
|
129
|
+
// consumer handled this event, so increase the event index
|
|
130
|
+
this.eventIndex++;
|
|
131
|
+
// remove the callback if it has finished
|
|
132
|
+
if (handled === EventConsumerResult.Finished) {
|
|
133
|
+
this.callbacks.splice(i, 1);
|
|
134
|
+
}
|
|
135
|
+
// Continue draining only for real events. Real consumers return
|
|
136
|
+
// NotConsumed for the `null` sentinel, but guard against a pathological
|
|
137
|
+
// callback consuming it so the drain never spins past end-of-log.
|
|
138
|
+
return currentEvent !== null;
|
|
79
139
|
}
|
|
80
|
-
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
handleUnconsumed(currentEvent) {
|
|
143
|
+
// All callbacks returned NotConsumed for the current event.
|
|
81
144
|
// If the current event is non-null (a real event, not end-of-events),
|
|
82
145
|
// schedule a deferred check. We chain onto the promiseQueue so that any
|
|
83
146
|
// pending async work (e.g., deserialization/decryption that triggers
|
|
@@ -108,9 +171,9 @@ export class EventsConsumer {
|
|
|
108
171
|
this.pendingUnconsumedCheck = null;
|
|
109
172
|
this.onUnconsumedEvent(currentEvent);
|
|
110
173
|
}
|
|
111
|
-
},
|
|
174
|
+
}, DEFERRED_CHECK_DELAY_MS);
|
|
112
175
|
});
|
|
113
176
|
}
|
|
114
|
-
}
|
|
177
|
+
}
|
|
115
178
|
}
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLWNvbnN1bWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2V2ZW50cy1jb25zdW1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE1BQU0sQ0FBTixJQUFZLG1CQWFYO0FBYkQsV0FBWSxtQkFBbUI7SUFDN0I7O09BRUc7SUFDSCxxRUFBUSxDQUFBO0lBQ1I7O09BRUc7SUFDSCwyRUFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCxxRUFBUSxDQUFBO0FBQ1YsQ0FBQyxFQWJXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFhOUI7QUFzQkQsTUFBTSxPQUFPLGNBQWM7SUFDekIsVUFBVSxDQUFTO0lBQ1YsTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUNyQixTQUFTLEdBQTRCLEVBQUUsQ0FBQztJQUN6QyxpQkFBaUIsQ0FBeUI7SUFDMUMsZUFBZSxDQUFzQjtJQUNyQyxzQkFBc0IsR0FBeUIsSUFBSSxDQUFDO0lBQ3BELHdCQUF3QixHQUF5QyxJQUFJLENBQUM7SUFDdEUsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0lBRW5DLFlBQVksTUFBZSxFQUFFLE9BQThCO1FBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILFNBQVMsQ0FBQyxFQUF5QjtRQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixrRkFBa0Y7UUFDbEYsOEVBQThFO1FBQzlFLDREQUE0RDtRQUM1RCxJQUFJLElBQUksQ0FBQyxzQkFBc0Is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LENBQUMsc0JBQXNCLEtBQUssWUFBWSxFQUFFLENBQUM7d0JBQ2pELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7d0JBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDdkMsQ0FBQztnQkFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDVixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRXZlbnQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgZXZlbnRzTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuXG5leHBvcnQgZW51bSBFdmVudENvbnN1bWVyUmVzdWx0IHtcbiAgLyoqXG4gICAqIENhbGxiYWNrIGNvbnN1bWVkIHRoZSBldmVudCwgYnV0IHNob3VsZCBub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBjYWxsYmFja3MgbGlzdFxuICAgKi9cbiAgQ29uc3VtZWQsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBkaWQgbm90IGNvbnN1bWUgdGhlIGV2ZW50LCBzbyBpdCBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBuZXh0IGNhbGxiYWNrXG4gICAqL1xuICBOb3RDb25zdW1lZCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGNvbnN1bWVkIHRoZSBldmVudCwgYW5kIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGNhbGxiYWNrcyBsaXN0XG4gICAqL1xuICBGaW5pc2hlZCxcbn1cblxudHlwZSBFdmVudENvbnN1bWVyQ2FsbGJhY2sgPSAoZXZlbnQ6IEV2ZW50IHwgbnVsbCkgPT4gRXZlbnRDb25zdW1lclJlc3VsdDtcblxuZXhwb3J0IGludGVyZmFjZSBFdmVudHNDb25zdW1lck9wdGlvbnMge1xuICAvKipcbiAgICogQ2FsbGJhY2sgaW52b2tlZCB3aGVuIGEgbm9uLW51bGwgZXZlbnQgY2Fubm90IGJlIGNvbnN1bWVkIGJ5IGFueSByZWdpc3RlcmVkXG4gICAqIGNhbGxiYWNrLCBpbmRpY2F0aW5nIGFuIG9ycGhhbmVkIG9yIGludmFsaWQgZXZlbnQgaW4gdGhlIGV2ZW50IGxvZy4gVGhlXG4gICAqIGNoZWNrIGlzIGRlZmVycmVkIHVudGlsIGFmdGVyIHRoZSBwcm9taXNlIHF1ZXVlIGhhcyBkcmFpbmVkLCBlbnN1cmluZyB0aGF0XG4gICAqIGFueSBwZW5kaW5nIGFzeW5jIHdvcmsgKGUuZy4sIGRlc2VyaWFsaXphdGlvbi9kZWNyeXB0aW9uKSBjb21wbGV0ZXMgYW5kXG4gICAqIGRvd25zdHJlYW0gc3Vic2NyaWJlKCkgY2FsbHMgaGF2ZSBhIGNoYW5jZSB0byBjYW5jZWwgdGhlIGNoZWNrIGZpcnN0LlxuICAgKi9cbiAgb25VbmNvbnN1bWVkRXZlbnQ6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHByb21pc2UgcXVldWUuIFRoZSB1bmNvbnN1bWVkIGV2ZW50IGNoZWNrIGlzIGNoYWluZWRcbiAgICogb250byB0aGlzIHF1ZXVlIHNvIGl0IG9ubHkgZmlyZXMgYWZ0ZXIgYWxsIHBlbmRpbmcgYXN5bmMgd29yayAoZS5nLixcbiAgICogZGVzZXJpYWxpemF0aW9uKSBoYXMgY29tcGxldGVkLiBUaGlzIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyB3aGVuIGFzeW5jXG4gICAqIGRlc2VyaWFsaXphdGlvbiBkZWxheXMgdGhlIHJlc29sdmUoKSB0aGF0IHRyaWdnZXJzIHRoZSBuZXh0IHN1YnNjcmliZSgpLlxuICAgKi9cbiAgZ2V0UHJvbWlzZVF1ZXVlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgY2xhc3MgRXZlbnRzQ29uc3VtZXIge1xuICBldmVudEluZGV4OiBudW1iZXI7XG4gIHJlYWRvbmx5IGV2ZW50czogRXZlbnRbXSA9IFtdO1xuICByZWFkb25seSBjYWxsYmFja3M6IEV2ZW50Q29uc3VtZXJDYWxsYmFja1tdID0gW107XG4gIHByaXZhdGUgb25VbmNvbnN1bWVkRXZlbnQ6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gIHByaXZhdGUgZ2V0UHJvbWlzZVF1ZXVlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIHBlbmRpbmdVbmNvbnN1bWVkQ2hlY2s6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwZW5kaW5nVW5jb25zdW1lZFRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdW5jb25zdW1lZENoZWNrVmVyc2lvbiA9IDA7XG5cbiAgY29uc3RydWN0b3IoZXZlbnRzOiBFdmVudFtdLCBvcHRpb25zOiBFdmVudHNDb25zdW1lck9wdGlvbnMpIHtcbiAgICB0aGlzLmV2ZW50cyA9IGV2ZW50cztcbiAgICB0aGlzLmV2ZW50SW5kZXggPSAwO1xuICAgIHRoaXMub25VbmNvbnN1bWVkRXZlbnQgPSBvcHRpb25zLm9uVW5jb25zdW1lZEV2ZW50O1xuICAgIHRoaXMuZ2V0UHJvbWlzZVF1ZXVlID0gb3B0aW9ucy5nZXRQcm9taXNlUXVldWU7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIGFuIGV2ZW50IGhhcyBiZWVuIGNvbnN1bWVkXG4gICAqIGJ5IGEgZGlmZmVyZW50IGNhbGxiYWNrLiBUaGUgY2FsbGJhY2sgY2FuIHJldHVybjpcbiAgICogIC0gYEV2ZW50Q29uc3VtZXJSZXN1bHQuQ29uc3VtZWRgIHRoZSBldmVudCBpcyBjb25zaWRlcmVkIGNvbnN1bWVkIGFuZCB3aWxsIG5vdCBiZSBwYXNzZWQgdG8gYW55IG90aGVyIGNhbGxiYWNrLCBidXQgdGhlIGNhbGxiYWNrIHdpbGwgcmVtYWluIGluIHRoZSBjYWxsYmFja3MgbGlzdFxuICAgKiAgLSBgRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZGAgdGhlIGV2ZW50IGlzIHBhc3NlZCB0byB0aGUgbmV4dCBjYWxsYmFja1xuICAgKiAgLSBgRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZGAgdGhlIGV2ZW50IGlzIGNvbnNpZGVyZWQgY29uc3VtZWQgYW5kIHRoZSBjYWxsYmFjayBpcyByZW1vdmVkIGZyb20gdGhlIGNhbGxiYWNrcyBsaXN0XG4gICAqXG4gICAqIEBwYXJhbSBmbiAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAgICovXG4gIHN1YnNjcmliZShmbjogRXZlbnRDb25zdW1lckNhbGxiYWNrKSB7XG4gICAgdGhpcy5jYWxsYmFja3MucHVzaChmbik7XG4gICAgLy8gQ2FuY2VsIGFueSBwZW5kaW5nIHVuY29uc3VtZWQgY2hlY2sgc2luY2UgYSBuZXcgY2FsbGJhY2sgbWF5IGNvbnN1bWUgdGhlIGV2ZW50LlxuICAgIC8vIEluY3JlbWVudGluZyB0aGUgdmVyc2lvbiBjYXVzZXMgYW55IGluLWZsaWdodCBwcm9taXNlIGNoYWluIGNoZWNrIHRvIG5vLW9wLlxuICAgIC8vIEFsc28gY2xlYXIgdGhlIHBlbmRpbmcgc2V0VGltZW91dCBpZiBpdCBoYXNuJ3QgZmlyZWQgeWV0LlxuICAgIGlmICh0aGlzLnBlbmRpbmdVbmNvbnN1bWVkQ2hlY2sgIT09IG51bGwpIHtcbiAgICAgIHRoaXMudW5jb25zdW1lZENoZWNrVmVyc2lvbisrO1xuICAgICAgdGhpcy5wZW5kaW5nVW5jb25zdW1lZENoZWNrID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnBlbmRpbmdVbmNvbnN1bWVkVGltZW91dCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5wZW5kaW5nVW5jb25zdW1lZFRpbWVvdXQpO1xuICAgICAgICB0aGlzLnBlbmRpbmdVbmNvbnN1bWVkVGltZW91dCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3MubmV4dFRpY2sodGhpcy5jb25zdW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZSA9ICgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50RXZlbnQgPSB0aGlzLmV2ZW50c1t0aGlzLmV2ZW50SW5kZXhdID8/IG51bGw7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLmNhbGxiYWNrc1tpXTtcbiAgICAgIGxldCBoYW5kbGVkID0gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGhhbmRsZWQgPSBjYWxsYmFjayhjdXJyZW50RXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXZlbnRzTG9nZ2VyLmVycm9yKCdFdmVudENvbnN1bWVyIGNhbGxiYWNrIHRocmV3IGFuIGVycm9yJywgeyBlcnJvciB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgaGFuZGxlZCA9PT0gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZCB8fFxuICAgICAgICBoYW5kbGVkID09PSBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkXG4gICAgICApIHtcbiAgICAgICAgLy8gY29uc3VtZXIgaGFuZGxlZCB0aGlzIGV2ZW50LCBzbyBpbmNyZWFzZSB0aGUgZXZlbnQgaW5kZXhcbiAgICAgICAgdGhpcy5ldmVudEluZGV4Kys7XG5cbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBjYWxsYmFjayBpZiBpdCBoYXMgZmluaXNoZWRcbiAgICAgICAgaWYgKGhhbmRsZWQgPT09IEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQpIHtcbiAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb250aW51ZSB0byB0aGUgbmV4dCBldmVudFxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKHRoaXMuY29uc3VtZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSByZWFjaCBoZXJlLCBhbGwgY2FsbGJhY2tzIHJldHVybmVkIE5vdENvbnN1bWVkLlxuICAgIC8vIElmIHRoZSBjdXJyZW50IGV2ZW50IGlzIG5vbi1udWxsIChhIHJlYWwgZXZlbnQsIG5vdCBlbmQtb2YtZXZlbnRzKSxcbiAgICAvLyBzY2hlZHVsZSBhIGRlZmVycmVkIGNoZWNrLiBXZSBjaGFpbiBvbnRvIHRoZSBwcm9taXNlUXVldWUgc28gdGhhdCBhbnlcbiAgICAvLyBwZW5kaW5nIGFzeW5jIHdvcmsgKGUuZy4sIGRlc2VyaWFsaXphdGlvbi9kZWNyeXB0aW9uIHRoYXQgdHJpZ2dlcnNcbiAgICAvLyByZXNvbHZlKCkg4oaSIHVzZXIgY29kZSDihpIgc3Vic2NyaWJlKCkpIGNvbXBsZXRlcyBmaXJzdC4gSWYgdGhlIGV2ZW50XG4gICAgLy8gaXMgc3RpbGwgdW5jb25zdW1lZCBhZnRlciB0aGUgcXVldWUgZHJhaW5zLCBpdCdzIHRydWx5IG9ycGhhbmVkLlxuICAgIGlmIChjdXJyZW50RXZlbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNoZWNrVmVyc2lvbiA9ICsrdGhpcy51bmNvbnN1bWVkQ2hlY2tWZXJzaW9uO1xuICAgICAgdGhpcy5wZW5kaW5nVW5jb25zdW1lZENoZWNrID0gdGhpcy5nZXRQcm9taXNlUXVldWUoKVxuICAgICAgICAudGhlbihcbiAgICAgICAgICAvLyBZaWVsZCBvbmNlIGFmdGVyIHRoZSBmaXJzdCBxdWV1ZSBkcmFpbiBzbyBwcm9taXNlIGNoYWlucyByZXN1bWVkIGJ5XG4gICAgICAgICAgLy8gdGhhdCBkcmFpbiBjYW4gcnVuIGFjcm9zcyB0aGUgVk0gYm91bmRhcnkgYW5kIGFwcGVuZCBhbnkgZm9sbG93LXVwXG4gICAgICAgICAgLy8gYXN5bmMgd29yayAoZm9yIGV4YW1wbGU6IHN0ZXBfY29tcGxldGVkIHJlc29sdmVzIC0+IGZvci1hd2FpdCBsb29wXG4gICAgICAgICAgLy8gcmVzdW1lcyAtPiB0aGUgbmV4dCBob29rIHBheWxvYWQgc3RhcnRzIGh5ZHJhdGluZykuXG4gICAgICAgICAgKCkgPT4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkpXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5nZXRQcm9taXNlUXVldWUoKSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIC8vIFVzZSBhIGRlbGF5ZWQgc2V0VGltZW91dCBhZnRlciB0aGUgcXVldWUgZHJhaW5zLiBUaGUgZGVsYXkgbXVzdCBiZVxuICAgICAgICAgIC8vIGxvbmcgZW5vdWdoIGZvciBwcm9taXNlIGNoYWlucyB0byBwcm9wYWdhdGUgYWNyb3NzIHRoZSBWTSBib3VuZGFyeVxuICAgICAgICAgIC8vIChmcm9tIHJlc29sdmUoKSBpbiB0aGUgaG9zdCBjb250ZXh0IHRocm91Z2ggdG8gdGhlIHdvcmtmbG93IGNvZGVcbiAgICAgICAgICAvLyBjYWxsaW5nIHN1YnNjcmliZSgpIGluIHRoZSBWTSBjb250ZXh0KS4gTm9kZS5qcyBkb2VzIG5vdCBndWFyYW50ZWVcbiAgICAgICAgICAvLyB0aGF0IHNldFRpbWVvdXQoMCkgZmlyZXMgYWZ0ZXIgYWxsIGNyb3NzLWNvbnRleHQgbWljcm90YXNrcyBzZXR0bGUsXG4gICAgICAgICAgLy8gc28gd2UgdXNlIGEgc21hbGwgYnV0IG5vbi16ZXJvIGRlbGF5LiBBbnkgc3Vic2NyaWJlKCkgY2FsbCB0aGF0XG4gICAgICAgICAgLy8gYXJyaXZlcyBkdXJpbmcgdGhpcyB3aW5kb3cgd2lsbCBjYW5jZWwgdGhlIGNoZWNrIHZpYSB2ZXJzaW9uXG4gICAgICAgICAgLy8gaW52YWxpZGF0aW9uICsgY2xlYXJUaW1lb3V0LlxuICAgICAgICAgIHRoaXMucGVuZGluZ1VuY29uc3VtZWRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdVbmNvbnN1bWVkVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy51bmNvbnN1bWVkQ2hlY2tWZXJzaW9uID09PSBjaGVja1ZlcnNpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nVW5jb25zdW1lZENoZWNrID0gbnVsbDtcbiAgICAgICAgICAgICAgdGhpcy5vblVuY29uc3VtZWRFdmVudChjdXJyZW50RXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLWNvbnN1bWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2V2ZW50cy1jb25zdW1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBRTNDLE1BQU0sQ0FBTixJQUFZLG1CQWFYO0FBYkQsV0FBWSxtQkFBbUI7SUFDN0I7O09BRUc7SUFDSCxxRUFBUSxDQUFBO0lBQ1I7O09BRUc7SUFDSCwyRUFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCxxRUFBUSxDQUFBO0FBQ1YsQ0FBQyxFQWJXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFhOUI7QUE0QkQsTUFBTSxPQUFPLGNBQWM7SUFDekIsVUFBVSxDQUFTO0lBQ1YsTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUNyQixTQUFTLEdBQTRCLEVBQUUsQ0FBQztJQUN6QyxlQUFlLENBQTBCO0lBQ3pDLGlCQUFpQixDQUF5QjtJQUMxQyxlQUFlLENBQXNCO0lBQ3JDLHNCQUFzQixHQUF5QixJQUFJLENBQUM7SUFDcEQsd0JBQXdCLEdBQXlDLElBQUksQ0FBQztJQUN0RSxzQkFBc0IsR0FBRyxDQUFDLENBQUM7SUFFbkMsWUFBWSxNQUFlLEVBQUUsT0FBOEI7UUFDekQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO1FBQy9DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILFNBQVMsQ0FBQyxFQUF5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RyxFQUFFO29CQUM5QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO29CQUNyQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxZQUFZLEVBQUUsQ0FBQzt3QkFDakQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQzt3QkFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUN2QyxDQUFDO2dCQUNILENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRXZlbnQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgZXZlbnRzTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuXG4vKipcbiAqIERlbGF5IGJlZm9yZSBmaXJpbmcgdGhlIGRlZmVycmVkIHVuY29uc3VtZWQtZXZlbnQgY2hlY2sgYWZ0ZXIgdGhlIHByb21pc2VcbiAqIHF1ZXVlIGhhcyBkcmFpbmVkLiBNdXN0IGJlIGxvbmcgZW5vdWdoIGZvciBjcm9zcy1WTSBtaWNyb3Rhc2sgY2hhaW5zIHRvXG4gKiBwcm9wYWdhdGUgKHJlc29sdmUgaW4gaG9zdCDihpIgd29ya2Zsb3cgY29kZSBpbiBWTSDihpIgc3Vic2NyaWJlIGNhbGwgYmFja1xuICogaW4gaG9zdCkuIEFueSBzdWJzY3JpYmUoKSBhcnJpdmluZyBkdXJpbmcgdGhpcyB3aW5kb3cgY2FuY2VscyB0aGUgY2hlY2suXG4gKi9cbmV4cG9ydCBjb25zdCBERUZFUlJFRF9DSEVDS19ERUxBWV9NUyA9IDEwMDtcblxuZXhwb3J0IGVudW0gRXZlbnRDb25zdW1lclJlc3VsdCB7XG4gIC8qKlxuICAgKiBDYWxsYmFjayBjb25zdW1lZCB0aGUgZXZlbnQsIGJ1dCBzaG91bGQgbm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgY2FsbGJhY2tzIGxpc3RcbiAgICovXG4gIENvbnN1bWVkLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZGlkIG5vdCBjb25zdW1lIHRoZSBldmVudCwgc28gaXQgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgbmV4dCBjYWxsYmFja1xuICAgKi9cbiAgTm90Q29uc3VtZWQsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBjb25zdW1lZCB0aGUgZXZlbnQsIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBjYWxsYmFja3MgbGlzdFxuICAgKi9cbiAgRmluaXNoZWQsXG59XG5cbnR5cGUgRXZlbnRDb25zdW1lckNhbGxiYWNrID0gKGV2ZW50OiBFdmVudCB8IG51bGwpID0+IEV2ZW50Q29uc3VtZXJSZXN1bHQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRzQ29uc3VtZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIENhbGxiYWNrIGludm9rZWQgYWZ0ZXIgYW4gZXZlbnQgaGFzIGJlZW4gY29uc3VtZWQuIENvbnN1bWVycyBzdWNoIGFzIHRoZVxuICAgKiBkZXRlcm1pbmlzdGljIHdvcmtmbG93IGNsb2NrIG11c3Qgbm90IG9ic2VydmUgZXZlbnRzIHRoYXQgYXJlIG1lcmVseVxuICAgKiBpbnNwZWN0ZWQgd2hpbGUgd2FpdGluZyBmb3IgdXNlciBjb2RlIHRvIHN1YnNjcmliZSB0byB0aGUgbmV4dCBvcGVyYXRpb24uXG4gICAqL1xuICBvbkNvbnN1bWVkRXZlbnQ/OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGJhY2sgaW52b2tlZCB3aGVuIGEgbm9uLW51bGwgZXZlbnQgY2Fubm90IGJlIGNvbnN1bWVkIGJ5IGFueSByZWdpc3RlcmVkXG4gICAqIGNhbGxiYWNrLCBpbmRpY2F0aW5nIGFuIG9ycGhhbmVkIG9yIGludmFsaWQgZXZlbnQgaW4gdGhlIGV2ZW50IGxvZy4gVGhlXG4gICAqIGNoZWNrIGlzIGRlZmVycmVkIHVudGlsIGFmdGVyIHRoZSBwcm9taXNlIHF1ZXVlIGhhcyBkcmFpbmVkLCBlbnN1cmluZyB0aGF0XG4gICAqIGFueSBwZW5kaW5nIGFzeW5jIHdvcmsgKGUuZy4sIGRlc2VyaWFsaXphdGlvbi9kZWNyeXB0aW9uKSBjb21wbGV0ZXMgYW5kXG4gICAqIGRvd25zdHJlYW0gc3Vic2NyaWJlKCkgY2FsbHMgaGF2ZSBhIGNoYW5jZSB0byBjYW5jZWwgdGhlIGNoZWNrIGZpcnN0LlxuICAgKi9cbiAgb25VbmNvbnN1bWVkRXZlbnQ6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHByb21pc2UgcXVldWUuIFRoZSB1bmNvbnN1bWVkIGV2ZW50IGNoZWNrIGlzIGNoYWluZWRcbiAgICogb250byB0aGlzIHF1ZXVlIHNvIGl0IG9ubHkgZmlyZXMgYWZ0ZXIgYWxsIHBlbmRpbmcgYXN5bmMgd29yayAoZS5nLixcbiAgICogZGVzZXJpYWxpemF0aW9uKSBoYXMgY29tcGxldGVkLiBUaGlzIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyB3aGVuIGFzeW5jXG4gICAqIGRlc2VyaWFsaXphdGlvbiBkZWxheXMgdGhlIHJlc29sdmUoKSB0aGF0IHRyaWdnZXJzIHRoZSBuZXh0IHN1YnNjcmliZSgpLlxuICAgKi9cbiAgZ2V0UHJvbWlzZVF1ZXVlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgY2xhc3MgRXZlbnRzQ29uc3VtZXIge1xuICBldmVudEluZGV4OiBudW1iZXI7XG4gIHJlYWRvbmx5IGV2ZW50czogRXZlbnRbXSA9IFtdO1xuICByZWFkb25seSBjYWxsYmFja3M6IEV2ZW50Q29uc3VtZXJDYWxsYmFja1tdID0gW107XG4gIHByaXZhdGUgb25Db25zdW1lZEV2ZW50PzogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBvblVuY29uc3VtZWRFdmVudDogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBnZXRQcm9taXNlUXVldWU6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgcGVuZGluZ1VuY29uc3VtZWRDaGVjazogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHBlbmRpbmdVbmNvbnN1bWVkVGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB1bmNvbnN1bWVkQ2hlY2tWZXJzaW9uID0gMDtcblxuICBjb25zdHJ1Y3RvcihldmVudHM6IEV2ZW50W10sIG9wdGlvbnM6IEV2ZW50c0NvbnN1bWVyT3B0aW9ucykge1xuICAgIHRoaXMuZXZlbnRzID0gZXZlbnRzO1xuICAgIHRoaXMuZXZlbnRJbmRleCA9IDA7XG4gICAgdGhpcy5vbkNvbnN1bWVkRXZlbnQgPSBvcHRpb25zLm9uQ29uc3VtZWRFdmVudDtcbiAgICB0aGlzLm9uVW5jb25zdW1lZEV2ZW50ID0gb3B0aW9ucy5vblVuY29uc3VtZWRFdmVudDtcbiAgICB0aGlzLmdldFByb21pc2VRdWV1ZSA9IG9wdGlvbnMuZ2V0UHJvbWlzZVF1ZXVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhZnRlciBhbiBldmVudCBoYXMgYmVlbiBjb25zdW1lZFxuICAgKiBieSBhIGRpZmZlcmVudCBjYWxsYmFjay4gVGhlIGNhbGxiYWNrIGNhbiByZXR1cm46XG4gICAqICAtIGBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkYCB0aGUgZXZlbnQgaXMgY29uc2lkZXJlZCBjb25zdW1lZCBhbmQgd2lsbCBub3QgYmUgcGFzc2VkIHRvIGFueSBvdGhlciBjYWxsYmFjaywgYnV0IHRoZSBjYWxsYmFjayB3aWxsIHJlbWFpbiBpbiB0aGUgY2FsbGJhY2tzIGxpc3RcbiAgICogIC0gYEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWRgIHRoZSBldmVudCBpcyBwYXNzZWQgdG8gdGhlIG5leHQgY2FsbGJhY2tcbiAgICogIC0gYEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWRgIHRoZSBldmVudCBpcyBjb25zaWRlcmVkIGNvbnN1bWVkIGFuZCB0aGUgY2FsbGJhY2sgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjYWxsYmFja3MgbGlzdFxuICAgKlxuICAgKiBAcGFyYW0gZm4gLSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gICAqL1xuICBzdWJzY3JpYmUoZm46IEV2ZW50Q29uc3VtZXJDYWxsYmFjaykge1xuICAgIHRoaXMuY2FsbGJhY2tzLnB1c2goZm4pO1xuICAgIC8vIENhbmNlbCBhbnkgcGVuZGluZyB1bmNvbnN1bWVkIGNoZWNrIHNpbmNlIGEgbmV3IGNhbGxiYWNrIG1heSBjb25zdW1lIHRoZSBldmVudC5cbiAgICAvLyBJbmNyZW1lbnRpbmcgdGhlIHZlcnNpb24gY2F1c2VzIGFueSBpbi1mbGlnaHQgcHJvbWlzZSBjaGFpbiBjaGVjayB0byBuby1vcC5cbiAgICAvLyBBbHNvIGNsZWFyIHRoZSBwZW5kaW5nIHNldFRpbWVvdXQgaWYgaXQgaGFzbid0IGZpcmVkIHlldC5cbiAgICBpZiAodGhpcy5wZW5kaW5nVW5jb25zdW1lZENoZWNrICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnVuY29uc3VtZWRDaGVja1ZlcnNpb24rKztcbiAgICAgIHRoaXMucGVuZGluZ1VuY29uc3VtZWRDaGVjayA9IG51bGw7XG4gICAgICBpZiAodGhpcy5wZW5kaW5nVW5jb25zdW1lZFRpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucGVuZGluZ1VuY29uc3VtZWRUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5wZW5kaW5nVW5jb25zdW1lZFRpbWVvdXQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzLm5leHRUaWNrKHRoaXMuY29uc3VtZSk7XG4gIH1cblxuICBwcml2YXRlIG5vdGlmeUNvbnN1bWVkRXZlbnQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLm9uQ29uc3VtZWRFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5vbkNvbnN1bWVkRXZlbnQoZXZlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBldmVudHNMb2dnZXIuZXJyb3IoJ29uQ29uc3VtZWRFdmVudCBjYWxsYmFjayB0aHJldyBhbiBlcnJvcicsIHtcbiAgICAgICAgZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWUgPSAoKSA9PiB7XG4gICAgLy8gRHJhaW4gY29uc2VjdXRpdmVseSBjb25zdW1hYmxlIGV2ZW50cyBzeW5jaHJvbm91c2x5IHdpdGhpbiBhIHNpbmdsZVxuICAgIC8vIHBhc3MgaW5zdGVhZCBvZiBwYXlpbmcgb25lIGBwcm9jZXNzLm5leHRUaWNrYCBwZXIgY29uc3VtZWQgZXZlbnQuXG4gICAgLy9cbiAgICAvLyBXaHkgdGhpcyBpcyBzYWZlOiBhIGNhbGxiYWNrIG9ubHkgY29uc3VtZXMgYW4gZXZlbnQgdXNpbmcgYSBjb25zdW1lclxuICAgIC8vIHRoYXQgaXMgQUxSRUFEWSByZWdpc3RlcmVkIChlLmcuIGEgbG9uZy1saXZlZCBzdGVwIGNvbnN1bWVyIHdhbGtpbmdcbiAgICAvLyBgc3RlcF9jcmVhdGVkYCDihpIgYHN0ZXBfc3RhcnRlZGAg4oaSIGBzdGVwX2NvbXBsZXRlZGAsIG9yIHRoZSBzdHJ1Y3R1cmFsXG4gICAgLy8gbGlmZWN5Y2xlIGNvbnN1bWVyKS4gTmV3IGNvbnN1bWVycyBhcmUgb25seSBldmVyIHJlZ2lzdGVyZWQgYnkgd29ya2Zsb3dcbiAgICAvLyBWTSBib2R5IGNvZGUgdGhhdCBydW5zIGFzeW5jaHJvbm91c2x5IG9mZiBgY3R4LnByb21pc2VRdWV1ZWAgYWZ0ZXIgYVxuICAgIC8vIGRlbGl2ZXJ5IGByZXNvbHZlKClgOyBub25lIG9mIHRoZSBjYWxsYmFja3MgaGVyZSBjYWxsIGBzdWJzY3JpYmUoKWBcbiAgICAvLyBzeW5jaHJvbm91c2x5LiBTbyB3aXRoaW4gb25lIHBhc3MgYHRoaXMuY2FsbGJhY2tzYCBpcyBtdXRhdGVkIG9ubHkgYnlcbiAgICAvLyB0aGlzIGxvb3AgKHRoZSBgRmluaXNoZWRgIHNwbGljZSksIGFuZCB0aGUgbmV4dCBldmVudCdzIGNvbnN1bWVyIGlzXG4gICAgLy8gZWl0aGVyIGFscmVhZHkgcHJlc2VudCAoYWR2YW5jZSBub3cpIG9yIG5vdCB5ZXQgcmVnaXN0ZXJlZCDigJQgaW4gd2hpY2hcbiAgICAvLyBjYXNlIG5vIGNhbGxiYWNrIGNvbnN1bWVzIHRoZSBldmVudCBhbmQgd2UgZmFsbCB0aHJvdWdoIHRvIHRoZVxuICAgIC8vIGNyb3NzLVZNLXNhZmUgZGVmZXJyZWQgdW5jb25zdW1lZC1ldmVudCBjaGVjayBiZWxvdywgZXhhY3RseSBhcyBiZWZvcmUuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFdmVudCA9IHRoaXMuZXZlbnRzW3RoaXMuZXZlbnRJbmRleF0gPz8gbnVsbDtcbiAgICAgIGlmICghdGhpcy5jb25zdW1lT25lKGN1cnJlbnRFdmVudCkpIHtcbiAgICAgICAgLy8gTm8gY2FsbGJhY2sgY29uc3VtZWQgdGhlIGN1cnJlbnQgZXZlbnQ7IGhhbmRsZSB0aGUgdGVybWluYWwgY2FzZS5cbiAgICAgICAgdGhpcy5oYW5kbGVVbmNvbnN1bWVkKGN1cnJlbnRFdmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIEEgcmVhbCBldmVudCB3YXMgY29uc3VtZWQg4oCUIGFkdmFuY2UgdG8gdGhlIG5leHQgaW4gdGhlIHNhbWUgcGFzcy4gQVxuICAgICAgLy8gY29uc3VtZWQgYG51bGxgIHNlbnRpbmVsIG5ldmVyIHJldHVybnMgdHJ1ZSAoc2VlIGNvbnN1bWVPbmUpLCBzbyB0aGVcbiAgICAgIC8vIHN5bmNocm9ub3VzIGRyYWluIGNhbid0IHNwaW4gcGFzdCB0aGUgZW5kIG9mIHRoZSBsb2cuXG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBPZmZlciBgY3VycmVudEV2ZW50YCB0byBlYWNoIHJlZ2lzdGVyZWQgY2FsbGJhY2sgaW4gdHVybi4gUmV0dXJucyB0cnVlXG4gICAqIHdoZW4gYSBjYWxsYmFjayBjb25zdW1lZCBhIHJlYWwgKG5vbi1udWxsKSBldmVudCBhbmQgdGhlIGRyYWluIHNob3VsZFxuICAgKiBhZHZhbmNlIHRvIHRoZSBuZXh0IGV2ZW50IGluIHRoZSBzYW1lIHN5bmNocm9ub3VzIHBhc3M7IGZhbHNlIG90aGVyd2lzZVxuICAgKiAobm90aGluZyBjb25zdW1lZCBpdCwgb3IgdGhlIGNvbnN1bWVkIGV2ZW50IHdhcyB0aGUgZW5kLW9mLWV2ZW50c1xuICAgKiBzZW50aW5lbCkuXG4gICAqL1xuICBwcml2YXRlIGNvbnN1bWVPbmUoY3VycmVudEV2ZW50OiBFdmVudCB8IG51bGwpOiBib29sZWFuIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuY2FsbGJhY2tzW2ldO1xuICAgICAgbGV0IGhhbmRsZWQgPSBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaGFuZGxlZCA9IGNhbGxiYWNrKGN1cnJlbnRFdmVudCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBldmVudHNMb2dnZXIuZXJyb3IoJ0V2ZW50Q29uc3VtZXIgY2FsbGJhY2sgdGhyZXcgYW4gZXJyb3InLCB7IGVycm9yIH0pO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBoYW5kbGVkICE9PSBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkICYmXG4gICAgICAgIGhhbmRsZWQgIT09IEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWRcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50RXZlbnQgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlDb25zdW1lZEV2ZW50KGN1cnJlbnRFdmVudCk7XG4gICAgICB9XG4gICAgICAvLyBjb25zdW1lciBoYW5kbGVkIHRoaXMgZXZlbnQsIHNvIGluY3JlYXNlIHRoZSBldmVudCBpbmRleFxuICAgICAgdGhpcy5ldmVudEluZGV4Kys7XG4gICAgICAvLyByZW1vdmUgdGhlIGNhbGxiYWNrIGlmIGl0IGhhcyBmaW5pc2hlZFxuICAgICAgaWYgKGhhbmRsZWQgPT09IEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFja3Muc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgICAgLy8gQ29udGludWUgZHJhaW5pbmcgb25seSBmb3IgcmVhbCBldmVudHMuIFJlYWwgY29uc3VtZXJzIHJldHVyblxuICAgICAgLy8gTm90Q29uc3VtZWQgZm9yIHRoZSBgbnVsbGAgc2VudGluZWwsIGJ1dCBndWFyZCBhZ2FpbnN0IGEgcGF0aG9sb2dpY2FsXG4gICAgICAvLyBjYWxsYmFjayBjb25zdW1pbmcgaXQgc28gdGhlIGRyYWluIG5ldmVyIHNwaW5zIHBhc3QgZW5kLW9mLWxvZy5cbiAgICAgIHJldHVybiBjdXJyZW50RXZlbnQgIT09IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVW5jb25zdW1lZChjdXJyZW50RXZlbnQ6IEV2ZW50IHwgbnVsbCkge1xuICAgIC8vIEFsbCBjYWxsYmFja3MgcmV0dXJuZWQgTm90Q29uc3VtZWQgZm9yIHRoZSBjdXJyZW50IGV2ZW50LlxuICAgIC8vIElmIHRoZSBjdXJyZW50IGV2ZW50IGlzIG5vbi1udWxsIChhIHJlYWwgZXZlbnQsIG5vdCBlbmQtb2YtZXZlbnRzKSxcbiAgICAvLyBzY2hlZHVsZSBhIGRlZmVycmVkIGNoZWNrLiBXZSBjaGFpbiBvbnRvIHRoZSBwcm9taXNlUXVldWUgc28gdGhhdCBhbnlcbiAgICAvLyBwZW5kaW5nIGFzeW5jIHdvcmsgKGUuZy4sIGRlc2VyaWFsaXphdGlvbi9kZWNyeXB0aW9uIHRoYXQgdHJpZ2dlcnNcbiAgICAvLyByZXNvbHZlKCkg4oaSIHVzZXIgY29kZSDihpIgc3Vic2NyaWJlKCkpIGNvbXBsZXRlcyBmaXJzdC4gSWYgdGhlIGV2ZW50XG4gICAgLy8gaXMgc3RpbGwgdW5jb25zdW1lZCBhZnRlciB0aGUgcXVldWUgZHJhaW5zLCBpdCdzIHRydWx5IG9ycGhhbmVkLlxuICAgIGlmIChjdXJyZW50RXZlbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNoZWNrVmVyc2lvbiA9ICsrdGhpcy51bmNvbnN1bWVkQ2hlY2tWZXJzaW9uO1xuICAgICAgdGhpcy5wZW5kaW5nVW5jb25zdW1lZENoZWNrID0gdGhpcy5nZXRQcm9taXNlUXVldWUoKVxuICAgICAgICAudGhlbihcbiAgICAgICAgICAvLyBZaWVsZCBvbmNlIGFmdGVyIHRoZSBmaXJzdCBxdWV1ZSBkcmFpbiBzbyBwcm9taXNlIGNoYWlucyByZXN1bWVkIGJ5XG4gICAgICAgICAgLy8gdGhhdCBkcmFpbiBjYW4gcnVuIGFjcm9zcyB0aGUgVk0gYm91bmRhcnkgYW5kIGFwcGVuZCBhbnkgZm9sbG93LXVwXG4gICAgICAgICAgLy8gYXN5bmMgd29yayAoZm9yIGV4YW1wbGU6IHN0ZXBfY29tcGxldGVkIHJlc29sdmVzIC0+IGZvci1hd2FpdCBsb29wXG4gICAgICAgICAgLy8gcmVzdW1lcyAtPiB0aGUgbmV4dCBob29rIHBheWxvYWQgc3RhcnRzIGh5ZHJhdGluZykuXG4gICAgICAgICAgKCkgPT4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkpXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5nZXRQcm9taXNlUXVldWUoKSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIC8vIFVzZSBhIGRlbGF5ZWQgc2V0VGltZW91dCBhZnRlciB0aGUgcXVldWUgZHJhaW5zLiBUaGUgZGVsYXkgbXVzdCBiZVxuICAgICAgICAgIC8vIGxvbmcgZW5vdWdoIGZvciBwcm9taXNlIGNoYWlucyB0byBwcm9wYWdhdGUgYWNyb3NzIHRoZSBWTSBib3VuZGFyeVxuICAgICAgICAgIC8vIChmcm9tIHJlc29sdmUoKSBpbiB0aGUgaG9zdCBjb250ZXh0IHRocm91Z2ggdG8gdGhlIHdvcmtmbG93IGNvZGVcbiAgICAgICAgICAvLyBjYWxsaW5nIHN1YnNjcmliZSgpIGluIHRoZSBWTSBjb250ZXh0KS4gTm9kZS5qcyBkb2VzIG5vdCBndWFyYW50ZWVcbiAgICAgICAgICAvLyB0aGF0IHNldFRpbWVvdXQoMCkgZmlyZXMgYWZ0ZXIgYWxsIGNyb3NzLWNvbnRleHQgbWljcm90YXNrcyBzZXR0bGUsXG4gICAgICAgICAgLy8gc28gd2UgdXNlIGEgc21hbGwgYnV0IG5vbi16ZXJvIGRlbGF5LiBBbnkgc3Vic2NyaWJlKCkgY2FsbCB0aGF0XG4gICAgICAgICAgLy8gYXJyaXZlcyBkdXJpbmcgdGhpcyB3aW5kb3cgd2lsbCBjYW5jZWwgdGhlIGNoZWNrIHZpYSB2ZXJzaW9uXG4gICAgICAgICAgLy8gaW52YWxpZGF0aW9uICsgY2xlYXJUaW1lb3V0LlxuICAgICAgICAgIHRoaXMucGVuZGluZ1VuY29uc3VtZWRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdVbmNvbnN1bWVkVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy51bmNvbnN1bWVkQ2hlY2tWZXJzaW9uID09PSBjaGVja1ZlcnNpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nVW5jb25zdW1lZENoZWNrID0gbnVsbDtcbiAgICAgICAgICAgICAgdGhpcy5vblVuY29uc3VtZWRFdmVudChjdXJyZW50RXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIERFRkVSUkVEX0NIRUNLX0RFTEFZX01TKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -7,17 +7,17 @@ import { type PromiseWithResolvers } from '@workflow/utils';
|
|
|
7
7
|
* to acquire a reader/writer. For that reason we use polling instead of a
|
|
8
8
|
* fully event-driven approach here.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* is
|
|
10
|
+
* 10ms is chosen so the polling tick almost never sits on the critical path:
|
|
11
|
+
* the V2 step-executor's `opsSettled` race waits for this state to resolve
|
|
12
|
+
* after each step body returns, so a coarser interval (the previous 100ms)
|
|
13
|
+
* adds visible per-step latency to streaming workflows. With a uniformly
|
|
14
|
+
* distributed offset between step return and the next tick, the expected
|
|
15
|
+
* wait is half the interval — so 10ms means ~5ms average wait per step
|
|
16
|
+
* instead of ~50ms. The per-tick work is `writable.locked` plus a
|
|
17
|
+
* `getWriter()`/`releaseLock()` probe, both microsecond-scale; 10× more
|
|
18
|
+
* ticks during a stream's lifetime is not measurable in practice.
|
|
19
19
|
*/
|
|
20
|
-
export declare const LOCK_POLL_INTERVAL_MS =
|
|
20
|
+
export declare const LOCK_POLL_INTERVAL_MS = 10;
|
|
21
21
|
/**
|
|
22
22
|
* State tracker for flushable stream operations.
|
|
23
23
|
* Resolves when either:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flushable-stream.d.ts","sourceRoot":"","sources":["../src/flushable-stream.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flushable-stream.d.ts","sourceRoot":"","sources":["../src/flushable-stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAiB,MAAM,iBAAiB,CAAC;AAE3E;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB,CAAC,IAAI,CAAC;IACtE,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,YAAY,EAAE,OAAO,CAAC;IACtB,gEAAgE;IAChE,WAAW,EAAE,OAAO,CAAC;IACrB,wDAAwD;IACxD,uBAAuB,CAAC,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACzD,wDAAwD;IACxD,uBAAuB,CAAC,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;CAC1D;AAED,wBAAgB,oBAAoB,IAAI,oBAAoB,CAa3D;AA2DD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,oBAAoB,GAC1B,IAAI,CAwBN;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,oBAAoB,GAC1B,IAAI,CAwBN;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAoEf"}
|
package/dist/flushable-stream.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { WorkflowRuntimeError } from '@workflow/errors';
|
|
1
2
|
import { withResolvers } from '@workflow/utils';
|
|
2
3
|
/**
|
|
3
4
|
* Polling interval (in ms) for lock release detection.
|
|
@@ -7,24 +8,28 @@ import { withResolvers } from '@workflow/utils';
|
|
|
7
8
|
* to acquire a reader/writer. For that reason we use polling instead of a
|
|
8
9
|
* fully event-driven approach here.
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* is
|
|
11
|
+
* 10ms is chosen so the polling tick almost never sits on the critical path:
|
|
12
|
+
* the V2 step-executor's `opsSettled` race waits for this state to resolve
|
|
13
|
+
* after each step body returns, so a coarser interval (the previous 100ms)
|
|
14
|
+
* adds visible per-step latency to streaming workflows. With a uniformly
|
|
15
|
+
* distributed offset between step return and the next tick, the expected
|
|
16
|
+
* wait is half the interval — so 10ms means ~5ms average wait per step
|
|
17
|
+
* instead of ~50ms. The per-tick work is `writable.locked` plus a
|
|
18
|
+
* `getWriter()`/`releaseLock()` probe, both microsecond-scale; 10× more
|
|
19
|
+
* ticks during a stream's lifetime is not measurable in practice.
|
|
19
20
|
*/
|
|
20
|
-
export const LOCK_POLL_INTERVAL_MS =
|
|
21
|
+
export const LOCK_POLL_INTERVAL_MS = 10;
|
|
21
22
|
export function createFlushableState() {
|
|
22
|
-
|
|
23
|
+
const state = {
|
|
23
24
|
...withResolvers(),
|
|
24
25
|
pendingOps: 0,
|
|
25
26
|
doneResolved: false,
|
|
26
27
|
streamEnded: false,
|
|
27
28
|
};
|
|
29
|
+
// The runtime awaits this promise after user code returns. Observe early
|
|
30
|
+
// stream failures now so they do not become unhandled rejections first.
|
|
31
|
+
state.promise.catch(() => { });
|
|
32
|
+
return state;
|
|
28
33
|
}
|
|
29
34
|
/**
|
|
30
35
|
* Checks if a WritableStream is unlocked (user released lock) vs closed.
|
|
@@ -171,7 +176,7 @@ export async function flushablePipe(source, sink, state) {
|
|
|
171
176
|
const readResult = await Promise.race([
|
|
172
177
|
reader.read(),
|
|
173
178
|
writer.closed.then(() => {
|
|
174
|
-
throw new
|
|
179
|
+
throw new WorkflowRuntimeError('Writable stream closed prematurely');
|
|
175
180
|
}),
|
|
176
181
|
]);
|
|
177
182
|
// Check if stream has ended (e.g., due to error in another path) before processing
|
|
@@ -223,4 +228,4 @@ export async function flushablePipe(source, sink, state) {
|
|
|
223
228
|
writer.releaseLock();
|
|
224
229
|
}
|
|
225
230
|
}
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx1c2hhYmxlLXN0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mbHVzaGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNkIsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0U7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBNkJ6QyxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU87UUFDTCxHQUFHLGFBQWEsRUFBUTtRQUN4QixVQUFVLEVBQUUsQ0FBQztRQUNiLFlBQVksRUFBRSxLQUFLO1FBQ25CLFdBQVcsRUFBRSxLQUFLO0tBQ25CLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLDJCQUEyQixDQUFDLFFBQXdCO0lBQzNELElBQUksUUFBUSxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVsQyxJQUFJLE1BQStDLENBQUM7SUFDcEQsSUFBSSxDQUFDO1FBQ0gseUVBQXlFO1FBQ3pFLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLHNFQUFzRTtRQUN0RSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLG1FQUFtRTtRQUNuRSxxRUFBcUU7UUFDckUsZ0VBQWdFO1FBQ2hFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUywyQkFBMkIsQ0FBQyxRQUF3QjtJQUMzRCxJQUFJLFFBQVEsQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFbEMsSUFBSSxNQUErQyxDQUFDO0lB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QztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN6QixZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDMUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBQ0QsK0RBQStEO1FBQy9ELDRFQUE0RTtRQUM1RSx1RUFBdUU7UUFDdkUsd0VBQXdFO1FBQ3hFLDZDQUE2QztRQUM3QyxNQUFNLEdBQUcsQ0FBQztJQUNaLENBQUM7WUFBUyxDQUFDO1FBQ1QsMEVBQTBFO1FBQzFFLDRFQUE0RTtRQUM1RSw4RUFBOEU7UUFDOUUsdURBQXVEO1FBQ3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFByb21pc2VXaXRoUmVzb2x2ZXJzLCB3aXRoUmVzb2x2ZXJzIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcblxuLyoqXG4gKiBQb2xsaW5nIGludGVydmFsIChpbiBtcykgZm9yIGxvY2sgcmVsZWFzZSBkZXRlY3Rpb24uXG4gKlxuICogVGhlIFdlYiBTdHJlYW1zIEFQSSBkb2VzIG5vdCBleHBvc2UgYW4gZXZlbnQgZm9yIFwibG9jayByZWxlYXNlZCBidXQgc3RyZWFtXG4gKiBzdGlsbCBvcGVuXCI7IHdlIGNhbiBvbmx5IGRpc3Rpbmd1aXNoIHRoYXQgc3RhdGUgYnkgcGVyaW9kaWNhbGx5IGF0dGVtcHRpbmdcbiAqIHRvIGFjcXVpcmUgYSByZWFkZXIvd3JpdGVyLiBGb3IgdGhhdCByZWFzb24gd2UgdXNlIHBvbGxpbmcgaW5zdGVhZCBvZiBhXG4gKiBmdWxseSBldmVudC1kcml2ZW4gYXBwcm9hY2ggaGVyZS5cbiAqXG4gKiAxMDBtcyBpcyBhIGNvbXByb21pc2UgYmV0d2VlbjpcbiAqIC0gTGF0ZW5jeTogaG93IHF1aWNrbHkgd2Ugbm90aWNlIHRoYXQgdGhlIHVzZXIgaGFzIHJlbGVhc2VkIHRoZWlyIGxvY2ssIGFuZFxuICogLSBDb3N0L0NQVSB1c2FnZTogaG93IG9mdGVuIHRpbWVycyBmaXJlLCBlc3BlY2lhbGx5IHdpdGggbWFueSBjb25jdXJyZW50XG4gKiAgIHN0cmVhbXMgb3IgaW4gc2VydmVybGVzcyBlbnZpcm9ubWVudHMgd2hlcmUgYmlsbGVkIHRpbWUgbWF0dGVycy5cbiAqXG4gKiBUaGlzIHZhbHVlIHNob3VsZCBvbmx5IGJlIGNoYW5nZWQgd2l0aCBjYXJlLCBhcyBkZWNyZWFzaW5nIGl0IHdpbGxcbiAqIGluY3JlYXNlIHBvbGxpbmcgZnJlcXVlbmN5IChhbmQgdGh1cyBwb3RlbnRpYWwgY29zdCksIHdoaWxlIGluY3JlYXNpbmcgaXRcbiAqIHdpbGwgYWRkIHdvcnN0LWNhc2UgZGVsYXkgYmVmb3JlIHRoZSBgZG9uZWAgcHJvbWlzZSByZXNvbHZlcyBhZnRlciBhIGxvY2tcbiAqIGlzIHJlbGVhc2VkLlxuICovXG5leHBvcnQgY29uc3QgTE9DS19QT0xMX0lOVEVSVkFMX01TID0gMTAwO1xuXG4vKipcbiAqIFN0YXRlIHRyYWNrZXIgZm9yIGZsdXNoYWJsZSBzdHJlYW0gb3BlcmF0aW9ucy5cbiAqIFJlc29sdmVzIHdoZW4gZWl0aGVyOlxuICogMS4gU3RyZWFtIGNvbXBsZXRlcyAoY2xvc2UvZXJyb3IpLCBPUlxuICogMi4gTG9jayBpcyByZWxlYXNlZCBBTkQgYWxsIHBlbmRpbmcgb3BlcmF0aW9ucyBhcmUgZmx1c2hlZFxuICpcbiAqIE5vdGU6IGBkb25lUmVzb2x2ZWRgIGFuZCBgc3RyZWFtRW5kZWRgIGFyZSBzZXBhcmF0ZTpcbiAqIC0gYGRvbmVSZXNvbHZlZGA6IFRoZSBgZG9uZWAgcHJvbWlzZSBoYXMgYmVlbiByZXNvbHZlZCAoc3RlcCBjYW4gY29tcGxldGUpXG4gKiAtIGBzdHJlYW1FbmRlZGA6IFRoZSB1bmRlcmx5aW5nIHN0cmVhbSBoYXMgYWN0dWFsbHkgY2xvc2VkL2Vycm9yZWRcbiAqXG4gKiBPbmNlIGBkb25lUmVzb2x2ZWRgIGlzIHNldCB0byB0cnVlLCB0aGUgYGRvbmVgIHByb21pc2Ugd2lsbCBub3QgcmVzb2x2ZVxuICogYWdhaW4uIFJlLWFjcXVpcmluZyBsb2NrcyBhZnRlciByZWxlYXNlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSB3YXkgdG9cbiAqIHRyaWdnZXIgYWRkaXRpb25hbCBjb21wbGV0aW9uIHNpZ25hbGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbHVzaGFibGVTdHJlYW1TdGF0ZSBleHRlbmRzIFByb21pc2VXaXRoUmVzb2x2ZXJzPHZvaWQ+IHtcbiAgLyoqIE51bWJlciBvZiB3cml0ZSBvcGVyYXRpb25zIGN1cnJlbnRseSBpbiBmbGlnaHQgdG8gdGhlIHNlcnZlciAqL1xuICBwZW5kaW5nT3BzOiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHRoZSBgZG9uZWAgcHJvbWlzZSBoYXMgYmVlbiByZXNvbHZlZCAqL1xuICBkb25lUmVzb2x2ZWQ6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBoYXMgYWN0dWFsbHkgY2xvc2VkL2Vycm9yZWQgKi9cbiAgc3RyZWFtRW5kZWQ6IGJvb2xlYW47XG4gIC8qKiBJbnRlcnZhbCBJRCBmb3Igd3JpdGFibGUgbG9jayBwb2xsaW5nIChpZiBhY3RpdmUpICovXG4gIHdyaXRhYmxlUG9sbGluZ0ludGVydmFsPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+O1xuICAvKiogSW50ZXJ2YWwgSUQgZm9yIHJlYWRhYmxlIGxvY2sgcG9sbGluZyAoaWYgYWN0aXZlKSAqL1xuICByZWFkYWJsZVBvbGxpbmdJbnRlcnZhbD86IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZsdXNoYWJsZVN0YXRlKCk6IEZsdXNoYWJsZVN0cmVhbVN0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi53aXRoUmVzb2x2ZXJzPHZvaWQ+KCksXG4gICAgcGVuZGluZ09wczogMCxcbiAgICBkb25lUmVzb2x2ZWQ6IGZhbHNlLFxuICAgIHN0cmVhbUVuZGVkOiBmYWxzZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBXcml0YWJsZVN0cmVhbSBpcyB1bmxvY2tlZCAodXNlciByZWxlYXNlZCBsb2NrKSB2cyBjbG9zZWQuXG4gKiBXaGVuIGEgc3RyZWFtIGlzIGNsb3NlZCwgLmxvY2tlZCBpcyBmYWxzZSBidXQgZ2V0V3JpdGVyKCkgdGhyb3dzLlxuICogV2Ugb25seSB3YW50IHRvIHJlc29sdmUgdmlhIHBvbGxpbmcgd2hlbiB0aGUgc3RyZWFtIGlzIHVubG9ja2VkLCBub3QgY2xvc2VkLlxuICogSWYgY2xvc2VkLCB0aGUgcHVtcCB3aWxsIGhhbmRsZSByZXNvbHV0aW9uIHZpYSB0aGUgc3RyZWFtIGVuZGluZyBuYXR1cmFsbHkuXG4gKi9cbmZ1bmN0aW9uIGlzV3JpdGFibGVVbmxvY2tlZE5vdENsb3NlZCh3cml0YWJsZTogV3JpdGFibGVTdHJlYW0pOiBib29sZWFuIHtcbiAgaWYgKHdyaXRhYmxlLmxvY2tlZCkgcmV0dXJuIGZhbHNlO1xuXG4gIGxldCB3cml0ZXI6IFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciB8IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICAvLyBUcnkgdG8gYWNxdWlyZSB3cml0ZXIgLSBpZiBzdWNjZXNzZnVsLCBzdHJlYW0gaXMgdW5sb2NrZWQgKG5vdCBjbG9zZWQpXG4gICAgd3JpdGVyID0gd3JpdGFibGUuZ2V0V3JpdGVyKCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIGdldFdyaXRlcigpIHRocm93cyBpZiBzdHJlYW0gaXMgY2xvc2VkL2Vycm9yZWQgLSBsZXQgcHVtcCBoYW5kbGUgaXRcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIHdyaXRlci5yZWxlYXNlTG9jaygpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZiByZWxlYXNlTG9jaygpIHRocm93cyBmb3IgYW55IHJlYXNvbiwgY29uc2VydmF0aXZlbHkgdHJlYXQgdGhlXG4gICAgLy8gc3RyZWFtIGFzIGNsb3NlZC9lcnJvcmVkIHNvIGNhbGxlcnMgZG9uJ3QgYXNzdW1lIGl0J3Mgc2FmZSB0byB1c2UuXG4gICAgLy8gVGhlIHB1bXAgd2lsbCBvYnNlcnZlIHRoZSBmYWlsdXJlIHZpYSB0aGUgc3RyZWFtJ3MgZW5kIHN0YXRlLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIFJlYWRhYmxlU3RyZWFtIGlzIHVubG9ja2VkICh1c2VyIHJlbGVhc2VkIGxvY2spIHZzIGNsb3NlZC5cbiAqL1xuZnVuY3Rpb24gaXNSZWFkYWJsZVVubG9ja2VkTm90Q2xvc2VkKHJlYWRhYmxlOiBSZWFkYWJsZVN0cmVhbSk6IGJvb2xlYW4ge1xuICBpZiAocmVhZGFibGUubG9ja2VkKSByZXR1cm4gZmFsc2U7XG5cbiAgbGV0IHJlYWRlcjogUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIC8vIFRyeSB0byBhY3F1aXJlIHJlYWRlciAtIGlmIHN1Y2Nlc3NmdWwsIHN0cmVhbSBpcyB1bmxvY2tlZCAobm90IGNsb3NlZClcbiAgICByZWFkZXIgPSByZWFkYWJsZS5nZXRSZWFkZXIoKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gZ2V0UmVhZGVyKCkgdGhyb3dzIGlmIHN0cmVhbSBpcyBjbG9zZWQvZXJyb3JlZCAtIGxldCBwdW1wIGhhbmRsZSBpdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIHJlbGVhc2VMb2NrKCkgdGhyb3dzIGZvciBhbnkgcmVhc29uLCBjb25zZXJ2YXRpdmVseSB0cmVhdCB0aGVcbiAgICAvLyBzdHJlYW0gYXMgY2xvc2VkL2Vycm9yZWQgc28gY2FsbGVycyBkb24ndCBhc3N1bWUgaXQncyBzYWZlIHRvIHVzZS5cbiAgICAvLyBUaGUgcHVtcCB3aWxsIG9ic2VydmUgdGhlIGZhaWx1cmUgdmlhIHRoZSBzdHJlYW0ncyBlbmQgc3RhdGUuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogUG9sbHMgYSBXcml0YWJsZVN0cmVhbSB0byBjaGVjayBpZiB0aGUgdXNlciBoYXMgcmVsZWFzZWQgdGhlaXIgbG9jay5cbiAqIFJlc29sdmVzIHRoZSBkb25lIHByb21pc2Ugd2hlbiBsb2NrIGlzIHJlbGVhc2VkIGFuZCBubyBwZW5kaW5nIG9wcyByZW1haW4uXG4gKlxuICogTm90ZTogT25seSByZXNvbHZlcyBpZiBzdHJlYW0gaXMgdW5sb2NrZWQgYnV0IE5PVCBjbG9zZWQuIElmIHRoZSB1c2VyIGNsb3Nlc1xuICogdGhlIHN0cmVhbSwgdGhlIHB1bXAgd2lsbCBoYW5kbGUgcmVzb2x1dGlvbiB2aWEgdGhlIHN0cmVhbSBlbmRpbmcgbmF0dXJhbGx5LlxuICpcbiAqIFByb3RlY3Rpb246IElmIHBvbGxpbmcgaXMgYWxyZWFkeSBhY3RpdmUgb24gdGhpcyBzdGF0ZSwgdGhlIGV4aXN0aW5nIGludGVydmFsXG4gKiBpcyB1c2VkIHRvIGF2b2lkIGNyZWF0aW5nIG11bHRpcGxlIHNpbXVsdGFuZW91cyBwb2xsaW5nIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb2xsV3JpdGFibGVMb2NrKFxuICB3cml0YWJsZTogV3JpdGFibGVTdHJlYW0sXG4gIHN0YXRlOiBGbHVzaGFibGVTdHJlYW1TdGF0ZVxuKTogdm9pZCB7XG4gIC8vIFByZXZlbnQgbXVsdGlwbGUgc2ltdWx0YW5lb3VzIHBvbGxpbmcgb24gdGhlIHNhbWUgc3RhdGVcbiAgaWYgKHN0YXRlLndyaXRhYmxlUG9sbGluZ0ludGVydmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIC8vIFN0b3AgcG9sbGluZyBpZiBhbHJlYWR5IHJlc29sdmVkIG9yIHN0cmVhbSBlbmRlZFxuICAgIGlmIChzdGF0ZS5kb25lUmVzb2x2ZWQgfHwgc3RhdGUuc3RyZWFtRW5kZWQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICBzdGF0ZS53cml0YWJsZVBvbGxpbmdJbnRlcnZhbCA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBsb2NrIGlzIHJlbGVhc2VkIChub3QgY2xvc2VkKSBhbmQgbm8gcGVuZGluZyBvcHNcbiAgICBpZiAoaXNXcml0YWJsZVVubG9ja2VkTm90Q2xvc2VkKHdyaXRhYmxlKSAmJiBzdGF0ZS5wZW5kaW5nT3BzID09PSAwKSB7XG4gICAgICBzdGF0ZS5kb25lUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgc3RhdGUucmVzb2x2ZSgpO1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgIHN0YXRlLndyaXRhYmxlUG9sbGluZ0ludGVydmFsID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSwgTE9DS19QT0xMX0lOVEVSVkFMX01TKTtcblxuICBzdGF0ZS53cml0YWJsZVBvbGxpbmdJbnRlcnZhbCA9IGludGVydmFsSWQ7XG59XG5cbi8qKlxuICogUG9sbHMgYSBSZWFkYWJsZVN0cmVhbSB0byBjaGVjayBpZiB0aGUgdXNlciBoYXMgcmVsZWFzZWQgdGhlaXIgbG9jay5cbiAqIFJlc29sdmVzIHRoZSBkb25lIHByb21pc2Ugd2hlbiBsb2NrIGlzIHJlbGVhc2VkIGFuZCBubyBwZW5kaW5nIG9wcyByZW1haW4uXG4gKlxuICogTm90ZTogT25seSByZXNvbHZlcyBpZiBzdHJlYW0gaXMgdW5sb2NrZWQgYnV0IE5PVCBjbG9zZWQuIElmIHRoZSB1c2VyIGNsb3Nlc1xuICogdGhlIHN0cmVhbSwgdGhlIHB1bXAgd2lsbCBoYW5kbGUgcmVzb2x1dGlvbiB2aWEgdGhlIHN0cmVhbSBlbmRpbmcgbmF0dXJhbGx5LlxuICpcbiAqIFByb3RlY3Rpb246IElmIHBvbGxpbmcgaXMgYWxyZWFkeSBhY3RpdmUgb24gdGhpcyBzdGF0ZSwgdGhlIGV4aXN0aW5nIGludGVydmFsXG4gKiBpcyB1c2VkIHRvIGF2b2lkIGNyZWF0aW5nIG11bHRpcGxlIHNpbXVsdGFuZW91cyBwb2xsaW5nIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb2xsUmVhZGFibGVMb2NrKFxuICByZWFkYWJsZTogUmVhZGFibGVTdHJlYW0sXG4gIHN0YXRlOiBGbHVzaGFibGVTdHJlYW1TdGF0ZVxuKTogdm9pZCB7XG4gIC8vIFByZXZlbnQgbXVsdGlwbGUgc2ltdWx0YW5lb3VzIHBvbGxpbmcgb24gdGhlIHNhbWUgc3RhdGVcbiAgaWYgKHN0YXRlLnJlYWRhYmxlUG9sbGluZ0ludGVydmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIC8vIFN0b3AgcG9sbGluZyBpZiBhbHJlYWR5IHJlc29sdmVkIG9yIHN0cmVhbSBlbmRlZFxuICAgIGlmIChzdGF0ZS5kb25lUmVzb2x2ZWQgfHwgc3RhdGUuc3RyZWFtRW5kZWQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICBzdGF0ZS5yZWFkYWJsZVBvbGxpbmdJbnRlcnZhbCA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBsb2NrIGlzIHJlbGVhc2VkIChub3QgY2xvc2VkKSBhbmQgbm8gcGVuZGluZyBvcHNcbiAgICBpZiAoaXNSZWFkYWJsZVVubG9ja2VkTm90Q2xvc2VkKHJlYWRhYmxlKSAmJiBzdGF0ZS5wZW5kaW5nT3BzID09PSAwKSB7XG4gICAgICBzdGF0ZS5kb25lUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgc3RhdGUucmVzb2x2ZSgpO1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgIHN0YXRlLnJlYWRhYmxlUG9sbGluZ0ludGVydmFsID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSwgTE9DS19QT0xMX0lOVEVSVkFMX01TKTtcblxuICBzdGF0ZS5yZWFkYWJsZVBvbGxpbmdJbnRlcnZhbCA9IGludGVydmFsSWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZsdXNoYWJsZSBwaXBlIGZyb20gYSBSZWFkYWJsZVN0cmVhbSB0byBhIFdyaXRhYmxlU3RyZWFtLlxuICogVW5saWtlIHBpcGVUbygpLCB0aGlzIHJlc29sdmVzIHdoZW46XG4gKiAxLiBUaGUgc291cmNlIHN0cmVhbSBjb21wbGV0ZXMgKGNsb3NlL2Vycm9yKSwgT1JcbiAqIDIuIFRoZSB1c2VyIHJlbGVhc2VzIHRoZWlyIGxvY2sgb24gdXNlclN0cmVhbSBBTkQgYWxsIHBlbmRpbmcgd3JpdGVzIGFyZSBmbHVzaGVkXG4gKlxuICogQHBhcmFtIHNvdXJjZSAtIFRoZSByZWFkYWJsZSBzdHJlYW0gdG8gcmVhZCBmcm9tIChlLmcuLCB0cmFuc2Zvcm0ncyByZWFkYWJsZSlcbiAqIEBwYXJhbSBzaW5rIC0gVGhlIHdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSB0byAoZS5nLiwgc2VydmVyIHdyaXRhYmxlKVxuICogQHBhcmFtIHN0YXRlIC0gVGhlIGZsdXNoYWJsZSBzdGF0ZSB0cmFja2VyXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBzdHJlYW0gZW5kcyAobm90IHdoZW4gZG9uZSBwcm9taXNlIHJlc29sdmVzKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmx1c2hhYmxlUGlwZShcbiAgc291cmNlOiBSZWFkYWJsZVN0cmVhbSxcbiAgc2luazogV3JpdGFibGVTdHJlYW0sXG4gIHN0YXRlOiBGbHVzaGFibGVTdHJlYW1TdGF0ZVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlYWRlciA9IHNvdXJjZS5nZXRSZWFkZXIoKTtcbiAgY29uc3Qgd3JpdGVyID0gc2luay5nZXRXcml0ZXIoKTtcbiAgbGV0IGNhbmNlbFJlYXNvbjogdW5rbm93bjtcblxuICB0cnkge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyBDaGVjayBpZiBzdHJlYW0gaGFzIGVuZGVkXG4gICAgICBpZiAoc3RhdGUuc3RyZWFtRW5kZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWFkIGZyb20gc291cmNlIC0gZG9uJ3QgY291bnQgYXMgcGVuZGluZyBvcCBzaW5jZSB3ZSdyZSBqdXN0IHdhaXRpbmcgZm9yIGRhdGFcbiAgICAgIC8vIFRoZSBpbXBvcnRhbnQgb3BzIGFyZSB3cml0ZXMgdG8gdGhlIHNpbmsgKHNlcnZlcilcbiAgICAgIGNvbnN0IHJlYWRSZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICByZWFkZXIucmVhZCgpLFxuICAgICAgICB3cml0ZXIuY2xvc2VkLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JpdGFibGUgc3RyZWFtIGNsb3NlZCBwcmVtYXR1cmVseScpO1xuICAgICAgICB9KSxcbiAgICAgIF0pO1xuXG4gICAgICAvLyBDaGVjayBpZiBzdHJlYW0gaGFzIGVuZGVkIChlLmcuLCBkdWUgdG8gZXJyb3IgaW4gYW5vdGhlciBwYXRoKSBiZWZvcmUgcHJvY2Vzc2luZ1xuICAgICAgaWYgKHN0YXRlLnN0cmVhbUVuZGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlYWRSZXN1bHQuZG9uZSkge1xuICAgICAgICAvLyBTb3VyY2Ugc3RyZWFtIGNvbXBsZXRlZCAtIGNsb3NlIHNpbmsgYW5kIHJlc29sdmVcbiAgICAgICAgc3RhdGUuc3RyZWFtRW5kZWQgPSB0cnVlO1xuICAgICAgICBhd2FpdCB3cml0ZXIuY2xvc2UoKTtcbiAgICAgICAgLy8gUmVzb2x2ZSBkb25lIHByb21pc2UgaWYgbm90IGFscmVhZHkgcmVzb2x2ZWRcbiAgICAgICAgaWYgKCFzdGF0ZS5kb25lUmVzb2x2ZWQpIHtcbiAgICAgICAgICBzdGF0ZS5kb25lUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIHN0YXRlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENvdW50IHdyaXRlIGFzIGEgcGVuZGluZyBvcCAtIHRoaXMgaXMgd2hhdCB3ZSBuZWVkIHRvIGZsdXNoXG4gICAgICBzdGF0ZS5wZW5kaW5nT3BzKys7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3cml0ZXIud3JpdGUocmVhZFJlc3VsdC52YWx1ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzdGF0ZS5wZW5kaW5nT3BzLS07XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzdGF0ZS5zdHJlYW1FbmRlZCA9IHRydWU7XG4gICAgY2FuY2VsUmVhc29uID0gZXJyO1xuICAgIGlmICghc3RhdGUuZG9uZVJlc29sdmVkKSB7XG4gICAgICBzdGF0ZS5kb25lUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgc3RhdGUucmVqZWN0KGVycik7XG4gICAgfVxuICAgIC8vIFByb3BhZ2F0ZSBlcnJvciB0aHJvdWdoIGZsdXNoYWJsZVBpcGUncyBvd24gcHJvbWlzZSBhcyB3ZWxsLlxuICAgIC8vIENhbGxlcnMgdGhhdCByZWx5IG9uIHRoZSBGbHVzaGFibGVTdHJlYW1TdGF0ZSBzaG91bGQgdXNlIGBzdGF0ZS5wcm9taXNlYCxcbiAgICAvLyB3aGlsZSBvdGhlciBjYWxsZXJzIG1heSBkZXBlbmQgb24gdGhpcyByZWplY3Rpb24uIFNvbWUga25vd24gY2FsbGVyc1xuICAgIC8vIGV4cGxpY2l0bHkgaWdub3JlIHRoaXMgcmVqZWN0aW9uIChgLmNhdGNoKCgpID0+IHt9KWApIGFuZCByZWx5IHNvbGVseVxuICAgIC8vIG9uIGBzdGF0ZS5yZWplY3QoZXJyKWAgZm9yIGVycm9yIGhhbmRsaW5nLlxuICAgIHRocm93IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBDYW5jZWwgdGhlIHVwc3RyZWFtIHJlYWRlciBzbyB0aGUgc291cmNlIGtub3dzIHRvIHN0b3AgZ2VuZXJhdGluZyBkYXRhLlxuICAgIC8vIFVzZXMgY2FuY2VsUmVhc29uIChzZXQgaW4gdGhlIGNhdGNoIGJsb2NrKSBzbyB0aGUgc291cmNlIHJlY2VpdmVzIGNvbnRleHRcbiAgICAvLyBhYm91dCB3aHkgaXQgd2FzIGNhbmNlbGxlZC4gT24gbm9ybWFsIGNvbXBsZXRpb24gY2FuY2VsUmVhc29uIGlzIHVuZGVmaW5lZCxcbiAgICAvLyB3aGljaCBpcyBhIGhhcm1sZXNzIG5vLW9wIG9uIGFuIGFscmVhZHktZG9uZSByZWFkZXIuXG4gICAgcmVhZGVyLmNhbmNlbChjYW5jZWxSZWFzb24pLmNhdGNoKCgpID0+IHt9KTtcbiAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICB3cml0ZXIucmVsZWFzZUxvY2soKTtcbiAgfVxufVxuIl19
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx1c2hhYmxlLXN0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mbHVzaGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBNkIsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0U7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBNkJ4QyxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE1BQU0sS0FBSyxHQUF5QjtRQUNsQyxHQUFHLGFBQWEsRUFBUTtRQUN4QixVQUFVLEVBQUUsQ0FBQztRQUNiLFlBQVksRUFBRSxLQUFLO1FBQ25CLFdBQVcsRUFBRSxLQUFLO0tBQ25CLENBQUM7SUFFRix5RUFBeUU7SUFDekUsd0VBQXdFO0lBQ3hFLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTlCLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUywyQkFBMkIsQ0FBQyxRQUF3QjtJQUMzRCxJQUFJLFFBQVEsQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFbEMsSUFBSSxNQUErQyxDQUFDO0lBQ3BELElBQUksQ0FBQztRQUNILHlFQUF5RTtRQUN6RSxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxzRUFBc0U7UUFDdEUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxtRUFBbUU7UUFDbkUscUVBQXFFO1FBQ3JFLGdFQUFnRTtR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QyxVQUFVLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxDQUFDO29CQUFTLENBQUM7Z0JBQ1QsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN6QixZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDMUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBQ0QsK0RBQStEO1FBQy9ELDRFQUE0RTtRQUM1RSx1RUFBdUU7UUFDdkUsd0VBQXdFO1FBQ3hFLDZDQUE2QztRQUM3QyxNQUFNLEdBQUcsQ0FBQztJQUNaLENBQUM7WUFBUyxDQUFDO1FBQ1QsMEVBQTBFO1FBQzFFLDRFQUE0RTtRQUM1RSw4RUFBOEU7UUFDOUUsdURBQXVEO1FBQ3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXb3JrZmxvd1J1bnRpbWVFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgdHlwZSBQcm9taXNlV2l0aFJlc29sdmVycywgd2l0aFJlc29sdmVycyB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5cbi8qKlxuICogUG9sbGluZyBpbnRlcnZhbCAoaW4gbXMpIGZvciBsb2NrIHJlbGVhc2UgZGV0ZWN0aW9uLlxuICpcbiAqIFRoZSBXZWIgU3RyZWFtcyBBUEkgZG9lcyBub3QgZXhwb3NlIGFuIGV2ZW50IGZvciBcImxvY2sgcmVsZWFzZWQgYnV0IHN0cmVhbVxuICogc3RpbGwgb3BlblwiOyB3ZSBjYW4gb25seSBkaXN0aW5ndWlzaCB0aGF0IHN0YXRlIGJ5IHBlcmlvZGljYWxseSBhdHRlbXB0aW5nXG4gKiB0byBhY3F1aXJlIGEgcmVhZGVyL3dyaXRlci4gRm9yIHRoYXQgcmVhc29uIHdlIHVzZSBwb2xsaW5nIGluc3RlYWQgb2YgYVxuICogZnVsbHkgZXZlbnQtZHJpdmVuIGFwcHJvYWNoIGhlcmUuXG4gKlxuICogMTBtcyBpcyBjaG9zZW4gc28gdGhlIHBvbGxpbmcgdGljayBhbG1vc3QgbmV2ZXIgc2l0cyBvbiB0aGUgY3JpdGljYWwgcGF0aDpcbiAqIHRoZSBWMiBzdGVwLWV4ZWN1dG9yJ3MgYG9wc1NldHRsZWRgIHJhY2Ugd2FpdHMgZm9yIHRoaXMgc3RhdGUgdG8gcmVzb2x2ZVxuICogYWZ0ZXIgZWFjaCBzdGVwIGJvZHkgcmV0dXJucywgc28gYSBjb2Fyc2VyIGludGVydmFsICh0aGUgcHJldmlvdXMgMTAwbXMpXG4gKiBhZGRzIHZpc2libGUgcGVyLXN0ZXAgbGF0ZW5jeSB0byBzdHJlYW1pbmcgd29ya2Zsb3dzLiBXaXRoIGEgdW5pZm9ybWx5XG4gKiBkaXN0cmlidXRlZCBvZmZzZXQgYmV0d2VlbiBzdGVwIHJldHVybiBhbmQgdGhlIG5leHQgdGljaywgdGhlIGV4cGVjdGVkXG4gKiB3YWl0IGlzIGhhbGYgdGhlIGludGVydmFsIOKAlCBzbyAxMG1zIG1lYW5zIH41bXMgYXZlcmFnZSB3YWl0IHBlciBzdGVwXG4gKiBpbnN0ZWFkIG9mIH41MG1zLiBUaGUgcGVyLXRpY2sgd29yayBpcyBgd3JpdGFibGUubG9ja2VkYCBwbHVzIGFcbiAqIGBnZXRXcml0ZXIoKWAvYHJlbGVhc2VMb2NrKClgIHByb2JlLCBib3RoIG1pY3Jvc2Vjb25kLXNjYWxlOyAxMMOXIG1vcmVcbiAqIHRpY2tzIGR1cmluZyBhIHN0cmVhbSdzIGxpZmV0aW1lIGlzIG5vdCBtZWFzdXJhYmxlIGluIHByYWN0aWNlLlxuICovXG5leHBvcnQgY29uc3QgTE9DS19QT0xMX0lOVEVSVkFMX01TID0gMTA7XG5cbi8qKlxuICogU3RhdGUgdHJhY2tlciBmb3IgZmx1c2hhYmxlIHN0cmVhbSBvcGVyYXRpb25zLlxuICogUmVzb2x2ZXMgd2hlbiBlaXRoZXI6XG4gKiAxLiBTdHJlYW0gY29tcGxldGVzIChjbG9zZS9lcnJvciksIE9SXG4gKiAyLiBMb2NrIGlzIHJlbGVhc2VkIEFORCBhbGwgcGVuZGluZyBvcGVyYXRpb25zIGFyZSBmbHVzaGVkXG4gKlxuICogTm90ZTogYGRvbmVSZXNvbHZlZGAgYW5kIGBzdHJlYW1FbmRlZGAgYXJlIHNlcGFyYXRlOlxuICogLSBgZG9uZVJlc29sdmVkYDogVGhlIGBkb25lYCBwcm9taXNlIGhhcyBiZWVuIHJlc29sdmVkIChzdGVwIGNhbiBjb21wbGV0ZSlcbiAqIC0gYHN0cmVhbUVuZGVkYDogVGhlIHVuZGVybHlpbmcgc3RyZWFtIGhhcyBhY3R1YWxseSBjbG9zZWQvZXJyb3JlZFxuICpcbiAqIE9uY2UgYGRvbmVSZXNvbHZlZGAgaXMgc2V0IHRvIHRydWUsIHRoZSBgZG9uZWAgcHJvbWlzZSB3aWxsIG5vdCByZXNvbHZlXG4gKiBhZ2Fpbi4gUmUtYWNxdWlyaW5nIGxvY2tzIGFmdGVyIHJlbGVhc2UgaXMgbm90IHN1cHBvcnRlZCBhcyBhIHdheSB0b1xuICogdHJpZ2dlciBhZGRpdGlvbmFsIGNvbXBsZXRpb24gc2lnbmFsaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsdXNoYWJsZVN0cmVhbVN0YXRlIGV4dGVuZHMgUHJvbWlzZVdpdGhSZXNvbHZlcnM8dm9pZD4ge1xuICAvKiogTnVtYmVyIG9mIHdyaXRlIG9wZXJhdGlvbnMgY3VycmVudGx5IGluIGZsaWdodCB0byB0aGUgc2VydmVyICovXG4gIHBlbmRpbmdPcHM6IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdGhlIGBkb25lYCBwcm9taXNlIGhhcyBiZWVuIHJlc29sdmVkICovXG4gIGRvbmVSZXNvbHZlZDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIHVuZGVybHlpbmcgc3RyZWFtIGhhcyBhY3R1YWxseSBjbG9zZWQvZXJyb3JlZCAqL1xuICBzdHJlYW1FbmRlZDogYm9vbGVhbjtcbiAgLyoqIEludGVydmFsIElEIGZvciB3cml0YWJsZSBsb2NrIHBvbGxpbmcgKGlmIGFjdGl2ZSkgKi9cbiAgd3JpdGFibGVQb2xsaW5nSW50ZXJ2YWw/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG4gIC8qKiBJbnRlcnZhbCBJRCBmb3IgcmVhZGFibGUgbG9jayBwb2xsaW5nIChpZiBhY3RpdmUpICovXG4gIHJlYWRhYmxlUG9sbGluZ0ludGVydmFsPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmx1c2hhYmxlU3RhdGUoKTogRmx1c2hhYmxlU3RyZWFtU3RhdGUge1xuICBjb25zdCBzdGF0ZTogRmx1c2hhYmxlU3RyZWFtU3RhdGUgPSB7XG4gICAgLi4ud2l0aFJlc29sdmVyczx2b2lkPigpLFxuICAgIHBlbmRpbmdPcHM6IDAsXG4gICAgZG9uZVJlc29sdmVkOiBmYWxzZSxcbiAgICBzdHJlYW1FbmRlZDogZmFsc2UsXG4gIH07XG5cbiAgLy8gVGhlIHJ1bnRpbWUgYXdhaXRzIHRoaXMgcHJvbWlzZSBhZnRlciB1c2VyIGNvZGUgcmV0dXJucy4gT2JzZXJ2ZSBlYXJseVxuICAvLyBzdHJlYW0gZmFpbHVyZXMgbm93IHNvIHRoZXkgZG8gbm90IGJlY29tZSB1bmhhbmRsZWQgcmVqZWN0aW9ucyBmaXJzdC5cbiAgc3RhdGUucHJvbWlzZS5jYXRjaCgoKSA9PiB7fSk7XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIFdyaXRhYmxlU3RyZWFtIGlzIHVubG9ja2VkICh1c2VyIHJlbGVhc2VkIGxvY2spIHZzIGNsb3NlZC5cbiAqIFdoZW4gYSBzdHJlYW0gaXMgY2xvc2VkLCAubG9ja2VkIGlzIGZhbHNlIGJ1dCBnZXRXcml0ZXIoKSB0aHJvd3MuXG4gKiBXZSBvbmx5IHdhbnQgdG8gcmVzb2x2ZSB2aWEgcG9sbGluZyB3aGVuIHRoZSBzdHJlYW0gaXMgdW5sb2NrZWQsIG5vdCBjbG9zZWQuXG4gKiBJZiBjbG9zZWQsIHRoZSBwdW1wIHdpbGwgaGFuZGxlIHJlc29sdXRpb24gdmlhIHRoZSBzdHJlYW0gZW5kaW5nIG5hdHVyYWxseS5cbiAqL1xuZnVuY3Rpb24gaXNXcml0YWJsZVVubG9ja2VkTm90Q2xvc2VkKHdyaXRhYmxlOiBXcml0YWJsZVN0cmVhbSk6IGJvb2xlYW4ge1xuICBpZiAod3JpdGFibGUubG9ja2VkKSByZXR1cm4gZmFsc2U7XG5cbiAgbGV0IHdyaXRlcjogV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIC8vIFRyeSB0byBhY3F1aXJlIHdyaXRlciAtIGlmIHN1Y2Nlc3NmdWwsIHN0cmVhbSBpcyB1bmxvY2tlZCAobm90IGNsb3NlZClcbiAgICB3cml0ZXIgPSB3cml0YWJsZS5nZXRXcml0ZXIoKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gZ2V0V3JpdGVyKCkgdGhyb3dzIGlmIHN0cmVhbSBpcyBjbG9zZWQvZXJyb3JlZCAtIGxldCBwdW1wIGhhbmRsZSBpdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgd3JpdGVyLnJlbGVhc2VMb2NrKCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIHJlbGVhc2VMb2NrKCkgdGhyb3dzIGZvciBhbnkgcmVhc29uLCBjb25zZXJ2YXRpdmVseSB0cmVhdCB0aGVcbiAgICAvLyBzdHJlYW0gYXMgY2xvc2VkL2Vycm9yZWQgc28gY2FsbGVycyBkb24ndCBhc3N1bWUgaXQncyBzYWZlIHRvIHVzZS5cbiAgICAvLyBUaGUgcHVtcCB3aWxsIG9ic2VydmUgdGhlIGZhaWx1cmUgdmlhIHRoZSBzdHJlYW0ncyBlbmQgc3RhdGUuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgUmVhZGFibGVTdHJlYW0gaXMgdW5sb2NrZWQgKHVzZXIgcmVsZWFzZWQgbG9jaykgdnMgY2xvc2VkLlxuICovXG5mdW5jdGlvbiBpc1JlYWRhYmxlVW5sb2NrZWROb3RDbG9zZWQocmVhZGFibGU6IFJlYWRhYmxlU3RyZWFtKTogYm9vbGVhbiB7XG4gIGlmIChyZWFkYWJsZS5sb2NrZWQpIHJldHVybiBmYWxzZTtcblxuICBsZXQgcmVhZGVyOiBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgLy8gVHJ5IHRvIGFjcXVpcmUgcmVhZGVyIC0gaWYgc3VjY2Vzc2Z1bCwgc3RyZWFtIGlzIHVubG9ja2VkIChub3QgY2xvc2VkKVxuICAgIHJlYWRlciA9IHJlYWRhYmxlLmdldFJlYWRlcigpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBnZXRSZWFkZXIoKSB0aHJvd3MgaWYgc3RyZWFtIGlzIGNsb3NlZC9lcnJvcmVkIC0gbGV0IHB1bXAgaGFuZGxlIGl0XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWYgcmVsZWFzZUxvY2soKSB0aHJvd3MgZm9yIGFueSByZWFzb24sIGNvbnNlcnZhdGl2ZWx5IHRyZWF0IHRoZVxuICAgIC8vIHN0cmVhbSBhcyBjbG9zZWQvZXJyb3JlZCBzbyBjYWxsZXJzIGRvbid0IGFzc3VtZSBpdCdzIHNhZmUgdG8gdXNlLlxuICAgIC8vIFRoZSBwdW1wIHdpbGwgb2JzZXJ2ZSB0aGUgZmFpbHVyZSB2aWEgdGhlIHN0cmVhbSdzIGVuZCBzdGF0ZS5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBQb2xscyBhIFdyaXRhYmxlU3RyZWFtIHRvIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyByZWxlYXNlZCB0aGVpciBsb2NrLlxuICogUmVzb2x2ZXMgdGhlIGRvbmUgcHJvbWlzZSB3aGVuIGxvY2sgaXMgcmVsZWFzZWQgYW5kIG5vIHBlbmRpbmcgb3BzIHJlbWFpbi5cbiAqXG4gKiBOb3RlOiBPbmx5IHJlc29sdmVzIGlmIHN0cmVhbSBpcyB1bmxvY2tlZCBidXQgTk9UIGNsb3NlZC4gSWYgdGhlIHVzZXIgY2xvc2VzXG4gKiB0aGUgc3RyZWFtLCB0aGUgcHVtcCB3aWxsIGhhbmRsZSByZXNvbHV0aW9uIHZpYSB0aGUgc3RyZWFtIGVuZGluZyBuYXR1cmFsbHkuXG4gKlxuICogUHJvdGVjdGlvbjogSWYgcG9sbGluZyBpcyBhbHJlYWR5IGFjdGl2ZSBvbiB0aGlzIHN0YXRlLCB0aGUgZXhpc3RpbmcgaW50ZXJ2YWxcbiAqIGlzIHVzZWQgdG8gYXZvaWQgY3JlYXRpbmcgbXVsdGlwbGUgc2ltdWx0YW5lb3VzIHBvbGxpbmcgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvbGxXcml0YWJsZUxvY2soXG4gIHdyaXRhYmxlOiBXcml0YWJsZVN0cmVhbSxcbiAgc3RhdGU6IEZsdXNoYWJsZVN0cmVhbVN0YXRlXG4pOiB2b2lkIHtcbiAgLy8gUHJldmVudCBtdWx0aXBsZSBzaW11bHRhbmVvdXMgcG9sbGluZyBvbiB0aGUgc2FtZSBzdGF0ZVxuICBpZiAoc3RhdGUud3JpdGFibGVQb2xsaW5nSW50ZXJ2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgLy8gU3RvcCBwb2xsaW5nIGlmIGFscmVhZHkgcmVzb2x2ZWQgb3Igc3RyZWFtIGVuZGVkXG4gICAgaWYgKHN0YXRlLmRvbmVSZXNvbHZlZCB8fCBzdGF0ZS5zdHJlYW1FbmRlZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgIHN0YXRlLndyaXRhYmxlUG9sbGluZ0ludGVydmFsID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGxvY2sgaXMgcmVsZWFzZWQgKG5vdCBjbG9zZWQpIGFuZCBubyBwZW5kaW5nIG9wc1xuICAgIGlmIChpc1dyaXRhYmxlVW5sb2NrZWROb3RDbG9zZWQod3JpdGFibGUpICYmIHN0YXRlLnBlbmRpbmdPcHMgPT09IDApIHtcbiAgICAgIHN0YXRlLmRvbmVSZXNvbHZlZCA9IHRydWU7XG4gICAgICBzdGF0ZS5yZXNvbHZlKCk7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgc3RhdGUud3JpdGFibGVQb2xsaW5nSW50ZXJ2YWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9LCBMT0NLX1BPTExfSU5URVJWQUxfTVMpO1xuXG4gIHN0YXRlLndyaXRhYmxlUG9sbGluZ0ludGVydmFsID0gaW50ZXJ2YWxJZDtcbn1cblxuLyoqXG4gKiBQb2xscyBhIFJlYWRhYmxlU3RyZWFtIHRvIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyByZWxlYXNlZCB0aGVpciBsb2NrLlxuICogUmVzb2x2ZXMgdGhlIGRvbmUgcHJvbWlzZSB3aGVuIGxvY2sgaXMgcmVsZWFzZWQgYW5kIG5vIHBlbmRpbmcgb3BzIHJlbWFpbi5cbiAqXG4gKiBOb3RlOiBPbmx5IHJlc29sdmVzIGlmIHN0cmVhbSBpcyB1bmxvY2tlZCBidXQgTk9UIGNsb3NlZC4gSWYgdGhlIHVzZXIgY2xvc2VzXG4gKiB0aGUgc3RyZWFtLCB0aGUgcHVtcCB3aWxsIGhhbmRsZSByZXNvbHV0aW9uIHZpYSB0aGUgc3RyZWFtIGVuZGluZyBuYXR1cmFsbHkuXG4gKlxuICogUHJvdGVjdGlvbjogSWYgcG9sbGluZyBpcyBhbHJlYWR5IGFjdGl2ZSBvbiB0aGlzIHN0YXRlLCB0aGUgZXhpc3RpbmcgaW50ZXJ2YWxcbiAqIGlzIHVzZWQgdG8gYXZvaWQgY3JlYXRpbmcgbXVsdGlwbGUgc2ltdWx0YW5lb3VzIHBvbGxpbmcgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvbGxSZWFkYWJsZUxvY2soXG4gIHJlYWRhYmxlOiBSZWFkYWJsZVN0cmVhbSxcbiAgc3RhdGU6IEZsdXNoYWJsZVN0cmVhbVN0YXRlXG4pOiB2b2lkIHtcbiAgLy8gUHJldmVudCBtdWx0aXBsZSBzaW11bHRhbmVvdXMgcG9sbGluZyBvbiB0aGUgc2FtZSBzdGF0ZVxuICBpZiAoc3RhdGUucmVhZGFibGVQb2xsaW5nSW50ZXJ2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgLy8gU3RvcCBwb2xsaW5nIGlmIGFscmVhZHkgcmVzb2x2ZWQgb3Igc3RyZWFtIGVuZGVkXG4gICAgaWYgKHN0YXRlLmRvbmVSZXNvbHZlZCB8fCBzdGF0ZS5zdHJlYW1FbmRlZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgIHN0YXRlLnJlYWRhYmxlUG9sbGluZ0ludGVydmFsID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGxvY2sgaXMgcmVsZWFzZWQgKG5vdCBjbG9zZWQpIGFuZCBubyBwZW5kaW5nIG9wc1xuICAgIGlmIChpc1JlYWRhYmxlVW5sb2NrZWROb3RDbG9zZWQocmVhZGFibGUpICYmIHN0YXRlLnBlbmRpbmdPcHMgPT09IDApIHtcbiAgICAgIHN0YXRlLmRvbmVSZXNvbHZlZCA9IHRydWU7XG4gICAgICBzdGF0ZS5yZXNvbHZlKCk7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgc3RhdGUucmVhZGFibGVQb2xsaW5nSW50ZXJ2YWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9LCBMT0NLX1BPTExfSU5URVJWQUxfTVMpO1xuXG4gIHN0YXRlLnJlYWRhYmxlUG9sbGluZ0ludGVydmFsID0gaW50ZXJ2YWxJZDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZmx1c2hhYmxlIHBpcGUgZnJvbSBhIFJlYWRhYmxlU3RyZWFtIHRvIGEgV3JpdGFibGVTdHJlYW0uXG4gKiBVbmxpa2UgcGlwZVRvKCksIHRoaXMgcmVzb2x2ZXMgd2hlbjpcbiAqIDEuIFRoZSBzb3VyY2Ugc3RyZWFtIGNvbXBsZXRlcyAoY2xvc2UvZXJyb3IpLCBPUlxuICogMi4gVGhlIHVzZXIgcmVsZWFzZXMgdGhlaXIgbG9jayBvbiB1c2VyU3RyZWFtIEFORCBhbGwgcGVuZGluZyB3cml0ZXMgYXJlIGZsdXNoZWRcbiAqXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHJlYWRhYmxlIHN0cmVhbSB0byByZWFkIGZyb20gKGUuZy4sIHRyYW5zZm9ybSdzIHJlYWRhYmxlKVxuICogQHBhcmFtIHNpbmsgLSBUaGUgd3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHRvIChlLmcuLCBzZXJ2ZXIgd3JpdGFibGUpXG4gKiBAcGFyYW0gc3RhdGUgLSBUaGUgZmx1c2hhYmxlIHN0YXRlIHRyYWNrZXJcbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHN0cmVhbSBlbmRzIChub3Qgd2hlbiBkb25lIHByb21pc2UgcmVzb2x2ZXMpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmbHVzaGFibGVQaXBlKFxuICBzb3VyY2U6IFJlYWRhYmxlU3RyZWFtLFxuICBzaW5rOiBXcml0YWJsZVN0cmVhbSxcbiAgc3RhdGU6IEZsdXNoYWJsZVN0cmVhbVN0YXRlXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVhZGVyID0gc291cmNlLmdldFJlYWRlcigpO1xuICBjb25zdCB3cml0ZXIgPSBzaW5rLmdldFdyaXRlcigpO1xuICBsZXQgY2FuY2VsUmVhc29uOiB1bmtub3duO1xuXG4gIHRyeSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIENoZWNrIGlmIHN0cmVhbSBoYXMgZW5kZWRcbiAgICAgIGlmIChzdGF0ZS5zdHJlYW1FbmRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFJlYWQgZnJvbSBzb3VyY2UgLSBkb24ndCBjb3VudCBhcyBwZW5kaW5nIG9wIHNpbmNlIHdlJ3JlIGp1c3Qgd2FpdGluZyBmb3IgZGF0YVxuICAgICAgLy8gVGhlIGltcG9ydGFudCBvcHMgYXJlIHdyaXRlcyB0byB0aGUgc2luayAoc2VydmVyKVxuICAgICAgY29uc3QgcmVhZFJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIHJlYWRlci5yZWFkKCksXG4gICAgICAgIHdyaXRlci5jbG9zZWQudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKCdXcml0YWJsZSBzdHJlYW0gY2xvc2VkIHByZW1hdHVyZWx5Jyk7XG4gICAgICAgIH0pLFxuICAgICAgXSk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHN0cmVhbSBoYXMgZW5kZWQgKGUuZy4sIGR1ZSB0byBlcnJvciBpbiBhbm90aGVyIHBhdGgpIGJlZm9yZSBwcm9jZXNzaW5nXG4gICAgICBpZiAoc3RhdGUuc3RyZWFtRW5kZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVhZFJlc3VsdC5kb25lKSB7XG4gICAgICAgIC8vIFNvdXJjZSBzdHJlYW0gY29tcGxldGVkIC0gY2xvc2Ugc2luayBhbmQgcmVzb2x2ZVxuICAgICAgICBzdGF0ZS5zdHJlYW1FbmRlZCA9IHRydWU7XG4gICAgICAgIGF3YWl0IHdyaXRlci5jbG9zZSgpO1xuICAgICAgICAvLyBSZXNvbHZlIGRvbmUgcHJvbWlzZSBpZiBub3QgYWxyZWFkeSByZXNvbHZlZFxuICAgICAgICBpZiAoIXN0YXRlLmRvbmVSZXNvbHZlZCkge1xuICAgICAgICAgIHN0YXRlLmRvbmVSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgc3RhdGUucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQ291bnQgd3JpdGUgYXMgYSBwZW5kaW5nIG9wIC0gdGhpcyBpcyB3aGF0IHdlIG5lZWQgdG8gZmx1c2hcbiAgICAgIHN0YXRlLnBlbmRpbmdPcHMrKztcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdyaXRlci53cml0ZShyZWFkUmVzdWx0LnZhbHVlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHN0YXRlLnBlbmRpbmdPcHMtLTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHN0YXRlLnN0cmVhbUVuZGVkID0gdHJ1ZTtcbiAgICBjYW5jZWxSZWFzb24gPSBlcnI7XG4gICAgaWYgKCFzdGF0ZS5kb25lUmVzb2x2ZWQpIHtcbiAgICAgIHN0YXRlLmRvbmVSZXNvbHZlZCA9IHRydWU7XG4gICAgICBzdGF0ZS5yZWplY3QoZXJyKTtcbiAgICB9XG4gICAgLy8gUHJvcGFnYXRlIGVycm9yIHRocm91Z2ggZmx1c2hhYmxlUGlwZSdzIG93biBwcm9taXNlIGFzIHdlbGwuXG4gICAgLy8gQ2FsbGVycyB0aGF0IHJlbHkgb24gdGhlIEZsdXNoYWJsZVN0cmVhbVN0YXRlIHNob3VsZCB1c2UgYHN0YXRlLnByb21pc2VgLFxuICAgIC8vIHdoaWxlIG90aGVyIGNhbGxlcnMgbWF5IGRlcGVuZCBvbiB0aGlzIHJlamVjdGlvbi4gU29tZSBrbm93biBjYWxsZXJzXG4gICAgLy8gZXhwbGljaXRseSBpZ25vcmUgdGhpcyByZWplY3Rpb24gKGAuY2F0Y2goKCkgPT4ge30pYCkgYW5kIHJlbHkgc29sZWx5XG4gICAgLy8gb24gYHN0YXRlLnJlamVjdChlcnIpYCBmb3IgZXJyb3IgaGFuZGxpbmcuXG4gICAgdGhyb3cgZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIENhbmNlbCB0aGUgdXBzdHJlYW0gcmVhZGVyIHNvIHRoZSBzb3VyY2Uga25vd3MgdG8gc3RvcCBnZW5lcmF0aW5nIGRhdGEuXG4gICAgLy8gVXNlcyBjYW5jZWxSZWFzb24gKHNldCBpbiB0aGUgY2F0Y2ggYmxvY2spIHNvIHRoZSBzb3VyY2UgcmVjZWl2ZXMgY29udGV4dFxuICAgIC8vIGFib3V0IHdoeSBpdCB3YXMgY2FuY2VsbGVkLiBPbiBub3JtYWwgY29tcGxldGlvbiBjYW5jZWxSZWFzb24gaXMgdW5kZWZpbmVkLFxuICAgIC8vIHdoaWNoIGlzIGEgaGFybWxlc3Mgbm8tb3Agb24gYW4gYWxyZWFkeS1kb25lIHJlYWRlci5cbiAgICByZWFkZXIuY2FuY2VsKGNhbmNlbFJlYXNvbikuY2F0Y2goKCkgPT4ge30pO1xuICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgIHdyaXRlci5yZWxlYXNlTG9jaygpO1xuICB9XG59XG4iXX0=
|
package/dist/global.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AttributeChange } from '@workflow/world';
|
|
1
2
|
import type { Serializable } from './schemas.js';
|
|
2
3
|
export interface StepInvocationQueueItem {
|
|
3
4
|
type: 'step';
|
|
@@ -14,8 +15,13 @@ export interface HookInvocationQueueItem {
|
|
|
14
15
|
token: string;
|
|
15
16
|
metadata?: Serializable;
|
|
16
17
|
hasCreatedEvent?: boolean;
|
|
18
|
+
/** Whether the workflow is awaiting `hook.getConflict()` for this hook */
|
|
19
|
+
hasConflictAwaiter?: boolean;
|
|
17
20
|
disposed?: boolean;
|
|
18
21
|
isWebhook?: boolean;
|
|
22
|
+
isSystem?: boolean;
|
|
23
|
+
abortRequested?: boolean;
|
|
24
|
+
abortReason?: unknown;
|
|
19
25
|
}
|
|
20
26
|
export interface WaitInvocationQueueItem {
|
|
21
27
|
type: 'wait';
|
|
@@ -23,7 +29,13 @@ export interface WaitInvocationQueueItem {
|
|
|
23
29
|
resumeAt: Date;
|
|
24
30
|
hasCreatedEvent?: boolean;
|
|
25
31
|
}
|
|
26
|
-
export
|
|
32
|
+
export interface AttributeInvocationQueueItem {
|
|
33
|
+
type: 'attribute';
|
|
34
|
+
correlationId: string;
|
|
35
|
+
changes: AttributeChange[];
|
|
36
|
+
allowReservedAttributes?: true;
|
|
37
|
+
}
|
|
38
|
+
export type QueueItem = StepInvocationQueueItem | HookInvocationQueueItem | WaitInvocationQueueItem | AttributeInvocationQueueItem;
|
|
27
39
|
/**
|
|
28
40
|
* An error that is thrown when one or more operations (steps/hooks/etc.) are called but do
|
|
29
41
|
* not yet have corresponding entries in the event log. The workflow
|
|
@@ -36,7 +48,9 @@ export declare class WorkflowSuspension extends Error {
|
|
|
36
48
|
stepCount: number;
|
|
37
49
|
hookCount: number;
|
|
38
50
|
waitCount: number;
|
|
51
|
+
attributeCount: number;
|
|
39
52
|
hookDisposedCount: number;
|
|
53
|
+
abortCount: number;
|
|
40
54
|
constructor(stepsInput: Map<string, QueueItem>, global: typeof globalThis);
|
|
41
55
|
static is(value: unknown): value is WorkflowSuspension;
|
|
42
56
|
}
|
package/dist/global.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../src/global.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../src/global.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,IAAI,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,uBAAuB,CAAC,EAAE,IAAI,CAAC;CAChC;AAED,MAAM,MAAM,SAAS,GACjB,uBAAuB,GACvB,uBAAuB,GACvB,uBAAuB,GACvB,4BAA4B,CAAC;AAEjC;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;gBAEP,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,UAAU;IAuFzE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB;CAGvD;AAED,wBAAgB,OAAO,IAAI,KAAK,CAI/B"}
|
package/dist/global.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { WorkflowRuntimeError } from '@workflow/errors';
|
|
1
2
|
import { pluralize } from '@workflow/utils';
|
|
2
3
|
/**
|
|
3
4
|
* An error that is thrown when one or more operations (steps/hooks/etc.) are called but do
|
|
@@ -11,7 +12,9 @@ export class WorkflowSuspension extends Error {
|
|
|
11
12
|
stepCount;
|
|
12
13
|
hookCount;
|
|
13
14
|
waitCount;
|
|
15
|
+
attributeCount;
|
|
14
16
|
hookDisposedCount;
|
|
17
|
+
abortCount;
|
|
15
18
|
constructor(stepsInput, global) {
|
|
16
19
|
// Convert Map to array for iteration and storage
|
|
17
20
|
const steps = [...stepsInput.values()];
|
|
@@ -19,18 +22,24 @@ export class WorkflowSuspension extends Error {
|
|
|
19
22
|
let stepCount = 0;
|
|
20
23
|
let hookCount = 0;
|
|
21
24
|
let waitCount = 0;
|
|
25
|
+
let attributeCount = 0;
|
|
22
26
|
let hookDisposedCount = 0;
|
|
27
|
+
let abortCount = 0;
|
|
23
28
|
for (const item of steps) {
|
|
24
29
|
if (item.type === 'step')
|
|
25
30
|
stepCount++;
|
|
26
31
|
else if (item.type === 'hook') {
|
|
27
32
|
if (item.disposed)
|
|
28
33
|
hookDisposedCount++;
|
|
34
|
+
else if (item.abortRequested)
|
|
35
|
+
abortCount++;
|
|
29
36
|
else
|
|
30
37
|
hookCount++;
|
|
31
38
|
}
|
|
32
39
|
else if (item.type === 'wait')
|
|
33
40
|
waitCount++;
|
|
41
|
+
else if (item.type === 'attribute')
|
|
42
|
+
attributeCount++;
|
|
34
43
|
}
|
|
35
44
|
// Build description parts
|
|
36
45
|
const parts = [];
|
|
@@ -43,16 +52,20 @@ export class WorkflowSuspension extends Error {
|
|
|
43
52
|
if (waitCount > 0) {
|
|
44
53
|
parts.push(`${waitCount} ${pluralize('wait', 'waits', waitCount)}`);
|
|
45
54
|
}
|
|
55
|
+
if (attributeCount > 0) {
|
|
56
|
+
parts.push(`${attributeCount} ${pluralize('attribute write', 'attribute writes', attributeCount)}`);
|
|
57
|
+
}
|
|
46
58
|
if (hookDisposedCount > 0) {
|
|
47
59
|
parts.push(`${hookDisposedCount} hook ${pluralize('disposal', 'disposals', hookDisposedCount)}`);
|
|
48
60
|
}
|
|
49
61
|
// Determine verb (has/have) and action (run/created/received)
|
|
50
|
-
const totalCount = stepCount + hookCount + waitCount + hookDisposedCount;
|
|
62
|
+
const totalCount = stepCount + hookCount + waitCount + attributeCount + hookDisposedCount;
|
|
51
63
|
const hasOrHave = pluralize('has', 'have', totalCount);
|
|
52
64
|
// Pick action verb: use "processed" when mixed types are present
|
|
53
65
|
const typeCount = (stepCount > 0 ? 1 : 0) +
|
|
54
66
|
(hookCount > 0 ? 1 : 0) +
|
|
55
67
|
(waitCount > 0 ? 1 : 0) +
|
|
68
|
+
(attributeCount > 0 ? 1 : 0) +
|
|
56
69
|
(hookDisposedCount > 0 ? 1 : 0);
|
|
57
70
|
let action;
|
|
58
71
|
if (typeCount > 1) {
|
|
@@ -67,6 +80,9 @@ export class WorkflowSuspension extends Error {
|
|
|
67
80
|
else if (waitCount > 0) {
|
|
68
81
|
action = 'created';
|
|
69
82
|
}
|
|
83
|
+
else if (attributeCount > 0) {
|
|
84
|
+
action = 'written';
|
|
85
|
+
}
|
|
70
86
|
else if (hookDisposedCount > 0) {
|
|
71
87
|
action = 'processed';
|
|
72
88
|
}
|
|
@@ -83,13 +99,15 @@ export class WorkflowSuspension extends Error {
|
|
|
83
99
|
this.stepCount = stepCount;
|
|
84
100
|
this.hookCount = hookCount;
|
|
85
101
|
this.waitCount = waitCount;
|
|
102
|
+
this.attributeCount = attributeCount;
|
|
86
103
|
this.hookDisposedCount = hookDisposedCount;
|
|
104
|
+
this.abortCount = abortCount;
|
|
87
105
|
}
|
|
88
106
|
static is(value) {
|
|
89
107
|
return value instanceof WorkflowSuspension;
|
|
90
108
|
}
|
|
91
109
|
}
|
|
92
110
|
export function ENOTSUP() {
|
|
93
|
-
throw new
|
|
111
|
+
throw new WorkflowRuntimeError('This API is not available inside a workflow function. Workflow functions run in a deterministic VM; move the call to a step function for full Node.js access.');
|
|
94
112
|
}
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dsb2JhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFtQzVDOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUs7SUFDM0MsS0FBSyxDQUFjO0lBQ25CLFVBQVUsQ0FBb0I7SUFDOUIsU0FBUyxDQUFTO0lBQ2xCLFNBQVMsQ0FBUztJQUNsQixTQUFTLENBQVM7SUFDbEIsaUJBQWlCLENBQVM7SUFFMUIsWUFBWSxVQUFrQyxFQUFFLE1BQXlCO1FBQ3ZFLGlEQUFpRDtRQUNqRCxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFdkMsc0NBQXNDO1FBQ3RDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU07Z0JBQUUsU0FBUyxFQUFFLENBQUM7aUJBQ2pDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUTtvQkFBRSxpQkFBaUIsRUFBRSxDQUFDOztvQkFDbEMsU0FBUyxFQUFFLENBQUM7WUFDbkIsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTTtnQkFBRSxTQUFTLEVBQUUsQ0FBQztRQUMvQyxDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixJQUFJLFNBQVMsR0FBRyxDQUFDLEVB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U0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztJQUM3QyxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFjO1FBQ3RCLE9BQU8sS0FBSyxZQUFZLGtCQUFrQixDQUFDO0lBQzdDLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxPQUFPO0lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGx1cmFsaXplIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXphYmxlIH0gZnJvbSAnLi9zY2hlbWFzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTdGVwSW52b2NhdGlvblF1ZXVlSXRlbSB7XG4gIHR5cGU6ICdzdGVwJztcbiAgY29ycmVsYXRpb25JZDogc3RyaW5nO1xuICBzdGVwTmFtZTogc3RyaW5nO1xuICBhcmdzOiBTZXJpYWxpemFibGVbXTtcbiAgY2xvc3VyZVZhcnM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJpYWxpemFibGU+O1xuICB0aGlzVmFsPzogU2VyaWFsaXphYmxlO1xuICBoYXNDcmVhdGVkRXZlbnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvb2tJbnZvY2F0aW9uUXVldWVJdGVtIHtcbiAgdHlwZTogJ2hvb2snO1xuICBjb3JyZWxhdGlvbklkOiBzdHJpbmc7XG4gIHRva2VuOiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogU2VyaWFsaXphYmxlO1xuICBoYXNDcmVhdGVkRXZlbnQ/OiBib29sZWFuO1xuICBkaXNwb3NlZD86IGJvb2xlYW47XG4gIGlzV2ViaG9vaz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdEludm9jYXRpb25RdWV1ZUl0ZW0ge1xuICB0eXBlOiAnd2FpdCc7XG4gIGNvcnJlbGF0aW9uSWQ6IHN0cmluZztcbiAgcmVzdW1lQXQ6IERhdGU7XG4gIGhhc0NyZWF0ZWRFdmVudD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFF1ZXVlSXRlbSA9XG4gIHwgU3RlcEludm9jYXRpb25RdWV1ZUl0ZW1cbiAgfCBIb29rSW52b2NhdGlvblF1ZXVlSXRlbVxuICB8IFdhaXRJbnZvY2F0aW9uUXVldWVJdGVtO1xuXG4vKipcbiAqIEFuIGVycm9yIHRoYXQgaXMgdGhyb3duIHdoZW4gb25lIG9yIG1vcmUgb3BlcmF0aW9ucyAoc3RlcHMvaG9va3MvZXRjLikgYXJlIGNhbGxlZCBidXQgZG9cbiAqIG5vdCB5ZXQgaGF2ZSBjb3JyZXNwb25kaW5nIGVudHJpZXMgaW4gdGhlIGV2ZW50IGxvZy4gVGhlIHdvcmtmbG93XG4gKiBkaXNwYXRjaGVyIHdpbGwgY2F0Y2ggdGhpcyBlcnJvciBhbmQgcHVzaCB0aGUgb3BlcmF0aW9uc1xuICogb250byB0aGUgcXVldWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1N1c3BlbnNpb24gZXh0ZW5kcyBFcnJvciB7XG4gIHN0ZXBzOiBRdWV1ZUl0ZW1bXTtcbiAgZ2xvYmFsVGhpczogdHlwZW9mIGdsb2JhbFRoaXM7XG4gIHN0ZXBDb3VudDogbnVtYmVyO1xuICBob29rQ291bnQ6IG51bWJlcjtcbiAgd2FpdENvdW50OiBudW1iZXI7XG4gIGhvb2tEaXNwb3NlZENvdW50OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Ioc3RlcHNJbnB1dDogTWFwPHN0cmluZywgUXVldWVJdGVtPiwgZ2xvYmFsOiB0eXBlb2YgZ2xvYmFsVGhpcykge1xuICAgIC8vIENvbnZlcnQgTWFwIHRvIGFycmF5IGZvciBpdGVyYXRpb24gYW5kIHN0b3JhZ2VcbiAgICBjb25zdCBzdGVwcyA9IFsuLi5zdGVwc0lucHV0LnZhbHVlcygpXTtcblxuICAgIC8vIFNpbmdsZS1wYXNzIGNvdW50aW5nIGZvciBlZmZpY2llbmN5XG4gICAgbGV0IHN0ZXBDb3VudCA9IDA7XG4gICAgbGV0IGhvb2tDb3VudCA9IDA7XG4gICAgbGV0IHdhaXRDb3VudCA9IDA7XG4gICAgbGV0IGhvb2tEaXNwb3NlZENvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc3RlcHMpIHtcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdzdGVwJykgc3RlcENvdW50Kys7XG4gICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdob29rJykge1xuICAgICAgICBpZiAoaXRlbS5kaXNwb3NlZCkgaG9va0Rpc3Bvc2VkQ291bnQrKztcbiAgICAgICAgZWxzZSBob29rQ291bnQrKztcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAnd2FpdCcpIHdhaXRDb3VudCsrO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIGRlc2NyaXB0aW9uIHBhcnRzXG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHN0ZXBDb3VudCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7c3RlcENvdW50fSAke3BsdXJhbGl6ZSgnc3RlcCcsICdzdGVwcycsIHN0ZXBDb3VudCl9YCk7XG4gICAgfVxuICAgIGlmIChob29rQ291bnQgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke2hvb2tDb3VudH0gJHtwbHVyYWxpemUoJ2hvb2snLCAnaG9va3MnLCBob29rQ291bnQpfWApO1xuICAgIH1cbiAgICBpZiAod2FpdENvdW50ID4gMCkge1xuICAgICAgcGFydHMucHVzaChgJHt3YWl0Q291bnR9ICR7cGx1cmFsaXplKCd3YWl0JywgJ3dhaXRzJywgd2FpdENvdW50KX1gKTtcbiAgICB9XG4gICAgaWYgKGhvb2tEaXNwb3NlZENvdW50ID4gMCkge1xuICAgICAgcGFydHMucHVzaChcbiAgICAgICAgYCR7aG9va0Rpc3Bvc2VkQ291bnR9IGhvb2sgJHtwbHVyYWxpemUoJ2Rpc3Bvc2FsJywgJ2Rpc3Bvc2FscycsIGhvb2tEaXNwb3NlZENvdW50KX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIERldGVybWluZSB2ZXJiIChoYXMvaGF2ZSkgYW5kIGFjdGlvbiAocnVuL2NyZWF0ZWQvcmVjZWl2ZWQpXG4gICAgY29uc3QgdG90YWxDb3VudCA9IHN0ZXBDb3VudCArIGhvb2tDb3VudCArIHdhaXRDb3VudCArIGhvb2tEaXNwb3NlZENvdW50O1xuICAgIGNvbnN0IGhhc09ySGF2ZSA9IHBsdXJhbGl6ZSgnaGFzJywgJ2hhdmUnLCB0b3RhbENvdW50KTtcbiAgICAvLyBQaWNrIGFjdGlvbiB2ZXJiOiB1c2UgXCJwcm9jZXNzZWRcIiB3aGVuIG1peGVkIHR5cGVzIGFyZSBwcmVzZW50XG4gICAgY29uc3QgdHlwZUNvdW50ID1cbiAgICAgIChzdGVwQ291bnQgPiAwID8gMSA6IDApICtcbiAgICAgIChob29rQ291bnQgPiAwID8gMSA6IDApICtcbiAgICAgICh3YWl0Q291bnQgPiAwID8gMSA6IDApICtcbiAgICAgIChob29rRGlzcG9zZWRDb3VudCA+IDAgPyAxIDogMCk7XG4gICAgbGV0IGFjdGlvbjogc3RyaW5nO1xuICAgIGlmICh0eXBlQ291bnQgPiAxKSB7XG4gICAgICBhY3Rpb24gPSAncHJvY2Vzc2VkJztcbiAgICB9IGVsc2UgaWYgKHN0ZXBDb3VudCA+IDApIHtcbiAgICAgIGFjdGlvbiA9ICdydW4nO1xuICAgIH0gZWxzZSBpZiAoaG9va0NvdW50ID4gMCkge1xuICAgICAgYWN0aW9uID0gJ2NyZWF0ZWQnO1xuICAgIH0gZWxzZSBpZiAod2FpdENvdW50ID4gMCkge1xuICAgICAgYWN0aW9uID0gJ2NyZWF0ZWQnO1xuICAgIH0gZWxzZSBpZiAoaG9va0Rpc3Bvc2VkQ291bnQgPiAwKSB7XG4gICAgICBhY3Rpb24gPSAncHJvY2Vzc2VkJztcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0aW9uID0gJ3JlY2VpdmVkJztcbiAgICB9XG5cbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9XG4gICAgICBwYXJ0cy5sZW5ndGggPiAwXG4gICAgICAgID8gYCR7cGFydHMuam9pbignIGFuZCAnKX0gJHtoYXNPckhhdmV9IG5vdCBiZWVuICR7YWN0aW9ufSB5ZXRgXG4gICAgICAgIDogJzAgc3RlcHMgaGF2ZSBub3QgYmVlbiBydW4geWV0JzsgLy8gRGVmYXVsdCBjYXNlIGZvciBlbXB0eSBhcnJheVxuICAgIHN1cGVyKGRlc2NyaXB0aW9uKTtcbiAgICB0aGlzLm5hbWUgPSAnV29ya2Zsb3dTdXNwZW5zaW9uJztcbiAgICB0aGlzLnN0ZXBzID0gc3RlcHM7XG4gICAgdGhpcy5nbG9iYWxUaGlzID0gZ2xvYmFsO1xuICAgIHRoaXMuc3RlcENvdW50ID0gc3RlcENvdW50O1xuICAgIHRoaXMuaG9va0NvdW50ID0gaG9va0NvdW50O1xuICAgIHRoaXMud2FpdENvdW50ID0gd2FpdENvdW50O1xuICAgIHRoaXMuaG9va0Rpc3Bvc2VkQ291bnQgPSBob29rRGlzcG9zZWRDb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBpcyh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFdvcmtmbG93U3VzcGVuc2lvbiB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgV29ya2Zsb3dTdXNwZW5zaW9uO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFTk9UU1VQKCk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3Qgc3VwcG9ydGVkIGluIHdvcmtmbG93IGZ1bmN0aW9ucycpO1xufVxuIl19
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dsb2JhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFpRDVDOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUs7SUFDM0MsS0FBSyxDQUFjO0lBQ25CLFVBQVUsQ0FBb0I7SUFDOUIsU0FBUyxDQUFTO0lBQ2xCLFNBQVMsQ0FBUztJQUNsQixTQUFTLENBQVM7SUFDbEIsY0FBYyxDQUFTO0lBQ3ZCLGlCQUFpQixDQUFTO0lBQzFCLFVBQVUsQ0FBUztJQUVuQixZQUFZLFVBQWtDLEVBQUUsTUFBeUI7UUFDdkUsaURBQWlEO1FBQ2pELE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUV2QyxzQ0FBc0M7UUFDdEMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNO2dCQUFFLFNBQVMsRUFBRSxDQUFDO2lCQUNqQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQzlCLElBQUksSUFBSSxDQUFDLFFBQVE7b0JBQUUsaUJBQWlCLEVBQUUsQ0FBQztxQkFDbEMsSUFBSSxJQUFJLENBQUMsY0FBYztvQkFBRSxV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cmtmbG93UnVudGltZUVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgeyBwbHVyYWxpemUgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBBdHRyaWJ1dGVDaGFuZ2UgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHR5cGUgeyBTZXJpYWxpemFibGUgfSBmcm9tICcuL3NjaGVtYXMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBJbnZvY2F0aW9uUXVldWVJdGVtIHtcbiAgdHlwZTogJ3N0ZXAnO1xuICBjb3JyZWxhdGlvbklkOiBzdHJpbmc7XG4gIHN0ZXBOYW1lOiBzdHJpbmc7XG4gIGFyZ3M6IFNlcmlhbGl6YWJsZVtdO1xuICBjbG9zdXJlVmFycz86IFJlY29yZDxzdHJpbmcsIFNlcmlhbGl6YWJsZT47XG4gIHRoaXNWYWw/OiBTZXJpYWxpemFibGU7XG4gIGhhc0NyZWF0ZWRFdmVudD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9va0ludm9jYXRpb25RdWV1ZUl0ZW0ge1xuICB0eXBlOiAnaG9vayc7XG4gIGNvcnJlbGF0aW9uSWQ6IHN0cmluZztcbiAgdG9rZW46IHN0cmluZztcbiAgbWV0YWRhdGE/OiBTZXJpYWxpemFibGU7XG4gIGhhc0NyZWF0ZWRFdmVudD86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSB3b3JrZmxvdyBpcyBhd2FpdGluZyBgaG9vay5nZXRDb25mbGljdCgpYCBmb3IgdGhpcyBob29rICovXG4gIGhhc0NvbmZsaWN0QXdhaXRlcj86IGJvb2xlYW47XG4gIGRpc3Bvc2VkPzogYm9vbGVhbjtcbiAgaXNXZWJob29rPzogYm9vbGVhbjtcbiAgaXNTeXN0ZW0/OiBib29sZWFuO1xuICBhYm9ydFJlcXVlc3RlZD86IGJvb2xlYW47XG4gIGFib3J0UmVhc29uPzogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXYWl0SW52b2NhdGlvblF1ZXVlSXRlbSB7XG4gIHR5cGU6ICd3YWl0JztcbiAgY29ycmVsYXRpb25JZDogc3RyaW5nO1xuICByZXN1bWVBdDogRGF0ZTtcbiAgaGFzQ3JlYXRlZEV2ZW50PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGVJbnZvY2F0aW9uUXVldWVJdGVtIHtcbiAgdHlwZTogJ2F0dHJpYnV0ZSc7XG4gIGNvcnJlbGF0aW9uSWQ6IHN0cmluZztcbiAgY2hhbmdlczogQXR0cmlidXRlQ2hhbmdlW107XG4gIGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzPzogdHJ1ZTtcbn1cblxuZXhwb3J0IHR5cGUgUXVldWVJdGVtID1cbiAgfCBTdGVwSW52b2NhdGlvblF1ZXVlSXRlbVxuICB8IEhvb2tJbnZvY2F0aW9uUXVldWVJdGVtXG4gIHwgV2FpdEludm9jYXRpb25RdWV1ZUl0ZW1cbiAgfCBBdHRyaWJ1dGVJbnZvY2F0aW9uUXVldWVJdGVtO1xuXG4vKipcbiAqIEFuIGVycm9yIHRoYXQgaXMgdGhyb3duIHdoZW4gb25lIG9yIG1vcmUgb3BlcmF0aW9ucyAoc3RlcHMvaG9va3MvZXRjLikgYXJlIGNhbGxlZCBidXQgZG9cbiAqIG5vdCB5ZXQgaGF2ZSBjb3JyZXNwb25kaW5nIGVudHJpZXMgaW4gdGhlIGV2ZW50IGxvZy4gVGhlIHdvcmtmbG93XG4gKiBkaXNwYXRjaGVyIHdpbGwgY2F0Y2ggdGhpcyBlcnJvciBhbmQgcHVzaCB0aGUgb3BlcmF0aW9uc1xuICogb250byB0aGUgcXVldWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1N1c3BlbnNpb24gZXh0ZW5kcyBFcnJvciB7XG4gIHN0ZXBzOiBRdWV1ZUl0ZW1bXTtcbiAgZ2xvYmFsVGhpczogdHlwZW9mIGdsb2JhbFRoaXM7XG4gIHN0ZXBDb3VudDogbnVtYmVyO1xuICBob29rQ291bnQ6IG51bWJlcjtcbiAgd2FpdENvdW50OiBudW1iZXI7XG4gIGF0dHJpYnV0ZUNvdW50OiBudW1iZXI7XG4gIGhvb2tEaXNwb3NlZENvdW50OiBudW1iZXI7XG4gIGFib3J0Q291bnQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihzdGVwc0lucHV0OiBNYXA8c3RyaW5nLCBRdWV1ZUl0ZW0+LCBnbG9iYWw6IHR5cGVvZiBnbG9iYWxUaGlzKSB7XG4gICAgLy8gQ29udmVydCBNYXAgdG8gYXJyYXkgZm9yIGl0ZXJhdGlvbiBhbmQgc3RvcmFnZVxuICAgIGNvbnN0IHN0ZXBzID0gWy4uLnN0ZXBzSW5wdXQudmFsdWVzKCldO1xuXG4gICAgLy8gU2luZ2xlLXBhc3MgY291bnRpbmcgZm9yIGVmZmljaWVuY3lcbiAgICBsZXQgc3RlcENvdW50ID0gMDtcbiAgICBsZXQgaG9va0NvdW50ID0gMDtcbiAgICBsZXQgd2FpdENvdW50ID0gMDtcbiAgICBsZXQgYXR0cmlidXRlQ291bnQgPSAwO1xuICAgIGxldCBob29rRGlzcG9zZWRDb3VudCA9IDA7XG4gICAgbGV0IGFib3J0Q291bnQgPSAwO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBzdGVwcykge1xuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3N0ZXAnKSBzdGVwQ291bnQrKztcbiAgICAgIGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ2hvb2snKSB7XG4gICAgICAgIGlmIChpdGVtLmRpc3Bvc2VkKSBob29rRGlzcG9zZWRDb3VudCsrO1xuICAgICAgICBlbHNlIGlmIChpdGVtLmFib3J0UmVxdWVzdGVkKSBhYm9ydENvdW50Kys7XG4gICAgICAgIGVsc2UgaG9va0NvdW50Kys7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ3dhaXQnKSB3YWl0Q291bnQrKztcbiAgICAgIGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ2F0dHJpYnV0ZScpIGF0dHJpYnV0ZUNvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgZGVzY3JpcHRpb24gcGFydHNcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoc3RlcENvdW50ID4gMCkge1xuICAgICAgcGFydHMucHVzaChgJHtzdGVwQ291bnR9ICR7cGx1cmFsaXplKCdzdGVwJywgJ3N0ZXBzJywgc3RlcENvdW50KX1gKTtcbiAgICB9XG4gICAgaWYgKGhvb2tDb3VudCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7aG9va0NvdW50fSAke3BsdXJhbGl6ZSgnaG9vaycsICdob29rcycsIGhvb2tDb3VudCl9YCk7XG4gICAgfVxuICAgIGlmICh3YWl0Q291bnQgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke3dhaXRDb3VudH0gJHtwbHVyYWxpemUoJ3dhaXQnLCAnd2FpdHMnLCB3YWl0Q291bnQpfWApO1xuICAgIH1cbiAgICBpZiAoYXR0cmlidXRlQ291bnQgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKFxuICAgICAgICBgJHthdHRyaWJ1dGVDb3VudH0gJHtwbHVyYWxpemUoJ2F0dHJpYnV0ZSB3cml0ZScsICdhdHRyaWJ1dGUgd3JpdGVzJywgYXR0cmlidXRlQ291bnQpfWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChob29rRGlzcG9zZWRDb3VudCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goXG4gICAgICAgIGAke2hvb2tEaXNwb3NlZENvdW50fSBob29rICR7cGx1cmFsaXplKCdkaXNwb3NhbCcsICdkaXNwb3NhbHMnLCBob29rRGlzcG9zZWRDb3VudCl9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBEZXRlcm1pbmUgdmVyYiAoaGFzL2hhdmUpIGFuZCBhY3Rpb24gKHJ1bi9jcmVhdGVkL3JlY2VpdmVkKVxuICAgIGNvbnN0IHRvdGFsQ291bnQgPVxuICAgICAgc3RlcENvdW50ICsgaG9va0NvdW50ICsgd2FpdENvdW50ICsgYXR0cmlidXRlQ291bnQgKyBob29rRGlzcG9zZWRDb3VudDtcbiAgICBjb25zdCBoYXNPckhhdmUgPSBwbHVyYWxpemUoJ2hhcycsICdoYXZlJywgdG90YWxDb3VudCk7XG4gICAgLy8gUGljayBhY3Rpb24gdmVyYjogdXNlIFwicHJvY2Vzc2VkXCIgd2hlbiBtaXhlZCB0eXBlcyBhcmUgcHJlc2VudFxuICAgIGNvbnN0IHR5cGVDb3VudCA9XG4gICAgICAoc3RlcENvdW50ID4gMCA/IDEgOiAwKSArXG4gICAgICAoaG9va0NvdW50ID4gMCA/IDEgOiAwKSArXG4gICAgICAod2FpdENvdW50ID4gMCA/IDEgOiAwKSArXG4gICAgICAoYXR0cmlidXRlQ291bnQgPiAwID8gMSA6IDApICtcbiAgICAgIChob29rRGlzcG9zZWRDb3VudCA+IDAgPyAxIDogMCk7XG4gICAgbGV0IGFjdGlvbjogc3RyaW5nO1xuICAgIGlmICh0eXBlQ291bnQgPiAxKSB7XG4gICAgICBhY3Rpb24gPSAncHJvY2Vzc2VkJztcbiAgICB9IGVsc2UgaWYgKHN0ZXBDb3VudCA+IDApIHtcbiAgICAgIGFjdGlvbiA9ICdydW4nO1xuICAgIH0gZWxzZSBpZiAoaG9va0NvdW50ID4gMCkge1xuICAgICAgYWN0aW9uID0gJ2NyZWF0ZWQnO1xuICAgIH0gZWxzZSBpZiAod2FpdENvdW50ID4gMCkge1xuICAgICAgYWN0aW9uID0gJ2NyZWF0ZWQnO1xuICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlQ291bnQgPiAwKSB7XG4gICAgICBhY3Rpb24gPSAnd3JpdHRlbic7XG4gICAgfSBlbHNlIGlmIChob29rRGlzcG9zZWRDb3VudCA+IDApIHtcbiAgICAgIGFjdGlvbiA9ICdwcm9jZXNzZWQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3Rpb24gPSAncmVjZWl2ZWQnO1xuICAgIH1cblxuICAgIGNvbnN0IGRlc2NyaXB0aW9uID1cbiAgICAgIHBhcnRzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBgJHtwYXJ0cy5qb2luKCcgYW5kICcpfSAke2hhc09ySGF2ZX0gbm90IGJlZW4gJHthY3Rpb259IHlldGBcbiAgICAgICAgOiAnMCBzdGVwcyBoYXZlIG5vdCBiZWVuIHJ1biB5ZXQnOyAvLyBEZWZhdWx0IGNhc2UgZm9yIGVtcHR5IGFycmF5XG4gICAgc3VwZXIoZGVzY3JpcHRpb24pO1xuICAgIHRoaXMubmFtZSA9ICdXb3JrZmxvd1N1c3BlbnNpb24nO1xuICAgIHRoaXMuc3RlcHMgPSBzdGVwcztcbiAgICB0aGlzLmdsb2JhbFRoaXMgPSBnbG9iYWw7XG4gICAgdGhpcy5zdGVwQ291bnQgPSBzdGVwQ291bnQ7XG4gICAgdGhpcy5ob29rQ291bnQgPSBob29rQ291bnQ7XG4gICAgdGhpcy53YWl0Q291bnQgPSB3YWl0Q291bnQ7XG4gICAgdGhpcy5hdHRyaWJ1dGVDb3VudCA9IGF0dHJpYnV0ZUNvdW50O1xuICAgIHRoaXMuaG9va0Rpc3Bvc2VkQ291bnQgPSBob29rRGlzcG9zZWRDb3VudDtcbiAgICB0aGlzLmFib3J0Q291bnQgPSBhYm9ydENvdW50O1xuICB9XG5cbiAgc3RhdGljIGlzKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgV29ya2Zsb3dTdXNwZW5zaW9uIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBXb3JrZmxvd1N1c3BlbnNpb247XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVOT1RTVVAoKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgJ1RoaXMgQVBJIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIGEgd29ya2Zsb3cgZnVuY3Rpb24uIFdvcmtmbG93IGZ1bmN0aW9ucyBydW4gaW4gYSBkZXRlcm1pbmlzdGljIFZNOyBtb3ZlIHRoZSBjYWxsIHRvIGEgc3RlcCBmdW5jdGlvbiBmb3IgZnVsbCBOb2RlLmpzIGFjY2Vzcy4nXG4gICk7XG59XG4iXX0=
|
package/dist/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
export { FatalError, RetryableError, type RetryableErrorOptions, } from '@workflow/errors';
|
|
13
13
|
export { createHook, createWebhook, type Hook, type HookOptions, type RequestWithResponse, type Webhook, type WebhookOptions, } from './create-hook.js';
|
|
14
14
|
export { defineHook, type TypedHook } from './define-hook.js';
|
|
15
|
+
export { experimental_setAttributes } from './set-attributes.js';
|
|
15
16
|
export { sleep } from './sleep.js';
|
|
16
17
|
export { getStepMetadata, type StepMetadata, } from './step/get-step-metadata.js';
|
|
17
18
|
export { getWorkflowMetadata, type WorkflowMetadata, } from './step/get-workflow-metadata.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,UAAU,EACV,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,aAAa,EACb,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,WAAW,EACX,KAAK,6BAA6B,GACnC,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,UAAU,EACV,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,aAAa,EACb,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,WAAW,EACX,KAAK,6BAA6B,GACnC,MAAM,2BAA2B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
export { FatalError, RetryableError, } from '@workflow/errors';
|
|
13
13
|
export { createHook, createWebhook, } from './create-hook.js';
|
|
14
14
|
export { defineHook } from './define-hook.js';
|
|
15
|
+
export { experimental_setAttributes } from './set-attributes.js';
|
|
15
16
|
export { sleep } from './sleep.js';
|
|
16
17
|
export { getStepMetadata, } from './step/get-step-metadata.js';
|
|
17
18
|
export { getWorkflowMetadata, } from './step/get-workflow-metadata.js';
|
|
18
19
|
export { getWritable, } from './step/writable-stream.js';
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFDTCxVQUFVLEVBQ1YsY0FBYyxHQUVmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLFVBQVUsRUFDVixhQUFhLEdBTWQsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUNMLGVBQWUsR0FFaEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsbUJBQW1CLEdBRXBCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUNMLFdBQVcsR0FFWixNQUFNLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBKdXN0IHRoZSBjb3JlIHV0aWxpdGllcyB0aGF0IGFyZSBtZWFudCB0byBiZSBpbXBvcnRlZCBieSB1c2VyXG4gKiBzdGVwcy93b3JrZmxvd3MuIFRoaXMgYWxsb3dzIHRoZSBidW5kbGVyIHRvIHRyZWUtc2hha2UgYW5kIGxpbWl0IHdoYXQgZ29lc1xuICogaW50byB0aGUgZmluYWwgdXNlciBidW5kbGVzLiBMb2dpYyBmb3IgcnVubmluZy9oYW5kbGluZyBzdGVwcy93b3JrZmxvd3NcbiAqIHNob3VsZCBsaXZlIGluIHJ1bnRpbWUuIEV2ZW50dWFsbHkgdGhlc2UgbWlnaHQgYmUgc2VwYXJhdGUgcGFja2FnZXNcbiAqIGB3b3JrZmxvd2AgYW5kIGB3b3JrZmxvdy9ydW50aW1lYD9cbiAqXG4gKiBFdmVyeXRoaW5nIGhlcmUgd2lsbCBnZXQgcmUtZXhwb3J0ZWQgdW5kZXIgdGhlICd3b3JrZmxvdycgdG9wIGxldmVsIHBhY2thZ2UuXG4gKiBUaGlzIHNob3VsZCBiZSBhIG1pbmltYWwgc2V0IG9mIEFQSXMgc28gKipkbyBub3QgYW55dGhpbmcgaGVyZSoqIHVubGVzcyBpdCdzXG4gKiBuZWVkZWQgZm9yIHVzZXJsYW5kIHdvcmtmbG93IGNvZGUuXG4gKi9cblxuZXhwb3J0IHtcbiAgRmF0YWxFcnJvcixcbiAgUmV0cnlhYmxlRXJyb3IsXG4gIHR5cGUgUmV0cnlhYmxlRXJyb3JPcHRpb25zLFxufSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmV4cG9ydCB7XG4gIGNyZWF0ZUhvb2ssXG4gIGNyZWF0ZVdlYmhvb2ssXG4gIHR5cGUgSG9vayxcbiAgdHlwZSBIb29rT3B0aW9ucyxcbiAgdHlwZSBSZXF1ZXN0V2l0aFJlc3BvbnNlLFxuICB0eXBlIFdlYmhvb2ssXG4gIHR5cGUgV2ViaG9va09wdGlvbnMsXG59IGZyb20gJy4vY3JlYXRlLWhvb2suanMnO1xuZXhwb3J0IHsgZGVmaW5lSG9vaywgdHlwZSBUeXBlZEhvb2sgfSBmcm9tICcuL2RlZmluZS1ob29rLmpzJztcbmV4cG9ydCB7IGV4cGVyaW1lbnRhbF9zZXRBdHRyaWJ1dGVzIH0gZnJvbSAnLi9zZXQtYXR0cmlidXRlcy5qcyc7XG5leHBvcnQgeyBzbGVlcCB9IGZyb20gJy4vc2xlZXAuanMnO1xuZXhwb3J0IHtcbiAgZ2V0U3RlcE1ldGFkYXRhLFxuICB0eXBlIFN0ZXBNZXRhZGF0YSxcbn0gZnJvbSAnLi9zdGVwL2dldC1zdGVwLW1ldGFkYXRhLmpzJztcbmV4cG9ydCB7XG4gIGdldFdvcmtmbG93TWV0YWRhdGEsXG4gIHR5cGUgV29ya2Zsb3dNZXRhZGF0YSxcbn0gZnJvbSAnLi9zdGVwL2dldC13b3JrZmxvdy1tZXRhZGF0YS5qcyc7XG5leHBvcnQge1xuICBnZXRXcml0YWJsZSxcbiAgdHlwZSBXb3JrZmxvd1dyaXRhYmxlU3RyZWFtT3B0aW9ucyxcbn0gZnJvbSAnLi9zdGVwL3dyaXRhYmxlLXN0cmVhbS5qcyc7XG4iXX0=
|