@contember/bindx 0.1.46 → 0.1.48

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 (121) hide show
  1. package/dist/adapter/MockAdapter.d.ts +4 -1
  2. package/dist/adapter/MockAdapter.d.ts.map +1 -1
  3. package/dist/core/ActionDispatcher.d.ts +4 -1
  4. package/dist/core/ActionDispatcher.d.ts.map +1 -1
  5. package/dist/core/actions.d.ts +7 -1
  6. package/dist/core/actions.d.ts.map +1 -1
  7. package/dist/events/EventEmitter.d.ts +13 -1
  8. package/dist/events/EventEmitter.d.ts.map +1 -1
  9. package/dist/handles/BaseHandle.d.ts +14 -3
  10. package/dist/handles/BaseHandle.d.ts.map +1 -1
  11. package/dist/handles/EntityHandle.d.ts +14 -5
  12. package/dist/handles/EntityHandle.d.ts.map +1 -1
  13. package/dist/handles/FieldHandle.d.ts +11 -4
  14. package/dist/handles/FieldHandle.d.ts.map +1 -1
  15. package/dist/handles/HasManyListHandle.d.ts +36 -2
  16. package/dist/handles/HasManyListHandle.d.ts.map +1 -1
  17. package/dist/handles/HasOneHandle.d.ts +52 -9
  18. package/dist/handles/HasOneHandle.d.ts.map +1 -1
  19. package/dist/handles/PlaceholderHandle.d.ts +25 -13
  20. package/dist/handles/PlaceholderHandle.d.ts.map +1 -1
  21. package/dist/handles/index.d.ts +1 -1
  22. package/dist/handles/index.d.ts.map +1 -1
  23. package/dist/handles/proxyFactory.d.ts +7 -1
  24. package/dist/handles/proxyFactory.d.ts.map +1 -1
  25. package/dist/handles/types.d.ts +33 -0
  26. package/dist/handles/types.d.ts.map +1 -1
  27. package/dist/index.d.ts +3 -3
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/persistence/BatchPersister.d.ts +53 -37
  30. package/dist/persistence/BatchPersister.d.ts.map +1 -1
  31. package/dist/persistence/ChangeRegistry.d.ts +15 -0
  32. package/dist/persistence/ChangeRegistry.d.ts.map +1 -1
  33. package/dist/persistence/MutationCollector.d.ts +106 -3
  34. package/dist/persistence/MutationCollector.d.ts.map +1 -1
  35. package/dist/persistence/PersistExecution.d.ts +26 -0
  36. package/dist/persistence/PersistExecution.d.ts.map +1 -0
  37. package/dist/persistence/types.d.ts +8 -2
  38. package/dist/persistence/types.d.ts.map +1 -1
  39. package/dist/store/EntityMetaStore.d.ts +32 -10
  40. package/dist/store/EntityMetaStore.d.ts.map +1 -1
  41. package/dist/store/EntitySnapshotStore.d.ts +50 -3
  42. package/dist/store/EntitySnapshotStore.d.ts.map +1 -1
  43. package/dist/store/ErrorStore.d.ts +3 -2
  44. package/dist/store/ErrorStore.d.ts.map +1 -1
  45. package/dist/store/HasManyStore.d.ts +214 -0
  46. package/dist/store/HasManyStore.d.ts.map +1 -0
  47. package/dist/store/HasOneStore.d.ts +159 -0
  48. package/dist/store/HasOneStore.d.ts.map +1 -0
  49. package/dist/store/ReachabilityAnalyzer.d.ts +19 -0
  50. package/dist/store/ReachabilityAnalyzer.d.ts.map +1 -1
  51. package/dist/store/RekeyOrchestrator.d.ts +76 -0
  52. package/dist/store/RekeyOrchestrator.d.ts.map +1 -0
  53. package/dist/store/RelationEdgeIndex.d.ts +34 -0
  54. package/dist/store/RelationEdgeIndex.d.ts.map +1 -0
  55. package/dist/store/RelationStore.d.ts +74 -137
  56. package/dist/store/RelationStore.d.ts.map +1 -1
  57. package/dist/store/RootRegistry.d.ts +25 -4
  58. package/dist/store/RootRegistry.d.ts.map +1 -1
  59. package/dist/store/SnapshotStore.d.ts +137 -13
  60. package/dist/store/SnapshotStore.d.ts.map +1 -1
  61. package/dist/store/SubscriptionManager.d.ts +63 -14
  62. package/dist/store/SubscriptionManager.d.ts.map +1 -1
  63. package/dist/store/TouchedStore.d.ts +3 -2
  64. package/dist/store/TouchedStore.d.ts.map +1 -1
  65. package/dist/store/relationKey.d.ts +15 -0
  66. package/dist/store/relationKey.d.ts.map +1 -0
  67. package/dist/undo/UndoJournal.d.ts +133 -0
  68. package/dist/undo/UndoJournal.d.ts.map +1 -0
  69. package/dist/undo/UndoManager.d.ts +25 -82
  70. package/dist/undo/UndoManager.d.ts.map +1 -1
  71. package/dist/undo/UnrecordedWriteError.d.ts +16 -0
  72. package/dist/undo/UnrecordedWriteError.d.ts.map +1 -0
  73. package/dist/undo/index.d.ts +3 -1
  74. package/dist/undo/index.d.ts.map +1 -1
  75. package/dist/undo/rekeyJournalEntry.d.ts +20 -0
  76. package/dist/undo/rekeyJournalEntry.d.ts.map +1 -0
  77. package/dist/undo/types.d.ts +0 -48
  78. package/dist/undo/types.d.ts.map +1 -1
  79. package/package.json +2 -2
  80. package/src/adapter/MockAdapter.ts +15 -5
  81. package/src/core/ActionDispatcher.ts +56 -36
  82. package/src/core/actions.ts +8 -1
  83. package/src/events/EventEmitter.ts +78 -24
  84. package/src/handles/BaseHandle.ts +19 -2
  85. package/src/handles/EntityHandle.ts +48 -17
  86. package/src/handles/FieldHandle.ts +36 -10
  87. package/src/handles/HasManyListHandle.ts +120 -16
  88. package/src/handles/HasOneHandle.ts +177 -44
  89. package/src/handles/PlaceholderHandle.ts +184 -36
  90. package/src/handles/index.ts +3 -0
  91. package/src/handles/proxyFactory.ts +27 -0
  92. package/src/handles/types.ts +39 -0
  93. package/src/index.ts +4 -4
  94. package/src/persistence/BatchPersister.ts +810 -446
  95. package/src/persistence/ChangeRegistry.ts +27 -3
  96. package/src/persistence/MutationCollector.ts +265 -31
  97. package/src/persistence/PersistExecution.ts +217 -0
  98. package/src/persistence/types.ts +8 -2
  99. package/src/store/EntityMetaStore.ts +89 -45
  100. package/src/store/EntitySnapshotStore.ts +102 -19
  101. package/src/store/ErrorStore.ts +6 -5
  102. package/src/store/HasManyStore.ts +810 -0
  103. package/src/store/HasOneStore.ts +454 -0
  104. package/src/store/ReachabilityAnalyzer.ts +37 -0
  105. package/src/store/RekeyOrchestrator.ts +123 -0
  106. package/src/store/RelationEdgeIndex.ts +79 -0
  107. package/src/store/RelationStore.ts +176 -725
  108. package/src/store/RootRegistry.ts +50 -8
  109. package/src/store/SnapshotStore.ts +572 -101
  110. package/src/store/SubscriptionManager.ts +122 -75
  111. package/src/store/TouchedStore.ts +5 -2
  112. package/src/store/relationKey.ts +20 -0
  113. package/src/undo/UndoJournal.ts +258 -0
  114. package/src/undo/UndoManager.ts +151 -281
  115. package/src/undo/UnrecordedWriteError.ts +23 -0
  116. package/src/undo/index.ts +8 -7
  117. package/src/undo/rekeyJournalEntry.ts +145 -0
  118. package/src/undo/types.ts +0 -58
  119. package/dist/core/actionClassification.d.ts +0 -48
  120. package/dist/core/actionClassification.d.ts.map +0 -1
  121. package/src/core/actionClassification.ts +0 -199
