doxum 0.1.19 → 0.1.21
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/README.md +30 -11
- package/dist/{scope-d-L87NeC.js → access-BeSV5ve-.js} +114 -20
- package/dist/access-BeSV5ve-.js.map +1 -0
- package/dist/{scope-Ezs-Y3TY.cjs → access-Bienf28h.cjs} +149 -19
- package/dist/access-Bienf28h.cjs.map +1 -0
- package/dist/advanced-BRL5pN0y.cjs +1361 -0
- package/dist/advanced-BRL5pN0y.cjs.map +1 -0
- package/dist/advanced-COFJtWMT.js +1188 -0
- package/dist/advanced-COFJtWMT.js.map +1 -0
- package/dist/{advanced-C2fpjbK3.d.ts → advanced-DfKc7TZR.d.cts} +27 -22
- package/dist/{advanced-DlOYk1vi.d.cts → advanced-FgdTwu5b.d.ts} +27 -22
- package/dist/advanced.cjs +1 -1
- package/dist/advanced.d.cts +2 -2
- package/dist/advanced.d.ts +2 -2
- package/dist/advanced.js +1 -1
- package/dist/{contract-XmKnroJq.d.cts → contract-CdmDHRUq.d.cts} +8 -6
- package/dist/{contract-CATCCVu5.d.ts → contract-KG5XnQZt.d.ts} +8 -6
- package/dist/{driver-CSnhMjbP.js → driver-CLYJOGDQ.js} +2 -2
- package/dist/{driver-CSnhMjbP.js.map → driver-CLYJOGDQ.js.map} +1 -1
- package/dist/{driver-BCyfqxsl.cjs → driver-Djr3BVvo.cjs} +2 -2
- package/dist/{driver-BCyfqxsl.cjs.map → driver-Djr3BVvo.cjs.map} +1 -1
- package/dist/index.cjs +1150 -1993
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1105 -1948
- package/dist/index.js.map +1 -1
- package/dist/{integration-CxVhq-KD.js → integration-C4Isp8lJ.js} +3 -2
- package/dist/{integration-CxVhq-KD.js.map → integration-C4Isp8lJ.js.map} +1 -1
- package/dist/{integration-B7VDgAOJ.cjs → integration-Z6MsfFI7.cjs} +4 -3
- package/dist/{integration-B7VDgAOJ.cjs.map → integration-Z6MsfFI7.cjs.map} +1 -1
- package/dist/integration.cjs +3 -3
- package/dist/integration.d.cts +1 -1
- package/dist/integration.d.ts +1 -1
- package/dist/integration.js +3 -3
- package/dist/{issue-DhrNdQNg.cjs → issue-DjK1xp5K.cjs} +106 -22
- package/dist/issue-DjK1xp5K.cjs.map +1 -0
- package/dist/{issue-DVaGQGeP.js → issue-W0hT8u8D.js} +81 -15
- package/dist/issue-W0hT8u8D.js.map +1 -0
- package/dist/local-sync.cjs +2 -2
- package/dist/local-sync.d.cts +1 -1
- package/dist/local-sync.d.ts +1 -1
- package/dist/local-sync.js +2 -2
- package/dist/{notification-IQIJyH3Q.js → notification-Bkjau6B6.js} +3 -56
- package/dist/notification-Bkjau6B6.js.map +1 -0
- package/dist/{notification-CDSUfiip.cjs → notification-DJfouMEb.cjs} +2 -91
- package/dist/notification-DJfouMEb.cjs.map +1 -0
- package/dist/react.cjs +2 -2
- package/dist/react.js +2 -2
- package/package.json +1 -1
- package/skills/doxum-runtime/SKILL.md +4 -1
- package/skills/doxum-runtime/references/guide.en.md +5 -2
- package/skills/doxum-runtime/references/guide.zh-CN.md +5 -2
- package/skills/doxum-runtime/references/projections.en.md +23 -9
- package/skills/doxum-runtime/references/projections.zh-CN.md +18 -6
- package/dist/advanced-BYZCjNWL.js +0 -680
- package/dist/advanced-BYZCjNWL.js.map +0 -1
- package/dist/advanced-CMMNk49G.cjs +0 -763
- package/dist/advanced-CMMNk49G.cjs.map +0 -1
- package/dist/issue-DVaGQGeP.js.map +0 -1
- package/dist/issue-DhrNdQNg.cjs.map +0 -1
- package/dist/notification-CDSUfiip.cjs.map +0 -1
- package/dist/notification-IQIJyH3Q.js.map +0 -1
- package/dist/scope-Ezs-Y3TY.cjs.map +0 -1
- package/dist/scope-d-L87NeC.js.map +0 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["checkKey","AddressIndex","contains","DocumentDisposedError","equalValue","copyValue","compiledShape","resolveLocated","resolveValue","memberKey","AddressIndex","contains","sealChanges","createAddressResolver","checkValue","fail","resolveContainer","resolveTreeContainer","resolveValue","copyValue","memberKey","checkKey","invalidValue","fail","checkValue","ParseError","copyValue","DocumentDisposedError","accessOf","DocumentReentrancyError","notify","MutationRejected","TransactionRejected","resolveAddress","read","createAccess","decodeChanges","subscribeRoot","subscribeTargets","createNotification","accessOf","readWith","accessOf","nodeAt","equalValue","collectionAccess","snapshot","createAccess","attachProjection","ProjectionError","projectionHandles","documentReadableOwner","ProjectionDisposedError","ProjectionDisposedError","createScheduler","snapshot","ownerOf","ProjectionDisposedError","definitionOf","accessOf","readAddress","input","derive","isProjection","incremental"],"sources":["../core/src/schema.ts","../core/src/impact.ts","../core/src/history.ts","../core/src/mutation/state.ts","../core/src/mutation/recorder.ts","../core/src/mutation/session.ts","../core/src/mutation/operations/replay.ts","../core/src/runtime.ts","../core/src/runtime/readable.ts","../core/src/projection/select.ts","../core/src/projection/source.ts","../core/src/projection/node.ts","../core/src/projection/value.ts","../core/src/projection/collection-state.ts","../core/src/projection/collection.ts","../core/src/projection/group.ts","../core/src/projection/graph.ts","../core/src/projection/runtime.ts"],"sourcesContent":["import type { Validator } from './schema-value';\nimport { checkKey } from './schema-value';\nexport type DocumentAddress = readonly string[];\n\n/** Shared payloads are immutable through every alias, including builtin methods. */\nexport type ReadonlyValue<T> = T extends (...args: never[]) => unknown\n ? T\n : T extends ReadonlyMap<infer K, infer V>\n ? ReadonlyMap<ReadonlyValue<K>, ReadonlyValue<V>>\n : T extends ReadonlySet<infer V>\n ? ReadonlySet<ReadonlyValue<V>>\n : T extends Date\n ? Omit<Date, `set${string}`>\n : T extends object\n ? { readonly [K in keyof T]: ReadonlyValue<T[K]> }\n : T;\n\nexport type DocumentListConfig<TItem> = {\n readonly keyOf: (item: ReadonlyValue<TItem>) => string;\n};\nexport type DocumentTreeNode<TValue> = {\n readonly parentId?: string;\n readonly children: readonly string[];\n readonly value?: ReadonlyValue<TValue>;\n};\nexport type DocumentTreeValue<TValue> = {\n readonly rootId?: string;\n readonly nodes: Readonly<Record<string, DocumentTreeNode<TValue>>>;\n};\n\ntype BaseNode<K extends string> = {\n readonly kind: K;\n readonly optional?: boolean;\n};\nexport type FieldNode<T, Optional extends boolean = false> = BaseNode<'field'> & {\n readonly __value?: T;\n readonly validator?: Validator<T>;\n} & (Optional extends true ? { readonly optional: true } : { readonly optional?: false });\n/** A node with optional presence. The marker replaces, rather than intersects, a field marker. */\nexport type OptionalNode<TNode extends DocumentNode> =\n TNode extends FieldNode<infer TValue, boolean>\n ? FieldNode<TValue, true>\n : TNode & { readonly optional: true };\nexport interface ObjectShape {\n readonly [key: string]: DocumentNode;\n}\nexport type ObjectNode<TShape extends ObjectShape = ObjectShape> = BaseNode<'object'> & {\n readonly shape: TShape;\n};\nexport interface VariantShape {\n readonly [key: string]: ObjectNode<ObjectShape>;\n}\nexport type VariantNode<\n TTag extends string,\n TVariants extends VariantShape,\n> = BaseNode<'variant'> & {\n readonly tag: TTag;\n readonly variants: TVariants;\n};\nexport type TableNode<\n TValue extends ObjectNode<ObjectShape> | VariantNode<string, VariantShape>,\n TKey extends string = string,\n> = BaseNode<'table'> & {\n readonly value: TValue;\n readonly key?: Validator<TKey>;\n};\nexport type MapNode<\n TValue extends ValueSchemaNode,\n TKey extends string = string,\n> = BaseNode<'map'> & {\n readonly value: TValue;\n readonly key?: Validator<TKey>;\n};\nexport type ListNode<TItem> = BaseNode<'list'> & {\n readonly value: FieldNode<TItem, boolean>;\n keyOf(item: ReadonlyValue<TItem>): string;\n};\nexport type TreeNode<TValue> = BaseNode<'tree'> & {\n readonly value: FieldNode<TValue, boolean>;\n};\n\nexport type DocumentNode =\n | FieldNode<unknown, false>\n | FieldNode<unknown, true>\n | ObjectNode<ObjectShape>\n | VariantNode<string, VariantShape>\n | TableNode<ObjectNode<ObjectShape> | VariantNode<string, VariantShape>>\n | MapNode<ValueSchemaNode>\n | ListNode<unknown>\n | TreeNode<unknown>;\n\n// Flatten only schema-generated objects; user-supplied field values stay opaque.\ntype SchemaObject<T> = { [K in keyof T]: T[K] } & {};\n\n/** Infer a document or node value, including optional node presence. */\nexport type Infer<T extends DocumentNode> = T extends { readonly optional: true }\n ? NodeValue<T> | undefined\n : NodeValue<T>;\n\ntype NodeValue<N> =\n N extends FieldNode<infer T, infer O>\n ? O extends true\n ? ReadonlyValue<T> | undefined\n : ReadonlyValue<T>\n : N extends ObjectNode<infer S>\n ? ShapeValue<S>\n : N extends VariantNode<infer T, infer V>\n ? {\n [K in keyof V & string]: SchemaObject<{ readonly [P in T]: K } & NodeValue<V[K]>>;\n }[keyof V & string]\n : N extends TableNode<infer V, infer K>\n ? {\n readonly ids: readonly K[];\n readonly byId: Readonly<Record<K, NodeValue<V>>>;\n }\n : N extends MapNode<infer V, infer K>\n ? Readonly<Record<K, NodeValue<V>>>\n : N extends ListNode<infer I>\n ? readonly ReadonlyValue<I>[]\n : N extends TreeNode<infer T>\n ? DocumentTreeValue<T>\n : never;\n\ntype OptionalKeys<S extends ObjectShape> = {\n [K in keyof S]: S[K] extends { readonly optional: true } ? K : never;\n}[keyof S];\ntype RequiredKeys<S extends ObjectShape> = Exclude<keyof S, OptionalKeys<S>>;\ntype ShapeValue<S extends ObjectShape> = SchemaObject<\n { readonly [K in RequiredKeys<S>]: NodeValue<S[K]> } & {\n readonly [K in OptionalKeys<S>]?: NodeValue<S[K]>;\n }\n>;\n\nexport type EntitySchemaNode = ObjectNode<ObjectShape> | VariantNode<string, VariantShape>;\nexport type ValueSchemaNode = EntitySchemaNode | FieldNode<unknown, boolean>;\nexport type DocumentAnchor<K extends string = string> =\n { readonly at: 'start' | 'end' } | { readonly before: K } | { readonly after: K };\n\nexport type CollectionSelector<\n TId extends string = string,\n TNode extends ValueSchemaNode = ValueSchemaNode,\n> = {\n readonly kind: 'collection';\n readonly schema: ObjectNode;\n readonly address: DocumentAddress;\n readonly __id?: TId;\n /** Compile-time entry schema carried by schema selectors. */\n readonly __node?: TNode;\n};\nexport type ValueSelector<TResult = unknown> = {\n readonly kind: 'value';\n readonly schema: ObjectNode;\n readonly address: DocumentAddress;\n readonly __value?: TResult;\n};\nexport type ImpactTarget<T = unknown> =\n | { readonly kind: 'value'; readonly at: DocumentAddress }\n | ValueSelector<T>\n | {\n readonly kind: 'collection';\n readonly at: DocumentAddress;\n readonly id?: string;\n }\n | CollectionSelector<string>;\ndeclare const pathValue: unique symbol;\ndeclare const collectionNode: unique symbol;\ndeclare const collectionKey: unique symbol;\ntype PathMarker<TValue> = { readonly [pathValue]: TValue };\nexport type PathValueOf<T> = T extends { readonly [pathValue]: infer TValue } ? TValue : never;\n\ntype SchemaPathFor<S extends ObjectShape = ObjectShape, TValue = unknown> = {\n readonly [K in keyof S]: PathValue<S[K]>;\n} & PathMarker<TValue>;\n\nexport type SchemaPath<S extends ObjectShape = ObjectShape> = SchemaPathFor<S, ShapeValue<S>>;\nexport type PathPick<S extends ObjectNode = ObjectNode> = (\n path: SchemaPath<S['shape']>\n) => PathMarker<unknown>;\n\ntype VariantKeys<V extends VariantShape> = {\n [K in keyof V & string]: keyof (V[K] extends ObjectNode<infer S> ? S : {});\n}[keyof V & string] &\n string;\ntype VariantFieldPath<V extends VariantShape, K extends string> = {\n [P in keyof V & string]: V[P] extends ObjectNode<infer S>\n ? K extends keyof S\n ? PathValue<S[K]>\n : never\n : never;\n}[keyof V & string];\ntype VariantPath<T extends string, V extends VariantShape, TValue> = {\n readonly [K in VariantKeys<V>]: VariantFieldPath<V, K>;\n} & { readonly [K in T]: PathMarker<keyof V & string> } & PathMarker<TValue>;\nexport type CollectionPath<\n N extends ValueSchemaNode = ValueSchemaNode,\n TValue = unknown,\n K extends string = string,\n> = PathMarker<TValue> & {\n item(id: K): PathValue<N>;\n readonly [collectionNode]: N;\n readonly [collectionKey]: K;\n};\n\ntype PathValue<N extends DocumentNode> =\n N extends ObjectNode<infer S>\n ? SchemaPathFor<S, Infer<N>>\n : N extends VariantNode<infer TTag, infer V>\n ? VariantPath<TTag, V, Infer<N>>\n : N extends TableNode<infer V, infer K>\n ? CollectionPath<V, Infer<N>, K>\n : N extends MapNode<infer V, infer K>\n ? CollectionPath<V, Infer<N>, K>\n : PathMarker<Infer<N>>;\ntype CollectionInfo<T> = T extends {\n readonly [collectionNode]: infer TNode extends ValueSchemaNode;\n readonly [collectionKey]: infer K extends string;\n}\n ? { readonly id: K; readonly node: TNode }\n : never;\nexport type CollectionId<T> =\n CollectionInfo<T> extends { readonly id: infer TId extends string } ? TId : string;\nexport type CollectionNode<T> =\n CollectionInfo<T> extends { readonly node: infer TNode extends ValueSchemaNode }\n ? TNode\n : ValueSchemaNode;\n\nconst node = <T extends DocumentNode>(value: T): T => Object.freeze(value);\nexport const field = <T>(validator?: Validator<T>): FieldNode<T> =>\n node({ kind: 'field', ...(validator ? { validator } : {}) });\ntype OptionalLeaf =\n | FieldNode<unknown, boolean>\n | VariantNode<string, VariantShape>\n | MapNode<ValueSchemaNode>\n | ListNode<unknown>\n | TreeNode<unknown>;\nexport const optional = <T extends OptionalLeaf>(value: T): OptionalNode<T> => {\n if (!['field', 'variant', 'map', 'list', 'tree'].includes(value.kind))\n throw new TypeError('Only field, variant, map, list and tree nodes support optional presence.');\n return node({ ...value, optional: true } as OptionalNode<T>);\n};\nexport const object = <S extends ObjectShape>(shape: S): ObjectNode<S> =>\n node({ kind: 'object', shape: Object.freeze({ ...shape }) });\nexport const variant = <T extends string, V extends VariantShape>(\n tag: T,\n variants: V\n): VariantNode<T, V> => node({ kind: 'variant', tag, variants: Object.freeze({ ...variants }) });\nexport const table = <V extends EntitySchemaNode, K extends string = string>(\n value: V,\n options?: { readonly key: Validator<K> }\n): TableNode<V, K> => node({ kind: 'table', value, ...options });\nexport const map = <V extends ValueSchemaNode, K extends string = string>(\n value: V,\n options?: { readonly key: Validator<K> }\n): MapNode<V, K> => node({ kind: 'map', value, ...options });\nexport const list = <TItem>(\n value: FieldNode<TItem, boolean>,\n config: DocumentListConfig<TItem>\n): ListNode<TItem> => node({ kind: 'list', keyOf: config.keyOf, value });\nexport const tree = <TValue>(value: FieldNode<TValue, boolean>): TreeNode<TValue> =>\n node({ kind: 'tree', value });\n\nconst paths = new WeakMap<\n object,\n {\n readonly address: DocumentAddress;\n readonly nodes: readonly DocumentNode[];\n readonly owner: object;\n }\n>();\n\nconst pathProxy = (\n nodes: readonly DocumentNode[],\n address: DocumentAddress,\n owner: object\n): object => {\n const proxy = new Proxy(\n {},\n {\n get: (_target, property: string | symbol) => {\n if (typeof property !== 'string') return undefined;\n const collection = nodes.every(node => node.kind === 'table' || node.kind === 'map');\n if (collection && property === 'item')\n return (id: string) => {\n if (typeof id !== 'string') throw new TypeError('Collection keys must be strings.');\n for (const node of nodes)\n if (node.kind === 'table' || node.kind === 'map') {\n const invalid = checkKey(node.key, id, [...address, id]);\n if (invalid) throw new TypeError(invalid.message);\n }\n return pathProxy(\n nodes.map(node => (node as TableNode<EntitySchemaNode>).value),\n [...address, id],\n owner\n );\n };\n const children = nodes.flatMap(node => {\n if (node.kind === 'object')\n return Object.hasOwn(node.shape, property) ? [node.shape[property]] : [];\n if (node.kind !== 'variant') return [];\n if (property === node.tag) return [field<string>()];\n return Object.values(node.variants).flatMap(branch =>\n Object.hasOwn(branch.shape, property) ? [branch.shape[property]] : []\n );\n });\n if (!children.length) throw new TypeError(`Invalid schema path segment: ${property}`);\n return pathProxy(children, [...address, property], owner);\n },\n }\n );\n paths.set(proxy, { nodes, address, owner });\n return proxy;\n};\n\nexport const compilePath = <S extends ObjectShape>(\n owner: ObjectNode<S>,\n kind: 'collection' | 'value',\n pick: (path: SchemaPath<S>) => unknown\n): CollectionSelector | ValueSelector => {\n const scope = {};\n const value = pick(pathProxy([owner], [], scope) as SchemaPath<S>);\n const selected = typeof value === 'object' && value !== null ? paths.get(value) : undefined;\n if (!selected || selected.owner !== scope)\n throw new TypeError('Selector must return a path from its callback.');\n if (\n kind === 'collection' &&\n !selected.nodes.every(node => node.kind === 'table' || node.kind === 'map')\n )\n throw new TypeError('Collection selectors require a table or map path.');\n const result = Object.freeze({\n kind,\n schema: owner,\n address: Object.freeze([...selected.address]),\n }) as CollectionSelector | ValueSelector;\n return result;\n};\n","import type {\n CollectionId,\n CollectionPath,\n CollectionSelector,\n ObjectNode,\n ImpactTarget,\n PathPick,\n SchemaPath,\n} from './schema';\nimport { compilePath } from './schema';\nimport type { ChangeSet } from './changes';\nimport { AddressIndex, contains } from './address';\nimport * as target from './impact-target';\nimport { profile } from './profile';\n\nexport type CollectionImpact<K> =\n | { readonly kind: 'reset' }\n | {\n readonly kind: 'incremental';\n readonly added: ReadonlySet<K>;\n readonly removed: ReadonlySet<K>;\n readonly updated: ReadonlySet<K>;\n readonly orderChanged: boolean;\n };\nexport type DocumentImpact<S extends ObjectNode> = {\n readonly kind: 'incremental' | 'reset';\n affects(pick: PathPick<S>): boolean;\n collection<P extends CollectionPath>(\n pick: (path: SchemaPath<S['shape']>) => P\n ): CollectionImpact<CollectionId<P>>;\n};\ntype ImpactQueries = {\n affects(value: ImpactTarget): boolean;\n collection(selector: CollectionSelector): CollectionImpact<string>;\n};\nconst queries = new WeakMap<object, ImpactQueries>();\nexport const affectsTarget = (impact: object, value: ImpactTarget): boolean =>\n queries.get(impact)!.affects(value);\nexport const collectionImpact = <K extends string>(\n impact: object,\n selector: CollectionSelector<K>\n): CollectionImpact<K> => queries.get(impact)!.collection(selector) as CollectionImpact<K>;\nexport const createImpact = <S extends ObjectNode>(\n schema: S,\n changes: ChangeSet\n): DocumentImpact<S> => {\n const reset = changes.changes.some(change => change.kind === 'reset');\n let values: AddressIndex<true> | undefined;\n let orders: AddressIndex<true> | undefined;\n const index = () => {\n if (!values) {\n profile.impact.index();\n values = new AddressIndex();\n orders = new AddressIndex();\n for (const change of changes.changes) {\n if (change.kind === 'members') {\n for (const member of change.members) values.add(change.at, true, member.key);\n if (change.order) orders.add(change.at, true);\n } else if (change.kind === 'tree') values.add(change.at, true);\n }\n }\n return values;\n };\n const cache = new Map<string, CollectionImpact<string>>();\n const implementation: ImpactQueries = {\n affects(value) {\n profile.impact.affects();\n if (!target.belongs(value, schema)) return false;\n if (reset) return true;\n return target.affected(value, index(), orders!);\n },\n collection(selector) {\n if (selector.schema !== schema)\n throw new TypeError('Collection belongs to another root model.');\n const key = JSON.stringify(selector.address),\n cached = cache.get(key);\n if (cached) return cached;\n if (reset) {\n const result = { kind: 'reset' } as const;\n cache.set(key, result);\n return result;\n }\n const at = selector.address;\n const added = new Set<string>(),\n removed = new Set<string>(),\n updated = new Set<string>();\n let orderChanged = false;\n for (const change of changes.changes) {\n if (change.kind === 'reset') continue;\n if (change.kind === 'members') {\n if (change.at.length < at.length && contains(change.at, at)) {\n if (change.members.some(member => member.key === at[change.at.length])) {\n const result = { kind: 'reset' } as const;\n cache.set(key, result);\n return result;\n }\n } else if (contains(at, change.at)) {\n if (change.at.length === at.length) {\n if (change.order) {\n const positions = new Map(change.order.after.map((id, i) => [id, i]));\n let previous = -1;\n for (const id of change.order.before) {\n const position = positions.get(id);\n if (position === undefined) continue;\n if (position < previous) orderChanged = true;\n previous = position;\n }\n }\n for (const member of change.members) {\n if (member.kind === 'added') added.add(member.key);\n else if (member.kind === 'removed') removed.add(member.key);\n else updated.add(member.key);\n }\n } else updated.add(change.at[at.length]);\n }\n continue;\n }\n if (change.kind === 'tree' && contains(change.at, at)) {\n const result = { kind: 'reset' } as const;\n cache.set(key, result);\n return result;\n }\n if (!contains(at, change.at)) continue;\n if (change.at.length === at.length) continue;\n const id = change.at[at.length];\n updated.add(id);\n }\n added.forEach(id => updated.delete(id));\n removed.forEach(id => updated.delete(id));\n const result = { kind: 'incremental', added, removed, updated, orderChanged } as const;\n cache.set(key, result);\n return result;\n },\n };\n const impact: DocumentImpact<S> = Object.freeze({\n kind: reset ? 'reset' : 'incremental',\n affects: (pick: PathPick<S>) =>\n implementation.affects(compilePath<S['shape']>(schema, 'value', pick)),\n collection: <P extends CollectionPath>(pick: (path: SchemaPath<S['shape']>) => P) =>\n implementation.collection(\n compilePath<S['shape']>(schema, 'collection', pick) as CollectionSelector\n ) as CollectionImpact<CollectionId<P>>,\n });\n queries.set(impact, implementation);\n return impact;\n};\n","import type { ChangeSet, ChangeDirection } from './changes';\nimport type {\n HistoryState,\n LocalHistory,\n ObserverError,\n OperationResult,\n} from './runtime/contract';\nimport { DocumentDisposedError } from './runtime/contract';\n\ntype Entry = { readonly batches: ChangeSet[] };\ntype Group = { entry?: Entry; readonly undos: Entry[]; readonly redos: Entry[] };\n\nexport const createHistory = <TCommit>(input: {\n readonly capacity: number;\n readonly apply: (\n changes: readonly ChangeSet[],\n direction: ChangeDirection\n ) => OperationResult<TCommit>;\n readonly revision: () => number;\n readonly assertIdle: () => void;\n readonly notify: (run: () => readonly ObserverError[]) => readonly ObserverError[];\n}) => {\n let undos: Entry[] = [];\n let redos: Entry[] = [];\n const listeners = new Set<() => void>();\n let state: HistoryState = Object.freeze({ undoDepth: 0, redoDepth: 0 });\n let revision = 0;\n let pending = false;\n let disposed = false;\n let group: Group | undefined;\n const unchanged = (): OperationResult<TCommit> => ({\n status: 'unchanged',\n revision: input.revision(),\n });\n const publish = () => {\n if (state.undoDepth === undos.length && state.redoDepth === redos.length) return;\n state = Object.freeze({ undoDepth: undos.length, redoDepth: redos.length });\n revision++;\n pending = true;\n };\n const flush = (): readonly ObserverError[] => {\n if (!pending) return [];\n pending = false;\n const errors: ObserverError[] = [];\n for (const listener of [...listeners]) {\n if (!listeners.has(listener)) continue;\n try {\n listener();\n } catch (error) {\n errors.push({ phase: 'listener', error });\n }\n }\n return errors;\n };\n const clear = () => {\n group = undefined;\n undos.length = redos.length = 0;\n publish();\n };\n const travel = (direction: 'undo' | 'redo' | 'cancel'): OperationResult<TCommit> => {\n input.assertIdle();\n const from = direction === 'redo' ? redos : undos;\n const to = direction === 'redo' ? undos : redos;\n const previousUndos = undos;\n const previousRedos = redos;\n const entry = direction === 'cancel' ? from.at(-1) : from.pop();\n if (!entry) return unchanged();\n if (direction === 'cancel') {\n if (!group || group.entry !== entry)\n throw new Error('History group no longer owns its entry.');\n undos = group.undos;\n redos = group.redos;\n } else to.push(entry);\n let committed = false;\n try {\n const changes = direction === 'redo' ? entry.batches : entry.batches.slice().reverse();\n const result = input.apply(changes, direction === 'redo' ? 'forward' : 'backward');\n committed = result.status !== 'rejected';\n if (committed && direction === 'cancel') group = undefined;\n if (result.status === 'unchanged') {\n publish();\n const errors = input.notify(flush);\n if (errors.length)\n throw new AggregateError(\n errors.map(entry => entry.error),\n 'History listeners failed.'\n );\n }\n return result;\n } finally {\n if (!committed) {\n if (direction === 'cancel') {\n undos = previousUndos;\n redos = previousRedos;\n } else {\n to.pop();\n from.push(entry);\n }\n }\n }\n };\n const api: LocalHistory<TCommit> = {\n current: () => state,\n revision: () => revision,\n subscribe: listener => {\n if (disposed) throw new DocumentDisposedError();\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n undo: () => {\n input.assertIdle();\n group = undefined;\n return travel('undo');\n },\n redo: () => {\n input.assertIdle();\n group = undefined;\n return travel('redo');\n },\n clear: () => {\n input.assertIdle();\n clear();\n const errors = input.notify(flush);\n if (errors.length)\n throw new AggregateError(\n errors.map(entry => entry.error),\n 'History listeners failed.'\n );\n },\n group: () => {\n input.assertIdle();\n if (group) throw new Error('A history group is already active.');\n if (input.capacity <= 0) throw new Error('History is disabled.');\n const scope: Group = { undos: undos.slice(), redos: redos.slice() };\n group = scope;\n return Object.freeze({\n end: () => {\n input.assertIdle();\n if (group === scope) group = undefined;\n },\n cancel: () => {\n input.assertIdle();\n if (group !== scope) return unchanged();\n if (!scope.entry) {\n group = undefined;\n return unchanged();\n }\n const result = travel('cancel');\n if (result.status !== 'rejected') group = undefined;\n return result;\n },\n });\n },\n };\n return {\n api,\n record: (batch: ChangeSet) => {\n if (input.capacity <= 0) return;\n if (group?.entry) group.entry.batches.push(batch);\n else {\n const entry: Entry = { batches: [batch] };\n undos.push(entry);\n if (group) group.entry = entry;\n if (undos.length > input.capacity) undos.shift();\n }\n redos.length = 0;\n publish();\n },\n publish,\n flush,\n endGroup: () => {\n group = undefined;\n },\n invalidate: clear,\n dispose: () => {\n disposed = true;\n listeners.clear();\n clear();\n pending = false;\n },\n };\n};\n","import type { DocumentNode, ObjectNode } from '../schema';\nimport * as anchor from './anchor';\n\nexport type CanonicalState = { schema: ObjectNode; document: unknown };\n\n/** Install validated values, or captured before values during rollback. */\nexport const installMember = (\n parent: Record<string, unknown> | unknown[],\n key: string | number,\n present: boolean,\n value: unknown\n): void => {\n if (Array.isArray(parent)) {\n const index = Number(key);\n if (present) {\n if (index < 0) anchor.insert(parent, parent.length, value);\n else parent[index] = value;\n } else if (index >= 0) anchor.remove(parent, index);\n } else if (!present) delete parent[key];\n else if (Object.hasOwn(parent, key)) parent[key] = value;\n else\n Object.defineProperty(parent, key, {\n value,\n writable: true,\n configurable: true,\n enumerable: true,\n });\n};\n\nexport const orderOf = (node: DocumentNode, value: unknown): string[] => {\n if (node.kind === 'list') return (value as unknown[]).map(node.keyOf);\n if (node.kind === 'table') return [...(value as { ids: string[] }).ids];\n throw new Error('Order requires a table or list.');\n};\n\nexport const installOrder = (\n node: DocumentNode,\n value: unknown,\n order: readonly string[]\n): void => {\n if (node.kind === 'list') anchor.install(value as unknown[], node.keyOf, order);\n else if (node.kind === 'table') (value as { ids: string[] }).ids = [...order];\n else throw new Error('Order requires a table or list.');\n};\n","import type { Change, ChangeSet, MemberChange } from '../changes';\nimport type { DocumentAddress, DocumentNode } from '../schema';\nimport {\n AddressIndex,\n contains,\n resolveValue,\n resolveLocated,\n memberKey,\n type ResolvedContainer,\n type ResolvedTreeContainer,\n type CompiledMember,\n compiledShape,\n type FixedLayout,\n} from '../address';\nimport * as anchor from './anchor';\nimport { copyValue, equalValue } from '../schema-value';\nimport type { MutableTree, MutableTreeNode } from './tree';\nimport { profile } from '../profile';\nimport { sealChanges } from './changes';\nimport { installMember, installOrder, orderOf, type CanonicalState } from './state';\ntype MemberFact = { key: string; node: DocumentNode; present: boolean; value: unknown };\ntype MemberGroup = {\n kind: 'members';\n at: DocumentAddress;\n node: DocumentNode;\n parent: Record<string, unknown> | unknown[];\n value: unknown;\n order?: readonly string[];\n} & (\n | { layout: 'fixed'; definitions: FixedLayout['members']; members: (MemberFact | undefined)[] }\n | { layout: 'dynamic'; members: Map<string, MemberFact> | undefined }\n);\ntype TreeFact = {\n kind: 'tree';\n at: DocumentAddress;\n before: string | null;\n nodes: Map<string, MutableTreeNode | undefined>;\n};\ntype Fact = MemberGroup | TreeFact;\ntype RestoreFact =\n | { kind: 'order'; at: DocumentAddress; group: MemberGroup }\n | TreeFact\n | { kind: 'member'; at: DocumentAddress; group: MemberGroup; member: MemberFact };\nconst firstMember = (group: MemberGroup, key: string): MemberFact | undefined => {\n if (group.layout === 'dynamic') return group.members?.get(key);\n const member = group.definitions.get(key);\n return member && group.members[member.slot];\n};\n\nconst forgetMember = (group: MemberGroup, key: string): void => {\n if (group.layout === 'dynamic') group.members?.delete(key);\n else {\n const definition = group.definitions.get(key);\n if (definition) group.members[definition.slot] = undefined;\n }\n};\nconst emptyGroup = (group: MemberGroup): boolean =>\n !group.order && (group.layout === 'fixed' ? !group.members.some(Boolean) : !group.members?.size);\n\nconst copyNode = (node: MutableTreeNode): MutableTreeNode => ({\n ...node,\n children: [...node.children],\n});\nconst transition = (\n node: DocumentNode,\n key: string,\n beforePresent: boolean,\n before: unknown,\n afterPresent: boolean,\n after: unknown\n): MemberChange | undefined => {\n if (beforePresent === afterPresent && (!beforePresent || Object.is(before, after))) return;\n if (node.kind !== 'field' && beforePresent === afterPresent && equalValue(node, before, after))\n return;\n const value = afterPresent ? (node.kind === 'field' ? after : copyValue(node, after)) : undefined;\n profile.recorder('transitions');\n return !beforePresent\n ? { key, kind: 'added', after: value }\n : !afterPresent\n ? { key, kind: 'removed', before }\n : { key, kind: 'updated', before, after: value };\n};\n\nconst publishMembers = (\n changes: Change[],\n at: DocumentAddress,\n members: MemberChange[],\n order?: { before: readonly string[]; after: readonly string[] }\n): void => {\n if (!members.length && !order) return;\n for (let i = 1; i < members.length; i++)\n if (members[i - 1].key > members[i].key) {\n members.sort((a, b) => lexical(a.key, b.key));\n break;\n }\n changes.push(order ? { kind: 'members', at, members, order } : { kind: 'members', at, members });\n};\n\n/** Diff only the captured subtree; this algorithm has no recorder or session state. */\nconst diffMember = (\n changes: Change[],\n members: MemberChange[],\n node: DocumentNode,\n at: DocumentAddress,\n key: string,\n beforePresent: boolean,\n before: unknown,\n afterPresent: boolean,\n after: unknown\n): void => {\n if (beforePresent === afterPresent && (!beforePresent || Object.is(before, after))) return;\n if (beforePresent && afterPresent && before !== undefined && after !== undefined) {\n const sameShape =\n node.kind === 'object' ||\n (node.kind === 'variant' &&\n (before as Record<string, unknown>)[node.tag] ===\n (after as Record<string, unknown>)[node.tag]);\n if (sameShape) {\n const left = before as Record<string, unknown>,\n right = after as typeof left;\n const childAt = at.concat(key);\n const children: MemberChange[] = [];\n for (const [child, definition] of compiledShape(node, before)!.members)\n diffMember(\n changes,\n children,\n definition.node,\n childAt,\n child,\n Object.hasOwn(left, child),\n left[child],\n Object.hasOwn(right, child),\n right[child]\n );\n publishMembers(changes, childAt, children);\n return;\n }\n if (node.kind === 'map' || node.kind === 'table') {\n const a = before as Record<string, unknown>,\n b = after as typeof a;\n const left = (node.kind === 'table' ? a.byId : a) as Record<string, unknown>;\n const right = (node.kind === 'table' ? b.byId : b) as typeof left;\n const childAt = at.concat(key);\n const children: MemberChange[] = [];\n for (const id of Object.keys(left))\n diffMember(\n changes,\n children,\n node.value,\n childAt,\n id,\n true,\n left[id],\n Object.hasOwn(right, id),\n right[id]\n );\n for (const id of Object.keys(right))\n if (!Object.hasOwn(left, id))\n diffMember(changes, children, node.value, childAt, id, false, undefined, true, right[id]);\n let order: { before: readonly string[]; after: readonly string[] } | undefined;\n if (node.kind === 'table' && !anchor.equal(a.ids as string[], b.ids as string[])) {\n profile.recorder('publishedOrderItems', (b.ids as string[]).length);\n order = { before: a.ids as string[], after: [...(b.ids as string[])] };\n }\n publishMembers(changes, childAt, children, order);\n return;\n }\n }\n const member = transition(node, key, beforePresent, before, afterPresent, after);\n if (member) members.push(member);\n};\nconst restore = (fact: RestoreFact, schema: DocumentNode, root: unknown, skip = 0): unknown => {\n const at = skip ? fact.at.slice(skip) : fact.at;\n if (fact.kind === 'member') {\n const member = fact.member;\n const value = member.present ? copyValue(member.node, member.value) : undefined;\n if (!at.length) return value;\n const location = resolveLocated(schema, root, at);\n if (!location) throw new Error('Cannot restore an unresolved member.');\n installMember(location.parent, location.key, member.present, value);\n return root;\n }\n const location = resolveValue(schema, root, at);\n if (!location) throw new Error('Cannot restore an unresolved subtree.');\n if (fact.kind === 'order') installOrder(location.node, location.value, fact.group.order!);\n else {\n const tree = location.value as MutableTree;\n if (fact.before === null) delete tree.rootId;\n else tree.rootId = fact.before;\n for (const [id, node] of fact.nodes)\n installMember(tree.nodes, id, node !== undefined, node && copyNode(node));\n }\n return root;\n};\n\nconst reconstructBefore = (\n node: DocumentNode,\n current: unknown,\n records: readonly RestoreFact[],\n offset: number\n): unknown => {\n let before = copyValue(node, current);\n for (let i = records.length - 1; i >= 0; i--)\n if (records[i].kind !== 'order') before = restore(records[i], node, before, offset);\n for (const record of records)\n if (record.kind === 'order') before = restore(record, node, before, offset);\n return before;\n};\n\nconst sealMembers = (fact: MemberGroup, changes: Change[]): void => {\n const members: MemberChange[] = [];\n for (const member of fact.members?.values() ?? []) {\n if (!member) continue;\n const key = memberKey(fact, member.key);\n const present = Object.hasOwn(fact.parent, key);\n const value = (fact.parent as Record<string | number, unknown>)[key];\n if (member.node.kind === 'field') {\n const change = transition(\n member.node,\n member.key,\n member.present,\n member.value,\n present,\n value\n );\n if (change) members.push(change);\n } else\n diffMember(\n changes,\n members,\n member.node,\n fact.at,\n member.key,\n member.present,\n member.value,\n present,\n value\n );\n }\n let order: { before: readonly string[]; after: readonly string[] } | undefined;\n if (fact.order) {\n const current =\n fact.node.kind === 'list'\n ? anchor.keys(fact.value as unknown[], fact.node.keyOf)\n : (fact.value as { ids: string[] }).ids;\n if (!anchor.equal(fact.order, current)) {\n const after = orderOf(fact.node, fact.value);\n profile.recorder('publishedOrderItems', after.length);\n order = { before: fact.order, after };\n }\n }\n publishMembers(changes, fact.at, members, order);\n};\n\nconst sealTree = (fact: TreeFact, state: CanonicalState, changes: Change[]): void => {\n const location = resolveValue(state.schema, state.document, fact.at);\n const tree = location?.value as MutableTree;\n const node = location?.node;\n if (node?.kind !== 'tree') throw new Error('Tree schema disappeared before sealing.');\n const nodes: Extract<Change, { kind: 'tree' }>['nodes'][number][] = [];\n for (const [id, before] of fact.nodes) {\n const after = Object.hasOwn(tree.nodes, id) ? tree.nodes[id] : undefined;\n if (!before && !after) continue;\n if (\n before &&\n after &&\n before.parentId === after.parentId &&\n anchor.equal(before.children, after.children) &&\n Object.hasOwn(before, 'value') === Object.hasOwn(after, 'value') &&\n equalValue(node.value, before.value, after.value)\n )\n continue;\n nodes.push(\n !before\n ? { id, kind: 'added', after: copyNode(after!) }\n : !after\n ? { id, kind: 'removed', before }\n : { id, kind: 'updated', before, after: copyNode(after) }\n );\n }\n const after = tree.rootId ?? null;\n if (nodes.length || fact.before !== after)\n changes.push({\n kind: 'tree',\n at: fact.at,\n before: fact.before,\n after,\n nodes: nodes.sort((a, b) => lexical(a.id, b.id)),\n });\n};\n\n/** One first-touch record per owning container, never a per-write operation log. */\nexport class ChangeRecorder {\n private readonly facts = new Set<Fact>();\n private groups = new WeakMap<object, MemberGroup>();\n private index?: AddressIndex<Fact>;\n private indexedGroups = false;\n private resetBefore?: { value: unknown };\n constructor(private readonly state: CanonicalState) {}\n private indexGroups(): AddressIndex<Fact> {\n const index = (this.index ??= new AddressIndex());\n if (!this.indexedGroups) {\n this.indexedGroups = true;\n for (const fact of this.facts) {\n if (fact.kind === 'members') {\n index.add(fact.at, fact);\n profile.recorder('indexedGroups');\n }\n }\n }\n return index;\n }\n private covered(at: DocumentAddress): boolean {\n return (\n this.resetBefore !== undefined ||\n (this.indexedGroups &&\n this.index!.someAncestor(\n at,\n fact =>\n fact.kind === 'members' &&\n fact.at.length < at.length &&\n firstMember(fact, at[fact.at.length]) !== undefined\n ))\n );\n }\n private absorb(\n at: DocumentAddress,\n node: DocumentNode,\n value: unknown,\n present: boolean\n ): unknown {\n const index = this.indexGroups();\n const children: RestoreFact[] = [];\n index.query(fact => {\n if (fact.kind === 'members') {\n // An ancestor group can contribute only its one directly addressed member.\n if (fact.at.length < at.length) {\n if (fact.at.length + 1 === at.length) {\n const member = firstMember(fact, at[fact.at.length]);\n if (member) children.push({ kind: 'member', at, group: fact, member });\n }\n return;\n }\n if (fact.order && contains(at, fact.at))\n children.push({ kind: 'order', at: fact.at, group: fact });\n for (const member of fact.members?.values() ?? []) {\n if (!member) continue;\n const memberAt = fact.at.concat(member.key);\n if (contains(at, memberAt))\n children.push({ kind: 'member', at: memberAt, group: fact, member });\n }\n } else if (contains(at, fact.at)) children.push(fact);\n })(at);\n if (present) value = reconstructBefore(node, value, children, at.length);\n this.releaseCovered(children);\n return value;\n }\n private releaseCovered(children: readonly RestoreFact[]): void {\n let changedGroups: Set<MemberGroup> | undefined;\n for (const child of children) {\n profile.recorder('absorbed');\n if (child.kind === 'member') {\n const { group, member } = child;\n forgetMember(group, member.key);\n (changedGroups ??= new Set()).add(group);\n } else if (child.kind === 'order') {\n child.group.order = undefined;\n (changedGroups ??= new Set()).add(child.group);\n } else {\n this.unregister(child);\n }\n }\n for (const group of changedGroups ?? []) {\n if (emptyGroup(group)) {\n this.unregister(group);\n }\n }\n }\n private register(fact: Fact): void {\n this.facts.add(fact);\n if (fact.kind === 'members') {\n this.groups.set(fact.parent, fact);\n profile.recorder('groups');\n if (!this.indexedGroups) return;\n profile.recorder('indexedGroups');\n }\n (this.index ??= new AddressIndex()).add(fact.at, fact);\n }\n private unregister(fact: Fact): void {\n this.facts.delete(fact);\n this.index?.delete(fact.at, fact);\n if (fact.kind === 'members') this.groups.delete(fact.parent);\n }\n member(\n container: ResolvedContainer,\n key: string,\n definition: CompiledMember,\n physicalKey: string | number\n ): void {\n if (this.resetBefore) return;\n const { node } = definition;\n let group = this.groups.get(container.parent);\n if (group?.layout === 'dynamic' && group.members?.has(key)) return;\n if (group?.layout === 'fixed' && definition.kind === 'fixed' && group.members[definition.slot])\n return;\n const at = this.indexedGroups || node.kind !== 'field' ? container.at.concat(key) : undefined;\n if (at && this.covered(at)) return;\n const present = Object.hasOwn(container.parent, physicalKey);\n let value = (container.parent as Record<string | number, unknown>)[physicalKey];\n if (node.kind !== 'field') value = this.absorb(at!, node, value, present);\n if (!group || !this.facts.has(group)) {\n group = this.createGroup(container);\n }\n const member: MemberFact = { key, node, present, value };\n if (group.layout === 'dynamic') (group.members ??= new Map()).set(key, member);\n else if (definition.kind === 'fixed') group.members[definition.slot] = member;\n else throw new Error('A fixed member group requires a fixed schema member.');\n profile.recorder('facts');\n }\n reset(): void {\n if (this.resetBefore) return;\n const value = this.absorb([], this.state.schema, this.state.document, true);\n this.resetBefore = { value };\n this.groups = new WeakMap();\n profile.recorder('facts');\n }\n private createGroup(container: ResolvedContainer): MemberGroup {\n const group: MemberGroup =\n container.layout.kind === 'fixed'\n ? {\n kind: 'members',\n at: container.at,\n node: container.node,\n parent: container.parent,\n value: container.value,\n layout: 'fixed',\n definitions: container.layout.members,\n members: new Array<MemberFact | undefined>(container.layout.members.size),\n }\n : {\n kind: 'members',\n at: container.at,\n node: container.node,\n parent: container.parent,\n value: container.value,\n layout: 'dynamic',\n members: undefined,\n };\n this.register(group);\n return group;\n }\n order(container: ResolvedContainer): void {\n profile.recorder('orderCaptures');\n let group = this.groups.get(container.parent);\n if (group?.order || this.covered(container.at)) return;\n group ??= this.createGroup(container);\n group.order = orderOf(container.node, container.value);\n profile.recorder('orderSnapshots');\n profile.recorder('orderItems', group.order.length);\n }\n tree(container: ResolvedTreeContainer, id?: string): void {\n const { at, value: tree } = container;\n if (this.covered(at)) return;\n const index = (this.index ??= new AddressIndex());\n let fact: TreeFact | undefined;\n for (const item of index.exact(at) ?? []) if (item.kind === 'tree') fact = item;\n if (!fact) {\n fact = { kind: 'tree', at, before: tree.rootId ?? null, nodes: new Map() };\n this.register(fact);\n }\n if (id !== undefined && !fact.nodes.has(id)) {\n profile.recorder('treeNodes');\n fact.nodes.set(id, Object.hasOwn(tree.nodes, id) ? copyNode(tree.nodes[id]) : undefined);\n }\n }\n rollback(): void {\n if (this.resetBefore) {\n this.state.document = this.resetBefore.value;\n return;\n }\n const facts = [...this.facts];\n for (let i = facts.length - 1; i >= 0; i--) {\n const fact = facts[i];\n if (fact.kind === 'members') {\n for (const member of fact.members?.values() ?? []) {\n if (!member) continue;\n installMember(\n fact.parent,\n memberKey(fact, member.key),\n member.present,\n member.present ? copyValue(member.node, member.value) : undefined\n );\n }\n } else if (fact.kind === 'tree') restore(fact, this.state.schema, this.state.document);\n }\n for (const fact of facts)\n if (fact.kind === 'members' && fact.order) installOrder(fact.node, fact.value, fact.order);\n }\n seal(): ChangeSet {\n if (this.resetBefore) {\n if (equalValue(this.state.schema, this.resetBefore.value, this.state.document))\n return sealChanges([]);\n profile.recorder('sealed');\n return sealChanges([\n {\n kind: 'reset',\n before: this.resetBefore.value,\n after: copyValue(this.state.schema, this.state.document),\n },\n ]);\n }\n const changes: Change[] = [];\n for (const fact of this.facts) {\n if (fact.kind === 'members') sealMembers(fact, changes);\n else sealTree(fact, this.state, changes);\n }\n const result = sealChanges(changes);\n profile.recorder('sealed', result.changes.length);\n return result;\n }\n}\nconst lexical = (a: string, b: string): number => (a < b ? -1 : a === b ? 0 : 1);\n","import type { ChangeSet } from '../changes';\nimport type { DocumentAddress, DocumentNode } from '../schema';\nimport {\n createAddressResolver,\n resolveContainer,\n resolveTreeContainer,\n resolveValue,\n memberKey,\n type CompiledMember,\n type ResolvedContainer,\n type ResolvedTreeContainer,\n} from '../address';\nimport { checkKey, checkValue, copyValue } from '../schema-value';\nimport { ChangeRecorder } from './recorder';\nimport { installMember, type CanonicalState } from './state';\nimport { fail, invalidValue } from './issue';\n\nexport class MutationSession {\n readonly identity = {};\n generation = 0;\n readonly recorder: ChangeRecorder;\n private resolver;\n private resolvedRoot: unknown;\n constructor(readonly state: CanonicalState) {\n this.recorder = new ChangeRecorder(state);\n this.resolver = createAddressResolver(state.schema, state.document);\n this.resolvedRoot = state.document;\n }\n validate(node: DocumentNode, value: unknown, at: DocumentAddress): void {\n const issue = checkValue(node, value, at);\n if (issue) invalidValue(issue);\n }\n resolveContainer(at: DocumentAddress): ResolvedContainer {\n return (\n this.resolver.container(this.identity, this.generation, at) ??\n fail(at, 'invalid-address', 'Container does not exist.')\n );\n }\n /** Bind access-resolved canonical facts without walking the address again. */\n bind(at: DocumentAddress, node: DocumentNode | undefined, value: unknown): ResolvedContainer {\n return (\n resolveContainer(this.identity, this.generation, at, node, value) ??\n fail(at, 'invalid-address', 'Container does not exist.')\n );\n }\n bindTree(\n at: DocumentAddress,\n node: DocumentNode | undefined,\n value: unknown\n ): ResolvedTreeContainer {\n return (\n resolveTreeContainer(this.identity, this.generation, at, node, value) ??\n fail(at, 'invalid-tree', 'Expected a tree.')\n );\n }\n resolveTree(at: DocumentAddress): ResolvedTreeContainer {\n const location = resolveValue(this.state.schema, this.state.document, at);\n return this.bindTree(at, location?.node, location?.value);\n }\n replace(at: DocumentAddress, value: unknown): void {\n if (!at.length) {\n this.validate(this.state.schema, value, at);\n if (Object.is(this.state.document, value)) return;\n this.recorder.reset();\n this.state.document = copyValue(this.state.schema, value);\n this.invalidate();\n return;\n }\n this.writeMember(this.resolveContainer(at.slice(0, -1)), at[at.length - 1], value, 'set');\n }\n assignMember(container: ResolvedContainer, key: string, value: unknown): void {\n container = this.refresh(container);\n const member = this.definition(container, key);\n if (\n container.layout.kind === 'fixed' &&\n member.node.kind !== 'field' &&\n member.node.kind !== 'variant' &&\n !member.node.optional\n )\n return fail(\n container.at.concat(key),\n 'invalid-value',\n 'Replace fields, variants, or collection entries; edit object members individually.'\n );\n this.writeLocatedMember(container, key, member, memberKey(container, key), value, 'set');\n }\n removeMember(container: ResolvedContainer, key: string): void {\n this.writeMember(this.refresh(container), key, undefined, 'remove');\n }\n private refresh(container: ResolvedContainer): ResolvedContainer {\n if (container.owner !== this.identity)\n return fail(\n container.at,\n 'invalid-address',\n 'Container belongs to another mutation session.'\n );\n return container.generation === this.generation\n ? container\n : this.resolveContainer(container.at);\n }\n definition(container: ResolvedContainer, key: string): CompiledMember {\n const layout = container.layout;\n const member = layout.kind === 'dynamic' ? layout.entry : layout.members.get(key);\n if (!member)\n return fail(container.at.concat(key), 'invalid-address', 'Address does not exist.');\n return member;\n }\n /** Consume a current command-local container; bulk writes retain its storage. */\n writeMember(\n container: ResolvedContainer,\n key: string,\n value: unknown,\n operation: 'set' | 'remove',\n physicalKey = memberKey(container, key)\n ): boolean {\n const member = this.definition(container, key);\n return this.writeLocatedMember(container, key, member, physicalKey, value, operation);\n }\n /** Location and definition are resolved once by the calling operation. */\n private writeLocatedMember(\n container: ResolvedContainer,\n key: string,\n member: CompiledMember,\n physicalKey: string | number,\n value: unknown,\n operation: 'set' | 'remove'\n ): boolean {\n const parentNode = container.node;\n const node = member.node;\n const present = operation === 'set';\n if (parentNode.kind === 'variant' && parentNode.tag === key)\n return fail(\n container.at.concat(key),\n 'invalid-value',\n 'Variant discriminants are read-only.'\n );\n const entry = container.layout.kind === 'dynamic';\n if (!present && !node.optional && !entry)\n return fail(\n container.at.concat(key),\n 'required-field',\n 'A required value cannot be removed.'\n );\n const existed = Object.hasOwn(container.parent, physicalKey);\n const previous = (container.parent as Record<string | number, unknown>)[physicalKey];\n if (existed === present && (!present || Object.is(previous, value))) return false;\n if (parentNode.kind === 'map' || parentNode.kind === 'table') {\n const issue = checkKey(parentNode.key, key, []);\n if (issue)\n return fail(container.at.concat(key, ...issue.address), 'invalid-key', issue.message);\n }\n if (present) {\n if (node.kind === 'field') {\n const issue = checkValue(node, value, []);\n if (issue) return invalidValue(issue, container.at.concat(key, ...issue.address));\n } else this.validate(node, value, container.at.concat(key));\n if (parentNode.kind === 'list' && parentNode.keyOf(value) !== key)\n return fail(\n container.at.concat(key),\n 'invalid-list-key',\n 'Replacing an item must retain its addressed key.'\n );\n }\n const membershipChanged = entry && existed !== present;\n if (membershipChanged && (parentNode.kind === 'list' || parentNode.kind === 'table'))\n this.recorder.order(container);\n this.recorder.member(container, key, member, physicalKey);\n const next = present ? (node.kind === 'field' ? value : copyValue(node, value)) : undefined;\n installMember(container.parent, physicalKey, present, next);\n if (node.kind !== 'field' || membershipChanged) this.invalidate();\n return membershipChanged;\n }\n invalidate(): void {\n this.generation++;\n if (this.resolvedRoot !== this.state.document) {\n this.resolvedRoot = this.state.document;\n this.resolver = createAddressResolver(this.state.schema, this.state.document);\n } else this.resolver.invalidate();\n }\n finish(): ChangeSet {\n return this.recorder.seal();\n }\n rollback(): void {\n this.recorder.rollback();\n this.invalidate();\n }\n}\n","import type { ChangeDirection, ChangeSet } from '../../changes';\nimport type { MutationSession } from '../session';\nimport { installOrder, installMember, orderOf } from '../state';\nimport * as anchor from '../anchor';\nimport { fail } from '../issue';\nexport function apply(\n session: MutationSession,\n changes: ChangeSet,\n direction: ChangeDirection\n): void {\n const side = direction === 'forward' ? 'after' : 'before';\n for (const change of changes.changes) {\n if (change.kind === 'reset') {\n session.replace([], change[side]);\n } else if (change.kind === 'members') {\n const container = session.resolveContainer(change.at);\n const { node, value: current } = container;\n if (change.order) {\n if (node.kind !== 'table' && node.kind !== 'list')\n return fail(change.at, 'invalid-changes', 'Order requires an ordered container.');\n session.recorder.order(container);\n }\n let membershipChanged = false;\n for (const member of change.members) {\n const present = side === 'after' ? member.kind !== 'removed' : member.kind !== 'added';\n const value =\n side === 'after'\n ? member.kind !== 'removed'\n ? member.after\n : undefined\n : member.kind !== 'added'\n ? member.before\n : undefined;\n membershipChanged =\n session.writeMember(container, member.key, value, present ? 'set' : 'remove') ||\n membershipChanged;\n }\n if (change.order) {\n const keys = node.kind === 'table' ? Object.keys(container.parent) : orderOf(node, current);\n if (!anchor.matches(change.order[side], keys))\n return fail(\n change.at,\n 'invalid-changes',\n 'Order must contain exactly the resulting keys.'\n );\n installOrder(node, current, change.order[side]);\n session.invalidate();\n } else if (membershipChanged && node.kind === 'table') {\n const ids = (current as { ids: string[] }).ids;\n if (!anchor.matches(ids, Object.keys(container.parent)))\n return fail(\n change.at,\n 'invalid-changes',\n 'Table membership changes require a matching order.'\n );\n }\n } else {\n const container = session.resolveTree(change.at);\n const { value: current, node } = container;\n session.recorder.tree(container);\n for (const item of change.nodes) session.recorder.tree(container, item.id);\n const root = change[side];\n if (root === null) delete current.rootId;\n else current.rootId = root;\n for (const item of change.nodes) {\n const next =\n side === 'after'\n ? item.kind !== 'removed'\n ? item.after\n : undefined\n : item.kind !== 'added'\n ? item.before\n : undefined;\n installMember(\n current.nodes,\n item.id,\n next !== undefined,\n next && { ...next, children: [...next.children] }\n );\n }\n session.validate(node, current, change.at);\n session.invalidate();\n }\n }\n}\n","import type { ObjectNode, Infer, PathPick } from './schema';\nimport { compilePath } from './schema';\nimport { contains, debugKey, overlaps, read, resolveAddress } from './address';\nimport { createImpact } from './impact';\nimport { createHistory } from './history';\nimport { createAccess, type Draft } from './access/scope';\nimport { MutationSession } from './mutation/session';\nimport * as replay from './mutation/operations/replay';\nimport type { RuntimeWriteIntent } from './runtime/driver';\nimport { decodeChanges } from './mutation/changes';\nimport { MutationRejected, fail } from './mutation/issue';\nimport type { ChangeSet } from './changes';\nimport { checkValue, copyValue, ParseError } from './schema-value';\nimport {\n DocumentDisposedError,\n DocumentReentrancyError,\n TransactionRejected,\n} from './runtime/contract';\nimport type {\n CommitListener,\n CommitSource,\n DocumentCommit,\n DocumentRuntime,\n OperationResult,\n TransactionResult,\n} from './runtime/contract';\nimport { bindRuntimeAccess, accessOf } from './runtime/access';\nimport { assertRuntimeWritable, bindRuntimeDriver, disposeRuntimeDriver } from './runtime/driver';\nimport {\n bindDocumentReadable,\n createNotification,\n disposeNotification,\n notify,\n subscribeRoot,\n subscribeTargets,\n type RuntimeNotification,\n} from './runtime/notification';\n\nexport const createDocument = <S extends ObjectNode>(input: {\n readonly schema: S;\n readonly initial: Infer<S>;\n readonly history?: { readonly capacity?: number } | false;\n}): DocumentRuntime<S> => {\n if (input.schema.kind !== 'object')\n throw new TypeError('Document schema must be a root object node.');\n const invalid = checkValue(input.schema, input.initial);\n if (invalid) throw new ParseError(invalid);\n const state = {\n schema: input.schema,\n document: copyValue(input.schema, input.initial) as Infer<S>,\n disposed: false,\n };\n let revision = 0,\n busy = false;\n let runtime!: DocumentRuntime<S>, notification!: RuntimeNotification<S>;\n const idle = () => {\n if (state.disposed) throw new DocumentDisposedError();\n if (busy || accessOf(runtime).projectionLocks) throw new DocumentReentrancyError();\n };\n const writable = (intent: Parameters<typeof assertRuntimeWritable>[1]) => {\n idle();\n assertRuntimeWritable(runtime, intent);\n };\n const history = createHistory<DocumentCommit<S>>({\n capacity: input.history === false ? 0 : Math.max(0, input.history?.capacity ?? 100),\n revision: () => revision,\n apply: (changes, direction) =>\n mutate({ kind: 'apply', source: 'history' }, false, session => {\n for (const change of changes) replay.apply(session, change, direction);\n }),\n assertIdle: idle,\n notify: run => {\n busy = true;\n try {\n return run();\n } finally {\n busy = false;\n }\n },\n });\n const publish = (\n changes: ChangeSet,\n source: CommitSource,\n recordHistory: boolean\n ): Extract<OperationResult<DocumentCommit<S>>, { status: 'committed' }> => {\n const commit: DocumentCommit<S> = {\n revision: ++revision,\n source,\n changes,\n impact: createImpact(input.schema, changes),\n };\n if (source === 'remote') history.invalidate();\n else if (recordHistory && (source === 'local' || source === 'system')) history.record(changes);\n else if (source === 'history') history.publish();\n else history.endGroup();\n return {\n status: 'committed',\n commit,\n observerErrors: notify(notification, commit, history.flush),\n };\n };\n function mutate(\n intent: Extract<RuntimeWriteIntent, { kind: 'update' }>,\n recordHistory: boolean,\n execute: (session: MutationSession) => void\n ):\n | OperationResult<DocumentCommit<S>>\n | Extract<TransactionResult<never, never>, { status: 'rejected' }>;\n function mutate(\n intent: Exclude<RuntimeWriteIntent, { kind: 'update' }>,\n recordHistory: boolean,\n execute: (session: MutationSession) => void\n ): OperationResult<DocumentCommit<S>>;\n function mutate(\n intent: RuntimeWriteIntent,\n recordHistory: boolean,\n execute: (session: MutationSession) => void\n ):\n | OperationResult<DocumentCommit<S>>\n | Extract<TransactionResult<never, never>, { status: 'rejected' }> {\n writable(intent);\n busy = true;\n try {\n const session = new MutationSession(state);\n let changes: ChangeSet;\n try {\n execute(session);\n changes = session.finish();\n } catch (error) {\n session.rollback();\n if (error instanceof MutationRejected)\n return { status: 'rejected', issues: [error.issue], revision };\n if (intent.kind === 'update' && error instanceof TransactionRejected)\n return { status: 'rejected', issues: error.issues, revision };\n throw error;\n }\n if (!changes.changes.length) return { status: 'unchanged', revision };\n // Publication is outside the rollback boundary: observers see accepted state.\n return publish(changes, intent.source, recordHistory);\n } finally {\n busy = false;\n }\n }\n runtime = {\n schema: input.schema,\n address: {\n resolve: at => resolveAddress(input.schema, at, state.document),\n read: at => read(state.document, at, input.schema),\n contains,\n overlaps,\n debugKey,\n },\n revision: () => revision,\n update: <V>(\n run: (draft: Draft<S>) => V,\n options?: { source?: Extract<CommitSource, 'local' | 'system'>; history?: boolean }\n ): TransactionResult<V, DocumentCommit<S>> => {\n const source = options?.source ?? 'local';\n let value!: V;\n const result = mutate({ kind: 'update', source }, options?.history ?? true, session => {\n // Draft is a trusted borrowed view. It must not escape this synchronous callback.\n const draft = createAccess({\n state,\n session,\n }) as Draft<S>;\n value = run(draft);\n if (\n value !== null &&\n (typeof value === 'object' || typeof value === 'function') &&\n typeof (value as { then?: unknown }).then === 'function'\n )\n throw new TypeError('Document updates must be synchronous.');\n });\n return result.status === 'rejected' ? result : { ...result, value };\n },\n apply: (inputChanges, options) =>\n mutate(\n { kind: 'apply', source: options?.source ?? 'local' },\n options?.history ?? true,\n session => {\n if (!options || options.expectedRevision !== revision)\n fail([], 'baseline-mismatch', 'apply requires the current expectedRevision.');\n replay.apply(session, decodeChanges(inputChanges), 'forward');\n }\n ),\n replace: (value, options) => {\n const source = options?.source ?? 'system';\n return mutate({ kind: 'replace', source }, source !== 'remote', session =>\n session.replace([], value)\n );\n },\n snapshot: () => {\n if (state.disposed) throw new DocumentDisposedError();\n return copyValue(input.schema, state.document) as Infer<S>;\n },\n subscribe: ((\n pick: PathPick<S> | readonly PathPick<S>[] | CommitListener<S>,\n listener?: CommitListener<S>\n ) => {\n if (state.disposed) throw new DocumentDisposedError();\n if (!listener) return subscribeRoot(notification, pick as CommitListener<S>);\n const picks: readonly PathPick<S>[] = Array.isArray(pick) ? pick : [pick as PathPick<S>];\n if (!picks.length) throw new TypeError('Expected at least one subscription path.');\n return subscribeTargets(\n notification,\n picks.map(p => compilePath<S['shape']>(input.schema, 'value', p)),\n listener\n );\n }) as DocumentRuntime<S>['subscribe'],\n history: history.api,\n dispose: () => {\n if (state.disposed) return;\n idle();\n state.disposed = true;\n try {\n disposeNotification(notification);\n } finally {\n history.dispose();\n disposeRuntimeDriver(runtime);\n }\n },\n };\n bindRuntimeAccess(runtime, state);\n bindRuntimeDriver(runtime);\n notification = createNotification(runtime);\n bindDocumentReadable(history.api, runtime);\n return runtime;\n};\n","import type { ObjectNode } from '../schema';\nimport type { DocumentReadable, DocumentRuntime } from './contract';\nimport { accessOf, bindRuntimeAccess } from './access';\nimport { shareNotification } from './notification';\n\n// A readable capability keeps the canonical runtime behind an explicit\n// mutation funnel while remaining fully compatible with selectors, views, and\n// framework subscriptions.\nexport const asReadable = <TSchema extends ObjectNode>(\n runtime: DocumentRuntime<TSchema>\n): DocumentReadable<TSchema> => {\n const readable: DocumentReadable<TSchema> = {\n address: runtime.address,\n revision: runtime.revision,\n subscribe: runtime.subscribe,\n };\n bindRuntimeAccess(readable, accessOf(runtime));\n shareNotification(runtime, readable);\n return Object.freeze(readable);\n};\n","import type { ObjectNode } from '../schema';\nimport type { Read } from '../access/scope';\nimport type { DocumentReadable } from '../runtime/contract';\nimport { readWith } from '../runtime/access';\n\nexport type DocumentSelector<TSchema extends ObjectNode, TResult> = (\n read: Read<TSchema>\n) => TResult;\n\nexport const read = <TSchema extends ObjectNode, TResult>(\n runtime: DocumentReadable<TSchema>,\n selector: DocumentSelector<TSchema, TResult>\n): TResult => readWith(runtime, selector);\n","import { createAccess, collectionAccess, snapshot } from '../access/scope';\nimport { affectsTarget, collectionImpact } from '../impact';\nimport * as target from '../impact-target';\nimport { nodeAt } from '../address';\nimport { accessOf } from '../runtime/access';\nimport { attachProjection, documentReadableOwner } from '../runtime/notification';\nimport type { DocumentCommit, DocumentReadable } from '../runtime/contract';\nimport type { ObjectNode, ImpactTarget, CollectionSelector, PathPick } from '../schema';\nimport { compilePath } from '../schema';\nimport { equalValue } from '../schema-value';\nimport type {\n CollectionContext,\n CollectionChange,\n CollectionRead,\n DocumentHandle,\n GraphSource,\n ExternalCollectionSource,\n ExternalValueSource,\n ValueContext,\n} from './contract';\nimport { ProjectionError } from './contract';\nimport type { Readable } from './readable';\nimport {\n assertScope,\n assertSynchronous,\n projectionHandles,\n type Scheduler,\n type SourceRecord,\n} from './scheduler';\n\nexport const createSources = (scheduler: Scheduler) => {\n const documents = new Map<object, object>();\n const readables = new Map<\n object,\n Map<\n object,\n {\n readonly source: object;\n readonly accept: (value: unknown) => void;\n }\n >\n >();\n const externalSources = new WeakMap<object, object>();\n const isCollectionSource = (value: object): boolean =>\n (value as { readonly kind?: unknown }).kind === 'collection';\n const document = <S extends ObjectNode>(runtime: DocumentReadable<S>): DocumentHandle<S> => {\n scheduler.assertIdle();\n const state = accessOf(runtime);\n if (state.disposed) throw new Error('Document has been disposed.');\n const existing = documents.get(state);\n if (existing) return existing as DocumentHandle<S>;\n const bindings: {\n handle: object;\n targets: readonly ImpactTarget[];\n record: SourceRecord;\n receive: (commit: DocumentCommit<S>) => void;\n }[] = [];\n let batch: import('./contract').BatchContext | undefined;\n const make = (\n input:\n { readonly targets: readonly ImpactTarget[] } | { readonly collection: CollectionSelector }\n ): object => {\n const collection = 'collection' in input ? input.collection : undefined;\n const targets = 'targets' in input ? input.targets : [input.collection];\n if (state.disposed) throw new Error('Document has been disposed.');\n targets.forEach(value => {\n if (!target.belongs(value, state.schema))\n throw new Error('Projection target belongs to another schema.');\n });\n const old = bindings.find(\n entry =>\n Boolean(collection) === isCollectionSource(entry.handle) &&\n entry.targets.length === targets.length &&\n entry.targets.every((value, i) => target.same(value, targets[i]))\n );\n if (old) return old.handle;\n let reset = false;\n let orderChanged = false;\n const keys = new Set<string>();\n let baseline: Map<string, unknown> | undefined;\n let baselineIds: readonly string[] = Object.freeze([]);\n let nextBaseline: Map<string, unknown> | undefined;\n let nextBaselineIds: readonly string[] = Object.freeze([]);\n const collectionNode = collection\n ? nodeAt(state.schema, collection.address, state.document)\n : undefined;\n const entryNode =\n collectionNode && (collectionNode.kind === 'map' || collectionNode.kind === 'table')\n ? collectionNode.value\n : undefined;\n const sameEntry = (left: unknown, right: unknown): boolean =>\n entryNode ? equalValue(entryNode, left, right) : Object.is(left, right);\n const record: SourceRecord = {\n consumers: new Set(),\n disposed: false,\n fault: undefined,\n revision: runtime.revision,\n reset: () => reset,\n clear: () => {\n if (collection && nextBaseline) {\n baseline = nextBaseline;\n baselineIds = nextBaselineIds;\n }\n reset = false;\n orderChanged = false;\n batch = undefined;\n keys.clear();\n nextBaseline = undefined;\n nextBaselineIds = Object.freeze([]);\n },\n context: active => {\n assertScope(active);\n if (state.disposed) throw new Error('Document has been disposed.');\n const context = { state, active };\n const rawRead = collection\n ? (collectionAccess(context, collection.address) as CollectionRead<string, unknown>)\n : undefined;\n const snapshots = collection ? new Map<string, unknown>() : undefined;\n const read = collection\n ? Object.freeze({\n get: (key: string) => {\n assertScope(active);\n if (!snapshots!.has(key)) snapshots!.set(key, snapshot(rawRead!.get(key)));\n return snapshots!.get(key);\n },\n has: (key: string) => {\n assertScope(active);\n return rawRead!.has(key);\n },\n ids: () => {\n assertScope(active);\n return rawRead!.ids();\n },\n })\n : createAccess(context);\n if (!collection)\n return Object.freeze({\n kind: 'document' as const,\n read,\n revision: runtime.revision(),\n reset: record.reset(),\n cause: batch?.cause,\n });\n\n if (!baseline) {\n const collectionRead = read as CollectionRead<string, unknown>;\n baseline = new Map<string, unknown>();\n baselineIds = Object.freeze(\n collectionAccess(context, collection.address).ids().slice()\n );\n for (const key of baselineIds) {\n const value = collectionRead.get(key);\n baseline.set(key, value);\n }\n }\n const changed = [...keys];\n const added: { readonly key: string; readonly after: unknown }[] = [];\n const updated: {\n readonly key: string;\n readonly before: unknown;\n readonly after: unknown;\n }[] = [];\n const removed: {\n readonly key: string;\n readonly before: unknown;\n }[] = [];\n const next = new Map(baseline);\n const collectionRead = read as CollectionRead<string, unknown>;\n for (const key of changed) {\n const beforePresent = baseline.has(key);\n const afterPresent = collectionRead.has(key);\n const afterValue = afterPresent ? collectionRead.get(key) : undefined;\n if (!beforePresent && afterPresent) {\n added.push({ key, after: afterValue });\n next.set(key, afterValue);\n } else if (beforePresent && !afterPresent) {\n removed.push({ key, before: baseline.get(key) });\n next.delete(key);\n } else if (beforePresent && afterPresent) {\n const beforeValue = baseline.get(key);\n if (!sameEntry(beforeValue, afterValue))\n updated.push({ key, before: beforeValue, after: afterValue });\n next.set(key, afterValue);\n }\n }\n const ids =\n record.reset() || orderChanged ? Object.freeze([...collectionRead.ids()]) : baselineIds;\n if (record.reset()) {\n next.clear();\n for (const key of ids) {\n const value = collectionRead.get(key);\n next.set(key, value);\n }\n }\n let order:\n { readonly before: readonly string[]; readonly after: readonly string[] } | undefined;\n if (orderChanged) {\n const beforeKeys = new Set(baselineIds);\n const afterKeys = new Set(ids);\n const beforeCommon = baselineIds.filter(key => afterKeys.has(key));\n const afterCommon = ids.filter(key => beforeKeys.has(key));\n if (beforeCommon.some((key, index) => afterCommon[index] !== key))\n order = { before: Object.freeze([...baselineIds]), after: ids };\n }\n const change = record.reset()\n ? Object.freeze({ kind: 'reset' as const })\n : added.length || updated.length || removed.length || order\n ? Object.freeze({\n kind: 'incremental' as const,\n added: Object.freeze(added),\n updated: Object.freeze(updated),\n removed: Object.freeze(removed),\n ...(order ? { order: Object.freeze(order) } : {}),\n })\n : undefined;\n nextBaseline = next;\n nextBaselineIds = ids;\n return Object.freeze({\n kind: 'collection' as const,\n read,\n change,\n revision: runtime.revision(),\n cause: batch?.cause,\n });\n },\n };\n const handle = collection\n ? { kind: 'collection' as const }\n : {\n collection: (pick: PathPick<S>) => {\n scheduler.assertIdle();\n const selector = compilePath<S['shape']>(\n state.schema,\n 'collection',\n pick\n ) as CollectionSelector;\n return make({ collection: selector });\n },\n targets: (...selected: PathPick<S>[]) => {\n scheduler.assertIdle();\n if (!selected.length) throw new TypeError('Expected at least one target.');\n return make({\n targets: selected.map(pick => compilePath<S['shape']>(state.schema, 'value', pick)),\n });\n },\n };\n Object.freeze(handle);\n scheduler.register(handle, record);\n // The attachment delivers to all local bindings without extra document subscriptions.\n const receive = (commit: DocumentCommit<S>) => {\n reset ||= commit.impact.kind === 'reset';\n if (collection) {\n const change = collectionImpact(commit.impact, collection);\n if (change.kind === 'reset') reset = true;\n else {\n change.added.forEach(key => keys.add(key));\n change.removed.forEach(key => keys.add(key));\n change.updated.forEach(key => keys.add(key));\n orderChanged ||= Boolean(\n change.added.size || change.removed.size || change.orderChanged\n );\n }\n }\n };\n bindings.push({ handle, targets, record, receive });\n return handle;\n };\n const handle = make({ targets: [] }) as DocumentHandle<S>;\n const guard = (locked: boolean) => {\n state.projectionLocks = (state.projectionLocks ?? 0) + (locked ? 1 : -1);\n };\n scheduler.guards.add(guard);\n const unsubscribe = attachProjection(runtime, {\n capture: commit => {\n for (const binding of bindings) {\n if (\n !binding.targets.length ||\n binding.targets.some(value => affectsTarget(commit.impact, value))\n ) {\n binding.receive(commit);\n batch = scheduler.batchContext();\n scheduler.capture(binding.record);\n }\n }\n },\n settle: scheduler.settle,\n flush: scheduler.flush,\n dispose: () => {\n bindings.forEach(({ record }) => {\n record.fault = new ProjectionError(\n 'source',\n 'document disposed',\n [runtime.revision()],\n new Error('Document has been disposed.')\n );\n scheduler.capture(record);\n });\n scheduler.run();\n },\n });\n scheduler.cleanups.add(() => {\n unsubscribe();\n scheduler.guards.delete(guard);\n });\n documents.set(state, handle);\n return handle;\n };\n const valueSource = <T>(initial: T, equal: (a: T, b: T) => boolean) => {\n let value = initial;\n let revision = 0;\n let cause: unknown;\n let reset = false;\n const handle = Object.freeze({}) as GraphSource<ValueContext<T>>;\n const record: SourceRecord = {\n consumers: new Set(),\n disposed: false,\n fault: undefined,\n revision: () => revision,\n reset: () => reset,\n clear: () => {\n cause = undefined;\n reset = false;\n },\n context: active => {\n assertScope(active);\n return Object.freeze({\n kind: 'value' as const,\n value,\n revision,\n reset,\n cause,\n });\n },\n };\n scheduler.register(handle, record);\n const accept = (next: T, metadata?: Pick<ValueContext<T>, 'revision' | 'reset' | 'cause'>) => {\n scheduler.assertIdle();\n const recovering = record.fault !== undefined;\n const eventful =\n metadata !== undefined &&\n (metadata.reset === true ||\n (metadata.revision !== undefined && metadata.revision !== revision) ||\n metadata.cause !== undefined);\n if (equal(value, next) && !recovering && !eventful) return;\n record.fault = undefined;\n value = next;\n revision = metadata?.revision ?? revision + 1;\n cause = metadata?.cause ?? scheduler.batchContext()?.cause ?? cause;\n reset ||= metadata?.reset ?? false;\n scheduler.capture(record);\n };\n return {\n source: handle,\n accept,\n set(next: T) {\n accept(next);\n scheduler.run();\n },\n };\n };\n const collectionInput = <K extends string, V>(initial: ReadonlyMap<K, V>) => {\n const values = new Map(initial);\n const touched = new Map<K, { readonly present: boolean; readonly value?: V }>();\n let beforeIds: readonly K[] | undefined;\n let revision = 0;\n let cause: unknown;\n const handle = Object.freeze({ kind: 'collection' as const }) as unknown as GraphSource<\n CollectionContext<K, V>\n >;\n const change = (): CollectionChange<K, V> | undefined => {\n const added: { readonly key: K; readonly after: V }[] = [];\n const updated: { readonly key: K; readonly before: V; readonly after: V }[] = [];\n const removed: { readonly key: K; readonly before: V }[] = [];\n for (const [key, before] of touched) {\n const afterPresent = values.has(key);\n if (!before.present && afterPresent) added.push({ key, after: values.get(key) as V });\n else if (before.present && !afterPresent) removed.push({ key, before: before.value as V });\n else if (before.present && afterPresent && !Object.is(before.value, values.get(key)))\n updated.push({ key, before: before.value as V, after: values.get(key) as V });\n }\n let order: { readonly before: readonly K[]; readonly after: readonly K[] } | undefined;\n if (beforeIds) {\n const afterIds = [...values.keys()];\n const beforeKeys = new Set(beforeIds);\n const afterKeys = new Set(afterIds);\n const beforeCommon = beforeIds.filter(key => afterKeys.has(key));\n const afterCommon = afterIds.filter(key => beforeKeys.has(key));\n if (beforeCommon.some((key, index) => key !== afterCommon[index]))\n order = Object.freeze({\n before: beforeIds,\n after: Object.freeze(afterIds),\n });\n }\n if (!added.length && !updated.length && !removed.length && !order) return undefined;\n return Object.freeze({\n kind: 'incremental' as const,\n added: Object.freeze(added),\n updated: Object.freeze(updated),\n removed: Object.freeze(removed),\n ...(order ? { order } : {}),\n });\n };\n const record: SourceRecord = {\n consumers: new Set(),\n disposed: false,\n fault: undefined,\n revision: () => revision,\n reset: () => false,\n shouldSettle: () => change() !== undefined,\n clear: () => {\n touched.clear();\n beforeIds = undefined;\n cause = undefined;\n },\n context: active => {\n assertScope(active);\n const read: CollectionRead<K, V> = Object.freeze({\n get: (key: K) => {\n assertScope(active);\n return values.get(key);\n },\n has: (key: K) => {\n assertScope(active);\n return values.has(key);\n },\n ids: () => {\n assertScope(active);\n return Object.freeze([...values.keys()]);\n },\n });\n return Object.freeze({\n kind: 'collection' as const,\n read,\n change: change(),\n revision,\n cause,\n });\n },\n };\n scheduler.register(handle, record);\n return {\n source: handle,\n update(\n run: (draft: {\n get(key: K): V | undefined;\n has(key: K): boolean;\n set(key: K, value: V): void;\n remove(key: K): void;\n }) => void\n ) {\n scheduler.assertIdle();\n const staged = new Map<\n K,\n { readonly present: true; readonly value: V } | { readonly present: false }\n >();\n let active = true;\n const draft = Object.freeze({\n get: (key: K) => {\n assertScope(() => active);\n const entry = staged.get(key);\n return entry ? (entry.present ? entry.value : undefined) : values.get(key);\n },\n has: (key: K) => {\n assertScope(() => active);\n const entry = staged.get(key);\n return entry ? entry.present : values.has(key);\n },\n set: (key: K, value: V) => {\n assertScope(() => active);\n if (typeof key !== 'string') throw new TypeError('Projection keys must be strings.');\n staged.set(key, { present: true, value });\n },\n remove: (key: K) => {\n assertScope(() => active);\n if (typeof key !== 'string') throw new TypeError('Projection keys must be strings.');\n staged.set(key, { present: false });\n },\n });\n try {\n assertSynchronous(run(draft));\n } finally {\n active = false;\n }\n let changed = false;\n for (const [key, entry] of staged) {\n const present = values.has(key);\n if (entry.present ? present && Object.is(values.get(key), entry.value) : !present)\n continue;\n if (!touched.has(key)) touched.set(key, { present, value: values.get(key) });\n if (!beforeIds && present !== entry.present)\n beforeIds = Object.freeze([...values.keys()]);\n if (entry.present) values.set(key, entry.value);\n else values.delete(key);\n changed = true;\n }\n if (!changed) return;\n revision++;\n cause = scheduler.batchContext()?.cause ?? cause;\n scheduler.capture(record);\n scheduler.run();\n },\n };\n };\n const externalValueSource = <T>(\n port: ExternalValueSource<T>,\n equal: (a: T, b: T) => boolean\n ): GraphSource<ValueContext<T>> => {\n scheduler.assertIdle();\n const old = externalSources.get(port);\n if (old) return old as GraphSource<ValueContext<T>>;\n const input = valueSource<T>(port.current(), equal);\n const fail = (cause: unknown) => {\n const record = scheduler.source(input.source);\n record.fault = new ProjectionError('source', 'external source', [record.revision()], cause);\n scheduler.capture(record);\n };\n let unsubscribe: (() => void) | undefined;\n try {\n unsubscribe = port.subscribe(event => {\n try {\n input.accept(event.value, {\n revision: event.revision,\n reset: event.reset ?? false,\n cause: event.cause,\n });\n } catch (cause) {\n fail(cause);\n }\n scheduler.run();\n });\n } catch (cause) {\n unsubscribe?.();\n scheduler.unregisterSource(input.source);\n throw cause;\n }\n scheduler.cleanups.add(() => unsubscribe?.());\n externalSources.set(port, input.source);\n return input.source;\n };\n const externalCollectionSource = <K extends string, V>(\n port: ExternalCollectionSource<K, V>\n ): GraphSource<CollectionContext<K, V>> => {\n scheduler.assertIdle();\n const old = externalSources.get(port);\n if (old) return old as GraphSource<CollectionContext<K, V>>;\n let read = port.current();\n let previous = read;\n let revision = port.revision();\n let change: CollectionContext<K, V>['change'];\n let reset = false;\n let orderChanged = false;\n let cause: unknown;\n let transitionKeys = new Set<K>();\n let pending = false;\n const handle = Object.freeze({ kind: 'collection' as const }) as unknown as GraphSource<\n CollectionContext<K, V>\n >;\n const record: SourceRecord = {\n consumers: new Set(),\n disposed: false,\n fault: undefined,\n revision: () => revision,\n reset: () => reset,\n clear: () => {\n previous = read;\n pending = false;\n change = undefined;\n reset = false;\n orderChanged = false;\n cause = undefined;\n transitionKeys.clear();\n },\n context: active => {\n assertScope(active);\n const currentRead: CollectionRead<K, V> = Object.freeze({\n get: key => {\n assertScope(active);\n return read.get(key);\n },\n has: key => {\n assertScope(active);\n return read.has(key);\n },\n ids: () => {\n assertScope(active);\n return read.ids();\n },\n });\n return Object.freeze({\n kind: 'collection' as const,\n read: currentRead,\n change,\n revision,\n cause,\n });\n },\n };\n scheduler.register(handle, record);\n const fail = (error: unknown) => {\n record.fault = new ProjectionError('source', 'external collection source', [revision], error);\n scheduler.capture(record);\n };\n const deriveChange = (): CollectionContext<K, V>['change'] => {\n if (reset) return Object.freeze({ kind: 'reset' as const });\n const added: { readonly key: K; readonly after: V }[] = [];\n const updated: {\n readonly key: K;\n readonly before: V;\n readonly after: V;\n }[] = [];\n const removed: { readonly key: K; readonly before: V }[] = [];\n for (const key of transitionKeys) {\n const beforePresent = previous.has(key);\n const afterPresent = read.has(key);\n const before = beforePresent ? previous.get(key) : undefined;\n const after = afterPresent ? read.get(key) : undefined;\n if (beforePresent === afterPresent && Object.is(before, after)) continue;\n if (!beforePresent && afterPresent) added.push({ key, after: after as V });\n else if (beforePresent && !afterPresent) removed.push({ key, before: before as V });\n else if (beforePresent && afterPresent)\n updated.push({ key, before: before as V, after: after as V });\n }\n let order: { readonly before: readonly K[]; readonly after: readonly K[] } | undefined;\n if (orderChanged) {\n const beforeIds = previous.ids();\n const afterIds = read.ids();\n const beforeKeys = new Set(beforeIds);\n const afterKeys = new Set(afterIds);\n const beforeCommon = beforeIds.filter(key => afterKeys.has(key));\n const afterCommon = afterIds.filter(key => beforeKeys.has(key));\n if (beforeCommon.some((key, index) => afterCommon[index] !== key))\n order = Object.freeze({\n before: Object.freeze([...beforeIds]),\n after: Object.freeze([...afterIds]),\n });\n }\n if (!added.length && !removed.length && !updated.length && !order) return undefined;\n return Object.freeze({\n kind: 'incremental' as const,\n added: Object.freeze(added),\n updated: Object.freeze(updated),\n removed: Object.freeze(removed),\n ...(order ? { order } : {}),\n });\n };\n let unsubscribe: (() => void) | undefined;\n try {\n unsubscribe = port.subscribe(event => {\n try {\n scheduler.assertIdle();\n if (!pending) previous = event.previous;\n read = port.current();\n revision = event.revision;\n if (event.impact?.kind === 'incremental') {\n event.impact.added.forEach(key => transitionKeys.add(key));\n event.impact.removed.forEach(key => transitionKeys.add(key));\n event.impact.updated.forEach(key => transitionKeys.add(key));\n orderChanged ||= Boolean(\n event.impact.added.size || event.impact.removed.size || event.impact.orderChanged\n );\n } else if (!event.impact) {\n previous.ids().forEach(key => transitionKeys.add(key));\n read.ids().forEach(key => transitionKeys.add(key));\n orderChanged = true;\n }\n reset ||= event.impact?.kind === 'reset';\n cause = event.cause ?? scheduler.batchContext()?.cause ?? cause;\n change = deriveChange();\n record.fault = undefined;\n scheduler.capture(record);\n pending = true;\n } catch (error) {\n fail(error);\n }\n scheduler.run();\n });\n } catch (error) {\n unsubscribe?.();\n scheduler.unregisterSource(handle);\n throw error;\n }\n scheduler.cleanups.add(() => unsubscribe?.());\n externalSources.set(port, handle);\n return handle;\n };\n return {\n dispose: () => {\n documents.clear();\n readables.clear();\n },\n document,\n fromSource: <T>(\n source: ExternalValueSource<T>,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n ) => externalValueSource(source, options?.isEqual ?? Object.is),\n fromCollectionSource: <K extends string, V>(source: ExternalCollectionSource<K, V>) =>\n externalCollectionSource(source),\n input: <T>(initial: T, options?: { readonly isEqual?: (a: T, b: T) => boolean }) => {\n const { source, set } = valueSource(initial, options?.isEqual ?? Object.is);\n return Object.freeze({ source, set });\n },\n collectionInput,\n fromReadable: <T>(\n readable: Readable<T>,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n ): GraphSource<ValueContext<T>> => {\n scheduler.assertIdle();\n if (projectionHandles.has(readable))\n throw new Error('Projection nodes must be declared directly as sources.');\n const equal = options?.isEqual ?? Object.is;\n let bindings = readables.get(readable);\n const old = bindings?.get(equal);\n if (old) return old.source as GraphSource<ValueContext<T>>;\n const input = valueSource(readable.current(), equal);\n if (bindings) {\n bindings.set(equal, { source: input.source, accept: value => input.accept(value as T) });\n return input.source;\n }\n bindings = new Map([\n [equal, { source: input.source, accept: (value: unknown) => input.accept(value as T) }],\n ]);\n const members = bindings;\n const receive = (settle = true) => {\n if (!scheduler.active) return;\n let value: T;\n try {\n value = readable.current();\n } catch (cause) {\n for (const member of members.values()) {\n const record = scheduler.source(member.source);\n record.fault = new ProjectionError(\n 'source',\n 'external readable',\n [record.revision()],\n cause\n );\n scheduler.capture(record);\n }\n if (settle) scheduler.run();\n return;\n }\n for (const member of members.values()) {\n try {\n member.accept(value);\n } catch (cause) {\n const record = scheduler.source(member.source);\n record.fault = new ProjectionError(\n 'source',\n 'external readable',\n [record.revision()],\n cause\n );\n scheduler.capture(record);\n }\n }\n if (settle) scheduler.run();\n };\n let unsubscribe: (() => void) | undefined;\n let detach: (() => void) | undefined;\n try {\n const owner = documentReadableOwner(readable);\n if (owner) {\n document(owner);\n detach = attachProjection(owner, {\n capture: () => receive(false),\n settle: scheduler.settle,\n flush: scheduler.flush,\n dispose: () => {\n for (const member of members.values()) {\n const record = scheduler.source(member.source);\n record.fault = new ProjectionError(\n 'source',\n 'document readable disposed',\n [record.revision()],\n new Error('Document has been disposed.')\n );\n scheduler.capture(record);\n }\n scheduler.run();\n },\n });\n }\n unsubscribe = readable.subscribe(() => receive());\n input.accept(readable.current());\n } catch (error) {\n try {\n unsubscribe?.();\n detach?.();\n } finally {\n scheduler.unregisterSource(input.source);\n }\n throw error;\n }\n scheduler.cleanups.add(unsubscribe);\n if (detach) scheduler.cleanups.add(detach);\n readables.set(readable, bindings);\n scheduler.run();\n return input.source;\n },\n assertCollection: (handle: object) => {\n scheduler.source(handle);\n if (!isCollectionSource(handle)) throw new Error('map requires a collection source.');\n },\n };\n};\n","import type { InputHandles, GraphSources } from './contract';\nimport { ProjectionDisposedError } from './contract';\nimport type { NodeRecord, Scheduler } from './scheduler';\n\nexport const createNode = <S extends GraphSources>(\n scheduler: Scheduler,\n spec: { name?: string; sources: S },\n behavior: {\n evaluate(sources: InputHandles<S>, build: boolean, active: () => boolean): boolean;\n context(active: () => boolean): unknown;\n revision(): number;\n reset(): boolean;\n publish(): void;\n emit(call: (listener: () => void) => void): void;\n clear(): void;\n release(): void;\n }\n) => {\n scheduler.assertIdle();\n const entries = Object.entries(spec.sources).map(\n ([key, handle]) => [key, scheduler.source(handle)] as const\n );\n const order = scheduler.order();\n const node: NodeRecord = {\n owner: undefined as unknown as NodeRecord,\n ...behavior,\n publish: () => {\n if (node.fault) behavior.clear();\n else behavior.publish();\n },\n order,\n name: spec.name ? `${spec.name} (${order})` : `projection-${order}`,\n sources: entries.map(([, source]) => source),\n consumers: new Set(),\n disposed: false,\n fault: undefined,\n evaluate: build => {\n let active = true;\n try {\n const scopeActive = () => active;\n // Heterogeneous source contexts are typed at the registered capability boundary.\n const inputs = Object.fromEntries(\n entries.map(([key, source]) => [key, source.context(scopeActive)])\n ) as InputHandles<S>;\n return behavior.evaluate(inputs, build, scopeActive);\n } finally {\n active = false;\n }\n },\n };\n (node as { owner: NodeRecord }).owner = node;\n scheduler.initialize(() => {\n const invalid = node.sources.find(source => source.fault || source.disposed);\n if (invalid) throw invalid.fault ?? new ProjectionDisposedError();\n node.evaluate(true);\n node.publish();\n node.clear();\n });\n const check = () => {\n if (node.disposed || !scheduler.active) throw new ProjectionDisposedError();\n if (node.fault) throw node.fault;\n };\n return {\n node,\n check,\n install(handle: object) {\n scheduler.register(handle, node);\n scheduler.addNode(node);\n },\n };\n};\n","import type { GraphSources, ValueNode, ValueNodeSpec } from './contract';\nimport { createNode } from './node';\nimport { assertScope, assertSynchronous, type Scheduler } from './scheduler';\nimport { profile } from '../profile';\n\nexport const createValue = <S extends GraphSources, T>(\n scheduler: Scheduler,\n spec: ValueNodeSpec<S, T>,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n): ValueNode<T> => {\n let instance: ReturnType<typeof spec.build> | undefined;\n let value!: T;\n let next!: T;\n let initialized = false;\n let revision = 0;\n let changed = false;\n let reset = false;\n let cause: unknown;\n const listeners = new Set<() => void>();\n const owner = createNode(scheduler, spec, {\n evaluate: (sources, build) => {\n const metadata = Object.values(sources as Record<string, unknown>).find(\n value =>\n value &&\n typeof value === 'object' &&\n 'cause' in value &&\n (value as { readonly cause?: unknown }).cause !== undefined\n ) as { readonly cause?: unknown } | undefined;\n cause = metadata?.cause ?? scheduler.batchContext()?.cause;\n let candidate: T;\n if (build || !instance) {\n profile.materialized.rebuilt();\n instance = undefined;\n const built = spec.build(sources);\n assertSynchronous(built);\n instance = built;\n candidate = built.value;\n } else {\n profile.materialized.updated();\n const result = instance.update(sources);\n assertSynchronous(result);\n if (result.kind === 'rebuild') {\n instance = undefined;\n const built = spec.build(sources);\n assertSynchronous(built);\n instance = built;\n candidate = built.value;\n build = true;\n } else candidate = result.kind === 'changed' ? result.value : value;\n }\n changed = !initialized || !(options?.isEqual ?? Object.is)(value, candidate);\n next = changed ? candidate : value;\n reset = build;\n return changed;\n },\n context: active => {\n assertScope(active);\n return Object.freeze({\n kind: 'value' as const,\n value: next,\n revision: revision + (changed ? 1 : 0),\n reset,\n cause,\n });\n },\n revision: () => revision,\n reset: () => reset,\n publish: () => {\n if (changed && initialized) revision++;\n value = next;\n initialized = true;\n },\n emit: call => {\n profile.materialized.notification();\n Array.from(listeners).forEach(listener => call(listener));\n },\n clear: () => {\n next = value;\n changed = false;\n reset = false;\n cause = undefined;\n },\n release: () => {\n listeners.clear();\n instance = undefined;\n value = next = undefined as T;\n },\n });\n const handle = Object.freeze({\n kind: 'value' as const,\n current: () => {\n owner.check();\n return value;\n },\n revision: () => {\n owner.check();\n return revision;\n },\n subscribe: (listener: () => void) => {\n owner.check();\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n }) as ValueNode<T>;\n owner.install(handle);\n return handle;\n};\n","import type {\n CollectionChange,\n CollectionContext,\n CollectionDraft,\n CollectionRead,\n} from './contract';\nimport { assertScope } from './scheduler';\nimport { profile } from '../profile';\n\ntype Entry<V> = { readonly present: true; readonly value: V } | { readonly present: false };\n\ntype TreeNode<K extends string, V> = {\n readonly key: K;\n readonly value: V;\n readonly height: number;\n readonly left?: TreeNode<K, V>;\n readonly right?: TreeNode<K, V>;\n};\n\nconst height = <K extends string, V>(node: TreeNode<K, V> | undefined): number => node?.height ?? 0;\n\nconst makeTreeNode = <K extends string, V>(\n key: K,\n value: V,\n left?: TreeNode<K, V>,\n right?: TreeNode<K, V>\n): TreeNode<K, V> =>\n Object.freeze({\n key,\n value,\n left,\n right,\n height: Math.max(height(left), height(right)) + 1,\n });\n\nconst rotateLeft = <K extends string, V>(node: TreeNode<K, V>): TreeNode<K, V> => {\n const right = node.right!;\n return makeTreeNode(\n right.key,\n right.value,\n makeTreeNode(node.key, node.value, node.left, right.left),\n right.right\n );\n};\n\nconst rotateRight = <K extends string, V>(node: TreeNode<K, V>): TreeNode<K, V> => {\n const left = node.left!;\n return makeTreeNode(\n left.key,\n left.value,\n left.left,\n makeTreeNode(node.key, node.value, left.right, node.right)\n );\n};\n\nconst rebalance = <K extends string, V>(node: TreeNode<K, V>): TreeNode<K, V> => {\n const balance = height(node.left) - height(node.right);\n if (balance > 1) {\n if (height(node.left!.left) < height(node.left!.right))\n return rotateRight(makeTreeNode(node.key, node.value, rotateLeft(node.left!), node.right));\n return rotateRight(node);\n }\n if (balance < -1) {\n if (height(node.right!.right) < height(node.right!.left))\n return rotateLeft(makeTreeNode(node.key, node.value, node.left, rotateRight(node.right!)));\n return rotateLeft(node);\n }\n return node;\n};\n\nconst treeSet = <K extends string, V>(\n node: TreeNode<K, V> | undefined,\n key: K,\n value: V\n): TreeNode<K, V> => {\n if (!node) return makeTreeNode(key, value);\n if (key === node.key) return makeTreeNode(key, value, node.left, node.right);\n if (key < node.key)\n return rebalance(\n makeTreeNode(node.key, node.value, treeSet(node.left, key, value), node.right)\n );\n return rebalance(makeTreeNode(node.key, node.value, node.left, treeSet(node.right, key, value)));\n};\n\nconst treeMin = <K extends string, V>(node: TreeNode<K, V>): TreeNode<K, V> =>\n node.left ? treeMin(node.left) : node;\n\nconst treeRemove = <K extends string, V>(\n node: TreeNode<K, V> | undefined,\n key: K\n): TreeNode<K, V> | undefined => {\n if (!node) return undefined;\n if (key < node.key)\n return rebalance(makeTreeNode(node.key, node.value, treeRemove(node.left, key), node.right));\n if (key > node.key)\n return rebalance(makeTreeNode(node.key, node.value, node.left, treeRemove(node.right, key)));\n if (!node.left) return node.right;\n if (!node.right) return node.left;\n const next = treeMin(node.right);\n return rebalance(makeTreeNode(next.key, next.value, node.left, treeRemove(node.right, next.key)));\n};\n\nconst treeGet = <K extends string, V>(node: TreeNode<K, V> | undefined, key: K): V | undefined => {\n let current = node;\n while (current) {\n if (key === current.key) return current.value;\n current = key < current.key ? current.left : current.right;\n }\n return undefined;\n};\n\nconst treeHas = <K extends string, V>(node: TreeNode<K, V> | undefined, key: K): boolean => {\n let current = node;\n while (current) {\n if (key === current.key) return true;\n current = key < current.key ? current.left : current.right;\n }\n return false;\n};\n\nconst treeFromSorted = <K extends string, V>(\n entries: readonly (readonly [K, V])[],\n start = 0,\n end = entries.length\n): TreeNode<K, V> | undefined => {\n if (start >= end) return undefined;\n const middle = (start + end) >> 1;\n const [key, value] = entries[middle];\n return makeTreeNode(\n key,\n value,\n treeFromSorted(entries, start, middle),\n treeFromSorted(entries, middle + 1, end)\n );\n};\n\nexport type CollectionEvaluation<K extends string, V> = {\n readonly previous: CollectionRead<K, V>;\n readonly next: CollectionRead<K, V>;\n readonly output: CollectionDraft<K, V>;\n};\n\nexport type CollectionState<K extends string, V> = {\n begin(active: () => boolean, reset: boolean): CollectionEvaluation<K, V>;\n seal(reset: boolean, isEqual: (previous: V, next: V) => boolean): boolean;\n context(active: () => boolean, cause: unknown): CollectionContext<K, V>;\n current(check: () => void): CollectionRead<K, V>;\n revision(): number;\n reset(): boolean;\n publish(): void;\n emit(call: (listener: () => void) => void): void;\n clear(): void;\n release(): void;\n subscribe(listener: (change: CollectionChange<K, V>) => void): void;\n unsubscribe(listener: (change: CollectionChange<K, V>) => void): void;\n};\n\n/**\n * The one keyed publication kernel used by ordinary collection nodes and\n * processor-group output leaves. It owns staged intent, exact transitions and\n * the persistent published snapshot; callers only provide the processor\n * callback and the equality policy.\n */\nexport const createCollectionState = <K extends string, V>(): CollectionState<K, V> => {\n const values = new Map<K, V>();\n let ids: readonly K[] = Object.freeze([]);\n let staged = new Map<K, Entry<V>>();\n let nextIds = ids;\n let change: CollectionChange<K, V> | undefined;\n let initialized = false;\n let reset = false;\n let revision = 0;\n let publishedRoot: TreeNode<K, V> | undefined;\n let changedKeys = new Set<K>();\n let orderChanged = false;\n let explicitOrder: readonly K[] | undefined;\n let cleared = false;\n const listeners = new Set<(change: CollectionChange<K, V>) => void>();\n\n const hasNext = (key: K): boolean =>\n staged.has(key) ? staged.get(key)!.present : !cleared && values.has(key);\n const getNext = (key: K): V | undefined => {\n const entry = staged.get(key);\n return entry\n ? entry.present\n ? entry.value\n : undefined\n : cleared\n ? undefined\n : values.get(key);\n };\n const deriveIds = (): readonly K[] => {\n const result = cleared ? [] : ids.filter(hasNext);\n for (const [key, entry] of staged)\n if (entry.present && (cleared || !values.has(key))) result.push(key);\n return result;\n };\n\n const begin = (active: () => boolean, nextReset: boolean): CollectionEvaluation<K, V> => {\n staged = new Map();\n nextIds = ids;\n change = undefined;\n changedKeys = new Set();\n explicitOrder = undefined;\n orderChanged = false;\n cleared = nextReset;\n const read = (next: boolean): CollectionRead<K, V> => ({\n get: key => {\n assertScope(active);\n return next ? getNext(key) : values.get(key);\n },\n has: key => {\n assertScope(active);\n return next ? hasNext(key) : values.has(key);\n },\n ids: () => {\n assertScope(active);\n return next ? Object.freeze(explicitOrder ? [...explicitOrder] : [...deriveIds()]) : ids;\n },\n });\n const output: CollectionDraft<K, V> = {\n set: (key, value) => {\n assertScope(active);\n if (typeof key !== 'string') throw new TypeError('Projection keys must be strings.');\n staged.set(key, { present: true, value });\n },\n remove: key => {\n assertScope(active);\n staged.set(key, { present: false });\n },\n order: order => {\n assertScope(active);\n explicitOrder = Object.freeze([...order]);\n },\n };\n return { previous: read(false), next: read(true), output };\n };\n\n const seal = (nextReset: boolean, isEqual: (previous: V, next: V) => boolean): boolean => {\n if (cleared)\n for (const key of values.keys()) if (!staged.has(key)) staged.set(key, { present: false });\n\n profile.projection('touchedKeys', staged.size);\n\n const added = new Set<K>();\n const removed = new Set<K>();\n const updated = new Set<K>();\n for (const [key, entry] of staged) {\n const existed = values.has(key);\n if (entry.present) {\n if (!existed) added.add(key);\n else if (!isEqual(values.get(key) as V, entry.value)) updated.add(key);\n else if (!nextReset) staged.delete(key);\n } else if (existed) removed.add(key);\n else staged.delete(key);\n }\n\n if (explicitOrder || added.size || removed.size) {\n const order = explicitOrder ?? [...ids.filter(key => !removed.has(key)), ...added];\n const seen = new Set(order);\n if (\n seen.size !== order.length ||\n order.length !== values.size + added.size - removed.size ||\n order.some(key => !hasNext(key))\n )\n throw new TypeError('Projection order must contain every key exactly once.');\n nextIds =\n ids.length === order.length && ids.every((key, index) => key === order[index])\n ? ids\n : Object.freeze([...order]);\n } else nextIds = ids;\n\n orderChanged = nextIds !== ids;\n for (const key of added) changedKeys.add(key);\n for (const key of removed) changedKeys.add(key);\n for (const key of updated) changedKeys.add(key);\n profile.projection('changedKeys', changedKeys.size);\n\n const addedEntries: { readonly key: K; readonly after: V }[] = [];\n const updatedEntries: {\n readonly key: K;\n readonly before: V;\n readonly after: V;\n }[] = [];\n const removedEntries: { readonly key: K; readonly before: V }[] = [];\n for (const key of changedKeys) {\n const beforePresent = values.has(key);\n const afterPresent = hasNext(key);\n if (beforePresent === afterPresent) {\n if (!beforePresent || isEqual(values.get(key) as V, getNext(key) as V)) continue;\n }\n if (!beforePresent) addedEntries.push({ key, after: getNext(key) as V });\n else if (!afterPresent) removedEntries.push({ key, before: values.get(key) as V });\n else\n updatedEntries.push({\n key,\n before: values.get(key) as V,\n after: getNext(key) as V,\n });\n }\n\n if (nextReset) change = Object.freeze({ kind: 'reset' as const });\n else if (\n addedEntries.length ||\n updatedEntries.length ||\n removedEntries.length ||\n orderChanged\n ) {\n let commonOrderChanged = false;\n if (orderChanged) {\n const before = ids.filter(key => !removed.has(key));\n const after = nextIds.filter(key => !added.has(key));\n commonOrderChanged = before.some((key, index) => after[index] !== key);\n }\n change = Object.freeze({\n kind: 'incremental' as const,\n added: Object.freeze(addedEntries),\n updated: Object.freeze(updatedEntries),\n removed: Object.freeze(removedEntries),\n ...(commonOrderChanged\n ? {\n order: Object.freeze({\n before: Object.freeze([...ids]),\n after: Object.freeze([...nextIds]),\n }),\n }\n : {}),\n });\n }\n reset = nextReset;\n return change !== undefined;\n };\n\n const context = (active: () => boolean, cause: unknown): CollectionContext<K, V> =>\n Object.freeze({\n kind: 'collection' as const,\n read: {\n get: key => {\n assertScope(active);\n return getNext(key);\n },\n has: key => {\n assertScope(active);\n return hasNext(key);\n },\n ids: () => {\n assertScope(active);\n return nextIds;\n },\n },\n change,\n revision: revision + (change ? 1 : 0),\n cause,\n });\n\n const current = (check: () => void): CollectionRead<K, V> => {\n const root = publishedRoot;\n const publishedIds = ids;\n return Object.freeze({\n get: key => {\n check();\n return treeGet(root, key);\n },\n has: key => {\n check();\n return treeHas(root, key);\n },\n ids: () => {\n check();\n return publishedIds;\n },\n });\n };\n\n return {\n begin,\n seal,\n context,\n current,\n revision: () => revision,\n reset: () => reset,\n publish: () => {\n if (change) {\n if (change.kind === 'reset') {\n const entries: [K, V][] = [];\n for (const [key, entry] of staged) if (entry.present) entries.push([key, entry.value]);\n entries.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0));\n publishedRoot = treeFromSorted(entries);\n } else {\n for (const [key, entry] of staged)\n publishedRoot = entry.present\n ? treeSet(publishedRoot, key, entry.value)\n : treeRemove(publishedRoot, key);\n }\n }\n for (const [key, entry] of staged) {\n if (entry.present) values.set(key, entry.value);\n else values.delete(key);\n }\n if (change && initialized) revision++;\n ids = nextIds;\n initialized = true;\n },\n emit: call => {\n const resetEvent = Object.freeze({ kind: 'reset' as const });\n Array.from(listeners).forEach(listener => call(() => listener(change ?? resetEvent)));\n },\n clear: () => {\n staged.clear();\n nextIds = ids;\n change = undefined;\n reset = false;\n changedKeys.clear();\n explicitOrder = undefined;\n orderChanged = false;\n cleared = false;\n },\n release: () => {\n values.clear();\n staged.clear();\n publishedRoot = undefined;\n listeners.clear();\n ids = nextIds = Object.freeze([]);\n change = undefined;\n initialized = false;\n revision = 0;\n },\n subscribe: listener => {\n listeners.add(listener);\n },\n unsubscribe: listener => {\n listeners.delete(listener);\n },\n };\n};\n","import { profile } from '../profile';\nimport type {\n CollectionChange,\n CollectionNode,\n CollectionNodeSpec,\n GraphSources,\n} from './contract';\nimport { createCollectionState } from './collection-state';\nimport { createNode } from './node';\nimport { assertSynchronous, type Scheduler } from './scheduler';\n\nexport const createCollection = <S extends GraphSources, K extends string, V>(\n scheduler: Scheduler,\n spec: CollectionNodeSpec<S, K, V>\n): CollectionNode<K, V> => {\n const state = createCollectionState<K, V>();\n let instance: ReturnType<typeof spec.build> | undefined;\n let cause: unknown;\n const owner = createNode(scheduler, spec, {\n evaluate: (sources, build, active) => {\n const metadata = Object.values(sources as Record<string, unknown>).find(\n value =>\n value &&\n typeof value === 'object' &&\n 'cause' in value &&\n (value as { readonly cause?: unknown }).cause !== undefined\n ) as { readonly cause?: unknown } | undefined;\n cause = metadata?.cause ?? scheduler.batchContext()?.cause;\n const input = state.begin(active, build);\n if (build || !instance) {\n profile.materialized.rebuilt();\n instance = undefined;\n const built = spec.build({ sources, ...input });\n assertSynchronous(built);\n instance = built;\n } else {\n profile.materialized.updated();\n const result = instance.update({ sources, ...input });\n assertSynchronous(result);\n if (result?.kind === 'rebuild') {\n const rebuildInput = state.begin(active, true);\n instance = undefined;\n const built = spec.build({ sources, ...rebuildInput });\n assertSynchronous(built);\n instance = built;\n build = true;\n }\n }\n return state.seal(build, spec.isEqual ?? Object.is);\n },\n context: active => state.context(active, cause),\n revision: state.revision,\n reset: state.reset,\n publish: state.publish,\n emit: state.emit,\n clear: state.clear,\n release: () => {\n state.release();\n instance = undefined;\n },\n });\n const handle = {\n kind: 'collection' as const,\n current: () => {\n owner.check();\n return state.current(owner.check);\n },\n revision: () => {\n owner.check();\n return state.revision();\n },\n subscribe: (listener: (change: CollectionChange<K, V>) => void) => {\n owner.check();\n state.subscribe(listener);\n return () => state.unsubscribe(listener);\n },\n } as CollectionNode<K, V>;\n owner.install(handle);\n return Object.freeze(handle);\n};\n","import { ProjectionDisposedError, type CollectionNode, type CollectionGroupSpec } from './contract';\nimport { createCollectionState } from './collection-state';\nimport { profile } from '../profile';\nimport {\n assertScope,\n assertSynchronous,\n type NodeRecord,\n type OutputRecord,\n type Scheduler,\n} from './scheduler';\n\n/**\n * Materializes one processor callback with several keyed output leaves. The\n * scheduler sees one node and the output leaves remain ordinary source records\n * for dependency, revision and listener matching.\n */\nexport const createCollectionGroup = (\n scheduler: Scheduler,\n spec: CollectionGroupSpec\n): readonly CollectionNode<string, unknown>[] => {\n scheduler.assertIdle();\n const sources = Object.entries(spec.sources).map(\n ([key, handle]) => [key, scheduler.source(handle)] as const\n );\n const states = spec.outputs.map(() => createCollectionState<string, unknown>());\n let instance: ReturnType<typeof spec.build> | undefined;\n let cause: unknown;\n let changedOutputs: readonly OutputRecord[] = Object.freeze([]);\n let node!: NodeRecord;\n const order = scheduler.order();\n\n const outputs = states.map((state, index) => {\n const output: OutputRecord = {\n owner: undefined as unknown as NodeRecord,\n consumers: new Set(),\n context: active => state.context(active, cause),\n revision: state.revision,\n reset: state.reset,\n fault: undefined,\n disposed: false,\n clear: state.clear,\n emit: state.emit,\n };\n Object.defineProperty(output, 'fault', {\n configurable: false,\n enumerable: true,\n get: () => node.fault,\n set: value => {\n node.fault = value;\n },\n });\n return output;\n });\n\n const check = () => {\n if (node.disposed || !scheduler.active) throw new ProjectionDisposedError();\n if (node.fault) throw node.fault;\n };\n\n const evaluate = (\n inputSources: Record<string, unknown>,\n build: boolean,\n active: () => boolean\n ) => {\n const metadata = Object.values(inputSources).find(\n value =>\n value &&\n typeof value === 'object' &&\n 'cause' in value &&\n (value as { readonly cause?: unknown }).cause !== undefined\n ) as { readonly cause?: unknown } | undefined;\n cause = metadata?.cause ?? scheduler.batchContext()?.cause;\n const makeInput = (reset: boolean) => {\n const evaluations = states.map(state => state.begin(active, reset));\n return {\n sources: inputSources,\n previous: evaluations.map(evaluation => evaluation.previous),\n next: evaluations.map(evaluation => evaluation.next),\n outputs: evaluations.map(evaluation => evaluation.output),\n };\n };\n let input = makeInput(build);\n if (build || !instance) {\n profile.materialized.rebuilt();\n instance = undefined;\n const built = spec.build(input);\n assertSynchronous(built);\n instance = built;\n } else {\n profile.materialized.updated();\n const result = instance.update(input);\n assertSynchronous(result);\n if (result?.kind === 'rebuild') {\n input = makeInput(true);\n instance = undefined;\n const built = spec.build(input);\n assertSynchronous(built);\n instance = built;\n build = true;\n }\n }\n changedOutputs = Object.freeze(\n states.flatMap((state, index) =>\n state.seal(build, spec.outputs[index].isEqual ?? Object.is) ? [outputs[index]] : []\n )\n );\n return changedOutputs.length > 0;\n };\n\n node = {\n owner: undefined as unknown as NodeRecord,\n order,\n name: `processor-group (${order})`,\n sources: sources.map(([, source]) => source),\n consumers: new Set(),\n outputs,\n disposed: false,\n fault: undefined,\n context: active => {\n assertScope(active);\n return Object.freeze({ kind: 'group' as const });\n },\n revision: () => Math.max(0, ...states.map(state => state.revision())),\n reset: () => states.some(state => state.reset()),\n evaluate: build => {\n let active = true;\n try {\n const scopeActive = () => active;\n const inputs = Object.fromEntries(\n sources.map(([key, source]) => [key, source.context(scopeActive)])\n ) as Record<string, unknown>;\n return evaluate(inputs, build, scopeActive);\n } finally {\n active = false;\n }\n },\n changedOutputs: () => changedOutputs,\n publish: () => {\n if (node.fault) states.forEach(state => state.clear());\n else states.forEach(state => state.publish());\n },\n emit: () => undefined,\n clear: () => {\n states.forEach(state => state.clear());\n changedOutputs = Object.freeze([]);\n cause = undefined;\n },\n release: () => {\n states.forEach(state => state.release());\n outputs.forEach(output => {\n output.disposed = true;\n output.consumers.clear();\n });\n instance = undefined;\n },\n };\n (node as { owner: NodeRecord }).owner = node;\n outputs.forEach(output => {\n (output as { owner: NodeRecord }).owner = node;\n });\n\n scheduler.initialize(() => {\n const invalid = node.sources.find(source => source.fault || source.disposed);\n if (invalid) throw invalid.fault ?? new ProjectionDisposedError();\n node.evaluate(true);\n node.publish();\n node.clear();\n });\n const handles = outputs.map((output, index) => {\n const handle = {\n kind: 'collection' as const,\n current: () => {\n check();\n return states[index].current(check);\n },\n revision: () => {\n check();\n return states[index].revision();\n },\n subscribe: (\n listener: (change: import('./contract').CollectionChange<string, unknown>) => void\n ) => {\n check();\n states[index].subscribe(listener);\n return () => states[index].unsubscribe(listener);\n },\n } as CollectionNode<string, unknown>;\n scheduler.register(handle, output);\n return Object.freeze(handle);\n });\n scheduler.addNode(node);\n return Object.freeze(handles);\n};\n","import type {\n CollectionContext,\n GraphSource,\n GraphSources,\n ValueNode,\n ValueNodeSpec,\n ExternalCollectionSource,\n ExternalValueSource,\n} from './contract';\nimport { assertSynchronous, createScheduler } from './scheduler';\nimport { createSources } from './source';\nimport { createValue } from './value';\nimport { createCollection } from './collection';\nimport { createCollectionGroup } from './group';\nimport type { ProjectionError } from './contract';\nimport { profile } from '../profile';\nexport const createProjectionGraph = (options: {\n readonly onError: (error: ProjectionError) => void;\n}) => {\n const scheduler = createScheduler(options.onError);\n const sources = createSources(scheduler);\n const value = <S extends GraphSources, T>(\n spec: ValueNodeSpec<S, T>,\n options?: { readonly isEqual?: (a: NoInfer<T>, b: NoInfer<T>) => boolean }\n ): ValueNode<T> => createValue(scheduler, spec, options);\n const map = <K extends string, V, R>(\n source: GraphSource<CollectionContext<K, V>>,\n mapper: (id: K, entry: V) => R,\n options?: { readonly isEqual?: (a: R, b: R) => boolean }\n ) => {\n sources.assertCollection(source);\n const calculate = (id: K, entry: V): R => {\n const value = mapper(id, entry);\n assertSynchronous(value);\n return value;\n };\n return createCollection(scheduler, {\n sources: { source },\n isEqual: options?.isEqual,\n build: ({ sources, output }) => {\n const input = sources.source;\n const read = input.read;\n const ids = read.ids();\n profile.collectionView.idsScanned(ids.length);\n for (const id of ids) {\n profile.collectionView.mapped();\n output.set(id, calculate(id, read.get(id)!));\n }\n output.order(ids);\n return {\n update: ({ sources, output }) => {\n const input = sources.source;\n const read = input.read;\n if (input.change?.kind === 'reset') return { kind: 'rebuild' };\n const change = input.change;\n if (!change) return;\n for (const entry of change.added) {\n profile.collectionView.mapped();\n output.set(entry.key, calculate(entry.key, entry.after));\n }\n for (const entry of change.updated) {\n profile.collectionView.mapped();\n output.set(entry.key, calculate(entry.key, entry.after));\n }\n for (const entry of change.removed) output.remove(entry.key);\n if (change.added.length || change.removed.length || change.order) {\n const ids = read.ids();\n profile.collectionView.idsScanned(ids.length);\n output.order(ids);\n }\n },\n };\n },\n });\n };\n const graph = {\n document: sources.document,\n fromSource: <T>(\n source: ExternalValueSource<T>,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n ) => sources.fromSource(source, options),\n fromCollectionSource: <K extends string, V>(source: ExternalCollectionSource<K, V>) =>\n sources.fromCollectionSource(source),\n input: sources.input,\n collectionInput: sources.collectionInput,\n fromReadable: sources.fromReadable,\n value,\n collection: <S extends GraphSources, K extends string, V>(\n spec: import('./contract').CollectionNodeSpec<S, K, V>\n ) => createCollection(scheduler, spec),\n group: (spec: import('./contract').CollectionGroupSpec) =>\n createCollectionGroup(scheduler, spec),\n map,\n batch: scheduler.batch,\n assertIdle: scheduler.assertIdle,\n releaseNode: scheduler.releaseNode,\n releaseInput: scheduler.unregisterSource,\n dispose: () => {\n try {\n scheduler.dispose();\n } finally {\n if (!scheduler.active) sources.dispose();\n }\n },\n };\n return Object.freeze(graph);\n};\n","import { read as readAddress } from '../address';\nimport { snapshot } from '../access/scope';\nimport { accessOf } from '../runtime/access';\nimport { compilePath } from '../schema';\nimport type { Unsubscribe } from '../runtime/contract';\nimport type {\n CollectionChange,\n CollectionRead,\n CollectionNode,\n ValueNode,\n GraphSource,\n} from './contract';\nimport { ProjectionDisposedError } from './contract';\nimport type { Readable } from './readable';\nimport {\n definitionOf,\n derive,\n input,\n ownDefinition,\n ownerOf,\n isProjection,\n type Input,\n type Projection,\n type IncrementalGroupDefinition,\n} from './definition';\nimport {\n incremental,\n type IncrementalGroupDefine,\n type IncrementalGroupOutputTree,\n type IncrementalGroupProcessor,\n type IncrementalCollectionProcessor,\n type IncrementalValueProcessor,\n} from './advanced';\nimport { createProjectionGraph } from './graph';\n\ntype RuntimeNode = ValueNode<unknown> | CollectionNode<string, unknown>;\ntype RuntimeValue = RuntimeNode;\ntype KeyedDraft<K extends string, V> = {\n get(key: K): V | undefined;\n has(key: K): boolean;\n set(key: K, value: V): void;\n remove(key: K): void;\n};\ntype SelectionTracker = {\n readonly keys: Set<string>;\n all: boolean;\n structure: boolean;\n};\n\ntype Selection = {\n readonly keys: ReadonlySet<string>;\n readonly all: boolean;\n readonly structure: boolean;\n};\n\nexport type ProjectionRuntime = {\n get<T>(projection: Projection<T, unknown>): T;\n readable<T>(projection: Projection<T, unknown>): Readable<T>;\n readable<T, R>(\n projection: Projection<T, unknown>,\n selector: (value: T) => R,\n equality?: (previous: R, next: R) => boolean\n ): Readable<R>;\n set<T>(input: Input<T>, value: T): void;\n update<K extends string, V>(\n input: Input<ReadonlyMap<K, V>, CollectionChange<K, V>>,\n run: (draft: KeyedDraft<K, V>) => void\n ): void;\n batch<T>(run: () => T): T;\n batch<T>(options: { readonly cause?: unknown }, run: () => T): T;\n scope(): ProjectionScope;\n dispose(): void;\n};\n\nexport type ProjectionScope = {\n readonly input: typeof input;\n readonly derive: typeof derive;\n readonly incremental: typeof incremental;\n get<T>(projection: Projection<T, unknown>): T;\n readable<T>(projection: Projection<T, unknown>): Readable<T>;\n readable<T, R>(\n projection: Projection<T, unknown>,\n selector: (value: T) => R,\n equality?: (previous: R, next: R) => boolean\n ): Readable<R>;\n set<T>(input: Input<T>, value: T): void;\n update<K extends string, V>(\n input: Input<ReadonlyMap<K, V>, CollectionChange<K, V>>,\n run: (draft: KeyedDraft<K, V>) => void\n ): void;\n batch: ProjectionRuntime['batch'];\n dispose(): void;\n};\n\nlet activeTracker: SelectionTracker | undefined;\n\nconst trackKey = (key: string): void => {\n activeTracker?.keys.add(key);\n};\nconst trackStructure = (): void => {\n if (!activeTracker) return;\n activeTracker.structure = true;\n};\nconst trackAll = (): void => {\n if (!activeTracker) return;\n activeTracker.all = true;\n};\n\nconst mapView = <K extends string, V>(read: CollectionRead<K, V>): ReadonlyMap<K, V> => {\n const keys = read.ids();\n const source = new Map<K, V>();\n for (const key of keys) source.set(key, read.get(key) as V);\n const view: ReadonlyMap<K, V> = {\n get: key => {\n trackKey(key);\n return source.get(key);\n },\n has: key => {\n trackKey(key);\n return source.has(key);\n },\n get size() {\n trackStructure();\n return source.size;\n },\n keys: () => {\n trackStructure();\n return source.keys();\n },\n values: () => {\n trackAll();\n return source.values();\n },\n entries: () => {\n trackAll();\n return source.entries();\n },\n forEach: (callback, thisArg) => {\n trackAll();\n source.forEach((value, key) => callback.call(thisArg, value, key, view));\n },\n [Symbol.iterator]: () => {\n trackAll();\n return source[Symbol.iterator]();\n },\n };\n return Object.freeze(view);\n};\n\nconst lazyMapView = <K extends string, V>(read: CollectionRead<K, V>): ReadonlyMap<K, V> => {\n const ids = read.ids();\n const entries = function* (): IterableIterator<[K, V]> {\n for (const key of ids) yield [key, read.get(key) as V];\n };\n const values = function* (): IterableIterator<V> {\n for (const key of ids) yield read.get(key) as V;\n };\n const view: ReadonlyMap<K, V> = {\n get: key => {\n trackKey(key);\n return read.get(key);\n },\n has: key => {\n trackKey(key);\n return read.has(key);\n },\n get size() {\n trackStructure();\n return ids.length;\n },\n keys: () => {\n trackStructure();\n return ids[Symbol.iterator]();\n },\n values: () => {\n trackAll();\n return values();\n },\n entries: () => {\n trackAll();\n return entries();\n },\n forEach: (callback, thisArg) => {\n trackAll();\n for (const key of ids) callback.call(thisArg, read.get(key) as V, key, view);\n },\n [Symbol.iterator]: () => {\n trackAll();\n return entries();\n },\n };\n return Object.freeze(view);\n};\n\nconst isMapLike = (value: unknown): value is ReadonlyMap<string, unknown> =>\n value instanceof Map ||\n (value !== null &&\n typeof value === 'object' &&\n typeof (value as { get?: unknown }).get === 'function' &&\n typeof (value as { keys?: unknown }).keys === 'function' &&\n typeof (value as { entries?: unknown }).entries === 'function');\n\nconst mapRead = (value: ReadonlyMap<string, unknown>): CollectionRead<string, unknown> => ({\n get: key => value.get(key),\n has: key => value.has(key),\n ids: () => Object.freeze([...value.keys()]),\n});\n\nconst mapChange = (\n previous: ReadonlyMap<string, unknown>,\n current: ReadonlyMap<string, unknown>\n): CollectionChange<string, unknown> | undefined => {\n const added: { readonly key: string; readonly after: unknown }[] = [];\n const removed: { readonly key: string; readonly before: unknown }[] = [];\n const updated: {\n readonly key: string;\n readonly before: unknown;\n readonly after: unknown;\n }[] = [];\n for (const key of previous.keys()) {\n if (!current.has(key)) removed.push({ key, before: previous.get(key) });\n else if (!Object.is(previous.get(key), current.get(key)))\n updated.push({ key, before: previous.get(key), after: current.get(key) });\n }\n for (const key of current.keys())\n if (!previous.has(key)) added.push({ key, after: current.get(key) });\n const before = [...previous.keys()].filter(key => current.has(key));\n const after = [...current.keys()].filter(key => previous.has(key));\n const orderChanged =\n before.length !== after.length || before.some((key, index) => key !== after[index]);\n if (!added.length && !removed.length && !updated.length && !orderChanged) return undefined;\n return {\n kind: 'incremental',\n added: Object.freeze(added),\n removed: Object.freeze(removed),\n updated: Object.freeze(updated),\n ...(orderChanged\n ? {\n order: Object.freeze({\n before: Object.freeze([...previous.keys()]),\n after: Object.freeze([...current.keys()]),\n }),\n }\n : {}),\n };\n};\n\nconst sameSelection = (left: Selection, right: Selection): boolean => {\n if (\n left.all !== right.all ||\n left.structure !== right.structure ||\n left.keys.size !== right.keys.size\n )\n return false;\n for (const key of left.keys) if (!right.keys.has(key)) return false;\n return true;\n};\n\nconst selectionAffects = (\n selection: Selection,\n change: CollectionChange<string, unknown> | undefined\n): boolean => {\n if (!change || change.kind === 'reset') return true;\n if (\n selection.all &&\n (change.added.length || change.removed.length || change.updated.length || change.order)\n )\n return true;\n if (selection.structure && (change.added.length || change.removed.length || change.order))\n return true;\n for (const key of selection.keys) {\n if (\n change.added.some(entry => entry.key === key) ||\n change.removed.some(entry => entry.key === key) ||\n change.updated.some(entry => entry.key === key)\n )\n return true;\n }\n return false;\n};\n\nconst currentValue = (event: unknown): unknown => {\n if (!event || typeof event !== 'object') return event;\n if ('kind' in event && event.kind === 'value')\n return (event as unknown as { readonly value: unknown }).value;\n if ('kind' in event && event.kind === 'document')\n return snapshot((event as unknown as { readonly read: unknown }).read);\n if ('kind' in event && event.kind === 'collection')\n return mapView((event as unknown as { readonly read: CollectionRead<string, unknown> }).read);\n return event;\n};\n\nconst sourceOf = (instance: RuntimeNode): GraphSource<unknown> => instance as GraphSource<unknown>;\n\nexport const createProjectionRuntime = (options?: {\n readonly onError?: (error: import('./contract').ProjectionError) => void;\n}): ProjectionRuntime => {\n const runtime = createProjectionGraph({ onError: options?.onError ?? (() => undefined) });\n type MaterializedBase = {\n readonly node: RuntimeValue;\n collection?: { revision: number; value: ReadonlyMap<string, unknown> };\n };\n type CollectionWrite = {\n readonly kind: 'collection-input';\n readonly source: object;\n readonly update: (run: (draft: KeyedDraft<string, unknown>) => void) => void;\n };\n type InputWrite =\n | {\n readonly kind: 'value-input';\n readonly source: object;\n readonly set: (value: unknown) => void;\n }\n | CollectionWrite;\n type Materialized = MaterializedBase & ({ readonly kind: 'projection' } | InputWrite);\n const materialized = new WeakMap<object, Materialized>();\n type MaterializedGroup = {\n readonly definition: IncrementalGroupDefinition;\n readonly nodes: readonly CollectionNode<string, unknown>[];\n };\n const groups = new WeakMap<object, MaterializedGroup>();\n let disposed = false;\n type ScopeState = {\n active: boolean;\n readonly materialized: object[];\n readonly subscriptions: Set<Unsubscribe>;\n };\n const scopes = new Set<ScopeState>();\n\n let materialize: (\n projection: Projection<unknown, unknown>,\n requester?: ScopeState\n ) => RuntimeValue;\n\n const materializeGroup = (\n definition: IncrementalGroupDefinition,\n requester?: ScopeState\n ): MaterializedGroup => {\n const existing = groups.get(definition);\n if (existing) return existing;\n const owners = definition.projections\n .map(projection => ownerOf(projection))\n .filter((owner): owner is object => owner !== undefined);\n if (owners.some(owner => owner !== requester))\n throw new TypeError('Projection group belongs to another scope.');\n const sources = Object.fromEntries(\n Object.entries(definition.dependencies).map(([key, dependency]) => [\n key,\n sourceOf(materialize(dependency as never, requester)),\n ])\n );\n const nodes = runtime.group({\n sources,\n outputs: definition.outputs,\n build: definition.build as never,\n });\n const group = Object.freeze({ definition, nodes });\n groups.set(definition, group);\n for (let index = 0; index < definition.projections.length; index++)\n materialized.set(definition.projections[index], {\n kind: 'projection',\n node: nodes[index],\n });\n if (requester) requester.materialized.push(definition);\n return group;\n };\n\n materialize = (\n projection: Projection<unknown, unknown>,\n requester?: ScopeState\n ): RuntimeValue => {\n const owner = ownerOf(projection);\n if (owner) {\n if (owner !== requester) throw new TypeError('Projection belongs to another scope.');\n if (!requester.active) throw new ProjectionDisposedError();\n }\n const old = materialized.get(projection);\n if (old) return old.node;\n const definition = definitionOf(projection);\n if (definition.kind === 'incremental-group-output')\n return materializeGroup(definition.group, requester).nodes[definition.output];\n let instance: RuntimeValue;\n let write: InputWrite | undefined;\n switch (definition.kind) {\n case 'input': {\n const input = runtime.input(definition.initial, { isEqual: definition.isEqual });\n write = { kind: 'value-input', source: input.source, set: input.set };\n instance = runtime.value({\n sources: { input: input.source },\n build: values => ({\n value: values.input.value,\n update: next => ({ kind: 'changed', value: next.input.value }),\n }),\n });\n break;\n }\n case 'collection-input': {\n const source = runtime.collectionInput(definition.initial);\n write = {\n kind: 'collection-input',\n source: source.source,\n update: source.update as CollectionWrite['update'],\n };\n instance = runtime.map(source.source, (_key, value) => value);\n break;\n }\n case 'readable': {\n const source = runtime.fromReadable(definition.readable, { isEqual: definition.isEqual });\n instance = runtime.value({\n sources: { source },\n build: values => ({\n value: values.source.value,\n update: next => ({ kind: 'changed', value: next.source.value }),\n }),\n });\n break;\n }\n case 'source-value':\n {\n const source = runtime.fromSource(definition.source);\n instance = runtime.value({\n sources: { source },\n build: values => ({\n value: values.source.value,\n update: next => ({ kind: 'changed', value: next.source.value }),\n }),\n });\n }\n break;\n case 'source-collection': {\n const source = runtime.fromCollectionSource(definition.source);\n instance = runtime.map(source as never, (_key, value) => value);\n break;\n }\n case 'document': {\n const document = runtime.document(definition.document);\n if (!definition.selector) {\n instance = runtime.value({\n sources: { document },\n build: values => ({\n value: snapshot(values.document.read),\n update: next => ({ kind: 'changed', value: snapshot(next.document.read) }),\n }),\n });\n break;\n }\n const state = accessOf(definition.document);\n try {\n const collection = document.collection(definition.selector as never);\n instance = runtime.map(collection, (_id, entry) => entry);\n break;\n } catch {\n const selected = document.targets(definition.selector as never);\n const address = compilePath(state.schema, 'value', definition.selector as never).address;\n instance = runtime.value({\n sources: { selected },\n build: () => ({\n value: readAddress(snapshot(state.document), address, state.schema),\n update: () => ({\n kind: 'changed',\n value: readAddress(snapshot(state.document), address, state.schema),\n }),\n }),\n });\n }\n break;\n }\n case 'derive': {\n const sources = Object.fromEntries(\n definition.dependencies.map((dependency, index) => [\n `d${index}`,\n sourceOf(materialize(dependency, owner as ScopeState | undefined)),\n ])\n );\n instance = runtime.value(\n {\n sources,\n build: values => ({\n value: definition.compute(...Object.values(values).map(currentValue)),\n update: next => ({\n kind: 'changed',\n value: definition.compute(...Object.values(next).map(currentValue)),\n }),\n }),\n },\n { isEqual: definition.isEqual }\n );\n break;\n }\n case 'incremental-value': {\n const sources = Object.fromEntries(\n Object.entries(definition.dependencies).map(([key, dependency]) => [\n key,\n sourceOf(materialize(dependency as never, owner as ScopeState | undefined)),\n ])\n );\n instance = runtime.value(\n { sources, build: definition.build as never },\n { isEqual: definition.isEqual as never }\n );\n break;\n }\n case 'incremental-collection': {\n const sources = Object.fromEntries(\n Object.entries(definition.dependencies).map(([key, dependency]) => [\n key,\n sourceOf(materialize(dependency as never, owner as ScopeState | undefined)),\n ])\n );\n instance = runtime.collection({\n sources,\n build: definition.build as never,\n isEqual: definition.isEqual as never,\n name: definition.name,\n });\n break;\n }\n }\n const record: Materialized = write\n ? { node: instance, ...write }\n : { kind: 'projection', node: instance };\n materialized.set(projection, record);\n if (owner) (owner as ScopeState).materialized.push(projection);\n return instance;\n };\n\n const get = <T>(projection: Projection<T, unknown>, requester?: ScopeState): T => {\n const instance = materialize(projection as Projection<unknown, unknown>, requester);\n const current: unknown = instance.current();\n if (instance.kind === 'collection') {\n const record = materialized.get(projection) ?? materialized.get(instance);\n const existing = record?.collection;\n const revision = instance.revision();\n if (existing?.revision === revision) return existing.value as T;\n const value = lazyMapView(current as CollectionRead<string, unknown>);\n if (record) record.collection = { revision, value };\n return value as T;\n }\n if (isMapLike(current)) {\n const record = materialized.get(projection) ?? materialized.get(instance);\n const existing = record?.collection;\n const revision = instance.revision();\n if (existing?.revision === revision) return existing.value as T;\n const value = mapView(mapRead(current));\n if (record) record.collection = { revision, value };\n return value as T;\n }\n return current as T;\n };\n\n const makeReadable = <T, R>(\n projection: Projection<T, unknown>,\n selector?: (value: T) => R,\n equality: (previous: R, next: R) => boolean = Object.is,\n requester?: ScopeState\n ): Readable<T | R> => {\n if (!selector) {\n return Object.freeze({\n current: () => get(projection, requester),\n revision: () => materialize(projection, requester).revision(),\n subscribe: (listener: () => void) =>\n materialize(projection, requester).subscribe(listener as never),\n });\n }\n\n let initialized = false;\n let value!: R;\n let selectedRevision = 0;\n let sourceRevision = -1;\n let selection: Selection = Object.freeze({\n keys: new Set<string>(),\n all: true,\n structure: false,\n });\n let previousCollection: ReadonlyMap<string, unknown> | undefined;\n let unsubscribeSource: Unsubscribe | undefined;\n const listeners = new Set<() => void>();\n\n const updateCollectionSnapshot = () => {\n const current = get(projection, requester);\n previousCollection = isMapLike(current) ? current : undefined;\n };\n\n const evaluate = (): boolean => {\n const tracker: SelectionTracker = { keys: new Set(), all: false, structure: false };\n const previousTracker = activeTracker;\n activeTracker = tracker;\n let source: T;\n let next: R;\n try {\n source = get(projection, requester);\n next = selector(source);\n } finally {\n activeTracker = previousTracker;\n }\n const nextSelection: Selection = Object.freeze({\n keys: new Set(tracker.keys),\n all: tracker.all || (isMapLike(source) && tracker.keys.size === 0),\n structure: tracker.structure,\n });\n const changed = !initialized || !equality(value, next);\n if (changed) {\n if (initialized) selectedRevision++;\n value = next;\n }\n selection = nextSelection;\n initialized = true;\n sourceRevision = materialize(projection, requester).revision();\n updateCollectionSnapshot();\n return changed;\n };\n\n const ensureCurrent = (): R => {\n const revision = materialize(projection, requester).revision();\n if (!initialized || (!unsubscribeSource && sourceRevision !== revision)) evaluate();\n return value;\n };\n\n const onProjectionChange = (incoming?: CollectionChange<string, unknown>) => {\n let change = incoming;\n if (!change && previousCollection) {\n const current = get(projection, requester);\n if (isMapLike(current)) {\n change = mapChange(previousCollection, current);\n previousCollection = current;\n if (!change) {\n sourceRevision = materialize(projection, requester).revision();\n return;\n }\n } else previousCollection = undefined;\n }\n if (!selectionAffects(selection, change)) {\n sourceRevision = materialize(projection, requester).revision();\n updateCollectionSnapshot();\n return;\n }\n const previousSelection = selection;\n const changed = evaluate();\n if (unsubscribeSource && !sameSelection(previousSelection, selection)) {\n unsubscribeSource();\n unsubscribeSource = materialize(projection, requester).subscribe(\n onProjectionChange as never\n );\n }\n if (changed) Array.from(listeners).forEach(listener => listener());\n };\n\n const installSource = () => {\n if (!unsubscribeSource) {\n unsubscribeSource = materialize(projection, requester).subscribe(\n onProjectionChange as never\n );\n }\n };\n\n const handle: Readable<R> = {\n current: ensureCurrent,\n revision: () => {\n ensureCurrent();\n return selectedRevision;\n },\n subscribe: listener => {\n ensureCurrent();\n listeners.add(listener);\n installSource();\n return () => {\n listeners.delete(listener);\n if (!listeners.size && unsubscribeSource) {\n unsubscribeSource();\n unsubscribeSource = undefined;\n }\n };\n },\n };\n return Object.freeze(handle);\n };\n\n function readable<T>(projection: Projection<T, unknown>): Readable<T>;\n function readable<T, R>(\n projection: Projection<T, unknown>,\n selector: (value: T) => R,\n equality?: (previous: R, next: R) => boolean\n ): Readable<R>;\n function readable<T, R>(\n projection: Projection<T, unknown>,\n selector?: (value: T) => R,\n equality?: (previous: R, next: R) => boolean\n ): Readable<T | R> {\n return makeReadable(projection, selector, equality);\n }\n\n const setInput = <T>(target: Input<T>, value: T, requester?: ScopeState): void => {\n materialize(target as Projection<unknown, unknown>, requester);\n const record = materialized.get(target);\n if (record?.kind !== 'value-input') throw new TypeError('Projection is not a value input.');\n record.set(value);\n };\n\n const updateInput = <K extends string, V>(\n target: Input<ReadonlyMap<K, V>, CollectionChange<K, V>>,\n run: (draft: KeyedDraft<K, V>) => void,\n requester?: ScopeState\n ): void => {\n materialize(target as Projection<unknown, unknown>, requester);\n const record = materialized.get(target);\n if (record?.kind !== 'collection-input')\n throw new TypeError('Projection is not a collection input.');\n record.update(run as Parameters<typeof record.update>[0]);\n };\n\n const createScope = (): ProjectionScope => {\n runtime.assertIdle();\n const state: ScopeState = {\n active: true,\n materialized: [],\n subscriptions: new Set(),\n };\n scopes.add(state);\n const assertActive = () => {\n if (!state.active) throw new ProjectionDisposedError();\n };\n const own = <P extends Projection<unknown, unknown>>(projection: P): P => {\n assertActive();\n const definition = definitionOf(projection);\n const dependencies =\n definition.kind === 'derive'\n ? definition.dependencies\n : definition.kind === 'incremental-value' || definition.kind === 'incremental-collection'\n ? Object.values(definition.dependencies)\n : definition.kind === 'incremental-group-output'\n ? Object.values(definition.group.dependencies)\n : [];\n for (const dependency of dependencies) {\n const dependencyOwner = ownerOf(dependency as Projection<unknown, unknown>);\n if (dependencyOwner && dependencyOwner !== state)\n throw new TypeError('A scope cannot depend on another scope.');\n }\n ownDefinition(projection, state);\n return projection;\n };\n const scopedInput: typeof input = Object.assign(\n <T>(initial: T, equality?: (previous: T, next: T) => boolean) =>\n own(input(initial, equality)),\n {\n collection: <K extends string, V>(initial?: ReadonlyMap<K, V>) =>\n own(input.collection(initial)),\n }\n );\n const scopedDerive: typeof derive = (dependencies, compute, equality) =>\n own(derive(dependencies, compute, equality));\n const ownOutputTree = <T>(tree: T): T => {\n if (isProjection(tree)) return own(tree as never) as T;\n if (!tree || typeof tree !== 'object')\n throw new TypeError('Incremental group output tree must be an object.');\n for (const value of Object.values(tree as Record<string, unknown>)) ownOutputTree(value);\n return tree;\n };\n const scopedIncremental: typeof incremental = Object.assign(\n <const D extends readonly Projection<unknown, unknown>[], T>(\n dependencies: D,\n processor: IncrementalValueProcessor<D, T>\n ) => own(incremental(dependencies, processor)),\n {\n collection: <const D extends readonly Projection<unknown, unknown>[], K extends string, V>(\n dependencies: D,\n processor: IncrementalCollectionProcessor<D, K, V>\n ) => own(incremental.collection(dependencies, processor)),\n group: <\n const D extends readonly Projection<unknown, unknown>[],\n const O extends IncrementalGroupOutputTree,\n >(\n dependencies: D,\n defineOutputs: (define: IncrementalGroupDefine) => O,\n processor: IncrementalGroupProcessor<D, O>\n ) => ownOutputTree(incremental.group(dependencies, defineOutputs, processor)),\n }\n );\n function scopeReadable<T>(projection: Projection<T, unknown>): Readable<T>;\n function scopeReadable<T, R>(\n projection: Projection<T, unknown>,\n selector: (value: T) => R,\n equality?: (previous: R, next: R) => boolean\n ): Readable<R>;\n function scopeReadable<T, R>(\n projection: Projection<T, unknown>,\n selector?: (value: T) => R,\n equality?: (previous: R, next: R) => boolean\n ): Readable<T | R> {\n assertActive();\n materialize(projection, state);\n const source = makeReadable(projection, selector, equality, state);\n return Object.freeze({\n current: () => {\n assertActive();\n return source.current();\n },\n revision: () => {\n assertActive();\n return source.revision();\n },\n subscribe: (listener: () => void) => {\n assertActive();\n const stop = source.subscribe(listener);\n let subscribed = true;\n const unsubscribe = () => {\n if (!subscribed) return;\n subscribed = false;\n state.subscriptions.delete(unsubscribe);\n stop();\n };\n state.subscriptions.add(unsubscribe);\n return unsubscribe;\n },\n });\n }\n function scopeBatch<T>(run: () => T): T;\n function scopeBatch<T>(options: { readonly cause?: unknown }, run: () => T): T;\n function scopeBatch<T>(\n optionsOrCallback: { readonly cause?: unknown } | (() => T),\n maybeCallback?: () => T\n ): T {\n assertActive();\n return typeof optionsOrCallback === 'function'\n ? runtime.batch(optionsOrCallback)\n : runtime.batch(optionsOrCallback, maybeCallback!);\n }\n return Object.freeze({\n input: scopedInput,\n derive: scopedDerive,\n incremental: scopedIncremental,\n get: <T>(projection: Projection<T, unknown>) => {\n assertActive();\n return get(projection, state);\n },\n readable: scopeReadable,\n set: <T>(target: Input<T>, value: T) => {\n assertActive();\n setInput(target, value, state);\n },\n update: <K extends string, V>(\n target: Input<ReadonlyMap<K, V>, CollectionChange<K, V>>,\n run: (draft: KeyedDraft<K, V>) => void\n ) => {\n assertActive();\n updateInput(target, run, state);\n },\n batch: scopeBatch,\n dispose: () => {\n if (!state.active) return;\n runtime.assertIdle();\n state.active = false;\n state.subscriptions.forEach(unsubscribe => unsubscribe());\n for (const definition of state.materialized.reverse()) {\n const group = groups.get(definition);\n if (group) {\n runtime.releaseNode(group.nodes[0]);\n groups.delete(definition);\n group.definition.projections.forEach(projection => materialized.delete(projection));\n continue;\n }\n const record = materialized.get(definition);\n if (!record) continue;\n runtime.releaseNode(record.node);\n if (record.kind !== 'projection') runtime.releaseInput(record.source);\n materialized.delete(definition);\n }\n state.materialized.length = 0;\n scopes.delete(state);\n },\n });\n };\n\n const store: ProjectionRuntime = {\n get,\n readable,\n set: setInput,\n update: updateInput,\n batch: runtime.batch,\n scope: createScope,\n dispose: () => {\n if (disposed) return;\n runtime.assertIdle();\n disposed = true;\n for (const scope of scopes) {\n scope.active = false;\n scope.subscriptions.forEach(unsubscribe => unsubscribe());\n scope.subscriptions.clear();\n scope.materialized.length = 0;\n }\n scopes.clear();\n runtime.dispose();\n },\n };\n return Object.freeze(store);\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["AddressIndex","contains","compilePath","DocumentDisposedError","equalValue","copyValue","compiledShape","resolveLocated","resolveValue","memberKey","AddressIndex","contains","sealChanges","createAddressResolver","checkValue","fail","resolveContainer","resolveTreeContainer","resolveValue","copyValue","memberKey","checkKey","invalidValue","fail","checkValue","ParseError","copyValue","DocumentDisposedError","accessOf","DocumentReentrancyError","notify","MutationRejected","TransactionRejected","resolveAddress","read","createAccess","decodeChanges","subscribeRoot","subscribeTargets","compilePath","createNotification","accessOf","readWith","ProjectionDisposedError","createCollectionOutput","collectionChangeBetween","ProjectionError","ProjectionDisposedError","createCollectionOutput","stageCollectionRead","accessOf","attachProjection","mapRead","nodeAt","copyValue","readAddress","equalValue","collectionAccess","snapshot","collectionEntryNode","documentReadableOwner","createScheduler","ProjectionDisposedError","producerOf","projectionRef","collectionView","snapshotCollectionView","mapRead","ownProjection","isProjection","input","derive","incremental"],"sources":["../core/src/impact.ts","../core/src/history.ts","../core/src/mutation/state.ts","../core/src/mutation/recorder.ts","../core/src/mutation/session.ts","../core/src/mutation/operations/replay.ts","../core/src/runtime.ts","../core/src/runtime/readable.ts","../core/src/projection/select.ts","../core/src/projection/value-output.ts","../core/src/projection/processor.ts","../core/src/projection/projection-readable.ts","../core/src/projection/source.ts","../core/src/projection/runtime.ts"],"sourcesContent":["import type {\n CollectionId,\n CollectionPath,\n CollectionSelector,\n ObjectNode,\n ImpactTarget,\n PathPick,\n SchemaPath,\n} from './schema';\nimport { compilePath } from './schema';\nimport type { ChangeSet } from './changes';\nimport { AddressIndex, contains } from './address';\nimport * as target from './impact-target';\nimport { profile } from './profile';\n\nexport type CollectionImpact<K> =\n | { readonly kind: 'reset' }\n | {\n readonly kind: 'incremental';\n readonly added: ReadonlySet<K>;\n readonly removed: ReadonlySet<K>;\n readonly updated: ReadonlySet<K>;\n readonly orderChanged: boolean;\n };\nexport type DocumentImpact<S extends ObjectNode> = {\n readonly kind: 'incremental' | 'reset';\n affects(pick: PathPick<S>): boolean;\n collection<P extends CollectionPath>(\n pick: (path: SchemaPath<S['shape']>) => P\n ): CollectionImpact<CollectionId<P>>;\n};\ntype ImpactQueries = {\n affects(value: ImpactTarget): boolean;\n collection(selector: CollectionSelector): CollectionImpact<string>;\n};\nconst queries = new WeakMap<object, ImpactQueries>();\nexport const affectsTarget = (impact: object, value: ImpactTarget): boolean =>\n queries.get(impact)!.affects(value);\nexport const collectionImpact = <K extends string>(\n impact: object,\n selector: CollectionSelector<K>\n): CollectionImpact<K> => queries.get(impact)!.collection(selector) as CollectionImpact<K>;\nexport const createImpact = <S extends ObjectNode>(\n schema: S,\n changes: ChangeSet\n): DocumentImpact<S> => {\n const reset = changes.changes.some(change => change.kind === 'reset');\n let values: AddressIndex<true> | undefined;\n let orders: AddressIndex<true> | undefined;\n const index = () => {\n if (!values) {\n profile.impact.index();\n values = new AddressIndex();\n orders = new AddressIndex();\n for (const change of changes.changes) {\n if (change.kind === 'members') {\n for (const member of change.members) values.add(change.at, true, member.key);\n if (change.order) orders.add(change.at, true);\n } else if (change.kind === 'tree') values.add(change.at, true);\n }\n }\n return values;\n };\n const cache = new Map<string, CollectionImpact<string>>();\n const implementation: ImpactQueries = {\n affects(value) {\n profile.impact.affects();\n if (!target.belongs(value, schema)) return false;\n if (reset) return true;\n return target.affected(value, index(), orders!);\n },\n collection(selector) {\n if (selector.schema !== schema)\n throw new TypeError('Collection belongs to another root model.');\n const key = JSON.stringify(selector.address),\n cached = cache.get(key);\n if (cached) return cached;\n if (reset) {\n const result = { kind: 'reset' } as const;\n cache.set(key, result);\n return result;\n }\n const at = selector.address;\n const added = new Set<string>(),\n removed = new Set<string>(),\n updated = new Set<string>();\n let orderChanged = false;\n for (const change of changes.changes) {\n if (change.kind === 'reset') continue;\n if (change.kind === 'members') {\n if (change.at.length < at.length && contains(change.at, at)) {\n if (change.members.some(member => member.key === at[change.at.length])) {\n const result = { kind: 'reset' } as const;\n cache.set(key, result);\n return result;\n }\n } else if (contains(at, change.at)) {\n if (change.at.length === at.length) {\n if (change.order) {\n const positions = new Map(change.order.after.map((id, i) => [id, i]));\n let previous = -1;\n for (const id of change.order.before) {\n const position = positions.get(id);\n if (position === undefined) continue;\n if (position < previous) orderChanged = true;\n previous = position;\n }\n }\n for (const member of change.members) {\n if (member.kind === 'added') added.add(member.key);\n else if (member.kind === 'removed') removed.add(member.key);\n else updated.add(member.key);\n }\n } else updated.add(change.at[at.length]);\n }\n continue;\n }\n if (change.kind === 'tree' && contains(change.at, at)) {\n const result = { kind: 'reset' } as const;\n cache.set(key, result);\n return result;\n }\n if (!contains(at, change.at)) continue;\n if (change.at.length === at.length) continue;\n const id = change.at[at.length];\n updated.add(id);\n }\n added.forEach(id => updated.delete(id));\n removed.forEach(id => updated.delete(id));\n const result = { kind: 'incremental', added, removed, updated, orderChanged } as const;\n cache.set(key, result);\n return result;\n },\n };\n const impact: DocumentImpact<S> = Object.freeze({\n kind: reset ? 'reset' : 'incremental',\n affects: (pick: PathPick<S>) =>\n implementation.affects(compilePath<S['shape']>(schema, 'value', pick)),\n collection: <P extends CollectionPath>(pick: (path: SchemaPath<S['shape']>) => P) =>\n implementation.collection(\n compilePath<S['shape']>(schema, 'collection', pick) as CollectionSelector\n ) as CollectionImpact<CollectionId<P>>,\n });\n queries.set(impact, implementation);\n return impact;\n};\n","import type { ChangeSet, ChangeDirection } from './changes';\nimport type {\n HistoryState,\n LocalHistory,\n ObserverError,\n OperationResult,\n} from './runtime/contract';\nimport { DocumentDisposedError } from './runtime/contract';\n\ntype Entry = { readonly batches: ChangeSet[] };\ntype Group = { entry?: Entry; readonly undos: Entry[]; readonly redos: Entry[] };\n\nexport const createHistory = <TCommit>(input: {\n readonly capacity: number;\n readonly apply: (\n changes: readonly ChangeSet[],\n direction: ChangeDirection\n ) => OperationResult<TCommit>;\n readonly revision: () => number;\n readonly assertIdle: () => void;\n readonly notify: (run: () => readonly ObserverError[]) => readonly ObserverError[];\n}) => {\n let undos: Entry[] = [];\n let redos: Entry[] = [];\n const listeners = new Set<() => void>();\n let state: HistoryState = Object.freeze({ undoDepth: 0, redoDepth: 0 });\n let revision = 0;\n let pending = false;\n let disposed = false;\n let group: Group | undefined;\n const unchanged = (): OperationResult<TCommit> => ({\n status: 'unchanged',\n revision: input.revision(),\n });\n const publish = () => {\n if (state.undoDepth === undos.length && state.redoDepth === redos.length) return;\n state = Object.freeze({ undoDepth: undos.length, redoDepth: redos.length });\n revision++;\n pending = true;\n };\n const flush = (): readonly ObserverError[] => {\n if (!pending) return [];\n pending = false;\n const errors: ObserverError[] = [];\n for (const listener of [...listeners]) {\n if (!listeners.has(listener)) continue;\n try {\n listener();\n } catch (error) {\n errors.push({ phase: 'listener', error });\n }\n }\n return errors;\n };\n const clear = () => {\n group = undefined;\n undos.length = redos.length = 0;\n publish();\n };\n const travel = (direction: 'undo' | 'redo' | 'cancel'): OperationResult<TCommit> => {\n input.assertIdle();\n const from = direction === 'redo' ? redos : undos;\n const to = direction === 'redo' ? undos : redos;\n const previousUndos = undos;\n const previousRedos = redos;\n const entry = direction === 'cancel' ? from.at(-1) : from.pop();\n if (!entry) return unchanged();\n if (direction === 'cancel') {\n if (!group || group.entry !== entry)\n throw new Error('History group no longer owns its entry.');\n undos = group.undos;\n redos = group.redos;\n } else to.push(entry);\n let committed = false;\n try {\n const changes = direction === 'redo' ? entry.batches : entry.batches.slice().reverse();\n const result = input.apply(changes, direction === 'redo' ? 'forward' : 'backward');\n committed = result.status !== 'rejected';\n if (committed && direction === 'cancel') group = undefined;\n if (result.status === 'unchanged') {\n publish();\n const errors = input.notify(flush);\n if (errors.length)\n throw new AggregateError(\n errors.map(entry => entry.error),\n 'History listeners failed.'\n );\n }\n return result;\n } finally {\n if (!committed) {\n if (direction === 'cancel') {\n undos = previousUndos;\n redos = previousRedos;\n } else {\n to.pop();\n from.push(entry);\n }\n }\n }\n };\n const api: LocalHistory<TCommit> = {\n current: () => state,\n revision: () => revision,\n subscribe: listener => {\n if (disposed) throw new DocumentDisposedError();\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n undo: () => {\n input.assertIdle();\n group = undefined;\n return travel('undo');\n },\n redo: () => {\n input.assertIdle();\n group = undefined;\n return travel('redo');\n },\n clear: () => {\n input.assertIdle();\n clear();\n const errors = input.notify(flush);\n if (errors.length)\n throw new AggregateError(\n errors.map(entry => entry.error),\n 'History listeners failed.'\n );\n },\n group: () => {\n input.assertIdle();\n if (group) throw new Error('A history group is already active.');\n if (input.capacity <= 0) throw new Error('History is disabled.');\n const scope: Group = { undos: undos.slice(), redos: redos.slice() };\n group = scope;\n return Object.freeze({\n end: () => {\n input.assertIdle();\n if (group === scope) group = undefined;\n },\n cancel: () => {\n input.assertIdle();\n if (group !== scope) return unchanged();\n if (!scope.entry) {\n group = undefined;\n return unchanged();\n }\n const result = travel('cancel');\n if (result.status !== 'rejected') group = undefined;\n return result;\n },\n });\n },\n };\n return {\n api,\n record: (batch: ChangeSet) => {\n if (input.capacity <= 0) return;\n if (group?.entry) group.entry.batches.push(batch);\n else {\n const entry: Entry = { batches: [batch] };\n undos.push(entry);\n if (group) group.entry = entry;\n if (undos.length > input.capacity) undos.shift();\n }\n redos.length = 0;\n publish();\n },\n publish,\n flush,\n endGroup: () => {\n group = undefined;\n },\n invalidate: clear,\n dispose: () => {\n disposed = true;\n listeners.clear();\n clear();\n pending = false;\n },\n };\n};\n","import type { DocumentNode, ObjectNode } from '../schema';\nimport * as anchor from './anchor';\n\nexport type CanonicalState = { schema: ObjectNode; document: unknown };\n\n/** Install validated values, or captured before values during rollback. */\nexport const installMember = (\n parent: Record<string, unknown> | unknown[],\n key: string | number,\n present: boolean,\n value: unknown\n): void => {\n if (Array.isArray(parent)) {\n const index = Number(key);\n if (present) {\n if (index < 0) anchor.insert(parent, parent.length, value);\n else parent[index] = value;\n } else if (index >= 0) anchor.remove(parent, index);\n } else if (!present) delete parent[key];\n else if (Object.hasOwn(parent, key)) parent[key] = value;\n else\n Object.defineProperty(parent, key, {\n value,\n writable: true,\n configurable: true,\n enumerable: true,\n });\n};\n\nexport const orderOf = (node: DocumentNode, value: unknown): string[] => {\n if (node.kind === 'list')\n return anchor.toArray(anchor.indexedKeys(value as unknown[], node.keyOf));\n if (node.kind === 'table') return [...(value as { ids: string[] }).ids];\n throw new Error('Order requires a table or list.');\n};\n\nexport const installOrder = (\n node: DocumentNode,\n value: unknown,\n order: readonly string[]\n): void => {\n if (node.kind === 'list') anchor.install(value as unknown[], node.keyOf, order);\n else if (node.kind === 'table') (value as { ids: string[] }).ids = [...order];\n else throw new Error('Order requires a table or list.');\n};\n","import type { Change, ChangeSet, MemberChange } from '../changes';\nimport type { DocumentAddress, DocumentNode } from '../schema';\nimport {\n AddressIndex,\n contains,\n resolveValue,\n resolveLocated,\n memberKey,\n type ResolvedContainer,\n type ResolvedTreeContainer,\n type CompiledMember,\n compiledShape,\n type FixedLayout,\n} from '../address';\nimport * as anchor from './anchor';\nimport { copyValue, equalValue } from '../schema-value';\nimport type { MutableTree, MutableTreeNode } from './tree';\nimport { profile } from '../profile';\nimport { sealChanges } from './changes';\nimport { installMember, installOrder, orderOf, type CanonicalState } from './state';\ntype MemberFact = { key: string; node: DocumentNode; present: boolean; value: unknown };\ntype MemberGroup = {\n kind: 'members';\n at: DocumentAddress;\n node: DocumentNode;\n parent: Record<string, unknown> | unknown[];\n value: unknown;\n order?: readonly string[];\n} & (\n | { layout: 'fixed'; definitions: FixedLayout['members']; members: (MemberFact | undefined)[] }\n | { layout: 'dynamic'; members: Map<string, MemberFact> | undefined }\n);\ntype TreeFact = {\n kind: 'tree';\n at: DocumentAddress;\n before: string | null;\n nodes: Map<string, MutableTreeNode | undefined>;\n};\ntype Fact = MemberGroup | TreeFact;\ntype RestoreFact =\n | { kind: 'order'; at: DocumentAddress; group: MemberGroup }\n | TreeFact\n | { kind: 'member'; at: DocumentAddress; group: MemberGroup; member: MemberFact };\nconst firstMember = (group: MemberGroup, key: string): MemberFact | undefined => {\n if (group.layout === 'dynamic') return group.members?.get(key);\n const member = group.definitions.get(key);\n return member && group.members[member.slot];\n};\n\nconst forgetMember = (group: MemberGroup, key: string): void => {\n if (group.layout === 'dynamic') group.members?.delete(key);\n else {\n const definition = group.definitions.get(key);\n if (definition) group.members[definition.slot] = undefined;\n }\n};\nconst emptyGroup = (group: MemberGroup): boolean =>\n !group.order && (group.layout === 'fixed' ? !group.members.some(Boolean) : !group.members?.size);\n\nconst copyNode = (node: MutableTreeNode): MutableTreeNode => ({\n ...node,\n children: [...node.children],\n});\nconst transition = (\n node: DocumentNode,\n key: string,\n beforePresent: boolean,\n before: unknown,\n afterPresent: boolean,\n after: unknown\n): MemberChange | undefined => {\n if (beforePresent === afterPresent && (!beforePresent || Object.is(before, after))) return;\n if (node.kind !== 'field' && beforePresent === afterPresent && equalValue(node, before, after))\n return;\n const value = afterPresent ? (node.kind === 'field' ? after : copyValue(node, after)) : undefined;\n profile.recorder('transitions');\n return !beforePresent\n ? { key, kind: 'added', after: value }\n : !afterPresent\n ? { key, kind: 'removed', before }\n : { key, kind: 'updated', before, after: value };\n};\n\nconst publishMembers = (\n changes: Change[],\n at: DocumentAddress,\n members: MemberChange[],\n order?: { before: readonly string[]; after: readonly string[] }\n): void => {\n if (!members.length && !order) return;\n for (let i = 1; i < members.length; i++)\n if (members[i - 1].key > members[i].key) {\n members.sort((a, b) => lexical(a.key, b.key));\n break;\n }\n changes.push(order ? { kind: 'members', at, members, order } : { kind: 'members', at, members });\n};\n\n/** Diff only the captured subtree; this algorithm has no recorder or session state. */\nconst diffMember = (\n changes: Change[],\n members: MemberChange[],\n node: DocumentNode,\n at: DocumentAddress,\n key: string,\n beforePresent: boolean,\n before: unknown,\n afterPresent: boolean,\n after: unknown\n): void => {\n if (beforePresent === afterPresent && (!beforePresent || Object.is(before, after))) return;\n if (beforePresent && afterPresent && before !== undefined && after !== undefined) {\n const sameShape =\n node.kind === 'object' ||\n (node.kind === 'variant' &&\n (before as Record<string, unknown>)[node.tag] ===\n (after as Record<string, unknown>)[node.tag]);\n if (sameShape) {\n const left = before as Record<string, unknown>,\n right = after as typeof left;\n const childAt = at.concat(key);\n const children: MemberChange[] = [];\n for (const [child, definition] of compiledShape(node, before)!.members)\n diffMember(\n changes,\n children,\n definition.node,\n childAt,\n child,\n Object.hasOwn(left, child),\n left[child],\n Object.hasOwn(right, child),\n right[child]\n );\n publishMembers(changes, childAt, children);\n return;\n }\n if (node.kind === 'map' || node.kind === 'table') {\n const a = before as Record<string, unknown>,\n b = after as typeof a;\n const left = (node.kind === 'table' ? a.byId : a) as Record<string, unknown>;\n const right = (node.kind === 'table' ? b.byId : b) as typeof left;\n const childAt = at.concat(key);\n const children: MemberChange[] = [];\n for (const id of Object.keys(left))\n diffMember(\n changes,\n children,\n node.value,\n childAt,\n id,\n true,\n left[id],\n Object.hasOwn(right, id),\n right[id]\n );\n for (const id of Object.keys(right))\n if (!Object.hasOwn(left, id))\n diffMember(changes, children, node.value, childAt, id, false, undefined, true, right[id]);\n let order: { before: readonly string[]; after: readonly string[] } | undefined;\n if (node.kind === 'table' && !anchor.equal(a.ids as string[], b.ids as string[])) {\n profile.recorder('publishedOrderItems', (b.ids as string[]).length);\n order = { before: a.ids as string[], after: [...(b.ids as string[])] };\n }\n publishMembers(changes, childAt, children, order);\n return;\n }\n }\n const member = transition(node, key, beforePresent, before, afterPresent, after);\n if (member) members.push(member);\n};\nconst restore = (fact: RestoreFact, schema: DocumentNode, root: unknown, skip = 0): unknown => {\n const at = skip ? fact.at.slice(skip) : fact.at;\n if (fact.kind === 'member') {\n const member = fact.member;\n const value = member.present ? copyValue(member.node, member.value) : undefined;\n if (!at.length) return value;\n const location = resolveLocated(schema, root, at);\n if (!location) throw new Error('Cannot restore an unresolved member.');\n installMember(location.parent, location.key, member.present, value);\n return root;\n }\n const location = resolveValue(schema, root, at);\n if (!location) throw new Error('Cannot restore an unresolved subtree.');\n if (fact.kind === 'order') installOrder(location.node, location.value, fact.group.order!);\n else {\n const tree = location.value as MutableTree;\n if (fact.before === null) delete tree.rootId;\n else tree.rootId = fact.before;\n for (const [id, node] of fact.nodes)\n installMember(tree.nodes, id, node !== undefined, node && copyNode(node));\n }\n return root;\n};\n\nconst reconstructBefore = (\n node: DocumentNode,\n current: unknown,\n records: readonly RestoreFact[],\n offset: number\n): unknown => {\n let before = copyValue(node, current);\n for (let i = records.length - 1; i >= 0; i--)\n if (records[i].kind !== 'order') before = restore(records[i], node, before, offset);\n for (const record of records)\n if (record.kind === 'order') before = restore(record, node, before, offset);\n return before;\n};\n\nconst sealMembers = (fact: MemberGroup, changes: Change[]): void => {\n const members: MemberChange[] = [];\n for (const member of fact.members?.values() ?? []) {\n if (!member) continue;\n const key = memberKey(fact, member.key);\n const present = Object.hasOwn(fact.parent, key);\n const value = (fact.parent as Record<string | number, unknown>)[key];\n if (member.node.kind === 'field') {\n const change = transition(\n member.node,\n member.key,\n member.present,\n member.value,\n present,\n value\n );\n if (change) members.push(change);\n } else\n diffMember(\n changes,\n members,\n member.node,\n fact.at,\n member.key,\n member.present,\n member.value,\n present,\n value\n );\n }\n let order: { before: readonly string[]; after: readonly string[] } | undefined;\n if (fact.order) {\n const current =\n fact.node.kind === 'list'\n ? anchor.indexedKeys(fact.value as unknown[], fact.node.keyOf)\n : (fact.value as { ids: string[] }).ids;\n if (!anchor.equal(fact.order, current)) {\n const after = orderOf(fact.node, fact.value);\n profile.recorder('publishedOrderItems', after.length);\n order = { before: fact.order, after };\n }\n }\n publishMembers(changes, fact.at, members, order);\n};\n\nconst sealTree = (fact: TreeFact, state: CanonicalState, changes: Change[]): void => {\n const location = resolveValue(state.schema, state.document, fact.at);\n const tree = location?.value as MutableTree;\n const node = location?.node;\n if (node?.kind !== 'tree') throw new Error('Tree schema disappeared before sealing.');\n const nodes: Extract<Change, { kind: 'tree' }>['nodes'][number][] = [];\n for (const [id, before] of fact.nodes) {\n const after = Object.hasOwn(tree.nodes, id) ? tree.nodes[id] : undefined;\n if (!before && !after) continue;\n if (\n before &&\n after &&\n before.parentId === after.parentId &&\n anchor.equal(before.children, after.children) &&\n Object.hasOwn(before, 'value') === Object.hasOwn(after, 'value') &&\n equalValue(node.value, before.value, after.value)\n )\n continue;\n nodes.push(\n !before\n ? { id, kind: 'added', after: copyNode(after!) }\n : !after\n ? { id, kind: 'removed', before }\n : { id, kind: 'updated', before, after: copyNode(after) }\n );\n }\n const after = tree.rootId ?? null;\n if (nodes.length || fact.before !== after)\n changes.push({\n kind: 'tree',\n at: fact.at,\n before: fact.before,\n after,\n nodes: nodes.sort((a, b) => lexical(a.id, b.id)),\n });\n};\n\n/** One first-touch record per owning container, never a per-write operation log. */\nexport class ChangeRecorder {\n private readonly facts = new Set<Fact>();\n private groups = new WeakMap<object, MemberGroup>();\n private index?: AddressIndex<Fact>;\n private indexedGroups = false;\n private resetBefore?: { value: unknown };\n constructor(private readonly state: CanonicalState) {}\n private indexGroups(): AddressIndex<Fact> {\n const index = (this.index ??= new AddressIndex());\n if (!this.indexedGroups) {\n this.indexedGroups = true;\n for (const fact of this.facts) {\n if (fact.kind === 'members') {\n index.add(fact.at, fact);\n profile.recorder('indexedGroups');\n }\n }\n }\n return index;\n }\n private covered(at: DocumentAddress): boolean {\n return (\n this.resetBefore !== undefined ||\n (this.indexedGroups &&\n this.index!.someAncestor(\n at,\n fact =>\n fact.kind === 'members' &&\n fact.at.length < at.length &&\n firstMember(fact, at[fact.at.length]) !== undefined\n ))\n );\n }\n private absorb(\n at: DocumentAddress,\n node: DocumentNode,\n value: unknown,\n present: boolean\n ): unknown {\n const index = this.indexGroups();\n const children: RestoreFact[] = [];\n index.query(fact => {\n if (fact.kind === 'members') {\n // An ancestor group can contribute only its one directly addressed member.\n if (fact.at.length < at.length) {\n if (fact.at.length + 1 === at.length) {\n const member = firstMember(fact, at[fact.at.length]);\n if (member) children.push({ kind: 'member', at, group: fact, member });\n }\n return;\n }\n if (fact.order && contains(at, fact.at))\n children.push({ kind: 'order', at: fact.at, group: fact });\n for (const member of fact.members?.values() ?? []) {\n if (!member) continue;\n const memberAt = fact.at.concat(member.key);\n if (contains(at, memberAt))\n children.push({ kind: 'member', at: memberAt, group: fact, member });\n }\n } else if (contains(at, fact.at)) children.push(fact);\n })(at);\n if (present) value = reconstructBefore(node, value, children, at.length);\n this.releaseCovered(children);\n return value;\n }\n private releaseCovered(children: readonly RestoreFact[]): void {\n let changedGroups: Set<MemberGroup> | undefined;\n for (const child of children) {\n profile.recorder('absorbed');\n if (child.kind === 'member') {\n const { group, member } = child;\n forgetMember(group, member.key);\n (changedGroups ??= new Set()).add(group);\n } else if (child.kind === 'order') {\n child.group.order = undefined;\n (changedGroups ??= new Set()).add(child.group);\n } else {\n this.unregister(child);\n }\n }\n for (const group of changedGroups ?? []) {\n if (emptyGroup(group)) {\n this.unregister(group);\n }\n }\n }\n private register(fact: Fact): void {\n this.facts.add(fact);\n if (fact.kind === 'members') {\n this.groups.set(fact.parent, fact);\n profile.recorder('groups');\n if (!this.indexedGroups) return;\n profile.recorder('indexedGroups');\n }\n (this.index ??= new AddressIndex()).add(fact.at, fact);\n }\n private unregister(fact: Fact): void {\n this.facts.delete(fact);\n this.index?.delete(fact.at, fact);\n if (fact.kind === 'members') this.groups.delete(fact.parent);\n }\n member(\n container: ResolvedContainer,\n key: string,\n definition: CompiledMember,\n physicalKey: string | number\n ): void {\n if (this.resetBefore) return;\n const { node } = definition;\n let group = this.groups.get(container.parent);\n if (group?.layout === 'dynamic' && group.members?.has(key)) return;\n if (group?.layout === 'fixed' && definition.kind === 'fixed' && group.members[definition.slot])\n return;\n const at = this.indexedGroups || node.kind !== 'field' ? container.at.concat(key) : undefined;\n if (at && this.covered(at)) return;\n const present = Object.hasOwn(container.parent, physicalKey);\n let value = (container.parent as Record<string | number, unknown>)[physicalKey];\n if (node.kind !== 'field') value = this.absorb(at!, node, value, present);\n if (!group || !this.facts.has(group)) {\n group = this.createGroup(container);\n }\n const member: MemberFact = { key, node, present, value };\n if (group.layout === 'dynamic') (group.members ??= new Map()).set(key, member);\n else if (definition.kind === 'fixed') group.members[definition.slot] = member;\n else throw new Error('A fixed member group requires a fixed schema member.');\n profile.recorder('facts');\n }\n reset(): void {\n if (this.resetBefore) return;\n const value = this.absorb([], this.state.schema, this.state.document, true);\n this.resetBefore = { value };\n this.groups = new WeakMap();\n profile.recorder('facts');\n }\n private createGroup(container: ResolvedContainer): MemberGroup {\n const group: MemberGroup =\n container.layout.kind === 'fixed'\n ? {\n kind: 'members',\n at: container.at,\n node: container.node,\n parent: container.parent,\n value: container.value,\n layout: 'fixed',\n definitions: container.layout.members,\n members: new Array<MemberFact | undefined>(container.layout.members.size),\n }\n : {\n kind: 'members',\n at: container.at,\n node: container.node,\n parent: container.parent,\n value: container.value,\n layout: 'dynamic',\n members: undefined,\n };\n this.register(group);\n return group;\n }\n order(container: ResolvedContainer): void {\n profile.recorder('orderCaptures');\n let group = this.groups.get(container.parent);\n if (group?.order || this.covered(container.at)) return;\n group ??= this.createGroup(container);\n group.order = orderOf(container.node, container.value);\n profile.recorder('orderSnapshots');\n profile.recorder('orderItems', group.order.length);\n }\n tree(container: ResolvedTreeContainer, id?: string): void {\n const { at, value: tree } = container;\n if (this.covered(at)) return;\n const index = (this.index ??= new AddressIndex());\n let fact: TreeFact | undefined;\n for (const item of index.exact(at) ?? []) if (item.kind === 'tree') fact = item;\n if (!fact) {\n fact = { kind: 'tree', at, before: tree.rootId ?? null, nodes: new Map() };\n this.register(fact);\n }\n if (id !== undefined && !fact.nodes.has(id)) {\n profile.recorder('treeNodes');\n fact.nodes.set(id, Object.hasOwn(tree.nodes, id) ? copyNode(tree.nodes[id]) : undefined);\n }\n }\n rollback(): void {\n if (this.resetBefore) {\n this.state.document = this.resetBefore.value;\n return;\n }\n const facts = [...this.facts];\n for (let i = facts.length - 1; i >= 0; i--) {\n const fact = facts[i];\n if (fact.kind === 'members') {\n for (const member of fact.members?.values() ?? []) {\n if (!member) continue;\n installMember(\n fact.parent,\n memberKey(fact, member.key),\n member.present,\n member.present ? copyValue(member.node, member.value) : undefined\n );\n }\n } else if (fact.kind === 'tree') restore(fact, this.state.schema, this.state.document);\n }\n for (const fact of facts)\n if (fact.kind === 'members' && fact.order) installOrder(fact.node, fact.value, fact.order);\n }\n seal(): ChangeSet {\n if (this.resetBefore) {\n if (equalValue(this.state.schema, this.resetBefore.value, this.state.document))\n return sealChanges([]);\n profile.recorder('sealed');\n return sealChanges([\n {\n kind: 'reset',\n before: this.resetBefore.value,\n after: copyValue(this.state.schema, this.state.document),\n },\n ]);\n }\n const changes: Change[] = [];\n for (const fact of this.facts) {\n if (fact.kind === 'members') sealMembers(fact, changes);\n else sealTree(fact, this.state, changes);\n }\n const result = sealChanges(changes);\n profile.recorder('sealed', result.changes.length);\n return result;\n }\n}\nconst lexical = (a: string, b: string): number => (a < b ? -1 : a === b ? 0 : 1);\n","import type { ChangeSet } from '../changes';\nimport type { DocumentAddress, DocumentNode } from '../schema';\nimport {\n createAddressResolver,\n resolveContainer,\n resolveTreeContainer,\n resolveValue,\n memberKey,\n type CompiledMember,\n type ResolvedContainer,\n type ResolvedTreeContainer,\n} from '../address';\nimport { checkKey, checkValue, copyValue } from '../schema-value';\nimport { ChangeRecorder } from './recorder';\nimport { installMember, type CanonicalState } from './state';\nimport { fail, invalidValue } from './issue';\n\nexport class MutationSession {\n readonly identity = {};\n generation = 0;\n readonly recorder: ChangeRecorder;\n private resolver;\n private resolvedRoot: unknown;\n constructor(readonly state: CanonicalState) {\n this.recorder = new ChangeRecorder(state);\n this.resolver = createAddressResolver(state.schema, state.document);\n this.resolvedRoot = state.document;\n }\n validate(node: DocumentNode, value: unknown, at: DocumentAddress): void {\n const issue = checkValue(node, value, at);\n if (issue) invalidValue(issue);\n }\n resolveContainer(at: DocumentAddress): ResolvedContainer {\n return (\n this.resolver.container(this.identity, this.generation, at) ??\n fail(at, 'invalid-address', 'Container does not exist.')\n );\n }\n /** Bind access-resolved canonical facts without walking the address again. */\n bind(at: DocumentAddress, node: DocumentNode | undefined, value: unknown): ResolvedContainer {\n return (\n resolveContainer(this.identity, this.generation, at, node, value) ??\n fail(at, 'invalid-address', 'Container does not exist.')\n );\n }\n bindTree(\n at: DocumentAddress,\n node: DocumentNode | undefined,\n value: unknown\n ): ResolvedTreeContainer {\n return (\n resolveTreeContainer(this.identity, this.generation, at, node, value) ??\n fail(at, 'invalid-tree', 'Expected a tree.')\n );\n }\n resolveTree(at: DocumentAddress): ResolvedTreeContainer {\n const location = resolveValue(this.state.schema, this.state.document, at);\n return this.bindTree(at, location?.node, location?.value);\n }\n replace(at: DocumentAddress, value: unknown): void {\n if (!at.length) {\n this.validate(this.state.schema, value, at);\n if (Object.is(this.state.document, value)) return;\n this.recorder.reset();\n this.state.document = copyValue(this.state.schema, value);\n this.invalidate();\n return;\n }\n this.writeMember(this.resolveContainer(at.slice(0, -1)), at[at.length - 1], value, 'set');\n }\n assignMember(container: ResolvedContainer, key: string, value: unknown): void {\n container = this.refresh(container);\n const member = this.definition(container, key);\n if (\n container.layout.kind === 'fixed' &&\n member.node.kind !== 'field' &&\n member.node.kind !== 'variant' &&\n !member.node.optional\n )\n return fail(\n container.at.concat(key),\n 'invalid-value',\n 'Replace fields, variants, or collection entries; edit object members individually.'\n );\n this.writeLocatedMember(container, key, member, memberKey(container, key), value, 'set');\n }\n removeMember(container: ResolvedContainer, key: string): void {\n this.writeMember(this.refresh(container), key, undefined, 'remove');\n }\n private refresh(container: ResolvedContainer): ResolvedContainer {\n if (container.owner !== this.identity)\n return fail(\n container.at,\n 'invalid-address',\n 'Container belongs to another mutation session.'\n );\n return container.generation === this.generation\n ? container\n : this.resolveContainer(container.at);\n }\n definition(container: ResolvedContainer, key: string): CompiledMember {\n const layout = container.layout;\n const member = layout.kind === 'dynamic' ? layout.entry : layout.members.get(key);\n if (!member)\n return fail(container.at.concat(key), 'invalid-address', 'Address does not exist.');\n return member;\n }\n /** Consume a current command-local container; bulk writes retain its storage. */\n writeMember(\n container: ResolvedContainer,\n key: string,\n value: unknown,\n operation: 'set' | 'remove',\n physicalKey = memberKey(container, key)\n ): boolean {\n const member = this.definition(container, key);\n return this.writeLocatedMember(container, key, member, physicalKey, value, operation);\n }\n /** Location and definition are resolved once by the calling operation. */\n private writeLocatedMember(\n container: ResolvedContainer,\n key: string,\n member: CompiledMember,\n physicalKey: string | number,\n value: unknown,\n operation: 'set' | 'remove'\n ): boolean {\n const parentNode = container.node;\n const node = member.node;\n const present = operation === 'set';\n if (parentNode.kind === 'variant' && parentNode.tag === key)\n return fail(\n container.at.concat(key),\n 'invalid-value',\n 'Variant discriminants are read-only.'\n );\n const entry = container.layout.kind === 'dynamic';\n if (!present && !node.optional && !entry)\n return fail(\n container.at.concat(key),\n 'required-field',\n 'A required value cannot be removed.'\n );\n const existed = Object.hasOwn(container.parent, physicalKey);\n const previous = (container.parent as Record<string | number, unknown>)[physicalKey];\n if (existed === present && (!present || Object.is(previous, value))) return false;\n if (parentNode.kind === 'map' || parentNode.kind === 'table') {\n const issue = checkKey(parentNode.key, key, []);\n if (issue)\n return fail(container.at.concat(key, ...issue.address), 'invalid-key', issue.message);\n }\n if (present) {\n if (node.kind === 'field') {\n const issue = checkValue(node, value, []);\n if (issue) return invalidValue(issue, container.at.concat(key, ...issue.address));\n } else this.validate(node, value, container.at.concat(key));\n if (parentNode.kind === 'list' && parentNode.keyOf(value) !== key)\n return fail(\n container.at.concat(key),\n 'invalid-list-key',\n 'Replacing an item must retain its addressed key.'\n );\n }\n const membershipChanged = entry && existed !== present;\n if (membershipChanged && (parentNode.kind === 'list' || parentNode.kind === 'table'))\n this.recorder.order(container);\n this.recorder.member(container, key, member, physicalKey);\n const next = present ? (node.kind === 'field' ? value : copyValue(node, value)) : undefined;\n installMember(container.parent, physicalKey, present, next);\n if (node.kind !== 'field' || membershipChanged) this.invalidate();\n return membershipChanged;\n }\n invalidate(): void {\n this.generation++;\n if (this.resolvedRoot !== this.state.document) {\n this.resolvedRoot = this.state.document;\n this.resolver = createAddressResolver(this.state.schema, this.state.document);\n } else this.resolver.invalidate();\n }\n finish(): ChangeSet {\n return this.recorder.seal();\n }\n rollback(): void {\n this.recorder.rollback();\n this.invalidate();\n }\n}\n","import type { ChangeDirection, ChangeSet } from '../../changes';\nimport type { MutationSession } from '../session';\nimport { installOrder, installMember, orderOf } from '../state';\nimport * as anchor from '../anchor';\nimport { fail } from '../issue';\nexport function apply(\n session: MutationSession,\n changes: ChangeSet,\n direction: ChangeDirection\n): void {\n const side = direction === 'forward' ? 'after' : 'before';\n for (const change of changes.changes) {\n if (change.kind === 'reset') {\n session.replace([], change[side]);\n } else if (change.kind === 'members') {\n const container = session.resolveContainer(change.at);\n const { node, value: current } = container;\n if (change.order) {\n if (node.kind !== 'table' && node.kind !== 'list')\n return fail(change.at, 'invalid-changes', 'Order requires an ordered container.');\n session.recorder.order(container);\n }\n let membershipChanged = false;\n for (const member of change.members) {\n const present = side === 'after' ? member.kind !== 'removed' : member.kind !== 'added';\n const value =\n side === 'after'\n ? member.kind !== 'removed'\n ? member.after\n : undefined\n : member.kind !== 'added'\n ? member.before\n : undefined;\n membershipChanged =\n session.writeMember(container, member.key, value, present ? 'set' : 'remove') ||\n membershipChanged;\n }\n if (change.order) {\n const keys = node.kind === 'table' ? Object.keys(container.parent) : orderOf(node, current);\n if (!anchor.matches(change.order[side], keys))\n return fail(\n change.at,\n 'invalid-changes',\n 'Order must contain exactly the resulting keys.'\n );\n installOrder(node, current, change.order[side]);\n session.invalidate();\n } else if (membershipChanged && node.kind === 'table') {\n const ids = (current as { ids: string[] }).ids;\n if (!anchor.matches(ids, Object.keys(container.parent)))\n return fail(\n change.at,\n 'invalid-changes',\n 'Table membership changes require a matching order.'\n );\n }\n } else {\n const container = session.resolveTree(change.at);\n const { value: current, node } = container;\n session.recorder.tree(container);\n for (const item of change.nodes) session.recorder.tree(container, item.id);\n const root = change[side];\n if (root === null) delete current.rootId;\n else current.rootId = root;\n for (const item of change.nodes) {\n const next =\n side === 'after'\n ? item.kind !== 'removed'\n ? item.after\n : undefined\n : item.kind !== 'added'\n ? item.before\n : undefined;\n installMember(\n current.nodes,\n item.id,\n next !== undefined,\n next && { ...next, children: [...next.children] }\n );\n }\n session.validate(node, current, change.at);\n session.invalidate();\n }\n }\n}\n","import type { ObjectNode, Infer, PathPick } from './schema';\nimport { compilePath } from './schema';\nimport { contains, debugKey, overlaps, read, resolveAddress } from './address';\nimport { createImpact } from './impact';\nimport { createHistory } from './history';\nimport { createAccess, type Draft } from './access/scope';\nimport { MutationSession } from './mutation/session';\nimport * as replay from './mutation/operations/replay';\nimport type { RuntimeWriteIntent } from './runtime/driver';\nimport { decodeChanges } from './mutation/changes';\nimport { MutationRejected, fail } from './mutation/issue';\nimport type { ChangeSet } from './changes';\nimport { checkValue, copyValue, ParseError } from './schema-value';\nimport {\n DocumentDisposedError,\n DocumentReentrancyError,\n TransactionRejected,\n} from './runtime/contract';\nimport type {\n CommitListener,\n CommitSource,\n DocumentCommit,\n DocumentRuntime,\n OperationResult,\n TransactionResult,\n} from './runtime/contract';\nimport { bindRuntimeAccess, accessOf } from './runtime/access';\nimport { assertRuntimeWritable, bindRuntimeDriver, disposeRuntimeDriver } from './runtime/driver';\nimport {\n bindDocumentReadable,\n createNotification,\n disposeNotification,\n notify,\n subscribeRoot,\n subscribeTargets,\n type RuntimeNotification,\n} from './runtime/notification';\n\nexport const createDocument = <S extends ObjectNode>(input: {\n readonly schema: S;\n readonly initial: Infer<S>;\n readonly history?: { readonly capacity?: number } | false;\n}): DocumentRuntime<S> => {\n if (input.schema.kind !== 'object')\n throw new TypeError('Document schema must be a root object node.');\n const invalid = checkValue(input.schema, input.initial);\n if (invalid) throw new ParseError(invalid);\n const state = {\n schema: input.schema,\n document: copyValue(input.schema, input.initial) as Infer<S>,\n disposed: false,\n };\n let revision = 0,\n busy = false;\n let runtime!: DocumentRuntime<S>, notification!: RuntimeNotification<S>;\n const idle = () => {\n if (state.disposed) throw new DocumentDisposedError();\n if (busy || accessOf(runtime).projectionLocks) throw new DocumentReentrancyError();\n };\n const writable = (intent: Parameters<typeof assertRuntimeWritable>[1]) => {\n idle();\n assertRuntimeWritable(runtime, intent);\n };\n const history = createHistory<DocumentCommit<S>>({\n capacity: input.history === false ? 0 : Math.max(0, input.history?.capacity ?? 100),\n revision: () => revision,\n apply: (changes, direction) =>\n mutate({ kind: 'apply', source: 'history' }, false, session => {\n for (const change of changes) replay.apply(session, change, direction);\n }),\n assertIdle: idle,\n notify: run => {\n busy = true;\n try {\n return run();\n } finally {\n busy = false;\n }\n },\n });\n const publish = (\n changes: ChangeSet,\n source: CommitSource,\n recordHistory: boolean\n ): Extract<OperationResult<DocumentCommit<S>>, { status: 'committed' }> => {\n const commit: DocumentCommit<S> = {\n revision: ++revision,\n source,\n changes,\n impact: createImpact(input.schema, changes),\n };\n if (source === 'remote') history.invalidate();\n else if (recordHistory && (source === 'local' || source === 'system')) history.record(changes);\n else if (source === 'history') history.publish();\n else history.endGroup();\n return {\n status: 'committed',\n commit,\n observerErrors: notify(notification, commit, history.flush),\n };\n };\n function mutate(\n intent: Extract<RuntimeWriteIntent, { kind: 'update' }>,\n recordHistory: boolean,\n execute: (session: MutationSession) => void\n ):\n | OperationResult<DocumentCommit<S>>\n | Extract<TransactionResult<never, never>, { status: 'rejected' }>;\n function mutate(\n intent: Exclude<RuntimeWriteIntent, { kind: 'update' }>,\n recordHistory: boolean,\n execute: (session: MutationSession) => void\n ): OperationResult<DocumentCommit<S>>;\n function mutate(\n intent: RuntimeWriteIntent,\n recordHistory: boolean,\n execute: (session: MutationSession) => void\n ):\n | OperationResult<DocumentCommit<S>>\n | Extract<TransactionResult<never, never>, { status: 'rejected' }> {\n writable(intent);\n busy = true;\n try {\n const session = new MutationSession(state);\n let changes: ChangeSet;\n try {\n execute(session);\n changes = session.finish();\n } catch (error) {\n session.rollback();\n if (error instanceof MutationRejected)\n return { status: 'rejected', issues: [error.issue], revision };\n if (intent.kind === 'update' && error instanceof TransactionRejected)\n return { status: 'rejected', issues: error.issues, revision };\n throw error;\n }\n if (!changes.changes.length) return { status: 'unchanged', revision };\n // Publication is outside the rollback boundary: observers see accepted state.\n return publish(changes, intent.source, recordHistory);\n } finally {\n busy = false;\n }\n }\n runtime = {\n schema: input.schema,\n address: {\n resolve: at => resolveAddress(input.schema, at, state.document),\n read: at => read(state.document, at, input.schema),\n contains,\n overlaps,\n debugKey,\n },\n revision: () => revision,\n update: <V>(\n run: (draft: Draft<S>) => V,\n options?: { source?: Extract<CommitSource, 'local' | 'system'>; history?: boolean }\n ): TransactionResult<V, DocumentCommit<S>> => {\n const source = options?.source ?? 'local';\n let value!: V;\n const result = mutate({ kind: 'update', source }, options?.history ?? true, session => {\n // Draft is a trusted borrowed view. It must not escape this synchronous callback.\n const draft = createAccess({\n state,\n session,\n }) as Draft<S>;\n value = run(draft);\n if (\n value !== null &&\n (typeof value === 'object' || typeof value === 'function') &&\n typeof (value as { then?: unknown }).then === 'function'\n )\n throw new TypeError('Document updates must be synchronous.');\n });\n return result.status === 'rejected' ? result : { ...result, value };\n },\n apply: (inputChanges, options) =>\n mutate(\n { kind: 'apply', source: options?.source ?? 'local' },\n options?.history ?? true,\n session => {\n if (!options || options.expectedRevision !== revision)\n fail([], 'baseline-mismatch', 'apply requires the current expectedRevision.');\n replay.apply(session, decodeChanges(inputChanges), 'forward');\n }\n ),\n replace: (value, options) => {\n const source = options?.source ?? 'system';\n return mutate({ kind: 'replace', source }, source !== 'remote', session =>\n session.replace([], value)\n );\n },\n snapshot: () => {\n if (state.disposed) throw new DocumentDisposedError();\n return copyValue(input.schema, state.document) as Infer<S>;\n },\n subscribe: ((\n pick: PathPick<S> | readonly PathPick<S>[] | CommitListener<S>,\n listener?: CommitListener<S>\n ) => {\n if (state.disposed) throw new DocumentDisposedError();\n if (!listener) return subscribeRoot(notification, pick as CommitListener<S>);\n const picks: readonly PathPick<S>[] = Array.isArray(pick) ? pick : [pick as PathPick<S>];\n if (!picks.length) throw new TypeError('Expected at least one subscription path.');\n return subscribeTargets(\n notification,\n picks.map(p => compilePath<S['shape']>(input.schema, 'value', p)),\n listener\n );\n }) as DocumentRuntime<S>['subscribe'],\n history: history.api,\n dispose: () => {\n if (state.disposed) return;\n idle();\n state.disposed = true;\n try {\n disposeNotification(notification);\n } finally {\n history.dispose();\n disposeRuntimeDriver(runtime);\n }\n },\n };\n bindRuntimeAccess(runtime, state);\n bindRuntimeDriver(runtime);\n notification = createNotification(runtime);\n bindDocumentReadable(history.api, runtime);\n return runtime;\n};\n","import type { ObjectNode } from '../schema';\nimport type { DocumentReadable, DocumentRuntime } from './contract';\nimport { accessOf, bindRuntimeAccess } from './access';\nimport { shareNotification } from './notification';\n\n// A readable capability keeps the canonical runtime behind an explicit\n// mutation funnel while remaining fully compatible with selectors, views, and\n// framework subscriptions.\nexport const asReadable = <TSchema extends ObjectNode>(\n runtime: DocumentRuntime<TSchema>\n): DocumentReadable<TSchema> => {\n const readable: DocumentReadable<TSchema> = {\n address: runtime.address,\n revision: runtime.revision,\n subscribe: runtime.subscribe,\n };\n bindRuntimeAccess(readable, accessOf(runtime));\n shareNotification(runtime, readable);\n return Object.freeze(readable);\n};\n","import type { ObjectNode } from '../schema';\nimport type { Read } from '../access/scope';\nimport type { DocumentReadable } from '../runtime/contract';\nimport { readWith } from '../runtime/access';\n\nexport type DocumentSelector<TSchema extends ObjectNode, TResult> = (\n read: Read<TSchema>\n) => TResult;\n\nexport const read = <TSchema extends ObjectNode, TResult>(\n runtime: DocumentReadable<TSchema>,\n selector: DocumentSelector<TSchema, TResult>\n): TResult => readWith(runtime, selector);\n","import { profile } from '../profile';\nimport type { ValueContext } from './contract';\nimport { assertScope } from './scheduler';\n\nconst unset = Symbol('projection-value-unset');\n\nexport type ValueOutputEvaluation<T> = {\n readonly previous: T | undefined;\n readonly next: () => T | undefined;\n readonly output: { set(value: T): void };\n};\n\nexport type ValueOutputState<T> = {\n begin(active: () => boolean, initialize: boolean): ValueOutputEvaluation<T>;\n seal(reset: boolean, isEqual: (previous: T, next: T) => boolean): boolean;\n context(active: () => boolean, cause: unknown): ValueContext<T>;\n current(check: () => void): T;\n revision(): number;\n reset(): boolean;\n publish(): void;\n emit(call: (listener: () => void) => void): void;\n clear(): void;\n release(): void;\n subscribe(listener: () => void): void;\n unsubscribe(listener: () => void): void;\n};\n\n/** Owns staged and published state for one scalar Projection output. */\nexport const createValueOutput = <T>(): ValueOutputState<T> => {\n let value!: T;\n let staged: T | typeof unset = unset;\n let next!: T;\n let initialized = false;\n let revision = 0;\n let changed = false;\n let reset = false;\n const listeners = new Set<() => void>();\n\n const begin = (active: () => boolean, initialize: boolean): ValueOutputEvaluation<T> => {\n staged = unset;\n next = value;\n changed = false;\n reset = initialize;\n return {\n previous: initialized ? value : undefined,\n next: () => {\n assertScope(active);\n if (staged !== unset) return staged;\n return initialize ? undefined : initialized ? value : undefined;\n },\n output: Object.freeze({\n set: (candidate: T) => {\n assertScope(active);\n staged = candidate;\n },\n }),\n };\n };\n\n const seal = (nextReset: boolean, isEqual: (previous: T, next: T) => boolean): boolean => {\n if (reset && staged === unset)\n throw new TypeError('Value output must be initialized on reset.');\n if (staged === unset) {\n reset = nextReset;\n changed = false;\n next = value;\n return false;\n }\n const candidate = staged;\n changed = !initialized || !isEqual(value, candidate);\n next = changed ? candidate : value;\n reset = nextReset;\n return changed;\n };\n\n return {\n begin,\n seal,\n context: (active, cause) => {\n assertScope(active);\n return Object.freeze({\n kind: 'value' as const,\n value: next,\n revision,\n reset,\n cause,\n });\n },\n current: check => {\n check();\n return value;\n },\n revision: () => revision,\n reset: () => reset,\n publish: () => {\n if (changed && initialized) revision++;\n if (changed) value = next;\n initialized = true;\n },\n emit: call => {\n profile.materialized.notification();\n Array.from(listeners).forEach(listener => call(listener));\n },\n clear: () => {\n staged = unset;\n next = value;\n changed = false;\n reset = false;\n },\n release: () => {\n listeners.clear();\n staged = unset;\n value = next = undefined as T;\n initialized = false;\n revision = 0;\n changed = false;\n reset = false;\n },\n subscribe: listener => listeners.add(listener),\n unsubscribe: listener => listeners.delete(listener),\n };\n};\n","import { profile } from '../profile';\nimport { createCollectionOutput, type CollectionOutputState } from './collection-output';\nimport { ProjectionDisposedError } from './contract';\nimport type {\n CollectionOutputEvaluation,\n OutputDefinition,\n OutputEvaluation,\n ProcessorDefinition,\n ProcessorInstance,\n ValueOutputEvaluation,\n} from './definition';\nimport {\n assertSynchronous,\n type OutputRecord,\n type ProcessorRecord,\n type Scheduler,\n} from './scheduler';\nimport { createValueOutput, type ValueOutputState } from './value-output';\n\ntype BoundOutput =\n | {\n readonly kind: 'value';\n readonly definition: Extract<OutputDefinition, { readonly kind: 'value' }>;\n readonly state: ValueOutputState<unknown>;\n readonly output: OutputRecord;\n }\n | {\n readonly kind: 'collection';\n readonly definition: Extract<OutputDefinition, { readonly kind: 'collection' }>;\n readonly state: CollectionOutputState<string, unknown>;\n readonly output: OutputRecord;\n };\n\n/** Materializes every derive/incremental/group definition through one processor lifecycle. */\nexport const createProcessor = (\n scheduler: Scheduler,\n definition: ProcessorDefinition,\n dependencies: readonly OutputRecord[]\n): ProcessorRecord => {\n scheduler.assertIdle();\n let processor!: ProcessorRecord;\n let instance: ProcessorInstance | undefined;\n let cause: unknown;\n\n const check = () => {\n if (!scheduler.active || processor.disposed) throw new ProjectionDisposedError();\n if (processor.fault) throw processor.fault;\n };\n\n const bound: readonly BoundOutput[] = definition.outputs.map(outputDefinition => {\n if (outputDefinition.kind === 'value') {\n const state = createValueOutput<unknown>();\n const output: OutputRecord = {\n kind: 'value',\n get owner() {\n return processor;\n },\n consumers: new Set(),\n context: active => state.context(active, cause),\n current: () => state.current(check),\n revision: state.revision,\n reset: state.reset,\n subscribe: listener => {\n check();\n const wrapped = () => listener();\n state.subscribe(wrapped);\n return () => state.unsubscribe(wrapped);\n },\n emit: state.emit,\n clear: state.clear,\n release: state.release,\n };\n return { kind: 'value', definition: outputDefinition, state, output };\n }\n const state = createCollectionOutput<string, unknown>();\n const output: OutputRecord = {\n kind: 'collection',\n get owner() {\n return processor;\n },\n consumers: new Set(),\n context: active => state.context(active, cause),\n current: () => state.current(check),\n revision: state.revision,\n reset: state.reset,\n subscribe: listener => {\n check();\n const wrapped = (change: import('./contract').CollectionChange<string, unknown>) =>\n listener(change);\n state.subscribe(wrapped);\n return () => state.unsubscribe(wrapped);\n },\n emit: state.emit,\n clear: state.clear,\n release: state.release,\n };\n return { kind: 'collection', definition: outputDefinition, state, output };\n });\n\n const begin = (active: () => boolean, initialize: boolean): readonly OutputEvaluation[] =>\n Object.freeze(\n bound.map(entry => {\n if (entry.kind === 'value') {\n const evaluation = entry.state.begin(active, initialize);\n return Object.freeze({ kind: 'value' as const, ...evaluation }) as ValueOutputEvaluation;\n }\n const evaluation = entry.state.begin(active, initialize);\n return Object.freeze({\n kind: 'collection' as const,\n ...evaluation,\n }) as CollectionOutputEvaluation;\n })\n );\n\n const seal = (reset: boolean): readonly OutputRecord[] => {\n const changed: OutputRecord[] = [];\n for (const entry of bound) {\n const didChange = entry.state.seal(reset, entry.definition.equality);\n if (didChange) changed.push(entry.output);\n }\n return Object.freeze(changed);\n };\n\n const run = (reset: boolean, runCause: unknown): readonly OutputRecord[] => {\n cause = runCause;\n let active = true;\n try {\n const scopeActive = () => active;\n const sources = Object.freeze(dependencies.map(output => output.context(scopeActive)));\n let outputs = begin(scopeActive, reset);\n if (!instance) instance = definition.create();\n profile.materialized[reset ? 'rebuilt' : 'updated']();\n let result = instance.evaluate({ reset, cause: runCause, sources, outputs });\n assertSynchronous(result);\n if (result?.kind === 'rebuild') {\n if (reset) throw new TypeError('Initial or reset projection processor cannot rebuild.');\n instance.release?.();\n instance = definition.create();\n outputs = begin(scopeActive, true);\n result = instance.evaluate({ reset: true, cause: runCause, sources, outputs });\n assertSynchronous(result);\n if (result?.kind === 'rebuild')\n throw new TypeError('Reset projection processor cannot rebuild again.');\n return seal(true);\n }\n return seal(reset);\n } finally {\n active = false;\n }\n };\n\n const order = scheduler.order();\n processor = {\n kind: 'processor',\n order,\n name: definition.name ? `${definition.name} (${order})` : `projection-${order}`,\n dependencies: Object.freeze([...dependencies]),\n outputs: Object.freeze(bound.map(entry => entry.output)),\n fault: undefined,\n disposed: false,\n evaluate: run,\n publish: () => bound.forEach(entry => entry.state.publish()),\n clear: () => {\n bound.forEach(entry => entry.state.clear());\n cause = undefined;\n },\n release: () => {\n instance?.release?.();\n instance = undefined;\n bound.forEach(entry => {\n entry.output.consumers.clear();\n entry.state.release();\n });\n cause = undefined;\n },\n };\n\n try {\n scheduler.initialize(() => {\n const invalid = dependencies.find(output => output.owner.fault || output.owner.disposed);\n if (invalid) throw invalid.owner.fault ?? new ProjectionDisposedError();\n const changed = processor.evaluate(true, undefined);\n if (changed.length) processor.publish();\n processor.clear();\n });\n } catch (error) {\n processor.release();\n throw error;\n }\n scheduler.addProcessor(processor);\n return processor;\n};\n","import type { Unsubscribe } from '../runtime/contract';\nimport { collectionChangeBetween } from './collection-output';\nimport type { CollectionChange } from './contract';\nimport type { Readable } from './readable';\n\nexport type ProjectionReadableSource<T> = {\n readonly kind: 'value' | 'collection';\n current(): T;\n revision(): number;\n subscribe(listener: (change?: CollectionChange<string, unknown>) => void): Unsubscribe;\n};\n\ntype SelectionTracker = {\n readonly keys: Set<string>;\n all: boolean;\n structure: boolean;\n};\n\ntype Selection = {\n readonly keys: ReadonlySet<string>;\n readonly all: boolean;\n readonly structure: boolean;\n};\n\nlet activeTracker: SelectionTracker | undefined;\n\nconst trackKey = (key: string): void => {\n activeTracker?.keys.add(key);\n};\n\nconst trackStructure = (): void => {\n if (activeTracker) activeTracker.structure = true;\n};\n\nconst trackAll = (): void => {\n if (activeTracker) activeTracker.all = true;\n};\n\nexport const isMapLike = (value: unknown): value is ReadonlyMap<string, unknown> =>\n value instanceof Map ||\n (value !== null &&\n typeof value === 'object' &&\n typeof (value as { get?: unknown }).get === 'function' &&\n typeof (value as { keys?: unknown }).keys === 'function' &&\n typeof (value as { entries?: unknown }).entries === 'function');\n\nconst trackedMap = <K extends string, V>(source: ReadonlyMap<K, V>): ReadonlyMap<K, V> => {\n const view: ReadonlyMap<K, V> = {\n get: key => {\n trackKey(key);\n return source.get(key);\n },\n has: key => {\n trackKey(key);\n return source.has(key);\n },\n get size() {\n trackStructure();\n return source.size;\n },\n keys: () => {\n trackStructure();\n return source.keys();\n },\n values: () => {\n trackAll();\n return source.values();\n },\n entries: () => {\n trackAll();\n return source.entries();\n },\n forEach: (callback, thisArg) => {\n trackAll();\n source.forEach((value, key) => callback.call(thisArg, value, key, view));\n },\n [Symbol.iterator]: () => {\n trackAll();\n return source[Symbol.iterator]();\n },\n };\n return Object.freeze(view);\n};\n\nconst selectionAffects = (\n selection: Selection,\n change: CollectionChange<string, unknown> | undefined\n): boolean => {\n if (!change || change.kind === 'reset') return true;\n if (\n selection.all &&\n (change.added.length || change.removed.length || change.updated.length || change.order)\n )\n return true;\n if (selection.structure && (change.added.length || change.removed.length || change.order))\n return true;\n for (const key of selection.keys) {\n if (\n change.added.some(entry => entry.key === key) ||\n change.removed.some(entry => entry.key === key) ||\n change.updated.some(entry => entry.key === key)\n )\n return true;\n }\n return false;\n};\n\nexport const createDirectReadable = <T>(source: ProjectionReadableSource<T>): Readable<T> =>\n Object.freeze({\n current: source.current,\n revision: source.revision,\n subscribe: (listener: () => void) => source.subscribe(() => listener()),\n });\n\n/** Consumer-side selector tracking; it never mutates processor dependencies. */\nexport const createSelectorReadable = <T, R>(\n source: ProjectionReadableSource<T>,\n selector: (value: T) => R,\n equality: (previous: R, next: R) => boolean = Object.is\n): Readable<R> => {\n let initialized = false;\n let value!: R;\n let selectedRevision = 0;\n let sourceRevision = -1;\n let selection: Selection = Object.freeze({\n keys: new Set<string>(),\n all: true,\n structure: false,\n });\n let previousCollection: ReadonlyMap<string, unknown> | undefined;\n let unsubscribeSource: Unsubscribe | undefined;\n const listeners = new Set<() => void>();\n\n const updateCollectionSnapshot = (current?: T) => {\n const candidate = current ?? source.current();\n previousCollection = isMapLike(candidate) ? candidate : undefined;\n };\n\n const evaluate = (): boolean => {\n const tracker: SelectionTracker = { keys: new Set(), all: false, structure: false };\n const previousTracker = activeTracker;\n activeTracker = tracker;\n let current!: T;\n let next!: R;\n try {\n current = source.current();\n const selectedSource = isMapLike(current) ? (trackedMap(current) as unknown as T) : current;\n next = selector(selectedSource);\n } finally {\n activeTracker = previousTracker;\n }\n const nextSelection: Selection = Object.freeze({\n keys: new Set(tracker.keys),\n all: tracker.all || (isMapLike(current) && tracker.keys.size === 0 && !tracker.structure),\n structure: tracker.structure,\n });\n const changed = !initialized || !equality(value, next);\n if (changed) {\n if (initialized) selectedRevision++;\n value = next;\n }\n selection = nextSelection;\n initialized = true;\n sourceRevision = source.revision();\n updateCollectionSnapshot(current);\n return changed;\n };\n\n const ensureCurrent = (): R => {\n const revision = source.revision();\n if (!initialized || (!unsubscribeSource && sourceRevision !== revision)) evaluate();\n return value;\n };\n\n const onProjectionChange = (incoming?: CollectionChange<string, unknown>) => {\n let change = incoming;\n if (!change && previousCollection) {\n const current = source.current();\n if (isMapLike(current)) {\n change = collectionChangeBetween(previousCollection, current);\n previousCollection = current;\n if (!change) {\n sourceRevision = source.revision();\n return;\n }\n } else previousCollection = undefined;\n }\n if (!selectionAffects(selection, change)) {\n sourceRevision = source.revision();\n updateCollectionSnapshot();\n return;\n }\n if (evaluate()) Array.from(listeners).forEach(listener => listener());\n };\n\n const installSource = () => {\n if (!unsubscribeSource) unsubscribeSource = source.subscribe(onProjectionChange);\n };\n\n return Object.freeze({\n current: ensureCurrent,\n revision: () => {\n ensureCurrent();\n return selectedRevision;\n },\n subscribe: (listener: () => void) => {\n ensureCurrent();\n listeners.add(listener);\n installSource();\n return () => {\n listeners.delete(listener);\n if (!listeners.size && unsubscribeSource) {\n unsubscribeSource();\n unsubscribeSource = undefined;\n }\n };\n },\n });\n};\n","import { read as readAddress, nodeAt } from '../address';\nimport { collectionAccess, snapshot } from '../access/scope';\nimport { affectsTarget, collectionImpact } from '../impact';\nimport { accessOf } from '../runtime/access';\nimport { attachProjection, documentReadableOwner } from '../runtime/notification';\nimport type { DocumentCommit, DocumentReadable, Unsubscribe } from '../runtime/contract';\nimport type { CollectionSelector, ObjectNode, ValueSelector } from '../schema';\nimport { collectionEntryNode } from '../schema';\nimport { copyValue, equalValue } from '../schema-value';\nimport {\n createCollectionOutput,\n mapRead,\n stageCollectionRead,\n type CollectionOutputState,\n} from './collection-output';\nimport type {\n CollectionChange,\n CollectionRead,\n ExternalCollectionSource,\n ExternalValueSource,\n} from './contract';\nimport { ProjectionDisposedError, ProjectionError } from './contract';\nimport type { SourceDefinition } from './definition';\nimport type { Readable } from './readable';\nimport {\n assertScope,\n assertSynchronous,\n type OutputRecord,\n type Scheduler,\n type SourceBoundaryRecord,\n} from './scheduler';\nimport { createValueOutput, type ValueOutputState } from './value-output';\n\nexport type KeyedInputDraft<K extends string, V> = {\n get(key: K): V | undefined;\n has(key: K): boolean;\n set(key: K, value: V): void;\n remove(key: K): void;\n};\n\nexport type SourceWrite =\n | { readonly kind: 'value'; set(value: unknown): void }\n | {\n readonly kind: 'collection';\n update(run: (draft: KeyedInputDraft<string, unknown>) => void): void;\n };\n\nexport type SourceMaterialization = {\n readonly producer: SourceBoundaryRecord;\n readonly output: OutputRecord;\n readonly write?: SourceWrite;\n};\n\ntype SourceMark = { readonly reset?: boolean; readonly cause?: unknown };\ntype CollectionMark = SourceMark & {\n readonly candidates?: Iterable<string>;\n readonly fullScan?: boolean;\n readonly orderMayChange?: boolean;\n};\n\ntype ValueBoundary = SourceMaterialization & {\n readonly setLatest: (value: unknown) => void;\n readonly mark: (metadata?: SourceMark) => void;\n readonly fail: (cause: unknown) => void;\n readonly detach: (cleanup: Unsubscribe) => void;\n};\n\ntype CollectionBoundary = SourceMaterialization & {\n readonly mark: (metadata?: CollectionMark) => void;\n readonly fail: (cause: unknown) => void;\n readonly detach: (cleanup: Unsubscribe) => void;\n};\n\nconst sourceError = (source: SourceBoundaryRecord, cause: unknown): ProjectionError =>\n new ProjectionError('source', source.name, [source.outputs[0].revision()], cause);\n\nconst createValueBoundary = (\n scheduler: Scheduler,\n name: string,\n initial: unknown,\n equality: (previous: unknown, next: unknown) => boolean\n): ValueBoundary => {\n const state: ValueOutputState<unknown> = createValueOutput();\n let boundary!: SourceBoundaryRecord;\n let latest = initial;\n let pendingReset = false;\n let pendingCause: unknown;\n let contextCause: unknown;\n let recovering = false;\n let cleanup: Unsubscribe | undefined;\n\n const check = () => {\n if (!scheduler.active || boundary.disposed) throw new ProjectionDisposedError();\n if (boundary.fault) throw boundary.fault;\n };\n\n const output: OutputRecord = {\n kind: 'value',\n get owner() {\n return boundary;\n },\n consumers: new Set(),\n context: active => state.context(active, contextCause),\n current: () => state.current(check),\n revision: state.revision,\n reset: state.reset,\n subscribe: listener => {\n check();\n const wrapped = () => listener();\n state.subscribe(wrapped);\n return () => state.unsubscribe(wrapped);\n },\n emit: state.emit,\n clear: state.clear,\n release: state.release,\n };\n\n boundary = {\n kind: 'source',\n name,\n outputs: Object.freeze([output]) as readonly [OutputRecord],\n fault: undefined,\n disposed: false,\n pendingCause: () => pendingCause,\n recovering: () => recovering,\n prepare: cause => {\n contextCause = cause;\n let active = true;\n try {\n const evaluation = state.begin(() => active, pendingReset);\n evaluation.output.set(latest);\n const changed = state.seal(pendingReset, equality);\n recovering = false;\n return { changed, force: pendingReset };\n } finally {\n active = false;\n }\n },\n publish: state.publish,\n clear: () => {\n state.clear();\n pendingReset = false;\n pendingCause = undefined;\n contextCause = undefined;\n recovering = false;\n },\n release: () => {\n cleanup?.();\n cleanup = undefined;\n state.release();\n output.consumers.clear();\n },\n };\n\n scheduler.initialize(() => {\n let active = true;\n try {\n const evaluation = state.begin(() => active, true);\n evaluation.output.set(initial);\n state.seal(true, equality);\n state.publish();\n state.clear();\n } finally {\n active = false;\n }\n });\n scheduler.addSource(boundary);\n\n const mark = (metadata: SourceMark = {}) => {\n scheduler.assertIdle();\n pendingReset ||= metadata.reset ?? false;\n if (metadata.cause !== undefined) pendingCause ??= metadata.cause;\n if (boundary.fault) recovering = true;\n scheduler.capture(boundary);\n };\n const fail = (cause: unknown) => {\n boundary.fault = sourceError(boundary, cause);\n recovering = false;\n scheduler.capture(boundary);\n };\n return {\n producer: boundary,\n output,\n setLatest: value => {\n latest = value;\n },\n mark,\n fail,\n detach: next => {\n cleanup = next;\n },\n };\n};\n\nconst createCollectionBoundary = (\n scheduler: Scheduler,\n name: string,\n readLatest: (active: () => boolean) => CollectionRead<string, unknown>,\n equality: (previous: unknown, next: unknown) => boolean\n): CollectionBoundary => {\n const state: CollectionOutputState<string, unknown> = createCollectionOutput();\n let boundary!: SourceBoundaryRecord;\n let pendingReset = false;\n let pendingCause: unknown;\n let contextCause: unknown;\n let recovering = false;\n let fullScan = false;\n let orderMayChange = false;\n const candidates = new Set<string>();\n let cleanup: Unsubscribe | undefined;\n\n const check = () => {\n if (!scheduler.active || boundary.disposed) throw new ProjectionDisposedError();\n if (boundary.fault) throw boundary.fault;\n };\n\n const output: OutputRecord = {\n kind: 'collection',\n get owner() {\n return boundary;\n },\n consumers: new Set(),\n context: active => state.context(active, contextCause),\n current: () => state.current(check),\n revision: state.revision,\n reset: state.reset,\n subscribe: listener => {\n check();\n const wrapped = (change: CollectionChange<string, unknown>) => listener(change);\n state.subscribe(wrapped);\n return () => state.unsubscribe(wrapped);\n },\n emit: state.emit,\n clear: state.clear,\n release: state.release,\n };\n\n boundary = {\n kind: 'source',\n name,\n outputs: Object.freeze([output]) as readonly [OutputRecord],\n fault: undefined,\n disposed: false,\n pendingCause: () => pendingCause,\n recovering: () => recovering,\n prepare: cause => {\n contextCause = cause;\n let active = true;\n try {\n const changed = stageCollectionRead(\n state,\n readLatest(() => active),\n () => active,\n {\n reset: pendingReset,\n ...(fullScan ? {} : { candidates }),\n orderMayChange,\n isEqual: equality,\n }\n );\n recovering = false;\n return { changed, force: pendingReset };\n } finally {\n active = false;\n }\n },\n publish: state.publish,\n clear: () => {\n state.clear();\n pendingReset = false;\n pendingCause = undefined;\n contextCause = undefined;\n recovering = false;\n fullScan = false;\n orderMayChange = false;\n candidates.clear();\n },\n release: () => {\n cleanup?.();\n cleanup = undefined;\n state.release();\n output.consumers.clear();\n },\n };\n\n scheduler.initialize(() => {\n let active = true;\n try {\n stageCollectionRead(\n state,\n readLatest(() => active),\n () => active,\n {\n reset: true,\n isEqual: equality,\n }\n );\n state.publish();\n state.clear();\n } finally {\n active = false;\n }\n });\n scheduler.addSource(boundary);\n\n const mark = (metadata: CollectionMark = {}) => {\n scheduler.assertIdle();\n pendingReset ||= metadata.reset ?? false;\n if (metadata.cause !== undefined) pendingCause ??= metadata.cause;\n fullScan ||= metadata.fullScan ?? false;\n orderMayChange ||= metadata.orderMayChange ?? false;\n if (metadata.candidates) for (const key of metadata.candidates) candidates.add(key);\n if (boundary.fault) recovering = true;\n scheduler.capture(boundary);\n };\n const fail = (cause: unknown) => {\n boundary.fault = sourceError(boundary, cause);\n recovering = false;\n scheduler.capture(boundary);\n };\n return {\n producer: boundary,\n output,\n mark,\n fail,\n detach: next => {\n cleanup = next;\n },\n };\n};\n\ntype DocumentBinding = {\n matches(commit: DocumentCommit<ObjectNode>): boolean;\n capture(commit: DocumentCommit<ObjectNode>): void;\n dispose(): void;\n};\n\ntype DocumentConnection = {\n add(binding: DocumentBinding): Unsubscribe;\n close(): void;\n};\n\ntype ValueMember = {\n readonly boundary: ValueBoundary;\n receive(value: unknown, metadata?: SourceMark): void;\n};\n\nexport const createSourceRegistry = (scheduler: Scheduler) => {\n const documents = new Map<object, DocumentConnection>();\n const readables = new Map<object, { members: Set<ValueMember>; close(): void }>();\n const externalValues = new WeakMap<object, { members: Set<ValueMember>; close(): void }>();\n const externalCollections = new WeakMap<\n object,\n { members: Set<CollectionBoundary>; close(): void }\n >();\n\n const documentConnection = <S extends ObjectNode>(\n runtime: DocumentReadable<S>\n ): DocumentConnection => {\n const state = accessOf(runtime);\n const cached = documents.get(state);\n if (cached) return cached;\n if (state.disposed) throw new Error('Document has been disposed.');\n const bindings = new Set<DocumentBinding>();\n const guard = (locked: boolean) => {\n state.projectionLocks = (state.projectionLocks ?? 0) + (locked ? 1 : -1);\n };\n scheduler.guards.add(guard);\n let closed = false;\n let detach: Unsubscribe = () => undefined;\n const connection: DocumentConnection = {\n add(binding) {\n if (closed) throw new Error('Document projection connection is closed.');\n bindings.add(binding);\n let active = true;\n return () => {\n if (!active) return;\n active = false;\n bindings.delete(binding);\n if (!bindings.size) connection.close();\n };\n },\n close() {\n if (closed) return;\n closed = true;\n detach();\n bindings.clear();\n scheduler.guards.delete(guard);\n documents.delete(state);\n },\n };\n detach = attachProjection(runtime, {\n capture: commit => {\n for (const binding of bindings)\n if (binding.matches(commit as DocumentCommit<ObjectNode>))\n binding.capture(commit as DocumentCommit<ObjectNode>);\n },\n settle: scheduler.settle,\n flush: scheduler.flush,\n dispose: () => {\n for (const binding of bindings) binding.dispose();\n scheduler.run();\n },\n });\n documents.set(state, connection);\n return connection;\n };\n\n const valueInput = (definition: SourceDefinition): SourceMaterialization => {\n if (definition.source.kind !== 'value-input') throw new Error('Invalid value input source.');\n const source = definition.source;\n const boundary = createValueBoundary(\n scheduler,\n 'projection input',\n source.initial,\n source.equality\n );\n return {\n ...boundary,\n write: {\n kind: 'value',\n set(value) {\n scheduler.assertIdle();\n boundary.setLatest(value);\n boundary.mark();\n scheduler.run();\n },\n },\n };\n };\n\n const collectionInput = (definition: SourceDefinition): SourceMaterialization => {\n if (definition.source.kind !== 'collection-input')\n throw new Error('Invalid collection input source.');\n const values = new Map(definition.source.initial);\n const boundary = createCollectionBoundary(\n scheduler,\n 'projection collection input',\n () => mapRead(values),\n definition.output.equality\n );\n return {\n ...boundary,\n write: {\n kind: 'collection',\n update(run) {\n scheduler.assertIdle();\n const staged = new Map<\n string,\n { readonly present: true; readonly value: unknown } | { readonly present: false }\n >();\n const operations: (\n | { readonly kind: 'set'; readonly key: string; readonly value: unknown }\n | { readonly kind: 'remove'; readonly key: string }\n )[] = [];\n let active = true;\n const draft: KeyedInputDraft<string, unknown> = Object.freeze({\n get: key => {\n assertScope(() => active);\n const entry = staged.get(key);\n return entry ? (entry.present ? entry.value : undefined) : values.get(key);\n },\n has: key => {\n assertScope(() => active);\n const entry = staged.get(key);\n return entry ? entry.present : values.has(key);\n },\n set: (key, value) => {\n assertScope(() => active);\n if (typeof key !== 'string') throw new TypeError('Projection keys must be strings.');\n staged.set(key, { present: true, value });\n operations.push({ kind: 'set', key, value });\n },\n remove: key => {\n assertScope(() => active);\n if (typeof key !== 'string') throw new TypeError('Projection keys must be strings.');\n staged.set(key, { present: false });\n operations.push({ kind: 'remove', key });\n },\n });\n try {\n assertSynchronous(run(draft));\n } finally {\n active = false;\n }\n\n const candidates = new Set<string>();\n let structural = false;\n let changed = false;\n for (const operation of operations) {\n const present = values.has(operation.key);\n if (operation.kind === 'set') {\n if (present && Object.is(values.get(operation.key), operation.value)) continue;\n structural ||= !present;\n values.set(operation.key, operation.value);\n } else {\n if (!present) continue;\n structural = true;\n values.delete(operation.key);\n }\n candidates.add(operation.key);\n changed = true;\n }\n if (!changed) return;\n boundary.mark({ candidates, orderMayChange: structural });\n scheduler.run();\n },\n },\n };\n };\n\n const documentValue = (definition: SourceDefinition): SourceMaterialization => {\n if (definition.source.kind !== 'document-value')\n throw new Error('Invalid document value source.');\n const { document, selector } = definition.source;\n const state = accessOf(document);\n const address = selector?.address ?? Object.freeze([]);\n const schemaNode = () => nodeAt(state.schema, address, state.document);\n const read = () => {\n if (state.disposed) throw new Error('Document has been disposed.');\n const node = schemaNode();\n if (!node) return undefined;\n const value = selector ? readAddress(state.document, address, state.schema) : state.document;\n return copyValue(node, value);\n };\n const initial = read();\n const boundary = createValueBoundary(scheduler, 'document source', initial, (left, right) => {\n const node = schemaNode();\n return node ? equalValue(node, left, right) : Object.is(left, right);\n });\n const remove = documentConnection(document).add({\n matches: commit => !selector || affectsTarget(commit.impact, selector),\n capture: commit => {\n try {\n boundary.setLatest(read());\n boundary.mark({ reset: commit.impact.kind === 'reset' });\n } catch (cause) {\n boundary.fail(cause);\n }\n },\n dispose: () => boundary.fail(new Error('Document has been disposed.')),\n });\n boundary.detach(remove);\n return boundary;\n };\n\n const documentCollection = (definition: SourceDefinition): SourceMaterialization => {\n if (definition.source.kind !== 'document-collection')\n throw new Error('Invalid document collection source.');\n const { document, selector } = definition.source;\n const state = accessOf(document);\n const read = (active: () => boolean): CollectionRead<string, unknown> => {\n if (state.disposed) throw new Error('Document has been disposed.');\n const raw = collectionAccess({ state, active }, selector.address) as CollectionRead<\n string,\n unknown\n >;\n const snapshots = new Map<string, unknown>();\n return Object.freeze({\n get: (key: string) => {\n assertScope(active);\n if (!snapshots.has(key)) snapshots.set(key, snapshot(raw.get(key)));\n return snapshots.get(key);\n },\n has: (key: string) => {\n assertScope(active);\n return raw.has(key);\n },\n ids: () => {\n assertScope(active);\n return raw.ids();\n },\n });\n };\n const collectionNode = () => nodeAt(state.schema, selector.address, state.document);\n const boundary = createCollectionBoundary(\n scheduler,\n 'document collection source',\n read,\n (left, right) => {\n const node = collectionNode();\n const entry = node && collectionEntryNode(node);\n return entry ? equalValue(entry, left, right) : Object.is(left, right);\n }\n );\n const remove = documentConnection(document).add({\n matches: commit => affectsTarget(commit.impact, selector),\n capture: commit => {\n const impact = collectionImpact(commit.impact, selector);\n if (impact.kind === 'reset') {\n boundary.mark({ reset: true });\n return;\n }\n const candidates = new Set<string>([...impact.added, ...impact.updated, ...impact.removed]);\n boundary.mark({\n candidates,\n orderMayChange: Boolean(impact.added.size || impact.removed.size || impact.orderChanged),\n });\n },\n dispose: () => boundary.fail(new Error('Document has been disposed.')),\n });\n boundary.detach(remove);\n return boundary;\n };\n\n const readable = (definition: SourceDefinition): SourceMaterialization => {\n if (definition.source.kind !== 'readable') throw new Error('Invalid Readable source.');\n const { readable, equality } = definition.source;\n let initial = readable.current();\n const boundary = createValueBoundary(scheduler, 'external readable', initial, equality);\n const member: ValueMember = {\n boundary,\n receive(value, metadata) {\n initial = value;\n boundary.setLatest(value);\n boundary.mark(metadata);\n },\n };\n let connection = readables.get(readable);\n if (!connection) {\n const members = new Set<ValueMember>();\n let closed = false;\n let unsubscribe: Unsubscribe | undefined;\n let detachDocument: Unsubscribe | undefined;\n const receive = (settle: boolean) => {\n if (closed || !scheduler.active) return;\n try {\n const value = readable.current();\n members.forEach(next => next.receive(value));\n } catch (cause) {\n members.forEach(next => next.boundary.fail(cause));\n }\n if (settle) scheduler.run();\n };\n const created = {\n members,\n close() {\n if (closed) return;\n closed = true;\n unsubscribe?.();\n detachDocument?.();\n readables.delete(readable);\n },\n };\n const owner = documentReadableOwner(readable);\n if (owner) {\n detachDocument = documentConnection(owner).add({\n matches: () => true,\n capture: () => receive(false),\n dispose: () => {\n members.forEach(next => next.boundary.fail(new Error('Document has been disposed.')));\n },\n });\n }\n unsubscribe = readable.subscribe(() => receive(true));\n connection = created;\n readables.set(readable, connection);\n }\n connection.members.add(member);\n boundary.detach(() => {\n connection!.members.delete(member);\n if (!connection!.members.size) connection!.close();\n });\n void initial;\n return boundary;\n };\n\n const externalValue = (definition: SourceDefinition): SourceMaterialization => {\n if (definition.source.kind !== 'external-value')\n throw new Error('Invalid external value source.');\n const { source, equality } = definition.source;\n const boundary = createValueBoundary(scheduler, 'external source', source.current(), equality);\n const member: ValueMember = {\n boundary,\n receive(value, metadata) {\n boundary.setLatest(value);\n boundary.mark(metadata);\n },\n };\n let connection = externalValues.get(source);\n if (!connection) {\n const members = new Set<ValueMember>();\n let closed = false;\n let unsubscribe: Unsubscribe | undefined;\n const created = {\n members,\n close() {\n if (closed) return;\n closed = true;\n unsubscribe?.();\n externalValues.delete(source);\n },\n };\n try {\n unsubscribe = source.subscribe(event => {\n try {\n members.forEach(next =>\n next.receive(event.value, { reset: event.reset, cause: event.cause })\n );\n } catch (cause) {\n members.forEach(next => next.boundary.fail(cause));\n }\n scheduler.run();\n });\n } catch (cause) {\n created.close();\n throw cause;\n }\n connection = created;\n externalValues.set(source, connection);\n }\n connection.members.add(member);\n boundary.detach(() => {\n connection!.members.delete(member);\n if (!connection!.members.size) connection!.close();\n });\n return boundary;\n };\n\n const externalCollection = (definition: SourceDefinition): SourceMaterialization => {\n if (definition.source.kind !== 'external-collection')\n throw new Error('Invalid external collection source.');\n const source = definition.source.source as ExternalCollectionSource<string, unknown>;\n const boundary = createCollectionBoundary(\n scheduler,\n 'external collection source',\n () => {\n const current = source.current();\n return Object.freeze({\n get: key => current.get(key),\n has: key => current.has(key),\n ids: () => current.ids(),\n });\n },\n definition.output.equality\n );\n let connection = externalCollections.get(source);\n if (!connection) {\n const members = new Set<CollectionBoundary>();\n let closed = false;\n let unsubscribe: Unsubscribe | undefined;\n const created = {\n members,\n close() {\n if (closed) return;\n closed = true;\n unsubscribe?.();\n externalCollections.delete(source);\n },\n };\n try {\n unsubscribe = source.subscribe(event => {\n try {\n const impact = event.impact;\n if (impact?.kind === 'reset') {\n members.forEach(next => next.mark({ reset: true, cause: event.cause }));\n } else if (impact?.kind === 'incremental') {\n const candidates = new Set<string>([\n ...impact.added,\n ...impact.updated,\n ...impact.removed,\n ]);\n members.forEach(next =>\n next.mark({\n candidates,\n orderMayChange: Boolean(\n impact.added.size || impact.removed.size || impact.orderChanged\n ),\n cause: event.cause,\n })\n );\n } else {\n members.forEach(next =>\n next.mark({ fullScan: true, orderMayChange: true, cause: event.cause })\n );\n }\n } catch (cause) {\n members.forEach(next => next.fail(cause));\n }\n scheduler.run();\n });\n } catch (cause) {\n created.close();\n throw cause;\n }\n connection = created;\n externalCollections.set(source, connection);\n }\n connection.members.add(boundary);\n boundary.detach(() => {\n connection!.members.delete(boundary);\n if (!connection!.members.size) connection!.close();\n });\n return boundary;\n };\n\n return {\n materialize(definition: SourceDefinition): SourceMaterialization {\n switch (definition.source.kind) {\n case 'value-input':\n return valueInput(definition);\n case 'collection-input':\n return collectionInput(definition);\n case 'document-value':\n return documentValue(definition);\n case 'document-collection':\n return documentCollection(definition);\n case 'readable':\n return readable(definition);\n case 'external-value':\n return externalValue(definition);\n case 'external-collection':\n return externalCollection(definition);\n }\n },\n dispose() {\n documents.forEach(connection => connection.close());\n readables.forEach(connection => connection.close());\n documents.clear();\n readables.clear();\n },\n };\n};\n","import type { Unsubscribe } from '../runtime/contract';\nimport {\n incremental,\n type IncrementalCollectionProcessor,\n type IncrementalGroupDefine,\n type IncrementalGroupOutputTree,\n type IncrementalGroupProcessor,\n type IncrementalValueProcessor,\n} from './advanced';\nimport { collectionView, mapRead, snapshotCollectionView } from './collection-output';\nimport type { CollectionChange, CollectionRead } from './contract';\nimport { ProjectionDisposedError } from './contract';\nimport {\n derive,\n input,\n isProjection,\n ownProjection,\n producerOf,\n projectionRef,\n type Input,\n type ProducerDefinition,\n type Projection,\n} from './definition';\nimport { createProcessor } from './processor';\nimport {\n createDirectReadable,\n createSelectorReadable,\n isMapLike,\n type ProjectionReadableSource,\n} from './projection-readable';\nimport type { Readable } from './readable';\nimport { createScheduler, type OutputRecord, type ProducerRecord } from './scheduler';\nimport { createSourceRegistry, type KeyedInputDraft, type SourceWrite } from './source';\n\ntype KeyedDraft<K extends string, V> = {\n get(key: K): V | undefined;\n has(key: K): boolean;\n set(key: K, value: V): void;\n remove(key: K): void;\n};\n\nexport type ProjectionRuntime = {\n get<T>(projection: Projection<T, unknown>): T;\n readable<T>(projection: Projection<T, unknown>): Readable<T>;\n readable<T, R>(\n projection: Projection<T, unknown>,\n selector: (value: T) => R,\n equality?: (previous: R, next: R) => boolean\n ): Readable<R>;\n set<T>(input: Input<T>, value: T): void;\n update<K extends string, V>(\n input: Input<ReadonlyMap<K, V>, CollectionChange<K, V>>,\n run: (draft: KeyedDraft<K, V>) => void\n ): void;\n batch<T>(run: () => T): T;\n batch<T>(options: { readonly cause?: unknown }, run: () => T): T;\n scope(): ProjectionScope;\n dispose(): void;\n};\n\nexport type ProjectionScope = {\n readonly input: typeof input;\n readonly derive: typeof derive;\n readonly incremental: typeof incremental;\n get<T>(projection: Projection<T, unknown>): T;\n readable<T>(projection: Projection<T, unknown>): Readable<T>;\n readable<T, R>(\n projection: Projection<T, unknown>,\n selector: (value: T) => R,\n equality?: (previous: R, next: R) => boolean\n ): Readable<R>;\n set<T>(input: Input<T>, value: T): void;\n update<K extends string, V>(\n input: Input<ReadonlyMap<K, V>, CollectionChange<K, V>>,\n run: (draft: KeyedDraft<K, V>) => void\n ): void;\n batch: ProjectionRuntime['batch'];\n dispose(): void;\n};\n\ntype MaterializedProducer = {\n readonly record: ProducerRecord;\n readonly outputs: readonly OutputRecord[];\n readonly write?: SourceWrite;\n};\n\ntype ScopeState = {\n active: boolean;\n readonly materialized: ProducerDefinition[];\n readonly subscriptions: Set<Unsubscribe>;\n};\n\nexport const createProjectionRuntime = (options?: {\n readonly onError?: (error: import('./contract').ProjectionError) => void;\n}): ProjectionRuntime => {\n const scheduler = createScheduler(options?.onError ?? (() => undefined));\n const sources = createSourceRegistry(scheduler);\n const materialized = new WeakMap<ProducerDefinition, MaterializedProducer>();\n const publicViews = new WeakMap<\n OutputRecord,\n { readonly revision: number; readonly value: ReadonlyMap<string, unknown> }\n >();\n const scopes = new Set<ScopeState>();\n\n const assertAccess = (definition: ProducerDefinition, requester?: ScopeState): void => {\n scheduler.assertActive();\n const owner = definition.owner;\n if (owner === undefined) return;\n if (owner !== requester) throw new TypeError('Projection belongs to another scope.');\n if (!requester?.active) throw new ProjectionDisposedError();\n };\n\n const rememberScoped = (\n definition: ProducerDefinition,\n requester: ScopeState | undefined\n ): void => {\n if (requester && definition.owner === requester) requester.materialized.push(definition);\n };\n\n const materializeProducer = (\n definition: ProducerDefinition,\n requester?: ScopeState\n ): MaterializedProducer => {\n assertAccess(definition, requester);\n const existing = materialized.get(definition);\n if (existing) return existing;\n\n let result: MaterializedProducer;\n if (definition.kind === 'source') {\n const source = sources.materialize(definition);\n result = Object.freeze({\n record: source.producer,\n outputs: Object.freeze([source.output]),\n ...(source.write ? { write: source.write } : {}),\n });\n } else {\n if (\n definition.owner === undefined &&\n definition.dependencies.some(dependency => producerOf(dependency).owner !== undefined)\n )\n throw new TypeError('A root projection cannot depend on a scoped projection.');\n const dependencies = definition.dependencies.map(dependency =>\n resolveOutput(dependency, requester)\n );\n const processor = createProcessor(scheduler, definition, Object.freeze(dependencies));\n result = Object.freeze({\n record: processor,\n outputs: processor.outputs,\n });\n }\n\n materialized.set(definition, result);\n rememberScoped(definition, requester);\n return result;\n };\n\n const resolveOutput = (\n projection: Projection<unknown, unknown>,\n requester?: ScopeState\n ): OutputRecord => {\n const ref = projectionRef(projection);\n const producer = materializeProducer(ref.producer, requester);\n const output = producer.outputs[ref.output];\n if (!output) throw new TypeError('Projection output does not exist.');\n return output;\n };\n\n const assertOutput = (output: OutputRecord): void => {\n scheduler.assertActive();\n if (output.owner.disposed) throw new ProjectionDisposedError();\n if (output.owner.fault) throw output.owner.fault;\n };\n\n const publicCurrent = (output: OutputRecord): unknown => {\n assertOutput(output);\n const current = output.current();\n const revision = output.revision();\n const cached = publicViews.get(output);\n if (cached?.revision === revision) return cached.value;\n\n if (output.kind === 'collection') {\n const value = collectionView(current as CollectionRead<string, unknown>);\n publicViews.set(output, { revision, value });\n return value;\n }\n if (isMapLike(current)) {\n const value = snapshotCollectionView(mapRead(current));\n publicViews.set(output, { revision, value });\n return value;\n }\n publicViews.delete(output);\n return current;\n };\n\n const get = <T>(projection: Projection<T, unknown>, requester?: ScopeState): T =>\n publicCurrent(resolveOutput(projection as Projection<unknown, unknown>, requester)) as T;\n\n const readableSource = <T>(\n projection: Projection<T, unknown>,\n requester?: ScopeState\n ): ProjectionReadableSource<T> => {\n const output = resolveOutput(projection as Projection<unknown, unknown>, requester);\n return Object.freeze({\n kind: output.kind,\n current: () => get(projection, requester),\n revision: () => {\n assertOutput(output);\n return output.revision();\n },\n subscribe: output.subscribe,\n });\n };\n\n const makeReadable = <T, R>(\n projection: Projection<T, unknown>,\n selector?: (value: T) => R,\n equality?: (previous: R, next: R) => boolean,\n requester?: ScopeState\n ): Readable<T | R> => {\n const source = readableSource(projection, requester);\n return selector\n ? createSelectorReadable(source, selector, equality)\n : createDirectReadable(source);\n };\n\n function readable<T>(projection: Projection<T, unknown>): Readable<T>;\n function readable<T, R>(\n projection: Projection<T, unknown>,\n selector: (value: T) => R,\n equality?: (previous: R, next: R) => boolean\n ): Readable<R>;\n function readable<T, R>(\n projection: Projection<T, unknown>,\n selector?: (value: T) => R,\n equality?: (previous: R, next: R) => boolean\n ): Readable<T | R> {\n return makeReadable(projection, selector, equality);\n }\n\n const inputWrite = (\n target: Projection<unknown, unknown>,\n requester?: ScopeState\n ): SourceWrite => {\n const ref = projectionRef(target);\n if (ref.output !== 0 || ref.producer.kind !== 'source')\n throw new TypeError('Projection is not an input.');\n if (\n ref.producer.source.kind !== 'value-input' &&\n ref.producer.source.kind !== 'collection-input'\n )\n throw new TypeError('Projection is not an input.');\n const write = materializeProducer(ref.producer, requester).write;\n if (!write) throw new TypeError('Projection input is not writable.');\n return write;\n };\n\n const setInput = <T>(target: Input<T>, value: T, requester?: ScopeState): void => {\n const write = inputWrite(target as Projection<unknown, unknown>, requester);\n if (write.kind !== 'value') throw new TypeError('Projection is not a value input.');\n write.set(value);\n };\n\n const updateInput = <K extends string, V>(\n target: Input<ReadonlyMap<K, V>, CollectionChange<K, V>>,\n run: (draft: KeyedDraft<K, V>) => void,\n requester?: ScopeState\n ): void => {\n const write = inputWrite(target as Projection<unknown, unknown>, requester);\n if (write.kind !== 'collection') throw new TypeError('Projection is not a collection input.');\n write.update(run as (draft: KeyedInputDraft<string, unknown>) => void);\n };\n\n function batch<T>(run: () => T): T;\n function batch<T>(options: { readonly cause?: unknown }, run: () => T): T;\n function batch<T>(\n optionsOrCallback: { readonly cause?: unknown } | (() => T),\n maybeCallback?: () => T\n ): T {\n return typeof optionsOrCallback === 'function'\n ? scheduler.batch(optionsOrCallback)\n : scheduler.batch(optionsOrCallback, maybeCallback);\n }\n\n const disposeScope = (state: ScopeState): void => {\n if (!state.active) return;\n scheduler.assertIdle();\n state.active = false;\n state.subscriptions.forEach(unsubscribe => unsubscribe());\n state.subscriptions.clear();\n for (let index = state.materialized.length - 1; index >= 0; index--) {\n const definition = state.materialized[index];\n const current = materialized.get(definition);\n if (!current) continue;\n scheduler.releaseProducer(current.record);\n materialized.delete(definition);\n }\n state.materialized.length = 0;\n scopes.delete(state);\n };\n\n const createScope = (): ProjectionScope => {\n scheduler.assertIdle();\n const state: ScopeState = {\n active: true,\n materialized: [],\n subscriptions: new Set(),\n };\n scopes.add(state);\n\n const assertActive = () => {\n if (!state.active) throw new ProjectionDisposedError();\n scheduler.assertActive();\n };\n const own = <P extends Projection<unknown, unknown>>(projection: P): P => {\n assertActive();\n return ownProjection(projection, state);\n };\n const ownOutputTree = <T>(tree: T): T => {\n if (isProjection(tree)) return own(tree as Projection<unknown, unknown>) as T;\n if (!tree || typeof tree !== 'object')\n throw new TypeError('Incremental group output tree must be an object.');\n for (const value of Object.values(tree as Record<string, unknown>)) ownOutputTree(value);\n return tree;\n };\n\n const scopedInput: typeof input = Object.assign(\n <T>(initial: T, equality?: (previous: T, next: T) => boolean) =>\n own(input(initial, equality)),\n {\n collection: <K extends string, V>(initial?: ReadonlyMap<K, V>) =>\n own(input.collection(initial)),\n }\n );\n const scopedDerive: typeof derive = (dependencies, compute, equality) =>\n own(derive(dependencies, compute, equality));\n const scopedIncremental: typeof incremental = Object.assign(\n <const D extends readonly Projection<unknown, unknown>[], T>(\n dependencies: D,\n processor: IncrementalValueProcessor<D, T>\n ) => own(incremental(dependencies, processor)),\n {\n collection: <const D extends readonly Projection<unknown, unknown>[], K extends string, V>(\n dependencies: D,\n processor: IncrementalCollectionProcessor<D, K, V>\n ) => own(incremental.collection(dependencies, processor)),\n group: <\n const D extends readonly Projection<unknown, unknown>[],\n const O extends IncrementalGroupOutputTree,\n >(\n dependencies: D,\n defineOutputs: (define: IncrementalGroupDefine) => O,\n processor: IncrementalGroupProcessor<D, O>\n ) => ownOutputTree(incremental.group(dependencies, defineOutputs, processor)),\n }\n );\n\n function scopeReadable<T>(projection: Projection<T, unknown>): Readable<T>;\n function scopeReadable<T, R>(\n projection: Projection<T, unknown>,\n selector: (value: T) => R,\n equality?: (previous: R, next: R) => boolean\n ): Readable<R>;\n function scopeReadable<T, R>(\n projection: Projection<T, unknown>,\n selector?: (value: T) => R,\n equality?: (previous: R, next: R) => boolean\n ): Readable<T | R> {\n assertActive();\n const source = makeReadable(projection, selector, equality, state);\n return Object.freeze({\n current: () => {\n assertActive();\n return source.current();\n },\n revision: () => {\n assertActive();\n return source.revision();\n },\n subscribe: listener => {\n assertActive();\n const stop = source.subscribe(listener);\n let subscribed = true;\n const unsubscribe = () => {\n if (!subscribed) return;\n subscribed = false;\n state.subscriptions.delete(unsubscribe);\n stop();\n };\n state.subscriptions.add(unsubscribe);\n return unsubscribe;\n },\n });\n }\n\n function scopeBatch<T>(run: () => T): T;\n function scopeBatch<T>(options: { readonly cause?: unknown }, run: () => T): T;\n function scopeBatch<T>(\n optionsOrCallback: { readonly cause?: unknown } | (() => T),\n maybeCallback?: () => T\n ): T {\n assertActive();\n return typeof optionsOrCallback === 'function'\n ? batch(optionsOrCallback)\n : batch(optionsOrCallback, maybeCallback!);\n }\n\n return Object.freeze({\n input: scopedInput,\n derive: scopedDerive,\n incremental: scopedIncremental,\n get: <T>(projection: Projection<T, unknown>) => {\n assertActive();\n return get(projection, state);\n },\n readable: scopeReadable,\n set: <T>(target: Input<T>, value: T) => {\n assertActive();\n setInput(target, value, state);\n },\n update: <K extends string, V>(\n target: Input<ReadonlyMap<K, V>, CollectionChange<K, V>>,\n run: (draft: KeyedDraft<K, V>) => void\n ) => {\n assertActive();\n updateInput(target, run, state);\n },\n batch: scopeBatch,\n dispose: () => disposeScope(state),\n });\n };\n\n return Object.freeze({\n get,\n readable,\n set: setInput,\n update: updateInput,\n batch,\n scope: createScope,\n dispose: () => {\n if (!scheduler.active) return;\n scheduler.assertIdle();\n for (const scope of scopes) {\n scope.active = false;\n scope.subscriptions.forEach(unsubscribe => unsubscribe());\n scope.subscriptions.clear();\n scope.materialized.length = 0;\n }\n scopes.clear();\n sources.dispose();\n scheduler.dispose();\n },\n });\n};\n"],"mappings":"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"}
|