@contember/bindx 0.1.12 → 0.1.13
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/handles/HasOneHandle.d.ts +3 -0
- package/dist/handles/HasOneHandle.d.ts.map +1 -1
- package/dist/persistence/BatchPersister.d.ts.map +1 -1
- package/dist/persistence/MutationCollector.d.ts +7 -0
- package/dist/persistence/MutationCollector.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/handles/HasOneHandle.ts +11 -1
- package/src/persistence/BatchPersister.ts +25 -8
- package/src/persistence/MutationCollector.ts +15 -0
|
@@ -41,6 +41,9 @@ export declare class HasOneHandle<TEntity extends object = object, TSelected = T
|
|
|
41
41
|
subscribe(callback: () => void): () => void;
|
|
42
42
|
/**
|
|
43
43
|
* Gets the relation state.
|
|
44
|
+
* Falls back to snapshot data when no explicit relation state exists,
|
|
45
|
+
* so server-loaded has-one relations report 'connected' without
|
|
46
|
+
* requiring a prior RelationStore entry.
|
|
44
47
|
*/
|
|
45
48
|
get state(): 'connected' | 'disconnected' | 'deleted' | 'creating';
|
|
46
49
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HasOneHandle.d.ts","sourceRoot":"","sources":["../../src/handles/HasOneHandle.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"HasOneHandle.d.ts","sourceRoot":"","sources":["../../src/handles/HasOneHandle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchPersister.d.ts","sourceRoot":"","sources":["../../src/persistence/BatchPersister.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAoB,MAAM,qBAAqB,CAAA;AACtE,OAAO,KAAK,EACX,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EAGZ,UAAU,EACV,MAAM,YAAY,CAAA;AAuBnB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC;;OAEG;IACH,iBAAiB,CAAC,EAAE,qBAAqB,CAAA;IAEzC;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAA;IAEzB;;OAEG;IACH,MAAM,CAAC,EAAE,cAAc,CAAA;IAEvB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,UAAU,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,qBAAa,cAAc;IAQzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAT5B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAuB;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAa;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAY;gBAG5B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,gBAAgB,EAC7C,OAAO,CAAC,EAAE,qBAAqB;
|
|
1
|
+
{"version":3,"file":"BatchPersister.d.ts","sourceRoot":"","sources":["../../src/persistence/BatchPersister.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,7 @@ export declare class MutationCollector implements MutationDataCollector {
|
|
|
29
29
|
private readonly store;
|
|
30
30
|
private readonly schemaProvider;
|
|
31
31
|
private excludedEntityIds;
|
|
32
|
+
private readonly _nestedEntityIds;
|
|
32
33
|
constructor(store: SnapshotStore, schemaProvider: MutationSchemaProvider);
|
|
33
34
|
/**
|
|
34
35
|
* Sets entity IDs that should be excluded from nested mutation generation.
|
|
@@ -36,6 +37,12 @@ export declare class MutationCollector implements MutationDataCollector {
|
|
|
36
37
|
* to avoid duplicate changes.
|
|
37
38
|
*/
|
|
38
39
|
setExcludedEntities(ids: ReadonlySet<string>): void;
|
|
40
|
+
/**
|
|
41
|
+
* Returns IDs of entities that were included as nested inline creates
|
|
42
|
+
* inside another entity's mutation data. These entities don't need
|
|
43
|
+
* their own standalone top-level mutations.
|
|
44
|
+
*/
|
|
45
|
+
getNestedEntityIds(): ReadonlySet<string>;
|
|
39
46
|
/**
|
|
40
47
|
* Collects all changes for an entity into appropriate mutation format.
|
|
41
48
|
* Returns the mutation result or null if no changes/entity doesn't exist.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MutationCollector.d.ts","sourceRoot":"","sources":["../../src/persistence/MutationCollector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAA2B,MAAM,2BAA2B,CAAA;AAEvF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAGvD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,kDAAkD;IAClD,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACpC,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAA;IAChB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,YAAW,qBAAqB;
|
|
1
|
+
{"version":3,"file":"MutationCollector.d.ts","sourceRoot":"","sources":["../../src/persistence/MutationCollector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAA2B,MAAM,2BAA2B,CAAA;AAEvF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAGvD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,kDAAkD;IAClD,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACpC,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAA;IAChB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,YAAW,qBAAqB;IAK7D,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,cAAc;IALhC,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyB;gBAGxC,KAAK,EAAE,aAAa,EACpB,cAAc,EAAE,sBAAsB;IAGxD;;;;OAIG;IACH,mBAAmB,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI;IAKnD;;;;OAIG;IACH,kBAAkB,IAAI,WAAW,CAAC,MAAM,CAAC;IAMzC;;;OAGG;IACH,eAAe,CACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACd,oBAAoB,GAAG,IAAI;IAkD9B;;;OAGG;IACH,iBAAiB,CAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAqBjC;;;OAGG;IACH,iBAAiB,CAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAkDjC;;;OAGG;IACH,iBAAiB,CAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IA6CjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAsE9B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA8BhC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IA8EhC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA+BjC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAgDzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAGxB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contember/bindx",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.13",
|
|
4
4
|
"description": "Type-safe data binding framework (core)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/index.ts",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
],
|
|
18
18
|
"license": "MIT",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@contember/bindx-client": "0.1.
|
|
20
|
+
"@contember/bindx-client": "0.1.13",
|
|
21
21
|
"@contember/graphql-builder": "^2.1.0-beta.1",
|
|
22
22
|
"@contember/graphql-client": "^2.1.0-beta.1"
|
|
23
23
|
},
|
|
@@ -137,6 +137,9 @@ export class HasOneHandle<TEntity extends object = object, TSelected = TEntity>
|
|
|
137
137
|
|
|
138
138
|
/**
|
|
139
139
|
* Gets the relation state.
|
|
140
|
+
* Falls back to snapshot data when no explicit relation state exists,
|
|
141
|
+
* so server-loaded has-one relations report 'connected' without
|
|
142
|
+
* requiring a prior RelationStore entry.
|
|
140
143
|
*/
|
|
141
144
|
get state(): 'connected' | 'disconnected' | 'deleted' | 'creating' {
|
|
142
145
|
const relation = this.store.getRelation(
|
|
@@ -144,7 +147,14 @@ export class HasOneHandle<TEntity extends object = object, TSelected = TEntity>
|
|
|
144
147
|
this.entityId,
|
|
145
148
|
this.fieldName,
|
|
146
149
|
)
|
|
147
|
-
|
|
150
|
+
if (relation) {
|
|
151
|
+
return relation.state
|
|
152
|
+
}
|
|
153
|
+
// No explicit relation state — check if snapshot has embedded data
|
|
154
|
+
if (this.relatedId !== null) {
|
|
155
|
+
return 'connected'
|
|
156
|
+
}
|
|
157
|
+
return 'disconnected'
|
|
148
158
|
}
|
|
149
159
|
|
|
150
160
|
/**
|
|
@@ -85,10 +85,12 @@ export class BatchPersister {
|
|
|
85
85
|
options?: BatchPersisterOptions,
|
|
86
86
|
) {
|
|
87
87
|
this.changeRegistry = new ChangeRegistry(store)
|
|
88
|
-
this.mutationCollector = options?.mutationCollector
|
|
89
88
|
this.undoManager = options?.undoManager
|
|
90
89
|
this.schema = options?.schema
|
|
91
90
|
this.defaultUpdateMode = options?.defaultUpdateMode ?? 'optimistic'
|
|
91
|
+
// Use provided mutationCollector, or auto-create one from schema
|
|
92
|
+
this.mutationCollector = options?.mutationCollector
|
|
93
|
+
?? (options?.schema ? new MutationCollector(store, options.schema) : undefined)
|
|
92
94
|
}
|
|
93
95
|
|
|
94
96
|
/**
|
|
@@ -381,10 +383,13 @@ export class BatchPersister {
|
|
|
381
383
|
entities: DirtyEntity[],
|
|
382
384
|
scope: PersistScope,
|
|
383
385
|
): TransactionMutation[] {
|
|
384
|
-
//
|
|
385
|
-
//
|
|
386
|
+
// Exclude only non-create entities from nesting —
|
|
387
|
+
// new entities should be nested inside their parent's mutation
|
|
388
|
+
// to maintain correct relation connections without transaction support.
|
|
386
389
|
if (this.mutationCollector instanceof MutationCollector) {
|
|
387
|
-
const excludedIds = new Set(
|
|
390
|
+
const excludedIds = new Set(
|
|
391
|
+
entities.filter(e => e.changeType !== 'create').map(e => e.entityId),
|
|
392
|
+
)
|
|
388
393
|
this.mutationCollector.setExcludedEntities(excludedIds)
|
|
389
394
|
}
|
|
390
395
|
|
|
@@ -407,11 +412,14 @@ export class BatchPersister {
|
|
|
407
412
|
// Field-specific collection
|
|
408
413
|
data = this.collectFieldsData(entity.entityType, entity.entityId, scope.fields)
|
|
409
414
|
} else if (entity.changeType === 'create') {
|
|
410
|
-
|
|
411
|
-
|
|
415
|
+
const mc = this.mutationCollector
|
|
416
|
+
data = mc?.collectCreateData
|
|
417
|
+
? mc.collectCreateData(entity.entityType, entity.entityId)
|
|
418
|
+
: this.collectCreateDataWithRelationCheck(entity)
|
|
412
419
|
} else {
|
|
413
|
-
data = this.mutationCollector
|
|
414
|
-
|
|
420
|
+
data = this.mutationCollector
|
|
421
|
+
? this.mutationCollector.collectUpdateData(entity.entityType, entity.entityId)
|
|
422
|
+
: this.collectUpdateDataWithRelationCheck(entity)
|
|
415
423
|
}
|
|
416
424
|
|
|
417
425
|
if (data && Object.keys(data).length > 0) {
|
|
@@ -424,6 +432,15 @@ export class BatchPersister {
|
|
|
424
432
|
}
|
|
425
433
|
}
|
|
426
434
|
|
|
435
|
+
// Remove standalone create mutations for entities that were included
|
|
436
|
+
// as nested inline creates inside another entity's mutation.
|
|
437
|
+
if (this.mutationCollector instanceof MutationCollector) {
|
|
438
|
+
const nestedIds = this.mutationCollector.getNestedEntityIds()
|
|
439
|
+
if (nestedIds.size > 0) {
|
|
440
|
+
return mutations.filter(m => !(m.operation === 'create' && nestedIds.has(m.entityId)))
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
|
|
427
444
|
return mutations
|
|
428
445
|
}
|
|
429
446
|
|
|
@@ -31,6 +31,7 @@ export interface EntityMutationResult {
|
|
|
31
31
|
*/
|
|
32
32
|
export class MutationCollector implements MutationDataCollector {
|
|
33
33
|
private excludedEntityIds: ReadonlySet<string> = new Set()
|
|
34
|
+
private readonly _nestedEntityIds: Set<string> = new Set()
|
|
34
35
|
|
|
35
36
|
constructor(
|
|
36
37
|
private readonly store: SnapshotStore,
|
|
@@ -44,6 +45,16 @@ export class MutationCollector implements MutationDataCollector {
|
|
|
44
45
|
*/
|
|
45
46
|
setExcludedEntities(ids: ReadonlySet<string>): void {
|
|
46
47
|
this.excludedEntityIds = ids
|
|
48
|
+
this._nestedEntityIds.clear()
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Returns IDs of entities that were included as nested inline creates
|
|
53
|
+
* inside another entity's mutation data. These entities don't need
|
|
54
|
+
* their own standalone top-level mutations.
|
|
55
|
+
*/
|
|
56
|
+
getNestedEntityIds(): ReadonlySet<string> {
|
|
57
|
+
return this._nestedEntityIds
|
|
47
58
|
}
|
|
48
59
|
|
|
49
60
|
// ==================== Main Collection Methods ====================
|
|
@@ -178,7 +189,9 @@ export class MutationCollector implements MutationDataCollector {
|
|
|
178
189
|
createData[fieldName] = relationOp
|
|
179
190
|
}
|
|
180
191
|
} else if (relationType === 'hasMany') {
|
|
192
|
+
// Try embedded data first, then fall back to RelationStore
|
|
181
193
|
const relationOps = this.collectCreateManyRelation(value)
|
|
194
|
+
?? this.collectHasManyOperations(entityType, entityId, fieldName)
|
|
182
195
|
if (relationOps !== null && relationOps.length > 0) {
|
|
183
196
|
createData[fieldName] = relationOps
|
|
184
197
|
}
|
|
@@ -316,6 +329,7 @@ export class MutationCollector implements MutationDataCollector {
|
|
|
316
329
|
return { connect: { id: currentId } }
|
|
317
330
|
} else if (currentId && isTempId(currentId)) {
|
|
318
331
|
// Temp entity — generate inline create with its collected data
|
|
332
|
+
this._nestedEntityIds.add(currentId)
|
|
319
333
|
const targetType = this.schemaProvider.getRelationTarget(entityType, fieldName)
|
|
320
334
|
if (targetType) {
|
|
321
335
|
const createData = this.collectCreateData(targetType, currentId)
|
|
@@ -426,6 +440,7 @@ export class MutationCollector implements MutationDataCollector {
|
|
|
426
440
|
// Created entities -> create (using entity snapshot data)
|
|
427
441
|
if (targetType) {
|
|
428
442
|
for (const tempId of hasManyState.createdEntities) {
|
|
443
|
+
this._nestedEntityIds.add(tempId)
|
|
429
444
|
const itemSnapshot = this.store.getEntitySnapshot(targetType, tempId)
|
|
430
445
|
if (itemSnapshot) {
|
|
431
446
|
const createData = { ...itemSnapshot.data as Record<string, unknown> }
|