@verdant-web/store 4.0.0 → 4.1.0-alpha.1
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/LICENSE +21 -650
- package/dist/bundle/index.js +11 -11
- package/dist/bundle/index.js.map +4 -4
- package/dist/esm/__tests__/fixtures/testStorage.d.ts +1 -2
- package/dist/esm/__tests__/fixtures/testStorage.js +3 -5
- package/dist/esm/__tests__/fixtures/testStorage.js.map +1 -1
- package/dist/esm/client/Client.d.ts +6 -2
- package/dist/esm/client/Client.js +18 -6
- package/dist/esm/client/Client.js.map +1 -1
- package/dist/esm/client/ClientDescriptor.d.ts +7 -5
- package/dist/esm/client/ClientDescriptor.js +18 -4
- package/dist/esm/client/ClientDescriptor.js.map +1 -1
- package/dist/esm/context/ShutdownHandler.d.ts +8 -0
- package/dist/esm/context/ShutdownHandler.js +24 -0
- package/dist/esm/context/ShutdownHandler.js.map +1 -0
- package/dist/esm/context/context.d.ts +15 -4
- package/dist/esm/entities/EntityStore.js +6 -3
- package/dist/esm/entities/EntityStore.js.map +1 -1
- package/dist/esm/files/EntityFile.d.ts +1 -0
- package/dist/esm/files/EntityFile.js +16 -11
- package/dist/esm/files/EntityFile.js.map +1 -1
- package/dist/esm/files/FileManager.d.ts +1 -3
- package/dist/esm/files/FileManager.js +12 -10
- package/dist/esm/files/FileManager.js.map +1 -1
- package/dist/esm/index.d.ts +4 -5
- package/dist/esm/index.js +2 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal.d.ts +6 -0
- package/dist/esm/internal.js +5 -0
- package/dist/esm/internal.js.map +1 -0
- package/dist/esm/persistence/MessageCreator.d.ts +3 -1
- package/dist/esm/persistence/MessageCreator.js +58 -55
- package/dist/esm/persistence/MessageCreator.js.map +1 -1
- package/dist/esm/persistence/PersistenceFiles.d.ts +8 -21
- package/dist/esm/persistence/PersistenceFiles.js +44 -30
- package/dist/esm/persistence/PersistenceFiles.js.map +1 -1
- package/dist/esm/persistence/PersistenceMetadata.d.ts +12 -11
- package/dist/esm/persistence/PersistenceMetadata.js +201 -137
- package/dist/esm/persistence/PersistenceMetadata.js.map +1 -1
- package/dist/esm/persistence/PersistenceQueries.d.ts +10 -11
- package/dist/esm/persistence/PersistenceQueries.js +33 -5
- package/dist/esm/persistence/PersistenceQueries.js.map +1 -1
- package/dist/esm/persistence/PersistenceRebaser.d.ts +5 -9
- package/dist/esm/persistence/PersistenceRebaser.js +63 -47
- package/dist/esm/persistence/PersistenceRebaser.js.map +1 -1
- package/dist/esm/persistence/idb/IdbService.d.ts +0 -1
- package/dist/esm/persistence/idb/IdbService.js +28 -16
- package/dist/esm/persistence/idb/IdbService.js.map +1 -1
- package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.d.ts +11 -31
- package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.js +31 -36
- package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.js.map +1 -1
- package/dist/esm/persistence/idb/idbPersistence.d.ts +17 -9
- package/dist/esm/persistence/idb/idbPersistence.js +80 -39
- package/dist/esm/persistence/idb/idbPersistence.js.map +1 -1
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.d.ts +7 -10
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js +45 -71
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js.map +1 -1
- package/dist/esm/persistence/idb/metadata/openMetadataDatabase.d.ts +1 -12
- package/dist/esm/persistence/idb/metadata/openMetadataDatabase.js +3 -56
- package/dist/esm/persistence/idb/metadata/openMetadataDatabase.js.map +1 -1
- package/dist/esm/persistence/idb/queries/{IdbQueryDb.d.ts → IdbDocumentDb.d.ts} +7 -13
- package/dist/esm/persistence/idb/queries/{IdbQueryDb.js → IdbDocumentDb.js} +15 -32
- package/dist/esm/persistence/idb/queries/IdbDocumentDb.js.map +1 -0
- package/dist/esm/persistence/idb/queries/migration/db.d.ts +3 -5
- package/dist/esm/persistence/idb/queries/migration/db.js +13 -28
- package/dist/esm/persistence/idb/queries/migration/db.js.map +1 -1
- package/dist/esm/persistence/idb/util.d.ts +8 -4
- package/dist/esm/persistence/idb/util.js +64 -21
- package/dist/esm/persistence/idb/util.js.map +1 -1
- package/dist/esm/persistence/interfaces.d.ts +68 -75
- package/dist/esm/persistence/{idb/queries/migration → migration}/engine.d.ts +4 -7
- package/dist/esm/persistence/{idb/queries/migration → migration}/engine.js +18 -10
- package/dist/esm/persistence/migration/engine.js.map +1 -0
- package/dist/esm/persistence/migration/finalize.d.ts +9 -0
- package/dist/esm/persistence/migration/finalize.js +75 -0
- package/dist/esm/persistence/migration/finalize.js.map +1 -0
- package/dist/esm/persistence/migration/migrate.d.ts +12 -0
- package/dist/esm/persistence/migration/migrate.js +89 -0
- package/dist/esm/persistence/migration/migrate.js.map +1 -0
- package/dist/esm/persistence/migration/paths.js.map +1 -0
- package/dist/esm/persistence/migration/paths.test.js.map +1 -0
- package/dist/esm/persistence/migration/types.d.ts +3 -0
- package/dist/esm/persistence/migration/types.js.map +1 -0
- package/dist/esm/persistence/persistence.js +25 -15
- package/dist/esm/persistence/persistence.js.map +1 -1
- package/dist/esm/queries/FindAllQuery.js +1 -1
- package/dist/esm/queries/FindAllQuery.js.map +1 -1
- package/dist/esm/queries/FindInfiniteQuery.js +2 -2
- package/dist/esm/queries/FindInfiniteQuery.js.map +1 -1
- package/dist/esm/queries/FindOneQuery.js +1 -1
- package/dist/esm/queries/FindOneQuery.js.map +1 -1
- package/dist/esm/queries/FindPageQuery.js +1 -1
- package/dist/esm/queries/FindPageQuery.js.map +1 -1
- package/dist/esm/sync/FileSync.js +3 -3
- package/dist/esm/sync/FileSync.js.map +1 -1
- package/dist/esm/sync/PushPullSync.d.ts +2 -3
- package/dist/esm/sync/PushPullSync.js +4 -2
- package/dist/esm/sync/PushPullSync.js.map +1 -1
- package/dist/esm/sync/ServerSyncEndpointProvider.d.ts +3 -7
- package/dist/esm/sync/ServerSyncEndpointProvider.js +3 -2
- package/dist/esm/sync/ServerSyncEndpointProvider.js.map +1 -1
- package/dist/esm/sync/Sync.d.ts +6 -1
- package/dist/esm/sync/Sync.js +12 -4
- package/dist/esm/sync/Sync.js.map +1 -1
- package/dist/esm/sync/WebSocketSync.js +10 -4
- package/dist/esm/sync/WebSocketSync.js.map +1 -1
- package/dist/esm/utils/wip.js +1 -1
- package/package.json +6 -2
- package/src/__tests__/fixtures/testStorage.ts +6 -6
- package/src/client/Client.ts +26 -8
- package/src/client/ClientDescriptor.ts +27 -9
- package/src/context/ShutdownHandler.ts +26 -0
- package/src/context/context.ts +16 -4
- package/src/entities/EntityStore.ts +9 -3
- package/src/files/EntityFile.ts +11 -6
- package/src/files/FileManager.ts +13 -10
- package/src/index.ts +8 -9
- package/src/internal.ts +27 -0
- package/src/persistence/MessageCreator.ts +79 -73
- package/src/persistence/PersistenceFiles.ts +57 -31
- package/src/persistence/PersistenceMetadata.ts +287 -195
- package/src/persistence/PersistenceQueries.ts +45 -9
- package/src/persistence/PersistenceRebaser.ts +105 -70
- package/src/persistence/idb/IdbService.ts +40 -22
- package/src/persistence/idb/files/IdbPersistenceFileDb.ts +30 -62
- package/src/persistence/idb/idbPersistence.ts +123 -47
- package/src/persistence/idb/metadata/IdbMetadataDb.ts +75 -97
- package/src/persistence/idb/metadata/openMetadataDatabase.ts +2 -96
- package/src/persistence/idb/queries/{IdbQueryDb.ts → IdbDocumentDb.ts} +17 -57
- package/src/persistence/idb/queries/migration/db.ts +20 -39
- package/src/persistence/idb/util.ts +84 -21
- package/src/persistence/interfaces.ts +89 -90
- package/src/persistence/{idb/queries/migration → migration}/engine.ts +30 -15
- package/src/persistence/migration/finalize.ts +126 -0
- package/src/persistence/migration/migrate.ts +169 -0
- package/src/persistence/migration/types.ts +4 -0
- package/src/persistence/persistence.ts +37 -14
- package/src/queries/FindAllQuery.ts +1 -1
- package/src/queries/FindInfiniteQuery.ts +2 -2
- package/src/queries/FindOneQuery.ts +1 -1
- package/src/queries/FindPageQuery.ts +1 -1
- package/src/sync/FileSync.ts +21 -15
- package/src/sync/PushPullSync.ts +3 -4
- package/src/sync/ServerSyncEndpointProvider.ts +6 -8
- package/src/sync/Sync.ts +20 -7
- package/src/sync/WebSocketSync.ts +10 -4
- package/src/utils/wip.ts +1 -1
- package/dist/esm/client/constants.d.ts +0 -1
- package/dist/esm/client/constants.js +0 -2
- package/dist/esm/client/constants.js.map +0 -1
- package/dist/esm/persistence/idb/queries/IdbQueryDb.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/engine.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/migrations.d.ts +0 -15
- package/dist/esm/persistence/idb/queries/migration/migrations.js +0 -243
- package/dist/esm/persistence/idb/queries/migration/migrations.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/openQueryDatabase.d.ts +0 -8
- package/dist/esm/persistence/idb/queries/migration/openQueryDatabase.js +0 -24
- package/dist/esm/persistence/idb/queries/migration/openQueryDatabase.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/paths.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/paths.test.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/types.d.ts +0 -6
- package/dist/esm/persistence/idb/queries/migration/types.js.map +0 -1
- package/src/client/constants.ts +0 -1
- package/src/persistence/idb/queries/migration/migrations.ts +0 -345
- package/src/persistence/idb/queries/migration/openQueryDatabase.ts +0 -54
- package/src/persistence/idb/queries/migration/types.ts +0 -8
- /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.d.ts +0 -0
- /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.js +0 -0
- /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.test.d.ts +0 -0
- /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.test.js +0 -0
- /package/dist/esm/persistence/{idb/queries/migration → migration}/types.js +0 -0
- /package/src/persistence/{idb/queries/migration → migration}/paths.test.ts +0 -0
- /package/src/persistence/{idb/queries/migration → migration}/paths.ts +0 -0
|
@@ -39,6 +39,8 @@ export class WebSocketSync extends EventSubscriber {
|
|
|
39
39
|
if (this.disposed) {
|
|
40
40
|
return;
|
|
41
41
|
}
|
|
42
|
+
if (this.ctx.closing)
|
|
43
|
+
return;
|
|
42
44
|
if (!online) {
|
|
43
45
|
this.hasStartedSync = false;
|
|
44
46
|
this.synced = false;
|
|
@@ -125,7 +127,10 @@ export class WebSocketSync extends EventSubscriber {
|
|
|
125
127
|
this.initializeSocket = async () => {
|
|
126
128
|
const endpoint = await this.endpointProvider.getEndpoints();
|
|
127
129
|
// abusing protocols to pass the auth token
|
|
128
|
-
this.socket = new WebSocket(endpoint.websocket, [
|
|
130
|
+
this.socket = new this.ctx.environment.WebSocket(endpoint.websocket, [
|
|
131
|
+
'Bearer',
|
|
132
|
+
endpoint.token,
|
|
133
|
+
]);
|
|
129
134
|
this.socket.addEventListener('message', this.onMessage);
|
|
130
135
|
this.socket.addEventListener('open', this.onOpen);
|
|
131
136
|
this.socket.addEventListener('error', this.onError);
|
|
@@ -155,7 +160,7 @@ export class WebSocketSync extends EventSubscriber {
|
|
|
155
160
|
return;
|
|
156
161
|
}
|
|
157
162
|
if (this.canSkipSyncWait(message)) {
|
|
158
|
-
if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) ===
|
|
163
|
+
if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WEBSOCKET_OPEN) {
|
|
159
164
|
this.ctx.log('debug', 'Sending message', JSON.stringify(message, null, 2));
|
|
160
165
|
this.socket.send(JSON.stringify(message));
|
|
161
166
|
}
|
|
@@ -165,7 +170,7 @@ export class WebSocketSync extends EventSubscriber {
|
|
|
165
170
|
}
|
|
166
171
|
}
|
|
167
172
|
else if (this.synced) {
|
|
168
|
-
if (((_b = this.socket) === null || _b === void 0 ? void 0 : _b.readyState) ===
|
|
173
|
+
if (((_b = this.socket) === null || _b === void 0 ? void 0 : _b.readyState) === WEBSOCKET_OPEN) {
|
|
169
174
|
this.ctx.log('debug', 'Sending message', JSON.stringify(message, null, 2));
|
|
170
175
|
this.socket.send(JSON.stringify(message));
|
|
171
176
|
}
|
|
@@ -209,10 +214,11 @@ export class WebSocketSync extends EventSubscriber {
|
|
|
209
214
|
}
|
|
210
215
|
get isConnected() {
|
|
211
216
|
var _a;
|
|
212
|
-
return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) ===
|
|
217
|
+
return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WEBSOCKET_OPEN;
|
|
213
218
|
}
|
|
214
219
|
get status() {
|
|
215
220
|
return this._status;
|
|
216
221
|
}
|
|
217
222
|
}
|
|
223
|
+
const WEBSOCKET_OPEN = 1;
|
|
218
224
|
//# sourceMappingURL=WebSocketSync.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketSync.js","sourceRoot":"","sources":["../../../src/sync/WebSocketSync.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,eAAe,GAEf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAM3C,MAAM,OAAO,aACZ,SAAQ,eAAoC;IA0B5C,YAAY,EACX,gBAAgB,EAChB,GAAG,EACH,QAAQ,GAKR;QACA,KAAK,EAAE,CAAC;QA/BD,WAAM,GAAqB,IAAI,CAAC;QACxC,iDAAiD;QACzC,iBAAY,GAAoB,EAAE,CAAC;QAC3C,0CAA0C;QAClC,cAAS,GAAoB,EAAE,CAAC;QACxC,sCAAsC;QAC9B,kBAAa,GAAoB,EAAE,CAAC;QAEpC,YAAO,GAAwB,QAAQ,CAAC;QACxC,WAAM,GAAG,KAAK,CAAC;QACf,mBAAc,GAAG,KAAK,CAAC;QACvB,oBAAe,GAAG,KAAK,CAAC;QAEvB,SAAI,GAAG,UAAU,CAAC;QAGnB,cAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QAE5B,uBAAkB,GAAG,IAAI,gBAAgB,CAChD,IAAI,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAC3B,CAAC;QAwBM,WAAM,GAAG,GAAG,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAClE,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACrC,IAAI,CAAC,GAAG,CAAC,GAAG,CACX,OAAO,EACP,wBAAwB,EACxB,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAC5B,CAAC;oBACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvC,CAAC;gBACD,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACxB,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YACxC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QACjC,CAAC,CAAC;QAEM,mBAAc,GAAG,KAAK,EAAE,MAAe,EAAE,EAAE;YAClD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,OAAO;YACR,CAAC;YACD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;gBACvC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,IAAI,CACR,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,oBAAoB,CACtD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAClB,CACD,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC;gBAChE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC;QAEM,cAAS,GAAG,KAAK,EAAE,KAAmB,EAAE,EAAE;YACjD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CACX,MAAM,EACN,sDAAsD,EACtD,KAAK,CAAC,IAAI,CACV,CAAC;gBACF,OAAO;YACR,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAkB,CAAC;YACxD,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;gBACtB,KAAK,WAAW;oBACf,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;wBAC1B,yDAAyD;wBACzD,IAAI,CAAC,IAAI,CACR,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAClE,CAAC;oBACH,CAAC;oBACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;oBAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;oBACnB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;wBAC3B,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;4BAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CACX,MAAM,EACN,0DAA0D,CAC1D,CAAC;4BACF,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;wBACrB,CAAC;6BAAM,CAAC;4BACP,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gCAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BAChB,CAAC;4BACD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;wBACrB,CAAC;oBACF,CAAC;oBACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBAC9B,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;wBAC/B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;4BACtC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;wBAC3B,CAAC;wBACD,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;oBACzB,CAAC;oBACD,MAAM;gBACP,KAAK,YAAY,CAAC;gBAClB,KAAK,kBAAkB,CAAC;gBACxB,KAAK,kBAAkB;oBACtB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBAC9B,MAAM;gBACP,KAAK,OAAO;oBACX,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;wBAClB,IAAI,CAAC,GAAG,CAAC,GAAG,CACX,OAAO,EACP,2DAA2D,EAC3D,OAAO,CACP,CAAC;wBACF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBACjC,MAAM;oBACP,CAAC;oBACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBAC9B,MAAM;gBACP,KAAK,oBAAoB;oBACxB,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;oBAC3B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBAC9B,MAAM;gBACP;oBACC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBAC/B,CAAC;oBACD,MAAM;YACR,CAAC;QACF,CAAC,CAAC;QAEM,YAAO,GAAG,CAAC,KAAY,EAAE,EAAE;YAClC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC7B,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;YAE/B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,wCAAwC,CAAC,CAAC;QAChE,CAAC,CAAC;QAEM,YAAO,GAAG,CAAC,KAAiB,EAAE,EAAE;YACvC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;YAC1C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC;QAEM,qBAAgB,GAAG,KAAK,IAAI,EAAE;YACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;YAC5D,2CAA2C;YAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"WebSocketSync.js","sourceRoot":"","sources":["../../../src/sync/WebSocketSync.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/utils/wip.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verdant-web/store",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.1.0-alpha.1",
|
|
4
4
|
"access": "public",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
"./serviceWorker": {
|
|
16
16
|
"import": "./dist/esm/sync/serviceWorker.js",
|
|
17
17
|
"types": "./dist/esm/sync/serviceWorker.d.ts"
|
|
18
|
+
},
|
|
19
|
+
"./internal": {
|
|
20
|
+
"import": "./dist/esm/internal.js",
|
|
21
|
+
"types": "./dist/esm/internal.d.ts"
|
|
18
22
|
}
|
|
19
23
|
},
|
|
20
24
|
"publishConfig": {
|
|
@@ -31,7 +35,7 @@
|
|
|
31
35
|
"jwt-decode": "^3.1.2",
|
|
32
36
|
"kysely": "^0.27.3",
|
|
33
37
|
"weak-event": "^2.0.5",
|
|
34
|
-
"@verdant-web/common": "2.
|
|
38
|
+
"@verdant-web/common": "2.7.0-alpha.0"
|
|
35
39
|
},
|
|
36
40
|
"devDependencies": {
|
|
37
41
|
"@types/node": "20.10.5",
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { createMigration, schema } from '@verdant-web/common';
|
|
2
2
|
// @ts-ignore
|
|
3
3
|
import { IDBFactory } from 'fake-indexeddb';
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import {
|
|
5
|
+
ClientWithCollections,
|
|
6
|
+
ClientDescriptor,
|
|
7
|
+
IdbPersistence,
|
|
8
|
+
} from '../../index.js';
|
|
6
9
|
|
|
7
10
|
export const todoCollection = schema.collection({
|
|
8
11
|
name: 'todo',
|
|
@@ -94,23 +97,20 @@ const testSchema = schema({
|
|
|
94
97
|
export function createTestStorage({
|
|
95
98
|
idb = new IDBFactory(),
|
|
96
99
|
disableRebasing = false,
|
|
97
|
-
metadataVersion,
|
|
98
100
|
log,
|
|
99
101
|
}: {
|
|
100
102
|
idb?: IDBFactory;
|
|
101
103
|
disableRebasing?: boolean;
|
|
102
|
-
metadataVersion?: number;
|
|
103
104
|
log?: (...args: any[]) => void;
|
|
104
105
|
} = {}) {
|
|
105
106
|
const storage = new ClientDescriptor({
|
|
106
107
|
schema: testSchema,
|
|
107
108
|
migrations: [createMigration<{}>(testSchema)],
|
|
108
|
-
indexedDb: idb,
|
|
109
109
|
namespace: 'test',
|
|
110
110
|
disableRebasing,
|
|
111
111
|
oldSchemas: [testSchema],
|
|
112
112
|
log,
|
|
113
|
-
|
|
113
|
+
persistence: new IdbPersistence(idb),
|
|
114
114
|
}).open();
|
|
115
115
|
return storage as Promise<ClientWithCollections>;
|
|
116
116
|
}
|
package/src/client/Client.ts
CHANGED
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
debounce,
|
|
3
3
|
DocumentBaseline,
|
|
4
4
|
EventSubscriber,
|
|
5
|
+
FileData,
|
|
5
6
|
Operation,
|
|
6
7
|
} from '@verdant-web/common';
|
|
7
8
|
import { Context } from '../context/context.js';
|
|
@@ -56,6 +57,10 @@ export class Client<Presence = any, Profile = any> extends EventSubscriber<{
|
|
|
56
57
|
* or stored data, but is useful for debugging and testing.
|
|
57
58
|
*/
|
|
58
59
|
rebase: () => void;
|
|
60
|
+
/**
|
|
61
|
+
* Emitted when a file is stored locally. Used for test coordination right now.
|
|
62
|
+
*/
|
|
63
|
+
fileSaved: (fileData: FileData) => void;
|
|
59
64
|
}> {
|
|
60
65
|
private _entities: EntityStore;
|
|
61
66
|
private _queryCache: QueryCache;
|
|
@@ -125,6 +130,9 @@ export class Client<Presence = any, Profile = any> extends EventSubscriber<{
|
|
|
125
130
|
this.context.globalEvents.subscribe('rebase', () => {
|
|
126
131
|
this.emit('rebase');
|
|
127
132
|
});
|
|
133
|
+
this.context.globalEvents.subscribe('fileSaved', (file) => {
|
|
134
|
+
this.emit('fileSaved', file);
|
|
135
|
+
});
|
|
128
136
|
|
|
129
137
|
// self-assign collection shortcuts. these are not typed
|
|
130
138
|
// here but are typed in the generated code...
|
|
@@ -236,7 +244,7 @@ export class Client<Presence = any, Profile = any> extends EventSubscriber<{
|
|
|
236
244
|
if (this.disposed) {
|
|
237
245
|
return {} as any;
|
|
238
246
|
}
|
|
239
|
-
const collections = await this.context.
|
|
247
|
+
const collections = await this.context.documents.stats();
|
|
240
248
|
const meta = await this.context.meta.stats();
|
|
241
249
|
const storage =
|
|
242
250
|
typeof navigator !== 'undefined' &&
|
|
@@ -276,15 +284,16 @@ export class Client<Presence = any, Profile = any> extends EventSubscriber<{
|
|
|
276
284
|
// NOTE: this happens after flushing or else flushed data
|
|
277
285
|
// won't be written to storage or synced.
|
|
278
286
|
this.context.closing = true;
|
|
279
|
-
this.context.
|
|
287
|
+
if (this.context.closeLock) {
|
|
288
|
+
await this.context.closeLock;
|
|
289
|
+
}
|
|
280
290
|
this.sync.stop();
|
|
281
291
|
this.sync.destroy();
|
|
282
292
|
// this step does have the potential to flush
|
|
283
293
|
// changes to storage, so don't close metadata db yet
|
|
284
294
|
await this._entities.destroy();
|
|
285
295
|
|
|
286
|
-
this.context.
|
|
287
|
-
this.context.meta.dispose();
|
|
296
|
+
this.context.persistenceShutdownHandler.shutdown();
|
|
288
297
|
|
|
289
298
|
// the idea here is to flush the microtask queue -
|
|
290
299
|
// we may have queued tasks related to queries that
|
|
@@ -309,8 +318,9 @@ export class Client<Presence = any, Profile = any> extends EventSubscriber<{
|
|
|
309
318
|
): Promise<ExportedData> => {
|
|
310
319
|
this.context.log('info', 'Exporting data...');
|
|
311
320
|
const metaExport = await this.context.meta.export();
|
|
312
|
-
const { fileData, files } =
|
|
313
|
-
|
|
321
|
+
const { fileData, files } = await this.context.files.export(
|
|
322
|
+
downloadRemoteFiles,
|
|
323
|
+
);
|
|
314
324
|
return {
|
|
315
325
|
data: metaExport,
|
|
316
326
|
fileData,
|
|
@@ -387,7 +397,15 @@ export class Client<Presence = any, Profile = any> extends EventSubscriber<{
|
|
|
387
397
|
* rebasing rules. Rebases already happen automatically
|
|
388
398
|
* during normal operation, so you probably don't need this.
|
|
389
399
|
*/
|
|
390
|
-
__manualRebase = () =>
|
|
400
|
+
__manualRebase = () => {
|
|
401
|
+
this.context.meta.manualRebase();
|
|
402
|
+
return new Promise<void>((resolve) => {
|
|
403
|
+
const unsub = this.subscribe('rebase', () => {
|
|
404
|
+
unsub();
|
|
405
|
+
resolve();
|
|
406
|
+
});
|
|
407
|
+
});
|
|
408
|
+
};
|
|
391
409
|
|
|
392
410
|
/**
|
|
393
411
|
* WARNING: the internal functions of the persistence layer
|
|
@@ -397,7 +415,7 @@ export class Client<Presence = any, Profile = any> extends EventSubscriber<{
|
|
|
397
415
|
get __persistence() {
|
|
398
416
|
return {
|
|
399
417
|
meta: this.context.meta,
|
|
400
|
-
queries: this.context.
|
|
418
|
+
queries: this.context.documents,
|
|
401
419
|
files: this.context.files,
|
|
402
420
|
};
|
|
403
421
|
}
|
|
@@ -12,11 +12,11 @@ import { UndoHistory } from '../UndoHistory.js';
|
|
|
12
12
|
import { Client } from './Client.js';
|
|
13
13
|
import { deleteAllDatabases } from '../persistence/idb/util.js';
|
|
14
14
|
import { FakeWeakRef } from '../FakeWeakRef.js';
|
|
15
|
-
import { METADATA_VERSION_KEY } from './constants.js';
|
|
16
15
|
import { Time } from '../context/Time.js';
|
|
17
16
|
import { initializePersistence } from '../persistence/persistence.js';
|
|
18
17
|
import { PersistenceImplementation } from '../persistence/interfaces.js';
|
|
19
18
|
import { IdbPersistence } from '../persistence/idb/idbPersistence.js';
|
|
19
|
+
import { ShutdownHandler } from '../context/ShutdownHandler.js';
|
|
20
20
|
|
|
21
21
|
export interface ClientDescriptorOptions<Presence = any, Profile = any> {
|
|
22
22
|
/** The schema used to create this client */
|
|
@@ -26,8 +26,6 @@ export interface ClientDescriptorOptions<Presence = any, Profile = any> {
|
|
|
26
26
|
migrations: Migration<any>[];
|
|
27
27
|
/** Provide a sync config to turn on synchronization with a server */
|
|
28
28
|
sync?: ServerSyncOptions<Profile, Presence>;
|
|
29
|
-
/** Optionally override the IndexedDB implementation */
|
|
30
|
-
indexedDb?: IDBFactory;
|
|
31
29
|
/**
|
|
32
30
|
* Namespaces are used to separate data from different clients in IndexedDB.
|
|
33
31
|
*/
|
|
@@ -63,6 +61,13 @@ export interface ClientDescriptorOptions<Presence = any, Profile = any> {
|
|
|
63
61
|
*/
|
|
64
62
|
persistence?: PersistenceImplementation;
|
|
65
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Specify the environment dependencies needed for the client.
|
|
66
|
+
* Normally these are provided by the browser, but in other
|
|
67
|
+
* runtimes you may need to provide your own.
|
|
68
|
+
*/
|
|
69
|
+
environment?: InitialContext['environment'];
|
|
70
|
+
|
|
66
71
|
/**
|
|
67
72
|
* Enables experimental WeakRef usage to cull documents
|
|
68
73
|
* from cache that aren't being used. This is a performance
|
|
@@ -71,9 +76,6 @@ export interface ClientDescriptorOptions<Presence = any, Profile = any> {
|
|
|
71
76
|
* before turning it on.
|
|
72
77
|
*/
|
|
73
78
|
EXPERIMENTAL_weakRefs?: boolean;
|
|
74
|
-
|
|
75
|
-
// not for public use
|
|
76
|
-
[METADATA_VERSION_KEY]?: number;
|
|
77
79
|
}
|
|
78
80
|
|
|
79
81
|
/**
|
|
@@ -112,9 +114,9 @@ export class ClientDescriptor<
|
|
|
112
114
|
private initialize = async (init: ClientDescriptorOptions) => {
|
|
113
115
|
// if server-side and no alternative IndexedDB implementation was provided,
|
|
114
116
|
// we can't initialize the storage
|
|
115
|
-
if (typeof window === 'undefined' && !init.
|
|
117
|
+
if (typeof window === 'undefined' && !init.environment) {
|
|
116
118
|
throw new Error(
|
|
117
|
-
'A Verdant client was initialized in an environment without
|
|
119
|
+
'A Verdant client was initialized in an environment without a global Window or `environment` configuration. If you are using verdant in a server-rendered framework, you must enforce that all clients are initialized on the client-side, or you must provide some mock interface of the environment to the ClientDescriptor options.',
|
|
118
120
|
);
|
|
119
121
|
}
|
|
120
122
|
|
|
@@ -127,6 +129,7 @@ export class ClientDescriptor<
|
|
|
127
129
|
new HybridLogicalClockTimestampProvider(),
|
|
128
130
|
init.schema.version,
|
|
129
131
|
);
|
|
132
|
+
const environment = init.environment || defaultBrowserEnvironment;
|
|
130
133
|
let ctx: InitialContext = {
|
|
131
134
|
closing: false,
|
|
132
135
|
entityEvents: new EventSubscriber(),
|
|
@@ -153,8 +156,17 @@ export class ClientDescriptor<
|
|
|
153
156
|
rebaseTimeout: init.rebaseTimeout,
|
|
154
157
|
},
|
|
155
158
|
},
|
|
156
|
-
persistence:
|
|
159
|
+
persistence:
|
|
160
|
+
init.persistence || new IdbPersistence(environment.indexedDB),
|
|
161
|
+
environment,
|
|
162
|
+
persistenceShutdownHandler: new ShutdownHandler(),
|
|
163
|
+
pauseRebasing: false,
|
|
157
164
|
};
|
|
165
|
+
ctx.log('info', 'Initializing client', {
|
|
166
|
+
namespace: ctx.namespace,
|
|
167
|
+
version: init.schema.version,
|
|
168
|
+
persistence: ctx.persistence.name,
|
|
169
|
+
});
|
|
158
170
|
const context = await initializePersistence(ctx);
|
|
159
171
|
const client = new Client(context) as ClientImpl;
|
|
160
172
|
this.resolveReady(client);
|
|
@@ -202,3 +214,9 @@ export class ClientDescriptor<
|
|
|
202
214
|
await deleteAllDatabases(this.namespace);
|
|
203
215
|
};
|
|
204
216
|
}
|
|
217
|
+
|
|
218
|
+
const defaultBrowserEnvironment = {
|
|
219
|
+
WebSocket: typeof WebSocket !== 'undefined' ? WebSocket : (undefined as any),
|
|
220
|
+
fetch: typeof window !== 'undefined' ? window.fetch.bind(window) : fetch!,
|
|
221
|
+
indexedDB: typeof indexedDB !== 'undefined' ? indexedDB : (undefined as any),
|
|
222
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export class ShutdownHandler {
|
|
2
|
+
private consumed = false;
|
|
3
|
+
private readonly handlers: (() => Promise<void>)[] = [];
|
|
4
|
+
|
|
5
|
+
register(handler: () => Promise<void>) {
|
|
6
|
+
this.handlers.push(handler);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
async shutdown() {
|
|
10
|
+
if (this.consumed) {
|
|
11
|
+
console.warn('ShutdownHandler already consumed');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
this.consumed = true;
|
|
15
|
+
await Promise.all(this.handlers.map((handler) => handler()));
|
|
16
|
+
this.handlers.length = 0;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
get isShuttingDown() {
|
|
20
|
+
return this.consumed;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
reset = () => {
|
|
24
|
+
this.consumed = false;
|
|
25
|
+
};
|
|
26
|
+
}
|
package/src/context/context.ts
CHANGED
|
@@ -11,13 +11,14 @@ import {
|
|
|
11
11
|
} from '@verdant-web/common';
|
|
12
12
|
import { UndoHistory } from '../UndoHistory.js';
|
|
13
13
|
import { Time } from './Time.js';
|
|
14
|
-
import type {
|
|
14
|
+
import type { PersistenceDocuments } from '../persistence/PersistenceQueries.js';
|
|
15
15
|
import type { PersistenceMetadata } from '../persistence/PersistenceMetadata.js';
|
|
16
16
|
import { PersistenceFiles } from '../persistence/PersistenceFiles.js';
|
|
17
17
|
import {
|
|
18
18
|
PersistedFileData,
|
|
19
19
|
PersistenceImplementation,
|
|
20
20
|
} from '../persistence/interfaces.js';
|
|
21
|
+
import { ShutdownHandler } from './ShutdownHandler.js';
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
24
|
* Common components utilized across various client
|
|
@@ -33,7 +34,7 @@ export interface Context {
|
|
|
33
34
|
time: Time;
|
|
34
35
|
|
|
35
36
|
meta: PersistenceMetadata;
|
|
36
|
-
|
|
37
|
+
documents: PersistenceDocuments;
|
|
37
38
|
files: PersistenceFiles;
|
|
38
39
|
|
|
39
40
|
undoHistory: UndoHistory;
|
|
@@ -55,7 +56,7 @@ export interface Context {
|
|
|
55
56
|
persistenceReset: () => void;
|
|
56
57
|
filesDeleted: (files: FileRef[]) => void;
|
|
57
58
|
fileAdded: (file: FileData) => void;
|
|
58
|
-
[ev: `fileUploaded:${string}`]: () => void;
|
|
59
|
+
[ev: `fileUploaded:${string}`]: (file: FileData) => void;
|
|
59
60
|
}>;
|
|
60
61
|
globalEvents: EventSubscriber<{
|
|
61
62
|
/**
|
|
@@ -83,11 +84,16 @@ export interface Context {
|
|
|
83
84
|
* or stored data, but is useful for debugging and testing.
|
|
84
85
|
*/
|
|
85
86
|
rebase: () => void;
|
|
87
|
+
fileSaved: (file: FileData) => void;
|
|
86
88
|
}>;
|
|
87
89
|
weakRef<T extends object>(value: T): WeakRef<T>;
|
|
88
90
|
migrations: Migration<any>[];
|
|
89
91
|
closing: boolean;
|
|
92
|
+
/** If this is present, any attempt to close the client should await it first. */
|
|
93
|
+
closeLock?: Promise<void>;
|
|
94
|
+
pauseRebasing: boolean;
|
|
90
95
|
patchCreator: PatchCreator;
|
|
96
|
+
persistenceShutdownHandler: ShutdownHandler;
|
|
91
97
|
|
|
92
98
|
config: {
|
|
93
99
|
files?: FileConfig;
|
|
@@ -95,6 +101,12 @@ export interface Context {
|
|
|
95
101
|
persistence?: PersistenceConfig;
|
|
96
102
|
};
|
|
97
103
|
|
|
104
|
+
environment: {
|
|
105
|
+
WebSocket: typeof WebSocket;
|
|
106
|
+
fetch: typeof fetch;
|
|
107
|
+
indexedDB: typeof indexedDB;
|
|
108
|
+
};
|
|
109
|
+
|
|
98
110
|
persistence: PersistenceImplementation;
|
|
99
111
|
}
|
|
100
112
|
|
|
@@ -197,4 +209,4 @@ export interface PersistenceConfig {
|
|
|
197
209
|
rebaseTimeout?: number;
|
|
198
210
|
}
|
|
199
211
|
|
|
200
|
-
export type InitialContext = Omit<Context, '
|
|
212
|
+
export type InitialContext = Omit<Context, 'documents' | 'meta' | 'files'>;
|
|
@@ -132,7 +132,7 @@ export class EntityStore extends Disposable {
|
|
|
132
132
|
};
|
|
133
133
|
|
|
134
134
|
empty = async () => {
|
|
135
|
-
await this.ctx.
|
|
135
|
+
await this.ctx.documents.reset();
|
|
136
136
|
this.events.resetAll.invoke(this);
|
|
137
137
|
this.cache.clear();
|
|
138
138
|
};
|
|
@@ -143,7 +143,7 @@ export class EntityStore extends Disposable {
|
|
|
143
143
|
return;
|
|
144
144
|
}
|
|
145
145
|
await this.ctx.meta.reset();
|
|
146
|
-
await this.ctx.
|
|
146
|
+
await this.ctx.documents.reset();
|
|
147
147
|
this.events.resetAll.invoke(this);
|
|
148
148
|
};
|
|
149
149
|
|
|
@@ -222,6 +222,10 @@ export class EntityStore extends Disposable {
|
|
|
222
222
|
// so that realtime is lower latency? What would happen
|
|
223
223
|
// if the storage failed?
|
|
224
224
|
await this.ctx.meta.insertData(data, abortOptions);
|
|
225
|
+
this.ctx.log(
|
|
226
|
+
'debug',
|
|
227
|
+
'Data processing complete, all data saved to metadata db.',
|
|
228
|
+
);
|
|
225
229
|
|
|
226
230
|
// recompute all affected documents for querying
|
|
227
231
|
const entities = await Promise.all(
|
|
@@ -240,7 +244,8 @@ export class EntityStore extends Disposable {
|
|
|
240
244
|
}),
|
|
241
245
|
);
|
|
242
246
|
try {
|
|
243
|
-
|
|
247
|
+
this.ctx.log('debug', 'Saving entities to queryable storage');
|
|
248
|
+
await this.ctx.documents.saveEntities(entities, abortOptions);
|
|
244
249
|
} catch (err) {
|
|
245
250
|
if (this.disposed) {
|
|
246
251
|
this.ctx.log(
|
|
@@ -439,6 +444,7 @@ export class EntityStore extends Disposable {
|
|
|
439
444
|
* Constructs an entity from an OID, but does not load it.
|
|
440
445
|
*/
|
|
441
446
|
private constructEntity = (oid: string): Entity | null => {
|
|
447
|
+
assert(!!oid, 'Cannot construct entity without OID');
|
|
442
448
|
const { collection } = decomposeOid(oid);
|
|
443
449
|
const { schema, readonlyKeys } = this.getCollectionSchema(collection);
|
|
444
450
|
|
package/src/files/EntityFile.ts
CHANGED
|
@@ -24,6 +24,7 @@ export class EntityFile extends EventSubscriber<EntityFileEvents> {
|
|
|
24
24
|
private _loading = true;
|
|
25
25
|
private _failed = false;
|
|
26
26
|
private _downloadRemote = false;
|
|
27
|
+
private _uploaded = false;
|
|
27
28
|
private ctx: Context;
|
|
28
29
|
private unsubscribes: (() => void)[] = [];
|
|
29
30
|
|
|
@@ -53,7 +54,7 @@ export class EntityFile extends EventSubscriber<EntityFileEvents> {
|
|
|
53
54
|
return true;
|
|
54
55
|
}
|
|
55
56
|
get isUploaded() {
|
|
56
|
-
return this._fileData?.remote
|
|
57
|
+
return this._uploaded || this._fileData?.remote || false;
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
[UPDATE] = (fileData: FileData) => {
|
|
@@ -62,7 +63,7 @@ export class EntityFile extends EventSubscriber<EntityFileEvents> {
|
|
|
62
63
|
this._failed = false;
|
|
63
64
|
this._fileData = fileData;
|
|
64
65
|
if (fileData.file) {
|
|
65
|
-
if (this._objectUrl) {
|
|
66
|
+
if (this._objectUrl && 'revokeObjectURL' in URL) {
|
|
66
67
|
URL.revokeObjectURL(this._objectUrl);
|
|
67
68
|
}
|
|
68
69
|
this.ctx.log('debug', 'Creating object URL for file', this.id);
|
|
@@ -77,15 +78,19 @@ export class EntityFile extends EventSubscriber<EntityFileEvents> {
|
|
|
77
78
|
this.emit('change');
|
|
78
79
|
};
|
|
79
80
|
|
|
80
|
-
private onUploaded = () => {
|
|
81
|
-
|
|
82
|
-
this._fileData
|
|
81
|
+
private onUploaded = (data: FileData) => {
|
|
82
|
+
// TODO: cleanup all this uploaded flagging junk
|
|
83
|
+
this._fileData ??= data;
|
|
84
|
+
this._uploaded = true;
|
|
85
|
+
this.ctx.log('debug', 'File marked uploaded', this.id, this._fileData);
|
|
83
86
|
this.emit('change');
|
|
84
87
|
};
|
|
85
88
|
|
|
86
89
|
get url(): string | null {
|
|
90
|
+
// prefer local file representations.
|
|
87
91
|
if (this.loading) return null;
|
|
88
92
|
if (this._objectUrl) return this._objectUrl;
|
|
93
|
+
// TODO: use localPath here?
|
|
89
94
|
return this._fileData?.url ?? null;
|
|
90
95
|
}
|
|
91
96
|
|
|
@@ -117,7 +122,7 @@ export class EntityFile extends EventSubscriber<EntityFileEvents> {
|
|
|
117
122
|
id: this.id,
|
|
118
123
|
url: this._objectUrl ?? this._fileData?.url ?? undefined,
|
|
119
124
|
name: this.name ?? 'unknown-file',
|
|
120
|
-
remote: false,
|
|
125
|
+
remote: this._fileData?.remote ?? false,
|
|
121
126
|
type: this.type ?? '',
|
|
122
127
|
file: this._fileData?.file,
|
|
123
128
|
};
|
package/src/files/FileManager.ts
CHANGED
|
@@ -14,17 +14,22 @@ export class FileManager {
|
|
|
14
14
|
this.context = context;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
add = async (file: FileData
|
|
17
|
+
add = async (file: FileData) => {
|
|
18
18
|
// immediately cache the file
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
entityFile
|
|
19
|
+
let entityFile = this.cache.get(file.id);
|
|
20
|
+
if (!entityFile) {
|
|
21
|
+
entityFile = new EntityFile(file.id, { ctx: this.context });
|
|
22
22
|
this.cache.set(file.id, entityFile);
|
|
23
|
-
} else {
|
|
24
|
-
this.cache.get(file.id);
|
|
25
23
|
}
|
|
26
24
|
|
|
27
|
-
|
|
25
|
+
if (!file.remote) {
|
|
26
|
+
// immediately update local files.
|
|
27
|
+
entityFile[UPDATE](file);
|
|
28
|
+
}
|
|
29
|
+
// this will download any original remote file and trigger a re-upload to the
|
|
30
|
+
// new file's identity, in addition to storing it on disk
|
|
31
|
+
const processedFile = await this.context.files.add(file);
|
|
32
|
+
entityFile[UPDATE](processedFile);
|
|
28
33
|
};
|
|
29
34
|
|
|
30
35
|
/**
|
|
@@ -68,9 +73,7 @@ export class FileManager {
|
|
|
68
73
|
const result = await this.sync.getFile(file.id);
|
|
69
74
|
if (result.success) {
|
|
70
75
|
file[UPDATE](result.data);
|
|
71
|
-
await this.context.files.add(result.data
|
|
72
|
-
downloadRemote: file.downloadRemote,
|
|
73
|
-
});
|
|
76
|
+
await this.context.files.add(result.data);
|
|
74
77
|
} else {
|
|
75
78
|
this.context.log('error', 'Failed to load file', result);
|
|
76
79
|
file[MARK_FAILED]();
|
package/src/index.ts
CHANGED
|
@@ -24,14 +24,7 @@ export type {
|
|
|
24
24
|
export { ServerSync } from './sync/Sync.js';
|
|
25
25
|
export type { SyncTransportMode } from './sync/Sync.js';
|
|
26
26
|
export { EntityFile, type EntityFileSnapshot } from './files/EntityFile.js';
|
|
27
|
-
export {
|
|
28
|
-
/** @deprecated - use schema.collection */
|
|
29
|
-
collection,
|
|
30
|
-
schema,
|
|
31
|
-
createDefaultMigration,
|
|
32
|
-
migrate,
|
|
33
|
-
createMigration,
|
|
34
|
-
} from '@verdant-web/common';
|
|
27
|
+
export { schema, createMigration } from '@verdant-web/common';
|
|
35
28
|
export type {
|
|
36
29
|
StorageDocument,
|
|
37
30
|
StorageSchema,
|
|
@@ -50,8 +43,12 @@ export type {
|
|
|
50
43
|
Migration,
|
|
51
44
|
VerdantError,
|
|
52
45
|
VerdantErrorCode,
|
|
46
|
+
ObjectIdentifier,
|
|
47
|
+
CollectionFilter,
|
|
48
|
+
FileData,
|
|
49
|
+
DocumentBaseline,
|
|
50
|
+
UserInfo,
|
|
53
51
|
} from '@verdant-web/common';
|
|
54
|
-
export type { UserInfo } from '@verdant-web/common';
|
|
55
52
|
export type { Query } from './queries/types.js';
|
|
56
53
|
export type { QueryStatus } from './queries/BaseQuery.js';
|
|
57
54
|
export type { CollectionQueries } from './queries/CollectionQueries.js';
|
|
@@ -59,3 +56,5 @@ export * from './utils/id.js';
|
|
|
59
56
|
export { UndoHistory } from './UndoHistory.js';
|
|
60
57
|
export * from './authorization.js';
|
|
61
58
|
export * from './sync/cliSync.js';
|
|
59
|
+
export type * from './persistence/interfaces.js';
|
|
60
|
+
export { IdbPersistence } from './persistence/idb/idbPersistence.js';
|
package/src/internal.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type { Context, InitialContext } from './context/context.js';
|
|
2
|
+
export {
|
|
3
|
+
decomposeOid,
|
|
4
|
+
createOid,
|
|
5
|
+
generateId,
|
|
6
|
+
isRangeIndexFilter,
|
|
7
|
+
isCompoundIndexFilter,
|
|
8
|
+
isDirectSynthetic,
|
|
9
|
+
isMatchIndexFilter,
|
|
10
|
+
isSortIndexFilter,
|
|
11
|
+
isStartsWithIndexFilter,
|
|
12
|
+
isMultiValueIndex,
|
|
13
|
+
assert,
|
|
14
|
+
createCompoundIndexValue,
|
|
15
|
+
createLowerBoundIndexValue,
|
|
16
|
+
createUpperBoundIndexValue,
|
|
17
|
+
getIndexValues,
|
|
18
|
+
} from '@verdant-web/common';
|
|
19
|
+
export type {
|
|
20
|
+
CollectionCompoundIndexFilter,
|
|
21
|
+
MatchCollectionIndexFilter,
|
|
22
|
+
RangeCollectionIndexFilter,
|
|
23
|
+
CollectionIndexFilter,
|
|
24
|
+
} from '@verdant-web/common';
|
|
25
|
+
export * from './persistence/migration/paths.js';
|
|
26
|
+
export * from './persistence/migration/types.js';
|
|
27
|
+
export { Disposable } from './utils/Disposable.js';
|