footprintjs 9.44.1 → 9.44.3

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 (48) hide show
  1. package/CLAUDE.md +6 -5
  2. package/dist/esm/lib/capture/freeze.d.ts +51 -7
  3. package/dist/esm/lib/capture/freeze.js +289 -24
  4. package/dist/esm/lib/capture/valueKinds.d.ts +57 -0
  5. package/dist/esm/lib/capture/valueKinds.js +142 -0
  6. package/dist/esm/lib/memory/EventLog.d.ts +25 -7
  7. package/dist/esm/lib/memory/EventLog.js +31 -11
  8. package/dist/esm/lib/memory/StageContext.d.ts +4 -33
  9. package/dist/esm/lib/memory/StageContext.js +18 -81
  10. package/dist/esm/lib/memory/TransactionBuffer.js +2 -2
  11. package/dist/esm/lib/memory/admission.js +4 -3
  12. package/dist/esm/lib/memory/borrowedMutation.js +2 -2
  13. package/dist/esm/lib/memory/equality.d.ts +55 -19
  14. package/dist/esm/lib/memory/equality.js +154 -51
  15. package/dist/esm/lib/memory/logModel.js +11 -4
  16. package/dist/esm/lib/memory/recordCommit.d.ts +43 -0
  17. package/dist/esm/lib/memory/recordCommit.js +59 -0
  18. package/dist/esm/lib/memory/redaction.d.ts +1 -1
  19. package/dist/esm/lib/memory/redaction.js +2 -2
  20. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +6 -3
  21. package/dist/esm/lib/runner/ExecutionRuntime.js +17 -12
  22. package/dist/esm/lib/runner/snapshot.js +17 -3
  23. package/dist/esm/lib/slice/elementProvenance.js +2 -2
  24. package/dist/esm/lib/time-travel/chain.js +28 -26
  25. package/dist/lib/capture/freeze.js +292 -25
  26. package/dist/lib/capture/valueKinds.js +146 -0
  27. package/dist/lib/memory/EventLog.js +30 -10
  28. package/dist/lib/memory/StageContext.js +17 -80
  29. package/dist/lib/memory/TransactionBuffer.js +2 -2
  30. package/dist/lib/memory/admission.js +4 -3
  31. package/dist/lib/memory/borrowedMutation.js +2 -2
  32. package/dist/lib/memory/equality.js +154 -51
  33. package/dist/lib/memory/logModel.js +11 -4
  34. package/dist/lib/memory/recordCommit.js +63 -0
  35. package/dist/lib/memory/redaction.js +2 -2
  36. package/dist/lib/runner/ExecutionRuntime.js +16 -11
  37. package/dist/lib/runner/snapshot.js +16 -2
  38. package/dist/lib/slice/elementProvenance.js +2 -2
  39. package/dist/lib/time-travel/chain.js +27 -25
  40. package/dist/types/lib/capture/freeze.d.ts +51 -7
  41. package/dist/types/lib/capture/valueKinds.d.ts +57 -0
  42. package/dist/types/lib/memory/EventLog.d.ts +25 -7
  43. package/dist/types/lib/memory/StageContext.d.ts +4 -33
  44. package/dist/types/lib/memory/equality.d.ts +55 -19
  45. package/dist/types/lib/memory/recordCommit.d.ts +43 -0
  46. package/dist/types/lib/memory/redaction.d.ts +1 -1
  47. package/dist/types/lib/runner/ExecutionRuntime.d.ts +6 -3
  48. package/package.json +2 -1
