@verdant-web/store 2.8.4 → 3.0.0-next.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.
- package/dist/bundle/index.js +9 -10
- package/dist/bundle/index.js.map +4 -4
- package/dist/cjs/DocumentManager.d.ts +6 -5
- package/dist/cjs/DocumentManager.js +2 -2
- package/dist/cjs/DocumentManager.js.map +1 -1
- package/dist/cjs/IDBService.d.ts +28 -7
- package/dist/cjs/IDBService.js +50 -13
- package/dist/cjs/IDBService.js.map +1 -1
- package/dist/cjs/UndoHistory.d.ts +1 -1
- package/dist/cjs/UndoHistory.js +6 -2
- package/dist/cjs/UndoHistory.js.map +1 -1
- package/dist/cjs/__tests__/batching.test.js +3 -1
- package/dist/cjs/__tests__/batching.test.js.map +1 -1
- package/dist/cjs/__tests__/documents.test.js +54 -6
- package/dist/cjs/__tests__/documents.test.js.map +1 -1
- package/dist/cjs/__tests__/fixtures/testStorage.d.ts +8 -2
- package/dist/cjs/__tests__/fixtures/testStorage.js +8 -1
- package/dist/cjs/__tests__/fixtures/testStorage.js.map +1 -1
- package/dist/cjs/__tests__/legacyOids.test.js +50 -17
- package/dist/cjs/__tests__/legacyOids.test.js.map +1 -1
- package/dist/cjs/__tests__/mutations.test.js +9 -3
- package/dist/cjs/__tests__/mutations.test.js.map +1 -1
- package/dist/cjs/__tests__/queries.test.js +6 -2
- package/dist/cjs/__tests__/queries.test.js.map +1 -1
- package/dist/cjs/__tests__/setup/indexedDB.d.ts +1 -1
- package/dist/cjs/__tests__/setup/indexedDB.js +13 -1
- package/dist/cjs/__tests__/setup/indexedDB.js.map +1 -1
- package/dist/cjs/__tests__/undo.test.js +16 -9
- package/dist/cjs/__tests__/undo.test.js.map +1 -1
- package/dist/cjs/client/Client.d.ts +2 -3
- package/dist/cjs/client/Client.js +8 -4
- package/dist/cjs/client/Client.js.map +1 -1
- package/dist/cjs/client/ClientDescriptor.js +21 -6
- package/dist/cjs/client/ClientDescriptor.js.map +1 -1
- package/dist/cjs/context.d.ts +10 -1
- package/dist/cjs/entities/2/Entity.d.ts +148 -0
- package/dist/cjs/entities/2/Entity.js +711 -0
- package/dist/cjs/entities/2/Entity.js.map +1 -0
- package/dist/cjs/entities/2/Entity.test.d.ts +1 -0
- package/dist/cjs/entities/2/Entity.test.js +194 -0
- package/dist/cjs/entities/2/Entity.test.js.map +1 -0
- package/dist/cjs/entities/2/EntityCache.d.ts +15 -0
- package/dist/cjs/entities/2/EntityCache.js +39 -0
- package/dist/cjs/entities/2/EntityCache.js.map +1 -0
- package/dist/cjs/entities/2/EntityMetadata.d.ts +68 -0
- package/dist/cjs/entities/2/EntityMetadata.js +261 -0
- package/dist/cjs/entities/2/EntityMetadata.js.map +1 -0
- package/dist/cjs/entities/2/EntityStore.d.ts +78 -0
- package/dist/cjs/entities/2/EntityStore.js +352 -0
- package/dist/cjs/entities/2/EntityStore.js.map +1 -0
- package/dist/cjs/entities/2/OperationBatcher.d.ts +52 -0
- package/dist/cjs/entities/2/OperationBatcher.js +165 -0
- package/dist/cjs/entities/2/OperationBatcher.js.map +1 -0
- package/dist/cjs/entities/2/types.d.ts +84 -0
- package/dist/cjs/entities/2/types.js +3 -0
- package/dist/cjs/entities/2/types.js.map +1 -0
- package/dist/cjs/entities/Entity.d.ts +0 -7
- package/dist/cjs/entities/Entity.js +7 -0
- package/dist/cjs/entities/Entity.js.map +1 -1
- package/dist/cjs/entities/EntityStore.js +4 -20
- package/dist/cjs/entities/EntityStore.js.map +1 -1
- package/dist/cjs/entities/FakeWeakRef.d.ts +11 -0
- package/dist/cjs/entities/FakeWeakRef.js +19 -0
- package/dist/cjs/entities/FakeWeakRef.js.map +1 -0
- package/dist/cjs/files/EntityFile.d.ts +5 -2
- package/dist/cjs/files/EntityFile.js +8 -4
- package/dist/cjs/files/EntityFile.js.map +1 -1
- package/dist/cjs/files/FileManager.d.ts +3 -1
- package/dist/cjs/files/FileManager.js +5 -3
- package/dist/cjs/files/FileManager.js.map +1 -1
- package/dist/cjs/files/FileStorage.js +7 -7
- package/dist/cjs/files/FileStorage.js.map +1 -1
- package/dist/cjs/files/utils.d.ts +2 -0
- package/dist/cjs/files/utils.js +8 -2
- package/dist/cjs/files/utils.js.map +1 -1
- package/dist/cjs/idb.d.ts +2 -0
- package/dist/cjs/idb.js +50 -4
- package/dist/cjs/idb.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/indexes.d.ts +3 -0
- package/dist/cjs/indexes.js +20 -0
- package/dist/cjs/indexes.js.map +1 -0
- package/dist/cjs/metadata/AckInfoStore.js +1 -1
- package/dist/cjs/metadata/AckInfoStore.js.map +1 -1
- package/dist/cjs/metadata/BaselinesStore.d.ts +4 -1
- package/dist/cjs/metadata/BaselinesStore.js +19 -10
- package/dist/cjs/metadata/BaselinesStore.js.map +1 -1
- package/dist/cjs/metadata/LocalReplicaStore.d.ts +1 -1
- package/dist/cjs/metadata/LocalReplicaStore.js +11 -5
- package/dist/cjs/metadata/LocalReplicaStore.js.map +1 -1
- package/dist/cjs/metadata/Metadata.d.ts +26 -5
- package/dist/cjs/metadata/Metadata.js +55 -18
- package/dist/cjs/metadata/Metadata.js.map +1 -1
- package/dist/cjs/metadata/OperationsStore.d.ts +3 -0
- package/dist/cjs/metadata/OperationsStore.js +35 -15
- package/dist/cjs/metadata/OperationsStore.js.map +1 -1
- package/dist/cjs/migration/openDatabase.js +31 -10
- package/dist/cjs/migration/openDatabase.js.map +1 -1
- package/dist/cjs/queries/BaseQuery.js +14 -2
- package/dist/cjs/queries/BaseQuery.js.map +1 -1
- package/dist/cjs/queries/CollectionQueries.d.ts +2 -4
- package/dist/cjs/queries/CollectionQueries.js +1 -1
- package/dist/cjs/queries/CollectionQueries.js.map +1 -1
- package/dist/cjs/queries/FindAllQuery.js +1 -0
- package/dist/cjs/queries/FindAllQuery.js.map +1 -1
- package/dist/cjs/queries/QueryCache.d.ts +1 -0
- package/dist/cjs/queries/QueryCache.js +4 -0
- package/dist/cjs/queries/QueryCache.js.map +1 -1
- package/dist/cjs/queries/QueryableStorage.d.ts +20 -0
- package/dist/cjs/queries/QueryableStorage.js +84 -0
- package/dist/cjs/queries/QueryableStorage.js.map +1 -0
- package/dist/cjs/queries/dbQueries.js +13 -3
- package/dist/cjs/queries/dbQueries.js.map +1 -1
- package/dist/cjs/queries/utils.js +1 -1
- package/dist/cjs/queries/utils.js.map +1 -1
- package/dist/cjs/sync/FileSync.d.ts +1 -0
- package/dist/cjs/sync/FileSync.js +1 -0
- package/dist/cjs/sync/FileSync.js.map +1 -1
- package/dist/cjs/sync/PushPullSync.d.ts +2 -1
- package/dist/cjs/sync/PushPullSync.js +7 -1
- package/dist/cjs/sync/PushPullSync.js.map +1 -1
- package/dist/cjs/sync/Sync.d.ts +6 -3
- package/dist/cjs/sync/Sync.js +9 -4
- package/dist/cjs/sync/Sync.js.map +1 -1
- package/dist/cjs/sync/WebSocketSync.d.ts +4 -1
- package/dist/cjs/sync/WebSocketSync.js +41 -11
- package/dist/cjs/sync/WebSocketSync.js.map +1 -1
- package/dist/esm/DocumentManager.d.ts +6 -5
- package/dist/esm/DocumentManager.js +2 -2
- package/dist/esm/DocumentManager.js.map +1 -1
- package/dist/esm/IDBService.d.ts +28 -7
- package/dist/esm/IDBService.js +51 -14
- package/dist/esm/IDBService.js.map +1 -1
- package/dist/esm/UndoHistory.d.ts +1 -1
- package/dist/esm/UndoHistory.js +6 -2
- package/dist/esm/UndoHistory.js.map +1 -1
- package/dist/esm/__tests__/batching.test.js +3 -1
- package/dist/esm/__tests__/batching.test.js.map +1 -1
- package/dist/esm/__tests__/documents.test.js +54 -6
- package/dist/esm/__tests__/documents.test.js.map +1 -1
- package/dist/esm/__tests__/fixtures/testStorage.d.ts +8 -2
- package/dist/esm/__tests__/fixtures/testStorage.js +8 -1
- package/dist/esm/__tests__/fixtures/testStorage.js.map +1 -1
- package/dist/esm/__tests__/legacyOids.test.js +50 -17
- package/dist/esm/__tests__/legacyOids.test.js.map +1 -1
- package/dist/esm/__tests__/mutations.test.js +9 -3
- package/dist/esm/__tests__/mutations.test.js.map +1 -1
- package/dist/esm/__tests__/queries.test.js +6 -2
- package/dist/esm/__tests__/queries.test.js.map +1 -1
- package/dist/esm/__tests__/setup/indexedDB.d.ts +1 -1
- package/dist/esm/__tests__/setup/indexedDB.js +13 -1
- package/dist/esm/__tests__/setup/indexedDB.js.map +1 -1
- package/dist/esm/__tests__/undo.test.js +16 -9
- package/dist/esm/__tests__/undo.test.js.map +1 -1
- package/dist/esm/client/Client.d.ts +2 -3
- package/dist/esm/client/Client.js +8 -4
- package/dist/esm/client/Client.js.map +1 -1
- package/dist/esm/client/ClientDescriptor.js +21 -6
- package/dist/esm/client/ClientDescriptor.js.map +1 -1
- package/dist/esm/context.d.ts +10 -1
- package/dist/esm/entities/2/Entity.d.ts +148 -0
- package/dist/esm/entities/2/Entity.js +707 -0
- package/dist/esm/entities/2/Entity.js.map +1 -0
- package/dist/esm/entities/2/Entity.test.d.ts +1 -0
- package/dist/esm/entities/2/Entity.test.js +192 -0
- package/dist/esm/entities/2/Entity.test.js.map +1 -0
- package/dist/esm/entities/2/EntityCache.d.ts +15 -0
- package/dist/esm/entities/2/EntityCache.js +35 -0
- package/dist/esm/entities/2/EntityCache.js.map +1 -0
- package/dist/esm/entities/2/EntityMetadata.d.ts +68 -0
- package/dist/esm/entities/2/EntityMetadata.js +256 -0
- package/dist/esm/entities/2/EntityMetadata.js.map +1 -0
- package/dist/esm/entities/2/EntityStore.d.ts +78 -0
- package/dist/esm/entities/2/EntityStore.js +348 -0
- package/dist/esm/entities/2/EntityStore.js.map +1 -0
- package/dist/esm/entities/2/OperationBatcher.d.ts +52 -0
- package/dist/esm/entities/2/OperationBatcher.js +161 -0
- package/dist/esm/entities/2/OperationBatcher.js.map +1 -0
- package/dist/esm/entities/2/types.d.ts +84 -0
- package/dist/esm/entities/2/types.js +2 -0
- package/dist/esm/entities/2/types.js.map +1 -0
- package/dist/esm/entities/Entity.d.ts +0 -7
- package/dist/esm/entities/Entity.js +7 -0
- package/dist/esm/entities/Entity.js.map +1 -1
- package/dist/esm/entities/EntityStore.js +4 -20
- package/dist/esm/entities/EntityStore.js.map +1 -1
- package/dist/esm/entities/FakeWeakRef.d.ts +11 -0
- package/dist/esm/entities/FakeWeakRef.js +15 -0
- package/dist/esm/entities/FakeWeakRef.js.map +1 -0
- package/dist/esm/files/EntityFile.d.ts +5 -2
- package/dist/esm/files/EntityFile.js +8 -4
- package/dist/esm/files/EntityFile.js.map +1 -1
- package/dist/esm/files/FileManager.d.ts +3 -1
- package/dist/esm/files/FileManager.js +5 -3
- package/dist/esm/files/FileManager.js.map +1 -1
- package/dist/esm/files/FileStorage.js +7 -7
- package/dist/esm/files/FileStorage.js.map +1 -1
- package/dist/esm/files/utils.d.ts +2 -0
- package/dist/esm/files/utils.js +6 -1
- package/dist/esm/files/utils.js.map +1 -1
- package/dist/esm/idb.d.ts +2 -0
- package/dist/esm/idb.js +47 -3
- package/dist/esm/idb.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/indexes.d.ts +3 -0
- package/dist/esm/indexes.js +15 -0
- package/dist/esm/indexes.js.map +1 -0
- package/dist/esm/metadata/AckInfoStore.js +1 -1
- package/dist/esm/metadata/AckInfoStore.js.map +1 -1
- package/dist/esm/metadata/BaselinesStore.d.ts +4 -1
- package/dist/esm/metadata/BaselinesStore.js +19 -10
- package/dist/esm/metadata/BaselinesStore.js.map +1 -1
- package/dist/esm/metadata/LocalReplicaStore.d.ts +1 -1
- package/dist/esm/metadata/LocalReplicaStore.js +11 -5
- package/dist/esm/metadata/LocalReplicaStore.js.map +1 -1
- package/dist/esm/metadata/Metadata.d.ts +26 -5
- package/dist/esm/metadata/Metadata.js +56 -19
- package/dist/esm/metadata/Metadata.js.map +1 -1
- package/dist/esm/metadata/OperationsStore.d.ts +3 -0
- package/dist/esm/metadata/OperationsStore.js +35 -15
- package/dist/esm/metadata/OperationsStore.js.map +1 -1
- package/dist/esm/migration/openDatabase.js +32 -11
- package/dist/esm/migration/openDatabase.js.map +1 -1
- package/dist/esm/queries/BaseQuery.js +14 -2
- package/dist/esm/queries/BaseQuery.js.map +1 -1
- package/dist/esm/queries/CollectionQueries.d.ts +2 -4
- package/dist/esm/queries/CollectionQueries.js +1 -1
- package/dist/esm/queries/CollectionQueries.js.map +1 -1
- package/dist/esm/queries/FindAllQuery.js +1 -0
- package/dist/esm/queries/FindAllQuery.js.map +1 -1
- package/dist/esm/queries/QueryCache.d.ts +1 -0
- package/dist/esm/queries/QueryCache.js +4 -0
- package/dist/esm/queries/QueryCache.js.map +1 -1
- package/dist/esm/queries/QueryableStorage.d.ts +20 -0
- package/dist/esm/queries/QueryableStorage.js +80 -0
- package/dist/esm/queries/QueryableStorage.js.map +1 -0
- package/dist/esm/queries/dbQueries.js +13 -3
- package/dist/esm/queries/dbQueries.js.map +1 -1
- package/dist/esm/queries/utils.js +1 -1
- package/dist/esm/queries/utils.js.map +1 -1
- package/dist/esm/sync/FileSync.d.ts +1 -0
- package/dist/esm/sync/FileSync.js +1 -0
- package/dist/esm/sync/FileSync.js.map +1 -1
- package/dist/esm/sync/PushPullSync.d.ts +2 -1
- package/dist/esm/sync/PushPullSync.js +7 -1
- package/dist/esm/sync/PushPullSync.js.map +1 -1
- package/dist/esm/sync/Sync.d.ts +6 -3
- package/dist/esm/sync/Sync.js +9 -4
- package/dist/esm/sync/Sync.js.map +1 -1
- package/dist/esm/sync/WebSocketSync.d.ts +4 -1
- package/dist/esm/sync/WebSocketSync.js +41 -11
- package/dist/esm/sync/WebSocketSync.js.map +1 -1
- package/dist/tsconfig-cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -7
- package/src/DocumentManager.ts +3 -7
- package/src/IDBService.ts +78 -17
- package/src/UndoHistory.ts +5 -3
- package/src/__tests__/batching.test.ts +5 -2
- package/src/__tests__/documents.test.ts +66 -6
- package/src/__tests__/fixtures/testStorage.ts +9 -0
- package/src/__tests__/legacyOids.test.ts +53 -17
- package/src/__tests__/mutations.test.ts +9 -3
- package/src/__tests__/queries.test.ts +6 -2
- package/src/__tests__/setup/indexedDB.ts +14 -1
- package/src/__tests__/undo.test.ts +17 -9
- package/src/client/Client.ts +8 -4
- package/src/client/ClientDescriptor.ts +24 -8
- package/src/context.ts +16 -1
- package/src/entities/2/Entity.test.ts +218 -0
- package/src/entities/2/Entity.ts +954 -0
- package/src/entities/2/EntityCache.ts +41 -0
- package/src/entities/2/EntityMetadata.ts +364 -0
- package/src/entities/2/EntityStore.ts +490 -0
- package/src/entities/2/NOTES.md +22 -0
- package/src/entities/2/OperationBatcher.ts +251 -0
- package/src/entities/2/types.ts +154 -0
- package/src/files/EntityFile.ts +9 -4
- package/src/files/FileManager.ts +5 -3
- package/src/files/FileStorage.ts +7 -13
- package/src/files/utils.ts +9 -1
- package/src/idb.ts +51 -3
- package/src/index.ts +2 -2
- package/src/metadata/AckInfoStore.ts +1 -1
- package/src/metadata/BaselinesStore.ts +16 -24
- package/src/metadata/LocalReplicaStore.ts +13 -6
- package/src/metadata/Metadata.ts +109 -24
- package/src/metadata/OperationsStore.ts +37 -16
- package/src/migration/openDatabase.ts +32 -10
- package/src/queries/BaseQuery.ts +15 -2
- package/src/queries/CollectionQueries.ts +3 -3
- package/src/queries/FindAllQuery.ts +4 -0
- package/src/queries/QueryCache.ts +5 -0
- package/src/queries/QueryableStorage.ts +107 -0
- package/src/queries/dbQueries.ts +10 -3
- package/src/queries/utils.ts +1 -1
- package/src/sync/FileSync.ts +2 -0
- package/src/sync/PushPullSync.ts +8 -1
- package/src/sync/Sync.ts +14 -6
- package/src/sync/WebSocketSync.ts +47 -10
- package/src/entities/DocumentFamiliyCache.ts +0 -426
- package/src/entities/Entity.ts +0 -874
- package/src/entities/EntityStore.ts +0 -731
package/dist/esm/files/utils.js
CHANGED
|
@@ -10,12 +10,17 @@ export function createFileData(file) {
|
|
|
10
10
|
type: file.type,
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
|
+
export function isFile(value) {
|
|
14
|
+
return (value instanceof File ||
|
|
15
|
+
(typeof Blob !== 'undefined' && value instanceof Blob));
|
|
16
|
+
}
|
|
13
17
|
/**
|
|
18
|
+
* MUTATES the value.
|
|
14
19
|
* Replaces File values with refs and returns the normalized value.
|
|
15
20
|
* The list of files passed to the second argument will be populated with the files found in the value.
|
|
16
21
|
*/
|
|
17
22
|
export function processValueFiles(value, onFileIdentified) {
|
|
18
|
-
if (typeof window !== 'undefined' && value
|
|
23
|
+
if (typeof window !== 'undefined' && isFile(value)) {
|
|
19
24
|
const data = createFileData(value);
|
|
20
25
|
onFileIdentified(data);
|
|
21
26
|
return createFileRef(data.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/files/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAY,MAAM,qBAAqB,CAAC;AAC9D,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,UAAU,cAAc,CAAC,IAAU;IACxC,OAAO;QACN,EAAE,EAAE,IAAI,EAAE;QACV,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;KACf,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/files/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAY,MAAM,qBAAqB,CAAC;AAC9D,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,UAAU,cAAc,CAAC,IAAU;IACxC,OAAO;QACN,EAAE,EAAE,IAAI,EAAE;QACV,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;KACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAU;IAChC,OAAO,CACN,KAAK,YAAY,IAAI;QACrB,CAAC,OAAO,IAAI,KAAK,WAAW,IAAI,KAAK,YAAY,IAAI,CAAC,CACtD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAChC,KAAU,EACV,gBAA8C;IAE9C,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;QACnD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACnC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC9B;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,KAAK,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;SACzD;QACD,OAAO,KAAK,CAAC;KACb;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC9B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;YACxB,KAAK,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,CAAC;SAC7D;QACD,OAAO,KAAK,CAAC;KACb;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IAClD,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnD,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;YACpB,OAAO,CAAC,MAAM,CAAC,MAAqB,CAAC,CAAC;QACvC,CAAC,CAAC;QACF,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;QACxB,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/esm/idb.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export declare function isAbortError(err: unknown): boolean;
|
|
1
2
|
export declare function storeRequestPromise<T>(request: IDBRequest<T>): Promise<T>;
|
|
2
3
|
export declare function cursorIterator<T>(request: IDBRequest<IDBCursorWithValue | null>, callback: (value: T | null) => boolean): Promise<void>;
|
|
3
4
|
export declare function getSizeOfObjectStore(database: IDBDatabase, storeName: string): Promise<{
|
|
@@ -9,3 +10,4 @@ export declare function closeDatabase(db: IDBDatabase): Promise<void>;
|
|
|
9
10
|
export declare function deleteAllDatabases(namespace: string, indexedDB?: IDBFactory): Promise<void>;
|
|
10
11
|
export declare function deleteDatabase(name: string, indexedDB?: IDBFactory): Promise<IDBDatabase>;
|
|
11
12
|
export declare function getAllDatabaseNamesAndVersions(indexedDB?: IDBFactory): Promise<IDBDatabaseInfo[]>;
|
|
13
|
+
export declare function createAbortableTransaction(db: IDBDatabase, storeNames: string[], mode: 'readonly' | 'readwrite', abortSignal?: AbortSignal, log?: (...args: any[]) => void): IDBTransaction;
|
package/dist/esm/idb.js
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import { roughSizeOfObject } from '@verdant-web/common';
|
|
2
|
+
export function isAbortError(err) {
|
|
3
|
+
return err instanceof Error && err.name === 'AbortError';
|
|
4
|
+
}
|
|
2
5
|
export function storeRequestPromise(request) {
|
|
3
6
|
return new Promise((resolve, reject) => {
|
|
4
7
|
request.onsuccess = () => {
|
|
5
8
|
resolve(request.result);
|
|
6
9
|
};
|
|
7
10
|
request.onerror = () => {
|
|
8
|
-
|
|
11
|
+
if (request.error && isAbortError(request.error)) {
|
|
12
|
+
// TODO: is this the right thing to do?
|
|
13
|
+
resolve(request.result);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
reject(request.error);
|
|
17
|
+
}
|
|
9
18
|
};
|
|
10
19
|
});
|
|
11
20
|
}
|
|
@@ -26,7 +35,12 @@ export function cursorIterator(request, callback) {
|
|
|
26
35
|
}
|
|
27
36
|
};
|
|
28
37
|
request.onerror = () => {
|
|
29
|
-
|
|
38
|
+
if (request.error && isAbortError(request.error)) {
|
|
39
|
+
resolve();
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
reject(request.error);
|
|
43
|
+
}
|
|
30
44
|
};
|
|
31
45
|
});
|
|
32
46
|
}
|
|
@@ -46,7 +60,15 @@ export function getSizeOfObjectStore(database, storeName) {
|
|
|
46
60
|
}
|
|
47
61
|
};
|
|
48
62
|
cursorReq.onerror = function (e) {
|
|
49
|
-
|
|
63
|
+
if (cursorReq.error && isAbortError(cursorReq.error)) {
|
|
64
|
+
resolve({
|
|
65
|
+
count: count,
|
|
66
|
+
size: size,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
reject(cursorReq.error);
|
|
71
|
+
}
|
|
50
72
|
};
|
|
51
73
|
tx.oncomplete = function (e) {
|
|
52
74
|
resolve({
|
|
@@ -98,4 +120,26 @@ export function deleteDatabase(name, indexedDB = window.indexedDB) {
|
|
|
98
120
|
export async function getAllDatabaseNamesAndVersions(indexedDB = window.indexedDB) {
|
|
99
121
|
return indexedDB.databases();
|
|
100
122
|
}
|
|
123
|
+
export function createAbortableTransaction(db, storeNames, mode, abortSignal, log) {
|
|
124
|
+
const tx = db.transaction(storeNames, mode);
|
|
125
|
+
if (abortSignal) {
|
|
126
|
+
const abort = () => {
|
|
127
|
+
log === null || log === void 0 ? void 0 : log('debug', 'aborting transaction');
|
|
128
|
+
try {
|
|
129
|
+
tx.abort();
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
log === null || log === void 0 ? void 0 : log('debug', 'aborting transaction failed', e);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
abortSignal.addEventListener('abort', abort);
|
|
136
|
+
tx.addEventListener('error', () => {
|
|
137
|
+
abortSignal.removeEventListener('abort', abort);
|
|
138
|
+
});
|
|
139
|
+
tx.addEventListener('complete', () => {
|
|
140
|
+
abortSignal.removeEventListener('abort', abort);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return tx;
|
|
144
|
+
}
|
|
101
145
|
//# sourceMappingURL=idb.js.map
|
package/dist/esm/idb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idb.js","sourceRoot":"","sources":["../../src/idb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,UAAU,mBAAmB,CAAI,OAAsB;IAC5D,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACzC,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE;YACxB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC,CAAC;QACF,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE;YACtB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"idb.js","sourceRoot":"","sources":["../../src/idb.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -7,8 +7,8 @@ export { ClientDescriptor as StorageDescriptor };
|
|
|
7
7
|
export { Client as Storage };
|
|
8
8
|
export type { ClientDescriptorOptions };
|
|
9
9
|
export type { ClientDescriptorOptions as StorageInitOptions };
|
|
10
|
-
export { Entity } from './entities/Entity.js';
|
|
11
|
-
export type { ObjectEntity, ListEntity, EntityShape, AccessibleEntityProperty, AnyEntity, EntityDestructured, } from './entities/
|
|
10
|
+
export { Entity } from './entities/2/Entity.js';
|
|
11
|
+
export type { ObjectEntity, ListEntity, EntityShape, AccessibleEntityProperty, AnyEntity, EntityDestructured, } from './entities/2/types.js';
|
|
12
12
|
export { ServerSync } from './sync/Sync.js';
|
|
13
13
|
export type { SyncTransportMode } from './sync/Sync.js';
|
|
14
14
|
export { EntityFile } from './files/EntityFile.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -5,7 +5,7 @@ export { Client };
|
|
|
5
5
|
// backward compat
|
|
6
6
|
export { ClientDescriptor as StorageDescriptor };
|
|
7
7
|
export { Client as Storage };
|
|
8
|
-
export { Entity } from './entities/Entity.js';
|
|
8
|
+
export { Entity } from './entities/2/Entity.js';
|
|
9
9
|
export { ServerSync } from './sync/Sync.js';
|
|
10
10
|
export { EntityFile } from './files/EntityFile.js';
|
|
11
11
|
export { collection, schema, createDefaultMigration, migrate, createMigration, } from '@verdant-web/common';
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,gBAAgB,GAEhB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,kBAAkB;AAClB,OAAO,EAAE,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;AACjD,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,CAAC;AAG7B,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,gBAAgB,GAEhB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,kBAAkB;AAClB,OAAO,EAAE,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;AACjD,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,CAAC;AAG7B,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAShD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACN,UAAU,EACV,MAAM,EACN,sBAAsB,EACtB,OAAO,EACP,eAAe,GACf,MAAM,qBAAqB,CAAC;AAW7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { StorageCollectionSchema } from '@verdant-web/common';
|
|
2
|
+
export declare function computeSynthetics(schema: StorageCollectionSchema, obj: any): Record<string, any>;
|
|
3
|
+
export declare function computeCompoundIndices(schema: StorageCollectionSchema<any, any, any>, doc: any): any;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createCompoundIndexValue, } from '@verdant-web/common';
|
|
2
|
+
export function computeSynthetics(schema, obj) {
|
|
3
|
+
const result = {};
|
|
4
|
+
for (const [name, property] of Object.entries(schema.synthetics || {})) {
|
|
5
|
+
result[name] = property.compute(obj);
|
|
6
|
+
}
|
|
7
|
+
return result;
|
|
8
|
+
}
|
|
9
|
+
export function computeCompoundIndices(schema, doc) {
|
|
10
|
+
return Object.entries(schema.compounds || {}).reduce((acc, [indexKey, index]) => {
|
|
11
|
+
acc[indexKey] = createCompoundIndexValue(...index.of.map((key) => doc[key]));
|
|
12
|
+
return acc;
|
|
13
|
+
}, {});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=indexes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexes.js","sourceRoot":"","sources":["../../src/indexes.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,wBAAwB,GAGxB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,UAAU,iBAAiB,CAAC,MAA+B,EAAE,GAAQ;IAC1E,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE;QACvE,MAAM,CAAC,IAAI,CAAC,GAAI,QAA6C,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KAC3E;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sBAAsB,CACrC,MAA8C,EAC9C,GAAQ;IAER,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAElD,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE;QAC5B,GAAG,CAAC,QAAQ,CAAC,GAAG,wBAAwB,CACvC,GAAI,KAA2C,CAAC,EAAE,CAAC,GAAG,CACrD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAoB,CACpC,CACD,CAAC;QACF,OAAO,GAAG,CAAC;IACZ,CAAC,EAAE,EAAwC,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -15,7 +15,7 @@ export class AckInfoStore extends IDBService {
|
|
|
15
15
|
}
|
|
16
16
|
};
|
|
17
17
|
this.setGlobalAck = async (ack) => {
|
|
18
|
-
await this.run('info', (store) => store.put({ type: 'ack', globalAckTimestamp: ack }), 'readwrite');
|
|
18
|
+
await this.run('info', (store) => store.put({ type: 'ack', globalAckTimestamp: ack }), { mode: 'readwrite' });
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AckInfoStore.js","sourceRoot":"","sources":["../../../src/metadata/AckInfoStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAS9C,MAAM,OAAO,YAAa,SAAQ,UAAU;IAA5C;;QACC,eAAU,GAAG,KAAK,IAAsB,EAAE;YACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAU,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5E,IAAI,MAAM,EAAE;gBACX,OAAO,MAAM,CAAC;aACd;iBAAM;gBACN,OAAO;oBACN,kBAAkB,EAAE,IAAI;oBACxB,IAAI,EAAE,KAAK;iBACX,CAAC;aACF;QACF,CAAC,CAAC;QAEF,iBAAY,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;YACpC,MAAM,IAAI,CAAC,GAAG,CACb,MAAM,EACN,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC,EAC9D,WAAW,
|
|
1
|
+
{"version":3,"file":"AckInfoStore.js","sourceRoot":"","sources":["../../../src/metadata/AckInfoStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAS9C,MAAM,OAAO,YAAa,SAAQ,UAAU;IAA5C;;QACC,eAAU,GAAG,KAAK,IAAsB,EAAE;YACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAU,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5E,IAAI,MAAM,EAAE;gBACX,OAAO,MAAM,CAAC;aACd;iBAAM;gBACN,OAAO;oBACN,kBAAkB,EAAE,IAAI;oBACxB,IAAI,EAAE,KAAK;iBACX,CAAC;aACF;QACF,CAAC,CAAC;QAEF,iBAAY,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;YACpC,MAAM,IAAI,CAAC,GAAG,CACb,MAAM,EACN,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC,EAC9D,EAAE,IAAI,EAAE,WAAW,EAAE,CACrB,CAAC;QACH,CAAC,CAAC;IACH,CAAC;CAAA"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { DocumentBaseline, ObjectIdentifier } from '@verdant-web/common';
|
|
2
2
|
import { IDBService } from '../IDBService.js';
|
|
3
|
+
import { Context } from '../context.js';
|
|
3
4
|
export declare class BaselinesStore extends IDBService {
|
|
4
|
-
constructor(db: IDBDatabase
|
|
5
|
+
constructor(db: IDBDatabase, opts: {
|
|
6
|
+
log?: Context['log'];
|
|
7
|
+
});
|
|
5
8
|
getAllForDocument: (oid: ObjectIdentifier, { mode, transaction, }?: {
|
|
6
9
|
mode?: "readonly" | "readwrite" | undefined;
|
|
7
10
|
transaction?: IDBTransaction | undefined;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { getOidSubIdRange, getOidRoot, getLegacyDotOidSubIdRange, } from '@verdant-web/common';
|
|
2
2
|
import { IDBService } from '../IDBService.js';
|
|
3
3
|
export class BaselinesStore extends IDBService {
|
|
4
|
-
constructor(db) {
|
|
5
|
-
super(db);
|
|
4
|
+
constructor(db, opts) {
|
|
5
|
+
super(db, opts);
|
|
6
6
|
this.getAllForDocument = async (oid, { mode = 'readonly', transaction, } = {}) => {
|
|
7
7
|
const baselines = [];
|
|
8
8
|
await this.iterateOverAllForDocument(oid, (baseline) => {
|
|
@@ -30,14 +30,14 @@ export class BaselinesStore extends IDBService {
|
|
|
30
30
|
// store.openCursor(IDBKeyRange.bound(start, end, false, false)),
|
|
31
31
|
// ];
|
|
32
32
|
// }
|
|
33
|
-
}, iterator, mode, transaction);
|
|
33
|
+
}, iterator, { mode, transaction });
|
|
34
34
|
};
|
|
35
35
|
this.iterateOverAllForCollection = async (collection, iterator, { mode = 'readonly', transaction, } = {}) => {
|
|
36
36
|
return this.iterate('baselines', (store) => {
|
|
37
37
|
return [
|
|
38
38
|
store.openCursor(IDBKeyRange.bound(collection, collection + '\uffff', false, false)),
|
|
39
39
|
];
|
|
40
|
-
}, iterator, mode, transaction);
|
|
40
|
+
}, iterator, { mode, transaction });
|
|
41
41
|
};
|
|
42
42
|
this.getAllForMultipleDocuments = async (docOids, { mode = 'readonly' } = {}) => {
|
|
43
43
|
const result = await this.runAll('baselines', (store) => {
|
|
@@ -59,7 +59,7 @@ export class BaselinesStore extends IDBService {
|
|
|
59
59
|
// ];
|
|
60
60
|
// }
|
|
61
61
|
});
|
|
62
|
-
}, mode);
|
|
62
|
+
}, { mode });
|
|
63
63
|
return result.flat();
|
|
64
64
|
};
|
|
65
65
|
this.getAllSince = async (timestamp, { mode = 'readonly' } = {}) => {
|
|
@@ -69,24 +69,33 @@ export class BaselinesStore extends IDBService {
|
|
|
69
69
|
: undefined;
|
|
70
70
|
const index = store.index('timestamp');
|
|
71
71
|
return index.getAll(range);
|
|
72
|
-
}, mode);
|
|
72
|
+
}, { mode });
|
|
73
73
|
};
|
|
74
74
|
this.get = async (oid, { transaction, mode = 'readonly', } = {}) => {
|
|
75
|
-
return this.run('baselines', (store) => store.get(oid),
|
|
75
|
+
return this.run('baselines', (store) => store.get(oid), {
|
|
76
|
+
mode,
|
|
77
|
+
transaction,
|
|
78
|
+
});
|
|
76
79
|
};
|
|
77
80
|
this.set = async (baseline, { transaction } = {}) => {
|
|
78
|
-
await this.run('baselines', (store) => store.put(baseline),
|
|
81
|
+
await this.run('baselines', (store) => store.put(baseline), {
|
|
82
|
+
mode: 'readwrite',
|
|
83
|
+
transaction,
|
|
84
|
+
});
|
|
79
85
|
};
|
|
80
86
|
this.setAll = async (baselines, { transaction } = {}) => {
|
|
81
87
|
await this.runAll('baselines', (store) => {
|
|
82
88
|
return baselines.map((baseline) => store.put(baseline));
|
|
83
|
-
}, 'readwrite', transaction);
|
|
89
|
+
}, { mode: 'readwrite', transaction });
|
|
84
90
|
};
|
|
85
91
|
this.reset = () => {
|
|
86
92
|
return this.clear('baselines');
|
|
87
93
|
};
|
|
88
94
|
this.delete = async (oid, { transaction }) => {
|
|
89
|
-
await this.run('baselines', (store) => store.delete(oid),
|
|
95
|
+
await this.run('baselines', (store) => store.delete(oid), {
|
|
96
|
+
mode: 'readwrite',
|
|
97
|
+
transaction,
|
|
98
|
+
});
|
|
90
99
|
};
|
|
91
100
|
}
|
|
92
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaselinesStore.js","sourceRoot":"","sources":["../../../src/metadata/BaselinesStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,gBAAgB,EAChB,UAAU,EAGV,yBAAyB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"BaselinesStore.js","sourceRoot":"","sources":["../../../src/metadata/BaselinesStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ export type LocalReplicaInfo = {
|
|
|
8
8
|
export declare class LocalReplicaStore extends IDBService {
|
|
9
9
|
private _creating;
|
|
10
10
|
private cached;
|
|
11
|
-
get: ({ transaction }?: {
|
|
11
|
+
get: ({ transaction, }?: {
|
|
12
12
|
transaction?: IDBTransaction | undefined;
|
|
13
13
|
}) => Promise<LocalReplicaInfo>;
|
|
14
14
|
update: (data: Partial<LocalReplicaInfo>, { transaction }?: {
|
|
@@ -3,11 +3,11 @@ import { IDBService } from '../IDBService.js';
|
|
|
3
3
|
export class LocalReplicaStore extends IDBService {
|
|
4
4
|
constructor() {
|
|
5
5
|
super(...arguments);
|
|
6
|
-
this.get = async ({ transaction } = {}) => {
|
|
6
|
+
this.get = async ({ transaction, } = {}) => {
|
|
7
7
|
if (this.cached) {
|
|
8
8
|
return this.cached;
|
|
9
9
|
}
|
|
10
|
-
const lookup = await this.run('info', (store) => store.get('localReplicaInfo'),
|
|
10
|
+
const lookup = await this.run('info', (store) => store.get('localReplicaInfo'), { transaction });
|
|
11
11
|
// not cached, not in db, create it
|
|
12
12
|
if (!lookup) {
|
|
13
13
|
// prevent a race condition if get() is called again while we are
|
|
@@ -22,7 +22,9 @@ export class LocalReplicaStore extends IDBService {
|
|
|
22
22
|
ackedLogicalTime: null,
|
|
23
23
|
lastSyncedLogicalTime: null,
|
|
24
24
|
};
|
|
25
|
-
await this.run('info', (store) => store.put(replicaInfo),
|
|
25
|
+
await this.run('info', (store) => store.put(replicaInfo), {
|
|
26
|
+
mode: 'readwrite',
|
|
27
|
+
});
|
|
26
28
|
this.cached = replicaInfo;
|
|
27
29
|
})();
|
|
28
30
|
}
|
|
@@ -35,14 +37,18 @@ export class LocalReplicaStore extends IDBService {
|
|
|
35
37
|
this.update = async (data, { transaction } = {}) => {
|
|
36
38
|
const localReplicaInfo = await this.get({ transaction });
|
|
37
39
|
Object.assign(localReplicaInfo, data);
|
|
38
|
-
await this.run('info', (store) => store.put(localReplicaInfo),
|
|
40
|
+
await this.run('info', (store) => store.put(localReplicaInfo), {
|
|
41
|
+
mode: 'readwrite',
|
|
42
|
+
});
|
|
39
43
|
this.cached = localReplicaInfo;
|
|
40
44
|
};
|
|
41
45
|
this.reset = async () => {
|
|
42
46
|
const localInfo = await this.get();
|
|
43
47
|
localInfo.ackedLogicalTime = null;
|
|
44
48
|
localInfo.lastSyncedLogicalTime = null;
|
|
45
|
-
await this.run('info', (store) => store.put(localInfo),
|
|
49
|
+
await this.run('info', (store) => store.put(localInfo), {
|
|
50
|
+
mode: 'readwrite',
|
|
51
|
+
});
|
|
46
52
|
};
|
|
47
53
|
}
|
|
48
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalReplicaStore.js","sourceRoot":"","sources":["../../../src/metadata/LocalReplicaStore.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAS9C,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAAjD;;QAIC,QAAG,GAAG,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"LocalReplicaStore.js","sourceRoot":"","sources":["../../../src/metadata/LocalReplicaStore.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAS9C,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAAjD;;QAIC,QAAG,GAAG,KAAK,EAAE,EACZ,WAAW,MAC0B,EAAE,EAA6B,EAAE;YACtE,IAAI,IAAI,CAAC,MAAM,EAAE;gBAChB,OAAO,IAAI,CAAC,MAAM,CAAC;aACnB;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAC5B,MAAM,EACN,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,EACxC,EAAE,WAAW,EAAE,CACf,CAAC;YAEF,mCAAmC;YACnC,IAAI,CAAC,MAAM,EAAE;gBACZ,iEAAiE;gBACjE,4BAA4B;gBAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;oBACpB,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,IAAI,EAAE;wBAC5B,kCAAkC;wBAClC,MAAM,SAAS,GAAG,IAAI,EAAE,CAAC;wBACzB,MAAM,WAAW,GAAqB;4BACrC,IAAI,EAAE,kBAAkB;4BACxB,EAAE,EAAE,SAAS;4BACb,gBAAgB,EAAE,IAAI;4BACtB,qBAAqB,EAAE,IAAI;yBAC3B,CAAC;wBACF,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;4BACzD,IAAI,EAAE,WAAW;yBACjB,CAAC,CAAC;wBACH,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;oBAC3B,CAAC,CAAC,EAAE,CAAC;iBACL;gBACD,MAAM,IAAI,CAAC,SAAS,CAAC;gBAErB,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;aACjC;YAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,OAAO,MAAM,CAAC;QACf,CAAC,CAAC;QAEF,WAAM,GAAG,KAAK,EACb,IAA+B,EAC/B,EAAE,WAAW,KAAuC,EAAE,EACrD,EAAE;YACH,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;gBAC9D,IAAI,EAAE,WAAW;aACjB,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC;QAChC,CAAC,CAAC;QAEF,UAAK,GAAG,KAAK,IAAI,EAAE;YAClB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;YACnC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAClC,SAAS,CAAC,qBAAqB,GAAG,IAAI,CAAC;YACvC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBACvD,IAAI,EAAE,WAAW;aACjB,CAAC,CAAC;QACJ,CAAC,CAAC;IACH,CAAC;CAAA"}
|
|
@@ -34,7 +34,7 @@ export declare class Metadata extends EventSubscriber<{
|
|
|
34
34
|
private context;
|
|
35
35
|
constructor({ disableRebasing, context, }: {
|
|
36
36
|
disableRebasing?: boolean;
|
|
37
|
-
context: Omit<Context, 'documentDb'>;
|
|
37
|
+
context: Omit<Context, 'documentDb' | 'getNow'>;
|
|
38
38
|
});
|
|
39
39
|
private get db();
|
|
40
40
|
private get log();
|
|
@@ -44,7 +44,9 @@ export declare class Metadata extends EventSubscriber<{
|
|
|
44
44
|
/**
|
|
45
45
|
* Methods for accessing data
|
|
46
46
|
*/
|
|
47
|
-
createTransaction: (stores: ('operations' | 'baselines')[]
|
|
47
|
+
createTransaction: (stores: ('operations' | 'baselines')[], opts?: {
|
|
48
|
+
abort?: AbortSignal;
|
|
49
|
+
}) => IDBTransaction;
|
|
48
50
|
/**
|
|
49
51
|
* Gets the OID and every sub-object OID for a given document.
|
|
50
52
|
* Includes any sub-objects that are not referenced by the root object
|
|
@@ -55,6 +57,12 @@ export declare class Metadata extends EventSubscriber<{
|
|
|
55
57
|
getDocumentSnapshot: (oid: ObjectIdentifier, options?: {
|
|
56
58
|
to?: string;
|
|
57
59
|
}) => Promise<any>;
|
|
60
|
+
getDocumentData: (oid: ObjectIdentifier, opts?: {
|
|
61
|
+
abort?: AbortSignal;
|
|
62
|
+
}) => Promise<{
|
|
63
|
+
baselines: DocumentBaseline<any>[];
|
|
64
|
+
operations: Record<string, Operation[]>;
|
|
65
|
+
}>;
|
|
58
66
|
/**
|
|
59
67
|
* Methods for writing data
|
|
60
68
|
*/
|
|
@@ -68,13 +76,26 @@ export declare class Metadata extends EventSubscriber<{
|
|
|
68
76
|
* Applies a patch to the document and stores it in the database.
|
|
69
77
|
* @returns the oldest local history timestamp
|
|
70
78
|
*/
|
|
71
|
-
|
|
79
|
+
insertLocalOperations: (operations: Operation[], opts?: {
|
|
80
|
+
transaction?: IDBTransaction;
|
|
81
|
+
}) => Promise<void>;
|
|
72
82
|
/**
|
|
73
83
|
* Inserts remote operations. This does not affect local history.
|
|
74
84
|
* @returns a list of affected document OIDs
|
|
75
85
|
*/
|
|
76
|
-
insertRemoteOperations: (operations: Operation[]
|
|
77
|
-
|
|
86
|
+
insertRemoteOperations: (operations: Operation[], opts?: {
|
|
87
|
+
transaction?: IDBTransaction;
|
|
88
|
+
}) => Promise<string[]>;
|
|
89
|
+
insertRemoteBaselines: (baselines: DocumentBaseline[], opts?: {
|
|
90
|
+
transaction?: IDBTransaction;
|
|
91
|
+
}) => Promise<string[]>;
|
|
92
|
+
insertData: (data: {
|
|
93
|
+
baselines?: DocumentBaseline[];
|
|
94
|
+
operations?: Operation[];
|
|
95
|
+
isLocal?: boolean;
|
|
96
|
+
}, opts?: {
|
|
97
|
+
abort: AbortSignal;
|
|
98
|
+
}) => Promise<void>;
|
|
78
99
|
updateLastSynced: (timestamp: string) => Promise<void>;
|
|
79
100
|
lastSyncedTimestamp: () => Promise<string | null>;
|
|
80
101
|
private tryAutonomousRebase;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { applyPatch, assert, assignOid, EventSubscriber, isFileRef, getOidRoot, HybridLogicalClockTimestampProvider, PatchCreator, substituteRefsWithObjects, } from '@verdant-web/common';
|
|
2
2
|
import { AckInfoStore } from './AckInfoStore.js';
|
|
3
3
|
import { BaselinesStore } from './BaselinesStore.js';
|
|
4
|
-
import { getAllFromObjectStores, getSizeOfObjectStore, storeRequestPromise, } from '../idb.js';
|
|
4
|
+
import { createAbortableTransaction, getAllFromObjectStores, getSizeOfObjectStore, storeRequestPromise, } from '../idb.js';
|
|
5
5
|
import { LocalReplicaStore } from './LocalReplicaStore.js';
|
|
6
6
|
import { MessageCreator } from './MessageCreator.js';
|
|
7
7
|
import { OperationsStore } from './OperationsStore.js';
|
|
@@ -25,8 +25,8 @@ export class Metadata extends EventSubscriber {
|
|
|
25
25
|
/**
|
|
26
26
|
* Methods for accessing data
|
|
27
27
|
*/
|
|
28
|
-
this.createTransaction = (stores) => {
|
|
29
|
-
return this.db
|
|
28
|
+
this.createTransaction = (stores, opts = {}) => {
|
|
29
|
+
return createAbortableTransaction(this.db, stores, 'readwrite', opts.abort, this.context.log);
|
|
30
30
|
};
|
|
31
31
|
/**
|
|
32
32
|
* Gets the OID and every sub-object OID for a given document.
|
|
@@ -39,7 +39,7 @@ export class Metadata extends EventSubscriber {
|
|
|
39
39
|
assert(documentOid === oid, 'Must be root document OID');
|
|
40
40
|
oids.add(documentOid);
|
|
41
41
|
// readwrite mode to block on other write transactions
|
|
42
|
-
const transaction = this.
|
|
42
|
+
const transaction = this.createTransaction(['baselines', 'operations']);
|
|
43
43
|
await Promise.all([
|
|
44
44
|
this.baselines.iterateOverAllForDocument(documentOid, (baseline) => {
|
|
45
45
|
oids.add(baseline.oid);
|
|
@@ -95,6 +95,28 @@ export class Metadata extends EventSubscriber {
|
|
|
95
95
|
}
|
|
96
96
|
return root;
|
|
97
97
|
};
|
|
98
|
+
this.getDocumentData = async (oid, opts) => {
|
|
99
|
+
const transaction = this.createTransaction(['baselines', 'operations'], opts);
|
|
100
|
+
const baselines = [];
|
|
101
|
+
const operations = {};
|
|
102
|
+
await Promise.all([
|
|
103
|
+
this.baselines.iterateOverAllForDocument(oid, (baseline) => {
|
|
104
|
+
baselines.push(baseline);
|
|
105
|
+
}, {
|
|
106
|
+
transaction,
|
|
107
|
+
}),
|
|
108
|
+
this.operations.iterateOverAllOperationsForDocument(oid, (op) => {
|
|
109
|
+
var _a;
|
|
110
|
+
var _b;
|
|
111
|
+
(_a = operations[_b = op.oid]) !== null && _a !== void 0 ? _a : (operations[_b] = []);
|
|
112
|
+
operations[op.oid].push(op);
|
|
113
|
+
}, { transaction }),
|
|
114
|
+
]);
|
|
115
|
+
return {
|
|
116
|
+
baselines,
|
|
117
|
+
operations,
|
|
118
|
+
};
|
|
119
|
+
};
|
|
98
120
|
/**
|
|
99
121
|
* Methods for writing data
|
|
100
122
|
*/
|
|
@@ -123,16 +145,16 @@ export class Metadata extends EventSubscriber {
|
|
|
123
145
|
* Applies a patch to the document and stores it in the database.
|
|
124
146
|
* @returns the oldest local history timestamp
|
|
125
147
|
*/
|
|
126
|
-
this.
|
|
148
|
+
this.insertLocalOperations = async (operations, opts) => {
|
|
127
149
|
if (operations.length === 0)
|
|
128
150
|
return;
|
|
129
151
|
// await this.rebaseLock;
|
|
130
|
-
this.log(`Inserting ${operations.length} local operations
|
|
152
|
+
this.log('debug', `Inserting ${operations.length} local operations`, operations);
|
|
131
153
|
// add local flag, in place.
|
|
132
154
|
for (const operation of operations) {
|
|
133
155
|
operation.isLocal = true;
|
|
134
156
|
}
|
|
135
|
-
await this.operations.addOperations(operations);
|
|
157
|
+
await this.operations.addOperations(operations, opts);
|
|
136
158
|
const message = await this.messageCreator.createOperation({ operations });
|
|
137
159
|
this.emit('message', message);
|
|
138
160
|
// we can now enqueue and check for rebase opportunities
|
|
@@ -142,20 +164,20 @@ export class Metadata extends EventSubscriber {
|
|
|
142
164
|
* Inserts remote operations. This does not affect local history.
|
|
143
165
|
* @returns a list of affected document OIDs
|
|
144
166
|
*/
|
|
145
|
-
this.insertRemoteOperations = async (operations) => {
|
|
167
|
+
this.insertRemoteOperations = async (operations, opts) => {
|
|
146
168
|
if (operations.length === 0)
|
|
147
169
|
return [];
|
|
148
170
|
// await this.rebaseLock;
|
|
149
|
-
this.log(`Inserting ${operations.length} remote operations
|
|
150
|
-
const affectedDocumentOids = await this.operations.addOperations(operations.map((patch) => (Object.assign(Object.assign({}, patch), { isLocal: false }))));
|
|
171
|
+
this.log('debug', `Inserting ${operations.length} remote operations`, operations);
|
|
172
|
+
const affectedDocumentOids = await this.operations.addOperations(operations.map((patch) => (Object.assign(Object.assign({}, patch), { isLocal: false }))), opts);
|
|
151
173
|
this.ack(operations[operations.length - 1].timestamp);
|
|
152
174
|
return affectedDocumentOids;
|
|
153
175
|
};
|
|
154
|
-
this.insertRemoteBaselines = async (baselines) => {
|
|
176
|
+
this.insertRemoteBaselines = async (baselines, opts) => {
|
|
155
177
|
if (baselines.length === 0)
|
|
156
178
|
return [];
|
|
157
179
|
this.log(`Inserting ${baselines.length} remote baselines`);
|
|
158
|
-
await this.baselines.setAll(baselines);
|
|
180
|
+
await this.baselines.setAll(baselines, opts);
|
|
159
181
|
// this.ack(baselines[baselines.length - 1].timestamp);
|
|
160
182
|
const affectedOidSet = new Set();
|
|
161
183
|
baselines.forEach((baseline) => {
|
|
@@ -163,6 +185,23 @@ export class Metadata extends EventSubscriber {
|
|
|
163
185
|
});
|
|
164
186
|
return Array.from(affectedOidSet);
|
|
165
187
|
};
|
|
188
|
+
this.insertData = async (data, opts) => {
|
|
189
|
+
var _a;
|
|
190
|
+
const transaction = this.createTransaction(['baselines', 'operations'], opts);
|
|
191
|
+
if (data.baselines) {
|
|
192
|
+
await this.insertRemoteBaselines(data.baselines, { transaction });
|
|
193
|
+
}
|
|
194
|
+
if ((_a = opts === null || opts === void 0 ? void 0 : opts.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 });
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
await this.insertRemoteOperations(data.operations, { transaction });
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
};
|
|
166
205
|
this.updateLastSynced = async (timestamp) => {
|
|
167
206
|
if (this._closing)
|
|
168
207
|
return;
|
|
@@ -195,7 +234,7 @@ export class Metadata extends EventSubscriber {
|
|
|
195
234
|
// find all operations before the global ack
|
|
196
235
|
let lastTimestamp;
|
|
197
236
|
const toRebase = new Set();
|
|
198
|
-
const transaction = this.
|
|
237
|
+
const transaction = this.createTransaction(['baselines', 'operations']);
|
|
199
238
|
let operationCount = 0;
|
|
200
239
|
await this.operations.iterateOverAllOperations((patch) => {
|
|
201
240
|
toRebase.add(patch.oid);
|
|
@@ -206,7 +245,6 @@ export class Metadata extends EventSubscriber {
|
|
|
206
245
|
transaction,
|
|
207
246
|
});
|
|
208
247
|
if (!toRebase.size) {
|
|
209
|
-
this.log('Cannot rebase, no operations prior to', globalAckTimestamp);
|
|
210
248
|
return;
|
|
211
249
|
}
|
|
212
250
|
if (this._closing) {
|
|
@@ -223,8 +261,7 @@ export class Metadata extends EventSubscriber {
|
|
|
223
261
|
// including replica Id for testing I guess
|
|
224
262
|
const replicaId = (await this.localReplica.get()).id;
|
|
225
263
|
this.log('[', replicaId, ']', 'Rebasing', oid, 'up to', upTo);
|
|
226
|
-
const transaction = providedTx ||
|
|
227
|
-
this.db.transaction(['operations', 'baselines'], 'readwrite');
|
|
264
|
+
const transaction = providedTx || this.createTransaction(['operations', 'baselines']);
|
|
228
265
|
const baseline = await this.baselines.get(oid, { transaction });
|
|
229
266
|
let current = (baseline === null || baseline === void 0 ? void 0 : baseline.snapshot) || undefined;
|
|
230
267
|
let operationsApplied = 0;
|
|
@@ -256,7 +293,7 @@ export class Metadata extends EventSubscriber {
|
|
|
256
293
|
else {
|
|
257
294
|
await this.baselines.delete(oid, { transaction });
|
|
258
295
|
}
|
|
259
|
-
this.log('successfully rebased', oid, 'up to', upTo, ':', current, 'and deleted', operationsApplied, 'operations');
|
|
296
|
+
this.log('debug', 'successfully rebased', oid, 'up to', upTo, ':', current, 'and deleted', operationsApplied, 'operations');
|
|
260
297
|
// cleanup deleted refs
|
|
261
298
|
if (deletedRefs.length) {
|
|
262
299
|
const fileRefs = deletedRefs.filter(isFileRef);
|
|
@@ -342,8 +379,8 @@ export class Metadata extends EventSubscriber {
|
|
|
342
379
|
};
|
|
343
380
|
this.context = context;
|
|
344
381
|
this.schema = new SchemaStore(context.metaDb, context.schema.version);
|
|
345
|
-
this.operations = new OperationsStore(this.db);
|
|
346
|
-
this.baselines = new BaselinesStore(this.db);
|
|
382
|
+
this.operations = new OperationsStore(this.db, { log: context.log });
|
|
383
|
+
this.baselines = new BaselinesStore(this.db, { log: context.log });
|
|
347
384
|
this.localReplica = new LocalReplicaStore(this.db);
|
|
348
385
|
this.ackInfo = new AckInfoStore(this.db);
|
|
349
386
|
this.messageCreator = new MessageCreator(this);
|