@workflow/core 5.0.0-beta.36 → 5.0.0-beta.38
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/capabilities.d.ts +6 -0
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +13 -1
- package/dist/encryption.d.ts +15 -2
- package/dist/encryption.d.ts.map +1 -1
- package/dist/encryption.js +28 -7
- package/dist/flushable-stream.d.ts +26 -0
- package/dist/flushable-stream.d.ts.map +1 -1
- package/dist/flushable-stream.js +63 -187
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/log-format.js +3 -3
- package/dist/private.d.ts +96 -37
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +215 -28
- package/dist/replay-payload-cache.d.ts +3 -2
- package/dist/replay-payload-cache.d.ts.map +1 -1
- package/dist/replay-payload-cache.js +8 -2
- package/dist/runtime/count-step-started-events.d.ts +52 -0
- package/dist/runtime/count-step-started-events.d.ts.map +1 -0
- package/dist/runtime/count-step-started-events.js +72 -0
- package/dist/runtime/helpers.d.ts +41 -12
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +75 -22
- package/dist/runtime/resume-hook.d.ts +2 -2
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +174 -55
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +3 -3
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +5 -3
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +65 -18
- package/dist/runtime/step-executor.d.ts +9 -8
- package/dist/runtime/step-executor.d.ts.map +1 -1
- package/dist/runtime/step-executor.js +17 -17
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +2 -3
- package/dist/runtime/world.d.ts +12 -12
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +130 -30
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +74 -122
- package/dist/sealed-box.d.ts +167 -0
- package/dist/sealed-box.d.ts.map +1 -0
- package/dist/sealed-box.js +571 -0
- package/dist/serialization/client.d.ts +3 -3
- package/dist/serialization/client.d.ts.map +1 -1
- package/dist/serialization/client.js +1 -1
- package/dist/serialization/codec.d.ts +6 -4
- package/dist/serialization/codec.d.ts.map +1 -1
- package/dist/serialization/codec.js +1 -1
- package/dist/serialization/encryption.d.ts +118 -17
- package/dist/serialization/encryption.d.ts.map +1 -1
- package/dist/serialization/encryption.js +131 -15
- package/dist/serialization/step.d.ts +4 -4
- package/dist/serialization/step.d.ts.map +1 -1
- package/dist/serialization/step.js +2 -2
- package/dist/serialization/types.d.ts +20 -0
- package/dist/serialization/types.d.ts.map +1 -1
- package/dist/serialization/types.js +11 -1
- package/dist/serialization-format.d.ts +44 -4
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +66 -9
- package/dist/serialization.d.ts +21 -21
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +497 -175
- package/dist/set-attributes.d.ts +2 -7
- package/dist/set-attributes.d.ts.map +1 -1
- package/dist/set-attributes.js +1 -6
- package/dist/step/context-storage.d.ts +2 -2
- package/dist/step/context-storage.d.ts.map +1 -1
- package/dist/step/context-storage.js +2 -2
- package/dist/step/writable-stream.d.ts.map +1 -1
- package/dist/step/writable-stream.js +14 -3
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +79 -8
- package/dist/symbols.d.ts +23 -10
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +24 -11
- package/dist/telemetry/semantic-conventions.d.ts +2 -2
- package/dist/telemetry/semantic-conventions.js +2 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/index.d.ts.map +1 -1
- package/dist/vm/index.js +76 -9
- package/dist/workflow/abort-controller.d.ts +1 -1
- package/dist/workflow/abort-controller.d.ts.map +1 -1
- package/dist/workflow/abort-controller.js +36 -2
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +64 -24
- package/dist/workflow/index.d.ts +1 -1
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +2 -2
- package/dist/workflow/set-attributes.d.ts +0 -9
- package/dist/workflow/set-attributes.d.ts.map +1 -1
- package/dist/workflow/set-attributes.js +1 -6
- package/dist/workflow/sleep.d.ts.map +1 -1
- package/dist/workflow/sleep.js +21 -9
- package/dist/workflow.d.ts +2 -2
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +22 -83
- package/docs/api-reference/set-attributes.mdx +0 -4
- package/docs/how-it-works/cancellation.mdx +2 -2
- package/docs/how-it-works/code-transform.mdx +19 -15
- package/docs/how-it-works/framework-integrations.mdx +95 -341
- package/package.json +6 -11
- package/dist/runtime/step-handler.d.ts +0 -2
- package/dist/runtime/step-handler.d.ts.map +0 -1
- package/dist/runtime/step-handler.js +0 -839
- package/dist/runtime/world-target.d.ts +0 -11
- package/dist/runtime/world-target.d.ts.map +0 -1
- package/dist/runtime/world-target.js +0 -15
package/dist/log-format.js
CHANGED
|
@@ -39,7 +39,7 @@ function renderStructuredFields(framing, metadata) {
|
|
|
39
39
|
if (!metadata || Object.keys(metadata).length === 0)
|
|
40
40
|
return null;
|
|
41
41
|
// Drop fields that the message already encodes. We render framings and
|
|
42
|
-
// stacks into the message string itself in step
|
|
42
|
+
// stacks into the message string itself in step executor / combined runtime, so
|
|
43
43
|
// repeating them here would be pure noise.
|
|
44
44
|
const redundant = new Set();
|
|
45
45
|
redundant.add('errorStack');
|
|
@@ -126,7 +126,7 @@ function renderStructuredFields(framing, metadata) {
|
|
|
126
126
|
*
|
|
127
127
|
* Name: message
|
|
128
128
|
* at userStep (./workflows/foo.ts:12:11)
|
|
129
|
-
* at <unknown> (../../packages/core/src/runtime/step-
|
|
129
|
+
* at <unknown> (../../packages/core/src/runtime/step-executor.ts:535:32)
|
|
130
130
|
* at <unknown> (.../node_modules/.pnpm/next@…/…/base-server.js:1454:9)
|
|
131
131
|
* at <unknown> (.../node_modules/.pnpm/@opentelemetry+api@…/…/api.js:5440)
|
|
132
132
|
* at … (15 more frames into Next.js / pnpm internals)
|
|
@@ -247,4 +247,4 @@ function formatPassthroughValue(v) {
|
|
|
247
247
|
return String(v);
|
|
248
248
|
}
|
|
249
249
|
}
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWZvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2ctZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBYyxFQUNkLE9BQWUsRUFDZixRQUE2QztJQUU3QyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0QsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXhDLE1BQU0sS0FBSyxHQUFhLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkQsSUFBSSxNQUFNO1FBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixJQUFJLFdBQVc7UUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FDN0IsT0FBZSxFQUNmLFFBQTZDO0lBRTdDLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FB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QUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDO2lCQUNMLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEFuc2kgZnJvbSAnQHdvcmtmbG93L2Vycm9ycy9hbnNpJztcbmltcG9ydCB7XG4gIGZvcm1hdFN0ZXBOYW1lLFxuICBmb3JtYXRXb3JrZmxvd05hbWUsXG4gIHBhcnNlU3RlcE5hbWUsXG4gIHBhcnNlV29ya2Zsb3dOYW1lLFxufSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuXG4vKipcbiAqIFN0cnVjdHVyZWQtbG9nIGNvbXBvc2l0aW9uIGZvciBgY29uc29sZS5lcnJvcmAgLyBgY29uc29sZS53YXJuYC4gRW1pdHNcbiAqIG9uZSBzdHJpbmcgaW4gdGhyZWUgc2VjdGlvbnMgc28gdGhlIG1vc3QgdXNlZnVsIGluZm9ybWF0aW9uIGlzIGF0IHRoZVxuICogdG9wLCBzdGFjayB0cmFjZSBhdCB0aGUgYm90dG9tOlxuICpcbiAqICAgICBbd29ya2Zsb3ctc2RrXSA8ZnJhbWluZyBsaW5lPlxuICogICAgICAgdXNlciBlcnJvciDCtyBGYXRhbEVycm9yXG4gKiAgICAgICBydW4gICAgd3J1bl/igKZcbiAqICAgICAgIHN0ZXAgICBzdGVwX+KApiDCtyBhZGQgKC4vd29ya2Zsb3dzL3gpXG4gKiAgICAgICBoaW50OiAgTW92ZSB0aGUgY2FsbCB0byBhIHN0ZXAgZnVuY3Rpb24uXG4gKiAgICAgRmF0YWxFcnJvcjog4oCmXG4gKiAgICAgICAgIGF0IOKApiAodHJpbW1lZCBzdGFjayDigJQgaW50ZXJuYWxzIGNvbGxhcHNlZClcbiAqXG4gKiBXaXRob3V0IHRoaXMgY29tcG9zaXRpb24sIGNhbGxlcnMgcGFzc2luZyBgJHtmcmFtaW5nfVxcbiR7c3RhY2t9YCBhcyB0aGVcbiAqIG1lc3NhZ2UgYW5kIHN0cnVjdHVyZWQgZmllbGRzIGFzIHRoZSBtZXRhZGF0YSBvYmplY3QgZ290IGB1dGlsLmluc3BlY3RgJ3NcbiAqIGRlZmF1bHQgb2JqZWN0IGR1bXAgYXBwZW5kZWQgKmFmdGVyKiB0aGUgc3RhY2ssIHdoaWNoIGJ1cmllcyB0aGUgcnVuIElEXG4gKiBhbmQgYXR0cmlidXRpb24gYmFkZ2UgdW5kZXIgMzArIGxpbmVzIG9mIGBub2RlX21vZHVsZXMvLnBucG0vLi4uYCBmcmFtZXMuXG4gKlxuICogVGhlIHNhbWUgbWV0YWRhdGEgaXMgYWxzbyBlbWl0dGVkIGFzIHN0cnVjdHVyZWQgT1RlbCBzcGFuIGV2ZW50cyBmcm9tXG4gKiB0aGUgbG9nZ2VyIGl0c2VsZiwgc28gYmFja2VuZHMgdGhhdCB3YW50IEpTT04tc2hhcGVkIGRhdGEgc3RpbGwgZ2V0IGl0LlxuICogd2ViL3dlYi1zaGFyZWQgZG8gbm90IGNvbnN1bWUgc3RkZXJyIGF0IGFsbCDigJQgdGhleSByZWFkIENCT1IvSlNPTiBldmVudFxuICogcGF5bG9hZHMgZnJvbSB0aGUgV29ybGQgZXZlbnQgbG9nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZUxvZ0xpbmUoXG4gIHByZWZpeDogc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcbiAgY29uc3QgW2ZyYW1pbmcsIC4uLnJlc3RdID0gbWVzc2FnZS5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IGJvZHkgPSByZXN0LmpvaW4oJ1xcbicpO1xuICBjb25zdCBmaWVsZHMgPSByZW5kZXJTdHJ1Y3R1cmVkRmllbGRzKGZyYW1pbmcgPz8gJycsIG1ldGFkYXRhKTtcbiAgY29uc3QgdHJpbW1lZEJvZHkgPSB0cmltU3RhY2tCb2R5KGJvZHkpO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtgJHtwcmVmaXh9ICR7ZnJhbWluZyA/PyAnJ31gXTtcbiAgaWYgKGZpZWxkcykgbGluZXMucHVzaChmaWVsZHMpO1xuICBpZiAodHJpbW1lZEJvZHkpIGxpbmVzLnB1c2godHJpbW1lZEJvZHkpO1xuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN0cnVjdHVyZWRGaWVsZHMoXG4gIGZyYW1pbmc6IHN0cmluZyxcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFtZXRhZGF0YSB8fCBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAvLyBEcm9wIGZpZWxkcyB0aGF0IHRoZSBtZXNzYWdlIGFscmVhZHkgZW5jb2Rlcy4gV2UgcmVuZGVyIGZyYW1pbmdzIGFuZFxuICAvLyBzdGFja3MgaW50byB0aGUgbWVzc2FnZSBzdHJpbmcgaXRzZWxmIGluIHN0ZXAtaGFuZGxlciAvIHJ1bnRpbWUsIHNvXG4gIC8vIHJlcGVhdGluZyB0aGVtIGhlcmUgd291bGQgYmUgcHVyZSBub2lzZS5cbiAgY29uc3QgcmVkdW5kYW50ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHJlZHVuZGFudC5hZGQoJ2Vycm9yU3RhY2snKTtcbiAgaWYgKFxuICAgIHR5cGVvZiBtZXRhZGF0YS5lcnJvck1lc3NhZ2UgPT09ICdzdHJpbmcnICYmXG4gICAgZnJhbWluZy5pbmNsdWRlcyhtZXRhZGF0YS5lcnJvck1lc3NhZ2UgYXMgc3RyaW5nKVxuICApIHtcbiAgICByZWR1bmRhbnQuYWRkKCdlcnJvck1lc3NhZ2UnKTtcbiAgfVxuXG4gIGNvbnN0IHdlbGxLbm93biA9IG5ldyBTZXQoW1xuICAgICd3b3JrZmxvd1J1bklkJyxcbiAgICAnd29ya2Zsb3dOYW1lJyxcbiAgICAnc3RlcElkJyxcbiAgICAnc3RlcE5hbWUnLFxuICAgICdlcnJvckF0dHJpYnV0aW9uJyxcbiAgICAnZXJyb3JDb2RlJyxcbiAgICAnZXJyb3JOYW1lJyxcbiAgICAnZXJyb3JNZXNzYWdlJyxcbiAgICAnZXJyb3JTdGFjaycsXG4gICAgJ2hpbnQnLFxuICAgICdhdHRlbXB0JyxcbiAgICAncmV0cnlDb3VudCcsXG4gIF0pO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIEhlYWRlcjogZXJyb3IgY2xhc3MgKyBhdHRyaWJ1dGlvbiBiYWRnZS5cbiAgY29uc3QgZXJyb3JOYW1lID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2Vycm9yTmFtZScpO1xuICBjb25zdCBhdHRyaWJ1dGlvbiA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdlcnJvckF0dHJpYnV0aW9uJyk7XG4gIGlmIChlcnJvck5hbWUgfHwgYXR0cmlidXRpb24pIHtcbiAgICBjb25zdCBiYWRnZSA9IGF0dHJpYnV0aW9uXG4gICAgICA/IGF0dHJpYnV0aW9uID09PSAnc2RrJ1xuICAgICAgICA/IEFuc2kubWFnZW50YSgnc2RrIGVycm9yJylcbiAgICAgICAgOiBBbnNpLnJlZCgndXNlciBlcnJvcicpXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGNscyA9IGVycm9yTmFtZSA/IEFuc2kuYm9sZChlcnJvck5hbWUpIDogJyc7XG4gICAgY29uc3Qgc2VwID0gYmFkZ2UgJiYgY2xzID8gQW5zaS5kaW0oJyDCtyAnKSA6ICcnO1xuICAgIGxpbmVzLnB1c2goYCAgJHtiYWRnZX0ke3NlcH0ke2Nsc31gKTtcbiAgfVxuXG4gIC8vIElEICsgcGFyc2VkIGZyaWVuZGx5LW5hbWUgcm93cy5cbiAgY29uc3QgcnVuSWQgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnd29ya2Zsb3dSdW5JZCcpO1xuICBjb25zdCB3Zk5hbWUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnd29ya2Zsb3dOYW1lJyk7XG4gIGlmIChydW5JZCkge1xuICAgIGxpbmVzLnB1c2goZm9ybWF0SWRSb3coJ3J1bicsIHJ1bklkLCB3Zk5hbWUsIGZvcm1hdFdvcmtmbG93TmFtZSkpO1xuICB9IGVsc2UgaWYgKHdmTmFtZSkge1xuICAgIGxpbmVzLnB1c2goZm9ybWF0SWRSb3coJ3J1bicsIG51bGwsIHdmTmFtZSwgZm9ybWF0V29ya2Zsb3dOYW1lKSk7XG4gIH1cblxuICBjb25zdCBzdGVwSWQgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnc3RlcElkJyk7XG4gIGNvbnN0IHN0ZXBOYW1lID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ3N0ZXBOYW1lJyk7XG4gIGlmIChzdGVwSWQgfHwgc3RlcE5hbWUpIHtcbiAgICBsaW5lcy5wdXNoKGZvcm1hdElkUm93KCdzdGVwJywgc3RlcElkLCBzdGVwTmFtZSwgZm9ybWF0U3RlcE5hbWUpKTtcbiAgfVxuXG4gIGlmIChtZXRhZGF0YS5hdHRlbXB0ICE9PSB1bmRlZmluZWQgfHwgbWV0YWRhdGEucmV0cnlDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gYGF0dGVtcHRgIGFuZCBgcmV0cnlDb3VudGAgcmVhZCBhbWJpZ3VvdXNseSBuZXh0IHRvIGVhY2ggb3RoZXIgKGlzXG4gICAgLy8gXCIzIHJldHJpZXNcIiB0aGUgbGltaXQgb3Igd2hhdCBhbHJlYWR5IGhhcHBlbmVkPykuIFJlbmRlciB0aGUgbGltaXRcbiAgICAvLyBhcyBcIm1heCByZXRyaWVzXCIgdG8gbWFrZSB0aGUgYm91bmRhcnkgZXhwbGljaXQsIGFuZCBrZWVwIGBhdHRlbXB0YFxuICAgIC8vIGFzIHRoZSBjb3VudCBvZiB0b3RhbCBpbnZvY2F0aW9ucyBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsLlxuICAgIGNvbnN0IGEgPSBtZXRhZGF0YS5hdHRlbXB0O1xuICAgIGNvbnN0IHIgPSBtZXRhZGF0YS5yZXRyeUNvdW50O1xuICAgIGlmIChhICE9PSB1bmRlZmluZWQgJiYgciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKFxuICAgICAgICBgICAke2t2S2V5KCdyZXRyeScpfSAke2F9ICR7QW5zaS5kaW0oJ2F0dGVtcHRzIMK3Jyl9ICR7cn0gJHtBbnNpLmRpbSgnbWF4IHJldHJpZXMnKX1gXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoJ3JldHJ5Jyl9ICR7YX0gJHtBbnNpLmRpbSgnYXR0ZW1wdHMnKX1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBlcnJvckNvZGUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnZXJyb3JDb2RlJyk7XG4gIGlmIChlcnJvckNvZGUgJiYgZXJyb3JDb2RlICE9PSBlcnJvck5hbWUpIHtcbiAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoJ2NvZGUnKX0gJHtBbnNpLmRpbShlcnJvckNvZGUpfWApO1xuICB9XG5cbiAgY29uc3QgaGludCA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdoaW50Jyk7XG4gIGlmIChoaW50KSB7XG4gICAgbGluZXMucHVzaChgICAke0Fuc2kuaGludChoaW50KX1gKTtcbiAgfVxuXG4gIC8vIFNvcnRlZCBwYXNzLXRocm91Z2ggZm9yIHVua25vd24gZmllbGRzLlxuICBjb25zdCBwYXNzVGhyb3VnaCA9IE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKVxuICAgIC5maWx0ZXIoXG4gICAgICAoW2ssIHZdKSA9PlxuICAgICAgICAhd2VsbEtub3duLmhhcyhrKSAmJiAhcmVkdW5kYW50LmhhcyhrKSAmJiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbFxuICAgIClcbiAgICAuc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIHBhc3NUaHJvdWdoKSB7XG4gICAgbGluZXMucHVzaChgICAke2t2S2V5KGspfSAke2Zvcm1hdFBhc3N0aHJvdWdoVmFsdWUodil9YCk7XG4gIH1cblxuICByZXR1cm4gbGluZXMubGVuZ3RoID8gbGluZXMuam9pbignXFxuJykgOiBudWxsO1xufVxuXG4vKipcbiAqIFN0cmlwIHRoZSBzdGFjayBkb3duIHRvIGZyYW1lcyB0aGUgdXNlciBjYW4gYWN0IG9uLiBWOCBzdGFja3MgZm9yIG91clxuICogcnVudGltZSBlcnJvcnMgbG9vayBsaWtlOlxuICpcbiAqICAgICBOYW1lOiBtZXNzYWdlXG4gKiAgICAgICAgIGF0IHVzZXJTdGVwICguL3dvcmtmbG93cy9mb28udHM6MTI6MTEpXG4gKiAgICAgICAgIGF0IDx1bmtub3duPiAoLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcnVudGltZS9zdGVwLWhhbmRsZXIudHM6NTM1OjMyKVxuICogICAgICAgICBhdCA8dW5rbm93bj4gKC4uLi9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEDigKYv4oCmL2Jhc2Utc2VydmVyLmpzOjE0NTQ6OSlcbiAqICAgICAgICAgYXQgPHVua25vd24+ICguLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvcGVudGVsZW1ldHJ5K2FwaUDigKYv4oCmL2FwaS5qczo1NDQwKVxuICogICAgICAgICBhdCDigKYgKDE1IG1vcmUgZnJhbWVzIGludG8gTmV4dC5qcyAvIHBucG0gaW50ZXJuYWxzKVxuICpcbiAqIFR3by1wYXNzIHRyaW06XG4gKlxuICogICAxLiBEcm9wIGZyYW1ld29yay1pbnRlcm5hbCBmcmFtZXMgKGBub2RlX21vZHVsZXMvLnBucG0vYCwgYG5vZGU6aW50ZXJuYWwvYCxcbiAqICAgICAgVHVyYm9wYWNrLWJ1bmRsZWQgYG5vZGVfbW9kdWxlc19fcG5wbV8qYCAvIGBfbmV4dF9kaXN0XypgIGNodW5rcykuXG4gKiAgIDIuIENhcCB0aGUgc3Vydml2aW5nIGZyYW1lcyBhdCBgTUFYX1ZJU0lCTEVfRlJBTUVTYCDigJQgcGFzdCB0aGF0LCBldmVuXG4gKiAgICAgIFwidXNlci1pc2hcIiBmcmFtZXMgYXJlIHVzdWFsbHkgZGVlcCBhc3luYyB3cmFwcGluZyB0aGF0IGRvZXNuJ3QgaGVscFxuICogICAgICBwaW5wb2ludCB0aGUgdGhyb3cuIFRoZSB1c2VyIGNhbiBkcm9wIGludG8gdGhlIGluc3BlY3QgQ0xJIGZvciB0aGVcbiAqICAgICAgZnVsbCBzdGFjayBvbiBkZW1hbmQuXG4gKlxuICogRWFjaCBzdXBwcmVzc2VkIHJ1biBlbWl0cyBvbmUgc3VtbWFyeSBsaW5lIHNvIHBlb3BsZSBrbm93IGhvdyBtdWNoIHdhc1xuICogdHJpbW1lZC5cbiAqL1xuY29uc3QgTUFYX1ZJU0lCTEVfRlJBTUVTID0gNjtcblxuZnVuY3Rpb24gdHJpbVN0YWNrQm9keShib2R5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFib2R5KSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbGluZXMgPSBib2R5LnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgZHJvcHBlZFJ1biA9IDA7XG4gIGxldCB2aXNpYmxlRnJhbWVDb3VudCA9IDA7XG4gIGxldCBjYXBwZWRGcmFtZXMgPSAwO1xuXG4gIGNvbnN0IGZsdXNoRHJvcHBlZCA9ICgpID0+IHtcbiAgICBpZiAoZHJvcHBlZFJ1biA+IDApIHtcbiAgICAgIG91dC5wdXNoKFxuICAgICAgICBBbnNpLmRpbShcbiAgICAgICAgICBgICAgICAgICDigKYgJHtkcm9wcGVkUnVufSBtb3JlICR7ZHJvcHBlZFJ1biA9PT0gMSA/ICdmcmFtZScgOiAnZnJhbWVzJ30gaW4gZnJhbWV3b3JrIGludGVybmFsc2BcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGRyb3BwZWRSdW4gPSAwO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICBjb25zdCBpc0ZyYW1lID0gbGluZS50cmltU3RhcnQoKS5zdGFydHNXaXRoKCdhdCAnKTtcbiAgICBpZiAoaXNGcmFtZSAmJiBpc0ZyYW1ld29ya0ZyYW1lKGxpbmUpKSB7XG4gICAgICBkcm9wcGVkUnVuKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGlzRnJhbWUgJiYgdmlzaWJsZUZyYW1lQ291bnQgPj0gTUFYX1ZJU0lCTEVfRlJBTUVTKSB7XG4gICAgICBjYXBwZWRGcmFtZXMrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmbHVzaERyb3BwZWQoKTtcbiAgICBvdXQucHVzaChsaW5lKTtcbiAgICBpZiAoaXNGcmFtZSkgdmlzaWJsZUZyYW1lQ291bnQrKztcbiAgfVxuICBmbHVzaERyb3BwZWQoKTtcbiAgaWYgKGNhcHBlZEZyYW1lcyA+IDApIHtcbiAgICBvdXQucHVzaChcbiAgICAgIEFuc2kuZGltKFxuICAgICAgICBgICAgICAgICDigKYgJHtjYXBwZWRGcmFtZXN9IG1vcmUgJHtjYXBwZWRGcmFtZXMgPT09IDEgPyAnZnJhbWUnIDogJ2ZyYW1lcyd9IChydW4gXFxgcG5wbSB3ZiBpbnNwZWN0IHJ1biA8aWQ+XFxgIGZvciB0aGUgZnVsbCBzdGFjaylgXG4gICAgICApXG4gICAgKTtcbiAgfVxuICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBpc0ZyYW1ld29ya0ZyYW1lKGxpbmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBPbmx5IGF0LWZyYW1lcyBhcmUgY2FuZGlkYXRlcyBmb3Igc3RyaXBwaW5nLiBIZWFkZXIgbGluZXMgKGBOYW1lOiDigKZgKVxuICAvLyBhbmQgYXJiaXRyYXJ5IHRyYWlsaW5nIGNvbnRleHQgKGUuZy4gYGNvZGU6ICdVU0VSX0VSUk9SJ2ApIHBhc3MgdGhyb3VnaC5cbiAgY29uc3QgdHJpbW1lZCA9IGxpbmUudHJpbVN0YXJ0KCk7XG4gIGlmICghdHJpbW1lZC5zdGFydHNXaXRoKCdhdCAnKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBub2RlOiogaW50ZXJuYWxzICh0aW1lcnMsIGFzeW5jIGhvb2tzLCB2bSwgZXRjLikgbmV2ZXIgaGVscCB1c2Vycy5cbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJ25vZGU6aW50ZXJuYWwvJykpIHJldHVybiB0cnVlO1xuICAvLyBwbnBtLXJvb3RlZCBmcmFtZXdvcmtzIGluc3RhbGxlZCBhcyBub2RlX21vZHVsZXMgZGVwZW5kZW5jaWVzLlxuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzLy5wbnBtLycpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVHVyYm9wYWNrL05leHQgYnVuZGxlIHRoZSBzYW1lIGZyYW1ld29yayBjb2RlIGludG8gY2h1bmtzIGxpa2VcbiAgLy8gYG5vZGVfbW9kdWxlc19fcG5wbV88aGFzaD4uXy5qc2AgYW5kIGA8Li4uPl9uZXh0X2Rpc3RfPGhhc2g+Ll8uanNgLFxuICAvLyBhbmQgZW1pdHMgTmV4dC5qcyBsb2FkZXIgcnVudGltZSBhcyBgMGR4Nl9uZXh0X2Rpc3RfPGhhc2g+Ll8uanNgLlxuICAvLyBUaGVzZSBhcmUgdGhlIGZyYW1lcyB0aGF0IHNob3cgdXAgYWZ0ZXIgVHVyYm9wYWNrIERDRSDigJQgc2FtZSBpbnRlbnRcbiAgLy8gYXMgdGhlIHJhdyBgbm9kZV9tb2R1bGVzLy5wbnBtL2AgZmlsdGVyIGFib3ZlLlxuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzX19wbnBtXycpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJ19uZXh0X2Rpc3RfJykpIHJldHVybiB0cnVlO1xuICAvLyBQbGFpbiBub2RlX21vZHVsZXMgKG5vbi1wbnBtIHNldHVwcykgZm9yIHRoZSBzYW1lIGtpbmRzIG9mIGZyYW1ld29ya3MuXG4gIGlmIChcbiAgICB0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvbmV4dC8nKSB8fFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS8nKSB8fFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy92aXRlc3QvJykgfHxcbiAgICB0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvQHZpdGVzdC8nKVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBpY2tTdHJpbmcoXG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAga2V5OiBzdHJpbmdcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB2ID0gbWV0YWRhdGFba2V5XTtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA+IDAgPyB2IDogbnVsbDtcbn1cblxuZnVuY3Rpb24ga3ZLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gQW5zaS5kaW0oa2V5LnBhZEVuZCg2KSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdElkUm93KFxuICBsYWJlbDogc3RyaW5nLFxuICBpZDogc3RyaW5nIHwgbnVsbCxcbiAgbmFtZTogc3RyaW5nIHwgbnVsbCxcbiAgZm9ybWF0TmFtZTogKG46IHN0cmluZykgPT4gc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBpZENlbGwgPSBpZCA/IGlkIDogQW5zaS5kaW0oJ+KAlCcpO1xuICBjb25zdCBwYXJzZWQgPSBuYW1lXG4gICAgPyBsYWJlbCA9PT0gJ3J1bidcbiAgICAgID8gcGFyc2VXb3JrZmxvd05hbWUobmFtZSlcbiAgICAgIDogcGFyc2VTdGVwTmFtZShuYW1lKVxuICAgIDogbnVsbDtcbiAgY29uc3QgbmFtZUNlbGwgPSBwYXJzZWRcbiAgICA/IGAke0Fuc2kuZGltKCfCtycpfSAke2Zvcm1hdE5hbWUobmFtZSBhcyBzdHJpbmcpfWBcbiAgICA6ICcnO1xuICByZXR1cm4gYCAgJHtrdktleShsYWJlbCl9ICR7aWRDZWxsfSR7bmFtZUNlbGwgPyAnICcgKyBuYW1lQ2VsbCA6ICcnfWA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFBhc3N0aHJvdWdoVmFsdWUodjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodi5pbmNsdWRlcygnXFxuJykpIHtcbiAgICAgIHJldHVybiB2XG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLm1hcCgobGluZSwgaSkgPT4gKGkgPT09IDAgPyBsaW5lIDogYCAgICAgICAgICR7bGluZX1gKSlcbiAgICAgICAgLmpvaW4oJ1xcbicpO1xuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2ID09PSAnYm9vbGVhbicpIHJldHVybiBTdHJpbmcodik7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gU3RyaW5nKHYpO1xuICB9XG59XG4iXX0=
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWZvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2ctZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBYyxFQUNkLE9BQWUsRUFDZixRQUE2QztJQUU3QyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0QsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXhDLE1BQU0sS0FBSyxHQUFhLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkQsSUFBSSxNQUFNO1FBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixJQUFJLFdBQVc7UUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FDN0IsT0FBZSxFQUNmLFFBQTZDO0lBRTdDLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FB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QUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDO2lCQUNMLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEFuc2kgZnJvbSAnQHdvcmtmbG93L2Vycm9ycy9hbnNpJztcbmltcG9ydCB7XG4gIGZvcm1hdFN0ZXBOYW1lLFxuICBmb3JtYXRXb3JrZmxvd05hbWUsXG4gIHBhcnNlU3RlcE5hbWUsXG4gIHBhcnNlV29ya2Zsb3dOYW1lLFxufSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuXG4vKipcbiAqIFN0cnVjdHVyZWQtbG9nIGNvbXBvc2l0aW9uIGZvciBgY29uc29sZS5lcnJvcmAgLyBgY29uc29sZS53YXJuYC4gRW1pdHNcbiAqIG9uZSBzdHJpbmcgaW4gdGhyZWUgc2VjdGlvbnMgc28gdGhlIG1vc3QgdXNlZnVsIGluZm9ybWF0aW9uIGlzIGF0IHRoZVxuICogdG9wLCBzdGFjayB0cmFjZSBhdCB0aGUgYm90dG9tOlxuICpcbiAqICAgICBbd29ya2Zsb3ctc2RrXSA8ZnJhbWluZyBsaW5lPlxuICogICAgICAgdXNlciBlcnJvciDCtyBGYXRhbEVycm9yXG4gKiAgICAgICBydW4gICAgd3J1bl/igKZcbiAqICAgICAgIHN0ZXAgICBzdGVwX+KApiDCtyBhZGQgKC4vd29ya2Zsb3dzL3gpXG4gKiAgICAgICBoaW50OiAgTW92ZSB0aGUgY2FsbCB0byBhIHN0ZXAgZnVuY3Rpb24uXG4gKiAgICAgRmF0YWxFcnJvcjog4oCmXG4gKiAgICAgICAgIGF0IOKApiAodHJpbW1lZCBzdGFjayDigJQgaW50ZXJuYWxzIGNvbGxhcHNlZClcbiAqXG4gKiBXaXRob3V0IHRoaXMgY29tcG9zaXRpb24sIGNhbGxlcnMgcGFzc2luZyBgJHtmcmFtaW5nfVxcbiR7c3RhY2t9YCBhcyB0aGVcbiAqIG1lc3NhZ2UgYW5kIHN0cnVjdHVyZWQgZmllbGRzIGFzIHRoZSBtZXRhZGF0YSBvYmplY3QgZ290IGB1dGlsLmluc3BlY3RgJ3NcbiAqIGRlZmF1bHQgb2JqZWN0IGR1bXAgYXBwZW5kZWQgKmFmdGVyKiB0aGUgc3RhY2ssIHdoaWNoIGJ1cmllcyB0aGUgcnVuIElEXG4gKiBhbmQgYXR0cmlidXRpb24gYmFkZ2UgdW5kZXIgMzArIGxpbmVzIG9mIGBub2RlX21vZHVsZXMvLnBucG0vLi4uYCBmcmFtZXMuXG4gKlxuICogVGhlIHNhbWUgbWV0YWRhdGEgaXMgYWxzbyBlbWl0dGVkIGFzIHN0cnVjdHVyZWQgT1RlbCBzcGFuIGV2ZW50cyBmcm9tXG4gKiB0aGUgbG9nZ2VyIGl0c2VsZiwgc28gYmFja2VuZHMgdGhhdCB3YW50IEpTT04tc2hhcGVkIGRhdGEgc3RpbGwgZ2V0IGl0LlxuICogd2ViL3dlYi1zaGFyZWQgZG8gbm90IGNvbnN1bWUgc3RkZXJyIGF0IGFsbCDigJQgdGhleSByZWFkIENCT1IvSlNPTiBldmVudFxuICogcGF5bG9hZHMgZnJvbSB0aGUgV29ybGQgZXZlbnQgbG9nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZUxvZ0xpbmUoXG4gIHByZWZpeDogc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcbiAgY29uc3QgW2ZyYW1pbmcsIC4uLnJlc3RdID0gbWVzc2FnZS5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IGJvZHkgPSByZXN0LmpvaW4oJ1xcbicpO1xuICBjb25zdCBmaWVsZHMgPSByZW5kZXJTdHJ1Y3R1cmVkRmllbGRzKGZyYW1pbmcgPz8gJycsIG1ldGFkYXRhKTtcbiAgY29uc3QgdHJpbW1lZEJvZHkgPSB0cmltU3RhY2tCb2R5KGJvZHkpO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtgJHtwcmVmaXh9ICR7ZnJhbWluZyA/PyAnJ31gXTtcbiAgaWYgKGZpZWxkcykgbGluZXMucHVzaChmaWVsZHMpO1xuICBpZiAodHJpbW1lZEJvZHkpIGxpbmVzLnB1c2godHJpbW1lZEJvZHkpO1xuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN0cnVjdHVyZWRGaWVsZHMoXG4gIGZyYW1pbmc6IHN0cmluZyxcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFtZXRhZGF0YSB8fCBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAvLyBEcm9wIGZpZWxkcyB0aGF0IHRoZSBtZXNzYWdlIGFscmVhZHkgZW5jb2Rlcy4gV2UgcmVuZGVyIGZyYW1pbmdzIGFuZFxuICAvLyBzdGFja3MgaW50byB0aGUgbWVzc2FnZSBzdHJpbmcgaXRzZWxmIGluIHN0ZXAgZXhlY3V0b3IgLyBjb21iaW5lZCBydW50aW1lLCBzb1xuICAvLyByZXBlYXRpbmcgdGhlbSBoZXJlIHdvdWxkIGJlIHB1cmUgbm9pc2UuXG4gIGNvbnN0IHJlZHVuZGFudCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICByZWR1bmRhbnQuYWRkKCdlcnJvclN0YWNrJyk7XG4gIGlmIChcbiAgICB0eXBlb2YgbWV0YWRhdGEuZXJyb3JNZXNzYWdlID09PSAnc3RyaW5nJyAmJlxuICAgIGZyYW1pbmcuaW5jbHVkZXMobWV0YWRhdGEuZXJyb3JNZXNzYWdlIGFzIHN0cmluZylcbiAgKSB7XG4gICAgcmVkdW5kYW50LmFkZCgnZXJyb3JNZXNzYWdlJyk7XG4gIH1cblxuICBjb25zdCB3ZWxsS25vd24gPSBuZXcgU2V0KFtcbiAgICAnd29ya2Zsb3dSdW5JZCcsXG4gICAgJ3dvcmtmbG93TmFtZScsXG4gICAgJ3N0ZXBJZCcsXG4gICAgJ3N0ZXBOYW1lJyxcbiAgICAnZXJyb3JBdHRyaWJ1dGlvbicsXG4gICAgJ2Vycm9yQ29kZScsXG4gICAgJ2Vycm9yTmFtZScsXG4gICAgJ2Vycm9yTWVzc2FnZScsXG4gICAgJ2Vycm9yU3RhY2snLFxuICAgICdoaW50JyxcbiAgICAnYXR0ZW1wdCcsXG4gICAgJ3JldHJ5Q291bnQnLFxuICBdKTtcblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcblxuICAvLyBIZWFkZXI6IGVycm9yIGNsYXNzICsgYXR0cmlidXRpb24gYmFkZ2UuXG4gIGNvbnN0IGVycm9yTmFtZSA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdlcnJvck5hbWUnKTtcbiAgY29uc3QgYXR0cmlidXRpb24gPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnZXJyb3JBdHRyaWJ1dGlvbicpO1xuICBpZiAoZXJyb3JOYW1lIHx8IGF0dHJpYnV0aW9uKSB7XG4gICAgY29uc3QgYmFkZ2UgPSBhdHRyaWJ1dGlvblxuICAgICAgPyBhdHRyaWJ1dGlvbiA9PT0gJ3NkaydcbiAgICAgICAgPyBBbnNpLm1hZ2VudGEoJ3NkayBlcnJvcicpXG4gICAgICAgIDogQW5zaS5yZWQoJ3VzZXIgZXJyb3InKVxuICAgICAgOiAnJztcbiAgICBjb25zdCBjbHMgPSBlcnJvck5hbWUgPyBBbnNpLmJvbGQoZXJyb3JOYW1lKSA6ICcnO1xuICAgIGNvbnN0IHNlcCA9IGJhZGdlICYmIGNscyA/IEFuc2kuZGltKCcgwrcgJykgOiAnJztcbiAgICBsaW5lcy5wdXNoKGAgICR7YmFkZ2V9JHtzZXB9JHtjbHN9YCk7XG4gIH1cblxuICAvLyBJRCArIHBhcnNlZCBmcmllbmRseS1uYW1lIHJvd3MuXG4gIGNvbnN0IHJ1bklkID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ3dvcmtmbG93UnVuSWQnKTtcbiAgY29uc3Qgd2ZOYW1lID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ3dvcmtmbG93TmFtZScpO1xuICBpZiAocnVuSWQpIHtcbiAgICBsaW5lcy5wdXNoKGZvcm1hdElkUm93KCdydW4nLCBydW5JZCwgd2ZOYW1lLCBmb3JtYXRXb3JrZmxvd05hbWUpKTtcbiAgfSBlbHNlIGlmICh3Zk5hbWUpIHtcbiAgICBsaW5lcy5wdXNoKGZvcm1hdElkUm93KCdydW4nLCBudWxsLCB3Zk5hbWUsIGZvcm1hdFdvcmtmbG93TmFtZSkpO1xuICB9XG5cbiAgY29uc3Qgc3RlcElkID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ3N0ZXBJZCcpO1xuICBjb25zdCBzdGVwTmFtZSA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdzdGVwTmFtZScpO1xuICBpZiAoc3RlcElkIHx8IHN0ZXBOYW1lKSB7XG4gICAgbGluZXMucHVzaChmb3JtYXRJZFJvdygnc3RlcCcsIHN0ZXBJZCwgc3RlcE5hbWUsIGZvcm1hdFN0ZXBOYW1lKSk7XG4gIH1cblxuICBpZiAobWV0YWRhdGEuYXR0ZW1wdCAhPT0gdW5kZWZpbmVkIHx8IG1ldGFkYXRhLnJldHJ5Q291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIGBhdHRlbXB0YCBhbmQgYHJldHJ5Q291bnRgIHJlYWQgYW1iaWd1b3VzbHkgbmV4dCB0byBlYWNoIG90aGVyIChpc1xuICAgIC8vIFwiMyByZXRyaWVzXCIgdGhlIGxpbWl0IG9yIHdoYXQgYWxyZWFkeSBoYXBwZW5lZD8pLiBSZW5kZXIgdGhlIGxpbWl0XG4gICAgLy8gYXMgXCJtYXggcmV0cmllc1wiIHRvIG1ha2UgdGhlIGJvdW5kYXJ5IGV4cGxpY2l0LCBhbmQga2VlcCBgYXR0ZW1wdGBcbiAgICAvLyBhcyB0aGUgY291bnQgb2YgdG90YWwgaW52b2NhdGlvbnMgaW5jbHVkaW5nIHRoZSBvcmlnaW5hbC5cbiAgICBjb25zdCBhID0gbWV0YWRhdGEuYXR0ZW1wdDtcbiAgICBjb25zdCByID0gbWV0YWRhdGEucmV0cnlDb3VudDtcbiAgICBpZiAoYSAhPT0gdW5kZWZpbmVkICYmIHIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChcbiAgICAgICAgYCAgJHtrdktleSgncmV0cnknKX0gJHthfSAke0Fuc2kuZGltKCdhdHRlbXB0cyDCtycpfSAke3J9ICR7QW5zaS5kaW0oJ21heCByZXRyaWVzJyl9YFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChgICAke2t2S2V5KCdyZXRyeScpfSAke2F9ICR7QW5zaS5kaW0oJ2F0dGVtcHRzJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZXJyb3JDb2RlID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2Vycm9yQ29kZScpO1xuICBpZiAoZXJyb3JDb2RlICYmIGVycm9yQ29kZSAhPT0gZXJyb3JOYW1lKSB7XG4gICAgbGluZXMucHVzaChgICAke2t2S2V5KCdjb2RlJyl9ICR7QW5zaS5kaW0oZXJyb3JDb2RlKX1gKTtcbiAgfVxuXG4gIGNvbnN0IGhpbnQgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnaGludCcpO1xuICBpZiAoaGludCkge1xuICAgIGxpbmVzLnB1c2goYCAgJHtBbnNpLmhpbnQoaGludCl9YCk7XG4gIH1cblxuICAvLyBTb3J0ZWQgcGFzcy10aHJvdWdoIGZvciB1bmtub3duIGZpZWxkcy5cbiAgY29uc3QgcGFzc1Rocm91Z2ggPSBPYmplY3QuZW50cmllcyhtZXRhZGF0YSlcbiAgICAuZmlsdGVyKFxuICAgICAgKFtrLCB2XSkgPT5cbiAgICAgICAgIXdlbGxLbm93bi5oYXMoaykgJiYgIXJlZHVuZGFudC5oYXMoaykgJiYgdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGxcbiAgICApXG4gICAgLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBwYXNzVGhyb3VnaCkge1xuICAgIGxpbmVzLnB1c2goYCAgJHtrdktleShrKX0gJHtmb3JtYXRQYXNzdGhyb3VnaFZhbHVlKHYpfWApO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVzLmxlbmd0aCA/IGxpbmVzLmpvaW4oJ1xcbicpIDogbnVsbDtcbn1cblxuLyoqXG4gKiBTdHJpcCB0aGUgc3RhY2sgZG93biB0byBmcmFtZXMgdGhlIHVzZXIgY2FuIGFjdCBvbi4gVjggc3RhY2tzIGZvciBvdXJcbiAqIHJ1bnRpbWUgZXJyb3JzIGxvb2sgbGlrZTpcbiAqXG4gKiAgICAgTmFtZTogbWVzc2FnZVxuICogICAgICAgICBhdCB1c2VyU3RlcCAoLi93b3JrZmxvd3MvZm9vLnRzOjEyOjExKVxuICogICAgICAgICBhdCA8dW5rbm93bj4gKC4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3J1bnRpbWUvc3RlcC1leGVjdXRvci50czo1MzU6MzIpXG4gKiAgICAgICAgIGF0IDx1bmtub3duPiAoLi4uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QOKApi/igKYvYmFzZS1zZXJ2ZXIuanM6MTQ1NDo5KVxuICogICAgICAgICBhdCA8dW5rbm93bj4gKC4uLi9ub2RlX21vZHVsZXMvLnBucG0vQG9wZW50ZWxlbWV0cnkrYXBpQOKApi/igKYvYXBpLmpzOjU0NDApXG4gKiAgICAgICAgIGF0IOKApiAoMTUgbW9yZSBmcmFtZXMgaW50byBOZXh0LmpzIC8gcG5wbSBpbnRlcm5hbHMpXG4gKlxuICogVHdvLXBhc3MgdHJpbTpcbiAqXG4gKiAgIDEuIERyb3AgZnJhbWV3b3JrLWludGVybmFsIGZyYW1lcyAoYG5vZGVfbW9kdWxlcy8ucG5wbS9gLCBgbm9kZTppbnRlcm5hbC9gLFxuICogICAgICBUdXJib3BhY2stYnVuZGxlZCBgbm9kZV9tb2R1bGVzX19wbnBtXypgIC8gYF9uZXh0X2Rpc3RfKmAgY2h1bmtzKS5cbiAqICAgMi4gQ2FwIHRoZSBzdXJ2aXZpbmcgZnJhbWVzIGF0IGBNQVhfVklTSUJMRV9GUkFNRVNgIOKAlCBwYXN0IHRoYXQsIGV2ZW5cbiAqICAgICAgXCJ1c2VyLWlzaFwiIGZyYW1lcyBhcmUgdXN1YWxseSBkZWVwIGFzeW5jIHdyYXBwaW5nIHRoYXQgZG9lc24ndCBoZWxwXG4gKiAgICAgIHBpbnBvaW50IHRoZSB0aHJvdy4gVGhlIHVzZXIgY2FuIGRyb3AgaW50byB0aGUgaW5zcGVjdCBDTEkgZm9yIHRoZVxuICogICAgICBmdWxsIHN0YWNrIG9uIGRlbWFuZC5cbiAqXG4gKiBFYWNoIHN1cHByZXNzZWQgcnVuIGVtaXRzIG9uZSBzdW1tYXJ5IGxpbmUgc28gcGVvcGxlIGtub3cgaG93IG11Y2ggd2FzXG4gKiB0cmltbWVkLlxuICovXG5jb25zdCBNQVhfVklTSUJMRV9GUkFNRVMgPSA2O1xuXG5mdW5jdGlvbiB0cmltU3RhY2tCb2R5KGJvZHk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIWJvZHkpIHJldHVybiBudWxsO1xuICBjb25zdCBsaW5lcyA9IGJvZHkuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBvdXQ6IHN0cmluZ1tdID0gW107XG4gIGxldCBkcm9wcGVkUnVuID0gMDtcbiAgbGV0IHZpc2libGVGcmFtZUNvdW50ID0gMDtcbiAgbGV0IGNhcHBlZEZyYW1lcyA9IDA7XG5cbiAgY29uc3QgZmx1c2hEcm9wcGVkID0gKCkgPT4ge1xuICAgIGlmIChkcm9wcGVkUnVuID4gMCkge1xuICAgICAgb3V0LnB1c2goXG4gICAgICAgIEFuc2kuZGltKFxuICAgICAgICAgIGAgICAgICAgIOKApiAke2Ryb3BwZWRSdW59IG1vcmUgJHtkcm9wcGVkUnVuID09PSAxID8gJ2ZyYW1lJyA6ICdmcmFtZXMnfSBpbiBmcmFtZXdvcmsgaW50ZXJuYWxzYFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgZHJvcHBlZFJ1biA9IDA7XG4gICAgfVxuICB9O1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGNvbnN0IGlzRnJhbWUgPSBsaW5lLnRyaW1TdGFydCgpLnN0YXJ0c1dpdGgoJ2F0ICcpO1xuICAgIGlmIChpc0ZyYW1lICYmIGlzRnJhbWV3b3JrRnJhbWUobGluZSkpIHtcbiAgICAgIGRyb3BwZWRSdW4rKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaXNGcmFtZSAmJiB2aXNpYmxlRnJhbWVDb3VudCA+PSBNQVhfVklTSUJMRV9GUkFNRVMpIHtcbiAgICAgIGNhcHBlZEZyYW1lcysrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZsdXNoRHJvcHBlZCgpO1xuICAgIG91dC5wdXNoKGxpbmUpO1xuICAgIGlmIChpc0ZyYW1lKSB2aXNpYmxlRnJhbWVDb3VudCsrO1xuICB9XG4gIGZsdXNoRHJvcHBlZCgpO1xuICBpZiAoY2FwcGVkRnJhbWVzID4gMCkge1xuICAgIG91dC5wdXNoKFxuICAgICAgQW5zaS5kaW0oXG4gICAgICAgIGAgICAgICAgIOKApiAke2NhcHBlZEZyYW1lc30gbW9yZSAke2NhcHBlZEZyYW1lcyA9PT0gMSA/ICdmcmFtZScgOiAnZnJhbWVzJ30gKHJ1biBcXGBwbnBtIHdmIGluc3BlY3QgcnVuIDxpZD5cXGAgZm9yIHRoZSBmdWxsIHN0YWNrKWBcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHJldHVybiBvdXQuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGlzRnJhbWV3b3JrRnJhbWUobGluZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIE9ubHkgYXQtZnJhbWVzIGFyZSBjYW5kaWRhdGVzIGZvciBzdHJpcHBpbmcuIEhlYWRlciBsaW5lcyAoYE5hbWU6IOKApmApXG4gIC8vIGFuZCBhcmJpdHJhcnkgdHJhaWxpbmcgY29udGV4dCAoZS5nLiBgY29kZTogJ1VTRVJfRVJST1InYCkgcGFzcyB0aHJvdWdoLlxuICBjb25zdCB0cmltbWVkID0gbGluZS50cmltU3RhcnQoKTtcbiAgaWYgKCF0cmltbWVkLnN0YXJ0c1dpdGgoJ2F0ICcpKSByZXR1cm4gZmFsc2U7XG4gIC8vIG5vZGU6KiBpbnRlcm5hbHMgKHRpbWVycywgYXN5bmMgaG9va3MsIHZtLCBldGMuKSBuZXZlciBoZWxwIHVzZXJzLlxuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnbm9kZTppbnRlcm5hbC8nKSkgcmV0dXJuIHRydWU7XG4gIC8vIHBucG0tcm9vdGVkIGZyYW1ld29ya3MgaW5zdGFsbGVkIGFzIG5vZGVfbW9kdWxlcyBkZXBlbmRlbmNpZXMuXG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvLnBucG0vJykpIHJldHVybiB0cnVlO1xuICAvLyBUdXJib3BhY2svTmV4dCBidW5kbGUgdGhlIHNhbWUgZnJhbWV3b3JrIGNvZGUgaW50byBjaHVua3MgbGlrZVxuICAvLyBgbm9kZV9tb2R1bGVzX19wbnBtXzxoYXNoPi5fLmpzYCBhbmQgYDwuLi4+X25leHRfZGlzdF88aGFzaD4uXy5qc2AsXG4gIC8vIGFuZCBlbWl0cyBOZXh0LmpzIGxvYWRlciBydW50aW1lIGFzIGAwZHg2X25leHRfZGlzdF88aGFzaD4uXy5qc2AuXG4gIC8vIFRoZXNlIGFyZSB0aGUgZnJhbWVzIHRoYXQgc2hvdyB1cCBhZnRlciBUdXJib3BhY2sgRENFIOKAlCBzYW1lIGludGVudFxuICAvLyBhcyB0aGUgcmF3IGBub2RlX21vZHVsZXMvLnBucG0vYCBmaWx0ZXIgYWJvdmUuXG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXNfX3BucG1fJykpIHJldHVybiB0cnVlO1xuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnX25leHRfZGlzdF8nKSkgcmV0dXJuIHRydWU7XG4gIC8vIFBsYWluIG5vZGVfbW9kdWxlcyAobm9uLXBucG0gc2V0dXBzKSBmb3IgdGhlIHNhbWUga2luZHMgb2YgZnJhbWV3b3Jrcy5cbiAgaWYgKFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy9uZXh0LycpIHx8XG4gICAgdHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzL0BvcGVudGVsZW1ldHJ5LycpIHx8XG4gICAgdHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzL3ZpdGVzdC8nKSB8fFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy9Adml0ZXN0LycpXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcGlja1N0cmluZyhcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBrZXk6IHN0cmluZ1xuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHYgPSBtZXRhZGF0YVtrZXldO1xuICByZXR1cm4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoID4gMCA/IHYgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBrdktleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBBbnNpLmRpbShrZXkucGFkRW5kKDYpKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SWRSb3coXG4gIGxhYmVsOiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcgfCBudWxsLFxuICBuYW1lOiBzdHJpbmcgfCBudWxsLFxuICBmb3JtYXROYW1lOiAobjogc3RyaW5nKSA9PiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGNvbnN0IGlkQ2VsbCA9IGlkID8gaWQgOiBBbnNpLmRpbSgn4oCUJyk7XG4gIGNvbnN0IHBhcnNlZCA9IG5hbWVcbiAgICA/IGxhYmVsID09PSAncnVuJ1xuICAgICAgPyBwYXJzZVdvcmtmbG93TmFtZShuYW1lKVxuICAgICAgOiBwYXJzZVN0ZXBOYW1lKG5hbWUpXG4gICAgOiBudWxsO1xuICBjb25zdCBuYW1lQ2VsbCA9IHBhcnNlZFxuICAgID8gYCR7QW5zaS5kaW0oJ8K3Jyl9ICR7Zm9ybWF0TmFtZShuYW1lIGFzIHN0cmluZyl9YFxuICAgIDogJyc7XG4gIHJldHVybiBgICAke2t2S2V5KGxhYmVsKX0gJHtpZENlbGx9JHtuYW1lQ2VsbCA/ICcgJyArIG5hbWVDZWxsIDogJyd9YDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UGFzc3Rocm91Z2hWYWx1ZSh2OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgIGlmICh2LmluY2x1ZGVzKCdcXG4nKSkge1xuICAgICAgcmV0dXJuIHZcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAubWFwKChsaW5lLCBpKSA9PiAoaSA9PT0gMCA/IGxpbmUgOiBgICAgICAgICAgJHtsaW5lfWApKVxuICAgICAgICAuam9pbignXFxuJyk7XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9XG4gIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHYgPT09ICdib29sZWFuJykgcmV0dXJuIFN0cmluZyh2KTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBTdHJpbmcodik7XG4gIH1cbn1cbiJdfQ==
|
package/dist/private.d.ts
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* Utils used by the bundler when transforming code
|
|
3
3
|
*/
|
|
4
4
|
import type { WorldCapabilities } from '@workflow/world';
|
|
5
|
-
import type { CryptoKey } from './encryption.js';
|
|
6
5
|
import type { EventsConsumer } from './events-consumer.js';
|
|
7
6
|
import type { QueueItem } from './global.js';
|
|
8
7
|
import type { ReplayPayloadCache } from './replay-payload-cache.js';
|
|
9
8
|
import type { Serializable } from './schemas.js';
|
|
9
|
+
import type { PayloadKey } from './serialization/encryption.js';
|
|
10
10
|
export type StepFunction<Args extends Serializable[] = any[], Result extends Serializable | unknown = unknown> = ((...args: Args) => Promise<Result>) & {
|
|
11
11
|
maxRetries?: number;
|
|
12
12
|
stepId?: string;
|
|
@@ -27,7 +27,7 @@ export declare function registerStepFunction(stepId: string, stepFn: StepFunctio
|
|
|
27
27
|
export declare function getStepFunction(stepId: string): StepFunction | undefined;
|
|
28
28
|
export interface WorkflowOrchestratorContext {
|
|
29
29
|
runId: string;
|
|
30
|
-
encryptionKey:
|
|
30
|
+
encryptionKey: PayloadKey | undefined;
|
|
31
31
|
worldCapabilities?: WorldCapabilities;
|
|
32
32
|
globalThis: typeof globalThis;
|
|
33
33
|
eventsConsumer: EventsConsumer;
|
|
@@ -57,26 +57,33 @@ export interface WorkflowOrchestratorContext {
|
|
|
57
57
|
pendingDeliveries: number;
|
|
58
58
|
/**
|
|
59
59
|
* Ordered registry of in-flight "branch-deciding" deliveries — the
|
|
60
|
-
* resolutions a workflow typically `Promise.race`s on
|
|
61
|
-
* payloads (`hook_received`)
|
|
62
|
-
*
|
|
60
|
+
* resolutions a workflow typically `Promise.race`s on, or awaits from
|
|
61
|
+
* independent concurrent branches: hook payloads (`hook_received`), wait
|
|
62
|
+
* completions (`wait_completed`), and step results (`step_completed` /
|
|
63
|
+
* `step_failed`). Keyed by the delivery's position (index) in the consumed
|
|
64
|
+
* event log.
|
|
63
65
|
*
|
|
64
|
-
* The problem:
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
66
|
+
* The problem: each of these resolutions reaches workflow code after a
|
|
67
|
+
* different, workload-dependent number of microtask hops. A buffered hook
|
|
68
|
+
* payload is observed via the async hook iterator (`yield await this`),
|
|
69
|
+
* costing extra hops; a `wait_completed` resolves with fewer, and a reused
|
|
70
|
+
* sleep can resolve in an entirely earlier loop iteration; a step result is
|
|
71
|
+
* gated on hydration whose cost varies between replays of the SAME
|
|
72
|
+
* invocation — the first replay pays the full decrypt/decompress/revive,
|
|
73
|
+
* while later replays sharing the invocation's `ReplayPayloadCache`
|
|
74
|
+
* memo-hit small primitive results and resolve in one or two hops. Either
|
|
75
|
+
* way, the resolution that the committed event log ordered first can lose a
|
|
76
|
+
* `Promise.race` (or a `useStep` ULID allocation) to a faster- or
|
|
77
|
+
* already-resolved competitor, diverging from the log and surfacing as
|
|
78
|
+
* `CorruptedEventLogError`.
|
|
71
79
|
*
|
|
72
80
|
* The fix is a strict, deterministic delivery order anchored on
|
|
73
81
|
* event-log position: a delivery does not resolve to the workflow until
|
|
74
|
-
* every earlier-in-log delivery
|
|
75
|
-
* (Opposite kind only: sequential same-kind hook payloads must not block
|
|
76
|
-
* one another, and a wait need not wait behind a later wait.) Because the
|
|
82
|
+
* every relevant earlier-in-log delivery has been delivered. Because the
|
|
77
83
|
* gate is "the earlier delivery resolved", not "won a timing race", the
|
|
78
84
|
* outcome is independent of microtask hops, hydration/decryption time,
|
|
79
|
-
* and `Promise.race` argument order.
|
|
85
|
+
* and `Promise.race` argument order. Which earlier kinds a delivery defers
|
|
86
|
+
* behind is spelled out on {@link awaitEarlierDeliveries}.
|
|
80
87
|
*
|
|
81
88
|
* Index is used rather than the `eventId` string because `eventId` is an
|
|
82
89
|
* opaque, world-assigned value not guaranteed to sort in creation order
|
|
@@ -93,52 +100,104 @@ export interface WorkflowOrchestratorContext {
|
|
|
93
100
|
replayPayloadCache: ReplayPayloadCache;
|
|
94
101
|
}
|
|
95
102
|
/** The kind of branch-deciding delivery a barrier represents. */
|
|
96
|
-
export type DeliveryKind = 'hook' | 'wait';
|
|
103
|
+
export type DeliveryKind = 'hook' | 'wait' | 'step';
|
|
97
104
|
interface DeliveryBarrierEntry {
|
|
98
105
|
kind: DeliveryKind;
|
|
99
106
|
/** Resolves once this delivery has resolved to the workflow. */
|
|
100
107
|
delivered: Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* Whether this delivery is committed to reaching the workflow without any
|
|
110
|
+
* further action by workflow code. True for wait completions and step
|
|
111
|
+
* results, which always resolve from their own chain, and for a hook payload
|
|
112
|
+
* that already had a waiting consumer when it was consumed.
|
|
113
|
+
*
|
|
114
|
+
* False for a BUFFERED hook payload no consumer has claimed yet: it is
|
|
115
|
+
* delivered by `claim()`, i.e. whenever the workflow next reads the hook —
|
|
116
|
+
* which may be causally *after* a later-in-log delivery. `arm()` flips it
|
|
117
|
+
* once a consumer takes the payload.
|
|
118
|
+
*/
|
|
119
|
+
armed: boolean;
|
|
101
120
|
}
|
|
102
121
|
/**
|
|
103
|
-
* Awaits, in strict event-log order, every still-registered delivery
|
|
104
|
-
*
|
|
105
|
-
* so that this resolution is handed to the
|
|
106
|
-
* earlier-in-log deliveries have been. This
|
|
107
|
-
*
|
|
108
|
-
*
|
|
122
|
+
* Awaits, in strict event-log order, every still-registered delivery that is
|
|
123
|
+
* earlier in the log than `eventIndex` and that a delivery of `kind` defers
|
|
124
|
+
* behind (see {@link DEFER_BEHIND}), so that this resolution is handed to the
|
|
125
|
+
* workflow only after all relevant earlier-in-log deliveries have been. This
|
|
126
|
+
* is what keeps a `Promise.race` — or the ULID a follow-up `useStep` draws on
|
|
127
|
+
* a concurrent branch — deterministic and aligned with the committed event
|
|
128
|
+
* log, independent of microtask-hop counts, hydration time, or race-argument
|
|
129
|
+
* order. When this delivery does have to wait, it also yields a macrotask
|
|
130
|
+
* afterwards so the earlier delivery's consumer can run to its own next
|
|
131
|
+
* suspension point first; see the comment at that `await` for why ordering the
|
|
132
|
+
* `resolve()` calls alone is not enough.
|
|
109
133
|
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
134
|
+
* One asymmetry: a STEP result additionally skips any earlier delivery that
|
|
135
|
+
* will not resolve on its own, i.e. one blocked (directly or transitively) on
|
|
136
|
+
* a buffered hook payload no consumer has claimed. Such a payload is delivered
|
|
137
|
+
* only when the workflow next reads the hook, and reaching that read very
|
|
138
|
+
* commonly requires the step result itself (`await stepX()` before the read).
|
|
139
|
+
* Gating the step on it would stall the workflow until the barrier's idle
|
|
140
|
+
* safety net fires, which then releases every delivery queued behind that
|
|
141
|
+
* payload at once — losing exactly the race this ordering exists to protect.
|
|
142
|
+
* Waits and hooks keep gating on unclaimed payloads: for them, waiting for the
|
|
143
|
+
* claim IS the ordering guarantee (a `wait_completed` must not preempt a
|
|
144
|
+
* payload the log ordered first).
|
|
113
145
|
*/
|
|
114
|
-
export declare function awaitEarlierDeliveries(ctx: WorkflowOrchestratorContext, eventIndex: number | undefined,
|
|
146
|
+
export declare function awaitEarlierDeliveries(ctx: WorkflowOrchestratorContext, eventIndex: number | undefined, kind: DeliveryKind): Promise<void>;
|
|
115
147
|
/** Handle for a registered branch-deciding delivery barrier. */
|
|
116
148
|
export interface DeliveryBarrier {
|
|
117
149
|
/**
|
|
118
150
|
* Mark this delivery as delivered to the workflow. Resolves its
|
|
119
|
-
* `delivered` promise so any later-in-log
|
|
120
|
-
*
|
|
121
|
-
*
|
|
151
|
+
* `delivered` promise so any later-in-log delivery gated on it (via
|
|
152
|
+
* {@link awaitEarlierDeliveries}) may proceed, and removes it from the
|
|
153
|
+
* registry. Idempotent.
|
|
122
154
|
*/
|
|
123
155
|
markDelivered: () => void;
|
|
156
|
+
/**
|
|
157
|
+
* Mark this delivery as committed to happening, for a barrier registered
|
|
158
|
+
* unarmed (a buffered hook payload) once a consumer has claimed it. From
|
|
159
|
+
* then on a later step result may be ordered behind it. Idempotent.
|
|
160
|
+
*/
|
|
161
|
+
arm: () => void;
|
|
124
162
|
}
|
|
125
163
|
/**
|
|
126
164
|
* Register a branch-deciding delivery at its event-log index so that later
|
|
127
|
-
*
|
|
128
|
-
*
|
|
165
|
+
* deliveries can be ordered strictly after it. Returns an inert handle when
|
|
166
|
+
* `pendingDeliveryBarriers` is not initialized.
|
|
167
|
+
*
|
|
168
|
+
* Pass `armed: false` for a delivery whose resolution waits on workflow code
|
|
169
|
+
* asking for it (a buffered hook payload); call `arm()` when it does.
|
|
129
170
|
*
|
|
130
171
|
* To guarantee a later delivery gated on this one can never hang when this
|
|
131
172
|
* delivery is abandoned (the workflow took a different branch or is
|
|
132
173
|
* suspending and never observes it), the barrier auto-resolves at idle.
|
|
174
|
+
*
|
|
175
|
+
* INVARIANT required of every call site: a barrier that is ever `armed` must
|
|
176
|
+
* be paired with a delivery chain that runs unconditionally — attached when
|
|
177
|
+
* the event is consumed (waits, step results, waiting-consumer hook payloads,
|
|
178
|
+
* aborts), or by the `claim()` whose invocation is what arms it (buffered
|
|
179
|
+
* hook payloads). The idle check ({@link scheduleWhenIdle}) refuses to
|
|
180
|
+
* observe idle while an armed, self-resolving barrier is undelivered, and the
|
|
181
|
+
* safety net below is itself idle-gated — so an armed barrier with no
|
|
182
|
+
* unconditional chain would livelock every idle check in the run, including
|
|
183
|
+
* its own retirement.
|
|
133
184
|
*/
|
|
134
|
-
export declare function registerDeliveryBarrier(ctx: WorkflowOrchestratorContext, eventIndex: number | undefined, kind: DeliveryKind
|
|
185
|
+
export declare function registerDeliveryBarrier(ctx: WorkflowOrchestratorContext, eventIndex: number | undefined, kind: DeliveryKind, options?: {
|
|
186
|
+
armed?: boolean;
|
|
187
|
+
}): DeliveryBarrier;
|
|
135
188
|
/**
|
|
136
189
|
* Schedule a callback to fire only after all pending data deliveries
|
|
137
190
|
* (step results, hook payloads) and async deserialization have completed.
|
|
138
|
-
* Uses a polling loop: setTimeout(0) → check pendingDeliveries
|
|
139
|
-
* if
|
|
140
|
-
* delivery pattern where each hook
|
|
141
|
-
* async work to the promiseQueue.
|
|
191
|
+
* Uses a polling loop: setTimeout(0) → check pendingDeliveries and the
|
|
192
|
+
* barrier registry → if anything is still in flight, wait for promiseQueue →
|
|
193
|
+
* repeat. This handles the multi-round delivery pattern where each hook
|
|
194
|
+
* payload delivery cycle appends new async work to the promiseQueue.
|
|
195
|
+
*
|
|
196
|
+
* "In flight" is two distinct windows, each with its own guard:
|
|
197
|
+
* `pendingDeliveries > 0` covers hydration inside the serial queue slots, and
|
|
198
|
+
* {@link hasParkedCommittedDelivery} covers the detached gap between a slot
|
|
199
|
+
* releasing that counter and the delivery's `resolve()` actually running —
|
|
200
|
+
* deliberately outside `pendingDeliveries` (see step.ts), and invisible to it.
|
|
142
201
|
*
|
|
143
202
|
* The initial `setTimeout(0)` macrotask is load-bearing and must NOT be
|
|
144
203
|
* downgraded to a microtask (`queueMicrotask`/`Promise.resolve().then`).
|
package/dist/private.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"private.d.ts","sourceRoot":"","sources":["../src/private.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"private.d.ts","sourceRoot":"","sources":["../src/private.ts"],"names":[],"mappings":"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"}
|