@@ -0,0 +1,57 @@
1
+ /**
2
+ * valueKinds.ts — what KIND of value a record holds: the one classifier.
3
+ *
4
+ * WHY. Committed state is what survives `structuredClone` (an engine invariant), so the values a
5
+ * record holds are the kinds the clone keeps. Two laws need the kind, and both ask here:
6
+ *
7
+ * - what counts as a CHANGE (`memory/equality.ts · deepEqual`): two values are equal when a record
8
+ * holds the same thing for both, compared kind by kind. Until 9.44.2 only Date, Map and Set had a
9
+ * kind; a RegExp, an Error, a boxed number, a buffer, a DataView or a Blob was compared as an
10
+ * object with no own keys — equal to any other of its kind — so replacing one committed no row
11
+ * and live state kept the old value;
12
+ * - what a served record must COPY (`capture/freeze.ts · freezeRecord` / `serveRecord`):
13
+ * `Object.freeze` seals only the kinds whose content is their own properties ({@link SEALABLE}).
14
+ *
15
+ * A leaf: imports nothing (`capture/` is L0, below `memory/`).
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * kindOf(new Date(0)); // 'date'
20
+ * kindOf(new (class Point { x = 1 })()); // 'plain' — its clone is a plain object
21
+ * kindOf(new Blob(['a'])); // 'opaque' — its clone keeps content this library cannot read
22
+ * SEALABLE.date; // false — setTime writes a slot Object.freeze cannot reach
23
+ * ```
24
+ */
25
+ /** Every kind a record can hold. */
26
+ export type ValueKind =
27
+ /** An object the clone keeps as its own enumerable keys — a class instance included. */
28
+ 'plain' | 'array' | 'date' | 'regexp' | 'map' | 'set' | 'error'
29
+ /** A boxed primitive: `new Number(1)`, `new String('a')`, `new Boolean(true)`, `Object(1n)`. */
30
+ | 'boxed'
31
+ /** An `ArrayBuffer` (a `SharedArrayBuffer` too: shared memory is out of contract for state). */
32
+ | 'buffer'
33
+ /** A typed array or a `DataView`. */
34
+ | 'view'
35
+ /** Any other object the clone keeps as itself (a Blob, a File, a `DOMException`): content unread here. */
36
+ | 'opaque';
37
+ /**
38
+ * Does `Object.freeze` seal every part of a value of this kind? True only where the content is the
39
+ * value's own properties (or a slot nothing can write). A `Record`, so a new kind does not compile
40
+ * until it is decided here.
41
+ */
42
+ export declare const SEALABLE: {
43
+ readonly [K in ValueKind]: boolean;
44
+ };
45
+ /**
46
+ * The kind of an object, as a record holds it. A plain object or an array — the bulk of state —
47
+ * costs one `Array.isArray` and one `getPrototypeOf`; a built-in a tag and one brand-checked read.
48
+ * The brand is the value's own slot, so a subclass (a `Map` subclass is a `'map'`, Node's `Buffer` a
49
+ * `'view'`) and a value from another realm land on their kind.
50
+ *
51
+ * Any other object is classified by WHAT ITS CLONE IS, once per prototype: a class instance comes
52
+ * back a plain object (`'plain'`), a fake built-in (`Object.create(Date.prototype)`, or a class whose
53
+ * `Symbol.toStringTag` says `'Date'`) comes back `{}` (`'plain'`), and a host object comes back as
54
+ * itself (`'opaque'`). A prototype whose instance the clone refuses is `'opaque'` — remembered too:
55
+ * it cannot be held, and its commit will refuse it.
56
+ */
57
+ export declare function kindOf(value: object): ValueKind;
@@ -0,0 +1,142 @@
1
+ /**
2
+ * valueKinds.ts — what KIND of value a record holds: the one classifier.
3
+ *
4
+ * WHY. Committed state is what survives `structuredClone` (an engine invariant), so the values a
5
+ * record holds are the kinds the clone keeps. Two laws need the kind, and both ask here:
6
+ *
7
+ * - what counts as a CHANGE (`memory/equality.ts · deepEqual`): two values are equal when a record
8
+ * holds the same thing for both, compared kind by kind. Until 9.44.2 only Date, Map and Set had a
9
+ * kind; a RegExp, an Error, a boxed number, a buffer, a DataView or a Blob was compared as an
10
+ * object with no own keys — equal to any other of its kind — so replacing one committed no row
11
+ * and live state kept the old value;
12
+ * - what a served record must COPY (`capture/freeze.ts · freezeRecord` / `serveRecord`):
13
+ * `Object.freeze` seals only the kinds whose content is their own properties ({@link SEALABLE}).
14
+ *
15
+ * A leaf: imports nothing (`capture/` is L0, below `memory/`).
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * kindOf(new Date(0)); // 'date'
20
+ * kindOf(new (class Point { x = 1 })()); // 'plain' — its clone is a plain object
21
+ * kindOf(new Blob(['a'])); // 'opaque' — its clone keeps content this library cannot read
22
+ * SEALABLE.date; // false — setTime writes a slot Object.freeze cannot reach
23
+ * ```
24
+ */
25
+ /**
26
+ * Does `Object.freeze` seal every part of a value of this kind? True only where the content is the
27
+ * value's own properties (or a slot nothing can write). A `Record`, so a new kind does not compile
28
+ * until it is decided here.
29
+ */
30
+ export const SEALABLE = /* @__PURE__ */ Object.freeze({
31
+ plain: true,
32
+ array: true,
33
+ boxed: true,
34
+ date: false, // setTime & co. write its time value
35
+ regexp: false, // compile() rewrites source and flags, even on a frozen one
36
+ map: false, // set / delete / clear
37
+ set: false, // add / delete / clear
38
+ error: false, // V8's own `stack` accessor writes through a frozen error
39
+ buffer: false, // its bytes, through any view; transfer() detaches it
40
+ view: false, // index writes, set, fill, sort, copyWithin …
41
+ opaque: false, // content this library cannot read — never assumed sealed
42
+ });
43
+ /** What a brand check returns, when it does not throw, for a value without the slot. */
44
+ const NOT_BRAND = Symbol('not the brand');
45
+ /**
46
+ * A built-in kind is known by its BRAND — an internal slot only the real thing has — never by its
47
+ * prototype: `Object.create(RegExp.prototype)` is not a RegExp (its clone is `{}`), and reading
48
+ * `source` from it throws. The candidate comes from `Object.prototype.toString` (one call), then ONE
49
+ * brand-checked read confirms it; a value that fails it is classified by its clone instead.
50
+ */
51
+ const BRANDS =
52
+ /* @__PURE__ */ brandTable();
53
+ function brandTable() {
54
+ const getter = (proto, key) => {
55
+ const get = proto && Object.getOwnPropertyDescriptor(proto, key)?.get;
56
+ return get ? (value) => get.call(value) : undefined;
57
+ };
58
+ const global = globalThis;
59
+ const isError = Error.isError;
60
+ const rows = [
61
+ ['Date', 'date', (value) => Date.prototype.getTime.call(value)],
62
+ ['RegExp', 'regexp', getter(RegExp.prototype, 'source')],
63
+ ['Map', 'map', getter(Map.prototype, 'size')],
64
+ ['Set', 'set', getter(Set.prototype, 'size')],
65
+ // An error's tag comes from its own [[ErrorData]] slot: no Error prototype carries a toStringTag. Where
66
+ // the brand check `Error.isError` is missing (Node 22), a tag a getter supplies is therefore a spoof.
67
+ ['Error', 'error', (value) => ((isError ? isError(value) : untagged(value)) ? true : NOT_BRAND)],
68
+ ['Number', 'boxed', (value) => Number.prototype.valueOf.call(value)],
69
+ ['String', 'boxed', (value) => String.prototype.valueOf.call(value)],
70
+ ['Boolean', 'boxed', (value) => Boolean.prototype.valueOf.call(value)],
71
+ ['BigInt', 'boxed', (value) => (global.BigInt?.prototype).valueOf.call(value)],
72
+ ['ArrayBuffer', 'buffer', getter(ArrayBuffer.prototype, 'byteLength')],
73
+ ['SharedArrayBuffer', 'buffer', getter(global.SharedArrayBuffer?.prototype, 'byteLength')],
74
+ ];
75
+ const table = new Map();
76
+ for (const [name, kind, check] of rows)
77
+ if (check)
78
+ table.set(`[object ${name}]`, { kind, check });
79
+ return table;
80
+ }
81
+ /** No `Symbol.toStringTag` on the value or its prototypes: its tag came from a slot. */
82
+ function untagged(value) {
83
+ return value[Symbol.toStringTag] === undefined;
84
+ }
85
+ /** The kind of a built-in value, by its brand — `undefined` for anything else. */
86
+ function builtinKind(value) {
87
+ if (ArrayBuffer.isView(value))
88
+ return 'view'; // a brand check of its own: [[ViewedArrayBuffer]]
89
+ const brand = BRANDS.get(Object.prototype.toString.call(value));
90
+ if (brand === undefined)
91
+ return undefined;
92
+ try {
93
+ return brand.check(value) === NOT_BRAND ? undefined : brand.kind;
94
+ }
95
+ catch {
96
+ return undefined; // the prototype without the slot
97
+ }
98
+ }
99
+ /** Prototypes classified by a probe clone of their first instance (see {@link kindOf}). */
100
+ const PROBED = new WeakMap();
101
+ /**
102
+ * The kind of an object, as a record holds it. A plain object or an array — the bulk of state —
103
+ * costs one `Array.isArray` and one `getPrototypeOf`; a built-in a tag and one brand-checked read.
104
+ * The brand is the value's own slot, so a subclass (a `Map` subclass is a `'map'`, Node's `Buffer` a
105
+ * `'view'`) and a value from another realm land on their kind.
106
+ *
107
+ * Any other object is classified by WHAT ITS CLONE IS, once per prototype: a class instance comes
108
+ * back a plain object (`'plain'`), a fake built-in (`Object.create(Date.prototype)`, or a class whose
109
+ * `Symbol.toStringTag` says `'Date'`) comes back `{}` (`'plain'`), and a host object comes back as
110
+ * itself (`'opaque'`). A prototype whose instance the clone refuses is `'opaque'` — remembered too:
111
+ * it cannot be held, and its commit will refuse it.
112
+ */
113
+ export function kindOf(value) {
114
+ if (Array.isArray(value))
115
+ return 'array';
116
+ const proto = Object.getPrototypeOf(value);
117
+ if (proto === Object.prototype || proto === null)
118
+ return 'plain';
119
+ return builtinKind(value) ?? PROBED.get(proto) ?? probe(value, proto);
120
+ }
121
+ function probe(value, proto) {
122
+ let kind;
123
+ try {
124
+ const clone = structuredClone(value);
125
+ kind = clone === null || typeof clone !== 'object' ? 'opaque' : kindOfClone(clone);
126
+ }
127
+ catch {
128
+ kind = 'opaque';
129
+ }
130
+ PROBED.set(proto, kind);
131
+ return kind;
132
+ }
133
+ /** The kind of a CLONE — a value of this realm, so its prototype or its brand decides it. */
134
+ function kindOfClone(clone) {
135
+ if (Array.isArray(clone))
136
+ return 'array';
137
+ const proto = Object.getPrototypeOf(clone);
138
+ if (proto === Object.prototype || proto === null)
139
+ return 'plain';
140
+ return builtinKind(clone) ?? 'opaque';
141
+ }
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWVLaW5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY2FwdHVyZS92YWx1ZUtpbmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQXFCSDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUEyQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM1RixLQUFLLEVBQUUsSUFBSTtJQUNYLEtBQUssRUFBRSxJQUFJO0lBQ1gsS0FBSyxFQUFFLElBQUk7SUFDWCxJQUFJLEVBQUUsS0FBSyxFQUFFLHFDQUFxQztJQUNsRCxNQUFNLEVBQUUsS0FBSyxFQUFFLDREQUE0RDtJQUMzRSxHQUFHLEVBQUUsS0FBSyxFQUFFLHVCQUF1QjtJQUNuQyxHQUFHLEVBQUUsS0FBSyxFQUFFLHVCQUF1QjtJQUNuQyxLQUFLLEVBQUUsS0FBSyxFQUFFLDBEQUEwRDtJQUN4RSxNQUFNLEVBQUUsS0FBSyxFQUFFLHNEQUFzRDtJQUNyRSxJQUFJLEVBQUUsS0FBSyxFQUFFLDhDQUE4QztJQUMzRCxNQUFNLEVBQUUsS0FBSyxFQUFFLDBEQUEwRDtDQUMxRSxDQUFDLENBQUM7QUFFSCx3RkFBd0Y7QUFDeEYsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTFDOzs7OztHQUtHO0FBQ0gsTUFBTSxNQUFNO0FBQ1YsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBRS9CLFNBQVMsVUFBVTtJQUNqQixNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQXlCLEVBQUUsR0FBVyxFQUE0QyxFQUFFO1FBQ2xHLE1BQU0sR0FBRyxHQUFHLEtBQUssSUFBSSxNQUFNLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUN0RSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUs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QUM7UUFDOUMsSUFBSSxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsSUFBSSxHQUFHLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEIsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsNkZBQTZGO0FBQzdGLFNBQVMsV0FBVyxDQUFDLEtBQWE7SUFDaEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsSUFBSSxLQUFLLEtBQUssTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSTtRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQ2pFLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB2YWx1ZUtpbmRzLnRzIOKAlCB3aGF0IEtJTkQgb2YgdmFsdWUgYSByZWNvcmQgaG9sZHM6IHRoZSBvbmUgY2xhc3NpZmllci5cbiAqXG4gKiBXSFkuIENvbW1pdHRlZCBzdGF0ZSBpcyB3aGF0IHN1cnZpdmVzIGBzdHJ1Y3R1cmVkQ2xvbmVgIChhbiBlbmdpbmUgaW52YXJpYW50KSwgc28gdGhlIHZhbHVlcyBhXG4gKiByZWNvcmQgaG9sZHMgYXJlIHRoZSBraW5kcyB0aGUgY2xvbmUga2VlcHMuIFR3byBsYXdzIG5lZWQgdGhlIGtpbmQsIGFuZCBib3RoIGFzayBoZXJlOlxuICpcbiAqICAgLSB3aGF0IGNvdW50cyBhcyBhIENIQU5HRSAoYG1lbW9yeS9lcXVhbGl0eS50cyDCtyBkZWVwRXF1YWxgKTogdHdvIHZhbHVlcyBhcmUgZXF1YWwgd2hlbiBhIHJlY29yZFxuICogICAgIGhvbGRzIHRoZSBzYW1lIHRoaW5nIGZvciBib3RoLCBjb21wYXJlZCBraW5kIGJ5IGtpbmQuIFVudGlsIDkuNDQuMiBvbmx5IERhdGUsIE1hcCBhbmQgU2V0IGhhZCBhXG4gKiAgICAga2luZDsgYSBSZWdFeHAsIGFuIEVycm9yLCBhIGJveGVkIG51bWJlciwgYSBidWZmZXIsIGEgRGF0YVZpZXcgb3IgYSBCbG9iIHdhcyBjb21wYXJlZCBhcyBhblxuICogICAgIG9iamVjdCB3aXRoIG5vIG93biBrZXlzIOKAlCBlcXVhbCB0byBhbnkgb3RoZXIgb2YgaXRzIGtpbmQg4oCUIHNvIHJlcGxhY2luZyBvbmUgY29tbWl0dGVkIG5vIHJvd1xuICogICAgIGFuZCBsaXZlIHN0YXRlIGtlcHQgdGhlIG9sZCB2YWx1ZTtcbiAqICAgLSB3aGF0IGEgc2VydmVkIHJlY29yZCBtdXN0IENPUFkgKGBjYXB0dXJlL2ZyZWV6ZS50cyDCtyBmcmVlemVSZWNvcmRgIC8gYHNlcnZlUmVjb3JkYCk6XG4gKiAgICAgYE9iamVjdC5mcmVlemVgIHNlYWxzIG9ubHkgdGhlIGtpbmRzIHdob3NlIGNvbnRlbnQgaXMgdGhlaXIgb3duIHByb3BlcnRpZXMgKHtAbGluayBTRUFMQUJMRX0pLlxuICpcbiAqIEEgbGVhZjogaW1wb3J0cyBub3RoaW5nIChgY2FwdHVyZS9gIGlzIEwwLCBiZWxvdyBgbWVtb3J5L2ApLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBraW5kT2YobmV3IERhdGUoMCkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2RhdGUnXG4gKiBraW5kT2YobmV3IChjbGFzcyBQb2ludCB7IHggPSAxIH0pKCkpOyAgLy8gJ3BsYWluJyDigJQgaXRzIGNsb25lIGlzIGEgcGxhaW4gb2JqZWN0XG4gKiBraW5kT2YobmV3IEJsb2IoWydhJ10pKTsgICAgICAgICAgICAgICAgLy8gJ29wYXF1ZScg4oCUIGl0cyBjbG9uZSBrZWVwcyBjb250ZW50IHRoaXMgbGlicmFyeSBjYW5ub3QgcmVhZFxuICogU0VBTEFCTEUuZGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZhbHNlIOKAlCBzZXRUaW1lIHdyaXRlcyBhIHNsb3QgT2JqZWN0LmZyZWV6ZSBjYW5ub3QgcmVhY2hcbiAqIGBgYFxuICovXG5cbi8qKiBFdmVyeSBraW5kIGEgcmVjb3JkIGNhbiBob2xkLiAqL1xuZXhwb3J0IHR5cGUgVmFsdWVLaW5kID1cbiAgLyoqIEFuIG9iamVjdCB0aGUgY2xvbmUga2VlcHMgYXMgaXRzIG93biBlbnVtZXJhYmxlIGtleXMg4oCUIGEgY2xhc3MgaW5zdGFuY2UgaW5jbHVkZWQuICovXG4gIHwgJ3BsYWluJ1xuICB8ICdhcnJheSdcbiAgfCAnZGF0ZSdcbiAgfCAncmVnZXhwJ1xuICB8ICdtYXAnXG4gIHwgJ3NldCdcbiAgfCAnZXJyb3InXG4gIC8qKiBBIGJveGVkIHByaW1pdGl2ZTogYG5ldyBOdW1iZXIoMSlgLCBgbmV3IFN0cmluZygnYScpYCwgYG5ldyBCb29sZWFuKHRydWUpYCwgYE9iamVjdCgxbilgLiAqL1xuICB8ICdib3hlZCdcbiAgLyoqIEFuIGBBcnJheUJ1ZmZlcmAgKGEgYFNoYXJlZEFycmF5QnVmZmVyYCB0b286IHNoYXJlZCBtZW1vcnkgaXMgb3V0IG9mIGNvbnRyYWN0IGZvciBzdGF0ZSkuICovXG4gIHwgJ2J1ZmZlcidcbiAgLyoqIEEgdHlwZWQgYXJyYXkgb3IgYSBgRGF0YVZpZXdgLiAqL1xuICB8ICd2aWV3J1xuICAvKiogQW55IG90aGVyIG9iamVjdCB0aGUgY2xvbmUga2VlcHMgYXMgaXRzZWxmIChhIEJsb2IsIGEgRmlsZSwgYSBgRE9NRXhjZXB0aW9uYCk6IGNvbnRlbnQgdW5yZWFkIGhlcmUuICovXG4gIHwgJ29wYXF1ZSc7XG5cbi8qKlxuICogRG9lcyBgT2JqZWN0LmZyZWV6ZWAgc2VhbCBldmVyeSBwYXJ0IG9mIGEgdmFsdWUgb2YgdGhpcyBraW5kPyBUcnVlIG9ubHkgd2hlcmUgdGhlIGNvbnRlbnQgaXMgdGhlXG4gKiB2YWx1ZSdzIG93biBwcm9wZXJ0aWVzIChvciBhIHNsb3Qgbm90aGluZyBjYW4gd3JpdGUpLiBBIGBSZWNvcmRgLCBzbyBhIG5ldyBraW5kIGRvZXMgbm90IGNvbXBpbGVcbiAqIHVudGlsIGl0IGlzIGRlY2lkZWQgaGVyZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFQUxBQkxFOiB7IHJlYWRvbmx5IFtLIGluIFZhbHVlS2luZF06IGJvb2xlYW4gfSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuZnJlZXplKHtcbiAgcGxhaW46IHRydWUsXG4gIGFycmF5OiB0cnVlLFxuICBib3hlZDogdHJ1ZSxcbiAgZGF0ZTogZmFsc2UsIC8vIHNldFRpbWUgJiBjby4gd3JpdGUgaXRzIHRpbWUgdmFsdWVcbiAgcmVnZXhwOiBmYWxzZSwgLy8gY29tcGlsZSgpIHJld3JpdGVzIHNvdXJjZSBhbmQgZmxhZ3MsIGV2ZW4gb24gYSBmcm96ZW4gb25lXG4gIG1hcDogZmFsc2UsIC8vIHNldCAvIGRlbGV0ZSAvIGNsZWFyXG4gIHNldDogZmFsc2UsIC8vIGFkZCAvIGRlbGV0ZSAvIGNsZWFyXG4gIGVycm9yOiBmYWxzZSwgLy8gVjgncyBvd24gYHN0YWNrYCBhY2Nlc3NvciB3cml0ZXMgdGhyb3VnaCBhIGZyb3plbiBlcnJvclxuICBidWZmZXI6IGZhbHNlLCAvLyBpdHMgYnl0ZXMsIHRocm91Z2ggYW55IHZpZXc7IHRyYW5zZmVyKCkgZGV0YWNoZXMgaXRcbiAgdmlldzogZmFsc2UsIC8vIGluZGV4IHdyaXRlcywgc2V0LCBmaWxsLCBzb3J0LCBjb3B5V2l0aGluIOKAplxuICBvcGFxdWU6IGZhbHNlLCAvLyBjb250ZW50IHRoaXMgbGlicmFyeSBjYW5ub3QgcmVhZCDigJQgbmV2ZXIgYXNzdW1lZCBzZWFsZWRcbn0pO1xuXG4vKiogV2hhdCBhIGJyYW5kIGNoZWNrIHJldHVybnMsIHdoZW4gaXQgZG9lcyBub3QgdGhyb3csIGZvciBhIHZhbHVlIHdpdGhvdXQgdGhlIHNsb3QuICovXG5jb25zdCBOT1RfQlJBTkQgPSBTeW1ib2woJ25vdCB0aGUgYnJhbmQnKTtcblxuLyoqXG4gKiBBIGJ1aWx0LWluIGtpbmQgaXMga25vd24gYnkgaXRzIEJSQU5EIOKAlCBhbiBpbnRlcm5hbCBzbG90IG9ubHkgdGhlIHJlYWwgdGhpbmcgaGFzIOKAlCBuZXZlciBieSBpdHNcbiAqIHByb3RvdHlwZTogYE9iamVjdC5jcmVhdGUoUmVnRXhwLnByb3RvdHlwZSlgIGlzIG5vdCBhIFJlZ0V4cCAoaXRzIGNsb25lIGlzIGB7fWApLCBhbmQgcmVhZGluZ1xuICogYHNvdXJjZWAgZnJvbSBpdCB0aHJvd3MuIFRoZSBjYW5kaWRhdGUgY29tZXMgZnJvbSBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgKG9uZSBjYWxsKSwgdGhlbiBPTkVcbiAqIGJyYW5kLWNoZWNrZWQgcmVhZCBjb25maXJtcyBpdDsgYSB2YWx1ZSB0aGF0IGZhaWxzIGl0IGlzIGNsYXNzaWZpZWQgYnkgaXRzIGNsb25lIGluc3RlYWQuXG4gKi9cbmNvbnN0IEJSQU5EUzogUmVhZG9ubHlNYXA8c3RyaW5nLCB7IHJlYWRvbmx5IGtpbmQ6IFZhbHVlS2luZDsgcmVhZG9ubHkgY2hlY2s6ICh2YWx1ZTogb2JqZWN0KSA9PiB1bmtub3duIH0+ID1cbiAgLyogQF9fUFVSRV9fICovIGJyYW5kVGFibGUoKTtcblxuZnVuY3Rpb24gYnJhbmRUYWJsZSgpOiBNYXA8c3RyaW5nLCB7IGtpbmQ6IFZhbHVlS2luZDsgY2hlY2s6ICh2YWx1ZTogb2JqZWN0KSA9PiB1bmtub3duIH0+IHtcbiAgY29uc3QgZ2V0dGVyID0gKHByb3RvOiBvYmplY3QgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nKTogKCh2YWx1ZTogb2JqZWN0KSA9PiB1bmtub3duKSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgZ2V0ID0gcHJvdG8gJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywga2V5KT8uZ2V0O1xuICAgIHJldHVybiBnZXQgPyAodmFsdWUpID0+IGdldC5jYWxsKHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgfTtcbiAgY29uc3QgZ2xvYmFsID0gZ2xvYmFsVGhpcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHsgcHJvdG90eXBlPzogb2JqZWN0IH0gfCB1bmRlZmluZWQ+O1xuICBjb25zdCBpc0Vycm9yID0gKEVycm9yIGFzIHVua25vd24gYXMgeyBpc0Vycm9yPzogKHZhbHVlOiB1bmtub3duKSA9PiBib29sZWFuIH0pLmlzRXJyb3I7XG4gIGNvbnN0IHJvd3M6IEFycmF5PFtzdHJpbmcsIFZhbHVlS2luZCwgKCh2YWx1ZTogb2JqZWN0KSA9PiB1bmtub3duKSB8IHVuZGVmaW5lZF0+ID0gW1xuICAgIFsnRGF0ZScsICdkYXRlJywgKHZhbHVlKSA9PiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwodmFsdWUpXSxcbiAgICBbJ1JlZ0V4cCcsICdyZWdleHAnLCBnZXR0ZXIoUmVnRXhwLnByb3RvdHlwZSwgJ3NvdXJjZScpXSxcbiAgICBbJ01hcCcsICdtYXAnLCBnZXR0ZXIoTWFwLnByb3RvdHlwZSwgJ3NpemUnKV0sXG4gICAgWydTZXQnLCAnc2V0JywgZ2V0dGVyKFNldC5wcm90b3R5cGUsICdzaXplJyldLFxuICAgIC8vIEFuIGVycm9yJ3MgdGFnIGNvbWVzIGZyb20gaXRzIG93biBbW0Vycm9yRGF0YV1dIHNsb3Q6IG5vIEVycm9yIHByb3RvdHlwZSBjYXJyaWVzIGEgdG9TdHJpbmdUYWcuIFdoZXJlXG4gICAgLy8gdGhlIGJyYW5kIGNoZWNrIGBFcnJvci5pc0Vycm9yYCBpcyBtaXNzaW5nIChOb2RlIDIyKSwgYSB0YWcgYSBnZXR0ZXIgc3VwcGxpZXMgaXMgdGhlcmVmb3JlIGEgc3Bvb2YuXG4gICAgWydFcnJvcicsICdlcnJvcicsICh2YWx1ZSkgPT4gKChpc0Vycm9yID8gaXNFcnJvcih2YWx1ZSkgOiB1bnRhZ2dlZCh2YWx1ZSkpID8gdHJ1ZSA6IE5PVF9CUkFORCldLFxuICAgIFsnTnVtYmVyJywgJ2JveGVkJywgKHZhbHVlKSA9PiBOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YuY2FsbCh2YWx1ZSldLFxuICAgIFsnU3RyaW5nJywgJ2JveGVkJywgKHZhbHVlKSA9PiBTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbCh2YWx1ZSldLFxuICAgIFsnQm9vbGVhbicsICdib3hlZCcsICh2YWx1ZSkgPT4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHZhbHVlKV0sXG4gICAgWydCaWdJbnQnLCAnYm94ZWQnLCAodmFsdWUpID0+IChnbG9iYWwuQmlnSW50Py5wcm90b3R5cGUgYXMgeyB2YWx1ZU9mKCk6IHVua25vd24gfSkudmFsdWVPZi5jYWxsKHZhbHVlKV0sXG4gICAgWydBcnJheUJ1ZmZlcicsICdidWZmZXInLCBnZXR0ZXIoQXJyYXlCdWZmZXIucHJvdG90eXBlLCAnYnl0ZUxlbmd0aCcpXSxcbiAgICBbJ1NoYXJlZEFycmF5QnVmZmVyJywgJ2J1ZmZlcicsIGdldHRlcihnbG9iYWwuU2hhcmVkQXJyYXlCdWZmZXI/LnByb3RvdHlwZSwgJ2J5dGVMZW5ndGgnKV0sXG4gIF07XG4gIGNvbnN0IHRhYmxlID0gbmV3IE1hcDxzdHJpbmcsIHsga2luZDogVmFsdWVLaW5kOyBjaGVjazogKHZhbHVlOiBvYmplY3QpID0+IHVua25vd24gfT4oKTtcbiAgZm9yIChjb25zdCBbbmFtZSwga2luZCwgY2hlY2tdIG9mIHJvd3MpIGlmIChjaGVjaykgdGFibGUuc2V0KGBbb2JqZWN0ICR7bmFtZX1dYCwgeyBraW5kLCBjaGVjayB9KTtcbiAgcmV0dXJuIHRhYmxlO1xufVxuXG4vKiogTm8gYFN5bWJvbC50b1N0cmluZ1RhZ2Agb24gdGhlIHZhbHVlIG9yIGl0cyBwcm90b3R5cGVzOiBpdHMgdGFnIGNhbWUgZnJvbSBhIHNsb3QuICovXG5mdW5jdGlvbiB1bnRhZ2dlZCh2YWx1ZTogb2JqZWN0KTogYm9vbGVhbiB7XG4gIHJldHVybiAodmFsdWUgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IHVuZGVmaW5lZDtcbn1cblxuLyoqIFRoZSBraW5kIG9mIGEgYnVpbHQtaW4gdmFsdWUsIGJ5IGl0cyBicmFuZCDigJQgYHVuZGVmaW5lZGAgZm9yIGFueXRoaW5nIGVsc2UuICovXG5mdW5jdGlvbiBidWlsdGluS2luZCh2YWx1ZTogb2JqZWN0KTogVmFsdWVLaW5kIHwgdW5kZWZpbmVkIHtcbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHJldHVybiAndmlldyc7IC8vIGEgYnJhbmQgY2hlY2sgb2YgaXRzIG93bjogW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dXG4gIGNvbnN0IGJyYW5kID0gQlJBTkRTLmdldChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpKTtcbiAgaWYgKGJyYW5kID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGJyYW5kLmNoZWNrKHZhbHVlKSA9PT0gTk9UX0JSQU5EID8gdW5kZWZpbmVkIDogYnJhbmQua2luZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gdGhlIHByb3RvdHlwZSB3aXRob3V0IHRoZSBzbG90XG4gIH1cbn1cblxuLyoqIFByb3RvdHlwZXMgY2xhc3NpZmllZCBieSBhIHByb2JlIGNsb25lIG9mIHRoZWlyIGZpcnN0IGluc3RhbmNlIChzZWUge0BsaW5rIGtpbmRPZn0pLiAqL1xuY29uc3QgUFJPQkVEID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBWYWx1ZUtpbmQ+KCk7XG5cbi8qKlxuICogVGhlIGtpbmQgb2YgYW4gb2JqZWN0LCBhcyBhIHJlY29yZCBob2xkcyBpdC4gQSBwbGFpbiBvYmplY3Qgb3IgYW4gYXJyYXkg4oCUIHRoZSBidWxrIG9mIHN0YXRlIOKAlFxuICogY29zdHMgb25lIGBBcnJheS5pc0FycmF5YCBhbmQgb25lIGBnZXRQcm90b3R5cGVPZmA7IGEgYnVpbHQtaW4gYSB0YWcgYW5kIG9uZSBicmFuZC1jaGVja2VkIHJlYWQuXG4gKiBUaGUgYnJhbmQgaXMgdGhlIHZhbHVlJ3Mgb3duIHNsb3QsIHNvIGEgc3ViY2xhc3MgKGEgYE1hcGAgc3ViY2xhc3MgaXMgYSBgJ21hcCdgLCBOb2RlJ3MgYEJ1ZmZlcmAgYVxuICogYCd2aWV3J2ApIGFuZCBhIHZhbHVlIGZyb20gYW5vdGhlciByZWFsbSBsYW5kIG9uIHRoZWlyIGtpbmQuXG4gKlxuICogQW55IG90aGVyIG9iamVjdCBpcyBjbGFzc2lmaWVkIGJ5IFdIQVQgSVRTIENMT05FIElTLCBvbmNlIHBlciBwcm90b3R5cGU6IGEgY2xhc3MgaW5zdGFuY2UgY29tZXNcbiAqIGJhY2sgYSBwbGFpbiBvYmplY3QgKGAncGxhaW4nYCksIGEgZmFrZSBidWlsdC1pbiAoYE9iamVjdC5jcmVhdGUoRGF0ZS5wcm90b3R5cGUpYCwgb3IgYSBjbGFzcyB3aG9zZVxuICogYFN5bWJvbC50b1N0cmluZ1RhZ2Agc2F5cyBgJ0RhdGUnYCkgY29tZXMgYmFjayBge31gIChgJ3BsYWluJ2ApLCBhbmQgYSBob3N0IG9iamVjdCBjb21lcyBiYWNrIGFzXG4gKiBpdHNlbGYgKGAnb3BhcXVlJ2ApLiBBIHByb3RvdHlwZSB3aG9zZSBpbnN0YW5jZSB0aGUgY2xvbmUgcmVmdXNlcyBpcyBgJ29wYXF1ZSdgIOKAlCByZW1lbWJlcmVkIHRvbzpcbiAqIGl0IGNhbm5vdCBiZSBoZWxkLCBhbmQgaXRzIGNvbW1pdCB3aWxsIHJlZnVzZSBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtpbmRPZih2YWx1ZTogb2JqZWN0KTogVmFsdWVLaW5kIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gJ2FycmF5JztcbiAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGwpIHJldHVybiAncGxhaW4nO1xuICByZXR1cm4gYnVpbHRpbktpbmQodmFsdWUpID8/IFBST0JFRC5nZXQocHJvdG8pID8/IHByb2JlKHZhbHVlLCBwcm90byk7XG59XG5cbmZ1bmN0aW9uIHByb2JlKHZhbHVlOiBvYmplY3QsIHByb3RvOiBvYmplY3QpOiBWYWx1ZUtpbmQge1xuICBsZXQga2luZDogVmFsdWVLaW5kO1xuICB0cnkge1xuICAgIGNvbnN0IGNsb25lOiB1bmtub3duID0gc3RydWN0dXJlZENsb25lKHZhbHVlKTtcbiAgICBraW5kID0gY2xvbmUgPT09IG51bGwgfHwgdHlwZW9mIGNsb25lICE9PSAnb2JqZWN0JyA/ICdvcGFxdWUnIDoga2luZE9mQ2xvbmUoY2xvbmUpO1xuICB9IGNhdGNoIHtcbiAgICBraW5kID0gJ29wYXF1ZSc7XG4gIH1cbiAgUFJPQkVELnNldChwcm90bywga2luZCk7XG4gIHJldHVybiBraW5kO1xufVxuXG4vKiogVGhlIGtpbmQgb2YgYSBDTE9ORSDigJQgYSB2YWx1ZSBvZiB0aGlzIHJlYWxtLCBzbyBpdHMgcHJvdG90eXBlIG9yIGl0cyBicmFuZCBkZWNpZGVzIGl0LiAqL1xuZnVuY3Rpb24ga2luZE9mQ2xvbmUoY2xvbmU6IG9iamVjdCk6IFZhbHVlS2luZCB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNsb25lKSkgcmV0dXJuICdhcnJheSc7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsb25lKTtcbiAgaWYgKHByb3RvID09PSBPYmplY3QucHJvdG90eXBlIHx8IHByb3RvID09PSBudWxsKSByZXR1cm4gJ3BsYWluJztcbiAgcmV0dXJuIGJ1aWx0aW5LaW5kKGNsb25lKSA/PyAnb3BhcXVlJztcbn1cbiJdfQ==
@@ -8,16 +8,22 @@
8
8
  * row's `readKeys`, `redactedPaths`, `tags`, `untrackedSources` — so a holder of a snapshot can no