@@ -14,6 +14,67 @@ export interface EntityMutationResult {
14
14
  /** The mutation data (for create/update) */
15
15
  data?: Record<string, unknown>;
16
16
  }
17
+ export interface CollectedNestedEntity {
18
+ readonly entityType: string;
19
+ readonly entityId: string;
20
+ }
21
+ export interface CollectedHasOneChange {
22
+ readonly entityType: string;
23
+ readonly entityId: string;
24
+ readonly fieldName: string;
25
+ readonly transition: {
26
+ readonly operation: 'connect';
27
+ readonly targetId: string;
28
+ } | {
29
+ readonly operation: 'create';
30
+ readonly targetId: string;
31
+ } | {
32
+ readonly operation: 'disconnect';
33
+ readonly targetId: string;
34
+ } | {
35
+ readonly operation: 'delete';
36
+ readonly targetId: string;
37
+ };
38
+ }
39
+ export interface CollectedHasManyChange {
40
+ readonly entityType: string;
41
+ readonly entityId: string;
42
+ readonly fieldName: string;
43
+ readonly additions: readonly {
44
+ readonly itemId: string;
45
+ readonly kind: 'created' | 'connected';
46
+ }[];
47
+ readonly removals: readonly {
48
+ readonly itemId: string;
49
+ readonly type: 'delete' | 'disconnect';
50
+ }[];
51
+ }
52
+ export interface CollectedRelationField {
53
+ readonly entityType: string;
54
+ readonly entityId: string;
55
+ readonly fieldName: string;
56
+ readonly relationType: 'hasOne' | 'hasMany';
57
+ readonly targetEntityType: string;
58
+ }
59
+ export interface CollectedNestedCreate {
60
+ readonly parentEntityType: string;
61
+ readonly parentEntityId: string;
62
+ readonly fieldName: string;
63
+ readonly relationType: 'hasOne' | 'hasMany';
64
+ readonly entityType: string;
65
+ readonly entityId: string;
66
+ readonly createData: Readonly<Record<string, unknown>>;
67
+ readonly knownServerIds: readonly string[];
68
+ }
69
+ export interface CollectedNestedUpdate {
70
+ readonly parentEntityType: string;
71
+ readonly parentEntityId: string;
72
+ readonly fieldName: string;
73
+ readonly relationType: 'hasOne' | 'hasMany';
74
+ readonly entityType: string;
75
+ readonly entityId: string;
76
+ readonly data: Readonly<Record<string, unknown>>;
77
+ }
17
78
  /**
18
79
  * MutationCollector builds Contember-compatible mutation input
19
80
  * by collecting changes from SnapshotStore including:
@@ -28,17 +89,43 @@ export interface EntityMutationResult {
28
89
  export declare class MutationCollector implements MutationDataCollector {
29
90
  private readonly store;
30
91
  private readonly schemaProvider;
92
+ /** Entities with their own top-level mutation; only their nested update is skipped. */
31
93
  private excludedEntityIds;
