doxum 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +217 -296
  2. package/dist/contract-BNStLbSE.d.ts +441 -0
  3. package/dist/contract-CIU5FCC1.d.cts +441 -0
  4. package/dist/driver-BlR81Dqg.js +200 -0
  5. package/dist/driver-BlR81Dqg.js.map +1 -0
  6. package/dist/driver-xOIkwrB8.cjs +241 -0
  7. package/dist/driver-xOIkwrB8.cjs.map +1 -0
  8. package/dist/index.cjs +666 -2222
  9. package/dist/index.cjs.map +1 -1
  10. package/dist/index.d.cts +10 -20
  11. package/dist/index.d.ts +10 -18
  12. package/dist/index.js +634 -2189
  13. package/dist/index.js.map +1 -1
  14. package/dist/{integration-CZwCwFBS.cjs → integration-C87tjRop.cjs} +4 -9
  15. package/dist/integration-C87tjRop.cjs.map +1 -0
  16. package/dist/{integration-B56u1l9V.js → integration-D5XCBLJ8.js} +2 -7
  17. package/dist/integration-D5XCBLJ8.js.map +1 -0
  18. package/dist/integration.cjs +11 -11
  19. package/dist/integration.d.cts +10 -4
  20. package/dist/integration.d.ts +10 -4
  21. package/dist/integration.js +4 -3
  22. package/dist/issue-DVaGQGeP.js +576 -0
  23. package/dist/issue-DVaGQGeP.js.map +1 -0
  24. package/dist/issue-DhrNdQNg.cjs +797 -0
  25. package/dist/issue-DhrNdQNg.cjs.map +1 -0
  26. package/dist/local-sync.cjs +67 -39
  27. package/dist/local-sync.cjs.map +1 -1
  28. package/dist/local-sync.d.cts +10 -10
  29. package/dist/local-sync.d.ts +10 -10
  30. package/dist/local-sync.js +66 -38
  31. package/dist/local-sync.js.map +1 -1
  32. package/dist/react.cjs +23 -4
  33. package/dist/react.cjs.map +1 -1
  34. package/dist/react.d.cts +8 -3
  35. package/dist/react.d.ts +8 -3
  36. package/dist/react.js +21 -6
  37. package/dist/react.js.map +1 -1
  38. package/dist/store-1Uob0Ghk.cjs +2750 -0
  39. package/dist/store-1Uob0Ghk.cjs.map +1 -0
  40. package/dist/store-CD0KdGsq.d.cts +262 -0
  41. package/dist/store-D7QH6Rzw.js +2511 -0
  42. package/dist/store-D7QH6Rzw.js.map +1 -0
  43. package/dist/store-cp5CpfCy.d.ts +262 -0
  44. package/package.json +1 -1
  45. package/skills/doxum-runtime/SKILL.md +26 -44
  46. package/skills/doxum-runtime/references/guide.en.md +95 -359
  47. package/skills/doxum-runtime/references/guide.zh-CN.md +80 -285
  48. package/skills/doxum-runtime/references/invariants.en.md +42 -165
  49. package/skills/doxum-runtime/references/invariants.zh-CN.md +34 -97
  50. package/skills/doxum-runtime/references/patterns.en.md +73 -225
  51. package/skills/doxum-runtime/references/patterns.zh-CN.md +73 -179
  52. package/dist/chunk-pbuEa-1d.js +0 -13
  53. package/dist/contract-DNZ4D53r.d.ts +0 -563
  54. package/dist/contract-j3SLGAwh.d.cts +0 -563
  55. package/dist/driver-CNxqMVFH.cjs +0 -69
  56. package/dist/driver-CNxqMVFH.cjs.map +0 -1
  57. package/dist/driver-CbzfW5MR.js +0 -46
  58. package/dist/driver-CbzfW5MR.js.map +0 -1
  59. package/dist/integration-B56u1l9V.js.map +0 -1
  60. package/dist/integration-CZwCwFBS.cjs.map +0 -1
  61. package/dist/ownership-CY0nPXGF.cjs +0 -304
  62. package/dist/ownership-CY0nPXGF.cjs.map +0 -1
  63. package/dist/ownership-CduRygE7.js +0 -245
  64. package/dist/ownership-CduRygE7.js.map +0 -1
  65. package/dist/runtime-0mOFbe_H.cjs +0 -2439
  66. package/dist/runtime-0mOFbe_H.cjs.map +0 -1
  67. package/dist/runtime-B22tuj9A.d.cts +0 -150
  68. package/dist/runtime-BFmhzPpZ.d.ts +0 -150
  69. package/dist/runtime-DF1q9Gje.js +0 -2129
  70. package/dist/runtime-DF1q9Gje.js.map +0 -1
