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.
Files changed (108) hide show
  1. package/CLAUDE.md +2 -1
  2. package/dist/esm/index.d.ts +13 -2
  3. package/dist/esm/index.js +5 -3
  4. package/dist/esm/lib/attempt/backoff.d.ts +96 -0
  5. package/dist/esm/lib/attempt/backoff.js +173 -0
  6. package/dist/esm/lib/attempt/deadline.d.ts +0 -5
  7. package/dist/esm/lib/attempt/deadline.js +2 -27
  8. package/dist/esm/lib/attempt/index.d.ts +6 -4
  9. package/dist/esm/lib/attempt/index.js +6 -5
  10. package/dist/esm/lib/attempt/runner.js +3 -2
  11. package/dist/esm/lib/capture/readSources.d.ts +13 -2
  12. package/dist/esm/lib/capture/readSources.js +11 -3
  13. package/dist/esm/lib/capture/sourceOwnership.d.ts +21 -0
  14. package/dist/esm/lib/capture/sourceOwnership.js +133 -0
  15. package/dist/esm/lib/capture/sourceOwnershipFormat.d.ts +35 -0
  16. package/dist/esm/lib/capture/sourceOwnershipFormat.js +31 -0
  17. package/dist/esm/lib/capture/storedReadSourceCounts.d.ts +5 -1
  18. package/dist/esm/lib/capture/storedReadSourceCounts.js +15 -11
  19. package/dist/esm/lib/capture/storedReadSources.js +21 -5
  20. package/dist/esm/lib/capture/storedSourceOwnership.d.ts +8 -0
  21. package/dist/esm/lib/capture/storedSourceOwnership.js +100 -0
  22. package/dist/esm/lib/detach/drivers/setTimeout.d.ts +4 -2
  23. package/dist/esm/lib/detach/drivers/setTimeout.js +12 -2
  24. package/dist/esm/lib/detach/flush.d.ts +6 -1
  25. package/dist/esm/lib/detach/flush.js +8 -6
  26. package/dist/esm/lib/engine/handlers/StageRunner.js +2 -1
  27. package/dist/esm/lib/memory/StageContext.d.ts +3 -0
  28. package/dist/esm/lib/memory/StageContext.js +29 -8
  29. package/dist/esm/lib/memory/frameTypes.d.ts +2 -0
  30. package/dist/esm/lib/memory/frameTypes.js +1 -1
  31. package/dist/esm/lib/observer-queue/deferredDispatcher.d.ts +8 -1
  32. package/dist/esm/lib/observer-queue/deferredDispatcher.js +13 -6
  33. package/dist/esm/lib/recorder/AttemptRecorder.js +8 -9
  34. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +7 -2
  35. package/dist/esm/lib/runner/FlowChartExecutor.js +8 -3
  36. package/dist/esm/lib/runner/captureHistory.js +6 -4
  37. package/dist/esm/lib/runner/deadline.js +3 -2
  38. package/dist/esm/lib/runner/recordSink.d.ts +2 -1
  39. package/dist/esm/lib/runner/recordSink.js +12 -7
  40. package/dist/esm/lib/sinks/fileSink.js +7 -6
  41. package/dist/esm/lib/sinks/indexedAdmission.d.ts +14 -0
  42. package/dist/esm/lib/sinks/indexedAdmission.js +77 -0
  43. package/dist/esm/lib/sinks/indexedIO.d.ts +14 -0
  44. package/dist/esm/lib/sinks/indexedIO.js +98 -0
  45. package/dist/esm/lib/sinks/indexedRecordFile.d.ts +3 -0
  46. package/dist/esm/lib/sinks/indexedRecordFile.js +120 -0
  47. package/dist/esm/lib/sinks/indexedScan.d.ts +6 -0
  48. package/dist/esm/lib/sinks/indexedScan.js +73 -0
  49. package/dist/esm/lib/sinks/indexedTypes.d.ts +60 -0
  50. package/dist/esm/lib/sinks/indexedTypes.js +2 -0
  51. package/dist/esm/lib/timers/longTimeout.d.ts +37 -0
  52. package/dist/esm/lib/timers/longTimeout.js +56 -0
  53. package/dist/esm/sinks.d.ts +2 -0
  54. package/dist/esm/sinks.js +2 -1
  55. package/dist/index.js +8 -3
  56. package/dist/lib/attempt/backoff.js +178 -0
  57. package/dist/lib/attempt/deadline.js +4 -30
  58. package/dist/lib/attempt/index.js +9 -6
  59. package/dist/lib/attempt/runner.js +4 -3
  60. package/dist/lib/capture/readSources.js +11 -3
  61. package/dist/lib/capture/sourceOwnership.js +138 -0
  62. package/dist/lib/capture/sourceOwnershipFormat.js +35 -0
  63. package/dist/lib/capture/storedReadSourceCounts.js +15 -11
  64. package/dist/lib/capture/storedReadSources.js +21 -5
  65. package/dist/lib/capture/storedSourceOwnership.js +104 -0
  66. package/dist/lib/detach/drivers/setTimeout.js +12 -2
  67. package/dist/lib/detach/flush.js +8 -6
  68. package/dist/lib/engine/handlers/StageRunner.js +2 -1
  69. package/dist/lib/memory/StageContext.js +29 -8
  70. package/dist/lib/memory/frameTypes.js +1 -1
  71. package/dist/lib/observer-queue/deferredDispatcher.js +13 -6
  72. package/dist/lib/recorder/AttemptRecorder.js +8 -9
  73. package/dist/lib/runner/FlowChartExecutor.js +8 -3
  74. package/dist/lib/runner/captureHistory.js +6 -4
  75. package/dist/lib/runner/deadline.js +3 -2
  76. package/dist/lib/runner/recordSink.js +12 -7
  77. package/dist/lib/sinks/fileSink.js +7 -6
  78. package/dist/lib/sinks/indexedAdmission.js +85 -0
  79. package/dist/lib/sinks/indexedIO.js +108 -0
  80. package/dist/lib/sinks/indexedRecordFile.js +124 -0
  81. package/dist/lib/sinks/indexedScan.js +77 -0
  82. package/dist/lib/sinks/indexedTypes.js +3 -0
  83. package/dist/lib/timers/longTimeout.js +60 -0
  84. package/dist/sinks.js +4 -2
  85. package/dist/types/index.d.ts +13 -2
  86. package/dist/types/lib/attempt/backoff.d.ts +96 -0
  87. package/dist/types/lib/attempt/deadline.d.ts +0 -5
  88. package/dist/types/lib/attempt/index.d.ts +6 -4
  89. package/dist/types/lib/capture/readSources.d.ts +13 -2
  90. package/dist/types/lib/capture/sourceOwnership.d.ts +21 -0
  91. package/dist/types/lib/capture/sourceOwnershipFormat.d.ts +35 -0
  92. package/dist/types/lib/capture/storedReadSourceCounts.d.ts +5 -1
  93. package/dist/types/lib/capture/storedSourceOwnership.d.ts +8 -0
  94. package/dist/types/lib/detach/drivers/setTimeout.d.ts +4 -2
  95. package/dist/types/lib/detach/flush.d.ts +6 -1
  96. package/dist/types/lib/memory/StageContext.d.ts +3 -0
  97. package/dist/types/lib/memory/frameTypes.d.ts +2 -0
  98. package/dist/types/lib/observer-queue/deferredDispatcher.d.ts +8 -1
  99. package/dist/types/lib/runner/FlowChartExecutor.d.ts +7 -2
  100. package/dist/types/lib/runner/recordSink.d.ts +2 -1
  101. package/dist/types/lib/sinks/indexedAdmission.d.ts +14 -0
  102. package/dist/types/lib/sinks/indexedIO.d.ts +14 -0
  103. package/dist/types/lib/sinks/indexedRecordFile.d.ts +3 -0
  104. package/dist/types/lib/sinks/indexedScan.d.ts +6 -0
  105. package/dist/types/lib/sinks/indexedTypes.d.ts +60 -0
  106. package/dist/types/lib/timers/longTimeout.d.ts +37 -0
  107. package/dist/types/sinks.d.ts +2 -0
  108. 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. Default 0
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) => setTimeout(flush, delayMs), runChild),
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0VGltZW91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGV0YWNoL2RyaXZlcnMvc2V0VGltZW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBQW9CLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQVVqRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FBZ0MsRUFBRTtJQUN2RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztJQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLGVBQWUsQ0FBQztJQUNsRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsZUFBZSxPQUFPLElBQUk7UUFDaEUsWUFBWSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7UUFDbkUsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQztLQUMvRSxDQUFDO0FBQ0osQ0FBQztBQUVEO3lEQUN5RDtBQUN6RCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBaUIsc0JBQXNCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGV0YWNoL2RyaXZlcnMvc2V0VGltZW91dC50cyDigJQgRGVmZXIgZGV0YWNoZWQgd29yayB2aWEgYHNldFRpbWVvdXQoLi4uLCBkZWxheU1zKWAuXG4gKlxuICogUGF0dGVybjogIFByb2R1Y2VyLWNvbnN1bWVyIGJhdGNoIGZsdXNoOyBkZWZlcnJhbCBtZWNoYW5pc20gaXNcbiAqICAgICAgICAgICBgc2V0VGltZW91dGAgd2l0aCBhIGNvbmZpZ3VyYWJsZSBkZWxheSAoZGVmYXVsdCBgMGApLlxuICogUm9sZTogICAgIENyb3NzLXJ1bnRpbWUgXCJuZXh0IG1hY3JvdGFza1wiIGRyaXZlci4gV29ya3MgaW4gYnJvd3NlcnMsXG4gKiAgICAgICAgICAgTm9kZS5qcywgRGVubywgQ2xvdWRmbGFyZSBXb3JrZXJzLCBCdW4sIGV0Yy5cbiAqXG4gKiBXaGVuIHRvIHBpY2sgdGhpczpcbiAqICAgLSBDb25zdW1lciB3YW50cyBhIFNQRUNJRklDIGRlbGF5IChlLmcuIFwic2hpcCB0ZWxlbWV0cnkgaW4gNVxuICogICAgIHNlY29uZHMsIGJhdGNoZWRcIikg4oCUIHBhc3MgYGNyZWF0ZVNldFRpbWVvdXREcml2ZXIoeyBkZWxheU1zOiA1MDAwIH0pYFxuICogICAtIENyb3NzLXJ1bnRpbWUgZGV0YWNoIHdoZXJlIGBzZXRJbW1lZGlhdGVgIGlzbid0IGF2YWlsYWJsZVxuICogICAtIENvYWxlc2NpbmcgaGlnaC1mcmVxdWVuY3kgZXZlbnRzIGludG8gYSBsb3ctZnJlcXVlbmN5IGZsdXNoXG4gKlxuICogQ2F2ZWF0czpcbiAqICAgLSBOb3QgZm9yIGxvdy1sYXRlbmN5IGhvdCBwYXRocyDigJQgbWluaW11bSBkZWxheSBpcyB+NG1zIGluXG4gKiAgICAgYnJvd3NlcnMgcGVyIHRoZSBIVE1MNSBzcGVjLCB+MW1zIGluIE5vZGUuIFVzZVxuICogICAgIGBtaWNyb3Rhc2tCYXRjaERyaXZlcmAgZm9yIHN1Yi1tcyBzY2hlZHVsaW5nLlxuICogICAtIEJyb3dzZXIgdGFiIGZyZWV6aW5nIC8gdGhyb3R0bGluZyBjYW4gZXh0ZW5kIHRoZSBkZWxheVxuICogICAgIHNpZ25pZmljYW50bHkuIERvbid0IHJlbHkgb24gcHJlY2lzZSB0aW1pbmcuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDaGlsZFJ1bm5lciwgZGVmYXVsdFJ1bkNoaWxkIH0gZnJvbSAnLi4vcnVuQ2hpbGQuanMnO1xuaW1wb3J0IHR5cGUgeyBEZXRhY2hEcml2ZXIgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVCYXRjaFNjaGVkdWxlIH0gZnJvbSAnLi9iYXRjaC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0VGltZW91dERyaXZlck9wdGlvbnMge1xuICAvKiogTWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGZsdXNoaW5nIHRoZSBiYXRjaC4gRGVmYXVsdCAwXG4gICAqICAobmV4dCBtYWNyb3Rhc2spLiAqL1xuICByZWFkb25seSBkZWxheU1zPzogbnVtYmVyO1xuICAvKiogQ3VzdG9tIGBydW5DaGlsZGAuIERlZmF1bHRzIHRvIHNwYXduaW5nIGEgYEZsb3dDaGFydEV4ZWN1dG9yYC4gKi9cbiAgcmVhZG9ubHkgcnVuQ2hpbGQ/OiBDaGlsZFJ1bm5lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNldFRpbWVvdXREcml2ZXIob3B0czogU2V0VGltZW91dERyaXZlck9wdGlvbnMgPSB7fSk6IERldGFjaERyaXZlciB7XG4gIGNvbnN0IGRlbGF5TXMgPSBvcHRzLmRlbGF5TXMgPz8gMDtcbiAgY29uc3QgcnVuQ2hpbGQgPSBvcHRzLnJ1bkNoaWxkID8/IGRlZmF1bHRSdW5DaGlsZDtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBkZWxheU1zID09PSAwID8gJ3NldC10aW1lb3V0JyA6IGBzZXQtdGltZW91dC0ke2RlbGF5TXN9bXNgLFxuICAgIGNhcGFiaWxpdGllczogeyBicm93c2VyU2FmZTogdHJ1ZSwgbm9kZVNhZmU6IHRydWUsIGVkZ2VTYWZlOiB0cnVlIH0sXG4gICAgc2NoZWR1bGU6IGNyZWF0ZUJhdGNoU2NoZWR1bGUoKGZsdXNoKSA9PiBzZXRUaW1lb3V0KGZsdXNoLCBkZWxheU1zKSwgcnVuQ2hpbGQpLFxuICB9O1xufVxuXG4vKiogRGVmYXVsdCBzaW5nbGV0b24g4oCUIHplcm8tZGVsYXkgKG5leHQgbWFjcm90YXNrKS4gRm9yIGNvbmZpZ3VyYWJsZVxuICogIGRlbGF5cywgdXNlIGBjcmVhdGVTZXRUaW1lb3V0RHJpdmVyKHsgZGVsYXlNcyB9KWAuICovXG5leHBvcnQgY29uc3Qgc2V0VGltZW91dERyaXZlcjogRGV0YWNoRHJpdmVyID0gY3JlYXRlU2V0VGltZW91dERyaXZlcigpO1xuIl19
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
- /** Max wall-clock to spend draining, in milliseconds. Default 30s. */
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
- let timerId;
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
- timerId = setTimeout(() => resolve('__detach_timeout__'), remainingMs);
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
- if (timerId !== undefined)
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx1c2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2RldGFjaC9mbHVzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBc0JsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxJQUFtQjtJQUN4RCxNQUFNLFNBQVMsR0FBRyxJQUFJLEVBQUUsU0FBUyxJQUFJLE1BQU0sQ0FBQztJQUM1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUMvQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFZixPQUFPLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUN6RCxJQUFJLFdBQVcsSUFBSSxDQUFDO1lBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7UUFFL0QsaUVBQWlFO1FBQ2pFLGlFQUFpRTtRQUNqRSxnQ0FBZ0M7UUFDaEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsaUVBQWlFO1lBQ2pFLCtEQUErRDtZQUMvRCxNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QixTQUFTO1FBQ1gsQ0FBQztRQUNELEtBQUssTUFBTSxFQUFFLElBQUksTUFBTTtZQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFxQixFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBRWpHLDZEQUE2RDtRQUM3RCxnRUFBZ0U7UUFDaEUsSUFBSSxPQUFrRCxDQUFDO1FBQ3ZELE1BQU0sY0FBYyxHQUFHLElBQUksT0FBTyxDQUF1QixDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ25FLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsSUFBSSxPQUFPLEtBQUssU0FBUztZQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVqRCxJQUFJLE1BQU0sS0FBSyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzNDLENBQUM7UUFDRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxXQUFXO2dCQUFFLElBQUksRUFBRSxDQUFDOztnQkFDaEMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGV0YWNoL2ZsdXNoLnRzIOKAlCBEcmFpbiBldmVyeSBpbi1mbGlnaHQgZGV0YWNoZWQgaGFuZGxlIHRvIHRlcm1pbmFsLlxuICpcbiAqIFBhdHRlcm46ICBEcmFpbi1sb29wIHdpdGggZGVhZGxpbmUuIFNhbWUgc2hhcGUgYXMgYSBncmFjZWZ1bCBIVFRQXG4gKiAgICAgICAgICAgc2VydmVyIHNodXRkb3duOiBzbmFwc2hvdCB0aGUgcXVldWUsIGF3YWl0IGV2ZXJ5dGhpbmcgaW5cbiAqICAgICAgICAgICBmbGlnaHQsIHJlcGVhdCB1bnRpbCBlbXB0eSBvciBkZWFkbGluZS5cbiAqIFJvbGU6ICAgICBHcmFjZWZ1bC1zaHV0ZG93biBob29rIGZvciBjb25zdW1lcnMgd2hvIGxhdW5jaGVkXG4gKiAgICAgICAgICAgZmlyZS1hbmQtZm9yZ2V0IHdvcmsgYW5kIHdhbnQgdG8gbWFrZSBzdXJlIGl0IGFjdHVhbGx5XG4gKiAgICAgICAgICAgZmx1c2hlZCBiZWZvcmUgZXhpdGluZyAoc2VydmVyIHN0b3AsIHRlc3QgY2xlYW51cCwgZXRjLikuXG4gKlxuICogV2h5IGl0ZXJhdGUgKG5vdCBzaW5nbGUgUHJvbWlzZS5hbGwgb3ZlciBhIHNuYXBzaG90KTpcbiAqICAgLSBBIGNoaWxkIHN0YWdlIGNhbiBpdHNlbGYgY2FsbCBgZGV0YWNoQW5kRm9yZ2V0YCB3aGlsZSBydW5uaW5nIOKAlFxuICogICAgIG5ldyBoYW5kbGVzIGFycml2ZSBXSElMRSB3ZSdyZSBmbHVzaGluZy4gQSBzaW5nbGUgc25hcHNob3Qgd291bGRcbiAqICAgICBtaXNzIHRoZW0uIExvb3BpbmcgdW50aWwgYHNpemUoKSA9PT0gMGAgZHJhaW5zIHRyYW5zaXRpdmVseS5cbiAqXG4gKiBXaHkgZGVkdXBlIHZpYSBgc2VlbmAgU2V0OlxuICogICAtIEhhbmRsZXMgYWxyZWFkeSB0ZXJtaW5hbCAoYnV0IG5vdCB5ZXQgYHVucmVnaXN0ZXJgZWQgYnkgdGhlaXJcbiAqICAgICBkcml2ZXIncyBmaW5hbGx5LWJsb2NrKSBjYW4gcmUtYXBwZWFyIGluIHN1YnNlcXVlbnQgc25hcHNob3RzLlxuICogICAgIFdpdGhvdXQgZGVkdXBlLCB0aGUgYGRvbmVgIGNvdW50ZXIgd291bGQgZG91YmxlLWNvdW50IHRoZW0uXG4gKlxuICogV2h5IGBQcm9taXNlLmFsbFNldHRsZWRgIChub3QgYFByb21pc2UuYWxsYCk6XG4gKiAgIC0gT25lIGhhbmRsZSdzIHJlamVjdGlvbiBtdXN0IE5PVCBhYm9ydCB0aGUgcmVzdC4gQSBmYWlsZWQgY2hpbGRcbiAqICAgICBpcyBub3JtYWwgKGl0J3Mgd2h5IGB3YWl0KClgIHJlamVjdHMpOyB3ZSBzdGlsbCB3YW50IHRvIGRyYWluXG4gKiAgICAgdGhlIHNpYmxpbmdzLlxuICovXG5cbmltcG9ydCB7IGlkcywgbG9va3VwLCBzaXplIH0gZnJvbSAnLi9yZWdpc3RyeS5qcyc7XG5pbXBvcnQgdHlwZSB7IERldGFjaEhhbmRsZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZsdXNoUmVzdWx0IHtcbiAgLyoqIEhhbmRsZXMgd2hvc2UgYHdhaXQoKWAgd2UgRVhQTElDSVRMWSBhd2FpdGVkIGFuZCBzYXcgZnVsZmlsbGVkLlxuICAgKiAgQmVzdC1lZmZvcnQgY291bnQg4oCUIGEgY2hpbGQgdGhhdCBjb21wbGV0ZXMgaW5zaWRlIGFub3RoZXInc1xuICAgKiAgYHdhaXQoKWAgbWF5IGZpbmlzaCAoYW5kIHVucmVnaXN0ZXIpIGJlZm9yZSB3ZSBnZXQgYSBjaGFuY2UgdG9cbiAgICogIGF3YWl0IGl0IGRpcmVjdGx5LiBUaGUgRFJBSU4gaXMgc3RpbGwgZ3VhcmFudGVlZCAocmVnaXN0cnkgZW1wdHlcbiAgICogIG9uIHJldHVybik7IG9ubHkgdGhlIENPVU5UIGlzIGFwcHJveGltYXRlLiAqL1xuICByZWFkb25seSBkb25lOiBudW1iZXI7XG4gIC8qKiBIYW5kbGVzIHdob3NlIGB3YWl0KClgIHJlamVjdGVkLiBTYW1lIGJlc3QtZWZmb3J0IHNlbWFudGljcy4gKi9cbiAgcmVhZG9ubHkgZmFpbGVkOiBudW1iZXI7XG4gIC8qKiBIYW5kbGVzIHN0aWxsIGluLWZsaWdodCB3aGVuIHRoZSBkZWFkbGluZSBleHBpcmVkLiBgMGAgaW5kaWNhdGVzXG4gICAqICBhIHN1Y2Nlc3NmdWwgKGNvbXBsZXRlKSBkcmFpbiDigJQgcmVnaXN0cnkgd2FzIGVtcHR5IG9uIHJldHVybi4gKi9cbiAgcmVhZG9ubHkgcGVuZGluZzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsdXNoT3B0aW9ucyB7XG4gIC8qKiBNYXggd2FsbC1jbG9jayB0byBzcGVuZCBkcmFpbmluZywgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0IDMwcy4gKi9cbiAgcmVhZG9ubHkgdGltZW91dE1zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFdhaXQgZm9yIGV2ZXJ5IGluLWZsaWdodCBkZXRhY2hlZCBoYW5kbGUgdG8gcmVhY2ggYSB0ZXJtaW5hbCBzdGF0ZS5cbiAqIFJldHVybnMgY291bnRzIGZvciBkaWFnbm9zdGljcy4gUFJPQ0VTUy1XSURFIOKAlCBkcmFpbnMgZXZlcnkgZHJpdmVyXG4gKiBhY3Jvc3MgZXZlcnkgZXhlY3V0b3IuIEZvciBwZXItZXhlY3V0b3Igc2NvcGluZywgY29uc3VtZXJzIHNob3VsZFxuICogY29sbGVjdCB0aGVpciBvd24gaGFuZGxlcyBmcm9tIGBleGVjdXRvci5kZXRhY2hBbmRKb2luTGF0ZXIoLi4uKWBcbiAqIGNhbGxzIGFuZCBhd2FpdCBgUHJvbWlzZS5hbGxTZXR0bGVkKFsuLi5dLm1hcChoID0+IGgud2FpdCgpKSlgXG4gKiB0aGVtc2VsdmVzLlxuICpcbiAqIEBleGFtcGxlIEdyYWNlZnVsIHNlcnZlciBzaHV0ZG93blxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgZmx1c2hBbGxEZXRhY2hlZCB9IGZyb20gJ2Zvb3RwcmludGpzL2RldGFjaCc7XG4gKlxuICogcHJvY2Vzcy5vbignU0lHVEVSTScsIGFzeW5jICgpID0+IHtcbiAqICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmbHVzaEFsbERldGFjaGVkKHsgdGltZW91dE1zOiAxMF8wMDAgfSk7XG4gKiAgIGNvbnNvbGUubG9nKGBEcmFpbmVkICR7c3RhdHMuZG9uZX0gZG9uZSwgJHtzdGF0cy5mYWlsZWR9IGZhaWxlZCwgJHtzdGF0cy5wZW5kaW5nfSBwZW5kaW5nLmApO1xuICogICBwcm9jZXNzLmV4aXQoc3RhdHMucGVuZGluZyA9PT0gMCA/IDAgOiAxKTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmbHVzaEFsbERldGFjaGVkKG9wdHM/OiBGbHVzaE9wdGlvbnMpOiBQcm9taXNlPEZsdXNoUmVzdWx0PiB7XG4gIGNvbnN0IHRpbWVvdXRNcyA9IG9wdHM/LnRpbWVvdXRNcyA/PyAzMF8wMDA7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgbGV0IGRvbmUgPSAwO1xuICBsZXQgZmFpbGVkID0gMDtcblxuICB3aGlsZSAoc2l6ZSgpID4gMCkge1xuICAgIGNvbnN0IHJlbWFpbmluZ01zID0gdGltZW91dE1zIC0gKERhdGUubm93KCkgLSBzdGFydGVkQXQpO1xuICAgIGlmIChyZW1haW5pbmdNcyA8PSAwKSByZXR1cm4geyBkb25lLCBmYWlsZWQsIHBlbmRpbmc6IHNpemUoKSB9O1xuXG4gICAgLy8gU25hcHNob3Qgb2YgTkVXICh1bnNlZW4pIGhhbmRsZXMuIEV4aXN0aW5nIHRlcm1pbmFsLWJ1dC1zdGlsbC1cbiAgICAvLyByZWdpc3RlcmVkIGhhbmRsZXMgcmUtYXBwZWFyIGluIHN1YnNlcXVlbnQgc25hcHNob3RzOyB0aGUgc2VlblxuICAgIC8vIHNldCBwcmV2ZW50cyBkb3VibGUtY291bnRpbmcuXG4gICAgY29uc3QgbmV3SWRzID0gaWRzKCkuZmlsdGVyKChpZCkgPT4gIXNlZW4uaGFzKGlkKSk7XG4gICAgaWYgKG5ld0lkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIEV2ZXJ5dGhpbmcgaW4gdGhlIHJlZ2lzdHJ5IGlzIGFscmVhZHkgYXdhaXRlZCDigJQgeWllbGQgb25jZSBhbmRcbiAgICAgIC8vIHJlLWNoZWNrLiBUaGUgZHJpdmVyJ3MgdW5yZWdpc3Rlci1pbi1maW5hbGx5IGhhc24ndCBydW4geWV0LlxuICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpZCBvZiBuZXdJZHMpIHNlZW4uYWRkKGlkKTtcblxuICAgIGNvbnN0IGhhbmRsZXMgPSBuZXdJZHMubWFwKChpZCkgPT4gbG9va3VwKGlkKSkuZmlsdGVyKChoKTogaCBpcyBEZXRhY2hIYW5kbGUgPT4gaCAhPT0gdW5kZWZpbmVkKTtcblxuICAgIC8vIFJhY2UgdGhlIGRyYWluIGFnYWluc3QgdGhlIHBlci1pdGVyYXRpb24gdGltZW91dC4gV2UgdXNlIGFcbiAgICAvLyBgJ3RpbWVvdXQnYCBzZW50aW5lbCBvbiB0aGUgdGltZW91dCBzaWRlIHNvIHRoZSB0eXBlIG5hcnJvd3MuXG4gICAgbGV0IHRpbWVySWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2U8J19fZGV0YWNoX3RpbWVvdXRfXyc+KChyZXNvbHZlKSA9PiB7XG4gICAgICB0aW1lcklkID0gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCdfX2RldGFjaF90aW1lb3V0X18nKSwgcmVtYWluaW5nTXMpO1xuICAgIH0pO1xuICAgIGNvbnN0IGRyYWluUHJvbWlzZSA9IFByb21pc2UuYWxsU2V0dGxlZChoYW5kbGVzLm1hcCgoaCkgPT4gaC53YWl0KCkpKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW2RyYWluUHJvbWlzZSwgdGltZW91dFByb21pc2VdKTtcbiAgICBpZiAodGltZXJJZCAhPT0gdW5kZWZpbmVkKSBjbGVhclRpbWVvdXQodGltZXJJZCk7XG5cbiAgICBpZiAocmVzdWx0ID09PSAnX19kZXRhY2hfdGltZW91dF9fJykge1xuICAgICAgcmV0dXJuIHsgZG9uZSwgZmFpbGVkLCBwZW5kaW5nOiBzaXplKCkgfTtcbiAgICB9XG4gICAgZm9yIChjb25zdCByIG9mIHJlc3VsdCkge1xuICAgICAgaWYgKHIuc3RhdHVzID09PSAnZnVsZmlsbGVkJykgZG9uZSsrO1xuICAgICAgZWxzZSBmYWlsZWQrKztcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBkb25lLCBmYWlsZWQsIHBlbmRpbmc6IDAgfTtcbn1cbiJdfQ==
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. */