@ny4n/chord 0.0.0-stage → 1.0.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/LICENSE +21 -0
- package/README.md +261 -2
- package/dist/api.d.ts +20 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +77 -0
- package/dist/api.js.map +1 -0
- package/dist/bundler.d.ts +6 -0
- package/dist/bundler.d.ts.map +1 -0
- package/dist/bundler.js +3 -0
- package/dist/bundler.js.map +1 -0
- package/dist/context/index.d.ts +24 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +97 -0
- package/dist/context/index.js.map +1 -0
- package/dist/delta/apply-immutable-trusted.d.ts +4 -0
- package/dist/delta/apply-immutable-trusted.d.ts.map +1 -0
- package/dist/delta/apply-immutable-trusted.js +127 -0
- package/dist/delta/apply-immutable-trusted.js.map +1 -0
- package/dist/delta/core.d.ts +108 -0
- package/dist/delta/core.d.ts.map +1 -0
- package/dist/delta/core.js +645 -0
- package/dist/delta/core.js.map +1 -0
- package/dist/delta/diff.d.ts +5 -0
- package/dist/delta/diff.d.ts.map +1 -0
- package/dist/delta/diff.js +433 -0
- package/dist/delta/diff.js.map +1 -0
- package/dist/delta/draft.d.ts +5 -0
- package/dist/delta/draft.d.ts.map +1 -0
- package/dist/delta/draft.js +2 -0
- package/dist/delta/draft.js.map +1 -0
- package/dist/delta/index.d.ts +5 -0
- package/dist/delta/index.d.ts.map +1 -0
- package/dist/delta/index.js +6 -0
- package/dist/delta/index.js.map +1 -0
- package/dist/delta/revision-validator.d.ts +7 -0
- package/dist/delta/revision-validator.d.ts.map +1 -0
- package/dist/delta/revision-validator.js +71 -0
- package/dist/delta/revision-validator.js.map +1 -0
- package/dist/delta/tracker.d.ts +26 -0
- package/dist/delta/tracker.d.ts.map +1 -0
- package/dist/delta/tracker.js +2069 -0
- package/dist/delta/tracker.js.map +1 -0
- package/dist/facets/host.d.ts +12 -0
- package/dist/facets/host.d.ts.map +1 -0
- package/dist/facets/host.js +763 -0
- package/dist/facets/host.js.map +1 -0
- package/dist/facets/loader.d.ts +3 -0
- package/dist/facets/loader.d.ts.map +1 -0
- package/dist/facets/loader.js +5 -0
- package/dist/facets/loader.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/json.d.ts +10 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +124 -0
- package/dist/json.js.map +1 -0
- package/dist/node/bundle-loader.d.ts +30 -0
- package/dist/node/bundle-loader.d.ts.map +1 -0
- package/dist/node/bundle-loader.js +377 -0
- package/dist/node/bundle-loader.js.map +1 -0
- package/dist/node/bundle.d.ts +26 -0
- package/dist/node/bundle.d.ts.map +1 -0
- package/dist/node/bundle.js +183 -0
- package/dist/node/bundle.js.map +1 -0
- package/dist/node/manifest.d.ts +36 -0
- package/dist/node/manifest.d.ts.map +1 -0
- package/dist/node/manifest.js +6 -0
- package/dist/node/manifest.js.map +1 -0
- package/dist/node/package.d.ts +15 -0
- package/dist/node/package.d.ts.map +1 -0
- package/dist/node/package.js +199 -0
- package/dist/node/package.js.map +1 -0
- package/dist/node.d.ts +5 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +3 -0
- package/dist/node.js.map +1 -0
- package/dist/services/consumer.d.ts +11 -0
- package/dist/services/consumer.d.ts.map +1 -0
- package/dist/services/consumer.js +585 -0
- package/dist/services/consumer.js.map +1 -0
- package/dist/services/errors.d.ts +8 -0
- package/dist/services/errors.d.ts.map +1 -0
- package/dist/services/errors.js +22 -0
- package/dist/services/errors.js.map +1 -0
- package/dist/services/handle.d.ts +15 -0
- package/dist/services/handle.d.ts.map +1 -0
- package/dist/services/handle.js +101 -0
- package/dist/services/handle.js.map +1 -0
- package/dist/services/instances.d.ts +26 -0
- package/dist/services/instances.d.ts.map +1 -0
- package/dist/services/instances.js +140 -0
- package/dist/services/instances.js.map +1 -0
- package/dist/services/loopback.d.ts +5 -0
- package/dist/services/loopback.d.ts.map +1 -0
- package/dist/services/loopback.js +15 -0
- package/dist/services/loopback.js.map +1 -0
- package/dist/services/provider.d.ts +37 -0
- package/dist/services/provider.d.ts.map +1 -0
- package/dist/services/provider.js +521 -0
- package/dist/services/provider.js.map +1 -0
- package/dist/services/state-codec.d.ts +15 -0
- package/dist/services/state-codec.d.ts.map +1 -0
- package/dist/services/state-codec.js +133 -0
- package/dist/services/state-codec.js.map +1 -0
- package/dist/services/state-internals.d.ts +13 -0
- package/dist/services/state-internals.d.ts.map +1 -0
- package/dist/services/state-internals.js +10 -0
- package/dist/services/state-internals.js.map +1 -0
- package/dist/services/state.d.ts +28 -0
- package/dist/services/state.d.ts.map +1 -0
- package/dist/services/state.js +397 -0
- package/dist/services/state.js.map +1 -0
- package/dist/services/wire.d.ts +63 -0
- package/dist/services/wire.d.ts.map +1 -0
- package/dist/services/wire.js +186 -0
- package/dist/services/wire.js.map +1 -0
- package/dist/types.d.ts +277 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +71 -5
- package/src/delta/README.md +191 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/delta/tracker.ts"],"names":[],"mappings":"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","sourcesContent":["import { copyJson } from \"../json.ts\";\nimport type { JsonValue } from \"../types.ts\";\nimport { applyImmutableTrusted } from \"./apply-immutable-trusted.ts\";\nimport { applyImmutable, type NonEmptyPath, type Op, overlap, type Path, RESERVED_SEGMENTS } from \"./core.ts\";\nimport type { Draft } from \"./draft.ts\";\n\nexport type { Draft, JsonValue, Op };\n\ntype Primitive = null | boolean | number | string;\ntype Container = JsonValue[] | Record<string, JsonValue>;\ntype Stored = JsonValue;\ntype StoredRef = Primitive | { index: number };\ntype Status = \"open\" | \"prepared\" | \"consumed\" | \"aborted\" | \"stale\";\ntype StatusCell = { value: Status };\n\ntype InsertSource = { refs: StoredRef[] };\ntype ParentKind = 0 | 1 | 2; // object, base-array entry, inserted-array entry\n\ntype BasePiece = { kind: \"base\"; start: number; length: number; step: 1 | -1 };\ntype InsertPiece = { kind: \"insert\"; source: InsertSource; start: number; length: number; step: 1 | -1 };\ntype Piece = BasePiece | InsertPiece;\n\ntype PieceNode = {\n\tpiece: Piece;\n\tleft: PieceNode | undefined;\n\tright: PieceNode | undefined;\n\tpriority: number;\n\telements: number;\n};\n\ntype PieceLocation = { piece: Piece; logicalStart: number; minimum: number; maximum: number };\n\ntype DenseRegion = { start: number; length: number };\ntype DenseCandidates = { indices: number[]; bits: Uint8Array | undefined; length: number };\n\ntype ArrayPlan = {\n\tremoveRuns: number[];\n\tpermutation: number[] | undefined;\n\tinsertRuns: number[];\n};\n\ntype ArrayOverlay = {\n\troot: PieceNode | undefined;\n\tpieces: Piece[] | undefined;\n\tbaseOverrides: Map<number, StoredRef> | undefined;\n\tinsertOverrides: Map<InsertSource, Map<number, StoredRef>> | undefined;\n\tstructural: boolean;\n\tgeneration: number;\n\tplan: ArrayPlan | undefined;\n\tseed: number;\n\tlocatedOffset: number;\n\tbaseLocations: PieceLocation[] | undefined;\n\tinsertLocations: Map<InsertSource, PieceLocation[]> | undefined;\n};\n\ntype OverlayNode = {\n\tcontext: OverlayContext;\n\tbaseIndex: number;\n\tparentIndex: number;\n\tparentKind: ParentKind;\n\tparentKey: string | number;\n\tparentSource?: InsertSource;\n\tparentPlacement: boolean;\n\ttarget: object;\n\tproxy: object;\n\twriteKey?: string;\n\twriteValue?: StoredRef;\n\twrites?: Map<string, StoredRef>;\n\tdeleteKey?: string;\n\tdeletes?: Set<string>;\n\treadded?: Set<string>;\n\tarray?: ArrayOverlay;\n\tdirty?: boolean;\n\tsubtreeDirty?: boolean;\n\tpreparedPath?: Path;\n};\n\ntype OverlayContext = {\n\towner: object;\n\ttracker: WeakRef<TrackerImpl<object>>;\n\tbaseRevision: number;\n\tstatus: StatusCell;\n\troot: OverlayNode | undefined;\n\tbases: Container[] | undefined;\n\tstored: Container[] | undefined;\n\tdirty: OverlayNode[];\n\tnodes: OverlayNode[];\n\trawNodes: WeakMap<object, OverlayNode> | undefined;\n\tops: Op[] | undefined;\n\treplacement: boolean;\n\treplacementNoop: boolean;\n\tbaseValue: object | undefined;\n\toverlayReleased: boolean;\n\tsimpleObjectMaterialization: boolean;\n\tregistryRef: WeakRef<OverlayContext> | undefined;\n};\n\nconst NODE = Symbol(\"chord.delta.overlay.node\");\nconst PREPARED = new WeakMap<object, OverlayContext>();\nconst RELEASED: Record<string, JsonValue> = {};\nconst ARRAY_MUTATORS = new Set<PropertyKey>([\n\t\"push\",\n\t\"pop\",\n\t\"shift\",\n\t\"unshift\",\n\t\"splice\",\n\t\"reverse\",\n\t\"sort\",\n\t\"fill\",\n\t\"copyWithin\",\n]);\nconst MAX_DELTA_OPERATIONS = 4_096;\nconst MAX_SIMPLE_OBJECT_NODES = 128;\nconst DATA_DESCRIPTOR: PropertyDescriptor = {\n\tvalue: undefined,\n\twritable: true,\n\tenumerable: true,\n\tconfigurable: true,\n};\n\nexport interface Prepared<T extends object> {\n\treadonly base: T;\n\treadonly value: T;\n\treadonly ops: readonly Op[];\n\treadonly baseRevision: number;\n\tabort(): void;\n}\n\nexport interface Change<T extends object> {\n\treadonly state: Draft<T>;\n\tprepare(): Prepared<T>;\n\tabort(): void;\n}\n\nexport interface Tracker<T extends object> {\n\treadonly value: T;\n\treadonly revision: number;\n\tbeginChange(): Change<T>;\n\tprepareReplace(value: T): Prepared<T>;\n\tadopt(prepared: Prepared<T>): void;\n}\n\nclass PreparedImpl<T extends object> implements Prepared<T> {\n\treadonly #context: OverlayContext;\n\treadonly value: T;\n\treadonly base: T;\n\treadonly ops: readonly Op[];\n\n\tconstructor(context: OverlayContext, value: T, operations: readonly Op[]) {\n\t\tthis.#context = context;\n\t\tthis.value = value;\n\t\tthis.base = context.baseValue as T;\n\t\tthis.ops = operations;\n\t\tPREPARED.set(this, context);\n\t}\n\n\tget baseRevision(): number {\n\t\treturn this.#context.baseRevision;\n\t}\n\n\tabort(): void {\n\t\tabortContext(this.#context);\n\t}\n}\n\nclass ChangeImpl<T extends object> implements Change<T> {\n\t#context: OverlayContext | undefined;\n\t#preparedStatus: StatusCell | undefined;\n\t#settled = false;\n\n\tconstructor(context: OverlayContext) {\n\t\tthis.#context = context;\n\t}\n\n\tget state(): Draft<T> {\n\t\tconst state = this.#context?.root?.proxy;\n\t\tif (state === undefined) throw new TypeError(\"Cannot use a settled overlay\");\n\t\treturn state as Draft<T>;\n\t}\n\n\tprepare(): Prepared<T> {\n\t\tif (this.#settled) throw new Error(\"Change has already been settled\");\n\t\tconst context = this.#context!;\n\t\tassertWritable(context);\n\t\tcontext.status.value = \"prepared\";\n\t\ttry {\n\t\t\tif (!context.replacement) context.ops = context.dirty.length === 0 ? [] : emitOperations(context);\n\t\t\tconst prepared = materializePrepared<T>(context);\n\t\t\tthis.#preparedStatus = context.status;\n\t\t\tthis.#settled = true;\n\t\t\treturn prepared;\n\t\t} catch (error) {\n\t\t\tcontext.status.value = \"aborted\";\n\t\t\tclearContext(context);\n\t\t\tthis.#settled = true;\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tthis.#context = undefined;\n\t\t}\n\t}\n\n\tabort(): void {\n\t\tif (this.#settled) {\n\t\t\tif (this.#preparedStatus?.value === \"prepared\") this.#preparedStatus.value = \"aborted\";\n\t\t\tthis.#preparedStatus = undefined;\n\t\t\treturn;\n\t\t}\n\t\tthis.#settled = true;\n\t\tabortContext(this.#context!);\n\t\tthis.#context = undefined;\n\t}\n}\n\nclass TrackerImpl<T extends object> implements Tracker<T> {\n\treadonly #owner = {};\n\treadonly #contexts = new Set<WeakRef<OverlayContext>>();\n\treadonly #selfRef: WeakRef<TrackerImpl<object>>;\n\t#value: T;\n\t#revision = 0;\n\t#pruneBudget = 256;\n\n\tconstructor(initial: T) {\n\t\tthis.#value = initial;\n\t\tthis.#selfRef = new WeakRef(this as unknown as TrackerImpl<object>);\n\t}\n\n\tget value(): T {\n\t\treturn this.#value;\n\t}\n\n\tget revision(): number {\n\t\treturn this.#revision;\n\t}\n\n\tbeginChange(): Change<T> {\n\t\tconst context = createContext(this.#selfRef, this.#owner, this.#revision, this.#value, false, this.#value);\n\t\tthis.#register(context);\n\t\treturn new ChangeImpl(context);\n\t}\n\n\tprepareReplace(value: T): Prepared<T> {\n\t\tconst context = createContext(this.#selfRef, this.#owner, this.#revision, value, true, this.#value);\n\t\tcontext.status.value = \"prepared\";\n\t\tthis.#register(context);\n\t\ttry {\n\t\t\treturn materializePrepared<T>(context);\n\t\t} catch (error) {\n\t\t\tcontext.status.value = \"aborted\";\n\t\t\tclearContext(context);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tadopt(prepared: Prepared<T>): void {\n\t\tconst context = PREPARED.get(prepared as object);\n\t\tif (context?.owner !== this.#owner) throw new Error(\"Prepared change belongs to a different tracker\");\n\t\tif (context.status.value === \"consumed\") throw new Error(\"Prepared change has already been used\");\n\t\tif (context.status.value === \"aborted\") throw new Error(\"Prepared change has been aborted\");\n\t\tif (context.status.value === \"stale\") throw new Error(\"Prepared change is stale\");\n\t\tif (context.status.value !== \"prepared\") throw new Error(\"Prepared change is not ready\");\n\t\tif (context.baseRevision !== this.#revision) {\n\t\t\tcontext.status.value = \"stale\";\n\t\t\tclearContext(context);\n\t\t\tthrow new Error(\"Prepared change is stale\");\n\t\t}\n\n\t\tif (this.#value !== prepared.base) {\n\t\t\tcontext.status.value = \"stale\";\n\t\t\tthrow new Error(\"Prepared change is stale\");\n\t\t}\n\t\t// Materialization happened during prepare. Adoption is an infallible pointer\n\t\t// swap so storage failure can discard the candidate without touching authority.\n\t\tthis.#value = prepared.value;\n\t\tcontext.status.value = \"consumed\";\n\t\tthis.#revision += 1;\n\t\tthis.#invalidate(context);\n\t}\n\n\treleaseContext(context: OverlayContext): void {\n\t\tif (context.registryRef !== undefined) this.#contexts.delete(context.registryRef);\n\t\tcontext.registryRef = undefined;\n\t}\n\n\t#register(context: OverlayContext): void {\n\t\tconst reference = new WeakRef(context);\n\t\tcontext.registryRef = reference;\n\t\tthis.#contexts.add(reference);\n\t\tthis.#pruneBudget -= 1;\n\t\tif (this.#pruneBudget === 0) {\n\t\t\tthis.#prune();\n\t\t\tthis.#pruneBudget = Math.max(256, this.#contexts.size);\n\t\t}\n\t}\n\n\t#prune(): void {\n\t\tfor (const reference of this.#contexts) {\n\t\t\tif (reference.deref() === undefined) this.#contexts.delete(reference);\n\t\t}\n\t}\n\n\t#invalidate(winner: OverlayContext): void {\n\t\tfor (const reference of this.#contexts) {\n\t\t\tconst context = reference.deref();\n\t\t\tif (context === undefined || context === winner) continue;\n\t\t\tif (context.status.value === \"open\" || context.status.value === \"prepared\") context.status.value = \"stale\";\n\t\t\t// Adoption must not walk every node touched by a competing draft. Drop the\n\t\t\t// context's strong overlay references in O(1); externally retained proxies\n\t\t\t// still see the stale status and are reclaimed with their holders.\n\t\t\treleaseOverlayReferences(context);\n\t\t}\n\t\tthis.#contexts.clear();\n\t\tthis.#pruneBudget = 256;\n\t}\n\n\treplacementBase(context: OverlayContext): T | undefined {\n\t\treturn context.baseRevision === this.#revision ? this.#value : undefined;\n\t}\n}\n\n/** Take immutable ownership of an alias-free strict-JSON root in O(1). */\nexport function track<T extends object>(initial: T): Tracker<T> {\n\treturn new TrackerImpl(initial);\n}\n\nfunction materializePrepared<T extends object>(context: OverlayContext): PreparedImpl<T> {\n\tconst operations = ensureOperations(context);\n\tconst base = context.baseValue as T;\n\t// Operation payloads are already detached from the mutable overlay. The\n\t// resulting revision and public batch intentionally share those payloads under\n\t// the trusted immutable-transfer contract.\n\tconst value =\n\t\toperations.length === 0\n\t\t\t? base\n\t\t\t: context.simpleObjectMaterialization\n\t\t\t\t? (cloneNode(context.root!) as T)\n\t\t\t\t: materializeOperations(base, operations);\n\tconst prepared = new PreparedImpl(context, value, operations);\n\tif (context.nodes.length > 4_096) releaseOverlayReferences(context);\n\telse clearContext(context);\n\treturn prepared;\n}\n\nfunction materializeOperations<T extends object>(base: T, operations: readonly Op[]): T {\n\tfor (const operation of operations) {\n\t\t// Native splice/permutation remains faster for large structural batches.\n\t\tif (operation[0] === \"p\" || operation[0] === \"m\") return applyImmutable(base, operations);\n\t}\n\treturn applyImmutableTrusted(base, operations);\n}\n\nfunction createContext<T extends object>(\n\ttracker: WeakRef<TrackerImpl<object>>,\n\towner: object,\n\tbaseRevision: number,\n\troot: T,\n\treplacement: boolean,\n\tbase: T,\n): OverlayContext {\n\tconst context: OverlayContext = {\n\t\towner,\n\t\ttracker,\n\t\tbaseRevision,\n\t\tstatus: { value: \"open\" },\n\t\troot: undefined,\n\t\tbases: [],\n\t\tstored: [],\n\t\tdirty: [],\n\t\tnodes: [],\n\t\trawNodes: new WeakMap(),\n\t\tops: undefined,\n\t\treplacement,\n\t\treplacementNoop: false,\n\t\tbaseValue: base,\n\t\toverlayReleased: false,\n\t\tsimpleObjectMaterialization: false,\n\t\tregistryRef: undefined,\n\t};\n\tcontext.root = createNode(context, root as Container, undefined);\n\treturn context;\n}\n\nconst sharedObjectHandler: ProxyHandler<object> = {\n\tdeleteProperty(target, property) {\n\t\treturn deleteProperty(nodeForTarget(target), property);\n\t},\n\tdefineProperty(target) {\n\t\tassertWritable(nodeForTarget(target).context);\n\t\tthrow new TypeError(\"Defining overlay properties is not supported\");\n\t},\n\tget(target, property) {\n\t\tif (property === \"then\") {\n\t\t\tconst node = (target as Record<PropertyKey, unknown>)[NODE] as OverlayNode | undefined;\n\t\t\tif (node === undefined || isSettledContext(node.context)) return undefined;\n\t\t}\n\t\tconst node = nodeForTarget(target);\n\t\tif (property === NODE) return node;\n\t\treturn getProperty(node, property);\n\t},\n\tgetOwnPropertyDescriptor(target, property) {\n\t\treturn getDescriptor(nodeForTarget(target), property);\n\t},\n\tgetPrototypeOf(target) {\n\t\tconst node = nodeForTarget(target);\n\t\tassertReadable(node.context);\n\t\treturn Object.getPrototypeOf(nodeBase(node));\n\t},\n\thas(target, property) {\n\t\treturn hasProperty(nodeForTarget(target), property);\n\t},\n\tisExtensible(target) {\n\t\tassertReadable(nodeForTarget(target).context);\n\t\treturn true;\n\t},\n\townKeys(target) {\n\t\treturn ownKeys(nodeForTarget(target));\n\t},\n\tpreventExtensions(target) {\n\t\tassertWritable(nodeForTarget(target).context);\n\t\tthrow new TypeError(\"Overlays cannot be made non-extensible\");\n\t},\n\tset(target, property, value) {\n\t\treturn setProperty(nodeForTarget(target), property, value);\n\t},\n\tsetPrototypeOf(target) {\n\t\tassertWritable(nodeForTarget(target).context);\n\t\tthrow new TypeError(\"Changing an overlay prototype is not supported\");\n\t},\n};\n\nconst sharedArrayHandler: ProxyHandler<object> = sharedObjectHandler;\n\nfunction createNode(\n\tcontext: OverlayContext,\n\tbase: Container,\n\tparent: OverlayNode | undefined,\n\tparentKind: ParentKind = 0,\n\tparentKey: string | number = \"\",\n\tparentSource: InsertSource | undefined = undefined,\n\tparentPlacement = false,\n): OverlayNode {\n\tconst existing = context.rawNodes!.get(base);\n\tif (existing !== undefined) return existing;\n\tconst target: object = Array.isArray(base) ? [] : {};\n\tconst baseIndex = context.bases!.length;\n\tconst parentIndex = parent?.baseIndex ?? -1;\n\tcontext.bases!.push(base);\n\tconst node: OverlayNode = {\n\t\tcontext,\n\t\tbaseIndex,\n\t\tparentIndex,\n\t\tparentKind,\n\t\tparentKey,\n\t\tparentPlacement,\n\t\ttarget,\n\t\tproxy: target,\n\t};\n\tif (parentSource !== undefined) node.parentSource = parentSource;\n\t(target as Record<PropertyKey, unknown>)[NODE] = node;\n\tnode.proxy = new Proxy(target, Array.isArray(base) ? sharedArrayHandler : sharedObjectHandler);\n\tcontext.rawNodes!.set(base, node);\n\tcontext.nodes.push(node);\n\treturn node;\n}\n\nfunction nodeBase(node: OverlayNode): Container {\n\treturn node.context.bases![node.baseIndex]!;\n}\n\nfunction nodeParent(node: OverlayNode): OverlayNode | undefined {\n\treturn node.parentIndex < 0 ? undefined : node.context.nodes[node.parentIndex];\n}\n\nfunction storeValue(context: OverlayContext, value: Stored): StoredRef {\n\tif (!isContainer(value)) return value;\n\tconst index = context.stored!.length;\n\tcontext.stored!.push(value);\n\treturn { index };\n}\n\nfunction storedValue(context: OverlayContext, reference: StoredRef): Stored {\n\treturn typeof reference === \"object\" && reference !== null ? context.stored![reference.index]! : reference;\n}\n\nfunction replaceStoredValue(context: OverlayContext, reference: StoredRef, value: Stored): StoredRef {\n\tif (isContainer(value)) {\n\t\tif (typeof reference === \"object\" && reference !== null) {\n\t\t\tcontext.stored![reference.index] = value;\n\t\t\treturn reference;\n\t\t}\n\t\treturn storeValue(context, value);\n\t}\n\tif (typeof reference === \"object\" && reference !== null) context.stored![reference.index] = RELEASED;\n\treturn value;\n}\n\nfunction releaseStoredValue(context: OverlayContext, reference: StoredRef): void {\n\tif (typeof reference === \"object\" && reference !== null) context.stored![reference.index] = RELEASED;\n}\n\nfunction nodeForTarget(target: object): OverlayNode {\n\tconst node = (target as Record<PropertyKey, unknown>)[NODE] as OverlayNode | undefined;\n\tif (node === undefined) throw new TypeError(\"Cannot use a settled overlay\");\n\treturn node;\n}\n\nfunction isSettledContext(context: OverlayContext): boolean {\n\treturn (\n\t\tcontext.overlayReleased ||\n\t\tcontext.status.value === \"consumed\" ||\n\t\tcontext.status.value === \"aborted\" ||\n\t\tcontext.status.value === \"stale\"\n\t);\n}\n\nfunction assertReadable(context: OverlayContext): void {\n\tif (isSettledContext(context)) throw new TypeError(\"Cannot use a settled overlay\");\n}\n\nfunction assertWritable(context: OverlayContext): void {\n\tassertReadable(context);\n\tif (context.status.value !== \"open\") throw new TypeError(\"Prepared overlays are read-only\");\n}\n\nfunction getProperty(node: OverlayNode, property: PropertyKey): unknown {\n\tassertReadable(node.context);\n\tif (Array.isArray(nodeBase(node))) {\n\t\tconst overlay = arrayOverlay(node);\n\t\tif (property === \"length\") return arrayLength(overlay);\n\t\tif (ARRAY_MUTATORS.has(property)) return arrayMutators[property as keyof typeof arrayMutators];\n\t\tconst index = arrayIndex(property);\n\t\tif (index !== undefined) return getArrayIndex(node, index);\n\t\treturn Reflect.get(Array.prototype, property, node.proxy);\n\t}\n\tif (typeof property === \"symbol\") return Reflect.get(nodeBase(node), property, node.proxy);\n\tconst key = String(property);\n\tif (!objectHas(node, key)) {\n\t\tif (isObjectDeleted(node, key) || Object.hasOwn(nodeBase(node), key)) return undefined;\n\t\treturn Reflect.get(nodeBase(node), property, node.proxy);\n\t}\n\tconst value = objectValue(node, key);\n\tif (!isContainer(value)) return value;\n\treturn createNode(node.context, value, node, 0, key, undefined, hasObjectWrite(node, key)).proxy;\n}\n\nfunction getArrayIndex(node: OverlayNode, index: number): unknown {\n\tconst overlay = arrayOverlay(node);\n\tif (index >= arrayLength(overlay)) return undefined;\n\tconst piece = locatePiece(overlay, index);\n\tconst sourceIndex = piece.start + piece.step * overlay.locatedOffset;\n\tconst value = entryValueAt(node, piece, sourceIndex);\n\tif (!isContainer(value)) return value;\n\treturn createNode(\n\t\tnode.context,\n\t\tvalue,\n\t\tnode,\n\t\tpiece.kind === \"base\" ? 1 : 2,\n\t\tsourceIndex,\n\t\tpiece.kind === \"insert\" ? piece.source : undefined,\n\t\tpiece.kind === \"insert\" || hasEntryOverrideAt(overlay, piece, sourceIndex),\n\t).proxy;\n}\n\nfunction setProperty(node: OverlayNode, property: PropertyKey, supplied: unknown): boolean {\n\tassertWritable(node.context);\n\tif (typeof property === \"symbol\") throw new TypeError(\"Symbol writes are not supported\");\n\tif (Array.isArray(nodeBase(node))) {\n\t\tif (property === \"length\") {\n\t\t\tsetArrayLength(node, toArrayLength(supplied));\n\t\t\treturn true;\n\t\t}\n\t\tconst index = arrayIndex(property);\n\t\tif (index === undefined) throw new TypeError(\"Only array indices and length can be written\");\n\t\tif (index > arrayLength(arrayOverlay(node))) throw new TypeError(\"Overlay arrays cannot contain holes\");\n\t\tsetArrayIndex(node, index, clonePlacement(supplied));\n\t\treturn true;\n\t}\n\tconst key = String(property);\n\tif (supplied === undefined) return deleteProperty(node, key);\n\tconst stored = clonePlacement(supplied);\n\tconst current = objectValue(node, key);\n\tconst wasDeleted = isObjectDeleted(node, key);\n\tif (!wasDeleted && !isContainer(stored) && current === stored) return true;\n\tsetObjectWrite(node, key, stored);\n\tif (wasDeleted && Object.hasOwn(nodeBase(node), key)) {\n\t\tif (node.readded === undefined) node.readded = new Set();\n\t\tnode.readded.add(key);\n\t}\n\tdeleteObjectDeletion(node, key);\n\tmarkDirty(node);\n\treturn true;\n}\n\nfunction deleteProperty(node: OverlayNode, property: PropertyKey): boolean {\n\tassertWritable(node.context);\n\tif (typeof property === \"symbol\") throw new TypeError(\"Symbol writes are not supported\");\n\tif (Array.isArray(nodeBase(node))) throw new TypeError(\"Overlay arrays cannot contain holes\");\n\tconst key = String(property);\n\tif (!objectHas(node, key)) return true;\n\tdeleteObjectWrite(node, key);\n\tnode.readded?.delete(key);\n\tsetObjectDeletion(node, key);\n\tmarkDirty(node);\n\treturn true;\n}\n\nfunction hasProperty(node: OverlayNode, property: PropertyKey): boolean {\n\tassertReadable(node.context);\n\tif (Array.isArray(nodeBase(node))) {\n\t\tif (property === \"length\") return true;\n\t\tconst index = arrayIndex(property);\n\t\tif (index !== undefined) return index < arrayLength(arrayOverlay(node));\n\t\treturn property in Array.prototype;\n\t}\n\treturn typeof property === \"symbol\" ? property in nodeBase(node) : objectHas(node, String(property));\n}\n\nfunction ownKeys(node: OverlayNode): ArrayLike<string | symbol> {\n\tassertReadable(node.context);\n\tif (Array.isArray(nodeBase(node))) {\n\t\tconst length = arrayLength(arrayOverlay(node));\n\t\tconst keys = new Array<string>(length + 1);\n\t\tfor (let index = 0; index < length; index++) keys[index] = String(index);\n\t\tkeys[length] = \"length\";\n\t\treturn keys;\n\t}\n\tlet existingKeysOnly =\n\t\tnode.deleteKey === undefined &&\n\t\tnode.deletes === undefined &&\n\t\tnode.readded === undefined &&\n\t\t(node.writeKey === undefined || Object.hasOwn(nodeBase(node), node.writeKey));\n\tif (existingKeysOnly && node.writes !== undefined) {\n\t\tfor (const key of node.writes.keys()) {\n\t\t\tif (!Object.hasOwn(nodeBase(node), key)) {\n\t\t\t\texistingKeysOnly = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (existingKeysOnly) return Object.keys(nodeBase(node));\n\tconst keys = Object.keys(nodeBase(node)).filter((key) => !isObjectDeleted(node, key) && !node.readded?.has(key));\n\tconst seen = new Set(keys);\n\tif (node.writeKey !== undefined && !seen.has(node.writeKey)) {\n\t\tkeys.push(node.writeKey);\n\t\tseen.add(node.writeKey);\n\t}\n\tif (node.writes !== undefined) {\n\t\tfor (const key of node.writes.keys()) {\n\t\t\tif (seen.has(key)) continue;\n\t\t\tkeys.push(key);\n\t\t\tseen.add(key);\n\t\t}\n\t}\n\tconst indices: number[] = [];\n\tconst strings: string[] = [];\n\tfor (const key of keys) {\n\t\tconst index = arrayIndex(key);\n\t\tif (index === undefined) strings.push(key);\n\t\telse indices.push(index);\n\t}\n\tindices.sort((left, right) => left - right);\n\treturn [...indices.map(String), ...strings];\n}\n\nfunction getDescriptor(node: OverlayNode, property: PropertyKey): PropertyDescriptor | undefined {\n\tassertReadable(node.context);\n\tif (Array.isArray(nodeBase(node))) {\n\t\tif (property === \"length\") {\n\t\t\tconst length = arrayLength(arrayOverlay(node));\n\t\t\t(node.target as unknown[]).length = length;\n\t\t\treturn Reflect.getOwnPropertyDescriptor(node.target, \"length\");\n\t\t}\n\t\tconst index = arrayIndex(property);\n\t\tif (index === undefined || index >= arrayLength(arrayOverlay(node))) return undefined;\n\t} else {\n\t\tif (typeof property === \"symbol\" || !objectHas(node, String(property))) return undefined;\n\t}\n\treturn {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\twritable: node.context.status.value === \"open\",\n\t\tvalue: getProperty(node, property),\n\t};\n}\n\nfunction hasObjectWrite(node: OverlayNode, key: string): boolean {\n\treturn node.writeKey === key || (node.writes?.has(key) ?? false);\n}\n\nfunction setObjectWrite(node: OverlayNode, key: string, value: Stored): void {\n\tif (node.writes !== undefined) {\n\t\tconst reference = node.writes.get(key);\n\t\tnode.writes.set(\n\t\t\tkey,\n\t\t\treference === undefined ? storeValue(node.context, value) : replaceStoredValue(node.context, reference, value),\n\t\t);\n\t\treturn;\n\t}\n\tif (node.writeKey === undefined || node.writeKey === key) {\n\t\tnode.writeKey = key;\n\t\tnode.writeValue =\n\t\t\tnode.writeValue === undefined\n\t\t\t\t? storeValue(node.context, value)\n\t\t\t\t: replaceStoredValue(node.context, node.writeValue, value);\n\t\treturn;\n\t}\n\tnode.writes = new Map();\n\tnode.writes.set(node.writeKey, node.writeValue!);\n\tnode.writes.set(key, storeValue(node.context, value));\n\tnode.writeKey = undefined;\n\tnode.writeValue = undefined;\n}\n\nfunction deleteObjectWrite(node: OverlayNode, key: string): void {\n\tif (node.writeKey === key) {\n\t\tnode.writeKey = undefined;\n\t\treleaseStoredValue(node.context, node.writeValue!);\n\t\tnode.writeValue = undefined;\n\t} else {\n\t\tconst reference = node.writes?.get(key);\n\t\tif (reference !== undefined) releaseStoredValue(node.context, reference);\n\t\tnode.writes?.delete(key);\n\t}\n}\n\nfunction isObjectDeleted(node: OverlayNode, key: string): boolean {\n\treturn node.deleteKey === key || (node.deletes?.has(key) ?? false);\n}\n\nfunction setObjectDeletion(node: OverlayNode, key: string): void {\n\tif (node.deletes !== undefined) {\n\t\tnode.deletes.add(key);\n\t\treturn;\n\t}\n\tif (node.deleteKey === undefined || node.deleteKey === key) {\n\t\tnode.deleteKey = key;\n\t\treturn;\n\t}\n\tnode.deletes = new Set();\n\tnode.deletes.add(node.deleteKey);\n\tnode.deletes.add(key);\n\tnode.deleteKey = undefined;\n}\n\nfunction deleteObjectDeletion(node: OverlayNode, key: string): void {\n\tif (node.deleteKey === key) node.deleteKey = undefined;\n\telse node.deletes?.delete(key);\n}\n\nfunction objectHas(node: OverlayNode, key: string): boolean {\n\tif (isObjectDeleted(node, key)) return false;\n\treturn hasObjectWrite(node, key) || Object.hasOwn(nodeBase(node), key);\n}\n\nfunction objectValue(node: OverlayNode, key: string): Stored {\n\tif (node.writeKey === key) return storedValue(node.context, node.writeValue!);\n\tconst reference = node.writes?.get(key);\n\tif (reference !== undefined) return storedValue(node.context, reference);\n\treturn (nodeBase(node) as Record<string, JsonValue>)[key]!;\n}\n\nfunction markDirty(node: OverlayNode): void {\n\tif (node.dirty) return;\n\tnode.dirty = true;\n\tnode.context.dirty.push(node);\n\tfor (let parent = nodeParent(node); parent !== undefined; parent = nodeParent(parent)) parent.subtreeDirty = true;\n}\n\nfunction arrayOverlay(node: OverlayNode): ArrayOverlay {\n\tif (node.array !== undefined) return node.array;\n\tconst base = nodeBase(node) as JsonValue[];\n\tconst overlay: ArrayOverlay = {\n\t\troot: undefined,\n\t\tpieces: undefined,\n\t\tbaseOverrides: undefined,\n\t\tinsertOverrides: undefined,\n\t\tstructural: false,\n\t\tgeneration: 0,\n\t\tplan: undefined,\n\t\tseed: 0x9e3779b9,\n\t\tlocatedOffset: 0,\n\t\tbaseLocations: undefined,\n\t\tinsertLocations: undefined,\n\t};\n\tif (base.length > 0)\n\t\toverlay.root = createPieceNode(overlay, { kind: \"base\", start: 0, length: base.length, step: 1 });\n\tnode.array = overlay;\n\treturn overlay;\n}\n\nfunction baseOverridesForWrite(overlay: ArrayOverlay): Map<number, StoredRef> {\n\tif (overlay.baseOverrides === undefined) overlay.baseOverrides = new Map();\n\treturn overlay.baseOverrides;\n}\n\nfunction insertOverridesForWrite(overlay: ArrayOverlay): Map<InsertSource, Map<number, StoredRef>> {\n\tif (overlay.insertOverrides === undefined) overlay.insertOverrides = new Map();\n\treturn overlay.insertOverrides;\n}\n\nfunction nextPiecePriority(overlay: ArrayOverlay): number {\n\tlet value = overlay.seed;\n\tvalue ^= value << 13;\n\tvalue ^= value >>> 17;\n\tvalue ^= value << 5;\n\toverlay.seed = value >>> 0;\n\treturn overlay.seed;\n}\n\nfunction treeElements(node: PieceNode | undefined): number {\n\treturn node?.elements ?? 0;\n}\n\nfunction updatePieceNode(node: PieceNode): void {\n\tnode.elements = treeElements(node.left) + node.piece.length + treeElements(node.right);\n}\n\nfunction createPieceNode(overlay: ArrayOverlay, piece: Piece): PieceNode {\n\treturn { piece, left: undefined, right: undefined, priority: nextPiecePriority(overlay), elements: piece.length };\n}\n\nfunction mergePieceTrees(left: PieceNode | undefined, right: PieceNode | undefined): PieceNode | undefined {\n\tif (left === undefined) return right;\n\tif (right === undefined) return left;\n\tif (left.priority >= right.priority) {\n\t\tleft.right = mergePieceTrees(left.right, right);\n\t\tupdatePieceNode(left);\n\t\treturn left;\n\t}\n\tright.left = mergePieceTrees(left, right.left);\n\tupdatePieceNode(right);\n\treturn right;\n}\n\nfunction splitPieceTree(\n\toverlay: ArrayOverlay,\n\troot: PieceNode | undefined,\n\tindex: number,\n): [PieceNode | undefined, PieceNode | undefined] {\n\tif (root === undefined) return [undefined, undefined];\n\tconst leftLength = treeElements(root.left);\n\tif (index < leftLength) {\n\t\tconst [left, right] = splitPieceTree(overlay, root.left, index);\n\t\troot.left = right;\n\t\tupdatePieceNode(root);\n\t\treturn [left, root];\n\t}\n\tconst pieceEnd = leftLength + root.piece.length;\n\tif (index > pieceEnd) {\n\t\tconst [left, right] = splitPieceTree(overlay, root.right, index - pieceEnd);\n\t\troot.right = left;\n\t\tupdatePieceNode(root);\n\t\treturn [root, right];\n\t}\n\tif (index === leftLength) {\n\t\tconst left = root.left;\n\t\troot.left = undefined;\n\t\tupdatePieceNode(root);\n\t\treturn [left, root];\n\t}\n\tif (index === pieceEnd) {\n\t\tconst right = root.right;\n\t\troot.right = undefined;\n\t\tupdatePieceNode(root);\n\t\treturn [root, right];\n\t}\n\tconst offset = index - leftLength;\n\tconst first = { ...root.piece, length: offset };\n\tconst second = {\n\t\t...root.piece,\n\t\tstart: root.piece.start + root.piece.step * offset,\n\t\tlength: root.piece.length - offset,\n\t};\n\treturn [\n\t\tmergePieceTrees(root.left, createPieceNode(overlay, first)),\n\t\tmergePieceTrees(createPieceNode(overlay, second), root.right),\n\t];\n}\n\nfunction leftmostPieceNode(node: PieceNode): PieceNode {\n\twhile (node.left !== undefined) node = node.left;\n\treturn node;\n}\n\nfunction rightmostPieceNode(node: PieceNode): PieceNode {\n\twhile (node.right !== undefined) node = node.right;\n\treturn node;\n}\n\nfunction mergeablePieces(left: Piece, right: Piece): boolean {\n\tif (left.kind !== right.kind) return false;\n\tif (left.kind === \"insert\" && left.source !== (right as InsertPiece).source) return false;\n\tif (left.length === 1 && right.length === 1) return Math.abs(right.start - left.start) === 1;\n\treturn left.step === right.step && left.start + left.step * left.length === right.start;\n}\n\nfunction joinNormalized(\n\toverlay: ArrayOverlay,\n\tleft: PieceNode | undefined,\n\tright: PieceNode | undefined,\n): PieceNode | undefined {\n\tif (left === undefined) return right;\n\tif (right === undefined) return left;\n\tconst leftPiece = rightmostPieceNode(left).piece;\n\tconst rightPiece = leftmostPieceNode(right).piece;\n\tif (!mergeablePieces(leftPiece, rightPiece)) return mergePieceTrees(left, right);\n\tconst [leftRest] = splitPieceTree(overlay, left, treeElements(left) - leftPiece.length);\n\tconst [, rightRest] = splitPieceTree(overlay, right, rightPiece.length);\n\tconst step = leftPiece.length === 1 ? ((rightPiece.start - leftPiece.start) as 1 | -1) : leftPiece.step;\n\tconst combined: Piece =\n\t\tleftPiece.kind === \"base\"\n\t\t\t? { kind: \"base\", start: leftPiece.start, length: leftPiece.length + rightPiece.length, step }\n\t\t\t: {\n\t\t\t\t\tkind: \"insert\",\n\t\t\t\t\tsource: leftPiece.source,\n\t\t\t\t\tstart: leftPiece.start,\n\t\t\t\t\tlength: leftPiece.length + rightPiece.length,\n\t\t\t\t\tstep,\n\t\t\t\t};\n\treturn joinNormalized(overlay, joinNormalized(overlay, leftRest, createPieceNode(overlay, combined)), rightRest);\n}\n\nfunction flattenPieceTree(node: PieceNode | undefined, output: Piece[]): void {\n\tif (node === undefined) return;\n\tflattenPieceTree(node.left, output);\n\toutput.push(node.piece);\n\tflattenPieceTree(node.right, output);\n}\n\nfunction piecesOf(overlay: ArrayOverlay): readonly Piece[] {\n\tif (overlay.pieces === undefined) {\n\t\toverlay.pieces = [];\n\t\tflattenPieceTree(overlay.root, overlay.pieces);\n\t}\n\treturn overlay.pieces;\n}\n\nfunction treeFromPieces(overlay: ArrayOverlay, pieces: Piece[]): PieceNode | undefined {\n\tmergePieces(pieces);\n\tlet root: PieceNode | undefined;\n\tfor (const piece of pieces) root = mergePieceTrees(root, createPieceNode(overlay, piece));\n\treturn root;\n}\n\nfunction replaceAllPieces(overlay: ArrayOverlay, pieces: Piece[]): void {\n\toverlay.root = treeFromPieces(overlay, pieces);\n\toverlay.pieces = undefined;\n\toverlay.baseLocations = undefined;\n\toverlay.insertLocations = undefined;\n}\n\nfunction arrayLength(overlay: ArrayOverlay): number {\n\treturn treeElements(overlay.root);\n}\n\nfunction locatePiece(overlay: ArrayOverlay, index: number): Piece {\n\tlet node = overlay.root;\n\twhile (node !== undefined) {\n\t\tconst leftLength = treeElements(node.left);\n\t\tif (index < leftLength) node = node.left;\n\t\telse if (index >= leftLength + node.piece.length) {\n\t\t\tindex -= leftLength + node.piece.length;\n\t\t\tnode = node.right;\n\t\t} else {\n\t\t\toverlay.locatedOffset = index - leftLength;\n\t\t\treturn node.piece;\n\t\t}\n\t}\n\tthrow new RangeError(\"Array overlay index is out of range\");\n}\n\nfunction arrayIndex(property: PropertyKey): number | undefined {\n\tif (typeof property !== \"string\" || property.length === 0 || property.length > 10) return undefined;\n\tif (property === \"0\") return 0;\n\tconst first = property.charCodeAt(0);\n\tif (first < 49 || first > 57) return undefined;\n\tlet index = first - 48;\n\tfor (let offset = 1; offset < property.length; offset++) {\n\t\tconst digit = property.charCodeAt(offset) - 48;\n\t\tif (digit < 0 || digit > 9) return undefined;\n\t\tindex = index * 10 + digit;\n\t\tif (index >= 4_294_967_295) return undefined;\n\t}\n\treturn index;\n}\n\nfunction entryValueAt(node: OverlayNode, piece: Piece, sourceIndex: number): Stored {\n\tconst overlay = arrayOverlay(node);\n\tif (piece.kind === \"base\") {\n\t\tconst valueIndex = overlay.baseOverrides?.get(sourceIndex);\n\t\treturn valueIndex === undefined\n\t\t\t? (nodeBase(node) as JsonValue[])[sourceIndex]!\n\t\t\t: storedValue(node.context, valueIndex);\n\t}\n\tconst overrides = overlay.insertOverrides?.get(piece.source);\n\tconst reference = overrides?.has(sourceIndex) ? overrides.get(sourceIndex)! : piece.source.refs[sourceIndex]!;\n\treturn storedValue(node.context, reference);\n}\n\nfunction hasEntryOverrideAt(overlay: ArrayOverlay, piece: Piece, sourceIndex: number): boolean {\n\treturn piece.kind === \"base\"\n\t\t? (overlay.baseOverrides?.has(sourceIndex) ?? false)\n\t\t: (overlay.insertOverrides?.get(piece.source)?.has(sourceIndex) ?? false);\n}\n\nfunction extendRightmostPiece(node: PieceNode, amount: number): void {\n\tif (node.right !== undefined) extendRightmostPiece(node.right, amount);\n\telse node.piece.length += amount;\n\tupdatePieceNode(node);\n}\n\nfunction invalidatePieceCaches(overlay: ArrayOverlay): void {\n\toverlay.pieces = undefined;\n\toverlay.baseLocations = undefined;\n\toverlay.insertLocations = undefined;\n\toverlay.plan = undefined;\n}\n\nfunction replacePieceRange(node: OverlayNode, index: number, remove: number, inserted: Piece[]): void {\n\tif (remove === 0 && inserted.length === 0) return;\n\tconst overlay = arrayOverlay(node);\n\tif (remove === 0 && index === arrayLength(overlay) && inserted.length === 1 && overlay.root !== undefined) {\n\t\tconst addition = inserted[0]!;\n\t\tconst tail = rightmostPieceNode(overlay.root).piece;\n\t\tif (\n\t\t\taddition.kind === \"insert\" &&\n\t\t\ttail.kind === \"insert\" &&\n\t\t\ttail.step === 1 &&\n\t\t\ttail.start + tail.length === tail.source.refs.length\n\t\t) {\n\t\t\tfor (let offset = 0; offset < addition.length; offset++) {\n\t\t\t\ttail.source.refs.push(addition.source.refs[addition.start + offset]!);\n\t\t\t}\n\t\t\textendRightmostPiece(overlay.root, addition.length);\n\t\t\tinvalidatePieceCaches(overlay);\n\t\t\toverlay.structural = true;\n\t\t\toverlay.generation += 1;\n\t\t\tmarkDirty(node);\n\t\t\treturn;\n\t\t}\n\t}\n\tconst [left, rest] = splitPieceTree(overlay, overlay.root, index);\n\tconst [, right] = splitPieceTree(overlay, rest, remove);\n\tconst middle = treeFromPieces(overlay, inserted);\n\toverlay.root = joinNormalized(overlay, joinNormalized(overlay, left, middle), right);\n\tinvalidatePieceCaches(overlay);\n\toverlay.structural = true;\n\toverlay.generation += 1;\n\tmarkDirty(node);\n}\n\nfunction mergePieces(pieces: Piece[]): void {\n\tfor (let index = 1; index < pieces.length; ) {\n\t\tconst left = pieces[index - 1]!;\n\t\tconst right = pieces[index]!;\n\t\tconst sameSource =\n\t\t\tleft.kind === right.kind && (left.kind === \"base\" || left.source === (right as InsertPiece).source);\n\t\tif (sameSource && left.length === 1 && right.length === 1 && Math.abs(right.start - left.start) === 1) {\n\t\t\tleft.step = (right.start - left.start) as 1 | -1;\n\t\t\tleft.length = 2;\n\t\t\tpieces.splice(index, 1);\n\t\t} else if (sameSource && left.step === right.step && left.start + left.step * left.length === right.start) {\n\t\t\tleft.length += right.length;\n\t\t\tpieces.splice(index, 1);\n\t\t} else index += 1;\n\t}\n}\n\nfunction insertPiece(node: OverlayNode, items: Stored[], start = 0): InsertPiece[] {\n\tif (items.length === start) return [];\n\tconst refs: StoredRef[] = [];\n\tfor (let index = start; index < items.length; index++) refs.push(storeValue(node.context, items[index]!));\n\treturn [{ kind: \"insert\", source: { refs }, start: 0, length: refs.length, step: 1 }];\n}\n\nfunction insertPlacementPiece(node: OverlayNode, values: unknown[], start = 0): InsertPiece[] {\n\tif (values.length === start) return [];\n\tconst storedLength = node.context.stored!.length;\n\ttry {\n\t\tfor (let index = start; index < values.length; index++)\n\t\t\tvalues[index] = storeValue(node.context, clonePlacement(values[index]));\n\t} catch (error) {\n\t\tnode.context.stored!.length = storedLength;\n\t\tthrow error;\n\t}\n\treturn [\n\t\t{\n\t\t\tkind: \"insert\",\n\t\t\tsource: { refs: values as StoredRef[] },\n\t\t\tstart,\n\t\t\tlength: values.length - start,\n\t\t\tstep: 1,\n\t\t},\n\t];\n}\n\nfunction setArrayIndex(node: OverlayNode, index: number, stored: Stored): void {\n\tconst overlay = arrayOverlay(node);\n\tconst length = arrayLength(overlay);\n\tif (index === length) {\n\t\treplacePieceRange(node, length, 0, insertPiece(node, [stored]));\n\t\treturn;\n\t}\n\tconst piece = locatePiece(overlay, index);\n\tconst sourceIndex = piece.start + piece.step * overlay.locatedOffset;\n\tconst current = entryValueAt(node, piece, sourceIndex);\n\tif (!isContainer(stored) && current === stored) return;\n\tif (piece.kind === \"base\") {\n\t\tconst existingIndex = overlay.baseOverrides?.get(sourceIndex);\n\t\tif (!isContainer(stored) && stored === (nodeBase(node) as JsonValue[])[sourceIndex]) {\n\t\t\tif (existingIndex !== undefined) releaseStoredValue(node.context, existingIndex);\n\t\t\toverlay.baseOverrides?.delete(sourceIndex);\n\t\t} else if (existingIndex === undefined) {\n\t\t\tbaseOverridesForWrite(overlay).set(sourceIndex, storeValue(node.context, stored));\n\t\t} else overlay.baseOverrides!.set(sourceIndex, replaceStoredValue(node.context, existingIndex, stored));\n\t} else {\n\t\tlet overrides = overlay.insertOverrides?.get(piece.source);\n\t\tconst existingIndex = overrides?.get(sourceIndex);\n\t\tif (!isContainer(stored) && stored === storedValue(node.context, piece.source.refs[sourceIndex]!)) {\n\t\t\tif (existingIndex !== undefined) releaseStoredValue(node.context, existingIndex);\n\t\t\toverrides?.delete(sourceIndex);\n\t\t\tif (overrides?.size === 0) overlay.insertOverrides?.delete(piece.source);\n\t\t} else {\n\t\t\tif (overrides === undefined) {\n\t\t\t\toverrides = new Map();\n\t\t\t\tinsertOverridesForWrite(overlay).set(piece.source, overrides);\n\t\t\t}\n\t\t\tif (existingIndex === undefined) overrides.set(sourceIndex, storeValue(node.context, stored));\n\t\t\telse overrides.set(sourceIndex, replaceStoredValue(node.context, existingIndex, stored));\n\t\t}\n\t}\n\tmarkDirty(node);\n}\n\nfunction setArrayLength(node: OverlayNode, next: number): void {\n\tconst current = arrayLength(arrayOverlay(node));\n\tif (next === current) return;\n\tif (next < current) replacePieceRange(node, next, current - next, []);\n\telse\n\t\treplacePieceRange(\n\t\t\tnode,\n\t\t\tcurrent,\n\t\t\t0,\n\t\t\tinsertPiece(\n\t\t\t\tnode,\n\t\t\t\tArray.from({ length: next - current }, () => null),\n\t\t\t),\n\t\t);\n}\n\nfunction toArrayLength(value: unknown): number {\n\tconst number = Number(value);\n\tif (!Number.isInteger(number) || number < 0 || number >= 4_294_967_296) throw new RangeError(\"Invalid array length\");\n\treturn number;\n}\n\nfunction toIntegerOrInfinity(value: unknown): number {\n\tconst number = Number(value);\n\tif (Number.isNaN(number) || number === 0) return 0;\n\treturn Number.isFinite(number) ? Math.trunc(number) : number;\n}\n\nfunction clampIndex(value: number, length: number): number {\n\tif (value === Number.NEGATIVE_INFINITY) return 0;\n\tif (value < 0) return Math.max(length + value, 0);\n\treturn Math.min(value, length);\n}\n\nfunction mutatorNode(receiver: unknown): OverlayNode | undefined {\n\tif (!isContainer(receiver)) return undefined;\n\tconst node = Reflect.get(receiver, NODE) as OverlayNode | undefined;\n\tif (node === undefined) return undefined;\n\tif (!Array.isArray(nodeBase(node))) throw new TypeError(\"Array mutator called on incompatible receiver\");\n\tassertWritable(node.context);\n\treturn node;\n}\n\nconst arrayMutators = {\n\tpush(this: unknown, ...items: unknown[]): number {\n\t\tconst node = mutatorNode(this);\n\t\tif (node === undefined) return Reflect.apply(Array.prototype.push, this, items) as number;\n\t\tconst length = arrayLength(arrayOverlay(node));\n\t\treplacePieceRange(node, length, 0, insertPlacementPiece(node, items));\n\t\treturn length + items.length;\n\t},\n\tpop(this: unknown): unknown {\n\t\tconst node = mutatorNode(this);\n\t\tif (node === undefined) return Reflect.apply(Array.prototype.pop, this, []);\n\t\tconst length = arrayLength(arrayOverlay(node));\n\t\tif (length === 0) return undefined;\n\t\tconst value = getArrayIndex(node, length - 1);\n\t\treplacePieceRange(node, length - 1, 1, []);\n\t\treturn value;\n\t},\n\tshift(this: unknown): unknown {\n\t\tconst node = mutatorNode(this);\n\t\tif (node === undefined) return Reflect.apply(Array.prototype.shift, this, []);\n\t\tconst length = arrayLength(arrayOverlay(node));\n\t\tif (length === 0) return undefined;\n\t\tconst value = getArrayIndex(node, 0);\n\t\treplacePieceRange(node, 0, 1, []);\n\t\treturn value;\n\t},\n\tunshift(this: unknown, ...items: unknown[]): number {\n\t\tconst node = mutatorNode(this);\n\t\tif (node === undefined) return Reflect.apply(Array.prototype.unshift, this, items) as number;\n\t\treplacePieceRange(node, 0, 0, insertPlacementPiece(node, items));\n\t\treturn arrayLength(arrayOverlay(node));\n\t},\n\tsplice(this: unknown, ...args: unknown[]): unknown[] {\n\t\tconst node = mutatorNode(this);\n\t\tif (node === undefined) return Reflect.apply(Array.prototype.splice, this, args) as unknown[];\n\t\tconst length = arrayLength(arrayOverlay(node));\n\t\tconst start = args.length === 0 ? 0 : clampIndex(toIntegerOrInfinity(args[0]), length);\n\t\tconst remove =\n\t\t\targs.length === 0\n\t\t\t\t? 0\n\t\t\t\t: args.length === 1\n\t\t\t\t\t? length - start\n\t\t\t\t\t: Math.min(Math.max(toIntegerOrInfinity(args[1]), 0), length - start);\n\t\tconst removed = Array.from({ length: remove }, (_, offset) => getArrayIndex(node, start + offset));\n\t\tconst itemStart = Math.min(2, args.length);\n\t\tconst itemCount = Math.max(args.length - 2, 0);\n\t\treplacePieceRange(node, start, remove, insertPlacementPiece(node, args, itemStart));\n\t\tsetArrayLength(node, length - remove + itemCount);\n\t\treturn removed;\n\t},\n\treverse(this: unknown): unknown {\n\t\tconst node = mutatorNode(this);\n\t\tif (node === undefined) return Reflect.apply(Array.prototype.reverse, this, []);\n\t\tconst overlay = arrayOverlay(node);\n\t\tif (arrayLength(overlay) < 2) return node.proxy;\n\t\tconst pieces = [...piecesOf(overlay)].reverse();\n\t\tfor (const piece of pieces) {\n\t\t\tpiece.start += piece.step * (piece.length - 1);\n\t\t\tpiece.step = piece.step === 1 ? -1 : 1;\n\t\t}\n\t\treplaceAllPieces(overlay, pieces);\n\t\toverlay.structural = true;\n\t\toverlay.generation += 1;\n\t\toverlay.plan = undefined;\n\t\tmarkDirty(node);\n\t\treturn node.proxy;\n\t},\n\tsort(this: unknown, comparator?: unknown): unknown {\n\t\tconst node = mutatorNode(this);\n\t\tif (node === undefined) return Reflect.apply(Array.prototype.sort, this, [comparator]);\n\t\tif (comparator !== undefined && typeof comparator !== \"function\")\n\t\t\tthrow new TypeError(\"Comparator must be a function\");\n\t\tconst overlay = arrayOverlay(node);\n\t\tconst insertedSources: InsertSource[] = [];\n\t\tconst insertedIndices: number[] = [];\n\t\tconst insertedValues: unknown[] = [];\n\t\tconst baseValues: unknown[] = new Array((nodeBase(node) as JsonValue[]).length);\n\t\tconst order: number[] = [];\n\t\tfor (const piece of piecesOf(overlay)) {\n\t\t\tfor (let offset = 0; offset < piece.length; offset++) {\n\t\t\t\tconst sourceIndex = piece.start + piece.step * offset;\n\t\t\t\tif (piece.kind === \"base\") {\n\t\t\t\t\torder.push(sourceIndex);\n\t\t\t\t\tbaseValues[sourceIndex] = publicSortValue(node, sourceIndex, insertedSources, insertedIndices);\n\t\t\t\t} else {\n\t\t\t\t\tinsertedSources.push(piece.source);\n\t\t\t\t\tinsertedIndices.push(sourceIndex);\n\t\t\t\t\tconst token = -insertedSources.length;\n\t\t\t\t\torder.push(token);\n\t\t\t\t\tinsertedValues.push(publicSortValue(node, token, insertedSources, insertedIndices));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst baseSnapshot = new Map<number, Stored>();\n\t\tfor (const [index, valueIndex] of overlay.baseOverrides ?? [])\n\t\t\tbaseSnapshot.set(index, storedValue(node.context, valueIndex));\n\t\tconst insertSnapshots = new Map<InsertSource, Map<number, Stored>>();\n\t\tfor (const [source, overrides] of overlay.insertOverrides ?? []) {\n\t\t\tconst snapshot = new Map<number, Stored>();\n\t\t\tfor (const [index, valueIndex] of overrides) snapshot.set(index, storedValue(node.context, valueIndex));\n\t\t\tinsertSnapshots.set(source, snapshot);\n\t\t}\n\t\tconst generation = overlay.generation;\n\t\torder.sort((left, right) => {\n\t\t\tconst leftValue = left < 0 ? insertedValues[-left - 1] : baseValues[left];\n\t\t\tconst rightValue = right < 0 ? insertedValues[-right - 1] : baseValues[right];\n\t\t\tif (typeof comparator === \"function\") return Number(comparator(leftValue, rightValue));\n\t\t\tconst a = String(leftValue);\n\t\t\tconst b = String(rightValue);\n\t\t\treturn a < b ? -1 : a > b ? 1 : 0;\n\t\t});\n\t\tif (\n\t\t\tbaseSnapshot.size > 0 ||\n\t\t\tinsertSnapshots.size > 0 ||\n\t\t\t(overlay.baseOverrides?.size ?? 0) > 0 ||\n\t\t\t(overlay.insertOverrides?.size ?? 0) > 0\n\t\t) {\n\t\t\tfor (const token of order) {\n\t\t\t\trestoreSortOverride(node, token, insertedSources, insertedIndices, baseSnapshot, insertSnapshots);\n\t\t\t}\n\t\t}\n\t\tconst comparatorWasStructural = overlay.generation !== generation;\n\t\tconst currentLength = arrayLength(overlay);\n\t\tconst samePrefix =\n\t\t\tcurrentLength >= order.length &&\n\t\t\torder.every((token, index) => sameSortTokenAt(overlay, index, token, insertedSources, insertedIndices));\n\t\tif (!samePrefix) {\n\t\t\treplacePieceRange(\n\t\t\t\tnode,\n\t\t\t\t0,\n\t\t\t\tMath.min(order.length, currentLength),\n\t\t\t\tpiecesFromSortOrder(order, insertedSources, insertedIndices),\n\t\t\t);\n\t\t}\n\t\tif (comparatorWasStructural) deduplicateArrayEntries(node);\n\t\treturn node.proxy;\n\t},\n\tfill(this: unknown, supplied: unknown, startArg?: unknown, endArg?: unknown): unknown {\n\t\tconst node = mutatorNode(this);\n\t\tif (node === undefined) return Reflect.apply(Array.prototype.fill, this, [supplied, startArg, endArg]);\n\t\tconst length = arrayLength(arrayOverlay(node));\n\t\tconst start = startArg === undefined ? 0 : clampIndex(toIntegerOrInfinity(startArg), length);\n\t\tconst end = endArg === undefined ? length : clampIndex(toIntegerOrInfinity(endArg), length);\n\t\tif (end <= start) return node.proxy;\n\t\tconst items = Array.from({ length: end - start }, () => clonePlacement(supplied));\n\t\treplacePieceRange(node, start, end - start, insertPiece(node, items));\n\t\treturn node.proxy;\n\t},\n\tcopyWithin(this: unknown, targetArg: unknown, startArg: unknown, endArg?: unknown): unknown {\n\t\tconst node = mutatorNode(this);\n\t\tif (node === undefined) return Reflect.apply(Array.prototype.copyWithin, this, [targetArg, startArg, endArg]);\n\t\tconst length = arrayLength(arrayOverlay(node));\n\t\tconst target = clampIndex(toIntegerOrInfinity(targetArg), length);\n\t\tconst start = clampIndex(toIntegerOrInfinity(startArg), length);\n\t\tconst end = endArg === undefined ? length : clampIndex(toIntegerOrInfinity(endArg), length);\n\t\tconst count = Math.min(Math.max(end - start, 0), length - target);\n\t\tconst values = Array.from({ length: count }, (_, offset) => clonePlacement(getArrayIndex(node, start + offset)));\n\t\treplacePieceRange(node, target, count, insertPiece(node, values));\n\t\treturn node.proxy;\n\t},\n};\n\nfunction sortTokenSource(token: number, sources: readonly InsertSource[]): InsertSource | undefined {\n\treturn token < 0 ? sources[-token - 1] : undefined;\n}\n\nfunction sortTokenIndex(token: number, indices: readonly number[]): number {\n\treturn token < 0 ? indices[-token - 1]! : token;\n}\n\nfunction publicSortValue(\n\tnode: OverlayNode,\n\ttoken: number,\n\tsources: readonly InsertSource[],\n\tindices: readonly number[],\n): unknown {\n\tconst overlay = arrayOverlay(node);\n\tconst source = sortTokenSource(token, sources);\n\tconst sourceIndex = sortTokenIndex(token, indices);\n\tconst overrideIndex =\n\t\tsource === undefined\n\t\t\t? overlay.baseOverrides?.get(sourceIndex)\n\t\t\t: overlay.insertOverrides?.get(source)?.get(sourceIndex);\n\tconst value =\n\t\toverrideIndex !== undefined\n\t\t\t? storedValue(node.context, overrideIndex)\n\t\t\t: source === undefined\n\t\t\t\t? (nodeBase(node) as JsonValue[])[sourceIndex]!\n\t\t\t\t: storedValue(node.context, source.refs[sourceIndex]!);\n\tif (!isContainer(value)) return value;\n\treturn createNode(\n\t\tnode.context,\n\t\tvalue,\n\t\tnode,\n\t\tsource === undefined ? 1 : 2,\n\t\tsourceIndex,\n\t\tsource,\n\t\tsource !== undefined || (overlay.baseOverrides?.has(sourceIndex) ?? false),\n\t).proxy;\n}\n\nfunction restoreSortOverride(\n\tnode: OverlayNode,\n\ttoken: number,\n\tsources: readonly InsertSource[],\n\tindices: readonly number[],\n\tbaseSnapshot: ReadonlyMap<number, Stored>,\n\tinsertSnapshots: ReadonlyMap<InsertSource, ReadonlyMap<number, Stored>>,\n): void {\n\tconst overlay = arrayOverlay(node);\n\tconst source = sortTokenSource(token, sources);\n\tconst sourceIndex = sortTokenIndex(token, indices);\n\tif (source === undefined) {\n\t\tconst existingIndex = overlay.baseOverrides?.get(sourceIndex);\n\t\tconst snapshotValue = baseSnapshot.get(sourceIndex);\n\t\tif (snapshotValue !== undefined) {\n\t\t\tif (existingIndex === undefined)\n\t\t\t\tbaseOverridesForWrite(overlay).set(sourceIndex, storeValue(node.context, snapshotValue));\n\t\t\telse overlay.baseOverrides!.set(sourceIndex, replaceStoredValue(node.context, existingIndex, snapshotValue));\n\t\t} else {\n\t\t\tif (existingIndex !== undefined) releaseStoredValue(node.context, existingIndex);\n\t\t\toverlay.baseOverrides?.delete(sourceIndex);\n\t\t}\n\t\treturn;\n\t}\n\tlet overrides = overlay.insertOverrides?.get(source);\n\tconst existingIndex = overrides?.get(sourceIndex);\n\tconst snapshotValue = insertSnapshots.get(source)?.get(sourceIndex);\n\tif (snapshotValue !== undefined) {\n\t\tif (overrides === undefined) {\n\t\t\toverrides = new Map();\n\t\t\tinsertOverridesForWrite(overlay).set(source, overrides);\n\t\t}\n\t\tif (existingIndex === undefined) overrides.set(sourceIndex, storeValue(node.context, snapshotValue));\n\t\telse overrides.set(sourceIndex, replaceStoredValue(node.context, existingIndex, snapshotValue));\n\t} else {\n\t\tif (existingIndex !== undefined) releaseStoredValue(node.context, existingIndex);\n\t\toverrides?.delete(sourceIndex);\n\t\tif (overrides?.size === 0) overlay.insertOverrides?.delete(source);\n\t}\n}\n\nfunction sameSortTokenAt(\n\toverlay: ArrayOverlay,\n\tlogicalIndex: number,\n\ttoken: number,\n\tsources: readonly InsertSource[],\n\tindices: readonly number[],\n): boolean {\n\tconst piece = locatePiece(overlay, logicalIndex);\n\tconst sourceIndex = piece.start + piece.step * overlay.locatedOffset;\n\tconst tokenSource = sortTokenSource(token, sources);\n\treturn (\n\t\tsourceIndex === sortTokenIndex(token, indices) &&\n\t\t((piece.kind === \"base\" && tokenSource === undefined) ||\n\t\t\t(piece.kind === \"insert\" && piece.source === tokenSource))\n\t);\n}\n\nfunction deduplicateArrayEntries(node: OverlayNode): void {\n\tconst overlay = arrayOverlay(node);\n\tconst seenBase = new Set<number>();\n\tconst seenInsert = new Map<InsertSource, Set<number>>();\n\tconst next: Piece[] = [];\n\tlet duplicated = false;\n\tfor (const piece of piecesOf(overlay)) {\n\t\tfor (let offset = 0; offset < piece.length; offset++) {\n\t\t\tconst sourceIndex = piece.start + piece.step * offset;\n\t\t\tlet seen: boolean;\n\t\t\tif (piece.kind === \"base\") {\n\t\t\t\tseen = seenBase.has(sourceIndex);\n\t\t\t\tseenBase.add(sourceIndex);\n\t\t\t} else {\n\t\t\t\tlet indices = seenInsert.get(piece.source);\n\t\t\t\tif (indices === undefined) {\n\t\t\t\t\tindices = new Set();\n\t\t\t\t\tseenInsert.set(piece.source, indices);\n\t\t\t\t}\n\t\t\t\tseen = indices.has(sourceIndex);\n\t\t\t\tindices.add(sourceIndex);\n\t\t\t}\n\t\t\tif (seen) {\n\t\t\t\tduplicated = true;\n\t\t\t\tappendMergedPiece(\n\t\t\t\t\tnext,\n\t\t\t\t\tinsertPiece(node, [clonePlacementStored(entryValueAt(node, piece, sourceIndex), node.context)])[0]!,\n\t\t\t\t);\n\t\t\t} else appendMergedPiece(next, singletonPiece(piece, sourceIndex));\n\t\t}\n\t}\n\tif (!duplicated) return;\n\treplaceAllPieces(overlay, next);\n\toverlay.structural = true;\n\toverlay.generation += 1;\n\toverlay.plan = undefined;\n\tmarkDirty(node);\n}\n\nfunction piecesFromSortOrder(\n\torder: readonly number[],\n\tsources: readonly InsertSource[],\n\tindices: readonly number[],\n): Piece[] {\n\tconst pieces: Piece[] = [];\n\tfor (const token of order) {\n\t\tconst source = token < 0 ? sources[-token - 1] : undefined;\n\t\tconst sourceIndex = token < 0 ? indices[-token - 1]! : token;\n\t\tconst previous = pieces.at(-1);\n\t\tconst sameSource =\n\t\t\tprevious !== undefined &&\n\t\t\t((source === undefined && previous.kind === \"base\") ||\n\t\t\t\t(source !== undefined && previous.kind === \"insert\" && previous.source === source));\n\t\tif (previous !== undefined && sameSource) {\n\t\t\tif (previous.length === 1) {\n\t\t\t\tconst step = sourceIndex - previous.start;\n\t\t\t\tif (step === 1 || step === -1) {\n\t\t\t\t\tprevious.step = step;\n\t\t\t\t\tprevious.length = 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t} else if (previous.start + previous.step * previous.length === sourceIndex) {\n\t\t\t\tprevious.length += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tpieces.push(\n\t\t\tsource === undefined\n\t\t\t\t? { kind: \"base\", start: sourceIndex, length: 1, step: 1 }\n\t\t\t\t: { kind: \"insert\", source, start: sourceIndex, length: 1, step: 1 },\n\t\t);\n\t}\n\treturn pieces;\n}\n\nfunction appendMergedPiece(pieces: Piece[], piece: Piece): void {\n\tconst previous = pieces.at(-1);\n\tconst sameSource =\n\t\tprevious !== undefined &&\n\t\tprevious.kind === piece.kind &&\n\t\t(previous.kind === \"base\" || previous.source === (piece as InsertPiece).source);\n\tif (previous !== undefined && sameSource && previous.length === 1 && piece.length === 1) {\n\t\tconst step = piece.start - previous.start;\n\t\tif (step === 1 || step === -1) {\n\t\t\tprevious.step = step;\n\t\t\tprevious.length = 2;\n\t\t\treturn;\n\t\t}\n\t}\n\tif (\n\t\tprevious !== undefined &&\n\t\tsameSource &&\n\t\tprevious.step === piece.step &&\n\t\tprevious.start + previous.step * previous.length === piece.start\n\t) {\n\t\tprevious.length += piece.length;\n\t} else pieces.push(piece);\n}\n\nfunction singletonPiece(piece: Piece, sourceIndex: number): Piece {\n\treturn piece.kind === \"base\"\n\t\t? { kind: \"base\", start: sourceIndex, length: 1, step: 1 }\n\t\t: { kind: \"insert\", source: piece.source, start: sourceIndex, length: 1, step: 1 };\n}\n\nfunction clonePlacement(value: unknown): Stored {\n\tconst proxyNode = isContainer(value) ? (Reflect.get(value, NODE) as OverlayNode | undefined) : undefined;\n\treturn proxyNode === undefined ? copyJson(value) : clonePlacementNode(proxyNode);\n}\n\nfunction cloneNode(node: OverlayNode): Container {\n\tassertReadable(node.context);\n\tif (Array.isArray(nodeBase(node))) {\n\t\tconst overlay = arrayOverlay(node);\n\t\tconst result: JsonValue[] = [];\n\t\tfor (const piece of piecesOf(overlay)) {\n\t\t\tfor (let offset = 0; offset < piece.length; offset++) {\n\t\t\t\tconst sourceIndex = piece.start + piece.step * offset;\n\t\t\t\tresult.push(cloneStored(entryValueAt(node, piece, sourceIndex), node.context));\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\tconst result = Object.create(Object.getPrototypeOf(nodeBase(node))) as Record<string, JsonValue>;\n\tfor (const key of ownKeys(node) as string[])\n\t\tdefineData(result, key, cloneStored(objectValue(node, key), node.context));\n\treturn result;\n}\n\nfunction cloneStored(value: Stored, context: OverlayContext): Stored {\n\tif (!isContainer(value)) return value;\n\tconst node = context.rawNodes!.get(value);\n\treturn node === undefined || (!node.dirty && !node.subtreeDirty) ? value : cloneNode(node);\n}\n\nfunction clonePlacementNode(node: OverlayNode): Container {\n\tassertReadable(node.context);\n\tif (Array.isArray(nodeBase(node))) {\n\t\tconst overlay = arrayOverlay(node);\n\t\tconst result: JsonValue[] = [];\n\t\tfor (const piece of piecesOf(overlay)) {\n\t\t\tfor (let offset = 0; offset < piece.length; offset++) {\n\t\t\t\tconst sourceIndex = piece.start + piece.step * offset;\n\t\t\t\tresult.push(clonePlacementStored(entryValueAt(node, piece, sourceIndex), node.context));\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\tconst result = Object.create(Object.getPrototypeOf(nodeBase(node))) as Record<string, JsonValue>;\n\tfor (const key of ownKeys(node) as string[])\n\t\tdefineData(result, key, clonePlacementStored(objectValue(node, key), node.context));\n\treturn result;\n}\n\nfunction clonePlacementStored(value: Stored, context: OverlayContext): Stored {\n\tif (!isContainer(value)) return copyJson(value);\n\tconst node = context.rawNodes!.get(value);\n\treturn node === undefined ? copyJson(value) : clonePlacementNode(node);\n}\n\nfunction defineData(target: object, key: PropertyKey, value: JsonValue): void {\n\tDATA_DESCRIPTOR.value = value;\n\tObject.defineProperty(target, key, DATA_DESCRIPTOR);\n\tDATA_DESCRIPTOR.value = undefined;\n}\n\nfunction emitOperations(context: OverlayContext): Op[] {\n\tconst simple = emitSimpleObjectOperations(context);\n\tif (simple !== undefined) return simple;\n\tconst operations: Op[] = [];\n\tconst forcedFolds = new Map<OverlayNode, Path>();\n\tconst emissionPaths = new Map<OverlayNode, Path>();\n\tconst denseIndices = new Map<OverlayNode, DenseCandidates>();\n\tfor (const node of context.dirty) {\n\t\trecordDenseArrayPosition(node, denseIndices);\n\t\tif (Array.isArray(nodeBase(node))) {\n\t\t\tconst overlay = arrayOverlay(node);\n\t\t\tif (!overlay.structural && (overlay.baseOverrides?.size ?? 0) > 0) {\n\t\t\t\tlet candidates = denseIndices.get(node);\n\t\t\t\tif (candidates === undefined) {\n\t\t\t\t\tcandidates = { indices: [], bits: undefined, length: (nodeBase(node) as JsonValue[]).length };\n\t\t\t\t\tdenseIndices.set(node, candidates);\n\t\t\t\t}\n\t\t\t\tfor (const index of overlay.baseOverrides!.keys()) addDenseCandidate(candidates, index);\n\t\t\t}\n\t\t}\n\t}\n\tconst denseRegions = new Map<OverlayNode, DenseRegion[]>();\n\tfor (const [array, candidates] of denseIndices) {\n\t\tconst path = resolvePath(array);\n\t\tif (path === undefined || path.some((segment) => typeof segment === \"string\" && RESERVED_SEGMENTS.has(segment))) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst regions = buildDenseRegions(candidates);\n\t\tif (regions.length > 0) denseRegions.set(array, regions);\n\t}\n\tfor (const node of context.dirty) {\n\t\tconst path = resolvePath(node);\n\t\tif (path === undefined) continue;\n\t\tif (hasCoveringDenseRegion(node, path, denseRegions)) continue;\n\t\temissionPaths.set(node, path);\n\t\tif (!Array.isArray(nodeBase(node)) && hasReservedMutation(node)) forcedFolds.set(node, path);\n\t\tconst reservedAt = path.findIndex((segment) => typeof segment === \"string\" && RESERVED_SEGMENTS.has(segment));\n\t\tif (reservedAt >= 0) {\n\t\t\tlet ancestor = node;\n\t\t\tfor (let depth = path.length; depth > reservedAt; depth--) ancestor = nodeParent(ancestor)!;\n\t\t\tforcedFolds.set(ancestor, path.slice(0, reservedAt));\n\t\t}\n\t}\n\tfor (const [node, path] of forcedFolds) emissionPaths.set(node, path);\n\tfor (const node of denseRegions.keys()) {\n\t\tconst path = resolvePath(node);\n\t\tif (path !== undefined && !hasCoveringDenseRegion(node, path, denseRegions)) emissionPaths.set(node, path);\n\t}\n\tlet maxDepth = 0;\n\tfor (const path of emissionPaths.values()) maxDepth = Math.max(maxDepth, path.length);\n\tconst buckets: OverlayNode[][] = Array.from({ length: maxDepth + 1 }, () => []);\n\tfor (const [node, path] of emissionPaths) buckets[path.length]!.push(node);\n\tconst folded = new Set<OverlayNode>();\n\tfor (const bucket of buckets) {\n\t\tfor (const node of bucket) {\n\t\t\tconst path = emissionPaths.get(node)!;\n\t\t\tif (hasPlacementAncestor(node) || hasFoldedAncestor(node, folded)) continue;\n\t\t\tif (forcedFolds.has(node)) {\n\t\t\t\temitSet(operations, path, cloneNode(node));\n\t\t\t\tfolded.add(node);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (Array.isArray(nodeBase(node))) emitArrayOperations(node, path, operations, denseRegions.get(node));\n\t\t\telse emitObjectOperations(node, path, operations);\n\t\t\tif (operations.length > MAX_DELTA_OPERATIONS) {\n\t\t\t\tlocatedDenseArray = undefined;\n\t\t\t\treturn [[\"r\", cloneNode(context.root!)]];\n\t\t\t}\n\t\t}\n\t}\n\tlocatedDenseArray = undefined;\n\treturn operations;\n}\n\nfunction emitSimpleObjectOperations(context: OverlayContext): Op[] | undefined {\n\tconst nodes: OverlayNode[] = [];\n\tfor (const node of context.dirty) {\n\t\tif (Array.isArray(nodeBase(node)) || hasReservedMutation(node) || hasPlacementAncestor(node)) return undefined;\n\t\tfor (let parent = nodeParent(node); parent !== undefined; parent = nodeParent(parent)) {\n\t\t\tif (Array.isArray(nodeBase(parent))) return undefined;\n\t\t}\n\t\tconst path = resolvePath(node);\n\t\tif (path === undefined) continue;\n\t\tfor (const segment of path) {\n\t\t\tif (typeof segment === \"string\" && RESERVED_SEGMENTS.has(segment)) return undefined;\n\t\t}\n\t\tnodes.push(node);\n\t\tif (nodes.length > MAX_SIMPLE_OBJECT_NODES) return undefined;\n\t}\n\t// Stable insertion sort avoids comparator/bucket allocations for the usual\n\t// handful of dirty object nodes.\n\tfor (let index = 1; index < nodes.length; index++) {\n\t\tconst node = nodes[index]!;\n\t\tconst depth = node.preparedPath!.length;\n\t\tlet at = index;\n\t\twhile (at > 0 && nodes[at - 1]!.preparedPath!.length > depth) {\n\t\t\tnodes[at] = nodes[at - 1]!;\n\t\t\tat -= 1;\n\t\t}\n\t\tnodes[at] = node;\n\t}\n\tconst operations: Op[] = [];\n\tlet canMaterializeDirectly = true;\n\tfor (const node of nodes) {\n\t\tif (emitObjectOperations(node, node.preparedPath!, operations)) canMaterializeDirectly = false;\n\t\tif (operations.length > MAX_DELTA_OPERATIONS) return [[\"r\", cloneNode(context.root!)]];\n\t}\n\tcontext.simpleObjectMaterialization = canMaterializeDirectly;\n\treturn operations;\n}\n\nlet locatedDenseArray: OverlayNode | undefined;\nlet locatedDenseIndex = 0;\n\nfunction locateDenseArrayPosition(node: OverlayNode): boolean {\n\tlet child = node;\n\tfor (let parent = nodeParent(child); parent !== undefined; parent = nodeParent(child)) {\n\t\tif (Array.isArray(nodeBase(parent))) {\n\t\t\tconst overlay = arrayOverlay(parent);\n\t\t\tif (child.parentKind !== 1 || overlay.structural) return false;\n\t\t\tconst sourceIndex = child.parentKey as number;\n\t\t\tconst valueIndex = overlay.baseOverrides?.get(sourceIndex);\n\t\t\tconst current =\n\t\t\t\tvalueIndex === undefined\n\t\t\t\t\t? (nodeBase(parent) as JsonValue[])[sourceIndex]\n\t\t\t\t\t: storedValue(parent.context, valueIndex);\n\t\t\tif (current !== nodeBase(child)) return false;\n\t\t\tlocatedDenseArray = parent;\n\t\t\tlocatedDenseIndex = sourceIndex;\n\t\t\treturn true;\n\t\t}\n\t\tchild = parent;\n\t}\n\treturn false;\n}\n\nfunction hasCoveringDenseRegion(\n\tnode: OverlayNode,\n\tpath: Path,\n\tdenseRegions: ReadonlyMap<OverlayNode, readonly DenseRegion[]>,\n): boolean {\n\tfor (let parent = nodeParent(node); parent !== undefined; parent = nodeParent(parent)) {\n\t\tconst regions = denseRegions.get(parent);\n\t\tif (regions === undefined) continue;\n\t\tconst parentPath = resolvePath(parent);\n\t\tif (parentPath === undefined || path.length <= parentPath.length) continue;\n\t\tlet matches = true;\n\t\tfor (let index = 0; index < parentPath.length; index++) {\n\t\t\tif (path[index] !== parentPath[index]) {\n\t\t\t\tmatches = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!matches) continue;\n\t\tconst index = path[parentPath.length];\n\t\tif (typeof index === \"number\" && regionContaining(regions, index)) return true;\n\t}\n\treturn false;\n}\n\nfunction addDenseCandidate(candidates: DenseCandidates, index: number): void {\n\tif (candidates.bits !== undefined) {\n\t\tcandidates.bits[index] = 1;\n\t\treturn;\n\t}\n\tcandidates.indices.push(index);\n\tif (candidates.indices.length < 256) return;\n\tcandidates.bits = new Uint8Array(candidates.length);\n\tfor (const existing of candidates.indices) candidates.bits[existing] = 1;\n\tcandidates.indices.length = 0;\n}\n\nfunction recordDenseArrayPosition(node: OverlayNode, groups: Map<OverlayNode, DenseCandidates>): void {\n\tif (!locateDenseArrayPosition(node)) return;\n\tlet candidates = groups.get(locatedDenseArray!);\n\tif (candidates === undefined) {\n\t\tcandidates = { indices: [], bits: undefined, length: (nodeBase(locatedDenseArray!) as JsonValue[]).length };\n\t\tgroups.set(locatedDenseArray!, candidates);\n\t}\n\taddDenseCandidate(candidates, locatedDenseIndex);\n}\n\nfunction buildDenseRegions(candidates: DenseCandidates): DenseRegion[] {\n\tif (candidates.bits === undefined) return [];\n\tconst regions: DenseRegion[] = [];\n\tconst bits = candidates.bits;\n\tfor (let at = 0; at < bits.length; ) {\n\t\twhile (at < bits.length && bits[at] === 0) at += 1;\n\t\tif (at === bits.length) break;\n\t\tconst start = at;\n\t\tlet end = at;\n\t\tlet count = 0;\n\t\tlet gap = 0;\n\t\twhile (at < bits.length) {\n\t\t\tif (bits[at] !== 0) {\n\t\t\t\tcount += 1;\n\t\t\t\tend = at;\n\t\t\t\tgap = 0;\n\t\t\t} else if (++gap > 1) break;\n\t\t\tat += 1;\n\t\t}\n\t\tconst length = end - start + 1;\n\t\tif (count >= 256 && count * 2 >= length) regions.push({ start, length });\n\t}\n\treturn regions;\n}\n\nfunction regionContaining(regions: readonly DenseRegion[], index: number): boolean {\n\tfor (const region of regions) if (index >= region.start && index < region.start + region.length) return true;\n\treturn false;\n}\n\nfunction hasReservedMutation(node: OverlayNode): boolean {\n\tif (node.writeKey !== undefined && RESERVED_SEGMENTS.has(node.writeKey)) return true;\n\tif (node.deleteKey !== undefined && RESERVED_SEGMENTS.has(node.deleteKey)) return true;\n\tif (node.writes !== undefined) {\n\t\tfor (const key of node.writes.keys()) if (RESERVED_SEGMENTS.has(key)) return true;\n\t}\n\tif (node.deletes !== undefined) {\n\t\tfor (const key of node.deletes) if (RESERVED_SEGMENTS.has(key)) return true;\n\t}\n\treturn false;\n}\n\nfunction hasFoldedAncestor(node: OverlayNode, folded: ReadonlySet<OverlayNode>): boolean {\n\tfor (let parent = nodeParent(node); parent !== undefined; parent = nodeParent(parent))\n\t\tif (folded.has(parent)) return true;\n\treturn false;\n}\n\nfunction hasPlacementAncestor(node: OverlayNode): boolean {\n\tfor (let current: OverlayNode | undefined = node; current !== undefined; current = nodeParent(current)) {\n\t\tif (nodeParent(current) !== undefined && current.parentPlacement) return true;\n\t}\n\treturn false;\n}\n\nfunction emitObjectWrite(node: OverlayNode, path: Path, operations: Op[], key: string, value: Stored): boolean {\n\tconst nextPath = [...path, key] as unknown as NonEmptyPath;\n\tconst before =\n\t\tnode.readded?.has(key) || !Object.hasOwn(nodeBase(node), key)\n\t\t\t? undefined\n\t\t\t: (nodeBase(node) as Record<string, JsonValue>)[key];\n\tconst after = cloneStored(value, node.context);\n\tconst emitted = emitChangedValue(operations, nextPath, before, after);\n\treturn isContainer(before) && isContainer(after) && !emitted;\n}\n\nfunction emitObjectOperations(node: OverlayNode, path: Path, operations: Op[]): boolean {\n\t// Immutable replay must encode delete-and-readd explicitly so string-key\n\t// insertion order matches the draft.\n\tif (node.readded !== undefined) {\n\t\tfor (const key of node.readded) {\n\t\t\tif (Object.hasOwn(nodeBase(node), key)) operations.push([\"d\", [...path, key] as unknown as NonEmptyPath]);\n\t\t}\n\t}\n\tlet normalizedContainerWrite = false;\n\tif (node.writeKey !== undefined)\n\t\tnormalizedContainerWrite = emitObjectWrite(\n\t\t\tnode,\n\t\t\tpath,\n\t\t\toperations,\n\t\t\tnode.writeKey,\n\t\t\tobjectValue(node, node.writeKey),\n\t\t);\n\tif (node.writes !== undefined) {\n\t\tfor (const [key, valueIndex] of node.writes) {\n\t\t\tif (operations.length > MAX_DELTA_OPERATIONS) return normalizedContainerWrite;\n\t\t\tif (emitObjectWrite(node, path, operations, key, storedValue(node.context, valueIndex)))\n\t\t\t\tnormalizedContainerWrite = true;\n\t\t}\n\t}\n\tif (node.deleteKey !== undefined && Object.hasOwn(nodeBase(node), node.deleteKey)) {\n\t\toperations.push([\"d\", [...path, node.deleteKey] as unknown as NonEmptyPath]);\n\t}\n\tif (node.deletes !== undefined) {\n\t\tfor (const key of node.deletes) {\n\t\t\tif (operations.length > MAX_DELTA_OPERATIONS) return normalizedContainerWrite;\n\t\t\tif (Object.hasOwn(nodeBase(node), key)) operations.push([\"d\", [...path, key] as unknown as NonEmptyPath]);\n\t\t}\n\t}\n\treturn normalizedContainerWrite;\n}\n\nfunction buildArrayPlan(node: OverlayNode): ArrayPlan {\n\tconst overlay = arrayOverlay(node);\n\tif (overlay.plan !== undefined) return overlay.plan;\n\tconst base = nodeBase(node) as JsonValue[];\n\tconst pieces = piecesOf(overlay);\n\tconst retained = new Uint8Array(base.length);\n\tconst targetBase: number[] = [];\n\tfor (const piece of pieces) {\n\t\tif (piece.kind !== \"base\") continue;\n\t\tfor (let offset = 0; offset < piece.length; offset++) {\n\t\t\tconst index = piece.start + piece.step * offset;\n\t\t\tretained[index] = 1;\n\t\t\ttargetBase.push(index);\n\t\t}\n\t}\n\tconst removeRuns: number[] = [];\n\tfor (let end = base.length; end > 0; ) {\n\t\tif (retained[end - 1] !== 0) {\n\t\t\tend -= 1;\n\t\t\tcontinue;\n\t\t}\n\t\tlet start = end - 1;\n\t\twhile (start > 0 && retained[start - 1] === 0) start -= 1;\n\t\tremoveRuns.push(start, end - start);\n\t\tend = start;\n\t}\n\tconst retainedBase: number[] = [];\n\tfor (let index = 0; index < retained.length; index++) if (retained[index] !== 0) retainedBase.push(index);\n\tlet permutation: number[] | undefined;\n\tif (targetBase.some((value, index) => value !== retainedBase[index])) {\n\t\tconst positions = new Map(retainedBase.map((value, index) => [value, index]));\n\t\tpermutation = targetBase.map((value) => positions.get(value)!);\n\t}\n\tconst insertRuns: number[] = [];\n\tlet logicalIndex = 0;\n\tfor (let pieceIndex = 0; pieceIndex < pieces.length; ) {\n\t\tconst piece = pieces[pieceIndex]!;\n\t\tif (piece.kind === \"base\") {\n\t\t\tlogicalIndex += piece.length;\n\t\t\tpieceIndex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tconst startPiece = pieceIndex;\n\t\twhile (pieceIndex < pieces.length && pieces[pieceIndex]!.kind === \"insert\") {\n\t\t\tlogicalIndex += pieces[pieceIndex]!.length;\n\t\t\tpieceIndex += 1;\n\t\t}\n\t\tinsertRuns.push(logicalIndex - rangeLength(pieces, startPiece, pieceIndex), startPiece, pieceIndex);\n\t}\n\toverlay.plan = { removeRuns, permutation, insertRuns };\n\treturn overlay.plan;\n}\n\nfunction rangeLength(pieces: readonly Piece[], start: number, end: number): number {\n\tlet length = 0;\n\tfor (let index = start; index < end; index++) length += pieces[index]!.length;\n\treturn length;\n}\n\nfunction emitArrayOperations(\n\tnode: OverlayNode,\n\tpath: Path,\n\toperations: Op[],\n\tdenseRegions: readonly DenseRegion[] | undefined,\n): void {\n\tconst overlay = arrayOverlay(node);\n\tconst base = nodeBase(node) as JsonValue[];\n\tif (denseRegions !== undefined) {\n\t\tfor (const region of denseRegions) {\n\t\t\tif (operations.length > MAX_DELTA_OPERATIONS) return;\n\t\t\toperations.push([\"p\", path, region.start, region.length, cloneArrayRegion(node, region)]);\n\t\t}\n\t}\n\tif (overlay.structural) {\n\t\tconst plan = buildArrayPlan(node);\n\t\tfor (let index = 0; index < plan.removeRuns.length; index += 2) {\n\t\t\tif (operations.length > MAX_DELTA_OPERATIONS) return;\n\t\t\toperations.push([\"p\", path, plan.removeRuns[index]!, plan.removeRuns[index + 1]!, []]);\n\t\t}\n\t\tif (plan.permutation !== undefined) operations.push([\"m\", path, plan.permutation]);\n\t\tconst pieces = piecesOf(overlay);\n\t\tfor (let run = 0; run < plan.insertRuns.length; run += 3) {\n\t\t\tif (operations.length > MAX_DELTA_OPERATIONS) return;\n\t\t\tconst logicalIndex = plan.insertRuns[run]!;\n\t\t\tconst items: JsonValue[] = [];\n\t\t\tfor (let pieceIndex = plan.insertRuns[run + 1]!; pieceIndex < plan.insertRuns[run + 2]!; pieceIndex++) {\n\t\t\t\tconst piece = pieces[pieceIndex]! as InsertPiece;\n\t\t\t\tfor (let offset = 0; offset < piece.length; offset++) {\n\t\t\t\t\tconst sourceIndex = piece.start + piece.step * offset;\n\t\t\t\t\titems.push(cloneStored(entryValueAt(node, piece, sourceIndex), node.context));\n\t\t\t\t}\n\t\t\t}\n\t\t\toperations.push([\"p\", path, logicalIndex, 0, items]);\n\t\t}\n\t}\n\tfor (const [baseIndex, valueIndex] of overlay.baseOverrides ?? []) {\n\t\tif (operations.length > MAX_DELTA_OPERATIONS) return;\n\t\tconst index = findEntryIndex(overlay, 1, baseIndex, undefined);\n\t\tif (index === undefined || (denseRegions !== undefined && regionContaining(denseRegions, index))) continue;\n\t\temitChangedValue(\n\t\t\toperations,\n\t\t\t[...path, index] as unknown as NonEmptyPath,\n\t\t\tbase[baseIndex],\n\t\t\tcloneStored(storedValue(node.context, valueIndex), node.context),\n\t\t);\n\t}\n}\n\nfunction cloneArrayRegion(node: OverlayNode, region: DenseRegion): JsonValue[] {\n\tconst overlay = arrayOverlay(node);\n\tconst result: JsonValue[] = [];\n\tfor (let index = region.start; index < region.start + region.length; index++) {\n\t\tconst piece = locatePiece(overlay, index);\n\t\tconst sourceIndex = piece.start + piece.step * overlay.locatedOffset;\n\t\tresult.push(cloneStored(entryValueAt(node, piece, sourceIndex), node.context));\n\t}\n\treturn result;\n}\n\nfunction emitChangedValue(\n\toperations: Op[],\n\tpath: NonEmptyPath,\n\tbefore: JsonValue | undefined,\n\tafter: JsonValue,\n): boolean {\n\tif (!isContainer(after) && before === after) return false;\n\tif (isContainer(before) && isContainer(after) && equalTrustedJson(before, after)) return false;\n\tif (typeof before === \"string\" && typeof after === \"string\") {\n\t\t// Slice/equality stays on V8's rope fast path; startsWith scans the entire\n\t\t// accumulated prefix on every append.\n\t\tif (after.length > before.length && after.slice(0, before.length) === before) {\n\t\t\toperations.push([\"a\", path, after.slice(before.length)]);\n\t\t\treturn true;\n\t\t}\n\t\tconst shared = overlap(before, after, 65_536);\n\t\tif (shared > 0) {\n\t\t\toperations.push([\"t\", path, before.length - shared]);\n\t\t\tif (after.length > shared) operations.push([\"a\", path, after.slice(shared)]);\n\t\t\treturn true;\n\t\t}\n\t}\n\toperations.push([\"s\", path, after]);\n\treturn true;\n}\n\nfunction emitSet(operations: Op[], path: Path, value: JsonValue): void {\n\tif (path.length === 0) operations.push([\"r\", value]);\n\telse operations.push([\"s\", path as NonEmptyPath, value]);\n}\n\nfunction resolvePath(node: OverlayNode): Path | undefined {\n\tif (node.preparedPath !== undefined) return node.preparedPath;\n\tconst parent = nodeParent(node);\n\tif (parent === undefined) {\n\t\tnode.preparedPath = [];\n\t\treturn node.preparedPath;\n\t}\n\tconst parentPath = resolvePath(parent);\n\tif (parentPath === undefined) return undefined;\n\tif (node.parentKind === 0) {\n\t\tconst key = node.parentKey as string;\n\t\tif (!objectHas(parent, key) || objectValue(parent, key) !== nodeBase(node)) return undefined;\n\t\tnode.preparedPath = [...parentPath, key];\n\t\treturn node.preparedPath;\n\t}\n\tconst overlay = arrayOverlay(parent);\n\tconst index = findEntryIndex(overlay, node.parentKind, node.parentKey as number, node.parentSource);\n\tif (index === undefined) return undefined;\n\tconst piece = locatePiece(overlay, index);\n\tif (entryValueAt(parent, piece, node.parentKey as number) !== nodeBase(node)) return undefined;\n\tnode.preparedPath = [...parentPath, index];\n\treturn node.preparedPath;\n}\n\nfunction ensurePieceLocations(overlay: ArrayOverlay): void {\n\tif (overlay.baseLocations !== undefined) return;\n\toverlay.baseLocations = [];\n\toverlay.insertLocations = new Map();\n\tlet logicalStart = 0;\n\tfor (const piece of piecesOf(overlay)) {\n\t\tconst last = piece.start + piece.step * (piece.length - 1);\n\t\tconst location = {\n\t\t\tpiece,\n\t\t\tlogicalStart,\n\t\t\tminimum: Math.min(piece.start, last),\n\t\t\tmaximum: Math.max(piece.start, last),\n\t\t};\n\t\tif (piece.kind === \"base\") overlay.baseLocations.push(location);\n\t\telse {\n\t\t\tlet locations = overlay.insertLocations.get(piece.source);\n\t\t\tif (locations === undefined) {\n\t\t\t\tlocations = [];\n\t\t\t\toverlay.insertLocations.set(piece.source, locations);\n\t\t\t}\n\t\t\tlocations.push(location);\n\t\t}\n\t\tlogicalStart += piece.length;\n\t}\n\tconst byMinimum = (left: PieceLocation, right: PieceLocation): number => left.minimum - right.minimum;\n\toverlay.baseLocations.sort(byMinimum);\n\tfor (const locations of overlay.insertLocations.values()) locations.sort(byMinimum);\n}\n\nfunction findEntryIndex(\n\toverlay: ArrayOverlay,\n\tkind: ParentKind,\n\tsourceIndex: number,\n\tsource: InsertSource | undefined,\n): number | undefined {\n\tif (kind === 1 && !overlay.structural) return sourceIndex;\n\tensurePieceLocations(overlay);\n\tconst locations = kind === 1 ? overlay.baseLocations! : overlay.insertLocations!.get(source!);\n\tif (locations === undefined) return undefined;\n\tlet low = 0;\n\tlet high = locations.length;\n\twhile (low < high) {\n\t\tconst middle = (low + high) >>> 1;\n\t\tif (locations[middle]!.minimum <= sourceIndex) low = middle + 1;\n\t\telse high = middle;\n\t}\n\tconst location = locations[low - 1];\n\tif (location === undefined || sourceIndex > location.maximum) return undefined;\n\tconst offset = (sourceIndex - location.piece.start) / location.piece.step;\n\treturn offset >= 0 && offset < location.piece.length ? location.logicalStart + offset : undefined;\n}\n\nfunction ensureOperations(context: OverlayContext): Op[] {\n\tif (context.ops !== undefined) return context.ops;\n\tassertReadable(context);\n\tif (context.replacement) {\n\t\tconst base = context.tracker.deref()?.replacementBase(context);\n\t\tcontext.replacementNoop =\n\t\t\tbase !== undefined && equalTrustedJson(base as unknown as JsonValue, nodeBase(context.root!) as JsonValue);\n\t\tcontext.ops = context.replacementNoop ? [] : [[\"r\", nodeBase(context.root!)]];\n\t} else context.ops = emitOperations(context);\n\treturn context.ops;\n}\n\nfunction equalTrustedJson(left: JsonValue, right: JsonValue): boolean {\n\tif (left === right) return true;\n\tif (!isContainer(left) || !isContainer(right) || Array.isArray(left) !== Array.isArray(right)) return false;\n\tif (Array.isArray(left)) {\n\t\tconst other = right as JsonValue[];\n\t\tif (left.length !== other.length) return false;\n\t\tfor (let index = 0; index < left.length; index++)\n\t\t\tif (!equalTrustedJson(left[index]!, other[index]!)) return false;\n\t\treturn true;\n\t}\n\tconst other = right as Record<string, JsonValue>;\n\tconst keys = Object.keys(left);\n\tif (keys.length !== Object.keys(other).length) return false;\n\tfor (const key of keys) if (!Object.hasOwn(other, key) || !equalTrustedJson(left[key]!, other[key]!)) return false;\n\treturn true;\n}\n\nfunction abortContext(context: OverlayContext): void {\n\tif (context.status.value === \"aborted\" || context.status.value === \"consumed\" || context.status.value === \"stale\")\n\t\treturn;\n\tcontext.status.value = \"aborted\";\n\tclearContext(context);\n}\n\nfunction releaseOverlayReferences(context: OverlayContext): void {\n\tcontext.tracker.deref()?.releaseContext(context);\n\tif (locatedDenseArray?.context === context) locatedDenseArray = undefined;\n\tcontext.overlayReleased = true;\n\tcontext.dirty.length = 0;\n\tcontext.nodes.length = 0;\n\tcontext.rawNodes = undefined;\n\tcontext.ops = undefined;\n\tcontext.root = undefined;\n\tcontext.bases = undefined;\n\tcontext.stored = undefined;\n\tcontext.baseValue = undefined;\n}\n\nfunction clearContext(context: OverlayContext): void {\n\tcontext.tracker.deref()?.releaseContext(context);\n\tif (locatedDenseArray?.context === context) locatedDenseArray = undefined;\n\tfor (const node of context.nodes) {\n\t\tif (Array.isArray(node.target)) node.target.length = 0;\n\t\tReflect.deleteProperty(node.target, NODE);\n\t\tnode.writes?.clear();\n\t\tnode.deletes?.clear();\n\t\tnode.readded?.clear();\n\t\tif (node.array?.pieces !== undefined) node.array.pieces.length = 0;\n\t\tif (node.array !== undefined) {\n\t\t\tnode.array.root = undefined;\n\t\t\tnode.array.baseLocations = undefined;\n\t\t\tnode.array.insertLocations = undefined;\n\t\t}\n\t\tnode.array?.baseOverrides?.clear();\n\t\tnode.array?.insertOverrides?.clear();\n\t\tnode.parentSource = undefined;\n\t\tnode.target = RELEASED;\n\t\tnode.proxy = RELEASED;\n\t\tnode.writeKey = undefined;\n\t\tnode.writeValue = undefined;\n\t\tnode.writes = undefined;\n\t\tnode.deleteKey = undefined;\n\t\tnode.deletes = undefined;\n\t\tnode.readded = undefined;\n\t\tnode.array = undefined;\n\t\tnode.subtreeDirty = undefined;\n\t\tnode.preparedPath = undefined;\n\t}\n\tcontext.dirty.length = 0;\n\tcontext.nodes.length = 0;\n\tcontext.rawNodes = undefined;\n\tcontext.ops = undefined;\n\tcontext.root = undefined;\n\tcontext.bases = undefined;\n\tcontext.stored = undefined;\n\tcontext.baseValue = undefined;\n\tcontext.overlayReleased = true;\n}\n\nfunction isContainer(value: unknown): value is Container {\n\treturn value !== null && typeof value === \"object\";\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { RemoteServiceProvider } from "../services/provider.ts";
|
|
2
|
+
import type { Facet, FacetOptions } from "../types.ts";
|
|
3
|
+
/** Private lifecycle and dependency kernel behind the atomic host entry point. */
|
|
4
|
+
export declare class FacetKernel {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(options: FacetOptions);
|
|
7
|
+
get provider(): RemoteServiceProvider;
|
|
8
|
+
activate(): Promise<void>;
|
|
9
|
+
reload(facets: readonly Facet[]): Promise<void>;
|
|
10
|
+
dispose(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/facets/host.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,qBAAqB,EAAuC,MAAM,yBAAyB,CAAC;AAErG,OAAO,KAAK,EAEX,KAAK,EAEL,YAAY,EAOZ,MAAM,aAAa,CAAC;AAgUrB,kFAAkF;AAClF,qBAAa,WAAW;;IAavB,YAAY,OAAO,EAAE,YAAY,EAQhC;IAED,IAAI,QAAQ,IAAI,qBAAqB,CAGpC;IAsBK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAiC9B;IAEK,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFpD;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAM7B;CAmRD"}
|