94
+ /** Entities vetoed by an `entity:persisting` interceptor; nothing is emitted for them. */
95
+ private vetoedEntityIds;
96
+ /**
97
+ * Relation items whose op was dropped because the item is vetoed, keyed by relation
98
+ * key (`Type:id:field`). The commit step leaves exactly these pending, so the planned
99
+ * create/delete is sent once the veto is lifted instead of being committed unsent.
100
+ */
101
+ private readonly _suppressedRelationItems;
32
102
  private readonly _nestedEntityIds;
33
103
  /** Maps nested entity temp IDs to their entity types for post-persist processing */
34
104
  private readonly _nestedEntityTypes;
105
+ private readonly _nestedEntities;
106
+ private readonly _hasOneChanges;
107
+ private readonly _hasManyChanges;
108
+ private readonly _relationFields;
109
+ private readonly _nestedCreates;
110
+ private readonly _nestedUpdates;
35
111
  constructor(store: SnapshotStore, schemaProvider: MutationSchemaProvider);
112
+ /** Creates an isolated collection session for one persist operation. */
113
+ forkSession(): MutationCollector;
114
+ private entityKey;
36
115
  /**
37
- * Sets entity IDs that should be excluded from nested mutation generation.
38
- * These entities get their own top-level mutations, so nested updates are skipped
39
- * to avoid duplicate changes.
116
+ * Sets entity IDs that get their own top-level mutation, so their nested
117
+ * update is skipped to avoid duplicate changes. Relation operations that only
118
+ * exist on the parent (delete, disconnect) are still emitted for them.
40
119
  */
41
120
  setExcludedEntities(ids: ReadonlySet<string>): void;
121
+ setExcludedEntityKeys(keys: ReadonlySet<string>): void;
122
+ /**
123
+ * Sets entity IDs vetoed by an `entity:persisting` interceptor. Unlike excluded
124
+ * entities they have no top-level mutation either, so every nested operation
125
+ * that would write them — create, update or delete — is dropped.
126
+ */
127
+ setVetoedEntities(ids: ReadonlySet<string>): void;
128
+ setVetoedEntityKeys(keys: ReadonlySet<string>): void;
42
129
  /**
43
130
  * Returns IDs of entities that were included as nested inline creates
44
131
  * inside another entity's mutation data. These entities don't need
@@ -50,6 +137,22 @@ export declare class MutationCollector implements MutationDataCollector {
50
137
  * Used by BatchPersister to commit and map IDs for nested entities after persist.
51
138
  */
52
139
  getNestedEntityTypes(): ReadonlyMap<string, string>;
