@contember/bindx 0.1.48 → 0.1.49

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.
@@ -108,6 +108,14 @@ export declare class MutationCollector implements MutationDataCollector {
108
108
  private readonly _relationFields;
109
109
  private readonly _nestedCreates;
110
110
  private readonly _nestedUpdates;
111
+ /**
112
+ * Entities whose data collection is still on the stack. A schema may point two
113
+ * hasOne relations back at each other (`page.publishedRevision` ↔ `revision.page`),
114
+ * and once both sides are in the store the nested-update walk would recurse until
115
+ * the stack blows. Re-entering an entity means an ancestor frame already emits its
116
+ * changes, so the inner edge contributes nothing (see issue #88).
117
+ */
118
+ private readonly _collecting;
111
119
  constructor(store: SnapshotStore, schemaProvider: MutationSchemaProvider);
112
120
  /** Creates an isolated collection session for one persist operation. */
113
121
  forkSession(): MutationCollector;
@@ -168,6 +176,7 @@ export declare class MutationCollector implements MutationDataCollector {
168
176
  * Returns the create data or null if empty.
169
177
  */
170
178
  collectCreateData(entityType: string, entityId: string): Record<string, unknown> | null;
179
+ private buildCreateData;
171
180
  /**
172
181
  * Collects mutation data for specific fields only.
173
182
  * Returns the mutation data containing only the specified fields.
@@ -1 +1 @@
1
- {"version":3,"file":"MutationCollector.d.ts","sourceRoot":"","sources":["../../src/persistence/MutationCollector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MutationCollector.d.ts","sourceRoot":"","sources":["../../src/persistence/MutationCollector.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.48",
3
+ "version": "0.1.49",
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.48",
20
+ "@contember/bindx-client": "0.1.49",
21
21
  "@contember/graphql-client": "^2.1.0-beta.1"
22
22
  },
23
23
  "repository": {
@@ -102,6 +102,14 @@ export class MutationCollector implements MutationDataCollector {
102
102
  private readonly _relationFields = new Map<string, CollectedRelationField>()
103
103
  private readonly _nestedCreates: CollectedNestedCreate[] = []
104
104
  private readonly _nestedUpdates: CollectedNestedUpdate[] = []
105
+ /**
106
+ * Entities whose data collection is still on the stack. A schema may point two
107
+ * hasOne relations back at each other (`page.publishedRevision` ↔ `revision.page`),
108
+ * and once both sides are in the store the nested-update walk would recurse until
109
+ * the stack blows. Re-entering an entity means an ancestor frame already emits its
110
+ * changes, so the inner edge contributes nothing (see issue #88).
111
+ */
112
+ private readonly _collecting = new Set<string>()
105
113
 
106
114
  constructor(
107
115
  private readonly store: SnapshotStore,
@@ -133,6 +141,7 @@ export class MutationCollector implements MutationDataCollector {
133
141
  this._relationFields.clear()
134
142
  this._nestedCreates.length = 0
135
143
  this._nestedUpdates.length = 0
144
+ this._collecting.clear()
136
145
  }
137
146
 
138
147
  setExcludedEntityKeys(keys: ReadonlySet<string>): void {
@@ -313,21 +322,30 @@ export class MutationCollector implements MutationDataCollector {
313
322
  throw new Error(`Entity type '${entityType}' not found in schema`)
314
323
  }
315
324
 
316
- const mutation: Record<string, unknown> = {}
325
+ const key = this.entityKey(entityType, entityId)
326
+ if (this._collecting.has(key)) {
327
+ return null
328
+ }
329
+ this._collecting.add(key)
330
+ try {
331
+ const mutation: Record<string, unknown> = {}
317
332
 
318
- // Collect scalar field changes
319
- this.collectScalarChanges(entityType, snapshot, mutation)
333
+ // Collect scalar field changes
334
+ this.collectScalarChanges(entityType, snapshot, mutation)
320
335
 
321
- // Materialize placeholder-backed creating-state hasOne relations before
322
- // collecting, so the collection phase can remain a pure read over the
323
- // store. Embedded data is not materialized here — for existing
324
- // (server-side) parents, hasMany state is already authoritative.
325
- this.materializeForUpdate(entityType, entityId)
336
+ // Materialize placeholder-backed creating-state hasOne relations before
337
+ // collecting, so the collection phase can remain a pure read over the
338
+ // store. Embedded data is not materialized here — for existing
339
+ // (server-side) parents, hasMany state is already authoritative.
340
+ this.materializeForUpdate(entityType, entityId)
326
341
 
327
- // Collect relation changes
328
- this.collectRelationChanges(entityType, entityId, mutation)
342
+ // Collect relation changes
343
+ this.collectRelationChanges(entityType, entityId, mutation)
329
344
 
330
- return Object.keys(mutation).length > 0 ? mutation : null
345
+ return Object.keys(mutation).length > 0 ? mutation : null
346
+ } finally {
347
+ this._collecting.delete(key)
348
+ }
331
349
  }
332
350
 
333
351
  /**
@@ -347,6 +365,23 @@ export class MutationCollector implements MutationDataCollector {
347
365
  throw new Error(`Entity type '${entityType}' not found in schema`)
348
366
  }
349
367
 
368
+ const key = this.entityKey(entityType, entityId)
369
+ if (this._collecting.has(key)) {
370
+ return null
371
+ }
372
+ this._collecting.add(key)
373
+ try {
374
+ return this.buildCreateData(entityType, entityId, snapshot)
375
+ } finally {
376
+ this._collecting.delete(key)
377
+ }
378
+ }
379
+
380
+ private buildCreateData(
381
+ entityType: string,
382
+ entityId: string,
383
+ snapshot: EntitySnapshot,
384
+ ): Record<string, unknown> | null {
350
385
  const data = snapshot.data as Record<string, unknown>
351
386
  const createData: Record<string, unknown> = {}
352
387