doxum 0.1.4 → 0.1.6
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 +46 -5
- package/dist/{contract-BsY1XLiG.d.ts → contract-I99DUMbN.d.ts} +53 -40
- package/dist/{contract-D8kjdfqT.d.cts → contract-uYJTmT8o.d.cts} +53 -40
- package/dist/index.cjs +244 -630
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -64
- package/dist/index.d.ts +3 -64
- package/dist/index.js +182 -569
- package/dist/index.js.map +1 -1
- package/dist/integration-Bs3pOk65.cjs +35 -0
- package/dist/integration-Bs3pOk65.cjs.map +1 -0
- package/dist/integration-xupBIKjU.js +30 -0
- package/dist/integration-xupBIKjU.js.map +1 -0
- package/dist/integration.cjs +4 -14
- package/dist/integration.d.cts +3 -2
- package/dist/integration.d.ts +3 -2
- package/dist/integration.js +3 -14
- package/dist/local-sync.cjs +1 -1
- package/dist/local-sync.d.cts +1 -1
- package/dist/local-sync.d.ts +1 -1
- package/dist/local-sync.js +1 -1
- package/dist/{ownership-CU-9DKJQ.cjs → ownership-CY0nPXGF.cjs} +4 -1
- package/dist/ownership-CY0nPXGF.cjs.map +1 -0
- package/dist/{ownership-B-VAPcce.js → ownership-CduRygE7.js} +4 -1
- package/dist/ownership-CduRygE7.js.map +1 -0
- package/dist/react.cjs +1 -1
- package/dist/react.js +1 -1
- package/dist/runtime-BJRXF0gq.js +1735 -0
- package/dist/runtime-BJRXF0gq.js.map +1 -0
- package/dist/runtime-CRijXjYp.cjs +1991 -0
- package/dist/runtime-CRijXjYp.cjs.map +1 -0
- package/dist/runtime-CUcvhFNP.d.ts +152 -0
- package/dist/runtime-C_vKHmhy.d.cts +152 -0
- package/package.json +1 -1
- package/skills/doxum-runtime/references/guide.en.md +35 -18
- package/skills/doxum-runtime/references/guide.zh-CN.md +26 -14
- package/skills/doxum-runtime/references/invariants.en.md +12 -9
- package/skills/doxum-runtime/references/invariants.zh-CN.md +2 -2
- package/skills/doxum-runtime/references/patterns.en.md +36 -56
- package/skills/doxum-runtime/references/patterns.zh-CN.md +27 -45
- package/dist/dependency-C5_R1tvQ.js +0 -496
- package/dist/dependency-C5_R1tvQ.js.map +0 -1
- package/dist/dependency-Dfzs3khk.cjs +0 -722
- package/dist/dependency-Dfzs3khk.cjs.map +0 -1
- package/dist/integration.cjs.map +0 -1
- package/dist/integration.js.map +0 -1
- package/dist/ownership-B-VAPcce.js.map +0 -1
- package/dist/ownership-CU-9DKJQ.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-BJRXF0gq.js","names":["schemaRoot","readAddress","isRecord","target.bucket","target.belongs","target.same"],"sources":["../core/src/schema.ts","../core/src/address.ts","../core/src/impact-target.ts","../core/src/access/reader.ts","../core/src/runtime/contract.ts","../core/src/runtime/access.ts","../core/src/runtime/notification.ts","../core/src/projection/contract.ts","../core/src/projection/scheduler.ts","../core/src/projection/source.ts","../core/src/projection/node.ts","../core/src/projection/value.ts","../core/src/projection/collection.ts","../core/src/projection/runtime.ts"],"sourcesContent":["export type DocumentAddress = readonly string[];\n\nexport type DocumentListConfig<TItem> = {\n readonly keyOf: (item: TItem) => string;\n};\nexport type DocumentTreeNode<TValue> = {\n readonly parentId?: string;\n readonly children: readonly string[];\n readonly value?: 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} & (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> = 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 SingleNode<TValue extends ObjectNode<ObjectShape> | VariantNode<string, VariantShape>> =\n BaseNode<'single'> & {\n readonly value: TValue;\n };\nexport type TableNode<TValue extends ObjectNode<ObjectShape> | VariantNode<string, VariantShape>> =\n BaseNode<'table'> & {\n readonly value: TValue;\n };\nexport type MapNode<TValue extends ObjectNode<ObjectShape> | VariantNode<string, VariantShape>> =\n BaseNode<'map'> & {\n readonly value: TValue;\n };\nexport type RecordNode<TId extends string, TValue> = BaseNode<'record'> & {\n readonly __id?: TId;\n readonly __value?: TValue;\n};\nexport type DictNode<TKey extends string, TValue> = BaseNode<'dict'> & {\n readonly __key?: TKey;\n readonly __value?: TValue;\n};\nexport type ListNode<TItem> = BaseNode<'list'> & {\n readonly __item?: TItem;\n keyOf(item: TItem): string;\n};\nexport type TreeNode<TValue> = BaseNode<'tree'> & {\n readonly __value?: TValue;\n};\n\nexport type DocumentNode =\n | FieldNode<unknown, false>\n | FieldNode<unknown, true>\n | ObjectNode<ObjectShape>\n | VariantNode<string, VariantShape>\n | SingleNode<ObjectNode<ObjectShape> | VariantNode<string, VariantShape>>\n | TableNode<ObjectNode<ObjectShape> | VariantNode<string, VariantShape>>\n | MapNode<ObjectNode<ObjectShape> | VariantNode<string, VariantShape>>\n | RecordNode<string, unknown>\n | DictNode<string, unknown>\n | ListNode<unknown>\n | TreeNode<unknown>;\n\ntype EntityValue<N extends ObjectNode<ObjectShape> | VariantNode<string, VariantShape>> =\n N extends ObjectNode<infer S>\n ? DocumentValueOfShape<S>\n : N extends VariantNode<infer T, infer V>\n ? {\n [K in keyof V & string]: { [P in T]: K } & DocumentValueOfShape<\n V[K] extends ObjectNode<infer S> ? S : never\n >;\n }[keyof V & string]\n : never;\n\nexport type DocumentValueOfNode<N> =\n N extends FieldNode<infer T, infer O>\n ? O extends true\n ? T | undefined\n : T\n : N extends ObjectNode<infer S>\n ? DocumentValueOfShape<S>\n : N extends VariantNode<infer T, infer V>\n ? EntityValue<VariantNode<T, V>>\n : N extends SingleNode<infer V>\n ? EntityValue<V>\n : N extends TableNode<infer V>\n ? {\n readonly ids: readonly string[];\n readonly byId: Readonly<Record<string, EntityValue<V>>>;\n }\n : N extends MapNode<infer V>\n ? Readonly<Record<string, EntityValue<V>>>\n : N extends RecordNode<infer I, infer T>\n ? Readonly<Record<I, T>>\n : N extends DictNode<infer K, infer T>\n ? Readonly<Partial<Record<K, T>>>\n : N extends ListNode<infer I>\n ? readonly 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>>;\nexport type DocumentValueOfShape<S extends ObjectShape> = {\n readonly [K in RequiredKeys<S>]: DocumentValueOfNode<S[K]>;\n} & { readonly [K in OptionalKeys<S>]?: DocumentValueOfNode<S[K]> };\nexport type ReadonlyDocument<S extends DocumentSchema> = DocumentValueOfShape<S['shape']>;\n\nexport type EntitySchemaNode = ObjectNode<ObjectShape> | VariantNode<string, VariantShape>;\n\nexport type CollectionSelector<\n TId extends string = string,\n TNode extends EntitySchemaNode = EntitySchemaNode,\n> = {\n readonly kind: 'collection';\n readonly schema: DocumentSchema;\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: DocumentSchema;\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>;\ntype PathMarker<TValue> = { readonly __value?: TValue };\n\ntype SchemaPathFor<S extends ObjectShape = ObjectShape, TValue = unknown> = {\n readonly [K in keyof S]: PathValue<S[K]>;\n} & {\n readonly item: (id: string) => SchemaPathFor<{}, unknown>;\n} & PathMarker<TValue>;\n\nexport type DocumentSchema<TShape extends ObjectShape = {}> = {\n readonly kind: 'schema';\n readonly shape: TShape;\n collection<TPath extends PathMarker<unknown>>(\n pick: (path: SchemaPath<TShape>) => TPath\n ): CollectionSelector<CollectionId<TPath>, CollectionNode<TPath>>;\n value<TPath extends PathMarker<unknown>>(\n pick: (path: SchemaPath<TShape>) => TPath\n ): ValueSelector<PathValueResult<TPath>>;\n};\n\nexport type SchemaPath<S extends ObjectShape = {}> = SchemaPathFor<S, DocumentValueOfShape<S>>;\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<V extends VariantShape> = {\n readonly [K in VariantKeys<V>]: VariantFieldPath<V, K>;\n} & {\n readonly item: (id: string) => SchemaPathFor<{}, unknown>;\n} & PathMarker<EntityValue<VariantNode<string, V>>>;\ntype PathNodeValue<N extends DocumentNode> = N extends { readonly optional: true }\n ? DocumentValueOfNode<N> | undefined\n : DocumentValueOfNode<N>;\ntype EntityPath<N extends ObjectNode<ObjectShape> | VariantNode<string, VariantShape>> =\n N extends ObjectNode<infer S>\n ? SchemaPathFor<S, PathNodeValue<N>>\n : N extends VariantNode<string, infer V>\n ? VariantPath<V>\n : never;\ntype CollectionPath<N extends ObjectNode<ObjectShape> | VariantNode<string, VariantShape>> = Omit<\n EntityPath<N>,\n 'item'\n> & {\n readonly item: (id: string) => EntityPath<N>;\n readonly __collection?: {\n readonly id: string;\n readonly node: N;\n };\n};\n\ntype PathValue<N extends DocumentNode> =\n N extends ObjectNode<infer S>\n ? SchemaPathFor<S, PathNodeValue<N>>\n : N extends VariantNode<infer _TTag, infer V>\n ? VariantPath<V>\n : N extends TableNode<infer V> | MapNode<infer V>\n ? CollectionPath<V>\n : N extends SingleNode<infer V>\n ? EntityPath<V>\n : SchemaPathFor<{}, PathNodeValue<N>>;\ntype CollectionInfo<T> = T extends {\n readonly __collection?: {\n readonly id: infer TId;\n readonly node: infer TNode extends EntitySchemaNode;\n };\n}\n ? { readonly id: TId; readonly node: TNode }\n : never;\ntype 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 EntitySchemaNode }\n ? TNode\n : EntitySchemaNode;\ntype PathValueResult<T> = T extends PathMarker<infer TValue> ? TValue : unknown;\n\nconst node = <T extends DocumentNode>(value: T): T => Object.freeze(value);\nexport const field = <T>(): FieldNode<T> => node({ kind: 'field' });\nexport const optional = <T extends DocumentNode>(value: T): OptionalNode<T> =>\n node({ ...value, optional: true } as OptionalNode<T>);\nexport const object = <S extends ObjectShape>(shape: S): ObjectNode<S> =>\n node({ kind: 'object', 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 });\nexport const single = <V extends ObjectNode<ObjectShape> | VariantNode<string, VariantShape>>(\n value: V\n): SingleNode<V> => node({ kind: 'single', value });\nexport const table = <V extends ObjectNode<ObjectShape> | VariantNode<string, VariantShape>>(\n value: V\n): TableNode<V> => node({ kind: 'table', value });\nexport const map = <V extends ObjectNode<ObjectShape> | VariantNode<string, VariantShape>>(\n value: V\n): MapNode<V> => node({ kind: 'map', value });\nexport const record = <TId extends string = string, TValue = unknown>(): RecordNode<TId, TValue> =>\n node({ kind: 'record' });\nexport const dict = <TKey extends string = string, TValue = unknown>(): DictNode<TKey, TValue> =>\n node({ kind: 'dict' });\nexport const list = <TItem>(config: DocumentListConfig<TItem>): ListNode<TItem> =>\n ({ kind: 'list', keyOf: config.keyOf }) as ListNode<TItem>;\nexport const tree = <TValue = unknown>(): TreeNode<TValue> => node({ kind: 'tree' });\n\nconst pathProxy = (address: DocumentAddress): SchemaPath & { readonly address: DocumentAddress } =>\n new Proxy({ address } as SchemaPath & { readonly address: DocumentAddress }, {\n get: (_target, property: string | symbol) => {\n if (property === 'address') return address;\n if (property === 'item') return (id: string) => pathProxy([...address, id]);\n if (typeof property === 'symbol') return undefined;\n return pathProxy([...address, property]);\n },\n });\n\nconst select = <S extends ObjectShape>(\n owner: DocumentSchema<S>,\n kind: 'collection' | 'value',\n pick: (path: SchemaPath<S>) => unknown\n): CollectionSelector | ValueSelector => {\n const value = pick(pathProxy([]) as unknown as SchemaPath<S>);\n const selected = value as { readonly address?: DocumentAddress };\n return Object.freeze({\n kind,\n schema: owner,\n address: Object.freeze([...(selected.address ?? [])]),\n }) as CollectionSelector | ValueSelector;\n};\n\nexport const schema = <S extends ObjectShape>(shape: S): DocumentSchema<S> => {\n const result: DocumentSchema<S> = {\n kind: 'schema',\n shape,\n collection: <TPath extends PathMarker<unknown>>(pick: (path: SchemaPath<S>) => TPath) =>\n select(result, 'collection', pick) as CollectionSelector<\n CollectionId<TPath>,\n CollectionNode<TPath>\n >,\n value: <TPath extends PathMarker<unknown>>(pick: (path: SchemaPath<S>) => TPath) =>\n select(result, 'value', pick) as ValueSelector<PathValueResult<TPath>>,\n };\n return Object.freeze(result);\n};\n","import type { DocumentAddress, DocumentNode, DocumentSchema, ObjectShape } from './schema';\nimport { profile } from './profile';\n\n/** The only resolved address representation used inside the runtime. */\nexport type AddressRef = {\n readonly path: number;\n readonly address: DocumentAddress;\n};\n\ntype RegistryNode = {\n readonly static: Map<string, RegistryNode>;\n dynamic?: RegistryNode;\n path?: number;\n};\n\ntype Registry = {\n readonly root: RegistryNode;\n nextPath: number;\n};\n\nconst registries = new WeakMap<object, Registry>();\nconst registryNode = (): RegistryNode => ({ static: new Map() });\nconst registryFor = (schema: DocumentSchema): Registry => {\n const cached = registries.get(schema as object);\n if (cached) return cached;\n const registry: Registry = { root: registryNode(), nextPath: 0 };\n registries.set(schema as object, registry);\n return registry;\n};\n\nconst hashText = (value: string, seed: number): number => {\n let hash = seed;\n for (let index = 0; index < value.length; index += 1)\n hash = Math.imul(hash ^ value.charCodeAt(index), 16_777_619);\n return hash >>> 0;\n};\n\nconst appendAddressHash = (hash: number, segment: string): number =>\n hashText(segment, hashText('/', hash));\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst unwrap = (node: DocumentNode | undefined): DocumentNode | undefined => {\n let current = node;\n while (current?.kind === 'single') current = current.value;\n return current;\n};\n\nconst variantNode = (\n node: Extract<DocumentNode, { kind: 'variant' }>,\n value: unknown\n): DocumentNode | undefined => {\n const tag = isRecord(value) && typeof value[node.tag] === 'string' ? value[node.tag] : undefined;\n return node.variants[String(tag ?? Object.keys(node.variants)[0] ?? '')];\n};\n\nconst schemaRoot = (schema: DocumentSchema): DocumentNode => ({\n kind: 'object',\n shape: schema.shape,\n});\n\ntype Step = {\n readonly node: DocumentNode | undefined;\n readonly dynamic: boolean;\n};\n\nconst step = (nodeInput: DocumentNode | undefined, value: unknown, segment: string): Step => {\n let node = unwrap(nodeInput);\n if (!node) return { node: undefined, dynamic: false };\n if (node.kind === 'variant') {\n node = unwrap(variantNode(node, value));\n }\n if (!node) return { node: undefined, dynamic: false };\n if (node.kind === 'object') return { node: node.shape[segment], dynamic: false };\n if (node.kind === 'table' || node.kind === 'map') return { node: node.value, dynamic: true };\n // These nodes use operation-specific keys rather than address segments, but\n // accepting a dynamic step keeps address resolution total for user targets.\n if (\n node.kind === 'record' ||\n node.kind === 'dict' ||\n node.kind === 'list' ||\n node.kind === 'tree'\n )\n return { node, dynamic: true };\n return { node: undefined, dynamic: false };\n};\n\nconst pathFor = (\n schema: DocumentSchema,\n address: DocumentAddress,\n document?: unknown\n): number | undefined => {\n const registry = registryFor(schema);\n let trie = registry.root;\n let node: DocumentNode | undefined = schemaRoot(schema);\n let value: unknown = document;\n for (const segment of address) {\n profile.address.schemaStep();\n profile.address.documentStep();\n const resolved = step(node, value, segment);\n if (!resolved.node) return undefined;\n const next = resolved.dynamic\n ? (trie.dynamic ??= registryNode())\n : (() => {\n const existing = trie.static.get(segment);\n if (existing) return existing;\n const created = registryNode();\n trie.static.set(segment, created);\n return created;\n })();\n trie = next;\n node = resolved.node;\n value = readSegment(value, segment);\n }\n if (trie.path === undefined) trie.path = registry.nextPath++;\n return trie.path;\n};\n\nexport const resolveAddress = (\n schema: DocumentSchema,\n address: DocumentAddress,\n document?: unknown\n): AddressRef | undefined => {\n if (!Array.isArray(address)) return undefined;\n for (const segment of address) if (typeof segment !== 'string') return undefined;\n profile.address.arrayCopied();\n const owned = Object.freeze(address.slice()) as DocumentAddress;\n const path = pathFor(schema, owned, document);\n return path === undefined ? undefined : { path, address: owned };\n};\n\nexport const nodeAt = (\n schema: DocumentSchema,\n address: DocumentAddress,\n document?: unknown\n): DocumentNode | undefined => {\n let node: DocumentNode | undefined = schemaRoot(schema);\n let value = document;\n for (const segment of address) {\n const resolved = step(node, value, segment);\n node = resolved.node;\n value = readSegment(value, segment);\n if (!node) return undefined;\n }\n return unwrap(node);\n};\n\nexport const readSegment = (value: unknown, segment: string): unknown => {\n if (!isRecord(value) && !Array.isArray(value)) return undefined;\n if (isRecord(value) && 'byId' in value && isRecord(value.byId)) {\n const entity = value.byId[segment];\n if (entity !== undefined || Object.prototype.hasOwnProperty.call(value.byId, segment))\n return entity;\n }\n return (value as Record<string, unknown>)[segment];\n};\n\nexport const read = (root: unknown, address: DocumentAddress): unknown => {\n let value = root;\n for (const segment of address) {\n value = readSegment(value, segment);\n if (value === undefined) return undefined;\n }\n return value;\n};\n\nexport type Located = {\n readonly parent: Record<string, unknown> | unknown[];\n readonly key: string | number;\n readonly value: unknown;\n};\n\ntype ResolvedCollection = {\n readonly address: DocumentAddress;\n readonly addressHash: number;\n readonly id: string;\n readonly parent?: ResolvedCollection;\n};\n\nexport type ResolvedAddress = Located & {\n readonly addressHash: number;\n readonly node: DocumentNode;\n readonly collection?: ResolvedCollection;\n};\n\n/** Resolves schema and document location in one address traversal. */\nexport const resolveLocated = (\n schema: DocumentSchema,\n root: unknown,\n address: DocumentAddress\n): ResolvedAddress | undefined => {\n if (address.length === 0) return undefined;\n let node: DocumentNode | undefined = schemaRoot(schema);\n let current: unknown = root;\n let collection: ResolvedCollection | undefined;\n let addressHash = 2_166_136_261;\n for (let index = 0; index < address.length - 1; index += 1) {\n profile.address.schemaStep();\n profile.address.documentStep();\n const resolved = step(node, current, address[index]);\n if (!resolved.node) return undefined;\n if (node?.kind === 'table' || node?.kind === 'map')\n collection = {\n address: address.slice(0, index),\n addressHash,\n id: address[index],\n ...(collection ? { parent: collection } : {}),\n };\n addressHash = appendAddressHash(addressHash, address[index]);\n node = resolved.node;\n current = readSegment(current, address[index]);\n if (!node) return undefined;\n }\n profile.address.schemaStep();\n profile.address.documentStep();\n const last = address[address.length - 1];\n const resolved = step(node, current, last);\n if (!resolved.node || (!isRecord(current) && !Array.isArray(current))) return undefined;\n if (node?.kind === 'table' || node?.kind === 'map')\n collection = {\n address: address.slice(0, -1),\n addressHash,\n id: last,\n ...(collection ? { parent: collection } : {}),\n };\n addressHash = appendAddressHash(addressHash, last);\n if (isRecord(current) && 'byId' in current && isRecord(current.byId) && last in current.byId)\n return {\n addressHash,\n node: resolved.node,\n parent: current.byId,\n key: last,\n value: current.byId[last],\n ...(collection ? { collection } : {}),\n };\n return {\n addressHash,\n node: resolved.node,\n parent: current,\n key: Array.isArray(current) && /^\\d+$/.test(last) ? Number(last) : last,\n value: readSegment(current, last),\n ...(collection ? { collection } : {}),\n };\n};\n\nexport const locate = (root: unknown, address: DocumentAddress): Located | undefined => {\n if (address.length === 0) return undefined;\n let current: unknown = root;\n for (let index = 0; index < address.length - 1; index += 1)\n current = readSegment(current, address[index]);\n if (!isRecord(current) && !Array.isArray(current)) return undefined;\n const last = address[address.length - 1];\n if (isRecord(current) && 'byId' in current && isRecord(current.byId) && last in current.byId)\n return { parent: current.byId, key: last, value: current.byId[last] };\n return {\n parent: current,\n key: Array.isArray(current) && /^\\d+$/.test(last) ? Number(last) : last,\n value: readSegment(current, last),\n };\n};\n\nexport const set = (root: unknown, address: DocumentAddress, value: unknown): boolean => {\n const target = locate(root, address);\n if (!target) return false;\n (target.parent as Record<string | number, unknown>)[target.key] = value;\n return true;\n};\n\nexport const remove = (root: unknown, address: DocumentAddress): boolean => {\n const target = locate(root, address);\n if (!target || !Object.prototype.hasOwnProperty.call(target.parent, target.key)) return false;\n if (Array.isArray(target.parent)) target.parent.splice(Number(target.key), 1);\n else delete target.parent[String(target.key)];\n return true;\n};\n\nexport const contains = (parent: DocumentAddress, child: DocumentAddress): boolean => {\n profile.address.prefixComparison();\n if (parent.length > child.length) return false;\n for (let index = 0; index < parent.length; index += 1) {\n profile.address.segmentCompared();\n if (parent[index] !== child[index]) return false;\n }\n return true;\n};\n\nexport const overlaps = (a: DocumentAddress, b: DocumentAddress): boolean =>\n contains(a, b) || contains(b, a);\n\nexport const debugKey = (address: DocumentAddress): string => {\n let result = '';\n for (let index = 0; index < address.length; index += 1) {\n if (index > 0) result += '/';\n result += address[index].replaceAll('~', '~~').replaceAll('/', '~/');\n }\n return result;\n};\n\nexport const same = (a: AddressRef, b: AddressRef): boolean => {\n if (a.path !== b.path || a.address.length !== b.address.length) return false;\n for (let index = 0; index < a.address.length; index += 1) {\n profile.address.segmentCompared();\n if (a.address[index] !== b.address[index]) return false;\n }\n return true;\n};\n\nexport type { DocumentAddress } from './schema';\n","import type { DocumentAddress, DocumentSchema, ImpactTarget } from './schema';\n\nexport const address = (target: ImpactTarget<unknown>): DocumentAddress =>\n 'at' in target ? target.at : target.address;\n\nexport const id = (target: ImpactTarget<unknown>): string | undefined =>\n target.kind === 'collection' && 'id' in target ? target.id : undefined;\n\nexport const belongs = (target: ImpactTarget<unknown>, schema: DocumentSchema): boolean =>\n !('schema' in target) || target.schema === schema;\n\nexport const same = (left: ImpactTarget<unknown>, right: ImpactTarget<unknown>): boolean => {\n if (left.kind !== right.kind) return false;\n if ('schema' in left && 'schema' in right && left.schema !== right.schema) return false;\n const leftAddress = address(left);\n const rightAddress = address(right);\n if (leftAddress.length !== rightAddress.length) return false;\n for (let index = 0; index < leftAddress.length; index += 1)\n if (leftAddress[index] !== rightAddress[index]) return false;\n return left.kind !== 'collection' || id(left) === id(right);\n};\n\nexport const bucket = (target: ImpactTarget<unknown>): string | undefined => address(target)[0];\n","import { object } from '../schema';\nimport type {\n DictNode,\n DocumentAddress,\n DocumentNode,\n DocumentSchema,\n DocumentValueOfNode,\n EntitySchemaNode,\n ImpactTarget,\n ListNode,\n MapNode,\n ObjectNode,\n ReadonlyDocument,\n SingleNode,\n TableNode,\n TreeNode,\n VariantNode,\n} from '../schema';\nimport { read as readAddress } from '../address';\nimport { cloneValue, isRecord } from '../value/ownership';\nimport { profile } from '../profile';\nimport type { DependencyTracker } from './dependency';\n\nexport type FieldReader<T> = { readonly get: () => T };\nexport type CollectionReader<TId, TNode extends EntitySchemaNode> = {\n readonly ids: () => readonly TId[];\n readonly has: (id: TId) => boolean;\n readonly get: (id: TId) => ReaderOfNode<TNode> | undefined;\n};\nexport type ListReader<T> = {\n readonly values: () => readonly T[];\n readonly length: () => number;\n readonly at: (index: number) => T | undefined;\n};\nexport type TreeReader<T> = {\n readonly rootId: () => string | undefined;\n readonly has: (id: string) => boolean;\n readonly value: (id: string) => T | undefined;\n readonly parent: (id: string) => string | undefined;\n readonly children: (id: string) => readonly string[];\n};\n\nexport type ReaderOfNode<TNode extends DocumentNode> = TNode extends {\n kind: 'field';\n}\n ? FieldReader<DocumentValueOfNode<TNode>>\n : TNode extends ObjectNode<infer TShape>\n ? { readonly [K in keyof TShape]: ReaderOfNode<TShape[K]> }\n : TNode extends VariantNode<string, infer TVariants>\n ? { readonly [K in keyof TVariants]: ReaderOfNode<TVariants[K]> }\n : TNode extends SingleNode<infer TValue>\n ? ReaderOfNode<TValue>\n : TNode extends TableNode<infer TValue>\n ? CollectionReader<string, TValue>\n : TNode extends MapNode<infer TValue>\n ? CollectionReader<string, TValue>\n : TNode extends DictNode<infer TKey, infer TValue>\n ? FieldReader<Readonly<Partial<Record<TKey, TValue>>>>\n : TNode extends ListNode<infer TItem>\n ? ListReader<TItem>\n : TNode extends TreeNode<infer TValue>\n ? TreeReader<TValue>\n : FieldReader<DocumentValueOfNode<TNode>>;\nexport type DocumentReader<TSchema extends DocumentSchema> = ReaderOfNode<\n ObjectNode<TSchema['shape']>\n>;\n\nexport type ReaderContext = {\n readonly root: () => unknown;\n readonly active: () => boolean;\n readonly dependencies?: DependencyTracker;\n};\n\nconst schemaRoot = (schema: DocumentSchema): DocumentNode => object(schema.shape);\n\nconst assertActive = (context: ReaderContext): void => {\n if (!context.active()) throw new Error('Document reader is no longer active.');\n};\n\nconst readAt = (context: ReaderContext, address: DocumentAddress): unknown => {\n assertActive(context);\n profile.reader.lookup();\n return readAddress(context.root(), address);\n};\n\nconst collectValue = (context: ReaderContext, address: DocumentAddress): void => {\n context.dependencies?.record({ kind: 'value', at: address });\n};\n\nconst collectCollection = (context: ReaderContext, address: DocumentAddress, id?: string): void => {\n const target: ImpactTarget<unknown> = {\n kind: 'collection',\n at: address,\n ...(id === undefined ? {} : { id }),\n };\n context.dependencies?.record(target);\n};\n\nexport const readerFor = (\n node: DocumentNode,\n context: ReaderContext,\n address: DocumentAddress = []\n): unknown => {\n if (node.kind === 'field')\n return {\n get: () => {\n collectValue(context, address);\n return readAt(context, address);\n },\n };\n if (node.kind === 'dict' || node.kind === 'record')\n return {\n get: () => {\n collectValue(context, address);\n profile.reader.structuralSnapshot();\n return cloneValue(readAt(context, address), 'reader');\n },\n };\n if (node.kind === 'list')\n return {\n values: () => {\n collectValue(context, address);\n const value = readAt(context, address);\n profile.reader.structuralSnapshot();\n return cloneValue(Array.isArray(value) ? value : [], 'reader');\n },\n length: () => {\n collectValue(context, address);\n const value = readAt(context, address);\n return Array.isArray(value) ? value.length : 0;\n },\n at: (index: number) => {\n collectValue(context, address);\n const value = readAt(context, address);\n profile.reader.structuralSnapshot();\n return cloneValue(Array.isArray(value) ? value[index] : undefined, 'reader');\n },\n };\n if (node.kind === 'tree')\n return {\n rootId: () => {\n collectValue(context, address);\n const value = readAt(context, address);\n return isRecord(value) && typeof value.rootId === 'string' ? value.rootId : undefined;\n },\n has: (id: string) => {\n collectValue(context, address);\n const value = readAt(context, address);\n return (\n isRecord(value) &&\n isRecord(value.nodes) &&\n Object.prototype.hasOwnProperty.call(value.nodes, id)\n );\n },\n value: (id: string) => {\n collectValue(context, address);\n const value = readAt(context, address);\n profile.reader.structuralSnapshot();\n return cloneValue(\n isRecord(value) && isRecord(value.nodes) && isRecord(value.nodes[id])\n ? value.nodes[id].value\n : undefined,\n 'reader'\n );\n },\n parent: (id: string) => {\n collectValue(context, address);\n const value = readAt(context, address);\n const entry = isRecord(value) && isRecord(value.nodes) ? value.nodes[id] : undefined;\n return isRecord(entry) && typeof entry.parentId === 'string' ? entry.parentId : undefined;\n },\n children: (id: string) => {\n collectValue(context, address);\n const value = readAt(context, address);\n const entry = isRecord(value) && isRecord(value.nodes) ? value.nodes[id] : undefined;\n return isRecord(entry) && Array.isArray(entry.children) ? [...entry.children] : [];\n },\n };\n if (node.kind === 'table' || node.kind === 'map') {\n let items: Map<string, unknown> | undefined;\n return {\n ids: () => {\n collectCollection(context, address);\n const value = readAt(context, address);\n const ids =\n node.kind === 'table' && isRecord(value) && Array.isArray(value.ids)\n ? [...value.ids]\n : isRecord(value)\n ? Object.keys(value)\n : [];\n profile.reader.collectionIds(ids.length);\n return ids;\n },\n has: (id: string) => {\n collectCollection(context, address, id);\n const value = readAt(context, address);\n const byId =\n node.kind === 'table' && isRecord(value) && isRecord(value.byId) ? value.byId : value;\n return isRecord(byId) && Object.prototype.hasOwnProperty.call(byId, id);\n },\n get: (id: string) => {\n collectCollection(context, address, id);\n const value = readAt(context, address);\n const byId =\n node.kind === 'table' && isRecord(value) && isRecord(value.byId) ? value.byId : value;\n if (!isRecord(byId) || !Object.prototype.hasOwnProperty.call(byId, id)) return undefined;\n const cached = items?.get(id);\n if (cached) return cached as ReaderOfNode<typeof node.value>;\n const reader = readerFor(node.value, context, [...address, id]);\n (items ??= new Map()).set(id, reader);\n return reader;\n },\n };\n }\n if (node.kind === 'single') return readerFor(node.value, context, address);\n if (node.kind === 'variant')\n return new Proxy(\n {},\n {\n get: (_target, property: string | symbol) => {\n if (typeof property === 'symbol') return undefined;\n const value = readAt(context, address);\n const tag =\n isRecord(value) && typeof value[node.tag] === 'string'\n ? String(value[node.tag])\n : undefined;\n const branch = tag ? node.variants[tag] : undefined;\n const child = branch?.shape[property];\n return child ? readerFor(child, context, [...address, property]) : undefined;\n },\n }\n );\n\n let children: Map<string, unknown> | undefined;\n return new Proxy(\n {},\n {\n get: (_target, property: string | symbol) => {\n if (typeof property === 'symbol') return undefined;\n const child = node.shape[property];\n if (!child) return undefined;\n const cached = children?.get(property);\n if (cached) return cached;\n const reader = readerFor(child, context, [...address, property]);\n (children ??= new Map()).set(property, reader);\n return reader;\n },\n }\n );\n};\n\nexport const documentReader = <TSchema extends DocumentSchema>(\n schema: TSchema,\n root: () => ReadonlyDocument<TSchema>,\n active: () => boolean,\n dependencies?: DependencyTracker\n): DocumentReader<TSchema> => {\n profile.reader.session();\n return readerFor(schemaRoot(schema), {\n root,\n active,\n dependencies,\n }) as DocumentReader<TSchema>;\n};\n","import type { DocumentAddress, DocumentSchema, ImpactTarget, ReadonlyDocument } from '../schema';\nimport type { AddressRef } from '../address';\nimport type { DocumentOperationUnion } from '../operations';\nimport type { DocumentImpact } from '../impact';\nimport type { DocumentReader } from '../access/reader';\nimport type { DocumentWriter } from '../access/writer';\nimport type { MutationIssue } from '../mutation/issue';\nimport type { CommandFootprint } from '../mutation/footprint';\n\nexport type Unsubscribe = () => void;\nexport type CommitSource = 'local' | 'system' | 'history' | 'remote';\n\nexport class DocumentReentrancyError extends Error {\n constructor() {\n super('Document writes cannot be re-entered during an update or notification.');\n this.name = 'DocumentReentrancyError';\n }\n}\n\nexport class DocumentDisposedError extends Error {\n constructor() {\n super('Doxum runtime has been disposed.');\n this.name = 'DocumentDisposedError';\n }\n}\nexport type DocumentCommit<TSchema extends DocumentSchema> = {\n readonly revision: number;\n readonly kind: 'operations' | 'replace';\n readonly source: CommitSource;\n readonly operations: readonly DocumentOperationUnion<TSchema>[];\n readonly inverse: readonly DocumentOperationUnion<TSchema>[];\n readonly impact: DocumentImpact<TSchema>;\n};\nexport type DocumentDiagnostic = {\n readonly source: 'application';\n readonly code: string;\n readonly message: string;\n readonly address?: DocumentAddress;\n};\nexport type DocumentProblem = DocumentDiagnostic | MutationIssue;\nexport type ObserverError = {\n readonly phase: 'processor' | 'flush' | 'listener';\n readonly error: unknown;\n};\nexport type TransactionResult<TValue, TCommit> =\n | {\n readonly status: 'committed';\n readonly value: TValue;\n readonly commit: TCommit;\n readonly reports: readonly DocumentDiagnostic[];\n readonly observerErrors: readonly ObserverError[];\n }\n | {\n readonly status: 'unchanged';\n readonly value: TValue;\n readonly revision: number;\n readonly reports: readonly DocumentDiagnostic[];\n }\n | {\n readonly status: 'rejected';\n readonly issues: readonly DocumentProblem[];\n readonly revision: number;\n };\nexport type PreparedUpdateResult<TValue, TSchema extends DocumentSchema> =\n | {\n readonly status: 'prepared';\n readonly value: TValue;\n readonly operations: readonly DocumentOperationUnion<TSchema>[];\n readonly inverse: readonly DocumentOperationUnion<TSchema>[];\n readonly impact: DocumentImpact<TSchema>;\n readonly footprint: CommandFootprint;\n readonly reports: readonly DocumentDiagnostic[];\n }\n | {\n readonly status: 'unchanged';\n readonly value: TValue;\n readonly reports: readonly DocumentDiagnostic[];\n }\n | {\n readonly status: 'rejected';\n readonly issues: readonly DocumentProblem[];\n };\nexport type OperationResult<TCommit> =\n | {\n readonly status: 'committed';\n readonly commit: TCommit;\n readonly observerErrors: readonly ObserverError[];\n }\n | { readonly status: 'unchanged'; readonly revision: number }\n | {\n readonly status: 'rejected';\n readonly issues: readonly MutationIssue[];\n readonly revision: number;\n };\n\nexport type HistoryState = {\n readonly undoDepth: number;\n readonly redoDepth: number;\n};\nexport type LocalHistory<TCommit> = {\n current(): HistoryState;\n subscribe(listener: () => void): Unsubscribe;\n undo(): OperationResult<TCommit>;\n redo(): OperationResult<TCommit>;\n clear(): void;\n};\n\nexport type DocumentTransaction<TSchema extends DocumentSchema> = {\n readonly read: DocumentReader<TSchema>;\n readonly write: DocumentWriter<TSchema>;\n readonly reject: (issue: DocumentDiagnostic | readonly DocumentDiagnostic[]) => never;\n readonly report: (issue: DocumentDiagnostic) => void;\n};\nexport type CommitListener<TSchema extends DocumentSchema> = (\n commit: DocumentCommit<TSchema>\n) => void;\n\nexport type DocumentReadable<TSchema extends DocumentSchema> = {\n readonly address: {\n readonly resolve: (address: DocumentAddress) => AddressRef | undefined;\n readonly read: (address: DocumentAddress) => unknown;\n readonly contains: (parent: DocumentAddress, child: DocumentAddress) => boolean;\n readonly overlaps: (left: DocumentAddress, right: DocumentAddress) => boolean;\n readonly debugKey: (address: DocumentAddress) => string;\n };\n revision(): number;\n subscribe(listener: CommitListener<TSchema>): Unsubscribe;\n subscribe(\n target: ImpactTarget<unknown> | readonly [ImpactTarget<unknown>, ...ImpactTarget<unknown>[]],\n listener: CommitListener<TSchema>\n ): Unsubscribe;\n};\n\nexport type DocumentRuntime<TSchema extends DocumentSchema> = DocumentReadable<TSchema> & {\n /** Schema configuration captured when this runtime was created. */\n readonly schema: TSchema;\n update<TResult>(\n run: (transaction: DocumentTransaction<TSchema>) => TResult,\n options?: {\n readonly source?: Extract<CommitSource, 'local' | 'system'>;\n readonly history?: boolean;\n }\n ): TransactionResult<TResult, DocumentCommit<TSchema>>;\n prepare<TResult>(\n run: (transaction: DocumentTransaction<TSchema>) => TResult\n ): PreparedUpdateResult<TResult, TSchema>;\n apply(\n operations: unknown,\n options?: {\n readonly source?: Exclude<CommitSource, 'history'>;\n readonly history?: boolean;\n }\n ): OperationResult<DocumentCommit<TSchema>>;\n replace(\n document: ReadonlyDocument<TSchema>,\n options?: { readonly source?: Extract<CommitSource, 'system' | 'remote'> }\n ): OperationResult<DocumentCommit<TSchema>>;\n snapshot(): ReadonlyDocument<TSchema>;\n readonly history: LocalHistory<DocumentCommit<TSchema>>;\n dispose(): void;\n};\n","import type { DocumentSchema, ReadonlyDocument } from '../schema';\nimport type { DocumentReader } from '../access/reader';\nimport { documentReader } from '../access/reader';\nimport type { DependencyTracker } from '../access/dependency';\nimport { DocumentDisposedError } from './contract';\nimport type { DocumentReadable } from './contract';\n\nexport type RuntimeAccessState<TSchema extends DocumentSchema> = {\n readonly schema: TSchema;\n document: ReadonlyDocument<TSchema>;\n disposed: boolean;\n projectionLocks?: number;\n};\n\nconst states = new WeakMap<object, RuntimeAccessState<DocumentSchema>>();\n\nexport const bindRuntimeAccess = <TSchema extends DocumentSchema>(\n runtime: DocumentReadable<TSchema>,\n state: RuntimeAccessState<TSchema>\n): void => {\n states.set(runtime as object, state as RuntimeAccessState<DocumentSchema>);\n};\n\nexport const accessOf = <TSchema extends DocumentSchema>(\n runtime: DocumentReadable<TSchema>\n): RuntimeAccessState<TSchema> => {\n const state = states.get(runtime as object);\n if (!state) throw new Error('Unknown Doxum runtime.');\n return state as RuntimeAccessState<TSchema>;\n};\n\nexport const schemaOf = <TSchema extends DocumentSchema>(\n runtime: DocumentReadable<TSchema>\n): TSchema => accessOf(runtime).schema;\n\nexport const documentOf = <TSchema extends DocumentSchema>(\n runtime: DocumentReadable<TSchema>\n): ReadonlyDocument<TSchema> => accessOf(runtime).document;\n\nexport const readWith = <TSchema extends DocumentSchema, TResult>(\n runtime: DocumentReadable<TSchema>,\n run: (read: DocumentReader<TSchema>) => TResult,\n dependencies?: DependencyTracker\n): TResult => {\n const state = accessOf(runtime);\n if (state.disposed) throw new DocumentDisposedError();\n let active = true;\n const reader = documentReader(\n state.schema,\n () => state.document,\n () => active,\n dependencies\n );\n try {\n return run(reader);\n } finally {\n // Readers are transaction-scoped; retaining one cannot expose later\n // mutable canonical state outside the coordinating operation.\n active = false;\n }\n};\n","import type { DocumentSchema, ImpactTarget } from '../schema';\nimport type {\n CommitListener,\n DocumentCommit,\n DocumentReadable,\n DocumentRuntime,\n Unsubscribe,\n ObserverError,\n} from './contract';\nimport * as target from '../impact-target';\n\nexport type ProjectionAttachment<TSchema extends DocumentSchema> = {\n capture(commit: DocumentCommit<TSchema>): void;\n settle(): void;\n flush(): readonly ObserverError[];\n dispose(): void;\n};\ntype ProcessorEntry<TSchema extends DocumentSchema> = {\n readonly processor: ProjectionAttachment<TSchema>;\n active: boolean;\n};\ntype RootEntry<TSchema extends DocumentSchema> = {\n readonly listener: CommitListener<TSchema>;\n active: boolean;\n};\ntype FilteredEntry<TSchema extends DocumentSchema> = {\n readonly targets: readonly ImpactTarget<unknown>[];\n readonly listener: CommitListener<TSchema>;\n active: boolean;\n};\nexport type RuntimeNotification<TSchema extends DocumentSchema> = {\n readonly root: Set<RootEntry<TSchema>>;\n readonly filtered: Set<FilteredEntry<TSchema>>;\n readonly buckets: Map<BucketKey, Set<FilteredEntry<TSchema>>>;\n readonly processors: ProcessorEntry<TSchema>[];\n readonly candidates: Set<FilteredEntry<TSchema>>;\n readonly rootSnapshot: RootEntry<TSchema>[];\n notifying: boolean;\n};\n\nconst ROOT_BUCKET = Symbol('document-root');\ntype BucketKey = string | typeof ROOT_BUCKET;\nconst notifications = new WeakMap<object, RuntimeNotification<DocumentSchema>>();\n\nconst key = (value: ImpactTarget<unknown>): BucketKey => target.bucket(value) ?? ROOT_BUCKET;\n\nexport const createNotification = <TSchema extends DocumentSchema>(\n runtime: DocumentReadable<TSchema>\n): RuntimeNotification<TSchema> => {\n const notification: RuntimeNotification<TSchema> = {\n root: new Set(),\n filtered: new Set(),\n buckets: new Map(),\n processors: [],\n candidates: new Set(),\n rootSnapshot: [],\n notifying: false,\n };\n notifications.set(runtime as object, notification as RuntimeNotification<DocumentSchema>);\n return notification;\n};\n\nconst notificationOf = <TSchema extends DocumentSchema>(\n runtime: DocumentReadable<TSchema>\n): RuntimeNotification<TSchema> => {\n const value = notifications.get(runtime as object);\n if (!value) throw new Error('Unknown Doxum runtime.');\n return value as RuntimeNotification<TSchema>;\n};\n\nexport const shareNotification = <TSchema extends DocumentSchema>(\n source: DocumentRuntime<TSchema>,\n target: DocumentReadable<TSchema>\n): void => {\n notifications.set(\n target as object,\n notificationOf(source) as RuntimeNotification<DocumentSchema>\n );\n};\n\nexport const attachProjection = <TSchema extends DocumentSchema>(\n runtime: DocumentReadable<TSchema>,\n processor: ProjectionAttachment<TSchema>\n): Unsubscribe => {\n const notification = notificationOf(runtime);\n const entry: ProcessorEntry<TSchema> = { processor, active: true };\n notification.processors.push(entry);\n return () => {\n if (!entry.active) return;\n entry.active = false;\n if (!notification.notifying) {\n const index = notification.processors.indexOf(entry);\n if (index >= 0) notification.processors.splice(index, 1);\n }\n };\n};\n\nexport const subscribeRoot = <TSchema extends DocumentSchema>(\n notification: RuntimeNotification<TSchema>,\n listener: CommitListener<TSchema>\n): Unsubscribe => {\n const entry: RootEntry<TSchema> = { listener, active: true };\n notification.root.add(entry);\n return () => {\n entry.active = false;\n if (!notification.notifying) notification.root.delete(entry);\n };\n};\n\nexport const subscribeTargets = <TSchema extends DocumentSchema>(\n notification: RuntimeNotification<TSchema>,\n targets: readonly ImpactTarget<unknown>[],\n listener: CommitListener<TSchema>\n): Unsubscribe => {\n const entry: FilteredEntry<TSchema> = {\n targets: Object.freeze(targets.slice()),\n listener,\n active: true,\n };\n notification.filtered.add(entry);\n const keys = new Set(targets.map(key));\n keys.forEach(key => {\n const bucket = notification.buckets.get(key) ?? new Set();\n bucket.add(entry);\n notification.buckets.set(key, bucket);\n });\n return () => {\n if (!entry.active) return;\n entry.active = false;\n if (notification.notifying) return;\n notification.filtered.delete(entry);\n keys.forEach(key => {\n const bucket = notification.buckets.get(key);\n bucket?.delete(entry);\n if (bucket?.size === 0) notification.buckets.delete(key);\n });\n };\n};\n\nexport const notify = <TSchema extends DocumentSchema>(\n notification: RuntimeNotification<TSchema>,\n commit: DocumentCommit<TSchema>\n): readonly ObserverError[] => {\n notification.notifying = true;\n const errors: ObserverError[] = [];\n const call = (listener: CommitListener<TSchema>): void => {\n try {\n listener(commit);\n } catch (error) {\n errors.push(Object.freeze({ phase: 'listener', error }));\n }\n };\n try {\n const processorCount = notification.processors.length;\n for (let index = 0; index < processorCount; index += 1) {\n const entry = notification.processors[index];\n if (!entry?.active) continue;\n try {\n entry.processor.capture(commit);\n } catch (error) {\n errors.push(Object.freeze({ phase: 'processor', error }));\n }\n }\n for (let index = 0; index < processorCount; index += 1) {\n const entry = notification.processors[index];\n if (!entry?.active) continue;\n try {\n entry.processor.settle();\n } catch (error) {\n errors.push(Object.freeze({ phase: 'processor', error }));\n }\n }\n for (let index = 0; index < processorCount; index += 1) {\n const entry = notification.processors[index];\n if (!entry?.active) continue;\n try {\n errors.push(...entry.processor.flush());\n } catch (error) {\n errors.push(Object.freeze({ phase: 'flush', error }));\n }\n }\n\n const candidates = notification.candidates;\n candidates.clear();\n if (commit.impact.kind === 'reset') {\n notification.filtered.forEach(entry => candidates.add(entry));\n } else {\n for (const operation of commit.operations) {\n const key = operation.at[0] ?? ROOT_BUCKET;\n notification.buckets.get(key)?.forEach(entry => candidates.add(entry));\n notification.buckets.get(ROOT_BUCKET)?.forEach(entry => candidates.add(entry));\n }\n }\n candidates.forEach(entry => {\n if (entry.active && entry.targets.some(commit.impact.affects)) call(entry.listener);\n });\n const rootSnapshot = notification.rootSnapshot;\n rootSnapshot.length = 0;\n notification.root.forEach(entry => rootSnapshot.push(entry));\n for (const entry of rootSnapshot) if (entry.active) call(entry.listener);\n } finally {\n notification.notifying = false;\n let writeIndex = 0;\n for (const entry of notification.processors)\n if (entry.active) notification.processors[writeIndex++] = entry;\n notification.processors.length = writeIndex;\n notification.root.forEach(entry => {\n if (!entry.active) notification.root.delete(entry);\n });\n notification.filtered.forEach(entry => {\n if (!entry.active) notification.filtered.delete(entry);\n });\n notification.buckets.forEach((bucket, key) => {\n bucket.forEach(entry => {\n if (!entry.active) bucket.delete(entry);\n });\n if (bucket.size === 0) notification.buckets.delete(key);\n });\n }\n return Object.freeze(errors);\n};\n\nexport const disposeNotification = <TSchema extends DocumentSchema>(\n notification: RuntimeNotification<TSchema>\n): void => {\n const attachments = notification.processors.slice();\n notification.root.clear();\n notification.filtered.clear();\n notification.buckets.clear();\n notification.processors.length = 0;\n notification.candidates.clear();\n notification.rootSnapshot.length = 0;\n const errors: unknown[] = [];\n attachments.forEach(entry => {\n if (!entry.active) return;\n try {\n entry.processor.dispose();\n } catch (error) {\n errors.push(error);\n }\n });\n if (errors.length) throw new AggregateError(errors, 'Projection disposal notification failed.');\n};\n","import type { CollectionReader, DocumentReader, ReaderOfNode } from '../access/reader';\nimport type { CollectionImpact } from '../impact';\nimport type { DocumentCommit, DocumentReadable, Unsubscribe } from '../runtime/contract';\nimport type {\n CollectionNode,\n CollectionSelector,\n DocumentSchema,\n EntitySchemaNode,\n ImpactTarget,\n SchemaPath,\n} from '../schema';\nimport type { Readable } from './readable';\n\ndeclare const sourceContext: unique symbol;\nexport type ProjectionSource<T> = { readonly [sourceContext]: T };\nexport type ProjectionSources = Readonly<Record<string, ProjectionSource<unknown>>>;\nexport type ProjectionInputs<S extends ProjectionSources> = {\n readonly [K in keyof S]: S[K] extends ProjectionSource<infer T> ? T : never;\n};\nexport type DocumentInput<S extends DocumentSchema> = {\n readonly read: DocumentReader<S>;\n readonly revision: number;\n readonly commits: readonly DocumentCommit<S>[];\n readonly reset: boolean;\n};\nexport type DocumentCollectionInput<S extends DocumentSchema, N extends EntitySchemaNode> = {\n readonly read: CollectionReader<string, N>;\n readonly target: CollectionSelector<string, N>;\n readonly revision: number;\n readonly commits: readonly DocumentCommit<S>[];\n readonly reset: boolean;\n};\ntype CollectionPath = {\n readonly __collection?: { readonly id: string; readonly node: EntitySchemaNode };\n};\nexport type DocumentSource<S extends DocumentSchema> = ProjectionSource<DocumentInput<S>> & {\n collection<P extends CollectionPath>(\n pick: (path: SchemaPath<S['shape']>) => P\n ): DocumentCollectionSource<S, CollectionNode<P>>;\n targets(\n ...targets: readonly [ImpactTarget, ...ImpactTarget[]]\n ): ProjectionSource<DocumentInput<S>>;\n};\nexport type DocumentCollectionSource<\n S extends DocumentSchema,\n N extends EntitySchemaNode,\n> = ProjectionSource<DocumentCollectionInput<S, N>>;\nexport type ValueInput<T> = {\n readonly value: T;\n readonly previous: T;\n readonly changed: boolean;\n readonly revision: number;\n readonly reset: boolean;\n};\nexport type ProjectionInput<T> = {\n readonly source: ProjectionSource<ValueInput<T>>;\n set(value: T): void;\n};\nexport type ValueUpdate<T> =\n | { readonly kind: 'unchanged' }\n | { readonly kind: 'changed'; readonly value: T }\n | { readonly kind: 'rebuild' };\nexport type ValueSpec<S extends ProjectionSources, T> = {\n readonly name?: string;\n readonly sources: S;\n readonly isEqual?: (previous: NoInfer<T>, next: NoInfer<T>) => boolean;\n readonly build: (sources: ProjectionInputs<S>) => {\n readonly value: T;\n readonly update: (sources: ProjectionInputs<S>) => ValueUpdate<NoInfer<T>>;\n };\n};\nexport type ProjectionValue<T> = Readable<T> &\n ProjectionSource<ValueInput<T>> & { rebuild(): void; dispose(): void };\nexport type CollectionRead<K extends string, V> = {\n get(key: K): V | undefined;\n has(key: K): boolean;\n ids(): readonly K[];\n};\nexport type CollectionInput<K extends string, V> = CollectionRead<K, V> & {\n readonly change: CollectionImpact<K> | undefined;\n readonly revision: number;\n readonly reset: boolean;\n};\nexport type ProjectionCollection<K extends string, V> = ProjectionSource<CollectionInput<K, V>> & {\n readonly ids: Readable<readonly K[]>;\n readonly all: Readable<readonly V[]>;\n item(key: K): Readable<V | undefined>;\n revision(): number;\n subscribe(listener: (change: CollectionImpact<K>) => void): Unsubscribe;\n rebuild(): void;\n dispose(): void;\n};\nexport type ProjectionCollectionWriter<K extends string, V> = {\n set(key: K, value: V): void;\n remove(key: K): void;\n order(ids: readonly K[]): void;\n replace(entries: readonly (readonly [K, V])[]): void;\n};\nexport type CollectionProcess<S extends ProjectionSources, K extends string, V> = {\n readonly sources: ProjectionInputs<S>;\n readonly previous: CollectionRead<K, V>;\n readonly next: CollectionRead<K, V>;\n readonly writer: ProjectionCollectionWriter<K, V>;\n};\nexport type CollectionSpec<S extends ProjectionSources, K extends string, V> = {\n readonly name?: string;\n readonly sources: S;\n readonly isEqual?: (previous: V, next: V) => boolean;\n readonly build: (input: CollectionProcess<S, K, V>) => {\n readonly update: (input: CollectionProcess<S, K, V>) => void | { readonly kind: 'rebuild' };\n };\n};\nexport class ProjectionError extends Error {\n constructor(\n readonly phase: 'processor' | 'listener' | 'source' | 'blocked',\n readonly identity: string,\n readonly revisions: readonly number[],\n cause: unknown\n ) {\n super(`Projection ${phase} failed: ${identity}`, { cause });\n this.name = 'ProjectionError';\n }\n}\nexport class ProjectionDisposedError extends Error {\n constructor() {\n super('Projection has been disposed.');\n this.name = 'ProjectionDisposedError';\n }\n}\nexport type ProjectionRuntime = {\n document<S extends DocumentSchema>(runtime: DocumentReadable<S>): DocumentSource<S>;\n fromReadable<T>(\n readable: Readable<T>,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n ): ProjectionSource<ValueInput<T>>;\n input<T>(\n initial: T,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n ): ProjectionInput<T>;\n value<S extends ProjectionSources, T>(spec: ValueSpec<S, T>): ProjectionValue<T>;\n collection<S extends ProjectionSources, K extends string, V>(\n spec: CollectionSpec<S, K, V>\n ): ProjectionCollection<K, V>;\n map<S extends DocumentSchema, N extends EntitySchemaNode, V>(\n source: DocumentCollectionSource<S, N>,\n mapper: (id: string, entry: ReaderOfNode<N>) => V,\n options?: { readonly isEqual?: (a: V, b: V) => boolean }\n ): ProjectionCollection<string, V>;\n batch<T>(run: () => T): T;\n dispose(): void;\n};\n","import type { ObserverError } from '../runtime/contract';\nimport { ProjectionDisposedError, ProjectionError } from './contract';\nimport { profile } from '../profile';\n\nexport type SourceRecord = {\n readonly consumers: Set<NodeRecord>;\n context(active: () => boolean): unknown;\n revision(): number;\n reset(): boolean;\n fault: ProjectionError | undefined;\n disposed: boolean;\n clear(): void;\n};\nexport type NodeRecord = SourceRecord & {\n readonly order: number;\n readonly name: string;\n readonly sources: readonly SourceRecord[];\n forced: boolean;\n statusChanged: boolean;\n evaluate(build: boolean): boolean;\n publish(): void;\n emit(call: (listener: () => void) => void): void;\n release(): void;\n};\n\n// Sources and nodes share one registry. Public structural lookalikes are never accepted.\nexport const projectionHandles = new WeakSet<object>();\nexport const createScheduler = (onError: (error: ProjectionError) => void) => {\n let disposed = false;\n let depth = 0;\n let phase: 'idle' | 'compute' | 'notify' = 'idle';\n let sequence = 0;\n const records = new Map<object, SourceRecord>();\n const nodes = new Set<NodeRecord>();\n const pending = new Set<SourceRecord>();\n const heap: NodeRecord[] = [];\n const queued = new Set<NodeRecord>();\n const completed: NodeRecord[] = [];\n const emissions = new Set<NodeRecord>();\n const errors: ProjectionError[] = [];\n let reportingFailures: unknown[] = [];\n const guards = new Set<(locked: boolean) => void>();\n const cleanups = new Set<() => void>();\n const assertActive = () => {\n if (disposed) throw new ProjectionDisposedError();\n };\n const assertIdle = () => {\n assertActive();\n if (phase !== 'idle')\n throw new Error('Projection cannot be re-entered during processing or notification.');\n };\n const lock = (value: boolean) => guards.forEach(guard => guard(value));\n const enqueue = (node: NodeRecord) => {\n if (node.disposed || queued.has(node)) return;\n queued.add(node);\n profile.projection('scheduledNodes');\n let i = heap.length;\n heap.push(node);\n while (i > 0) {\n const p = (i - 1) >> 1;\n if (heap[p].order < node.order) break;\n heap[i] = heap[p];\n i = p;\n }\n heap[i] = node;\n };\n const pop = () => {\n const first = heap[0];\n const last = heap.pop()!;\n if (heap.length) {\n let i = 0;\n while (i * 2 + 1 < heap.length) {\n let c = i * 2 + 1;\n if (c + 1 < heap.length && heap[c + 1].order < heap[c].order) c++;\n if (last.order < heap[c].order) break;\n heap[i] = heap[c];\n i = c;\n }\n heap[i] = last;\n }\n return first;\n };\n const errorFor = (\n node: NodeRecord,\n cause: unknown,\n kind: ProjectionError['phase'] = 'processor'\n ) =>\n new ProjectionError(\n kind,\n node.name,\n node.sources.map(source => source.revision()),\n cause\n );\n const capture = (source: SourceRecord) => {\n if (disposed) return;\n if (phase !== 'idle') {\n source.fault = new ProjectionError(\n 'source',\n 'reentrant source',\n [source.revision()],\n new Error('Source changed while projection was running.')\n );\n errors.push(source.fault);\n throw source.fault;\n }\n pending.add(source);\n profile.projection('sourceEvents');\n if (source.fault) errors.push(source.fault);\n };\n const settle = () => {\n if (disposed || depth || phase !== 'idle') return;\n phase = 'compute';\n lock(true);\n try {\n pending.forEach(source => source.consumers.forEach(enqueue));\n while (heap.length) {\n const node = pop();\n if (node.disposed) continue;\n const wasFaulted = node.fault !== undefined;\n profile.projection('processedNodes');\n let changed = false;\n const blocked = node.sources.find(source => source.fault || source.disposed);\n if (blocked) {\n node.fault = errorFor(node, blocked.fault ?? new ProjectionDisposedError(), 'blocked');\n } else {\n const build = node.forced || wasFaulted || node.sources.some(source => source.reset());\n try {\n changed = node.evaluate(build);\n const failure = node.sources.find(source => source.fault)?.fault;\n if (failure) throw failure;\n node.fault = undefined;\n } catch (cause) {\n const error = errorFor(node, cause);\n errors.push(error);\n node.fault = error;\n if (!build) {\n try {\n changed = node.evaluate(true);\n const failure = node.sources.find(source => source.fault)?.fault;\n if (failure) throw failure;\n node.fault = undefined;\n } catch (cause) {\n node.fault = errorFor(node, cause);\n errors.push(node.fault);\n }\n }\n }\n }\n node.forced = false;\n node.statusChanged = wasFaulted !== (node.fault !== undefined);\n completed.push(node);\n if (changed || wasFaulted || node.fault) {\n profile.projection('publishedNodes');\n emissions.add(node);\n node.consumers.forEach(enqueue);\n }\n }\n completed.forEach(node => node.publish());\n } finally {\n lock(false);\n phase = 'idle';\n }\n };\n const flush = (): readonly ObserverError[] => {\n if (disposed || depth) return [];\n if (pending.size || completed.length) profile.projection('flushes');\n phase = 'notify';\n lock(true);\n const reportFailures: unknown[] = [];\n try {\n emissions.forEach(node =>\n node.emit(listener => {\n try {\n listener();\n } catch (cause) {\n errors.push(errorFor(node, cause, 'listener'));\n }\n })\n );\n for (const error of errors.slice()) {\n try {\n onError(error);\n } catch (cause) {\n reportFailures.push(cause);\n }\n }\n return Object.freeze([\n ...errors.map(error =>\n Object.freeze({\n phase: error.phase === 'listener' ? ('listener' as const) : ('processor' as const),\n error,\n })\n ),\n ...reportFailures.map(error => Object.freeze({ phase: 'listener' as const, error })),\n ]);\n } finally {\n pending.forEach(source => source.clear());\n completed.forEach(node => node.clear());\n pending.clear();\n queued.clear();\n completed.length = 0;\n emissions.clear();\n errors.length = 0;\n reportingFailures = reportFailures;\n lock(false);\n phase = 'idle';\n }\n };\n const run = () => {\n settle();\n const result = flush();\n const failures = reportingFailures;\n reportingFailures = [];\n if (failures.length) throw new AggregateError(failures, 'Projection error reporter failed.');\n return result;\n };\n return {\n assertActive,\n assertIdle,\n capture,\n settle,\n flush,\n run,\n records,\n guards,\n cleanups,\n get active() {\n return !disposed;\n },\n register(handle: object, record: SourceRecord) {\n assertIdle();\n records.set(handle, record);\n projectionHandles.add(handle);\n },\n unregisterSource(handle: object) {\n const record = records.get(handle);\n if (record) {\n record.disposed = true;\n pending.delete(record);\n record.clear();\n records.delete(handle);\n }\n },\n source(handle: object) {\n assertActive();\n const source = records.get(handle);\n if (!source || source.disposed)\n throw new Error('Unknown, disposed, or foreign projection source.');\n return source;\n },\n addNode(node: NodeRecord) {\n nodes.add(node);\n node.sources.forEach(source => source.consumers.add(node));\n },\n order: () => sequence++,\n initialize<T>(run: () => T): T {\n assertIdle();\n phase = 'compute';\n lock(true);\n try {\n return run();\n } finally {\n lock(false);\n phase = 'idle';\n }\n },\n rebuild(node: NodeRecord) {\n assertIdle();\n if (node.disposed) throw new ProjectionDisposedError();\n node.forced = true;\n enqueue(node);\n run();\n },\n disposeNode(node: NodeRecord) {\n if (node.disposed) return;\n assertIdle();\n if (node.consumers.size)\n throw new Error('Cannot dispose a projection node with downstream consumers.');\n node.disposed = true;\n node.sources.forEach(source => source.consumers.delete(node));\n nodes.delete(node);\n node.release();\n for (const [handle, record] of records) if (record === node) records.delete(handle);\n },\n batch<T>(callback: () => T): T {\n assertIdle();\n depth++;\n let failed = false;\n try {\n const value = callback();\n assertSynchronous(value);\n return value;\n } catch (error) {\n failed = true;\n throw error;\n } finally {\n depth--;\n if (!depth) {\n if (failed) {\n try {\n run();\n } catch {\n /* The original application error retains priority. */\n }\n } else run();\n }\n }\n },\n dispose() {\n if (disposed) return;\n assertIdle();\n disposed = true;\n const failures: unknown[] = [];\n cleanups.forEach(cleanup => {\n try {\n cleanup();\n } catch (error) {\n failures.push(error);\n }\n });\n cleanups.clear();\n nodes.forEach(node => {\n node.disposed = true;\n node.release();\n node.consumers.clear();\n });\n records.forEach(source => {\n source.disposed = true;\n source.consumers.clear();\n source.clear();\n });\n nodes.clear();\n records.clear();\n pending.clear();\n heap.length = 0;\n completed.length = 0;\n queued.clear();\n emissions.clear();\n guards.clear();\n errors.length = 0;\n reportingFailures = [];\n if (failures.length) throw new AggregateError(failures, 'Projection cleanup failed.');\n },\n debug: () => ({\n nodes: nodes.size,\n sources: records.size - nodes.size,\n subscriptions: cleanups.size,\n pending: pending.size + heap.length,\n }),\n };\n};\nexport type Scheduler = ReturnType<typeof createScheduler>;\nexport const assertSynchronous = (value: unknown): void => {\n if (\n value != null &&\n (typeof value === 'object' || typeof value === 'function') &&\n 'then' in value &&\n typeof value.then === 'function'\n )\n throw new TypeError('Projection callbacks must be synchronous.');\n};\nexport const assertScope = (active: () => boolean) => {\n if (!active()) throw new Error('Projection reader or writer is no longer active.');\n};\n","import { documentReader, readerFor } from '../access/reader';\nimport { nodeAt } from '../address';\nimport * as target from '../impact-target';\nimport { accessOf } from '../runtime/access';\nimport { attachProjection } from '../runtime/notification';\nimport type { DocumentCommit, DocumentReadable } from '../runtime/contract';\nimport type { DocumentSchema, ImpactTarget, CollectionSelector } from '../schema';\nimport type { DocumentSource, ProjectionSource, ValueInput } from './contract';\nimport { ProjectionError } from './contract';\nimport type { Readable } from './readable';\nimport { assertScope, projectionHandles, type Scheduler, type SourceRecord } from './scheduler';\n\nexport const createSources = (scheduler: Scheduler) => {\n const documents = new Map<object, object>();\n const readables = new Map<object, object>();\n const collections = new WeakMap<object, { source: object; target: CollectionSelector }>();\n const document = <S extends DocumentSchema>(runtime: DocumentReadable<S>): DocumentSource<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 DocumentSource<S>;\n const bindings: { handle: object; targets: readonly ImpactTarget[]; record: SourceRecord }[] =\n [];\n const make = (targets: readonly ImpactTarget[], collection?: CollectionSelector): object => {\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) === collections.has(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 commits: DocumentCommit<S>[] = [];\n const record: SourceRecord = {\n consumers: new Set(),\n disposed: false,\n fault: undefined,\n revision: runtime.revision,\n reset: () => commits.some(commit => commit.kind === 'replace'),\n clear: () => {\n commits = [];\n },\n context: active => {\n assertScope(active);\n if (state.disposed) throw new Error('Document has been disposed.');\n const read = collection\n ? readerFor(\n nodeAt(state.schema, collection.address)!,\n { root: () => state.document, active },\n collection.address\n )\n : documentReader(state.schema, () => state.document, active);\n return Object.freeze({\n read,\n target: collection,\n revision: runtime.revision(),\n commits: Object.freeze(commits.slice()),\n reset: record.reset(),\n });\n },\n };\n const handle = collection\n ? {}\n : {\n collection: (pick: Parameters<S['collection']>[0]) => {\n scheduler.assertIdle();\n const selector = state.schema.collection(pick);\n const node = nodeAt(state.schema, selector.address);\n if (node?.kind !== 'table' && node?.kind !== 'map')\n throw new TypeError('Expected a table or map collection path.');\n return make([selector], selector);\n },\n targets: (...selected: ImpactTarget[]) => {\n scheduler.assertIdle();\n if (!selected.length) throw new TypeError('Expected at least one target.');\n return make(selected);\n },\n };\n Object.freeze(handle);\n bindings.push({ handle, targets, record });\n if (collection) collections.set(handle, { source: handle, target: collection });\n scheduler.register(handle, record);\n // The attachment delivers to all local bindings without extra document subscriptions.\n receivers.set(record, commit => {\n commits.push(commit);\n });\n return handle;\n };\n const receivers = new Map<SourceRecord, (commit: DocumentCommit<S>) => void>();\n const handle = make([]) as DocumentSource<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 (!binding.targets.length || binding.targets.some(commit.impact.affects)) {\n receivers.get(binding.record)!(commit);\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 previous = initial;\n let revision = 0;\n const handle = Object.freeze({}) as ProjectionSource<ValueInput<T>>;\n const record: SourceRecord = {\n consumers: new Set(),\n disposed: false,\n fault: undefined,\n revision: () => revision,\n reset: () => false,\n clear: () => {\n previous = value;\n },\n context: active => {\n assertScope(active);\n return Object.freeze({\n value,\n previous,\n revision,\n changed: !equal(previous, value),\n reset: false,\n });\n },\n };\n scheduler.register(handle, record);\n const accept = (next: T) => {\n scheduler.assertIdle();\n const recovering = record.fault !== undefined;\n if (equal(value, next) && !recovering) return;\n record.fault = undefined;\n value = next;\n revision++;\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 return {\n dispose: () => {\n documents.clear();\n readables.clear();\n },\n document,\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 fromReadable: <T>(\n readable: Readable<T>,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n ): ProjectionSource<ValueInput<T>> => {\n scheduler.assertIdle();\n if (projectionHandles.has(readable))\n throw new Error('Projection nodes must be declared directly as sources.');\n const old = readables.get(readable);\n if (old) return old as ProjectionSource<ValueInput<T>>;\n const input = valueSource(readable.current(), options?.isEqual ?? Object.is);\n const receive = () => {\n if (!scheduler.active) return;\n try {\n input.accept(readable.current());\n } catch (cause) {\n const record = scheduler.source(input.source);\n record.fault = new ProjectionError(\n 'source',\n 'external readable',\n [readable.revision()],\n cause\n );\n scheduler.capture(record);\n }\n scheduler.run();\n };\n let unsubscribe: (() => void) | undefined;\n try {\n unsubscribe = readable.subscribe(receive);\n input.accept(readable.current());\n } catch (error) {\n try {\n unsubscribe?.();\n } finally {\n scheduler.unregisterSource(input.source);\n }\n throw error;\n }\n scheduler.cleanups.add(unsubscribe);\n readables.set(readable, input.source);\n scheduler.run();\n return input.source;\n },\n collectionTarget: (handle: object) => {\n scheduler.source(handle);\n const value = collections.get(handle);\n if (!value) throw new Error('map requires a document collection source.');\n return value.target;\n },\n };\n};\n","import type { ProjectionInputs, ProjectionSources } from './contract';\nimport { ProjectionDisposedError } from './contract';\nimport type { NodeRecord, Scheduler } from './scheduler';\n\nexport const createNode = <S extends ProjectionSources>(\n scheduler: Scheduler,\n spec: { name?: string; sources: S },\n behavior: {\n evaluate(sources: ProjectionInputs<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 ...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 forced: false,\n statusChanged: false,\n evaluate: build => {\n let active = true;\n try {\n // Heterogeneous source contexts are typed at the registered capability boundary.\n const inputs = Object.fromEntries(\n entries.map(([key, source]) => [key, source.context(() => active)])\n ) as ProjectionInputs<S>;\n return behavior.evaluate(inputs, build, () => active);\n } finally {\n active = false;\n }\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 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 rebuild: () => scheduler.rebuild(node),\n dispose: () => scheduler.disposeNode(node),\n };\n};\n","import type { ProjectionSources, ProjectionValue, ValueSpec } from './contract';\nimport { createNode } from './node';\nimport { assertScope, assertSynchronous, type Scheduler } from './scheduler';\nimport { profile } from '../profile';\n\nexport const createValue = <S extends ProjectionSources, T>(\n scheduler: Scheduler,\n spec: ValueSpec<S, T>\n): ProjectionValue<T> => {\n let instance: ReturnType<typeof spec.build> | undefined;\n let value!: T;\n let next!: T;\n let previous!: T;\n let initialized = false;\n let revision = 0;\n let changed = false;\n let reset = false;\n const listeners = new Set<() => void>();\n const owner = createNode(scheduler, spec, {\n evaluate: (sources, build) => {\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 previous = value;\n changed = !initialized || !(spec.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 value: next,\n previous,\n changed,\n revision: revision + (changed ? 1 : 0),\n reset,\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 previous = value;\n changed = false;\n reset = false;\n },\n release: () => {\n listeners.clear();\n instance = undefined;\n value = next = previous = undefined as T;\n },\n });\n const handle = Object.freeze({\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 rebuild: owner.rebuild,\n dispose: owner.dispose,\n }) as ProjectionValue<T>;\n owner.install(handle);\n return handle;\n};\n","import type { CollectionImpact } from '../impact';\nimport { profile } from '../profile';\nimport type {\n CollectionInput,\n CollectionRead,\n CollectionSpec,\n ProjectionCollectionWriter,\n ProjectionCollection,\n ProjectionSources,\n} from './contract';\nimport type { Readable } from './readable';\nimport { createNode } from './node';\nimport { assertScope, assertSynchronous, projectionHandles, type Scheduler } from './scheduler';\n\nconst readonlySet = <T>(values: Iterable<T>): ReadonlySet<T> => {\n const set = new Set(values);\n const view: ReadonlySet<T> = Object.freeze({\n get size() {\n return set.size;\n },\n has: (value: T) => set.has(value),\n entries: () => set.entries(),\n keys: () => set.keys(),\n values: () => set.values(),\n [Symbol.iterator]: () => set.values(),\n forEach: (callback: (value: T, key: T, set: ReadonlySet<T>) => void, thisArg?: unknown) =>\n set.forEach(value => callback.call(thisArg, value, value, view)),\n });\n return view;\n};\ntype Entry<V> = { present: true; value: V } | { present: false };\nexport const createCollection = <S extends ProjectionSources, K extends string, V>(\n scheduler: Scheduler,\n spec: CollectionSpec<S, K, V>\n): ProjectionCollection<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: CollectionImpact<K> | undefined;\n let instance: ReturnType<typeof spec.build> | undefined;\n let initialized = false;\n let reset = false;\n let revision = 0;\n let idsRevision = 0;\n let all: readonly V[] | undefined;\n const itemVersions = new Map<K, number>();\n const items = new Map<K, Readable<V | undefined>>();\n const itemListeners = new Map<K, Set<() => void>>();\n const idsListeners = new Set<() => void>();\n const allListeners = new Set<() => void>();\n const listeners = new Set<(change: CollectionImpact<K>) => void>();\n const changedKeys = new Set<K>();\n let orderChanged = false;\n const hasNext = (key: K) => (staged.has(key) ? staged.get(key)!.present : values.has(key));\n const getNext = (key: K) => {\n const entry = staged.get(key);\n return entry ? (entry.present ? entry.value : undefined) : values.get(key);\n };\n const owner = createNode(scheduler, spec, {\n evaluate: (sources, build, active) => {\n staged = new Map();\n nextIds = ids;\n change = undefined;\n changedKeys.clear();\n let explicitOrder: readonly K[] | undefined;\n let cleared = false;\n const nextHas = (key: K) =>\n staged.has(key) ? staged.get(key)!.present : !cleared && values.has(key);\n const nextGet = (key: K) => {\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 = () => {\n const result = cleared ? [] : ids.filter(nextHas);\n for (const [key, entry] of staged)\n if (entry.present && (cleared || !values.has(key))) result.push(key);\n return result;\n };\n const read = (next: boolean): CollectionRead<K, V> => ({\n get: key => {\n assertScope(active);\n return next ? nextGet(key) : values.get(key);\n },\n has: key => {\n assertScope(active);\n return next ? nextHas(key) : values.has(key);\n },\n ids: () => {\n assertScope(active);\n return next ? Object.freeze(explicitOrder ? explicitOrder.slice() : deriveIds()) : ids;\n },\n });\n const writer: ProjectionCollectionWriter<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 = order.slice();\n },\n replace: entries => {\n assertScope(active);\n staged.clear();\n cleared = true;\n const order: K[] = [];\n for (const [key, value] of entries) {\n if (staged.has(key)) throw new TypeError('Duplicate projection key.');\n writer.set(key, value);\n order.push(key);\n }\n explicitOrder = order;\n },\n };\n const input = { sources, previous: read(false), next: read(true), writer };\n if (build || !instance) {\n profile.materialized.rebuilt();\n instance = undefined;\n cleared = true;\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 staged.clear();\n cleared = true;\n explicitOrder = undefined;\n instance = undefined;\n const built = spec.build(input);\n assertSynchronous(built);\n instance = built;\n build = true;\n }\n }\n if (cleared)\n for (const key of values.keys()) if (!staged.has(key)) staged.set(key, { present: false });\n const added = new Set<K>();\n const removed = new Set<K>();\n const updated = new Set<K>();\n profile.projection('touchedKeys', staged.size);\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 (!(spec.isEqual ?? Object.is)(values.get(key) as V, entry.value))\n updated.add(key);\n else staged.delete(key);\n } else if (existed) removed.add(key);\n else staged.delete(key);\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, i) => key === order[i])\n ? ids\n : Object.freeze(order.slice());\n }\n orderChanged = nextIds !== ids;\n if (added.size || removed.size || updated.size || orderChanged) {\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, i) => after[i] !== key);\n }\n change = Object.freeze({\n kind: 'incremental',\n added: readonlySet(added),\n removed: readonlySet(removed),\n updated: readonlySet(updated),\n orderChanged: commonOrderChanged,\n });\n [...added, ...removed, ...updated].forEach(key => changedKeys.add(key));\n profile.projection('changedKeys', changedKeys.size);\n }\n reset = build;\n return change !== undefined;\n },\n context: active => {\n const input: CollectionInput<K, V> = {\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 change,\n revision: revision + (change ? 1 : 0),\n reset,\n };\n return Object.freeze(input);\n },\n revision: () => revision,\n reset: () => reset,\n publish: () => {\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) {\n if (initialized) revision++;\n if (orderChanged && initialized) idsRevision++;\n all = undefined;\n changedKeys.forEach(key => {\n if (items.has(key))\n itemVersions.set(key, (itemVersions.get(key) ?? 0) + (initialized ? 1 : 0));\n });\n }\n ids = nextIds;\n initialized = true;\n },\n emit: call => {\n profile.materialized.notification();\n const fault = owner.node.fault !== undefined;\n const resetEvent = Object.freeze({ kind: 'reset' as const });\n Array.from(listeners).forEach(listener => call(() => listener(change ?? resetEvent)));\n if (orderChanged || !change || fault || owner.node.statusChanged)\n Array.from(idsListeners).forEach(listener => call(listener));\n Array.from(allListeners).forEach(listener => call(listener));\n const keys =\n !change || fault || owner.node.statusChanged ? itemListeners.keys() : changedKeys;\n for (const key of keys)\n Array.from(itemListeners.get(key) ?? []).forEach(listener => call(listener));\n },\n clear: () => {\n staged.clear();\n nextIds = ids;\n change = undefined;\n reset = false;\n changedKeys.clear();\n orderChanged = false;\n },\n release: () => {\n values.clear();\n staged.clear();\n items.clear();\n itemVersions.clear();\n itemListeners.clear();\n idsListeners.clear();\n allListeners.clear();\n listeners.clear();\n ids = nextIds = Object.freeze([]);\n all = undefined;\n instance = undefined;\n },\n });\n const handle = {\n ids: {\n current: () => {\n owner.check();\n return ids;\n },\n revision: () => {\n owner.check();\n return idsRevision;\n },\n subscribe: (listener: () => void) => {\n owner.check();\n idsListeners.add(listener);\n return () => {\n idsListeners.delete(listener);\n };\n },\n },\n all: {\n current: () => {\n owner.check();\n if (!all) {\n profile.collectionView.arrayCopied();\n all = Object.freeze(ids.map(key => values.get(key) as V));\n }\n return all;\n },\n revision: () => {\n owner.check();\n return revision;\n },\n subscribe: (listener: () => void) => {\n owner.check();\n allListeners.add(listener);\n return () => {\n allListeners.delete(listener);\n };\n },\n },\n item: (key: K) => {\n owner.check();\n const old = items.get(key);\n if (old) return old;\n itemVersions.set(key, 0);\n const readable: Readable<V | undefined> = Object.freeze({\n current: () => {\n owner.check();\n return values.get(key);\n },\n revision: () => {\n owner.check();\n return itemVersions.get(key) ?? 0;\n },\n subscribe: (listener: () => void) => {\n owner.check();\n const set = itemListeners.get(key) ?? new Set();\n set.add(listener);\n itemListeners.set(key, set);\n return () => {\n set.delete(listener);\n if (!set.size) itemListeners.delete(key);\n };\n },\n });\n projectionHandles.add(readable);\n items.set(key, readable);\n return readable;\n },\n revision: () => {\n owner.check();\n return revision;\n },\n subscribe: (listener: (change: CollectionImpact<K>) => void) => {\n owner.check();\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n rebuild: owner.rebuild,\n dispose: owner.dispose,\n } as ProjectionCollection<K, V>;\n projectionHandles.add(handle.ids);\n projectionHandles.add(handle.all);\n owner.install(handle);\n return Object.freeze(handle);\n};\n","import type { ProjectionRuntime } from './contract';\nimport { createScheduler } from './scheduler';\nimport { createSources } from './source';\nimport { createValue } from './value';\nimport { createCollection } from './collection';\nimport type { ProjectionError } from './contract';\nimport { profile } from '../profile';\n\nconst debug = new WeakMap<\n object,\n () => { nodes: number; sources: number; subscriptions: number; pending: number }\n>();\nexport const projectionDebug = (runtime: ProjectionRuntime) => {\n const read = debug.get(runtime);\n if (!read) throw new Error('Unknown projection runtime.');\n return Object.freeze(read());\n};\nexport const createProjectionRuntime = (options: {\n readonly onError: (error: ProjectionError) => void;\n}): ProjectionRuntime => {\n const scheduler = createScheduler(options.onError);\n const sources = createSources(scheduler);\n const runtime: ProjectionRuntime = {\n document: sources.document,\n input: sources.input,\n fromReadable: sources.fromReadable,\n value: spec => createValue(scheduler, spec),\n collection: spec => createCollection(scheduler, spec),\n map: (source, mapper, options) => {\n sources.collectionTarget(source);\n return createCollection(scheduler, {\n sources: { source },\n isEqual: options?.isEqual,\n build: ({ sources, writer }) => {\n const ids = sources.source.read.ids();\n profile.collectionView.idsScanned(ids.length);\n for (const id of ids) {\n profile.collectionView.mapped();\n writer.set(id, mapper(id, sources.source.read.get(id)!));\n }\n writer.order(ids);\n return {\n update: ({ sources, writer }) => {\n const input = sources.source;\n const keys = new Set<string>();\n let structural = false;\n for (const commit of input.commits) {\n const impact = commit.impact.collection(input.target);\n if (impact.kind === 'reset') return { kind: 'rebuild' };\n impact.added.forEach(key => keys.add(key));\n impact.removed.forEach(key => keys.add(key));\n impact.updated.forEach(key => keys.add(key));\n structural ||= Boolean(\n impact.added.size || impact.removed.size || impact.orderChanged\n );\n }\n for (const key of keys) {\n const entry = input.read.get(key);\n if (!entry) writer.remove(key);\n else {\n profile.collectionView.mapped();\n writer.set(key, mapper(key, entry));\n }\n }\n if (structural) {\n const ids = input.read.ids();\n profile.collectionView.idsScanned(ids.length);\n writer.order(ids);\n }\n },\n };\n },\n });\n },\n batch: scheduler.batch,\n dispose: () => {\n try {\n scheduler.dispose();\n } finally {\n if (!scheduler.active) sources.dispose();\n }\n },\n };\n debug.set(runtime, scheduler.debug);\n return Object.freeze(runtime);\n};\n"],"mappings":"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"}
|