140
+ getNestedEntities(): readonly CollectedNestedEntity[];
141
+ getCollectedHasOneChanges(): readonly CollectedHasOneChange[];
142
+ getCollectedHasManyChanges(): readonly CollectedHasManyChange[];
143
+ getCollectedRelationFields(): readonly CollectedRelationField[];
144
+ getCollectedNestedCreates(): readonly CollectedNestedCreate[];
145
+ getCollectedNestedUpdates(): readonly CollectedNestedUpdate[];
146
+ private recordRelationField;
147
+ private registerNestedEntity;
148
+ private isExcluded;
149
+ private isVetoed;
150
+ /**
151
+ * Returns relation items (by relation key) whose planned op was not emitted because
152
+ * the item is vetoed. BatchPersister keeps these pending when it commits relations.
153
+ */
154
+ getSuppressedRelationItems(): ReadonlyMap<string, ReadonlySet<string>>;
155
+ private suppressRelationItem;
53
156
  /**
54
157
  * Collects all changes for an entity into appropriate mutation format.
55
158
  * 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;IAO7D,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAPhC,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyB;IAC1D,oFAAoF;IACpF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiC;gBAGlD,KAAK,EAAE,aAAa,EACpB,cAAc,EAAE,sBAAsB;IAGxD;;;;OAIG;IACH,mBAAmB,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI;IAMnD;;;;OAIG;IACH,kBAAkB,IAAI,WAAW,CAAC,MAAM,CAAC;IAIzC;;;OAGG;IACH,oBAAoB,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IAMnD;;;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;IA2BjC;;;OAGG;IACH,iBAAiB,CAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IA0DjC;;;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;IAgF9B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA8BhC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAuEhC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA+BjC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAgDzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;;;;;;;;OASG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;;;;;;;;OASG;IACH,OAAO,CAAC,4BAA4B;IAwBpC;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IA0ClC;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IA8CjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAa1B"}
1
+ {"version":3,"file":"MutationCollector.d.ts","sourceRoot":"","sources":["../../src/persistence/MutationCollector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { DirtyEntity } from './ChangeRegistry.js';
2
+ import type { CollectedHasManyChange, CollectedHasOneChange, CollectedNestedCreate, CollectedNestedEntity, CollectedNestedUpdate, CollectedRelationField } from './MutationCollector.js';
3
+ import type { PersistScope, TransactionMutation } from './types.js';
4
+ import type { SnapshotStore } from '../store/SnapshotStore.js';
5
+ export interface ExecutionEntity {
6
+ readonly entityType: string;
7
+ readonly entityId: string;
8
+ readonly operation: 'create' | 'update' | 'delete';
9
+ readonly scalarData: Readonly<Record<string, unknown>>;
10
+ readonly nested: boolean;
11
+ }
12
+ export interface PersistExecution {
13
+ readonly mutations: readonly TransactionMutation[];
14
+ readonly entities: readonly ExecutionEntity[];
15
+ readonly hasOneChanges: readonly CollectedHasOneChange[];
16
+ readonly hasManyChanges: readonly CollectedHasManyChange[];
17
+ readonly vetoed: readonly DirtyEntity[];
18
+ readonly nestedEntities: readonly CollectedNestedEntity[];
19
+ readonly relationFields: readonly CollectedRelationField[];
20
+ readonly nestedCreates: readonly CollectedNestedCreate[];
21
+ readonly nestedUpdates: readonly CollectedNestedUpdate[];
22
+ readonly suppressedRelationItems: ReadonlyMap<string, ReadonlySet<string>>;
23
+ }
24
+ export declare function entityIdentityKey(entityType: string, entityId: string): string;
25
+ export declare function createPersistExecution(store: SnapshotStore, mutations: readonly TransactionMutation[], entities: readonly DirtyEntity[], nestedEntities: readonly CollectedNestedEntity[], relationFieldMetadata: readonly CollectedRelationField[], nestedCreateMetadata: readonly CollectedNestedCreate[], nestedUpdateMetadata: readonly CollectedNestedUpdate[], hasOneChanges: readonly CollectedHasOneChange[], hasManyChanges: readonly CollectedHasManyChange[], vetoed: readonly DirtyEntity[], suppressedRelationItems: ReadonlyMap<string, ReadonlySet<string>>, scope: PersistScope): PersistExecution;
26
+ //# sourceMappingURL=PersistExecution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersistExecution.d.ts","sourceRoot":"","sources":["../../src/persistence/PersistExecution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EACX,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE9D,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAClD,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACtD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,mBAAmB,EAAE,CAAA;IAClD,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAA;IAC7C,QAAQ,CAAC,aAAa,EAAE,SAAS,qBAAqB,EAAE,CAAA;IACxD,QAAQ,CAAC,cAAc,EAAE,SAAS,sBAAsB,EAAE,CAAA;IAC1D,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAA;IACvC,QAAQ,CAAC,cAAc,EAAE,SAAS,qBAAqB,EAAE,CAAA;IACzD,QAAQ,CAAC,cAAc,EAAE,SAAS,sBAAsB,EAAE,CAAA;IAC1D,QAAQ,CAAC,aAAa,EAAE,SAAS,qBAAqB,EAAE,CAAA;IACxD,QAAQ,CAAC,aAAa,EAAE,SAAS,qBAAqB,EAAE,CAAA;IACxD,QAAQ,CAAC,uBAAuB,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;CAC1E;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,SAAS,mBAAmB,EAAE,EACzC,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,cAAc,EAAE,SAAS,qBAAqB,EAAE,EAChD,qBAAqB,EAAE,SAAS,sBAAsB,EAAE,EACxD,oBAAoB,EAAE,SAAS,qBAAqB,EAAE,EACtD,oBAAoB,EAAE,SAAS,qBAAqB,EAAE,EACtD,aAAa,EAAE,SAAS,qBAAqB,EAAE,EAC/C,cAAc,EAAE,SAAS,sBAAsB,EAAE,EACjD,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,uBAAuB,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,EACjE,KAAK,EAAE,YAAY,GACjB,gBAAgB,CAwHlB"}
@@ -81,6 +81,12 @@ export interface EntityPersistResult {
81
81
  readonly entityId: string;
82
82
  readonly operation: 'create' | 'update' | 'delete';
83
83
  readonly success: boolean;
84
+ /**
85
+ * The entity was deliberately not sent (vetoed by an `entity:persisting`
86
+ * interceptor). `success` is false, but it counts towards `skippedCount`,
87
+ * not `failedCount`.
88
+ */
89
+ readonly skipped?: true;
84
90
  readonly error?: PersistError;