9
9
  * longer rewrite the history every later answer is folded from: an assignment into a bundle throws
10
10
  * a `TypeError` in strict code. Safe because nothing outside the log holds a bundle's containers:
11
- * the log's payload is the commit's own copy (`StageContext · commit` hands it the output of
11
+ * the log's payload is the commit's own copy (`recordCommit` hands it the output of
12
12
  * `scrubPatch`), and live state, the redacted mirror and write retention each take their own copy
13
13
  * (`verbs.ts · foldRows` detaches, `StageContext · retainedForm` clones) — pinned by
14
14
  * test/lib/memory/property/record-reachability.property.test.ts.
15
15
  *
16
- * Named holes — what `Object.freeze` cannot reach stays mutable: Map and Set contents, a Date's
17
- * time, the bytes of a typed array (skipped: a non-empty one cannot be frozen), and an object hung
18
- * on an array EXPANDO (arrays are walked by index — `deepFreeze`'s `'indices'` walk, which keeps
19
- * the freeze inside its budget). A frozen RegExp's `lastIndex` is read-only, so a `/g` or `/y`
20
- * regex read from a bundle throws when `exec` or `replace` advance it.
16
+ * What `Object.freeze` cannot seal — a Date's time, a Map's or Set's entries, a buffer's bytes, a
17
+ * RegExp, an Error's stack — is never handed out to a reader (9.44.2): `record` remembers that a
18
+ * bundle holds such a value (`capture/freeze.ts · freezeRecord`), and `list()` — like the public
19
+ * snapshot, `runner/snapshot.ts · servedSnapshot` — serves that bundle as a copy of its open paths
20
+ * (`serveRecord`, mapped at its first serve): fresh frozen containers down to each such value, a
21
+ * fresh copy of it, every other part the log's own. A reader edits only its own copy; every later
22
+ * serve reads the record as recorded. `recorded()` is the engine's own, unserved read. Named holes: an object hung on an array EXPANDO (arrays are walked
23
+ * by index — the `'indices'` walk, which keeps the freeze inside its budget; an expando is out of
24
+ * contract for state) and a `SharedArrayBuffer` (every copy shares its memory). A frozen RegExp's
25
+ * `lastIndex` is read-only, so a `/g` or `/y` regex read from a bundle throws when `exec` or
26
+ * `replace` advance it.
21
27
  */
