doxum 0.1.4 → 0.1.5
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/dist/{contract-BsY1XLiG.d.ts → contract-4E3moCbY.d.ts} +53 -40
- package/dist/{contract-D8kjdfqT.d.cts → contract-uYJTmT8o.d.cts} +53 -40
- package/dist/dependency-C5_R1tvQ.js.map +1 -1
- package/dist/dependency-Dfzs3khk.cjs.map +1 -1
- package/dist/index.cjs +171 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +171 -22
- package/dist/index.js.map +1 -1
- package/dist/integration.d.cts +1 -1
- package/dist/integration.d.ts +1 -1
- package/dist/local-sync.d.cts +1 -1
- package/dist/local-sync.d.ts +1 -1
- package/package.json +1 -1
- package/skills/doxum-runtime/references/guide.en.md +5 -0
- package/skills/doxum-runtime/references/guide.zh-CN.md +4 -0
- package/skills/doxum-runtime/references/patterns.en.md +7 -0
- package/skills/doxum-runtime/references/patterns.zh-CN.md +6 -0
|
@@ -14,12 +14,17 @@ type DocumentTreeValue<TValue> = {
|
|
|
14
14
|
};
|
|
15
15
|
type BaseNode<K extends string> = {
|
|
16
16
|
readonly kind: K;
|
|
17
|
+
readonly optional?: boolean;
|
|
17
18
|
};
|
|
18
19
|
type FieldNode<T, Optional extends boolean = false> = BaseNode<'field'> & {
|
|
19
20
|
readonly __value?: T;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
} & (Optional extends true ? {
|
|
22
|
+
readonly optional: true;
|
|
23
|
+
} : {
|
|
24
|
+
readonly optional?: false;
|
|
25
|
+
});
|
|
26
|
+
/** A node with optional presence. The marker replaces, rather than intersects, a field marker. */
|
|
27
|
+
type OptionalNode<TNode extends DocumentNode> = TNode extends FieldNode<infer TValue, boolean> ? FieldNode<TValue, true> : TNode & {
|
|
23
28
|
readonly optional: true;
|
|
24
29
|
};
|
|
25
30
|
interface ObjectShape {
|
|
@@ -59,7 +64,7 @@ type ListNode<TItem> = BaseNode<'list'> & {
|
|
|
59
64
|
type TreeNode<TValue> = BaseNode<'tree'> & {
|
|
60
65
|
readonly __value?: TValue;
|
|
61
66
|
};
|
|
62
|
-
type DocumentNode = FieldNode<unknown,
|
|
67
|
+
type DocumentNode = FieldNode<unknown, false> | FieldNode<unknown, true> | ObjectNode<ObjectShape> | VariantNode<string, VariantShape> | SingleNode<ObjectNode<ObjectShape> | VariantNode<string, VariantShape>> | TableNode<ObjectNode<ObjectShape> | VariantNode<string, VariantShape>> | MapNode<ObjectNode<ObjectShape> | VariantNode<string, VariantShape>> | RecordNode<string, unknown> | DictNode<string, unknown> | ListNode<unknown> | TreeNode<unknown>;
|
|
63
68
|
type EntityValue<N extends ObjectNode<ObjectShape> | VariantNode<string, VariantShape>> = N extends ObjectNode<infer S> ? DocumentValueOfShape<S> : N extends VariantNode<infer T, infer V> ? { [K in keyof V & string]: { [P in T]: K } & DocumentValueOfShape<V[K] extends ObjectNode<infer S> ? S : never> }[keyof V & string] : never;
|
|
64
69
|
type DocumentValueOfNode<N> = N extends FieldNode<infer T, infer O> ? O extends true ? T | undefined : T : N extends ObjectNode<infer S> ? DocumentValueOfShape<S> : N extends VariantNode<infer T, infer V> ? EntityValue<VariantNode<T, V>> : N extends SingleNode<infer V> ? EntityValue<V> : N extends TableNode<infer V> ? {
|
|
65
70
|
readonly ids: readonly string[];
|
|
@@ -71,12 +76,13 @@ type OptionalKeys<S extends ObjectShape> = { [K in keyof S]: S[K] extends {
|
|
|
71
76
|
type RequiredKeys<S extends ObjectShape> = Exclude<keyof S, OptionalKeys<S>>;
|
|
72
77
|
type DocumentValueOfShape<S extends ObjectShape> = { readonly [K in RequiredKeys<S>]: DocumentValueOfNode<S[K]> } & { readonly [K in OptionalKeys<S>]?: DocumentValueOfNode<S[K]> };
|
|
73
78
|
type ReadonlyDocument<S extends DocumentSchema> = DocumentValueOfShape<S['shape']>;
|
|
74
|
-
type
|
|
79
|
+
type EntitySchemaNode = ObjectNode<ObjectShape> | VariantNode<string, VariantShape>;
|
|
80
|
+
type CollectionSelector<TId extends string = string, TNode extends EntitySchemaNode = EntitySchemaNode> = {
|
|
75
81
|
readonly kind: 'collection';
|
|
76
82
|
readonly schema: DocumentSchema;
|
|
77
83
|
readonly address: DocumentAddress;
|
|
78
|
-
readonly __id?: TId;
|
|
79
|
-
readonly
|
|
84
|
+
readonly __id?: TId; /** Compile-time entry schema carried by schema selectors. */
|
|
85
|
+
readonly __node?: TNode;
|
|
80
86
|
};
|
|
81
87
|
type ValueSelector<TResult = unknown> = {
|
|
82
88
|
readonly kind: 'value';
|
|
@@ -91,7 +97,7 @@ type ImpactTarget<T = unknown> = {
|
|
|
91
97
|
readonly kind: 'collection';
|
|
92
98
|
readonly at: DocumentAddress;
|
|
93
99
|
readonly id?: string;
|
|
94
|
-
} | CollectionSelector<string
|
|
100
|
+
} | CollectionSelector<string>;
|
|
95
101
|
type PathMarker<TValue> = {
|
|
96
102
|
readonly __value?: TValue;
|
|
97
103
|
};
|
|
@@ -101,7 +107,7 @@ type SchemaPathFor<S extends ObjectShape = ObjectShape, TValue = unknown> = { re
|
|
|
101
107
|
type DocumentSchema<TShape extends ObjectShape = {}> = {
|
|
102
108
|
readonly kind: 'schema';
|
|
103
109
|
readonly shape: TShape;
|
|
104
|
-
collection<TPath extends PathMarker<unknown>>(pick: (path: SchemaPath<TShape>) => TPath): CollectionSelector<CollectionId<TPath>,
|
|
110
|
+
collection<TPath extends PathMarker<unknown>>(pick: (path: SchemaPath<TShape>) => TPath): CollectionSelector<CollectionId<TPath>, CollectionNode<TPath>>;
|
|
105
111
|
value<TPath extends PathMarker<unknown>>(pick: (path: SchemaPath<TShape>) => TPath): ValueSelector<PathValueResult<TPath>>;
|
|
106
112
|
};
|
|
107
113
|
type SchemaPath<S extends ObjectShape = {}> = SchemaPathFor<S, DocumentValueOfShape<S>>;
|
|
@@ -118,25 +124,25 @@ type CollectionPath<N extends ObjectNode<ObjectShape> | VariantNode<string, Vari
|
|
|
118
124
|
readonly item: (id: string) => EntityPath<N>;
|
|
119
125
|
readonly __collection?: {
|
|
120
126
|
readonly id: string;
|
|
121
|
-
readonly
|
|
127
|
+
readonly node: N;
|
|
122
128
|
};
|
|
123
129
|
};
|
|
124
130
|
type PathValue<N extends DocumentNode> = N extends ObjectNode<infer S> ? SchemaPathFor<S, PathNodeValue<N>> : N extends VariantNode<infer _TTag, infer V> ? VariantPath<V> : N extends TableNode<infer V> | MapNode<infer V> ? CollectionPath<V> : N extends SingleNode<infer V> ? EntityPath<V> : SchemaPathFor<{}, PathNodeValue<N>>;
|
|
125
131
|
type CollectionInfo<T> = T extends {
|
|
126
132
|
readonly __collection?: {
|
|
127
133
|
readonly id: infer TId;
|
|
128
|
-
readonly
|
|
134
|
+
readonly node: infer TNode extends EntitySchemaNode;
|
|
129
135
|
};
|
|
130
136
|
} ? {
|
|
131
137
|
readonly id: TId;
|
|
132
|
-
readonly
|
|
138
|
+
readonly node: TNode;
|
|
133
139
|
} : never;
|
|
134
140
|
type CollectionId<T> = CollectionInfo<T> extends {
|
|
135
141
|
readonly id: infer TId extends string;
|
|
136
142
|
} ? TId : string;
|
|
137
|
-
type
|
|
138
|
-
readonly
|
|
139
|
-
} ?
|
|
143
|
+
type CollectionNode<T> = CollectionInfo<T> extends {
|
|
144
|
+
readonly node: infer TNode extends EntitySchemaNode;
|
|
145
|
+
} ? TNode : EntitySchemaNode;
|
|
140
146
|
type PathValueResult<T> = T extends PathMarker<infer TValue> ? TValue : unknown;
|
|
141
147
|
declare const field: <T>() => FieldNode<T>;
|
|
142
148
|
declare const optional: <T extends DocumentNode>(value: T) => OptionalNode<T>;
|
|
@@ -169,6 +175,9 @@ type FieldSetOperation<TSchema extends DocumentSchema = DocumentSchema> = Operat
|
|
|
169
175
|
type FieldClearOperation<TSchema extends DocumentSchema = DocumentSchema> = OperationBase & {
|
|
170
176
|
readonly type: 'field.clear';
|
|
171
177
|
};
|
|
178
|
+
type ValueClearOperation<TSchema extends DocumentSchema = DocumentSchema> = OperationBase & {
|
|
179
|
+
readonly type: 'value.clear';
|
|
180
|
+
};
|
|
172
181
|
type VariantReplaceOperation<TSchema extends DocumentSchema = DocumentSchema> = OperationBase & {
|
|
173
182
|
readonly type: 'variant.replace';
|
|
174
183
|
readonly value: unknown;
|
|
@@ -251,17 +260,17 @@ type TreeReplaceOperation<TSchema extends DocumentSchema = DocumentSchema> = Ope
|
|
|
251
260
|
readonly type: 'tree.replace';
|
|
252
261
|
readonly value: unknown;
|
|
253
262
|
};
|
|
254
|
-
type DocumentOperationUnion<TSchema extends DocumentSchema = DocumentSchema> = FieldSetOperation<TSchema> | FieldClearOperation<TSchema> | VariantReplaceOperation<TSchema> | DictSetOperation<TSchema> | DictDeleteOperation<TSchema> | DictReplaceOperation<TSchema> | EntityCreateOperation<TSchema> | EntityRemoveOperation<TSchema> | EntityMoveOperation<TSchema> | ListInsertOperation<TSchema> | ListMoveOperation<TSchema> | ListRemoveOperation<TSchema> | ListReplaceOperation<TSchema> | TreeInsertOperation<TSchema> | TreeMoveOperation<TSchema> | TreeRemoveOperation<TSchema> | TreeSetOperation<TSchema> | TreeReplaceOperation<TSchema>;
|
|
263
|
+
type DocumentOperationUnion<TSchema extends DocumentSchema = DocumentSchema> = FieldSetOperation<TSchema> | FieldClearOperation<TSchema> | ValueClearOperation<TSchema> | VariantReplaceOperation<TSchema> | DictSetOperation<TSchema> | DictDeleteOperation<TSchema> | DictReplaceOperation<TSchema> | EntityCreateOperation<TSchema> | EntityRemoveOperation<TSchema> | EntityMoveOperation<TSchema> | ListInsertOperation<TSchema> | ListMoveOperation<TSchema> | ListRemoveOperation<TSchema> | ListReplaceOperation<TSchema> | TreeInsertOperation<TSchema> | TreeMoveOperation<TSchema> | TreeRemoveOperation<TSchema> | TreeSetOperation<TSchema> | TreeReplaceOperation<TSchema>;
|
|
255
264
|
type DocumentOperation<TSchema extends DocumentSchema = DocumentSchema> = DocumentOperationUnion<TSchema>;
|
|
256
265
|
//#endregion
|
|
257
266
|
//#region core/src/access/reader.d.ts
|
|
258
267
|
type FieldReader<T> = {
|
|
259
268
|
readonly get: () => T;
|
|
260
269
|
};
|
|
261
|
-
type CollectionReader<TId,
|
|
270
|
+
type CollectionReader<TId, TNode extends EntitySchemaNode> = {
|
|
262
271
|
readonly ids: () => readonly TId[];
|
|
263
272
|
readonly has: (id: TId) => boolean;
|
|
264
|
-
readonly get: (id: TId) =>
|
|
273
|
+
readonly get: (id: TId) => ReaderOfNode<TNode> | undefined;
|
|
265
274
|
};
|
|
266
275
|
type ListReader<T> = {
|
|
267
276
|
readonly values: () => readonly T[];
|
|
@@ -275,44 +284,43 @@ type TreeReader<T> = {
|
|
|
275
284
|
readonly parent: (id: string) => string | undefined;
|
|
276
285
|
readonly children: (id: string) => readonly string[];
|
|
277
286
|
};
|
|
278
|
-
type EntityReader<T> = T extends object ? { readonly [K in keyof T]: ReaderValue<T[K]> } : FieldReader<T>;
|
|
279
|
-
type ReaderValue<T> = T extends readonly (infer TItem)[] ? ListReader<TItem> : T extends object ? EntityReader<T> : FieldReader<T>;
|
|
280
287
|
type ReaderOfNode<TNode extends DocumentNode> = TNode extends {
|
|
281
288
|
kind: 'field';
|
|
282
|
-
} ? FieldReader<DocumentValueOfNode<TNode>> : TNode extends ObjectNode<infer TShape> ? { readonly [K in keyof TShape]: ReaderOfNode<TShape[K]> } : TNode extends VariantNode<string, infer TVariants> ? { readonly [K in keyof TVariants]: ReaderOfNode<TVariants[K]> } : TNode extends SingleNode<infer TValue> ? ReaderOfNode<TValue> : TNode extends TableNode<infer TValue> ? CollectionReader<string,
|
|
289
|
+
} ? FieldReader<DocumentValueOfNode<TNode>> : TNode extends ObjectNode<infer TShape> ? { readonly [K in keyof TShape]: ReaderOfNode<TShape[K]> } : TNode extends VariantNode<string, infer TVariants> ? { readonly [K in keyof TVariants]: ReaderOfNode<TVariants[K]> } : TNode extends SingleNode<infer TValue> ? ReaderOfNode<TValue> : TNode extends TableNode<infer TValue> ? CollectionReader<string, TValue> : TNode extends MapNode<infer TValue> ? CollectionReader<string, TValue> : TNode extends DictNode<infer TKey, infer TValue> ? FieldReader<Readonly<Partial<Record<TKey, TValue>>>> : TNode extends ListNode<infer TItem> ? ListReader<TItem> : TNode extends TreeNode<infer TValue> ? TreeReader<TValue> : FieldReader<DocumentValueOfNode<TNode>>;
|
|
283
290
|
type DocumentReader<TSchema extends DocumentSchema> = ReaderOfNode<ObjectNode<TSchema['shape']>>;
|
|
284
291
|
//#endregion
|
|
285
292
|
//#region core/src/access/writer.d.ts
|
|
286
|
-
type FieldWriter<T> = {
|
|
293
|
+
type FieldWriter<T, Optional extends boolean = false> = {
|
|
287
294
|
readonly set: (value: T) => void;
|
|
288
|
-
|
|
289
|
-
|
|
295
|
+
} & (Optional extends true ? {
|
|
296
|
+
readonly clear: () => void;
|
|
297
|
+
} : {});
|
|
290
298
|
type DictionaryWriter<TKey extends string, TValue> = {
|
|
291
299
|
readonly set: (key: TKey, value: TValue) => void;
|
|
292
300
|
readonly delete: (key: TKey) => void;
|
|
293
301
|
readonly replace: (value: Readonly<Partial<Record<TKey, TValue>>>) => void;
|
|
294
302
|
};
|
|
295
|
-
type CollectionWriter<TId,
|
|
303
|
+
type CollectionWriter<TId, TNode extends EntitySchemaNode> = {
|
|
296
304
|
readonly create: (entry: {
|
|
297
305
|
readonly id: TId;
|
|
298
|
-
readonly value:
|
|
306
|
+
readonly value: DocumentValueOfNode<TNode>;
|
|
299
307
|
} | readonly {
|
|
300
308
|
readonly id: TId;
|
|
301
|
-
readonly value:
|
|
309
|
+
readonly value: DocumentValueOfNode<TNode>;
|
|
302
310
|
}[], anchor?: DocumentAnchor) => void;
|
|
303
|
-
readonly item: (id: TId) =>
|
|
311
|
+
readonly item: (id: TId) => WriterOfNode<TNode>;
|
|
304
312
|
readonly remove: (id: TId | readonly TId[]) => void;
|
|
305
313
|
readonly move: (id: TId, anchor?: DocumentAnchor) => void;
|
|
306
314
|
};
|
|
307
|
-
type MapWriter<TId,
|
|
315
|
+
type MapWriter<TId, TNode extends EntitySchemaNode> = {
|
|
308
316
|
readonly create: (entry: {
|
|
309
317
|
readonly id: TId;
|
|
310
|
-
readonly value:
|
|
318
|
+
readonly value: DocumentValueOfNode<TNode>;
|
|
311
319
|
} | readonly {
|
|
312
320
|
readonly id: TId;
|
|
313
|
-
readonly value:
|
|
321
|
+
readonly value: DocumentValueOfNode<TNode>;
|
|
314
322
|
}[]) => void;
|
|
315
|
-
readonly item: (id: TId) =>
|
|
323
|
+
readonly item: (id: TId) => WriterOfNode<TNode>;
|
|
316
324
|
readonly remove: (id: TId | readonly TId[]) => void;
|
|
317
325
|
};
|
|
318
326
|
type ListWriter<T> = {
|
|
@@ -326,15 +334,20 @@ type TreeWriter<T> = {
|
|
|
326
334
|
readonly move: (id: string, parentId?: string, index?: number) => void;
|
|
327
335
|
readonly remove: (id: string) => void;
|
|
328
336
|
readonly set: (id: string, value: T) => void;
|
|
329
|
-
readonly replace: (value:
|
|
337
|
+
readonly replace: (value: DocumentTreeValue<T>) => void;
|
|
330
338
|
};
|
|
331
|
-
type
|
|
332
|
-
|
|
339
|
+
type OptionalClear<TNode extends DocumentNode, TWriter> = TNode extends {
|
|
340
|
+
readonly optional: true;
|
|
341
|
+
} ? TWriter & {
|
|
342
|
+
readonly clear: () => void;
|
|
343
|
+
} : TWriter;
|
|
333
344
|
type WriterOfNode<TNode extends DocumentNode> = TNode extends {
|
|
334
345
|
kind: 'field';
|
|
335
|
-
} ?
|
|
346
|
+
} ? TNode extends {
|
|
347
|
+
readonly optional: true;
|
|
348
|
+
} ? FieldWriter<DocumentValueOfNode<TNode>, true> : FieldWriter<DocumentValueOfNode<TNode>> : TNode extends ObjectNode<infer TShape> ? { readonly [K in keyof TShape]: WriterOfNode<TShape[K]> } : TNode extends VariantNode<string, infer _TVariants> ? OptionalClear<TNode, {
|
|
336
349
|
readonly replace: (value: DocumentValueOfNode<TNode>) => void;
|
|
337
|
-
} : TNode extends SingleNode<infer TValue> ? WriterOfNode<TValue> : TNode extends TableNode<infer TValue> ? CollectionWriter<string,
|
|
350
|
+
}> : TNode extends SingleNode<infer TValue> ? WriterOfNode<TValue> : TNode extends TableNode<infer TValue> ? CollectionWriter<string, TValue> : TNode extends MapNode<infer TValue> ? MapWriter<string, TValue> : TNode extends DictNode<infer TKey, infer TValue> ? OptionalClear<TNode, DictionaryWriter<TKey, TValue>> : TNode extends ListNode<infer TItem> ? OptionalClear<TNode, ListWriter<TItem>> : TNode extends TreeNode<infer TValue> ? OptionalClear<TNode, TreeWriter<TValue>> : FieldWriter<DocumentValueOfNode<TNode>>;
|
|
338
351
|
type DocumentWriter<TSchema extends DocumentSchema> = WriterOfNode<ObjectNode<TSchema['shape']>>;
|
|
339
352
|
//#endregion
|
|
340
353
|
//#region core/src/mutation/issue.d.ts
|
|
@@ -360,7 +373,7 @@ type CollectionImpact<TId> = {
|
|
|
360
373
|
type DocumentImpact<TSchema extends DocumentSchema> = {
|
|
361
374
|
readonly kind: 'incremental' | 'reset';
|
|
362
375
|
readonly affects: (target: ImpactTarget<unknown>) => boolean;
|
|
363
|
-
readonly collection: <TId extends string
|
|
376
|
+
readonly collection: <TId extends string>(selector: CollectionSelector<TId>) => CollectionImpact<TId>;
|
|
364
377
|
readonly operations: readonly DocumentOperationUnion<TSchema>[];
|
|
365
378
|
};
|
|
366
379
|
//#endregion
|
|
@@ -535,5 +548,5 @@ type DocumentRuntime<TSchema extends DocumentSchema> = DocumentReadable<TSchema>
|
|
|
535
548
|
dispose(): void;
|
|
536
549
|
};
|
|
537
550
|
//#endregion
|
|
538
|
-
export {
|
|
539
|
-
//# sourceMappingURL=contract-
|
|
551
|
+
export { EntityEntry as $, tree as $t, MutationIssue as A, MapNode as At, CollectionReader as B, ValueSelector as Bt, contains as C, DocumentTreeValue as Ct, resolveAddress as D, FieldNode as Dt, read as E, EntitySchemaNode as Et, FieldWriter as F, RecordNode as Ft, TreeReader as G, list as Gt, FieldReader as H, VariantShape as Ht, ListWriter as I, SchemaPath as It, DictSetOperation as J, optional as Jt, DictDeleteOperation as K, map as Kt, MapWriter as L, SingleNode as Lt, CollectionWriter as M, ObjectShape as Mt, DictionaryWriter as N, OptionalNode as Nt, CollectionImpact as O, ImpactTarget as Ot, DocumentWriter as P, ReadonlyDocument as Pt, EntityCreateOperation as Q, table as Qt, TreeWriter as R, TableNode as Rt, AddressRef as S, DocumentTreeNode as St, overlaps as T, DocumentValueOfShape as Tt, ListReader as U, dict as Ut, DocumentReader as V, VariantNode as Vt, ReaderOfNode as W, field as Wt, DocumentOperation as X, schema as Xt, DocumentAnchor as Y, record as Yt, DocumentOperationUnion as Z, single as Zt, CommandFootprint as _, DictNode as _t, DocumentProblem as a, ListMoveOperation as at, decodeCommandFootprint as b, DocumentNode as bt, DocumentRuntime as c, TreeInsertOperation as ct, LocalHistory as d, TreeReplaceOperation as dt, variant as en, EntityMoveOperation as et, ObserverError as f, TreeSetOperation as ft, Unsubscribe as g, CollectionSelector as gt, TransactionResult as h, CollectionNode as ht, DocumentDisposedError as i, ListInsertOperation as it, MutationIssueCode as j, ObjectNode as jt, DocumentImpact as k, ListNode as kt, DocumentTransaction as l, TreeMoveOperation as lt, PreparedUpdateResult as m, VariantReplaceOperation as mt, DocumentCommit as n, FieldClearOperation as nt, DocumentReadable as o, ListRemoveOperation as ot, OperationResult as p, ValueClearOperation as pt, DictReplaceOperation as q, object as qt, DocumentDiagnostic as r, FieldSetOperation as rt, DocumentReentrancyError as s, ListReplaceOperation as st, CommitSource as t, EntityRemoveOperation as tt, HistoryState as u, TreeRemoveOperation as ut, CommandFootprintTarget as v, DocumentAddress as vt, debugKey as w, DocumentValueOfNode as wt, footprintsOverlap as x, DocumentSchema as xt, commandFootprint as y, DocumentListConfig as yt, WriterOfNode as z, TreeNode as zt };
|
|
552
|
+
//# sourceMappingURL=contract-4E3moCbY.d.ts.map
|
|
@@ -14,12 +14,17 @@ type DocumentTreeValue<TValue> = {
|
|
|
14
14
|
};
|
|
15
15
|
type BaseNode<K extends string> = {
|
|
16
16
|
readonly kind: K;
|
|
17
|
+
readonly optional?: boolean;
|
|
17
18
|
};
|
|
18
19
|
type FieldNode<T, Optional extends boolean = false> = BaseNode<'field'> & {
|
|
19
20
|
readonly __value?: T;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
} & (Optional extends true ? {
|
|
22
|
+
readonly optional: true;
|
|
23
|
+
} : {
|
|
24
|
+
readonly optional?: false;
|
|
25
|
+
});
|
|
26
|
+
/** A node with optional presence. The marker replaces, rather than intersects, a field marker. */
|
|
27
|
+
type OptionalNode<TNode extends DocumentNode> = TNode extends FieldNode<infer TValue, boolean> ? FieldNode<TValue, true> : TNode & {
|
|
23
28
|
readonly optional: true;
|
|
24
29
|
};
|
|
25
30
|
interface ObjectShape {
|
|
@@ -59,7 +64,7 @@ type ListNode<TItem> = BaseNode<'list'> & {
|
|
|
59
64
|
type TreeNode<TValue> = BaseNode<'tree'> & {
|
|
60
65
|
readonly __value?: TValue;
|
|
61
66
|
};
|
|
62
|
-
type DocumentNode = FieldNode<unknown,
|
|
67
|
+
type DocumentNode = FieldNode<unknown, false> | FieldNode<unknown, true> | ObjectNode<ObjectShape> | VariantNode<string, VariantShape> | SingleNode<ObjectNode<ObjectShape> | VariantNode<string, VariantShape>> | TableNode<ObjectNode<ObjectShape> | VariantNode<string, VariantShape>> | MapNode<ObjectNode<ObjectShape> | VariantNode<string, VariantShape>> | RecordNode<string, unknown> | DictNode<string, unknown> | ListNode<unknown> | TreeNode<unknown>;
|
|
63
68
|
type EntityValue<N extends ObjectNode<ObjectShape> | VariantNode<string, VariantShape>> = N extends ObjectNode<infer S> ? DocumentValueOfShape<S> : N extends VariantNode<infer T, infer V> ? { [K in keyof V & string]: { [P in T]: K } & DocumentValueOfShape<V[K] extends ObjectNode<infer S> ? S : never> }[keyof V & string] : never;
|
|
64
69
|
type DocumentValueOfNode<N> = N extends FieldNode<infer T, infer O> ? O extends true ? T | undefined : T : N extends ObjectNode<infer S> ? DocumentValueOfShape<S> : N extends VariantNode<infer T, infer V> ? EntityValue<VariantNode<T, V>> : N extends SingleNode<infer V> ? EntityValue<V> : N extends TableNode<infer V> ? {
|
|
65
70
|
readonly ids: readonly string[];
|
|
@@ -71,12 +76,13 @@ type OptionalKeys<S extends ObjectShape> = { [K in keyof S]: S[K] extends {
|
|
|
71
76
|
type RequiredKeys<S extends ObjectShape> = Exclude<keyof S, OptionalKeys<S>>;
|
|
72
77
|
type DocumentValueOfShape<S extends ObjectShape> = { readonly [K in RequiredKeys<S>]: DocumentValueOfNode<S[K]> } & { readonly [K in OptionalKeys<S>]?: DocumentValueOfNode<S[K]> };
|
|
73
78
|
type ReadonlyDocument<S extends DocumentSchema> = DocumentValueOfShape<S['shape']>;
|
|
74
|
-
type
|
|
79
|
+
type EntitySchemaNode = ObjectNode<ObjectShape> | VariantNode<string, VariantShape>;
|
|
80
|
+
type CollectionSelector<TId extends string = string, TNode extends EntitySchemaNode = EntitySchemaNode> = {
|
|
75
81
|
readonly kind: 'collection';
|
|
76
82
|
readonly schema: DocumentSchema;
|
|
77
83
|
readonly address: DocumentAddress;
|
|
78
|
-
readonly __id?: TId;
|
|
79
|
-
readonly
|
|
84
|
+
readonly __id?: TId; /** Compile-time entry schema carried by schema selectors. */
|
|
85
|
+
readonly __node?: TNode;
|
|
80
86
|
};
|
|
81
87
|
type ValueSelector<TResult = unknown> = {
|
|
82
88
|
readonly kind: 'value';
|
|
@@ -91,7 +97,7 @@ type ImpactTarget<T = unknown> = {
|
|
|
91
97
|
readonly kind: 'collection';
|
|
92
98
|
readonly at: DocumentAddress;
|
|
93
99
|
readonly id?: string;
|
|
94
|
-
} | CollectionSelector<string
|
|
100
|
+
} | CollectionSelector<string>;
|
|
95
101
|
type PathMarker<TValue> = {
|
|
96
102
|
readonly __value?: TValue;
|
|
97
103
|
};
|
|
@@ -101,7 +107,7 @@ type SchemaPathFor<S extends ObjectShape = ObjectShape, TValue = unknown> = { re
|
|
|
101
107
|
type DocumentSchema<TShape extends ObjectShape = {}> = {
|
|
102
108
|
readonly kind: 'schema';
|
|
103
109
|
readonly shape: TShape;
|
|
104
|
-
collection<TPath extends PathMarker<unknown>>(pick: (path: SchemaPath<TShape>) => TPath): CollectionSelector<CollectionId<TPath>,
|
|
110
|
+
collection<TPath extends PathMarker<unknown>>(pick: (path: SchemaPath<TShape>) => TPath): CollectionSelector<CollectionId<TPath>, CollectionNode<TPath>>;
|
|
105
111
|
value<TPath extends PathMarker<unknown>>(pick: (path: SchemaPath<TShape>) => TPath): ValueSelector<PathValueResult<TPath>>;
|
|
106
112
|
};
|
|
107
113
|
type SchemaPath<S extends ObjectShape = {}> = SchemaPathFor<S, DocumentValueOfShape<S>>;
|
|
@@ -118,25 +124,25 @@ type CollectionPath<N extends ObjectNode<ObjectShape> | VariantNode<string, Vari
|
|
|
118
124
|
readonly item: (id: string) => EntityPath<N>;
|
|
119
125
|
readonly __collection?: {
|
|
120
126
|
readonly id: string;
|
|
121
|
-
readonly
|
|
127
|
+
readonly node: N;
|
|
122
128
|
};
|
|
123
129
|
};
|
|
124
130
|
type PathValue<N extends DocumentNode> = N extends ObjectNode<infer S> ? SchemaPathFor<S, PathNodeValue<N>> : N extends VariantNode<infer _TTag, infer V> ? VariantPath<V> : N extends TableNode<infer V> | MapNode<infer V> ? CollectionPath<V> : N extends SingleNode<infer V> ? EntityPath<V> : SchemaPathFor<{}, PathNodeValue<N>>;
|
|
125
131
|
type CollectionInfo<T> = T extends {
|
|
126
132
|
readonly __collection?: {
|
|
127
133
|
readonly id: infer TId;
|
|
128
|
-
readonly
|
|
134
|
+
readonly node: infer TNode extends EntitySchemaNode;
|
|
129
135
|
};
|
|
130
136
|
} ? {
|
|
131
137
|
readonly id: TId;
|
|
132
|
-
readonly
|
|
138
|
+
readonly node: TNode;
|
|
133
139
|
} : never;
|
|
134
140
|
type CollectionId<T> = CollectionInfo<T> extends {
|
|
135
141
|
readonly id: infer TId extends string;
|
|
136
142
|
} ? TId : string;
|
|
137
|
-
type
|
|
138
|
-
readonly
|
|
139
|
-
} ?
|
|
143
|
+
type CollectionNode<T> = CollectionInfo<T> extends {
|
|
144
|
+
readonly node: infer TNode extends EntitySchemaNode;
|
|
145
|
+
} ? TNode : EntitySchemaNode;
|
|
140
146
|
type PathValueResult<T> = T extends PathMarker<infer TValue> ? TValue : unknown;
|
|
141
147
|
declare const field: <T>() => FieldNode<T>;
|
|
142
148
|
declare const optional: <T extends DocumentNode>(value: T) => OptionalNode<T>;
|
|
@@ -169,6 +175,9 @@ type FieldSetOperation<TSchema extends DocumentSchema = DocumentSchema> = Operat
|
|
|
169
175
|
type FieldClearOperation<TSchema extends DocumentSchema = DocumentSchema> = OperationBase & {
|
|
170
176
|
readonly type: 'field.clear';
|
|
171
177
|
};
|
|
178
|
+
type ValueClearOperation<TSchema extends DocumentSchema = DocumentSchema> = OperationBase & {
|
|
179
|
+
readonly type: 'value.clear';
|
|
180
|
+
};
|
|
172
181
|
type VariantReplaceOperation<TSchema extends DocumentSchema = DocumentSchema> = OperationBase & {
|
|
173
182
|
readonly type: 'variant.replace';
|
|
174
183
|
readonly value: unknown;
|
|
@@ -251,17 +260,17 @@ type TreeReplaceOperation<TSchema extends DocumentSchema = DocumentSchema> = Ope
|
|
|
251
260
|
readonly type: 'tree.replace';
|
|
252
261
|
readonly value: unknown;
|
|
253
262
|
};
|
|
254
|
-
type DocumentOperationUnion<TSchema extends DocumentSchema = DocumentSchema> = FieldSetOperation<TSchema> | FieldClearOperation<TSchema> | VariantReplaceOperation<TSchema> | DictSetOperation<TSchema> | DictDeleteOperation<TSchema> | DictReplaceOperation<TSchema> | EntityCreateOperation<TSchema> | EntityRemoveOperation<TSchema> | EntityMoveOperation<TSchema> | ListInsertOperation<TSchema> | ListMoveOperation<TSchema> | ListRemoveOperation<TSchema> | ListReplaceOperation<TSchema> | TreeInsertOperation<TSchema> | TreeMoveOperation<TSchema> | TreeRemoveOperation<TSchema> | TreeSetOperation<TSchema> | TreeReplaceOperation<TSchema>;
|
|
263
|
+
type DocumentOperationUnion<TSchema extends DocumentSchema = DocumentSchema> = FieldSetOperation<TSchema> | FieldClearOperation<TSchema> | ValueClearOperation<TSchema> | VariantReplaceOperation<TSchema> | DictSetOperation<TSchema> | DictDeleteOperation<TSchema> | DictReplaceOperation<TSchema> | EntityCreateOperation<TSchema> | EntityRemoveOperation<TSchema> | EntityMoveOperation<TSchema> | ListInsertOperation<TSchema> | ListMoveOperation<TSchema> | ListRemoveOperation<TSchema> | ListReplaceOperation<TSchema> | TreeInsertOperation<TSchema> | TreeMoveOperation<TSchema> | TreeRemoveOperation<TSchema> | TreeSetOperation<TSchema> | TreeReplaceOperation<TSchema>;
|
|
255
264
|
type DocumentOperation<TSchema extends DocumentSchema = DocumentSchema> = DocumentOperationUnion<TSchema>;
|
|
256
265
|
//#endregion
|
|
257
266
|
//#region core/src/access/reader.d.ts
|
|
258
267
|
type FieldReader<T> = {
|
|
259
268
|
readonly get: () => T;
|
|
260
269
|
};
|
|
261
|
-
type CollectionReader<TId,
|
|
270
|
+
type CollectionReader<TId, TNode extends EntitySchemaNode> = {
|
|
262
271
|
readonly ids: () => readonly TId[];
|
|
263
272
|
readonly has: (id: TId) => boolean;
|
|
264
|
-
readonly get: (id: TId) =>
|
|
273
|
+
readonly get: (id: TId) => ReaderOfNode<TNode> | undefined;
|
|
265
274
|
};
|
|
266
275
|
type ListReader<T> = {
|
|
267
276
|
readonly values: () => readonly T[];
|
|
@@ -275,44 +284,43 @@ type TreeReader<T> = {
|
|
|
275
284
|
readonly parent: (id: string) => string | undefined;
|
|
276
285
|
readonly children: (id: string) => readonly string[];
|
|
277
286
|
};
|
|
278
|
-
type EntityReader<T> = T extends object ? { readonly [K in keyof T]: ReaderValue<T[K]> } : FieldReader<T>;
|
|
279
|
-
type ReaderValue<T> = T extends readonly (infer TItem)[] ? ListReader<TItem> : T extends object ? EntityReader<T> : FieldReader<T>;
|
|
280
287
|
type ReaderOfNode<TNode extends DocumentNode> = TNode extends {
|
|
281
288
|
kind: 'field';
|
|
282
|
-
} ? FieldReader<DocumentValueOfNode<TNode>> : TNode extends ObjectNode<infer TShape> ? { readonly [K in keyof TShape]: ReaderOfNode<TShape[K]> } : TNode extends VariantNode<string, infer TVariants> ? { readonly [K in keyof TVariants]: ReaderOfNode<TVariants[K]> } : TNode extends SingleNode<infer TValue> ? ReaderOfNode<TValue> : TNode extends TableNode<infer TValue> ? CollectionReader<string,
|
|
289
|
+
} ? FieldReader<DocumentValueOfNode<TNode>> : TNode extends ObjectNode<infer TShape> ? { readonly [K in keyof TShape]: ReaderOfNode<TShape[K]> } : TNode extends VariantNode<string, infer TVariants> ? { readonly [K in keyof TVariants]: ReaderOfNode<TVariants[K]> } : TNode extends SingleNode<infer TValue> ? ReaderOfNode<TValue> : TNode extends TableNode<infer TValue> ? CollectionReader<string, TValue> : TNode extends MapNode<infer TValue> ? CollectionReader<string, TValue> : TNode extends DictNode<infer TKey, infer TValue> ? FieldReader<Readonly<Partial<Record<TKey, TValue>>>> : TNode extends ListNode<infer TItem> ? ListReader<TItem> : TNode extends TreeNode<infer TValue> ? TreeReader<TValue> : FieldReader<DocumentValueOfNode<TNode>>;
|
|
283
290
|
type DocumentReader<TSchema extends DocumentSchema> = ReaderOfNode<ObjectNode<TSchema['shape']>>;
|
|
284
291
|
//#endregion
|
|
285
292
|
//#region core/src/access/writer.d.ts
|
|
286
|
-
type FieldWriter<T> = {
|
|
293
|
+
type FieldWriter<T, Optional extends boolean = false> = {
|
|
287
294
|
readonly set: (value: T) => void;
|
|
288
|
-
|
|
289
|
-
|
|
295
|
+
} & (Optional extends true ? {
|
|
296
|
+
readonly clear: () => void;
|
|
297
|
+
} : {});
|
|
290
298
|
type DictionaryWriter<TKey extends string, TValue> = {
|
|
291
299
|
readonly set: (key: TKey, value: TValue) => void;
|
|
292
300
|
readonly delete: (key: TKey) => void;
|
|
293
301
|
readonly replace: (value: Readonly<Partial<Record<TKey, TValue>>>) => void;
|
|
294
302
|
};
|
|
295
|
-
type CollectionWriter<TId,
|
|
303
|
+
type CollectionWriter<TId, TNode extends EntitySchemaNode> = {
|
|
296
304
|
readonly create: (entry: {
|
|
297
305
|
readonly id: TId;
|
|
298
|
-
readonly value:
|
|
306
|
+
readonly value: DocumentValueOfNode<TNode>;
|
|
299
307
|
} | readonly {
|
|
300
308
|
readonly id: TId;
|
|
301
|
-
readonly value:
|
|
309
|
+
readonly value: DocumentValueOfNode<TNode>;
|
|
302
310
|
}[], anchor?: DocumentAnchor) => void;
|
|
303
|
-
readonly item: (id: TId) =>
|
|
311
|
+
readonly item: (id: TId) => WriterOfNode<TNode>;
|
|
304
312
|
readonly remove: (id: TId | readonly TId[]) => void;
|
|
305
313
|
readonly move: (id: TId, anchor?: DocumentAnchor) => void;
|
|
306
314
|
};
|
|
307
|
-
type MapWriter<TId,
|
|
315
|
+
type MapWriter<TId, TNode extends EntitySchemaNode> = {
|
|
308
316
|
readonly create: (entry: {
|
|
309
317
|
readonly id: TId;
|
|
310
|
-
readonly value:
|
|
318
|
+
readonly value: DocumentValueOfNode<TNode>;
|
|
311
319
|
} | readonly {
|
|
312
320
|
readonly id: TId;
|
|
313
|
-
readonly value:
|
|
321
|
+
readonly value: DocumentValueOfNode<TNode>;
|
|
314
322
|
}[]) => void;
|
|
315
|
-
readonly item: (id: TId) =>
|
|
323
|
+
readonly item: (id: TId) => WriterOfNode<TNode>;
|
|
316
324
|
readonly remove: (id: TId | readonly TId[]) => void;
|
|
317
325
|
};
|
|
318
326
|
type ListWriter<T> = {
|
|
@@ -326,15 +334,20 @@ type TreeWriter<T> = {
|
|
|
326
334
|
readonly move: (id: string, parentId?: string, index?: number) => void;
|
|
327
335
|
readonly remove: (id: string) => void;
|
|
328
336
|
readonly set: (id: string, value: T) => void;
|
|
329
|
-
readonly replace: (value:
|
|
337
|
+
readonly replace: (value: DocumentTreeValue<T>) => void;
|
|
330
338
|
};
|
|
331
|
-
type
|
|
332
|
-
|
|
339
|
+
type OptionalClear<TNode extends DocumentNode, TWriter> = TNode extends {
|
|
340
|
+
readonly optional: true;
|
|
341
|
+
} ? TWriter & {
|
|
342
|
+
readonly clear: () => void;
|
|
343
|
+
} : TWriter;
|
|
333
344
|
type WriterOfNode<TNode extends DocumentNode> = TNode extends {
|
|
334
345
|
kind: 'field';
|
|
335
|
-
} ?
|
|
346
|
+
} ? TNode extends {
|
|
347
|
+
readonly optional: true;
|
|
348
|
+
} ? FieldWriter<DocumentValueOfNode<TNode>, true> : FieldWriter<DocumentValueOfNode<TNode>> : TNode extends ObjectNode<infer TShape> ? { readonly [K in keyof TShape]: WriterOfNode<TShape[K]> } : TNode extends VariantNode<string, infer _TVariants> ? OptionalClear<TNode, {
|
|
336
349
|
readonly replace: (value: DocumentValueOfNode<TNode>) => void;
|
|
337
|
-
} : TNode extends SingleNode<infer TValue> ? WriterOfNode<TValue> : TNode extends TableNode<infer TValue> ? CollectionWriter<string,
|
|
350
|
+
}> : TNode extends SingleNode<infer TValue> ? WriterOfNode<TValue> : TNode extends TableNode<infer TValue> ? CollectionWriter<string, TValue> : TNode extends MapNode<infer TValue> ? MapWriter<string, TValue> : TNode extends DictNode<infer TKey, infer TValue> ? OptionalClear<TNode, DictionaryWriter<TKey, TValue>> : TNode extends ListNode<infer TItem> ? OptionalClear<TNode, ListWriter<TItem>> : TNode extends TreeNode<infer TValue> ? OptionalClear<TNode, TreeWriter<TValue>> : FieldWriter<DocumentValueOfNode<TNode>>;
|
|
338
351
|
type DocumentWriter<TSchema extends DocumentSchema> = WriterOfNode<ObjectNode<TSchema['shape']>>;
|
|
339
352
|
//#endregion
|
|
340
353
|
//#region core/src/mutation/issue.d.ts
|
|
@@ -360,7 +373,7 @@ type CollectionImpact<TId> = {
|
|
|
360
373
|
type DocumentImpact<TSchema extends DocumentSchema> = {
|
|
361
374
|
readonly kind: 'incremental' | 'reset';
|
|
362
375
|
readonly affects: (target: ImpactTarget<unknown>) => boolean;
|
|
363
|
-
readonly collection: <TId extends string
|
|
376
|
+
readonly collection: <TId extends string>(selector: CollectionSelector<TId>) => CollectionImpact<TId>;
|
|
364
377
|
readonly operations: readonly DocumentOperationUnion<TSchema>[];
|
|
365
378
|
};
|
|
366
379
|
//#endregion
|
|
@@ -535,5 +548,5 @@ type DocumentRuntime<TSchema extends DocumentSchema> = DocumentReadable<TSchema>
|
|
|
535
548
|
dispose(): void;
|
|
536
549
|
};
|
|
537
550
|
//#endregion
|
|
538
|
-
export {
|
|
539
|
-
//# sourceMappingURL=contract-
|
|
551
|
+
export { EntityEntry as $, tree as $t, MutationIssue as A, MapNode as At, CollectionReader as B, ValueSelector as Bt, contains as C, DocumentTreeValue as Ct, resolveAddress as D, FieldNode as Dt, read as E, EntitySchemaNode as Et, FieldWriter as F, RecordNode as Ft, TreeReader as G, list as Gt, FieldReader as H, VariantShape as Ht, ListWriter as I, SchemaPath as It, DictSetOperation as J, optional as Jt, DictDeleteOperation as K, map as Kt, MapWriter as L, SingleNode as Lt, CollectionWriter as M, ObjectShape as Mt, DictionaryWriter as N, OptionalNode as Nt, CollectionImpact as O, ImpactTarget as Ot, DocumentWriter as P, ReadonlyDocument as Pt, EntityCreateOperation as Q, table as Qt, TreeWriter as R, TableNode as Rt, AddressRef as S, DocumentTreeNode as St, overlaps as T, DocumentValueOfShape as Tt, ListReader as U, dict as Ut, DocumentReader as V, VariantNode as Vt, ReaderOfNode as W, field as Wt, DocumentOperation as X, schema as Xt, DocumentAnchor as Y, record as Yt, DocumentOperationUnion as Z, single as Zt, CommandFootprint as _, DictNode as _t, DocumentProblem as a, ListMoveOperation as at, decodeCommandFootprint as b, DocumentNode as bt, DocumentRuntime as c, TreeInsertOperation as ct, LocalHistory as d, TreeReplaceOperation as dt, variant as en, EntityMoveOperation as et, ObserverError as f, TreeSetOperation as ft, Unsubscribe as g, CollectionSelector as gt, TransactionResult as h, CollectionNode as ht, DocumentDisposedError as i, ListInsertOperation as it, MutationIssueCode as j, ObjectNode as jt, DocumentImpact as k, ListNode as kt, DocumentTransaction as l, TreeMoveOperation as lt, PreparedUpdateResult as m, VariantReplaceOperation as mt, DocumentCommit as n, FieldClearOperation as nt, DocumentReadable as o, ListRemoveOperation as ot, OperationResult as p, ValueClearOperation as pt, DictReplaceOperation as q, object as qt, DocumentDiagnostic as r, FieldSetOperation as rt, DocumentReentrancyError as s, ListReplaceOperation as st, CommitSource as t, EntityRemoveOperation as tt, HistoryState as u, TreeRemoveOperation as ut, CommandFootprintTarget as v, DocumentAddress as vt, debugKey as w, DocumentValueOfNode as wt, footprintsOverlap as x, DocumentSchema as xt, commandFootprint as y, DocumentListConfig as yt, WriterOfNode as z, TreeNode as zt };
|
|
552
|
+
//# sourceMappingURL=contract-uYJTmT8o.d.cts.map
|