85
91
  readonly fieldResults?: readonly FieldPersistResult[];
86
92
  /** Server-assigned ID for creates (when tempId was used) */
@@ -103,9 +109,9 @@ export interface PersistenceResult {
103
109
  readonly results: readonly EntityPersistResult[];
104
110
  /** Number of successfully persisted entities */
105
111
  readonly successCount: number;
106
- /** Number of failed entities */
112
+ /** Number of entities the server rejected — results with `success: false` and no `skipped` flag */
107
113
  readonly failedCount: number;
108
- /** Number of entities skipped (e.g., already in-flight) */
114
+ /** Number of entities not sent: already in-flight, or vetoed by an interceptor (listed in `results` with `skipped`) */
109
115
  readonly skippedCount: number;
110
116
  }
111
117
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/persistence/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAIpD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACrC;;;OAGG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAEvF;;;OAGG;IACH,iBAAiB,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CACxF;AAID;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;QAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;QACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KACnC,CAAC,CAAA;CACF;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,GAAG,WAAW,CAAA;AAI7F;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAA;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAClD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAA;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACrD,4DAA4D;IAC5D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,uBAAuB,CAAA;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAA;IAChD,gDAAgD;IAChD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,gCAAgC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAC7B;AAID;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,qCAAqC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,uBAAuB,CAAA;IACjD;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,yBAAyB,EAAE,CAAA;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,sCAAsC;IACtC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,SAAS,yBAAyB,EAAE,CAAA;CACtD;AAID;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,aAAa,CAAA;AAErD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAE/B;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAE7B;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAElC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;IAEhC;;OAEG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE5F;;OAEG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAA;CAClE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/persistence/types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { LoadStatus } from './snapshots.js';
2
2
  import type { FieldError } from '../errors/types.js';
3
+ import type { RekeyContext, Rekeyable } from './RekeyOrchestrator.js';
3
4
  /**
4
5
  * Entity load state tracking.
5
6
  */
