@verdant-web/store 4.0.0-next.1 → 4.1.0-alpha.0

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 (171) hide show
  1. package/LICENSE +21 -650
  2. package/dist/bundle/index.js +11 -11
  3. package/dist/bundle/index.js.map +4 -4
  4. package/dist/esm/__tests__/fixtures/testStorage.d.ts +1 -2
  5. package/dist/esm/__tests__/fixtures/testStorage.js +3 -5
  6. package/dist/esm/__tests__/fixtures/testStorage.js.map +1 -1
  7. package/dist/esm/client/Client.d.ts +6 -2
  8. package/dist/esm/client/Client.js +18 -6
  9. package/dist/esm/client/Client.js.map +1 -1
  10. package/dist/esm/client/ClientDescriptor.d.ts +7 -5
  11. package/dist/esm/client/ClientDescriptor.js +18 -4
  12. package/dist/esm/client/ClientDescriptor.js.map +1 -1
  13. package/dist/esm/context/ShutdownHandler.d.ts +8 -0
  14. package/dist/esm/context/ShutdownHandler.js +24 -0
  15. package/dist/esm/context/ShutdownHandler.js.map +1 -0
  16. package/dist/esm/context/context.d.ts +15 -4
  17. package/dist/esm/entities/EntityStore.js +6 -3
  18. package/dist/esm/entities/EntityStore.js.map +1 -1
  19. package/dist/esm/files/EntityFile.d.ts +1 -0
  20. package/dist/esm/files/EntityFile.js +16 -11
  21. package/dist/esm/files/EntityFile.js.map +1 -1
  22. package/dist/esm/files/FileManager.d.ts +1 -3
  23. package/dist/esm/files/FileManager.js +12 -10
  24. package/dist/esm/files/FileManager.js.map +1 -1
  25. package/dist/esm/index.d.ts +4 -5
  26. package/dist/esm/index.js +2 -3
  27. package/dist/esm/index.js.map +1 -1
  28. package/dist/esm/internal.d.ts +6 -0
  29. package/dist/esm/internal.js +5 -0
  30. package/dist/esm/internal.js.map +1 -0
  31. package/dist/esm/persistence/MessageCreator.d.ts +3 -1
  32. package/dist/esm/persistence/MessageCreator.js +58 -55
  33. package/dist/esm/persistence/MessageCreator.js.map +1 -1
  34. package/dist/esm/persistence/PersistenceFiles.d.ts +8 -21
  35. package/dist/esm/persistence/PersistenceFiles.js +44 -30
  36. package/dist/esm/persistence/PersistenceFiles.js.map +1 -1
  37. package/dist/esm/persistence/PersistenceMetadata.d.ts +12 -11
  38. package/dist/esm/persistence/PersistenceMetadata.js +201 -137
  39. package/dist/esm/persistence/PersistenceMetadata.js.map +1 -1
  40. package/dist/esm/persistence/PersistenceQueries.d.ts +10 -11
  41. package/dist/esm/persistence/PersistenceQueries.js +33 -5
  42. package/dist/esm/persistence/PersistenceQueries.js.map +1 -1
  43. package/dist/esm/persistence/PersistenceRebaser.d.ts +5 -9
  44. package/dist/esm/persistence/PersistenceRebaser.js +63 -47
  45. package/dist/esm/persistence/PersistenceRebaser.js.map +1 -1
  46. package/dist/esm/persistence/idb/IdbService.d.ts +0 -1
  47. package/dist/esm/persistence/idb/IdbService.js +28 -16
  48. package/dist/esm/persistence/idb/IdbService.js.map +1 -1
  49. package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.d.ts +11 -31
  50. package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.js +31 -36
  51. package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.js.map +1 -1
  52. package/dist/esm/persistence/idb/idbPersistence.d.ts +17 -9
  53. package/dist/esm/persistence/idb/idbPersistence.js +80 -39
  54. package/dist/esm/persistence/idb/idbPersistence.js.map +1 -1
  55. package/dist/esm/persistence/idb/metadata/IdbMetadataDb.d.ts +7 -10
  56. package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js +45 -71
  57. package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js.map +1 -1
  58. package/dist/esm/persistence/idb/metadata/openMetadataDatabase.d.ts +1 -12
  59. package/dist/esm/persistence/idb/metadata/openMetadataDatabase.js +3 -56
  60. package/dist/esm/persistence/idb/metadata/openMetadataDatabase.js.map +1 -1
  61. package/dist/esm/persistence/idb/queries/{IdbQueryDb.d.ts → IdbDocumentDb.d.ts} +7 -13
  62. package/dist/esm/persistence/idb/queries/{IdbQueryDb.js → IdbDocumentDb.js} +15 -32
  63. package/dist/esm/persistence/idb/queries/IdbDocumentDb.js.map +1 -0
  64. package/dist/esm/persistence/idb/queries/migration/db.d.ts +3 -5
  65. package/dist/esm/persistence/idb/queries/migration/db.js +13 -28
  66. package/dist/esm/persistence/idb/queries/migration/db.js.map +1 -1
  67. package/dist/esm/persistence/idb/util.d.ts +8 -4
  68. package/dist/esm/persistence/idb/util.js +64 -21
  69. package/dist/esm/persistence/idb/util.js.map +1 -1
  70. package/dist/esm/persistence/interfaces.d.ts +68 -75
  71. package/dist/esm/persistence/{idb/queries/migration → migration}/engine.d.ts +4 -7
  72. package/dist/esm/persistence/{idb/queries/migration → migration}/engine.js +18 -10
  73. package/dist/esm/persistence/migration/engine.js.map +1 -0
  74. package/dist/esm/persistence/migration/finalize.d.ts +9 -0
  75. package/dist/esm/persistence/migration/finalize.js +75 -0
  76. package/dist/esm/persistence/migration/finalize.js.map +1 -0
  77. package/dist/esm/persistence/migration/migrate.d.ts +12 -0
  78. package/dist/esm/persistence/migration/migrate.js +89 -0
  79. package/dist/esm/persistence/migration/migrate.js.map +1 -0
  80. package/dist/esm/persistence/migration/paths.js.map +1 -0
  81. package/dist/esm/persistence/migration/paths.test.js.map +1 -0
  82. package/dist/esm/persistence/migration/types.d.ts +3 -0
  83. package/dist/esm/persistence/migration/types.js.map +1 -0
  84. package/dist/esm/persistence/persistence.js +25 -15
  85. package/dist/esm/persistence/persistence.js.map +1 -1
  86. package/dist/esm/queries/FindAllQuery.js +1 -1
  87. package/dist/esm/queries/FindAllQuery.js.map +1 -1
  88. package/dist/esm/queries/FindInfiniteQuery.js +2 -2
  89. package/dist/esm/queries/FindInfiniteQuery.js.map +1 -1
  90. package/dist/esm/queries/FindOneQuery.js +1 -1
  91. package/dist/esm/queries/FindOneQuery.js.map +1 -1
  92. package/dist/esm/queries/FindPageQuery.js +1 -1
  93. package/dist/esm/queries/FindPageQuery.js.map +1 -1
  94. package/dist/esm/sync/FileSync.js +3 -3
  95. package/dist/esm/sync/FileSync.js.map +1 -1
  96. package/dist/esm/sync/PushPullSync.d.ts +2 -3
  97. package/dist/esm/sync/PushPullSync.js +4 -2
  98. package/dist/esm/sync/PushPullSync.js.map +1 -1
  99. package/dist/esm/sync/ServerSyncEndpointProvider.d.ts +3 -7
  100. package/dist/esm/sync/ServerSyncEndpointProvider.js +3 -2
  101. package/dist/esm/sync/ServerSyncEndpointProvider.js.map +1 -1
  102. package/dist/esm/sync/Sync.d.ts +6 -1
  103. package/dist/esm/sync/Sync.js +12 -4
  104. package/dist/esm/sync/Sync.js.map +1 -1
  105. package/dist/esm/sync/WebSocketSync.js +10 -4
  106. package/dist/esm/sync/WebSocketSync.js.map +1 -1
  107. package/package.json +6 -2
  108. package/src/__tests__/fixtures/testStorage.ts +6 -6
  109. package/src/client/Client.ts +26 -8
  110. package/src/client/ClientDescriptor.ts +27 -9
  111. package/src/context/ShutdownHandler.ts +26 -0
  112. package/src/context/context.ts +16 -4
  113. package/src/entities/EntityStore.ts +9 -3
  114. package/src/files/EntityFile.ts +11 -6
  115. package/src/files/FileManager.ts +13 -10
  116. package/src/index.ts +8 -9
  117. package/src/internal.ts +27 -0
  118. package/src/persistence/MessageCreator.ts +79 -73
  119. package/src/persistence/PersistenceFiles.ts +57 -31
  120. package/src/persistence/PersistenceMetadata.ts +287 -195
  121. package/src/persistence/PersistenceQueries.ts +45 -9
  122. package/src/persistence/PersistenceRebaser.ts +105 -70
  123. package/src/persistence/idb/IdbService.ts +40 -22
  124. package/src/persistence/idb/files/IdbPersistenceFileDb.ts +30 -62
  125. package/src/persistence/idb/idbPersistence.ts +123 -47
  126. package/src/persistence/idb/metadata/IdbMetadataDb.ts +75 -97
  127. package/src/persistence/idb/metadata/openMetadataDatabase.ts +2 -96
  128. package/src/persistence/idb/queries/{IdbQueryDb.ts → IdbDocumentDb.ts} +17 -57
  129. package/src/persistence/idb/queries/migration/db.ts +20 -39
  130. package/src/persistence/idb/util.ts +84 -21
  131. package/src/persistence/interfaces.ts +89 -90
  132. package/src/persistence/{idb/queries/migration → migration}/engine.ts +30 -15
  133. package/src/persistence/migration/finalize.ts +126 -0
  134. package/src/persistence/migration/migrate.ts +169 -0
  135. package/src/persistence/migration/types.ts +4 -0
  136. package/src/persistence/persistence.ts +37 -14
  137. package/src/queries/FindAllQuery.ts +1 -1
  138. package/src/queries/FindInfiniteQuery.ts +2 -2
  139. package/src/queries/FindOneQuery.ts +1 -1
  140. package/src/queries/FindPageQuery.ts +1 -1
  141. package/src/sync/FileSync.ts +21 -15
  142. package/src/sync/PushPullSync.ts +3 -4
  143. package/src/sync/ServerSyncEndpointProvider.ts +6 -8
  144. package/src/sync/Sync.ts +20 -7
  145. package/src/sync/WebSocketSync.ts +10 -4
  146. package/dist/esm/client/constants.d.ts +0 -1
  147. package/dist/esm/client/constants.js +0 -2
  148. package/dist/esm/client/constants.js.map +0 -1
  149. package/dist/esm/persistence/idb/queries/IdbQueryDb.js.map +0 -1
  150. package/dist/esm/persistence/idb/queries/migration/engine.js.map +0 -1
  151. package/dist/esm/persistence/idb/queries/migration/migrations.d.ts +0 -15
  152. package/dist/esm/persistence/idb/queries/migration/migrations.js +0 -243
  153. package/dist/esm/persistence/idb/queries/migration/migrations.js.map +0 -1
  154. package/dist/esm/persistence/idb/queries/migration/openQueryDatabase.d.ts +0 -8
  155. package/dist/esm/persistence/idb/queries/migration/openQueryDatabase.js +0 -24
  156. package/dist/esm/persistence/idb/queries/migration/openQueryDatabase.js.map +0 -1
  157. package/dist/esm/persistence/idb/queries/migration/paths.js.map +0 -1
  158. package/dist/esm/persistence/idb/queries/migration/paths.test.js.map +0 -1
  159. package/dist/esm/persistence/idb/queries/migration/types.d.ts +0 -6
  160. package/dist/esm/persistence/idb/queries/migration/types.js.map +0 -1
  161. package/src/client/constants.ts +0 -1
  162. package/src/persistence/idb/queries/migration/migrations.ts +0 -345
  163. package/src/persistence/idb/queries/migration/openQueryDatabase.ts +0 -54
  164. package/src/persistence/idb/queries/migration/types.ts +0 -8
  165. /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.d.ts +0 -0
  166. /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.js +0 -0
  167. /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.test.d.ts +0 -0
  168. /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.test.js +0 -0
  169. /package/dist/esm/persistence/{idb/queries/migration → migration}/types.js +0 -0
  170. /package/src/persistence/{idb/queries/migration → migration}/paths.test.ts +0 -0
  171. /package/src/persistence/{idb/queries/migration → migration}/paths.ts +0 -0