22
28
  import type { EmitSourcePosition, LogAddress } from './eventPosition.js';
23
29
  import type { CommitBundle } from './types.js';
@@ -72,8 +78,20 @@ export declare class EventLog {
72
78
  * will no longer edit — its own object is the one frozen.
73
79
  */
74
80
  record(bundle: CommitBundle): void;
75
- /** Gets all recorded commit bundles — the live array; every bundle in it is frozen. */
81
+ /**
82
+ * Every recorded commit bundle, AS SERVED (9.44.2): a new array each call; a bundle freezing sealed
83
+ * whole is the log's own (frozen) object, one holding a Date, Map, buffer … is a copy of its open
84
+ * paths (`capture/freeze.ts · serveRecord`) — the reader's own, so no edit reaches the log.
85
+ */
76
86
  list(): CommitBundle[];
87
+ /**
88
+ * @internal The bundles as the log holds them — each frozen, NOT served — in a new array, so a holder's
89
+ * `splice` reaches only its own. For the engine's own snapshot (`ExecutionRuntime · getSnapshot`, which
90
+ * a subflow mount takes once per mount), so the run serves nothing; a reader is served by `list()` and
91
+ * `getSnapshot().commitLog`. A known open door (CHANGELOG 9.44.2): a holder of these bundles can still
92
+ * edit a Date, Map or buffer inside them.
93
+ */
94
+ recorded(): CommitBundle[];
77
95
  /** Number of recorded commits. */
78
96
  get length(): number;
79
97
  /** Immutable identity of this log, absent until the engine binds it. */
@@ -8,18 +8,24 @@
8
8
  * row's `readKeys`, `redactedPaths`, `tags`, `untrackedSources` — so a holder of a snapshot can no
9
9
  * longer rewrite the history every later answer is folded from: an assignment into a bundle throws
10
10
  * a `TypeError` in strict code. Safe because nothing outside the log holds a bundle's containers:
11
- * the log's payload is the commit's own copy (`StageContext · commit` hands it the output of
11
+ * the log's payload is the commit's own copy (`recordCommit` hands it the output of
12
12
  * `scrubPatch`), and live state, the redacted mirror and write retention each take their own copy
13
13
  * (`verbs.ts · foldRows` detaches, `StageContext · retainedForm` clones) — pinned by
14
14
  * test/lib/memory/property/record-reachability.property.test.ts.
15
15
  *
16
- * Named holes — what `Object.freeze` cannot reach stays mutable: Map and Set contents, a Date's
17
- * time, the bytes of a typed array (skipped: a non-empty one cannot be frozen), and an object hung
18
- * on an array EXPANDO (arrays are walked by index — `deepFreeze`'s `'indices'` walk, which keeps
19
- * the freeze inside its budget). A frozen RegExp's `lastIndex` is read-only, so a `/g` or `/y`
20
- * regex read from a bundle throws when `exec` or `replace` advance it.
16
+ * What `Object.freeze` cannot seal — a Date's time, a Map's or Set's entries, a buffer's bytes, a
17
+ * RegExp, an Error's stack — is never handed out to a reader (9.44.2): `record` remembers that a
18
+ * bundle holds such a value (`capture/freeze.ts · freezeRecord`), and `list()` — like the public
19
+ * snapshot, `runner/snapshot.ts · servedSnapshot` — serves that bundle as a copy of its open paths
20
+ * (`serveRecord`, mapped at its first serve): fresh frozen containers down to each such value, a
21
+ * fresh copy of it, every other part the log's own. A reader edits only its own copy; every later
22
+ * serve reads the record as recorded. `recorded()` is the engine's own, unserved read. Named holes: an object hung on an array EXPANDO (arrays are walked
23
+ * by index — the `'indices'` walk, which keeps the freeze inside its budget; an expando is out of
24
+ * contract for state) and a `SharedArrayBuffer` (every copy shares its memory). A frozen RegExp's
25
+ * `lastIndex` is read-only, so a `/g` or `/y` regex read from a bundle throws when `exec` or
26
+ * `replace` advance it.
21
27
  */
22
- import { deepFreeze } from '../capture/freeze.js';
28
+ import { freezeRecord, serveRecord } from '../capture/freeze.js';
23
29
  import { applySmartMergeInto } from './utils.js';
24
30
  export class EventLog {
25
31
  /** Base snapshot BEFORE the first stage mutates anything. */
@@ -88,12 +94,26 @@ export class EventLog {
88
94
  */
89
95
  record(bundle) {
90
96
  bundle.idx = this.steps.length;
91
- deepFreeze(bundle, 'indices');
97
+ freezeRecord(bundle, 'indices');
92
98
  this.steps.push(bundle);
93
99
  }
94
- /** Gets all recorded commit bundles — the live array; every bundle in it is frozen. */
100
+ /**
101
+ * Every recorded commit bundle, AS SERVED (9.44.2): a new array each call; a bundle freezing sealed
102
+ * whole is the log's own (frozen) object, one holding a Date, Map, buffer … is a copy of its open
103
+ * paths (`capture/freeze.ts · serveRecord`) — the reader's own, so no edit reaches the log.
104
+ */
95
105
  list() {
96
- return this.steps;
106
+ return this.steps.map(serveRecord);
107
+ }
108
+ /**
109
+ * @internal The bundles as the log holds them — each frozen, NOT served — in a new array, so a holder's
110
+ * `splice` reaches only its own. For the engine's own snapshot (`ExecutionRuntime · getSnapshot`, which
111
+ * a subflow mount takes once per mount), so the run serves nothing; a reader is served by `list()` and
112
+ * `getSnapshot().commitLog`. A known open door (CHANGELOG 9.44.2): a holder of these bundles can still
113
+ * edit a Date, Map or buffer inside them.
114
+ */
115
+ recorded() {
116
+ return this.steps.slice();
97
117
  }
98
118
  /** Number of recorded commits. */
99
119
  get length() {
@@ -125,4 +145,4 @@ export class EventLog {
125
145
  this.sourceAddressRetired = true;
126
146
  }
127
147
  }
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRMb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9FdmVudExvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpELE1BQU0sT0FBTyxRQUFRO0lBQ25CLDZEQUE2RDtJQUNyRCxJQUFJLENBQU07SUFDbEIsc0NBQXNDO0lBQzlCLEtBQUssR0FBbUIsRUFBRSxDQUFDO0lBQzNCLGFBQWEsQ0FBYztJQUMzQixvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFFckMsWUFBWSxhQUFrQjtRQUM1Qix1RUFBdUU7UUFDdkUsc0VBQXNFO1FBQ3RFLHNFQUFzRTtRQUN0RSwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsZUFBZTtRQUNiLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bb0JHO0lBQ0gsV0FBVyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07UUFDckMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRCxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsT0FBc0IsRUFBRSxTQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxNQUFvQjtRQUN6QixNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQy9CLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELHVGQUF1RjtJQUN2RixJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsd0ZBQXdGO0lBQ3hGLFdBQVcsQ0FBQyxRQUFnQixFQUFFLFNBQTRCO1FBQ3hELElBQUksSUFBSSxDQUFDLG9CQUFvQjtZQUFFLE9BQU87UUFDdEMsSUFBSSxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsK0ZBQStGO0lBQy9GLGVBQWUsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQzFDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsOENBQThDO0lBQzlDLEtBQUs7UUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQix3RUFBd0U7UUFDeEUsc0VBQXNFO1FBQ3RFLHVFQUF1RTtRQUN2RSxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUMvQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0lBQ25DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnRMb2cg4oCUIFRpbWUtdHJhdmVsIHNuYXBzaG90IHN0b3JhZ2UgZm9yIGZsb3djaGFydCBleGVjdXRpb25cbiAqXG4gKiBMaWtlIGdpdCBoaXN0b3J5OiBzdG9yZXMgY29tbWl0IGJ1bmRsZXMgKGRpZmZzKSwgbm90IGZ1bGwgc25hcHNob3RzLlxuICpcbiAqIFRIRSBSRUNPUkQgSVMgSU1NVVRBQkxFIEZST00gYHJlY29yZGAgKEYzLCBydWxpbmcgUjMpLiBFdmVyeSBidW5kbGUgaXMgZGVlcC1mcm96ZW4gYXMgaXQgaXNcbiAqIHJlY29yZGVkIOKAlCB0aGUgYnVuZGxlLCBgb3ZlcndyaXRlYCBhbmQgYHVwZGF0ZXNgIGF0IGV2ZXJ5IGRlcHRoLCB0aGUgdHJhY2UgYW5kIGVhY2ggcm93LCB0aGVcbiAqIHJvdydzIGByZWFkS2V5c2AsIGByZWRhY3RlZFBhdGhzYCwgYHRhZ3NgLCBgdW50cmFja2VkU291cmNlc2Ag4oCUIHNvIGEgaG9sZGVyIG9mIGEgc25hcHNob3QgY2FuIG5vXG4gKiBsb25nZXIgcmV3cml0ZSB0aGUgaGlzdG9yeSBldmVyeSBsYXRlciBhbnN3ZXIgaXMgZm9sZGVkIGZyb206IGFuIGFzc2lnbm1lbnQgaW50byBhIGJ1bmRsZSB0aHJvd3NcbiAqIGEgYFR5cGVFcnJvcmAgaW4gc3RyaWN0IGNvZGUuIFNhZmUgYmVjYXVzZSBub3RoaW5nIG91dHNpZGUgdGhlIGxvZyBob2xkcyBhIGJ1bmRsZSdzIGNvbnRhaW5lcnM6XG4gKiB0aGUgbG9nJ3MgcGF5bG9hZCBpcyB0aGUgY29tbWl0J3Mgb3duIGNvcHkgKGBTdGFnZUNvbnRleHQgwrcgY29tbWl0YCBoYW5kcyBpdCB0aGUgb3V0cHV0IG9mXG4gKiBgc2NydWJQYXRjaGApLCBhbmQgbGl2ZSBzdGF0ZSwgdGhlIHJlZGFjdGVkIG1pcnJvciBhbmQgd3JpdGUgcmV0ZW50aW9uIGVhY2ggdGFrZSB0aGVpciBvd24gY29weVxuICogKGB2ZXJicy50cyDCtyBmb2xkUm93c2AgZGV0YWNoZXMsIGBTdGFnZUNvbnRleHQgwrcgcmV0YWluZWRGb3JtYCBjbG9uZXMpIOKAlCBwaW5uZWQgYnlcbiAqIHRlc3QvbGliL21lbW9yeS9wcm9wZXJ0eS9yZWNvcmQtcmVhY2hhYmlsaXR5LnByb3BlcnR5LnRlc3QudHMuXG4gKlxuICogTmFtZWQgaG9sZXMg4oCUIHdoYXQgYE9iamVjdC5mcmVlemVgIGNhbm5vdCByZWFjaCBzdGF5cyBtdXRhYmxlOiBNYXAgYW5kIFNldCBjb250ZW50cywgYSBEYXRlJ3NcbiAqIHRpbWUsIHRoZSBieXRlcyBvZiBhIHR5cGVkIGFycmF5IChza2lwcGVkOiBhIG5vbi1lbXB0eSBvbmUgY2Fubm90IGJlIGZyb3plbiksIGFuZCBhbiBvYmplY3QgaHVuZ1xuICogb24gYW4gYXJyYXkgRVhQQU5ETyAoYXJyYXlzIGFyZSB3YWxrZWQgYnkgaW5kZXgg4oCUIGBkZWVwRnJlZXplYCdzIGAnaW5kaWNlcydgIHdhbGssIHdoaWNoIGtlZXBzXG4gKiB0aGUgZnJlZXplIGluc2lkZSBpdHMgYnVkZ2V0KS4gQSBmcm96ZW4gUmVnRXhwJ3MgYGxhc3RJbmRleGAgaXMgcmVhZC1vbmx5LCBzbyBhIGAvZ2Agb3IgYC95YFxuICogcmVnZXggcmVhZCBmcm9tIGEgYnVuZGxlIHRocm93cyB3aGVuIGBleGVjYCBvciBgcmVwbGFjZWAgYWR2YW5jZSBpdC5cbiAqL1xuXG5pbXBvcnQgeyBkZWVwRnJlZXplIH0gZnJvbSAnLi4vY2FwdHVyZS9mcmVlemUuanMnO1xuaW1wb3J0IHR5cGUgeyBFbWl0U291cmNlUG9zaXRpb24sIExvZ0FkZHJlc3MgfSBmcm9tICcuL2V2ZW50UG9zaXRpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUsIE1lbW9yeVBhdGNoIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBhcHBseVNtYXJ0TWVyZ2VJbnRvIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBFdmVudExvZyB7XG4gIC8qKiBCYXNlIHNuYXBzaG90IEJFRk9SRSB0aGUgZmlyc3Qgc3RhZ2UgbXV0YXRlcyBhbnl0aGluZy4gKi9cbiAgcHJpdmF0ZSBiYXNlOiBhbnk7XG4gIC8qKiBPcmRlcmVkIGxpc3Qgb2YgY29tbWl0IGJ1bmRsZXMuICovXG4gIHByaXZhdGUgc3RlcHM6IENvbW1pdEJ1bmRsZVtdID0gW107XG4gIHByaXZhdGUgc291cmNlQWRkcmVzcz86IExvZ0FkZHJlc3M7XG4gIHByaXZhdGUgc291cmNlQWRkcmVzc1JldGlyZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihpbml0aWFsTWVtb3J5OiBhbnkpIHtcbiAgICAvLyBOb3JtYWxpc2VkIHRvIGFuIG9iamVjdDogdGhlIGJhc2UgaXMgYSBTVEFURSwgYW5kIGV2ZXJ5IGZvbGQgb3ZlciBpdFxuICAgIC8vIChgbWF0ZXJpYWxpc2VgLCBgc3RhdGVBdGApIGFwcGxpZXMgcGF0aCB3cml0ZXMgdG8gaXQuIGB1bmRlZmluZWRgIOKAlFxuICAgIC8vIHdoYXQgYSBydW4gd2l0aCBubyBgaW5pdGlhbENvbnRleHRgIHVzZWQgdG8gc3RvcmUgaGVyZSDigJQgbWFkZSBldmVyeVxuICAgIC8vIG9uZSBvZiB0aG9zZSBmb2xkcyB0aHJvdyBvbiB0aGUgZmlyc3QgYHNldGAuXG4gICAgdGhpcy5iYXNlID0gaW5pdGlhbE1lbW9yeSA9PT0gdW5kZWZpbmVkID8ge30gOiBzdHJ1Y3R1cmVkQ2xvbmUoaW5pdGlhbE1lbW9yeSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbGQgQkFTRSDigJQgdGhlIHN0YXRlIGFzIGl0IHN0b29kIGJlZm9yZSB0aGUgZmlyc3QgY29tbWl0LlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBvdGhlciBoYWxmIG9mIHRoZSBjb21taXQgbG9nOiBidW5kbGVzIGFyZSBESUZGUywgc28gYSBsb2dcbiAgICogYWxvbmUgY2Fubm90IHJlY29uc3RydWN0IHN0YXRlIHRoYXQgd2FzIHNlZWRlZCBiZWZvcmUgdGhlIHJ1biAoYW5cbiAgICogZXhlY3V0b3IgYGluaXRpYWxDb250ZXh0YCwgYGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0YCwgYSByZXN1bWUnc1xuICAgKiBgY2hlY2twb2ludC5zaGFyZWRTdGF0ZWAsIGEgc3ViZmxvdydzIGBpbnB1dE1hcHBlcmAgc2VlZCkuIFRyYXZlbGxpbmdcbiAgICogd2l0aCB0aGUgbG9nIOKAlCBgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZWAg4oCUIGlzIHdoYXQgbGV0cyBhbiBPRkZMSU5FXG4gICAqIGNvbnN1bWVyIGZvbGQ7IHdpdGhvdXQgaXQgdGhlIGhvbmVzdCBhbnN3ZXIgaXMgYSBwYXJ0aWFsIG9uZVxuICAgKiAoYHN0YXRlQXRgJ3MgYGJhc2lzOiAnbG9nLW9ubHknYCkuXG4gICAqXG4gICAqIFJldHVybnMgYSBmcmVzaCBkZXRhY2hlZCBjbG9uZSBvbiBldmVyeSBjYWxsIOKAlCB0aGUgY2FsbGVyIG93bnMgaXQuXG4gICAqL1xuICBnZXRJbml0aWFsU3RhdGUoKTogYW55IHtcbiAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKHRoaXMuYmFzZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb25zdHJ1Y3RzIHRoZSBmdWxsIHN0YXRlIGF0IGFueSBnaXZlbiBzdGVwLlxuICAgKiBSZXBsYXlzIGNvbW1pdHMgZnJvbSB0aGUgYmVnaW5uaW5nIOKAlCBPKG4pIGJ1dCBsb3cgbWVtb3J5IGZvb3RwcmludC5cbiAgICpcbiAgICogSU5ERVggQ09OVkVOVElPTiDigJQgYHN0ZXBJZHhgIGlzIEVYQ0xVU0lWRTogYG1hdGVyaWFsaXNlKDMpYCBmb2xkcyBjb21taXRzXG4gICAqIDAsIDEgYW5kIDIuIGBzdGF0ZUF0KHNvdXJjZSwgY29tbWl0SWR4KWAgKGZvb3RwcmludGpzL3RyYWNlKSBmb2xkcyB0aGVcbiAgICogc2FtZSBsb2cgYnV0IGl0cyBgY29tbWl0SWR4YCBpcyBJTkNMVVNJVkUsIGJlY2F1c2UgYSByZWFkZXIncyBjdXJzb3IgYXNrc1xuICAgKiBcInRoZSBzdGF0ZSBBVCB0aGlzIHN0b3BcIiwgd2hpY2ggbXVzdCBpbmNsdWRlIHRoYXQgc3RvcCdzIG93biBjb21taXQuIFR3b1xuICAgKiBmb2xkcyBvdmVyIG9uZSBsb2cgd2l0aCBvcHBvc2l0ZSBjb252ZW50aW9uczogY2hlY2sgd2hpY2ggb25lIHlvdSBob2xkLlxuICAgKlxuICAgKiBPbmUgY2xvbmUgb2YgdGhlIGJhc2UgcGVyIGNhbGwsIHRoZW4gZXZlcnkgYnVuZGxlIHJlcGxheWVkIElOVE8gdGhhdFxuICAgKiBwcml2YXRlIGNvcHkgKGBhcHBseVNtYXJ0TWVyZ2VJbnRvYCDigJQgdGhlIGxpdmUgY29tbWl0J3MgY29weS1vbi13cml0ZSBsYXdcbiAgICogYmVsb3cgdGhlIHJvb3QsIDkuMjkuMCwgc28gdGhlIGZvbGQgYW5kIHRoZSBsaXZlIHN0YXRlIGFncmVlIGF0IGV2ZXJ5XG4gICAqIHBhdGgpLiBUaGUgcmVzdWx0IGlzIHRoZSBjYWxsZXInczogaXQgc2hhcmVzIG5vdGhpbmcgd2l0aCB0aGUgYmFzZSBvclxuICAgKiB0aGUgbG9nLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBTaW5jZSA5LjMzLjAg4oCUIHVzZSBgc3RhdGVBdGAgZnJvbSBgZm9vdHByaW50anMvdHJhY2VgLCB3aGljaCBmb2xkcyB0aGUgc2FtZSBsb2dcbiAgICogZnJvbSB0aGUgc2FtZSBiYXNlIChgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZWApIGFuZCBzYXlzIGhvdyBpdCB3YXMgZGVyaXZlZCAoYGJhc2lzYCkuXG4gICAqIE5vdGhpbmcgaW4gdGhlIGxpYnJhcnkgY2FsbHMgdGhpczsgaXQgc3RheXMgZm9yIG9uZSBtaW5vciBhbmQgaXMgdGhlbiByZW1vdmVkLiBNaW5kIHRoZVxuICAgKiBpbmRleDogYG1hdGVyaWFsaXNlKG4pYCBmb2xkcyBjb21taXRzIGAwLi5uLTFgLCBgc3RhdGVBdChzb3VyY2UsIG4gLSAxKWAgdGhlIHNhbWUgY29tbWl0cy5cbiAgICovXG4gIG1hdGVyaWFsaXNlKHN0ZXBJZHggPSB0aGlzLnN0ZXBzLmxlbmd0aCk6IGFueSB7XG4gICAgY29uc3Qgb3V0ID0gc3RydWN0dXJlZENsb25lKHRoaXMuYmFzZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGVwSWR4OyBpKyspIHtcbiAgICAgIGNvbnN0IHsgb3ZlcndyaXRlLCB1cGRhdGVzLCB0cmFjZSB9ID0gdGhpcy5zdGVwc1tpXTtcbiAgICAgIGFwcGx5U21hcnRNZXJnZUludG8ob3V0LCB1cGRhdGVzIGFzIE1lbW9yeVBhdGNoLCBvdmVyd3JpdGUgYXMgTWVtb3J5UGF0Y2gsIHRyYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0cyBhIGNvbW1pdCBidW5kbGUgZm9yIGEgZmluaXNoZWQgc3RhZ2UsIGFuZCBGUkVFWkVTIGl0IChzZWUgdGhlIG1vZHVsZSBkb2MpOiB0aGUgYnVuZGxlXG4gICAqIGlzIHN0YW1wZWQgd2l0aCBpdHMgcG9zaXRpb24sIHRoZW4gZGVlcC1mcm96ZW4sIHRoZW4gYXBwZW5kZWQuIFRoZSBlbmdpbmUgaGFuZHMgaXQgYSBidW5kbGVcbiAgICogYnVpbHQgZm9yIHRoZSBsb2cgYWxvbmU7IGEgY2FsbGVyIG9mIHRoaXMgY2xhc3MgKGBmb290cHJpbnRqcy9hZHZhbmNlZGApIGhhbmRzIG92ZXIgYSBidW5kbGUgaXRcbiAgICogd2lsbCBubyBsb25nZXIgZWRpdCDigJQgaXRzIG93biBvYmplY3QgaXMgdGhlIG9uZSBmcm96ZW4uXG4gICAqL1xuICByZWNvcmQoYnVuZGxlOiBDb21taXRCdW5kbGUpOiB2b2lkIHtcbiAgICBidW5kbGUuaWR4ID0gdGhpcy5zdGVwcy5sZW5ndGg7XG4gICAgZGVlcEZyZWV6ZShidW5kbGUsICdpbmRpY2VzJyk7XG4gICAgdGhpcy5zdGVwcy5wdXNoKGJ1bmRsZSk7XG4gIH1cblxuICAvKiogR2V0cyBhbGwgcmVjb3JkZWQgY29tbWl0IGJ1bmRsZXMg4oCUIHRoZSBsaXZlIGFycmF5OyBldmVyeSBidW5kbGUgaW4gaXQgaXMgZnJvemVuLiAqL1xuICBsaXN0KCk6IENvbW1pdEJ1bmRsZVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwcztcbiAgfVxuXG4gIC8qKiBOdW1iZXIgb2YgcmVjb3JkZWQgY29tbWl0cy4gKi9cbiAgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN0ZXBzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiBJbW11dGFibGUgaWRlbnRpdHkgb2YgdGhpcyBsb2csIGFic2VudCB1bnRpbCB0aGUgZW5naW5lIGJpbmRzIGl0LiAqL1xuICBnZXQgYWRkcmVzcygpOiBMb2dBZGRyZXNzIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2VBZGRyZXNzO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCBCaW5kIG9uY2U7IHJlc3VtaW5nIHRoZSBzYW1lIGxvZyBtdXN0IG5vdCByZW5hbWUgaXRzIGVhcmxpZXIgcG9zaXRpb25zLiAqL1xuICBiaW5kQWRkcmVzcyhsb2dSdW5JZDogc3RyaW5nLCBkcmlsbFBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc291cmNlQWRkcmVzc1JldGlyZWQpIHJldHVybjtcbiAgICB0aGlzLnNvdXJjZUFkZHJlc3MgPz89IE9iamVjdC5mcmVlemUoeyBsb2dSdW5JZCwgZHJpbGxQYXRoOiBPYmplY3QuZnJlZXplKFsuLi5kcmlsbFBhdGhdKSB9KTtcbiAgfVxuXG4gIC8qKiBPKDEpIHNvdXJjZS10aW1lIGNhcHR1cmUuIE5vIGNvdW50ZXIsIG9ic2VydmVyIGJvb2trZWVwaW5nLCBvciBmdXR1cmUgY29tbWl0IHByZWRpY3Rpb24uICovXG4gIGNhcHR1cmVQb3NpdGlvbihydW5JZDogc3RyaW5nKTogRW1pdFNvdXJjZVBvc2l0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuc291cmNlQWRkcmVzcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IHJ1bklkLCAuLi50aGlzLnNvdXJjZUFkZHJlc3MsIGNvbW1pdHRlZFRocm91Z2hJZHg6IHRoaXMuc3RlcHMubGVuZ3RoIC0gMSB9KTtcbiAgfVxuXG4gIC8qKiBXaXBlcyBoaXN0b3J5ICh1c2VmdWwgZm9yIHRlc3QgcmVzZXRzKS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdGVwcyA9IFtdO1xuICAgIC8vIEEgcmVzZXQgcHJlZml4IGNhbm5vdCByZXVzZSBvbGQgY29vcmRpbmF0ZXMsIGV2ZW4gaWYgYW5vdGhlciBzdGFnZSBvZlxuICAgIC8vIHRoZSBTQU1FIGxlZyBiaW5kcyBpdCBhZ2Fpbi4gS2VlcCBjbGVhcidzIGRhdGEgYmVoYXZpb3IsIGJ1dCByZXRpcmVcbiAgICAvLyBhZGRyZXNzaW5nIGZvciB0aGlzIGxvZzsga25vd24gY29vcmRpbmF0ZXMgcmVxdWlyZSBhIGZyZXNoIEV2ZW50TG9nLlxuICAgIHRoaXMuc291cmNlQWRkcmVzcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNvdXJjZUFkZHJlc3NSZXRpcmVkID0gdHJ1ZTtcbiAgfVxufVxuIl19
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRMb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9FdmVudExvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqRCxNQUFNLE9BQU8sUUFBUTtJQUNuQiw2REFBNkQ7SUFDckQsSUFBSSxDQUFNO0lBQ2xCLHNDQUFzQztJQUM5QixLQUFLLEdBQW1CLEVBQUUsQ0FBQztJQUMzQixhQUFhLENBQWM7SUFDM0Isb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBRXJDLFlBQVksYUFBa0I7UUFDNUIsdUVBQXVFO1FBQ3ZFLHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILGVBQWU7UUFDYixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9CRztJQUNILFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsbUJBQW1CLENBQUMsR0FBRyxFQUFFLE9BQXNCLEVBQUUsU0FBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsTUFBb0I7UUFDekIsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMvQixZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzNCLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCx3RkFBd0Y7SUFDeEYsV0FBVyxDQUFDLFFBQWdCLEVBQUUsU0FBNEI7UUFDeEQsSUFBSSxJQUFJLENBQUMsb0JBQW9CO1lBQUUsT0FBTztRQUN0QyxJQUFJLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0YsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDMUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLHdFQUF3RTtRQUN4RSxzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFdmVudExvZyDigJQgVGltZS10cmF2ZWwgc25hcHNob3Qgc3RvcmFnZSBmb3IgZmxvd2NoYXJ0IGV4ZWN1dGlvblxuICpcbiAqIExpa2UgZ2l0IGhpc3Rvcnk6IHN0b3JlcyBjb21taXQgYnVuZGxlcyAoZGlmZnMpLCBub3QgZnVsbCBzbmFwc2hvdHMuXG4gKlxuICogVEhFIFJFQ09SRCBJUyBJTU1VVEFCTEUgRlJPTSBgcmVjb3JkYCAoRjMsIHJ1bGluZyBSMykuIEV2ZXJ5IGJ1bmRsZSBpcyBkZWVwLWZyb3plbiBhcyBpdCBpc1xuICogcmVjb3JkZWQg4oCUIHRoZSBidW5kbGUsIGBvdmVyd3JpdGVgIGFuZCBgdXBkYXRlc2AgYXQgZXZlcnkgZGVwdGgsIHRoZSB0cmFjZSBhbmQgZWFjaCByb3csIHRoZVxuICogcm93J3MgYHJlYWRLZXlzYCwgYHJlZGFjdGVkUGF0aHNgLCBgdGFnc2AsIGB1bnRyYWNrZWRTb3VyY2VzYCDigJQgc28gYSBob2xkZXIgb2YgYSBzbmFwc2hvdCBjYW4gbm9cbiAqIGxvbmdlciByZXdyaXRlIHRoZSBoaXN0b3J5IGV2ZXJ5IGxhdGVyIGFuc3dlciBpcyBmb2xkZWQgZnJvbTogYW4gYXNzaWdubWVudCBpbnRvIGEgYnVuZGxlIHRocm93c1xuICogYSBgVHlwZUVycm9yYCBpbiBzdHJpY3QgY29kZS4gU2FmZSBiZWNhdXNlIG5vdGhpbmcgb3V0c2lkZSB0aGUgbG9nIGhvbGRzIGEgYnVuZGxlJ3MgY29udGFpbmVyczpcbiAqIHRoZSBsb2cncyBwYXlsb2FkIGlzIHRoZSBjb21taXQncyBvd24gY29weSAoYHJlY29yZENvbW1pdGAgaGFuZHMgaXQgdGhlIG91dHB1dCBvZlxuICogYHNjcnViUGF0Y2hgKSwgYW5kIGxpdmUgc3RhdGUsIHRoZSByZWRhY3RlZCBtaXJyb3IgYW5kIHdyaXRlIHJldGVudGlvbiBlYWNoIHRha2UgdGhlaXIgb3duIGNvcHlcbiAqIChgdmVyYnMudHMgwrcgZm9sZFJvd3NgIGRldGFjaGVzLCBgU3RhZ2VDb250ZXh0IMK3IHJldGFpbmVkRm9ybWAgY2xvbmVzKSDigJQgcGlubmVkIGJ5XG4gKiB0ZXN0L2xpYi9tZW1vcnkvcHJvcGVydHkvcmVjb3JkLXJlYWNoYWJpbGl0eS5wcm9wZXJ0eS50ZXN0LnRzLlxuICpcbiAqIFdoYXQgYE9iamVjdC5mcmVlemVgIGNhbm5vdCBzZWFsIOKAlCBhIERhdGUncyB0aW1lLCBhIE1hcCdzIG9yIFNldCdzIGVudHJpZXMsIGEgYnVmZmVyJ3MgYnl0ZXMsIGFcbiAqIFJlZ0V4cCwgYW4gRXJyb3IncyBzdGFjayDigJQgaXMgbmV2ZXIgaGFuZGVkIG91dCB0byBhIHJlYWRlciAoOS40NC4yKTogYHJlY29yZGAgcmVtZW1iZXJzIHRoYXQgYVxuICogYnVuZGxlIGhvbGRzIHN1Y2ggYSB2YWx1ZSAoYGNhcHR1cmUvZnJlZXplLnRzIMK3IGZyZWV6ZVJlY29yZGApLCBhbmQgYGxpc3QoKWAg4oCUIGxpa2UgdGhlIHB1YmxpY1xuICogc25hcHNob3QsIGBydW5uZXIvc25hcHNob3QudHMgwrcgc2VydmVkU25hcHNob3RgIOKAlCBzZXJ2ZXMgdGhhdCBidW5kbGUgYXMgYSBjb3B5IG9mIGl0cyBvcGVuIHBhdGhzXG4gKiAoYHNlcnZlUmVjb3JkYCwgbWFwcGVkIGF0IGl0cyBmaXJzdCBzZXJ2ZSk6IGZyZXNoIGZyb3plbiBjb250YWluZXJzIGRvd24gdG8gZWFjaCBzdWNoIHZhbHVlLCBhXG4gKiBmcmVzaCBjb3B5IG9mIGl0LCBldmVyeSBvdGhlciBwYXJ0IHRoZSBsb2cncyBvd24uIEEgcmVhZGVyIGVkaXRzIG9ubHkgaXRzIG93biBjb3B5OyBldmVyeSBsYXRlclxuICogc2VydmUgcmVhZHMgdGhlIHJlY29yZCBhcyByZWNvcmRlZC4gYHJlY29yZGVkKClgIGlzIHRoZSBlbmdpbmUncyBvd24sIHVuc2VydmVkIHJlYWQuIE5hbWVkIGhvbGVzOiBhbiBvYmplY3QgaHVuZyBvbiBhbiBhcnJheSBFWFBBTkRPIChhcnJheXMgYXJlIHdhbGtlZFxuICogYnkgaW5kZXgg4oCUIHRoZSBgJ2luZGljZXMnYCB3YWxrLCB3aGljaCBrZWVwcyB0aGUgZnJlZXplIGluc2lkZSBpdHMgYnVkZ2V0OyBhbiBleHBhbmRvIGlzIG91dCBvZlxuICogY29udHJhY3QgZm9yIHN0YXRlKSBhbmQgYSBgU2hhcmVkQXJyYXlCdWZmZXJgIChldmVyeSBjb3B5IHNoYXJlcyBpdHMgbWVtb3J5KS4gQSBmcm96ZW4gUmVnRXhwJ3NcbiAqIGBsYXN0SW5kZXhgIGlzIHJlYWQtb25seSwgc28gYSBgL2dgIG9yIGAveWAgcmVnZXggcmVhZCBmcm9tIGEgYnVuZGxlIHRocm93cyB3aGVuIGBleGVjYCBvclxuICogYHJlcGxhY2VgIGFkdmFuY2UgaXQuXG4gKi9cblxuaW1wb3J0IHsgZnJlZXplUmVjb3JkLCBzZXJ2ZVJlY29yZCB9IGZyb20gJy4uL2NhcHR1cmUvZnJlZXplLmpzJztcbmltcG9ydCB0eXBlIHsgRW1pdFNvdXJjZVBvc2l0aW9uLCBMb2dBZGRyZXNzIH0gZnJvbSAnLi9ldmVudFBvc2l0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBNZW1vcnlQYXRjaCB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgYXBwbHlTbWFydE1lcmdlSW50byB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5leHBvcnQgY2xhc3MgRXZlbnRMb2cge1xuICAvKiogQmFzZSBzbmFwc2hvdCBCRUZPUkUgdGhlIGZpcnN0IHN0YWdlIG11dGF0ZXMgYW55dGhpbmcuICovXG4gIHByaXZhdGUgYmFzZTogYW55O1xuICAvKiogT3JkZXJlZCBsaXN0IG9mIGNvbW1pdCBidW5kbGVzLiAqL1xuICBwcml2YXRlIHN0ZXBzOiBDb21taXRCdW5kbGVbXSA9IFtdO1xuICBwcml2YXRlIHNvdXJjZUFkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICBwcml2YXRlIHNvdXJjZUFkZHJlc3NSZXRpcmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoaW5pdGlhbE1lbW9yeTogYW55KSB7XG4gICAgLy8gTm9ybWFsaXNlZCB0byBhbiBvYmplY3Q6IHRoZSBiYXNlIGlzIGEgU1RBVEUsIGFuZCBldmVyeSBmb2xkIG92ZXIgaXRcbiAgICAvLyAoYG1hdGVyaWFsaXNlYCwgYHN0YXRlQXRgKSBhcHBsaWVzIHBhdGggd3JpdGVzIHRvIGl0LiBgdW5kZWZpbmVkYCDigJRcbiAgICAvLyB3aGF0IGEgcnVuIHdpdGggbm8gYGluaXRpYWxDb250ZXh0YCB1c2VkIHRvIHN0b3JlIGhlcmUg4oCUIG1hZGUgZXZlcnlcbiAgICAvLyBvbmUgb2YgdGhvc2UgZm9sZHMgdGhyb3cgb24gdGhlIGZpcnN0IGBzZXRgLlxuICAgIHRoaXMuYmFzZSA9IGluaXRpYWxNZW1vcnkgPT09IHVuZGVmaW5lZCA/IHt9IDogc3RydWN0dXJlZENsb25lKGluaXRpYWxNZW1vcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkIEJBU0Ug4oCUIHRoZSBzdGF0ZSBhcyBpdCBzdG9vZCBiZWZvcmUgdGhlIGZpcnN0IGNvbW1pdC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgY29tbWl0IGxvZzogYnVuZGxlcyBhcmUgRElGRlMsIHNvIGEgbG9nXG4gICAqIGFsb25lIGNhbm5vdCByZWNvbnN0cnVjdCBzdGF0ZSB0aGF0IHdhcyBzZWVkZWQgYmVmb3JlIHRoZSBydW4gKGFuXG4gICAqIGV4ZWN1dG9yIGBpbml0aWFsQ29udGV4dGAsIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGAsIGEgcmVzdW1lJ3NcbiAgICogYGNoZWNrcG9pbnQuc2hhcmVkU3RhdGVgLCBhIHN1YmZsb3cncyBgaW5wdXRNYXBwZXJgIHNlZWQpLiBUcmF2ZWxsaW5nXG4gICAqIHdpdGggdGhlIGxvZyDigJQgYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgIOKAlCBpcyB3aGF0IGxldHMgYW4gT0ZGTElORVxuICAgKiBjb25zdW1lciBmb2xkOyB3aXRob3V0IGl0IHRoZSBob25lc3QgYW5zd2VyIGlzIGEgcGFydGlhbCBvbmVcbiAgICogKGBzdGF0ZUF0YCdzIGBiYXNpczogJ2xvZy1vbmx5J2ApLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgZnJlc2ggZGV0YWNoZWQgY2xvbmUgb24gZXZlcnkgY2FsbCDigJQgdGhlIGNhbGxlciBvd25zIGl0LlxuICAgKi9cbiAgZ2V0SW5pdGlhbFN0YXRlKCk6IGFueSB7XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZSh0aGlzLmJhc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29uc3RydWN0cyB0aGUgZnVsbCBzdGF0ZSBhdCBhbnkgZ2l2ZW4gc3RlcC5cbiAgICogUmVwbGF5cyBjb21taXRzIGZyb20gdGhlIGJlZ2lubmluZyDigJQgTyhuKSBidXQgbG93IG1lbW9yeSBmb290cHJpbnQuXG4gICAqXG4gICAqIElOREVYIENPTlZFTlRJT04g4oCUIGBzdGVwSWR4YCBpcyBFWENMVVNJVkU6IGBtYXRlcmlhbGlzZSgzKWAgZm9sZHMgY29tbWl0c1xuICAgKiAwLCAxIGFuZCAyLiBgc3RhdGVBdChzb3VyY2UsIGNvbW1pdElkeClgIChmb290cHJpbnRqcy90cmFjZSkgZm9sZHMgdGhlXG4gICAqIHNhbWUgbG9nIGJ1dCBpdHMgYGNvbW1pdElkeGAgaXMgSU5DTFVTSVZFLCBiZWNhdXNlIGEgcmVhZGVyJ3MgY3Vyc29yIGFza3NcbiAgICogXCJ0aGUgc3RhdGUgQVQgdGhpcyBzdG9wXCIsIHdoaWNoIG11c3QgaW5jbHVkZSB0aGF0IHN0b3AncyBvd24gY29tbWl0LiBUd29cbiAgICogZm9sZHMgb3ZlciBvbmUgbG9nIHdpdGggb3Bwb3NpdGUgY29udmVudGlvbnM6IGNoZWNrIHdoaWNoIG9uZSB5b3UgaG9sZC5cbiAgICpcbiAgICogT25lIGNsb25lIG9mIHRoZSBiYXNlIHBlciBjYWxsLCB0aGVuIGV2ZXJ5IGJ1bmRsZSByZXBsYXllZCBJTlRPIHRoYXRcbiAgICogcHJpdmF0ZSBjb3B5IChgYXBwbHlTbWFydE1lcmdlSW50b2Ag4oCUIHRoZSBsaXZlIGNvbW1pdCdzIGNvcHktb24td3JpdGUgbGF3XG4gICAqIGJlbG93IHRoZSByb290LCA5LjI5LjAsIHNvIHRoZSBmb2xkIGFuZCB0aGUgbGl2ZSBzdGF0ZSBhZ3JlZSBhdCBldmVyeVxuICAgKiBwYXRoKS4gVGhlIHJlc3VsdCBpcyB0aGUgY2FsbGVyJ3M6IGl0IHNoYXJlcyBub3RoaW5nIHdpdGggdGhlIGJhc2Ugb3JcbiAgICogdGhlIGxvZy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgU2luY2UgOS4zMy4wIOKAlCB1c2UgYHN0YXRlQXRgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYCwgd2hpY2ggZm9sZHMgdGhlIHNhbWUgbG9nXG4gICAqIGZyb20gdGhlIHNhbWUgYmFzZSAoYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgKSBhbmQgc2F5cyBob3cgaXQgd2FzIGRlcml2ZWQgKGBiYXNpc2ApLlxuICAgKiBOb3RoaW5nIGluIHRoZSBsaWJyYXJ5IGNhbGxzIHRoaXM7IGl0IHN0YXlzIGZvciBvbmUgbWlub3IgYW5kIGlzIHRoZW4gcmVtb3ZlZC4gTWluZCB0aGVcbiAgICogaW5kZXg6IGBtYXRlcmlhbGlzZShuKWAgZm9sZHMgY29tbWl0cyBgMC4ubi0xYCwgYHN0YXRlQXQoc291cmNlLCBuIC0gMSlgIHRoZSBzYW1lIGNvbW1pdHMuXG4gICAqL1xuICBtYXRlcmlhbGlzZShzdGVwSWR4ID0gdGhpcy5zdGVwcy5sZW5ndGgpOiBhbnkge1xuICAgIGNvbnN0IG91dCA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLmJhc2UpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RlcElkeDsgaSsrKSB7XG4gICAgICBjb25zdCB7IG92ZXJ3cml0ZSwgdXBkYXRlcywgdHJhY2UgfSA9IHRoaXMuc3RlcHNbaV07XG4gICAgICBhcHBseVNtYXJ0TWVyZ2VJbnRvKG91dCwgdXBkYXRlcyBhcyBNZW1vcnlQYXRjaCwgb3ZlcndyaXRlIGFzIE1lbW9yeVBhdGNoLCB0cmFjZSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdHMgYSBjb21taXQgYnVuZGxlIGZvciBhIGZpbmlzaGVkIHN0YWdlLCBhbmQgRlJFRVpFUyBpdCAoc2VlIHRoZSBtb2R1bGUgZG9jKTogdGhlIGJ1bmRsZVxuICAgKiBpcyBzdGFtcGVkIHdpdGggaXRzIHBvc2l0aW9uLCB0aGVuIGRlZXAtZnJvemVuLCB0aGVuIGFwcGVuZGVkLiBUaGUgZW5naW5lIGhhbmRzIGl0IGEgYnVuZGxlXG4gICAqIGJ1aWx0IGZvciB0aGUgbG9nIGFsb25lOyBhIGNhbGxlciBvZiB0aGlzIGNsYXNzIChgZm9vdHByaW50anMvYWR2YW5jZWRgKSBoYW5kcyBvdmVyIGEgYnVuZGxlIGl0XG4gICAqIHdpbGwgbm8gbG9uZ2VyIGVkaXQg4oCUIGl0cyBvd24gb2JqZWN0IGlzIHRoZSBvbmUgZnJvemVuLlxuICAgKi9cbiAgcmVjb3JkKGJ1bmRsZTogQ29tbWl0QnVuZGxlKTogdm9pZCB7XG4gICAgYnVuZGxlLmlkeCA9IHRoaXMuc3RlcHMubGVuZ3RoO1xuICAgIGZyZWV6ZVJlY29yZChidW5kbGUsICdpbmRpY2VzJyk7XG4gICAgdGhpcy5zdGVwcy5wdXNoKGJ1bmRsZSk7XG4gIH1cblxuICAvKipcbiAgICogRXZlcnkgcmVjb3JkZWQgY29tbWl0IGJ1bmRsZSwgQVMgU0VSVkVEICg5LjQ0LjIpOiBhIG5ldyBhcnJheSBlYWNoIGNhbGw7IGEgYnVuZGxlIGZyZWV6aW5nIHNlYWxlZFxuICAgKiB3aG9sZSBpcyB0aGUgbG9nJ3Mgb3duIChmcm96ZW4pIG9iamVjdCwgb25lIGhvbGRpbmcgYSBEYXRlLCBNYXAsIGJ1ZmZlciDigKYgaXMgYSBjb3B5IG9mIGl0cyBvcGVuXG4gICAqIHBhdGhzIChgY2FwdHVyZS9mcmVlemUudHMgwrcgc2VydmVSZWNvcmRgKSDigJQgdGhlIHJlYWRlcidzIG93biwgc28gbm8gZWRpdCByZWFjaGVzIHRoZSBsb2cuXG4gICAqL1xuICBsaXN0KCk6IENvbW1pdEJ1bmRsZVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwcy5tYXAoc2VydmVSZWNvcmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBUaGUgYnVuZGxlcyBhcyB0aGUgbG9nIGhvbGRzIHRoZW0g4oCUIGVhY2ggZnJvemVuLCBOT1Qgc2VydmVkIOKAlCBpbiBhIG5ldyBhcnJheSwgc28gYSBob2xkZXInc1xuICAgKiBgc3BsaWNlYCByZWFjaGVzIG9ubHkgaXRzIG93bi4gRm9yIHRoZSBlbmdpbmUncyBvd24gc25hcHNob3QgKGBFeGVjdXRpb25SdW50aW1lIMK3IGdldFNuYXBzaG90YCwgd2hpY2hcbiAgICogYSBzdWJmbG93IG1vdW50IHRha2VzIG9uY2UgcGVyIG1vdW50KSwgc28gdGhlIHJ1biBzZXJ2ZXMgbm90aGluZzsgYSByZWFkZXIgaXMgc2VydmVkIGJ5IGBsaXN0KClgIGFuZFxuICAgKiBgZ2V0U25hcHNob3QoKS5jb21taXRMb2dgLiBBIGtub3duIG9wZW4gZG9vciAoQ0hBTkdFTE9HIDkuNDQuMik6IGEgaG9sZGVyIG9mIHRoZXNlIGJ1bmRsZXMgY2FuIHN0aWxsXG4gICAqIGVkaXQgYSBEYXRlLCBNYXAgb3IgYnVmZmVyIGluc2lkZSB0aGVtLlxuICAgKi9cbiAgcmVjb3JkZWQoKTogQ29tbWl0QnVuZGxlW10ge1xuICAgIHJldHVybiB0aGlzLnN0ZXBzLnNsaWNlKCk7XG4gIH1cblxuICAvKiogTnVtYmVyIG9mIHJlY29yZGVkIGNvbW1pdHMuICovXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwcy5sZW5ndGg7XG4gIH1cblxuICAvKiogSW1tdXRhYmxlIGlkZW50aXR5IG9mIHRoaXMgbG9nLCBhYnNlbnQgdW50aWwgdGhlIGVuZ2luZSBiaW5kcyBpdC4gKi9cbiAgZ2V0IGFkZHJlc3MoKTogTG9nQWRkcmVzcyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlQWRkcmVzcztcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgQmluZCBvbmNlOyByZXN1bWluZyB0aGUgc2FtZSBsb2cgbXVzdCBub3QgcmVuYW1lIGl0cyBlYXJsaWVyIHBvc2l0aW9ucy4gKi9cbiAgYmluZEFkZHJlc3MobG9nUnVuSWQ6IHN0cmluZywgZHJpbGxQYXRoOiByZWFkb25seSBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNvdXJjZUFkZHJlc3NSZXRpcmVkKSByZXR1cm47XG4gICAgdGhpcy5zb3VyY2VBZGRyZXNzID8/PSBPYmplY3QuZnJlZXplKHsgbG9nUnVuSWQsIGRyaWxsUGF0aDogT2JqZWN0LmZyZWV6ZShbLi4uZHJpbGxQYXRoXSkgfSk7XG4gIH1cblxuICAvKiogTygxKSBzb3VyY2UtdGltZSBjYXB0dXJlLiBObyBjb3VudGVyLCBvYnNlcnZlciBib29ra2VlcGluZywgb3IgZnV0dXJlIGNvbW1pdCBwcmVkaWN0aW9uLiAqL1xuICBjYXB0dXJlUG9zaXRpb24ocnVuSWQ6IHN0cmluZyk6IEVtaXRTb3VyY2VQb3NpdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZUFkZHJlc3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyBydW5JZCwgLi4udGhpcy5zb3VyY2VBZGRyZXNzLCBjb21taXR0ZWRUaHJvdWdoSWR4OiB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEgfSk7XG4gIH1cblxuICAvKiogV2lwZXMgaGlzdG9yeSAodXNlZnVsIGZvciB0ZXN0IHJlc2V0cykuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc3RlcHMgPSBbXTtcbiAgICAvLyBBIHJlc2V0IHByZWZpeCBjYW5ub3QgcmV1c2Ugb2xkIGNvb3JkaW5hdGVzLCBldmVuIGlmIGFub3RoZXIgc3RhZ2Ugb2ZcbiAgICAvLyB0aGUgU0FNRSBsZWcgYmluZHMgaXQgYWdhaW4uIEtlZXAgY2xlYXIncyBkYXRhIGJlaGF2aW9yLCBidXQgcmV0aXJlXG4gICAgLy8gYWRkcmVzc2luZyBmb3IgdGhpcyBsb2c7IGtub3duIGNvb3JkaW5hdGVzIHJlcXVpcmUgYSBmcmVzaCBFdmVudExvZy5cbiAgICB0aGlzLnNvdXJjZUFkZHJlc3MgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zb3VyY2VBZGRyZXNzUmV0aXJlZCA9IHRydWU7XG4gIH1cbn1cbiJdfQ==
@@ -157,10 +157,10 @@ export declare class StageContext {
157
157
  /** Capture from this frame's OWN log. A manual/unaddressable frame stays unknown. */
158
158
  captureEmitPosition(): EmitSourcePosition | undefined;
159
159
  /**
160
- * Install a parallel redacted mirror. Subsequent `commit()` calls will
161
- * apply the already-computed redacted patches to this mirror in addition
162
- * to the raw `sharedMemory` + `eventLog`. Child / next contexts inherit
163
- * the mirror via `createNext` / `createChild`.
160
+ * Install a parallel redacted mirror. Subsequent `commit()` calls apply
161
+ * the already-computed redacted patches — the ones the log records — to
162
+ * this mirror, beside the raw patches on `sharedMemory` (`recordCommit`).
163
+ * Child / next contexts inherit the mirror via `createNext` / `createChild`.
164
164
  *
165
165
  * Called on a runtime's root frame by `ExecutionRuntime` when the run's policy keeps a mirror.
166
166
  */
@@ -384,19 +384,6 @@ export declare class StageContext {
384
384
  * surfaced as `CommitBundle.untrackedSources` on this stage's commit.
385
385
  */
386
386
  markUntrackedSource(source: UntrackedSource): void;
387
- /**
388
- * RFC-003 D2: the `untrackedSources` bundle fragment for commit() — `{}`
389
- * when nothing was marked, so the spread keeps the field ABSENT (not
390
- * empty-array-valued) and untouched charts stay byte-identical.
391
- */
392
- private untrackedSourcesFragment;
393
- /**
394
- * The `tags` bundle fragment for commit() — `{}` when the stage declares
395
- * none, so an untagged chart's log is byte-identical to 9.20.0. Added after
396
- * the payload encoding, so it is independent of `commitValues`; names, so
397
- * redaction never sees it.
398
- */
399
- private tagsFragment;
400
387
  /** Register an observer that fires after commit() applies patches.
401
388
  * Used by ScopeFacade to dispatch ScopeRecorder.onCommit events. */
402
389
  setCommitObserver(observer: (mutations: Record<string, {
@@ -494,22 +481,6 @@ export declare class StageContext {
494
481
  * reads them post-run for the execution-tree snapshot.
495
482
  */
496
483
  commit(phase?: CommitPhase): void;
497
- /**
498
- * THE bundle of one commit (F10): the payload (an empty one on the lazy
499
- * path, the buffer's on the other), then the stage's names, then the
500
- * fragments — spread once, here, for both commit paths. Key order is the
501
- * record's bytes: payload keys, `stage`, `stageId`, `runtimeStageId`,
502
- * `untrackedSources?`, `tags?`, `phase?`.
503
- */
504
- private bundleFor;
505
- /**
506
- * The tail of both commit paths: notify the observer (ScopeFacade) with the
507
- * tracked mutations, THEN release the staging state (#13b — see `commit`),
508
- * so the observer sees the world as it was. D2's untracked-source markers
509
- * and the declared tags release with it: one stamp per execution, so the
510
- * engine's double-commit paths record them exactly once.
511
- */
512
- private finishCommit;
513
484
  /**
514
485
  * Throw away everything this stage has STAGED, without committing any of it.
515
486
  *