@verdant-web/store 3.12.1 → 4.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 +11 -13
- package/dist/bundle/index.js.map +4 -4
- package/dist/esm/__tests__/batching.test.js +5 -5
- package/dist/esm/__tests__/batching.test.js.map +1 -1
- package/dist/esm/__tests__/entities.test.js +1 -1
- package/dist/esm/__tests__/entities.test.js.map +1 -1
- package/dist/esm/__tests__/fixtures/testStorage.d.ts +1 -3
- package/dist/esm/__tests__/fixtures/testStorage.js +3 -3
- package/dist/esm/__tests__/fixtures/testStorage.js.map +1 -1
- package/dist/esm/__tests__/queries.test.js.map +1 -1
- package/dist/esm/backup.d.ts +3 -4
- package/dist/esm/backup.js.map +1 -1
- package/dist/esm/client/Client.d.ts +28 -33
- package/dist/esm/client/Client.js +50 -161
- package/dist/esm/client/Client.js.map +1 -1
- package/dist/esm/client/ClientDescriptor.d.ts +8 -11
- package/dist/esm/client/ClientDescriptor.js +39 -141
- package/dist/esm/client/ClientDescriptor.js.map +1 -1
- package/dist/esm/context/Time.d.ts +13 -0
- package/dist/esm/context/Time.js +27 -0
- package/dist/esm/context/Time.js.map +1 -0
- package/dist/esm/context/context.d.ts +170 -0
- package/dist/esm/{context.js.map → context/context.js.map} +1 -1
- package/dist/esm/entities/DocumentManager.js.map +1 -1
- package/dist/esm/entities/Entity.d.ts +4 -5
- package/dist/esm/entities/Entity.js +5 -3
- package/dist/esm/entities/Entity.js.map +1 -1
- package/dist/esm/entities/Entity.test.js +4 -3
- package/dist/esm/entities/Entity.test.js.map +1 -1
- package/dist/esm/entities/EntityCache.d.ts +0 -3
- package/dist/esm/entities/EntityCache.js +0 -9
- package/dist/esm/entities/EntityCache.js.map +1 -1
- package/dist/esm/entities/EntityMetadata.d.ts +1 -1
- package/dist/esm/entities/EntityMetadata.js +6 -5
- package/dist/esm/entities/EntityMetadata.js.map +1 -1
- package/dist/esm/entities/EntityStore.d.ts +2 -6
- package/dist/esm/entities/EntityStore.js +22 -16
- package/dist/esm/entities/EntityStore.js.map +1 -1
- package/dist/esm/entities/OperationBatcher.d.ts +2 -5
- package/dist/esm/entities/OperationBatcher.js +9 -7
- package/dist/esm/entities/OperationBatcher.js.map +1 -1
- package/dist/esm/errors.d.ts +8 -0
- package/dist/esm/errors.js +12 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/files/EntityFile.d.ts +6 -3
- package/dist/esm/files/EntityFile.js +22 -19
- package/dist/esm/files/EntityFile.js.map +1 -1
- package/dist/esm/files/FileManager.d.ts +8 -39
- package/dist/esm/files/FileManager.js +15 -170
- package/dist/esm/files/FileManager.js.map +1 -1
- package/dist/esm/files/utils.d.ts +0 -1
- package/dist/esm/files/utils.js +0 -14
- package/dist/esm/files/utils.js.map +1 -1
- package/dist/esm/index.d.ts +1 -2
- package/dist/esm/index.js +0 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/{metadata → persistence}/MessageCreator.d.ts +5 -6
- package/dist/esm/{metadata → persistence}/MessageCreator.js +31 -38
- package/dist/esm/persistence/MessageCreator.js.map +1 -0
- package/dist/esm/persistence/PersistenceFiles.d.ts +48 -0
- package/dist/esm/persistence/PersistenceFiles.js +160 -0
- package/dist/esm/persistence/PersistenceFiles.js.map +1 -0
- package/dist/esm/persistence/PersistenceMetadata.d.ts +69 -0
- package/dist/esm/persistence/PersistenceMetadata.js +302 -0
- package/dist/esm/persistence/PersistenceMetadata.js.map +1 -0
- package/dist/esm/persistence/PersistenceQueries.d.ts +34 -0
- package/dist/esm/persistence/PersistenceQueries.js +15 -0
- package/dist/esm/persistence/PersistenceQueries.js.map +1 -0
- package/dist/esm/persistence/PersistenceRebaser.d.ts +32 -0
- package/dist/esm/persistence/PersistenceRebaser.js +120 -0
- package/dist/esm/persistence/PersistenceRebaser.js.map +1 -0
- package/dist/esm/{IDBService.d.ts → persistence/idb/IdbService.d.ts} +9 -7
- package/dist/esm/{IDBService.js → persistence/idb/IdbService.js} +29 -8
- package/dist/esm/persistence/idb/IdbService.js.map +1 -0
- package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.d.ts +58 -0
- package/dist/esm/{files/FileStorage.js → persistence/idb/files/IdbPersistenceFileDb.js} +85 -50
- package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.js.map +1 -0
- package/dist/esm/persistence/idb/idbPersistence.d.ts +19 -0
- package/dist/esm/persistence/idb/idbPersistence.js +80 -0
- package/dist/esm/persistence/idb/idbPersistence.js.map +1 -0
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.d.ts +72 -0
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js +235 -0
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js.map +1 -0
- package/dist/esm/{metadata → persistence/idb/metadata}/openMetadataDatabase.d.ts +3 -1
- package/dist/esm/{metadata → persistence/idb/metadata}/openMetadataDatabase.js +12 -3
- package/dist/esm/persistence/idb/metadata/openMetadataDatabase.js.map +1 -0
- package/dist/esm/persistence/idb/queries/IdbQueryDb.d.ts +41 -0
- package/dist/esm/persistence/idb/queries/IdbQueryDb.js +174 -0
- package/dist/esm/persistence/idb/queries/IdbQueryDb.js.map +1 -0
- package/dist/esm/{migration → persistence/idb/queries/migration}/db.d.ts +1 -1
- package/dist/esm/{migration → persistence/idb/queries/migration}/db.js +10 -48
- package/dist/esm/persistence/idb/queries/migration/db.js.map +1 -0
- package/dist/esm/persistence/idb/queries/migration/engine.d.ts +12 -0
- package/dist/esm/{migration → persistence/idb/queries/migration}/engine.js +29 -46
- package/dist/esm/persistence/idb/queries/migration/engine.js.map +1 -0
- package/dist/esm/{migration → persistence/idb/queries/migration}/migrations.d.ts +1 -3
- package/dist/esm/{migration → persistence/idb/queries/migration}/migrations.js +11 -10
- package/dist/esm/persistence/idb/queries/migration/migrations.js.map +1 -0
- package/dist/esm/{migration → persistence/idb/queries/migration}/openQueryDatabase.d.ts +1 -3
- package/dist/esm/{migration → persistence/idb/queries/migration}/openQueryDatabase.js +4 -7
- package/dist/esm/persistence/idb/queries/migration/openQueryDatabase.js.map +1 -0
- package/dist/esm/{migration → persistence/idb/queries/migration}/paths.js +2 -2
- package/dist/esm/persistence/idb/queries/migration/paths.js.map +1 -0
- package/dist/esm/persistence/idb/queries/migration/paths.test.js.map +1 -0
- package/dist/esm/persistence/idb/queries/migration/types.d.ts +6 -0
- package/dist/esm/persistence/idb/queries/migration/types.js.map +1 -0
- package/dist/esm/persistence/idb/queries/ranges.d.ts +2 -0
- package/dist/esm/persistence/idb/queries/ranges.js +66 -0
- package/dist/esm/persistence/idb/queries/ranges.js.map +1 -0
- package/dist/esm/{idb.d.ts → persistence/idb/util.d.ts} +11 -0
- package/dist/esm/{idb.js → persistence/idb/util.js} +58 -1
- package/dist/esm/persistence/idb/util.js.map +1 -0
- package/dist/esm/persistence/interfaces.d.ts +181 -0
- package/dist/esm/persistence/interfaces.js +2 -0
- package/dist/esm/persistence/interfaces.js.map +1 -0
- package/dist/esm/persistence/persistence.d.ts +4 -0
- package/dist/esm/persistence/persistence.js +126 -0
- package/dist/esm/persistence/persistence.js.map +1 -0
- package/dist/esm/queries/BaseQuery.d.ts +2 -1
- package/dist/esm/queries/BaseQuery.js +3 -0
- package/dist/esm/queries/BaseQuery.js.map +1 -1
- package/dist/esm/queries/CollectionQueries.d.ts +1 -1
- package/dist/esm/queries/FindAllQuery.js +1 -3
- package/dist/esm/queries/FindAllQuery.js.map +1 -1
- package/dist/esm/queries/FindInfiniteQuery.js +2 -5
- package/dist/esm/queries/FindInfiniteQuery.js.map +1 -1
- package/dist/esm/queries/FindOneQuery.js +1 -3
- package/dist/esm/queries/FindOneQuery.js.map +1 -1
- package/dist/esm/queries/FindPageQuery.js +1 -3
- package/dist/esm/queries/FindPageQuery.js.map +1 -1
- package/dist/esm/queries/QueryCache.d.ts +1 -1
- package/dist/esm/queries/QueryCache.js +4 -0
- package/dist/esm/queries/QueryCache.js.map +1 -1
- package/dist/esm/sync/FileSync.d.ts +23 -8
- package/dist/esm/sync/FileSync.js +76 -28
- package/dist/esm/sync/FileSync.js.map +1 -1
- package/dist/esm/sync/PresenceManager.d.ts +4 -3
- package/dist/esm/sync/PresenceManager.js +2 -2
- package/dist/esm/sync/PresenceManager.js.map +1 -1
- package/dist/esm/sync/PushPullSync.d.ts +4 -6
- package/dist/esm/sync/PushPullSync.js +13 -12
- package/dist/esm/sync/PushPullSync.js.map +1 -1
- package/dist/esm/sync/Sync.d.ts +9 -11
- package/dist/esm/sync/Sync.js +34 -29
- package/dist/esm/sync/Sync.js.map +1 -1
- package/dist/esm/sync/WebSocketSync.d.ts +4 -6
- package/dist/esm/sync/WebSocketSync.js +20 -22
- package/dist/esm/sync/WebSocketSync.js.map +1 -1
- package/dist/esm/utils/Disposable.d.ts +5 -2
- package/dist/esm/utils/Disposable.js +3 -2
- package/dist/esm/utils/Disposable.js.map +1 -1
- package/dist/esm/utils/wip.d.ts +2 -0
- package/dist/esm/utils/wip.js +5 -0
- package/dist/esm/utils/wip.js.map +1 -0
- package/package.json +2 -2
- package/src/__tests__/batching.test.ts +6 -6
- package/src/__tests__/entities.test.ts +1 -1
- package/src/__tests__/fixtures/testStorage.ts +2 -10
- package/src/__tests__/queries.test.ts +1 -1
- package/src/backup.ts +3 -4
- package/src/client/Client.ts +69 -226
- package/src/client/ClientDescriptor.ts +53 -184
- package/src/context/Time.ts +35 -0
- package/src/context/context.ts +200 -0
- package/src/entities/DocumentManager.ts +0 -3
- package/src/entities/Entity.test.ts +9 -9
- package/src/entities/Entity.ts +6 -12
- package/src/entities/EntityCache.ts +0 -9
- package/src/entities/EntityMetadata.ts +4 -4
- package/src/entities/EntityStore.ts +26 -29
- package/src/entities/OperationBatcher.ts +9 -11
- package/src/errors.ts +13 -0
- package/src/files/EntityFile.ts +16 -5
- package/src/files/FileManager.ts +18 -245
- package/src/files/utils.ts +0 -15
- package/src/index.ts +2 -1
- package/src/{metadata → persistence}/MessageCreator.ts +46 -36
- package/src/persistence/PersistenceFiles.ts +227 -0
- package/src/persistence/PersistenceMetadata.ts +425 -0
- package/src/persistence/PersistenceQueries.ts +22 -0
- package/src/persistence/PersistenceRebaser.ts +171 -0
- package/src/{IDBService.ts → persistence/idb/IdbService.ts} +45 -12
- package/src/{files/FileStorage.ts → persistence/idb/files/IdbPersistenceFileDb.ts} +128 -86
- package/src/persistence/idb/idbPersistence.ts +116 -0
- package/src/persistence/idb/metadata/IdbMetadataDb.ts +460 -0
- package/src/{metadata → persistence/idb/metadata}/openMetadataDatabase.ts +21 -4
- package/src/persistence/idb/queries/IdbQueryDb.ts +251 -0
- package/src/{migration → persistence/idb/queries/migration}/db.ts +18 -72
- package/src/{migration → persistence/idb/queries/migration}/engine.ts +39 -62
- package/src/{migration → persistence/idb/queries/migration}/migrations.ts +13 -18
- package/src/{migration → persistence/idb/queries/migration}/openQueryDatabase.ts +5 -14
- package/src/{migration → persistence/idb/queries/migration}/paths.ts +4 -3
- package/src/persistence/idb/queries/migration/types.ts +8 -0
- package/src/persistence/idb/queries/ranges.ts +107 -0
- package/src/{idb.ts → persistence/idb/util.ts} +75 -0
- package/src/persistence/interfaces.ts +240 -0
- package/src/persistence/persistence.ts +223 -0
- package/src/queries/BaseQuery.ts +5 -1
- package/src/queries/CollectionQueries.ts +2 -2
- package/src/queries/FindAllQuery.ts +1 -3
- package/src/queries/FindInfiniteQuery.ts +2 -5
- package/src/queries/FindOneQuery.ts +1 -3
- package/src/queries/FindPageQuery.ts +1 -3
- package/src/queries/QueryCache.ts +20 -1
- package/src/sync/FileSync.ts +93 -30
- package/src/sync/PresenceManager.ts +5 -7
- package/src/sync/PushPullSync.ts +23 -19
- package/src/sync/Sync.ts +45 -36
- package/src/sync/WebSocketSync.ts +41 -27
- package/src/utils/Disposable.ts +7 -4
- package/src/utils/wip.ts +5 -0
- package/dist/esm/IDBService.js.map +0 -1
- package/dist/esm/__tests__/legacyOids.test.d.ts +0 -1
- package/dist/esm/__tests__/legacyOids.test.js +0 -352
- package/dist/esm/__tests__/legacyOids.test.js.map +0 -1
- package/dist/esm/context.d.ts +0 -45
- package/dist/esm/files/FileStorage.d.ts +0 -47
- package/dist/esm/files/FileStorage.js.map +0 -1
- package/dist/esm/idb.js.map +0 -1
- package/dist/esm/metadata/AckInfoStore.d.ts +0 -10
- package/dist/esm/metadata/AckInfoStore.js +0 -22
- package/dist/esm/metadata/AckInfoStore.js.map +0 -1
- package/dist/esm/metadata/BaselinesStore.d.ts +0 -40
- package/dist/esm/metadata/BaselinesStore.js +0 -102
- package/dist/esm/metadata/BaselinesStore.js.map +0 -1
- package/dist/esm/metadata/LocalReplicaStore.d.ts +0 -19
- package/dist/esm/metadata/LocalReplicaStore.js +0 -56
- package/dist/esm/metadata/LocalReplicaStore.js.map +0 -1
- package/dist/esm/metadata/MessageCreator.js.map +0 -1
- package/dist/esm/metadata/Metadata.d.ts +0 -146
- package/dist/esm/metadata/Metadata.js +0 -452
- package/dist/esm/metadata/Metadata.js.map +0 -1
- package/dist/esm/metadata/OperationsStore.d.ts +0 -62
- package/dist/esm/metadata/OperationsStore.js +0 -175
- package/dist/esm/metadata/OperationsStore.js.map +0 -1
- package/dist/esm/metadata/SchemaStore.d.ts +0 -9
- package/dist/esm/metadata/SchemaStore.js +0 -35
- package/dist/esm/metadata/SchemaStore.js.map +0 -1
- package/dist/esm/metadata/openMetadataDatabase.js.map +0 -1
- package/dist/esm/migration/db.js.map +0 -1
- package/dist/esm/migration/engine.d.ts +0 -15
- package/dist/esm/migration/engine.js.map +0 -1
- package/dist/esm/migration/errors.d.ts +0 -5
- package/dist/esm/migration/errors.js +0 -8
- package/dist/esm/migration/errors.js.map +0 -1
- package/dist/esm/migration/migrations.js.map +0 -1
- package/dist/esm/migration/openQueryDatabase.js.map +0 -1
- package/dist/esm/migration/openWIPDatabase.d.ts +0 -11
- package/dist/esm/migration/openWIPDatabase.js +0 -65
- package/dist/esm/migration/openWIPDatabase.js.map +0 -1
- package/dist/esm/migration/paths.js.map +0 -1
- package/dist/esm/migration/paths.test.js.map +0 -1
- package/dist/esm/migration/types.d.ts +0 -3
- package/dist/esm/migration/types.js.map +0 -1
- package/dist/esm/queries/QueryableStorage.d.ts +0 -20
- package/dist/esm/queries/QueryableStorage.js +0 -90
- package/dist/esm/queries/QueryableStorage.js.map +0 -1
- package/dist/esm/queries/dbQueries.d.ts +0 -22
- package/dist/esm/queries/dbQueries.js +0 -130
- package/dist/esm/queries/dbQueries.js.map +0 -1
- package/src/__tests__/legacyOids.test.ts +0 -375
- package/src/context.ts +0 -55
- package/src/metadata/AckInfoStore.ts +0 -30
- package/src/metadata/BaselinesStore.ts +0 -188
- package/src/metadata/LocalReplicaStore.ts +0 -79
- package/src/metadata/Metadata.ts +0 -685
- package/src/metadata/OperationsStore.ts +0 -332
- package/src/metadata/SchemaStore.ts +0 -47
- package/src/migration/errors.ts +0 -7
- package/src/migration/openWIPDatabase.ts +0 -97
- package/src/migration/types.ts +0 -4
- package/src/queries/QueryableStorage.ts +0 -122
- package/src/queries/dbQueries.ts +0 -161
- /package/dist/esm/{context.js → context/context.js} +0 -0
- /package/dist/esm/{migration → persistence/idb/queries/migration}/paths.d.ts +0 -0
- /package/dist/esm/{migration → persistence/idb/queries/migration}/paths.test.d.ts +0 -0
- /package/dist/esm/{migration → persistence/idb/queries/migration}/paths.test.js +0 -0
- /package/dist/esm/{migration → persistence/idb/queries/migration}/types.js +0 -0
- /package/src/{migration → persistence/idb/queries/migration}/paths.test.ts +0 -0
|
@@ -1,33 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export async function getDatabaseVersion(indexedDB, namespace
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const transaction = request.transaction;
|
|
10
|
-
database = request.result;
|
|
11
|
-
transaction.abort();
|
|
12
|
-
};
|
|
13
|
-
request.onsuccess = (event) => {
|
|
14
|
-
resolve([request.result.version, request.result]);
|
|
15
|
-
};
|
|
16
|
-
request.onblocked = (event) => {
|
|
17
|
-
// retry if blocked
|
|
18
|
-
log === null || log === void 0 ? void 0 : log('Database blocked, waiting...');
|
|
19
|
-
// setTimeout(() => {
|
|
20
|
-
// openAndGetVersion(resolve, reject);
|
|
21
|
-
// }, 200);
|
|
22
|
-
};
|
|
23
|
-
request.onerror = (event) => {
|
|
24
|
-
// FIXME: this fails if the code is older than the local database
|
|
25
|
-
resolve([currentVersion, database]);
|
|
26
|
-
};
|
|
1
|
+
import { globalIDB, storeRequestPromise, openDatabase as baseOpenDatabase, getDocumentDbName, } from '../../util.js';
|
|
2
|
+
export async function getDatabaseVersion(indexedDB, namespace) {
|
|
3
|
+
var _a;
|
|
4
|
+
const databaseName = getDocumentDbName(namespace);
|
|
5
|
+
const dbInfo = await indexedDB.databases();
|
|
6
|
+
const existingDb = dbInfo.find((info) => info.name === databaseName);
|
|
7
|
+
if (existingDb) {
|
|
8
|
+
return (_a = existingDb.version) !== null && _a !== void 0 ? _a : 0;
|
|
27
9
|
}
|
|
28
|
-
|
|
29
|
-
await closeDatabase(db);
|
|
30
|
-
return currentVersion;
|
|
10
|
+
return 0;
|
|
31
11
|
}
|
|
32
12
|
/**
|
|
33
13
|
* Upgrades the database to the given version, using the given upgrader function.
|
|
@@ -72,25 +52,7 @@ export async function acquireLock(namespace, procedure) {
|
|
|
72
52
|
}
|
|
73
53
|
export async function openDatabase({ indexedDB = globalIDB, namespace, version, context, }) {
|
|
74
54
|
context.log('debug', 'Opening database', namespace, 'at version', version);
|
|
75
|
-
const db = await
|
|
76
|
-
const request = indexedDB.open([namespace, 'collections'].join('_'), version);
|
|
77
|
-
request.onupgradeneeded = async (event) => {
|
|
78
|
-
const transaction = request.transaction;
|
|
79
|
-
transaction.abort();
|
|
80
|
-
context.log('error', 'Database upgrade needed, but not expected', 'Expected', version, 'Got', request.result.version);
|
|
81
|
-
reject(request.error ||
|
|
82
|
-
new Error(`Migration error: database version changed unexpectedly when reading current data. Expected ${version}, got ${request.result.version}`));
|
|
83
|
-
};
|
|
84
|
-
request.onsuccess = (event) => {
|
|
85
|
-
resolve(request.result);
|
|
86
|
-
};
|
|
87
|
-
request.onblocked = (event) => {
|
|
88
|
-
reject(new Error('Migration error: database blocked'));
|
|
89
|
-
};
|
|
90
|
-
request.onerror = (event) => {
|
|
91
|
-
reject(new Error('Migration error: database error'));
|
|
92
|
-
};
|
|
93
|
-
});
|
|
55
|
+
const db = await baseOpenDatabase(getDocumentDbName(namespace), version, indexedDB);
|
|
94
56
|
db.addEventListener('versionchange', (event) => {
|
|
95
57
|
db.close();
|
|
96
58
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../../../../src/persistence/idb/queries/migration/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Migration, MigrationEngine } from '@verdant-web/common';
|
|
2
|
+
import { OpenDocumentDbContext } from './types.js';
|
|
3
|
+
export declare function getMigrationEngine({ migration, context, queryDb, }: {
|
|
4
|
+
log?: (...args: any[]) => void;
|
|
5
|
+
migration: Migration;
|
|
6
|
+
context: OpenDocumentDbContext;
|
|
7
|
+
queryDb: IDBDatabase;
|
|
8
|
+
}): MigrationEngine;
|
|
9
|
+
export declare function getInitialMigrationEngine({ migration, context, }: {
|
|
10
|
+
context: OpenDocumentDbContext;
|
|
11
|
+
migration: Migration;
|
|
12
|
+
}): MigrationEngine;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { addFieldDefaults, assert, assignOidsToAllSubObjects, cloneDeep, createOid, diffToPatches, getOid,
|
|
2
|
-
import {
|
|
3
|
-
function getMigrationMutations({ migration,
|
|
1
|
+
import { addFieldDefaults, assert, assignOidsToAllSubObjects, cloneDeep, createOid, diffToPatches, getOid, removeOidPropertiesFromAllSubObjects, } from '@verdant-web/common';
|
|
2
|
+
import { IdbQueryDb } from '../IdbQueryDb.js';
|
|
3
|
+
function getMigrationMutations({ migration, newOids, ctx, }) {
|
|
4
4
|
return migration.allCollections.reduce((acc, collectionName) => {
|
|
5
5
|
acc[collectionName] = {
|
|
6
6
|
put: async (doc, options) => {
|
|
@@ -9,60 +9,53 @@ function getMigrationMutations({ migration, meta, getMigrationNow, newOids, }) {
|
|
|
9
9
|
const primaryKey = doc[migration.newSchema.collections[collectionName].primaryKey];
|
|
10
10
|
const oid = createOid(collectionName, primaryKey);
|
|
11
11
|
newOids.push(oid);
|
|
12
|
-
await
|
|
13
|
-
|
|
12
|
+
await ctx.time.withMigrationTime(migration.version, () => ctx.meta.insertData({
|
|
13
|
+
operations: ctx.patchCreator.createInitialize(doc, oid, options === null || options === void 0 ? void 0 : options.access),
|
|
14
|
+
isLocal: true,
|
|
14
15
|
}));
|
|
15
16
|
return doc;
|
|
16
17
|
},
|
|
17
18
|
delete: async (id) => {
|
|
18
19
|
const rootOid = createOid(collectionName, id);
|
|
19
|
-
|
|
20
|
-
const allOids = await meta.getAllDocumentRelatedOids(rootOid);
|
|
21
|
-
return meta.insertLocalOperations(allOids.map((oid) => ({
|
|
22
|
-
oid,
|
|
23
|
-
timestamp: getMigrationNow(),
|
|
24
|
-
data: { op: 'delete' },
|
|
25
|
-
authz,
|
|
26
|
-
})));
|
|
20
|
+
await ctx.time.withMigrationTime(migration.version, () => ctx.meta.deleteDocument(rootOid));
|
|
27
21
|
},
|
|
28
22
|
};
|
|
29
23
|
return acc;
|
|
30
24
|
}, {});
|
|
31
25
|
}
|
|
32
|
-
function getMigrationQueries({ migration, context,
|
|
26
|
+
function getMigrationQueries({ migration, context, queryDb, }) {
|
|
27
|
+
const queries = new IdbQueryDb(queryDb, context);
|
|
33
28
|
return migration.oldCollections.reduce((acc, collectionName) => {
|
|
34
29
|
acc[collectionName] = {
|
|
35
30
|
get: async (id) => {
|
|
36
31
|
const oid = createOid(collectionName, id);
|
|
37
|
-
const doc = await meta.getDocumentSnapshot(oid, {
|
|
32
|
+
const doc = await context.meta.getDocumentSnapshot(oid, {
|
|
38
33
|
// only get the snapshot up to the previous version (newer operations may have synced)
|
|
39
|
-
to:
|
|
34
|
+
to: context.time.nowWithVersion(migration.oldSchema.version),
|
|
40
35
|
});
|
|
41
36
|
return doc;
|
|
42
37
|
},
|
|
43
38
|
findOne: async (filter) => {
|
|
44
|
-
const oid = await findOneOid({
|
|
39
|
+
const oid = await queries.findOneOid({
|
|
45
40
|
collection: collectionName,
|
|
46
41
|
index: filter,
|
|
47
|
-
context,
|
|
48
42
|
});
|
|
49
43
|
if (!oid)
|
|
50
44
|
return null;
|
|
51
|
-
const doc = await meta.getDocumentSnapshot(oid, {
|
|
45
|
+
const doc = await context.meta.getDocumentSnapshot(oid, {
|
|
52
46
|
// only get the snapshot up to the previous version (newer operations may have synced)
|
|
53
|
-
to:
|
|
47
|
+
to: context.time.nowWithVersion(migration.oldSchema.version),
|
|
54
48
|
});
|
|
55
49
|
return doc;
|
|
56
50
|
},
|
|
57
51
|
findAll: async (filter) => {
|
|
58
|
-
const oids = await findAllOids({
|
|
52
|
+
const { result: oids } = await queries.findAllOids({
|
|
59
53
|
collection: collectionName,
|
|
60
54
|
index: filter,
|
|
61
|
-
context,
|
|
62
55
|
});
|
|
63
|
-
const docs = await Promise.all(oids.map((oid) => meta.getDocumentSnapshot(oid, {
|
|
56
|
+
const docs = await Promise.all(oids.map((oid) => context.meta.getDocumentSnapshot(oid, {
|
|
64
57
|
// only get the snapshot up to the previous version (newer operations may have synced)
|
|
65
|
-
to:
|
|
58
|
+
to: context.time.nowWithVersion(migration.oldSchema.version),
|
|
66
59
|
})));
|
|
67
60
|
return docs;
|
|
68
61
|
},
|
|
@@ -70,29 +63,20 @@ function getMigrationQueries({ migration, context, meta, }) {
|
|
|
70
63
|
return acc;
|
|
71
64
|
}, {});
|
|
72
65
|
}
|
|
73
|
-
export function getMigrationEngine({
|
|
74
|
-
function getMigrationNow() {
|
|
75
|
-
return meta.time.zero(migration.version);
|
|
76
|
-
}
|
|
66
|
+
export function getMigrationEngine({ migration, context, queryDb, }) {
|
|
77
67
|
const newOids = new Array();
|
|
78
68
|
const queries = getMigrationQueries({
|
|
79
69
|
migration,
|
|
80
70
|
context,
|
|
81
|
-
|
|
71
|
+
queryDb,
|
|
82
72
|
});
|
|
83
73
|
const mutations = getMigrationMutations({
|
|
84
74
|
migration,
|
|
85
|
-
getMigrationNow,
|
|
86
75
|
newOids,
|
|
87
|
-
|
|
76
|
+
ctx: context,
|
|
88
77
|
});
|
|
89
78
|
const deleteCollection = async (collection) => {
|
|
90
|
-
|
|
91
|
-
return meta.insertLocalOperations(allOids.map((oid) => ({
|
|
92
|
-
oid,
|
|
93
|
-
timestamp: getMigrationNow(),
|
|
94
|
-
data: { op: 'delete' },
|
|
95
|
-
})));
|
|
79
|
+
await context.meta.deleteCollection(collection);
|
|
96
80
|
};
|
|
97
81
|
const awaitables = new Array();
|
|
98
82
|
const engine = {
|
|
@@ -108,7 +92,7 @@ export function getMigrationEngine({ meta, migration, context, }) {
|
|
|
108
92
|
// when the snapshots themselves are derived from the same data...)
|
|
109
93
|
// maybe don't use the findAll query, and instead go a level
|
|
110
94
|
// lower to retain access to lower level data here?
|
|
111
|
-
const authz = await meta.getDocumentAuthz(rootOid);
|
|
95
|
+
const authz = await context.meta.getDocumentAuthz(rootOid);
|
|
112
96
|
const original = cloneDeep(doc);
|
|
113
97
|
// @ts-ignore - excessive type resolution
|
|
114
98
|
const newValue = await strategy(doc);
|
|
@@ -119,12 +103,15 @@ export function getMigrationEngine({ meta, migration, context, }) {
|
|
|
119
103
|
removeOidPropertiesFromAllSubObjects(original);
|
|
120
104
|
removeOidPropertiesFromAllSubObjects(newValue);
|
|
121
105
|
assignOidsToAllSubObjects(newValue);
|
|
122
|
-
const patches = diffToPatches(original, newValue,
|
|
106
|
+
const patches = diffToPatches(original, newValue, () => context.time.zeroWithVersion(migration.version), undefined, [], {
|
|
123
107
|
mergeUnknownObjects: true,
|
|
124
108
|
authz,
|
|
125
109
|
});
|
|
126
110
|
if (patches.length > 0) {
|
|
127
|
-
await meta.
|
|
111
|
+
await context.meta.insertData({
|
|
112
|
+
operations: patches,
|
|
113
|
+
isLocal: true,
|
|
114
|
+
});
|
|
128
115
|
}
|
|
129
116
|
}
|
|
130
117
|
}));
|
|
@@ -135,10 +122,7 @@ export function getMigrationEngine({ meta, migration, context, }) {
|
|
|
135
122
|
};
|
|
136
123
|
return engine;
|
|
137
124
|
}
|
|
138
|
-
export function getInitialMigrationEngine({
|
|
139
|
-
function getMigrationNow() {
|
|
140
|
-
return meta.time.zero(migration.version);
|
|
141
|
-
}
|
|
125
|
+
export function getInitialMigrationEngine({ migration, context, }) {
|
|
142
126
|
const newOids = new Array();
|
|
143
127
|
const queries = new Proxy({}, {
|
|
144
128
|
get() {
|
|
@@ -147,9 +131,8 @@ export function getInitialMigrationEngine({ meta, migration, context, }) {
|
|
|
147
131
|
});
|
|
148
132
|
const mutations = getMigrationMutations({
|
|
149
133
|
migration,
|
|
150
|
-
getMigrationNow,
|
|
151
134
|
newOids,
|
|
152
|
-
|
|
135
|
+
ctx: context,
|
|
153
136
|
});
|
|
154
137
|
const engine = {
|
|
155
138
|
log: context.log,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../../../src/persistence/idb/queries/migration/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { Migration } from '@verdant-web/common';
|
|
2
|
-
import { Metadata } from '../metadata/Metadata.js';
|
|
3
2
|
import { OpenDocumentDbContext } from './types.js';
|
|
4
|
-
export declare function runMigrations({ context, toRun,
|
|
3
|
+
export declare function runMigrations({ context, toRun, indexedDB, namespace, }: {
|
|
5
4
|
context: OpenDocumentDbContext;
|
|
6
5
|
toRun: Migration<any>[];
|
|
7
|
-
meta: Metadata;
|
|
8
6
|
indexedDB?: IDBFactory;
|
|
9
7
|
/** This namespace value controls where the database being migrated is. */
|
|
10
8
|
namespace?: string;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createOid, decomposeOid, getIndexValues, getOidRoot, } from '@verdant-web/common';
|
|
2
2
|
import { acquireLock, openDatabase, upgradeDatabase } from './db.js';
|
|
3
3
|
import { getInitialMigrationEngine, getMigrationEngine } from './engine.js';
|
|
4
|
-
import { closeDatabase } from '
|
|
4
|
+
import { closeDatabase } from '../../util.js';
|
|
5
5
|
const globalIDB = typeof window !== 'undefined' ? window.indexedDB : undefined;
|
|
6
|
-
export async function runMigrations({ context, toRun,
|
|
6
|
+
export async function runMigrations({ context, toRun, indexedDB = globalIDB, namespace = context.namespace, }) {
|
|
7
7
|
await acquireLock(namespace, async () => {
|
|
8
8
|
// now the fun part
|
|
9
9
|
for (const migration of toRun) {
|
|
@@ -13,7 +13,6 @@ export async function runMigrations({ context, toRun, meta, indexedDB = globalID
|
|
|
13
13
|
// migrations from 0 (i.e. initial migrations) don't attempt to open an existing db
|
|
14
14
|
if (migration.oldSchema.version === 0) {
|
|
15
15
|
engine = getInitialMigrationEngine({
|
|
16
|
-
meta,
|
|
17
16
|
migration,
|
|
18
17
|
context,
|
|
19
18
|
});
|
|
@@ -30,9 +29,9 @@ export async function runMigrations({ context, toRun, meta, indexedDB = globalID
|
|
|
30
29
|
});
|
|
31
30
|
// this will only write to our metadata store via operations!
|
|
32
31
|
engine = getMigrationEngine({
|
|
33
|
-
meta,
|
|
34
32
|
migration,
|
|
35
|
-
context
|
|
33
|
+
context,
|
|
34
|
+
queryDb: originalDatabase,
|
|
36
35
|
});
|
|
37
36
|
try {
|
|
38
37
|
await migration.migrate(engine);
|
|
@@ -75,9 +74,9 @@ export async function runMigrations({ context, toRun, meta, indexedDB = globalID
|
|
|
75
74
|
* would be missing from findAll and findOne queries.
|
|
76
75
|
*/
|
|
77
76
|
const docsWithUnappliedMigrations = await getDocsWithUnappliedMigrations({
|
|
78
|
-
meta,
|
|
79
77
|
currentVersion: migration.oldSchema.version,
|
|
80
78
|
newVersion: migration.newSchema.version,
|
|
79
|
+
ctx: context,
|
|
81
80
|
});
|
|
82
81
|
// once the schema is ready, we can write back the migrated documents
|
|
83
82
|
for (const collection of migration.allCollections) {
|
|
@@ -112,7 +111,7 @@ export async function runMigrations({ context, toRun, meta, indexedDB = globalID
|
|
|
112
111
|
// );
|
|
113
112
|
const snapshots = await Promise.all(oids.map(async (oid) => {
|
|
114
113
|
try {
|
|
115
|
-
const snap = await meta.getDocumentSnapshot(oid);
|
|
114
|
+
const snap = await context.meta.getDocumentSnapshot(oid);
|
|
116
115
|
return [oid, snap];
|
|
117
116
|
}
|
|
118
117
|
catch (e) {
|
|
@@ -200,13 +199,15 @@ async function putView(store, view) {
|
|
|
200
199
|
* that were not applied to their queryable snapshots because they were in the
|
|
201
200
|
* future. These documents need to be refreshed in storage.
|
|
202
201
|
*/
|
|
203
|
-
async function getDocsWithUnappliedMigrations({
|
|
202
|
+
async function getDocsWithUnappliedMigrations({ currentVersion, newVersion: _, ctx, }) {
|
|
204
203
|
// scan for all operations in metadata after the current version.
|
|
205
204
|
// this could be more efficient if also filtering below or equal newVersion but
|
|
206
205
|
// that seems so unlikely in practice...
|
|
207
206
|
const unappliedOperations = [];
|
|
208
|
-
await meta.
|
|
209
|
-
|
|
207
|
+
await ctx.meta.iterateAllOperations((op) => {
|
|
208
|
+
unappliedOperations.push(op);
|
|
209
|
+
}, {
|
|
210
|
+
from: ctx.time.zeroWithVersion(currentVersion + 1),
|
|
210
211
|
});
|
|
211
212
|
return Array.from(new Set(unappliedOperations.map((op) => getOidRoot(op.oid))));
|
|
212
213
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../../../../src/persistence/idb/queries/migration/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,SAAS,EACT,YAAY,EACZ,cAAc,EACd,UAAU,GACV,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,SAAS,GACd,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAE,SAAiB,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EACnC,OAAO,EACP,KAAK,EACL,SAAS,GAAG,SAAS,EACrB,SAAS,GAAG,OAAO,CAAC,SAAS,GAO7B;IACA,MAAM,WAAW,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QACvC,mBAAmB;QACnB,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;YAC/B,qFAAqF;YACrF,4BAA4B;YAC5B,IAAI,MAAuB,CAAC;YAC5B,mFAAmF;YACnF,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;gBACvC,MAAM,GAAG,yBAAyB,CAAC;oBAClC,SAAS;oBACT,OAAO;iBACP,CAAC,CAAC;gBACH,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACP,mFAAmF;gBACnF,6CAA6C;gBAC7C,MAAM,gBAAgB,GAAG,MAAM,YAAY,CAAC;oBAC3C,SAAS;oBACT,SAAS;oBACT,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,OAAO;oBACpC,OAAO;iBACP,CAAC,CAAC;gBAEH,6DAA6D;gBAC7D,MAAM,GAAG,kBAAkB,CAAC;oBAC3B,SAAS;oBACT,OAAO;oBACP,OAAO,EAAE,gBAAgB;iBACzB,CAAC,CAAC;gBACH,IAAI,CAAC;oBACJ,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAChC,uDAAuD;oBACvD,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACtC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CACV,UAAU,EACV,qBAAqB,SAAS,CAAC,SAAS,CAAC,OAAO,OAAO,SAAS,CAAC,SAAS,CAAC,OAAO,GAAG,EACrF,GAAG,CACH,CAAC;oBACF,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;wBAC1B,MAAM,GAAG,CAAC;oBACX,CAAC;yBAAM,CAAC;wBACP,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;oBACnD,CAAC;gBACF,CAAC;gBAED,mEAAmE;gBACnE,0DAA0D;gBAC1D,MAAM,aAAa,CAAC,gBAAgB,CAAC,CAAC;YACvC,CAAC;YAED,OAAO,CAAC,GAAG,CACV,OAAO,EACP,oBAAoB,EACpB,SAAS,EACT,YAAY,EACZ,SAAS,CAAC,SAAS,CAAC,OAAO,CAC3B,CAAC;YACF,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC;gBACpD,SAAS;gBACT,SAAS;gBACT,SAAS;gBACT,OAAO;aACP,CAAC,CAAC;YAEH;;;;;;;;;;;;;;eAcG;YACH,MAAM,2BAA2B,GAAG,MAAM,8BAA8B,CAAC;gBACxE,cAAc,EAAE,SAAS,CAAC,SAAS,CAAC,OAAO;gBAC3C,UAAU,EAAE,SAAS,CAAC,SAAS,CAAC,OAAO;gBACvC,GAAG,EAAE,OAAO;aACZ,CAAC,CAAC;YAEH,qEAAqE;YAErE,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;gBACnD,2DAA2D;gBAC3D,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,WAAW,CAC3D,UAAU,EACV,WAAW,CACX,CAAC;gBACF,MAAM,SAAS,GAAG,uBAAuB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBAClE,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;gBACzC,uBAAuB;gBACvB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,IAAI,CACR,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;oBAChC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC;gBACpD,CAAC,CAAC,EACF,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC7C,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC;gBACpD,CAAC,CAAC,CACF,CAAC;gBAEF,4DAA4D;gBAC5D,wDAAwD;gBACxD,kDAAkD;gBAClD,qDAAqD;gBACrD,oDAAoD;gBACpD,oCAAoC;gBACpC,2DAA2D;gBAC3D,qBAAqB;gBACrB,qBAAqB;gBACrB,iCAAiC;gBACjC,OAAO;gBACP,WAAW;gBACX,oDAAoD;gBACpD,6BAA6B;gBAC7B,QAAQ;gBACR,QAAQ;gBACR,MAAM;gBACN,KAAK;gBAEL,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBACtB,IAAI,CAAC;wBACJ,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;wBACzD,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACpB,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACZ,8DAA8D;wBAC9D,6BAA6B;wBAC7B,OAAO,CAAC,GAAG,CACV,OAAO,EACP,wDAAwD,EACxD,GAAG,EACH,qCAAqC,EACrC,CAAC,CACD,CAAC;wBACF,OAAO,IAAI,CAAC;oBACb,CAAC;gBACF,CAAC,CAAC,CACF,CAAC;gBAEF,MAAM,KAAK,GAAG,SAAS;qBACrB,MAAM,CAAC,CAAC,CAAC,EAAsB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;qBACtC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE;oBACxB,IAAI,CAAC,QAAQ;wBAAE,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBACvC,MAAM,IAAI,GAAG,cAAc,CAC1B,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,EAC3C,QAAQ,CACR,CAAC;oBACF,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACpB,CAAC,CAAC,CAAC;gBAEJ,sCAAsC;gBACtC,MAAM,wBAAwB,GAAG,gBAAgB,CAAC,WAAW,CAC5D,UAAU,EACV,WAAW,CACX,CAAC;gBACF,MAAM,UAAU,GAAG,wBAAwB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBACpE,MAAM,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;oBACzB,IAAI,IAAI,EAAE,CAAC;wBACV,OAAO,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;oBAClC,CAAC;yBAAM,CAAC;wBACP,MAAM,EAAE,EAAE,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;wBACjC,OAAO,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBACnC,CAAC;gBACF,CAAC,CAAC,CACF,CAAC;YACH,CAAC;YAED,MAAM,aAAa,CAAC,gBAAgB,CAAC,CAAC;YAEtC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,SAAS,YAAY,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CACV,MAAM,EACN;UACM,SAAS,CAAC,SAAS,CAAC,OAAO;4BACT,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;8BACnC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;8BACvC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;sBAC/C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;iBAClD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACZ,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAC1D;iBACA,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;iBACjB,IAAI,CAAC,IAAI,CAAC;0BACS,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;iBACxD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACZ,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAC5D;iBACA,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;iBACjB,IAAI,CAAC,IAAI,CAAC;IACb,CACA,CAAC;QACH,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,KAAqB;IAC9C,OAAO,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrD,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QACnC,OAAO,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;YAC7B,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC,CAAC;QACF,OAAO,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;YAC3B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,KAAqB,EAAE,EAAU;IAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC5C,OAAO,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;YAC7B,OAAO,EAAE,CAAC;QACX,CAAC,CAAC;QACF,OAAO,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;YAC3B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,KAAqB,EAAE,IAAS;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC5C,OAAO,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;YAC7B,OAAO,EAAE,CAAC;QACX,CAAC,CAAC;QACF,OAAO,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;YAC3B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,8BAA8B,CAAC,EAC7C,cAAc,EACd,UAAU,EAAE,CAAC,EACb,GAAG,GAKH;IACA,iEAAiE;IACjE,+EAA+E;IAC/E,wCAAwC;IACxC,MAAM,mBAAmB,GAAsB,EAAE,CAAC;IAClD,MAAM,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAClC,CAAC,EAAE,EAAE,EAAE;QACN,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EACD;QACC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,CAAC,CAAC;KAClD,CACD,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAChB,IAAI,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAC5D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EACrC,SAAS,EACT,SAAS,GAAG,SAAS,EACrB,SAAS,EACT,OAAO,GAMP;IACA,OAAO,eAAe,CACrB,SAAS,EACT,SAAS,EACT,SAAS,CAAC,SAAS,CAAC,OAAO,EAC3B,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE;QACnB,KAAK,MAAM,aAAa,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;YACxD,EAAE,CAAC,iBAAiB,CAAC,aAAa,EAAE;gBACnC,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,UAAU;gBAClE,aAAa,EAAE,KAAK;aACpB,CAAC,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAClD,oBAAoB;YACpB,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjE,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;oBAC/C,UAAU,EAAE,QAAQ,CAAC,UAAU;iBAC/B,CAAC,CAAC;YACJ,CAAC;YACD,qBAAqB;YACrB,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnE,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;QACF,CAAC;QACD,KAAK,MAAM,iBAAiB,IAAI,SAAS,CAAC,kBAAkB,EAAE,CAAC;YAC9D,mEAAmE;YACnE,sEAAsE;YACtE,wBAAwB;YACxB,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;QACpD,CAAC;IACF,CAAC,EACD,OAAO,CAAC,GAAG,CACX,CAAC;AACH,CAAC"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { Migration } from '@verdant-web/common';
|
|
2
|
-
import { Metadata } from '../metadata/Metadata.js';
|
|
3
2
|
import { OpenDocumentDbContext } from './types.js';
|
|
4
|
-
export declare function openQueryDatabase({ version, indexedDB, migrations,
|
|
3
|
+
export declare function openQueryDatabase({ version, indexedDB, migrations, context, }: {
|
|
5
4
|
version: number;
|
|
6
5
|
migrations: Migration<any>[];
|
|
7
6
|
indexedDB?: IDBFactory;
|
|
8
|
-
meta: Metadata;
|
|
9
7
|
context: OpenDocumentDbContext;
|
|
10
8
|
}): Promise<IDBDatabase>;
|
|
@@ -2,12 +2,9 @@ import { getDatabaseVersion, openDatabase } from './db.js';
|
|
|
2
2
|
import { runMigrations } from './migrations.js';
|
|
3
3
|
import { getMigrationPath } from './paths.js';
|
|
4
4
|
const globalIDB = typeof window !== 'undefined' ? window.indexedDB : undefined;
|
|
5
|
-
export async function openQueryDatabase({ version, indexedDB = globalIDB, migrations,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
const currentVersion = await getDatabaseVersion(indexedDB, context.namespace, version, context.log);
|
|
10
|
-
context.log('debug', 'Current database version:', currentVersion, 'target version:', version);
|
|
5
|
+
export async function openQueryDatabase({ version, indexedDB = globalIDB, migrations, context, }) {
|
|
6
|
+
const currentVersion = await getDatabaseVersion(indexedDB, context.namespace);
|
|
7
|
+
context.log('debug', 'Opening index database', context.namespace, 'Current database version:', currentVersion, 'target version:', version, context.schema.wip ? '(wip)' : '');
|
|
11
8
|
const toRun = getMigrationPath({
|
|
12
9
|
currentVersion,
|
|
13
10
|
targetVersion: version,
|
|
@@ -15,7 +12,7 @@ export async function openQueryDatabase({ version, indexedDB = globalIDB, migrat
|
|
|
15
12
|
});
|
|
16
13
|
if (toRun.length > 0) {
|
|
17
14
|
context.log('debug', 'Migrations to run:', toRun.map((m) => m.version));
|
|
18
|
-
await runMigrations({ context, toRun,
|
|
15
|
+
await runMigrations({ context, toRun, indexedDB });
|
|
19
16
|
}
|
|
20
17
|
return openDatabase({
|
|
21
18
|
indexedDB,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openQueryDatabase.js","sourceRoot":"","sources":["../../../../../../src/persistence/idb/queries/migration/openQueryDatabase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,MAAM,SAAS,GACd,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAE,SAAiB,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACvC,OAAO,EACP,SAAS,GAAG,SAAS,EACrB,UAAU,EACV,OAAO,GAMP;IACA,MAAM,cAAc,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAE9E,OAAO,CAAC,GAAG,CACV,OAAO,EACP,wBAAwB,EACxB,OAAO,CAAC,SAAS,EACjB,2BAA2B,EAC3B,cAAc,EACd,iBAAiB,EACjB,OAAO,EACP,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CACjC,CAAC;IAEF,MAAM,KAAK,GAAG,gBAAgB,CAAC;QAC9B,cAAc;QACd,aAAa,EAAE,OAAO;QACtB,UAAU;KACV,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CACV,OAAO,EACP,oBAAoB,EACpB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAC3B,CAAC;QACF,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,YAAY,CAAC;QACnB,SAAS;QACT,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO;QACP,OAAO;KACP,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { VerdantError } from '@verdant-web/common';
|
|
2
2
|
export function getMigrationPath({ currentVersion, targetVersion, migrations, }) {
|
|
3
3
|
const path = getNextPathStep({
|
|
4
4
|
currentVersion,
|
|
@@ -6,7 +6,7 @@ export function getMigrationPath({ currentVersion, targetVersion, migrations, })
|
|
|
6
6
|
migrations,
|
|
7
7
|
});
|
|
8
8
|
if (!path) {
|
|
9
|
-
throw new
|
|
9
|
+
throw new VerdantError(VerdantError.Code.MigrationPathNotFound, undefined, `No migration path found from ${currentVersion} to ${targetVersion}! This is a bug. If you're seeing this, contact the developer and provide them with the full contents of this message.`);
|
|
10
10
|
}
|
|
11
11
|
return path;
|
|
12
12
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../../../../src/persistence/idb/queries/migration/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,UAAU,gBAAgB,CAAC,EAChC,cAAc,EACd,aAAa,EACb,UAAU,GAKV;IACA,MAAM,IAAI,GAAG,eAAe,CAAC;QAC5B,cAAc;QACd,aAAa;QACb,UAAU;KACV,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,IAAI,YAAY,CACrB,YAAY,CAAC,IAAI,CAAC,qBAAqB,EACvC,SAAS,EACT,gCAAgC,cAAc,OAAO,aAAa,wHAAwH,CAC1L,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,EACxB,cAAc,EACd,aAAa,EACb,UAAU,GAKV;IACA,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,KAAK,cAAc,CAAC;SACrD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAE5D,0DAA0D;IAC1D,mEAAmE;IACnE,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAG,CAAC;QAC/B,6DAA6D;QAC7D,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,aAAa,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QACb,CAAC;QACD,4CAA4C;QAC5C,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QACD,6DAA6D;QAC7D,uBAAuB;QACvB,MAAM,QAAQ,GAAG,eAAe,CAAC;YAChC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO;YACtC,aAAa;YACb,UAAU;SACV,CAAC,CAAC;QACH,IAAI,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAED,uDAAuD;IACxD,CAAC;IAED,yEAAyE;IACzE,iEAAiE;IACjE,wBAAwB;IACxB,OAAO,IAAI,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.test.js","sourceRoot":"","sources":["../../../../../../src/persistence/idb/queries/migration/paths.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/persistence/idb/queries/migration/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { assert, createCompoundIndexValue, createLowerBoundIndexValue, createUpperBoundIndexValue, isMatchIndexFilter, isRangeIndexFilter, isSortIndexFilter, isStartsWithIndexFilter, sanitizeIndexValue, } from '@verdant-web/common';
|
|
2
|
+
const matchIndexToIdbKeyRange = (filter) => {
|
|
3
|
+
return IDBKeyRange.only(sanitizeIndexValue(filter.equals));
|
|
4
|
+
};
|
|
5
|
+
const sortIndexToIdbKeyRange = (filter) => {
|
|
6
|
+
return undefined;
|
|
7
|
+
};
|
|
8
|
+
const rangeIndexToIdbKeyRange = (filter) => {
|
|
9
|
+
const lower = filter.gte || filter.gt;
|
|
10
|
+
const upper = filter.lte || filter.lt;
|
|
11
|
+
if (lower === upper) {
|
|
12
|
+
return IDBKeyRange.only(sanitizeIndexValue(lower));
|
|
13
|
+
}
|
|
14
|
+
if (!lower) {
|
|
15
|
+
return IDBKeyRange.upperBound(sanitizeIndexValue(upper), !!filter.lt);
|
|
16
|
+
}
|
|
17
|
+
else if (!upper) {
|
|
18
|
+
return IDBKeyRange.lowerBound(sanitizeIndexValue(lower), !!filter.gt);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return IDBKeyRange.bound(sanitizeIndexValue(lower), sanitizeIndexValue(upper), !!filter.gt, !!filter.lt);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const compoundIndexToIdbKeyRange = (
|
|
25
|
+
// FIXME:
|
|
26
|
+
schema, collection, filter) => {
|
|
27
|
+
// validate the usage of the compound index:
|
|
28
|
+
// - all match fields must be contiguous at the start of the compound order
|
|
29
|
+
const indexDefinition = schema.collections[collection].compounds[filter.where];
|
|
30
|
+
assert(indexDefinition, `Index ${filter.where} does not exist on collection ${collection}`);
|
|
31
|
+
const matchedKeys = Object.keys(filter.match).sort((a, b) => indexDefinition.of.indexOf(a) - indexDefinition.of.indexOf(b));
|
|
32
|
+
for (const key of matchedKeys) {
|
|
33
|
+
if (indexDefinition.of.indexOf(key) !== matchedKeys.indexOf(key)) {
|
|
34
|
+
throw new Error(`Compound index ${filter.where} does not have ${key} at the start of its order`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const matchedValues = matchedKeys.map((key) => filter.match[key]);
|
|
38
|
+
// special case: all match fields are specified - we don't need a range
|
|
39
|
+
// query, just a single key query
|
|
40
|
+
if (matchedKeys.length === indexDefinition.of.length) {
|
|
41
|
+
return IDBKeyRange.only(createCompoundIndexValue(...matchedValues));
|
|
42
|
+
}
|
|
43
|
+
// create our bounds for the matched values
|
|
44
|
+
const lower = createLowerBoundIndexValue(...matchedValues);
|
|
45
|
+
const upper = createUpperBoundIndexValue(...matchedValues);
|
|
46
|
+
return IDBKeyRange.bound(lower, upper);
|
|
47
|
+
};
|
|
48
|
+
function startsWithIndexToIdbKeyRange(filter) {
|
|
49
|
+
const lower = filter.startsWith;
|
|
50
|
+
const upper = filter.startsWith + '\uffff';
|
|
51
|
+
return IDBKeyRange.bound(lower, upper);
|
|
52
|
+
}
|
|
53
|
+
export function getRange(schema, collection, index) {
|
|
54
|
+
if (!index)
|
|
55
|
+
return undefined;
|
|
56
|
+
if (isRangeIndexFilter(index))
|
|
57
|
+
return rangeIndexToIdbKeyRange(index);
|
|
58
|
+
if (isMatchIndexFilter(index))
|
|
59
|
+
return matchIndexToIdbKeyRange(index);
|
|
60
|
+
if (isSortIndexFilter(index))
|
|
61
|
+
return sortIndexToIdbKeyRange(index);
|
|
62
|
+
if (isStartsWithIndexFilter(index))
|
|
63
|
+
return startsWithIndexToIdbKeyRange(index);
|
|
64
|
+
return compoundIndexToIdbKeyRange(schema, collection, index);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=ranges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ranges.js","sourceRoot":"","sources":["../../../../../src/persistence/idb/queries/ranges.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,12 @@ export declare function getSizeOfObjectStore(database: IDBDatabase, storeName: s
|
|
|
6
6
|
count: number;
|
|
7
7
|
size: number;
|
|
8
8
|
}>;
|
|
9
|
+
export declare function getSizesOfAllObjectStores(database: IDBDatabase): Promise<{
|
|
10
|
+
[storeName: string]: {
|
|
11
|
+
count: number;
|
|
12
|
+
size: number;
|
|
13
|
+
};
|
|
14
|
+
}>;
|
|
9
15
|
export declare function getAllFromObjectStores(db: IDBDatabase, stores: string[]): Promise<any[][]>;
|
|
10
16
|
export declare function closeDatabase(db: IDBDatabase): Promise<void>;
|
|
11
17
|
export declare function deleteAllDatabases(namespace: string, indexedDB?: IDBFactory): Promise<void>;
|
|
@@ -17,3 +23,8 @@ export declare function createAbortableTransaction(db: IDBDatabase, storeNames:
|
|
|
17
23
|
* its structure.
|
|
18
24
|
*/
|
|
19
25
|
export declare function emptyDatabase(db: IDBDatabase): Promise<void>;
|
|
26
|
+
export declare function copyDatabase(from: IDBDatabase, to: IDBDatabase): Promise<void>;
|
|
27
|
+
export declare function openDatabase(name: string, expectedVersion: number, indexedDB?: IDBFactory): Promise<IDBDatabase>;
|
|
28
|
+
export declare function getMetadataDbName(namespace: string): string;
|
|
29
|
+
export declare function getDocumentDbName(namespace: string): string;
|
|
30
|
+
export declare function getNamespaceFromDatabaseInfo(info: IDBDatabaseInfo): string | undefined;
|
|
@@ -85,6 +85,17 @@ export function getSizeOfObjectStore(database, storeName) {
|
|
|
85
85
|
};
|
|
86
86
|
});
|
|
87
87
|
}
|
|
88
|
+
export async function getSizesOfAllObjectStores(database) {
|
|
89
|
+
const storeNames = Array.from(database.objectStoreNames);
|
|
90
|
+
const promises = storeNames.map(async (storeName) => {
|
|
91
|
+
const result = await getSizeOfObjectStore(database, storeName);
|
|
92
|
+
return { [storeName]: result };
|
|
93
|
+
});
|
|
94
|
+
const results = await Promise.all(promises);
|
|
95
|
+
return results.reduce((acc, result_1) => {
|
|
96
|
+
return Object.assign(Object.assign({}, acc), result_1);
|
|
97
|
+
}, {});
|
|
98
|
+
}
|
|
88
99
|
export function getAllFromObjectStores(db, stores) {
|
|
89
100
|
const transaction = db.transaction(stores, 'readonly');
|
|
90
101
|
const promises = stores.map((store) => {
|
|
@@ -158,4 +169,50 @@ export function emptyDatabase(db) {
|
|
|
158
169
|
tx.onerror = () => reject(tx.error);
|
|
159
170
|
});
|
|
160
171
|
}
|
|
161
|
-
|
|
172
|
+
export async function copyDatabase(from, to) {
|
|
173
|
+
await emptyDatabase(to);
|
|
174
|
+
const records = await getAllFromObjectStores(from, Array.from(from.objectStoreNames));
|
|
175
|
+
const writeTx = to.transaction(Array.from(to.objectStoreNames), 'readwrite');
|
|
176
|
+
for (let i = 0; i < records.length; i++) {
|
|
177
|
+
const store = writeTx.objectStore(from.objectStoreNames[i]);
|
|
178
|
+
for (const record of records[i]) {
|
|
179
|
+
store.add(record);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return new Promise((resolve, reject) => {
|
|
183
|
+
writeTx.oncomplete = () => resolve();
|
|
184
|
+
writeTx.onerror = () => reject(writeTx.error);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
export function openDatabase(name, expectedVersion, indexedDB = window.indexedDB) {
|
|
188
|
+
return new Promise((resolve, reject) => {
|
|
189
|
+
const req = indexedDB.open(name, expectedVersion);
|
|
190
|
+
req.onsuccess = () => {
|
|
191
|
+
resolve(req.result);
|
|
192
|
+
};
|
|
193
|
+
req.onerror = () => {
|
|
194
|
+
reject(req.error);
|
|
195
|
+
};
|
|
196
|
+
req.onblocked = () => {
|
|
197
|
+
reject(new Error('Database blocked'));
|
|
198
|
+
};
|
|
199
|
+
req.onupgradeneeded = (event) => {
|
|
200
|
+
const db = req.result;
|
|
201
|
+
if (db.version !== expectedVersion) {
|
|
202
|
+
db.close();
|
|
203
|
+
reject(new Error(`Migration error: database version changed unexpectedly when reading current data. Expected ${expectedVersion}, got ${db.version}`));
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
export function getMetadataDbName(namespace) {
|
|
209
|
+
return [namespace, 'meta'].join('_');
|
|
210
|
+
}
|
|
211
|
+
export function getDocumentDbName(namespace) {
|
|
212
|
+
return [namespace, 'collections'].join('_');
|
|
213
|
+
}
|
|
214
|
+
export function getNamespaceFromDatabaseInfo(info) {
|
|
215
|
+
var _a;
|
|
216
|
+
return (_a = info.name) === null || _a === void 0 ? void 0 : _a.split('_')[0];
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=util.js.map
|