@@ -1,10 +1,9 @@
1
1
  import { applyPatch, assert, assignOid, EventSubscriber, getOidRoot, substituteRefsWithObjects, } from '@verdant-web/common';
2
2
  import { PersistenceRebaser } from './PersistenceRebaser.js';
3
3
  import { MessageCreator } from './MessageCreator.js';
4
- import { Disposable } from '../utils/Disposable.js';
5
- export class PersistenceMetadata extends Disposable {
4
+ import cuid from 'cuid';
5
+ export class PersistenceMetadata {
6
6
  constructor(db, ctx) {
7
- super();
8
7
  this.db = db;
9
8
  this.ctx = ctx;
10
9
  this.events = new EventSubscriber();
@@ -16,7 +15,8 @@ export class PersistenceMetadata extends Disposable {
16
15
  this.ctx.globalEvents.emit('operation', op);
17
16
  }
18
17
  // we can now enqueue and check for rebase opportunities
19
- if (!((_a = this.ctx.config.persistence) === null || _a === void 0 ? void 0 : _a.disableRebasing)) {
18
+ if (!((_a = this.ctx.config.persistence) === null || _a === void 0 ? void 0 : _a.disableRebasing) &&
19
+ !this.ctx.pauseRebasing) {
20
20
  this.rebaser.tryAutonomousRebase();
21
21
  }
22
22
  return affectedDocumentOids;
@@ -29,6 +29,7 @@ export class PersistenceMetadata extends Disposable {
29
29
  operation.isLocal = true;
30
30
  }
31
31
  await this.insertOperations(operations, options);
32
+ this.ctx.log('debug', `Inserted ${operations.length} local operations; sending sync message`);
32
33
  const message = await this.messageCreator.createOperation({ operations });
33
34
  this.events.emit('syncMessage', message);
34
35
  };
@@ -60,116 +61,120 @@ export class PersistenceMetadata extends Disposable {
60
61
  assert(documentOid === rootOid, 'Must be root document OID');
61
62
  oids.add(documentOid);
62
63
  // readwrite mode to block on other write transactions
63
- const transaction = this.db.transaction({
64
+ return this.db.transaction({
64
65
  storeNames: ['baselines', 'operations'],
66
+ }, async (transaction) => {
67
+ await Promise.all([
68
+ this.db.iterateDocumentBaselines(documentOid, (baseline) => {
69
+ oids.add(baseline.oid);
70
+ }, { transaction }),
71
+ this.db.iterateDocumentOperations(documentOid, (patch) => {
72
+ oids.add(patch.oid);
73
+ }, { transaction }),
74
+ ]);
75
+ const authz = await this.getDocumentAuthz(documentOid);
76
+ const ops = new Array();
77
+ for (const oid of oids) {
78
+ ops.push({
79
+ oid,
80
+ timestamp: this.ctx.time.now,
81
+ data: { op: 'delete' },
82
+ authz,
83
+ });
84
+ }
85
+ return this.insertLocalOperations(ops, { transaction });
65
86
  });
66
- await Promise.all([
67
- this.db.iterateDocumentBaselines(documentOid, (baseline) => {
68
- oids.add(baseline.oid);
69
- }, { transaction }),
70
- this.db.iterateDocumentOperations(documentOid, (patch) => {
71
- oids.add(patch.oid);
72
- }, { transaction }),
73
- ]);
74
- const authz = await this.getDocumentAuthz(documentOid);
75
- const ops = new Array();
76
- for (const oid of oids) {
77
- ops.push({
78
- oid,
79
- timestamp: this.ctx.time.now,
80
- data: { op: 'delete' },
81
- authz,
82
- });
83
- }
84
- return this.insertLocalOperations(ops);
85
87
  };
86
88
  this.deleteCollection = async (collection) => {
87
89
  const oids = new Set();
88
- const transaction = this.db.transaction({
90
+ return this.db.transaction({
89
91
  storeNames: ['baselines', 'operations'],
90
92
  mode: 'readwrite',
93
+ }, async (transaction) => {
94
+ await Promise.all([
95
+ this.db.iterateCollectionBaselines(collection, (baseline) => {
96
+ oids.add(baseline.oid);
97
+ }, { transaction }),
98
+ this.db.iterateCollectionOperations(collection, (patch) => {
99
+ oids.add(patch.oid);
100
+ }, { transaction }),
101
+ ]);
102
+ const ops = new Array();
103
+ for (const oid of oids) {
104
+ ops.push({
105
+ oid,
106
+ timestamp: this.ctx.time.now,
107
+ data: { op: 'delete' },
108
+ authz: undefined,
109
+ });
110
+ }
111
+ return this.insertLocalOperations(ops, { transaction });
91
112
  });
92
- await Promise.all([
93
- this.db.iterateCollectionBaselines(collection, (baseline) => {
94
- oids.add(baseline.oid);
95
- }, { transaction }),
96
- this.db.iterateCollectionOperations(collection, (patch) => {
97
- oids.add(patch.oid);
98
- }, { transaction }),
99
- ]);
100
- const ops = new Array();
101
- for (const oid of oids) {
102
- ops.push({
103
- oid,
104
- timestamp: this.ctx.time.now,
105
- data: { op: 'delete' },
106
- authz: undefined,
107
- });
108
- }
109
- return this.insertLocalOperations(ops);
110
113
  };
111
114
  this.getDocumentSnapshot = async (oid, options = {}) => {
112
115
  const documentOid = getOidRoot(oid);
113
116
  assert(documentOid === oid, 'Must be root document OID');
114
- const transaction = this.db.transaction({
117
+ return this.db.transaction({
115
118
  storeNames: ['baselines', 'operations'],
116
119
  mode: 'readwrite',
117
- });
118
- const baselines = [];
119
- await this.db.iterateDocumentBaselines(documentOid, (b) => {
120
- baselines.push(b);
121
- }, {
122
- transaction,
123
- });
124
- const objectMap = new Map();
125
- for (const baseline of baselines) {
126
- if (baseline.snapshot) {
127
- assignOid(baseline.snapshot, baseline.oid);
120
+ }, async (transaction) => {
121
+ const baselines = [];
122
+ await this.db.iterateDocumentBaselines(documentOid, (b) => {
123
+ baselines.push(b);
124
+ }, {
125
+ transaction,
126
+ });
127
+ const objectMap = new Map();
128
+ for (const baseline of baselines) {
129
+ if (baseline.snapshot) {
130
+ assignOid(baseline.snapshot, baseline.oid);
131
+ }
132
+ objectMap.set(baseline.oid, baseline.snapshot);
128
133
  }
129
- objectMap.set(baseline.oid, baseline.snapshot);
130
- }
131
- await this.db.iterateDocumentOperations(documentOid, (op) => {
132
- const obj = objectMap.get(op.oid) || undefined;
133
- const newObj = applyPatch(obj, op.data);
134
- if (newObj) {
135
- assignOid(newObj, op.oid);
134
+ await this.db.iterateDocumentOperations(documentOid, (op) => {
135
+ const obj = objectMap.get(op.oid) || undefined;
136
+ const newObj = applyPatch(obj, op.data);
137
+ if (newObj) {
138
+ assignOid(newObj, op.oid);
139
+ }
140
+ objectMap.set(op.oid, newObj);
141
+ }, {
142
+ transaction,
143
+ // only apply operations up to the current time
144
+ to: options.to || this.ctx.time.now,
145
+ });
146
+ const root = objectMap.get(documentOid);
147
+ if (root) {
148
+ substituteRefsWithObjects(root, objectMap);
136
149
  }
137
- objectMap.set(op.oid, newObj);
138
- }, {
139
- transaction,
140
- // only apply operations up to the current time
141
- to: options.to || this.ctx.time.now,
150
+ return root;
142
151
  });
143
- const root = objectMap.get(documentOid);
144
- if (root) {
145
- substituteRefsWithObjects(root, objectMap);
146
- }
147
- return root;
148
152
  };
149
153
  this.getDocumentData = async (oid, options) => {
150
- const transaction = this.db.transaction({
154
+ return this.db.transaction({
151
155
  storeNames: ['baselines', 'operations'],
152
156
  abort: options === null || options === void 0 ? void 0 : options.abort,
157
+ }, async (transaction) => {
158
+ const baselines = [];
159
+ const operations = {};
160
+ await Promise.all([
161
+ this.db.iterateDocumentBaselines(oid, (baseline) => {
162
+ baselines.push(baseline);
163
+ }, {
164
+ transaction,
165
+ }),
166
+ this.db.iterateDocumentOperations(oid, (op) => {
167
+ var _a;
168
+ var _b;
169
+ (_a = operations[_b = op.oid]) !== null && _a !== void 0 ? _a : (operations[_b] = []);
170
+ operations[op.oid].push(op);
171
+ }, { transaction }),
172
+ ]);
173
+ return {
174
+ baselines,
175
+ operations,
176
+ };
153
177
  });
154
- const baselines = [];
155
- const operations = {};
156
- await Promise.all([
157
- this.db.iterateDocumentBaselines(oid, (baseline) => {
158
- baselines.push(baseline);
159
- }, {
160
- transaction,
161
- }),
162
- this.db.iterateDocumentOperations(oid, (op) => {
163
- var _a;
164
- var _b;
165
- (_a = operations[_b = op.oid]) !== null && _a !== void 0 ? _a : (operations[_b] = []);
166
- operations[op.oid].push(op);
167
- }, { transaction }),
168
- ]);
169
- return {
170
- baselines,
171
- operations,
172
- };
173
178
  };
174
179
  this.getDocumentAuthz = async (oid) => {
175
180
  let authz;
@@ -182,30 +187,36 @@ export class PersistenceMetadata extends Disposable {
182
187
  return authz;
183
188
  };
184
189
  this.insertData = async (data, options) => {
185
- var _a;
186
- const transaction = this.db.transaction({
190
+ return this.db.transaction({
187
191
  storeNames: ['baselines', 'operations'],
188
192
  abort: options === null || options === void 0 ? void 0 : options.abort,
189
193
  mode: 'readwrite',
190
- });
191
- if (data.baselines) {
192
- await this.insertRemoteBaselines(data.baselines, { transaction });
193
- }
194
- if ((_a = options === null || options === void 0 ? void 0 : options.abort) === null || _a === void 0 ? void 0 : _a.aborted)
195
- return;
196
- if (data.operations) {
197
- if (data.isLocal) {
198
- await this.insertLocalOperations(data.operations, { transaction });
194
+ }, async (transaction) => {
195
+ var _a;
196
+ this.ctx.log('debug', 'Begin insert data transaction');
197
+ if (data.baselines) {
198
+ await this.insertRemoteBaselines(data.baselines, { transaction });
199
199
  }
200
- else {
201
- await this.insertRemoteOperations(data.operations, { transaction });
200
+ this.ctx.log('debug', 'Inserted baselines (if any)');
201
+ if ((_a = options === null || options === void 0 ? void 0 : options.abort) === null || _a === void 0 ? void 0 : _a.aborted)
202
+ throw new Error('Aborted');
203
+ if (data.operations) {
204
+ if (data.isLocal) {
205
+ this.ctx.log('debug', 'Inserting local operations');
206
+ await this.insertLocalOperations(data.operations, { transaction });
207
+ }
208
+ else {
209
+ this.ctx.log('debug', 'Inserting remote operations');
210
+ await this.insertRemoteOperations(data.operations, { transaction });
211
+ }
202
212
  }
203
- }
213
+ this.ctx.log('debug', 'End insert data transaction');
214
+ });
204
215
  };
205
216
  this.updateLastSynced = async (timestamp) => {
206
217
  if (this.ctx.closing)
207
218
  return;
208
- return this.db.updateLocalReplica({
219
+ return this.updateLocalReplica({
209
220
  lastSyncedLogicalTime: timestamp,
210
221
  });
211
222
  };
@@ -218,50 +229,104 @@ export class PersistenceMetadata extends Disposable {
218
229
  await this.rebaser.scheduleRebase(ack);
219
230
  }
220
231
  };
232
+ // caching local replica as it's accessed often and only changed
233
+ // via this class.
234
+ this._cachedLocalReplica = null;
235
+ this._creatingLocalReplica = undefined;
221
236
  this.getLocalReplica = async (options) => {
222
- return this.db.getLocalReplica(options);
237
+ if (this._cachedLocalReplica)
238
+ return this._cachedLocalReplica;
239
+ const lookup = await this.db.getLocalReplica(options);
240
+ if (lookup) {
241
+ this.ctx.log('debug', 'Read local replica', lookup);
242
+ this._cachedLocalReplica = lookup;
243
+ return lookup;
244
+ }
245
+ if (this._creatingLocalReplica) {
246
+ return this._creatingLocalReplica;
247
+ }
248
+ this._creatingLocalReplica = (async () => {
249
+ const replicaId = cuid();
250
+ const replicaInfo = {
251
+ id: replicaId,
252
+ userId: null,
253
+ ackedLogicalTime: null,
254
+ lastSyncedLogicalTime: null,
255
+ };
256
+ await this.db.updateLocalReplica(replicaInfo);
257
+ this._cachedLocalReplica = replicaInfo;
258
+ return replicaInfo;
259
+ })();
260
+ return this._creatingLocalReplica;
261
+ };
262
+ this.updateLocalReplica = async (data, opts) => {
263
+ const original = await this.getLocalReplica(opts);
264
+ assert(!!original, 'Local replica must exist');
265
+ Object.assign(original, data);
266
+ this._cachedLocalReplica = original;
267
+ await this.db.updateLocalReplica(original, opts);
223
268
  };
224
269
  // used to construct sync messages
225
270
  this.iterateLocalOperations = this.db.iterateLocalOperations;
226
271
  this.iterateAllOperations = this.db.iterateAllOperations;
227
272
  this.iterateAllBaselines = this.db.iterateAllBaselines;
228
- this.reset = this.db.reset;
273
+ this.reset = async () => {
274
+ if (this.ctx.closing)
275
+ return;
276
+ await this.db.reset();
277
+ };
229
278
  this.stats = this.db.stats;
230
279
  this.export = async () => {
231
- const db = this.db;
232
280
  const baselines = new Array();
233
281
  const operations = new Array();
234
- const transaction = db.transaction({
282
+ return this.db.transaction({
235
283
  storeNames: ['baselines', 'operations'],
236
284
  mode: 'readwrite',
285
+ }, async (transaction) => {
286
+ await this.iterateAllOperations((op) => {
287
+ operations.push(op);
288
+ }, { transaction });
289
+ await this.iterateAllBaselines((baseline) => {
290
+ baselines.push(baseline);
291
+ }, { transaction });
292
+ const localReplica = await this.getLocalReplica();
293
+ return {
294
+ operations,
295
+ baselines,
296
+ localReplica,
297
+ schemaVersion: this.ctx.schema.version,
298
+ };
237
299
  });
238
- await this.iterateAllOperations((op) => {
239
- operations.push(op);
240
- }, { transaction });
241
- await this.iterateAllBaselines((baseline) => {
242
- baselines.push(baseline);
243
- }, { transaction });
244
- const localReplica = await this.db.getLocalReplica();
245
- return {
246
- operations,
247
- baselines,
248
- localReplica,
249
- schemaVersion: this.ctx.schema.version,
250
- };
251
300
  };
252
301
  this.resetFrom = async (data) => {
253
- const db = this.db;
254
- const transaction = db.transaction({
255
- storeNames: ['baselines', 'operations', 'info'],
256
- mode: 'readwrite',
257
- });
258
- await this.db.reset({ clearReplica: true, transaction });
302
+ this._cachedLocalReplica = null;
303
+ // await this.db.transaction(
304
+ // { mode: 'readwrite', storeNames: ['baselines', 'operations', 'info'] },
305
+ // async (tx) => {
306
+ // await this.db.reset({ clearReplica: true, transaction: tx });
307
+ // if (data.localReplica) {
308
+ // await this.updateLocalReplica(
309
+ // {
310
+ // ackedLogicalTime: data.localReplica.ackedLogicalTime,
311
+ // lastSyncedLogicalTime: data.localReplica.lastSyncedLogicalTime,
312
+ // },
313
+ // {
314
+ // transaction: tx,
315
+ // },
316
+ // );
317
+ // }
318
+ // },
319
+ // );
320
+ // transaction wasn't working for IDB (invalid state -- it was closing early?)
321
+ await this.db.reset({ clearReplica: true });
259
322
  if (data.localReplica) {
260
- await this.db.updateLocalReplica({
323
+ await this.updateLocalReplica({
261
324
  ackedLogicalTime: data.localReplica.ackedLogicalTime,
262
325
  lastSyncedLogicalTime: data.localReplica.lastSyncedLogicalTime,
263
- }, { transaction });
326
+ });
264
327
  }
328
+ // after transaction completes, insert new data.
329
+ // TODO: does this have to be split up like this?
265
330
  this.ctx.log('debug', 'Resetting metadata from export', data);
266
331
  await this.insertData({
267
332
  operations: data.operations,
@@ -279,7 +344,7 @@ export class PersistenceMetadata extends Disposable {
279
344
  }
280
345
  };
281
346
  this.ack = async (timestamp) => {
282
- const localReplicaInfo = await this.db.getLocalReplica();
347
+ const localReplicaInfo = await this.getLocalReplica();
283
348
  // can't ack timestamps from the future.
284
349
  if (timestamp > this.ctx.time.now)
285
350
  return;
@@ -291,12 +356,11 @@ export class PersistenceMetadata extends Disposable {
291
356
  if (!this.ctx.closing &&
292
357
  (!localReplicaInfo.ackedLogicalTime ||
293
358
  timestamp > localReplicaInfo.ackedLogicalTime)) {
294
- this.db.updateLocalReplica({ ackedLogicalTime: timestamp });
359
+ this.updateLocalReplica({ ackedLogicalTime: timestamp });
295
360
  }
296
361
  };
297
- this.rebaser = new PersistenceRebaser(db, ctx);
298
- this.messageCreator = new MessageCreator(db, ctx);
299
- this.compose(this.db);
362
+ this.rebaser = new PersistenceRebaser(db, this, ctx);
363
+ this.messageCreator = new MessageCreator(db, this, ctx);
300
364
  }
301
365
  }
302
366
  //# sourceMappingURL=PersistenceMetadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PersistenceMetadata.js","sourceRoot":"","sources":["../../../src/persistence/PersistenceMetadata.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PersistenceMetadata.js","sourceRoot":"","sources":["../../../src/persistence/PersistenceMetadata.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,18 @@
1
- import { PersistenceQueryDb } from './interfaces.js';
1
+ import { PersistenceDocumentDb } from './interfaces.js';
2
2
  import { Context } from '../context/context.js';
3
- import { Disposable } from '../utils/Disposable.js';
4
- export declare class PersistenceQueries extends Disposable {
3
+ import { ObjectIdentifier } from '@verdant-web/common';
4
+ export declare class PersistenceDocuments {
5
5
  private db;
6
6
  private ctx;
7
- constructor(db: PersistenceQueryDb, ctx: Omit<Context, 'queries'>);
8
- reset: (opts?: {
9
- transaction?: unknown;
10
- } | undefined) => Promise<void>;
7
+ constructor(db: PersistenceDocumentDb, ctx: Omit<Context, 'queries'>);
8
+ reset: () => Promise<void>;
9
+ close: () => Promise<void>;
11
10
  saveEntities: (entities: {
12
- oid: string;
11
+ oid: ObjectIdentifier;
13
12
  getSnapshot: () => any;
14
- }[], opts?: (import("./interfaces.js").CommonQueryOptions & {
15
- abort?: AbortSignal | undefined;
16
- }) | undefined) => Promise<void>;
13
+ }[], options?: {
14
+ abort?: AbortSignal;
15
+ }) => Promise<void>;
17
16
  findOneOid: (opts: {
18
17
  collection: string;
19
18
  index?: import("@verdant-web/common").CollectionIndexFilter | undefined;
@@ -1,15 +1,43 @@
1
- import { Disposable } from '../utils/Disposable.js';
2
- export class PersistenceQueries extends Disposable {
1
+ import { decomposeOid } from '@verdant-web/common';
2
+ export class PersistenceDocuments {
3
3
  constructor(db, ctx) {
4
- super();
5
4
  this.db = db;
6
5
  this.ctx = ctx;
7
6
  this.reset = this.db.reset.bind(this.db);
8
- this.saveEntities = this.db.saveEntities;
7
+ this.close = this.db.close.bind(this.db);
8
+ this.saveEntities = async (entities, options) => {
9
+ if (entities.length === 0)
10
+ return;
11
+ // filter entities to remove collections which don't
12
+ // exist in the schema anymore
13
+ const currentCollectionSet = new Set(Object.keys(this.ctx.schema.collections));
14
+ const collections = [];
15
+ const filteredEntities = entities.filter((entity) => {
16
+ const { collection } = decomposeOid(entity.oid);
17
+ if (!currentCollectionSet.has(collection)) {
18
+ this.ctx.log('warn', `Entity ${entity.oid} is in a collection that no longer exists in the schema. It will not be saved.`);
19
+ return false;
20
+ }
21
+ if (!collections.includes(collection))
22
+ collections.push(collection);
23
+ return true;
24
+ });
25
+ if (collections.length === 0)
26
+ return;
27
+ this.ctx.log('debug', 'Saving', filteredEntities.length, 'entities');
28
+ await this.db.saveEntities(filteredEntities, {
29
+ abort: options === null || options === void 0 ? void 0 : options.abort,
30
+ collections,
31
+ });
32
+ this.ctx.log('debug', 'Saved', filteredEntities.length, 'entities');
33
+ this.ctx.entityEvents.emit('collectionsChanged', collections);
34
+ for (const entity of entities) {
35
+ this.ctx.entityEvents.emit('documentChanged', entity.oid);
36
+ }
37
+ };
9
38
  this.findOneOid = this.db.findOneOid.bind(this.db);
10
39
  this.findAllOids = this.db.findAllOids.bind(this.db);
11
40
  this.stats = this.db.stats.bind(this.db);
12
- this.compose(this.db);
13
41
  }
14
42
  }
15
43
  //# sourceMappingURL=PersistenceQueries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PersistenceQueries.js","sourceRoot":"","sources":["../../../src/persistence/PersistenceQueries.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IACjD,YACS,EAAsB,EACtB,GAA6B;QAErC,KAAK,EAAE,CAAC;QAHA,OAAE,GAAF,EAAE,CAAoB;QACtB,QAAG,GAAH,GAAG,CAA0B;QAMtC,UAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEpC,iBAAY,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;QAEpC,eAAU,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9C,gBAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEhD,UAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAVnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;CAUD"}
1
+ {"version":3,"file":"PersistenceQueries.js","sourceRoot":"","sources":["../../../src/persistence/PersistenceQueries.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAoB,MAAM,qBAAqB,CAAC;AAErE,MAAM,OAAO,oBAAoB;IAChC,YACS,EAAyB,EACzB,GAA6B;QAD7B,OAAE,GAAF,EAAE,CAAuB;QACzB,QAAG,GAAH,GAAG,CAA0B;QAGtC,UAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEpC,UAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEpC,iBAAY,GAAG,KAAK,EACnB,QAA6D,EAC7D,OAAiC,EAChC,EAAE;YACH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAElC,oDAAoD;YACpD,8BAA8B;YAC9B,MAAM,oBAAoB,GAAG,IAAI,GAAG,CACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CACxC,CAAC;YACF,MAAM,WAAW,GAAa,EAAE,CAAC;YACjC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;gBACnD,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC3C,IAAI,CAAC,GAAG,CAAC,GAAG,CACX,MAAM,EACN,UAAU,MAAM,CAAC,GAAG,gFAAgF,CACpG,CAAC;oBACF,OAAO,KAAK,CAAC;gBACd,CAAC;gBACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;oBAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACpE,OAAO,IAAI,CAAC;YACb,CAAC,CAAC,CAAC;YAEH,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAErC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACrE,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE;gBAC5C,KAAK,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK;gBACrB,WAAW;aACX,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACpE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;YAC9D,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3D,CAAC;QACF,CAAC,CAAC;QAEF,eAAU,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9C,gBAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEhD,UAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAhDjC,CAAC;CAiDJ"}
@@ -1,10 +1,11 @@
1
- import { ObjectIdentifier } from '@verdant-web/common';
2
1
  import { Context } from '../context/context.js';
3
- import { AbstractTransaction, PersistenceMetadataDb } from './interfaces.js';
2
+ import { PersistenceMetadataDb } from './interfaces.js';
3
+ import type { PersistenceMetadata } from './PersistenceMetadata.js';
4
4
  export declare class PersistenceRebaser {
5
5
  private db;
6
+ private meta;
6
7
  private ctx;
7
- constructor(db: PersistenceMetadataDb, ctx: Pick<Context, 'closing' | 'log' | 'time' | 'internalEvents' | 'globalEvents' | 'config'>);
8
+ constructor(db: PersistenceMetadataDb, meta: PersistenceMetadata, ctx: Pick<Context, 'closing' | 'log' | 'time' | 'internalEvents' | 'globalEvents' | 'config' | 'closeLock' | 'persistenceShutdownHandler'>);
8
9
  /**
9
10
  * Autonomous rebases are only allowed for clients who have never synced. They
10
11
  * keep storage clean for non-syncing clients by compressing history.
@@ -23,10 +24,5 @@ export declare class PersistenceRebaser {
23
24
  */
24
25
  scheduleRebase: (timestamp: string) => Promise<void>;
25
26
  private rebaseTimeout;
26
- rebase: (oid: ObjectIdentifier, upTo: string, providedTx?: AbstractTransaction) => Promise<{
27
- oid: string;
28
- snapshot: any;
29
- timestamp: string;
30
- authz: string | undefined;
31
- }>;
27
+ private rebase;
32
28
  }