footprintjs 10.5.0 → 10.7.0
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/CLAUDE.md +2 -1
- package/dist/esm/index.d.ts +13 -2
- package/dist/esm/index.js +5 -3
- package/dist/esm/lib/attempt/backoff.d.ts +96 -0
- package/dist/esm/lib/attempt/backoff.js +173 -0
- package/dist/esm/lib/attempt/deadline.d.ts +0 -5
- package/dist/esm/lib/attempt/deadline.js +2 -27
- package/dist/esm/lib/attempt/index.d.ts +6 -4
- package/dist/esm/lib/attempt/index.js +6 -5
- package/dist/esm/lib/attempt/runner.js +3 -2
- package/dist/esm/lib/capture/readSources.d.ts +13 -2
- package/dist/esm/lib/capture/readSources.js +11 -3
- package/dist/esm/lib/capture/sourceOwnership.d.ts +21 -0
- package/dist/esm/lib/capture/sourceOwnership.js +133 -0
- package/dist/esm/lib/capture/sourceOwnershipFormat.d.ts +35 -0
- package/dist/esm/lib/capture/sourceOwnershipFormat.js +31 -0
- package/dist/esm/lib/capture/storedReadSourceCounts.d.ts +5 -1
- package/dist/esm/lib/capture/storedReadSourceCounts.js +15 -11
- package/dist/esm/lib/capture/storedReadSources.js +21 -5
- package/dist/esm/lib/capture/storedSourceOwnership.d.ts +8 -0
- package/dist/esm/lib/capture/storedSourceOwnership.js +100 -0
- package/dist/esm/lib/detach/drivers/setTimeout.d.ts +4 -2
- package/dist/esm/lib/detach/drivers/setTimeout.js +12 -2
- package/dist/esm/lib/detach/flush.d.ts +6 -1
- package/dist/esm/lib/detach/flush.js +8 -6
- package/dist/esm/lib/engine/handlers/StageRunner.js +2 -1
- package/dist/esm/lib/memory/StageContext.d.ts +3 -0
- package/dist/esm/lib/memory/StageContext.js +29 -8
- package/dist/esm/lib/memory/frameTypes.d.ts +2 -0
- package/dist/esm/lib/memory/frameTypes.js +1 -1
- package/dist/esm/lib/observer-queue/deferredDispatcher.d.ts +8 -1
- package/dist/esm/lib/observer-queue/deferredDispatcher.js +13 -6
- package/dist/esm/lib/recorder/AttemptRecorder.js +8 -9
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +7 -2
- package/dist/esm/lib/runner/FlowChartExecutor.js +8 -3
- package/dist/esm/lib/runner/captureHistory.js +6 -4
- package/dist/esm/lib/runner/deadline.js +3 -2
- package/dist/esm/lib/runner/recordSink.d.ts +2 -1
- package/dist/esm/lib/runner/recordSink.js +12 -7
- package/dist/esm/lib/sinks/fileSink.js +7 -6
- package/dist/esm/lib/sinks/indexedAdmission.d.ts +14 -0
- package/dist/esm/lib/sinks/indexedAdmission.js +77 -0
- package/dist/esm/lib/sinks/indexedIO.d.ts +14 -0
- package/dist/esm/lib/sinks/indexedIO.js +98 -0
- package/dist/esm/lib/sinks/indexedRecordFile.d.ts +3 -0
- package/dist/esm/lib/sinks/indexedRecordFile.js +120 -0
- package/dist/esm/lib/sinks/indexedScan.d.ts +6 -0
- package/dist/esm/lib/sinks/indexedScan.js +73 -0
- package/dist/esm/lib/sinks/indexedTypes.d.ts +60 -0
- package/dist/esm/lib/sinks/indexedTypes.js +2 -0
- package/dist/esm/lib/timers/longTimeout.d.ts +37 -0
- package/dist/esm/lib/timers/longTimeout.js +56 -0
- package/dist/esm/sinks.d.ts +2 -0
- package/dist/esm/sinks.js +2 -1
- package/dist/index.js +8 -3
- package/dist/lib/attempt/backoff.js +178 -0
- package/dist/lib/attempt/deadline.js +4 -30
- package/dist/lib/attempt/index.js +9 -6
- package/dist/lib/attempt/runner.js +4 -3
- package/dist/lib/capture/readSources.js +11 -3
- package/dist/lib/capture/sourceOwnership.js +138 -0
- package/dist/lib/capture/sourceOwnershipFormat.js +35 -0
- package/dist/lib/capture/storedReadSourceCounts.js +15 -11
- package/dist/lib/capture/storedReadSources.js +21 -5
- package/dist/lib/capture/storedSourceOwnership.js +104 -0
- package/dist/lib/detach/drivers/setTimeout.js +12 -2
- package/dist/lib/detach/flush.js +8 -6
- package/dist/lib/engine/handlers/StageRunner.js +2 -1
- package/dist/lib/memory/StageContext.js +29 -8
- package/dist/lib/memory/frameTypes.js +1 -1
- package/dist/lib/observer-queue/deferredDispatcher.js +13 -6
- package/dist/lib/recorder/AttemptRecorder.js +8 -9
- package/dist/lib/runner/FlowChartExecutor.js +8 -3
- package/dist/lib/runner/captureHistory.js +6 -4
- package/dist/lib/runner/deadline.js +3 -2
- package/dist/lib/runner/recordSink.js +12 -7
- package/dist/lib/sinks/fileSink.js +7 -6
- package/dist/lib/sinks/indexedAdmission.js +85 -0
- package/dist/lib/sinks/indexedIO.js +108 -0
- package/dist/lib/sinks/indexedRecordFile.js +124 -0
- package/dist/lib/sinks/indexedScan.js +77 -0
- package/dist/lib/sinks/indexedTypes.js +3 -0
- package/dist/lib/timers/longTimeout.js +60 -0
- package/dist/sinks.js +4 -2
- package/dist/types/index.d.ts +13 -2
- package/dist/types/lib/attempt/backoff.d.ts +96 -0
- package/dist/types/lib/attempt/deadline.d.ts +0 -5
- package/dist/types/lib/attempt/index.d.ts +6 -4
- package/dist/types/lib/capture/readSources.d.ts +13 -2
- package/dist/types/lib/capture/sourceOwnership.d.ts +21 -0
- package/dist/types/lib/capture/sourceOwnershipFormat.d.ts +35 -0
- package/dist/types/lib/capture/storedReadSourceCounts.d.ts +5 -1
- package/dist/types/lib/capture/storedSourceOwnership.d.ts +8 -0
- package/dist/types/lib/detach/drivers/setTimeout.d.ts +4 -2
- package/dist/types/lib/detach/flush.d.ts +6 -1
- package/dist/types/lib/memory/StageContext.d.ts +3 -0
- package/dist/types/lib/memory/frameTypes.d.ts +2 -0
- package/dist/types/lib/observer-queue/deferredDispatcher.d.ts +8 -1
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +7 -2
- package/dist/types/lib/runner/recordSink.d.ts +2 -1
- package/dist/types/lib/sinks/indexedAdmission.d.ts +14 -0
- package/dist/types/lib/sinks/indexedIO.d.ts +14 -0
- package/dist/types/lib/sinks/indexedRecordFile.d.ts +3 -0
- package/dist/types/lib/sinks/indexedScan.d.ts +6 -0
- package/dist/types/lib/sinks/indexedTypes.d.ts +60 -0
- package/dist/types/lib/timers/longTimeout.d.ts +37 -0
- package/dist/types/sinks.d.ts +2 -0
- package/package.json +2 -2
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { parseAttemptId } from 'foottrace';
|
|
2
|
+
import { captureIdentifier, ownData } from './noteShape.js';
|
|
3
|
+
import { isNativeSourceExecution, SOURCE_OWNERSHIP_GAPS, SOURCE_OWNERSHIP_V1_LIMITS } from './sourceOwnershipFormat.js';
|
|
4
|
+
function fields(value, keys) {
|
|
5
|
+
return (!!value &&
|
|
6
|
+
typeof value === 'object' &&
|
|
7
|
+
!Array.isArray(value) &&
|
|
8
|
+
Object.getPrototypeOf(value) === Object.prototype &&
|
|
9
|
+
Object.keys(value).length === keys.length &&
|
|
10
|
+
keys.every((key) => Object.hasOwn(value, key)));
|
|
11
|
+
}
|
|
12
|
+
function samePath(value, expected) {
|
|
13
|
+
return (Array.isArray(value) && value.length === expected.length && value.every((part, index) => part === expected[index]));
|
|
14
|
+
}
|
|
15
|
+
function execution(value, firstCommits) {
|
|
16
|
+
const id = ownData(value, 'runtimeStageId');
|
|
17
|
+
const address = ownData(value, 'stateAddress');
|
|
18
|
+
const attempts = ownData(value, 'attemptIds');
|
|
19
|
+
const firstCommit = ownData(value, 'firstCommit');
|
|
20
|
+
if (!fields(value, [
|
|
21
|
+
'runtimeStageId',
|
|
22
|
+
'stateAddress',
|
|
23
|
+
'attemptIds',
|
|
24
|
+
...(firstCommit !== undefined ? ['firstCommit'] : []),
|
|
25
|
+
]) ||
|
|
26
|
+
!captureIdentifier(id) ||
|
|
27
|
+
!isNativeSourceExecution(id) ||
|
|
28
|
+
!Array.isArray(address) ||
|
|
29
|
+
address.length > SOURCE_OWNERSHIP_V1_LIMITS.depth ||
|
|
30
|
+
address.some((part) => typeof part !== 'string' || part.length > SOURCE_OWNERSHIP_V1_LIMITS.name) ||
|
|
31
|
+
!Array.isArray(attempts) ||
|
|
32
|
+
attempts.length > SOURCE_OWNERSHIP_V1_LIMITS.attempts ||
|
|
33
|
+
firstCommit !== firstCommits.get(id))
|
|
34
|
+
return undefined;
|
|
35
|
+
if (!attempts.every((attempt, index) => {
|
|
36
|
+
if (!captureIdentifier(attempt))
|
|
37
|
+
return false;
|
|
38
|
+
const parsed = parseAttemptId(attempt);
|
|
39
|
+
return parsed?.runtimeStageId === id && parsed.attempt === index + 1 && parsed.call === undefined;
|
|
40
|
+
}))
|
|
41
|
+
return undefined;
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
/** Inert byte-bounded producer metadata only; this validates consistency, not authenticity. */
|
|
45
|
+
export function storedSourceOwnership(value, record, runId, commits, firstCommits, counts) {
|
|
46
|
+
if (!fields(value, ['version', 'runId', 'logAddress', 'segment', 'commits', 'status', 'limitations', 'executions']))
|
|
47
|
+
return undefined;
|
|
48
|
+
const witness = value;
|
|
49
|
+
if (witness.version !== 1 ||
|
|
50
|
+
witness.runId !== runId ||
|
|
51
|
+
witness.segment !== record.segment ||
|
|
52
|
+
!fields(witness.logAddress, ['logRunId', 'drillPath']) ||
|
|
53
|
+
witness.logAddress.logRunId !== record.address.logRunId ||
|
|
54
|
+
!samePath(witness.logAddress.drillPath, record.address.drillPath) ||
|
|
55
|
+
!fields(witness.commits, ['from', 'to']) ||
|
|
56
|
+
witness.commits.from !== commits.from ||
|
|
57
|
+
witness.commits.to !== commits.to ||
|
|
58
|
+
!Array.isArray(witness.limitations) ||
|
|
59
|
+
witness.limitations.length > SOURCE_OWNERSHIP_GAPS.length ||
|
|
60
|
+
new Set(witness.limitations).size !== witness.limitations.length ||
|
|
61
|
+
witness.limitations.some((gap) => !SOURCE_OWNERSHIP_GAPS.includes(gap)) ||
|
|
62
|
+
witness.status !== (witness.limitations.length ? 'unknown' : 'captured') ||
|
|
63
|
+
!Array.isArray(witness.executions) ||
|
|
64
|
+
witness.executions.length > SOURCE_OWNERSHIP_V1_LIMITS.executions ||
|
|
65
|
+
new TextEncoder().encode(JSON.stringify(witness)).length > SOURCE_OWNERSHIP_V1_LIMITS.bytes)
|
|
66
|
+
return undefined;
|
|
67
|
+
const owners = new Map();
|
|
68
|
+
const attemptIds = new Map();
|
|
69
|
+
let attempts = 0;
|
|
70
|
+
for (const row of witness.executions) {
|
|
71
|
+
const owner = execution(row, firstCommits);
|
|
72
|
+
if (!owner || !counts.has(owner.runtimeStageId) || owners.has(owner.runtimeStageId))
|
|
73
|
+
return undefined;
|
|
74
|
+
const nativeInvocations = counts.get(owner.runtimeStageId).invocations;
|
|
75
|
+
if (nativeInvocations === undefined ||
|
|
76
|
+
owner.attemptIds.length > nativeInvocations ||
|
|
77
|
+
(witness.status === 'captured' && owner.attemptIds.length !== nativeInvocations))
|
|
78
|
+
return undefined;
|
|
79
|
+
attempts += owner.attemptIds.length;
|
|
80
|
+
if (attempts > SOURCE_OWNERSHIP_V1_LIMITS.attempts)
|
|
81
|
+
return undefined;
|
|
82
|
+
owners.set(owner.runtimeStageId, owner);
|
|
83
|
+
attemptIds.set(owner.runtimeStageId, new Set(owner.attemptIds));
|
|
84
|
+
}
|
|
85
|
+
if (witness.status === 'captured') {
|
|
86
|
+
// Explicit zero-read native executions are required too; absence cannot impersonate captured-empty.
|
|
87
|
+
if (owners.size !== counts.size || [...counts.keys()].some((id) => !owners.has(id)))
|
|
88
|
+
return undefined;
|
|
89
|
+
for (const row of record.occurrences) {
|
|
90
|
+
const owner = owners.get(row.runtimeStageId);
|
|
91
|
+
if (!owner ||
|
|
92
|
+
!samePath(row.stateAddress, owner.stateAddress) ||
|
|
93
|
+
row.attemptId === undefined ||
|
|
94
|
+
!attemptIds.get(row.runtimeStageId).has(row.attemptId))
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return witness;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkU291cmNlT3duZXJzaGlwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL3N0b3JlZFNvdXJjZU93bmVyc2hpcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUd4SCxTQUFTLE1BQU0sQ0FBQyxLQUFjLEVBQUUsSUFBdUI7SUFDckQsT0FBTyxDQUNMLENBQUMsQ0FBQyxLQUFLO1FBQ1AsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN6QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVM7UUFDakQsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU07UUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FDL0MsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFjLEVBQUUsUUFBMkI7SUFDM0QsT0FBTyxDQUNMLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLEtBQUssQ0FB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QUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDdEcsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDN0MsSUFDRSxDQUFDLEtBQUs7Z0JBQ04sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDO2dCQUMvQyxHQUFHLENBQUMsU0FBUyxLQUFLLFNBQVM7Z0JBQzNCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7Z0JBRXZELE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlQXR0ZW1wdElkIH0gZnJvbSAnZm9vdHRyYWNlJztcbmltcG9ydCB0eXBlIHsgUmVhZFNvdXJjZVNuYXBzaG90IH0gZnJvbSAnZm9vdHRyYWNlL3dyaXRlJztcblxuaW1wb3J0IHsgY2FwdHVyZUlkZW50aWZpZXIsIG93bkRhdGEgfSBmcm9tICcuL25vdGVTaGFwZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFNvdXJjZUV4ZWN1dGlvbk93bmVyc2hpcCwgU291cmNlT3duZXJzaGlwV2l0bmVzcyB9IGZyb20gJy4vc291cmNlT3duZXJzaGlwRm9ybWF0LmpzJztcbmltcG9ydCB7IGlzTmF0aXZlU291cmNlRXhlY3V0aW9uLCBTT1VSQ0VfT1dORVJTSElQX0dBUFMsIFNPVVJDRV9PV05FUlNISVBfVjFfTElNSVRTIH0gZnJvbSAnLi9zb3VyY2VPd25lcnNoaXBGb3JtYXQuanMnO1xuaW1wb3J0IHR5cGUgeyBTdG9yZWRTb3VyY2VDb3VudHMgfSBmcm9tICcuL3N0b3JlZFJlYWRTb3VyY2VDb3VudHMuanMnO1xuXG5mdW5jdGlvbiBmaWVsZHModmFsdWU6IHVua25vd24sIGtleXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gKFxuICAgICEhdmFsdWUgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PT0gT2JqZWN0LnByb3RvdHlwZSAmJlxuICAgIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IGtleXMubGVuZ3RoICYmXG4gICAga2V5cy5ldmVyeSgoa2V5KSA9PiBPYmplY3QuaGFzT3duKHZhbHVlLCBrZXkpKVxuICApO1xufVxuXG5mdW5jdGlvbiBzYW1lUGF0aCh2YWx1ZTogdW5rbm93biwgZXhwZWN0ZWQ6IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSBleHBlY3RlZC5sZW5ndGggJiYgdmFsdWUuZXZlcnkoKHBhcnQsIGluZGV4KSA9PiBwYXJ0ID09PSBleHBlY3RlZFtpbmRleF0pXG4gICk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGlvbih2YWx1ZTogdW5rbm93biwgZmlyc3RDb21taXRzOiBSZWFkb25seU1hcDxzdHJpbmcsIG51bWJlcj4pOiBTb3VyY2VFeGVjdXRpb25Pd25lcnNoaXAgfCB1bmRlZmluZWQge1xuICBjb25zdCBpZCA9IG93bkRhdGEodmFsdWUsICdydW50aW1lU3RhZ2VJZCcpO1xuICBjb25zdCBhZGRyZXNzID0gb3duRGF0YSh2YWx1ZSwgJ3N0YXRlQWRkcmVzcycpO1xuICBjb25zdCBhdHRlbXB0cyA9IG93bkRhdGEodmFsdWUsICdhdHRlbXB0SWRzJyk7XG4gIGNvbnN0IGZpcnN0Q29tbWl0ID0gb3duRGF0YSh2YWx1ZSwgJ2ZpcnN0Q29tbWl0Jyk7XG4gIGlmIChcbiAgICAhZmllbGRzKHZhbHVlLCBbXG4gICAgICAncnVudGltZVN0YWdlSWQnLFxuICAgICAgJ3N0YXRlQWRkcmVzcycsXG4gICAgICAnYXR0ZW1wdElkcycsXG4gICAgICAuLi4oZmlyc3RDb21taXQgIT09IHVuZGVmaW5lZCA/IFsnZmlyc3RDb21taXQnXSA6IFtdKSxcbiAgICBdKSB8fFxuICAgICFjYXB0dXJlSWRlbnRpZmllcihpZCkgfHxcbiAgICAhaXNOYXRpdmVTb3VyY2VFeGVjdXRpb24oaWQpIHx8XG4gICAgIUFycmF5LmlzQXJyYXkoYWRkcmVzcykgfHxcbiAgICBhZGRyZXNzLmxlbmd0aCA+IFNPVVJDRV9PV05FUlNISVBfVjFfTElNSVRTLmRlcHRoIHx8XG4gICAgYWRkcmVzcy5zb21lKChwYXJ0KSA9PiB0eXBlb2YgcGFydCAhPT0gJ3N0cmluZycgfHwgcGFydC5sZW5ndGggPiBTT1VSQ0VfT1dORVJTSElQX1YxX0xJTUlUUy5uYW1lKSB8fFxuICAgICFBcnJheS5pc0FycmF5KGF0dGVtcHRzKSB8fFxuICAgIGF0dGVtcHRzLmxlbmd0aCA+IFNPVVJDRV9PV05FUlNISVBfVjFfTElNSVRTLmF0dGVtcHRzIHx8XG4gICAgZmlyc3RDb21taXQgIT09IGZpcnN0Q29tbWl0cy5nZXQoaWQpXG4gIClcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgIWF0dGVtcHRzLmV2ZXJ5KChhdHRlbXB0LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCFjYXB0dXJlSWRlbnRpZmllcihhdHRlbXB0KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VBdHRlbXB0SWQoYXR0ZW1wdCk7XG4gICAgICByZXR1cm4gcGFyc2VkPy5ydW50aW1lU3RhZ2VJZCA9PT0gaWQgJiYgcGFyc2VkLmF0dGVtcHQgPT09IGluZGV4ICsgMSAmJiBwYXJzZWQuY2FsbCA9PT0gdW5kZWZpbmVkO1xuICAgIH0pXG4gIClcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdmFsdWUgYXMgdW5rbm93biBhcyBTb3VyY2VFeGVjdXRpb25Pd25lcnNoaXA7XG59XG5cbi8qKiBJbmVydCBieXRlLWJvdW5kZWQgcHJvZHVjZXIgbWV0YWRhdGEgb25seTsgdGhpcyB2YWxpZGF0ZXMgY29uc2lzdGVuY3ksIG5vdCBhdXRoZW50aWNpdHkuICovXG5leHBvcnQgZnVuY3Rpb24gc3RvcmVkU291cmNlT3duZXJzaGlwKFxuICB2YWx1ZTogdW5rbm93bixcbiAgcmVjb3JkOiBSZWFkU291cmNlU25hcHNob3QsXG4gIHJ1bklkOiBzdHJpbmcsXG4gIGNvbW1pdHM6IHsgcmVhZG9ubHkgZnJvbTogbnVtYmVyOyByZWFkb25seSB0bzogbnVtYmVyIH0sXG4gIGZpcnN0Q29tbWl0czogUmVhZG9ubHlNYXA8c3RyaW5nLCBudW1iZXI+LFxuICBjb3VudHM6IFJlYWRvbmx5TWFwPHN0cmluZywgU3RvcmVkU291cmNlQ291bnRzPixcbik6IFNvdXJjZU93bmVyc2hpcFdpdG5lc3MgfCB1bmRlZmluZWQge1xuICBpZiAoIWZpZWxkcyh2YWx1ZSwgWyd2ZXJzaW9uJywgJ3J1bklkJywgJ2xvZ0FkZHJlc3MnLCAnc2VnbWVudCcsICdjb21taXRzJywgJ3N0YXR1cycsICdsaW1pdGF0aW9ucycsICdleGVjdXRpb25zJ10pKVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHdpdG5lc3MgPSB2YWx1ZSBhcyB1bmtub3duIGFzIFNvdXJjZU93bmVyc2hpcFdpdG5lc3M7XG4gIGlmIChcbiAgICB3aXRuZXNzLnZlcnNpb24gIT09IDEgfHxcbiAgICB3aXRuZXNzLnJ1bklkICE9PSBydW5JZCB8fFxuICAgIHdpdG5lc3Muc2VnbWVudCAhPT0gcmVjb3JkLnNlZ21lbnQgfHxcbiAgICAhZmllbGRzKHdpdG5lc3MubG9nQWRkcmVzcywgWydsb2dSdW5JZCcsICdkcmlsbFBhdGgnXSkgfHxcbiAgICB3aXRuZXNzLmxvZ0FkZHJlc3MubG9nUnVuSWQgIT09IHJlY29yZC5hZGRyZXNzLmxvZ1J1bklkIHx8XG4gICAgIXNhbWVQYXRoKHdpdG5lc3MubG9nQWRkcmVzcy5kcmlsbFBhdGgsIHJlY29yZC5hZGRyZXNzLmRyaWxsUGF0aCkgfHxcbiAgICAhZmllbGRzKHdpdG5lc3MuY29tbWl0cywgWydmcm9tJywgJ3RvJ10pIHx8XG4gICAgd2l0bmVzcy5jb21taXRzLmZyb20gIT09IGNvbW1pdHMuZnJvbSB8fFxuICAgIHdpdG5lc3MuY29tbWl0cy50byAhPT0gY29tbWl0cy50byB8fFxuICAgICFBcnJheS5pc0FycmF5KHdpdG5lc3MubGltaXRhdGlvbnMpIHx8XG4gICAgd2l0bmVzcy5saW1pdGF0aW9ucy5sZW5ndGggPiBTT1VSQ0VfT1dORVJTSElQX0dBUFMubGVuZ3RoIHx8XG4gICAgbmV3IFNldCh3aXRuZXNzLmxpbWl0YXRpb25zKS5zaXplICE9PSB3aXRuZXNzLmxpbWl0YXRpb25zLmxlbmd0aCB8fFxuICAgIHdpdG5lc3MubGltaXRhdGlvbnMuc29tZSgoZ2FwKSA9PiAhU09VUkNFX09XTkVSU0hJUF9HQVBTLmluY2x1ZGVzKGdhcCkpIHx8XG4gICAgd2l0bmVzcy5zdGF0dXMgIT09ICh3aXRuZXNzLmxpbWl0YXRpb25zLmxlbmd0aCA/ICd1bmtub3duJyA6ICdjYXB0dXJlZCcpIHx8XG4gICAgIUFycmF5LmlzQXJyYXkod2l0bmVzcy5leGVjdXRpb25zKSB8fFxuICAgIHdpdG5lc3MuZXhlY3V0aW9ucy5sZW5ndGggPiBTT1VSQ0VfT1dORVJTSElQX1YxX0xJTUlUUy5leGVjdXRpb25zIHx8XG4gICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHdpdG5lc3MpKS5sZW5ndGggPiBTT1VSQ0VfT1dORVJTSElQX1YxX0xJTUlUUy5ieXRlc1xuICApXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3Qgb3duZXJzID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZUV4ZWN1dGlvbk93bmVyc2hpcD4oKTtcbiAgY29uc3QgYXR0ZW1wdElkcyA9IG5ldyBNYXA8c3RyaW5nLCBSZWFkb25seVNldDxzdHJpbmc+PigpO1xuICBsZXQgYXR0ZW1wdHMgPSAwO1xuICBmb3IgKGNvbnN0IHJvdyBvZiB3aXRuZXNzLmV4ZWN1dGlvbnMpIHtcbiAgICBjb25zdCBvd25lciA9IGV4ZWN1dGlvbihyb3csIGZpcnN0Q29tbWl0cyk7XG4gICAgaWYgKCFvd25lciB8fCAhY291bnRzLmhhcyhvd25lci5ydW50aW1lU3RhZ2VJZCkgfHwgb3duZXJzLmhhcyhvd25lci5ydW50aW1lU3RhZ2VJZCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbmF0aXZlSW52b2NhdGlvbnMgPSBjb3VudHMuZ2V0KG93bmVyLnJ1bnRpbWVTdGFnZUlkKSEuaW52b2NhdGlvbnM7XG4gICAgaWYgKFxuICAgICAgbmF0aXZlSW52b2NhdGlvbnMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgb3duZXIuYXR0ZW1wdElkcy5sZW5ndGggPiBuYXRpdmVJbnZvY2F0aW9ucyB8fFxuICAgICAgKHdpdG5lc3Muc3RhdHVzID09PSAnY2FwdHVyZWQnICYmIG93bmVyLmF0dGVtcHRJZHMubGVuZ3RoICE9PSBuYXRpdmVJbnZvY2F0aW9ucylcbiAgICApXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGF0dGVtcHRzICs9IG93bmVyLmF0dGVtcHRJZHMubGVuZ3RoO1xuICAgIGlmIChhdHRlbXB0cyA+IFNPVVJDRV9PV05FUlNISVBfVjFfTElNSVRTLmF0dGVtcHRzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIG93bmVycy5zZXQob3duZXIucnVudGltZVN0YWdlSWQsIG93bmVyKTtcbiAgICBhdHRlbXB0SWRzLnNldChvd25lci5ydW50aW1lU3RhZ2VJZCwgbmV3IFNldChvd25lci5hdHRlbXB0SWRzKSk7XG4gIH1cbiAgaWYgKHdpdG5lc3Muc3RhdHVzID09PSAnY2FwdHVyZWQnKSB7XG4gICAgLy8gRXhwbGljaXQgemVyby1yZWFkIG5hdGl2ZSBleGVjdXRpb25zIGFyZSByZXF1aXJlZCB0b287IGFic2VuY2UgY2Fubm90IGltcGVyc29uYXRlIGNhcHR1cmVkLWVtcHR5LlxuICAgIGlmIChvd25lcnMuc2l6ZSAhPT0gY291bnRzLnNpemUgfHwgWy4uLmNvdW50cy5rZXlzKCldLnNvbWUoKGlkKSA9PiAhb3duZXJzLmhhcyhpZCkpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJlY29yZC5vY2N1cnJlbmNlcykge1xuICAgICAgY29uc3Qgb3duZXIgPSBvd25lcnMuZ2V0KHJvdy5ydW50aW1lU3RhZ2VJZCk7XG4gICAgICBpZiAoXG4gICAgICAgICFvd25lciB8fFxuICAgICAgICAhc2FtZVBhdGgocm93LnN0YXRlQWRkcmVzcywgb3duZXIuc3RhdGVBZGRyZXNzKSB8fFxuICAgICAgICByb3cuYXR0ZW1wdElkID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgIWF0dGVtcHRJZHMuZ2V0KHJvdy5ydW50aW1lU3RhZ2VJZCkhLmhhcyhyb3cuYXR0ZW1wdElkKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gd2l0bmVzcztcbn1cbiJdfQ==
|
|
@@ -22,8 +22,10 @@
|
|
|
22
22
|
import { type ChildRunner } from '../runChild.js';
|
|
23
23
|
import type { DetachDriver } from '../types.js';
|
|
24
24
|
export interface SetTimeoutDriverOptions {
|
|
25
|
-
/** Milliseconds to wait before flushing the batch
|
|
26
|
-
* (next macrotask)
|
|
25
|
+
/** Milliseconds to wait before flushing the batch — a finite number.
|
|
26
|
+
* Default 0 (next macrotask); a negative delay waits nothing, as the
|
|
27
|
+
* host timer does. A delay past 2^31 − 1 ms is waited in full (the one
|
|
28
|
+
* long-timer law, `timers/longTimeout.ts`), never cut to 1 ms. */
|
|
27
29
|
readonly delayMs?: number;
|
|
28
30
|
/** Custom `runChild`. Defaults to spawning a `FlowChartExecutor`. */
|
|
29
31
|
readonly runChild?: ChildRunner;
|
|
@@ -19,18 +19,28 @@
|
|
|
19
19
|
* - Browser tab freezing / throttling can extend the delay
|
|
20
20
|
* significantly. Don't rely on precise timing.
|
|
21
21
|
*/
|
|
22
|
+
import { setLongTimeout } from '../../timers/longTimeout.js';
|
|
22
23
|
import { defaultRunChild } from '../runChild.js';
|
|
23
24
|
import { createBatchSchedule } from './batch.js';
|
|
24
25
|
export function createSetTimeoutDriver(opts = {}) {
|
|
25
26
|
const delayMs = opts.delayMs ?? 0;
|
|
27
|
+
// `Infinity` would never flush the batch (a silent hang) and `NaN` names no delay: refused when the driver is made,
|
|
28
|
+
// by the field and the shape it needs — never the value (a TypeError for a non-number, a RangeError otherwise).
|
|
29
|
+
const rule = 'createSetTimeoutDriver: delayMs must be a finite number of milliseconds';
|
|
30
|
+
if (typeof delayMs !== 'number')
|
|
31
|
+
throw new TypeError(rule);
|
|
32
|
+
if (!Number.isFinite(delayMs))
|
|
33
|
+
throw new RangeError(rule);
|
|
26
34
|
const runChild = opts.runChild ?? defaultRunChild;
|
|
27
35
|
return {
|
|
28
36
|
name: delayMs === 0 ? 'set-timeout' : `set-timeout-${delayMs}ms`,
|
|
29
37
|
capabilities: { browserSafe: true, nodeSafe: true, edgeSafe: true },
|
|
30
|
-
schedule: createBatchSchedule((flush) =>
|
|
38
|
+
schedule: createBatchSchedule((flush) => {
|
|
39
|
+
setLongTimeout(flush, delayMs);
|
|
40
|
+
}, runChild),
|
|
31
41
|
};
|
|
32
42
|
}
|
|
33
43
|
/** Default singleton — zero-delay (next macrotask). For configurable
|
|
34
44
|
* delays, use `createSetTimeoutDriver({ delayMs })`. */
|
|
35
45
|
export const setTimeoutDriver = createSetTimeoutDriver();
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0VGltZW91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGV0YWNoL2RyaXZlcnMvc2V0VGltZW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFvQixlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFZakQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE9BQWdDLEVBQUU7SUFDdkUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDbEMsb0hBQW9IO0lBQ3BILGdIQUFnSDtJQUNoSCxNQUFNLElBQUksR0FBRyx5RUFBeUUsQ0FBQztJQUN2RixJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7UUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUFFLE1BQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxlQUFlLENBQUM7SUFDbEQsT0FBTztRQUNMLElBQUksRUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGVBQWUsT0FBTyxJQUFJO1FBQ2hFLFlBQVksRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQ25FLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3RDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakMsQ0FBQyxFQUFFLFFBQVEsQ0FBQztLQUNiLENBQUM7QUFDSixDQUFDO0FBRUQ7eURBQ3lEO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFpQixzQkFBc0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkZXRhY2gvZHJpdmVycy9zZXRUaW1lb3V0LnRzIOKAlCBEZWZlciBkZXRhY2hlZCB3b3JrIHZpYSBgc2V0VGltZW91dCguLi4sIGRlbGF5TXMpYC5cbiAqXG4gKiBQYXR0ZXJuOiAgUHJvZHVjZXItY29uc3VtZXIgYmF0Y2ggZmx1c2g7IGRlZmVycmFsIG1lY2hhbmlzbSBpc1xuICogICAgICAgICAgIGBzZXRUaW1lb3V0YCB3aXRoIGEgY29uZmlndXJhYmxlIGRlbGF5IChkZWZhdWx0IGAwYCkuXG4gKiBSb2xlOiAgICAgQ3Jvc3MtcnVudGltZSBcIm5leHQgbWFjcm90YXNrXCIgZHJpdmVyLiBXb3JrcyBpbiBicm93c2VycyxcbiAqICAgICAgICAgICBOb2RlLmpzLCBEZW5vLCBDbG91ZGZsYXJlIFdvcmtlcnMsIEJ1biwgZXRjLlxuICpcbiAqIFdoZW4gdG8gcGljayB0aGlzOlxuICogICAtIENvbnN1bWVyIHdhbnRzIGEgU1BFQ0lGSUMgZGVsYXkgKGUuZy4gXCJzaGlwIHRlbGVtZXRyeSBpbiA1XG4gKiAgICAgc2Vjb25kcywgYmF0Y2hlZFwiKSDigJQgcGFzcyBgY3JlYXRlU2V0VGltZW91dERyaXZlcih7IGRlbGF5TXM6IDUwMDAgfSlgXG4gKiAgIC0gQ3Jvc3MtcnVudGltZSBkZXRhY2ggd2hlcmUgYHNldEltbWVkaWF0ZWAgaXNuJ3QgYXZhaWxhYmxlXG4gKiAgIC0gQ29hbGVzY2luZyBoaWdoLWZyZXF1ZW5jeSBldmVudHMgaW50byBhIGxvdy1mcmVxdWVuY3kgZmx1c2hcbiAqXG4gKiBDYXZlYXRzOlxuICogICAtIE5vdCBmb3IgbG93LWxhdGVuY3kgaG90IHBhdGhzIOKAlCBtaW5pbXVtIGRlbGF5IGlzIH40bXMgaW5cbiAqICAgICBicm93c2VycyBwZXIgdGhlIEhUTUw1IHNwZWMsIH4xbXMgaW4gTm9kZS4gVXNlXG4gKiAgICAgYG1pY3JvdGFza0JhdGNoRHJpdmVyYCBmb3Igc3ViLW1zIHNjaGVkdWxpbmcuXG4gKiAgIC0gQnJvd3NlciB0YWIgZnJlZXppbmcgLyB0aHJvdHRsaW5nIGNhbiBleHRlbmQgdGhlIGRlbGF5XG4gKiAgICAgc2lnbmlmaWNhbnRseS4gRG9uJ3QgcmVseSBvbiBwcmVjaXNlIHRpbWluZy5cbiAqL1xuXG5pbXBvcnQgeyBzZXRMb25nVGltZW91dCB9IGZyb20gJy4uLy4uL3RpbWVycy9sb25nVGltZW91dC5qcyc7XG5pbXBvcnQgeyB0eXBlIENoaWxkUnVubmVyLCBkZWZhdWx0UnVuQ2hpbGQgfSBmcm9tICcuLi9ydW5DaGlsZC5qcyc7XG5pbXBvcnQgdHlwZSB7IERldGFjaERyaXZlciB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUJhdGNoU2NoZWR1bGUgfSBmcm9tICcuL2JhdGNoLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXRUaW1lb3V0RHJpdmVyT3B0aW9ucyB7XG4gIC8qKiBNaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZmx1c2hpbmcgdGhlIGJhdGNoIOKAlCBhIGZpbml0ZSBudW1iZXIuXG4gICAqICBEZWZhdWx0IDAgKG5leHQgbWFjcm90YXNrKTsgYSBuZWdhdGl2ZSBkZWxheSB3YWl0cyBub3RoaW5nLCBhcyB0aGVcbiAgICogIGhvc3QgdGltZXIgZG9lcy4gQSBkZWxheSBwYXN0IDJeMzEg4oiSIDEgbXMgaXMgd2FpdGVkIGluIGZ1bGwgKHRoZSBvbmVcbiAgICogIGxvbmctdGltZXIgbGF3LCBgdGltZXJzL2xvbmdUaW1lb3V0LnRzYCksIG5ldmVyIGN1dCB0byAxIG1zLiAqL1xuICByZWFkb25seSBkZWxheU1zPzogbnVtYmVyO1xuICAvKiogQ3VzdG9tIGBydW5DaGlsZGAuIERlZmF1bHRzIHRvIHNwYXduaW5nIGEgYEZsb3dDaGFydEV4ZWN1dG9yYC4gKi9cbiAgcmVhZG9ubHkgcnVuQ2hpbGQ/OiBDaGlsZFJ1bm5lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNldFRpbWVvdXREcml2ZXIob3B0czogU2V0VGltZW91dERyaXZlck9wdGlvbnMgPSB7fSk6IERldGFjaERyaXZlciB7XG4gIGNvbnN0IGRlbGF5TXMgPSBvcHRzLmRlbGF5TXMgPz8gMDtcbiAgLy8gYEluZmluaXR5YCB3b3VsZCBuZXZlciBmbHVzaCB0aGUgYmF0Y2ggKGEgc2lsZW50IGhhbmcpIGFuZCBgTmFOYCBuYW1lcyBubyBkZWxheTogcmVmdXNlZCB3aGVuIHRoZSBkcml2ZXIgaXMgbWFkZSxcbiAgLy8gYnkgdGhlIGZpZWxkIGFuZCB0aGUgc2hhcGUgaXQgbmVlZHMg4oCUIG5ldmVyIHRoZSB2YWx1ZSAoYSBUeXBlRXJyb3IgZm9yIGEgbm9uLW51bWJlciwgYSBSYW5nZUVycm9yIG90aGVyd2lzZSkuXG4gIGNvbnN0IHJ1bGUgPSAnY3JlYXRlU2V0VGltZW91dERyaXZlcjogZGVsYXlNcyBtdXN0IGJlIGEgZmluaXRlIG51bWJlciBvZiBtaWxsaXNlY29uZHMnO1xuICBpZiAodHlwZW9mIGRlbGF5TXMgIT09ICdudW1iZXInKSB0aHJvdyBuZXcgVHlwZUVycm9yKHJ1bGUpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShkZWxheU1zKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IocnVsZSk7XG4gIGNvbnN0IHJ1bkNoaWxkID0gb3B0cy5ydW5DaGlsZCA/PyBkZWZhdWx0UnVuQ2hpbGQ7XG4gIHJldHVybiB7XG4gICAgbmFtZTogZGVsYXlNcyA9PT0gMCA/ICdzZXQtdGltZW91dCcgOiBgc2V0LXRpbWVvdXQtJHtkZWxheU1zfW1zYCxcbiAgICBjYXBhYmlsaXRpZXM6IHsgYnJvd3NlclNhZmU6IHRydWUsIG5vZGVTYWZlOiB0cnVlLCBlZGdlU2FmZTogdHJ1ZSB9LFxuICAgIHNjaGVkdWxlOiBjcmVhdGVCYXRjaFNjaGVkdWxlKChmbHVzaCkgPT4ge1xuICAgICAgc2V0TG9uZ1RpbWVvdXQoZmx1c2gsIGRlbGF5TXMpO1xuICAgIH0sIHJ1bkNoaWxkKSxcbiAgfTtcbn1cblxuLyoqIERlZmF1bHQgc2luZ2xldG9uIOKAlCB6ZXJvLWRlbGF5IChuZXh0IG1hY3JvdGFzaykuIEZvciBjb25maWd1cmFibGVcbiAqICBkZWxheXMsIHVzZSBgY3JlYXRlU2V0VGltZW91dERyaXZlcih7IGRlbGF5TXMgfSlgLiAqL1xuZXhwb3J0IGNvbnN0IHNldFRpbWVvdXREcml2ZXI6IERldGFjaERyaXZlciA9IGNyZWF0ZVNldFRpbWVvdXREcml2ZXIoKTtcbiJdfQ==
|
|
@@ -37,7 +37,12 @@ export interface FlushResult {
|
|
|
37
37
|
readonly pending: number;
|
|
38
38
|
}
|
|
39
39
|
export interface FlushOptions {
|
|
40
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Max wall-clock to spend draining, in milliseconds. Default 30s.
|
|
42
|
+
* `Infinity` waits for every handle and arms no timer; a limit past
|
|
43
|
+
* 2^31 − 1 ms is waited in full, never cut to 1 ms; `0` or less gives up
|
|
44
|
+
* at once.
|
|
45
|
+
*/
|
|
41
46
|
readonly timeoutMs?: number;
|
|
42
47
|
}
|
|
43
48
|
/**
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
* is normal (it's why `wait()` rejects); we still want to drain
|
|
24
24
|
* the siblings.
|
|
25
25
|
*/
|
|
26
|
+
import { setLongTimeout } from '../timers/longTimeout.js';
|
|
26
27
|
import { ids, lookup, size } from './registry.js';
|
|
27
28
|
/**
|
|
28
29
|
* Wait for every in-flight detached handle to reach a terminal state.
|
|
@@ -67,15 +68,16 @@ export async function flushAllDetached(opts) {
|
|
|
67
68
|
seen.add(id);
|
|
68
69
|
const handles = newIds.map((id) => lookup(id)).filter((h) => h !== undefined);
|
|
69
70
|
// Race the drain against the per-iteration timeout. We use a
|
|
70
|
-
// `'timeout'` sentinel on the timeout side so the type narrows.
|
|
71
|
-
|
|
71
|
+
// `'timeout'` sentinel on the timeout side so the type narrows. The
|
|
72
|
+
// timer is the one long-timer law's (`timers/longTimeout.ts`): no
|
|
73
|
+
// timer for `Infinity`, never a 1 ms timer for a long limit.
|
|
74
|
+
let cancelTimer = () => undefined;
|
|
72
75
|
const timeoutPromise = new Promise((resolve) => {
|
|
73
|
-
|
|
76
|
+
cancelTimer = setLongTimeout(() => resolve('__detach_timeout__'), remainingMs);
|
|
74
77
|
});
|
|
75
78
|
const drainPromise = Promise.allSettled(handles.map((h) => h.wait()));
|
|
76
79
|
const result = await Promise.race([drainPromise, timeoutPromise]);
|
|
77
|
-
|
|
78
|
-
clearTimeout(timerId);
|
|
80
|
+
cancelTimer();
|
|
79
81
|
if (result === '__detach_timeout__') {
|
|
80
82
|
return { done, failed, pending: size() };
|
|
81
83
|
}
|
|
@@ -88,4 +90,4 @@ export async function flushAllDetached(opts) {
|
|
|
88
90
|
}
|
|
89
91
|
return { done, failed, pending: 0 };
|
|
90
92
|
}
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx1c2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2RldGFjaC9mbHVzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQTJCbEQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsSUFBbUI7SUFDeEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxFQUFFLFNBQVMsSUFBSSxNQUFNLENBQUM7SUFDNUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDL0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRWYsT0FBTyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixNQUFNLFdBQVcsR0FBRyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxXQUFXLElBQUksQ0FBQztZQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBRS9ELGlFQUFpRTtRQUNqRSxpRUFBaUU7UUFDakUsZ0NBQWdDO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hCLGlFQUFpRTtZQUNqRSwrREFBK0Q7WUFDL0QsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEIsU0FBUztRQUNYLENBQUM7UUFDRCxLQUFLLE1BQU0sRUFBRSxJQUFJLE1BQU07WUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBcUIsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUVqRyw2REFBNkQ7UUFDN0Qsb0VBQW9FO1FBQ3BFLGtFQUFrRTtRQUNsRSw2REFBNkQ7UUFDN0QsSUFBSSxXQUFXLEdBQWUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQzlDLE1BQU0sY0FBYyxHQUFHLElBQUksT0FBTyxDQUF1QixDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ25FLFdBQVcsR0FBRyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDakYsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsV0FBVyxFQUFFLENBQUM7UUFFZCxJQUFJLE1BQU0sS0FBSyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzNDLENBQUM7UUFDRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxXQUFXO2dCQUFFLElBQUksRUFBRSxDQUFDOztnQkFDaEMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGV0YWNoL2ZsdXNoLnRzIOKAlCBEcmFpbiBldmVyeSBpbi1mbGlnaHQgZGV0YWNoZWQgaGFuZGxlIHRvIHRlcm1pbmFsLlxuICpcbiAqIFBhdHRlcm46ICBEcmFpbi1sb29wIHdpdGggZGVhZGxpbmUuIFNhbWUgc2hhcGUgYXMgYSBncmFjZWZ1bCBIVFRQXG4gKiAgICAgICAgICAgc2VydmVyIHNodXRkb3duOiBzbmFwc2hvdCB0aGUgcXVldWUsIGF3YWl0IGV2ZXJ5dGhpbmcgaW5cbiAqICAgICAgICAgICBmbGlnaHQsIHJlcGVhdCB1bnRpbCBlbXB0eSBvciBkZWFkbGluZS5cbiAqIFJvbGU6ICAgICBHcmFjZWZ1bC1zaHV0ZG93biBob29rIGZvciBjb25zdW1lcnMgd2hvIGxhdW5jaGVkXG4gKiAgICAgICAgICAgZmlyZS1hbmQtZm9yZ2V0IHdvcmsgYW5kIHdhbnQgdG8gbWFrZSBzdXJlIGl0IGFjdHVhbGx5XG4gKiAgICAgICAgICAgZmx1c2hlZCBiZWZvcmUgZXhpdGluZyAoc2VydmVyIHN0b3AsIHRlc3QgY2xlYW51cCwgZXRjLikuXG4gKlxuICogV2h5IGl0ZXJhdGUgKG5vdCBzaW5nbGUgUHJvbWlzZS5hbGwgb3ZlciBhIHNuYXBzaG90KTpcbiAqICAgLSBBIGNoaWxkIHN0YWdlIGNhbiBpdHNlbGYgY2FsbCBgZGV0YWNoQW5kRm9yZ2V0YCB3aGlsZSBydW5uaW5nIOKAlFxuICogICAgIG5ldyBoYW5kbGVzIGFycml2ZSBXSElMRSB3ZSdyZSBmbHVzaGluZy4gQSBzaW5nbGUgc25hcHNob3Qgd291bGRcbiAqICAgICBtaXNzIHRoZW0uIExvb3BpbmcgdW50aWwgYHNpemUoKSA9PT0gMGAgZHJhaW5zIHRyYW5zaXRpdmVseS5cbiAqXG4gKiBXaHkgZGVkdXBlIHZpYSBgc2VlbmAgU2V0OlxuICogICAtIEhhbmRsZXMgYWxyZWFkeSB0ZXJtaW5hbCAoYnV0IG5vdCB5ZXQgYHVucmVnaXN0ZXJgZWQgYnkgdGhlaXJcbiAqICAgICBkcml2ZXIncyBmaW5hbGx5LWJsb2NrKSBjYW4gcmUtYXBwZWFyIGluIHN1YnNlcXVlbnQgc25hcHNob3RzLlxuICogICAgIFdpdGhvdXQgZGVkdXBlLCB0aGUgYGRvbmVgIGNvdW50ZXIgd291bGQgZG91YmxlLWNvdW50IHRoZW0uXG4gKlxuICogV2h5IGBQcm9taXNlLmFsbFNldHRsZWRgIChub3QgYFByb21pc2UuYWxsYCk6XG4gKiAgIC0gT25lIGhhbmRsZSdzIHJlamVjdGlvbiBtdXN0IE5PVCBhYm9ydCB0aGUgcmVzdC4gQSBmYWlsZWQgY2hpbGRcbiAqICAgICBpcyBub3JtYWwgKGl0J3Mgd2h5IGB3YWl0KClgIHJlamVjdHMpOyB3ZSBzdGlsbCB3YW50IHRvIGRyYWluXG4gKiAgICAgdGhlIHNpYmxpbmdzLlxuICovXG5cbmltcG9ydCB7IHNldExvbmdUaW1lb3V0IH0gZnJvbSAnLi4vdGltZXJzL2xvbmdUaW1lb3V0LmpzJztcbmltcG9ydCB7IGlkcywgbG9va3VwLCBzaXplIH0gZnJvbSAnLi9yZWdpc3RyeS5qcyc7XG5pbXBvcnQgdHlwZSB7IERldGFjaEhhbmRsZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZsdXNoUmVzdWx0IHtcbiAgLyoqIEhhbmRsZXMgd2hvc2UgYHdhaXQoKWAgd2UgRVhQTElDSVRMWSBhd2FpdGVkIGFuZCBzYXcgZnVsZmlsbGVkLlxuICAgKiAgQmVzdC1lZmZvcnQgY291bnQg4oCUIGEgY2hpbGQgdGhhdCBjb21wbGV0ZXMgaW5zaWRlIGFub3RoZXInc1xuICAgKiAgYHdhaXQoKWAgbWF5IGZpbmlzaCAoYW5kIHVucmVnaXN0ZXIpIGJlZm9yZSB3ZSBnZXQgYSBjaGFuY2UgdG9cbiAgICogIGF3YWl0IGl0IGRpcmVjdGx5LiBUaGUgRFJBSU4gaXMgc3RpbGwgZ3VhcmFudGVlZCAocmVnaXN0cnkgZW1wdHlcbiAgICogIG9uIHJldHVybik7IG9ubHkgdGhlIENPVU5UIGlzIGFwcHJveGltYXRlLiAqL1xuICByZWFkb25seSBkb25lOiBudW1iZXI7XG4gIC8qKiBIYW5kbGVzIHdob3NlIGB3YWl0KClgIHJlamVjdGVkLiBTYW1lIGJlc3QtZWZmb3J0IHNlbWFudGljcy4gKi9cbiAgcmVhZG9ubHkgZmFpbGVkOiBudW1iZXI7XG4gIC8qKiBIYW5kbGVzIHN0aWxsIGluLWZsaWdodCB3aGVuIHRoZSBkZWFkbGluZSBleHBpcmVkLiBgMGAgaW5kaWNhdGVzXG4gICAqICBhIHN1Y2Nlc3NmdWwgKGNvbXBsZXRlKSBkcmFpbiDigJQgcmVnaXN0cnkgd2FzIGVtcHR5IG9uIHJldHVybi4gKi9cbiAgcmVhZG9ubHkgcGVuZGluZzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsdXNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNYXggd2FsbC1jbG9jayB0byBzcGVuZCBkcmFpbmluZywgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0IDMwcy5cbiAgICogYEluZmluaXR5YCB3YWl0cyBmb3IgZXZlcnkgaGFuZGxlIGFuZCBhcm1zIG5vIHRpbWVyOyBhIGxpbWl0IHBhc3RcbiAgICogMl4zMSDiiJIgMSBtcyBpcyB3YWl0ZWQgaW4gZnVsbCwgbmV2ZXIgY3V0IHRvIDEgbXM7IGAwYCBvciBsZXNzIGdpdmVzIHVwXG4gICAqIGF0IG9uY2UuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0TXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogV2FpdCBmb3IgZXZlcnkgaW4tZmxpZ2h0IGRldGFjaGVkIGhhbmRsZSB0byByZWFjaCBhIHRlcm1pbmFsIHN0YXRlLlxuICogUmV0dXJucyBjb3VudHMgZm9yIGRpYWdub3N0aWNzLiBQUk9DRVNTLVdJREUg4oCUIGRyYWlucyBldmVyeSBkcml2ZXJcbiAqIGFjcm9zcyBldmVyeSBleGVjdXRvci4gRm9yIHBlci1leGVjdXRvciBzY29waW5nLCBjb25zdW1lcnMgc2hvdWxkXG4gKiBjb2xsZWN0IHRoZWlyIG93biBoYW5kbGVzIGZyb20gYGV4ZWN1dG9yLmRldGFjaEFuZEpvaW5MYXRlciguLi4pYFxuICogY2FsbHMgYW5kIGF3YWl0IGBQcm9taXNlLmFsbFNldHRsZWQoWy4uLl0ubWFwKGggPT4gaC53YWl0KCkpKWBcbiAqIHRoZW1zZWx2ZXMuXG4gKlxuICogQGV4YW1wbGUgR3JhY2VmdWwgc2VydmVyIHNodXRkb3duXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBmbHVzaEFsbERldGFjaGVkIH0gZnJvbSAnZm9vdHByaW50anMvZGV0YWNoJztcbiAqXG4gKiBwcm9jZXNzLm9uKCdTSUdURVJNJywgYXN5bmMgKCkgPT4ge1xuICogICBjb25zdCBzdGF0cyA9IGF3YWl0IGZsdXNoQWxsRGV0YWNoZWQoeyB0aW1lb3V0TXM6IDEwXzAwMCB9KTtcbiAqICAgY29uc29sZS5sb2coYERyYWluZWQgJHtzdGF0cy5kb25lfSBkb25lLCAke3N0YXRzLmZhaWxlZH0gZmFpbGVkLCAke3N0YXRzLnBlbmRpbmd9IHBlbmRpbmcuYCk7XG4gKiAgIHByb2Nlc3MuZXhpdChzdGF0cy5wZW5kaW5nID09PSAwID8gMCA6IDEpO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZsdXNoQWxsRGV0YWNoZWQob3B0cz86IEZsdXNoT3B0aW9ucyk6IFByb21pc2U8Rmx1c2hSZXN1bHQ+IHtcbiAgY29uc3QgdGltZW91dE1zID0gb3B0cz8udGltZW91dE1zID8/IDMwXzAwMDtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBsZXQgZG9uZSA9IDA7XG4gIGxldCBmYWlsZWQgPSAwO1xuXG4gIHdoaWxlIChzaXplKCkgPiAwKSB7XG4gICAgY29uc3QgcmVtYWluaW5nTXMgPSB0aW1lb3V0TXMgLSAoRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCk7XG4gICAgaWYgKHJlbWFpbmluZ01zIDw9IDApIHJldHVybiB7IGRvbmUsIGZhaWxlZCwgcGVuZGluZzogc2l6ZSgpIH07XG5cbiAgICAvLyBTbmFwc2hvdCBvZiBORVcgKHVuc2VlbikgaGFuZGxlcy4gRXhpc3RpbmcgdGVybWluYWwtYnV0LXN0aWxsLVxuICAgIC8vIHJlZ2lzdGVyZWQgaGFuZGxlcyByZS1hcHBlYXIgaW4gc3Vic2VxdWVudCBzbmFwc2hvdHM7IHRoZSBzZWVuXG4gICAgLy8gc2V0IHByZXZlbnRzIGRvdWJsZS1jb3VudGluZy5cbiAgICBjb25zdCBuZXdJZHMgPSBpZHMoKS5maWx0ZXIoKGlkKSA9PiAhc2Vlbi5oYXMoaWQpKTtcbiAgICBpZiAobmV3SWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gRXZlcnl0aGluZyBpbiB0aGUgcmVnaXN0cnkgaXMgYWxyZWFkeSBhd2FpdGVkIOKAlCB5aWVsZCBvbmNlIGFuZFxuICAgICAgLy8gcmUtY2hlY2suIFRoZSBkcml2ZXIncyB1bnJlZ2lzdGVyLWluLWZpbmFsbHkgaGFzbid0IHJ1biB5ZXQuXG4gICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGlkIG9mIG5ld0lkcykgc2Vlbi5hZGQoaWQpO1xuXG4gICAgY29uc3QgaGFuZGxlcyA9IG5ld0lkcy5tYXAoKGlkKSA9PiBsb29rdXAoaWQpKS5maWx0ZXIoKGgpOiBoIGlzIERldGFjaEhhbmRsZSA9PiBoICE9PSB1bmRlZmluZWQpO1xuXG4gICAgLy8gUmFjZSB0aGUgZHJhaW4gYWdhaW5zdCB0aGUgcGVyLWl0ZXJhdGlvbiB0aW1lb3V0LiBXZSB1c2UgYVxuICAgIC8vIGAndGltZW91dCdgIHNlbnRpbmVsIG9uIHRoZSB0aW1lb3V0IHNpZGUgc28gdGhlIHR5cGUgbmFycm93cy4gVGhlXG4gICAgLy8gdGltZXIgaXMgdGhlIG9uZSBsb25nLXRpbWVyIGxhdydzIChgdGltZXJzL2xvbmdUaW1lb3V0LnRzYCk6IG5vXG4gICAgLy8gdGltZXIgZm9yIGBJbmZpbml0eWAsIG5ldmVyIGEgMSBtcyB0aW1lciBmb3IgYSBsb25nIGxpbWl0LlxuICAgIGxldCBjYW5jZWxUaW1lcjogKCkgPT4gdm9pZCA9ICgpID0+IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPCdfX2RldGFjaF90aW1lb3V0X18nPigocmVzb2x2ZSkgPT4ge1xuICAgICAgY2FuY2VsVGltZXIgPSBzZXRMb25nVGltZW91dCgoKSA9PiByZXNvbHZlKCdfX2RldGFjaF90aW1lb3V0X18nKSwgcmVtYWluaW5nTXMpO1xuICAgIH0pO1xuICAgIGNvbnN0IGRyYWluUHJvbWlzZSA9IFByb21pc2UuYWxsU2V0dGxlZChoYW5kbGVzLm1hcCgoaCkgPT4gaC53YWl0KCkpKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW2RyYWluUHJvbWlzZSwgdGltZW91dFByb21pc2VdKTtcbiAgICBjYW5jZWxUaW1lcigpO1xuXG4gICAgaWYgKHJlc3VsdCA9PT0gJ19fZGV0YWNoX3RpbWVvdXRfXycpIHtcbiAgICAgIHJldHVybiB7IGRvbmUsIGZhaWxlZCwgcGVuZGluZzogc2l6ZSgpIH07XG4gICAgfVxuICAgIGZvciAoY29uc3QgciBvZiByZXN1bHQpIHtcbiAgICAgIGlmIChyLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIGRvbmUrKztcbiAgICAgIGVsc2UgZmFpbGVkKys7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgZG9uZSwgZmFpbGVkLCBwZW5kaW5nOiAwIH07XG59XG4iXX0=
|
|
@@ -80,6 +80,7 @@ export class StageRunner {
|
|
|
80
80
|
// returned normally and the engine turned its value into a pause.)
|
|
81
81
|
let result;
|
|
82
82
|
try {
|
|
83
|
+
context.beginSourceInvocation(attempt);
|
|
83
84
|
const output = stageFunc(scope, breakFn, streamCallback);
|
|
84
85
|
// Sync+async safety: only await real Promises to avoid thenable assimilation
|
|
85
86
|
if (output instanceof Promise) {
|
|
@@ -165,4 +166,4 @@ function raceAbort(promise, signal) {
|
|
|
165
166
|
});
|
|
166
167
|
});
|
|
167
168
|
}
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhZ2VSdW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9TdGFnZVJ1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxNQUFNLE9BQU8sV0FBVztJQUNPO0lBQTdCLFlBQTZCLElBQStCO1FBQS9CLFNBQUksR0FBSixJQUFJLENBQTJCO0lBQUcsQ0FBQztJQUVoRTs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxHQUFHLENBQ1AsSUFBNkIsRUFDN0IsU0FBc0MsRUFDdEMsT0FBcUIsRUFDckIsT0FBbUIsRUFDbkIsT0FBd0I7UUFFeEIsZ0dBQWdHO1FBQ2hHLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsOEdBQThHO1FBQzlHLHNHQUFzRztRQUN0RyxNQUFNLFVBQVUsR0FDZCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUM7WUFDNUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxD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QUFFLENBQ25CLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUQsT0FBTyxDQUFDLElBQUksQ0FDVixDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZixDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDN0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YWdlUnVubmVyIOKAlCBFeGVjdXRlcyBpbmRpdmlkdWFsIHN0YWdlIGZ1bmN0aW9ucy5cbiAqXG4gKiBSZXNwb25zaWJpbGl0aWVzOlxuICogLSBDcmVhdGUgc2NvcGUgdmlhIFNjb3BlRmFjdG9yeSBmb3IgZWFjaCBzdGFnZVxuICogLSBBcHBseSBzY29wZSBwcm90ZWN0aW9uIChjcmVhdGVQcm90ZWN0ZWRTY29wZSkgdG8gaW50ZXJjZXB0IGRpcmVjdCBhc3NpZ25tZW50c1xuICogLSBIYW5kbGUgc3RyZWFtaW5nIHN0YWdlcyAob25TdGFydCwgb25Ub2tlbiwgb25FbmQgbGlmZWN5Y2xlKVxuICogLSBTeW5jK2FzeW5jIHNhZmV0eTogb25seSBhd2FpdCByZWFsIFByb21pc2VzIChpbnN0YW5jZW9mIGNoZWNrKVxuICovXG5cbmltcG9ydCB7IGludGVycnVwdFByb2JsZW0gfSBmcm9tICcuLi8uLi9hdHRlbXB0L2VmZmVjdC5qcyc7XG5pbXBvcnQgdHlwZSB7IEF0dGVtcHRDb250ZXh0IH0gZnJvbSAnLi4vLi4vYXR0ZW1wdC90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uLy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHsgaXNJbnRlcnJ1cHRTaWduYWwgfSBmcm9tICcuLi8uLi9wYXVzZS9pbnRlcnJ1cHQuanMnO1xuaW1wb3J0IHsgaXNQYXVzZVJlc3VsdCwgaXNQYXVzZVNpZ25hbCwgUGF1c2VTaWduYWwgfSBmcm9tICcuLi8uLi9wYXVzZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVQcm90ZWN0ZWRTY29wZSB9IGZyb20gJy4uLy4uL3Njb3BlL3Byb3RlY3Rpb24vY3JlYXRlUHJvdGVjdGVkU2NvcGUuanMnO1xuaW1wb3J0IHsgcmVxdWlyZVNjb3BlUnVudGltZSB9IGZyb20gJy4uLy4uL3Njb3BlL3J1bnRpbWUuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBIYW5kbGVyRGVwcywgU3RhZ2VGdW5jdGlvbiwgU3RyZWFtQ2FsbGJhY2sgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBzZXJ2ZWRQYXVzZSB9IGZyb20gJy4vc2VydmVkUGF1c2UuanMnO1xuXG5leHBvcnQgY2xhc3MgU3RhZ2VSdW5uZXI8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGVwczogSGFuZGxlckRlcHM8VE91dCwgVFNjb3BlPikge31cblxuICAvKipcbiAgICogUnVuIG9uZSBzdGFnZSBmdW5jdGlvbi4gYGF0dGVtcHRgIGlzIHRoZSBhdHRlbXB0IHJ1bm5lcidzIChQMWIpIOKAlCBwcmVzZW50IHdoZW4gdGhlIHN0YWdlIHJ1bnMgdW5kZXIgYSByZXRyeVxuICAgKiBwb2xpY3ksIGEgYHRpbWVvdXRNc2Agb3IgYSBydW4gZGVhZGxpbmU6IHRoZSBzY29wZSBoYW5kcyBpdCBvdXQgKGAkYXR0ZW1wdCgpYCkgYW5kIGlzIGZlbmNlZCB0byBpdCwgYW5kIHRoZVxuICAgKiByYWNlIGJlbG93IGlzIGFnYWluc3QgSVRTIHNpZ25hbCAodGhlIHJ1bidzLCBjb21wb3NlZCB3aXRoIHRoZSBhdHRlbXB0J3MgY2FwKS4gV2l0aG91dCBvbmUsIHRoZSByYWNlIGlzXG4gICAqIGFnYWluc3QgdGhlIHJ1bidzIHNpZ25hbCwgYXMgaXQgYWx3YXlzIHdhcy5cbiAgICovXG4gIGFzeW5jIHJ1bihcbiAgICBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBzdGFnZUZ1bmM6IFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPixcbiAgICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gICAgYnJlYWtGbjogKCkgPT4gdm9pZCxcbiAgICBhdHRlbXB0PzogQXR0ZW1wdENvbnRleHQsXG4gICk6IFByb21pc2U8VE91dD4ge1xuICAgIC8vIEJlZm9yZSB0aGUgc2NvcGUgZXhpc3RzOiB0aGUgZmFjYWRlIHJlYWRzIGl0cyBhdHRlbXB0IChhbmQgdGhlIHJ1bidzIHNpZ25hbCkgYXQgY29uc3RydWN0aW9uLlxuICAgIGNvbnRleHQudXNlQXR0ZW1wdChhdHRlbXB0LCB0aGlzLmRlcHMuc2lnbmFsKTtcbiAgICAvLyBUaGUgYXR0ZW1wdCdzIHNpZ25hbCB3aGVuIGl0IGNhbiBhYm9ydCAodGhlIHJ1biBoYXMgYSBzaWduYWwsIG9yIHRoZSBhdHRlbXB0IGhhcyBhIGNhcCk7IGVsc2Ugbm9uZSDigJQgYSByYWNlXG4gICAgLy8gYWdhaW5zdCBhIHNpZ25hbCB0aGF0IG5ldmVyIGFib3J0cyB3b3VsZCBhZGQgYSBtaWNyb3Rhc2sgcGVyIGF0dGVtcHQgYW5kIHJlb3JkZXIgcGFyYWxsZWwgc2libGluZ3MuXG4gICAgY29uc3QgcmFjZVNpZ25hbCA9XG4gICAgICBhdHRlbXB0ICYmICh0aGlzLmRlcHMuc2lnbmFsICE9PSB1bmRlZmluZWQgfHwgYXR0ZW1wdC50aW1lb3V0TXMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgPyBhdHRlbXB0LnNpZ25hbFxuICAgICAgICA6IHRoaXMuZGVwcy5zaWduYWw7XG5cbiAgICAvLyBDcmVhdGUgc2NvcGUgdmlhIFNjb3BlRmFjdG9yeSDigJQgZWFjaCBzdGFnZSBnZXRzIGl0cyBvd24gc2NvcGUgaW5zdGFuY2VcbiAgICBjb25zdCByYXdTY29wZSA9IHRoaXMuZGVwcy5zY29wZUZhY3RvcnkoY29udGV4dCwgbm9kZS5uYW1lLCB0aGlzLmRlcHMucmVhZE9ubHlDb250ZXh0LCB0aGlzLmRlcHMuZXhlY3V0aW9uRW52KTtcbiAgICBjb25zdCBydW50aW1lID0gcmVxdWlyZVNjb3BlUnVudGltZShyYXdTY29wZSk7XG5cbiAgICAvLyBXcmFwIHNjb3BlIHdpdGggcHJvdGVjdGlvbiB0byBpbnRlcmNlcHQgZGlyZWN0IHByb3BlcnR5IGFzc2lnbm1lbnRzLlxuICAgIC8vIFByb3ZpZGVycyBkZWNsYXJlIHdoZXRoZXIgdGhlaXIgb3duIGFzc2lnbm1lbnQgdHJhcHMgYWxyZWFkeSBtYW5hZ2Ugd3JpdGVzLlxuICAgIGNvbnN0IHNjb3BlID0gcnVudGltZS5oYW5kbGVzQXNzaWdubWVudHNcbiAgICAgID8gcmF3U2NvcGVcbiAgICAgIDogKGNyZWF0ZVByb3RlY3RlZFNjb3BlKHJhd1Njb3BlIGFzIG9iamVjdCwge1xuICAgICAgICAgIG1vZGU6IHRoaXMuZGVwcy5zY29wZVByb3RlY3Rpb25Nb2RlLFxuICAgICAgICAgIHN0YWdlTmFtZTogbm9kZS5uYW1lLFxuICAgICAgICB9KSBhcyBUU2NvcGUpO1xuXG4gICAgLy8gU2V0IHVwIHN0cmVhbWluZyBjYWxsYmFjayBpZiB0aGlzIGlzIGEgc3RyZWFtaW5nIHN0YWdlXG4gICAgbGV0IHN0cmVhbUNhbGxiYWNrOiBTdHJlYW1DYWxsYmFjayB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYWNjdW11bGF0ZWRUZXh0ID0gJyc7XG5cbiAgICBpZiAobm9kZS5pc1N0cmVhbWluZykge1xuICAgICAgY29uc3Qgc3RyZWFtSWQgPSBub2RlLnN0cmVhbUlkID8/IG5vZGUubmFtZTtcbiAgICAgIHN0cmVhbUNhbGxiYWNrID0gKHRva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgICAgYWNjdW11bGF0ZWRUZXh0ICs9IHRva2VuO1xuICAgICAgICB0aGlzLmRlcHMuc3RyZWFtSGFuZGxlcnM/Lm9uVG9rZW4/LihzdHJlYW1JZCwgdG9rZW4pO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZGVwcy5zdHJlYW1IYW5kbGVycz8ub25TdGFydD8uKHN0cmVhbUlkKTtcbiAgICB9XG5cbiAgICBydW50aW1lLnNldEJyZWFrPy4oYnJlYWtGbik7XG5cbiAgICAvLyBOb3RpZnkgcmVjb3JkZXJzIG9mIHN0YWdlIHN0YXJ0IChpZiBzY29wZSBzdXBwb3J0cyBpdClcbiAgICBydW50aW1lLnRhcmdldC5ub3RpZnlTdGFnZVN0YXJ0Py4oKTtcblxuICAgIC8vIOKUgOKUgCBFeGVjdXRlIHRoZSBzdGFnZSBmdW5jdGlvbiDilIDilIBcbiAgICAvL1xuICAgIC8vIFRIRSBzdGFnZSBib3VuZGFyeSBmb3IgYGludGVycnVwdCgpYCAoZGVzaWduOiBkb2NzL2Rlc2lnbi9leGVjdXRpb24tY29udHJvbC5tZFxuICAgIC8vIEQzKS4gRXZlcnkgc3RhZ2UgZnVuY3Rpb24gaW4gdGhlIGVuZ2luZSBmdW5uZWxzIHRocm91Z2ggdGhpcyBvbmUgY2FsbCDigJRcbiAgICAvLyBsaW5lYXIgc3RhZ2VzLCBkZWNpZGVyIGFuZCBzZWxlY3RvciBzdGFnZXMgKHRoZWlyIGhhbmRsZXJzIGFyZSBoYW5kZWRcbiAgICAvLyBgZXhlY3V0ZVN0YWdlYCksIGZvcmsgY2hpbGRyZW4sIHN1YmZsb3cgYm9kaWVzIOKAlCBzbyBjb252ZXJ0aW5nIGhlcmUgaXNcbiAgICAvLyB3aGF0IG1ha2VzIGBpbnRlcnJ1cHQoKWAgd29yayBpbiBBTEwgb2YgdGhlbS4gQ2F0Y2hpbmcgaXQgaW4gYSB0cmF2ZXJzZXJcbiAgICAvLyBwaGFzZSBpbnN0ZWFkIHdvdWxkIGhhdmUgbGVmdCBkZWNpZGVyL3NlbGVjdG9yIHN0YWdlcyBzaWxlbnRseSB1bmFibGUgdG9cbiAgICAvLyBpbnRlcnJ1cHQuXG4gICAgLy9cbiAgICAvLyBUaGUgY29udmVyc2lvbiBpcyBkZWxpYmVyYXRlbHkgdG90YWw6IGFuIEludGVycnVwdFNpZ25hbCBiZWNvbWVzIHRoZVxuICAgIC8vIGxpYnJhcnkncyBleGlzdGluZyBQYXVzZVNpZ25hbCwgc3RhbXBlZCB3aXRoIHRoZSBub2RlIGlkIHRoZSBmcmVlXG4gICAgLy8gZnVuY3Rpb24gY291bGQgbm90IGtub3cgYW5kIHdpdGggYHBhdXNlZEJ5OiAnaW50ZXJydXB0J2Agc28gcmVzdW1lKClcbiAgICAvLyByZS1lbnRlcnMgdGhlIHN0YWdlIGZyb20gaXRzIHRvcC4gRXZlcnl0aGluZyBkb3duc3RyZWFtIOKAlCBjb21taXQtdGhlbi1cbiAgICAvLyByZXRocm93LCBvblBhdXNlLCBzdWJmbG93IHNjb3BlIGNhcHR1cmUsIGludm9rZXIgc3RhbXBpbmcsIHRoZSBvbmVcbiAgICAvLyBkZXRhY2hlZCBjaGVja3BvaW50IGNsb25lIOKAlCBpcyB0aGUgc2hpcHBlZCBwYXVzZSBtYWNoaW5lcnksIHVudG91Y2hlZC5cbiAgICAvL1xuICAgIC8vIGBub3RpZnlTdGFnZUVuZGAgZGVsaWJlcmF0ZWx5IGRvZXMgTk9UIGZpcmUgb24gdGhpcyBwYXRoOiB0aGUgc3RhZ2VcbiAgICAvLyBmdW5jdGlvbiBkaWQgbm90IHJldHVybiwgZXhhY3RseSBsaWtlIHRoZSBlcnJvciBwYXRoIGJlbG93IGl0LiAoVGhlXG4gICAgLy8gcGF1c2FibGUtaGFuZGxlciBwYXRoIGZ1cnRoZXIgZG93biBET0VTIGZpcmUgaXQg4oCUIHRoZXJlIHRoZSBmdW5jdGlvblxuICAgIC8vIHJldHVybmVkIG5vcm1hbGx5IGFuZCB0aGUgZW5naW5lIHR1cm5lZCBpdHMgdmFsdWUgaW50byBhIHBhdXNlLilcbiAgICBsZXQgcmVzdWx0OiBUT3V0O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBzdGFnZUZ1bmMoc2NvcGUsIGJyZWFrRm4sIHN0cmVhbUNhbGxiYWNrKTtcblxuICAgICAgLy8gU3luYythc3luYyBzYWZldHk6IG9ubHkgYXdhaXQgcmVhbCBQcm9taXNlcyB0byBhdm9pZCB0aGVuYWJsZSBhc3NpbWlsYXRpb25cbiAgICAgIGlmIChvdXRwdXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIC8vIFJhY2UgYWdhaW5zdCB0aGUgYXR0ZW1wdCdzIHNpZ25hbCAob3IgdGhlIHJ1bidzKSBpZiB0aGVyZSBpcyBvbmVcbiAgICAgICAgaWYgKHJhY2VTaWduYWwpIHtcbiAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgcmFjZUFib3J0KG91dHB1dCwgcmFjZVNpZ25hbCkpIGFzIFRPdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IG91dHB1dCkgYXMgVE91dDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gb3V0cHV0IGFzIFRPdXQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGlmIChpc0ludGVycnVwdFNpZ25hbChlcnJvcikpIHtcbiAgICAgICAgLy8gQSBrZXlsZXNzIHRvdWNoaW5nIHN0YWdlIOKAlCBvciBvbmUgdGhhdCBtYWRlIGEga2V5bGVzcyB0b3VjaGluZyBjYWxsIOKAlCBtYXkgbm90IGJlIHJlLXJ1biBieSBhIHJlc3VtZSAoUDMpOiBpdHNcbiAgICAgICAgLy8gaW50ZXJydXB0IGZhaWxzIHRoZSBzdGFnZSBpbnN0ZWFkLlxuICAgICAgICBjb25zdCByZWZ1c2FsID1cbiAgICAgICAgICBpbnRlcnJ1cHRQcm9ibGVtKG5vZGUudG91Y2hlcykgPz9cbiAgICAgICAgICAoY29udGV4dC5oYXNLZXlsZXNzRWZmZWN0XG4gICAgICAgICAgICA/ICdtYWRlIGEgdG91Y2hpbmcgJGNhbGwgd2l0aCBubyBpZGVtcG90ZW5jeUtleSwgYW5kIGEgcmVzdW1lIGFmdGVyIGludGVycnVwdCgpIHJlLXJ1bnMgdGhlIHN0YWdlIGZyb20gJyArXG4gICAgICAgICAgICAgICdpdHMgdG9wIOKAlCB0aGUgY2FsbCB3b3VsZCBiZSBzZW50IGFnYWluIHdpdGhvdXQgYSBrZXkuIEdpdmUgdGhlIGNhbGwgYSBrZXksIG9yIGludGVycnVwdCBiZWZvcmUgaXQuJ1xuICAgICAgICAgICAgOiB1bmRlZmluZWQpO1xuICAgICAgICBpZiAocmVmdXNhbCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoYFtmb290cHJpbnRdIHN0YWdlICcke25vZGUuaWR9JyAke3JlZnVzYWx9YCk7XG4gICAgICAgIHJ1bnRpbWUudGFyZ2V0Lm5vdGlmeVBhdXNlPy4oc2VydmVkUGF1c2UoY29udGV4dCwgZXJyb3IucGF5bG9hZCkpO1xuICAgICAgICB0aHJvdyBzdGFtcGVkUGF1c2UobmV3IFBhdXNlU2lnbmFsKGVycm9yLnBheWxvYWQsIG5vZGUuaWQsICdpbnRlcnJ1cHQnKSwgY29udGV4dCwgYXR0ZW1wdCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNQYXVzZVNpZ25hbChlcnJvcikgJiYgZXJyb3IgaW5zdGFuY2VvZiBQYXVzZVNpZ25hbCkgc3RhbXBlZFBhdXNlKGVycm9yLCBjb250ZXh0LCBhdHRlbXB0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIE5vdGlmeSByZWNvcmRlcnMgb2Ygc3RhZ2UgZW5kIChpZiBzY29wZSBzdXBwb3J0cyBpdClcbiAgICBydW50aW1lLnRhcmdldC5ub3RpZnlTdGFnZUVuZD8uKCk7XG5cbiAgICAvLyBDYWxsIG9uRW5kIGxpZmVjeWNsZSBob29rIGZvciBzdHJlYW1pbmcgc3RhZ2VzXG4gICAgaWYgKG5vZGUuaXNTdHJlYW1pbmcpIHtcbiAgICAgIGNvbnN0IHN0cmVhbUlkID0gbm9kZS5zdHJlYW1JZCA/PyBub2RlLm5hbWU7XG4gICAgICB0aGlzLmRlcHMuc3RyZWFtSGFuZGxlcnM/Lm9uRW5kPy4oc3RyZWFtSWQsIGFjY3VtdWxhdGVkVGV4dCk7XG4gICAgfVxuXG4gICAgLy8g4pSA4pSAIFBhdXNlIGRldGVjdGlvbiDilIDilIBcbiAgICAvLyBQYXVzYWJsZSBzdGFnZXM6IGFueSBub24tdm9pZCByZXR1cm4gPSBwYXVzZSB3aXRoIHRoYXQgZGF0YS5cbiAgICAvLyBBbHNvIHN1cHBvcnRzIGV4cGxpY2l0IHBhdXNlKHsgLi4uIH0pIGZvciBiYWNrd2FyZCBjb21wYXQuXG4gICAgaWYgKG5vZGUuaXNQYXVzYWJsZSAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcGF1c2VEYXRhID0gaXNQYXVzZVJlc3VsdChyZXN1bHQpID8gKHJlc3VsdCBhcyBhbnkpLmRhdGEgOiByZXN1bHQ7XG4gICAgICAvLyBOb3RpZnkgc2NvcGUgcmVjb3JkZXJzIGJlZm9yZSB0aHJvd2luZ1xuICAgICAgcnVudGltZS50YXJnZXQubm90aWZ5UGF1c2U/LihzZXJ2ZWRQYXVzZShjb250ZXh0LCBwYXVzZURhdGEpKTtcbiAgICAgIHRocm93IHN0YW1wZWRQYXVzZShuZXcgUGF1c2VTaWduYWwocGF1c2VEYXRhLCBub2RlLmlkKSwgY29udGV4dCwgYXR0ZW1wdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG4vKipcbiAqIFJlY29yZCBXSElDSCBleGVjdXRpb24gcGF1c2VkIG9uIHRoZSBzaWduYWwgKGZpcnN0IHN0YW1wIHdpbnMpIOKAlCB0aGUgc3RhZ2VcbiAqIGJvdW5kYXJ5IGlzIHRoZSBvbmUgcGxhY2UgdGhhdCBrbm93cyBpdHMgcnVudGltZVN0YWdlSWQgKHRoZSBydW4gaXMgYWRkZWRcbiAqIHdoZW4gdGhlIGNoZWNrcG9pbnQgaXMgYnVpbHQg4oCUIGBQYXVzZVNpZ25hbCDCtyBjb21wbGV0ZUV4ZWN1dGlvbmApOyB0aGVcbiAqIGNoZWNrcG9pbnQgY2FycmllcyBpdCBzbyBhIHJlc3VtZSBjYW4gbGluayB0byB0aGUgcGF1c2VkIGV4ZWN1dGlvblxuICogKGBUcmF2ZXJzYWxDb250ZXh0LnJlc3VtZWRGcm9tYCkuIFN5bmNocm9ub3VzIG9uIHB1cnBvc2U6IGFuIGV4dHJhIGF3YWl0XG4gKiBoZXJlIHdvdWxkIHJlb3JkZXIgcGFyYWxsZWwgc2libGluZ3MnIG1pY3JvdGFza3MuXG4gKi9cbmZ1bmN0aW9uIHN0YW1wZWRQYXVzZShzaWduYWw6IFBhdXNlU2lnbmFsLCBjb250ZXh0OiBTdGFnZUNvbnRleHQsIGF0dGVtcHQ/OiBBdHRlbXB0Q29udGV4dCk6IFBhdXNlU2lnbmFsIHtcbiAgc2lnbmFsLnN0YW1wRXhlY3V0aW9uKGNvbnRleHQucnVudGltZVN0YWdlSWQpO1xuICAvLyBBIHRvdWNoaW5nIHN0YWdlJ3Mga2V5IHJpZGVzIHRoZSBjaGVja3BvaW50IChQMyk6IGl0cyByZXN1bWUgcnVucyB1bmRlciB0aGUgc2FtZSBrZXkuXG4gIHNpZ25hbC5zdGFtcElkZW1wb3RlbmN5S2V5KGF0dGVtcHQ/LmlkZW1wb3RlbmN5S2V5KTtcbiAgcmV0dXJuIHNpZ25hbDtcbn1cblxuLyoqIFJhY2UgYSBwcm9taXNlIGFnYWluc3QgYW4gQWJvcnRTaWduYWwuIFJlamVjdHMgd2l0aCB0aGUgc2lnbmFsJ3MgcmVhc29uIG9uIGFib3J0LiAqL1xuZnVuY3Rpb24gcmFjZUFib3J0PFQ+KHByb21pc2U6IFByb21pc2U8VD4sIHNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgLy8gVGhlIHN0YWdlJ3Mgb3duIHByb21pc2UgaXMgYWJhbmRvbmVkOiBvYnNlcnZlIGl0cyByZWplY3Rpb24sIHNvIGl0IG5ldmVyIHN1cmZhY2VzIGFzIGFuIHVuaGFuZGxlZCBvbmUuXG4gICAgcHJvbWlzZS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzaWduYWwucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyBzaWduYWwucmVhc29uIDogbmV3IEVycm9yKHNpZ25hbC5yZWFzb24gPz8gJ0Fib3J0ZWQnKSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBvbkFib3J0ID0gKCkgPT5cbiAgICAgIHJlamVjdChzaWduYWwucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyBzaWduYWwucmVhc29uIDogbmV3IEVycm9yKHNpZ25hbC5yZWFzb24gPz8gJ0Fib3J0ZWQnKSk7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIHByb21pc2UudGhlbihcbiAgICAgICh2YWwpID0+IHtcbiAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCk7XG4gICAgICAgIHJlc29sdmUodmFsKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQWJvcnQpO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG59XG4iXX0=
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhZ2VSdW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9TdGFnZVJ1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxNQUFNLE9BQU8sV0FBVztJQUNPO0lBQTdCLFlBQTZCLElBQStCO1FBQS9CLFNBQUksR0FBSixJQUFJLENBQTJCO0lBQUcsQ0FBQztJQUVoRTs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxHQUFHLENBQ1AsSUFBNkIsRUFDN0IsU0FBc0MsRUFDdEMsT0FBcUIsRUFDckIsT0FBbUIsRUFDbkIsT0FBd0I7UUFFeEIsZ0dBQWdHO1FBQ2hHLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsOEdBQThHO1FBQzlHLHNHQUFzRztRQUN0RyxNQUFNLFVBQVUsR0FDZCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUM7WUFDNUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxD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LE1BQU0sRUFBRSxFQUFFO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUNuQixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNqRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFELE9BQU8sQ0FBQyxJQUFJLENBQ1YsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTixNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzdDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNkLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTdGFnZVJ1bm5lciDigJQgRXhlY3V0ZXMgaW5kaXZpZHVhbCBzdGFnZSBmdW5jdGlvbnMuXG4gKlxuICogUmVzcG9uc2liaWxpdGllczpcbiAqIC0gQ3JlYXRlIHNjb3BlIHZpYSBTY29wZUZhY3RvcnkgZm9yIGVhY2ggc3RhZ2VcbiAqIC0gQXBwbHkgc2NvcGUgcHJvdGVjdGlvbiAoY3JlYXRlUHJvdGVjdGVkU2NvcGUpIHRvIGludGVyY2VwdCBkaXJlY3QgYXNzaWdubWVudHNcbiAqIC0gSGFuZGxlIHN0cmVhbWluZyBzdGFnZXMgKG9uU3RhcnQsIG9uVG9rZW4sIG9uRW5kIGxpZmVjeWNsZSlcbiAqIC0gU3luYythc3luYyBzYWZldHk6IG9ubHkgYXdhaXQgcmVhbCBQcm9taXNlcyAoaW5zdGFuY2VvZiBjaGVjaylcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcnJ1cHRQcm9ibGVtIH0gZnJvbSAnLi4vLi4vYXR0ZW1wdC9lZmZlY3QuanMnO1xuaW1wb3J0IHR5cGUgeyBBdHRlbXB0Q29udGV4dCB9IGZyb20gJy4uLy4uL2F0dGVtcHQvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB7IGlzSW50ZXJydXB0U2lnbmFsIH0gZnJvbSAnLi4vLi4vcGF1c2UvaW50ZXJydXB0LmpzJztcbmltcG9ydCB7IGlzUGF1c2VSZXN1bHQsIGlzUGF1c2VTaWduYWwsIFBhdXNlU2lnbmFsIH0gZnJvbSAnLi4vLi4vcGF1c2UvdHlwZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlUHJvdGVjdGVkU2NvcGUgfSBmcm9tICcuLi8uLi9zY29wZS9wcm90ZWN0aW9uL2NyZWF0ZVByb3RlY3RlZFNjb3BlLmpzJztcbmltcG9ydCB7IHJlcXVpcmVTY29wZVJ1bnRpbWUgfSBmcm9tICcuLi8uLi9zY29wZS9ydW50aW1lLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgSGFuZGxlckRlcHMsIFN0YWdlRnVuY3Rpb24sIFN0cmVhbUNhbGxiYWNrIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgc2VydmVkUGF1c2UgfSBmcm9tICcuL3NlcnZlZFBhdXNlLmpzJztcblxuZXhwb3J0IGNsYXNzIFN0YWdlUnVubmVyPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4pIHt9XG5cbiAgLyoqXG4gICAqIFJ1biBvbmUgc3RhZ2UgZnVuY3Rpb24uIGBhdHRlbXB0YCBpcyB0aGUgYXR0ZW1wdCBydW5uZXIncyAoUDFiKSDigJQgcHJlc2VudCB3aGVuIHRoZSBzdGFnZSBydW5zIHVuZGVyIGEgcmV0cnlcbiAgICogcG9saWN5LCBhIGB0aW1lb3V0TXNgIG9yIGEgcnVuIGRlYWRsaW5lOiB0aGUgc2NvcGUgaGFuZHMgaXQgb3V0IChgJGF0dGVtcHQoKWApIGFuZCBpcyBmZW5jZWQgdG8gaXQsIGFuZCB0aGVcbiAgICogcmFjZSBiZWxvdyBpcyBhZ2FpbnN0IElUUyBzaWduYWwgKHRoZSBydW4ncywgY29tcG9zZWQgd2l0aCB0aGUgYXR0ZW1wdCdzIGNhcCkuIFdpdGhvdXQgb25lLCB0aGUgcmFjZSBpc1xuICAgKiBhZ2FpbnN0IHRoZSBydW4ncyBzaWduYWwsIGFzIGl0IGFsd2F5cyB3YXMuXG4gICAqL1xuICBhc3luYyBydW4oXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgc3RhZ2VGdW5jOiBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4sXG4gICAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICAgIGJyZWFrRm46ICgpID0+IHZvaWQsXG4gICAgYXR0ZW1wdD86IEF0dGVtcHRDb250ZXh0LFxuICApOiBQcm9taXNlPFRPdXQ+IHtcbiAgICAvLyBCZWZvcmUgdGhlIHNjb3BlIGV4aXN0czogdGhlIGZhY2FkZSByZWFkcyBpdHMgYXR0ZW1wdCAoYW5kIHRoZSBydW4ncyBzaWduYWwpIGF0IGNvbnN0cnVjdGlvbi5cbiAgICBjb250ZXh0LnVzZUF0dGVtcHQoYXR0ZW1wdCwgdGhpcy5kZXBzLnNpZ25hbCk7XG4gICAgLy8gVGhlIGF0dGVtcHQncyBzaWduYWwgd2hlbiBpdCBjYW4gYWJvcnQgKHRoZSBydW4gaGFzIGEgc2lnbmFsLCBvciB0aGUgYXR0ZW1wdCBoYXMgYSBjYXApOyBlbHNlIG5vbmUg4oCUIGEgcmFjZVxuICAgIC8vIGFnYWluc3QgYSBzaWduYWwgdGhhdCBuZXZlciBhYm9ydHMgd291bGQgYWRkIGEgbWljcm90YXNrIHBlciBhdHRlbXB0IGFuZCByZW9yZGVyIHBhcmFsbGVsIHNpYmxpbmdzLlxuICAgIGNvbnN0IHJhY2VTaWduYWwgPVxuICAgICAgYXR0ZW1wdCAmJiAodGhpcy5kZXBzLnNpZ25hbCAhPT0gdW5kZWZpbmVkIHx8IGF0dGVtcHQudGltZW91dE1zICE9PSB1bmRlZmluZWQpXG4gICAgICAgID8gYXR0ZW1wdC5zaWduYWxcbiAgICAgICAgOiB0aGlzLmRlcHMuc2lnbmFsO1xuXG4gICAgLy8gQ3JlYXRlIHNjb3BlIHZpYSBTY29wZUZhY3Rvcnkg4oCUIGVhY2ggc3RhZ2UgZ2V0cyBpdHMgb3duIHNjb3BlIGluc3RhbmNlXG4gICAgY29uc3QgcmF3U2NvcGUgPSB0aGlzLmRlcHMuc2NvcGVGYWN0b3J5KGNvbnRleHQsIG5vZGUubmFtZSwgdGhpcy5kZXBzLnJlYWRPbmx5Q29udGV4dCwgdGhpcy5kZXBzLmV4ZWN1dGlvbkVudik7XG4gICAgY29uc3QgcnVudGltZSA9IHJlcXVpcmVTY29wZVJ1bnRpbWUocmF3U2NvcGUpO1xuXG4gICAgLy8gV3JhcCBzY29wZSB3aXRoIHByb3RlY3Rpb24gdG8gaW50ZXJjZXB0IGRpcmVjdCBwcm9wZXJ0eSBhc3NpZ25tZW50cy5cbiAgICAvLyBQcm92aWRlcnMgZGVjbGFyZSB3aGV0aGVyIHRoZWlyIG93biBhc3NpZ25tZW50IHRyYXBzIGFscmVhZHkgbWFuYWdlIHdyaXRlcy5cbiAgICBjb25zdCBzY29wZSA9IHJ1bnRpbWUuaGFuZGxlc0Fzc2lnbm1lbnRzXG4gICAgICA/IHJhd1Njb3BlXG4gICAgICA6IChjcmVhdGVQcm90ZWN0ZWRTY29wZShyYXdTY29wZSBhcyBvYmplY3QsIHtcbiAgICAgICAgICBtb2RlOiB0aGlzLmRlcHMuc2NvcGVQcm90ZWN0aW9uTW9kZSxcbiAgICAgICAgICBzdGFnZU5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgfSkgYXMgVFNjb3BlKTtcblxuICAgIC8vIFNldCB1cCBzdHJlYW1pbmcgY2FsbGJhY2sgaWYgdGhpcyBpcyBhIHN0cmVhbWluZyBzdGFnZVxuICAgIGxldCBzdHJlYW1DYWxsYmFjazogU3RyZWFtQ2FsbGJhY2sgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGFjY3VtdWxhdGVkVGV4dCA9ICcnO1xuXG4gICAgaWYgKG5vZGUuaXNTdHJlYW1pbmcpIHtcbiAgICAgIGNvbnN0IHN0cmVhbUlkID0gbm9kZS5zdHJlYW1JZCA/PyBub2RlLm5hbWU7XG4gICAgICBzdHJlYW1DYWxsYmFjayA9ICh0b2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIGFjY3VtdWxhdGVkVGV4dCArPSB0b2tlbjtcbiAgICAgICAgdGhpcy5kZXBzLnN0cmVhbUhhbmRsZXJzPy5vblRva2VuPy4oc3RyZWFtSWQsIHRva2VuKTtcbiAgICAgIH07XG4gICAgICB0aGlzLmRlcHMuc3RyZWFtSGFuZGxlcnM/Lm9uU3RhcnQ/LihzdHJlYW1JZCk7XG4gICAgfVxuXG4gICAgcnVudGltZS5zZXRCcmVhaz8uKGJyZWFrRm4pO1xuXG4gICAgLy8gTm90aWZ5IHJlY29yZGVycyBvZiBzdGFnZSBzdGFydCAoaWYgc2NvcGUgc3VwcG9ydHMgaXQpXG4gICAgcnVudGltZS50YXJnZXQubm90aWZ5U3RhZ2VTdGFydD8uKCk7XG5cbiAgICAvLyDilIDilIAgRXhlY3V0ZSB0aGUgc3RhZ2UgZnVuY3Rpb24g4pSA4pSAXG4gICAgLy9cbiAgICAvLyBUSEUgc3RhZ2UgYm91bmRhcnkgZm9yIGBpbnRlcnJ1cHQoKWAgKGRlc2lnbjogZG9jcy9kZXNpZ24vZXhlY3V0aW9uLWNvbnRyb2wubWRcbiAgICAvLyBEMykuIEV2ZXJ5IHN0YWdlIGZ1bmN0aW9uIGluIHRoZSBlbmdpbmUgZnVubmVscyB0aHJvdWdoIHRoaXMgb25lIGNhbGwg4oCUXG4gICAgLy8gbGluZWFyIHN0YWdlcywgZGVjaWRlciBhbmQgc2VsZWN0b3Igc3RhZ2VzICh0aGVpciBoYW5kbGVycyBhcmUgaGFuZGVkXG4gICAgLy8gYGV4ZWN1dGVTdGFnZWApLCBmb3JrIGNoaWxkcmVuLCBzdWJmbG93IGJvZGllcyDigJQgc28gY29udmVydGluZyBoZXJlIGlzXG4gICAgLy8gd2hhdCBtYWtlcyBgaW50ZXJydXB0KClgIHdvcmsgaW4gQUxMIG9mIHRoZW0uIENhdGNoaW5nIGl0IGluIGEgdHJhdmVyc2VyXG4gICAgLy8gcGhhc2UgaW5zdGVhZCB3b3VsZCBoYXZlIGxlZnQgZGVjaWRlci9zZWxlY3RvciBzdGFnZXMgc2lsZW50bHkgdW5hYmxlIHRvXG4gICAgLy8gaW50ZXJydXB0LlxuICAgIC8vXG4gICAgLy8gVGhlIGNvbnZlcnNpb24gaXMgZGVsaWJlcmF0ZWx5IHRvdGFsOiBhbiBJbnRlcnJ1cHRTaWduYWwgYmVjb21lcyB0aGVcbiAgICAvLyBsaWJyYXJ5J3MgZXhpc3RpbmcgUGF1c2VTaWduYWwsIHN0YW1wZWQgd2l0aCB0aGUgbm9kZSBpZCB0aGUgZnJlZVxuICAgIC8vIGZ1bmN0aW9uIGNvdWxkIG5vdCBrbm93IGFuZCB3aXRoIGBwYXVzZWRCeTogJ2ludGVycnVwdCdgIHNvIHJlc3VtZSgpXG4gICAgLy8gcmUtZW50ZXJzIHRoZSBzdGFnZSBmcm9tIGl0cyB0b3AuIEV2ZXJ5dGhpbmcgZG93bnN0cmVhbSDigJQgY29tbWl0LXRoZW4tXG4gICAgLy8gcmV0aHJvdywgb25QYXVzZSwgc3ViZmxvdyBzY29wZSBjYXB0dXJlLCBpbnZva2VyIHN0YW1waW5nLCB0aGUgb25lXG4gICAgLy8gZGV0YWNoZWQgY2hlY2twb2ludCBjbG9uZSDigJQgaXMgdGhlIHNoaXBwZWQgcGF1c2UgbWFjaGluZXJ5LCB1bnRvdWNoZWQuXG4gICAgLy9cbiAgICAvLyBgbm90aWZ5U3RhZ2VFbmRgIGRlbGliZXJhdGVseSBkb2VzIE5PVCBmaXJlIG9uIHRoaXMgcGF0aDogdGhlIHN0YWdlXG4gICAgLy8gZnVuY3Rpb24gZGlkIG5vdCByZXR1cm4sIGV4YWN0bHkgbGlrZSB0aGUgZXJyb3IgcGF0aCBiZWxvdyBpdC4gKFRoZVxuICAgIC8vIHBhdXNhYmxlLWhhbmRsZXIgcGF0aCBmdXJ0aGVyIGRvd24gRE9FUyBmaXJlIGl0IOKAlCB0aGVyZSB0aGUgZnVuY3Rpb25cbiAgICAvLyByZXR1cm5lZCBub3JtYWxseSBhbmQgdGhlIGVuZ2luZSB0dXJuZWQgaXRzIHZhbHVlIGludG8gYSBwYXVzZS4pXG4gICAgbGV0IHJlc3VsdDogVE91dDtcbiAgICB0cnkge1xuICAgICAgY29udGV4dC5iZWdpblNvdXJjZUludm9jYXRpb24oYXR0ZW1wdCk7XG4gICAgICBjb25zdCBvdXRwdXQgPSBzdGFnZUZ1bmMoc2NvcGUsIGJyZWFrRm4sIHN0cmVhbUNhbGxiYWNrKTtcblxuICAgICAgLy8gU3luYythc3luYyBzYWZldHk6IG9ubHkgYXdhaXQgcmVhbCBQcm9taXNlcyB0byBhdm9pZCB0aGVuYWJsZSBhc3NpbWlsYXRpb25cbiAgICAgIGlmIChvdXRwdXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIC8vIFJhY2UgYWdhaW5zdCB0aGUgYXR0ZW1wdCdzIHNpZ25hbCAob3IgdGhlIHJ1bidzKSBpZiB0aGVyZSBpcyBvbmVcbiAgICAgICAgaWYgKHJhY2VTaWduYWwpIHtcbiAgICAgICAgICByZXN1bHQgPSAoYXdhaXQgcmFjZUFib3J0KG91dHB1dCwgcmFjZVNpZ25hbCkpIGFzIFRPdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gKGF3YWl0IG91dHB1dCkgYXMgVE91dDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gb3V0cHV0IGFzIFRPdXQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGlmIChpc0ludGVycnVwdFNpZ25hbChlcnJvcikpIHtcbiAgICAgICAgLy8gQSBrZXlsZXNzIHRvdWNoaW5nIHN0YWdlIOKAlCBvciBvbmUgdGhhdCBtYWRlIGEga2V5bGVzcyB0b3VjaGluZyBjYWxsIOKAlCBtYXkgbm90IGJlIHJlLXJ1biBieSBhIHJlc3VtZSAoUDMpOiBpdHNcbiAgICAgICAgLy8gaW50ZXJydXB0IGZhaWxzIHRoZSBzdGFnZSBpbnN0ZWFkLlxuICAgICAgICBjb25zdCByZWZ1c2FsID1cbiAgICAgICAgICBpbnRlcnJ1cHRQcm9ibGVtKG5vZGUudG91Y2hlcykgPz9cbiAgICAgICAgICAoY29udGV4dC5oYXNLZXlsZXNzRWZmZWN0XG4gICAgICAgICAgICA/ICdtYWRlIGEgdG91Y2hpbmcgJGNhbGwgd2l0aCBubyBpZGVtcG90ZW5jeUtleSwgYW5kIGEgcmVzdW1lIGFmdGVyIGludGVycnVwdCgpIHJlLXJ1bnMgdGhlIHN0YWdlIGZyb20gJyArXG4gICAgICAgICAgICAgICdpdHMgdG9wIOKAlCB0aGUgY2FsbCB3b3VsZCBiZSBzZW50IGFnYWluIHdpdGhvdXQgYSBrZXkuIEdpdmUgdGhlIGNhbGwgYSBrZXksIG9yIGludGVycnVwdCBiZWZvcmUgaXQuJ1xuICAgICAgICAgICAgOiB1bmRlZmluZWQpO1xuICAgICAgICBpZiAocmVmdXNhbCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoYFtmb290cHJpbnRdIHN0YWdlICcke25vZGUuaWR9JyAke3JlZnVzYWx9YCk7XG4gICAgICAgIHJ1bnRpbWUudGFyZ2V0Lm5vdGlmeVBhdXNlPy4oc2VydmVkUGF1c2UoY29udGV4dCwgZXJyb3IucGF5bG9hZCkpO1xuICAgICAgICB0aHJvdyBzdGFtcGVkUGF1c2UobmV3IFBhdXNlU2lnbmFsKGVycm9yLnBheWxvYWQsIG5vZGUuaWQsICdpbnRlcnJ1cHQnKSwgY29udGV4dCwgYXR0ZW1wdCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNQYXVzZVNpZ25hbChlcnJvcikgJiYgZXJyb3IgaW5zdGFuY2VvZiBQYXVzZVNpZ25hbCkgc3RhbXBlZFBhdXNlKGVycm9yLCBjb250ZXh0LCBhdHRlbXB0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIE5vdGlmeSByZWNvcmRlcnMgb2Ygc3RhZ2UgZW5kIChpZiBzY29wZSBzdXBwb3J0cyBpdClcbiAgICBydW50aW1lLnRhcmdldC5ub3RpZnlTdGFnZUVuZD8uKCk7XG5cbiAgICAvLyBDYWxsIG9uRW5kIGxpZmVjeWNsZSBob29rIGZvciBzdHJlYW1pbmcgc3RhZ2VzXG4gICAgaWYgKG5vZGUuaXNTdHJlYW1pbmcpIHtcbiAgICAgIGNvbnN0IHN0cmVhbUlkID0gbm9kZS5zdHJlYW1JZCA/PyBub2RlLm5hbWU7XG4gICAgICB0aGlzLmRlcHMuc3RyZWFtSGFuZGxlcnM/Lm9uRW5kPy4oc3RyZWFtSWQsIGFjY3VtdWxhdGVkVGV4dCk7XG4gICAgfVxuXG4gICAgLy8g4pSA4pSAIFBhdXNlIGRldGVjdGlvbiDilIDilIBcbiAgICAvLyBQYXVzYWJsZSBzdGFnZXM6IGFueSBub24tdm9pZCByZXR1cm4gPSBwYXVzZSB3aXRoIHRoYXQgZGF0YS5cbiAgICAvLyBBbHNvIHN1cHBvcnRzIGV4cGxpY2l0IHBhdXNlKHsgLi4uIH0pIGZvciBiYWNrd2FyZCBjb21wYXQuXG4gICAgaWYgKG5vZGUuaXNQYXVzYWJsZSAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcGF1c2VEYXRhID0gaXNQYXVzZVJlc3VsdChyZXN1bHQpID8gKHJlc3VsdCBhcyBhbnkpLmRhdGEgOiByZXN1bHQ7XG4gICAgICAvLyBOb3RpZnkgc2NvcGUgcmVjb3JkZXJzIGJlZm9yZSB0aHJvd2luZ1xuICAgICAgcnVudGltZS50YXJnZXQubm90aWZ5UGF1c2U/LihzZXJ2ZWRQYXVzZShjb250ZXh0LCBwYXVzZURhdGEpKTtcbiAgICAgIHRocm93IHN0YW1wZWRQYXVzZShuZXcgUGF1c2VTaWduYWwocGF1c2VEYXRhLCBub2RlLmlkKSwgY29udGV4dCwgYXR0ZW1wdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG4vKipcbiAqIFJlY29yZCBXSElDSCBleGVjdXRpb24gcGF1c2VkIG9uIHRoZSBzaWduYWwgKGZpcnN0IHN0YW1wIHdpbnMpIOKAlCB0aGUgc3RhZ2VcbiAqIGJvdW5kYXJ5IGlzIHRoZSBvbmUgcGxhY2UgdGhhdCBrbm93cyBpdHMgcnVudGltZVN0YWdlSWQgKHRoZSBydW4gaXMgYWRkZWRcbiAqIHdoZW4gdGhlIGNoZWNrcG9pbnQgaXMgYnVpbHQg4oCUIGBQYXVzZVNpZ25hbCDCtyBjb21wbGV0ZUV4ZWN1dGlvbmApOyB0aGVcbiAqIGNoZWNrcG9pbnQgY2FycmllcyBpdCBzbyBhIHJlc3VtZSBjYW4gbGluayB0byB0aGUgcGF1c2VkIGV4ZWN1dGlvblxuICogKGBUcmF2ZXJzYWxDb250ZXh0LnJlc3VtZWRGcm9tYCkuIFN5bmNocm9ub3VzIG9uIHB1cnBvc2U6IGFuIGV4dHJhIGF3YWl0XG4gKiBoZXJlIHdvdWxkIHJlb3JkZXIgcGFyYWxsZWwgc2libGluZ3MnIG1pY3JvdGFza3MuXG4gKi9cbmZ1bmN0aW9uIHN0YW1wZWRQYXVzZShzaWduYWw6IFBhdXNlU2lnbmFsLCBjb250ZXh0OiBTdGFnZUNvbnRleHQsIGF0dGVtcHQ/OiBBdHRlbXB0Q29udGV4dCk6IFBhdXNlU2lnbmFsIHtcbiAgc2lnbmFsLnN0YW1wRXhlY3V0aW9uKGNvbnRleHQucnVudGltZVN0YWdlSWQpO1xuICAvLyBBIHRvdWNoaW5nIHN0YWdlJ3Mga2V5IHJpZGVzIHRoZSBjaGVja3BvaW50IChQMyk6IGl0cyByZXN1bWUgcnVucyB1bmRlciB0aGUgc2FtZSBrZXkuXG4gIHNpZ25hbC5zdGFtcElkZW1wb3RlbmN5S2V5KGF0dGVtcHQ/LmlkZW1wb3RlbmN5S2V5KTtcbiAgcmV0dXJuIHNpZ25hbDtcbn1cblxuLyoqIFJhY2UgYSBwcm9taXNlIGFnYWluc3QgYW4gQWJvcnRTaWduYWwuIFJlamVjdHMgd2l0aCB0aGUgc2lnbmFsJ3MgcmVhc29uIG9uIGFib3J0LiAqL1xuZnVuY3Rpb24gcmFjZUFib3J0PFQ+KHByb21pc2U6IFByb21pc2U8VD4sIHNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPFQ+IHtcbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgLy8gVGhlIHN0YWdlJ3Mgb3duIHByb21pc2UgaXMgYWJhbmRvbmVkOiBvYnNlcnZlIGl0cyByZWplY3Rpb24sIHNvIGl0IG5ldmVyIHN1cmZhY2VzIGFzIGFuIHVuaGFuZGxlZCBvbmUuXG4gICAgcHJvbWlzZS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzaWduYWwucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyBzaWduYWwucmVhc29uIDogbmV3IEVycm9yKHNpZ25hbC5yZWFzb24gPz8gJ0Fib3J0ZWQnKSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBvbkFib3J0ID0gKCkgPT5cbiAgICAgIHJlamVjdChzaWduYWwucmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyBzaWduYWwucmVhc29uIDogbmV3IEVycm9yKHNpZ25hbC5yZWFzb24gPz8gJ0Fib3J0ZWQnKSk7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIHByb21pc2UudGhlbihcbiAgICAgICh2YWwpID0+IHtcbiAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCk7XG4gICAgICAgIHJlc29sdmUodmFsKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQWJvcnQpO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG59XG4iXX0=
|
|
@@ -65,6 +65,7 @@ export declare class StageContext {
|
|
|
65
65
|
readSources?: EngineReadSourceCapture;
|
|
66
66
|
private sourceReadCounter?;
|
|
67
67
|
private sourceAttempt?;
|
|
68
|
+
private sourceInvocations;
|
|
68
69
|
stageName: string;
|
|
69
70
|
/** Unique stage identifier from the builder (matches spec node id). */
|
|
70
71
|
stageId: string;
|
|
@@ -526,6 +527,8 @@ export declare class StageContext {
|
|
|
526
527
|
get attemptSummary(): AttemptSummary | undefined;
|
|
527
528
|
/** The attempt about to run (and the run's signal) — `StageRunner` sets both before it builds the scope. */
|
|
528
529
|
useAttempt(attempt: AttemptContext | undefined, runSignal: AbortSignal | undefined): void;
|
|
530
|
+
/** Native function-entry fact, including the direct one-call path with no retry runner. */
|
|
531
|
+
beginSourceInvocation(attempt: AttemptContext | undefined): void;
|
|
529
532
|
/** The attempt now running; `undefined` for a stage the attempt runner does not run. */
|
|
530
533
|
get attempt(): AttemptContext | undefined;
|
|
531
534
|
/** The run's signal, as `StageRunner` last saw it. */
|