@contember/bindx 0.1.51 → 0.1.52
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/persistence/BatchPersister.d.ts.map +1 -1
- package/dist/store/SnapshotStore.d.ts +4 -1
- package/dist/store/SnapshotStore.d.ts.map +1 -1
- package/dist/store/SubscriptionManager.d.ts +19 -4
- package/dist/store/SubscriptionManager.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/core/EntityLoader.ts +6 -6
- package/src/persistence/BatchPersister.ts +15 -11
- package/src/store/SnapshotStore.ts +39 -36
- package/src/store/SubscriptionManager.ts +116 -58
|
@@ -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;AAenB;;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;AA+BD;;;;;;GAMG;AACH,qBAAa,cAAc;IAUzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAX5B,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;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmE;IAClG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmE;gBAG/E,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,gBAAgB,EAC7C,OAAO,CAAC,EAAE,qBAAqB;IAWhC;;OAEG;IACH,oBAAoB,IAAI,UAAU;IAIlC;;OAEG;IACH,iBAAiB,IAAI,cAAc;IAInC;;OAEG;IACG,UAAU,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI3E;;OAEG;IACG,OAAO,CACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAc/B;;OAEG;IACG,aAAa,CAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAc/B;;OAEG;IACG,YAAY,CACjB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,iBAAiB,CAAC;IAqD7B;;;OAGG;YACW,cAAc;
|
|
1
|
+
{"version":3,"file":"BatchPersister.d.ts","sourceRoot":"","sources":["../../src/persistence/BatchPersister.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { EntitySnapshot, LoadStatus } from './snapshots.js';
|
|
2
2
|
import type { FieldError, FieldErrorFilter } from '../errors/types.js';
|
|
3
|
-
import { type SnapshotVersionBumper } from './SubscriptionManager.js';
|
|
3
|
+
import { type SnapshotVersionBumper, type SynchronousResult } from './SubscriptionManager.js';
|
|
4
4
|
import { type HasManyRemovalType, type RelationReconciliationResult, type SentHasManyDelta, type SentHasOneTransition, type StoredHasManyState, type StoredRelationState } from './RelationStore.js';
|
|
5
5
|
import { type EntityMeta } from './EntityMetaStore.js';
|
|
6
6
|
import type { Rekeyable } from './RekeyOrchestrator.js';
|
|
@@ -77,6 +77,8 @@ export declare class SnapshotStore implements SnapshotVersionBumper, JournalTarg
|
|
|
77
77
|
* dispatcher, so their pre-create writes join the same undo entry.
|
|
78
78
|
*/
|
|
79
79
|
transaction<T>(fn: () => T): T;
|
|
80
|
+
/** Coalesces synchronous notifications, even on failure, without changing undo boundaries. */
|
|
81
|
+
batchNotifications<T>(fn: () => SynchronousResult<T>): T;
|
|
80
82
|
private getEntityKey;
|
|
81
83
|
private getRelationKey;
|
|
82
84
|
/**
|
|
@@ -298,6 +300,7 @@ export declare class SnapshotStore implements SnapshotVersionBumper, JournalTarg
|
|
|
298
300
|
* then present relations, then un-creates, then dropped relations.
|
|
299
301
|
*/
|
|
300
302
|
applyJournalImages(images: JournalCellImage[]): void;
|
|
303
|
+
private notifyRestoredCell;
|
|
301
304
|
private applyEntityImage;
|
|
302
305
|
private applyRelationImage;
|
|
303
306
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SnapshotStore.d.ts","sourceRoot":"","sources":["../../src/store/SnapshotStore.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SnapshotStore.d.ts","sourceRoot":"","sources":["../../src/store/SnapshotStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { RekeyContext, Rekeyable } from './RekeyOrchestrator.js';
|
|
2
2
|
type Subscriber = () => void;
|
|
3
|
+
/** Rejects async callbacks at compile time: a notification batch would end at the first `await`. */
|
|
4
|
+
export type SynchronousResult<T> = T extends PromiseLike<unknown> ? never : T;
|
|
3
5
|
/**
|
|
4
6
|
* Callback interface for SubscriptionManager to request snapshot version bumps.
|
|
5
7
|
* This decouples notification logic from entity snapshot storage.
|
|
@@ -15,6 +17,8 @@ export interface SnapshotVersionBumper {
|
|
|
15
17
|
*/
|
|
16
18
|
export interface ParentKeyLookup {
|
|
17
19
|
getParentKeysForChild(childId: string): Set<string>;
|
|
20
|
+
/** Increases on every relation write, so an unchanged value proves the edges are unchanged. */
|
|
21
|
+
getMutationVersion(): number;
|
|
18
22
|
}
|
|
19
23
|
/**
|
|
20
24
|
* Manages subscriptions for entity and relation changes.
|
|
@@ -37,6 +41,17 @@ export declare class SubscriptionManager implements Rekeyable {
|
|
|
37
41
|
private readonly rekeyedKeys;
|
|
38
42
|
/** Global version number for change detection */
|
|
39
43
|
private globalVersion;
|
|
44
|
+
private notificationBatchDepth;
|
|
45
|
+
private pendingEntities;
|
|
46
|
+
private pendingRelations;
|
|
47
|
+
private pendingGlobal;
|
|
48
|
+
/** Keys the current batch has already walked; valid only while the relation edges are unchanged. */
|
|
49
|
+
private readonly batchWalkedKeys;
|
|
50
|
+
private batchWalkedEdgeVersion;
|
|
51
|
+
/** Versions advance immediately; callbacks observe the completed synchronous batch. */
|
|
52
|
+
batchNotifications<T>(fn: () => SynchronousResult<T>): T;
|
|
53
|
+
private flushNotifications;
|
|
54
|
+
private notifyGlobalSubscribers;
|
|
40
55
|
/**
|
|
41
56
|
* Resolves a child's parents from live relation edges. Injected after
|
|
42
57
|
* construction (the relation store and this manager are siblings under
|
|
@@ -103,6 +118,8 @@ export declare class SubscriptionManager implements Rekeyable {
|
|
|
103
118
|
* The bumper callback is used to bump parent entity snapshot versions.
|
|
104
119
|
*/
|
|
105
120
|
notifyEntitySubscribers(key: string, bumper: SnapshotVersionBumper): void;
|
|
121
|
+
/** A batch shares one walked set, so rows under a common hub walk it once instead of once per row. */
|
|
122
|
+
private getWalkedKeys;
|
|
106
123
|
/**
|
|
107
124
|
* Walks the entity and its live ancestors. The global version is bumped once by the
|
|
108
125
|
* caller, before the first subscriber runs — a subscriber reading getVersion() from
|
|
@@ -130,10 +147,6 @@ export declare class SubscriptionManager implements Rekeyable {
|
|
|
130
147
|
* Used during batch imports (e.g., undo/redo).
|
|
131
148
|
*/
|
|
132
149
|
notifyRelationDirect(key: string): void;
|
|
133
|
-
/**
|
|
134
|
-
* Bumps global version and notifies global subscribers.
|
|
135
|
-
*/
|
|
136
|
-
notifyGlobal(): void;
|
|
137
150
|
/**
|
|
138
151
|
* Moves entity and relation subscriptions from oldKey to newKey.
|
|
139
152
|
* Also rekeys relation subscribers under oldKeyPrefix to newKeyPrefix.
|
|
@@ -143,6 +156,8 @@ export declare class SubscriptionManager implements Rekeyable {
|
|
|
143
156
|
* relation store's live edges, which migrate their own id references on rekey.
|
|
144
157
|
*/
|
|
145
158
|
rekey(ctx: RekeyContext): void;
|
|
159
|
+
/** Queued keys follow their subscribers, so a flush never reads the long-lived redirect map. */
|
|
160
|
+
private movePendingNotifications;
|
|
146
161
|
/**
|
|
147
162
|
* Re-homes a subscriber set under a new key. The destination may already hold
|
|
148
163
|
* subscribers (a component mounted on the persisted id before the draft was rekeyed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionManager.d.ts","sourceRoot":"","sources":["../../src/store/SubscriptionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAErE,KAAK,UAAU,GAAG,MAAM,IAAI,CAAA;AAE5B;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACrC,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5C;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"SubscriptionManager.d.ts","sourceRoot":"","sources":["../../src/store/SubscriptionManager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contember/bindx",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.52",
|
|
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.52",
|
|
21
21
|
"@contember/graphql-client": "^2.1.0-beta.1"
|
|
22
22
|
},
|
|
23
23
|
"repository": {
|
package/src/core/EntityLoader.ts
CHANGED
|
@@ -124,13 +124,13 @@ export class EntityLoader {
|
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
127
|
+
this.store.batchNotifications(() => {
|
|
128
|
+
for (const record of result.data) {
|
|
129
|
+
if (typeof record['id'] === 'string') {
|
|
130
|
+
this.store.setEntityData(entityType, record['id'], record, true)
|
|
131
|
+
}
|
|
132
132
|
}
|
|
133
|
-
}
|
|
133
|
+
})
|
|
134
134
|
|
|
135
135
|
return { status: 'success', data: result.data as T[] }
|
|
136
136
|
} catch (error) {
|
|
@@ -327,16 +327,18 @@ export class BatchPersister {
|
|
|
327
327
|
}
|
|
328
328
|
|
|
329
329
|
const transactionResult = await this.executeTransaction(execution, options?.signal)
|
|
330
|
-
result = this.processExecutionResult(execution, transactionResult, options)
|
|
330
|
+
result = this.store.batchNotifications(() => this.processExecutionResult(execution, transactionResult, options))
|
|
331
331
|
result = this.mergeCancelled(result, execution.vetoed)
|
|
332
332
|
return result
|
|
333
333
|
|
|
334
334
|
} finally {
|
|
335
|
-
this.
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
335
|
+
this.store.batchNotifications(() => {
|
|
336
|
+
this.releaseEntities([...claimed.values()])
|
|
337
|
+
this.undoManager?.unblock()
|
|
338
|
+
if (result?.success) {
|
|
339
|
+
this.store.sweepUnreachableCreated()
|
|
340
|
+
}
|
|
341
|
+
})
|
|
340
342
|
}
|
|
341
343
|
|
|
342
344
|
// Unreachable, but keeps the return type explicit when control-flow analysis changes.
|
|
@@ -991,11 +993,13 @@ export class BatchPersister {
|
|
|
991
993
|
const fresh = entities.filter(entity => !claimed.has(entityIdentityKey(entity.entityType, entity.entityId)))
|
|
992
994
|
if (fresh.length === 0) return
|
|
993
995
|
this.changeRegistry.markInFlight(fresh)
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
996
|
+
this.store.batchNotifications(() => {
|
|
997
|
+
for (const entity of fresh) {
|
|
998
|
+
claimed.set(entityIdentityKey(entity.entityType, entity.entityId), entity)
|
|
999
|
+
this.dispatcher.dispatch(setPersisting(entity.entityType, entity.entityId, true, updateMode === 'pessimistic'))
|
|
1000
|
+
this.dispatcher.dispatch(clearAllServerErrors(entity.entityType, entity.entityId))
|
|
1001
|
+
}
|
|
1002
|
+
})
|
|
999
1003
|
}
|
|
1000
1004
|
|
|
1001
1005
|
private releaseEntities(entities: readonly DirtyEntity[]): void {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { EntitySnapshot, LoadStatus } from './snapshots.js'
|
|
2
2
|
import { createEntitySnapshot } from './snapshots.js'
|
|
3
3
|
import type { FieldError, FieldErrorFilter } from '../errors/types.js'
|
|
4
|
-
import { SubscriptionManager, type SnapshotVersionBumper } from './SubscriptionManager.js'
|
|
4
|
+
import { SubscriptionManager, type SnapshotVersionBumper, type SynchronousResult } from './SubscriptionManager.js'
|
|
5
5
|
import { ErrorStore } from './ErrorStore.js'
|
|
6
6
|
import {
|
|
7
7
|
RelationStore,
|
|
@@ -176,6 +176,11 @@ export class SnapshotStore implements SnapshotVersionBumper, JournalTarget {
|
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
+
/** Coalesces synchronous notifications, even on failure, without changing undo boundaries. */
|
|
180
|
+
batchNotifications<T>(fn: () => SynchronousResult<T>): T {
|
|
181
|
+
return this.subscriptions.batchNotifications(fn)
|
|
182
|
+
}
|
|
183
|
+
|
|
179
184
|
// ==================== Key Generation ====================
|
|
180
185
|
|
|
181
186
|
private getEntityKey(entityType: string, id: string): string {
|
|
@@ -1105,23 +1110,16 @@ export class SnapshotStore implements SnapshotVersionBumper, JournalTarget {
|
|
|
1105
1110
|
hasManyStates: Map<string, StoredHasManyState>
|
|
1106
1111
|
entityMetas: Map<string, EntityMeta>
|
|
1107
1112
|
}): void {
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
const hasManyKeys = this.relations.importHasManyStates(snapshot.hasManyStates)
|
|
1114
|
-
const notifiedRelationKeys = new Set([...relationKeys, ...hasManyKeys])
|
|
1113
|
+
this.subscriptions.batchNotifications(() => {
|
|
1114
|
+
const entityKeys = this.entitySnapshots.importSnapshots(snapshot.entitySnapshots)
|
|
1115
|
+
this.meta.importMetas(snapshot.entityMetas)
|
|
1116
|
+
const relationKeys = this.relations.importRelationStates(snapshot.relationStates)
|
|
1117
|
+
const hasManyKeys = this.relations.importHasManyStates(snapshot.hasManyStates)
|
|
1115
1118
|
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
}
|
|
1121
|
-
|
|
1122
|
-
for (const key of notifiedRelationKeys) {
|
|
1123
|
-
this.subscriptions.notifyRelationDirect(key)
|
|
1124
|
-
}
|
|
1119
|
+
this.subscriptions.notify()
|
|
1120
|
+
for (const key of entityKeys) this.subscriptions.notifyEntityDirect(key)
|
|
1121
|
+
for (const key of [...relationKeys, ...hasManyKeys]) this.subscriptions.notifyRelationDirect(key)
|
|
1122
|
+
})
|
|
1125
1123
|
}
|
|
1126
1124
|
|
|
1127
1125
|
// ==================== Undo Journal Target (cell capture / restore) ====================
|
|
@@ -1236,9 +1234,6 @@ export class SnapshotStore implements SnapshotVersionBumper, JournalTarget {
|
|
|
1236
1234
|
* then present relations, then un-creates, then dropped relations.
|
|
1237
1235
|
*/
|
|
1238
1236
|
applyJournalImages(images: JournalCellImage[]): void {
|
|
1239
|
-
const notifyEntities = new Set<string>()
|
|
1240
|
-
const notifyRelations = new Set<string>()
|
|
1241
|
-
|
|
1242
1237
|
const presentEntities: EntityCellImage[] = []
|
|
1243
1238
|
const presentRelations: Array<RelationCellImage | HasManyCellImage> = []
|
|
1244
1239
|
const absentEntities: EntityCellImage[] = []
|
|
@@ -1246,29 +1241,37 @@ export class SnapshotStore implements SnapshotVersionBumper, JournalTarget {
|
|
|
1246
1241
|
|
|
1247
1242
|
for (const img of images) {
|
|
1248
1243
|
if (img.kind === 'entity') {
|
|
1249
|
-
notifyEntities.add(img.key)
|
|
1250
1244
|
;(img.present ? presentEntities : absentEntities).push(img)
|
|
1251
1245
|
} else {
|
|
1252
|
-
notifyRelations.add(img.key)
|
|
1253
|
-
notifyEntities.add(entityKeyOfRelationKey(img.key))
|
|
1254
1246
|
;(img.present ? presentRelations : absentRelations).push(img)
|
|
1255
1247
|
}
|
|
1256
1248
|
}
|
|
1257
1249
|
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
const
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1250
|
+
// removeEntity notifies; the batch holds that back until the restore is complete.
|
|
1251
|
+
this.subscriptions.batchNotifications(() => {
|
|
1252
|
+
for (const img of presentEntities) this.applyEntityImage(img)
|
|
1253
|
+
for (const img of presentRelations) this.applyRelationImage(img)
|
|
1254
|
+
for (const img of absentEntities) {
|
|
1255
|
+
const [type, id] = splitEntityKey(img.key)
|
|
1256
|
+
this.removeEntity(type, id)
|
|
1257
|
+
}
|
|
1258
|
+
for (const img of absentRelations) {
|
|
1259
|
+
if (img.kind === 'relation') this.relations.removeRelationState(img.key)
|
|
1260
|
+
else this.relations.removeHasManyState(img.key)
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
this.subscriptions.notify()
|
|
1264
|
+
for (const img of images) this.notifyRestoredCell(img)
|
|
1265
|
+
})
|
|
1266
|
+
}
|
|
1268
1267
|
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1268
|
+
private notifyRestoredCell(img: JournalCellImage): void {
|
|
1269
|
+
if (img.kind === 'entity') {
|
|
1270
|
+
this.subscriptions.notifyEntityDirect(img.key)
|
|
1271
|
+
return
|
|
1272
|
+
}
|
|
1273
|
+
this.subscriptions.notifyRelationDirect(img.key)
|
|
1274
|
+
this.subscriptions.notifyEntityDirect(entityKeyOfRelationKey(img.key))
|
|
1272
1275
|
}
|
|
1273
1276
|
|
|
1274
1277
|
private applyEntityImage(img: EntityCellImage): void {
|
|
@@ -2,6 +2,9 @@ import type { RekeyContext, Rekeyable } from './RekeyOrchestrator.js'
|
|
|
2
2
|
|
|
3
3
|
type Subscriber = () => void
|
|
4
4
|
|
|
5
|
+
/** Rejects async callbacks at compile time: a notification batch would end at the first `await`. */
|
|
6
|
+
export type SynchronousResult<T> = T extends PromiseLike<unknown> ? never : T
|
|
7
|
+
|
|
5
8
|
/**
|
|
6
9
|
* Callback interface for SubscriptionManager to request snapshot version bumps.
|
|
7
10
|
* This decouples notification logic from entity snapshot storage.
|
|
@@ -18,6 +21,8 @@ export interface SnapshotVersionBumper {
|
|
|
18
21
|
*/
|
|
19
22
|
export interface ParentKeyLookup {
|
|
20
23
|
getParentKeysForChild(childId: string): Set<string>
|
|
24
|
+
/** Increases on every relation write, so an unchanged value proves the edges are unchanged. */
|
|
25
|
+
getMutationVersion(): number
|
|
21
26
|
}
|
|
22
27
|
|
|
23
28
|
/**
|
|
@@ -45,6 +50,61 @@ export class SubscriptionManager implements Rekeyable {
|
|
|
45
50
|
|
|
46
51
|
/** Global version number for change detection */
|
|
47
52
|
private globalVersion = 0
|
|
53
|
+
private notificationBatchDepth = 0
|
|
54
|
+
private pendingEntities = new Set<string>()
|
|
55
|
+
private pendingRelations = new Set<string>()
|
|
56
|
+
private pendingGlobal = false
|
|
57
|
+
/** Keys the current batch has already walked; valid only while the relation edges are unchanged. */
|
|
58
|
+
private readonly batchWalkedKeys = new Set<string>()
|
|
59
|
+
private batchWalkedEdgeVersion = -1
|
|
60
|
+
|
|
61
|
+
/** Versions advance immediately; callbacks observe the completed synchronous batch. */
|
|
62
|
+
batchNotifications<T>(fn: () => SynchronousResult<T>): T {
|
|
63
|
+
this.notificationBatchDepth++
|
|
64
|
+
let completed = false
|
|
65
|
+
try {
|
|
66
|
+
const result = fn()
|
|
67
|
+
completed = true
|
|
68
|
+
return result
|
|
69
|
+
} finally {
|
|
70
|
+
if (--this.notificationBatchDepth === 0) this.flushNotifications(completed)
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
private flushNotifications(callbackCompleted: boolean): void {
|
|
75
|
+
const entities = this.pendingEntities
|
|
76
|
+
const relations = this.pendingRelations
|
|
77
|
+
const global = this.pendingGlobal
|
|
78
|
+
this.pendingEntities = new Set()
|
|
79
|
+
this.pendingRelations = new Set()
|
|
80
|
+
this.pendingGlobal = false
|
|
81
|
+
this.batchWalkedKeys.clear()
|
|
82
|
+
const notified = new Set<Subscriber>()
|
|
83
|
+
const errors: unknown[] = []
|
|
84
|
+
const deliver = (subscribers: Set<Subscriber> | undefined): void => {
|
|
85
|
+
for (const sub of subscribers ?? []) {
|
|
86
|
+
if (notified.has(sub)) continue
|
|
87
|
+
notified.add(sub)
|
|
88
|
+
try {
|
|
89
|
+
sub()
|
|
90
|
+
} catch (error) {
|
|
91
|
+
errors.push(error)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
for (const key of entities) deliver(this.entitySubscribers.get(key))
|
|
96
|
+
for (const key of relations) deliver(this.relationSubscribers.get(key))
|
|
97
|
+
if (global) deliver(this.globalSubscribers)
|
|
98
|
+
throwSubscriberErrors(errors, callbackCompleted)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
private notifyGlobalSubscribers(): void {
|
|
102
|
+
if (this.notificationBatchDepth > 0) {
|
|
103
|
+
this.pendingGlobal = true
|
|
104
|
+
return
|
|
105
|
+
}
|
|
106
|
+
for (const sub of this.globalSubscribers) sub()
|
|
107
|
+
}
|
|
48
108
|
|
|
49
109
|
/**
|
|
50
110
|
* Resolves a child's parents from live relation edges. Injected after
|
|
@@ -127,9 +187,7 @@ export class SubscriptionManager implements Rekeyable {
|
|
|
127
187
|
*/
|
|
128
188
|
notify(): void {
|
|
129
189
|
this.globalVersion++
|
|
130
|
-
|
|
131
|
-
sub()
|
|
132
|
-
}
|
|
190
|
+
this.notifyGlobalSubscribers()
|
|
133
191
|
}
|
|
134
192
|
|
|
135
193
|
/**
|
|
@@ -145,13 +203,9 @@ export class SubscriptionManager implements Rekeyable {
|
|
|
145
203
|
// Iterate the live sets, as the per-key paths do: a subscriber that unsubscribes a
|
|
146
204
|
// not-yet-visited sibling removes it from the iteration, whereas a copied array would
|
|
147
205
|
// still invoke it after its unsubscribe() returned.
|
|
148
|
-
for (const
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
for (const subs of this.relationSubscribers.values()) {
|
|
152
|
-
for (const sub of subs) sub()
|
|
153
|
-
}
|
|
154
|
-
for (const sub of this.globalSubscribers) sub()
|
|
206
|
+
for (const key of this.entitySubscribers.keys()) this.notifyEntityDirect(key)
|
|
207
|
+
for (const key of this.relationSubscribers.keys()) this.notifyRelationDirect(key)
|
|
208
|
+
this.notifyGlobalSubscribers()
|
|
155
209
|
}
|
|
156
210
|
|
|
157
211
|
// ==================== Parent-Child Relationships ====================
|
|
@@ -193,7 +247,19 @@ export class SubscriptionManager implements Rekeyable {
|
|
|
193
247
|
bumper: SnapshotVersionBumper,
|
|
194
248
|
): void {
|
|
195
249
|
this.globalVersion++
|
|
196
|
-
this.notifyEntityAndParentSubscribers(key, bumper,
|
|
250
|
+
this.notifyEntityAndParentSubscribers(key, bumper, this.getWalkedKeys())
|
|
251
|
+
this.notifyGlobalSubscribers()
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/** A batch shares one walked set, so rows under a common hub walk it once instead of once per row. */
|
|
255
|
+
private getWalkedKeys(): Set<string> {
|
|
256
|
+
if (this.notificationBatchDepth === 0) return new Set()
|
|
257
|
+
const edgeVersion = this.parentKeyLookup?.getMutationVersion() ?? 0
|
|
258
|
+
if (edgeVersion !== this.batchWalkedEdgeVersion) {
|
|
259
|
+
this.batchWalkedKeys.clear()
|
|
260
|
+
this.batchWalkedEdgeVersion = edgeVersion
|
|
261
|
+
}
|
|
262
|
+
return this.batchWalkedKeys
|
|
197
263
|
}
|
|
198
264
|
|
|
199
265
|
/**
|
|
@@ -209,43 +275,21 @@ export class SubscriptionManager implements Rekeyable {
|
|
|
209
275
|
private notifyEntityAndParentSubscribers(
|
|
210
276
|
key: string,
|
|
211
277
|
bumper: SnapshotVersionBumper,
|
|
212
|
-
|
|
278
|
+
walkedKeys: Set<string>,
|
|
213
279
|
): void {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
// size after recursion would misclassify any child-with-parent as non-root
|
|
219
|
-
// and skip the global notification (see issue #51).
|
|
220
|
-
const isRoot = notifiedKeys.size === 0
|
|
221
|
-
notifiedKeys.add(key)
|
|
222
|
-
|
|
223
|
-
// Notify entity-specific subscribers
|
|
224
|
-
const entitySubs = this.entitySubscribers.get(key)
|
|
225
|
-
if (entitySubs) {
|
|
226
|
-
for (const sub of entitySubs) {
|
|
227
|
-
sub()
|
|
228
|
-
}
|
|
229
|
-
}
|
|
280
|
+
if (walkedKeys.has(key)) return
|
|
281
|
+
walkedKeys.add(key)
|
|
282
|
+
|
|
283
|
+
this.notifyEntityDirect(key)
|
|
230
284
|
|
|
231
|
-
// Notify parent entity subscribers (propagate change up the tree).
|
|
232
285
|
// Parents are derived from the relation store's LIVE edges, so a
|
|
233
286
|
// disconnected child no longer reaches its former parent.
|
|
234
|
-
const
|
|
235
|
-
for (const parentKey of parents) {
|
|
287
|
+
for (const parentKey of this.getParentKeys(key)) {
|
|
236
288
|
// An ancestor reachable through several edges is bumped and walked once.
|
|
237
|
-
if (
|
|
289
|
+
if (walkedKeys.has(parentKey)) continue
|
|
238
290
|
// Bump parent snapshot version so useSyncExternalStore detects a change
|
|
239
291
|
bumper.bumpEntitySnapshotVersion(parentKey)
|
|
240
|
-
this.notifyEntityAndParentSubscribers(parentKey, bumper,
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
// Notify global subscribers (only once, from the root invocation — not
|
|
244
|
-
// again for each parent reached via propagation)
|
|
245
|
-
if (isRoot) {
|
|
246
|
-
for (const sub of this.globalSubscribers) {
|
|
247
|
-
sub()
|
|
248
|
-
}
|
|
292
|
+
this.notifyEntityAndParentSubscribers(parentKey, bumper, walkedKeys)
|
|
249
293
|
}
|
|
250
294
|
}
|
|
251
295
|
|
|
@@ -262,17 +306,13 @@ export class SubscriptionManager implements Rekeyable {
|
|
|
262
306
|
this.globalVersion++
|
|
263
307
|
|
|
264
308
|
// Notify relation-specific subscribers
|
|
265
|
-
|
|
266
|
-
if (relationSubs) {
|
|
267
|
-
for (const sub of relationSubs) {
|
|
268
|
-
sub()
|
|
269
|
-
}
|
|
270
|
-
}
|
|
309
|
+
this.notifyRelationDirect(key)
|
|
271
310
|
|
|
272
311
|
// Bump entity snapshot version so isEqual detects a change
|
|
273
312
|
bumper.bumpEntitySnapshotVersion(entityKey)
|
|
274
313
|
|
|
275
|
-
this.notifyEntityAndParentSubscribers(entityKey, bumper,
|
|
314
|
+
this.notifyEntityAndParentSubscribers(entityKey, bumper, this.getWalkedKeys())
|
|
315
|
+
this.notifyGlobalSubscribers()
|
|
276
316
|
}
|
|
277
317
|
|
|
278
318
|
/**
|
|
@@ -280,6 +320,10 @@ export class SubscriptionManager implements Rekeyable {
|
|
|
280
320
|
* Used during batch imports (e.g., undo/redo).
|
|
281
321
|
*/
|
|
282
322
|
notifyEntityDirect(key: string): void {
|
|
323
|
+
if (this.notificationBatchDepth > 0) {
|
|
324
|
+
this.pendingEntities.add(key)
|
|
325
|
+
return
|
|
326
|
+
}
|
|
283
327
|
const subs = this.entitySubscribers.get(key)
|
|
284
328
|
if (subs) {
|
|
285
329
|
for (const sub of subs) {
|
|
@@ -293,6 +337,10 @@ export class SubscriptionManager implements Rekeyable {
|
|
|
293
337
|
* Used during batch imports (e.g., undo/redo).
|
|
294
338
|
*/
|
|
295
339
|
notifyRelationDirect(key: string): void {
|
|
340
|
+
if (this.notificationBatchDepth > 0) {
|
|
341
|
+
this.pendingRelations.add(key)
|
|
342
|
+
return
|
|
343
|
+
}
|
|
296
344
|
const subs = this.relationSubscribers.get(key)
|
|
297
345
|
if (subs) {
|
|
298
346
|
for (const sub of subs) {
|
|
@@ -301,16 +349,6 @@ export class SubscriptionManager implements Rekeyable {
|
|
|
301
349
|
}
|
|
302
350
|
}
|
|
303
351
|
|
|
304
|
-
/**
|
|
305
|
-
* Bumps global version and notifies global subscribers.
|
|
306
|
-
*/
|
|
307
|
-
notifyGlobal(): void {
|
|
308
|
-
this.globalVersion++
|
|
309
|
-
for (const sub of this.globalSubscribers) {
|
|
310
|
-
sub()
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
|
|
314
352
|
/**
|
|
315
353
|
* Moves entity and relation subscriptions from oldKey to newKey.
|
|
316
354
|
* Also rekeys relation subscribers under oldKeyPrefix to newKeyPrefix.
|
|
@@ -328,6 +366,7 @@ export class SubscriptionManager implements Rekeyable {
|
|
|
328
366
|
}
|
|
329
367
|
}
|
|
330
368
|
this.rekeyedKeys.set(oldKey, newKey)
|
|
369
|
+
this.movePendingNotifications(ctx)
|
|
331
370
|
|
|
332
371
|
// Move entity subscribers, merging into anything already subscribed under the new key
|
|
333
372
|
this.moveSubscribers(this.entitySubscribers, oldKey, newKey)
|
|
@@ -354,6 +393,16 @@ export class SubscriptionManager implements Rekeyable {
|
|
|
354
393
|
}
|
|
355
394
|
}
|
|
356
395
|
|
|
396
|
+
/** Queued keys follow their subscribers, so a flush never reads the long-lived redirect map. */
|
|
397
|
+
private movePendingNotifications({ oldKey, newKey, oldKeyPrefix, newKeyPrefix }: RekeyContext): void {
|
|
398
|
+
if (this.pendingEntities.delete(oldKey)) this.pendingEntities.add(newKey)
|
|
399
|
+
for (const key of [...this.pendingRelations]) {
|
|
400
|
+
if (!key.startsWith(oldKeyPrefix)) continue
|
|
401
|
+
this.pendingRelations.delete(key)
|
|
402
|
+
this.pendingRelations.add(newKeyPrefix + key.slice(oldKeyPrefix.length))
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
357
406
|
/**
|
|
358
407
|
* Re-homes a subscriber set under a new key. The destination may already hold
|
|
359
408
|
* subscribers (a component mounted on the persisted id before the draft was rekeyed
|
|
@@ -372,3 +421,12 @@ export class SubscriptionManager implements Rekeyable {
|
|
|
372
421
|
for (const sub of moved) existing.add(sub)
|
|
373
422
|
}
|
|
374
423
|
}
|
|
424
|
+
|
|
425
|
+
/** The first subscriber error propagates, as it would unbatched, and the rest are logged; a failed callback's own error wins. */
|
|
426
|
+
function throwSubscriberErrors(errors: readonly unknown[], callbackCompleted: boolean): void {
|
|
427
|
+
const [first, ...rest] = errors
|
|
428
|
+
for (const error of callbackCompleted ? rest : errors) {
|
|
429
|
+
console.error('[Bindx SubscriptionManager] Subscriber error:', error)
|
|
430
|
+
}
|
|
431
|
+
if (callbackCompleted && errors.length > 0) throw first
|
|
432
|
+
}
|