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.
- package/AGENTS.md +670 -194
- package/dist/esm/lib/capture/freeze.d.ts +47 -0
- package/dist/esm/lib/capture/freeze.js +60 -0
- package/dist/esm/lib/capture/index.d.ts +1 -0
- package/dist/esm/lib/capture/index.js +2 -1
- package/dist/esm/lib/detach/drivers/immediate.d.ts +25 -24
- package/dist/esm/lib/detach/drivers/immediate.js +26 -25
- package/dist/esm/lib/detach/drivers/microtaskBatch.d.ts +5 -4
- package/dist/esm/lib/detach/drivers/microtaskBatch.js +6 -5
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +27 -7
- package/dist/esm/lib/engine/handlers/SubflowInputMapper.d.ts +4 -1
- package/dist/esm/lib/engine/handlers/SubflowInputMapper.js +15 -2
- package/dist/esm/lib/memory/EventLog.d.ts +28 -3
- package/dist/esm/lib/memory/EventLog.js +31 -4
- package/dist/esm/lib/memory/StageContext.d.ts +20 -0
- package/dist/esm/lib/memory/StageContext.js +36 -10
- package/dist/esm/lib/memory/TransactionBuffer.d.ts +2 -2
- package/dist/esm/lib/memory/TransactionBuffer.js +6 -4
- package/dist/esm/lib/memory/backtrack.d.ts +24 -0
- package/dist/esm/lib/memory/backtrack.js +52 -41
- package/dist/esm/lib/memory/commitLogUtils.d.ts +129 -38
- package/dist/esm/lib/memory/commitLogUtils.js +252 -59
- package/dist/esm/lib/memory/deltaEncoding.d.ts +1 -1
- package/dist/esm/lib/memory/deltaEncoding.js +2 -2
- package/dist/esm/lib/memory/honesty.d.ts +5 -1
- package/dist/esm/lib/memory/honesty.js +11 -6
- package/dist/esm/lib/memory/index.d.ts +2 -2
- package/dist/esm/lib/memory/index.js +3 -3
- package/dist/esm/lib/memory/keyPaths.d.ts +125 -0
- package/dist/esm/lib/memory/keyPaths.js +227 -0
- package/dist/esm/lib/memory/logModel.d.ts +76 -0
- package/dist/esm/lib/memory/logModel.js +357 -0
- package/dist/esm/lib/memory/placeholders.d.ts +3 -3
- package/dist/esm/lib/memory/placeholders.js +4 -4
- package/dist/esm/lib/memory/redaction.d.ts +34 -1
- package/dist/esm/lib/memory/redaction.js +55 -4
- package/dist/esm/lib/memory/utils.d.ts +2 -6
- package/dist/esm/lib/memory/utils.js +4 -21
- package/dist/esm/lib/memory/verbs.d.ts +65 -22
- package/dist/esm/lib/memory/verbs.js +64 -23
- package/dist/esm/lib/runner/ExecutionRuntime.js +5 -3
- package/dist/esm/lib/runner/FlowChartExecutor.js +5 -5
- package/dist/esm/lib/scope/protection/readonlyInput.d.ts +2 -6
- package/dist/esm/lib/scope/protection/readonlyInput.js +4 -18
- package/dist/esm/lib/slice/elementProvenance.d.ts +4 -1
- package/dist/esm/lib/slice/elementProvenance.js +33 -15
- package/dist/esm/lib/slice/forwardSliceForKey.d.ts +4 -0
- package/dist/esm/lib/slice/forwardSliceForKey.js +32 -9
- package/dist/esm/lib/slice/keyIndex.d.ts +50 -8
- package/dist/esm/lib/slice/keyIndex.js +97 -16
- package/dist/esm/lib/slice/keyTimeline.js +11 -6
- package/dist/esm/lib/slice/serialize.js +8 -2
- package/dist/esm/lib/slice/sliceForKey.js +22 -6
- package/dist/esm/lib/slice/types.d.ts +53 -7
- package/dist/esm/lib/slice/types.js +1 -1
- package/dist/esm/lib/time-travel/commitStops.js +46 -8
- package/dist/esm/lib/time-travel/stateAt.js +4 -14
- package/dist/esm/lib/time-travel/timeTravel.js +2 -2
- package/dist/esm/lib/time-travel/types.d.ts +4 -3
- package/dist/esm/lib/time-travel/types.js +1 -1
- package/dist/esm/trace.d.ts +2 -1
- package/dist/esm/trace.js +2 -6
- package/dist/lib/capture/freeze.js +64 -0
- package/dist/lib/capture/index.js +4 -2
- package/dist/lib/detach/drivers/immediate.js +26 -25
- package/dist/lib/detach/drivers/microtaskBatch.js +6 -5
- package/dist/lib/engine/handlers/SubflowExecutor.js +27 -7
- package/dist/lib/engine/handlers/SubflowInputMapper.js +15 -2
- package/dist/lib/memory/EventLog.js +31 -4
- package/dist/lib/memory/StageContext.js +35 -9
- package/dist/lib/memory/TransactionBuffer.js +6 -4
- package/dist/lib/memory/backtrack.js +52 -41
- package/dist/lib/memory/commitLogUtils.js +257 -61
- package/dist/lib/memory/deltaEncoding.js +2 -2
- package/dist/lib/memory/honesty.js +11 -6
- package/dist/lib/memory/index.js +3 -3
- package/dist/lib/memory/keyPaths.js +243 -0
- package/dist/lib/memory/logModel.js +365 -0
- package/dist/lib/memory/placeholders.js +4 -4
- package/dist/lib/memory/redaction.js +56 -3
- package/dist/lib/memory/utils.js +8 -26
- package/dist/lib/memory/verbs.js +64 -23
- package/dist/lib/runner/ExecutionRuntime.js +6 -4
- package/dist/lib/runner/FlowChartExecutor.js +6 -6
- package/dist/lib/scope/protection/readonlyInput.js +6 -21
- package/dist/lib/slice/elementProvenance.js +32 -14
- package/dist/lib/slice/forwardSliceForKey.js +31 -8
- package/dist/lib/slice/keyIndex.js +103 -17
- package/dist/lib/slice/keyTimeline.js +10 -5
- package/dist/lib/slice/serialize.js +8 -2
- package/dist/lib/slice/sliceForKey.js +21 -5
- package/dist/lib/slice/types.js +1 -1
- package/dist/lib/time-travel/commitStops.js +46 -8
- package/dist/lib/time-travel/stateAt.js +4 -14
- package/dist/lib/time-travel/timeTravel.js +2 -2
- package/dist/lib/time-travel/types.js +1 -1
- package/dist/trace.js +5 -7
- package/dist/types/lib/capture/freeze.d.ts +47 -0
- package/dist/types/lib/capture/index.d.ts +1 -0
- package/dist/types/lib/detach/drivers/immediate.d.ts +25 -24
- package/dist/types/lib/detach/drivers/microtaskBatch.d.ts +5 -4
- package/dist/types/lib/engine/handlers/SubflowInputMapper.d.ts +4 -1
- package/dist/types/lib/memory/EventLog.d.ts +28 -3
- package/dist/types/lib/memory/StageContext.d.ts +20 -0
- package/dist/types/lib/memory/TransactionBuffer.d.ts +2 -2
- package/dist/types/lib/memory/backtrack.d.ts +24 -0
- package/dist/types/lib/memory/commitLogUtils.d.ts +129 -38
- package/dist/types/lib/memory/deltaEncoding.d.ts +1 -1
- package/dist/types/lib/memory/honesty.d.ts +5 -1
- package/dist/types/lib/memory/index.d.ts +2 -2
- package/dist/types/lib/memory/keyPaths.d.ts +125 -0
- package/dist/types/lib/memory/logModel.d.ts +76 -0
- package/dist/types/lib/memory/placeholders.d.ts +3 -3
- package/dist/types/lib/memory/redaction.d.ts +34 -1
- package/dist/types/lib/memory/utils.d.ts +2 -6
- package/dist/types/lib/memory/verbs.d.ts +65 -22
- package/dist/types/lib/scope/protection/readonlyInput.d.ts +2 -6
- package/dist/types/lib/slice/elementProvenance.d.ts +4 -1
- package/dist/types/lib/slice/forwardSliceForKey.d.ts +4 -0
- package/dist/types/lib/slice/keyIndex.d.ts +50 -8
- package/dist/types/lib/slice/types.d.ts +53 -7
- package/dist/types/lib/time-travel/types.d.ts +4 -3
- package/dist/types/trace.d.ts +2 -1
- 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,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEJBQTBCO0FBQzFCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBa0IsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3JELE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsc0JBQXNCLEdBQ3ZCLE1BQU0sZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBjYXB0dXJlLyDigJQgU2hhcmVkIHZhbHVlLWNhcHR1cmUgLyByZXRlbnRpb24gcHJpbWl0aXZlcyAoemVybyBkZXBzLCBsZWFmXG4gKiBtb2R1bGUg4oCUIGBtZW1vcnkvYCBpbXBvcnRzIGl0LCBuZXZlciB0aGUgcmV2ZXJzZSkuXG4gKlxuICogT25lIGhvbWUgZm9yIFwid2hhdCBkbyB3ZSBrZWVwIGFib3V0IGEgdHJhY2tlZCBvcGVyYXRpb24ncyB2YWx1ZT9cIjpcbiAqICAgLSBgUmV0ZW50aW9uUG9saWN5YCDigJQgdGhlIGAnZnVsbCcgfCAnc3VtbWFyeScgfCAnb2ZmJ2AgZmFtaWx5IGJlaGluZCB0aGVcbiAqICAgICAjMTQgYHJlYWRUcmFja2luZ2AgYW5kICMxM2MtQSBgd3JpdGVUcmFja2luZ2AgZGlhbHMuXG4gKiAgIC0gYHN1bW1hcml6ZVJlYWRWYWx1ZWAgLyBgc3VtbWFyaXplV3JpdGVWYWx1ZWAg4oCUIHRoZSBwYXJhbWV0ZXJpemVkXG4gKiAgICAgc3VtbWFyeS1tYXJrZXIgYnVpbGRlcnMgc2hhcmluZyBvbmUgY2xhc3NpZmljYXRpb24gcGF0aC5cbiAqICAgLSBgc3VtbWFyaXplVmFsdWVgIOKAlCB0aGUgaHVtYW4tcmVhZGFibGUgbmFycmF0aXZlIG9uZS1saW5lci5cbiAqICAgLSBgaGFzQ2lyY3VsYXJSZWZlcmVuY2VgIOKAlCB0aGUgZGV2LW1vZGUgY3ljbGUgcHJvYmUgKGEgbGVhZikuXG4gKiAgIC0gYGludm9rZVJlY29yZGVySG9va2Ag4oCUIHRoZSBvbmUgXCJsb29rIHVwIHRoZSBob29rLCBiaW5kIGB0aGlzYCwgY2FsbCBpdFwiXG4gKiAgICAgcHJpbWl0aXZlIGJvdGggcmVjb3JkZXIgZGVsaXZlcnkgdGllcnMgc2hhcmUgKGEgbGVhZikuXG4gKlxuICogUkZDLTAwMSAoZGVmZXJyZWQgb2JzZXJ2ZXIgZGVsaXZlcnkpIGJ1aWxkcyBpdHMgY2FwdHVyZSB0aWVyIG9uIHRoaXNcbiAqIG1vZHVsZSDigJQgc2VlIHRoZSBtYXBwaW5nIG5vdGVzIGluIGBwb2xpY2llcy50c2AuXG4gKi9cblxuZXhwb3J0IHsgaGFzQ2lyY3VsYXJSZWZlcmVuY2UgfSBmcm9tICcuL2NpcmN1bGFyLmpzJztcbmV4cG9ydCB7IHR5cGUgQXJyYXlXYWxrLCBkZWVwRnJlZXplIH0gZnJvbSAnLi9mcmVlemUuanMnO1xuZXhwb3J0IHsgaW52b2tlUmVjb3JkZXJIb29rIH0gZnJvbSAnLi9pbnZva2VIb29rLmpzJztcbmV4cG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5IH0gZnJvbSAnLi9wb2xpY2llcy5qcyc7XG5leHBvcnQgdHlwZSB7IFJlYWRTdW1tYXJ5TWFya2VyLCBTdW1tYXJ5VmFsdWVUeXBlLCBXcml0ZVN1bW1hcnlNYXJrZXIgfSBmcm9tICcuL3N1bW1hcml6ZS5qcyc7XG5leHBvcnQge1xuICBSRUFEX1BSRVZJRVdfTEVOR1RILFxuICBzdW1tYXJpemVSZWFkVmFsdWUsXG4gIHN1bW1hcml6ZVZhbHVlLFxuICBzdW1tYXJpemVXcml0ZVZhbHVlLFxuICBTVU1NQVJZX1BSRVZJRVdfTEVOR1RILFxufSBmcm9tICcuL3N1bW1hcml6ZS5qcyc7XG4iXX0=
|
|
@@ -1,32 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* detach/drivers/immediate.ts —
|
|
2
|
+
* detach/drivers/immediate.ts — Start detached work at once: no batch, no timer.
|
|
3
3
|
*
|
|
4
|
-
* Pattern:
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
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
|
|
13
|
-
* beats
|
|
14
|
-
* - very small detach payloads where
|
|
15
|
-
*
|
|
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
|
-
*
|
|
19
|
-
* -
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
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
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
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 —
|
|
2
|
+
* detach/drivers/immediate.ts — Start detached work at once: no batch, no timer.
|
|
3
3
|
*
|
|
4
|
-
* Pattern:
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
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
|
|
13
|
-
* beats
|
|
14
|
-
* - very small detach payloads where
|
|
15
|
-
*
|
|
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
|
-
*
|
|
19
|
-
* -
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
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
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
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,
|
|
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:
|
|
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
|
-
*
|
|
54
|
-
* `executor.detachAndJoinLater(child, input
|
|
55
|
-
*
|
|
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:
|
|
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
|
-
*
|
|
109
|
-
* `executor.detachAndJoinLater(child, input
|
|
110
|
-
*
|
|
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,
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm90YXNrQmF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RldGFjaC9kcml2ZXJzL21pY3JvdGFza0JhdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlDRztBQUdILE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFvQixlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVNuRTs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsV0FBd0IsZUFBZTtJQUNoRix1RUFBdUU7SUFDdkUsb0VBQW9FO0lBQ3BFLCtEQUErRDtJQUMvRCxNQUFNLEtBQUssR0FBZSxFQUFFLENBQUM7SUFDN0IsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRXRCLFNBQVMsS0FBSztRQUNaLGtFQUFrRTtRQUNsRSxrRUFBa0U7UUFDbEUsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsNkRBQTZEO1lBQzdELDBEQUEwRDtZQUMxRCxpRUFBaUU7WUFDakUsZ0VBQWdFO1lBQ2hFLGdFQUFnRTtZQUNoRSxnREFBZ0Q7WUFDaEQsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsWUFBWSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7UUFDbkUsUUFBUSxDQUFDLEtBQWdCLEVBQUUsS0FBYyxFQUFFLEtBQWE7WUFDdEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25DLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDZixTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUNqQixjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsVUFBVSxDQUFDLElBQWMsRUFBRSxRQUFxQjtJQUM3RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNwQixJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztZQUFTLENBQUM7UUFDVCxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFpQiwwQkFBMEIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkZXRhY2gvZHJpdmVycy9taWNyb3Rhc2tCYXRjaC50cyDigJQgQmF0Y2ggZGV0YWNoZWQgd29yayBpbnRvIE9ORSBtaWNyb3Rhc2suXG4gKlxuICogUGF0dGVybjogIFByb2R1Y2VyLWNvbnN1bWVyIHdpdGggYmF0Y2hlZCBmbHVzaC4gU2FtZSBzaGFwZSBhc1xuICogICAgICAgICAgIGFnZW50Zm9vdHByaW50J3MgYEV2ZW50RGlzcGF0Y2hlcmAgZmx1c2ggcXVldWUgYW5kIHRoZSBSZWFjdFxuICogICAgICAgICAgIHJlY29uY2lsZXIncyBtaWNyb3Rhc2sgc2NoZWR1bGluZyDigJQgYWNjdW11bGF0ZSBkdXJpbmcgdGhlXG4gKiAgICAgICAgICAgY3VycmVudCBzeW5jIHNsaWNlLCBkcmFpbiBhdCB0aGUgbmV4dCBtaWNyb3Rhc2sgYm91bmRhcnkuXG4gKiBSb2xlOiAgICAgVGhlIGluLXByb2Nlc3MgZHJpdmVyIHRoZSBkb2NzIG5hbWUgKG5vIGRyaXZlciBpcyB0aGUgZGVmYXVsdDpcbiAqICAgICAgICAgICBldmVyeSBkZXRhY2ggY2FsbCBwYXNzZXMgb25lKS4gQ2hlYXBlc3Qgc2NoZWR1bGluZ1xuICogICAgICAgICAgIHByaW1pdGl2ZSBvbiBWOC9KU0M6IG9uZSBgcXVldWVNaWNyb3Rhc2tgIHBlciBiYXRjaFxuICogICAgICAgICAgIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgd29yayBpdGVtcywgc28gdGhlIHBlcmYgYnVkZ2V0XG4gKiAgICAgICAgICAgYW1vcnRpemVzLiBTdWl0YWJsZSBmb3IgYnJvd3NlciBBTkQgbm9kZSBBTkQgZWRnZSBydW50aW1lc1xuICogICAgICAgICAgIChxdWV1ZU1pY3JvdGFzayBpcyB1bml2ZXJzYWwgc2luY2UgMjAxOCkuXG4gKlxuICogTGlmZWN5Y2xlOlxuICpcbiAqICAgc2NoZWR1bGUoY2hpbGQsIGlucHV0LCByZWZJZCkgICAgICAgICAgICDihpAgZHJpdmVyIGVudHJ5XG4gKiAgICAg4pSU4pSAIGNyZWF0ZSBoYW5kbGUgKHF1ZXVlZClcbiAqICAgICDilJTilIAgcmVnaXN0ZXIgaW4gZGV0YWNoUmVnaXN0cnlcbiAqICAgICDilJTilIAgcHVzaCB3b3JrIGl0ZW0gb250byBsb2NhbCBxdWV1ZVxuICogICAgIOKUlOKUgCBpZiBubyBtaWNyb3Rhc2sgc2NoZWR1bGVkIHlldCDihpIgcXVldWVNaWNyb3Rhc2soZmx1c2gpXG4gKiAgICAg4pSU4pSAIHJldHVybiBoYW5kbGUgKHN5bmMg4oCUIHBhc3NpdmUgcmVjb3JkZXIgcnVsZSlcbiAqXG4gKiAgIGZsdXNoKCkgKG1pY3JvdGFzaykgICAgICAgICAgICAgICAgICAgICAgIOKGkCBkZWZlcnJlZFxuICogICAgIOKUlOKUgCBzd2FwIG91dCBxdWV1ZSAoZHJhaW4gcmFjZXMgc2FmZWx5KVxuICogICAgIOKUlOKUgCBmb3IgZWFjaCBpdGVtOiBfbWFya1J1bm5pbmcsIGF3YWl0IHJ1bkNoaWxkLCBfbWFya0RvbmUvX21hcmtGYWlsZWRcbiAqICAgICDilJTilIAgdW5yZWdpc3RlciBoYW5kbGUgZnJvbSBkZXRhY2hSZWdpc3RyeVxuICpcbiAqIFdoeSBtaWNyb3Rhc2sgKGFuZCBub3Qgc2V0SW1tZWRpYXRlIC8gc2V0VGltZW91dCk6XG4gKiAgIC0gTWljcm90YXNrcyBydW4gQkVGT1JFIHJldHVybmluZyB0byB0aGUgZXZlbnQgbG9vcCDigJQgZ3VhcmFudGVlc1xuICogICAgIHRoZSB3b3JrIGZpbmlzaGVzIHdpdGhpbiB0aGUgY3VycmVudCBcInRpY2tcIiBpZiB0aGUgcnVudGltZSBhbGxvd3NcbiAqICAgLSBMb3dlc3QgcG9zc2libGUgZGVmZXJyYWwgY29zdCAofjUwbnMgb24gbW9kZXJuIFY4KVxuICogICAtIFdvcmtzIGluIEVWRVJZIEpTIHJ1bnRpbWUgKGJyb3dzZXIsIG5vZGUsIGRlbm8sIGJ1biwgZWRnZSlcbiAqICAgLSBEb2Vzbid0IHJlcXVpcmUgYW55IHRpbWVyIGluZnJhc3RydWN0dXJlIOKGkiBubyBHQyBwcmVzc3VyZVxuICpcbiAqIFJlLWVudHJhbmN5OlxuICogICAtIElmIGBydW5DaGlsZGAgY2FsbHMgYHNjaGVkdWxlKClgIGZvciBuZXN0ZWQgZGV0YWNoLCB0aGUgbmV3IGl0ZW1cbiAqICAgICBsYW5kcyBvbiB0aGUgU0FNRSBxdWV1ZS4gQmVjYXVzZSBgc2NoZWR1bGVkYCBmbGlwcyBiYWNrIHRvIGZhbHNlXG4gKiAgICAgYXQgdGhlIHN0YXJ0IG9mIGBmbHVzaGAsIHRoZSBuZXcgaXRlbSB0cmlnZ2VycyBhIGZyZXNoIG1pY3JvdGFzay5cbiAqICAgLSBXb3JzdC1jYXNlOiBPKG4pIG1pY3JvdGFza3MgZm9yIG4gbmVzdGVkIGxldmVscy4gQWNjZXB0YWJsZSDigJRcbiAqICAgICByZWFsLXdvcmxkIGRldGFjaCB0cmVlcyBhcmUgc2hhbGxvdy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydCB9IGZyb20gJy4uLy4uL2J1aWxkZXIvdHlwZXMuanMnO1xuaW1wb3J0IHsgYXNJbXBsLCBjcmVhdGVIYW5kbGUgfSBmcm9tICcuLi9oYW5kbGUuanMnO1xuaW1wb3J0IHsgcmVnaXN0ZXIsIHVucmVnaXN0ZXIgfSBmcm9tICcuLi9yZWdpc3RyeS5qcyc7XG5pbXBvcnQgeyB0eXBlIENoaWxkUnVubmVyLCBkZWZhdWx0UnVuQ2hpbGQgfSBmcm9tICcuLi9ydW5DaGlsZC5qcyc7XG5pbXBvcnQgdHlwZSB7IERldGFjaERyaXZlciwgRGV0YWNoSGFuZGxlIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5pbnRlcmZhY2UgV29ya0l0ZW0ge1xuICByZWFkb25seSBjaGlsZDogRmxvd0NoYXJ0O1xuICByZWFkb25seSBpbnB1dDogdW5rbm93bjtcbiAgcmVhZG9ubHkgaGFuZGxlOiBEZXRhY2hIYW5kbGU7XG59XG5cbi8qKlxuICogQnVpbGQgYSBtaWNyb3Rhc2stYmF0Y2ggZHJpdmVyIHdpcmVkIHRvIGEgY3VzdG9tIGNoaWxkIHJ1bm5lci4gTW9zdFxuICogY29uc3VtZXJzIHdhbnQgdGhlIGRlZmF1bHQgc2luZ2xldG9uIGBtaWNyb3Rhc2tCYXRjaERyaXZlcmAgaW5zdGVhZDtcbiAqIHRoaXMgZmFjdG9yeSBleGlzdHMgZm9yIHRlc3RzIGFuZCBmb3IgYWR2YW5jZWQgY29uc3VtZXJzIHdobyB3YW50IHRvXG4gKiBpbmplY3QgdGhlaXIgb3duIHJ1bm5lciAoZS5nLiwgYSBydW5uZXIgdGhhdCB3cmFwcyB0aGUgY2hpbGQgaW4gYVxuICogdHJhY2luZyBjb250ZXh0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1pY3JvdGFza0JhdGNoRHJpdmVyKHJ1bkNoaWxkOiBDaGlsZFJ1bm5lciA9IGRlZmF1bHRSdW5DaGlsZCk6IERldGFjaERyaXZlciB7XG4gIC8vIFBlci1kcml2ZXItaW5zdGFuY2UgcXVldWUgYW5kIGZsdXNoIGd1YXJkLiBDbG9zZWQgb3ZlciBieSBgc2NoZWR1bGVgXG4gIC8vIGFuZCBgZmx1c2hgIHNvIGVhY2ggY2FsbCB0byBgY3JlYXRlTWljcm90YXNrQmF0Y2hEcml2ZXJgIGdldHMgaXRzXG4gIC8vIG93biBpc29sYXRlZCBiYXRjaCAodGVzdCBpc29sYXRpb24sIG11bHRpLXRlbmFudCBzY2VuYXJpb3MpLlxuICBjb25zdCBxdWV1ZTogV29ya0l0ZW1bXSA9IFtdO1xuICBsZXQgc2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZmx1c2goKTogdm9pZCB7XG4gICAgLy8gUmVzZXQgQkVGT1JFIGRyYWluaW5nIHNvIHJlLWVudHJhbnQgc2NoZWR1bGUoKXMgZHVyaW5nIHJ1bkNoaWxkXG4gICAgLy8gcXVldWUgYSBmcmVzaCBtaWNyb3Rhc2sgaW5zdGVhZCBvZiBqb2luaW5nIHRoZSBpbi1mbGlnaHQgZHJhaW4uXG4gICAgc2NoZWR1bGVkID0gZmFsc2U7XG4gICAgY29uc3QgaXRlbXMgPSBxdWV1ZS5zcGxpY2UoMCk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAvLyBFYWNoIGl0ZW0gcnVucyBjb25jdXJyZW50bHkg4oCUIG5vIGF3YWl0cyBoZXJlLCBzbyB0aGUgb3V0ZXJcbiAgICAgIC8vIGZvci1sb29wIGNvbXBsZXRlcyB3aXRoaW4gdGhpcyBtaWNyb3Rhc2suIEVycm9ycyBpbnNpZGVcbiAgICAgIC8vIGBleGVjdXRlT25lYCBhcmUgcm91dGVkIHRvIHRoZSBoYW5kbGUsIG5vdCB0aHJvd24uIFRoZSBwcm9taXNlXG4gICAgICAvLyBpcyBpbnRlbnRpb25hbGx5IG5vdCBhd2FpdGVkOyBpZ25vcmUtcHJvbWlzZS1yZXR1cm5lZCB2aWEgdGhlXG4gICAgICAvLyBleHBsaWNpdCBuby1vcCAudGhlbigpIHBhdHRlcm4gdGhhdCB0aGUgcHJvamVjdCdzIGxpbnQgY29uZmlnXG4gICAgICAvLyBhY2NlcHRzICh2cyBgdm9pZGAsIHdoaWNoIGBuby12b2lkYCByZWplY3RzKS5cbiAgICAgIGV4ZWN1dGVPbmUoaXRlbSwgcnVuQ2hpbGQpLnRoZW4odW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ21pY3JvdGFzay1iYXRjaCcsXG4gICAgY2FwYWJpbGl0aWVzOiB7IGJyb3dzZXJTYWZlOiB0cnVlLCBub2RlU2FmZTogdHJ1ZSwgZWRnZVNhZmU6IHRydWUgfSxcbiAgICBzY2hlZHVsZShjaGlsZDogRmxvd0NoYXJ0LCBpbnB1dDogdW5rbm93biwgcmVmSWQ6IHN0cmluZyk6IERldGFjaEhhbmRsZSB7XG4gICAgICBjb25zdCBoYW5kbGUgPSBjcmVhdGVIYW5kbGUocmVmSWQpO1xuICAgICAgcmVnaXN0ZXIoaGFuZGxlKTtcbiAgICAgIHF1ZXVlLnB1c2goeyBjaGlsZCwgaW5wdXQsIGhhbmRsZSB9KTtcbiAgICAgIGlmICghc2NoZWR1bGVkKSB7XG4gICAgICAgIHNjaGVkdWxlZCA9IHRydWU7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKGZsdXNoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYW5kbGU7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBQZXItaXRlbSBleGVjdXRpb24uIE1hcmtzIHRoZSBoYW5kbGUgcnVubmluZywgYXdhaXRzIHRoZSBydW5uZXIsXG4gKiByb3V0ZXMgb3V0Y29tZSB0byB0aGUgaGFuZGxlLCBjbGVhbnMgdXAgdGhlIHJlZ2lzdHJ5IGVudHJ5LiBOZXZlclxuICogdGhyb3dzIOKAlCBlcnJvcnMgbGFuZCBvbiB0aGUgaGFuZGxlIChwYXNzaXZlIHJlY29yZGVyIHJ1bGUpLlxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlT25lKGl0ZW06IFdvcmtJdGVtLCBydW5DaGlsZDogQ2hpbGRSdW5uZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaW1wbCA9IGFzSW1wbChpdGVtLmhhbmRsZSk7XG4gIGltcGwuX21hcmtSdW5uaW5nKCk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuQ2hpbGQoaXRlbS5jaGlsZCwgaXRlbS5pbnB1dCk7XG4gICAgaW1wbC5fbWFya0RvbmUocmVzdWx0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaW1wbC5fbWFya0ZhaWxlZChlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyKSkpO1xuICB9IGZpbmFsbHkge1xuICAgIHVucmVnaXN0ZXIoaW1wbC5pZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkeS1tYWRlIHNpbmdsZXRvbi4gTW9zdCBjb25zdW1lcnMgaW1wb3J0IHRoaXMgYW5kIHBhc3MgaXQgYXMgdGhlIGZpcnN0XG4gKiBhcmd1bWVudDogYGV4ZWN1dG9yLmRldGFjaEFuZEpvaW5MYXRlcihtaWNyb3Rhc2tCYXRjaERyaXZlciwgY2hpbGQsIGlucHV0KWAuXG4gKiBJdCBpcyBub3QgYW4gaW1wbGljaXQgZGVmYXVsdCDigJQgbm90aGluZyBwaWNrcyBhIGRyaXZlciBmb3IgeW91LlxuICovXG5leHBvcnQgY29uc3QgbWljcm90YXNrQmF0Y2hEcml2ZXI6IERldGFjaERyaXZlciA9IGNyZWF0ZU1pY3JvdGFza0JhdGNoRHJpdmVyKCk7XG4iXX0=
|