footprintjs 9.32.0 → 9.34.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 (124) hide show
  1. package/AGENTS.md +670 -194
  2. package/dist/esm/lib/capture/freeze.d.ts +47 -0
  3. package/dist/esm/lib/capture/freeze.js +60 -0
  4. package/dist/esm/lib/capture/index.d.ts +1 -0
  5. package/dist/esm/lib/capture/index.js +2 -1
  6. package/dist/esm/lib/detach/drivers/immediate.d.ts +25 -24
  7. package/dist/esm/lib/detach/drivers/immediate.js +26 -25
  8. package/dist/esm/lib/detach/drivers/microtaskBatch.d.ts +5 -4
  9. package/dist/esm/lib/detach/drivers/microtaskBatch.js +6 -5
  10. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +27 -7
  11. package/dist/esm/lib/engine/handlers/SubflowInputMapper.d.ts +4 -1
  12. package/dist/esm/lib/engine/handlers/SubflowInputMapper.js +15 -2
  13. package/dist/esm/lib/memory/EventLog.d.ts +28 -3
  14. package/dist/esm/lib/memory/EventLog.js +31 -4
  15. package/dist/esm/lib/memory/StageContext.d.ts +20 -0
  16. package/dist/esm/lib/memory/StageContext.js +36 -10
  17. package/dist/esm/lib/memory/TransactionBuffer.d.ts +2 -2
  18. package/dist/esm/lib/memory/TransactionBuffer.js +6 -4
  19. package/dist/esm/lib/memory/backtrack.d.ts +24 -0
  20. package/dist/esm/lib/memory/backtrack.js +52 -41
  21. package/dist/esm/lib/memory/commitLogUtils.d.ts +129 -38
  22. package/dist/esm/lib/memory/commitLogUtils.js +252 -59
  23. package/dist/esm/lib/memory/deltaEncoding.d.ts +1 -1
  24. package/dist/esm/lib/memory/deltaEncoding.js +2 -2
  25. package/dist/esm/lib/memory/honesty.d.ts +5 -1
  26. package/dist/esm/lib/memory/honesty.js +11 -6
  27. package/dist/esm/lib/memory/index.d.ts +2 -2
  28. package/dist/esm/lib/memory/index.js +3 -3
  29. package/dist/esm/lib/memory/keyPaths.d.ts +125 -0
  30. package/dist/esm/lib/memory/keyPaths.js +227 -0
  31. package/dist/esm/lib/memory/logModel.d.ts +76 -0
  32. package/dist/esm/lib/memory/logModel.js +357 -0
  33. package/dist/esm/lib/memory/placeholders.d.ts +3 -3
  34. package/dist/esm/lib/memory/placeholders.js +4 -4
  35. package/dist/esm/lib/memory/redaction.d.ts +34 -1
  36. package/dist/esm/lib/memory/redaction.js +55 -4
  37. package/dist/esm/lib/memory/utils.d.ts +2 -6
  38. package/dist/esm/lib/memory/utils.js +4 -21
  39. package/dist/esm/lib/memory/verbs.d.ts +65 -22
  40. package/dist/esm/lib/memory/verbs.js +64 -23
  41. package/dist/esm/lib/runner/ExecutionRuntime.js +5 -3
  42. package/dist/esm/lib/runner/FlowChartExecutor.js +5 -5
  43. package/dist/esm/lib/scope/protection/readonlyInput.d.ts +2 -6
  44. package/dist/esm/lib/scope/protection/readonlyInput.js +4 -18
  45. package/dist/esm/lib/slice/elementProvenance.d.ts +4 -1
  46. package/dist/esm/lib/slice/elementProvenance.js +33 -15
  47. package/dist/esm/lib/slice/forwardSliceForKey.d.ts +4 -0
  48. package/dist/esm/lib/slice/forwardSliceForKey.js +32 -9
  49. package/dist/esm/lib/slice/keyIndex.d.ts +50 -8
  50. package/dist/esm/lib/slice/keyIndex.js +97 -16
  51. package/dist/esm/lib/slice/keyTimeline.js +11 -6
  52. package/dist/esm/lib/slice/serialize.js +8 -2
  53. package/dist/esm/lib/slice/sliceForKey.js +22 -6
  54. package/dist/esm/lib/slice/types.d.ts +53 -7
  55. package/dist/esm/lib/slice/types.js +1 -1
  56. package/dist/esm/lib/time-travel/commitStops.js +46 -8
  57. package/dist/esm/lib/time-travel/stateAt.js +4 -14
  58. package/dist/esm/lib/time-travel/timeTravel.js +2 -2
  59. package/dist/esm/lib/time-travel/types.d.ts +4 -3
  60. package/dist/esm/lib/time-travel/types.js +1 -1
  61. package/dist/esm/trace.d.ts +2 -1
  62. package/dist/esm/trace.js +2 -6
  63. package/dist/lib/capture/freeze.js +64 -0
  64. package/dist/lib/capture/index.js +4 -2
  65. package/dist/lib/detach/drivers/immediate.js +26 -25
  66. package/dist/lib/detach/drivers/microtaskBatch.js +6 -5
  67. package/dist/lib/engine/handlers/SubflowExecutor.js +27 -7
  68. package/dist/lib/engine/handlers/SubflowInputMapper.js +15 -2
  69. package/dist/lib/memory/EventLog.js +31 -4
  70. package/dist/lib/memory/StageContext.js +35 -9
  71. package/dist/lib/memory/TransactionBuffer.js +6 -4
  72. package/dist/lib/memory/backtrack.js +52 -41
  73. package/dist/lib/memory/commitLogUtils.js +257 -61
  74. package/dist/lib/memory/deltaEncoding.js +2 -2
  75. package/dist/lib/memory/honesty.js +11 -6
  76. package/dist/lib/memory/index.js +3 -3
  77. package/dist/lib/memory/keyPaths.js +243 -0
  78. package/dist/lib/memory/logModel.js +365 -0
  79. package/dist/lib/memory/placeholders.js +4 -4
  80. package/dist/lib/memory/redaction.js +56 -3
  81. package/dist/lib/memory/utils.js +8 -26
  82. package/dist/lib/memory/verbs.js +64 -23
  83. package/dist/lib/runner/ExecutionRuntime.js +6 -4
  84. package/dist/lib/runner/FlowChartExecutor.js +6 -6
  85. package/dist/lib/scope/protection/readonlyInput.js +6 -21
  86. package/dist/lib/slice/elementProvenance.js +32 -14
  87. package/dist/lib/slice/forwardSliceForKey.js +31 -8
  88. package/dist/lib/slice/keyIndex.js +103 -17
  89. package/dist/lib/slice/keyTimeline.js +10 -5
  90. package/dist/lib/slice/serialize.js +8 -2
  91. package/dist/lib/slice/sliceForKey.js +21 -5
  92. package/dist/lib/slice/types.js +1 -1
  93. package/dist/lib/time-travel/commitStops.js +46 -8
  94. package/dist/lib/time-travel/stateAt.js +4 -14
  95. package/dist/lib/time-travel/timeTravel.js +2 -2
  96. package/dist/lib/time-travel/types.js +1 -1
  97. package/dist/trace.js +5 -7
  98. package/dist/types/lib/capture/freeze.d.ts +47 -0
  99. package/dist/types/lib/capture/index.d.ts +1 -0
  100. package/dist/types/lib/detach/drivers/immediate.d.ts +25 -24
  101. package/dist/types/lib/detach/drivers/microtaskBatch.d.ts +5 -4
  102. package/dist/types/lib/engine/handlers/SubflowInputMapper.d.ts +4 -1
  103. package/dist/types/lib/memory/EventLog.d.ts +28 -3
  104. package/dist/types/lib/memory/StageContext.d.ts +20 -0
  105. package/dist/types/lib/memory/TransactionBuffer.d.ts +2 -2
  106. package/dist/types/lib/memory/backtrack.d.ts +24 -0
  107. package/dist/types/lib/memory/commitLogUtils.d.ts +129 -38
  108. package/dist/types/lib/memory/deltaEncoding.d.ts +1 -1
  109. package/dist/types/lib/memory/honesty.d.ts +5 -1
  110. package/dist/types/lib/memory/index.d.ts +2 -2
  111. package/dist/types/lib/memory/keyPaths.d.ts +125 -0
  112. package/dist/types/lib/memory/logModel.d.ts +76 -0
  113. package/dist/types/lib/memory/placeholders.d.ts +3 -3
  114. package/dist/types/lib/memory/redaction.d.ts +34 -1
  115. package/dist/types/lib/memory/utils.d.ts +2 -6
  116. package/dist/types/lib/memory/verbs.d.ts +65 -22
  117. package/dist/types/lib/scope/protection/readonlyInput.d.ts +2 -6
  118. package/dist/types/lib/slice/elementProvenance.d.ts +4 -1
  119. package/dist/types/lib/slice/forwardSliceForKey.d.ts +4 -0
  120. package/dist/types/lib/slice/keyIndex.d.ts +50 -8
  121. package/dist/types/lib/slice/types.d.ts +53 -7
  122. package/dist/types/lib/time-travel/types.d.ts +4 -3
  123. package/dist/types/trace.d.ts +2 -1
  124. package/package.json +2 -1
