@verdant-web/store 4.0.0 → 4.1.0-alpha.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/LICENSE +21 -650
- package/dist/bundle/index.js +11 -11
- package/dist/bundle/index.js.map +4 -4
- package/dist/esm/__tests__/fixtures/testStorage.d.ts +1 -2
- package/dist/esm/__tests__/fixtures/testStorage.js +3 -5
- package/dist/esm/__tests__/fixtures/testStorage.js.map +1 -1
- package/dist/esm/client/Client.d.ts +6 -2
- package/dist/esm/client/Client.js +18 -6
- package/dist/esm/client/Client.js.map +1 -1
- package/dist/esm/client/ClientDescriptor.d.ts +7 -5
- package/dist/esm/client/ClientDescriptor.js +18 -4
- package/dist/esm/client/ClientDescriptor.js.map +1 -1
- package/dist/esm/context/ShutdownHandler.d.ts +8 -0
- package/dist/esm/context/ShutdownHandler.js +24 -0
- package/dist/esm/context/ShutdownHandler.js.map +1 -0
- package/dist/esm/context/context.d.ts +15 -4
- package/dist/esm/entities/EntityStore.js +6 -3
- package/dist/esm/entities/EntityStore.js.map +1 -1
- package/dist/esm/files/EntityFile.d.ts +1 -0
- package/dist/esm/files/EntityFile.js +16 -11
- package/dist/esm/files/EntityFile.js.map +1 -1
- package/dist/esm/files/FileManager.d.ts +1 -3
- package/dist/esm/files/FileManager.js +12 -10
- package/dist/esm/files/FileManager.js.map +1 -1
- package/dist/esm/index.d.ts +4 -5
- package/dist/esm/index.js +2 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal.d.ts +6 -0
- package/dist/esm/internal.js +5 -0
- package/dist/esm/internal.js.map +1 -0
- package/dist/esm/persistence/MessageCreator.d.ts +3 -1
- package/dist/esm/persistence/MessageCreator.js +58 -55
- package/dist/esm/persistence/MessageCreator.js.map +1 -1
- package/dist/esm/persistence/PersistenceFiles.d.ts +8 -21
- package/dist/esm/persistence/PersistenceFiles.js +44 -30
- package/dist/esm/persistence/PersistenceFiles.js.map +1 -1
- package/dist/esm/persistence/PersistenceMetadata.d.ts +12 -11
- package/dist/esm/persistence/PersistenceMetadata.js +201 -137
- package/dist/esm/persistence/PersistenceMetadata.js.map +1 -1
- package/dist/esm/persistence/PersistenceQueries.d.ts +10 -11
- package/dist/esm/persistence/PersistenceQueries.js +33 -5
- package/dist/esm/persistence/PersistenceQueries.js.map +1 -1
- package/dist/esm/persistence/PersistenceRebaser.d.ts +5 -9
- package/dist/esm/persistence/PersistenceRebaser.js +63 -47
- package/dist/esm/persistence/PersistenceRebaser.js.map +1 -1
- package/dist/esm/persistence/idb/IdbService.d.ts +0 -1
- package/dist/esm/persistence/idb/IdbService.js +28 -16
- package/dist/esm/persistence/idb/IdbService.js.map +1 -1
- package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.d.ts +11 -31
- package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.js +31 -36
- package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.js.map +1 -1
- package/dist/esm/persistence/idb/idbPersistence.d.ts +17 -9
- package/dist/esm/persistence/idb/idbPersistence.js +80 -39
- package/dist/esm/persistence/idb/idbPersistence.js.map +1 -1
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.d.ts +7 -10
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js +45 -71
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js.map +1 -1
- package/dist/esm/persistence/idb/metadata/openMetadataDatabase.d.ts +1 -12
- package/dist/esm/persistence/idb/metadata/openMetadataDatabase.js +3 -56
- package/dist/esm/persistence/idb/metadata/openMetadataDatabase.js.map +1 -1
- package/dist/esm/persistence/idb/queries/{IdbQueryDb.d.ts → IdbDocumentDb.d.ts} +7 -13
- package/dist/esm/persistence/idb/queries/{IdbQueryDb.js → IdbDocumentDb.js} +15 -32
- package/dist/esm/persistence/idb/queries/IdbDocumentDb.js.map +1 -0
- package/dist/esm/persistence/idb/queries/migration/db.d.ts +3 -5
- package/dist/esm/persistence/idb/queries/migration/db.js +13 -28
- package/dist/esm/persistence/idb/queries/migration/db.js.map +1 -1
- package/dist/esm/persistence/idb/util.d.ts +8 -4
- package/dist/esm/persistence/idb/util.js +64 -21
- package/dist/esm/persistence/idb/util.js.map +1 -1
- package/dist/esm/persistence/interfaces.d.ts +68 -75
- package/dist/esm/persistence/{idb/queries/migration → migration}/engine.d.ts +4 -7
- package/dist/esm/persistence/{idb/queries/migration → migration}/engine.js +18 -10
- package/dist/esm/persistence/migration/engine.js.map +1 -0
- package/dist/esm/persistence/migration/finalize.d.ts +9 -0
- package/dist/esm/persistence/migration/finalize.js +75 -0
- package/dist/esm/persistence/migration/finalize.js.map +1 -0
- package/dist/esm/persistence/migration/migrate.d.ts +12 -0
- package/dist/esm/persistence/migration/migrate.js +89 -0
- package/dist/esm/persistence/migration/migrate.js.map +1 -0
- package/dist/esm/persistence/migration/paths.js.map +1 -0
- package/dist/esm/persistence/migration/paths.test.js.map +1 -0
- package/dist/esm/persistence/migration/types.d.ts +3 -0
- package/dist/esm/persistence/migration/types.js.map +1 -0
- package/dist/esm/persistence/persistence.js +25 -15
- package/dist/esm/persistence/persistence.js.map +1 -1
- package/dist/esm/queries/FindAllQuery.js +1 -1
- package/dist/esm/queries/FindAllQuery.js.map +1 -1
- package/dist/esm/queries/FindInfiniteQuery.js +2 -2
- package/dist/esm/queries/FindInfiniteQuery.js.map +1 -1
- package/dist/esm/queries/FindOneQuery.js +1 -1
- package/dist/esm/queries/FindOneQuery.js.map +1 -1
- package/dist/esm/queries/FindPageQuery.js +1 -1
- package/dist/esm/queries/FindPageQuery.js.map +1 -1
- package/dist/esm/sync/FileSync.js +3 -3
- package/dist/esm/sync/FileSync.js.map +1 -1
- package/dist/esm/sync/PushPullSync.d.ts +2 -3
- package/dist/esm/sync/PushPullSync.js +4 -2
- package/dist/esm/sync/PushPullSync.js.map +1 -1
- package/dist/esm/sync/ServerSyncEndpointProvider.d.ts +3 -7
- package/dist/esm/sync/ServerSyncEndpointProvider.js +3 -2
- package/dist/esm/sync/ServerSyncEndpointProvider.js.map +1 -1
- package/dist/esm/sync/Sync.d.ts +6 -1
- package/dist/esm/sync/Sync.js +12 -4
- package/dist/esm/sync/Sync.js.map +1 -1
- package/dist/esm/sync/WebSocketSync.js +10 -4
- package/dist/esm/sync/WebSocketSync.js.map +1 -1
- package/package.json +6 -2
- package/src/__tests__/fixtures/testStorage.ts +6 -6
- package/src/client/Client.ts +26 -8
- package/src/client/ClientDescriptor.ts +27 -9
- package/src/context/ShutdownHandler.ts +26 -0
- package/src/context/context.ts +16 -4
- package/src/entities/EntityStore.ts +9 -3
- package/src/files/EntityFile.ts +11 -6
- package/src/files/FileManager.ts +13 -10
- package/src/index.ts +8 -9
- package/src/internal.ts +27 -0
- package/src/persistence/MessageCreator.ts +79 -73
- package/src/persistence/PersistenceFiles.ts +57 -31
- package/src/persistence/PersistenceMetadata.ts +287 -195
- package/src/persistence/PersistenceQueries.ts +45 -9
- package/src/persistence/PersistenceRebaser.ts +105 -70
- package/src/persistence/idb/IdbService.ts +40 -22
- package/src/persistence/idb/files/IdbPersistenceFileDb.ts +30 -62
- package/src/persistence/idb/idbPersistence.ts +123 -47
- package/src/persistence/idb/metadata/IdbMetadataDb.ts +75 -97
- package/src/persistence/idb/metadata/openMetadataDatabase.ts +2 -96
- package/src/persistence/idb/queries/{IdbQueryDb.ts → IdbDocumentDb.ts} +17 -57
- package/src/persistence/idb/queries/migration/db.ts +20 -39
- package/src/persistence/idb/util.ts +84 -21
- package/src/persistence/interfaces.ts +89 -90
- package/src/persistence/{idb/queries/migration → migration}/engine.ts +30 -15
- package/src/persistence/migration/finalize.ts +126 -0
- package/src/persistence/migration/migrate.ts +169 -0
- package/src/persistence/migration/types.ts +4 -0
- package/src/persistence/persistence.ts +37 -14
- package/src/queries/FindAllQuery.ts +1 -1
- package/src/queries/FindInfiniteQuery.ts +2 -2
- package/src/queries/FindOneQuery.ts +1 -1
- package/src/queries/FindPageQuery.ts +1 -1
- package/src/sync/FileSync.ts +21 -15
- package/src/sync/PushPullSync.ts +3 -4
- package/src/sync/ServerSyncEndpointProvider.ts +6 -8
- package/src/sync/Sync.ts +20 -7
- package/src/sync/WebSocketSync.ts +10 -4
- package/dist/esm/client/constants.d.ts +0 -1
- package/dist/esm/client/constants.js +0 -2
- package/dist/esm/client/constants.js.map +0 -1
- package/dist/esm/persistence/idb/queries/IdbQueryDb.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/engine.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/migrations.d.ts +0 -15
- package/dist/esm/persistence/idb/queries/migration/migrations.js +0 -243
- package/dist/esm/persistence/idb/queries/migration/migrations.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/openQueryDatabase.d.ts +0 -8
- package/dist/esm/persistence/idb/queries/migration/openQueryDatabase.js +0 -24
- package/dist/esm/persistence/idb/queries/migration/openQueryDatabase.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/paths.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/paths.test.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/types.d.ts +0 -6
- package/dist/esm/persistence/idb/queries/migration/types.js.map +0 -1
- package/src/client/constants.ts +0 -1
- package/src/persistence/idb/queries/migration/migrations.ts +0 -345
- package/src/persistence/idb/queries/migration/openQueryDatabase.ts +0 -54
- package/src/persistence/idb/queries/migration/types.ts +0 -8
- /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.d.ts +0 -0
- /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.js +0 -0
- /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.test.d.ts +0 -0
- /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.test.js +0 -0
- /package/dist/esm/persistence/{idb/queries/migration → migration}/types.js +0 -0
- /package/src/persistence/{idb/queries/migration → migration}/paths.test.ts +0 -0
- /package/src/persistence/{idb/queries/migration → migration}/paths.ts +0 -0
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import { CollectionFilter, DocumentBaseline, FileData, ObjectIdentifier, Operation } from '@verdant-web/common';
|
|
1
|
+
import { CollectionFilter, DocumentBaseline, FileData, Migration, ObjectIdentifier, Operation } from '@verdant-web/common';
|
|
2
2
|
import { Context, InitialContext } from '../context/context.js';
|
|
3
3
|
export interface AckInfo {
|
|
4
|
-
type: 'ack';
|
|
5
4
|
globalAckTimestamp: string | null;
|
|
6
5
|
}
|
|
7
6
|
export interface LocalReplicaInfo {
|
|
8
|
-
type: 'localReplicaInfo';
|
|
9
7
|
id: string;
|
|
10
|
-
userId: string |
|
|
8
|
+
userId: string | null;
|
|
11
9
|
ackedLogicalTime: string | null;
|
|
12
10
|
lastSyncedLogicalTime: string | null;
|
|
13
11
|
}
|
|
@@ -25,56 +23,55 @@ export interface ExportedData {
|
|
|
25
23
|
fileData: Array<Omit<PersistedFileData, 'file'>>;
|
|
26
24
|
files: File[];
|
|
27
25
|
}
|
|
28
|
-
export type AbstractTransaction =
|
|
26
|
+
export type AbstractTransaction = any;
|
|
29
27
|
export type QueryMode = 'readwrite' | 'readonly';
|
|
30
|
-
export interface CommonQueryOptions {
|
|
31
|
-
transaction?:
|
|
28
|
+
export interface CommonQueryOptions<Tx extends AbstractTransaction = AbstractTransaction> {
|
|
29
|
+
transaction?: Tx;
|
|
32
30
|
mode?: QueryMode;
|
|
33
31
|
}
|
|
34
32
|
export type Iterator<T> = (item: T) => void | boolean;
|
|
35
|
-
export interface PersistenceMetadataDb {
|
|
36
|
-
transaction(opts: {
|
|
33
|
+
export interface PersistenceMetadataDb<Tx extends AbstractTransaction = AbstractTransaction> {
|
|
34
|
+
transaction<T = void>(opts: {
|
|
37
35
|
mode?: QueryMode;
|
|
38
36
|
storeNames: string[];
|
|
39
37
|
abort?: AbortSignal;
|
|
40
|
-
}):
|
|
41
|
-
dispose(): void | Promise<void>;
|
|
38
|
+
}, procedure: (tx: Tx) => Promise<T>): Promise<T>;
|
|
42
39
|
getAckInfo(): Promise<AckInfo>;
|
|
43
40
|
setGlobalAck(ack: string): Promise<void>;
|
|
44
|
-
getLocalReplica(opts?: CommonQueryOptions): Promise<LocalReplicaInfo>;
|
|
45
|
-
updateLocalReplica(data:
|
|
46
|
-
iterateDocumentBaselines(rootOid: string, iterator: Iterator<DocumentBaseline>, opts?: CommonQueryOptions): Promise<void>;
|
|
47
|
-
iterateCollectionBaselines(collection: string, iterator: Iterator<DocumentBaseline>, opts?: CommonQueryOptions): Promise<void>;
|
|
48
|
-
iterateAllBaselines(iterator: Iterator<DocumentBaseline>, opts?: CommonQueryOptions): Promise<void>;
|
|
49
|
-
getBaseline(oid: string, opts?: CommonQueryOptions): Promise<DocumentBaseline>;
|
|
50
|
-
setBaselines(baselines: DocumentBaseline[], opts?: CommonQueryOptions): Promise<void>;
|
|
51
|
-
deleteBaseline(oid: string, opts?: CommonQueryOptions): Promise<void>;
|
|
52
|
-
iterateDocumentOperations(rootOid: string, iterator: Iterator<ClientOperation>, opts?: CommonQueryOptions & {
|
|
41
|
+
getLocalReplica(opts?: CommonQueryOptions<Tx>): Promise<LocalReplicaInfo | undefined | null>;
|
|
42
|
+
updateLocalReplica(data: LocalReplicaInfo, opts?: CommonQueryOptions<Tx>): Promise<void>;
|
|
43
|
+
iterateDocumentBaselines(rootOid: string, iterator: Iterator<DocumentBaseline>, opts?: CommonQueryOptions<Tx>): Promise<void>;
|
|
44
|
+
iterateCollectionBaselines(collection: string, iterator: Iterator<DocumentBaseline>, opts?: CommonQueryOptions<Tx>): Promise<void>;
|
|
45
|
+
iterateAllBaselines(iterator: Iterator<DocumentBaseline>, opts?: CommonQueryOptions<Tx>): Promise<void>;
|
|
46
|
+
getBaseline(oid: string, opts?: CommonQueryOptions<Tx>): Promise<DocumentBaseline | null>;
|
|
47
|
+
setBaselines(baselines: DocumentBaseline[], opts?: CommonQueryOptions<Tx>): Promise<void>;
|
|
48
|
+
deleteBaseline(oid: string, opts?: CommonQueryOptions<Tx>): Promise<void>;
|
|
49
|
+
iterateDocumentOperations(rootOid: string, iterator: Iterator<ClientOperation>, opts?: CommonQueryOptions<Tx> & {
|
|
53
50
|
to?: string | null;
|
|
54
51
|
}): Promise<void>;
|
|
55
|
-
iterateEntityOperations(oid: string, iterator: Iterator<ClientOperation>, opts?: CommonQueryOptions & {
|
|
52
|
+
iterateEntityOperations(oid: string, iterator: Iterator<ClientOperation>, opts?: CommonQueryOptions<Tx> & {
|
|
56
53
|
to?: string | null;
|
|
57
54
|
}): Promise<void>;
|
|
58
|
-
iterateCollectionOperations(collection: string, iterator: Iterator<ClientOperation>, opts?: CommonQueryOptions): Promise<void>;
|
|
59
|
-
iterateLocalOperations(iterator: Iterator<ClientOperation>, opts?: CommonQueryOptions & {
|
|
55
|
+
iterateCollectionOperations(collection: string, iterator: Iterator<ClientOperation>, opts?: CommonQueryOptions<Tx>): Promise<void>;
|
|
56
|
+
iterateLocalOperations(iterator: Iterator<ClientOperation>, opts?: CommonQueryOptions<Tx> & {
|
|
60
57
|
before?: string | null;
|
|
61
58
|
after?: string | null;
|
|
62
59
|
}): Promise<void>;
|
|
63
60
|
/** Iterates over operations for an entity for processing and deletes them as it goes. */
|
|
64
|
-
|
|
65
|
-
to
|
|
61
|
+
deleteEntityOperations(oid: string, opts: CommonQueryOptions<Tx> & {
|
|
62
|
+
to: string | null;
|
|
66
63
|
}): Promise<void>;
|
|
67
|
-
iterateAllOperations(iterator: Iterator<ClientOperation>, opts?: CommonQueryOptions & {
|
|
64
|
+
iterateAllOperations(iterator: Iterator<ClientOperation>, opts?: CommonQueryOptions<Tx> & {
|
|
68
65
|
before?: string | null;
|
|
69
66
|
from?: string | null;
|
|
70
67
|
}): Promise<void>;
|
|
71
68
|
/**
|
|
72
69
|
* @returns a list of all document (root) OIDs affected by the adds.
|
|
73
70
|
*/
|
|
74
|
-
addOperations(ops: ClientOperation[], opts?: CommonQueryOptions): Promise<ObjectIdentifier[]>;
|
|
71
|
+
addOperations(ops: ClientOperation[], opts?: CommonQueryOptions<Tx>): Promise<ObjectIdentifier[]>;
|
|
75
72
|
reset(opts?: {
|
|
76
73
|
clearReplica?: boolean;
|
|
77
|
-
transaction?:
|
|
74
|
+
transaction?: Tx;
|
|
78
75
|
}): Promise<void>;
|
|
79
76
|
stats(): Promise<{
|
|
80
77
|
operationsSize: {
|
|
@@ -87,13 +84,7 @@ export interface PersistenceMetadataDb {
|
|
|
87
84
|
};
|
|
88
85
|
}>;
|
|
89
86
|
}
|
|
90
|
-
export interface
|
|
91
|
-
transaction(opts: {
|
|
92
|
-
mode?: QueryMode;
|
|
93
|
-
storeNames: string[];
|
|
94
|
-
abort?: AbortSignal;
|
|
95
|
-
}): AbstractTransaction;
|
|
96
|
-
dispose(): void | Promise<void>;
|
|
87
|
+
export interface PersistenceDocumentDb {
|
|
97
88
|
findOneOid(opts: {
|
|
98
89
|
collection: string;
|
|
99
90
|
index?: CollectionFilter;
|
|
@@ -110,55 +101,33 @@ export interface PersistenceQueryDb {
|
|
|
110
101
|
saveEntities(entities: {
|
|
111
102
|
oid: ObjectIdentifier;
|
|
112
103
|
getSnapshot: () => any;
|
|
113
|
-
}[],
|
|
104
|
+
}[], optsAndInfo: {
|
|
114
105
|
abort?: AbortSignal;
|
|
106
|
+
collections: string[];
|
|
115
107
|
}): Promise<void>;
|
|
116
|
-
reset(
|
|
117
|
-
transaction?: AbstractTransaction;
|
|
118
|
-
}): Promise<void>;
|
|
108
|
+
reset(): Promise<void>;
|
|
119
109
|
stats(): Promise<Record<string, {
|
|
120
110
|
count: number;
|
|
121
111
|
size: number;
|
|
122
112
|
}>>;
|
|
113
|
+
close(): Promise<void>;
|
|
123
114
|
}
|
|
124
115
|
export interface PersistedFileData extends FileData {
|
|
125
116
|
deletedAt: number | null;
|
|
126
117
|
}
|
|
127
118
|
export interface PersistenceFileDb {
|
|
128
|
-
transaction(opts: {
|
|
129
|
-
mode?: QueryMode;
|
|
130
|
-
storeNames: string[];
|
|
131
|
-
abort?: AbortSignal;
|
|
132
|
-
}): AbstractTransaction;
|
|
133
|
-
dispose(): void | Promise<void>;
|
|
134
119
|
add(file: FileData, options?: {
|
|
135
|
-
transaction?: AbstractTransaction;
|
|
136
120
|
downloadRemote?: boolean;
|
|
137
121
|
}): Promise<void>;
|
|
138
|
-
markUploaded(fileId: string
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
markPendingDelete(fileId: string, options?: {
|
|
148
|
-
transaction?: AbstractTransaction;
|
|
149
|
-
}): Promise<void>;
|
|
150
|
-
listUnsynced(options?: {
|
|
151
|
-
transaction?: AbstractTransaction;
|
|
152
|
-
}): Promise<PersistedFileData[]>;
|
|
153
|
-
resetSyncedStatusSince(since: string | null, options?: {
|
|
154
|
-
transaction?: AbstractTransaction;
|
|
155
|
-
}): Promise<void>;
|
|
156
|
-
iterateOverPendingDelete(iterator: (file: PersistedFileData, store: IDBObjectStore) => void, options?: {
|
|
157
|
-
transaction?: IDBTransaction;
|
|
158
|
-
}): Promise<void>;
|
|
159
|
-
getAll(options?: {
|
|
160
|
-
transaction?: AbstractTransaction;
|
|
161
|
-
}): Promise<PersistedFileData[]>;
|
|
122
|
+
markUploaded(fileId: string): Promise<void>;
|
|
123
|
+
get(fileId: string): Promise<PersistedFileData | null>;
|
|
124
|
+
delete(fileId: string): Promise<void>;
|
|
125
|
+
markPendingDelete(fileId: string): Promise<void>;
|
|
126
|
+
listUnsynced(): Promise<PersistedFileData[]>;
|
|
127
|
+
resetSyncedStatusSince(since: string | null): Promise<void>;
|
|
128
|
+
iterateOverPendingDelete(iterator: (file: PersistedFileData) => void): Promise<void>;
|
|
129
|
+
loadFileContents(file: FileData, ctx: Context): Promise<Blob>;
|
|
130
|
+
getAll(): Promise<PersistedFileData[]>;
|
|
162
131
|
stats(): Promise<{
|
|
163
132
|
size: {
|
|
164
133
|
count: number;
|
|
@@ -166,16 +135,40 @@ export interface PersistenceFileDb {
|
|
|
166
135
|
};
|
|
167
136
|
}>;
|
|
168
137
|
}
|
|
169
|
-
export interface
|
|
138
|
+
export interface PersistenceNamespace {
|
|
170
139
|
openMetadata(ctx: InitialContext): Promise<PersistenceMetadataDb>;
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
140
|
+
/**
|
|
141
|
+
* Open the Documents database according to the schema in the given
|
|
142
|
+
* context. By the time this is called with a version, relevant migrations
|
|
143
|
+
* will have been applied.
|
|
144
|
+
*/
|
|
145
|
+
openDocuments(ctx: Omit<Context, 'documents' | 'files'>): Promise<PersistenceDocumentDb>;
|
|
146
|
+
/**
|
|
147
|
+
* Apply a migration to the namespace provided in ctx.
|
|
148
|
+
* This should make any transformations necessary to the
|
|
149
|
+
* document database to accommodate the new schema indexes.
|
|
150
|
+
* The migration itself contains a lot of information about
|
|
151
|
+
* what changed between versions.
|
|
152
|
+
*
|
|
153
|
+
* This method should also store the new version to persisted
|
|
154
|
+
* metadata, however your implementation chooses to do that.
|
|
155
|
+
*/
|
|
156
|
+
applyMigration(ctx: InitialContext, migration: Migration<any>): Promise<void>;
|
|
157
|
+
openFiles(ctx: Omit<Context, 'files' | 'documents'>): Promise<PersistenceFileDb>;
|
|
158
|
+
}
|
|
159
|
+
export interface PersistenceImplementation {
|
|
160
|
+
name: string;
|
|
161
|
+
openNamespace(namespace: string, ctx: Pick<Context, 'log' | 'persistenceShutdownHandler'>): Promise<PersistenceNamespace>;
|
|
175
162
|
/** Returns a list of all persisted namespaces visible to this app. */
|
|
176
163
|
getNamespaces(): Promise<string[]>;
|
|
177
164
|
/** Deletes all data from a particular namespace. */
|
|
178
165
|
deleteNamespace(namespace: string, ctx: InitialContext): Promise<void>;
|
|
179
166
|
/** Gets the schema version of the given namespace */
|
|
180
167
|
getNamespaceVersion(namespace: string): Promise<number>;
|
|
168
|
+
/**
|
|
169
|
+
* Copies all data from one namespace to another. It should
|
|
170
|
+
* overwrite the target namespace such that data and database
|
|
171
|
+
* schema are identical.
|
|
172
|
+
*/
|
|
173
|
+
copyNamespace(from: string, to: string, ctx: InitialContext): Promise<void>;
|
|
181
174
|
}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { Migration, MigrationEngine } from '@verdant-web/common';
|
|
2
2
|
import { OpenDocumentDbContext } from './types.js';
|
|
3
|
-
|
|
3
|
+
import { PersistenceNamespace } from '../interfaces.js';
|
|
4
|
+
export declare function getMigrationEngine({ migration, context, ns, }: {
|
|
4
5
|
log?: (...args: any[]) => void;
|
|
5
6
|
migration: Migration;
|
|
6
7
|
context: OpenDocumentDbContext;
|
|
7
|
-
|
|
8
|
-
}): MigrationEngine
|
|
9
|
-
export declare function getInitialMigrationEngine({ migration, context, }: {
|
|
10
|
-
context: OpenDocumentDbContext;
|
|
11
|
-
migration: Migration;
|
|
12
|
-
}): MigrationEngine;
|
|
8
|
+
ns: PersistenceNamespace;
|
|
9
|
+
}): Promise<MigrationEngine>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { addFieldDefaults, assert, assignOidsToAllSubObjects, cloneDeep, createOid, diffToPatches, getOid, removeOidPropertiesFromAllSubObjects, } from '@verdant-web/common';
|
|
2
|
-
import { IdbQueryDb } from '../IdbQueryDb.js';
|
|
3
2
|
function getMigrationMutations({ migration, newOids, ctx, }) {
|
|
4
3
|
return migration.allCollections.reduce((acc, collectionName) => {
|
|
5
4
|
acc[collectionName] = {
|
|
@@ -23,8 +22,7 @@ function getMigrationMutations({ migration, newOids, ctx, }) {
|
|
|
23
22
|
return acc;
|
|
24
23
|
}, {});
|
|
25
24
|
}
|
|
26
|
-
function getMigrationQueries({ migration, context,
|
|
27
|
-
const queries = new IdbQueryDb(queryDb, context);
|
|
25
|
+
function getMigrationQueries({ migration, context, documents, }) {
|
|
28
26
|
return migration.oldCollections.reduce((acc, collectionName) => {
|
|
29
27
|
acc[collectionName] = {
|
|
30
28
|
get: async (id) => {
|
|
@@ -36,7 +34,7 @@ function getMigrationQueries({ migration, context, queryDb, }) {
|
|
|
36
34
|
return doc;
|
|
37
35
|
},
|
|
38
36
|
findOne: async (filter) => {
|
|
39
|
-
const oid = await
|
|
37
|
+
const oid = await documents.findOneOid({
|
|
40
38
|
collection: collectionName,
|
|
41
39
|
index: filter,
|
|
42
40
|
});
|
|
@@ -49,7 +47,7 @@ function getMigrationQueries({ migration, context, queryDb, }) {
|
|
|
49
47
|
return doc;
|
|
50
48
|
},
|
|
51
49
|
findAll: async (filter) => {
|
|
52
|
-
const { result: oids } = await
|
|
50
|
+
const { result: oids } = await documents.findAllOids({
|
|
53
51
|
collection: collectionName,
|
|
54
52
|
index: filter,
|
|
55
53
|
});
|
|
@@ -63,17 +61,22 @@ function getMigrationQueries({ migration, context, queryDb, }) {
|
|
|
63
61
|
return acc;
|
|
64
62
|
}, {});
|
|
65
63
|
}
|
|
66
|
-
export function getMigrationEngine({ migration, context,
|
|
64
|
+
export async function getMigrationEngine({ migration, context, ns, }) {
|
|
65
|
+
const migrationContext = Object.assign(Object.assign({}, context), { schema: migration.oldSchema });
|
|
66
|
+
if (migration.oldSchema.version === 0) {
|
|
67
|
+
return getInitialMigrationEngine({ migration, context: migrationContext });
|
|
68
|
+
}
|
|
67
69
|
const newOids = new Array();
|
|
70
|
+
const documents = await ns.openDocuments(migrationContext);
|
|
68
71
|
const queries = getMigrationQueries({
|
|
69
72
|
migration,
|
|
70
|
-
context,
|
|
71
|
-
|
|
73
|
+
context: migrationContext,
|
|
74
|
+
documents,
|
|
72
75
|
});
|
|
73
76
|
const mutations = getMigrationMutations({
|
|
74
77
|
migration,
|
|
75
78
|
newOids,
|
|
76
|
-
ctx:
|
|
79
|
+
ctx: migrationContext,
|
|
77
80
|
});
|
|
78
81
|
const deleteCollection = async (collection) => {
|
|
79
82
|
await context.meta.deleteCollection(collection);
|
|
@@ -85,6 +88,7 @@ export function getMigrationEngine({ migration, context, queryDb, }) {
|
|
|
85
88
|
deleteCollection,
|
|
86
89
|
migrate: async (collection, strategy) => {
|
|
87
90
|
const docs = await queries[collection].findAll();
|
|
91
|
+
context.log('debug', `Migrating ${docs.length} documents in ${collection}`);
|
|
88
92
|
await Promise.all(docs.filter(Boolean).map(async (doc) => {
|
|
89
93
|
const rootOid = getOid(doc);
|
|
90
94
|
assert(!!rootOid, `Document is missing an OID: ${JSON.stringify(doc)}`);
|
|
@@ -119,10 +123,13 @@ export function getMigrationEngine({ migration, context, queryDb, }) {
|
|
|
119
123
|
queries,
|
|
120
124
|
mutations,
|
|
121
125
|
awaitables,
|
|
126
|
+
close: async () => {
|
|
127
|
+
await documents.close();
|
|
128
|
+
},
|
|
122
129
|
};
|
|
123
130
|
return engine;
|
|
124
131
|
}
|
|
125
|
-
|
|
132
|
+
function getInitialMigrationEngine({ migration, context, }) {
|
|
126
133
|
const newOids = new Array();
|
|
127
134
|
const queries = new Proxy({}, {
|
|
128
135
|
get() {
|
|
@@ -146,6 +153,7 @@ export function getInitialMigrationEngine({ migration, context, }) {
|
|
|
146
153
|
queries,
|
|
147
154
|
mutations,
|
|
148
155
|
awaitables: [],
|
|
156
|
+
close: () => Promise.resolve(),
|
|
149
157
|
};
|
|
150
158
|
return engine;
|
|
151
159
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../src/persistence/migration/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Migration, MigrationEngine } from '@verdant-web/common';
|
|
2
|
+
import { PersistenceDocumentDb } from '../interfaces.js';
|
|
3
|
+
import { OpenDocumentDbContext } from './types.js';
|
|
4
|
+
export declare function finalizeMigration({ ctx, documents, migration, engine, }: {
|
|
5
|
+
ctx: OpenDocumentDbContext;
|
|
6
|
+
documents: PersistenceDocumentDb;
|
|
7
|
+
migration: Migration<any>;
|
|
8
|
+
engine: MigrationEngine;
|
|
9
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { decomposeOid, getOidRoot, } from '@verdant-web/common';
|
|
2
|
+
export async function finalizeMigration({ ctx, documents, migration, engine, }) {
|
|
3
|
+
/**
|
|
4
|
+
* In cases where operations from the future have been
|
|
5
|
+
* received by this client, we may have created entire
|
|
6
|
+
* documents in metadata which were not written to storage
|
|
7
|
+
* because all of their operations were in the future (
|
|
8
|
+
* i.e. in the next version). We have to find those documents
|
|
9
|
+
* and also write their snapshots to storage, because they
|
|
10
|
+
* won't be present in storage already to 'refresh,' so
|
|
11
|
+
* if we don't analyze metadata for 'future' operations like
|
|
12
|
+
* this, we won't know they exist.
|
|
13
|
+
*
|
|
14
|
+
* This led to behavior where the metadata would be properly
|
|
15
|
+
* synced, but after upgrading the app and migrating, items
|
|
16
|
+
* would be missing from findAll and findOne queries.
|
|
17
|
+
*/
|
|
18
|
+
const docsWithUnappliedMigrations = await getDocsWithUnappliedMigrations({
|
|
19
|
+
currentVersion: migration.oldSchema.version,
|
|
20
|
+
newVersion: migration.newSchema.version,
|
|
21
|
+
ctx,
|
|
22
|
+
});
|
|
23
|
+
// once the schema is ready, we can write back the migrated documents
|
|
24
|
+
for (const collection of migration.allCollections) {
|
|
25
|
+
// map the keys to OIDs
|
|
26
|
+
const { result: oids } = await documents.findAllOids({
|
|
27
|
+
collection,
|
|
28
|
+
});
|
|
29
|
+
oids.push(...engine.newOids.filter((oid) => {
|
|
30
|
+
return decomposeOid(oid).collection === collection;
|
|
31
|
+
}), ...docsWithUnappliedMigrations.filter((oid) => {
|
|
32
|
+
return decomposeOid(oid).collection === collection;
|
|
33
|
+
}));
|
|
34
|
+
const snapshots = await Promise.all(oids.map(async (oid) => {
|
|
35
|
+
try {
|
|
36
|
+
const snap = await ctx.meta.getDocumentSnapshot(oid);
|
|
37
|
+
return [oid, snap];
|
|
38
|
+
}
|
|
39
|
+
catch (e) {
|
|
40
|
+
// this seems to happen with baselines/ops which are not fully
|
|
41
|
+
// cleaned up after deletion?
|
|
42
|
+
ctx.log('error', 'Could not regenerate snapshot during migration for oid', oid, 'this document will not be preserved', e);
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}));
|
|
46
|
+
const views = snapshots.filter((s) => !!s);
|
|
47
|
+
// now we can write the documents back
|
|
48
|
+
await documents.saveEntities(views.map(([oid, snapshot]) => ({
|
|
49
|
+
oid,
|
|
50
|
+
getSnapshot() {
|
|
51
|
+
return snapshot;
|
|
52
|
+
},
|
|
53
|
+
})), {
|
|
54
|
+
collections: [collection],
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Gets a list of root OIDs for all documents which had operations stored already
|
|
60
|
+
* that were not applied to their queryable snapshots because they were in the
|
|
61
|
+
* future. These documents need to be refreshed in storage.
|
|
62
|
+
*/
|
|
63
|
+
async function getDocsWithUnappliedMigrations({ currentVersion, newVersion: _, ctx, }) {
|
|
64
|
+
// scan for all operations in metadata after the current version.
|
|
65
|
+
// this could be more efficient if also filtering below or equal newVersion but
|
|
66
|
+
// that seems so unlikely in practice...
|
|
67
|
+
const unappliedOperations = [];
|
|
68
|
+
await ctx.meta.iterateAllOperations((op) => {
|
|
69
|
+
unappliedOperations.push(op);
|
|
70
|
+
}, {
|
|
71
|
+
from: ctx.time.zeroWithVersion(currentVersion + 1),
|
|
72
|
+
});
|
|
73
|
+
return Array.from(new Set(unappliedOperations.map((op) => getOidRoot(op.oid))));
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=finalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finalize.js","sourceRoot":"","sources":["../../../../src/persistence/migration/finalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Migration } from '@verdant-web/common';
|
|
2
|
+
import { OpenDocumentDbContext } from './types.js';
|
|
3
|
+
import { PersistenceNamespace } from '../interfaces.js';
|
|
4
|
+
export declare function migrate({ context, version, }: {
|
|
5
|
+
context: OpenDocumentDbContext;
|
|
6
|
+
version: number;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
export declare function runMigrations({ context, toRun, ns, }: {
|
|
9
|
+
context: OpenDocumentDbContext;
|
|
10
|
+
toRun: Migration<any>[];
|
|
11
|
+
ns: PersistenceNamespace;
|
|
12
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { getMigrationPath } from './paths.js';
|
|
2
|
+
import { getMigrationEngine } from './engine.js';
|
|
3
|
+
import { finalizeMigration } from './finalize.js';
|
|
4
|
+
import { ShutdownHandler } from '../../context/ShutdownHandler.js';
|
|
5
|
+
export async function migrate({ context, version, }) {
|
|
6
|
+
const ns = await context.persistence.openNamespace(context.namespace, context);
|
|
7
|
+
await acquireLock(context.namespace, async () => {
|
|
8
|
+
const currentVersion = await context.persistence.getNamespaceVersion(context.namespace);
|
|
9
|
+
context.log('debug', 'Opening index database', context.namespace, 'Current database version:', currentVersion, 'target version:', version, context.schema.wip ? '(wip)' : '');
|
|
10
|
+
const toRun = getMigrationPath({
|
|
11
|
+
currentVersion,
|
|
12
|
+
targetVersion: version,
|
|
13
|
+
migrations: context.migrations,
|
|
14
|
+
});
|
|
15
|
+
if (toRun.length > 0) {
|
|
16
|
+
context.log('debug', 'Migrations to run:', toRun.map((m) => m.version));
|
|
17
|
+
await runMigrations({ context, ns, toRun });
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
async function acquireLock(namespace, procedure) {
|
|
22
|
+
if (typeof navigator !== 'undefined' && navigator.locks) {
|
|
23
|
+
await navigator.locks.request(`verdant_migration_${namespace}`, procedure);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// TODO: is there a fallback?
|
|
27
|
+
await procedure();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export async function runMigrations({ context, toRun, ns, }) {
|
|
31
|
+
// disable rebasing for the duration of migrations
|
|
32
|
+
context.pauseRebasing = true;
|
|
33
|
+
// now the fun part
|
|
34
|
+
for (const migration of toRun) {
|
|
35
|
+
context.log('info', `🚀 Running migration v${migration.oldSchema.version} -> v${migration.newSchema.version}`);
|
|
36
|
+
const migrationContext = Object.assign(Object.assign({}, context), { schema: migration.oldSchema, shutdownHandler: new ShutdownHandler() });
|
|
37
|
+
// this will only write to our metadata store via operations!
|
|
38
|
+
const engine = await getMigrationEngine({
|
|
39
|
+
migration,
|
|
40
|
+
context: migrationContext,
|
|
41
|
+
ns,
|
|
42
|
+
});
|
|
43
|
+
try {
|
|
44
|
+
context.log('debug', 'Migrating data', migrationContext.namespace, 'from version', migration.oldSchema.version, 'to version', migration.newSchema.version);
|
|
45
|
+
await migration.migrate(engine);
|
|
46
|
+
// wait on any out-of-band async operations to complete
|
|
47
|
+
await Promise.all(engine.awaitables);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
context.log('critical', `Migration failed (${migration.oldSchema.version} -> ${migration.newSchema.version})`, err);
|
|
51
|
+
if (err instanceof Error) {
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
throw new Error('Unknown error during migration');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
await engine.close();
|
|
59
|
+
migrationContext.log('debug', 'Upgrading database', migrationContext.namespace, 'from version', migrationContext.schema.version, 'to version', migration.newSchema.version);
|
|
60
|
+
await ns.applyMigration(migrationContext, migration);
|
|
61
|
+
// switch to the new schema
|
|
62
|
+
migrationContext.schema = migration.newSchema;
|
|
63
|
+
const upgradedDocuments = await ns.openDocuments(migrationContext);
|
|
64
|
+
await finalizeMigration({
|
|
65
|
+
ctx: migrationContext,
|
|
66
|
+
migration,
|
|
67
|
+
engine,
|
|
68
|
+
documents: upgradedDocuments,
|
|
69
|
+
});
|
|
70
|
+
await upgradedDocuments.close();
|
|
71
|
+
migrationContext.log('debug', `Migration of ${migrationContext.namespace} complete.`);
|
|
72
|
+
migrationContext.log('info', `
|
|
73
|
+
⬆️ v${migration.newSchema.version} Migration complete. Here's the rundown:
|
|
74
|
+
- Added collections: ${migration.addedCollections.join(', ')}
|
|
75
|
+
- Removed collections: ${migration.removedCollections.join(', ')}
|
|
76
|
+
- Changed collections: ${migration.changedCollections.join(', ')}
|
|
77
|
+
- New indexes: ${Object.keys(migration.addedIndexes)
|
|
78
|
+
.map((col) => migration.addedIndexes[col].map((i) => `${col}.${i.name}`))
|
|
79
|
+
.flatMap((i) => i)
|
|
80
|
+
.join(', ')}
|
|
81
|
+
- Removed indexes: ${Object.keys(migration.removedIndexes)
|
|
82
|
+
.map((col) => migration.removedIndexes[col].map((i) => `${col}.${i.name}`))
|
|
83
|
+
.flatMap((i) => i)
|
|
84
|
+
.join(', ')}
|
|
85
|
+
`);
|
|
86
|
+
}
|
|
87
|
+
context.pauseRebasing = false;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../../src/persistence/migration/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../../src/persistence/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/migration/paths.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/persistence/migration/types.ts"],"names":[],"mappings":""}
|