@workflow/core 5.0.0-beta.19 → 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/create-hook.d.ts +3 -1
- package/dist/create-hook.d.ts.map +1 -1
- package/dist/create-hook.js +1 -1
- package/dist/events-consumer.d.ts +9 -0
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +56 -18
- package/dist/private.d.ts +12 -0
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +13 -1
- package/dist/runtime/constants.d.ts +45 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +79 -1
- package/dist/runtime/get-port-lazy.d.ts +15 -0
- package/dist/runtime/get-port-lazy.d.ts.map +1 -1
- package/dist/runtime/get-port-lazy.js +64 -2
- 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/step-executor.d.ts +44 -1
- package/dist/runtime/step-executor.d.ts.map +1 -1
- package/dist/runtime/step-executor.js +171 -23
- package/dist/runtime/step-handler.js +8 -8
- package/dist/runtime/suspension-handler.d.ts +19 -1
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +47 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +339 -79
- package/dist/source-map.d.ts +5 -0
- package/dist/source-map.d.ts.map +1 -1
- package/dist/source-map.js +61 -7
- package/dist/telemetry.d.ts +9 -6
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +12 -15
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -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/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +10 -1
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +45 -9
- package/package.json +4 -4
package/dist/source-map.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Remaps an error stack trace using inline source maps to show original source locations.
|
|
3
3
|
*
|
|
4
|
+
* Degrades gracefully when the bundle has no inline source map (e.g. production
|
|
5
|
+
* builds, where maps are off by default): the original stack is returned
|
|
6
|
+
* unchanged. A cheap `filename` presence check skips all work when no frame
|
|
7
|
+
* references the workflow file, and parsed source maps are memoized per bundle.
|
|
8
|
+
*
|
|
4
9
|
* @param stack - The error stack trace to remap
|
|
5
10
|
* @param filename - The workflow filename to match in stack frames
|
|
6
11
|
* @param workflowCode - The workflow bundle code containing inline source maps
|
package/dist/source-map.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-map.d.ts","sourceRoot":"","sources":["../src/source-map.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"source-map.d.ts","sourceRoot":"","sources":["../src/source-map.ts"],"names":[],"mappings":"AAuGA;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,MAAM,CAsDR"}
|
package/dist/source-map.js
CHANGED
|
@@ -39,24 +39,78 @@ function extractInlineSourceMapBase64(source) {
|
|
|
39
39
|
scanFrom = valueEnd;
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Memoized `TraceMap | null` per workflow bundle. `null` records "this bundle
|
|
44
|
+
* has no usable inline source map" so repeated failures don't rescan the whole
|
|
45
|
+
* (potentially multi-MB) bundle string or re-parse the map. This matters most
|
|
46
|
+
* in production, where source maps are off by default: the first failure scans
|
|
47
|
+
* once and caches `null`, every later failure is O(1).
|
|
48
|
+
*
|
|
49
|
+
* Keyed by the bundle `code`. Insertion-ordered LRU capped at `MAX_TRACERS`,
|
|
50
|
+
* mirroring `vm/script-cache.ts`: production serves a single build-time bundle
|
|
51
|
+
* literal for the process lifetime, while dev/watch produces a new bundle
|
|
52
|
+
* string per edit — the bound keeps the few most-recent ones and evicts the
|
|
53
|
+
* rest instead of pinning every historical version.
|
|
54
|
+
*/
|
|
55
|
+
const tracerCache = new Map();
|
|
56
|
+
const MAX_TRACERS = 8;
|
|
57
|
+
function getTraceMapForCode(workflowCode) {
|
|
58
|
+
const cached = tracerCache.get(workflowCode);
|
|
59
|
+
if (cached !== undefined) {
|
|
60
|
+
// Move to most-recently-used position (end of insertion order).
|
|
61
|
+
tracerCache.delete(workflowCode);
|
|
62
|
+
tracerCache.set(workflowCode, cached);
|
|
63
|
+
return cached;
|
|
64
|
+
}
|
|
65
|
+
let tracer = null;
|
|
66
|
+
const base64 = extractInlineSourceMapBase64(workflowCode);
|
|
67
|
+
if (base64) {
|
|
68
|
+
try {
|
|
69
|
+
const sourceMapJson = Buffer.from(base64, 'base64').toString('utf-8');
|
|
70
|
+
const sourceMapData = JSON.parse(sourceMapJson);
|
|
71
|
+
// Use TraceMap (pure JS, no WASM required)
|
|
72
|
+
tracer = new TraceMap(sourceMapData);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Malformed inline map — treat as absent so we don't retry parsing it.
|
|
76
|
+
tracer = null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
tracerCache.set(workflowCode, tracer);
|
|
80
|
+
// Evict the least-recently-used entries when over the cap. New entries are
|
|
81
|
+
// appended at the end, so the oldest live at the front.
|
|
82
|
+
while (tracerCache.size > MAX_TRACERS) {
|
|
83
|
+
const oldest = tracerCache.keys().next().value;
|
|
84
|
+
if (oldest === undefined)
|
|
85
|
+
break;
|
|
86
|
+
tracerCache.delete(oldest);
|
|
87
|
+
}
|
|
88
|
+
return tracer;
|
|
89
|
+
}
|
|
42
90
|
/**
|
|
43
91
|
* Remaps an error stack trace using inline source maps to show original source locations.
|
|
44
92
|
*
|
|
93
|
+
* Degrades gracefully when the bundle has no inline source map (e.g. production
|
|
94
|
+
* builds, where maps are off by default): the original stack is returned
|
|
95
|
+
* unchanged. A cheap `filename` presence check skips all work when no frame
|
|
96
|
+
* references the workflow file, and parsed source maps are memoized per bundle.
|
|
97
|
+
*
|
|
45
98
|
* @param stack - The error stack trace to remap
|
|
46
99
|
* @param filename - The workflow filename to match in stack frames
|
|
47
100
|
* @param workflowCode - The workflow bundle code containing inline source maps
|
|
48
101
|
* @returns The remapped stack trace with original source locations
|
|
49
102
|
*/
|
|
50
103
|
export function remapErrorStack(stack, filename, workflowCode) {
|
|
51
|
-
|
|
52
|
-
|
|
104
|
+
// Nothing to remap if no frame references the workflow file. Avoids touching
|
|
105
|
+
// the (large) bundle string entirely for errors thrown elsewhere.
|
|
106
|
+
if (!stack.includes(filename)) {
|
|
107
|
+
return stack;
|
|
108
|
+
}
|
|
109
|
+
const tracer = getTraceMapForCode(workflowCode);
|
|
110
|
+
if (!tracer) {
|
|
53
111
|
return stack; // No source map found
|
|
54
112
|
}
|
|
55
113
|
try {
|
|
56
|
-
const sourceMapJson = Buffer.from(base64, 'base64').toString('utf-8');
|
|
57
|
-
const sourceMapData = JSON.parse(sourceMapJson);
|
|
58
|
-
// Use TraceMap (pure JS, no WASM required)
|
|
59
|
-
const tracer = new TraceMap(sourceMapData);
|
|
60
114
|
// Parse and remap each line in the stack trace
|
|
61
115
|
const lines = stack.split('\n');
|
|
62
116
|
const remappedLines = lines.map((line) => {
|
|
@@ -91,4 +145,4 @@ export function remapErrorStack(stack, filename, workflowCode) {
|
|
|
91
145
|
return stack;
|
|
92
146
|
}
|
|
93
147
|
}
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zb3VyY2UtbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRSxTQUFTLFlBQVksQ0FBQyxJQUFZO0lBQ2hDLE9BQU8sQ0FDTCxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQztRQUM5QixDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQztRQUM5QixDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQztRQUM5QixJQUFJLEtBQUssSUFBSTtRQUNiLElBQUksS0FBSyxJQUFJO1FBQ2IsSUFBSSxLQUFLLElBQUksQ0FDZCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQUMsTUFBYztJQUNsRCxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztJQUNyRSxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUM7SUFDaEMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRWpCLE9BQU8sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1RCxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUV2QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUNoQyxZQUFZLEVBQ1osU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQ25DLENBQUM7UUFDRixJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLFFBQVEsR0FBRyxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztZQUM5QyxT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UUFBUSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUM7Z0JBQzFELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0JBQ3RFLE9BQU8sVUFBVSxJQUFJLEtBQUssUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQ3ZFLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxDQUFDLGdDQUFnQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1Asd0RBQXdEO1FBQ3hELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBvcmlnaW5hbFBvc2l0aW9uRm9yLCBUcmFjZU1hcCB9IGZyb20gJ0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcnO1xuXG5mdW5jdGlvbiBpc0Jhc2U2NENoYXIoY29kZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgKGNvZGUgPj0gMHg0MSAmJiBjb2RlIDw9IDB4NWEpIHx8XG4gICAgKGNvZGUgPj0gMHg2MSAmJiBjb2RlIDw9IDB4N2EpIHx8XG4gICAgKGNvZGUgPj0gMHgzMCAmJiBjb2RlIDw9IDB4MzkpIHx8XG4gICAgY29kZSA9PT0gMHgyYiB8fFxuICAgIGNvZGUgPT09IDB4MmYgfHxcbiAgICBjb2RlID09PSAweDNkXG4gICk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RJbmxpbmVTb3VyY2VNYXBCYXNlNjQoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBzb3VyY2VNYXBQcmVmaXggPSAnLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uJztcbiAgY29uc3QgYmFzZTY0TWFya2VyID0gJztiYXNlNjQsJztcbiAgbGV0IHNjYW5Gcm9tID0gMDtcblxuICB3aGlsZSAoc2NhbkZyb20gPCBzb3VyY2UubGVuZ3RoKSB7XG4gICAgY29uc3QgcHJlZml4SWR4ID0gc291cmNlLmluZGV4T2Yoc291cmNlTWFwUHJlZml4LCBzY2FuRnJvbSk7XG4gICAgaWYgKHByZWZpeElkeCA9PT0gLTEpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBiYXNlNjRTdGFydCA9IHNvdXJjZS5pbmRleE9mKFxuICAgICAgYmFzZTY0TWFya2VyLFxuICAgICAgcHJlZml4SWR4ICsgc291cmNlTWFwUHJlZml4Lmxlbmd0aFxuICAgICk7XG4gICAgaWYgKGJhc2U2NFN0YXJ0ID09PSAtMSkge1xuICAgICAgc2NhbkZyb20gPSBwcmVmaXhJZHggKyBzb3VyY2VNYXBQcmVmaXgubGVuZ3RoO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWFCZWZvcmUgPSBzb3VyY2UuaW5kZXhPZignLCcsIHByZWZpeElkeCk7XG4gICAgaWYgKGNvbW1hQmVmb3JlICE9PSAtMSAmJiBjb21tYUJlZm9yZSA8IGJhc2U2NFN0YXJ0KSB7XG4gICAgICBzY2FuRnJvbSA9IGJhc2U2NFN0YXJ0ICsgYmFzZTY0TWFya2VyLmxlbmd0aDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlU3RhcnQgPSBiYXNlNjRTdGFydCArIGJhc2U2NE1hcmtlci5sZW5ndGg7XG4gICAgbGV0IHZhbHVlRW5kID0gdmFsdWVTdGFydDtcbiAgICB3aGlsZSAodmFsdWVFbmQgPCBzb3VyY2UubGVuZ3RoKSB7XG4gICAgICBpZiAoIWlzQmFzZTY0Q2hhcihzb3VyY2UuY2hhckNvZGVBdCh2YWx1ZUVuZCkpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdmFsdWVFbmQrKztcbiAgICB9XG5cbiAgICBpZiAodmFsdWVFbmQgPiB2YWx1ZVN0YXJ0KSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKHZhbHVlU3RhcnQsIHZhbHVlRW5kKTtcbiAgICB9XG4gICAgc2NhbkZyb20gPSB2YWx1ZUVuZDtcbiAgfVxufVxuXG4vKipcbiAqIFJlbWFwcyBhbiBlcnJvciBzdGFjayB0cmFjZSB1c2luZyBpbmxpbmUgc291cmNlIG1hcHMgdG8gc2hvdyBvcmlnaW5hbCBzb3VyY2UgbG9jYXRpb25zLlxuICpcbiAqIEBwYXJhbSBzdGFjayAtIFRoZSBlcnJvciBzdGFjayB0cmFjZSB0byByZW1hcFxuICogQHBhcmFtIGZpbGVuYW1lIC0gVGhlIHdvcmtmbG93IGZpbGVuYW1lIHRvIG1hdGNoIGluIHN0YWNrIGZyYW1lc1xuICogQHBhcmFtIHdvcmtmbG93Q29kZSAtIFRoZSB3b3JrZmxvdyBidW5kbGUgY29kZSBjb250YWluaW5nIGlubGluZSBzb3VyY2UgbWFwc1xuICogQHJldHVybnMgVGhlIHJlbWFwcGVkIHN0YWNrIHRyYWNlIHdpdGggb3JpZ2luYWwgc291cmNlIGxvY2F0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtYXBFcnJvclN0YWNrKFxuICBzdGFjazogc3RyaW5nLFxuICBmaWxlbmFtZTogc3RyaW5nLFxuICB3b3JrZmxvd0NvZGU6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZTY0ID0gZXh0cmFjdElubGluZVNvdXJjZU1hcEJhc2U2NCh3b3JrZmxvd0NvZGUpO1xuICBpZiAoIWJhc2U2NCkge1xuICAgIHJldHVybiBzdGFjazsgLy8gTm8gc291cmNlIG1hcCBmb3VuZFxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzb3VyY2VNYXBKc29uID0gQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgY29uc3Qgc291cmNlTWFwRGF0YSA9IEpTT04ucGFyc2Uoc291cmNlTWFwSnNvbik7XG5cbiAgICAvLyBVc2UgVHJhY2VNYXAgKHB1cmUgSlMsIG5vIFdBU00gcmVxdWlyZWQpXG4gICAgY29uc3QgdHJhY2VyID0gbmV3IFRyYWNlTWFwKHNvdXJjZU1hcERhdGEpO1xuXG4gICAgLy8gUGFyc2UgYW5kIHJlbWFwIGVhY2ggbGluZSBpbiB0aGUgc3RhY2sgdHJhY2VcbiAgICBjb25zdCBsaW5lcyA9IHN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICBjb25zdCByZW1hcHBlZExpbmVzID0gbGluZXMubWFwKChsaW5lKSA9PiB7XG4gICAgICAvLyBNYXRjaCBzdGFjayBmcmFtZXM6IFwiYXQgZnVuY3Rpb25OYW1lIChmaWxlbmFtZTpsaW5lOmNvbHVtbilcIiBvciBcImF0IGZpbGVuYW1lOmxpbmU6Y29sdW1uXCJcbiAgICAgIGNvbnN0IGZyYW1lTWF0Y2ggPSBsaW5lLm1hdGNoKFxuICAgICAgICAvXlxccyphdFxccysoPzooLis/KVxccytcXCgpPyguKz8pOihcXGQrKTooXFxkKylcXCk/JC9cbiAgICAgICk7XG4gICAgICBpZiAoIWZyYW1lTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIGxpbmU7IC8vIE5vdCBhIHN0YWNrIGZyYW1lLCByZXR1cm4gYXMtaXNcbiAgICAgIH1cblxuICAgICAgY29uc3QgWywgZnVuY3Rpb25OYW1lLCBmaWxlLCBsaW5lU3RyLCBjb2xTdHJdID0gZnJhbWVNYXRjaDtcblxuICAgICAgLy8gT25seSByZW1hcCBmcmFtZXMgZnJvbSBvdXIgd29ya2Zsb3cgZmlsZVxuICAgICAgaWYgKCFmaWxlLmluY2x1ZGVzKGZpbGVuYW1lKSkge1xuICAgICAgICByZXR1cm4gbGluZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGluZU51bWJlciA9IHBhcnNlSW50KGxpbmVTdHIsIDEwKTtcbiAgICAgIGNvbnN0IGNvbHVtbk51bWJlciA9IHBhcnNlSW50KGNvbFN0ciwgMTApO1xuXG4gICAgICAvLyBNYXAgdG8gb3JpZ2luYWwgc291cmNlIHBvc2l0aW9uXG4gICAgICBjb25zdCBvcmlnaW5hbCA9IG9yaWdpbmFsUG9zaXRpb25Gb3IodHJhY2VyLCB7XG4gICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgIGNvbHVtbjogY29sdW1uTnVtYmVyLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChvcmlnaW5hbC5zb3VyY2UgJiYgb3JpZ2luYWwubGluZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmdW5jID0gZnVuY3Rpb25OYW1lIHx8IG9yaWdpbmFsLm5hbWUgfHwgJ2Fub255bW91cyc7XG4gICAgICAgIGNvbnN0IGNvbCA9IG9yaWdpbmFsLmNvbHVtbiAhPT0gbnVsbCA/IG9yaWdpbmFsLmNvbHVtbiA6IGNvbHVtbk51bWJlcjtcbiAgICAgICAgcmV0dXJuIGAgICAgYXQgJHtmdW5jfSAoJHtvcmlnaW5hbC5zb3VyY2V9OiR7b3JpZ2luYWwubGluZX06JHtjb2x9KWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaW5lOyAvLyBDb3VsZG4ndCBtYXAsIHJldHVybiBvcmlnaW5hbFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlbWFwcGVkTGluZXMuam9pbignXFxuJyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIHNvdXJjZSBtYXAgcHJvY2Vzc2luZyBmYWlscywgcmV0dXJuIG9yaWdpbmFsIHN0YWNrXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG59XG4iXX0=
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zb3VyY2UtbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRSxTQUFTLFlBQVksQ0FBQyxJQUFZO0lBQ2hDLE9BQU8sQ0FDTCxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQztRQUM5QixDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQztRQUM5QixDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQztRQUM5QixJQUFJLEtBQUssSUFBSTtRQUNiLElBQUksS0FBSyxJQUFJO1FBQ2IsSUFBSSxLQUFLLElBQUksQ0FDZCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQUMsTUFBYztJQUNsRCxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztJQUNyRSxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUM7SUFDaEMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRWpCLE9BQU8sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1RCxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUV2QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUNoQyxZQUFZLEVBQ1osU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQ25DLENBQUM7UUFDRixJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLFFBQVEsR0FBRyxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztZQUM5QyxT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QyxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxJQUFJLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDO2dCQUMxRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dCQUN0RSxPQUFPLFVBQVUsSUFBSSxLQUFLLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztZQUN2RSxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsQ0FBQyxnQ0FBZ0M7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLHdEQUF3RDtRQUN4RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgb3JpZ2luYWxQb3NpdGlvbkZvciwgVHJhY2VNYXAgfSBmcm9tICdAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nJztcblxuZnVuY3Rpb24gaXNCYXNlNjRDaGFyKGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIChjb2RlID49IDB4NDEgJiYgY29kZSA8PSAweDVhKSB8fFxuICAgIChjb2RlID49IDB4NjEgJiYgY29kZSA8PSAweDdhKSB8fFxuICAgIChjb2RlID49IDB4MzAgJiYgY29kZSA8PSAweDM5KSB8fFxuICAgIGNvZGUgPT09IDB4MmIgfHxcbiAgICBjb2RlID09PSAweDJmIHx8XG4gICAgY29kZSA9PT0gMHgzZFxuICApO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0SW5saW5lU291cmNlTWFwQmFzZTY0KHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc291cmNlTWFwUHJlZml4ID0gJy8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbic7XG4gIGNvbnN0IGJhc2U2NE1hcmtlciA9ICc7YmFzZTY0LCc7XG4gIGxldCBzY2FuRnJvbSA9IDA7XG5cbiAgd2hpbGUgKHNjYW5Gcm9tIDwgc291cmNlLmxlbmd0aCkge1xuICAgIGNvbnN0IHByZWZpeElkeCA9IHNvdXJjZS5pbmRleE9mKHNvdXJjZU1hcFByZWZpeCwgc2NhbkZyb20pO1xuICAgIGlmIChwcmVmaXhJZHggPT09IC0xKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgYmFzZTY0U3RhcnQgPSBzb3VyY2UuaW5kZXhPZihcbiAgICAgIGJhc2U2NE1hcmtlcixcbiAgICAgIHByZWZpeElkeCArIHNvdXJjZU1hcFByZWZpeC5sZW5ndGhcbiAgICApO1xuICAgIGlmIChiYXNlNjRTdGFydCA9PT0gLTEpIHtcbiAgICAgIHNjYW5Gcm9tID0gcHJlZml4SWR4ICsgc291cmNlTWFwUHJlZml4Lmxlbmd0aDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1hQmVmb3JlID0gc291cmNlLmluZGV4T2YoJywnLCBwcmVmaXhJZHgpO1xuICAgIGlmIChjb21tYUJlZm9yZSAhPT0gLTEgJiYgY29tbWFCZWZvcmUgPCBiYXNlNjRTdGFydCkge1xuICAgICAgc2NhbkZyb20gPSBiYXNlNjRTdGFydCArIGJhc2U2NE1hcmtlci5sZW5ndGg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZVN0YXJ0ID0gYmFzZTY0U3RhcnQgKyBiYXNlNjRNYXJrZXIubGVuZ3RoO1xuICAgIGxldCB2YWx1ZUVuZCA9IHZhbHVlU3RhcnQ7XG4gICAgd2hpbGUgKHZhbHVlRW5kIDwgc291cmNlLmxlbmd0aCkge1xuICAgICAgaWYgKCFpc0Jhc2U2NENoYXIoc291cmNlLmNoYXJDb2RlQXQodmFsdWVFbmQpKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHZhbHVlRW5kKys7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlRW5kID4gdmFsdWVTdGFydCkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSh2YWx1ZVN0YXJ0LCB2YWx1ZUVuZCk7XG4gICAgfVxuICAgIHNjYW5Gcm9tID0gdmFsdWVFbmQ7XG4gIH1cbn1cblxuLyoqXG4gKiBNZW1vaXplZCBgVHJhY2VNYXAgfCBudWxsYCBwZXIgd29ya2Zsb3cgYnVuZGxlLiBgbnVsbGAgcmVjb3JkcyBcInRoaXMgYnVuZGxlXG4gKiBoYXMgbm8gdXNhYmxlIGlubGluZSBzb3VyY2UgbWFwXCIgc28gcmVwZWF0ZWQgZmFpbHVyZXMgZG9uJ3QgcmVzY2FuIHRoZSB3aG9sZVxuICogKHBvdGVudGlhbGx5IG11bHRpLU1CKSBidW5kbGUgc3RyaW5nIG9yIHJlLXBhcnNlIHRoZSBtYXAuIFRoaXMgbWF0dGVycyBtb3N0XG4gKiBpbiBwcm9kdWN0aW9uLCB3aGVyZSBzb3VyY2UgbWFwcyBhcmUgb2ZmIGJ5IGRlZmF1bHQ6IHRoZSBmaXJzdCBmYWlsdXJlIHNjYW5zXG4gKiBvbmNlIGFuZCBjYWNoZXMgYG51bGxgLCBldmVyeSBsYXRlciBmYWlsdXJlIGlzIE8oMSkuXG4gKlxuICogS2V5ZWQgYnkgdGhlIGJ1bmRsZSBgY29kZWAuIEluc2VydGlvbi1vcmRlcmVkIExSVSBjYXBwZWQgYXQgYE1BWF9UUkFDRVJTYCxcbiAqIG1pcnJvcmluZyBgdm0vc2NyaXB0LWNhY2hlLnRzYDogcHJvZHVjdGlvbiBzZXJ2ZXMgYSBzaW5nbGUgYnVpbGQtdGltZSBidW5kbGVcbiAqIGxpdGVyYWwgZm9yIHRoZSBwcm9jZXNzIGxpZmV0aW1lLCB3aGlsZSBkZXYvd2F0Y2ggcHJvZHVjZXMgYSBuZXcgYnVuZGxlXG4gKiBzdHJpbmcgcGVyIGVkaXQg4oCUIHRoZSBib3VuZCBrZWVwcyB0aGUgZmV3IG1vc3QtcmVjZW50IG9uZXMgYW5kIGV2aWN0cyB0aGVcbiAqIHJlc3QgaW5zdGVhZCBvZiBwaW5uaW5nIGV2ZXJ5IGhpc3RvcmljYWwgdmVyc2lvbi5cbiAqL1xuY29uc3QgdHJhY2VyQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgVHJhY2VNYXAgfCBudWxsPigpO1xuY29uc3QgTUFYX1RSQUNFUlMgPSA4O1xuXG5mdW5jdGlvbiBnZXRUcmFjZU1hcEZvckNvZGUod29ya2Zsb3dDb2RlOiBzdHJpbmcpOiBUcmFjZU1hcCB8IG51bGwge1xuICBjb25zdCBjYWNoZWQgPSB0cmFjZXJDYWNoZS5nZXQod29ya2Zsb3dDb2RlKTtcbiAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gTW92ZSB0byBtb3N0LXJlY2VudGx5LXVzZWQgcG9zaXRpb24gKGVuZCBvZiBpbnNlcnRpb24gb3JkZXIpLlxuICAgIHRyYWNlckNhY2hlLmRlbGV0ZSh3b3JrZmxvd0NvZGUpO1xuICAgIHRyYWNlckNhY2hlLnNldCh3b3JrZmxvd0NvZGUsIGNhY2hlZCk7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuXG4gIGxldCB0cmFjZXI6IFRyYWNlTWFwIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGJhc2U2NCA9IGV4dHJhY3RJbmxpbmVTb3VyY2VNYXBCYXNlNjQod29ya2Zsb3dDb2RlKTtcbiAgaWYgKGJhc2U2NCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzb3VyY2VNYXBKc29uID0gQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBzb3VyY2VNYXBEYXRhID0gSlNPTi5wYXJzZShzb3VyY2VNYXBKc29uKTtcbiAgICAgIC8vIFVzZSBUcmFjZU1hcCAocHVyZSBKUywgbm8gV0FTTSByZXF1aXJlZClcbiAgICAgIHRyYWNlciA9IG5ldyBUcmFjZU1hcChzb3VyY2VNYXBEYXRhKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE1hbGZvcm1lZCBpbmxpbmUgbWFwIOKAlCB0cmVhdCBhcyBhYnNlbnQgc28gd2UgZG9uJ3QgcmV0cnkgcGFyc2luZyBpdC5cbiAgICAgIHRyYWNlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgdHJhY2VyQ2FjaGUuc2V0KHdvcmtmbG93Q29kZSwgdHJhY2VyKTtcbiAgLy8gRXZpY3QgdGhlIGxlYXN0LXJlY2VudGx5LXVzZWQgZW50cmllcyB3aGVuIG92ZXIgdGhlIGNhcC4gTmV3IGVudHJpZXMgYXJlXG4gIC8vIGFwcGVuZGVkIGF0IHRoZSBlbmQsIHNvIHRoZSBvbGRlc3QgbGl2ZSBhdCB0aGUgZnJvbnQuXG4gIHdoaWxlICh0cmFjZXJDYWNoZS5zaXplID4gTUFYX1RSQUNFUlMpIHtcbiAgICBjb25zdCBvbGRlc3QgPSB0cmFjZXJDYWNoZS5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmIChvbGRlc3QgPT09IHVuZGVmaW5lZCkgYnJlYWs7XG4gICAgdHJhY2VyQ2FjaGUuZGVsZXRlKG9sZGVzdCk7XG4gIH1cbiAgcmV0dXJuIHRyYWNlcjtcbn1cblxuLyoqXG4gKiBSZW1hcHMgYW4gZXJyb3Igc3RhY2sgdHJhY2UgdXNpbmcgaW5saW5lIHNvdXJjZSBtYXBzIHRvIHNob3cgb3JpZ2luYWwgc291cmNlIGxvY2F0aW9ucy5cbiAqXG4gKiBEZWdyYWRlcyBncmFjZWZ1bGx5IHdoZW4gdGhlIGJ1bmRsZSBoYXMgbm8gaW5saW5lIHNvdXJjZSBtYXAgKGUuZy4gcHJvZHVjdGlvblxuICogYnVpbGRzLCB3aGVyZSBtYXBzIGFyZSBvZmYgYnkgZGVmYXVsdCk6IHRoZSBvcmlnaW5hbCBzdGFjayBpcyByZXR1cm5lZFxuICogdW5jaGFuZ2VkLiBBIGNoZWFwIGBmaWxlbmFtZWAgcHJlc2VuY2UgY2hlY2sgc2tpcHMgYWxsIHdvcmsgd2hlbiBubyBmcmFtZVxuICogcmVmZXJlbmNlcyB0aGUgd29ya2Zsb3cgZmlsZSwgYW5kIHBhcnNlZCBzb3VyY2UgbWFwcyBhcmUgbWVtb2l6ZWQgcGVyIGJ1bmRsZS5cbiAqXG4gKiBAcGFyYW0gc3RhY2sgLSBUaGUgZXJyb3Igc3RhY2sgdHJhY2UgdG8gcmVtYXBcbiAqIEBwYXJhbSBmaWxlbmFtZSAtIFRoZSB3b3JrZmxvdyBmaWxlbmFtZSB0byBtYXRjaCBpbiBzdGFjayBmcmFtZXNcbiAqIEBwYXJhbSB3b3JrZmxvd0NvZGUgLSBUaGUgd29ya2Zsb3cgYnVuZGxlIGNvZGUgY29udGFpbmluZyBpbmxpbmUgc291cmNlIG1hcHNcbiAqIEByZXR1cm5zIFRoZSByZW1hcHBlZCBzdGFjayB0cmFjZSB3aXRoIG9yaWdpbmFsIHNvdXJjZSBsb2NhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbWFwRXJyb3JTdGFjayhcbiAgc3RhY2s6IHN0cmluZyxcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgd29ya2Zsb3dDb2RlOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIC8vIE5vdGhpbmcgdG8gcmVtYXAgaWYgbm8gZnJhbWUgcmVmZXJlbmNlcyB0aGUgd29ya2Zsb3cgZmlsZS4gQXZvaWRzIHRvdWNoaW5nXG4gIC8vIHRoZSAobGFyZ2UpIGJ1bmRsZSBzdHJpbmcgZW50aXJlbHkgZm9yIGVycm9ycyB0aHJvd24gZWxzZXdoZXJlLlxuICBpZiAoIXN0YWNrLmluY2x1ZGVzKGZpbGVuYW1lKSkge1xuICAgIHJldHVybiBzdGFjaztcbiAgfVxuXG4gIGNvbnN0IHRyYWNlciA9IGdldFRyYWNlTWFwRm9yQ29kZSh3b3JrZmxvd0NvZGUpO1xuICBpZiAoIXRyYWNlcikge1xuICAgIHJldHVybiBzdGFjazsgLy8gTm8gc291cmNlIG1hcCBmb3VuZFxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBQYXJzZSBhbmQgcmVtYXAgZWFjaCBsaW5lIGluIHRoZSBzdGFjayB0cmFjZVxuICAgIGNvbnN0IGxpbmVzID0gc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IHJlbWFwcGVkTGluZXMgPSBsaW5lcy5tYXAoKGxpbmUpID0+IHtcbiAgICAgIC8vIE1hdGNoIHN0YWNrIGZyYW1lczogXCJhdCBmdW5jdGlvbk5hbWUgKGZpbGVuYW1lOmxpbmU6Y29sdW1uKVwiIG9yIFwiYXQgZmlsZW5hbWU6bGluZTpjb2x1bW5cIlxuICAgICAgY29uc3QgZnJhbWVNYXRjaCA9IGxpbmUubWF0Y2goXG4gICAgICAgIC9eXFxzKmF0XFxzKyg/OiguKz8pXFxzK1xcKCk/KC4rPyk6KFxcZCspOihcXGQrKVxcKT8kL1xuICAgICAgKTtcbiAgICAgIGlmICghZnJhbWVNYXRjaCkge1xuICAgICAgICByZXR1cm4gbGluZTsgLy8gTm90IGEgc3RhY2sgZnJhbWUsIHJldHVybiBhcy1pc1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbLCBmdW5jdGlvbk5hbWUsIGZpbGUsIGxpbmVTdHIsIGNvbFN0cl0gPSBmcmFtZU1hdGNoO1xuXG4gICAgICAvLyBPbmx5IHJlbWFwIGZyYW1lcyBmcm9tIG91ciB3b3JrZmxvdyBmaWxlXG4gICAgICBpZiAoIWZpbGUuaW5jbHVkZXMoZmlsZW5hbWUpKSB7XG4gICAgICAgIHJldHVybiBsaW5lO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsaW5lTnVtYmVyID0gcGFyc2VJbnQobGluZVN0ciwgMTApO1xuICAgICAgY29uc3QgY29sdW1uTnVtYmVyID0gcGFyc2VJbnQoY29sU3RyLCAxMCk7XG5cbiAgICAgIC8vIE1hcCB0byBvcmlnaW5hbCBzb3VyY2UgcG9zaXRpb25cbiAgICAgIGNvbnN0IG9yaWdpbmFsID0gb3JpZ2luYWxQb3NpdGlvbkZvcih0cmFjZXIsIHtcbiAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgY29sdW1uOiBjb2x1bW5OdW1iZXIsXG4gICAgICB9KTtcblxuICAgICAgaWYgKG9yaWdpbmFsLnNvdXJjZSAmJiBvcmlnaW5hbC5saW5lICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZ1bmMgPSBmdW5jdGlvbk5hbWUgfHwgb3JpZ2luYWwubmFtZSB8fCAnYW5vbnltb3VzJztcbiAgICAgICAgY29uc3QgY29sID0gb3JpZ2luYWwuY29sdW1uICE9PSBudWxsID8gb3JpZ2luYWwuY29sdW1uIDogY29sdW1uTnVtYmVyO1xuICAgICAgICByZXR1cm4gYCAgICBhdCAke2Z1bmN9ICgke29yaWdpbmFsLnNvdXJjZX06JHtvcmlnaW5hbC5saW5lfToke2NvbH0pYDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpbmU7IC8vIENvdWxkbid0IG1hcCwgcmV0dXJuIG9yaWdpbmFsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVtYXBwZWRMaW5lcy5qb2luKCdcXG4nKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWYgc291cmNlIG1hcCBwcm9jZXNzaW5nIGZhaWxzLCByZXR1cm4gb3JpZ2luYWwgc3RhY2tcbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cbn1cbiJdfQ==
|
package/dist/telemetry.d.ts
CHANGED
|
@@ -42,12 +42,15 @@ export declare function getNextTraceCarrier(traceMode: WorkflowTraceMode, incomi
|
|
|
42
42
|
* Builds the span links for a queue-delivered invocation span
|
|
43
43
|
* (`workflow.execute` / `step.execute`):
|
|
44
44
|
*
|
|
45
|
-
* -
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
45
|
+
* - In `linked` mode the invocation span is a CHILD of the local delivery
|
|
46
|
+
* (flow-route) context, so the only link is to the run-origin context
|
|
47
|
+
* from the message's trace carrier — connecting this bounded per-invocation
|
|
48
|
+
* trace back to where the run was started. The run-origin context is a
|
|
49
|
+
* link, never a parent, and re-enqueues forward the original carrier
|
|
50
|
+
* unchanged, so the whole run is never stitched into one giant trace.
|
|
51
|
+
* The link is skipped when the carrier is absent, empty, or invalid.
|
|
52
|
+
* - In `continuous` mode the run-origin context is restored as the parent
|
|
53
|
+
* instead, and the link points at the incoming delivery context.
|
|
51
54
|
*/
|
|
52
55
|
export declare function buildInvocationSpanLinks(traceMode: WorkflowTraceMode, incomingCarrier: Record<string, string> | undefined): Promise<api.Link[] | undefined>;
|
|
53
56
|
/**
|
package/dist/telemetry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAUtE;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,YAAY,CAAC;AAKxD;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,CAUxD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC1C,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEnC;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,iBAAiB,EAC5B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAClD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAIjC;AAED
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
package/dist/telemetry.js
CHANGED
|
@@ -48,24 +48,21 @@ export function getNextTraceCarrier(traceMode, incomingCarrier) {
|
|
|
48
48
|
* Builds the span links for a queue-delivered invocation span
|
|
49
49
|
* (`workflow.execute` / `step.execute`):
|
|
50
50
|
*
|
|
51
|
-
* -
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
51
|
+
* - In `linked` mode the invocation span is a CHILD of the local delivery
|
|
52
|
+
* (flow-route) context, so the only link is to the run-origin context
|
|
53
|
+
* from the message's trace carrier — connecting this bounded per-invocation
|
|
54
|
+
* trace back to where the run was started. The run-origin context is a
|
|
55
|
+
* link, never a parent, and re-enqueues forward the original carrier
|
|
56
|
+
* unchanged, so the whole run is never stitched into one giant trace.
|
|
57
|
+
* The link is skipped when the carrier is absent, empty, or invalid.
|
|
58
|
+
* - In `continuous` mode the run-origin context is restored as the parent
|
|
59
|
+
* instead, and the link points at the incoming delivery context.
|
|
57
60
|
*/
|
|
58
61
|
export async function buildInvocationSpanLinks(traceMode, incomingCarrier) {
|
|
59
|
-
const deliveryLinks = await linkToCurrentContext();
|
|
60
62
|
if (traceMode !== 'linked')
|
|
61
|
-
return
|
|
63
|
+
return linkToCurrentContext();
|
|
62
64
|
const originLink = await linkToTraceCarrier(isUsableTraceCarrier(incomingCarrier) ? incomingCarrier : undefined);
|
|
63
|
-
|
|
64
|
-
deliveryLinks?.some((link) => link.context.traceId === originLink.context.traceId &&
|
|
65
|
-
link.context.spanId === originLink.context.spanId)) {
|
|
66
|
-
return deliveryLinks;
|
|
67
|
-
}
|
|
68
|
-
return [...(deliveryLinks ?? []), originLink];
|
|
65
|
+
return originLink ? [originLink] : undefined;
|
|
69
66
|
}
|
|
70
67
|
/**
|
|
71
68
|
* Serializes the current trace context into a format that can be passed through queues
|
|
@@ -278,4 +275,4 @@ export async function getWorkflowBaggage() {
|
|
|
278
275
|
workflowName: name,
|
|
279
276
|
};
|
|
280
277
|
}
|
|
281
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlbGVtZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxLQUFLLElBQUksTUFBTSxxQ0FBcUMsQ0FBQztBQW9CNUQseUVBQXlFO0FBQ3pFLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQUV2RDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztJQUM5QyxJQUFJLEtBQUssS0FBSyxZQUFZO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDaEQsSUFBSSxLQUFLLElBQUksS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVFLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxhQUFhLENBQUMsSUFBSSxDQUNoQiwyQ0FBMkMsS0FBSyxpRUFBaUUsQ0FDbEgsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxPQUEyQztJQUUzQyxPQUFPLE9BQU8sS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsU0FBNEIsRUFDNUIsZUFB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QUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQjtJQUd0QyxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDakMsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUU1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbkUsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUUvQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ3pELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBRXRELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFdEMsT0FBTztRQUNMLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBhcGkgZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB0eXBlIHsgU3BhbiwgU3BhbktpbmQsIFNwYW5PcHRpb25zIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB7IG9uY2UgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHsgV29ya2Zsb3dTdXNwZW5zaW9uIH0gZnJvbSAnLi9nbG9iYWwuanMnO1xuaW1wb3J0IHsgcnVudGltZUxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCAqIGFzIEF0dHIgZnJvbSAnLi90ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRyYWNlIENvbnRleHQgUHJvcGFnYXRpb24gVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDb250cm9scyBob3cgd29ya2Zsb3cvc3RlcCBxdWV1ZS1oYW5kbGVyIHNwYW5zIHJlbGF0ZSB0byB0aGUgcnVuLW9yaWdpblxuICogdHJhY2UgY29udGV4dCBjYXJyaWVkIGluIHF1ZXVlIG1lc3NhZ2VzOlxuICpcbiAqIC0gYCdsaW5rZWQnYCAoZGVmYXVsdCk6IGVhY2ggaW52b2NhdGlvbiBzdGFydHMgYSBORVcgcm9vdCB0cmFjZTsgdGhlXG4gKiAgIHJ1bi1vcmlnaW4gY29udGV4dCAoYW5kIHRoZSBpbmNvbWluZyBkZWxpdmVyeSBjb250ZXh0KSBhcmUgYXR0YWNoZWQgYXNcbiAqICAgc3BhbiBsaW5rcy4gVGhpcyBrZWVwcyB0cmFjZXMgYm91bmRlZCBwZXIgaW52b2NhdGlvbiBpbnN0ZWFkIG9mXG4gKiAgIHN0aXRjaGluZyBhIGxvbmctbGl2ZWQgcnVuIGludG8gb25lIGdpYW50IHRyYWNlLlxuICogLSBgJ2NvbnRpbnVvdXMnYDogdGhlIHJlc3RvcmVkIHJ1bi1vcmlnaW4gY29udGV4dCBiZWNvbWVzIHRoZSBwYXJlbnQgb2ZcbiAqICAgdGhlIGludm9jYXRpb24gc3BhbiAobGVnYWN5IGJlaGF2aW9yKSwgcHJvZHVjaW5nIGEgc2luZ2xlIHRyYWNlIHRoYXRcbiAqICAgc3BhbnMgdGhlIGVudGlyZSBydW4uXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtmbG93VHJhY2VNb2RlID0gJ2xpbmtlZCcgfCAnY29udGludW91cyc7XG5cbi8qKiBVbnJlY29nbml6ZWQgYFdPUktGTE9XX1RSQUNFX01PREVgIHZhbHVlcyB3ZSBhbHJlYWR5IHdhcm5lZCBhYm91dC4gKi9cbmNvbnN0IHdhcm5lZFVucmVjb2duaXplZFRyYWNlTW9kZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgYWN0aXZlIHRyYWNlIG1vZGUgZnJvbSB0aGUgYFdPUktGTE9XX1RSQUNFX01PREVgIGVudiB2YXIuXG4gKiBEZWZhdWx0cyB0byBgJ2xpbmtlZCdgOyBhbnkgdmFsdWUgb3RoZXIgdGhhbiBgJ2NvbnRpbnVvdXMnYCBzZWxlY3RzIGl0LlxuICogVW5yZWNvZ25pemVkIG5vbi1lbXB0eSB2YWx1ZXMgKGUuZy4gdHlwb3MgbGlrZSBgY29udGlub3VzYCkgZW1pdCBhXG4gKiBvbmUtdGltZSB3YXJuaW5nIHNvIHNpbGVudCBmYWxsYmFjayB0byBgbGlua2VkYCBpcyBhdCBsZWFzdCB2aXNpYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya2Zsb3dUcmFjZU1vZGUoKTogV29ya2Zsb3dUcmFjZU1vZGUge1xuICBjb25zdCB2YWx1ZSA9IHByb2Nlc3MuZW52LldPUktGTE9XX1RSQUNFX01PREU7XG4gIGlmICh2YWx1ZSA9PT0gJ2NvbnRpbnVvdXMnKSByZXR1cm4gJ2NvbnRpbnVvdXMnO1xuICBpZiAodmFsdWUgJiYgdmFsdWUgIT09ICdsaW5rZWQnICYmICF3YXJuZWRVbnJlY29nbml6ZWRUcmFjZU1vZGVzLmhhcyh2YWx1ZSkpIHtcbiAgICB3YXJuZWRVbnJlY29nbml6ZWRUcmFjZU1vZGVzLmFkZCh2YWx1ZSk7XG4gICAgcnVudGltZUxvZ2dlci53YXJuKFxuICAgICAgYFVucmVjb2duaXplZCBXT1JLRkxPV19UUkFDRV9NT0RFIHZhbHVlIFwiJHt2YWx1ZX1cIjsgZXhwZWN0ZWQgXCJsaW5rZWRcIiBvciBcImNvbnRpbnVvdXNcIi4gRmFsbGluZyBiYWNrIHRvIFwibGlua2VkXCIuYFxuICAgICk7XG4gIH1cbiAgcmV0dXJuICdsaW5rZWQnO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBhIHNlcmlhbGl6ZWQgdHJhY2UgY2FycmllciBpcyB1c2FibGUsIGkuZS4gcHJlc2VudCBhbmRcbiAqIG5vbi1lbXB0eS4gYHNlcmlhbGl6ZVRyYWNlQ2FycmllcigpYCByZXR1cm5zIGB7fWAgd2hlbiBubyBPVEVMIFNESyBpc1xuICogcmVnaXN0ZXJlZCBvciBubyBzcGFuIGlzIGFjdGl2ZSwgYW5kIGBzdGFydCgpYCBhbHdheXMgYXR0YWNoZXMgdGhlXG4gKiBjYXJyaWVyIHRvIHRoZSBmaXJzdCBxdWV1ZSBtZXNzYWdlIOKAlCBzbyBhbiBlbXB0eSBjYXJyaWVyIG11c3QgYmUgdHJlYXRlZFxuICogdGhlIHNhbWUgYXMgYW4gYWJzZW50IG9uZSB3aGVyZXZlciB0aGUgdHJhY2UtbW9kZSBsb2dpYyBicmFuY2hlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVXNhYmxlVHJhY2VDYXJyaWVyKFxuICBjYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkXG4pOiBjYXJyaWVyIGlzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4gY2FycmllciAhPT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKGNhcnJpZXIpLmxlbmd0aCA+IDA7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHJhY2UgY2FycmllciB0byBhdHRhY2ggdG8gbWVzc2FnZXMgdGhlIGN1cnJlbnQgaW52b2NhdGlvblxuICogZW5xdWV1ZXMuIEluIGBsaW5rZWRgIG1vZGUgdGhlIE9SSUdJTkFMIHJ1bi1vcmlnaW4gY2FycmllciBpcyBmb3J3YXJkZWRcbiAqIHVuY2hhbmdlZCAod2hlbiB1c2FibGUpIHNvIGV2ZXJ5IGZ1dHVyZSBpbnZvY2F0aW9uIGxpbmtzIGJhY2sgdG8gdGhlIHNhbWVcbiAqIG9yaWdpbjsgb3RoZXJ3aXNlIOKAlCBgY29udGludW91c2AgbW9kZSwgb3Igbm8gdXNhYmxlIGluY29taW5nIGNhcnJpZXIg4oCUXG4gKiB0aGUgY3VycmVudCAoYWN0aXZlKSBjb250ZXh0IGlzIHNlcmlhbGl6ZWQsIHNvIHRoZSB0cmFjZSBrZWVwcyBjaGFpbmluZ1xuICogKGNvbnRpbnVvdXMpIG9yIHRoZSBmaXJzdCBpbnN0cnVtZW50ZWQgaW52b2NhdGlvbiBiZWNvbWVzIHRoZSBkZS1mYWN0b1xuICogb3JpZ2luIChsaW5rZWQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dFRyYWNlQ2FycmllcihcbiAgdHJhY2VNb2RlOiBXb3JrZmxvd1RyYWNlTW9kZSxcbiAgaW5jb21pbmdDYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgcmV0dXJuIHRyYWNlTW9kZSA9PT0gJ2xpbmtlZCcgJiYgaXNVc2FibGVUcmFjZUNhcnJpZXIoaW5jb21pbmdDYXJyaWVyKVxuICAgID8gUHJvbWlzZS5yZXNvbHZlKGluY29taW5nQ2FycmllcilcbiAgICA6IHNlcmlhbGl6ZVRyYWNlQ2FycmllcigpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgc3BhbiBsaW5rcyBmb3IgYSBxdWV1ZS1kZWxpdmVyZWQgaW52b2NhdGlvbiBzcGFuXG4gKiAoYHdvcmtmbG93LmV4ZWN1dGVgIC8gYHN0ZXAuZXhlY3V0ZWApOlxuICpcbiAqIC0gYSBsaW5rIHRvIHRoZSBpbmNvbWluZyBkZWxpdmVyeSBjb250ZXh0ICh0aGUgYWN0aXZlIHNwYW4gZXh0cmFjdGVkIGZyb21cbiAqICAgdGhlIHF1ZXVlIGRlbGl2ZXJ5IHJlcXVlc3QsIGkuZS4gdGhlIGVucXVldWUgc2l0ZSBvbmNlIHRoZSBxdWV1ZVxuICogICBwcm9wYWdhdGVzIHByb2R1Y2VyIGNvbnRleHQpLCBhbmRcbiAqIC0gaW4gYGxpbmtlZGAgbW9kZSwgYSBsaW5rIHRvIHRoZSBydW4tb3JpZ2luIGNvbnRleHQgZnJvbSB0aGUgbWVzc2FnZSdzXG4gKiAgIHRyYWNlIGNhcnJpZXIgKHNraXBwZWQgd2hlbiBhYnNlbnQsIGVtcHR5LCBpbnZhbGlkLCBvciBpZGVudGljYWwgdG8gdGhlXG4gKiAgIGRlbGl2ZXJ5IGNvbnRleHQpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRJbnZvY2F0aW9uU3BhbkxpbmtzKFxuICB0cmFjZU1vZGU6IFdvcmtmbG93VHJhY2VNb2RlLFxuICBpbmNvbWluZ0NhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IFByb21pc2U8YXBpLkxpbmtbXSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBkZWxpdmVyeUxpbmtzID0gYXdhaXQgbGlua1RvQ3VycmVudENvbnRleHQoKTtcbiAgaWYgKHRyYWNlTW9kZSAhPT0gJ2xpbmtlZCcpIHJldHVybiBkZWxpdmVyeUxpbmtzO1xuICBjb25zdCBvcmlnaW5MaW5rID0gYXdhaXQgbGlua1RvVHJhY2VDYXJyaWVyKFxuICAgIGlzVXNhYmxlVHJhY2VDYXJyaWVyKGluY29taW5nQ2FycmllcikgPyBpbmNvbWluZ0NhcnJpZXIgOiB1bmRlZmluZWRcbiAgKTtcbiAgaWYgKFxuICAgICFvcmlnaW5MaW5rIHx8XG4gICAgZGVsaXZlcnlMaW5rcz8uc29tZShcbiAgICAgIChsaW5rKSA9PlxuICAgICAgICBsaW5rLmNvbnRleHQudHJhY2VJZCA9PT0gb3JpZ2luTGluay5jb250ZXh0LnRyYWNlSWQgJiZcbiAgICAgICAgbGluay5jb250ZXh0LnNwYW5JZCA9PT0gb3JpZ2luTGluay5jb250ZXh0LnNwYW5JZFxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuIGRlbGl2ZXJ5TGlua3M7XG4gIH1cbiAgcmV0dXJuIFsuLi4oZGVsaXZlcnlMaW5rcyA/PyBbXSksIG9yaWdpbkxpbmtdO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGN1cnJlbnQgdHJhY2UgY29udGV4dCBpbnRvIGEgZm9ybWF0IHRoYXQgY2FuIGJlIHBhc3NlZCB0aHJvdWdoIHF1ZXVlc1xuICogQHJldHVybnMgQSByZWNvcmQgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgdGhlIHRyYWNlIGNvbnRleHRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlcmlhbGl6ZVRyYWNlQ2FycmllcigpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3Qgb3RlbCA9IGF3YWl0IE90ZWxBcGkudmFsdWU7XG4gIGlmICghb3RlbCkgcmV0dXJuIHt9O1xuICBjb25zdCBjYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIC8vIEluamVjdCB0aGUgY3VycmVudCBjb250ZXh0IGludG8gdGhlIGNhcnJpZXJcbiAgb3RlbC5wcm9wYWdhdGlvbi5pbmplY3Qob3RlbC5jb250ZXh0LmFjdGl2ZSgpLCBjYXJyaWVyKTtcbiAgcmV0dXJuIGNhcnJpZXI7XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemVzIHRyYWNlIGNvbnRleHQgYW5kIHJldHVybnMgYSBjb250ZXh0IHRoYXQgY2FuIGJlIHVzZWQgdG8gY29udGludWUgdGhlIHRyYWNlXG4gKiBAcGFyYW0gdHJhY2VDYXJyaWVyIFRoZSBzZXJpYWxpemVkIHRyYWNlIGNvbnRleHRcbiAqIEByZXR1cm5zIE9wZW5UZWxlbWV0cnkgY29udGV4dCB3aXRoIHRoZSByZXN0b3JlZCB0cmFjZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVzZXJpYWxpemVUcmFjZUNhcnJpZXIoXG4gIHRyYWNlQ2FycmllcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuKSB7XG4gIGNvbnN0IG90ZWwgPSBhd2FpdCBPdGVsQXBpLnZhbHVlO1xuICBpZiAoIW90ZWwpIHJldHVybjtcbiAgLy8gRXh0cmFjdCB0aGUgY29udGV4dCBmcm9tIHRoZSBjYXJyaWVyXG4gIHJldHVybiBvdGVsLnByb3BhZ2F0aW9uLmV4dHJhY3Qob3RlbC5jb250ZXh0LmFjdGl2ZSgpLCB0cmFjZUNhcnJpZXIpO1xufVxuXG4vKipcbiAqIFJ1bnMgYSBmdW5jdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBkZXNlcmlhbGl6ZWQgdHJhY2VcbiAqIEBwYXJhbSB0cmFjZUNhcnJpZXIgVGhlIHNlcmlhbGl6ZWQgdHJhY2UgY2FycmllciAob3B0aW9uYWwpXG4gKiBAcGFyYW0gZm4gVGhlIGZ1bmN0aW9uIHRvIHJ1biB3aXRoaW4gdGhlIHRyYWNlIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoVHJhY2VDb250ZXh0PFQ+KFxuICB0cmFjZUNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQsXG4gIGZuOiAoKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgaWYgKCF0cmFjZUNhcnJpZXIpIHtcbiAgICByZXR1cm4gZm4oKTtcbiAgfVxuXG4gIGNvbnN0IG90ZWwgPSBhd2FpdCBPdGVsQXBpLnZhbHVlO1xuICBpZiAoIW90ZWwpIHJldHVybiBmbigpO1xuXG4gIGNvbnN0IGV4dHJhY3RlZENvbnRleHQgPSBhd2FpdCBkZXNlcmlhbGl6ZVRyYWNlQ2Fycmllcih0cmFjZUNhcnJpZXIpO1xuICBpZiAoIWV4dHJhY3RlZENvbnRleHQpIHtcbiAgICByZXR1cm4gZm4oKTtcbiAgfVxuXG4gIHJldHVybiBvdGVsLmNvbnRleHQud2l0aChleHRyYWN0ZWRDb250ZXh0LCBhc3luYyAoKSA9PiBhd2FpdCBmbigpKTtcbn1cblxuY29uc3QgT3RlbEFwaSA9IG9uY2UoYXN5bmMgKCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBpbXBvcnQoJ0BvcGVudGVsZW1ldHJ5L2FwaScpO1xuICB9IGNhdGNoIHtcbiAgICBydW50aW1lTG9nZ2VyLmluZm8oJ09wZW5UZWxlbWV0cnkgbm90IGF2YWlsYWJsZSwgdHJhY2luZyB3aWxsIGJlIGRpc2FibGVkJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0pO1xuXG5jb25zdCBUcmFjZXIgPSBvbmNlKGFzeW5jICgpID0+IHtcbiAgY29uc3QgYXBpID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFhcGkpIHJldHVybiBudWxsO1xuICByZXR1cm4gYXBpLnRyYWNlLmdldFRyYWNlcignd29ya2Zsb3cnKTtcbn0pO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhY2U8VD4oXG4gIHNwYW5OYW1lOiBzdHJpbmcsXG4gIC4uLmFyZ3M6XG4gICAgfCBbZm46IChzcGFuPzogU3BhbikgPT4gUHJvbWlzZTxUPl1cbiAgICB8IFtvcHRzOiBTcGFuT3B0aW9ucywgZm46IChzcGFuPzogU3BhbikgPT4gUHJvbWlzZTxUPl1cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBbdHJhY2VyLCBvdGVsXSA9IGF3YWl0IFByb21pc2UuYWxsKFtUcmFjZXIudmFsdWUsIE90ZWxBcGkudmFsdWVdKTtcbiAgY29uc3QgeyBmbiwgb3B0cyB9ID1cbiAgICB0eXBlb2YgYXJnc1swXSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyB7IGZuOiBhcmdzWzBdLCBvcHRzOiB7fSB9XG4gICAgICA6IHsgZm46IGFyZ3NbMV0sIG9wdHM6IGFyZ3NbMF0gfTtcbiAgaWYgKCFmbikgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiB0byB0cmFjZSBtdXN0IGJlIHByb3ZpZGVkJyk7XG5cbiAgaWYgKCF0cmFjZXIgfHwgIW90ZWwpIHtcbiAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgfVxuXG4gIHJldHVybiB0cmFjZXIuc3RhcnRBY3RpdmVTcGFuKHNwYW5OYW1lLCBvcHRzLCBhc3luYyAoc3BhbikgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbihzcGFuKTtcbiAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogb3RlbC5TcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICBjb2RlOiBvdGVsLlNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgICBtZXNzYWdlOiAoZSBhcyBFcnJvcikubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgICAgYXBwbHlXb3JrZmxvd1N1c3BlbnNpb25Ub1NwYW4oZSwgb3RlbCwgc3Bhbik7XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzcGFuLmVuZCgpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbGllcyB3b3JrZmxvdyBzdXNwZW5zaW9uIGF0dHJpYnV0ZXMgdG8gdGhlIGdpdmVuIHNwYW4gaWYgdGhlIGVycm9yIGlzIGEgV29ya2Zsb3dTdXNwZW5zaW9uXG4gKiB3aGljaCBpcyB0ZWNobmljYWxseSBub3QgYW4gZXJyb3IsIGJ1dCBhbiBhbGdlYnJhaWMgZWZmZWN0IGluZGljYXRpbmcgc3VzcGVuc2lvbi5cbiAqL1xuZnVuY3Rpb24gYXBwbHlXb3JrZmxvd1N1c3BlbnNpb25Ub1NwYW4oXG4gIGVycm9yOiB1bmtub3duLFxuICBvdGVsOiB0eXBlb2YgYXBpLFxuICBzcGFuOiBhcGkuU3BhblxuKSB7XG4gIGlmICghZXJyb3IgfHwgIVdvcmtmbG93U3VzcGVuc2lvbi5pcyhlcnJvcikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IG90ZWwuU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgLi4uQXR0ci5Xb3JrZmxvd1N1c3BlbnNpb25TdGF0ZSgnc3VzcGVuZGVkJyksXG4gICAgLi4uQXR0ci5Xb3JrZmxvd1N1c3BlbnNpb25TdGVwQ291bnQoZXJyb3Iuc3RlcENvdW50KSxcbiAgICAuLi5BdHRyLldvcmtmbG93U3VzcGVuc2lvbkhvb2tDb3VudChlcnJvci5ob29rQ291bnQpLFxuICAgIC4uLkF0dHIuV29ya2Zsb3dTdXNwZW5zaW9uV2FpdENvdW50KGVycm9yLndhaXRDb3VudCksXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U3BhbkNvbnRleHRGb3JUcmFjZUNhcnJpZXIoXG4gIGNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbikge1xuICBjb25zdCBbZGVzZXJpYWxpemVkLCBvdGVsXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBkZXNlcmlhbGl6ZVRyYWNlQ2FycmllcihjYXJyaWVyKSxcbiAgICBPdGVsQXBpLnZhbHVlLFxuICBdKTtcbiAgaWYgKCFkZXNlcmlhbGl6ZWQgfHwgIW90ZWwpIHJldHVybjtcbiAgcmV0dXJuIG90ZWwudHJhY2UuZ2V0U3BhbkNvbnRleHQoZGVzZXJpYWxpemVkKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFjdGl2ZVNwYW4oKSB7XG4gIHJldHVybiBhd2FpdCB3aXRoT3RlbCgob3RlbCkgPT4gb3RlbC50cmFjZS5nZXRBY3RpdmVTcGFuKCkpO1xufVxuXG4vKipcbiAqIFdyYXBzIGFsbCBtZXRob2RzIG9mIGFuIG9iamVjdCB3aXRoIHRyYWNpbmcgc3BhbnMuXG4gKiBAcGFyYW0gcHJlZml4IC0gUHJlZml4IGZvciBzcGFuIG5hbWVzIChlLmcuLCBcIldPUkxELnJ1bnNcIilcbiAqIEBwYXJhbSBvIC0gT2JqZWN0IHdpdGggbWV0aG9kcyB0byBpbnN0cnVtZW50XG4gKiBAcmV0dXJucyBJbnN0cnVtZW50ZWQgb2JqZWN0IHdpdGggc2FtZSBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RydW1lbnRPYmplY3Q8VCBleHRlbmRzIG9iamVjdD4ocHJlZml4OiBzdHJpbmcsIG86IFQpOiBUIHtcbiAgY29uc3QgaGFuZGxlcnMgPSB7fSBhcyBUO1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvKSBhcyAoa2V5b2YgVClbXSkge1xuICAgIGlmICh0eXBlb2Ygb1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBoYW5kbGVyc1trZXldID0gb1trZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmID0gb1trZXldO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgaGFuZGxlcnNba2V5XSA9IGFzeW5jICguLi5hcmdzOiBhbnlbXSkgPT5cbiAgICAgICAgdHJhY2UoYCR7cHJlZml4fS4ke1N0cmluZyhrZXkpfWAsIHt9LCAoKSA9PiBmKC4uLmFyZ3MpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhhbmRsZXJzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U3BhbktpbmQoZmllbGQ6IGtleW9mIHR5cGVvZiBTcGFuS2luZCkge1xuICByZXR1cm4gd2l0aE90ZWwoKHgpID0+IHguU3BhbktpbmRbZmllbGRdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhPdGVsPFQ+KFxuICBmbjogKG90ZWw6IHR5cGVvZiBhcGkpID0+IFRcbik6IFByb21pc2U8QXdhaXRlZDxUPiB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gYXdhaXQgZm4ob3RlbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rVG9DdXJyZW50Q29udGV4dCgpOiBQcm9taXNlPFthcGkuTGlua10gfCB1bmRlZmluZWQ+IHtcbiAgcmV0dXJuIHdpdGhPdGVsKChvdGVsKTogW2FwaS5MaW5rXSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IG90ZWwudHJhY2UuZ2V0QWN0aXZlU3BhbigpPy5zcGFuQ29udGV4dCgpO1xuICAgIGlmICghY29udGV4dCkgcmV0dXJuO1xuICAgIHJldHVybiBbeyBjb250ZXh0IH1dO1xuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBzcGFuIGxpbmsgcG9pbnRpbmcgYXQgdGhlIHNwYW4gY29udGV4dCBlbWJlZGRlZCBpbiBhIHNlcmlhbGl6ZWRcbiAqIHRyYWNlIGNhcnJpZXIgKGUuZy4gdGhlIHJ1bi1vcmlnaW4gY29udGV4dCBmbG93aW5nIHRocm91Z2ggcXVldWVcbiAqIG1lc3NhZ2VzKS4gUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIE9URUwgaXMgdW5hdmFpbGFibGUsIHRoZSBjYXJyaWVyIGlzXG4gKiBhYnNlbnQsIG9yIGl0IGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBzcGFuIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaW5rVG9UcmFjZUNhcnJpZXIoXG4gIGNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IFByb21pc2U8YXBpLkxpbmsgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFjYXJyaWVyKSByZXR1cm47XG4gIGNvbnN0IFtjb250ZXh0LCBvdGVsXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBnZXRTcGFuQ29udGV4dEZvclRyYWNlQ2FycmllcihjYXJyaWVyKSxcbiAgICBPdGVsQXBpLnZhbHVlLFxuICBdKTtcbiAgaWYgKCFjb250ZXh0IHx8ICFvdGVsKSByZXR1cm47XG4gIGlmICghb3RlbC50cmFjZS5pc1NwYW5Db250ZXh0VmFsaWQoY29udGV4dCkpIHJldHVybjtcbiAgcmV0dXJuIHsgY29udGV4dCB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJhZ2dhZ2UgUHJvcGFnYXRpb24gVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBXb3JrZmxvdyBjb250ZXh0IHRvIHByb3BhZ2F0ZSB2aWEgYmFnZ2FnZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93QmFnZ2FnZUNvbnRleHQge1xuICB3b3JrZmxvd1J1bklkOiBzdHJpbmc7XG4gIHdvcmtmbG93TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNldHMgd29ya2Zsb3cgY29udGV4dCBhcyBPVEVMIGJhZ2dhZ2UgZm9yIGF1dG9tYXRpYyBwcm9wYWdhdGlvbi5cbiAqIEJhZ2dhZ2UgaXMgcHJvcGFnYXRlZCBhY3Jvc3Mgc2VydmljZSBib3VuZGFyaWVzIHZpYSBIVFRQIGhlYWRlcnMuXG4gKiBAcGFyYW0gY29udGV4dCAtIFdvcmtmbG93IGNvbnRleHQgdG8gc2V0IGFzIGJhZ2dhZ2VcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdG8gcnVuIHdpdGhpbiB0aGUgYmFnZ2FnZSBjb250ZXh0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoV29ya2Zsb3dCYWdnYWdlPFQ+KFxuICBjb250ZXh0OiBXb3JrZmxvd0JhZ2dhZ2VDb250ZXh0LFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IG90ZWwgPSBhd2FpdCBPdGVsQXBpLnZhbHVlO1xuICBpZiAoIW90ZWwpIHJldHVybiBmbigpO1xuXG4gIC8vIENyZWF0ZSBiYWdnYWdlIHdpdGggd29ya2Zsb3cgY29udGV4dFxuICBjb25zdCBiYWdnYWdlID0gb3RlbC5wcm9wYWdhdGlvbi5jcmVhdGVCYWdnYWdlKHtcbiAgICAnd29ya2Zsb3cucnVuX2lkJzogeyB2YWx1ZTogY29udGV4dC53b3JrZmxvd1J1bklkIH0sXG4gICAgJ3dvcmtmbG93Lm5hbWUnOiB7IHZhbHVlOiBjb250ZXh0LndvcmtmbG93TmFtZSB9LFxuICB9KTtcblxuICAvLyBTZXQgYmFnZ2FnZSBpbiBjb250ZXh0IGFuZCBydW4gZnVuY3Rpb25cbiAgY29uc3QgY29udGV4dFdpdGhCYWdnYWdlID0gb3RlbC5wcm9wYWdhdGlvbi5zZXRCYWdnYWdlKFxuICAgIG90ZWwuY29udGV4dC5hY3RpdmUoKSxcbiAgICBiYWdnYWdlXG4gICk7XG5cbiAgcmV0dXJuIG90ZWwuY29udGV4dC53aXRoKGNvbnRleHRXaXRoQmFnZ2FnZSwgKCkgPT4gZm4oKSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHdvcmtmbG93IGNvbnRleHQgZnJvbSBPVEVMIGJhZ2dhZ2UuXG4gKiBAcmV0dXJucyBXb3JrZmxvdyBjb250ZXh0IGlmIHByZXNlbnQgaW4gYmFnZ2FnZSwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V29ya2Zsb3dCYWdnYWdlKCk6IFByb21pc2U8XG4gIFdvcmtmbG93QmFnZ2FnZUNvbnRleHQgfCB1bmRlZmluZWRcbj4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJhZ2dhZ2UgPSBvdGVsLnByb3BhZ2F0aW9uLmdldEJhZ2dhZ2Uob3RlbC5jb250ZXh0LmFjdGl2ZSgpKTtcbiAgaWYgKCFiYWdnYWdlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHJ1bklkID0gYmFnZ2FnZS5nZXRFbnRyeSgnd29ya2Zsb3cucnVuX2lkJyk/LnZhbHVlO1xuICBjb25zdCBuYW1lID0gYmFnZ2FnZS5nZXRFbnRyeSgnd29ya2Zsb3cubmFtZScpPy52YWx1ZTtcblxuICBpZiAoIXJ1bklkIHx8ICFuYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIHJldHVybiB7XG4gICAgd29ya2Zsb3dSdW5JZDogcnVuSWQsXG4gICAgd29ya2Zsb3dOYW1lOiBuYW1lLFxuICB9O1xufVxuIl19
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlbGVtZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxLQUFLLElBQUksTUFBTSxxQ0FBcUMsQ0FBQztBQW9CNUQseUVBQXlFO0FBQ3pFLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQUV2RDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztJQUM5QyxJQUFJLEtBQUssS0FBSyxZQUFZO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDaEQsSUFBSSxLQUFLLElBQUksS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVFLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxhQUFhLENBQUMsSUFBSSxDQUNoQiwyQ0FBMkMsS0FBSyxpRUFBaUUsQ0FDbEgsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxPQUEyQztJQUUzQyxPQUFPLE9BQU8sS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsU0FBNEIsRUFDNUIsZUFB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QUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDekQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLENBQUM7SUFFdEQsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUV0QyxPQUFPO1FBQ0wsYUFBYSxFQUFFLEtBQUs7UUFDcEIsWUFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGFwaSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHR5cGUgeyBTcGFuLCBTcGFuS2luZCwgU3Bhbk9wdGlvbnMgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgb25jZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgeyBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuL2dsb2JhbC5qcyc7XG5pbXBvcnQgeyBydW50aW1lTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0ICogYXMgQXR0ciBmcm9tICcuL3RlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9ucy5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVHJhY2UgQ29udGV4dCBQcm9wYWdhdGlvbiBVdGlsaXRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENvbnRyb2xzIGhvdyB3b3JrZmxvdy9zdGVwIHF1ZXVlLWhhbmRsZXIgc3BhbnMgcmVsYXRlIHRvIHRoZSBydW4tb3JpZ2luXG4gKiB0cmFjZSBjb250ZXh0IGNhcnJpZWQgaW4gcXVldWUgbWVzc2FnZXM6XG4gKlxuICogLSBgJ2xpbmtlZCdgIChkZWZhdWx0KTogZWFjaCBpbnZvY2F0aW9uIHN0YXJ0cyBhIE5FVyByb290IHRyYWNlOyB0aGVcbiAqICAgcnVuLW9yaWdpbiBjb250ZXh0IChhbmQgdGhlIGluY29taW5nIGRlbGl2ZXJ5IGNvbnRleHQpIGFyZSBhdHRhY2hlZCBhc1xuICogICBzcGFuIGxpbmtzLiBUaGlzIGtlZXBzIHRyYWNlcyBib3VuZGVkIHBlciBpbnZvY2F0aW9uIGluc3RlYWQgb2ZcbiAqICAgc3RpdGNoaW5nIGEgbG9uZy1saXZlZCBydW4gaW50byBvbmUgZ2lhbnQgdHJhY2UuXG4gKiAtIGAnY29udGludW91cydgOiB0aGUgcmVzdG9yZWQgcnVuLW9yaWdpbiBjb250ZXh0IGJlY29tZXMgdGhlIHBhcmVudCBvZlxuICogICB0aGUgaW52b2NhdGlvbiBzcGFuIChsZWdhY3kgYmVoYXZpb3IpLCBwcm9kdWNpbmcgYSBzaW5nbGUgdHJhY2UgdGhhdFxuICogICBzcGFucyB0aGUgZW50aXJlIHJ1bi5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya2Zsb3dUcmFjZU1vZGUgPSAnbGlua2VkJyB8ICdjb250aW51b3VzJztcblxuLyoqIFVucmVjb2duaXplZCBgV09SS0ZMT1dfVFJBQ0VfTU9ERWAgdmFsdWVzIHdlIGFscmVhZHkgd2FybmVkIGFib3V0LiAqL1xuY29uc3Qgd2FybmVkVW5yZWNvZ25pemVkVHJhY2VNb2RlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBhY3RpdmUgdHJhY2UgbW9kZSBmcm9tIHRoZSBgV09SS0ZMT1dfVFJBQ0VfTU9ERWAgZW52IHZhci5cbiAqIERlZmF1bHRzIHRvIGAnbGlua2VkJ2A7IGFueSB2YWx1ZSBvdGhlciB0aGFuIGAnY29udGludW91cydgIHNlbGVjdHMgaXQuXG4gKiBVbnJlY29nbml6ZWQgbm9uLWVtcHR5IHZhbHVlcyAoZS5nLiB0eXBvcyBsaWtlIGBjb250aW5vdXNgKSBlbWl0IGFcbiAqIG9uZS10aW1lIHdhcm5pbmcgc28gc2lsZW50IGZhbGxiYWNrIHRvIGBsaW5rZWRgIGlzIGF0IGxlYXN0IHZpc2libGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3JrZmxvd1RyYWNlTW9kZSgpOiBXb3JrZmxvd1RyYWNlTW9kZSB7XG4gIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVFJBQ0VfTU9ERTtcbiAgaWYgKHZhbHVlID09PSAnY29udGludW91cycpIHJldHVybiAnY29udGludW91cyc7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJ2xpbmtlZCcgJiYgIXdhcm5lZFVucmVjb2duaXplZFRyYWNlTW9kZXMuaGFzKHZhbHVlKSkge1xuICAgIHdhcm5lZFVucmVjb2duaXplZFRyYWNlTW9kZXMuYWRkKHZhbHVlKTtcbiAgICBydW50aW1lTG9nZ2VyLndhcm4oXG4gICAgICBgVW5yZWNvZ25pemVkIFdPUktGTE9XX1RSQUNFX01PREUgdmFsdWUgXCIke3ZhbHVlfVwiOyBleHBlY3RlZCBcImxpbmtlZFwiIG9yIFwiY29udGludW91c1wiLiBGYWxsaW5nIGJhY2sgdG8gXCJsaW5rZWRcIi5gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gJ2xpbmtlZCc7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIGEgc2VyaWFsaXplZCB0cmFjZSBjYXJyaWVyIGlzIHVzYWJsZSwgaS5lLiBwcmVzZW50IGFuZFxuICogbm9uLWVtcHR5LiBgc2VyaWFsaXplVHJhY2VDYXJyaWVyKClgIHJldHVybnMgYHt9YCB3aGVuIG5vIE9URUwgU0RLIGlzXG4gKiByZWdpc3RlcmVkIG9yIG5vIHNwYW4gaXMgYWN0aXZlLCBhbmQgYHN0YXJ0KClgIGFsd2F5cyBhdHRhY2hlcyB0aGVcbiAqIGNhcnJpZXIgdG8gdGhlIGZpcnN0IHF1ZXVlIG1lc3NhZ2Ug4oCUIHNvIGFuIGVtcHR5IGNhcnJpZXIgbXVzdCBiZSB0cmVhdGVkXG4gKiB0aGUgc2FtZSBhcyBhbiBhYnNlbnQgb25lIHdoZXJldmVyIHRoZSB0cmFjZS1tb2RlIGxvZ2ljIGJyYW5jaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVc2FibGVUcmFjZUNhcnJpZXIoXG4gIGNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IGNhcnJpZXIgaXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBjYXJyaWVyICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXMoY2FycmllcikubGVuZ3RoID4gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cmFjZSBjYXJyaWVyIHRvIGF0dGFjaCB0byBtZXNzYWdlcyB0aGUgY3VycmVudCBpbnZvY2F0aW9uXG4gKiBlbnF1ZXVlcy4gSW4gYGxpbmtlZGAgbW9kZSB0aGUgT1JJR0lOQUwgcnVuLW9yaWdpbiBjYXJyaWVyIGlzIGZvcndhcmRlZFxuICogdW5jaGFuZ2VkICh3aGVuIHVzYWJsZSkgc28gZXZlcnkgZnV0dXJlIGludm9jYXRpb24gbGlua3MgYmFjayB0byB0aGUgc2FtZVxuICogb3JpZ2luOyBvdGhlcndpc2Ug4oCUIGBjb250aW51b3VzYCBtb2RlLCBvciBubyB1c2FibGUgaW5jb21pbmcgY2FycmllciDigJRcbiAqIHRoZSBjdXJyZW50IChhY3RpdmUpIGNvbnRleHQgaXMgc2VyaWFsaXplZCwgc28gdGhlIHRyYWNlIGtlZXBzIGNoYWluaW5nXG4gKiAoY29udGludW91cykgb3IgdGhlIGZpcnN0IGluc3RydW1lbnRlZCBpbnZvY2F0aW9uIGJlY29tZXMgdGhlIGRlLWZhY3RvXG4gKiBvcmlnaW4gKGxpbmtlZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0VHJhY2VDYXJyaWVyKFxuICB0cmFjZU1vZGU6IFdvcmtmbG93VHJhY2VNb2RlLFxuICBpbmNvbWluZ0NhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICByZXR1cm4gdHJhY2VNb2RlID09PSAnbGlua2VkJyAmJiBpc1VzYWJsZVRyYWNlQ2FycmllcihpbmNvbWluZ0NhcnJpZXIpXG4gICAgPyBQcm9taXNlLnJlc29sdmUoaW5jb21pbmdDYXJyaWVyKVxuICAgIDogc2VyaWFsaXplVHJhY2VDYXJyaWVyKCk7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBzcGFuIGxpbmtzIGZvciBhIHF1ZXVlLWRlbGl2ZXJlZCBpbnZvY2F0aW9uIHNwYW5cbiAqIChgd29ya2Zsb3cuZXhlY3V0ZWAgLyBgc3RlcC5leGVjdXRlYCk6XG4gKlxuICogLSBJbiBgbGlua2VkYCBtb2RlIHRoZSBpbnZvY2F0aW9uIHNwYW4gaXMgYSBDSElMRCBvZiB0aGUgbG9jYWwgZGVsaXZlcnlcbiAqICAgKGZsb3ctcm91dGUpIGNvbnRleHQsIHNvIHRoZSBvbmx5IGxpbmsgaXMgdG8gdGhlIHJ1bi1vcmlnaW4gY29udGV4dFxuICogICBmcm9tIHRoZSBtZXNzYWdlJ3MgdHJhY2UgY2FycmllciDigJQgY29ubmVjdGluZyB0aGlzIGJvdW5kZWQgcGVyLWludm9jYXRpb25cbiAqICAgdHJhY2UgYmFjayB0byB3aGVyZSB0aGUgcnVuIHdhcyBzdGFydGVkLiBUaGUgcnVuLW9yaWdpbiBjb250ZXh0IGlzIGFcbiAqICAgbGluaywgbmV2ZXIgYSBwYXJlbnQsIGFuZCByZS1lbnF1ZXVlcyBmb3J3YXJkIHRoZSBvcmlnaW5hbCBjYXJyaWVyXG4gKiAgIHVuY2hhbmdlZCwgc28gdGhlIHdob2xlIHJ1biBpcyBuZXZlciBzdGl0Y2hlZCBpbnRvIG9uZSBnaWFudCB0cmFjZS5cbiAqICAgVGhlIGxpbmsgaXMgc2tpcHBlZCB3aGVuIHRoZSBjYXJyaWVyIGlzIGFic2VudCwgZW1wdHksIG9yIGludmFsaWQuXG4gKiAtIEluIGBjb250aW51b3VzYCBtb2RlIHRoZSBydW4tb3JpZ2luIGNvbnRleHQgaXMgcmVzdG9yZWQgYXMgdGhlIHBhcmVudFxuICogICBpbnN0ZWFkLCBhbmQgdGhlIGxpbmsgcG9pbnRzIGF0IHRoZSBpbmNvbWluZyBkZWxpdmVyeSBjb250ZXh0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRJbnZvY2F0aW9uU3BhbkxpbmtzKFxuICB0cmFjZU1vZGU6IFdvcmtmbG93VHJhY2VNb2RlLFxuICBpbmNvbWluZ0NhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWRcbik6IFByb21pc2U8YXBpLkxpbmtbXSB8IHVuZGVmaW5lZD4ge1xuICBpZiAodHJhY2VNb2RlICE9PSAnbGlua2VkJykgcmV0dXJuIGxpbmtUb0N1cnJlbnRDb250ZXh0KCk7XG4gIGNvbnN0IG9yaWdpbkxpbmsgPSBhd2FpdCBsaW5rVG9UcmFjZUNhcnJpZXIoXG4gICAgaXNVc2FibGVUcmFjZUNhcnJpZXIoaW5jb21pbmdDYXJyaWVyKSA/IGluY29taW5nQ2FycmllciA6IHVuZGVmaW5lZFxuICApO1xuICByZXR1cm4gb3JpZ2luTGluayA/IFtvcmlnaW5MaW5rXSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBjdXJyZW50IHRyYWNlIGNvbnRleHQgaW50byBhIGZvcm1hdCB0aGF0IGNhbiBiZSBwYXNzZWQgdGhyb3VnaCBxdWV1ZXNcbiAqIEByZXR1cm5zIEEgcmVjb3JkIG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSB0cmFjZSBjb250ZXh0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXJpYWxpemVUcmFjZUNhcnJpZXIoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IG90ZWwgPSBhd2FpdCBPdGVsQXBpLnZhbHVlO1xuICBpZiAoIW90ZWwpIHJldHVybiB7fTtcbiAgY29uc3QgY2FycmllcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAvLyBJbmplY3QgdGhlIGN1cnJlbnQgY29udGV4dCBpbnRvIHRoZSBjYXJyaWVyXG4gIG90ZWwucHJvcGFnYXRpb24uaW5qZWN0KG90ZWwuY29udGV4dC5hY3RpdmUoKSwgY2Fycmllcik7XG4gIHJldHVybiBjYXJyaWVyO1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplcyB0cmFjZSBjb250ZXh0IGFuZCByZXR1cm5zIGEgY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIHRoZSB0cmFjZVxuICogQHBhcmFtIHRyYWNlQ2FycmllciBUaGUgc2VyaWFsaXplZCB0cmFjZSBjb250ZXh0XG4gKiBAcmV0dXJucyBPcGVuVGVsZW1ldHJ5IGNvbnRleHQgd2l0aCB0aGUgcmVzdG9yZWQgdHJhY2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlc2VyaWFsaXplVHJhY2VDYXJyaWVyKFxuICB0cmFjZUNhcnJpZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbikge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm47XG4gIC8vIEV4dHJhY3QgdGhlIGNvbnRleHQgZnJvbSB0aGUgY2FycmllclxuICByZXR1cm4gb3RlbC5wcm9wYWdhdGlvbi5leHRyYWN0KG90ZWwuY29udGV4dC5hY3RpdmUoKSwgdHJhY2VDYXJyaWVyKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgZnVuY3Rpb24gd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgZGVzZXJpYWxpemVkIHRyYWNlXG4gKiBAcGFyYW0gdHJhY2VDYXJyaWVyIFRoZSBzZXJpYWxpemVkIHRyYWNlIGNhcnJpZXIgKG9wdGlvbmFsKVxuICogQHBhcmFtIGZuIFRoZSBmdW5jdGlvbiB0byBydW4gd2l0aGluIHRoZSB0cmFjZSBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFRyYWNlQ29udGV4dDxUPihcbiAgdHJhY2VDYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkLFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGlmICghdHJhY2VDYXJyaWVyKSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gZm4oKTtcblxuICBjb25zdCBleHRyYWN0ZWRDb250ZXh0ID0gYXdhaXQgZGVzZXJpYWxpemVUcmFjZUNhcnJpZXIodHJhY2VDYXJyaWVyKTtcbiAgaWYgKCFleHRyYWN0ZWRDb250ZXh0KSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICByZXR1cm4gb3RlbC5jb250ZXh0LndpdGgoZXh0cmFjdGVkQ29udGV4dCwgYXN5bmMgKCkgPT4gYXdhaXQgZm4oKSk7XG59XG5cbmNvbnN0IE90ZWxBcGkgPSBvbmNlKGFzeW5jICgpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgaW1wb3J0KCdAb3BlbnRlbGVtZXRyeS9hcGknKTtcbiAgfSBjYXRjaCB7XG4gICAgcnVudGltZUxvZ2dlci5pbmZvKCdPcGVuVGVsZW1ldHJ5IG5vdCBhdmFpbGFibGUsIHRyYWNpbmcgd2lsbCBiZSBkaXNhYmxlZCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59KTtcblxuY29uc3QgVHJhY2VyID0gb25jZShhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGFwaSA9IGF3YWl0IE90ZWxBcGkudmFsdWU7XG4gIGlmICghYXBpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGFwaS50cmFjZS5nZXRUcmFjZXIoJ3dvcmtmbG93Jyk7XG59KTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYWNlPFQ+KFxuICBzcGFuTmFtZTogc3RyaW5nLFxuICAuLi5hcmdzOlxuICAgIHwgW2ZuOiAoc3Bhbj86IFNwYW4pID0+IFByb21pc2U8VD5dXG4gICAgfCBbb3B0czogU3Bhbk9wdGlvbnMsIGZuOiAoc3Bhbj86IFNwYW4pID0+IFByb21pc2U8VD5dXG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgW3RyYWNlciwgb3RlbF0gPSBhd2FpdCBQcm9taXNlLmFsbChbVHJhY2VyLnZhbHVlLCBPdGVsQXBpLnZhbHVlXSk7XG4gIGNvbnN0IHsgZm4sIG9wdHMgfSA9XG4gICAgdHlwZW9mIGFyZ3NbMF0gPT09ICdmdW5jdGlvbidcbiAgICAgID8geyBmbjogYXJnc1swXSwgb3B0czoge30gfVxuICAgICAgOiB7IGZuOiBhcmdzWzFdLCBvcHRzOiBhcmdzWzBdIH07XG4gIGlmICghZm4pIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gdG8gdHJhY2UgbXVzdCBiZSBwcm92aWRlZCcpO1xuXG4gIGlmICghdHJhY2VyIHx8ICFvdGVsKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gIH1cblxuICByZXR1cm4gdHJhY2VyLnN0YXJ0QWN0aXZlU3BhbihzcGFuTmFtZSwgb3B0cywgYXN5bmMgKHNwYW4pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oc3Bhbik7XG4gICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IG90ZWwuU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgY29kZTogb3RlbC5TcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogKGUgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICAgIGFwcGx5V29ya2Zsb3dTdXNwZW5zaW9uVG9TcGFuKGUsIG90ZWwsIHNwYW4pO1xuICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc3Bhbi5lbmQoKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgd29ya2Zsb3cgc3VzcGVuc2lvbiBhdHRyaWJ1dGVzIHRvIHRoZSBnaXZlbiBzcGFuIGlmIHRoZSBlcnJvciBpcyBhIFdvcmtmbG93U3VzcGVuc2lvblxuICogd2hpY2ggaXMgdGVjaG5pY2FsbHkgbm90IGFuIGVycm9yLCBidXQgYW4gYWxnZWJyYWljIGVmZmVjdCBpbmRpY2F0aW5nIHN1c3BlbnNpb24uXG4gKi9cbmZ1bmN0aW9uIGFwcGx5V29ya2Zsb3dTdXNwZW5zaW9uVG9TcGFuKFxuICBlcnJvcjogdW5rbm93bixcbiAgb3RlbDogdHlwZW9mIGFwaSxcbiAgc3BhbjogYXBpLlNwYW5cbikge1xuICBpZiAoIWVycm9yIHx8ICFXb3JrZmxvd1N1c3BlbnNpb24uaXMoZXJyb3IpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBvdGVsLlNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgIC4uLkF0dHIuV29ya2Zsb3dTdXNwZW5zaW9uU3RhdGUoJ3N1c3BlbmRlZCcpLFxuICAgIC4uLkF0dHIuV29ya2Zsb3dTdXNwZW5zaW9uU3RlcENvdW50KGVycm9yLnN0ZXBDb3VudCksXG4gICAgLi4uQXR0ci5Xb3JrZmxvd1N1c3BlbnNpb25Ib29rQ291bnQoZXJyb3IuaG9va0NvdW50KSxcbiAgICAuLi5BdHRyLldvcmtmbG93U3VzcGVuc2lvbldhaXRDb3VudChlcnJvci53YWl0Q291bnQpLFxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNwYW5Db250ZXh0Rm9yVHJhY2VDYXJyaWVyKFxuICBjYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4pIHtcbiAgY29uc3QgW2Rlc2VyaWFsaXplZCwgb3RlbF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZGVzZXJpYWxpemVUcmFjZUNhcnJpZXIoY2FycmllciksXG4gICAgT3RlbEFwaS52YWx1ZSxcbiAgXSk7XG4gIGlmICghZGVzZXJpYWxpemVkIHx8ICFvdGVsKSByZXR1cm47XG4gIHJldHVybiBvdGVsLnRyYWNlLmdldFNwYW5Db250ZXh0KGRlc2VyaWFsaXplZCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBY3RpdmVTcGFuKCkge1xuICByZXR1cm4gYXdhaXQgd2l0aE90ZWwoKG90ZWwpID0+IG90ZWwudHJhY2UuZ2V0QWN0aXZlU3BhbigpKTtcbn1cblxuLyoqXG4gKiBXcmFwcyBhbGwgbWV0aG9kcyBvZiBhbiBvYmplY3Qgd2l0aCB0cmFjaW5nIHNwYW5zLlxuICogQHBhcmFtIHByZWZpeCAtIFByZWZpeCBmb3Igc3BhbiBuYW1lcyAoZS5nLiwgXCJXT1JMRC5ydW5zXCIpXG4gKiBAcGFyYW0gbyAtIE9iamVjdCB3aXRoIG1ldGhvZHMgdG8gaW5zdHJ1bWVudFxuICogQHJldHVybnMgSW5zdHJ1bWVudGVkIG9iamVjdCB3aXRoIHNhbWUgaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0cnVtZW50T2JqZWN0PFQgZXh0ZW5kcyBvYmplY3Q+KHByZWZpeDogc3RyaW5nLCBvOiBUKTogVCB7XG4gIGNvbnN0IGhhbmRsZXJzID0ge30gYXMgVDtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobykgYXMgKGtleW9mIFQpW10pIHtcbiAgICBpZiAodHlwZW9mIG9ba2V5XSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaGFuZGxlcnNba2V5XSA9IG9ba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZiA9IG9ba2V5XTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIGhhbmRsZXJzW2tleV0gPSBhc3luYyAoLi4uYXJnczogYW55W10pID0+XG4gICAgICAgIHRyYWNlKGAke3ByZWZpeH0uJHtTdHJpbmcoa2V5KX1gLCB7fSwgKCkgPT4gZiguLi5hcmdzKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBoYW5kbGVycztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNwYW5LaW5kKGZpZWxkOiBrZXlvZiB0eXBlb2YgU3BhbktpbmQpIHtcbiAgcmV0dXJuIHdpdGhPdGVsKCh4KSA9PiB4LlNwYW5LaW5kW2ZpZWxkXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoT3RlbDxUPihcbiAgZm46IChvdGVsOiB0eXBlb2YgYXBpKSA9PiBUXG4pOiBQcm9taXNlPEF3YWl0ZWQ8VD4gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3Qgb3RlbCA9IGF3YWl0IE90ZWxBcGkudmFsdWU7XG4gIGlmICghb3RlbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIGF3YWl0IGZuKG90ZWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua1RvQ3VycmVudENvbnRleHQoKTogUHJvbWlzZTxbYXBpLkxpbmtdIHwgdW5kZWZpbmVkPiB7XG4gIHJldHVybiB3aXRoT3RlbCgob3RlbCk6IFthcGkuTGlua10gfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBvdGVsLnRyYWNlLmdldEFjdGl2ZVNwYW4oKT8uc3BhbkNvbnRleHQoKTtcbiAgICBpZiAoIWNvbnRleHQpIHJldHVybjtcbiAgICByZXR1cm4gW3sgY29udGV4dCB9XTtcbiAgfSk7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgc3BhbiBsaW5rIHBvaW50aW5nIGF0IHRoZSBzcGFuIGNvbnRleHQgZW1iZWRkZWQgaW4gYSBzZXJpYWxpemVkXG4gKiB0cmFjZSBjYXJyaWVyIChlLmcuIHRoZSBydW4tb3JpZ2luIGNvbnRleHQgZmxvd2luZyB0aHJvdWdoIHF1ZXVlXG4gKiBtZXNzYWdlcykuIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiBPVEVMIGlzIHVuYXZhaWxhYmxlLCB0aGUgY2FycmllciBpc1xuICogYWJzZW50LCBvciBpdCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgc3BhbiBjb250ZXh0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlua1RvVHJhY2VDYXJyaWVyKFxuICBjYXJyaWVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPGFwaS5MaW5rIHwgdW5kZWZpbmVkPiB7XG4gIGlmICghY2FycmllcikgcmV0dXJuO1xuICBjb25zdCBbY29udGV4dCwgb3RlbF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZ2V0U3BhbkNvbnRleHRGb3JUcmFjZUNhcnJpZXIoY2FycmllciksXG4gICAgT3RlbEFwaS52YWx1ZSxcbiAgXSk7XG4gIGlmICghY29udGV4dCB8fCAhb3RlbCkgcmV0dXJuO1xuICBpZiAoIW90ZWwudHJhY2UuaXNTcGFuQ29udGV4dFZhbGlkKGNvbnRleHQpKSByZXR1cm47XG4gIHJldHVybiB7IGNvbnRleHQgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCYWdnYWdlIFByb3BhZ2F0aW9uIFV0aWxpdGllc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogV29ya2Zsb3cgY29udGV4dCB0byBwcm9wYWdhdGUgdmlhIGJhZ2dhZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd0JhZ2dhZ2VDb250ZXh0IHtcbiAgd29ya2Zsb3dSdW5JZDogc3RyaW5nO1xuICB3b3JrZmxvd05hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZXRzIHdvcmtmbG93IGNvbnRleHQgYXMgT1RFTCBiYWdnYWdlIGZvciBhdXRvbWF0aWMgcHJvcGFnYXRpb24uXG4gKiBCYWdnYWdlIGlzIHByb3BhZ2F0ZWQgYWNyb3NzIHNlcnZpY2UgYm91bmRhcmllcyB2aWEgSFRUUCBoZWFkZXJzLlxuICogQHBhcmFtIGNvbnRleHQgLSBXb3JrZmxvdyBjb250ZXh0IHRvIHNldCBhcyBiYWdnYWdlXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRvIHJ1biB3aXRoaW4gdGhlIGJhZ2dhZ2UgY29udGV4dFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFdvcmtmbG93QmFnZ2FnZTxUPihcbiAgY29udGV4dDogV29ya2Zsb3dCYWdnYWdlQ29udGV4dCxcbiAgZm46ICgpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBvdGVsID0gYXdhaXQgT3RlbEFwaS52YWx1ZTtcbiAgaWYgKCFvdGVsKSByZXR1cm4gZm4oKTtcblxuICAvLyBDcmVhdGUgYmFnZ2FnZSB3aXRoIHdvcmtmbG93IGNvbnRleHRcbiAgY29uc3QgYmFnZ2FnZSA9IG90ZWwucHJvcGFnYXRpb24uY3JlYXRlQmFnZ2FnZSh7XG4gICAgJ3dvcmtmbG93LnJ1bl9pZCc6IHsgdmFsdWU6IGNvbnRleHQud29ya2Zsb3dSdW5JZCB9LFxuICAgICd3b3JrZmxvdy5uYW1lJzogeyB2YWx1ZTogY29udGV4dC53b3JrZmxvd05hbWUgfSxcbiAgfSk7XG5cbiAgLy8gU2V0IGJhZ2dhZ2UgaW4gY29udGV4dCBhbmQgcnVuIGZ1bmN0aW9uXG4gIGNvbnN0IGNvbnRleHRXaXRoQmFnZ2FnZSA9IG90ZWwucHJvcGFnYXRpb24uc2V0QmFnZ2FnZShcbiAgICBvdGVsLmNvbnRleHQuYWN0aXZlKCksXG4gICAgYmFnZ2FnZVxuICApO1xuXG4gIHJldHVybiBvdGVsLmNvbnRleHQud2l0aChjb250ZXh0V2l0aEJhZ2dhZ2UsICgpID0+IGZuKCkpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB3b3JrZmxvdyBjb250ZXh0IGZyb20gT1RFTCBiYWdnYWdlLlxuICogQHJldHVybnMgV29ya2Zsb3cgY29udGV4dCBpZiBwcmVzZW50IGluIGJhZ2dhZ2UsIHVuZGVmaW5lZCBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdvcmtmbG93QmFnZ2FnZSgpOiBQcm9taXNlPFxuICBXb3JrZmxvd0JhZ2dhZ2VDb250ZXh0IHwgdW5kZWZpbmVkXG4+IHtcbiAgY29uc3Qgb3RlbCA9IGF3YWl0IE90ZWxBcGkudmFsdWU7XG4gIGlmICghb3RlbCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBiYWdnYWdlID0gb3RlbC5wcm9wYWdhdGlvbi5nZXRCYWdnYWdlKG90ZWwuY29udGV4dC5hY3RpdmUoKSk7XG4gIGlmICghYmFnZ2FnZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBydW5JZCA9IGJhZ2dhZ2UuZ2V0RW50cnkoJ3dvcmtmbG93LnJ1bl9pZCcpPy52YWx1ZTtcbiAgY29uc3QgbmFtZSA9IGJhZ2dhZ2UuZ2V0RW50cnkoJ3dvcmtmbG93Lm5hbWUnKT8udmFsdWU7XG5cbiAgaWYgKCFydW5JZCB8fCAhbmFtZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICByZXR1cm4ge1xuICAgIHdvcmtmbG93UnVuSWQ6IHJ1bklkLFxuICAgIHdvcmtmbG93TmFtZTogbmFtZSxcbiAgfTtcbn1cbiJdfQ==
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "5.0.0-beta.
|
|
1
|
+
export declare const version = "5.0.0-beta.20";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Generated by genversion.
|
|
2
|
-
export const version = '5.0.0-beta.
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const version = '5.0.0-beta.20';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUMzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGdlbnZlcnNpb24uXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICc1LjAuMC1iZXRhLjIwJ1xuIl19
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type Context, Script } from 'node:vm';
|
|
2
|
+
/**
|
|
3
|
+
* Returns a compiled `vm.Script` for the given workflow bundle code and
|
|
4
|
+
* filename, compiling and caching it on first use. Subsequent calls with the
|
|
5
|
+
* same `(code, filename)` return the cached `Script`.
|
|
6
|
+
*
|
|
7
|
+
* The returned `Script` is not yet bound to any context; the caller runs it
|
|
8
|
+
* against a specific VM context via `script.runInContext(context)`. This is
|
|
9
|
+
* equivalent to `vm.runInContext(code, context, { filename })` but skips the
|
|
10
|
+
* recompile.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getCachedWorkflowScript(code: string, filename: string): Script;
|
|
13
|
+
/**
|
|
14
|
+
* Runs the cached workflow-bundle `Script` against `context`. Compiles and
|
|
15
|
+
* caches the `Script` on first use for the given `(code, filename)`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function runCachedWorkflowScript(code: string, filename: string, context: Context): unknown;
|
|
18
|
+
/**
|
|
19
|
+
* Clears the compiled-script cache. Intended for tests that want to assert
|
|
20
|
+
* compile-vs-cache behaviour in isolation; not used on the hot path.
|
|
21
|
+
*/
|
|
22
|
+
export declare function clearWorkflowScriptCache(): void;
|
|
23
|
+
/**
|
|
24
|
+
* Number of distinct bundle (`code`) versions currently retained. Exposed for
|
|
25
|
+
* tests asserting the LRU bound; not used on the hot path.
|
|
26
|
+
*/
|
|
27
|
+
export declare function workflowScriptCacheSize(): number;
|
|
28
|
+
//# sourceMappingURL=script-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-cache.d.ts","sourceRoot":"","sources":["../../src/vm/script-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AA0F/C;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,MAAM,CAqBR;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,OAAO,CAET;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { Script } from 'node:vm';
|
|
2
|
+
/**
|
|
3
|
+
* Module-level cache of compiled workflow-bundle `vm.Script` objects.
|
|
4
|
+
*
|
|
5
|
+
* Why this exists
|
|
6
|
+
* ---------------
|
|
7
|
+
* Replaying a workflow re-evaluates the workflow bundle against a fresh VM
|
|
8
|
+
* context on every iteration of the inline replay loop (see
|
|
9
|
+
* `runWorkflow` in `../workflow.ts`). The bundle is a single string that
|
|
10
|
+
* contains every workflow function in the app and registers them on
|
|
11
|
+
* `globalThis.__private_workflows`. Previously each replay called
|
|
12
|
+
* `vm.runInContext(workflowCode, context, { filename })`, which RE-PARSES and
|
|
13
|
+
* RE-COMPILES the entire bundle every time — O(N) full re-parses for a
|
|
14
|
+
* sequential workflow of N steps, plus the same parse cost repeated across
|
|
15
|
+
* every invocation in the process.
|
|
16
|
+
*
|
|
17
|
+
* Compilation is a pure function of `(code, filename)`: a `vm.Script` carries
|
|
18
|
+
* no realm/context state — it is only bound to a context at `runInContext`
|
|
19
|
+
* time. So a single compiled `Script` can be reused across replays AND across
|
|
20
|
+
* workflow invocations in the same process without affecting determinism: the
|
|
21
|
+
* produced workflow function is identical to the previous re-parse-every-time
|
|
22
|
+
* behaviour, with identical `filename` source attribution (see the precise
|
|
23
|
+
* claim — and its one caveat — in `runWorkflow`).
|
|
24
|
+
*
|
|
25
|
+
* Keying
|
|
26
|
+
* ------
|
|
27
|
+
* Keyed by `code` then `filename`. The `filename` is part of the key on
|
|
28
|
+
* purpose, NOT as a dedupe key: it is baked into the compiled script's source
|
|
29
|
+
* attribution and surfaces in stack traces, where `remapErrorStack` keys on it
|
|
30
|
+
* to map frames back to the user's source. Two workflows in the same bundle
|
|
31
|
+
* share the same `code` but have different `filename`s, so they intentionally
|
|
32
|
+
* compile to distinct `Script`s — collapsing them onto a single shared `Script`
|
|
33
|
+
* would misattribute one workflow's stack frames to another file. The cost of
|
|
34
|
+
* keeping them distinct is that the whole bundle is compiled once per distinct
|
|
35
|
+
* `filename` (not once per bundle); in practice that is bounded by the number
|
|
36
|
+
* of source files that define a workflow, and because V8 lazily compiles
|
|
37
|
+
* function bodies the duplicated work is the (cheap) top-level parse, not full
|
|
38
|
+
* per-workflow codegen.
|
|
39
|
+
*
|
|
40
|
+
* We use a nested Map (code -> filename -> Script) so that evicting a bundle
|
|
41
|
+
* (e.g. a new deployment/hot-reload producing a different `code`) drops the old
|
|
42
|
+
* code string and all of its per-filename scripts together.
|
|
43
|
+
*
|
|
44
|
+
* Bounding
|
|
45
|
+
* --------
|
|
46
|
+
* The top-level (`code`-keyed) map is an insertion-ordered LRU capped at
|
|
47
|
+
* `MAX_BUNDLES` entries. In production this bound is never reached: a
|
|
48
|
+
* deployment is its own process serving exactly one build-time bundle literal
|
|
49
|
+
* (skew protection runs old versions as separate processes), so there is a
|
|
50
|
+
* single `code` key for the process lifetime. The bound exists for dev/watch
|
|
51
|
+
* mode, where the dev route re-reads `workflowCode` from disk and re-invokes
|
|
52
|
+
* the entrypoint on every edit — each edit produces a NEW bundle string, which
|
|
53
|
+
* without a bound would pin every historical version forever (~0.8MB per edit,
|
|
54
|
+
* growing monotonically with edit count). The dev path only ever needs the
|
|
55
|
+
* latest bundle, so an LRU that keeps the few most-recent bundles and evicts
|
|
56
|
+
* the rest preserves the pre-cache GC behaviour while still serving the
|
|
57
|
+
* steady-state single-bundle case for free. The per-`filename` inner map is not
|
|
58
|
+
* separately bounded: it is naturally bounded by the (small) number of workflow
|
|
59
|
+
* source files in a bundle and is dropped wholesale when its parent `code`
|
|
60
|
+
* entry is evicted.
|
|
61
|
+
*/
|
|
62
|
+
const scriptCache = new Map();
|
|
63
|
+
/**
|
|
64
|
+
* Max number of distinct bundle (`code`) versions to retain. One is enough for
|
|
65
|
+
* production; a handful covers pathological dev hot-reload / repeated-rebuild
|
|
66
|
+
* churn within a single long-lived process (e.g. a watch session or a test
|
|
67
|
+
* file) without unbounded growth. Kept deliberately small — there is no value
|
|
68
|
+
* in retaining stale bundles, only a memory cost.
|
|
69
|
+
*/
|
|
70
|
+
const MAX_BUNDLES = 8;
|
|
71
|
+
/**
|
|
72
|
+
* Looks up the per-filename map for `code`, marking it most-recently-used.
|
|
73
|
+
* Relies on `Map` preserving insertion order: deleting and re-inserting an
|
|
74
|
+
* existing key moves it to the end (newest), so the first key is always the
|
|
75
|
+
* least-recently-used eviction candidate.
|
|
76
|
+
*/
|
|
77
|
+
function touchBundle(code) {
|
|
78
|
+
const byFilename = scriptCache.get(code);
|
|
79
|
+
if (byFilename === undefined) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
// Move to the most-recently-used position (end of insertion order).
|
|
83
|
+
scriptCache.delete(code);
|
|
84
|
+
scriptCache.set(code, byFilename);
|
|
85
|
+
return byFilename;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Returns a compiled `vm.Script` for the given workflow bundle code and
|
|
89
|
+
* filename, compiling and caching it on first use. Subsequent calls with the
|
|
90
|
+
* same `(code, filename)` return the cached `Script`.
|
|
91
|
+
*
|
|
92
|
+
* The returned `Script` is not yet bound to any context; the caller runs it
|
|
93
|
+
* against a specific VM context via `script.runInContext(context)`. This is
|
|
94
|
+
* equivalent to `vm.runInContext(code, context, { filename })` but skips the
|
|
95
|
+
* recompile.
|
|
96
|
+
*/
|
|
97
|
+
export function getCachedWorkflowScript(code, filename) {
|
|
98
|
+
let byFilename = touchBundle(code);
|
|
99
|
+
if (byFilename === undefined) {
|
|
100
|
+
byFilename = new Map();
|
|
101
|
+
scriptCache.set(code, byFilename);
|
|
102
|
+
// Evict the least-recently-used bundle(s) when over the cap. New bundles
|
|
103
|
+
// are appended at the end, so the oldest live at the front.
|
|
104
|
+
while (scriptCache.size > MAX_BUNDLES) {
|
|
105
|
+
const oldest = scriptCache.keys().next().value;
|
|
106
|
+
if (oldest === undefined) {
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
scriptCache.delete(oldest);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
let script = byFilename.get(filename);
|
|
113
|
+
if (script === undefined) {
|
|
114
|
+
script = new Script(code, { filename });
|
|
115
|
+
byFilename.set(filename, script);
|
|
116
|
+
}
|
|
117
|
+
return script;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Runs the cached workflow-bundle `Script` against `context`. Compiles and
|
|
121
|
+
* caches the `Script` on first use for the given `(code, filename)`.
|
|
122
|
+
*/
|
|
123
|
+
export function runCachedWorkflowScript(code, filename, context) {
|
|
124
|
+
return getCachedWorkflowScript(code, filename).runInContext(context);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Clears the compiled-script cache. Intended for tests that want to assert
|
|
128
|
+
* compile-vs-cache behaviour in isolation; not used on the hot path.
|
|
129
|
+
*/
|
|
130
|
+
export function clearWorkflowScriptCache() {
|
|
131
|
+
scriptCache.clear();
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Number of distinct bundle (`code`) versions currently retained. Exposed for
|
|
135
|
+
* tests asserting the LRU bound; not used on the hot path.
|
|
136
|
+
*/
|
|
137
|
+
export function workflowScriptCacheSize() {
|
|
138
|
+
return scriptCache.size;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZtL3NjcmlwdC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyREc7QUFDSCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBK0IsQ0FBQztBQUUzRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFFdEI7Ozs7O0dBS0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFZO0lBQy9CLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDN0IsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELG9FQUFvRTtJQUNwRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLElBQVksRUFDWixRQUFnQjtJQUVoQixJQUFJLFVBQVUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDN0IsVUFBVSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBQ3ZDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLHlFQUF5RTtRQUN6RSw0REFBNEQ7UUFDNUQsT0FBTyxXQUFXLENBQUMsSUFBSSxHQUFHLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDL0MsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU07WUFDUixDQUFDO1lBQ0QsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDekIsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDeEMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLElBQVksRUFDWixRQUFnQixFQUNoQixPQUFnQjtJQUVoQixPQUFPLHVCQUF1QixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSx3QkFBd0I7SUFDdEMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDb250ZXh0LCBTY3JpcHQgfSBmcm9tICdub2RlOnZtJztcblxuLyoqXG4gKiBNb2R1bGUtbGV2ZWwgY2FjaGUgb2YgY29tcGlsZWQgd29ya2Zsb3ctYnVuZGxlIGB2bS5TY3JpcHRgIG9iamVjdHMuXG4gKlxuICogV2h5IHRoaXMgZXhpc3RzXG4gKiAtLS0tLS0tLS0tLS0tLS1cbiAqIFJlcGxheWluZyBhIHdvcmtmbG93IHJlLWV2YWx1YXRlcyB0aGUgd29ya2Zsb3cgYnVuZGxlIGFnYWluc3QgYSBmcmVzaCBWTVxuICogY29udGV4dCBvbiBldmVyeSBpdGVyYXRpb24gb2YgdGhlIGlubGluZSByZXBsYXkgbG9vcCAoc2VlXG4gKiBgcnVuV29ya2Zsb3dgIGluIGAuLi93b3JrZmxvdy50c2ApLiBUaGUgYnVuZGxlIGlzIGEgc2luZ2xlIHN0cmluZyB0aGF0XG4gKiBjb250YWlucyBldmVyeSB3b3JrZmxvdyBmdW5jdGlvbiBpbiB0aGUgYXBwIGFuZCByZWdpc3RlcnMgdGhlbSBvblxuICogYGdsb2JhbFRoaXMuX19wcml2YXRlX3dvcmtmbG93c2AuIFByZXZpb3VzbHkgZWFjaCByZXBsYXkgY2FsbGVkXG4gKiBgdm0ucnVuSW5Db250ZXh0KHdvcmtmbG93Q29kZSwgY29udGV4dCwgeyBmaWxlbmFtZSB9KWAsIHdoaWNoIFJFLVBBUlNFUyBhbmRcbiAqIFJFLUNPTVBJTEVTIHRoZSBlbnRpcmUgYnVuZGxlIGV2ZXJ5IHRpbWUg4oCUIE8oTikgZnVsbCByZS1wYXJzZXMgZm9yIGFcbiAqIHNlcXVlbnRpYWwgd29ya2Zsb3cgb2YgTiBzdGVwcywgcGx1cyB0aGUgc2FtZSBwYXJzZSBjb3N0IHJlcGVhdGVkIGFjcm9zc1xuICogZXZlcnkgaW52b2NhdGlvbiBpbiB0aGUgcHJvY2Vzcy5cbiAqXG4gKiBDb21waWxhdGlvbiBpcyBhIHB1cmUgZnVuY3Rpb24gb2YgYChjb2RlLCBmaWxlbmFtZSlgOiBhIGB2bS5TY3JpcHRgIGNhcnJpZXNcbiAqIG5vIHJlYWxtL2NvbnRleHQgc3RhdGUg4oCUIGl0IGlzIG9ubHkgYm91bmQgdG8gYSBjb250ZXh0IGF0IGBydW5JbkNvbnRleHRgXG4gKiB0aW1lLiBTbyBhIHNpbmdsZSBjb21waWxlZCBgU2NyaXB0YCBjYW4gYmUgcmV1c2VkIGFjcm9zcyByZXBsYXlzIEFORCBhY3Jvc3NcbiAqIHdvcmtmbG93IGludm9jYXRpb25zIGluIHRoZSBzYW1lIHByb2Nlc3Mgd2l0aG91dCBhZmZlY3RpbmcgZGV0ZXJtaW5pc206IHRoZVxuICogcHJvZHVjZWQgd29ya2Zsb3cgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBwcmV2aW91cyByZS1wYXJzZS1ldmVyeS10aW1lXG4gKiBiZWhhdmlvdXIsIHdpdGggaWRlbnRpY2FsIGBmaWxlbmFtZWAgc291cmNlIGF0dHJpYnV0aW9uIChzZWUgdGhlIHByZWNpc2VcbiAqIGNsYWltIOKAlCBhbmQgaXRzIG9uZSBjYXZlYXQg4oCUIGluIGBydW5Xb3JrZmxvd2ApLlxuICpcbiAqIEtleWluZ1xuICogLS0tLS0tXG4gKiBLZXllZCBieSBgY29kZWAgdGhlbiBgZmlsZW5hbWVgLiBUaGUgYGZpbGVuYW1lYCBpcyBwYXJ0IG9mIHRoZSBrZXkgb25cbiAqIHB1cnBvc2UsIE5PVCBhcyBhIGRlZHVwZSBrZXk6IGl0IGlzIGJha2VkIGludG8gdGhlIGNvbXBpbGVkIHNjcmlwdCdzIHNvdXJjZVxuICogYXR0cmlidXRpb24gYW5kIHN1cmZhY2VzIGluIHN0YWNrIHRyYWNlcywgd2hlcmUgYHJlbWFwRXJyb3JTdGFja2Aga2V5cyBvbiBpdFxuICogdG8gbWFwIGZyYW1lcyBiYWNrIHRvIHRoZSB1c2VyJ3Mgc291cmNlLiBUd28gd29ya2Zsb3dzIGluIHRoZSBzYW1lIGJ1bmRsZVxuICogc2hhcmUgdGhlIHNhbWUgYGNvZGVgIGJ1dCBoYXZlIGRpZmZlcmVudCBgZmlsZW5hbWVgcywgc28gdGhleSBpbnRlbnRpb25hbGx5XG4gKiBjb21waWxlIHRvIGRpc3RpbmN0IGBTY3JpcHRgcyDigJQgY29sbGFwc2luZyB0aGVtIG9udG8gYSBzaW5nbGUgc2hhcmVkIGBTY3JpcHRgXG4gKiB3b3VsZCBtaXNhdHRyaWJ1dGUgb25lIHdvcmtmbG93J3Mgc3RhY2sgZnJhbWVzIHRvIGFub3RoZXIgZmlsZS4gVGhlIGNvc3Qgb2ZcbiAqIGtlZXBpbmcgdGhlbSBkaXN0aW5jdCBpcyB0aGF0IHRoZSB3aG9sZSBidW5kbGUgaXMgY29tcGlsZWQgb25jZSBwZXIgZGlzdGluY3RcbiAqIGBmaWxlbmFtZWAgKG5vdCBvbmNlIHBlciBidW5kbGUpOyBpbiBwcmFjdGljZSB0aGF0IGlzIGJvdW5kZWQgYnkgdGhlIG51bWJlclxuICogb2Ygc291cmNlIGZpbGVzIHRoYXQgZGVmaW5lIGEgd29ya2Zsb3csIGFuZCBiZWNhdXNlIFY4IGxhemlseSBjb21waWxlc1xuICogZnVuY3Rpb24gYm9kaWVzIHRoZSBkdXBsaWNhdGVkIHdvcmsgaXMgdGhlIChjaGVhcCkgdG9wLWxldmVsIHBhcnNlLCBub3QgZnVsbFxuICogcGVyLXdvcmtmbG93IGNvZGVnZW4uXG4gKlxuICogV2UgdXNlIGEgbmVzdGVkIE1hcCAoY29kZSAtPiBmaWxlbmFtZSAtPiBTY3JpcHQpIHNvIHRoYXQgZXZpY3RpbmcgYSBidW5kbGVcbiAqIChlLmcuIGEgbmV3IGRlcGxveW1lbnQvaG90LXJlbG9hZCBwcm9kdWNpbmcgYSBkaWZmZXJlbnQgYGNvZGVgKSBkcm9wcyB0aGUgb2xkXG4gKiBjb2RlIHN0cmluZyBhbmQgYWxsIG9mIGl0cyBwZXItZmlsZW5hbWUgc2NyaXB0cyB0b2dldGhlci5cbiAqXG4gKiBCb3VuZGluZ1xuICogLS0tLS0tLS1cbiAqIFRoZSB0b3AtbGV2ZWwgKGBjb2RlYC1rZXllZCkgbWFwIGlzIGFuIGluc2VydGlvbi1vcmRlcmVkIExSVSBjYXBwZWQgYXRcbiAqIGBNQVhfQlVORExFU2AgZW50cmllcy4gSW4gcHJvZHVjdGlvbiB0aGlzIGJvdW5kIGlzIG5ldmVyIHJlYWNoZWQ6IGFcbiAqIGRlcGxveW1lbnQgaXMgaXRzIG93biBwcm9jZXNzIHNlcnZpbmcgZXhhY3RseSBvbmUgYnVpbGQtdGltZSBidW5kbGUgbGl0ZXJhbFxuICogKHNrZXcgcHJvdGVjdGlvbiBydW5zIG9sZCB2ZXJzaW9ucyBhcyBzZXBhcmF0ZSBwcm9jZXNzZXMpLCBzbyB0aGVyZSBpcyBhXG4gKiBzaW5nbGUgYGNvZGVgIGtleSBmb3IgdGhlIHByb2Nlc3MgbGlmZXRpbWUuIFRoZSBib3VuZCBleGlzdHMgZm9yIGRldi93YXRjaFxuICogbW9kZSwgd2hlcmUgdGhlIGRldiByb3V0ZSByZS1yZWFkcyBgd29ya2Zsb3dDb2RlYCBmcm9tIGRpc2sgYW5kIHJlLWludm9rZXNcbiAqIHRoZSBlbnRyeXBvaW50IG9uIGV2ZXJ5IGVkaXQg4oCUIGVhY2ggZWRpdCBwcm9kdWNlcyBhIE5FVyBidW5kbGUgc3RyaW5nLCB3aGljaFxuICogd2l0aG91dCBhIGJvdW5kIHdvdWxkIHBpbiBldmVyeSBoaXN0b3JpY2FsIHZlcnNpb24gZm9yZXZlciAofjAuOE1CIHBlciBlZGl0LFxuICogZ3Jvd2luZyBtb25vdG9uaWNhbGx5IHdpdGggZWRpdCBjb3VudCkuIFRoZSBkZXYgcGF0aCBvbmx5IGV2ZXIgbmVlZHMgdGhlXG4gKiBsYXRlc3QgYnVuZGxlLCBzbyBhbiBMUlUgdGhhdCBrZWVwcyB0aGUgZmV3IG1vc3QtcmVjZW50IGJ1bmRsZXMgYW5kIGV2aWN0c1xuICogdGhlIHJlc3QgcHJlc2VydmVzIHRoZSBwcmUtY2FjaGUgR0MgYmVoYXZpb3VyIHdoaWxlIHN0aWxsIHNlcnZpbmcgdGhlXG4gKiBzdGVhZHktc3RhdGUgc2luZ2xlLWJ1bmRsZSBjYXNlIGZvciBmcmVlLiBUaGUgcGVyLWBmaWxlbmFtZWAgaW5uZXIgbWFwIGlzIG5vdFxuICogc2VwYXJhdGVseSBib3VuZGVkOiBpdCBpcyBuYXR1cmFsbHkgYm91bmRlZCBieSB0aGUgKHNtYWxsKSBudW1iZXIgb2Ygd29ya2Zsb3dcbiAqIHNvdXJjZSBmaWxlcyBpbiBhIGJ1bmRsZSBhbmQgaXMgZHJvcHBlZCB3aG9sZXNhbGUgd2hlbiBpdHMgcGFyZW50IGBjb2RlYFxuICogZW50cnkgaXMgZXZpY3RlZC5cbiAqL1xuY29uc3Qgc2NyaXB0Q2FjaGUgPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgU2NyaXB0Pj4oKTtcblxuLyoqXG4gKiBNYXggbnVtYmVyIG9mIGRpc3RpbmN0IGJ1bmRsZSAoYGNvZGVgKSB2ZXJzaW9ucyB0byByZXRhaW4uIE9uZSBpcyBlbm91Z2ggZm9yXG4gKiBwcm9kdWN0aW9uOyBhIGhhbmRmdWwgY292ZXJzIHBhdGhvbG9naWNhbCBkZXYgaG90LXJlbG9hZCAvIHJlcGVhdGVkLXJlYnVpbGRcbiAqIGNodXJuIHdpdGhpbiBhIHNpbmdsZSBsb25nLWxpdmVkIHByb2Nlc3MgKGUuZy4gYSB3YXRjaCBzZXNzaW9uIG9yIGEgdGVzdFxuICogZmlsZSkgd2l0aG91dCB1bmJvdW5kZWQgZ3Jvd3RoLiBLZXB0IGRlbGliZXJhdGVseSBzbWFsbCDigJQgdGhlcmUgaXMgbm8gdmFsdWVcbiAqIGluIHJldGFpbmluZyBzdGFsZSBidW5kbGVzLCBvbmx5IGEgbWVtb3J5IGNvc3QuXG4gKi9cbmNvbnN0IE1BWF9CVU5ETEVTID0gODtcblxuLyoqXG4gKiBMb29rcyB1cCB0aGUgcGVyLWZpbGVuYW1lIG1hcCBmb3IgYGNvZGVgLCBtYXJraW5nIGl0IG1vc3QtcmVjZW50bHktdXNlZC5cbiAqIFJlbGllcyBvbiBgTWFwYCBwcmVzZXJ2aW5nIGluc2VydGlvbiBvcmRlcjogZGVsZXRpbmcgYW5kIHJlLWluc2VydGluZyBhblxuICogZXhpc3Rpbmcga2V5IG1vdmVzIGl0IHRvIHRoZSBlbmQgKG5ld2VzdCksIHNvIHRoZSBmaXJzdCBrZXkgaXMgYWx3YXlzIHRoZVxuICogbGVhc3QtcmVjZW50bHktdXNlZCBldmljdGlvbiBjYW5kaWRhdGUuXG4gKi9cbmZ1bmN0aW9uIHRvdWNoQnVuZGxlKGNvZGU6IHN0cmluZyk6IE1hcDxzdHJpbmcsIFNjcmlwdD4gfCB1bmRlZmluZWQge1xuICBjb25zdCBieUZpbGVuYW1lID0gc2NyaXB0Q2FjaGUuZ2V0KGNvZGUpO1xuICBpZiAoYnlGaWxlbmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvLyBNb3ZlIHRvIHRoZSBtb3N0LXJlY2VudGx5LXVzZWQgcG9zaXRpb24gKGVuZCBvZiBpbnNlcnRpb24gb3JkZXIpLlxuICBzY3JpcHRDYWNoZS5kZWxldGUoY29kZSk7XG4gIHNjcmlwdENhY2hlLnNldChjb2RlLCBieUZpbGVuYW1lKTtcbiAgcmV0dXJuIGJ5RmlsZW5hbWU7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNvbXBpbGVkIGB2bS5TY3JpcHRgIGZvciB0aGUgZ2l2ZW4gd29ya2Zsb3cgYnVuZGxlIGNvZGUgYW5kXG4gKiBmaWxlbmFtZSwgY29tcGlsaW5nIGFuZCBjYWNoaW5nIGl0IG9uIGZpcnN0IHVzZS4gU3Vic2VxdWVudCBjYWxscyB3aXRoIHRoZVxuICogc2FtZSBgKGNvZGUsIGZpbGVuYW1lKWAgcmV0dXJuIHRoZSBjYWNoZWQgYFNjcmlwdGAuXG4gKlxuICogVGhlIHJldHVybmVkIGBTY3JpcHRgIGlzIG5vdCB5ZXQgYm91bmQgdG8gYW55IGNvbnRleHQ7IHRoZSBjYWxsZXIgcnVucyBpdFxuICogYWdhaW5zdCBhIHNwZWNpZmljIFZNIGNvbnRleHQgdmlhIGBzY3JpcHQucnVuSW5Db250ZXh0KGNvbnRleHQpYC4gVGhpcyBpc1xuICogZXF1aXZhbGVudCB0byBgdm0ucnVuSW5Db250ZXh0KGNvZGUsIGNvbnRleHQsIHsgZmlsZW5hbWUgfSlgIGJ1dCBza2lwcyB0aGVcbiAqIHJlY29tcGlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhY2hlZFdvcmtmbG93U2NyaXB0KFxuICBjb2RlOiBzdHJpbmcsXG4gIGZpbGVuYW1lOiBzdHJpbmdcbik6IFNjcmlwdCB7XG4gIGxldCBieUZpbGVuYW1lID0gdG91Y2hCdW5kbGUoY29kZSk7XG4gIGlmIChieUZpbGVuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBieUZpbGVuYW1lID0gbmV3IE1hcDxzdHJpbmcsIFNjcmlwdD4oKTtcbiAgICBzY3JpcHRDYWNoZS5zZXQoY29kZSwgYnlGaWxlbmFtZSk7XG4gICAgLy8gRXZpY3QgdGhlIGxlYXN0LXJlY2VudGx5LXVzZWQgYnVuZGxlKHMpIHdoZW4gb3ZlciB0aGUgY2FwLiBOZXcgYnVuZGxlc1xuICAgIC8vIGFyZSBhcHBlbmRlZCBhdCB0aGUgZW5kLCBzbyB0aGUgb2xkZXN0IGxpdmUgYXQgdGhlIGZyb250LlxuICAgIHdoaWxlIChzY3JpcHRDYWNoZS5zaXplID4gTUFYX0JVTkRMRVMpIHtcbiAgICAgIGNvbnN0IG9sZGVzdCA9IHNjcmlwdENhY2hlLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICBpZiAob2xkZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBzY3JpcHRDYWNoZS5kZWxldGUob2xkZXN0KTtcbiAgICB9XG4gIH1cbiAgbGV0IHNjcmlwdCA9IGJ5RmlsZW5hbWUuZ2V0KGZpbGVuYW1lKTtcbiAgaWYgKHNjcmlwdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc2NyaXB0ID0gbmV3IFNjcmlwdChjb2RlLCB7IGZpbGVuYW1lIH0pO1xuICAgIGJ5RmlsZW5hbWUuc2V0KGZpbGVuYW1lLCBzY3JpcHQpO1xuICB9XG4gIHJldHVybiBzY3JpcHQ7XG59XG5cbi8qKlxuICogUnVucyB0aGUgY2FjaGVkIHdvcmtmbG93LWJ1bmRsZSBgU2NyaXB0YCBhZ2FpbnN0IGBjb250ZXh0YC4gQ29tcGlsZXMgYW5kXG4gKiBjYWNoZXMgdGhlIGBTY3JpcHRgIG9uIGZpcnN0IHVzZSBmb3IgdGhlIGdpdmVuIGAoY29kZSwgZmlsZW5hbWUpYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNhY2hlZFdvcmtmbG93U2NyaXB0KFxuICBjb2RlOiBzdHJpbmcsXG4gIGZpbGVuYW1lOiBzdHJpbmcsXG4gIGNvbnRleHQ6IENvbnRleHRcbik6IHVua25vd24ge1xuICByZXR1cm4gZ2V0Q2FjaGVkV29ya2Zsb3dTY3JpcHQoY29kZSwgZmlsZW5hbWUpLnJ1bkluQ29udGV4dChjb250ZXh0KTtcbn1cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGNvbXBpbGVkLXNjcmlwdCBjYWNoZS4gSW50ZW5kZWQgZm9yIHRlc3RzIHRoYXQgd2FudCB0byBhc3NlcnRcbiAqIGNvbXBpbGUtdnMtY2FjaGUgYmVoYXZpb3VyIGluIGlzb2xhdGlvbjsgbm90IHVzZWQgb24gdGhlIGhvdCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJXb3JrZmxvd1NjcmlwdENhY2hlKCk6IHZvaWQge1xuICBzY3JpcHRDYWNoZS5jbGVhcigpO1xufVxuXG4vKipcbiAqIE51bWJlciBvZiBkaXN0aW5jdCBidW5kbGUgKGBjb2RlYCkgdmVyc2lvbnMgY3VycmVudGx5IHJldGFpbmVkLiBFeHBvc2VkIGZvclxuICogdGVzdHMgYXNzZXJ0aW5nIHRoZSBMUlUgYm91bmQ7IG5vdCB1c2VkIG9uIHRoZSBob3QgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93U2NyaXB0Q2FjaGVTaXplKCk6IG51bWJlciB7XG4gIHJldHVybiBzY3JpcHRDYWNoZS5zaXplO1xufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/workflow/hook.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAI3D,OAAO,EAIL,KAAK,2BAA2B,EACjC,MAAM,eAAe,CAAC;AA6CvB,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,2BAA2B,IAChC,CAAC,GAAG,GAAG,EAAE,UAAS,WAAgB,KAAG,IAAI,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/workflow/hook.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAI3D,OAAO,EAIL,KAAK,2BAA2B,EACjC,MAAM,eAAe,CAAC;AA6CvB,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,2BAA2B,IAChC,CAAC,GAAG,GAAG,EAAE,UAAS,WAAgB,KAAG,IAAI,CAAC,CAAC,CAAC,CA8b5E"}
|