@@ -0,0 +1,47 @@
1
+ /**
2
+ * freeze.ts — the ONE deep-freeze walk (moved here from `scope/protection/readonlyInput.ts` in F3).
3
+ *
4
+ * WHY HERE. Five places freeze a tree, all through this walk: run args (`readonlyInput ·
5
+ * createFrozenArgs`), the fold base served as `initialState` (`ExecutionRuntime · getFoldBase`), the
6
+ * dev-mode snapshot (`FlowChartExecutor · getSnapshot`), every state `stateAt` hands out
7
+ * (`time-travel/stateAt.ts`) and, since F3, every commit bundle (`EventLog · record`). `memory/` must
8
+ * not import `scope/` (that edge closed the memory ⇄ scope ⇄ recorder module cycle F0 removed), so the
9
+ * walk lives in this leaf, which imports nothing.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { deepFreeze } from './freeze.js';
14
+ *
15
+ * const args = deepFreeze({ order: { lines: [{ sku: 'A' }] }, bytes: new Uint8Array([1]) });
16
+ * Object.isFrozen(args.order.lines[0]); // true
17
+ * Object.isFrozen(args.bytes); // false — a typed array cannot be frozen; it is skipped
18
+ * ```
19
+ */
20
+ /**
21
+ * How {@link deepFreeze} walks an ARRAY.
22
+ *
23
+ * - `'every-key'` (the default) — every own property, as for any other object: the index elements
24
+ * AND any expando (`arr.note = { … }`). The contract args protection and the dev-mode snapshot
25
+ * rely on.
26
+ * - `'indices'` — the index elements only, so no key string is allocated per element; this is what
27
+ * keeps freezing a 10,000-element commit inside its budget (`bench/element-writes.ts`). An object
28
+ * hung on an array EXPANDO is then left unfrozen — the commit log's named hole
29
+ * (`EventLog · record`).
30
+ */
31
+ export type ArrayWalk = 'every-key' | 'indices';
32
+ /**
33
+ * Freezes `obj` and every object reachable through its own properties, and returns `obj`.
34
+ *
35
+ * - An object that is ALREADY frozen is left as it is, and not descended — 9.32.0's contract, kept:
36
+ * args may hold a caller's frozen object with live parts inside (a class instance a stage calls),
37
+ * and freezing past it would break them. It is also what ends a cycle. The commit log never meets
38
+ * one: its payloads are fresh `structuredClone`s.
39
+ * - ArrayBuffer views (typed arrays, `DataView`) are skipped: `Object.freeze` throws on a non-empty
40
+ * typed array, so a `Uint8Array` in state, args or the fold base used to fail the run or the
41
+ * snapshot here.
42
+ * - What `Object.freeze` cannot reach stays mutable — Map and Set contents, a Date's time, the
43
+ * bytes behind a buffer. A frozen RegExp's `lastIndex` is read-only, so a `/g` or `/y` regex
44
+ * taken from a frozen tree throws when `exec` or `replace` advance it.
45
+ * - Functions are not descended (they are not values the engine stores).
46
+ */
47
+ export declare function deepFreeze<T>(obj: T, arrays?: ArrayWalk): T;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * freeze.ts — the ONE deep-freeze walk (moved here from `scope/protection/readonlyInput.ts` in F3).
3
+ *
4
+ * WHY HERE. Five places freeze a tree, all through this walk: run args (`readonlyInput ·
5
+ * createFrozenArgs`), the fold base served as `initialState` (`ExecutionRuntime · getFoldBase`), the
6
+ * dev-mode snapshot (`FlowChartExecutor · getSnapshot`), every state `stateAt` hands out
7
+ * (`time-travel/stateAt.ts`) and, since F3, every commit bundle (`EventLog · record`). `memory/` must
8
+ * not import `scope/` (that edge closed the memory ⇄ scope ⇄ recorder module cycle F0 removed), so the
9
+ * walk lives in this leaf, which imports nothing.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { deepFreeze } from './freeze.js';
14
+ *
15
+ * const args = deepFreeze({ order: { lines: [{ sku: 'A' }] }, bytes: new Uint8Array([1]) });
16
+ * Object.isFrozen(args.order.lines[0]); // true
17
+ * Object.isFrozen(args.bytes); // false — a typed array cannot be frozen; it is skipped
18
+ * ```
19
+ */
20
+ /**
21
+ * Freezes `obj` and every object reachable through its own properties, and returns `obj`.
22
+ *
23
+ * - An object that is ALREADY frozen is left as it is, and not descended — 9.32.0's contract, kept:
24
+ * args may hold a caller's frozen object with live parts inside (a class instance a stage calls),
25
+ * and freezing past it would break them. It is also what ends a cycle. The commit log never meets
26
+ * one: its payloads are fresh `structuredClone`s.
27
+ * - ArrayBuffer views (typed arrays, `DataView`) are skipped: `Object.freeze` throws on a non-empty
28
+ * typed array, so a `Uint8Array` in state, args or the fold base used to fail the run or the
29
+ * snapshot here.
30
+ * - What `Object.freeze` cannot reach stays mutable — Map and Set contents, a Date's time, the
31
+ * bytes behind a buffer. A frozen RegExp's `lastIndex` is read-only, so a `/g` or `/y` regex
32
+ * taken from a frozen tree throws when `exec` or `replace` advance it.
33
+ * - Functions are not descended (they are not values the engine stores).
34
+ */
35
+ export function deepFreeze(obj, arrays = 'every-key') {
36
+ freezeValue(obj, arrays === 'indices');
37
+ return obj;
38
+ }
39
+ function freezeValue(value, indices) {
40
+ if (value === null || typeof value !== 'object' || ArrayBuffer.isView(value) || Object.isFrozen(value))
41
+ return;
42
+ Object.freeze(value);
43
+ // The two loops are written out rather than shared through a callback: this runs once per object of
44
+ // every commit, and a closure per object is measurable.
45
+ if (indices && Array.isArray(value)) {
46
+ for (let i = 0; i < value.length; i++) {
47
+ const child = value[i];
48
+ if (child !== null && typeof child === 'object')
49
+ freezeValue(child, indices);
50
+ }
51
+ return;
52
+ }
53
+ const names = Object.getOwnPropertyNames(value);
54
+ for (let i = 0; i < names.length; i++) {
55
+ const child = value[names[i]];
56
+ if (child !== null && typeof child === 'object')
57
+ freezeValue(child, indices);
58
+ }
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL2ZyZWV6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBZUg7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFJLEdBQU0sRUFBRSxTQUFvQixXQUFXO0lBQ25FLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQWMsRUFBRSxPQUFnQjtJQUNuRCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPO0lBQy9HLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsb0dBQW9HO0lBQ3BHLHdEQUF3RDtJQUN4RCxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxNQUFNLEtBQUssR0FBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7Z0JBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsT0FBTztJQUNULENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBSSxLQUFpQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZnJlZXplLnRzIOKAlCB0aGUgT05FIGRlZXAtZnJlZXplIHdhbGsgKG1vdmVkIGhlcmUgZnJvbSBgc2NvcGUvcHJvdGVjdGlvbi9yZWFkb25seUlucHV0LnRzYCBpbiBGMykuXG4gKlxuICogV0hZIEhFUkUuIEZpdmUgcGxhY2VzIGZyZWV6ZSBhIHRyZWUsIGFsbCB0aHJvdWdoIHRoaXMgd2FsazogcnVuIGFyZ3MgKGByZWFkb25seUlucHV0IMK3XG4gKiBjcmVhdGVGcm96ZW5BcmdzYCksIHRoZSBmb2xkIGJhc2Ugc2VydmVkIGFzIGBpbml0aWFsU3RhdGVgIChgRXhlY3V0aW9uUnVudGltZSDCtyBnZXRGb2xkQmFzZWApLCB0aGVcbiAqIGRldi1tb2RlIHNuYXBzaG90IChgRmxvd0NoYXJ0RXhlY3V0b3IgwrcgZ2V0U25hcHNob3RgKSwgZXZlcnkgc3RhdGUgYHN0YXRlQXRgIGhhbmRzIG91dFxuICogKGB0aW1lLXRyYXZlbC9zdGF0ZUF0LnRzYCkgYW5kLCBzaW5jZSBGMywgZXZlcnkgY29tbWl0IGJ1bmRsZSAoYEV2ZW50TG9nIMK3IHJlY29yZGApLiBgbWVtb3J5L2AgbXVzdFxuICogbm90IGltcG9ydCBgc2NvcGUvYCAodGhhdCBlZGdlIGNsb3NlZCB0aGUgbWVtb3J5IOKHhCBzY29wZSDih4QgcmVjb3JkZXIgbW9kdWxlIGN5Y2xlIEYwIHJlbW92ZWQpLCBzbyB0aGVcbiAqIHdhbGsgbGl2ZXMgaW4gdGhpcyBsZWFmLCB3aGljaCBpbXBvcnRzIG5vdGhpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGRlZXBGcmVlemUgfSBmcm9tICcuL2ZyZWV6ZS5qcyc7XG4gKlxuICogY29uc3QgYXJncyA9IGRlZXBGcmVlemUoeyBvcmRlcjogeyBsaW5lczogW3sgc2t1OiAnQScgfV0gfSwgYnl0ZXM6IG5ldyBVaW50OEFycmF5KFsxXSkgfSk7XG4gKiBPYmplY3QuaXNGcm96ZW4oYXJncy5vcmRlci5saW5lc1swXSk7IC8vIHRydWVcbiAqIE9iamVjdC5pc0Zyb3plbihhcmdzLmJ5dGVzKTsgLy8gZmFsc2Ug4oCUIGEgdHlwZWQgYXJyYXkgY2Fubm90IGJlIGZyb3plbjsgaXQgaXMgc2tpcHBlZFxuICogYGBgXG4gKi9cblxuLyoqXG4gKiBIb3cge0BsaW5rIGRlZXBGcmVlemV9IHdhbGtzIGFuIEFSUkFZLlxuICpcbiAqIC0gYCdldmVyeS1rZXknYCAodGhlIGRlZmF1bHQpIOKAlCBldmVyeSBvd24gcHJvcGVydHksIGFzIGZvciBhbnkgb3RoZXIgb2JqZWN0OiB0aGUgaW5kZXggZWxlbWVudHNcbiAqICAgQU5EIGFueSBleHBhbmRvIChgYXJyLm5vdGUgPSB7IOKApiB9YCkuIFRoZSBjb250cmFjdCBhcmdzIHByb3RlY3Rpb24gYW5kIHRoZSBkZXYtbW9kZSBzbmFwc2hvdFxuICogICByZWx5IG9uLlxuICogLSBgJ2luZGljZXMnYCDigJQgdGhlIGluZGV4IGVsZW1lbnRzIG9ubHksIHNvIG5vIGtleSBzdHJpbmcgaXMgYWxsb2NhdGVkIHBlciBlbGVtZW50OyB0aGlzIGlzIHdoYXRcbiAqICAga2VlcHMgZnJlZXppbmcgYSAxMCwwMDAtZWxlbWVudCBjb21taXQgaW5zaWRlIGl0cyBidWRnZXQgKGBiZW5jaC9lbGVtZW50LXdyaXRlcy50c2ApLiBBbiBvYmplY3RcbiAqICAgaHVuZyBvbiBhbiBhcnJheSBFWFBBTkRPIGlzIHRoZW4gbGVmdCB1bmZyb3plbiDigJQgdGhlIGNvbW1pdCBsb2cncyBuYW1lZCBob2xlXG4gKiAgIChgRXZlbnRMb2cgwrcgcmVjb3JkYCkuXG4gKi9cbmV4cG9ydCB0eXBlIEFycmF5V2FsayA9ICdldmVyeS1rZXknIHwgJ2luZGljZXMnO1xuXG4vKipcbiAqIEZyZWV6ZXMgYG9iamAgYW5kIGV2ZXJ5IG9iamVjdCByZWFjaGFibGUgdGhyb3VnaCBpdHMgb3duIHByb3BlcnRpZXMsIGFuZCByZXR1cm5zIGBvYmpgLlxuICpcbiAqIC0gQW4gb2JqZWN0IHRoYXQgaXMgQUxSRUFEWSBmcm96ZW4gaXMgbGVmdCBhcyBpdCBpcywgYW5kIG5vdCBkZXNjZW5kZWQg4oCUIDkuMzIuMCdzIGNvbnRyYWN0LCBrZXB0OlxuICogICBhcmdzIG1heSBob2xkIGEgY2FsbGVyJ3MgZnJvemVuIG9iamVjdCB3aXRoIGxpdmUgcGFydHMgaW5zaWRlIChhIGNsYXNzIGluc3RhbmNlIGEgc3RhZ2UgY2FsbHMpLFxuICogICBhbmQgZnJlZXppbmcgcGFzdCBpdCB3b3VsZCBicmVhayB0aGVtLiBJdCBpcyBhbHNvIHdoYXQgZW5kcyBhIGN5Y2xlLiBUaGUgY29tbWl0IGxvZyBuZXZlciBtZWV0c1xuICogICBvbmU6IGl0cyBwYXlsb2FkcyBhcmUgZnJlc2ggYHN0cnVjdHVyZWRDbG9uZWBzLlxuICogLSBBcnJheUJ1ZmZlciB2aWV3cyAodHlwZWQgYXJyYXlzLCBgRGF0YVZpZXdgKSBhcmUgc2tpcHBlZDogYE9iamVjdC5mcmVlemVgIHRocm93cyBvbiBhIG5vbi1lbXB0eVxuICogICB0eXBlZCBhcnJheSwgc28gYSBgVWludDhBcnJheWAgaW4gc3RhdGUsIGFyZ3Mgb3IgdGhlIGZvbGQgYmFzZSB1c2VkIHRvIGZhaWwgdGhlIHJ1biBvciB0aGVcbiAqICAgc25hcHNob3QgaGVyZS5cbiAqIC0gV2hhdCBgT2JqZWN0LmZyZWV6ZWAgY2Fubm90IHJlYWNoIHN0YXlzIG11dGFibGUg4oCUIE1hcCBhbmQgU2V0IGNvbnRlbnRzLCBhIERhdGUncyB0aW1lLCB0aGVcbiAqICAgYnl0ZXMgYmVoaW5kIGEgYnVmZmVyLiBBIGZyb3plbiBSZWdFeHAncyBgbGFzdEluZGV4YCBpcyByZWFkLW9ubHksIHNvIGEgYC9nYCBvciBgL3lgIHJlZ2V4XG4gKiAgIHRha2VuIGZyb20gYSBmcm96ZW4gdHJlZSB0aHJvd3Mgd2hlbiBgZXhlY2Agb3IgYHJlcGxhY2VgIGFkdmFuY2UgaXQuXG4gKiAtIEZ1bmN0aW9ucyBhcmUgbm90IGRlc2NlbmRlZCAodGhleSBhcmUgbm90IHZhbHVlcyB0aGUgZW5naW5lIHN0b3JlcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwRnJlZXplPFQ+KG9iajogVCwgYXJyYXlzOiBBcnJheVdhbGsgPSAnZXZlcnkta2V5Jyk6IFQge1xuICBmcmVlemVWYWx1ZShvYmosIGFycmF5cyA9PT0gJ2luZGljZXMnKTtcbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gZnJlZXplVmFsdWUodmFsdWU6IHVua25vd24sIGluZGljZXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSB8fCBPYmplY3QuaXNGcm96ZW4odmFsdWUpKSByZXR1cm47XG4gIE9iamVjdC5mcmVlemUodmFsdWUpO1xuICAvLyBUaGUgdHdvIGxvb3BzIGFyZSB3cml0dGVuIG91dCByYXRoZXIgdGhhbiBzaGFyZWQgdGhyb3VnaCBhIGNhbGxiYWNrOiB0aGlzIHJ1bnMgb25jZSBwZXIgb2JqZWN0IG9mXG4gIC8vIGV2ZXJ5IGNvbW1pdCwgYW5kIGEgY2xvc3VyZSBwZXIgb2JqZWN0IGlzIG1lYXN1cmFibGUuXG4gIGlmIChpbmRpY2VzICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hpbGQ6IHVua25vd24gPSB2YWx1ZVtpXTtcbiAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCAmJiB0eXBlb2YgY2hpbGQgPT09ICdvYmplY3QnKSBmcmVlemVWYWx1ZShjaGlsZCwgaW5kaWNlcyk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBuYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoaWxkID0gKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtuYW1lc1tpXV07XG4gICAgaWYgKGNoaWxkICE9PSBudWxsICYmIHR5cGVvZiBjaGlsZCA9PT0gJ29iamVjdCcpIGZyZWV6ZVZhbHVlKGNoaWxkLCBpbmRpY2VzKTtcbiAgfVxufVxuIl19
@@ -16,6 +16,7 @@
16
16
  * module — see the mapping notes in `policies.ts`.
17
17
  */
18
18
  export { hasCircularReference } from './circular.js';
19
+ export { type ArrayWalk, deepFreeze } from './freeze.js';
19
20
  export { invokeRecorderHook } from './invokeHook.js';
20
21
  export type { RetentionPolicy } from './policies.js';
21
22
  export type { ReadSummaryMarker, SummaryValueType, WriteSummaryMarker } from './summarize.js';
@@ -17,6 +17,7 @@
17
17
  * module — see the mapping notes in `policies.ts`.
18
18
  */
19
19
  export { hasCircularReference } from './circular.js';
20
+ export { deepFreeze } from './freeze.js';
20
21
  export { invokeRecorderHook } from './invokeHook.js';
21
22
  export { READ_PREVIEW_LENGTH, summarizeReadValue, summarizeValue, summarizeWriteValue, SUMMARY_PREVIEW_LENGTH, } from './summarize.js';
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEJBQTBCO0FBQzFCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3JELE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsc0JBQXNCLEdBQ3ZCLE1BQU0sZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBjYXB0dXJlLyDigJQgU2hhcmVkIHZhbHVlLWNhcHR1cmUgLyByZXRlbnRpb24gcHJpbWl0aXZlcyAoemVybyBkZXBzLCBsZWFmXG4gKiBtb2R1bGUg4oCUIGBtZW1vcnkvYCBpbXBvcnRzIGl0LCBuZXZlciB0aGUgcmV2ZXJzZSkuXG4gKlxuICogT25lIGhvbWUgZm9yIFwid2hhdCBkbyB3ZSBrZWVwIGFib3V0IGEgdHJhY2tlZCBvcGVyYXRpb24ncyB2YWx1ZT9cIjpcbiAqICAgLSBgUmV0ZW50aW9uUG9saWN5YCDigJQgdGhlIGAnZnVsbCcgfCAnc3VtbWFyeScgfCAnb2ZmJ2AgZmFtaWx5IGJlaGluZCB0aGVcbiAqICAgICAjMTQgYHJlYWRUcmFja2luZ2AgYW5kICMxM2MtQSBgd3JpdGVUcmFja2luZ2AgZGlhbHMuXG4gKiAgIC0gYHN1bW1hcml6ZVJlYWRWYWx1ZWAgLyBgc3VtbWFyaXplV3JpdGVWYWx1ZWAg4oCUIHRoZSBwYXJhbWV0ZXJpemVkXG4gKiAgICAgc3VtbWFyeS1tYXJrZXIgYnVpbGRlcnMgc2hhcmluZyBvbmUgY2xhc3NpZmljYXRpb24gcGF0aC5cbiAqICAgLSBgc3VtbWFyaXplVmFsdWVgIOKAlCB0aGUgaHVtYW4tcmVhZGFibGUgbmFycmF0aXZlIG9uZS1saW5lci5cbiAqICAgLSBgaGFzQ2lyY3VsYXJSZWZlcmVuY2VgIOKAlCB0aGUgZGV2LW1vZGUgY3ljbGUgcHJvYmUgKGEgbGVhZikuXG4gKiAgIC0gYGludm9rZVJlY29yZGVySG9va2Ag4oCUIHRoZSBvbmUgXCJsb29rIHVwIHRoZSBob29rLCBiaW5kIGB0aGlzYCwgY2FsbCBpdFwiXG4gKiAgICAgcHJpbWl0aXZlIGJvdGggcmVjb3JkZXIgZGVsaXZlcnkgdGllcnMgc2hhcmUgKGEgbGVhZikuXG4gKlxuICogUkZDLTAwMSAoZGVmZXJyZWQgb2JzZXJ2ZXIgZGVsaXZlcnkpIGJ1aWxkcyBpdHMgY2FwdHVyZSB0aWVyIG9uIHRoaXNcbiAqIG1vZHVsZSDigJQgc2VlIHRoZSBtYXBwaW5nIG5vdGVzIGluIGBwb2xpY2llcy50c2AuXG4gKi9cblxuZXhwb3J0IHsgaGFzQ2lyY3VsYXJSZWZlcmVuY2UgfSBmcm9tICcuL2NpcmN1bGFyLmpzJztcbmV4cG9ydCB7IGludm9rZVJlY29yZGVySG9vayB9IGZyb20gJy4vaW52b2tlSG9vay5qcyc7XG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSB9IGZyb20gJy4vcG9saWNpZXMuanMnO1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgU3VtbWFyeVZhbHVlVHlwZSwgV3JpdGVTdW1tYXJ5TWFya2VyIH0gZnJvbSAnLi9zdW1tYXJpemUuanMnO1xuZXhwb3J0IHtcbiAgUkVBRF9QUkVWSUVXX0xFTkdUSCxcbiAgc3VtbWFyaXplUmVhZFZhbHVlLFxuICBzdW1tYXJpemVWYWx1ZSxcbiAgc3VtbWFyaXplV3JpdGVWYWx1ZSxcbiAgU1VNTUFSWV9QUkVWSUVXX0xFTkdUSCxcbn0gZnJvbSAnLi9zdW1tYXJpemUuanMnO1xuIl19
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEJBQTBCO0FBQzFCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBa0IsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3JELE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsc0JBQXNCLEdBQ3ZCLE1BQU0sZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBjYXB0dXJlLyDigJQgU2hhcmVkIHZhbHVlLWNhcHR1cmUgLyByZXRlbnRpb24gcHJpbWl0aXZlcyAoemVybyBkZXBzLCBsZWFmXG4gKiBtb2R1bGUg4oCUIGBtZW1vcnkvYCBpbXBvcnRzIGl0LCBuZXZlciB0aGUgcmV2ZXJzZSkuXG4gKlxuICogT25lIGhvbWUgZm9yIFwid2hhdCBkbyB3ZSBrZWVwIGFib3V0IGEgdHJhY2tlZCBvcGVyYXRpb24ncyB2YWx1ZT9cIjpcbiAqICAgLSBgUmV0ZW50aW9uUG9saWN5YCDigJQgdGhlIGAnZnVsbCcgfCAnc3VtbWFyeScgfCAnb2ZmJ2AgZmFtaWx5IGJlaGluZCB0aGVcbiAqICAgICAjMTQgYHJlYWRUcmFja2luZ2AgYW5kICMxM2MtQSBgd3JpdGVUcmFja2luZ2AgZGlhbHMuXG4gKiAgIC0gYHN1bW1hcml6ZVJlYWRWYWx1ZWAgLyBgc3VtbWFyaXplV3JpdGVWYWx1ZWAg4oCUIHRoZSBwYXJhbWV0ZXJpemVkXG4gKiAgICAgc3VtbWFyeS1tYXJrZXIgYnVpbGRlcnMgc2hhcmluZyBvbmUgY2xhc3NpZmljYXRpb24gcGF0aC5cbiAqICAgLSBgc3VtbWFyaXplVmFsdWVgIOKAlCB0aGUgaHVtYW4tcmVhZGFibGUgbmFycmF0aXZlIG9uZS1saW5lci5cbiAqICAgLSBgaGFzQ2lyY3VsYXJSZWZlcmVuY2VgIOKAlCB0aGUgZGV2LW1vZGUgY3ljbGUgcHJvYmUgKGEgbGVhZikuXG4gKiAgIC0gYGludm9rZVJlY29yZGVySG9va2Ag4oCUIHRoZSBvbmUgXCJsb29rIHVwIHRoZSBob29rLCBiaW5kIGB0aGlzYCwgY2FsbCBpdFwiXG4gKiAgICAgcHJpbWl0aXZlIGJvdGggcmVjb3JkZXIgZGVsaXZlcnkgdGllcnMgc2hhcmUgKGEgbGVhZikuXG4gKlxuICogUkZDLTAwMSAoZGVmZXJyZWQgb2JzZXJ2ZXIgZGVsaXZlcnkpIGJ1aWxkcyBpdHMgY2FwdHVyZSB0aWVyIG9uIHRoaXNcbiAqIG1vZHVsZSDigJQgc2VlIHRoZSBtYXBwaW5nIG5vdGVzIGluIGBwb2xpY2llcy50c2AuXG4gKi9cblxuZXhwb3J0IHsgaGFzQ2lyY3VsYXJSZWZlcmVuY2UgfSBmcm9tICcuL2NpcmN1bGFyLmpzJztcbmV4cG9ydCB7IHR5cGUgQXJyYXlXYWxrLCBkZWVwRnJlZXplIH0gZnJvbSAnLi9mcmVlemUuanMnO1xuZXhwb3J0IHsgaW52b2tlUmVjb3JkZXJIb29rIH0gZnJvbSAnLi9pbnZva2VIb29rLmpzJztcbmV4cG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5IH0gZnJvbSAnLi9wb2xpY2llcy5qcyc7XG5leHBvcnQgdHlwZSB7IFJlYWRTdW1tYXJ5TWFya2VyLCBTdW1tYXJ5VmFsdWVUeXBlLCBXcml0ZVN1bW1hcnlNYXJrZXIgfSBmcm9tICcuL3N1bW1hcml6ZS5qcyc7XG5leHBvcnQge1xuICBSRUFEX1BSRVZJRVdfTEVOR1RILFxuICBzdW1tYXJpemVSZWFkVmFsdWUsXG4gIHN1bW1hcml6ZVZhbHVlLFxuICBzdW1tYXJpemVXcml0ZVZhbHVlLFxuICBTVU1NQVJZX1BSRVZJRVdfTEVOR1RILFxufSBmcm9tICcuL3N1bW1hcml6ZS5qcyc7XG4iXX0=
@@ -1,32 +1,33 @@
1
1
  /**
2
- * detach/drivers/immediate.ts — Run detached work synchronously inside `schedule()`.
2
+ * detach/drivers/immediate.ts — Start detached work at once: no batch, no timer.
3
3
  *
4
- * Pattern: Null-object driver for the "no actual deferral" case. Same
5
- * intent as a `setTimeout(fn, 0)` shim that just calls `fn()`
6
- * — keeps the API surface uniform so consumers can swap drivers
7
- * without changing call sites.
8
- * Role: Test fixture + opt-in for consumers who want fire-and-forget
9
- * ergonomics (the handle API) without actually deferring. Useful
10
- * for:
4
+ * Pattern: The thinnest driver. `schedule()` registers the handle, marks it
5
+ * `running` SYNCHRONOUSLY and starts `runChild` on the next
6
+ * microtask (`Promise.resolve().then(...)`) — one microtask per
7
+ * call, nothing shared with other calls. It keeps the API surface
8
+ * uniform so consumers can swap drivers without changing call sites.
9
+ * Role: Test fixture + opt-in for consumers who want the handle API
10
+ * without a queue to flush. Useful for:
11
11
  *
12
- * - unit tests where deterministic, synchronous completion
13
- * beats microtask gymnastics
14
- * - very small detach payloads where the overhead of a
15
- * microtask roundtrip exceeds the work itself
16
- * - debugging — easier to step through with breakpoints
12
+ * - unit tests where a handle that reads `running` the moment
13
+ * `schedule()` returns beats waiting for a batch flush
14
+ * - very small detach payloads where batching buys nothing
15
+ * - debugging — fewer moving parts to step through
17
16
  *
18
- * Performance:
19
- * - Sync runChild → handle becomes terminal before `schedule()` returns
20
- * - Async runChild → handle marks running sync, terminal at runChild's
21
- * resolution. The `wait()` Promise is the same one consumers use for
22
- * any other driver; behaviour is uniform.
17
+ * What is synchronous, and what is not (test/lib/detach/immediate.test.ts, P1, pins the `running` status):
18
+ * - SYNC: the registry entry exists and `_markRunning()` has run before
19
+ * `schedule()` returns, so the handle reads `running`.
20
+ * - LATER: `runChild` is called on the next microtask EVEN when it is a
21
+ * sync function, and the handle becomes terminal only after the
22
+ * returned promise settles. The `wait()` Promise is the same one
23
+ * consumers use for any other driver; behaviour is uniform.
23
24
  *
24
- * Caveat — this is NOT a passive-recorder by default:
25
- * When runChild is sync, the parent stage observes the work's side
26
- * effects WITHIN its own slice. That's intentional for the test/debug
27
- * use case but means consumers should NOT use `immediateDriver` for
28
- * long-running work in production hot paths — pick `microtaskBatchDriver`
29
- * for that.
25
+ * Caveat — this does NOT run the work inside the parent's slice:
26
+ * The child starts once the parent's current synchronous code has
27
+ * finished, but it is neither batched nor deferred beyond that one
28
+ * microtask, so it can interleave with the parent's next `await`. For
29
+ * work that should leave the hot path as a single batch, pick
30
+ * `microtaskBatchDriver`.
30
31
  */
31
32
  import { type ChildRunner } from '../runChild.js';
32
33
  import type { DetachDriver } from '../types.js';
@@ -1,32 +1,33 @@
1
1
  /**
2
- * detach/drivers/immediate.ts — Run detached work synchronously inside `schedule()`.
2
+ * detach/drivers/immediate.ts — Start detached work at once: no batch, no timer.
3
3
  *
4
- * Pattern: Null-object driver for the "no actual deferral" case. Same
5
- * intent as a `setTimeout(fn, 0)` shim that just calls `fn()`
6
- * — keeps the API surface uniform so consumers can swap drivers
7
- * without changing call sites.
8
- * Role: Test fixture + opt-in for consumers who want fire-and-forget
9
- * ergonomics (the handle API) without actually deferring. Useful
10
- * for:
4
+ * Pattern: The thinnest driver. `schedule()` registers the handle, marks it
5
+ * `running` SYNCHRONOUSLY and starts `runChild` on the next
6
+ * microtask (`Promise.resolve().then(...)`) — one microtask per
7
+ * call, nothing shared with other calls. It keeps the API surface
8
+ * uniform so consumers can swap drivers without changing call sites.
9
+ * Role: Test fixture + opt-in for consumers who want the handle API
10
+ * without a queue to flush. Useful for:
11
11
  *
12
- * - unit tests where deterministic, synchronous completion
13
- * beats microtask gymnastics
14
- * - very small detach payloads where the overhead of a
15
- * microtask roundtrip exceeds the work itself
16
- * - debugging — easier to step through with breakpoints
12
+ * - unit tests where a handle that reads `running` the moment
13
+ * `schedule()` returns beats waiting for a batch flush
14
+ * - very small detach payloads where batching buys nothing
15
+ * - debugging — fewer moving parts to step through
17
16
  *
18
- * Performance:
19
- * - Sync runChild → handle becomes terminal before `schedule()` returns
20
- * - Async runChild → handle marks running sync, terminal at runChild's
21
- * resolution. The `wait()` Promise is the same one consumers use for
22
- * any other driver; behaviour is uniform.
17
+ * What is synchronous, and what is not (test/lib/detach/immediate.test.ts, P1, pins the `running` status):
18
+ * - SYNC: the registry entry exists and `_markRunning()` has run before
19
+ * `schedule()` returns, so the handle reads `running`.
20
+ * - LATER: `runChild` is called on the next microtask EVEN when it is a
21
+ * sync function, and the handle becomes terminal only after the
22
+ * returned promise settles. The `wait()` Promise is the same one
23
+ * consumers use for any other driver; behaviour is uniform.
23
24
  *
24
- * Caveat — this is NOT a passive-recorder by default:
25
- * When runChild is sync, the parent stage observes the work's side
26
- * effects WITHIN its own slice. That's intentional for the test/debug
27
- * use case but means consumers should NOT use `immediateDriver` for
28
- * long-running work in production hot paths — pick `microtaskBatchDriver`
29
- * for that.
25
+ * Caveat — this does NOT run the work inside the parent's slice:
26
+ * The child starts once the parent's current synchronous code has
27
+ * finished, but it is neither batched nor deferred beyond that one
28
+ * microtask, so it can interleave with the parent's next `await`. For
29
+ * work that should leave the hot path as a single batch, pick
30
+ * `microtaskBatchDriver`.
30
31
  */
31
32
  import { asImpl, createHandle } from '../handle.js';
32
33
  import { register, unregister } from '../registry.js';
@@ -63,4 +64,4 @@ export function createImmediateDriver(runChild = defaultRunChild) {
63
64
  }
64
65
  /** Default singleton — most consumers use this. */
65
66
  export const immediateDriver = createImmediateDriver();
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1tZWRpYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9kZXRhY2gvZHJpdmVycy9pbW1lZGlhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBR0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQW9CLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR25FOzs7R0FHRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxXQUF3QixlQUFlO0lBQzNFLE9BQU87UUFDTCxJQUFJLEVBQUUsV0FBVztRQUNqQixZQUFZLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUNuRSxRQUFRLENBQUMsS0FBZ0IsRUFBRSxLQUFjLEVBQUUsS0FBYTtZQUN0RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsaUVBQWlFO1lBQ2pFLGlFQUFpRTtZQUNqRSxrRUFBa0U7WUFDbEUsaUVBQWlFO1lBQ2pFLE9BQU8sQ0FBQyxPQUFPLEVBQUU7aUJBQ2QsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ2xDLElBQUksQ0FDSCxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNULElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZCLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEIsQ0FBQyxFQUNELENBQUMsR0FBWSxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEIsQ0FBQyxDQUNGLENBQUM7WUFDSixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxtREFBbUQ7QUFDbkQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFpQixxQkFBcUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkZXRhY2gvZHJpdmVycy9pbW1lZGlhdGUudHMg4oCUIFJ1biBkZXRhY2hlZCB3b3JrIHN5bmNocm9ub3VzbHkgaW5zaWRlIGBzY2hlZHVsZSgpYC5cbiAqXG4gKiBQYXR0ZXJuOiAgTnVsbC1vYmplY3QgZHJpdmVyIGZvciB0aGUgXCJubyBhY3R1YWwgZGVmZXJyYWxcIiBjYXNlLiBTYW1lXG4gKiAgICAgICAgICAgaW50ZW50IGFzIGEgYHNldFRpbWVvdXQoZm4sIDApYCBzaGltIHRoYXQganVzdCBjYWxscyBgZm4oKWBcbiAqICAgICAgICAgICDigJQga2VlcHMgdGhlIEFQSSBzdXJmYWNlIHVuaWZvcm0gc28gY29uc3VtZXJzIGNhbiBzd2FwIGRyaXZlcnNcbiAqICAgICAgICAgICB3aXRob3V0IGNoYW5naW5nIGNhbGwgc2l0ZXMuXG4gKiBSb2xlOiAgICAgVGVzdCBmaXh0dXJlICsgb3B0LWluIGZvciBjb25zdW1lcnMgd2hvIHdhbnQgZmlyZS1hbmQtZm9yZ2V0XG4gKiAgICAgICAgICAgZXJnb25vbWljcyAodGhlIGhhbmRsZSBBUEkpIHdpdGhvdXQgYWN0dWFsbHkgZGVmZXJyaW5nLiBVc2VmdWxcbiAqICAgICAgICAgICBmb3I6XG4gKlxuICogICAgICAgICAgICAgLSB1bml0IHRlc3RzIHdoZXJlIGRldGVybWluaXN0aWMsIHN5bmNocm9ub3VzIGNvbXBsZXRpb25cbiAqICAgICAgICAgICAgICAgYmVhdHMgbWljcm90YXNrIGd5bW5hc3RpY3NcbiAqICAgICAgICAgICAgIC0gdmVyeSBzbWFsbCBkZXRhY2ggcGF5bG9hZHMgd2hlcmUgdGhlIG92ZXJoZWFkIG9mIGFcbiAqICAgICAgICAgICAgICAgbWljcm90YXNrIHJvdW5kdHJpcCBleGNlZWRzIHRoZSB3b3JrIGl0c2VsZlxuICogICAgICAgICAgICAgLSBkZWJ1Z2dpbmcg4oCUIGVhc2llciB0byBzdGVwIHRocm91Z2ggd2l0aCBicmVha3BvaW50c1xuICpcbiAqIFBlcmZvcm1hbmNlOlxuICogICAtIFN5bmMgcnVuQ2hpbGQg4oaSIGhhbmRsZSBiZWNvbWVzIHRlcm1pbmFsIGJlZm9yZSBgc2NoZWR1bGUoKWAgcmV0dXJuc1xuICogICAtIEFzeW5jIHJ1bkNoaWxkIOKGkiBoYW5kbGUgbWFya3MgcnVubmluZyBzeW5jLCB0ZXJtaW5hbCBhdCBydW5DaGlsZCdzXG4gKiAgICAgcmVzb2x1dGlvbi4gVGhlIGB3YWl0KClgIFByb21pc2UgaXMgdGhlIHNhbWUgb25lIGNvbnN1bWVycyB1c2UgZm9yXG4gKiAgICAgYW55IG90aGVyIGRyaXZlcjsgYmVoYXZpb3VyIGlzIHVuaWZvcm0uXG4gKlxuICogQ2F2ZWF0IOKAlCB0aGlzIGlzIE5PVCBhIHBhc3NpdmUtcmVjb3JkZXIgYnkgZGVmYXVsdDpcbiAqICAgV2hlbiBydW5DaGlsZCBpcyBzeW5jLCB0aGUgcGFyZW50IHN0YWdlIG9ic2VydmVzIHRoZSB3b3JrJ3Mgc2lkZVxuICogICBlZmZlY3RzIFdJVEhJTiBpdHMgb3duIHNsaWNlLiBUaGF0J3MgaW50ZW50aW9uYWwgZm9yIHRoZSB0ZXN0L2RlYnVnXG4gKiAgIHVzZSBjYXNlIGJ1dCBtZWFucyBjb25zdW1lcnMgc2hvdWxkIE5PVCB1c2UgYGltbWVkaWF0ZURyaXZlcmAgZm9yXG4gKiAgIGxvbmctcnVubmluZyB3b3JrIGluIHByb2R1Y3Rpb24gaG90IHBhdGhzIOKAlCBwaWNrIGBtaWNyb3Rhc2tCYXRjaERyaXZlcmBcbiAqICAgZm9yIHRoYXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnQgfSBmcm9tICcuLi8uLi9idWlsZGVyL3R5cGVzLmpzJztcbmltcG9ydCB7IGFzSW1wbCwgY3JlYXRlSGFuZGxlIH0gZnJvbSAnLi4vaGFuZGxlLmpzJztcbmltcG9ydCB7IHJlZ2lzdGVyLCB1bnJlZ2lzdGVyIH0gZnJvbSAnLi4vcmVnaXN0cnkuanMnO1xuaW1wb3J0IHsgdHlwZSBDaGlsZFJ1bm5lciwgZGVmYXVsdFJ1bkNoaWxkIH0gZnJvbSAnLi4vcnVuQ2hpbGQuanMnO1xuaW1wb3J0IHR5cGUgeyBEZXRhY2hEcml2ZXIsIERldGFjaEhhbmRsZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLyoqXG4gKiBCdWlsZCBhbiBpbW1lZGlhdGUgZHJpdmVyIHdpcmVkIHRvIGEgY3VzdG9tIGNoaWxkIHJ1bm5lci4gTW9zdFxuICogY29uc3VtZXJzIHdhbnQgdGhlIGRlZmF1bHQgc2luZ2xldG9uIGBpbW1lZGlhdGVEcml2ZXJgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW1tZWRpYXRlRHJpdmVyKHJ1bkNoaWxkOiBDaGlsZFJ1bm5lciA9IGRlZmF1bHRSdW5DaGlsZCk6IERldGFjaERyaXZlciB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ltbWVkaWF0ZScsXG4gICAgY2FwYWJpbGl0aWVzOiB7IGJyb3dzZXJTYWZlOiB0cnVlLCBub2RlU2FmZTogdHJ1ZSwgZWRnZVNhZmU6IHRydWUgfSxcbiAgICBzY2hlZHVsZShjaGlsZDogRmxvd0NoYXJ0LCBpbnB1dDogdW5rbm93biwgcmVmSWQ6IHN0cmluZyk6IERldGFjaEhhbmRsZSB7XG4gICAgICBjb25zdCBoYW5kbGUgPSBjcmVhdGVIYW5kbGUocmVmSWQpO1xuICAgICAgcmVnaXN0ZXIoaGFuZGxlKTtcbiAgICAgIGNvbnN0IGltcGwgPSBhc0ltcGwoaGFuZGxlKTtcbiAgICAgIGltcGwuX21hcmtSdW5uaW5nKCk7XG4gICAgICAvLyBEb24ndCBhd2FpdCBoZXJlIOKAlCBkcml2ZXIgc2NoZWR1bGUoKSBtdXN0IHJldHVybiBzeW5jaHJvbm91c2x5XG4gICAgICAvLyAocGFzc2l2ZSByZWNvcmRlciBydWxlKS4gVGhlIFByb21pc2UgZnJvbSBydW5DaGlsZCBoYW5kbGVzIHRoZVxuICAgICAgLy8gcmVzdDsgaWYgaXQncyBhbHJlYWR5LXJlc29sdmVkIChzeW5jIHJ1bm5lciksIHRoZSAudGhlbiBydW5zIG9uXG4gICAgICAvLyB0aGUgbmV4dCBtaWNyb3Rhc2sgYnV0IHRoZSBzY2hlZHVsZSgpIGNhbGwgc3RpbGwgcmV0dXJucyBzeW5jLlxuICAgICAgUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4oKCkgPT4gcnVuQ2hpbGQoY2hpbGQsIGlucHV0KSlcbiAgICAgICAgLnRoZW4oXG4gICAgICAgICAgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaW1wbC5fbWFya0RvbmUocmVzdWx0KTtcbiAgICAgICAgICAgIHVucmVnaXN0ZXIoaW1wbC5pZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICBpbXBsLl9tYXJrRmFpbGVkKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKFN0cmluZyhlcnIpKSk7XG4gICAgICAgICAgICB1bnJlZ2lzdGVyKGltcGwuaWQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gaGFuZGxlO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKiBEZWZhdWx0IHNpbmdsZXRvbiDigJQgbW9zdCBjb25zdW1lcnMgdXNlIHRoaXMuICovXG5leHBvcnQgY29uc3QgaW1tZWRpYXRlRHJpdmVyOiBEZXRhY2hEcml2ZXIgPSBjcmVhdGVJbW1lZGlhdGVEcml2ZXIoKTtcbiJdfQ==
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1tZWRpYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9kZXRhY2gvZHJpdmVycy9pbW1lZGlhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUdILE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFvQixlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUduRTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsV0FBd0IsZUFBZTtJQUMzRSxPQUFPO1FBQ0wsSUFBSSxFQUFFLFdBQVc7UUFDakIsWUFBWSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7UUFDbkUsUUFBUSxDQUFDLEtBQWdCLEVBQUUsS0FBYyxFQUFFLEtBQWE7WUFDdEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25DLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLGlFQUFpRTtZQUNqRSxpRUFBaUU7WUFDakUsa0VBQWtFO1lBQ2xFLGlFQUFpRTtZQUNqRSxPQUFPLENBQUMsT0FBTyxFQUFFO2lCQUNkLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNsQyxJQUFJLENBQ0gsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2QixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RCLENBQUMsRUFDRCxDQUFDLEdBQVksRUFBRSxFQUFFO2dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RCLENBQUMsQ0FDRixDQUFDO1lBQ0osT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBaUIscUJBQXFCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGV0YWNoL2RyaXZlcnMvaW1tZWRpYXRlLnRzIOKAlCBTdGFydCBkZXRhY2hlZCB3b3JrIGF0IG9uY2U6IG5vIGJhdGNoLCBubyB0aW1lci5cbiAqXG4gKiBQYXR0ZXJuOiAgVGhlIHRoaW5uZXN0IGRyaXZlci4gYHNjaGVkdWxlKClgIHJlZ2lzdGVycyB0aGUgaGFuZGxlLCBtYXJrcyBpdFxuICogICAgICAgICAgIGBydW5uaW5nYCBTWU5DSFJPTk9VU0xZIGFuZCBzdGFydHMgYHJ1bkNoaWxkYCBvbiB0aGUgbmV4dFxuICogICAgICAgICAgIG1pY3JvdGFzayAoYFByb21pc2UucmVzb2x2ZSgpLnRoZW4oLi4uKWApIOKAlCBvbmUgbWljcm90YXNrIHBlclxuICogICAgICAgICAgIGNhbGwsIG5vdGhpbmcgc2hhcmVkIHdpdGggb3RoZXIgY2FsbHMuIEl0IGtlZXBzIHRoZSBBUEkgc3VyZmFjZVxuICogICAgICAgICAgIHVuaWZvcm0gc28gY29uc3VtZXJzIGNhbiBzd2FwIGRyaXZlcnMgd2l0aG91dCBjaGFuZ2luZyBjYWxsIHNpdGVzLlxuICogUm9sZTogICAgIFRlc3QgZml4dHVyZSArIG9wdC1pbiBmb3IgY29uc3VtZXJzIHdobyB3YW50IHRoZSBoYW5kbGUgQVBJXG4gKiAgICAgICAgICAgd2l0aG91dCBhIHF1ZXVlIHRvIGZsdXNoLiBVc2VmdWwgZm9yOlxuICpcbiAqICAgICAgICAgICAgIC0gdW5pdCB0ZXN0cyB3aGVyZSBhIGhhbmRsZSB0aGF0IHJlYWRzIGBydW5uaW5nYCB0aGUgbW9tZW50XG4gKiAgICAgICAgICAgICAgIGBzY2hlZHVsZSgpYCByZXR1cm5zIGJlYXRzIHdhaXRpbmcgZm9yIGEgYmF0Y2ggZmx1c2hcbiAqICAgICAgICAgICAgIC0gdmVyeSBzbWFsbCBkZXRhY2ggcGF5bG9hZHMgd2hlcmUgYmF0Y2hpbmcgYnV5cyBub3RoaW5nXG4gKiAgICAgICAgICAgICAtIGRlYnVnZ2luZyDigJQgZmV3ZXIgbW92aW5nIHBhcnRzIHRvIHN0ZXAgdGhyb3VnaFxuICpcbiAqIFdoYXQgaXMgc3luY2hyb25vdXMsIGFuZCB3aGF0IGlzIG5vdCAodGVzdC9saWIvZGV0YWNoL2ltbWVkaWF0ZS50ZXN0LnRzLCBQMSwgcGlucyB0aGUgYHJ1bm5pbmdgIHN0YXR1cyk6XG4gKiAgIC0gU1lOQzogIHRoZSByZWdpc3RyeSBlbnRyeSBleGlzdHMgYW5kIGBfbWFya1J1bm5pbmcoKWAgaGFzIHJ1biBiZWZvcmVcbiAqICAgICAgICAgICAgYHNjaGVkdWxlKClgIHJldHVybnMsIHNvIHRoZSBoYW5kbGUgcmVhZHMgYHJ1bm5pbmdgLlxuICogICAtIExBVEVSOiBgcnVuQ2hpbGRgIGlzIGNhbGxlZCBvbiB0aGUgbmV4dCBtaWNyb3Rhc2sgRVZFTiB3aGVuIGl0IGlzIGFcbiAqICAgICAgICAgICAgc3luYyBmdW5jdGlvbiwgYW5kIHRoZSBoYW5kbGUgYmVjb21lcyB0ZXJtaW5hbCBvbmx5IGFmdGVyIHRoZVxuICogICAgICAgICAgICByZXR1cm5lZCBwcm9taXNlIHNldHRsZXMuIFRoZSBgd2FpdCgpYCBQcm9taXNlIGlzIHRoZSBzYW1lIG9uZVxuICogICAgICAgICAgICBjb25zdW1lcnMgdXNlIGZvciBhbnkgb3RoZXIgZHJpdmVyOyBiZWhhdmlvdXIgaXMgdW5pZm9ybS5cbiAqXG4gKiBDYXZlYXQg4oCUIHRoaXMgZG9lcyBOT1QgcnVuIHRoZSB3b3JrIGluc2lkZSB0aGUgcGFyZW50J3Mgc2xpY2U6XG4gKiAgIFRoZSBjaGlsZCBzdGFydHMgb25jZSB0aGUgcGFyZW50J3MgY3VycmVudCBzeW5jaHJvbm91cyBjb2RlIGhhc1xuICogICBmaW5pc2hlZCwgYnV0IGl0IGlzIG5laXRoZXIgYmF0Y2hlZCBub3IgZGVmZXJyZWQgYmV5b25kIHRoYXQgb25lXG4gKiAgIG1pY3JvdGFzaywgc28gaXQgY2FuIGludGVybGVhdmUgd2l0aCB0aGUgcGFyZW50J3MgbmV4dCBgYXdhaXRgLiBGb3JcbiAqICAgd29yayB0aGF0IHNob3VsZCBsZWF2ZSB0aGUgaG90IHBhdGggYXMgYSBzaW5nbGUgYmF0Y2gsIHBpY2tcbiAqICAgYG1pY3JvdGFza0JhdGNoRHJpdmVyYC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydCB9IGZyb20gJy4uLy4uL2J1aWxkZXIvdHlwZXMuanMnO1xuaW1wb3J0IHsgYXNJbXBsLCBjcmVhdGVIYW5kbGUgfSBmcm9tICcuLi9oYW5kbGUuanMnO1xuaW1wb3J0IHsgcmVnaXN0ZXIsIHVucmVnaXN0ZXIgfSBmcm9tICcuLi9yZWdpc3RyeS5qcyc7XG5pbXBvcnQgeyB0eXBlIENoaWxkUnVubmVyLCBkZWZhdWx0UnVuQ2hpbGQgfSBmcm9tICcuLi9ydW5DaGlsZC5qcyc7XG5pbXBvcnQgdHlwZSB7IERldGFjaERyaXZlciwgRGV0YWNoSGFuZGxlIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vKipcbiAqIEJ1aWxkIGFuIGltbWVkaWF0ZSBkcml2ZXIgd2lyZWQgdG8gYSBjdXN0b20gY2hpbGQgcnVubmVyLiBNb3N0XG4gKiBjb25zdW1lcnMgd2FudCB0aGUgZGVmYXVsdCBzaW5nbGV0b24gYGltbWVkaWF0ZURyaXZlcmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbW1lZGlhdGVEcml2ZXIocnVuQ2hpbGQ6IENoaWxkUnVubmVyID0gZGVmYXVsdFJ1bkNoaWxkKTogRGV0YWNoRHJpdmVyIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaW1tZWRpYXRlJyxcbiAgICBjYXBhYmlsaXRpZXM6IHsgYnJvd3NlclNhZmU6IHRydWUsIG5vZGVTYWZlOiB0cnVlLCBlZGdlU2FmZTogdHJ1ZSB9LFxuICAgIHNjaGVkdWxlKGNoaWxkOiBGbG93Q2hhcnQsIGlucHV0OiB1bmtub3duLCByZWZJZDogc3RyaW5nKTogRGV0YWNoSGFuZGxlIHtcbiAgICAgIGNvbnN0IGhhbmRsZSA9IGNyZWF0ZUhhbmRsZShyZWZJZCk7XG4gICAgICByZWdpc3RlcihoYW5kbGUpO1xuICAgICAgY29uc3QgaW1wbCA9IGFzSW1wbChoYW5kbGUpO1xuICAgICAgaW1wbC5fbWFya1J1bm5pbmcoKTtcbiAgICAgIC8vIERvbid0IGF3YWl0IGhlcmUg4oCUIGRyaXZlciBzY2hlZHVsZSgpIG11c3QgcmV0dXJuIHN5bmNocm9ub3VzbHlcbiAgICAgIC8vIChwYXNzaXZlIHJlY29yZGVyIHJ1bGUpLiBUaGUgUHJvbWlzZSBmcm9tIHJ1bkNoaWxkIGhhbmRsZXMgdGhlXG4gICAgICAvLyByZXN0OyBpZiBpdCdzIGFscmVhZHktcmVzb2x2ZWQgKHN5bmMgcnVubmVyKSwgdGhlIC50aGVuIHJ1bnMgb25cbiAgICAgIC8vIHRoZSBuZXh0IG1pY3JvdGFzayBidXQgdGhlIHNjaGVkdWxlKCkgY2FsbCBzdGlsbCByZXR1cm5zIHN5bmMuXG4gICAgICBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbigoKSA9PiBydW5DaGlsZChjaGlsZCwgaW5wdXQpKVxuICAgICAgICAudGhlbihcbiAgICAgICAgICAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpbXBsLl9tYXJrRG9uZShyZXN1bHQpO1xuICAgICAgICAgICAgdW5yZWdpc3RlcihpbXBsLmlkKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnI6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgIGltcGwuX21hcmtGYWlsZWQoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoU3RyaW5nKGVycikpKTtcbiAgICAgICAgICAgIHVucmVnaXN0ZXIoaW1wbC5pZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBoYW5kbGU7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqIERlZmF1bHQgc2luZ2xldG9uIOKAlCBtb3N0IGNvbnN1bWVycyB1c2UgdGhpcy4gKi9cbmV4cG9ydCBjb25zdCBpbW1lZGlhdGVEcml2ZXI6IERldGFjaERyaXZlciA9IGNyZWF0ZUltbWVkaWF0ZURyaXZlcigpO1xuIl19
@@ -5,7 +5,8 @@
5
5
  * agentfootprint's `EventDispatcher` flush queue and the React
6
6
  * reconciler's microtask scheduling — accumulate during the
7
7
  * current sync slice, drain at the next microtask boundary.
8
- * Role: Default driver for in-process detach. Cheapest scheduling
8
+ * Role: The in-process driver the docs name (no driver is the default:
9
+ * every detach call passes one). Cheapest scheduling
9
10
  * primitive on V8/JSC: one `queueMicrotask` per batch
10
11
  * regardless of how many work items, so the perf budget
11
12
  * amortizes. Suitable for browser AND node AND edge runtimes
@@ -50,8 +51,8 @@ import type { DetachDriver } from '../types.js';
50
51
  */
51
52
  export declare function createMicrotaskBatchDriver(runChild?: ChildRunner): DetachDriver;
52
53
  /**
53
- * Default singleton. Most consumers import this and pass it to
54
- * `executor.detachAndJoinLater(child, input, { driver: microtaskBatchDriver })`
55
- * (or rely on it being the executor's default driver, set in T5b).
54
+ * Ready-made singleton. Most consumers import this and pass it as the first
55
+ * argument: `executor.detachAndJoinLater(microtaskBatchDriver, child, input)`.
56
+ * It is not an implicit default — nothing picks a driver for you.
56
57
  */
57
58
  export declare const microtaskBatchDriver: DetachDriver;
@@ -5,7 +5,8 @@
5
5
  * agentfootprint's `EventDispatcher` flush queue and the React
6
6
  * reconciler's microtask scheduling — accumulate during the
7
7
  * current sync slice, drain at the next microtask boundary.
8
- * Role: Default driver for in-process detach. Cheapest scheduling
8
+ * Role: The in-process driver the docs name (no driver is the default:
9
+ * every detach call passes one). Cheapest scheduling
9
10
  * primitive on V8/JSC: one `queueMicrotask` per batch
10
11
  * regardless of how many work items, so the perf budget
11
12
  * amortizes. Suitable for browser AND node AND edge runtimes
@@ -105,9 +106,9 @@ async function executeOne(item, runChild) {
105
106
  }
106
107
  }
107
108
  /**
108
- * Default singleton. Most consumers import this and pass it to
109
- * `executor.detachAndJoinLater(child, input, { driver: microtaskBatchDriver })`
110
- * (or rely on it being the executor's default driver, set in T5b).
109
+ * Ready-made singleton. Most consumers import this and pass it as the first
110
+ * argument: `executor.detachAndJoinLater(microtaskBatchDriver, child, input)`.
111
+ * It is not an implicit default — nothing picks a driver for you.
111
112
  */
112
113
  export const microtaskBatchDriver = createMicrotaskBatchDriver();
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm90YXNrQmF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RldGFjaC9kcml2ZXJzL21pY3JvdGFza0JhdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBR0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQW9CLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBU25FOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxXQUF3QixlQUFlO0lBQ2hGLHVFQUF1RTtJQUN2RSxvRUFBb0U7SUFDcEUsK0RBQStEO0lBQy9ELE1BQU0sS0FBSyxHQUFlLEVBQUUsQ0FBQztJQUM3QixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFFdEIsU0FBUyxLQUFLO1FBQ1osa0VBQWtFO1FBQ2xFLGtFQUFrRTtRQUNsRSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6Qiw2REFBNkQ7WUFDN0QsMERBQTBEO1lBQzFELGlFQUFpRTtZQUNqRSxnRUFBZ0U7WUFDaEUsZ0VBQWdFO1lBQ2hFLGdEQUFnRDtZQUNoRCxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLGlCQUFpQjtRQUN2QixZQUFZLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUNuRSxRQUFRLENBQUMsS0FBZ0IsRUFBRSxLQUFjLEVBQUUsS0FBYTtZQUN0RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNmLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ2pCLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxVQUFVLENBQUMsSUFBYyxFQUFFLFFBQXFCO0lBQzdELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BCLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO1lBQVMsQ0FBQztRQUNULFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQWlCLDBCQUEwQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGRldGFjaC9kcml2ZXJzL21pY3JvdGFza0JhdGNoLnRzIOKAlCBCYXRjaCBkZXRhY2hlZCB3b3JrIGludG8gT05FIG1pY3JvdGFzay5cbiAqXG4gKiBQYXR0ZXJuOiAgUHJvZHVjZXItY29uc3VtZXIgd2l0aCBiYXRjaGVkIGZsdXNoLiBTYW1lIHNoYXBlIGFzXG4gKiAgICAgICAgICAgYWdlbnRmb290cHJpbnQncyBgRXZlbnREaXNwYXRjaGVyYCBmbHVzaCBxdWV1ZSBhbmQgdGhlIFJlYWN0XG4gKiAgICAgICAgICAgcmVjb25jaWxlcidzIG1pY3JvdGFzayBzY2hlZHVsaW5nIOKAlCBhY2N1bXVsYXRlIGR1cmluZyB0aGVcbiAqICAgICAgICAgICBjdXJyZW50IHN5bmMgc2xpY2UsIGRyYWluIGF0IHRoZSBuZXh0IG1pY3JvdGFzayBib3VuZGFyeS5cbiAqIFJvbGU6ICAgICBEZWZhdWx0IGRyaXZlciBmb3IgaW4tcHJvY2VzcyBkZXRhY2guIENoZWFwZXN0IHNjaGVkdWxpbmdcbiAqICAgICAgICAgICBwcmltaXRpdmUgb24gVjgvSlNDOiBvbmUgYHF1ZXVlTWljcm90YXNrYCBwZXIgYmF0Y2hcbiAqICAgICAgICAgICByZWdhcmRsZXNzIG9mIGhvdyBtYW55IHdvcmsgaXRlbXMsIHNvIHRoZSBwZXJmIGJ1ZGdldFxuICogICAgICAgICAgIGFtb3J0aXplcy4gU3VpdGFibGUgZm9yIGJyb3dzZXIgQU5EIG5vZGUgQU5EIGVkZ2UgcnVudGltZXNcbiAqICAgICAgICAgICAocXVldWVNaWNyb3Rhc2sgaXMgdW5pdmVyc2FsIHNpbmNlIDIwMTgpLlxuICpcbiAqIExpZmVjeWNsZTpcbiAqXG4gKiAgIHNjaGVkdWxlKGNoaWxkLCBpbnB1dCwgcmVmSWQpICAgICAgICAgICAg4oaQIGRyaXZlciBlbnRyeVxuICogICAgIOKUlOKUgCBjcmVhdGUgaGFuZGxlIChxdWV1ZWQpXG4gKiAgICAg4pSU4pSAIHJlZ2lzdGVyIGluIGRldGFjaFJlZ2lzdHJ5XG4gKiAgICAg4pSU4pSAIHB1c2ggd29yayBpdGVtIG9udG8gbG9jYWwgcXVldWVcbiAqICAgICDilJTilIAgaWYgbm8gbWljcm90YXNrIHNjaGVkdWxlZCB5ZXQg4oaSIHF1ZXVlTWljcm90YXNrKGZsdXNoKVxuICogICAgIOKUlOKUgCByZXR1cm4gaGFuZGxlIChzeW5jIOKAlCBwYXNzaXZlIHJlY29yZGVyIHJ1bGUpXG4gKlxuICogICBmbHVzaCgpIChtaWNyb3Rhc2spICAgICAgICAgICAgICAgICAgICAgICDihpAgZGVmZXJyZWRcbiAqICAgICDilJTilIAgc3dhcCBvdXQgcXVldWUgKGRyYWluIHJhY2VzIHNhZmVseSlcbiAqICAgICDilJTilIAgZm9yIGVhY2ggaXRlbTogX21hcmtSdW5uaW5nLCBhd2FpdCBydW5DaGlsZCwgX21hcmtEb25lL19tYXJrRmFpbGVkXG4gKiAgICAg4pSU4pSAIHVucmVnaXN0ZXIgaGFuZGxlIGZyb20gZGV0YWNoUmVnaXN0cnlcbiAqXG4gKiBXaHkgbWljcm90YXNrIChhbmQgbm90IHNldEltbWVkaWF0ZSAvIHNldFRpbWVvdXQpOlxuICogICAtIE1pY3JvdGFza3MgcnVuIEJFRk9SRSByZXR1cm5pbmcgdG8gdGhlIGV2ZW50IGxvb3Ag4oCUIGd1YXJhbnRlZXNcbiAqICAgICB0aGUgd29yayBmaW5pc2hlcyB3aXRoaW4gdGhlIGN1cnJlbnQgXCJ0aWNrXCIgaWYgdGhlIHJ1bnRpbWUgYWxsb3dzXG4gKiAgIC0gTG93ZXN0IHBvc3NpYmxlIGRlZmVycmFsIGNvc3QgKH41MG5zIG9uIG1vZGVybiBWOClcbiAqICAgLSBXb3JrcyBpbiBFVkVSWSBKUyBydW50aW1lIChicm93c2VyLCBub2RlLCBkZW5vLCBidW4sIGVkZ2UpXG4gKiAgIC0gRG9lc24ndCByZXF1aXJlIGFueSB0aW1lciBpbmZyYXN0cnVjdHVyZSDihpIgbm8gR0MgcHJlc3N1cmVcbiAqXG4gKiBSZS1lbnRyYW5jeTpcbiAqICAgLSBJZiBgcnVuQ2hpbGRgIGNhbGxzIGBzY2hlZHVsZSgpYCBmb3IgbmVzdGVkIGRldGFjaCwgdGhlIG5ldyBpdGVtXG4gKiAgICAgbGFuZHMgb24gdGhlIFNBTUUgcXVldWUuIEJlY2F1c2UgYHNjaGVkdWxlZGAgZmxpcHMgYmFjayB0byBmYWxzZVxuICogICAgIGF0IHRoZSBzdGFydCBvZiBgZmx1c2hgLCB0aGUgbmV3IGl0ZW0gdHJpZ2dlcnMgYSBmcmVzaCBtaWNyb3Rhc2suXG4gKiAgIC0gV29yc3QtY2FzZTogTyhuKSBtaWNyb3Rhc2tzIGZvciBuIG5lc3RlZCBsZXZlbHMuIEFjY2VwdGFibGUg4oCUXG4gKiAgICAgcmVhbC13b3JsZCBkZXRhY2ggdHJlZXMgYXJlIHNoYWxsb3cuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnQgfSBmcm9tICcuLi8uLi9idWlsZGVyL3R5cGVzLmpzJztcbmltcG9ydCB7IGFzSW1wbCwgY3JlYXRlSGFuZGxlIH0gZnJvbSAnLi4vaGFuZGxlLmpzJztcbmltcG9ydCB7IHJlZ2lzdGVyLCB1bnJlZ2lzdGVyIH0gZnJvbSAnLi4vcmVnaXN0cnkuanMnO1xuaW1wb3J0IHsgdHlwZSBDaGlsZFJ1bm5lciwgZGVmYXVsdFJ1bkNoaWxkIH0gZnJvbSAnLi4vcnVuQ2hpbGQuanMnO1xuaW1wb3J0IHR5cGUgeyBEZXRhY2hEcml2ZXIsIERldGFjaEhhbmRsZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuaW50ZXJmYWNlIFdvcmtJdGVtIHtcbiAgcmVhZG9ubHkgY2hpbGQ6IEZsb3dDaGFydDtcbiAgcmVhZG9ubHkgaW5wdXQ6IHVua25vd247XG4gIHJlYWRvbmx5IGhhbmRsZTogRGV0YWNoSGFuZGxlO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgbWljcm90YXNrLWJhdGNoIGRyaXZlciB3aXJlZCB0byBhIGN1c3RvbSBjaGlsZCBydW5uZXIuIE1vc3RcbiAqIGNvbnN1bWVycyB3YW50IHRoZSBkZWZhdWx0IHNpbmdsZXRvbiBgbWljcm90YXNrQmF0Y2hEcml2ZXJgIGluc3RlYWQ7XG4gKiB0aGlzIGZhY3RvcnkgZXhpc3RzIGZvciB0ZXN0cyBhbmQgZm9yIGFkdmFuY2VkIGNvbnN1bWVycyB3aG8gd2FudCB0b1xuICogaW5qZWN0IHRoZWlyIG93biBydW5uZXIgKGUuZy4sIGEgcnVubmVyIHRoYXQgd3JhcHMgdGhlIGNoaWxkIGluIGFcbiAqIHRyYWNpbmcgY29udGV4dCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNaWNyb3Rhc2tCYXRjaERyaXZlcihydW5DaGlsZDogQ2hpbGRSdW5uZXIgPSBkZWZhdWx0UnVuQ2hpbGQpOiBEZXRhY2hEcml2ZXIge1xuICAvLyBQZXItZHJpdmVyLWluc3RhbmNlIHF1ZXVlIGFuZCBmbHVzaCBndWFyZC4gQ2xvc2VkIG92ZXIgYnkgYHNjaGVkdWxlYFxuICAvLyBhbmQgYGZsdXNoYCBzbyBlYWNoIGNhbGwgdG8gYGNyZWF0ZU1pY3JvdGFza0JhdGNoRHJpdmVyYCBnZXRzIGl0c1xuICAvLyBvd24gaXNvbGF0ZWQgYmF0Y2ggKHRlc3QgaXNvbGF0aW9uLCBtdWx0aS10ZW5hbnQgc2NlbmFyaW9zKS5cbiAgY29uc3QgcXVldWU6IFdvcmtJdGVtW10gPSBbXTtcbiAgbGV0IHNjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGZsdXNoKCk6IHZvaWQge1xuICAgIC8vIFJlc2V0IEJFRk9SRSBkcmFpbmluZyBzbyByZS1lbnRyYW50IHNjaGVkdWxlKClzIGR1cmluZyBydW5DaGlsZFxuICAgIC8vIHF1ZXVlIGEgZnJlc2ggbWljcm90YXNrIGluc3RlYWQgb2Ygam9pbmluZyB0aGUgaW4tZmxpZ2h0IGRyYWluLlxuICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGl0ZW1zID0gcXVldWUuc3BsaWNlKDApO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgLy8gRWFjaCBpdGVtIHJ1bnMgY29uY3VycmVudGx5IOKAlCBubyBhd2FpdHMgaGVyZSwgc28gdGhlIG91dGVyXG4gICAgICAvLyBmb3ItbG9vcCBjb21wbGV0ZXMgd2l0aGluIHRoaXMgbWljcm90YXNrLiBFcnJvcnMgaW5zaWRlXG4gICAgICAvLyBgZXhlY3V0ZU9uZWAgYXJlIHJvdXRlZCB0byB0aGUgaGFuZGxlLCBub3QgdGhyb3duLiBUaGUgcHJvbWlzZVxuICAgICAgLy8gaXMgaW50ZW50aW9uYWxseSBub3QgYXdhaXRlZDsgaWdub3JlLXByb21pc2UtcmV0dXJuZWQgdmlhIHRoZVxuICAgICAgLy8gZXhwbGljaXQgbm8tb3AgLnRoZW4oKSBwYXR0ZXJuIHRoYXQgdGhlIHByb2plY3QncyBsaW50IGNvbmZpZ1xuICAgICAgLy8gYWNjZXB0cyAodnMgYHZvaWRgLCB3aGljaCBgbm8tdm9pZGAgcmVqZWN0cykuXG4gICAgICBleGVjdXRlT25lKGl0ZW0sIHJ1bkNoaWxkKS50aGVuKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdtaWNyb3Rhc2stYmF0Y2gnLFxuICAgIGNhcGFiaWxpdGllczogeyBicm93c2VyU2FmZTogdHJ1ZSwgbm9kZVNhZmU6IHRydWUsIGVkZ2VTYWZlOiB0cnVlIH0sXG4gICAgc2NoZWR1bGUoY2hpbGQ6IEZsb3dDaGFydCwgaW5wdXQ6IHVua25vd24sIHJlZklkOiBzdHJpbmcpOiBEZXRhY2hIYW5kbGUge1xuICAgICAgY29uc3QgaGFuZGxlID0gY3JlYXRlSGFuZGxlKHJlZklkKTtcbiAgICAgIHJlZ2lzdGVyKGhhbmRsZSk7XG4gICAgICBxdWV1ZS5wdXNoKHsgY2hpbGQsIGlucHV0LCBoYW5kbGUgfSk7XG4gICAgICBpZiAoIXNjaGVkdWxlZCkge1xuICAgICAgICBzY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhmbHVzaCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFuZGxlO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogUGVyLWl0ZW0gZXhlY3V0aW9uLiBNYXJrcyB0aGUgaGFuZGxlIHJ1bm5pbmcsIGF3YWl0cyB0aGUgcnVubmVyLFxuICogcm91dGVzIG91dGNvbWUgdG8gdGhlIGhhbmRsZSwgY2xlYW5zIHVwIHRoZSByZWdpc3RyeSBlbnRyeS4gTmV2ZXJcbiAqIHRocm93cyDigJQgZXJyb3JzIGxhbmQgb24gdGhlIGhhbmRsZSAocGFzc2l2ZSByZWNvcmRlciBydWxlKS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZU9uZShpdGVtOiBXb3JrSXRlbSwgcnVuQ2hpbGQ6IENoaWxkUnVubmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGltcGwgPSBhc0ltcGwoaXRlbS5oYW5kbGUpO1xuICBpbXBsLl9tYXJrUnVubmluZygpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1bkNoaWxkKGl0ZW0uY2hpbGQsIGl0ZW0uaW5wdXQpO1xuICAgIGltcGwuX21hcmtEb25lKHJlc3VsdCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGltcGwuX21hcmtGYWlsZWQoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoU3RyaW5nKGVycikpKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB1bnJlZ2lzdGVyKGltcGwuaWQpO1xuICB9XG59XG5cbi8qKlxuICogRGVmYXVsdCBzaW5nbGV0b24uIE1vc3QgY29uc3VtZXJzIGltcG9ydCB0aGlzIGFuZCBwYXNzIGl0IHRvXG4gKiBgZXhlY3V0b3IuZGV0YWNoQW5kSm9pbkxhdGVyKGNoaWxkLCBpbnB1dCwgeyBkcml2ZXI6IG1pY3JvdGFza0JhdGNoRHJpdmVyIH0pYFxuICogKG9yIHJlbHkgb24gaXQgYmVpbmcgdGhlIGV4ZWN1dG9yJ3MgZGVmYXVsdCBkcml2ZXIsIHNldCBpbiBUNWIpLlxuICovXG5leHBvcnQgY29uc3QgbWljcm90YXNrQmF0Y2hEcml2ZXI6IERldGFjaERyaXZlciA9IGNyZWF0ZU1pY3JvdGFza0JhdGNoRHJpdmVyKCk7XG4iXX0=
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm90YXNrQmF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RldGFjaC9kcml2ZXJzL21pY3JvdGFza0JhdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlDRztBQUdILE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFvQixlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVNuRTs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsV0FBd0IsZUFBZTtJQUNoRix1RUFBdUU7SUFDdkUsb0VBQW9FO0lBQ3BFLCtEQUErRDtJQUMvRCxNQUFNLEtBQUssR0FBZSxFQUFFLENBQUM7SUFDN0IsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRXRCLFNBQVMsS0FBSztRQUNaLGtFQUFrRTtRQUNsRSxrRUFBa0U7UUFDbEUsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsNkRBQTZEO1lBQzdELDBEQUEwRDtZQUMxRCxpRUFBaUU7WUFDakUsZ0VBQWdFO1lBQ2hFLGdFQUFnRTtZQUNoRSxnREFBZ0Q7WUFDaEQsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsWUFBWSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7UUFDbkUsUUFBUSxDQUFDLEtBQWdCLEVBQUUsS0FBYyxFQUFFLEtBQWE7WUFDdEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25DLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDZixTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUNqQixjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsVUFBVSxDQUFDLElBQWMsRUFBRSxRQUFxQjtJQUM3RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNwQixJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztZQUFTLENBQUM7UUFDVCxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFpQiwwQkFBMEIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkZXRhY2gvZHJpdmVycy9taWNyb3Rhc2tCYXRjaC50cyDigJQgQmF0Y2ggZGV0YWNoZWQgd29yayBpbnRvIE9ORSBtaWNyb3Rhc2suXG4gKlxuICogUGF0dGVybjogIFByb2R1Y2VyLWNvbnN1bWVyIHdpdGggYmF0Y2hlZCBmbHVzaC4gU2FtZSBzaGFwZSBhc1xuICogICAgICAgICAgIGFnZW50Zm9vdHByaW50J3MgYEV2ZW50RGlzcGF0Y2hlcmAgZmx1c2ggcXVldWUgYW5kIHRoZSBSZWFjdFxuICogICAgICAgICAgIHJlY29uY2lsZXIncyBtaWNyb3Rhc2sgc2NoZWR1bGluZyDigJQgYWNjdW11bGF0ZSBkdXJpbmcgdGhlXG4gKiAgICAgICAgICAgY3VycmVudCBzeW5jIHNsaWNlLCBkcmFpbiBhdCB0aGUgbmV4dCBtaWNyb3Rhc2sgYm91bmRhcnkuXG4gKiBSb2xlOiAgICAgVGhlIGluLXByb2Nlc3MgZHJpdmVyIHRoZSBkb2NzIG5hbWUgKG5vIGRyaXZlciBpcyB0aGUgZGVmYXVsdDpcbiAqICAgICAgICAgICBldmVyeSBkZXRhY2ggY2FsbCBwYXNzZXMgb25lKS4gQ2hlYXBlc3Qgc2NoZWR1bGluZ1xuICogICAgICAgICAgIHByaW1pdGl2ZSBvbiBWOC9KU0M6IG9uZSBgcXVldWVNaWNyb3Rhc2tgIHBlciBiYXRjaFxuICogICAgICAgICAgIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgd29yayBpdGVtcywgc28gdGhlIHBlcmYgYnVkZ2V0XG4gKiAgICAgICAgICAgYW1vcnRpemVzLiBTdWl0YWJsZSBmb3IgYnJvd3NlciBBTkQgbm9kZSBBTkQgZWRnZSBydW50aW1lc1xuICogICAgICAgICAgIChxdWV1ZU1pY3JvdGFzayBpcyB1bml2ZXJzYWwgc2luY2UgMjAxOCkuXG4gKlxuICogTGlmZWN5Y2xlOlxuICpcbiAqICAgc2NoZWR1bGUoY2hpbGQsIGlucHV0LCByZWZJZCkgICAgICAgICAgICDihpAgZHJpdmVyIGVudHJ5XG4gKiAgICAg4pSU4pSAIGNyZWF0ZSBoYW5kbGUgKHF1ZXVlZClcbiAqICAgICDilJTilIAgcmVnaXN0ZXIgaW4gZGV0YWNoUmVnaXN0cnlcbiAqICAgICDilJTilIAgcHVzaCB3b3JrIGl0ZW0gb250byBsb2NhbCBxdWV1ZVxuICogICAgIOKUlOKUgCBpZiBubyBtaWNyb3Rhc2sgc2NoZWR1bGVkIHlldCDihpIgcXVldWVNaWNyb3Rhc2soZmx1c2gpXG4gKiAgICAg4pSU4pSAIHJldHVybiBoYW5kbGUgKHN5bmMg4oCUIHBhc3NpdmUgcmVjb3JkZXIgcnVsZSlcbiAqXG4gKiAgIGZsdXNoKCkgKG1pY3JvdGFzaykgICAgICAgICAgICAgICAgICAgICAgIOKGkCBkZWZlcnJlZFxuICogICAgIOKUlOKUgCBzd2FwIG91dCBxdWV1ZSAoZHJhaW4gcmFjZXMgc2FmZWx5KVxuICogICAgIOKUlOKUgCBmb3IgZWFjaCBpdGVtOiBfbWFya1J1bm5pbmcsIGF3YWl0IHJ1bkNoaWxkLCBfbWFya0RvbmUvX21hcmtGYWlsZWRcbiAqICAgICDilJTilIAgdW5yZWdpc3RlciBoYW5kbGUgZnJvbSBkZXRhY2hSZWdpc3RyeVxuICpcbiAqIFdoeSBtaWNyb3Rhc2sgKGFuZCBub3Qgc2V0SW1tZWRpYXRlIC8gc2V0VGltZW91dCk6XG4gKiAgIC0gTWljcm90YXNrcyBydW4gQkVGT1JFIHJldHVybmluZyB0byB0aGUgZXZlbnQgbG9vcCDigJQgZ3VhcmFudGVlc1xuICogICAgIHRoZSB3b3JrIGZpbmlzaGVzIHdpdGhpbiB0aGUgY3VycmVudCBcInRpY2tcIiBpZiB0aGUgcnVudGltZSBhbGxvd3NcbiAqICAgLSBMb3dlc3QgcG9zc2libGUgZGVmZXJyYWwgY29zdCAofjUwbnMgb24gbW9kZXJuIFY4KVxuICogICAtIFdvcmtzIGluIEVWRVJZIEpTIHJ1bnRpbWUgKGJyb3dzZXIsIG5vZGUsIGRlbm8sIGJ1biwgZWRnZSlcbiAqICAgLSBEb2Vzbid0IHJlcXVpcmUgYW55IHRpbWVyIGluZnJhc3RydWN0dXJlIOKGkiBubyBHQyBwcmVzc3VyZVxuICpcbiAqIFJlLWVudHJhbmN5OlxuICogICAtIElmIGBydW5DaGlsZGAgY2FsbHMgYHNjaGVkdWxlKClgIGZvciBuZXN0ZWQgZGV0YWNoLCB0aGUgbmV3IGl0ZW1cbiAqICAgICBsYW5kcyBvbiB0aGUgU0FNRSBxdWV1ZS4gQmVjYXVzZSBgc2NoZWR1bGVkYCBmbGlwcyBiYWNrIHRvIGZhbHNlXG4gKiAgICAgYXQgdGhlIHN0YXJ0IG9mIGBmbHVzaGAsIHRoZSBuZXcgaXRlbSB0cmlnZ2VycyBhIGZyZXNoIG1pY3JvdGFzay5cbiAqICAgLSBXb3JzdC1jYXNlOiBPKG4pIG1pY3JvdGFza3MgZm9yIG4gbmVzdGVkIGxldmVscy4gQWNjZXB0YWJsZSDigJRcbiAqICAgICByZWFsLXdvcmxkIGRldGFjaCB0cmVlcyBhcmUgc2hhbGxvdy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydCB9IGZyb20gJy4uLy4uL2J1aWxkZXIvdHlwZXMuanMnO1xuaW1wb3J0IHsgYXNJbXBsLCBjcmVhdGVIYW5kbGUgfSBmcm9tICcuLi9oYW5kbGUuanMnO1xuaW1wb3J0IHsgcmVnaXN0ZXIsIHVucmVnaXN0ZXIgfSBmcm9tICcuLi9yZWdpc3RyeS5qcyc7XG5pbXBvcnQgeyB0eXBlIENoaWxkUnVubmVyLCBkZWZhdWx0UnVuQ2hpbGQgfSBmcm9tICcuLi9ydW5DaGlsZC5qcyc7XG5pbXBvcnQgdHlwZSB7IERldGFjaERyaXZlciwgRGV0YWNoSGFuZGxlIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5pbnRlcmZhY2UgV29ya0l0ZW0ge1xuICByZWFkb25seSBjaGlsZDogRmxvd0NoYXJ0O1xuICByZWFkb25seSBpbnB1dDogdW5rbm93bjtcbiAgcmVhZG9ubHkgaGFuZGxlOiBEZXRhY2hIYW5kbGU7XG59XG5cbi8qKlxuICogQnVpbGQgYSBtaWNyb3Rhc2stYmF0Y2ggZHJpdmVyIHdpcmVkIHRvIGEgY3VzdG9tIGNoaWxkIHJ1bm5lci4gTW9zdFxuICogY29uc3VtZXJzIHdhbnQgdGhlIGRlZmF1bHQgc2luZ2xldG9uIGBtaWNyb3Rhc2tCYXRjaERyaXZlcmAgaW5zdGVhZDtcbiAqIHRoaXMgZmFjdG9yeSBleGlzdHMgZm9yIHRlc3RzIGFuZCBmb3IgYWR2YW5jZWQgY29uc3VtZXJzIHdobyB3YW50IHRvXG4gKiBpbmplY3QgdGhlaXIgb3duIHJ1bm5lciAoZS5nLiwgYSBydW5uZXIgdGhhdCB3cmFwcyB0aGUgY2hpbGQgaW4gYVxuICogdHJhY2luZyBjb250ZXh0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1pY3JvdGFza0JhdGNoRHJpdmVyKHJ1bkNoaWxkOiBDaGlsZFJ1bm5lciA9IGRlZmF1bHRSdW5DaGlsZCk6IERldGFjaERyaXZlciB7XG4gIC8vIFBlci1kcml2ZXItaW5zdGFuY2UgcXVldWUgYW5kIGZsdXNoIGd1YXJkLiBDbG9zZWQgb3ZlciBieSBgc2NoZWR1bGVgXG4gIC8vIGFuZCBgZmx1c2hgIHNvIGVhY2ggY2FsbCB0byBgY3JlYXRlTWljcm90YXNrQmF0Y2hEcml2ZXJgIGdldHMgaXRzXG4gIC8vIG93biBpc29sYXRlZCBiYXRjaCAodGVzdCBpc29sYXRpb24sIG11bHRpLXRlbmFudCBzY2VuYXJpb3MpLlxuICBjb25zdCBxdWV1ZTogV29ya0l0ZW1bXSA9IFtdO1xuICBsZXQgc2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZmx1c2goKTogdm9pZCB7XG4gICAgLy8gUmVzZXQgQkVGT1JFIGRyYWluaW5nIHNvIHJlLWVudHJhbnQgc2NoZWR1bGUoKXMgZHVyaW5nIHJ1bkNoaWxkXG4gICAgLy8gcXVldWUgYSBmcmVzaCBtaWNyb3Rhc2sgaW5zdGVhZCBvZiBqb2luaW5nIHRoZSBpbi1mbGlnaHQgZHJhaW4uXG4gICAgc2NoZWR1bGVkID0gZmFsc2U7XG4gICAgY29uc3QgaXRlbXMgPSBxdWV1ZS5zcGxpY2UoMCk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAvLyBFYWNoIGl0ZW0gcnVucyBjb25jdXJyZW50bHkg4oCUIG5vIGF3YWl0cyBoZXJlLCBzbyB0aGUgb3V0ZXJcbiAgICAgIC8vIGZvci1sb29wIGNvbXBsZXRlcyB3aXRoaW4gdGhpcyBtaWNyb3Rhc2suIEVycm9ycyBpbnNpZGVcbiAgICAgIC8vIGBleGVjdXRlT25lYCBhcmUgcm91dGVkIHRvIHRoZSBoYW5kbGUsIG5vdCB0aHJvd24uIFRoZSBwcm9taXNlXG4gICAgICAvLyBpcyBpbnRlbnRpb25hbGx5IG5vdCBhd2FpdGVkOyBpZ25vcmUtcHJvbWlzZS1yZXR1cm5lZCB2aWEgdGhlXG4gICAgICAvLyBleHBsaWNpdCBuby1vcCAudGhlbigpIHBhdHRlcm4gdGhhdCB0aGUgcHJvamVjdCdzIGxpbnQgY29uZmlnXG4gICAgICAvLyBhY2NlcHRzICh2cyBgdm9pZGAsIHdoaWNoIGBuby12b2lkYCByZWplY3RzKS5cbiAgICAgIGV4ZWN1dGVPbmUoaXRlbSwgcnVuQ2hpbGQpLnRoZW4odW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ21pY3JvdGFzay1iYXRjaCcsXG4gICAgY2FwYWJpbGl0aWVzOiB7IGJyb3dzZXJTYWZlOiB0cnVlLCBub2RlU2FmZTogdHJ1ZSwgZWRnZVNhZmU6IHRydWUgfSxcbiAgICBzY2hlZHVsZShjaGlsZDogRmxvd0NoYXJ0LCBpbnB1dDogdW5rbm93biwgcmVmSWQ6IHN0cmluZyk6IERldGFjaEhhbmRsZSB7XG4gICAgICBjb25zdCBoYW5kbGUgPSBjcmVhdGVIYW5kbGUocmVmSWQpO1xuICAgICAgcmVnaXN0ZXIoaGFuZGxlKTtcbiAgICAgIHF1ZXVlLnB1c2goeyBjaGlsZCwgaW5wdXQsIGhhbmRsZSB9KTtcbiAgICAgIGlmICghc2NoZWR1bGVkKSB7XG4gICAgICAgIHNjaGVkdWxlZCA9IHRydWU7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKGZsdXNoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYW5kbGU7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBQZXItaXRlbSBleGVjdXRpb24uIE1hcmtzIHRoZSBoYW5kbGUgcnVubmluZywgYXdhaXRzIHRoZSBydW5uZXIsXG4gKiByb3V0ZXMgb3V0Y29tZSB0byB0aGUgaGFuZGxlLCBjbGVhbnMgdXAgdGhlIHJlZ2lzdHJ5IGVudHJ5LiBOZXZlclxuICogdGhyb3dzIOKAlCBlcnJvcnMgbGFuZCBvbiB0aGUgaGFuZGxlIChwYXNzaXZlIHJlY29yZGVyIHJ1bGUpLlxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlT25lKGl0ZW06IFdvcmtJdGVtLCBydW5DaGlsZDogQ2hpbGRSdW5uZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaW1wbCA9IGFzSW1wbChpdGVtLmhhbmRsZSk7XG4gIGltcGwuX21hcmtSdW5uaW5nKCk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuQ2hpbGQoaXRlbS5jaGlsZCwgaXRlbS5pbnB1dCk7XG4gICAgaW1wbC5fbWFya0RvbmUocmVzdWx0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaW1wbC5fbWFya0ZhaWxlZChlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyKSkpO1xuICB9IGZpbmFsbHkge1xuICAgIHVucmVnaXN0ZXIoaW1wbC5pZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkeS1tYWRlIHNpbmdsZXRvbi4gTW9zdCBjb25zdW1lcnMgaW1wb3J0IHRoaXMgYW5kIHBhc3MgaXQgYXMgdGhlIGZpcnN0XG4gKiBhcmd1bWVudDogYGV4ZWN1dG9yLmRldGFjaEFuZEpvaW5MYXRlcihtaWNyb3Rhc2tCYXRjaERyaXZlciwgY2hpbGQsIGlucHV0KWAuXG4gKiBJdCBpcyBub3QgYW4gaW1wbGljaXQgZGVmYXVsdCDigJQgbm90aGluZyBwaWNrcyBhIGRyaXZlciBmb3IgeW91LlxuICovXG5leHBvcnQgY29uc3QgbWljcm90YXNrQmF0Y2hEcml2ZXI6IERldGFjaERyaXZlciA9IGNyZWF0ZU1pY3JvdGFza0JhdGNoRHJpdmVyKCk7XG4iXX0=