@verdant-web/store 5.3.0 → 5.4.2
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/bundle/index.js +8 -8
- package/dist/bundle/index.js.map +4 -4
- package/dist/esm/__tests__/queries.test.js +35 -0
- package/dist/esm/__tests__/queries.test.js.map +1 -1
- package/dist/esm/client/Client.js +12 -4
- package/dist/esm/client/Client.js.map +1 -1
- package/dist/esm/entities/Entity.d.ts +2 -5
- package/dist/esm/entities/Entity.js +17 -10
- package/dist/esm/entities/Entity.js.map +1 -1
- package/dist/esm/entities/EntityMetadata.js +14 -2
- package/dist/esm/entities/EntityMetadata.js.map +1 -1
- package/dist/esm/entities/EntityStore.js +1 -0
- package/dist/esm/entities/EntityStore.js.map +1 -1
- package/dist/esm/persistence/MessageCreator.js +1 -1
- package/dist/esm/persistence/MessageCreator.js.map +1 -1
- package/dist/esm/persistence/PersistenceMetadata.d.ts +6 -1
- package/dist/esm/persistence/PersistenceMetadata.js +40 -2
- package/dist/esm/persistence/PersistenceMetadata.js.map +1 -1
- package/dist/esm/persistence/PersistenceRebaser.js +1 -1
- package/dist/esm/persistence/PersistenceRebaser.js.map +1 -1
- package/dist/esm/persistence/idb/IdbService.js +1 -1
- package/dist/esm/persistence/idb/IdbService.js.map +1 -1
- package/dist/esm/persistence/idb/indexNames.d.ts +5 -0
- package/dist/esm/persistence/idb/indexNames.js +6 -0
- package/dist/esm/persistence/idb/indexNames.js.map +1 -0
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.d.ts +6 -3
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js +33 -8
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js.map +1 -1
- package/dist/esm/persistence/idb/metadata/openMetadataDatabase.js +5 -5
- package/dist/esm/persistence/idb/metadata/openMetadataDatabase.js.map +1 -1
- package/dist/esm/persistence/idb/queries/ranges.js +3 -4
- package/dist/esm/persistence/idb/queries/ranges.js.map +1 -1
- package/dist/esm/persistence/interfaces.d.ts +2 -0
- package/dist/esm/persistence/migration/engine.js +3 -4
- package/dist/esm/persistence/migration/engine.js.map +1 -1
- package/dist/esm/queries/BaseQuery.d.ts +6 -0
- package/dist/esm/queries/BaseQuery.js +39 -5
- package/dist/esm/queries/BaseQuery.js.map +1 -1
- package/dist/esm/queries/CollectionQueries.d.ts +8 -7
- package/dist/esm/queries/CollectionQueries.js +8 -6
- package/dist/esm/queries/CollectionQueries.js.map +1 -1
- package/dist/esm/queries/FindAllQuery.d.ts +3 -1
- package/dist/esm/queries/FindAllQuery.js +6 -4
- package/dist/esm/queries/FindAllQuery.js.map +1 -1
- package/dist/esm/queries/FindInfiniteQuery.js +6 -6
- package/dist/esm/queries/FindInfiniteQuery.js.map +1 -1
- package/dist/esm/queries/FindOneQuery.js +3 -3
- package/dist/esm/queries/FindOneQuery.js.map +1 -1
- package/dist/esm/queries/FindPageQuery.js +3 -3
- package/dist/esm/queries/FindPageQuery.js.map +1 -1
- package/dist/esm/queries/GetQuery.js +1 -1
- package/dist/esm/queries/GetQuery.js.map +1 -1
- package/dist/esm/queries/QueryCache.d.ts +4 -1
- package/dist/esm/queries/QueryCache.js +15 -1
- package/dist/esm/queries/QueryCache.js.map +1 -1
- package/dist/esm/queries/diagnostics.d.ts +19 -0
- package/dist/esm/queries/diagnostics.js +11 -0
- package/dist/esm/queries/diagnostics.js.map +1 -0
- package/dist/esm/queries/ranges.js +3 -4
- package/dist/esm/queries/ranges.js.map +1 -1
- package/dist/esm/sync/WebSocketSync.js +4 -2
- package/dist/esm/sync/WebSocketSync.js.map +1 -1
- package/package.json +7 -2
- package/src/__tests__/queries.test.ts +42 -0
- package/src/client/Client.ts +15 -4
- package/src/entities/Entity.ts +31 -22
- package/src/entities/EntityMetadata.ts +15 -3
- package/src/entities/EntityStore.ts +1 -0
- package/src/persistence/MessageCreator.ts +1 -1
- package/src/persistence/PersistenceMetadata.ts +67 -7
- package/src/persistence/PersistenceRebaser.ts +1 -1
- package/src/persistence/idb/IdbService.ts +1 -1
- package/src/persistence/idb/indexNames.ts +5 -0
- package/src/persistence/idb/metadata/IdbMetadataDb.ts +71 -14
- package/src/persistence/idb/metadata/openMetadataDatabase.ts +15 -7
- package/src/persistence/idb/queries/ranges.ts +2 -3
- package/src/persistence/interfaces.ts +5 -1
- package/src/persistence/migration/engine.ts +3 -4
- package/src/queries/BaseQuery.ts +41 -5
- package/src/queries/CollectionQueries.ts +12 -9
- package/src/queries/FindAllQuery.ts +14 -7
- package/src/queries/FindInfiniteQuery.ts +22 -18
- package/src/queries/FindOneQuery.ts +9 -7
- package/src/queries/FindPageQuery.ts +11 -9
- package/src/queries/GetQuery.ts +1 -1
- package/src/queries/QueryCache.ts +19 -2
- package/src/queries/diagnostics.ts +32 -0
- package/src/queries/ranges.ts +2 -3
- package/src/sync/WebSocketSync.ts +2 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Entity } from '../entities/Entity.js';
|
|
2
|
+
export const getDiagnosticResult = (value) => {
|
|
3
|
+
if (Array.isArray(value)) {
|
|
4
|
+
return value.map(getDiagnosticResult);
|
|
5
|
+
}
|
|
6
|
+
if (value instanceof Entity) {
|
|
7
|
+
return value.getSnapshot();
|
|
8
|
+
}
|
|
9
|
+
return value;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/queries/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAuB/C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAW,EAAE;IAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC"}
|
|
@@ -21,12 +21,11 @@ const rangeIndexToIdbKeyRange = (filter) => {
|
|
|
21
21
|
return IDBKeyRange.bound(sanitizeIndexValue(lower), sanitizeIndexValue(upper), !!filter.gt, !!filter.lt);
|
|
22
22
|
}
|
|
23
23
|
};
|
|
24
|
-
const compoundIndexToIdbKeyRange = (
|
|
25
|
-
|
|
26
|
-
schema, collection, filter) => {
|
|
24
|
+
const compoundIndexToIdbKeyRange = (schema, collection, filter) => {
|
|
25
|
+
var _a;
|
|
27
26
|
// validate the usage of the compound index:
|
|
28
27
|
// - all match fields must be contiguous at the start of the compound order
|
|
29
|
-
const indexDefinition = schema.collections[collection].compounds[filter.where];
|
|
28
|
+
const indexDefinition = (_a = schema.collections[collection].compounds) === null || _a === void 0 ? void 0 : _a[filter.where];
|
|
30
29
|
assert(indexDefinition, `Index ${filter.where} does not exist on collection ${collection}`);
|
|
31
30
|
const matchedKeys = Object.keys(filter.match).sort((a, b) => indexDefinition.of.indexOf(a) - indexDefinition.of.indexOf(b));
|
|
32
31
|
for (const key of matchedKeys) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ranges.js","sourceRoot":"","sources":["../../../src/queries/ranges.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,MAAM,EAGN,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EAGvB,kBAAkB,GAIlB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,uBAAuB,GAAG,CAAC,MAAkC,EAAE,EAAE;IACtE,OAAO,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,MAAuB,EAAE,EAAE;IAC1D,OAAO,SAAS,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,MAAkC,EAAE,EAAE;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;IACtC,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,WAAW,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;SAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACP,OAAO,WAAW,CAAC,KAAK,CACvB,kBAAkB,CAAC,KAAK,CAAC,EACzB,kBAAkB,CAAC,KAAK,CAAC,EACzB,CAAC,CAAC,MAAM,CAAC,EAAE,EACX,CAAC,CAAC,MAAM,CAAC,EAAE,CACX,CAAC;IACH,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG
|
|
1
|
+
{"version":3,"file":"ranges.js","sourceRoot":"","sources":["../../../src/queries/ranges.ts"],"names":[],"mappings":"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"}
|
|
@@ -208,11 +208,13 @@ export class WebSocketSync extends EventSubscriber {
|
|
|
208
208
|
this._status = 'active';
|
|
209
209
|
};
|
|
210
210
|
this.stop = async () => {
|
|
211
|
-
var _a, _b, _c;
|
|
211
|
+
var _a, _b, _c, _d, _e;
|
|
212
212
|
await this.sendDisconnecting();
|
|
213
213
|
(_a = this.socket) === null || _a === void 0 ? void 0 : _a.removeEventListener('message', this.onMessage);
|
|
214
214
|
(_b = this.socket) === null || _b === void 0 ? void 0 : _b.removeEventListener('close', this.onClose);
|
|
215
|
-
|
|
215
|
+
(_c = this.socket) === null || _c === void 0 ? void 0 : _c.removeEventListener('error', this.onError);
|
|
216
|
+
(_d = this.socket) === null || _d === void 0 ? void 0 : _d.removeEventListener('open', this.onOpen);
|
|
217
|
+
if (((_e = this.socket) === null || _e === void 0 ? void 0 : _e.readyState) === WEBSOCKET_OPEN) {
|
|
216
218
|
this.socket.close();
|
|
217
219
|
}
|
|
218
220
|
this.socket = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketSync.js","sourceRoot":"","sources":["../../../src/sync/WebSocketSync.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"WebSocketSync.js","sourceRoot":"","sources":["../../../src/sync/WebSocketSync.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verdant-web/store",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.4.2",
|
|
4
4
|
"access": "public",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/esm/index.js",
|
|
@@ -25,6 +25,11 @@
|
|
|
25
25
|
"publishConfig": {
|
|
26
26
|
"access": "public"
|
|
27
27
|
},
|
|
28
|
+
"repository": {
|
|
29
|
+
"url": "https://github.com/a-type/verdant",
|
|
30
|
+
"directory": "packages/store",
|
|
31
|
+
"type": "git"
|
|
32
|
+
},
|
|
28
33
|
"files": [
|
|
29
34
|
"dist/",
|
|
30
35
|
"src/"
|
|
@@ -34,7 +39,7 @@
|
|
|
34
39
|
"jszip": "^3.10.1",
|
|
35
40
|
"jwt-decode": "^3.1.2",
|
|
36
41
|
"weak-event": "^2.0.5",
|
|
37
|
-
"@verdant-web/common": "3.2.
|
|
42
|
+
"@verdant-web/common": "3.2.1"
|
|
38
43
|
},
|
|
39
44
|
"devDependencies": {
|
|
40
45
|
"@types/node": "20.10.5",
|
|
@@ -76,6 +76,25 @@ describe('storage queries', () => {
|
|
|
76
76
|
expect(results.map((i: any) => i.get('id'))).toEqual([items[3].get('id')]);
|
|
77
77
|
});
|
|
78
78
|
|
|
79
|
+
it('exposes query diagnostics with result data and phase timings', async () => {
|
|
80
|
+
const storage = createTestStorage();
|
|
81
|
+
await storage.todos.put({ id: '1', content: 'item' });
|
|
82
|
+
|
|
83
|
+
await storage.todos.findAll().resolved;
|
|
84
|
+
|
|
85
|
+
const diagnostics = storage.queries.diagnostics.queries;
|
|
86
|
+
expect(diagnostics).toHaveLength(1);
|
|
87
|
+
expect(diagnostics[0]).toMatchObject({
|
|
88
|
+
key: 'findAll:todos:undefined:',
|
|
89
|
+
collection: 'todos',
|
|
90
|
+
type: 'FindAllQuery',
|
|
91
|
+
active: true,
|
|
92
|
+
result: [{ id: '1', content: 'item' }],
|
|
93
|
+
});
|
|
94
|
+
expect(diagnostics[0].timing.sweep).toBeTypeOf('number');
|
|
95
|
+
expect(diagnostics[0].timing.hydration).toBeTypeOf('number');
|
|
96
|
+
});
|
|
97
|
+
|
|
79
98
|
it('can query simple compound indexes by match and order', async () => {
|
|
80
99
|
const storage = createTestStorage();
|
|
81
100
|
|
|
@@ -123,6 +142,29 @@ describe('storage queries', () => {
|
|
|
123
142
|
]);
|
|
124
143
|
});
|
|
125
144
|
|
|
145
|
+
it('can limit query results of find all queries', async () => {
|
|
146
|
+
const storage = await createTestStorage();
|
|
147
|
+
|
|
148
|
+
const items = await addTestingItems(storage);
|
|
149
|
+
|
|
150
|
+
const query = storage.todos.findAll({
|
|
151
|
+
index: {
|
|
152
|
+
where: 'categorySortedByDone',
|
|
153
|
+
match: {
|
|
154
|
+
category: 'general',
|
|
155
|
+
},
|
|
156
|
+
order: 'asc',
|
|
157
|
+
},
|
|
158
|
+
limit: 2,
|
|
159
|
+
});
|
|
160
|
+
const results = await query.resolved;
|
|
161
|
+
|
|
162
|
+
expect(results.map((i: any) => i.get('id'))).toEqual([
|
|
163
|
+
items[0].get('id'),
|
|
164
|
+
items[2].get('id'),
|
|
165
|
+
]);
|
|
166
|
+
});
|
|
167
|
+
|
|
126
168
|
it('can query starts-with on a string', async () => {
|
|
127
169
|
const storage = createTestStorage();
|
|
128
170
|
const items = await addTestingItems(storage);
|
package/src/client/Client.ts
CHANGED
|
@@ -101,10 +101,8 @@ export class Client<Presence = any, Profile = any> extends EventSubscriber<{
|
|
|
101
101
|
ctx: this.context,
|
|
102
102
|
files: this._fileManager,
|
|
103
103
|
});
|
|
104
|
-
// note:
|
|
105
|
-
//
|
|
106
|
-
// refresh.
|
|
107
|
-
// FIXME: make this less fragile
|
|
104
|
+
// note: historically querycache needed to be constructed after entities,
|
|
105
|
+
// not sure if this is still the case.
|
|
108
106
|
this._queryCache = new QueryCache({
|
|
109
107
|
context: this.context,
|
|
110
108
|
evictionTime: this.context.config.queries?.evictionTime,
|
|
@@ -142,6 +140,11 @@ export class Client<Presence = any, Profile = any> extends EventSubscriber<{
|
|
|
142
140
|
documentManager: this.documentManager,
|
|
143
141
|
});
|
|
144
142
|
}
|
|
143
|
+
|
|
144
|
+
if (typeof window !== 'undefined') {
|
|
145
|
+
(window as Window & { __VERDANT_CLIENT__?: Client }).__VERDANT_CLIENT__ =
|
|
146
|
+
this;
|
|
147
|
+
}
|
|
145
148
|
}
|
|
146
149
|
|
|
147
150
|
private importingPromise = Promise.resolve();
|
|
@@ -325,6 +328,14 @@ export class Client<Presence = any, Profile = any> extends EventSubscriber<{
|
|
|
325
328
|
this.context.persistenceShutdownHandler.shutdown();
|
|
326
329
|
this.context.internalEvents.disable();
|
|
327
330
|
this.context.entityEvents.disable();
|
|
331
|
+
if (typeof window !== 'undefined') {
|
|
332
|
+
const browserWindow = window as Window & {
|
|
333
|
+
__VERDANT_CLIENT__?: Client;
|
|
334
|
+
};
|
|
335
|
+
if (browserWindow.__VERDANT_CLIENT__ === this) {
|
|
336
|
+
delete browserWindow.__VERDANT_CLIENT__;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
328
339
|
|
|
329
340
|
// the idea here is to flush the microtask queue -
|
|
330
341
|
// we may have queued tasks related to queries that
|
package/src/entities/Entity.ts
CHANGED
|
@@ -103,6 +103,9 @@ export class Entity<
|
|
|
103
103
|
// provided from external creators, this is a method to delete
|
|
104
104
|
// this entity.
|
|
105
105
|
private _deleteSelf: () => void;
|
|
106
|
+
// set manually when deleting the entity, this silences pruning warnings
|
|
107
|
+
// for missing data while the deletion is being processed.
|
|
108
|
+
private _deleting = false;
|
|
106
109
|
|
|
107
110
|
constructor({
|
|
108
111
|
oid,
|
|
@@ -239,13 +242,15 @@ export class Entity<
|
|
|
239
242
|
for (let i = 0; i < rawView.length; i++) {
|
|
240
243
|
const child = this.get(i);
|
|
241
244
|
if (this.childIsNull(child) && !isNullable(schema)) {
|
|
242
|
-
this.
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
245
|
+
if (!this._deleting) {
|
|
246
|
+
this.ctx.log(
|
|
247
|
+
'error',
|
|
248
|
+
'Child missing in non-nullable field',
|
|
249
|
+
this.oid,
|
|
250
|
+
'index:',
|
|
251
|
+
i,
|
|
252
|
+
);
|
|
253
|
+
}
|
|
249
254
|
|
|
250
255
|
// this item will be pruned.
|
|
251
256
|
} else {
|
|
@@ -286,13 +291,15 @@ export class Entity<
|
|
|
286
291
|
}
|
|
287
292
|
const child = this.get(key as any);
|
|
288
293
|
if (this.childIsNull(child) && !isNullable(schema)) {
|
|
289
|
-
this.
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
294
|
+
if (!this._deleting) {
|
|
295
|
+
this.ctx.log(
|
|
296
|
+
'error',
|
|
297
|
+
'Child entity is missing for non-nullable field',
|
|
298
|
+
this.oid,
|
|
299
|
+
'key:',
|
|
300
|
+
key,
|
|
301
|
+
);
|
|
302
|
+
}
|
|
296
303
|
if (this.schema.type !== 'map') {
|
|
297
304
|
/**
|
|
298
305
|
* PRUNE - this is a prune point. we can't continue
|
|
@@ -334,14 +341,6 @@ export class Entity<
|
|
|
334
341
|
return this.viewData.deleted || this.view === null;
|
|
335
342
|
}
|
|
336
343
|
|
|
337
|
-
/**
|
|
338
|
-
* Doesn't compute view data; simply uses available cached
|
|
339
|
-
* view info to determine deletion status.
|
|
340
|
-
*/
|
|
341
|
-
private get quickDeleted() {
|
|
342
|
-
return this._viewData?.deleted || this.cachedView === null;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
344
|
get invalid() {
|
|
346
345
|
return !!this.validate();
|
|
347
346
|
}
|
|
@@ -603,6 +602,12 @@ export class Entity<
|
|
|
603
602
|
if (this.access) {
|
|
604
603
|
for (const op of operations) {
|
|
605
604
|
op.authz = this.access;
|
|
605
|
+
|
|
606
|
+
// if op is init, reset _deleting flag - this is not a functional flag, only
|
|
607
|
+
// hides some warnings. if we're here, we must be re-initializing and we can reset it.
|
|
608
|
+
if (op.data.op === 'initialize') {
|
|
609
|
+
this._deleting = false;
|
|
610
|
+
}
|
|
606
611
|
}
|
|
607
612
|
}
|
|
608
613
|
|
|
@@ -1397,6 +1402,10 @@ export class Entity<
|
|
|
1397
1402
|
this.metadataFamily.discardPendingOperation(operation);
|
|
1398
1403
|
this.invalidateCachedView();
|
|
1399
1404
|
};
|
|
1405
|
+
|
|
1406
|
+
__markDeleting__ = () => {
|
|
1407
|
+
this._deleting = true;
|
|
1408
|
+
};
|
|
1400
1409
|
}
|
|
1401
1410
|
|
|
1402
1411
|
function assertNotSymbol<T>(key: T): asserts key is Exclude<T, symbol> {
|
|
@@ -37,6 +37,10 @@ export class EntityMetadata {
|
|
|
37
37
|
// soon as the user makes modifications to the entity, this
|
|
38
38
|
// ephemeral pruned data is applied underneath it.
|
|
39
39
|
private ephemeralOperations?: Operation[] = [];
|
|
40
|
+
// pending operations are 'in flight' into persistence, but
|
|
41
|
+
// if you killed the power now they'd be lost. they don't have an
|
|
42
|
+
// officially applied timestamp yet either, so they are applied
|
|
43
|
+
// last, after all confirmed/ephemerals.
|
|
40
44
|
private pendingOperations: Operation[] = [];
|
|
41
45
|
readonly oid;
|
|
42
46
|
|
|
@@ -209,7 +213,6 @@ export class EntityMetadata {
|
|
|
209
213
|
this.confirmedOperations.push(op);
|
|
210
214
|
totalAdded++;
|
|
211
215
|
}
|
|
212
|
-
// FIXME: seems inefficient
|
|
213
216
|
// remove this incoming op from pending if it's in there
|
|
214
217
|
const pendingPrior = this.pendingOperations.length;
|
|
215
218
|
this.discardPendingOperation(op);
|
|
@@ -235,10 +238,19 @@ export class EntityMetadata {
|
|
|
235
238
|
return old;
|
|
236
239
|
};
|
|
237
240
|
|
|
241
|
+
// while this may not be the most efficient way to remove an operation,
|
|
242
|
+
// in practice the ops we discard are generally some of the first in
|
|
243
|
+
// the list, so the find is quick.
|
|
238
244
|
discardPendingOperation = (operation: Operation) => {
|
|
239
|
-
|
|
240
|
-
|
|
245
|
+
// only one op can match, so - avoiding filter() here,
|
|
246
|
+
// we want short circuiting.
|
|
247
|
+
const indexOfOperation = this.pendingOperations.findIndex(
|
|
248
|
+
(op) => op.timestamp === operation.timestamp,
|
|
241
249
|
);
|
|
250
|
+
if (indexOfOperation === -1) {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
this.pendingOperations.splice(indexOfOperation, 1);
|
|
242
254
|
};
|
|
243
255
|
|
|
244
256
|
private applyOperations = (
|
|
@@ -59,7 +59,7 @@ export class MessageCreator {
|
|
|
59
59
|
storeNames: ['operations', 'baselines'],
|
|
60
60
|
},
|
|
61
61
|
async (tx) => {
|
|
62
|
-
//
|
|
62
|
+
// TODO: this branch gives bad vibes. should we always
|
|
63
63
|
// send all operations from other replicas too? is there
|
|
64
64
|
// ever a case where we have a "since" timestamp and there
|
|
65
65
|
// are foreign ops that match it?
|
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
applyPatch,
|
|
3
3
|
assert,
|
|
4
4
|
assignOid,
|
|
5
|
+
decomposeOid,
|
|
5
6
|
DocumentBaseline,
|
|
6
7
|
getOidRoot,
|
|
7
8
|
ObjectIdentifier,
|
|
@@ -293,15 +294,31 @@ export class PersistenceMetadata {
|
|
|
293
294
|
);
|
|
294
295
|
};
|
|
295
296
|
|
|
297
|
+
// worst case of this is rather expensive but currently only used for migration
|
|
298
|
+
// and deletion. if usage is expanded, consider caching...
|
|
296
299
|
getDocumentAuthz = async (oid: ObjectIdentifier) => {
|
|
297
300
|
let authz;
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
301
|
+
|
|
302
|
+
// find the latest initialize op - this is most up to date authz.
|
|
303
|
+
await this.db.iterateEntityOperations(
|
|
304
|
+
oid,
|
|
305
|
+
(op) => {
|
|
306
|
+
if (op.data.op === 'initialize') {
|
|
307
|
+
authz = op.authz;
|
|
308
|
+
return true;
|
|
309
|
+
}
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
reverse: true,
|
|
313
|
+
},
|
|
314
|
+
);
|
|
315
|
+
|
|
316
|
+
// found initialize, this is the answer.
|
|
317
|
+
if (authz) return authz;
|
|
318
|
+
|
|
319
|
+
// all initialize ops may have been rebased, in which case we use the baseline.
|
|
320
|
+
const baseline = await this.db.getBaseline(oid);
|
|
321
|
+
return baseline?.authz;
|
|
305
322
|
};
|
|
306
323
|
|
|
307
324
|
insertData = async (
|
|
@@ -512,4 +529,47 @@ export class PersistenceMetadata {
|
|
|
512
529
|
this.updateLocalReplica({ ackedLogicalTime: timestamp });
|
|
513
530
|
}
|
|
514
531
|
};
|
|
532
|
+
|
|
533
|
+
// upkeep - not called automatically as of today
|
|
534
|
+
|
|
535
|
+
/**
|
|
536
|
+
* Removes all metadata entries related to collections which are no
|
|
537
|
+
* longer present in the schema.
|
|
538
|
+
*/
|
|
539
|
+
__unstable__purgeRemovedCollections = async () => {
|
|
540
|
+
const schema = this.ctx.schema;
|
|
541
|
+
const collectionsInSchema = new Set(Object.keys(schema.collections));
|
|
542
|
+
const oidsToPurge = new Set<ObjectIdentifier>();
|
|
543
|
+
await this.db.iterateAllBaselines((baseline) => {
|
|
544
|
+
const { collection } = decomposeOid(baseline.oid);
|
|
545
|
+
if (!collectionsInSchema.has(collection)) {
|
|
546
|
+
this.ctx.log(
|
|
547
|
+
'debug',
|
|
548
|
+
`Deleting baseline for removed collection ${collection}`,
|
|
549
|
+
baseline.oid,
|
|
550
|
+
);
|
|
551
|
+
oidsToPurge.add(baseline.oid);
|
|
552
|
+
}
|
|
553
|
+
});
|
|
554
|
+
await this.db.iterateAllOperations((op) => {
|
|
555
|
+
const { collection } = decomposeOid(op.oid);
|
|
556
|
+
if (!collectionsInSchema.has(collection)) {
|
|
557
|
+
this.ctx.log(
|
|
558
|
+
'debug',
|
|
559
|
+
`Deleting operation for removed collection ${collection}`,
|
|
560
|
+
op.oid,
|
|
561
|
+
);
|
|
562
|
+
oidsToPurge.add(op.oid);
|
|
563
|
+
}
|
|
564
|
+
});
|
|
565
|
+
|
|
566
|
+
for (const oid of oidsToPurge) {
|
|
567
|
+
await this.db.purgeDocumentData(oid);
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
this.ctx.log(
|
|
571
|
+
'debug',
|
|
572
|
+
`Purged ${oidsToPurge.size} document metadata groups for removed collections`,
|
|
573
|
+
);
|
|
574
|
+
};
|
|
515
575
|
}
|
|
@@ -136,7 +136,7 @@ export class PersistenceRebaser {
|
|
|
136
136
|
await this.db.iterateEntityOperations(
|
|
137
137
|
oid,
|
|
138
138
|
(patch) => {
|
|
139
|
-
//
|
|
139
|
+
// seems like the wrong place to do this
|
|
140
140
|
// but it's here as a safety measure...
|
|
141
141
|
if (!baseline || patch.timestamp > baseline.timestamp) {
|
|
142
142
|
current = applyPatch(current, patch.data, deletedRefs);
|
|
@@ -18,7 +18,7 @@ export class IdbService extends Disposable {
|
|
|
18
18
|
super();
|
|
19
19
|
const abortController = new AbortController();
|
|
20
20
|
this.globalAbortController = abortController;
|
|
21
|
-
//
|
|
21
|
+
// TODO: replace with event? I can't get this to work. (Illegal invocation on abort?)
|
|
22
22
|
// this.addDispose(abort);
|
|
23
23
|
this.db.addEventListener('versionchange', this.onVersionChange);
|
|
24
24
|
this.addDispose(() => {
|
|
@@ -3,7 +3,6 @@ import {
|
|
|
3
3
|
createLowerBoundIndexValue,
|
|
4
4
|
createUpperBoundIndexValue,
|
|
5
5
|
DocumentBaseline,
|
|
6
|
-
getLegacyDotOidSubIdRange,
|
|
7
6
|
getOidRoot,
|
|
8
7
|
getOidSubIdRange,
|
|
9
8
|
ObjectIdentifier,
|
|
@@ -19,13 +18,14 @@ import {
|
|
|
19
18
|
PersistenceMetadataDb,
|
|
20
19
|
} from '../../interfaces.js';
|
|
21
20
|
import { IdbService } from '../IdbService.js';
|
|
21
|
+
import { OPERATION_INDEX_NAMES } from '../indexNames.js';
|
|
22
22
|
import { closeDatabase, getSizeOfObjectStore } from '../util.js';
|
|
23
23
|
|
|
24
24
|
export type StoredClientOperation = ClientOperation & {
|
|
25
25
|
/** This acts as the primary key */
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
[OPERATION_INDEX_NAMES.OID__TIMESTAMP]: string;
|
|
27
|
+
[OPERATION_INDEX_NAMES.IS_LOCAL__TIMESTAMP]: string;
|
|
28
|
+
[OPERATION_INDEX_NAMES.ROOT_OID__TIMESTAMP]: string;
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
export type StoredSchema = {
|
|
@@ -123,12 +123,9 @@ export class IdbMetadataDb
|
|
|
123
123
|
(store) => {
|
|
124
124
|
const root = getOidRoot(rootOid);
|
|
125
125
|
const [start, end] = getOidSubIdRange(rootOid);
|
|
126
|
-
// FIXME: get rid of legacy dot OIDs...
|
|
127
|
-
const [dotStart, dotEnd] = getLegacyDotOidSubIdRange(rootOid);
|
|
128
126
|
return [
|
|
129
127
|
store.openCursor(IDBKeyRange.only(root)),
|
|
130
128
|
store.openCursor(IDBKeyRange.bound(start, end, false, false)),
|
|
131
|
-
store.openCursor(IDBKeyRange.bound(dotStart, dotEnd, false, false)),
|
|
132
129
|
];
|
|
133
130
|
},
|
|
134
131
|
iterator,
|
|
@@ -204,7 +201,7 @@ export class IdbMetadataDb
|
|
|
204
201
|
return this.iterate<StoredClientOperation>(
|
|
205
202
|
'operations',
|
|
206
203
|
(store) => {
|
|
207
|
-
const index = store.index(
|
|
204
|
+
const index = store.index(OPERATION_INDEX_NAMES.ROOT_OID__TIMESTAMP);
|
|
208
205
|
const start = createLowerBoundIndexValue(rootOid);
|
|
209
206
|
const end = opts?.to
|
|
210
207
|
? createCompoundIndexValue(rootOid, opts.to)
|
|
@@ -221,7 +218,7 @@ export class IdbMetadataDb
|
|
|
221
218
|
iterateEntityOperations = (
|
|
222
219
|
oid: string,
|
|
223
220
|
iterator: (op: StoredClientOperation) => void,
|
|
224
|
-
opts?: CommonQueryOptions & { to?: string | null },
|
|
221
|
+
opts?: CommonQueryOptions & { to?: string | null; reverse?: boolean },
|
|
225
222
|
): Promise<void> => {
|
|
226
223
|
// NOTE: this is simplified from original impl.
|
|
227
224
|
// perhaps I missed some nuance as to why it was
|
|
@@ -236,7 +233,7 @@ export class IdbMetadataDb
|
|
|
236
233
|
: createUpperBoundIndexValue(oid);
|
|
237
234
|
|
|
238
235
|
const range = IDBKeyRange.bound(start, end, false, false);
|
|
239
|
-
return store.openCursor(range);
|
|
236
|
+
return store.openCursor(range, opts?.reverse ? 'prev' : 'next');
|
|
240
237
|
},
|
|
241
238
|
iterator,
|
|
242
239
|
opts,
|
|
@@ -296,7 +293,7 @@ export class IdbMetadataDb
|
|
|
296
293
|
? createCompoundIndexValue(true, opts.after)
|
|
297
294
|
: createLowerBoundIndexValue(true);
|
|
298
295
|
const end = createUpperBoundIndexValue(true);
|
|
299
|
-
const index = store.index(
|
|
296
|
+
const index = store.index(OPERATION_INDEX_NAMES.IS_LOCAL__TIMESTAMP);
|
|
300
297
|
return index.openCursor(
|
|
301
298
|
// NOTE: differs from original impl -- last arg is 'false' instead of 'true'
|
|
302
299
|
IDBKeyRange.bound(start, end, !!opts?.after, false),
|
|
@@ -425,11 +422,71 @@ export class IdbMetadataDb
|
|
|
425
422
|
): StoredClientOperation => {
|
|
426
423
|
return {
|
|
427
424
|
...op,
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
425
|
+
[OPERATION_INDEX_NAMES.OID__TIMESTAMP]: createCompoundIndexValue(
|
|
426
|
+
op.oid,
|
|
427
|
+
op.timestamp,
|
|
428
|
+
) as string,
|
|
429
|
+
[OPERATION_INDEX_NAMES.IS_LOCAL__TIMESTAMP]: createCompoundIndexValue(
|
|
430
|
+
op.isLocal,
|
|
431
|
+
op.timestamp,
|
|
432
|
+
) as string,
|
|
433
|
+
[OPERATION_INDEX_NAMES.ROOT_OID__TIMESTAMP]: createCompoundIndexValue(
|
|
434
|
+
getOidRoot(op.oid),
|
|
435
|
+
op.timestamp,
|
|
436
|
+
) as string,
|
|
431
437
|
};
|
|
432
438
|
};
|
|
439
|
+
|
|
440
|
+
purgeDocumentData(
|
|
441
|
+
oid: ObjectIdentifier,
|
|
442
|
+
opts?: CommonQueryOptions<IDBTransaction> | undefined,
|
|
443
|
+
): Promise<void> {
|
|
444
|
+
const rootOid = getOidRoot(oid);
|
|
445
|
+
const tx = opts?.transaction as IDBTransaction | undefined;
|
|
446
|
+
|
|
447
|
+
return this.transaction(
|
|
448
|
+
{
|
|
449
|
+
mode: 'readwrite',
|
|
450
|
+
storeNames: ['baselines', 'operations'],
|
|
451
|
+
},
|
|
452
|
+
async (ownedTx) => {
|
|
453
|
+
const transaction = tx ?? ownedTx;
|
|
454
|
+
|
|
455
|
+
await this.iterate<DocumentBaseline>(
|
|
456
|
+
'baselines',
|
|
457
|
+
(store) => {
|
|
458
|
+
const [start, end] = getOidSubIdRange(rootOid);
|
|
459
|
+
return [
|
|
460
|
+
store.openCursor(IDBKeyRange.only(rootOid)),
|
|
461
|
+
store.openCursor(IDBKeyRange.bound(start, end, false, false)),
|
|
462
|
+
];
|
|
463
|
+
},
|
|
464
|
+
(baseline, store) => {
|
|
465
|
+
store.delete(baseline.oid);
|
|
466
|
+
},
|
|
467
|
+
{ mode: 'readwrite', transaction },
|
|
468
|
+
);
|
|
469
|
+
|
|
470
|
+
await this.iterate<StoredClientOperation>(
|
|
471
|
+
'operations',
|
|
472
|
+
(store) => {
|
|
473
|
+
const index = store.index(
|
|
474
|
+
OPERATION_INDEX_NAMES.ROOT_OID__TIMESTAMP,
|
|
475
|
+
);
|
|
476
|
+
const start = createLowerBoundIndexValue(rootOid);
|
|
477
|
+
const end = createUpperBoundIndexValue(rootOid);
|
|
478
|
+
return index.openCursor(
|
|
479
|
+
IDBKeyRange.bound(start, end, false, false),
|
|
480
|
+
);
|
|
481
|
+
},
|
|
482
|
+
(op, store) => {
|
|
483
|
+
store.delete(op[OPERATION_INDEX_NAMES.OID__TIMESTAMP]);
|
|
484
|
+
},
|
|
485
|
+
{ mode: 'readwrite', transaction },
|
|
486
|
+
);
|
|
487
|
+
},
|
|
488
|
+
);
|
|
489
|
+
}
|
|
433
490
|
}
|
|
434
491
|
|
|
435
492
|
const writeOpts = { mode: 'readwrite' } as const;
|