@@ -22,15 +23,36 @@ export interface EntityMeta {
22
23
  * Keys are pre-computed composite strings (e.g., "entityType:id").
23
24
  * Follows the same pattern as ErrorStore and RelationStore.
24
25
  */
25
- export declare class EntityMetaStore {
26
+ export declare class EntityMetaStore implements Rekeyable {
26
27
  /** Load states keyed by "entityType:id" */
27
28
  private readonly loadStates;
28
29
  /** Entity metadata keyed by "entityType:id" */
29
30
  private readonly entityMetas;
30
31
  /** Persisting status keyed by "entityType:id" */
31
32
  private readonly persistingEntities;
32
- /** Mapping from temp ID to persisted ID (keyed by "entityType:tempId") */
33
- private readonly tempToPersistedId;
33
+ /**
34
+ * Entities whose in-flight persist is pessimistic, keyed by "entityType:id".
35
+ * A subset of {@link persistingEntities}. While present, the entity is
36
+ * presented at its server baseline (see SnapshotStore.getPresentationSnapshot)
37
+ * even though its canonical data stays dirty.
38
+ */
39
+ private readonly pessimisticInFlight;
40
+ /**
41
+ * Monotonic counter bumped when reachability-relevant metadata changes —
42
+ * `existsOnServer` and `isPersisting` (which seed the reachability roots) plus
43
+ * entity removal/rekey. Load state and deletion scheduling do NOT bump it.
44
+ * Used by {@link ReachabilityAnalyzer} to memoize its walk.
45
+ */
46
+ private mutationVersion;
47
+ /**
48
+ * Monotonic counter bumped on EDITABLE-layer meta writes — deletion scheduling,
49
+ * the one undoable gesture this store owns. Server-baseline (`setExistsOnServer`),
50
+ * load/persist state, removal, rekey, import and clear deliberately do NOT bump
51
+ * it. Read by the undo write-guard (see UndoJournal).
52
+ */
53
+ private editableWriteVersion;
54
+ getMutationVersion(): number;
55
+ getEditableWriteVersion(): number;
34
56
  getLoadState(key: string): EntityLoadState | undefined;
35
57
  setLoadState(key: string, status: LoadStatus, error?: FieldError): void;
36
58
  clearLoadState(key: string): void;
@@ -41,18 +63,18 @@ export declare class EntityMetaStore {
41
63
  unscheduleForDeletion(key: string): void;
42
64
  isScheduledForDeletion(key: string): boolean;
43
65
  isPersisting(key: string): boolean;
44
- setPersisting(key: string, isPersisting: boolean): void;
45
- mapTempIdToPersistedId(key: string, persistedId: string): void;
46
- getPersistedId(key: string, id: string): string | null;
47
- isNewEntity(key: string, id: string): boolean;
66
+ setPersisting(key: string, isPersisting: boolean, pessimistic?: boolean): void;
67
+ isPessimisticInFlight(key: string): boolean;
48
68
  /**
49
- * Removes all metadata for an entity (load state, meta, persisting, temp mapping).
69
+ * Removes all metadata for an entity (load state, meta, persisting).
50
70
  */
51
71
  remove(key: string): void;
52
72
  /**
53
- * Moves all metadata from oldKey to newKey.
73
+ * Moves all metadata from the temp key to the persisted key. The entity has
74
+ * just been confirmed by the server, so it is also marked as existing there
75
+ * (this replaces the former separate mapTempIdToPersistedId step).
54
76
  */
55
- rekey(oldKey: string, newKey: string): void;
77
+ rekey(ctx: RekeyContext): void;
56
78
  exportMetas(keys: string[]): Map<string, EntityMeta>;
57
79
  importMetas(metas: Map<string, EntityMeta>): void;
58
80
  clear(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"EntityMetaStore.d.ts","sourceRoot":"","sources":["../../src/store/EntityMetaStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEpD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,UAAU,CAAA;IAClB,KAAK,CAAC,EAAE,UAAU,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,8CAA8C;IAC9C,cAAc,EAAE,OAAO,CAAA;IACvB,mDAAmD;IACnD,sBAAsB,EAAE,OAAO,CAAA;CAC/B;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IAC3B,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqC;IAEhE,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAE5D,iDAAiD;IACjD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IAEvD,0EAA0E;IAC1E,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAI9D,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAItD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI;IAIvE,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMjC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIlD,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,IAAI;IAK7D,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIpC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKtC,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKxC,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAM5C,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIlC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI;IAUvD,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAK9D,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMtD,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO;IAM7C;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOzB;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IA4B3C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAWpD,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI;IAMjD,KAAK,IAAI,IAAI;CAMb"}
1
+ {"version":3,"file":"EntityMetaStore.d.ts","sourceRoot":"","sources":["../../src/store/EntityMetaStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAErE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,UAAU,CAAA;IAClB,KAAK,CAAC,EAAE,UAAU,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,8CAA8C;IAC9C,cAAc,EAAE,OAAO,CAAA;IACvB,mDAAmD;IACnD,sBAAsB,EAAE,OAAO,CAAA;CAC/B;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAChD,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqC;IAEhE,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAE5D,iDAAiD;IACjD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IAEvD;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAoB;IAExD;;;;;OAKG;IACH,OAAO,CAAC,eAAe,CAAI;IAE3B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB,CAAI;IAEhC,kBAAkB,IAAI,MAAM;IAI5B,uBAAuB,IAAI,MAAM;IAMjC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAItD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI;IAIvE,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMjC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIlD,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,IAAI;IAY7D,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIpC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMtC,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMxC,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAM5C,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIlC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,GAAE,OAAe,GAAG,IAAI;IAqBrF,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI3C;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQzB;;;;OAIG;IACH,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IA6B9B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAWpD,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI;IASjD,KAAK,IAAI,IAAI;CAOb"}
@@ -1,4 +1,5 @@
1
1
  import { type EntitySnapshot } from './snapshots.js';
2
+ import type { RekeyContext, Rekeyable } from './RekeyOrchestrator.js';
2
3
  /**
3
4
  * Manages entity snapshots — core CRUD for immutable entity data.
4
5
  *
@@ -8,7 +9,7 @@ import { type EntitySnapshot } from './snapshots.js';
8
9
  * Follows the same sub-store pattern as ErrorStore, RelationStore, etc.
9
10
  * SnapshotStore delegates entity snapshot operations here.
10
11
  */
11
- export declare class EntitySnapshotStore {
12
+ export declare class EntitySnapshotStore implements Rekeyable {
12
13
  private readonly snapshots;
13
14
  /**
14
15
  * Index from entity id to its composite key, so reachability walks can resolve
@@ -17,6 +18,46 @@ export declare class EntitySnapshotStore {
17
18
  * single key per id is unambiguous.
18
19
  */
19
20
  private readonly idIndex;
21
+ /**
22
+ * Monotonic counter bumped only when the set of keys or the id→key index
23
+ * changes (new key, removal, rekey, bulk import, clear). Pure value edits
24
+ * (setFieldValue/updateFields/commit/reset/...) do NOT bump it — they cannot
25
+ * change reachability — so the per-keystroke edit path keeps the
26
+ * {@link ReachabilityAnalyzer} cache warm.
27
+ */
28
+ private mutationVersion;
29
+ /**
30
+ * Monotonic counter bumped on every EDITABLE-layer snapshot write (local
31
+ * setData / updateFields / setFieldValue / reset) — the writes an undo gesture
32
+ * must first record. Server-baseline writes (server setData, refreshServerData,
33
+ * commit, commitFields) and non-write bookkeeping (remove, bumpVersion, import,
34
+ * rekey, clear) deliberately do NOT bump it. Read by the undo write-guard to
35
+ * detect a mutating path that wrote without recording. See UndoJournal.
36
+ */
37
+ private editableWriteVersion;
38
+ /**
39
+ * Monotonic counter bumped on every write that can change a snapshot's `data`
40
+ * or `serverData` — i.e. every write that can change whether the entity is
41
+ * dirty. Unlike the two counters above it spans BOTH layers: `mutationVersion`
42
+ * ignores value edits and `editableWriteVersion` ignores server-baseline writes
43
+ * (refreshServerData/commit/commitFields), so neither alone is a sound dirty
44
+ * key. {@link bumpVersion} is excluded — it rewrites neither side. Read by
45
+ * SnapshotStore.getDirtyVersion() to memoize the full-store dirty scan.
46
+ */
47
+ private dataWriteVersion;
48
+ getMutationVersion(): number;
49
+ getEditableWriteVersion(): number;
50
+ getDataWriteVersion(): number;
51
+ /**
52
+ * The single write chokepoint. Every path that installs a snapshot goes through
53
+ * here, so {@link dataWriteVersion} cannot be forgotten by a new mutating method
54
+ * or a new early-return branch — a stale dirty memo is silent (dead Save button),
55
+ * so the bump must not be hand-maintained per call site. Mirrors
56
+ * HasOneStore.writeRelation / HasManyStore.writeHasMany.
57
+ */
58
+ private writeSnapshot;
59
+ /** The single delete chokepoint — counterpart of {@link writeSnapshot}. */
60
+ private deleteSnapshot;
20
61
  get(key: string): EntitySnapshot | undefined;
21
62
  has(key: string): boolean;
22
63
  /**
@@ -62,6 +103,11 @@ export declare class EntitySnapshotStore {
62
103
  /**
63
104
  * Bumps the version of an entity snapshot without changing data.
64
105
  * Used by SubscriptionManager when child entities change.
106
+ *
107
+ * The ONE deliberate bypass of {@link writeSnapshot}: it reinstalls the very same
108
+ * `data` and `serverData` references under a new version, so it cannot change
109
+ * dirtiness and must not invalidate the dirty memo — it runs once per ancestor on
110
+ * every notification, which would keep the cache permanently cold.
65
111
  */
66
112
  bumpVersion(key: string): void;
67
113
  /**
@@ -78,9 +124,10 @@ export declare class EntitySnapshotStore {
78
124
  */
79
125
  importSnapshots(snapshots: Map<string, EntitySnapshot>): Set<string>;
80
126
  /**
81
- * Moves a snapshot from oldKey to newKey, updating the id in the snapshot data.
127
+ * Moves a snapshot from the temp key to the persisted key, updating the id in
128
+ * the snapshot data.
82
129
  */
83
- rekey(oldKey: string, newKey: string, newId: string): void;
130
+ rekey(ctx: RekeyContext): void;
84
131
  keys(): IterableIterator<string>;
85
132
  /**
86
133
  * Resolves an entity id (without its type) to its composite key in O(1).
@@ -1 +1 @@
1
- {"version":3,"file":"EntitySnapshotStore.d.ts","sourceRoot":"","sources":["../../src/store/EntitySnapshotStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,cAAc,EACnB,MAAM,gBAAgB,CAAA;AAEvB;;;;;;;;GAQG;AACH,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAE9D;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IAEpD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI5C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;;OAGG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,EACvB,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,CAAC,EACP,YAAY,EAAE,OAAO,GACnB,cAAc,CAAC,CAAC,CAAC;IAwBpB;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,CAAC,SAAS,MAAM,EACjC,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,CAAC,GACL,cAAc,CAAC,CAAC,CAAC;IAiCpB;;;OAGG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,EAC5B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GACjB,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS;IAiBhC;;;OAGG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAiBxE;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAezB;;OAEG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAexB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAazB;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAe9B;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;IAyBrD;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAW5D;;;OAGG;IACH,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAUpE;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAsB1D,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAIhC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIxC,KAAK,IAAI,IAAI;CAIb"}
1
+ {"version":3,"file":"EntitySnapshotStore.d.ts","sourceRoot":"","sources":["../../src/store/EntitySnapshotStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,cAAc,EACnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAErE;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,YAAW,SAAS;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAE9D;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IAEpD;;;;;;OAMG;IACH,OAAO,CAAC,eAAe,CAAI;IAE3B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB,CAAI;IAEhC;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB,CAAI;IAE5B,kBAAkB,IAAI,MAAM;IAI5B,uBAAuB,IAAI,MAAM;IAIjC,mBAAmB,IAAI,MAAM;IAI7B;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAKrB,2EAA2E;IAC3E,OAAO,CAAC,cAAc;IAMtB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI5C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;;OAGG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,EACvB,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,CAAC,EACP,YAAY,EAAE,OAAO,GACnB,cAAc,CAAC,CAAC,CAAC;IA6BpB;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,CAAC,SAAS,MAAM,EACjC,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,CAAC,GACL,cAAc,CAAC,CAAC,CAAC;IAiCpB;;;OAGG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,EAC5B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GACjB,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS;IAkBhC;;;OAGG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAkBxE;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAezB;;OAEG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAgBxB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAczB;;;;;;;;OAQG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAe9B;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;IAyBrD;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAW5D;;;OAGG;IACH,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAWpE;;;OAGG;IACH,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAuB9B,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAIhC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIxC,KAAK,IAAI,IAAI;CAQb"}
@@ -1,4 +1,5 @@
1
1
  import type { FieldError } from '../errors/types.js';
2
+ import type { RekeyContext, Rekeyable } from './RekeyOrchestrator.js';
2
3
  /**
3
4
  * Manages error state for fields, entities, and relations.
4
5
  *
@@ -7,7 +8,7 @@ import type { FieldError } from '../errors/types.js';
7
8
  * - Entity errors: "entityType:id"
8
9
  * - Relation errors: "entityType:id:relationName"
9
10
  */
10
- export declare class ErrorStore {
11
+ export declare class ErrorStore implements Rekeyable {
11
12
  /** Field errors keyed by "entityType:id:fieldName" */
12
13
  private readonly fieldErrors;
13
14
  /** Entity-level errors keyed by "entityType:id" */
@@ -81,7 +82,7 @@ export declare class ErrorStore {
81
82
  /**
82
83
  * Rekeys all errors from oldKeyPrefix to newKeyPrefix.
83
84
  */
84
- rekey(oldEntityKey: string, newEntityKey: string, oldKeyPrefix: string, newKeyPrefix: string): void;
85
+ rekey(ctx: RekeyContext): void;
85
86
  private rekeyMap;
86
87
  private rekeyByPrefix;
87
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorStore.d.ts","sourceRoot":"","sources":["../../src/store/ErrorStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAGhE;;;;;;;GAOG;AACH,qBAAa,UAAU;IACtB,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAE5D,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAE7D,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;IAI/D;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,UAAU,EAAE;IAIvD;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAMxD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAgBtE;;;;OAIG;IACH,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAiBpD;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,UAAU,EAAE;IAIzD;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAM1D;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAkBxE;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,UAAU,EAAE;IAI7D;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAM9D;;OAEG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAkB5E;;;OAGG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAgBhE;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAgB1D;;;OAGG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAqB9D;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAqB3D;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAMnG,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,aAAa;CAYrB"}
1
+ {"version":3,"file":"ErrorStore.d.ts","sourceRoot":"","sources":["../../src/store/ErrorStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAErE;;;;;;;GAOG;AACH,qBAAa,UAAW,YAAW,SAAS;IAC3C,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAE5D,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAE7D,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;IAI/D;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,UAAU,EAAE;IAIvD;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAMxD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAgBtE;;;;OAIG;IACH,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAiBpD;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,UAAU,EAAE;IAIzD;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAM1D;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAkBxE;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,UAAU,EAAE;IAI7D;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAM9D;;OAEG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAkB5E;;;OAGG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAgBhE;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAgB1D;;;OAGG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAqB9D;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAqB3D;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAM9B,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,aAAa;CAYrB"}