@verdant-web/store 3.12.1 → 4.0.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +26 -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 +10 -11
- package/dist/esm/sync/Sync.js +55 -30
- 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 +35 -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 +71 -37
- 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
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { DocumentBaseline, ObjectIdentifier } from '@verdant-web/common';
|
|
2
|
+
import { AbstractTransaction, AckInfo, ClientOperation, CommonQueryOptions, Iterator, LocalReplicaInfo, PersistenceMetadataDb } from '../../interfaces.js';
|
|
3
|
+
import { IdbService } from '../IdbService.js';
|
|
4
|
+
import { Context } from '../../../context/context.js';
|
|
5
|
+
export type StoredClientOperation = ClientOperation & {
|
|
6
|
+
/** This acts as the primary key */
|
|
7
|
+
oid_timestamp: string;
|
|
8
|
+
l_t: string;
|
|
9
|
+
d_t: string;
|
|
10
|
+
};
|
|
11
|
+
export type StoredSchema = {
|
|
12
|
+
type: 'schema';
|
|
13
|
+
schema: string;
|
|
14
|
+
};
|
|
15
|
+
export declare class IdbMetadataDb extends IdbService implements PersistenceMetadataDb {
|
|
16
|
+
private ctx;
|
|
17
|
+
constructor(db: IDBDatabase, ctx: Pick<Context, 'log' | 'namespace'>);
|
|
18
|
+
transaction: (opts: {
|
|
19
|
+
mode?: 'readwrite' | 'readonly';
|
|
20
|
+
storeNames: string[];
|
|
21
|
+
abort?: AbortSignal;
|
|
22
|
+
}) => IDBTransaction;
|
|
23
|
+
getAckInfo: () => Promise<AckInfo>;
|
|
24
|
+
setGlobalAck: (ack: string) => Promise<void>;
|
|
25
|
+
private _creatingLocalReplica;
|
|
26
|
+
private cachedLocalReplica;
|
|
27
|
+
getLocalReplica: (opts?: CommonQueryOptions) => Promise<LocalReplicaInfo>;
|
|
28
|
+
updateLocalReplica: (data: Partial<LocalReplicaInfo>, opts?: CommonQueryOptions) => Promise<void>;
|
|
29
|
+
iterateDocumentBaselines: (rootOid: string, iterator: (baseline: DocumentBaseline) => void, opts?: CommonQueryOptions) => Promise<void>;
|
|
30
|
+
iterateCollectionBaselines: (collection: string, iterator: (baseline: DocumentBaseline) => void, opts?: CommonQueryOptions) => Promise<void>;
|
|
31
|
+
iterateAllBaselines: (iterator: Iterator<DocumentBaseline>, opts: CommonQueryOptions) => Promise<void>;
|
|
32
|
+
getBaseline: (oid: string, opts?: CommonQueryOptions) => Promise<DocumentBaseline>;
|
|
33
|
+
setBaselines: (baselines: DocumentBaseline[], opts?: CommonQueryOptions) => Promise<void>;
|
|
34
|
+
deleteBaseline: (oid: string, opts?: CommonQueryOptions) => Promise<void>;
|
|
35
|
+
iterateDocumentOperations: (rootOid: string, iterator: (op: StoredClientOperation) => void, opts?: CommonQueryOptions & {
|
|
36
|
+
to?: string | null;
|
|
37
|
+
}) => Promise<void>;
|
|
38
|
+
iterateEntityOperations: (oid: string, iterator: (op: StoredClientOperation) => void, opts?: CommonQueryOptions & {
|
|
39
|
+
to?: string | null;
|
|
40
|
+
}) => Promise<void>;
|
|
41
|
+
consumeEntityOperations: (oid: string, iterator: Iterator<ClientOperation>, opts?: CommonQueryOptions & {
|
|
42
|
+
to?: string | null;
|
|
43
|
+
}) => Promise<void>;
|
|
44
|
+
iterateCollectionOperations: (collection: string, iterator: (op: StoredClientOperation) => void, opts?: CommonQueryOptions) => Promise<void>;
|
|
45
|
+
iterateLocalOperations: (iterator: (op: StoredClientOperation) => void, opts?: CommonQueryOptions & {
|
|
46
|
+
after?: string | null;
|
|
47
|
+
}) => Promise<void>;
|
|
48
|
+
iterateAllOperations: (iterator: (op: StoredClientOperation) => void, opts?: CommonQueryOptions & {
|
|
49
|
+
before?: string | null;
|
|
50
|
+
from?: string | null;
|
|
51
|
+
}) => Promise<void>;
|
|
52
|
+
addOperations: (ops: StoredClientOperation[], opts?: CommonQueryOptions) => Promise<ObjectIdentifier[]>;
|
|
53
|
+
reset: ({ clearReplica, transaction, }?: {
|
|
54
|
+
clearReplica?: boolean | undefined;
|
|
55
|
+
transaction?: AbstractTransaction;
|
|
56
|
+
}) => Promise<void>;
|
|
57
|
+
stats: () => Promise<{
|
|
58
|
+
operationsSize: {
|
|
59
|
+
count: number;
|
|
60
|
+
size: number;
|
|
61
|
+
};
|
|
62
|
+
baselinesSize: {
|
|
63
|
+
count: number;
|
|
64
|
+
size: number;
|
|
65
|
+
};
|
|
66
|
+
}>;
|
|
67
|
+
private resetLocalReplica;
|
|
68
|
+
private resetBaselines;
|
|
69
|
+
private resetOperations;
|
|
70
|
+
private addOperationIndexes;
|
|
71
|
+
private convertOpts;
|
|
72
|
+
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { createCompoundIndexValue, createLowerBoundIndexValue, createUpperBoundIndexValue, getLegacyDotOidSubIdRange, getOidRoot, getOidSubIdRange, } from '@verdant-web/common';
|
|
2
|
+
import { IdbService } from '../IdbService.js';
|
|
3
|
+
import cuid from 'cuid';
|
|
4
|
+
import { closeDatabase, getSizeOfObjectStore } from '../util.js';
|
|
5
|
+
export class IdbMetadataDb extends IdbService {
|
|
6
|
+
constructor(db, ctx) {
|
|
7
|
+
super(db, ctx);
|
|
8
|
+
this.ctx = ctx;
|
|
9
|
+
this.transaction = (opts) => {
|
|
10
|
+
return this.createTransaction(opts.storeNames, {
|
|
11
|
+
mode: opts.mode,
|
|
12
|
+
abort: opts.abort,
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
this.getAckInfo = async () => {
|
|
16
|
+
const result = await this.run('info', (store) => store.get('ack'));
|
|
17
|
+
if (result) {
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return {
|
|
22
|
+
globalAckTimestamp: null,
|
|
23
|
+
type: 'ack',
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
this.setGlobalAck = async (ack) => {
|
|
28
|
+
await this.run('info', (store) => store.put({ type: 'ack', globalAckTimestamp: ack }), { mode: 'readwrite' });
|
|
29
|
+
};
|
|
30
|
+
this.getLocalReplica = async (opts) => {
|
|
31
|
+
if (this.cachedLocalReplica) {
|
|
32
|
+
return this.cachedLocalReplica;
|
|
33
|
+
}
|
|
34
|
+
const lookup = await this.run('info', (store) => store.get('localReplicaInfo'), this.convertOpts(opts));
|
|
35
|
+
// not cached, not in db, create it
|
|
36
|
+
if (!lookup) {
|
|
37
|
+
// prevent a race condition if get() is called again while we are
|
|
38
|
+
// creating the replica info
|
|
39
|
+
if (!this._creatingLocalReplica) {
|
|
40
|
+
this._creatingLocalReplica = (async () => {
|
|
41
|
+
// create our own replica info now
|
|
42
|
+
const replicaId = cuid();
|
|
43
|
+
const replicaInfo = {
|
|
44
|
+
type: 'localReplicaInfo',
|
|
45
|
+
id: replicaId,
|
|
46
|
+
userId: undefined,
|
|
47
|
+
ackedLogicalTime: null,
|
|
48
|
+
lastSyncedLogicalTime: null,
|
|
49
|
+
};
|
|
50
|
+
await this.run('info', (store) => store.put(replicaInfo), {
|
|
51
|
+
mode: 'readwrite',
|
|
52
|
+
});
|
|
53
|
+
this.cachedLocalReplica = replicaInfo;
|
|
54
|
+
})();
|
|
55
|
+
}
|
|
56
|
+
await this._creatingLocalReplica;
|
|
57
|
+
return this.getLocalReplica(opts);
|
|
58
|
+
}
|
|
59
|
+
this.cachedLocalReplica = lookup;
|
|
60
|
+
return lookup;
|
|
61
|
+
};
|
|
62
|
+
this.updateLocalReplica = async (data, opts = writeOpts) => {
|
|
63
|
+
const localReplicaInfo = await this.getLocalReplica(opts);
|
|
64
|
+
Object.assign(localReplicaInfo, data);
|
|
65
|
+
await this.run('info', (store) => store.put(localReplicaInfo), {
|
|
66
|
+
mode: 'readwrite',
|
|
67
|
+
});
|
|
68
|
+
this.cachedLocalReplica = localReplicaInfo;
|
|
69
|
+
};
|
|
70
|
+
this.iterateDocumentBaselines = async (rootOid, iterator, opts) => {
|
|
71
|
+
await this.iterate('baselines', (store) => {
|
|
72
|
+
const root = getOidRoot(rootOid);
|
|
73
|
+
const [start, end] = getOidSubIdRange(rootOid);
|
|
74
|
+
// FIXME: get rid of legacy dot OIDs...
|
|
75
|
+
const [dotStart, dotEnd] = getLegacyDotOidSubIdRange(rootOid);
|
|
76
|
+
return [
|
|
77
|
+
store.openCursor(IDBKeyRange.only(root)),
|
|
78
|
+
store.openCursor(IDBKeyRange.bound(start, end, false, false)),
|
|
79
|
+
store.openCursor(IDBKeyRange.bound(dotStart, dotEnd, false, false)),
|
|
80
|
+
];
|
|
81
|
+
}, iterator, this.convertOpts(opts));
|
|
82
|
+
};
|
|
83
|
+
this.iterateCollectionBaselines = async (collection, iterator, opts) => {
|
|
84
|
+
await this.iterate('baselines', (store) => {
|
|
85
|
+
return [
|
|
86
|
+
store.openCursor(IDBKeyRange.bound(collection, collection + '\uffff', false, false)),
|
|
87
|
+
];
|
|
88
|
+
}, iterator, this.convertOpts(opts));
|
|
89
|
+
};
|
|
90
|
+
this.iterateAllBaselines = async (iterator, opts) => {
|
|
91
|
+
await this.iterate('baselines', (store) => store.index('timestamp').openCursor(), iterator, this.convertOpts(opts));
|
|
92
|
+
};
|
|
93
|
+
this.getBaseline = (oid, opts) => {
|
|
94
|
+
return this.run('baselines', (store) => store.get(oid), this.convertOpts(opts));
|
|
95
|
+
};
|
|
96
|
+
this.setBaselines = async (baselines, opts = writeOpts) => {
|
|
97
|
+
await this.runAll('baselines', (store) => baselines.map((b) => store.put(b)), this.convertOpts(opts));
|
|
98
|
+
};
|
|
99
|
+
this.deleteBaseline = async (oid, opts = writeOpts) => {
|
|
100
|
+
await this.run('baselines', (store) => store.delete(oid), this.convertOpts(opts));
|
|
101
|
+
};
|
|
102
|
+
this.iterateDocumentOperations = (rootOid, iterator, opts) => {
|
|
103
|
+
return this.iterate('operations', (store) => {
|
|
104
|
+
const index = store.index('d_t');
|
|
105
|
+
const start = createLowerBoundIndexValue(rootOid);
|
|
106
|
+
const end = (opts === null || opts === void 0 ? void 0 : opts.to)
|
|
107
|
+
? createCompoundIndexValue(rootOid, opts.to)
|
|
108
|
+
: createUpperBoundIndexValue(rootOid);
|
|
109
|
+
const range = IDBKeyRange.bound(start, end, false, false);
|
|
110
|
+
return index.openCursor(range);
|
|
111
|
+
}, iterator, this.convertOpts(opts));
|
|
112
|
+
};
|
|
113
|
+
this.iterateEntityOperations = (oid, iterator, opts) => {
|
|
114
|
+
// NOTE: this is simplified from original impl.
|
|
115
|
+
// perhaps I missed some nuance as to why it was
|
|
116
|
+
// so complex before?
|
|
117
|
+
return this.iterate('operations', (store) => {
|
|
118
|
+
const start = createLowerBoundIndexValue(oid);
|
|
119
|
+
const end = (opts === null || opts === void 0 ? void 0 : opts.to)
|
|
120
|
+
? createCompoundIndexValue(oid, opts.to)
|
|
121
|
+
: createUpperBoundIndexValue(oid);
|
|
122
|
+
const range = IDBKeyRange.bound(start, end, false, false);
|
|
123
|
+
return store.openCursor(range);
|
|
124
|
+
}, iterator, this.convertOpts(opts));
|
|
125
|
+
};
|
|
126
|
+
this.consumeEntityOperations = (oid, iterator, opts = writeOpts) => {
|
|
127
|
+
return this.iterate('operations', (store) => {
|
|
128
|
+
const start = createLowerBoundIndexValue(oid);
|
|
129
|
+
const end = (opts === null || opts === void 0 ? void 0 : opts.to)
|
|
130
|
+
? createCompoundIndexValue(oid, opts.to)
|
|
131
|
+
: createUpperBoundIndexValue(oid);
|
|
132
|
+
const range = IDBKeyRange.bound(start, end, false, false);
|
|
133
|
+
return store.openCursor(range);
|
|
134
|
+
}, (op, store) => {
|
|
135
|
+
iterator(op);
|
|
136
|
+
store.delete(op.oid_timestamp);
|
|
137
|
+
}, this.convertOpts(opts));
|
|
138
|
+
};
|
|
139
|
+
this.iterateCollectionOperations = (collection, iterator, opts) => {
|
|
140
|
+
return this.iterate('operations', (store) => {
|
|
141
|
+
return store.openCursor(IDBKeyRange.bound(collection, collection + '\uffff', false, false), 'next');
|
|
142
|
+
}, iterator, this.convertOpts(opts));
|
|
143
|
+
};
|
|
144
|
+
this.iterateLocalOperations = (iterator, opts) => {
|
|
145
|
+
return this.iterate('operations', (store) => {
|
|
146
|
+
const start = (opts === null || opts === void 0 ? void 0 : opts.after)
|
|
147
|
+
? createCompoundIndexValue(true, opts.after)
|
|
148
|
+
: createLowerBoundIndexValue(true);
|
|
149
|
+
const end = createUpperBoundIndexValue(true);
|
|
150
|
+
const index = store.index('l_t');
|
|
151
|
+
return index.openCursor(
|
|
152
|
+
// NOTE: differs from original impl -- last arg is 'false' instead of 'true'
|
|
153
|
+
IDBKeyRange.bound(start, end, !!(opts === null || opts === void 0 ? void 0 : opts.after), false), 'next');
|
|
154
|
+
}, iterator);
|
|
155
|
+
};
|
|
156
|
+
this.iterateAllOperations = (iterator, opts) => {
|
|
157
|
+
return this.iterate('operations', (store) => {
|
|
158
|
+
const start = (opts === null || opts === void 0 ? void 0 : opts.from)
|
|
159
|
+
? createLowerBoundIndexValue(opts.from)
|
|
160
|
+
: undefined;
|
|
161
|
+
const end = (opts === null || opts === void 0 ? void 0 : opts.before)
|
|
162
|
+
? createUpperBoundIndexValue(opts.before)
|
|
163
|
+
: createLowerBoundIndexValue(true);
|
|
164
|
+
const range = start && end
|
|
165
|
+
? IDBKeyRange.bound(start, end, false, true)
|
|
166
|
+
: start
|
|
167
|
+
? IDBKeyRange.lowerBound(start, false)
|
|
168
|
+
: end
|
|
169
|
+
? IDBKeyRange.upperBound(end, true)
|
|
170
|
+
: undefined;
|
|
171
|
+
return store.index('timestamp').openCursor(range, 'next');
|
|
172
|
+
}, iterator, this.convertOpts(opts));
|
|
173
|
+
};
|
|
174
|
+
this.addOperations = async (ops, opts = writeOpts) => {
|
|
175
|
+
let affected = new Set();
|
|
176
|
+
await this.runAll('operations', (store) => ops.map((op) => {
|
|
177
|
+
affected.add(getOidRoot(op.oid));
|
|
178
|
+
return store.put(this.addOperationIndexes(op));
|
|
179
|
+
}), this.convertOpts(opts));
|
|
180
|
+
return Array.from(affected);
|
|
181
|
+
};
|
|
182
|
+
this.reset = async ({ clearReplica, transaction, } = {}) => {
|
|
183
|
+
const tx = transaction ||
|
|
184
|
+
this.createTransaction(['info', 'operations', 'baselines'], {
|
|
185
|
+
mode: 'readwrite',
|
|
186
|
+
});
|
|
187
|
+
await Promise.all([
|
|
188
|
+
this.resetLocalReplica(tx, clearReplica),
|
|
189
|
+
this.resetBaselines(tx),
|
|
190
|
+
this.resetOperations(tx),
|
|
191
|
+
]);
|
|
192
|
+
};
|
|
193
|
+
this.stats = async () => {
|
|
194
|
+
const ops = await getSizeOfObjectStore(this.db, 'operations');
|
|
195
|
+
const baselines = await getSizeOfObjectStore(this.db, 'baselines');
|
|
196
|
+
return { operationsSize: ops, baselinesSize: baselines };
|
|
197
|
+
};
|
|
198
|
+
this.resetLocalReplica = async (tx, clear = false) => {
|
|
199
|
+
if (clear) {
|
|
200
|
+
return this.run('info', (store) => store.delete('localReplicaInfo'), {
|
|
201
|
+
mode: 'readwrite',
|
|
202
|
+
transaction: tx,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
const localInfo = await this.getLocalReplica();
|
|
206
|
+
localInfo.ackedLogicalTime = null;
|
|
207
|
+
localInfo.lastSyncedLogicalTime = null;
|
|
208
|
+
await this.run('info', (store) => store.put(localInfo), {
|
|
209
|
+
mode: 'readwrite',
|
|
210
|
+
transaction: tx,
|
|
211
|
+
});
|
|
212
|
+
};
|
|
213
|
+
this.resetBaselines = async (tx) => {
|
|
214
|
+
return this.clear('baselines', tx);
|
|
215
|
+
};
|
|
216
|
+
this.resetOperations = async (tx) => {
|
|
217
|
+
return this.clear('operations', tx);
|
|
218
|
+
};
|
|
219
|
+
this.addOperationIndexes = (op) => {
|
|
220
|
+
return Object.assign(Object.assign({}, op), { oid_timestamp: createCompoundIndexValue(op.oid, op.timestamp), l_t: createCompoundIndexValue(op.isLocal, op.timestamp), d_t: createCompoundIndexValue(getOidRoot(op.oid), op.timestamp) });
|
|
221
|
+
};
|
|
222
|
+
this.convertOpts = (opts) => {
|
|
223
|
+
if ((opts === null || opts === void 0 ? void 0 : opts.transaction) && !(opts.transaction instanceof IDBTransaction)) {
|
|
224
|
+
throw new Error(`Invalid IndexedDB transaction. You cannot mix persistence providers. ${typeof opts.transaction}`);
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
mode: opts === null || opts === void 0 ? void 0 : opts.mode,
|
|
228
|
+
transaction: opts === null || opts === void 0 ? void 0 : opts.transaction,
|
|
229
|
+
};
|
|
230
|
+
};
|
|
231
|
+
this.addDispose(() => closeDatabase(db));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const writeOpts = { mode: 'readwrite' };
|
|
235
|
+
//# sourceMappingURL=IdbMetadataDb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IdbMetadataDb.js","sourceRoot":"","sources":["../../../../../src/persistence/idb/metadata/IdbMetadataDb.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { Context } from '../../../context/context.js';
|
|
2
|
+
export declare const CURRENT_METADATA_VERSION: number;
|
|
1
3
|
export declare function openMetadataDatabase({ indexedDB, namespace, log, metadataVersion, }: {
|
|
2
4
|
indexedDB?: IDBFactory;
|
|
3
5
|
namespace: string;
|
|
4
|
-
log?:
|
|
6
|
+
log?: Context['log'];
|
|
5
7
|
metadataVersion?: number;
|
|
6
8
|
}): Promise<{
|
|
7
9
|
wasInitialized: boolean;
|
|
@@ -10,11 +10,12 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
12
|
import { replaceLegacyOidsInObject } from '@verdant-web/common';
|
|
13
|
-
import { closeDatabase, storeRequestPromise } from '../
|
|
13
|
+
import { closeDatabase, getMetadataDbName, storeRequestPromise, } from '../util.js';
|
|
14
14
|
const migrations = [version1, version2, version3, version4, version5, version6];
|
|
15
|
-
export
|
|
15
|
+
export const CURRENT_METADATA_VERSION = migrations.length;
|
|
16
|
+
export function openMetadataDatabase({ indexedDB = window.indexedDB, namespace, log, metadataVersion = CURRENT_METADATA_VERSION, }) {
|
|
16
17
|
return new Promise((resolve, reject) => {
|
|
17
|
-
const request = indexedDB.open(
|
|
18
|
+
const request = indexedDB.open(getMetadataDbName(namespace), metadataVersion);
|
|
18
19
|
let wasInitialized = false;
|
|
19
20
|
request.onupgradeneeded = async (event) => {
|
|
20
21
|
const db = request.result;
|
|
@@ -151,6 +152,10 @@ async function version3(db, tx) {
|
|
|
151
152
|
const operations = tx.objectStore('operations');
|
|
152
153
|
operations.createIndex('timestamp', 'timestamp');
|
|
153
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* 3 -> 4 changes:
|
|
157
|
+
* Add files store
|
|
158
|
+
*/
|
|
154
159
|
async function version4(db, tx) {
|
|
155
160
|
const files = db.createObjectStore('files', {
|
|
156
161
|
keyPath: 'id',
|
|
@@ -158,6 +163,10 @@ async function version4(db, tx) {
|
|
|
158
163
|
files.createIndex('remote', 'remote');
|
|
159
164
|
files.createIndex('deletedAt', 'deletedAt');
|
|
160
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* 4 -> 5 changes:
|
|
168
|
+
* replace legacy OIDs
|
|
169
|
+
*/
|
|
161
170
|
async function version5(db, tx) {
|
|
162
171
|
// rewrites all baselines and operations to replace legacy OIDs
|
|
163
172
|
// with new ones.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openMetadataDatabase.js","sourceRoot":"","sources":["../../../../../src/persistence/idb/metadata/openMetadataDatabase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { CollectionFilter, ObjectIdentifier } from '@verdant-web/common';
|
|
2
|
+
import { Context } from '../../../context/context.js';
|
|
3
|
+
import { AbstractTransaction, CommonQueryOptions, PersistenceQueryDb, QueryMode } from '../../interfaces.js';
|
|
4
|
+
import { IdbService } from '../IdbService.js';
|
|
5
|
+
export declare class IdbQueryDb extends IdbService implements PersistenceQueryDb {
|
|
6
|
+
private ctx;
|
|
7
|
+
constructor(db: IDBDatabase, context: Omit<Context, 'queries' | 'files'>);
|
|
8
|
+
stats: () => Promise<Record<string, {
|
|
9
|
+
count: number;
|
|
10
|
+
size: number;
|
|
11
|
+
}>>;
|
|
12
|
+
transaction: (opts: {
|
|
13
|
+
mode?: QueryMode;
|
|
14
|
+
storeNames: string[];
|
|
15
|
+
abort?: AbortSignal;
|
|
16
|
+
}) => AbstractTransaction;
|
|
17
|
+
findOneOid: (opts: {
|
|
18
|
+
collection: string;
|
|
19
|
+
index?: CollectionFilter;
|
|
20
|
+
}) => Promise<ObjectIdentifier | null>;
|
|
21
|
+
findAllOids: ({ collection, index, offset, limit, }: {
|
|
22
|
+
collection: string;
|
|
23
|
+
index?: import("@verdant-web/common").CollectionIndexFilter | undefined;
|
|
24
|
+
limit?: number | undefined;
|
|
25
|
+
offset?: number | undefined;
|
|
26
|
+
}) => Promise<{
|
|
27
|
+
result: ObjectIdentifier[];
|
|
28
|
+
hasNextPage: boolean;
|
|
29
|
+
}>;
|
|
30
|
+
saveEntities: (entities: {
|
|
31
|
+
oid: ObjectIdentifier;
|
|
32
|
+
getSnapshot: () => any;
|
|
33
|
+
}[], opts?: CommonQueryOptions & {
|
|
34
|
+
abort?: AbortSignal;
|
|
35
|
+
}) => Promise<void>;
|
|
36
|
+
reset: (opts?: {
|
|
37
|
+
transaction?: AbstractTransaction;
|
|
38
|
+
}) => Promise<void>;
|
|
39
|
+
dispose: () => Promise<void>;
|
|
40
|
+
private saveDocument;
|
|
41
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { createOid, decomposeOid, getIndexValues, } from '@verdant-web/common';
|
|
2
|
+
import { IdbService } from '../IdbService.js';
|
|
3
|
+
import { getRange } from './ranges.js';
|
|
4
|
+
import { closeDatabase, getSizeOfObjectStore, isAbortError } from '../util.js';
|
|
5
|
+
export class IdbQueryDb extends IdbService {
|
|
6
|
+
constructor(db, context) {
|
|
7
|
+
super(db, { log: context.log });
|
|
8
|
+
this.stats = async () => {
|
|
9
|
+
const collectionNames = Object.keys(this.ctx.schema.collections);
|
|
10
|
+
const collections = {};
|
|
11
|
+
await Promise.all(collectionNames.map(async (name) => {
|
|
12
|
+
const size = await getSizeOfObjectStore(this.db, name);
|
|
13
|
+
collections[name] = size;
|
|
14
|
+
}));
|
|
15
|
+
return collections;
|
|
16
|
+
};
|
|
17
|
+
this.transaction = (opts) => {
|
|
18
|
+
return this.createTransaction(opts.storeNames, {
|
|
19
|
+
mode: opts.mode,
|
|
20
|
+
abort: opts.abort,
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
this.findOneOid = async (opts) => {
|
|
24
|
+
const result = await this.run(opts.collection, (store) => {
|
|
25
|
+
var _a, _b;
|
|
26
|
+
const source = ((_a = opts.index) === null || _a === void 0 ? void 0 : _a.where)
|
|
27
|
+
? store.index(opts.index.where)
|
|
28
|
+
: store;
|
|
29
|
+
const direction = ((_b = opts.index) === null || _b === void 0 ? void 0 : _b.order) === 'desc' ? 'prev' : 'next';
|
|
30
|
+
const range = getRange(this.ctx.schema, opts.collection, opts.index);
|
|
31
|
+
return source.openCursor(range, direction);
|
|
32
|
+
}, { mode: 'readonly' });
|
|
33
|
+
if (result) {
|
|
34
|
+
return createOid(opts.collection, result.primaryKey.toString());
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
};
|
|
38
|
+
this.findAllOids = async ({ collection, index, offset, limit, }) => {
|
|
39
|
+
const tx = this.createTransaction([collection], { mode: 'readonly' });
|
|
40
|
+
const store = tx.objectStore(collection);
|
|
41
|
+
const source = (index === null || index === void 0 ? void 0 : index.where) ? store.index(index.where) : store;
|
|
42
|
+
const direction = (index === null || index === void 0 ? void 0 : index.order) === 'desc' ? 'prev' : 'next';
|
|
43
|
+
const range = getRange(this.ctx.schema, collection, index);
|
|
44
|
+
const request = source.openCursor(range, direction);
|
|
45
|
+
let hasNextPage = false;
|
|
46
|
+
const result = await new Promise((resolve, reject) => {
|
|
47
|
+
let hasDoneOffset = !offset;
|
|
48
|
+
let visited = 0;
|
|
49
|
+
const results = new Set();
|
|
50
|
+
request.onsuccess = () => {
|
|
51
|
+
visited++;
|
|
52
|
+
const cursor = request.result;
|
|
53
|
+
if (!cursor) {
|
|
54
|
+
resolve(Array.from(results));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// first offset, if we have one. cursor opens at beginning.
|
|
58
|
+
if (offset && !hasDoneOffset) {
|
|
59
|
+
cursor.advance(offset);
|
|
60
|
+
hasDoneOffset = true;
|
|
61
|
+
// next iteration we begin adding results.
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// add result to set, unless we have reached limit.
|
|
65
|
+
if (!limit || results.size < limit) {
|
|
66
|
+
results.add(createOid(collection, cursor.primaryKey.toString()));
|
|
67
|
+
}
|
|
68
|
+
// even if we reached limit, we keep going one more to check if there's
|
|
69
|
+
// a next page.
|
|
70
|
+
if (limit && visited > limit) {
|
|
71
|
+
hasNextPage = true;
|
|
72
|
+
// stop iteration here; we reached limit and we have next page
|
|
73
|
+
// info we need.
|
|
74
|
+
resolve(Array.from(results));
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
cursor.continue();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
request.onerror = () => {
|
|
82
|
+
var _a;
|
|
83
|
+
if (((_a = request.error) === null || _a === void 0 ? void 0 : _a.name) === 'InvalidStateError') {
|
|
84
|
+
this.ctx.log('error', `find query failed with InvalidStateError`, request.error);
|
|
85
|
+
resolve([]);
|
|
86
|
+
}
|
|
87
|
+
else if (request.error && isAbortError(request.error)) {
|
|
88
|
+
resolve([]);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
reject(request.error);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
return {
|
|
96
|
+
result,
|
|
97
|
+
hasNextPage,
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
this.saveEntities = async (entities, opts) => {
|
|
101
|
+
if (entities.length === 0)
|
|
102
|
+
return;
|
|
103
|
+
let collections = Array.from(new Set(entities.map((e) => decomposeOid(e.oid).collection)));
|
|
104
|
+
const toRemove = collections.filter((c) => !this.ctx.schema.collections[c]);
|
|
105
|
+
if (toRemove.length > 0) {
|
|
106
|
+
this.ctx.log('warn', `Ignoring entities from collections that no longer exist: ${toRemove.join(', ')}`);
|
|
107
|
+
}
|
|
108
|
+
const withRemoved = new Set(collections);
|
|
109
|
+
toRemove.forEach((c) => withRemoved.delete(c));
|
|
110
|
+
collections = Array.from(withRemoved);
|
|
111
|
+
const options = {
|
|
112
|
+
transaction: this.createTransaction(collections, {
|
|
113
|
+
mode: 'readwrite',
|
|
114
|
+
abort: opts === null || opts === void 0 ? void 0 : opts.abort,
|
|
115
|
+
}),
|
|
116
|
+
};
|
|
117
|
+
// FIXME: not test is making it to this line
|
|
118
|
+
await Promise.all(entities.map(async (e) => {
|
|
119
|
+
const snapshot = e.getSnapshot();
|
|
120
|
+
try {
|
|
121
|
+
await this.saveDocument(e.oid, snapshot, options);
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
this.ctx.log('error', `Error saving document ${e.oid} (${JSON.stringify(snapshot)})`, err);
|
|
125
|
+
if (err instanceof Error) {
|
|
126
|
+
throw err;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
throw new Error('Unknown error saving document');
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}));
|
|
133
|
+
options.transaction.commit();
|
|
134
|
+
this.ctx.entityEvents.emit('collectionsChanged', collections);
|
|
135
|
+
for (const entity of entities) {
|
|
136
|
+
this.ctx.entityEvents.emit('documentChanged', entity.oid);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
this.reset = async (opts) => {
|
|
140
|
+
const names = Object.keys(this.ctx.schema.collections);
|
|
141
|
+
const tx = (opts === null || opts === void 0 ? void 0 : opts.transaction) ||
|
|
142
|
+
this.createTransaction(names, { mode: 'readwrite' });
|
|
143
|
+
await Promise.all(names.map((name) => this.run(name, (store) => store.clear(), { transaction: tx })));
|
|
144
|
+
this.ctx.entityEvents.emit('collectionsChanged', names);
|
|
145
|
+
this.ctx.log('info', '💨 Reset queryable storage');
|
|
146
|
+
};
|
|
147
|
+
this.dispose = () => {
|
|
148
|
+
return closeDatabase(this.db);
|
|
149
|
+
};
|
|
150
|
+
this.saveDocument = async (oid, doc, { transaction }) => {
|
|
151
|
+
this.ctx.log('debug', `Saving document indexes for querying ${oid}`);
|
|
152
|
+
const { collection, id } = decomposeOid(oid);
|
|
153
|
+
if (!doc) {
|
|
154
|
+
await this.run(collection, (store) => store.delete(id), {
|
|
155
|
+
mode: 'readwrite',
|
|
156
|
+
transaction,
|
|
157
|
+
});
|
|
158
|
+
this.ctx.log('debug', `Deleted document indexes for querying ${oid}`);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
const schema = this.ctx.schema.collections[collection];
|
|
162
|
+
// no need to validate before storing; the entity's snapshot is already validated.
|
|
163
|
+
const indexes = getIndexValues(schema, doc);
|
|
164
|
+
await this.run(collection, (store) => store.put(indexes), {
|
|
165
|
+
mode: 'readwrite',
|
|
166
|
+
transaction,
|
|
167
|
+
});
|
|
168
|
+
this.ctx.log('debug', `Save complete for ${oid}`, indexes);
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
this.ctx = context;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=IdbQueryDb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IdbQueryDb.js","sourceRoot":"","sources":["../../../../../src/persistence/idb/queries/IdbQueryDb.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { OpenDocumentDbContext } from './types.js';
|
|
2
|
-
export declare function getDatabaseVersion(indexedDB: IDBFactory, namespace: string
|
|
2
|
+
export declare function getDatabaseVersion(indexedDB: IDBFactory, namespace: string): Promise<number>;
|
|
3
3
|
/**
|
|
4
4
|
* Upgrades the database to the given version, using the given upgrader function.
|
|
5
5
|
*/
|