@verdant-web/store 4.0.0 → 4.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -650
- package/dist/bundle/index.js +11 -11
- package/dist/bundle/index.js.map +4 -4
- package/dist/esm/__tests__/fixtures/testStorage.d.ts +1 -2
- package/dist/esm/__tests__/fixtures/testStorage.js +3 -5
- package/dist/esm/__tests__/fixtures/testStorage.js.map +1 -1
- package/dist/esm/client/Client.d.ts +6 -2
- package/dist/esm/client/Client.js +18 -6
- package/dist/esm/client/Client.js.map +1 -1
- package/dist/esm/client/ClientDescriptor.d.ts +7 -5
- package/dist/esm/client/ClientDescriptor.js +18 -4
- package/dist/esm/client/ClientDescriptor.js.map +1 -1
- package/dist/esm/context/ShutdownHandler.d.ts +8 -0
- package/dist/esm/context/ShutdownHandler.js +24 -0
- package/dist/esm/context/ShutdownHandler.js.map +1 -0
- package/dist/esm/context/context.d.ts +15 -4
- package/dist/esm/entities/EntityStore.js +6 -3
- package/dist/esm/entities/EntityStore.js.map +1 -1
- package/dist/esm/files/EntityFile.d.ts +1 -0
- package/dist/esm/files/EntityFile.js +16 -11
- package/dist/esm/files/EntityFile.js.map +1 -1
- package/dist/esm/files/FileManager.d.ts +1 -3
- package/dist/esm/files/FileManager.js +12 -10
- package/dist/esm/files/FileManager.js.map +1 -1
- package/dist/esm/index.d.ts +4 -5
- package/dist/esm/index.js +2 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal.d.ts +6 -0
- package/dist/esm/internal.js +5 -0
- package/dist/esm/internal.js.map +1 -0
- package/dist/esm/persistence/MessageCreator.d.ts +3 -1
- package/dist/esm/persistence/MessageCreator.js +58 -55
- package/dist/esm/persistence/MessageCreator.js.map +1 -1
- package/dist/esm/persistence/PersistenceFiles.d.ts +8 -21
- package/dist/esm/persistence/PersistenceFiles.js +44 -30
- package/dist/esm/persistence/PersistenceFiles.js.map +1 -1
- package/dist/esm/persistence/PersistenceMetadata.d.ts +12 -11
- package/dist/esm/persistence/PersistenceMetadata.js +201 -137
- package/dist/esm/persistence/PersistenceMetadata.js.map +1 -1
- package/dist/esm/persistence/PersistenceQueries.d.ts +10 -11
- package/dist/esm/persistence/PersistenceQueries.js +33 -5
- package/dist/esm/persistence/PersistenceQueries.js.map +1 -1
- package/dist/esm/persistence/PersistenceRebaser.d.ts +5 -9
- package/dist/esm/persistence/PersistenceRebaser.js +63 -47
- package/dist/esm/persistence/PersistenceRebaser.js.map +1 -1
- package/dist/esm/persistence/idb/IdbService.d.ts +0 -1
- package/dist/esm/persistence/idb/IdbService.js +28 -16
- package/dist/esm/persistence/idb/IdbService.js.map +1 -1
- package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.d.ts +11 -31
- package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.js +31 -36
- package/dist/esm/persistence/idb/files/IdbPersistenceFileDb.js.map +1 -1
- package/dist/esm/persistence/idb/idbPersistence.d.ts +17 -9
- package/dist/esm/persistence/idb/idbPersistence.js +80 -39
- package/dist/esm/persistence/idb/idbPersistence.js.map +1 -1
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.d.ts +7 -10
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js +45 -71
- package/dist/esm/persistence/idb/metadata/IdbMetadataDb.js.map +1 -1
- package/dist/esm/persistence/idb/metadata/openMetadataDatabase.d.ts +1 -12
- package/dist/esm/persistence/idb/metadata/openMetadataDatabase.js +3 -56
- package/dist/esm/persistence/idb/metadata/openMetadataDatabase.js.map +1 -1
- package/dist/esm/persistence/idb/queries/{IdbQueryDb.d.ts → IdbDocumentDb.d.ts} +7 -13
- package/dist/esm/persistence/idb/queries/{IdbQueryDb.js → IdbDocumentDb.js} +15 -32
- package/dist/esm/persistence/idb/queries/IdbDocumentDb.js.map +1 -0
- package/dist/esm/persistence/idb/queries/migration/db.d.ts +3 -5
- package/dist/esm/persistence/idb/queries/migration/db.js +13 -28
- package/dist/esm/persistence/idb/queries/migration/db.js.map +1 -1
- package/dist/esm/persistence/idb/util.d.ts +8 -4
- package/dist/esm/persistence/idb/util.js +64 -21
- package/dist/esm/persistence/idb/util.js.map +1 -1
- package/dist/esm/persistence/interfaces.d.ts +68 -75
- package/dist/esm/persistence/{idb/queries/migration → migration}/engine.d.ts +4 -7
- package/dist/esm/persistence/{idb/queries/migration → migration}/engine.js +18 -10
- package/dist/esm/persistence/migration/engine.js.map +1 -0
- package/dist/esm/persistence/migration/finalize.d.ts +9 -0
- package/dist/esm/persistence/migration/finalize.js +75 -0
- package/dist/esm/persistence/migration/finalize.js.map +1 -0
- package/dist/esm/persistence/migration/migrate.d.ts +12 -0
- package/dist/esm/persistence/migration/migrate.js +89 -0
- package/dist/esm/persistence/migration/migrate.js.map +1 -0
- package/dist/esm/persistence/migration/paths.js.map +1 -0
- package/dist/esm/persistence/migration/paths.test.js.map +1 -0
- package/dist/esm/persistence/migration/types.d.ts +3 -0
- package/dist/esm/persistence/migration/types.js.map +1 -0
- package/dist/esm/persistence/persistence.js +25 -15
- package/dist/esm/persistence/persistence.js.map +1 -1
- package/dist/esm/queries/FindAllQuery.js +1 -1
- package/dist/esm/queries/FindAllQuery.js.map +1 -1
- package/dist/esm/queries/FindInfiniteQuery.js +2 -2
- package/dist/esm/queries/FindInfiniteQuery.js.map +1 -1
- package/dist/esm/queries/FindOneQuery.js +1 -1
- package/dist/esm/queries/FindOneQuery.js.map +1 -1
- package/dist/esm/queries/FindPageQuery.js +1 -1
- package/dist/esm/queries/FindPageQuery.js.map +1 -1
- package/dist/esm/sync/FileSync.js +3 -3
- package/dist/esm/sync/FileSync.js.map +1 -1
- package/dist/esm/sync/PushPullSync.d.ts +2 -3
- package/dist/esm/sync/PushPullSync.js +4 -2
- package/dist/esm/sync/PushPullSync.js.map +1 -1
- package/dist/esm/sync/ServerSyncEndpointProvider.d.ts +3 -7
- package/dist/esm/sync/ServerSyncEndpointProvider.js +3 -2
- package/dist/esm/sync/ServerSyncEndpointProvider.js.map +1 -1
- package/dist/esm/sync/Sync.d.ts +6 -1
- package/dist/esm/sync/Sync.js +12 -4
- package/dist/esm/sync/Sync.js.map +1 -1
- package/dist/esm/sync/WebSocketSync.js +10 -4
- package/dist/esm/sync/WebSocketSync.js.map +1 -1
- package/dist/esm/utils/wip.js +1 -1
- package/package.json +6 -2
- package/src/__tests__/fixtures/testStorage.ts +6 -6
- package/src/client/Client.ts +26 -8
- package/src/client/ClientDescriptor.ts +27 -9
- package/src/context/ShutdownHandler.ts +26 -0
- package/src/context/context.ts +16 -4
- package/src/entities/EntityStore.ts +9 -3
- package/src/files/EntityFile.ts +11 -6
- package/src/files/FileManager.ts +13 -10
- package/src/index.ts +8 -9
- package/src/internal.ts +27 -0
- package/src/persistence/MessageCreator.ts +79 -73
- package/src/persistence/PersistenceFiles.ts +57 -31
- package/src/persistence/PersistenceMetadata.ts +287 -195
- package/src/persistence/PersistenceQueries.ts +45 -9
- package/src/persistence/PersistenceRebaser.ts +105 -70
- package/src/persistence/idb/IdbService.ts +40 -22
- package/src/persistence/idb/files/IdbPersistenceFileDb.ts +30 -62
- package/src/persistence/idb/idbPersistence.ts +123 -47
- package/src/persistence/idb/metadata/IdbMetadataDb.ts +75 -97
- package/src/persistence/idb/metadata/openMetadataDatabase.ts +2 -96
- package/src/persistence/idb/queries/{IdbQueryDb.ts → IdbDocumentDb.ts} +17 -57
- package/src/persistence/idb/queries/migration/db.ts +20 -39
- package/src/persistence/idb/util.ts +84 -21
- package/src/persistence/interfaces.ts +89 -90
- package/src/persistence/{idb/queries/migration → migration}/engine.ts +30 -15
- package/src/persistence/migration/finalize.ts +126 -0
- package/src/persistence/migration/migrate.ts +169 -0
- package/src/persistence/migration/types.ts +4 -0
- package/src/persistence/persistence.ts +37 -14
- package/src/queries/FindAllQuery.ts +1 -1
- package/src/queries/FindInfiniteQuery.ts +2 -2
- package/src/queries/FindOneQuery.ts +1 -1
- package/src/queries/FindPageQuery.ts +1 -1
- package/src/sync/FileSync.ts +21 -15
- package/src/sync/PushPullSync.ts +3 -4
- package/src/sync/ServerSyncEndpointProvider.ts +6 -8
- package/src/sync/Sync.ts +20 -7
- package/src/sync/WebSocketSync.ts +10 -4
- package/src/utils/wip.ts +1 -1
- package/dist/esm/client/constants.d.ts +0 -1
- package/dist/esm/client/constants.js +0 -2
- package/dist/esm/client/constants.js.map +0 -1
- package/dist/esm/persistence/idb/queries/IdbQueryDb.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/engine.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/migrations.d.ts +0 -15
- package/dist/esm/persistence/idb/queries/migration/migrations.js +0 -243
- package/dist/esm/persistence/idb/queries/migration/migrations.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/openQueryDatabase.d.ts +0 -8
- package/dist/esm/persistence/idb/queries/migration/openQueryDatabase.js +0 -24
- package/dist/esm/persistence/idb/queries/migration/openQueryDatabase.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/paths.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/paths.test.js.map +0 -1
- package/dist/esm/persistence/idb/queries/migration/types.d.ts +0 -6
- package/dist/esm/persistence/idb/queries/migration/types.js.map +0 -1
- package/src/client/constants.ts +0 -1
- package/src/persistence/idb/queries/migration/migrations.ts +0 -345
- package/src/persistence/idb/queries/migration/openQueryDatabase.ts +0 -54
- package/src/persistence/idb/queries/migration/types.ts +0 -8
- /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.d.ts +0 -0
- /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.js +0 -0
- /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.test.d.ts +0 -0
- /package/dist/esm/persistence/{idb/queries/migration → migration}/paths.test.js +0 -0
- /package/dist/esm/persistence/{idb/queries/migration → migration}/types.js +0 -0
- /package/src/persistence/{idb/queries/migration → migration}/paths.test.ts +0 -0
- /package/src/persistence/{idb/queries/migration → migration}/paths.ts +0 -0
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import { applyPatch, assignOid, isFileRef, } from '@verdant-web/common';
|
|
2
2
|
export class PersistenceRebaser {
|
|
3
|
-
constructor(db, ctx) {
|
|
3
|
+
constructor(db, meta, ctx) {
|
|
4
4
|
this.db = db;
|
|
5
|
+
this.meta = meta;
|
|
5
6
|
this.ctx = ctx;
|
|
6
7
|
/**
|
|
7
8
|
* Autonomous rebases are only allowed for clients who have never synced. They
|
|
8
9
|
* keep storage clean for non-syncing clients by compressing history.
|
|
9
10
|
*/
|
|
10
11
|
this.tryAutonomousRebase = async () => {
|
|
11
|
-
const localReplicaInfo = await this.
|
|
12
|
+
const localReplicaInfo = await this.meta.getLocalReplica();
|
|
12
13
|
if (localReplicaInfo.lastSyncedLogicalTime)
|
|
13
14
|
return; // cannot autonomously rebase if we've synced
|
|
15
|
+
if (this.ctx.closing || this.ctx.persistenceShutdownHandler.isShuttingDown)
|
|
16
|
+
return;
|
|
14
17
|
// but if we have never synced... we can rebase everything!
|
|
18
|
+
this.ctx.log('debug', 'Running autonomous library rebase');
|
|
15
19
|
await this.runRebase(this.ctx.time.now);
|
|
16
20
|
};
|
|
17
21
|
/**
|
|
@@ -21,35 +25,37 @@ export class PersistenceRebaser {
|
|
|
21
25
|
* their undo stack.
|
|
22
26
|
*/
|
|
23
27
|
this.runRebase = async (globalAckTimestamp) => {
|
|
24
|
-
if (this.ctx.closing)
|
|
28
|
+
if (this.ctx.closing || this.ctx.persistenceShutdownHandler.isShuttingDown)
|
|
25
29
|
return;
|
|
26
|
-
|
|
27
|
-
let lastTimestamp;
|
|
28
|
-
const toRebase = new Set();
|
|
29
|
-
const transaction = this.db.transaction({
|
|
30
|
+
await this.db.transaction({
|
|
30
31
|
storeNames: ['baselines', 'operations'],
|
|
31
32
|
mode: 'readwrite',
|
|
33
|
+
}, async (transaction) => {
|
|
34
|
+
// find all operations before the global ack
|
|
35
|
+
const toRebase = new Set();
|
|
36
|
+
let lastTimestamp;
|
|
37
|
+
let operationCount = 0;
|
|
38
|
+
await this.db.iterateAllOperations((patch) => {
|
|
39
|
+
toRebase.add(patch.oid);
|
|
40
|
+
lastTimestamp = patch.timestamp;
|
|
41
|
+
operationCount++;
|
|
42
|
+
}, {
|
|
43
|
+
before: globalAckTimestamp,
|
|
44
|
+
transaction,
|
|
45
|
+
});
|
|
46
|
+
if (!toRebase.size) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (this.ctx.closing ||
|
|
50
|
+
this.ctx.persistenceShutdownHandler.isShuttingDown) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// rebase each affected document
|
|
54
|
+
let newBaselines = [];
|
|
55
|
+
for (const oid of toRebase) {
|
|
56
|
+
newBaselines.push(await this.rebase(oid, lastTimestamp || globalAckTimestamp, transaction));
|
|
57
|
+
}
|
|
32
58
|
});
|
|
33
|
-
let operationCount = 0;
|
|
34
|
-
await this.db.iterateAllOperations((patch) => {
|
|
35
|
-
toRebase.add(patch.oid);
|
|
36
|
-
lastTimestamp = patch.timestamp;
|
|
37
|
-
operationCount++;
|
|
38
|
-
}, {
|
|
39
|
-
before: globalAckTimestamp,
|
|
40
|
-
transaction,
|
|
41
|
-
});
|
|
42
|
-
if (!toRebase.size) {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
if (this.ctx.closing) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
// rebase each affected document
|
|
49
|
-
let newBaselines = [];
|
|
50
|
-
for (const oid of toRebase) {
|
|
51
|
-
newBaselines.push(await this.rebase(oid, lastTimestamp || globalAckTimestamp, transaction));
|
|
52
|
-
}
|
|
53
59
|
this.ctx.globalEvents.emit('rebase');
|
|
54
60
|
};
|
|
55
61
|
/**
|
|
@@ -62,20 +68,20 @@ export class PersistenceRebaser {
|
|
|
62
68
|
clearTimeout(this.rebaseTimeout);
|
|
63
69
|
}
|
|
64
70
|
this.rebaseTimeout = setTimeout(this.runRebase, (_b = (_a = this.ctx.config.persistence) === null || _a === void 0 ? void 0 : _a.rebaseTimeout) !== null && _b !== void 0 ? _b : 10000, timestamp);
|
|
71
|
+
this.ctx.log('debug', 'Scheduled rebase up to global ack', timestamp);
|
|
65
72
|
};
|
|
66
73
|
this.rebaseTimeout = null;
|
|
67
|
-
this.rebase = async (oid, upTo,
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
storeNames: ['operations', 'baselines'],
|
|
71
|
-
mode: 'readwrite',
|
|
72
|
-
});
|
|
74
|
+
this.rebase = async (oid, upTo, transaction) => {
|
|
75
|
+
if (this.ctx.closing || this.ctx.persistenceShutdownHandler.isShuttingDown)
|
|
76
|
+
return;
|
|
73
77
|
const baseline = await this.db.getBaseline(oid, { transaction });
|
|
74
78
|
let current = (baseline === null || baseline === void 0 ? void 0 : baseline.snapshot) || undefined;
|
|
75
79
|
let operationsApplied = 0;
|
|
76
80
|
let authz = baseline === null || baseline === void 0 ? void 0 : baseline.authz;
|
|
77
81
|
const deletedRefs = [];
|
|
78
|
-
|
|
82
|
+
if (this.ctx.closing || this.ctx.persistenceShutdownHandler.isShuttingDown)
|
|
83
|
+
return;
|
|
84
|
+
await this.db.iterateEntityOperations(oid, (patch) => {
|
|
79
85
|
// FIXME: this seems like the wrong place to do this
|
|
80
86
|
// but it's here as a safety measure...
|
|
81
87
|
if (!baseline || patch.timestamp > baseline.timestamp) {
|
|
@@ -99,20 +105,30 @@ export class PersistenceRebaser {
|
|
|
99
105
|
timestamp: upTo,
|
|
100
106
|
authz,
|
|
101
107
|
};
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
// cleanup deleted refs
|
|
110
|
-
if (deletedRefs.length) {
|
|
111
|
-
const fileRefs = deletedRefs.filter(isFileRef);
|
|
112
|
-
if (fileRefs.length) {
|
|
113
|
-
this.ctx.internalEvents.emit('filesDeleted', fileRefs);
|
|
108
|
+
// still time to cancel now...
|
|
109
|
+
if (this.ctx.closing || this.ctx.persistenceShutdownHandler.isShuttingDown)
|
|
110
|
+
return;
|
|
111
|
+
// FROM HERE, WE ARE COMMITTED TO THE REBASE -- otherwise data will be corrupted.
|
|
112
|
+
this.ctx.closeLock = (async () => {
|
|
113
|
+
if (newBaseline.snapshot) {
|
|
114
|
+
await this.db.setBaselines([newBaseline], { transaction });
|
|
114
115
|
}
|
|
115
|
-
|
|
116
|
+
else {
|
|
117
|
+
await this.db.deleteBaseline(oid, { transaction });
|
|
118
|
+
}
|
|
119
|
+
await this.db.deleteEntityOperations(oid, {
|
|
120
|
+
to: upTo,
|
|
121
|
+
transaction,
|
|
122
|
+
});
|
|
123
|
+
this.ctx.log('debug', 'rebased', oid, 'up to', upTo, ':', current, 'and deleted', operationsApplied, 'operations');
|
|
124
|
+
// cleanup deleted refs
|
|
125
|
+
if (deletedRefs.length) {
|
|
126
|
+
const fileRefs = deletedRefs.filter(isFileRef);
|
|
127
|
+
if (fileRefs.length) {
|
|
128
|
+
this.ctx.internalEvents.emit('filesDeleted', fileRefs);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
})();
|
|
116
132
|
return newBaseline;
|
|
117
133
|
};
|
|
118
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersistenceRebaser.js","sourceRoot":"","sources":["../../../src/persistence/PersistenceRebaser.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EACV,SAAS,EACT,SAAS,GAGT,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"PersistenceRebaser.js","sourceRoot":"","sources":["../../../src/persistence/PersistenceRebaser.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,5 @@ export declare class IdbService extends Disposable {
|
|
|
27
27
|
abort?: AbortSignal;
|
|
28
28
|
}) => Promise<void>;
|
|
29
29
|
clear: (storeName: string, transaction?: IDBTransaction) => Promise<undefined>;
|
|
30
|
-
cloneTo: (otherDb: IDBDatabase) => Promise<void>;
|
|
31
30
|
private onVersionChange;
|
|
32
31
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createAbortableTransaction, isAbortError, storeRequestPromise, } from './util.js';
|
|
2
2
|
import { Disposable } from '../../utils/Disposable.js';
|
|
3
3
|
export class IdbService extends Disposable {
|
|
4
4
|
constructor(db, { log } = {}) {
|
|
@@ -6,15 +6,25 @@ export class IdbService extends Disposable {
|
|
|
6
6
|
this.db = db;
|
|
7
7
|
this.globalAbortController = new AbortController();
|
|
8
8
|
this.createTransaction = (storeNames, opts) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
this.globalAbortController.signal.
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
var _a;
|
|
10
|
+
try {
|
|
11
|
+
if (this.globalAbortController.signal.aborted) {
|
|
12
|
+
throw new Error('Global abort signal is already aborted');
|
|
13
|
+
}
|
|
14
|
+
const tx = createAbortableTransaction(this.db, storeNames, (opts === null || opts === void 0 ? void 0 : opts.mode) || 'readonly', opts === null || opts === void 0 ? void 0 : opts.abort, this.log);
|
|
15
|
+
this.globalAbortController.signal.addEventListener('abort', tx.abort);
|
|
16
|
+
tx.addEventListener('complete', () => {
|
|
17
|
+
this.globalAbortController.signal.removeEventListener('abort', tx.abort);
|
|
18
|
+
});
|
|
19
|
+
tx.addEventListener('error', () => {
|
|
20
|
+
this.globalAbortController.signal.removeEventListener('abort', tx.abort);
|
|
21
|
+
});
|
|
22
|
+
return tx;
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
(_a = this.log) === null || _a === void 0 ? void 0 : _a.call(this, 'error', 'Failed to create abortable transaction for store names', storeNames, err);
|
|
26
|
+
throw err;
|
|
27
|
+
}
|
|
18
28
|
};
|
|
19
29
|
this.run = async (storeName, getRequest, opts) => {
|
|
20
30
|
var _a;
|
|
@@ -99,15 +109,17 @@ export class IdbService extends Disposable {
|
|
|
99
109
|
transaction,
|
|
100
110
|
});
|
|
101
111
|
};
|
|
102
|
-
this.
|
|
103
|
-
|
|
104
|
-
};
|
|
105
|
-
this.onVersionChange = () => {
|
|
106
|
-
var _a;
|
|
112
|
+
this.onVersionChange = (ev) => {
|
|
113
|
+
var _a, _b;
|
|
107
114
|
(_a = this.log) === null || _a === void 0 ? void 0 : _a.call(this, 'warn', `Another tab has requested a version change for ${this.db.name}`);
|
|
108
115
|
this.db.close();
|
|
109
116
|
if (typeof window !== 'undefined') {
|
|
110
|
-
|
|
117
|
+
try {
|
|
118
|
+
window.location.reload();
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
(_b = this.log) === null || _b === void 0 ? void 0 : _b.call(this, 'error', 'Failed to reload the page', err);
|
|
122
|
+
}
|
|
111
123
|
}
|
|
112
124
|
};
|
|
113
125
|
this.log = log;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdbService.js","sourceRoot":"","sources":["../../../../src/persistence/idb/IdbService.ts"],"names":[],"mappings":"AACA,OAAO,EACN,
|
|
1
|
+
{"version":3,"file":"IdbService.js","sourceRoot":"","sources":["../../../../src/persistence/idb/IdbService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { FileData } from '@verdant-web/common';
|
|
2
|
-
import { AbstractTransaction, PersistedFileData, PersistenceFileDb
|
|
2
|
+
import { AbstractTransaction, PersistedFileData, PersistenceFileDb } from '../../interfaces.js';
|
|
3
3
|
import { IdbService } from '../IdbService.js';
|
|
4
|
+
import { Context } from '../../../internal.js';
|
|
4
5
|
/**
|
|
5
6
|
* When stored in IDB, replace the file blob with an array buffer
|
|
6
7
|
* since it's more compatible, and replace remote boolean with
|
|
@@ -13,36 +14,14 @@ export interface StoredFileData extends Omit<FileData, 'remote' | 'file'> {
|
|
|
13
14
|
timestamp?: string;
|
|
14
15
|
}
|
|
15
16
|
export declare class IdbPersistenceFileDb extends IdbService implements PersistenceFileDb {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}) => Promise<void>;
|
|
25
|
-
markUploaded: (id: string, options?: {
|
|
26
|
-
transaction?: AbstractTransaction;
|
|
27
|
-
}) => Promise<void>;
|
|
28
|
-
get: (fileId: string, options?: {
|
|
29
|
-
transaction?: AbstractTransaction;
|
|
30
|
-
}) => Promise<PersistedFileData | null>;
|
|
31
|
-
delete: (fileId: string, options?: {
|
|
32
|
-
transaction?: AbstractTransaction;
|
|
33
|
-
}) => Promise<void>;
|
|
34
|
-
markPendingDelete: (fileId: string, options?: {
|
|
35
|
-
transaction?: AbstractTransaction;
|
|
36
|
-
}) => Promise<void>;
|
|
37
|
-
listUnsynced: (options?: {
|
|
38
|
-
transaction?: AbstractTransaction;
|
|
39
|
-
}) => Promise<PersistedFileData[]>;
|
|
40
|
-
resetSyncedStatusSince: (since: string | null, options?: {
|
|
41
|
-
transaction?: AbstractTransaction;
|
|
42
|
-
}) => Promise<void>;
|
|
43
|
-
iterateOverPendingDelete: (iterator: (file: PersistedFileData, store: IDBObjectStore) => void, options?: {
|
|
44
|
-
transaction?: IDBTransaction;
|
|
45
|
-
}) => Promise<void>;
|
|
17
|
+
add: (file: FileData) => Promise<void>;
|
|
18
|
+
markUploaded: (id: string) => Promise<void>;
|
|
19
|
+
get: (fileId: string) => Promise<PersistedFileData | null>;
|
|
20
|
+
delete: (fileId: string) => Promise<void>;
|
|
21
|
+
markPendingDelete: (fileId: string) => Promise<void>;
|
|
22
|
+
listUnsynced: () => Promise<PersistedFileData[]>;
|
|
23
|
+
resetSyncedStatusSince: (since: string | null) => Promise<void>;
|
|
24
|
+
iterateOverPendingDelete: (iterator: (file: PersistedFileData, store: IDBObjectStore) => void) => Promise<void>;
|
|
46
25
|
getAll: (options?: {
|
|
47
26
|
transaction?: AbstractTransaction;
|
|
48
27
|
}) => Promise<PersistedFileData[]>;
|
|
@@ -52,6 +31,7 @@ export declare class IdbPersistenceFileDb extends IdbService implements Persiste
|
|
|
52
31
|
size: number;
|
|
53
32
|
};
|
|
54
33
|
}>;
|
|
34
|
+
loadFileContents: (file: FileData, ctx: Context) => Promise<Blob>;
|
|
55
35
|
private hydrateFileData;
|
|
56
36
|
private getFileRaw;
|
|
57
37
|
}
|
|
@@ -3,25 +3,8 @@ import { getAllFromObjectStores, getSizeOfObjectStore } from '../util.js';
|
|
|
3
3
|
export class IdbPersistenceFileDb extends IdbService {
|
|
4
4
|
constructor() {
|
|
5
5
|
super(...arguments);
|
|
6
|
-
this.
|
|
7
|
-
return this.createTransaction(opts.storeNames, {
|
|
8
|
-
mode: opts.mode,
|
|
9
|
-
abort: opts.abort,
|
|
10
|
-
});
|
|
11
|
-
};
|
|
12
|
-
this.add = async (file, options) => {
|
|
6
|
+
this.add = async (file) => {
|
|
13
7
|
let buffer = file.file ? await fileToArrayBuffer(file.file) : undefined;
|
|
14
|
-
if (!buffer && (options === null || options === void 0 ? void 0 : options.downloadRemote) && file.url) {
|
|
15
|
-
try {
|
|
16
|
-
buffer = await fetch(file.url, {
|
|
17
|
-
method: 'GET',
|
|
18
|
-
credentials: 'include',
|
|
19
|
-
}).then((r) => r.arrayBuffer());
|
|
20
|
-
}
|
|
21
|
-
catch (err) {
|
|
22
|
-
console.error("Failed to download file to cache it locally. The file will still be available using its URL. Check the file server's CORS configuration.", err);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
8
|
await this.run('files', (store) => {
|
|
26
9
|
return store.put({
|
|
27
10
|
id: file.id,
|
|
@@ -32,14 +15,14 @@ export class IdbPersistenceFileDb extends IdbService {
|
|
|
32
15
|
type: file.type,
|
|
33
16
|
url: file.url,
|
|
34
17
|
buffer,
|
|
18
|
+
timestamp: file.timestamp,
|
|
35
19
|
});
|
|
36
20
|
}, {
|
|
37
21
|
mode: 'readwrite',
|
|
38
|
-
transaction: options === null || options === void 0 ? void 0 : options.transaction,
|
|
39
22
|
});
|
|
40
23
|
};
|
|
41
|
-
this.markUploaded = async (id
|
|
42
|
-
const current = await this.getFileRaw(id
|
|
24
|
+
this.markUploaded = async (id) => {
|
|
25
|
+
const current = await this.getFileRaw(id);
|
|
43
26
|
if (!current) {
|
|
44
27
|
throw new Error('File is not in local database');
|
|
45
28
|
}
|
|
@@ -47,26 +30,24 @@ export class IdbPersistenceFileDb extends IdbService {
|
|
|
47
30
|
return store.put(Object.assign(Object.assign({}, current), { remote: 'true' }));
|
|
48
31
|
}, {
|
|
49
32
|
mode: 'readwrite',
|
|
50
|
-
transaction: options === null || options === void 0 ? void 0 : options.transaction,
|
|
51
33
|
});
|
|
52
34
|
};
|
|
53
|
-
this.get = async (fileId
|
|
54
|
-
const raw = await this.getFileRaw(fileId
|
|
35
|
+
this.get = async (fileId) => {
|
|
36
|
+
const raw = await this.getFileRaw(fileId);
|
|
55
37
|
if (!raw) {
|
|
56
38
|
return null;
|
|
57
39
|
}
|
|
58
40
|
return this.hydrateFileData(raw);
|
|
59
41
|
};
|
|
60
|
-
this.delete = (fileId
|
|
42
|
+
this.delete = (fileId) => {
|
|
61
43
|
return this.run('files', (store) => {
|
|
62
44
|
return store.delete(fileId);
|
|
63
45
|
}, {
|
|
64
46
|
mode: 'readwrite',
|
|
65
|
-
transaction: options === null || options === void 0 ? void 0 : options.transaction,
|
|
66
47
|
});
|
|
67
48
|
};
|
|
68
|
-
this.markPendingDelete = async (fileId
|
|
69
|
-
const current = await this.getFileRaw(fileId
|
|
49
|
+
this.markPendingDelete = async (fileId) => {
|
|
50
|
+
const current = await this.getFileRaw(fileId);
|
|
70
51
|
if (!current) {
|
|
71
52
|
throw new Error('File is not in local database');
|
|
72
53
|
}
|
|
@@ -74,18 +55,18 @@ export class IdbPersistenceFileDb extends IdbService {
|
|
|
74
55
|
return store.put(Object.assign(Object.assign({}, current), { deletedAt: Date.now() }));
|
|
75
56
|
}, {
|
|
76
57
|
mode: 'readwrite',
|
|
77
|
-
transaction: options === null || options === void 0 ? void 0 : options.transaction,
|
|
78
58
|
});
|
|
79
59
|
};
|
|
80
|
-
this.listUnsynced = async (
|
|
60
|
+
this.listUnsynced = async () => {
|
|
81
61
|
const raw = await this.run('files', (store) => {
|
|
82
62
|
return store.index('remote').getAll('false');
|
|
83
|
-
}, { mode: 'readonly'
|
|
63
|
+
}, { mode: 'readonly' });
|
|
84
64
|
return raw.map(this.hydrateFileData);
|
|
85
65
|
};
|
|
86
|
-
this.resetSyncedStatusSince = async (since
|
|
87
|
-
|
|
88
|
-
|
|
66
|
+
this.resetSyncedStatusSince = async (since) => {
|
|
67
|
+
const tx = this.createTransaction(['files'], {
|
|
68
|
+
mode: 'readwrite',
|
|
69
|
+
});
|
|
89
70
|
const raw = await this.run('files', (store) => {
|
|
90
71
|
return store.index('remote').getAll('true');
|
|
91
72
|
}, { transaction: tx });
|
|
@@ -96,7 +77,7 @@ export class IdbPersistenceFileDb extends IdbService {
|
|
|
96
77
|
}, { transaction: tx });
|
|
97
78
|
}));
|
|
98
79
|
};
|
|
99
|
-
this.iterateOverPendingDelete = (iterator
|
|
80
|
+
this.iterateOverPendingDelete = (iterator) => {
|
|
100
81
|
return this.iterate('files', (store) => {
|
|
101
82
|
return store
|
|
102
83
|
.index('deletedAt')
|
|
@@ -105,7 +86,6 @@ export class IdbPersistenceFileDb extends IdbService {
|
|
|
105
86
|
iterator(this.hydrateFileData(value), store);
|
|
106
87
|
}, {
|
|
107
88
|
mode: 'readwrite',
|
|
108
|
-
transaction: options === null || options === void 0 ? void 0 : options.transaction,
|
|
109
89
|
});
|
|
110
90
|
};
|
|
111
91
|
this.getAll = async (options) => {
|
|
@@ -117,6 +97,21 @@ export class IdbPersistenceFileDb extends IdbService {
|
|
|
117
97
|
size: await getSizeOfObjectStore(this.db, 'files'),
|
|
118
98
|
};
|
|
119
99
|
};
|
|
100
|
+
this.loadFileContents = async (file, ctx) => {
|
|
101
|
+
if (file.file)
|
|
102
|
+
return file.file;
|
|
103
|
+
if (file.localPath) {
|
|
104
|
+
throw new Error('Local file paths are not supported in browser');
|
|
105
|
+
}
|
|
106
|
+
if (file.url) {
|
|
107
|
+
const response = await ctx.environment.fetch(file.url);
|
|
108
|
+
if (!response.ok) {
|
|
109
|
+
throw new Error(`Failed to download file: ${response.statusText}`);
|
|
110
|
+
}
|
|
111
|
+
return response.blob();
|
|
112
|
+
}
|
|
113
|
+
throw new Error('File is missing url, file, and localPath');
|
|
114
|
+
};
|
|
120
115
|
this.hydrateFileData = (raw) => {
|
|
121
116
|
raw.remote = raw.remote === 'true';
|
|
122
117
|
const buffer = raw.buffer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdbPersistenceFileDb.js","sourceRoot":"","sources":["../../../../../src/persistence/idb/files/IdbPersistenceFileDb.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"IdbPersistenceFileDb.js","sourceRoot":"","sources":["../../../../../src/persistence/idb/files/IdbPersistenceFileDb.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
import { Context, InitialContext } from '../../context/context.js';
|
|
2
|
-
import { PersistenceImplementation, PersistenceFileDb } from '../interfaces.js';
|
|
2
|
+
import { PersistenceImplementation, PersistenceFileDb, PersistenceNamespace } from '../interfaces.js';
|
|
3
3
|
import { IdbMetadataDb } from './metadata/IdbMetadataDb.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { IdbDocumentDb } from './queries/IdbDocumentDb.js';
|
|
5
|
+
import { Migration } from '@verdant-web/common';
|
|
6
|
+
import { OpenDocumentDbContext } from '../migration/types.js';
|
|
6
7
|
export declare class IdbPersistence implements PersistenceImplementation {
|
|
7
8
|
private indexedDB;
|
|
8
|
-
|
|
9
|
+
name: string;
|
|
9
10
|
constructor(indexedDB?: IDBFactory);
|
|
10
11
|
getNamespaces: () => Promise<string[]>;
|
|
11
12
|
getNamespaceVersion: (namespace: string) => Promise<number>;
|
|
12
13
|
deleteNamespace: (namespace: string, ctx: InitialContext) => Promise<void>;
|
|
13
|
-
|
|
14
|
-
openMetadata: (ctx: InitialContext) => Promise<IdbMetadataDb>;
|
|
15
|
-
openQueries: (ctx: InitialContext & {
|
|
16
|
-
meta: PersistenceMetadata;
|
|
17
|
-
}) => Promise<IdbQueryDb>;
|
|
14
|
+
openNamespace: (namespace: string) => Promise<IdbPersistenceNamespace>;
|
|
18
15
|
copyNamespace: (from: string, to: string, ctx: InitialContext) => Promise<void>;
|
|
19
16
|
}
|
|
17
|
+
declare class IdbPersistenceNamespace implements PersistenceNamespace {
|
|
18
|
+
private indexedDB;
|
|
19
|
+
private namespace;
|
|
20
|
+
constructor(indexedDB: IDBFactory, namespace: string);
|
|
21
|
+
private metadataDb;
|
|
22
|
+
openFiles(ctx: Omit<Context, 'files' | 'documents'>): Promise<PersistenceFileDb>;
|
|
23
|
+
openMetadata: (ctx: InitialContext) => Promise<IdbMetadataDb>;
|
|
24
|
+
openDocuments: (ctx: OpenDocumentDbContext) => Promise<IdbDocumentDb>;
|
|
25
|
+
applyMigration: (ctx: InitialContext, migration: Migration<any>) => Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
export {};
|