@@ -0,0 +1,441 @@
1
+ //#region core/src/schema-value.d.ts
2
+ /** Pure synchronous validation. Successful output is ignored; input is never transformed. */
3
+ type Validator<T> = ((value: unknown) => T) | {
4
+ readonly '~standard': {
5
+ readonly version: 1;
6
+ readonly vendor: string;
7
+ readonly types?: {
8
+ readonly input: unknown;
9
+ readonly output: T;
10
+ };
11
+ validate(value: unknown): {
12
+ readonly value: T;
13
+ readonly issues?: undefined;
14
+ } | {
15
+ readonly issues: readonly {
16
+ readonly message: string;
17
+ readonly path?: readonly (PropertyKey | {
18
+ readonly key: PropertyKey;
19
+ })[];
20
+ }[];
21
+ } | PromiseLike<unknown>;
22
+ };
23
+ };
24
+ type ParseIssue = {
25
+ readonly address: DocumentAddress;
26
+ readonly code: 'invalid-value' | 'invalid-key' | 'missing-validator' | 'invalid-tree';
27
+ readonly message: string;
28
+ };
29
+ declare class ParseError extends TypeError {
30
+ readonly issues: readonly ParseIssue[];
31
+ constructor(issue: ParseIssue);
32
+ }
33
+ declare const parse: <N extends DocumentNode>(node: N, input: unknown) => Infer<N>;
34
+ //#endregion
35
+ //#region core/src/schema.d.ts
36
+ type DocumentAddress = readonly string[];
37
+ /** Shared payloads are immutable through every alias, including builtin methods. */
38
+ type ReadonlyValue<T> = T extends ((...args: never[]) => unknown) ? T : T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<ReadonlyValue<K>, ReadonlyValue<V>> : T extends ReadonlySet<infer V> ? ReadonlySet<ReadonlyValue<V>> : T extends Date ? Omit<Date, `set${string}`> : T extends object ? { readonly [K in keyof T]: ReadonlyValue<T[K]> } : T;
39
+ type DocumentListConfig<TItem> = {
40
+ readonly keyOf: (item: ReadonlyValue<TItem>) => string;
41
+ };
42
+ type DocumentTreeNode<TValue> = {
43
+ readonly parentId?: string;
44
+ readonly children: readonly string[];
45
+ readonly value?: ReadonlyValue<TValue>;
46
+ };
47
+ type DocumentTreeValue<TValue> = {
48
+ readonly rootId?: string;
49
+ readonly nodes: Readonly<Record<string, DocumentTreeNode<TValue>>>;
50
+ };
51
+ type BaseNode<K extends string> = {
52
+ readonly kind: K;
53
+ readonly optional?: boolean;
54
+ };
55
+ type FieldNode<T, Optional extends boolean = false> = BaseNode<'field'> & {
56
+ readonly __value?: T;
57
+ readonly validator?: Validator<T>;
58
+ } & (Optional extends true ? {
59
+ readonly optional: true;
60
+ } : {
61
+ readonly optional?: false;
62
+ });
63
+ /** A node with optional presence. The marker replaces, rather than intersects, a field marker. */
64
+ type OptionalNode<TNode extends DocumentNode> = TNode extends FieldNode<infer TValue, boolean> ? FieldNode<TValue, true> : TNode & {
65
+ readonly optional: true;
66
+ };
67
+ interface ObjectShape {
68
+ readonly [key: string]: DocumentNode;
69
+ }
70
+ type ObjectNode<TShape extends ObjectShape = ObjectShape> = BaseNode<'object'> & {
71
+ readonly shape: TShape;
72
+ };
73
+ interface VariantShape {
74
+ readonly [key: string]: ObjectNode<ObjectShape>;
75
+ }
76
+ type VariantNode<TTag extends string, TVariants extends VariantShape> = BaseNode<'variant'> & {
77
+ readonly tag: TTag;
78
+ readonly variants: TVariants;
79
+ };
80
+ type TableNode<TValue extends ObjectNode<ObjectShape> | VariantNode<string, VariantShape>, TKey extends string = string> = BaseNode<'table'> & {
81
+ readonly value: TValue;
82
+ readonly key?: Validator<TKey>;
83
+ };
84
+ type MapNode<TValue extends ValueSchemaNode, TKey extends string = string> = BaseNode<'map'> & {
85
+ readonly value: TValue;
86
+ readonly key?: Validator<TKey>;
87
+ };
88
+ type ListNode<TItem> = BaseNode<'list'> & {
89
+ readonly value: FieldNode<TItem, boolean>;
90
+ keyOf(item: ReadonlyValue<TItem>): string;
91
+ };
92
+ type TreeNode<TValue> = BaseNode<'tree'> & {
93
+ readonly value: FieldNode<TValue, boolean>;
94
+ };
95
+ type DocumentNode = FieldNode<unknown, false> | FieldNode<unknown, true> | ObjectNode<ObjectShape> | VariantNode<string, VariantShape> | TableNode<ObjectNode<ObjectShape> | VariantNode<string, VariantShape>> | MapNode<ValueSchemaNode> | ListNode<unknown> | TreeNode<unknown>;
96
+ type SchemaObject<T> = { [K in keyof T]: T[K] } & {};
97
+ /** Infer a document or node value, including optional node presence. */
98
+ type Infer<T extends DocumentNode> = T extends {
99
+ readonly optional: true;
100
+ } ? NodeValue<T> | undefined : NodeValue<T>;
101
+ type NodeValue<N> = N extends FieldNode<infer T, infer O> ? O extends true ? ReadonlyValue<T> | undefined : ReadonlyValue<T> : N extends ObjectNode<infer S> ? ShapeValue<S> : N extends VariantNode<infer T, infer V> ? { [K in keyof V & string]: SchemaObject<{ readonly [P in T]: K } & NodeValue<V[K]>> }[keyof V & string] : N extends TableNode<infer V, infer K> ? {
102
+ readonly ids: readonly K[];
103
+ readonly byId: Readonly<Record<K, NodeValue<V>>>;
104
+ } : N extends MapNode<infer V, infer K> ? Readonly<Record<K, NodeValue<V>>> : N extends ListNode<infer I> ? readonly ReadonlyValue<I>[] : N extends TreeNode<infer T> ? DocumentTreeValue<T> : never;
105
+ type OptionalKeys<S extends ObjectShape> = { [K in keyof S]: S[K] extends {
106
+ readonly optional: true;
107
+ } ? K : never }[keyof S];
108
+ type RequiredKeys<S extends ObjectShape> = Exclude<keyof S, OptionalKeys<S>>;
109
+ type ShapeValue<S extends ObjectShape> = SchemaObject<{ readonly [K in RequiredKeys<S>]: NodeValue<S[K]> } & { readonly [K in OptionalKeys<S>]?: NodeValue<S[K]> }>;
110
+ type EntitySchemaNode = ObjectNode<ObjectShape> | VariantNode<string, VariantShape>;
111
+ type ValueSchemaNode = EntitySchemaNode | FieldNode<unknown, boolean>;
112
+ type DocumentAnchor<K extends string = string> = {
113
+ readonly at: 'start' | 'end';
114
+ } | {
115
+ readonly before: K;
116
+ } | {
117
+ readonly after: K;
118
+ };
119
+ type CollectionSelector<TId extends string = string, TNode extends ValueSchemaNode = ValueSchemaNode> = {
120
+ readonly kind: 'collection';
121
+ readonly schema: ObjectNode;
122
+ readonly address: DocumentAddress;
123
+ readonly __id?: TId; /** Compile-time entry schema carried by schema selectors. */
124
+ readonly __node?: TNode;
125
+ };
126
+ type ValueSelector<TResult = unknown> = {
127
+ readonly kind: 'value';
128
+ readonly schema: ObjectNode;
129
+ readonly address: DocumentAddress;
130
+ readonly __value?: TResult;
131
+ };
132
+ type ImpactTarget<T = unknown> = {
133
+ readonly kind: 'value';
134
+ readonly at: DocumentAddress;
135
+ } | ValueSelector<T> | {
136
+ readonly kind: 'collection';
137
+ readonly at: DocumentAddress;
138
+ readonly id?: string;
139
+ } | CollectionSelector<string>;
140
+ declare const pathValue: unique symbol;
141
+ declare const collectionNode: unique symbol;
142
+ declare const collectionKey: unique symbol;
143
+ type PathMarker<TValue> = {
144
+ readonly [pathValue]: TValue;
145
+ };
146
+ type SchemaPathFor<S extends ObjectShape = ObjectShape, TValue = unknown> = { readonly [K in keyof S]: PathValue<S[K]> } & PathMarker<TValue>;
147
+ type SchemaPath<S extends ObjectShape = ObjectShape> = SchemaPathFor<S, ShapeValue<S>>;
148
+ type PathPick<S extends ObjectNode = ObjectNode> = (path: SchemaPath<S['shape']>) => PathMarker<unknown>;
149
+ type VariantKeys<V extends VariantShape> = { [K in keyof V & string]: keyof (V[K] extends ObjectNode<infer S> ? S : {}) }[keyof V & string] & string;
150
+ type VariantFieldPath<V extends VariantShape, K extends string> = { [P in keyof V & string]: V[P] extends ObjectNode<infer S> ? K extends keyof S ? PathValue<S[K]> : never : never }[keyof V & string];
151
+ type VariantPath<T extends string, V extends VariantShape, TValue> = { readonly [K in VariantKeys<V>]: VariantFieldPath<V, K> } & { readonly [K in T]: PathMarker<keyof V & string> } & PathMarker<TValue>;
152
+ type CollectionPath<N extends ValueSchemaNode = ValueSchemaNode, TValue = unknown, K extends string = string> = PathMarker<TValue> & {
153
+ item(id: K): PathValue<N>;
154
+ readonly [collectionNode]: N;
155
+ readonly [collectionKey]: K;
156
+ };
157
+ type PathValue<N extends DocumentNode> = N extends ObjectNode<infer S> ? SchemaPathFor<S, Infer<N>> : N extends VariantNode<infer TTag, infer V> ? VariantPath<TTag, V, Infer<N>> : N extends TableNode<infer V, infer K> ? CollectionPath<V, Infer<N>, K> : N extends MapNode<infer V, infer K> ? CollectionPath<V, Infer<N>, K> : PathMarker<Infer<N>>;
158
+ type CollectionInfo<T> = T extends {
159
+ readonly [collectionNode]: infer TNode extends ValueSchemaNode;
160
+ readonly [collectionKey]: infer K extends string;
161
+ } ? {
162
+ readonly id: K;
163
+ readonly node: TNode;
164
+ } : never;
165
+ type CollectionId<T> = CollectionInfo<T> extends {
166
+ readonly id: infer TId extends string;
167
+ } ? TId : string;
168
+ type CollectionNode<T> = CollectionInfo<T> extends {
169
+ readonly node: infer TNode extends ValueSchemaNode;
170
+ } ? TNode : ValueSchemaNode;
171
+ declare const field: <T>(validator?: Validator<T>) => FieldNode<T>;
172
+ type OptionalLeaf = FieldNode<unknown, boolean> | VariantNode<string, VariantShape> | MapNode<ValueSchemaNode> | ListNode<unknown> | TreeNode<unknown>;
173
+ declare const optional: <T extends OptionalLeaf>(value: T) => OptionalNode<T>;
174
+ declare const object: <S extends ObjectShape>(shape: S) => ObjectNode<S>;
175
+ declare const variant: <T extends string, V extends VariantShape>(tag: T, variants: V) => VariantNode<T, V>;
176
+ declare const table: <V extends EntitySchemaNode, K extends string = string>(value: V, options?: {
177
+ readonly key: Validator<K>;
178
+ }) => TableNode<V, K>;
179
+ declare const map: <V extends ValueSchemaNode, K extends string = string>(value: V, options?: {
180
+ readonly key: Validator<K>;
181
+ }) => MapNode<V, K>;
182
+ declare const list: <TItem>(value: FieldNode<TItem, boolean>, config: DocumentListConfig<TItem>) => ListNode<TItem>;
183
+ declare const tree: <TValue>(value: FieldNode<TValue, boolean>) => TreeNode<TValue>;
184
+ //#endregion
185
+ //#region core/src/changes.d.ts
186
+ type ValueTransition<T = unknown> = {
187
+ readonly kind: 'added';
188
+ readonly after: T;
189
+ } | {
190
+ readonly kind: 'removed';
191
+ readonly before: T;
192
+ } | {
193
+ readonly kind: 'updated';
194
+ readonly before: T;
195
+ readonly after: T;
196
+ };
197
+ type MemberChange<T = unknown> = ValueTransition<T> & {
198
+ readonly key: string;
199
+ };
200
+ type Change = {
201
+ readonly kind: 'members';
202
+ readonly at: DocumentAddress;
203
+ readonly members: readonly MemberChange[];
204
+ readonly order?: {
205
+ readonly before: readonly string[];
206
+ readonly after: readonly string[];
207
+ };
208
+ } | {
209
+ readonly kind: 'tree';
210
+ readonly at: DocumentAddress;
211
+ readonly before: string | null;
212
+ readonly after: string | null;
213
+ readonly nodes: readonly (ValueTransition<DocumentTreeNode<unknown>> & {
214
+ readonly id: string;
215
+ })[];
216
+ } | {
217
+ readonly kind: 'reset';
218
+ readonly before: unknown;
219
+ readonly after: unknown;
220
+ };
221
+ /** One reversible, normalized state transition. Addresses are schema addresses. */
222
+ type ChangeSet = {
223
+ readonly changes: readonly Change[];
224
+ };
225
+ //#endregion
226
+ //#region core/src/mutation/tree.d.ts
227
+ type TreePosition = {
228
+ readonly parentId?: string;
229
+ readonly index?: number;
230
+ };
231
+ //#endregion
232
+ //#region core/src/address.d.ts
233
+ /** The only resolved address representation used inside the runtime. */
234
+ type AddressRef = {
235
+ readonly path: number;
236
+ readonly address: DocumentAddress;
237
+ };
238
+ declare const resolveAddress: (schema: ObjectNode, address: DocumentAddress, document?: unknown) => AddressRef | undefined;
239
+ declare const read: (root: unknown, address: DocumentAddress, schema: DocumentNode) => unknown;
240
+ declare const contains: (parent: DocumentAddress, child: DocumentAddress) => boolean;
241
+ declare const overlaps: (a: DocumentAddress, b: DocumentAddress) => boolean;
242
+ declare const debugKey: (address: DocumentAddress) => string;
243
+ //#endregion
244
+ //#region core/src/access/scope.d.ts
245
+ declare const scopeValue: unique symbol;
246
+ type Scoped<N extends DocumentNode> = {
247
+ readonly [scopeValue]?: Infer<N>;
248
+ };
249
+ type ShapeAccess<S extends ObjectShape, W extends boolean> = W extends true ? { -readonly [K in keyof S]: Access<S[K], W> } : { readonly [K in keyof S]: Access<S[K], W> };
250
+ type TableAccess<K extends string, N extends ValueSchemaNode, W extends boolean> = {
251
+ get(id: K): Access<N, W> | undefined;
252
+ has(id: K): boolean;
253
+ ids(): readonly K[];
254
+ } & (W extends true ? {
255
+ create(entries: {
256
+ readonly id: K;
257
+ readonly value: Infer<N>;
258
+ } | readonly {
259
+ readonly id: K;
260
+ readonly value: Infer<N>;
261
+ }[], anchor?: DocumentAnchor<K>): void;
262
+ remove(ids: K | readonly K[]): void;
263
+ move(id: K, anchor?: DocumentAnchor<K>): void;
264
+ } : {});
265
+ type ListAccess<T, W extends boolean> = {
266
+ get(key: string): ReadonlyValue<T> | undefined;
267
+ has(key: string): boolean;
268
+ ids(): readonly string[];
269
+ } & (W extends true ? {
270
+ insert(value: ReadonlyValue<T>, anchor?: DocumentAnchor): void;
271
+ set(key: string, value: ReadonlyValue<T>): void;
272
+ remove(key: string): void;
273
+ move(key: string, anchor?: DocumentAnchor): void;
274
+ replace(value: readonly ReadonlyValue<T>[]): void;
275
+ } : {});
276
+ type TreeAccess<T, W extends boolean> = {
277
+ rootId(): string | undefined;
278
+ get(id: string): ReadonlyValue<T> | undefined;
279
+ has(id: string): boolean;
280
+ parent(id: string): string | undefined;
281
+ children(id: string): readonly string[] | undefined;
282
+ } & (W extends true ? {
283
+ insert(id: string, value: ReadonlyValue<T>, position?: TreePosition): void;
284
+ set(id: string, value: ReadonlyValue<T>): void;
285
+ move(id: string, position?: TreePosition): void;
286
+ remove(id: string): void;
287
+ replace(value: DocumentTreeValue<T>): void;
288
+ } : {});
289
+ type NodeAccess<N extends DocumentNode, W extends boolean> = N extends FieldNode<infer T, boolean> ? ReadonlyValue<T> : N extends ObjectNode<infer S> ? ShapeAccess<S, W> & Scoped<N> : N extends VariantNode<infer Tag, infer V> ? { [K in keyof V & string]: ShapeAccess<V[K]['shape'], W> & { readonly [P in Tag]: K } & Scoped<N> }[keyof V & string] : N extends MapNode<infer V, infer K> ? (W extends true ? { [P in K]: Access<V, W> | undefined } : { readonly [P in K]: Access<V, W> | undefined }) & Scoped<N> : N extends TableNode<infer V, infer K> ? TableAccess<K, V, W> & Scoped<N> : N extends ListNode<infer T> ? ListAccess<T, W> & Scoped<N> : N extends TreeNode<infer T> ? TreeAccess<T, W> & Scoped<N> : never;
290
+ type Access<N extends DocumentNode, W extends boolean> = N extends {
291
+ readonly optional: true;
292
+ } ? NodeAccess<N, W> | undefined : NodeAccess<N, W>;
293
+ type Read<N extends DocumentNode> = Access<N, false>;
294
+ type Draft<N extends DocumentNode> = Access<N, true>;
295
+ type Snapshot<T> = T extends {
296
+ readonly [scopeValue]?: infer V;
297
+ } ? V : ReadonlyValue<T>;
298
+ declare const snapshot: <T>(value: T) => Snapshot<T>;
299
+ /** TypeScript cannot express asymmetric index signatures for nested collection tools. */
300
+ declare const assign: <T extends object, K extends keyof Snapshot<T>>(container: T, key: K, value: NoInfer<Snapshot<T>[K]>) => void;
301
+ /** Projection collection contexts use the same scoped access, with explicit collection tools. */
302
+ type CollectionAccess<K extends string, N extends ValueSchemaNode> = TableAccess<K, N, false>;
303
+ //#endregion
304
+ //#region core/src/impact.d.ts
305
+ type CollectionImpact<K> = {
306
+ readonly kind: 'reset';
307
+ } | {
308
+ readonly kind: 'incremental';
309
+ readonly added: ReadonlySet<K>;
310
+ readonly removed: ReadonlySet<K>;
311
+ readonly updated: ReadonlySet<K>;
312
+ readonly orderChanged: boolean;
313
+ };
314
+ type DocumentImpact<S extends ObjectNode> = {
315
+ readonly kind: 'incremental' | 'reset';
316
+ affects(pick: PathPick<S>): boolean;
317
+ collection<P extends CollectionPath>(pick: (path: SchemaPath<S['shape']>) => P): CollectionImpact<CollectionId<P>>;
318
+ };
319
+ //#endregion
320
+ //#region core/src/mutation/issue.d.ts
321
+ type MutationIssueCode = 'invalid-address' | 'invalid-value' | 'invalid-key' | 'invalid-changes' | 'baseline-mismatch' | 'required-field' | 'invalid-anchor' | 'duplicate-entity' | 'missing-entity' | 'invalid-collection' | 'invalid-list-keys' | 'invalid-list-key' | 'duplicate-list-item' | 'missing-list-item' | 'invalid-tree' | 'duplicate-tree-node' | 'missing-tree-parent' | 'invalid-tree-index' | 'missing-tree-node' | 'tree-cycle';
322
+ type MutationIssue = {
323
+ readonly source: 'mutation';
324
+ readonly code: MutationIssueCode;
325
+ readonly address: DocumentAddress;
326
+ readonly message: string;
327
+ };
328
+ //#endregion
329
+ //#region core/src/projection/readable.d.ts
330
+ type Readable<TValue> = {
331
+ current(): TValue;
332
+ revision(): number;
333
+ subscribe(listener: () => void): Unsubscribe;
334
+ };
335
+ //#endregion
336
+ //#region core/src/runtime/contract.d.ts
337
+ type Unsubscribe = () => void;
338
+ type Synchronous<T> = T extends PromiseLike<unknown> ? never : T;
339
+ type CommitSource = 'local' | 'system' | 'history' | 'remote';
340
+ declare class DocumentReentrancyError extends Error {
341
+ constructor();
342
+ }
343
+ declare class DocumentDisposedError extends Error {
344
+ constructor();
345
+ }
346
+ type DiagnosticInput = {
347
+ readonly code: string;
348
+ readonly message: string;
349
+ readonly address?: DocumentAddress;
350
+ };
351
+ type DocumentDiagnostic = DiagnosticInput & {
352
+ readonly source: 'application';
353
+ };
354
+ type DocumentProblem = DocumentDiagnostic | MutationIssue;
355
+ declare class TransactionRejected extends Error {
356
+ readonly issues: readonly DocumentDiagnostic[];
357
+ constructor(input: DiagnosticInput | readonly DiagnosticInput[]);
358
+ }
359
+ type DocumentCommit<S extends ObjectNode> = {
360
+ readonly revision: number;
361
+ readonly source: CommitSource;
362
+ readonly changes: ChangeSet;
363
+ readonly impact: DocumentImpact<S>;
364
+ };
365
+ type ObserverError = {
366
+ readonly phase: 'processor' | 'flush' | 'listener';
367
+ readonly error: unknown;
368
+ };
369
+ type TransactionResult<V, C> = {
370
+ readonly status: 'committed';
371
+ readonly value: V;
372
+ readonly commit: C;
373
+ readonly observerErrors: readonly ObserverError[];
374
+ } | {
375
+ readonly status: 'unchanged';
376
+ readonly value: V;
377
+ readonly revision: number;
378
+ } | {
379
+ readonly status: 'rejected';
380
+ readonly issues: readonly DocumentProblem[];
381
+ readonly revision: number;
382
+ };
383
+ type OperationResult<C> = {
384
+ readonly status: 'committed';
385
+ readonly commit: C;
386
+ readonly observerErrors: readonly ObserverError[];
387
+ } | {
388
+ readonly status: 'unchanged';
389
+ readonly revision: number;
390
+ } | {
391
+ readonly status: 'rejected';
392
+ readonly issues: readonly MutationIssue[];
393
+ readonly revision: number;
394
+ };
395
+ type HistoryState = {
396
+ readonly undoDepth: number;
397
+ readonly redoDepth: number;
398
+ };
399
+ type LocalHistory<C> = Readable<HistoryState> & {
400
+ undo(): OperationResult<C>;
401
+ redo(): OperationResult<C>;
402
+ clear(): void;
403
+ group(): {
404
+ end(): void;
405
+ cancel(): OperationResult<C>;
406
+ };
407
+ };
408
+ type CommitListener<S extends ObjectNode> = (commit: DocumentCommit<S>) => void;
409
+ type DocumentReadable<S extends ObjectNode> = {
410
+ readonly address: {
411
+ resolve(address: DocumentAddress): AddressRef | undefined;
412
+ read(address: DocumentAddress): unknown;
413
+ contains(parent: DocumentAddress, child: DocumentAddress): boolean;
414
+ overlaps(left: DocumentAddress, right: DocumentAddress): boolean;
415
+ debugKey(address: DocumentAddress): string;
416
+ };
417
+ revision(): number;
418
+ subscribe(listener: CommitListener<S>): Unsubscribe;
419
+ subscribe(pick: PathPick<S> | readonly [PathPick<S>, ...PathPick<S>[]], listener: CommitListener<S>): Unsubscribe;
420
+ };
421
+ type DocumentRuntime<S extends ObjectNode> = DocumentReadable<S> & {
422
+ readonly schema: S;
423
+ update<V>(run: (draft: Draft<S>) => Synchronous<V>, options?: {
424
+ readonly source?: Extract<CommitSource, 'local' | 'system'>;
425
+ readonly history?: boolean;
426
+ }): TransactionResult<V, DocumentCommit<S>>;
427
+ apply(changes: unknown, options: {
428
+ readonly expectedRevision: number;
429
+ readonly source?: Exclude<CommitSource, 'history'>;
430
+ readonly history?: boolean;
431
+ }): OperationResult<DocumentCommit<S>>;
432
+ replace(value: Infer<S>, options?: {
433
+ readonly source?: Extract<CommitSource, 'system' | 'remote'>;
434
+ }): OperationResult<DocumentCommit<S>>;
435
+ snapshot(): Infer<S>;
436
+ readonly history: LocalHistory<DocumentCommit<S>>;
437
+ dispose(): void;
438
+ };
439
+ //#endregion
440
+ export { ObjectShape as $, debugKey as A, CollectionPath as B, CollectionAccess as C, snapshot as D, assign as E, ChangeSet as F, DocumentTreeNode as G, DocumentAnchor as H, MemberChange as I, ImpactTarget as J, DocumentTreeValue as K, ValueTransition as L, read as M, resolveAddress as N, AddressRef as O, Change as P, ObjectNode as Q, CollectionId as R, DocumentImpact as S, Read as T, DocumentListConfig as U, DocumentAddress as V, DocumentNode as W, ListNode as X, Infer as Y, MapNode as Z, Unsubscribe as _, ParseError as _t, DocumentDisposedError as a, TreeNode as at, MutationIssueCode as b, parse as bt, DocumentReentrancyError as c, VariantShape as ct, LocalHistory as d, map as dt, OptionalNode as et, ObserverError as f, object as ft, TransactionResult as g, variant as gt, TransactionRejected as h, tree as ht, DocumentDiagnostic as i, TableNode as it, overlaps as j, contains as k, DocumentRuntime as l, field as lt, Synchronous as m, table as mt, CommitSource as n, ReadonlyValue as nt, DocumentProblem as o, ValueSchemaNode as ot, OperationResult as p, optional as pt, FieldNode as q, DocumentCommit as r, SchemaPath as rt, DocumentReadable as s, VariantNode as st, CommitListener as t, PathPick as tt, HistoryState as u, list as ut, Readable as v, ParseIssue as vt, Draft as w, CollectionImpact as x, MutationIssue as y, Validator as yt, CollectionNode as z };
441
+ //# sourceMappingURL=contract-BNStLbSE.d.ts.map