document-drive 1.27.0 → 1.27.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/prisma/schema.prisma +1 -0
- package/dist/src/queue/base.js +1 -1
- package/dist/src/queue/types.d.ts +2 -2
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/server/base-server.d.ts +5 -4
- package/dist/src/server/base-server.d.ts.map +1 -1
- package/dist/src/server/base-server.js +33 -31
- package/dist/src/server/builder.d.ts.map +1 -1
- package/dist/src/server/builder.js +3 -1
- package/dist/src/storage/browser.d.ts +12 -4
- package/dist/src/storage/browser.d.ts.map +1 -1
- package/dist/src/storage/browser.js +65 -21
- package/dist/src/storage/filesystem.d.ts +7 -4
- package/dist/src/storage/filesystem.d.ts.map +1 -1
- package/dist/src/storage/filesystem.js +94 -74
- package/dist/src/storage/memory.d.ts +3 -2
- package/dist/src/storage/memory.d.ts.map +1 -1
- package/dist/src/storage/memory.js +9 -1
- package/dist/src/storage/prisma/index.d.ts.map +1 -1
- package/dist/src/storage/prisma/index.js +2 -0
- package/dist/src/storage/sequelize.d.ts +4 -3
- package/dist/src/storage/sequelize.d.ts.map +1 -1
- package/dist/src/storage/sequelize.js +4 -2
- package/dist/src/storage/types.d.ts +3 -0
- package/dist/src/storage/types.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -1
- package/dist/src/storage/base.d.ts +0 -36
- package/dist/src/storage/base.d.ts.map +0 -1
- package/dist/src/storage/base.js +0 -4
package/dist/src/queue/base.js
CHANGED
|
@@ -84,7 +84,7 @@ export class BaseQueueManager {
|
|
|
84
84
|
}
|
|
85
85
|
// checks if the job is for a document that doesn't exist in storage yet
|
|
86
86
|
const newDocument = job.documentId &&
|
|
87
|
-
!(await this.delegate.checkDocumentExists(job.
|
|
87
|
+
!(await this.delegate.checkDocumentExists(job.documentId));
|
|
88
88
|
// if it is a new document and queue is not yet blocked then
|
|
89
89
|
// blocks it so the jobs are not processed until it's ready
|
|
90
90
|
if (newDocument && !(await queue.isBlocked())) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { type AddOperationOptions, type IOperationResult } from "#server/types";
|
|
1
2
|
import type { Action, Operation } from "document-model";
|
|
2
3
|
import type { Unsubscribe } from "nanoevents";
|
|
3
|
-
import { type AddOperationOptions, type IOperationResult } from "#server/types";
|
|
4
4
|
export interface BaseJob {
|
|
5
5
|
driveId: string;
|
|
6
6
|
documentId?: string;
|
|
@@ -21,7 +21,7 @@ export interface QueueEvents {
|
|
|
21
21
|
queueRemoved: (queueId: string) => void;
|
|
22
22
|
}
|
|
23
23
|
export interface IServerDelegate {
|
|
24
|
-
checkDocumentExists: (
|
|
24
|
+
checkDocumentExists: (documentId: string) => Promise<boolean>;
|
|
25
25
|
processJob: (job: Job) => Promise<IOperationResult>;
|
|
26
26
|
}
|
|
27
27
|
export interface IQueueManager {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/queue/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/queue/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ICache } from "#cache/types";
|
|
2
2
|
import { type IQueueManager } from "#queue/types";
|
|
3
|
-
import { type IDriveStorage } from "#storage/types";
|
|
3
|
+
import { IDocumentStorage, type IDriveStorage } from "#storage/types";
|
|
4
4
|
import { type IDefaultDrivesManager } from "#utils/default-drives-manager";
|
|
5
5
|
import { type DocumentDriveAction, type DocumentDriveDocument } from "document-drive";
|
|
6
6
|
import { type Action, type DocumentModelModule, type Operation, type PHDocument } from "document-model";
|
|
@@ -10,6 +10,7 @@ import { type AddOperationOptions, type Constructor, type CreateDocumentInput, t
|
|
|
10
10
|
export declare class BaseDocumentDriveServer implements IBaseDocumentDriveServer, IDefaultDrivesManager {
|
|
11
11
|
private documentModelModules;
|
|
12
12
|
private storage;
|
|
13
|
+
private documentStorage;
|
|
13
14
|
private cache;
|
|
14
15
|
private queueManager;
|
|
15
16
|
private eventEmitter;
|
|
@@ -17,9 +18,11 @@ export declare class BaseDocumentDriveServer implements IBaseDocumentDriveServer
|
|
|
17
18
|
private listenerManager;
|
|
18
19
|
private synchronizationManager;
|
|
19
20
|
private defaultDrivesManager;
|
|
21
|
+
private defaultDrivesManagerDelegate;
|
|
22
|
+
private queueDelegate;
|
|
20
23
|
private triggerMap;
|
|
21
24
|
private initializePromise;
|
|
22
|
-
constructor(documentModelModules: DocumentModelModule[], storage: IDriveStorage, cache: ICache, queueManager: IQueueManager, eventEmitter: IEventEmitter, synchronizationManager: ISynchronizationManager, listenerManager: IListenerManager, options?: DocumentDriveServerOptions);
|
|
25
|
+
constructor(documentModelModules: DocumentModelModule[], storage: IDriveStorage, documentStorage: IDocumentStorage, cache: ICache, queueManager: IQueueManager, eventEmitter: IEventEmitter, synchronizationManager: ISynchronizationManager, listenerManager: IListenerManager, options?: DocumentDriveServerOptions);
|
|
23
26
|
get listeners(): IListenerManager;
|
|
24
27
|
initialize(): Promise<Error[] | null>;
|
|
25
28
|
private _initialize;
|
|
@@ -33,8 +36,6 @@ export declare class BaseDocumentDriveServer implements IBaseDocumentDriveServer
|
|
|
33
36
|
private shouldSyncRemoteDrive;
|
|
34
37
|
private startSyncRemoteDrive;
|
|
35
38
|
private stopSyncRemoteDrive;
|
|
36
|
-
private defaultDrivesManagerDelegate;
|
|
37
|
-
private queueDelegate;
|
|
38
39
|
private _initializeDrive;
|
|
39
40
|
getSynchronizationUnits(driveId: string, documentId?: string[], scope?: string[], branch?: string[], documentType?: string[]): Promise<SynchronizationUnit[]>;
|
|
40
41
|
getSynchronizationUnitsIds(driveId: string, documentId?: string[], scope?: string[], branch?: string[], documentType?: string[]): Promise<SynchronizationUnitQuery[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-server.d.ts","sourceRoot":"","sources":["../../../src/server/base-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAO3C,OAAO,EAEL,KAAK,aAAa,EAKnB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"base-server.d.ts","sourceRoot":"","sources":["../../../src/server/base-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { removeListener, removeTrigger, setSharingType } from "#drive-document-model/gen/creators";
|
|
1
|
+
import { removeListener, removeTrigger, setSharingType, } from "#drive-document-model/gen/creators";
|
|
2
2
|
import { createDocument } from "#drive-document-model/gen/utils";
|
|
3
3
|
import { isActionJob, isOperationJob, } from "#queue/types";
|
|
4
4
|
import { ReadModeServer } from "#read-mode/server";
|
|
@@ -11,12 +11,13 @@ import { attachBranch, garbageCollect, garbageCollectDocumentOperations, groupOp
|
|
|
11
11
|
import { ClientError } from "graphql-request";
|
|
12
12
|
import { ConflictOperationError, DriveAlreadyExistsError, OperationError, } from "./error.js";
|
|
13
13
|
import { PullResponderTransmitter, } from "./listener/transmitter/pull-responder.js";
|
|
14
|
-
import { DefaultListenerManagerOptions } from "./types.js";
|
|
14
|
+
import { DefaultListenerManagerOptions, } from "./types.js";
|
|
15
15
|
import { filterOperationsByRevision, isAtRevision } from "./utils.js";
|
|
16
16
|
export class BaseDocumentDriveServer {
|
|
17
17
|
// external dependencies
|
|
18
18
|
documentModelModules;
|
|
19
19
|
storage;
|
|
20
|
+
documentStorage;
|
|
20
21
|
cache;
|
|
21
22
|
queueManager;
|
|
22
23
|
eventEmitter;
|
|
@@ -25,12 +26,41 @@ export class BaseDocumentDriveServer {
|
|
|
25
26
|
synchronizationManager;
|
|
26
27
|
// internal dependencies
|
|
27
28
|
defaultDrivesManager;
|
|
29
|
+
defaultDrivesManagerDelegate = {
|
|
30
|
+
detachDrive: this.detachDrive.bind(this),
|
|
31
|
+
emit: (...args) => this.eventEmitter.emit("defaultRemoteDrive", ...args),
|
|
32
|
+
};
|
|
33
|
+
queueDelegate = {
|
|
34
|
+
checkDocumentExists: (documentId) => this.documentStorage.exists(documentId),
|
|
35
|
+
processOperationJob: async ({ driveId, documentId, operations, options, }) => {
|
|
36
|
+
return documentId
|
|
37
|
+
? this.addOperations(driveId, documentId, operations, options)
|
|
38
|
+
: this.addDriveOperations(driveId, operations, options);
|
|
39
|
+
},
|
|
40
|
+
processActionJob: async ({ driveId, documentId, actions, options, }) => {
|
|
41
|
+
return documentId
|
|
42
|
+
? this.addActions(driveId, documentId, actions, options)
|
|
43
|
+
: this.addDriveActions(driveId, actions, options);
|
|
44
|
+
},
|
|
45
|
+
processJob: async (job) => {
|
|
46
|
+
if (isOperationJob(job)) {
|
|
47
|
+
return this.queueDelegate.processOperationJob(job);
|
|
48
|
+
}
|
|
49
|
+
else if (isActionJob(job)) {
|
|
50
|
+
return this.queueDelegate.processActionJob(job);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
throw new Error("Unknown job type", job);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
};
|
|
28
57
|
// internal state
|
|
29
58
|
triggerMap = new Map();
|
|
30
59
|
initializePromise;
|
|
31
|
-
constructor(documentModelModules, storage, cache, queueManager, eventEmitter, synchronizationManager, listenerManager, options) {
|
|
60
|
+
constructor(documentModelModules, storage, documentStorage, cache, queueManager, eventEmitter, synchronizationManager, listenerManager, options) {
|
|
32
61
|
this.documentModelModules = documentModelModules;
|
|
33
62
|
this.storage = storage;
|
|
63
|
+
this.documentStorage = documentStorage;
|
|
34
64
|
this.cache = cache;
|
|
35
65
|
this.queueManager = queueManager;
|
|
36
66
|
this.eventEmitter = eventEmitter;
|
|
@@ -215,34 +245,6 @@ export class BaseDocumentDriveServer {
|
|
|
215
245
|
}
|
|
216
246
|
return this.triggerMap.delete(driveId);
|
|
217
247
|
}
|
|
218
|
-
defaultDrivesManagerDelegate = {
|
|
219
|
-
detachDrive: this.detachDrive.bind(this),
|
|
220
|
-
emit: (...args) => this.eventEmitter.emit("defaultRemoteDrive", ...args),
|
|
221
|
-
};
|
|
222
|
-
queueDelegate = {
|
|
223
|
-
checkDocumentExists: (driveId, documentId) => this.storage.checkDocumentExists(driveId, documentId),
|
|
224
|
-
processOperationJob: async ({ driveId, documentId, operations, options, }) => {
|
|
225
|
-
return documentId
|
|
226
|
-
? this.addOperations(driveId, documentId, operations, options)
|
|
227
|
-
: this.addDriveOperations(driveId, operations, options);
|
|
228
|
-
},
|
|
229
|
-
processActionJob: async ({ driveId, documentId, actions, options, }) => {
|
|
230
|
-
return documentId
|
|
231
|
-
? this.addActions(driveId, documentId, actions, options)
|
|
232
|
-
: this.addDriveActions(driveId, actions, options);
|
|
233
|
-
},
|
|
234
|
-
processJob: async (job) => {
|
|
235
|
-
if (isOperationJob(job)) {
|
|
236
|
-
return this.queueDelegate.processOperationJob(job);
|
|
237
|
-
}
|
|
238
|
-
else if (isActionJob(job)) {
|
|
239
|
-
return this.queueDelegate.processActionJob(job);
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
throw new Error("Unknown job type", job);
|
|
243
|
-
}
|
|
244
|
-
},
|
|
245
|
-
};
|
|
246
248
|
async _initializeDrive(driveId) {
|
|
247
249
|
const drive = await this.getDrive(driveId);
|
|
248
250
|
await this.synchronizationManager.initializeDriveSyncStatus(driveId, drive);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/server/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/server/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAM3E,OAAO,EAEL,oBAAoB,EACpB,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,qBAAa,cAAc;IAClB,oBAAoB,EAAE,mBAAmB,EAAE,CAAM;IAEjD,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,OAAO,CAAC,EAAE,0BAA0B,CAAC;IACrC,sBAAsB,CAAC,EAAE,uBAAuB,CAAC;IACjD,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;gBAEpC,oBAAoB,EAAE,mBAAmB,EAAE;IAIhD,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKzC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,gBAAgB,CAAC,YAAY,EAAE,aAAa,GAAG,IAAI;IAKnD,gBAAgB,CAAC,YAAY,EAAE,aAAa,GAAG,IAAI;IAKnD,0BAA0B,CAC/B,sBAAsB,EAAE,uBAAuB,GAC9C,IAAI;IAKA,mBAAmB,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI;IAK5D,sBAAsB,CAAC,kBAAkB,EAAE,mBAAmB,GAAG,IAAI;IAKrE,WAAW,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAKtD,KAAK,IAAI,oBAAoB;CA2DrC"}
|
|
@@ -84,6 +84,8 @@ export class ReactorBuilder {
|
|
|
84
84
|
if (!this.transmitterFactory) {
|
|
85
85
|
this.transmitterFactory = new TransmitterFactory(this.listenerManager);
|
|
86
86
|
}
|
|
87
|
-
return new DocumentDriveServer(this.documentModelModules, this.storage,
|
|
87
|
+
return new DocumentDriveServer(this.documentModelModules, this.storage,
|
|
88
|
+
// as we refactor, we're secretly making all the IStorage implementations also implement IDocumentStorage
|
|
89
|
+
this.storage, this.cache, this.queueManager, this.eventEmitter, this.synchronizationManager, this.listenerManager, this.options);
|
|
88
90
|
}
|
|
89
91
|
}
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import { type DocumentDriveAction, type DocumentDriveDocument } from "#drive-document-model/gen/types";
|
|
2
2
|
import { type SynchronizationUnitQuery } from "#server/types";
|
|
3
3
|
import type { DocumentHeader, Operation, PHDocument } from "document-model";
|
|
4
|
-
import { type IDriveStorage } from "./types.js";
|
|
5
|
-
export declare class BrowserStorage implements IDriveStorage {
|
|
4
|
+
import { IDocumentStorage, type IDriveStorage } from "./types.js";
|
|
5
|
+
export declare class BrowserStorage implements IDriveStorage, IDocumentStorage {
|
|
6
6
|
private db;
|
|
7
7
|
static DBName: string;
|
|
8
8
|
static SEP: string;
|
|
9
9
|
static DRIVES_KEY: string;
|
|
10
|
+
static DOCUMENT_KEY: string;
|
|
11
|
+
static MANIFEST_KEY: string;
|
|
10
12
|
constructor(namespace?: string);
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
buildDriveKey(driveId: string): string;
|
|
14
|
+
buildDocumentKey(documentId: string): string;
|
|
15
|
+
buildManifestKey(driveId: string): string;
|
|
16
|
+
exists(documentId: string): Promise<boolean>;
|
|
17
|
+
checkDocumentExists(drive: string, documentId: string): Promise<boolean>;
|
|
18
|
+
private getDriveManifest;
|
|
19
|
+
private updateDriveManifest;
|
|
13
20
|
getDocuments(drive: string): Promise<string[]>;
|
|
14
21
|
getDocument<TDocument extends PHDocument>(driveId: string, id: string): Promise<TDocument>;
|
|
15
22
|
createDocument(drive: string, id: string, document: PHDocument): Promise<void>;
|
|
@@ -31,6 +38,7 @@ export declare class BrowserStorage implements IDriveStorage {
|
|
|
31
38
|
revision: number;
|
|
32
39
|
}[]>;
|
|
33
40
|
migrateOperationSignatures(): Promise<void>;
|
|
41
|
+
private migrateDrive;
|
|
34
42
|
private migrateDocument;
|
|
35
43
|
}
|
|
36
44
|
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/storage/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EAET,UAAU,EACX,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/storage/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EAET,UAAU,EACX,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAOlE,qBAAa,cAAe,YAAW,aAAa,EAAE,gBAAgB;IACpE,OAAO,CAAC,EAAE,CAAuB;IAEjC,MAAM,CAAC,MAAM,SAAqB;IAClC,MAAM,CAAC,GAAG,SAAO;IACjB,MAAM,CAAC,UAAU,SAAY;IAC7B,MAAM,CAAC,YAAY,SAAc;IACjC,MAAM,CAAC,YAAY,SAAc;gBAErB,SAAS,CAAC,EAAE,MAAM;IAU9B,aAAa,CAAC,OAAO,EAAE,MAAM;IAI7B,gBAAgB,CAAC,UAAU,EAAE,MAAM;IAInC,gBAAgB,CAAC,OAAO,EAAE,MAAM;IAI1B,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASlD,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAI1D,gBAAgB;YAQhB,mBAAmB;IAQ3B,YAAY,CAAC,KAAK,EAAE,MAAM;IAK1B,WAAW,CAAC,SAAS,SAAS,UAAU,EAC5C,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,SAAS,CAAC;IAUf,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU;IAY9D,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAYxC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,qBAAqB,CACzB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC;IAgBV,SAAS;IAUT,QAAQ,CAAC,EAAE,EAAE,MAAM;IAWnB,cAAc,CAAC,IAAI,EAAE,MAAM;IAa3B,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB;IAQpD,WAAW,CAAC,EAAE,EAAE,MAAM;IAatB,kBAAkB,CACtB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,SAAS,CAAC,mBAAmB,CAAC,EAAE,EAC5C,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC;IAYV,+BAA+B,CACnC,KAAK,EAAE,wBAAwB,EAAE,GAChC,OAAO,CACR;QACE,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,EAAE,CACJ;IA6CK,0BAA0B;YAYlB,YAAY;YAWZ,eAAe;CAU9B"}
|
|
@@ -7,6 +7,8 @@ export class BrowserStorage {
|
|
|
7
7
|
static DBName = "DOCUMENT_DRIVES";
|
|
8
8
|
static SEP = ":";
|
|
9
9
|
static DRIVES_KEY = "DRIVES";
|
|
10
|
+
static DOCUMENT_KEY = "DOCUMENT";
|
|
11
|
+
static MANIFEST_KEY = "MANIFEST";
|
|
10
12
|
constructor(namespace) {
|
|
11
13
|
this.db = LocalForage.ready().then(() => LocalForage.createInstance({
|
|
12
14
|
name: namespace
|
|
@@ -14,33 +16,62 @@ export class BrowserStorage {
|
|
|
14
16
|
: BrowserStorage.DBName,
|
|
15
17
|
}));
|
|
16
18
|
}
|
|
17
|
-
|
|
18
|
-
return
|
|
19
|
+
buildDriveKey(driveId) {
|
|
20
|
+
return `${BrowserStorage.DRIVES_KEY}${BrowserStorage.SEP}${driveId}`;
|
|
19
21
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
buildDocumentKey(documentId) {
|
|
23
|
+
return `${BrowserStorage.DOCUMENT_KEY}${BrowserStorage.SEP}${documentId}`;
|
|
24
|
+
}
|
|
25
|
+
buildManifestKey(driveId) {
|
|
26
|
+
return `${BrowserStorage.MANIFEST_KEY}${BrowserStorage.SEP}${driveId}`;
|
|
27
|
+
}
|
|
28
|
+
async exists(documentId) {
|
|
29
|
+
const db = await this.db;
|
|
30
|
+
const document = await db.getItem(this.buildDocumentKey(documentId));
|
|
22
31
|
return !!document;
|
|
23
32
|
}
|
|
24
|
-
|
|
33
|
+
checkDocumentExists(drive, documentId) {
|
|
34
|
+
return this.exists(documentId);
|
|
35
|
+
}
|
|
36
|
+
async getDriveManifest(driveId) {
|
|
25
37
|
const db = await this.db;
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
38
|
+
const manifest = await db.getItem(this.buildManifestKey(driveId));
|
|
39
|
+
return manifest || { documentIds: [] };
|
|
40
|
+
}
|
|
41
|
+
async updateDriveManifest(driveId, manifest) {
|
|
42
|
+
const db = await this.db;
|
|
43
|
+
await db.setItem(this.buildManifestKey(driveId), manifest);
|
|
44
|
+
}
|
|
45
|
+
async getDocuments(drive) {
|
|
46
|
+
const manifest = await this.getDriveManifest(drive);
|
|
47
|
+
return manifest.documentIds;
|
|
31
48
|
}
|
|
32
49
|
async getDocument(driveId, id) {
|
|
33
|
-
const document = await (await this.db).getItem(this.
|
|
50
|
+
const document = await (await this.db).getItem(this.buildDocumentKey(id));
|
|
34
51
|
if (!document) {
|
|
35
52
|
throw new Error(`Document with id ${id} not found`);
|
|
36
53
|
}
|
|
37
54
|
return document;
|
|
38
55
|
}
|
|
39
56
|
async createDocument(drive, id, document) {
|
|
40
|
-
|
|
57
|
+
const db = await this.db;
|
|
58
|
+
await db.setItem(this.buildDocumentKey(id), document);
|
|
59
|
+
// Update the drive manifest to include this document
|
|
60
|
+
const manifest = await this.getDriveManifest(drive);
|
|
61
|
+
if (!manifest.documentIds.includes(id)) {
|
|
62
|
+
manifest.documentIds.push(id);
|
|
63
|
+
await this.updateDriveManifest(drive, manifest);
|
|
64
|
+
}
|
|
41
65
|
}
|
|
42
66
|
async deleteDocument(drive, id) {
|
|
43
|
-
await (await this.db).removeItem(this.
|
|
67
|
+
await (await this.db).removeItem(this.buildDocumentKey(id));
|
|
68
|
+
// Update the drive manifest to remove this document
|
|
69
|
+
const manifest = await this.getDriveManifest(drive);
|
|
70
|
+
const docIndex = manifest.documentIds.indexOf(id);
|
|
71
|
+
if (docIndex !== -1) {
|
|
72
|
+
manifest.documentIds.splice(docIndex, 1);
|
|
73
|
+
await this.updateDriveManifest(drive, manifest);
|
|
74
|
+
}
|
|
44
75
|
}
|
|
45
76
|
async clearStorage() {
|
|
46
77
|
return (await this.db).clear();
|
|
@@ -52,7 +83,7 @@ export class BrowserStorage {
|
|
|
52
83
|
}
|
|
53
84
|
const mergedOperations = mergeOperations(document.operations, operations);
|
|
54
85
|
const db = await this.db;
|
|
55
|
-
await db.setItem(this.
|
|
86
|
+
await db.setItem(this.buildDocumentKey(id), {
|
|
56
87
|
...document,
|
|
57
88
|
...header,
|
|
58
89
|
operations: mergedOperations,
|
|
@@ -67,7 +98,7 @@ export class BrowserStorage {
|
|
|
67
98
|
}
|
|
68
99
|
async getDrive(id) {
|
|
69
100
|
const db = await this.db;
|
|
70
|
-
const drive = await db.getItem(this.
|
|
101
|
+
const drive = await db.getItem(this.buildDriveKey(id));
|
|
71
102
|
if (!drive) {
|
|
72
103
|
throw new DriveNotFoundError(id);
|
|
73
104
|
}
|
|
@@ -86,23 +117,29 @@ export class BrowserStorage {
|
|
|
86
117
|
}
|
|
87
118
|
async createDrive(id, drive) {
|
|
88
119
|
const db = await this.db;
|
|
89
|
-
await db.setItem(this.
|
|
120
|
+
await db.setItem(this.buildDriveKey(id), drive);
|
|
121
|
+
// Initialize an empty manifest for the new drive
|
|
122
|
+
await this.updateDriveManifest(id, { documentIds: [] });
|
|
90
123
|
}
|
|
91
124
|
async deleteDrive(id) {
|
|
125
|
+
// First get all documents in this drive
|
|
92
126
|
const documents = await this.getDocuments(id);
|
|
127
|
+
// Delete each document (this already updates the manifest)
|
|
93
128
|
await Promise.all(documents.map((doc) => this.deleteDocument(id, doc)));
|
|
94
|
-
|
|
129
|
+
// Delete the drive and its manifest
|
|
130
|
+
const db = await this.db;
|
|
131
|
+
await db.removeItem(this.buildManifestKey(id));
|
|
132
|
+
return db.removeItem(this.buildDriveKey(id));
|
|
95
133
|
}
|
|
96
134
|
async addDriveOperations(id, operations, header) {
|
|
97
135
|
const drive = await this.getDrive(id);
|
|
98
136
|
const mergedOperations = mergeOperations(drive.operations, operations);
|
|
99
137
|
const db = await this.db;
|
|
100
|
-
await db.setItem(this.
|
|
138
|
+
await db.setItem(this.buildDriveKey(id), {
|
|
101
139
|
...drive,
|
|
102
140
|
...header,
|
|
103
141
|
operations: mergedOperations,
|
|
104
142
|
});
|
|
105
|
-
return;
|
|
106
143
|
}
|
|
107
144
|
async getSynchronizationUnitsRevision(units) {
|
|
108
145
|
const results = await Promise.allSettled(units.map(async (unit) => {
|
|
@@ -140,16 +177,23 @@ export class BrowserStorage {
|
|
|
140
177
|
async migrateOperationSignatures() {
|
|
141
178
|
const drives = await this.getDrives();
|
|
142
179
|
for (const drive of drives) {
|
|
143
|
-
await this.
|
|
180
|
+
await this.migrateDrive(drive);
|
|
144
181
|
const documents = await this.getDocuments(drive);
|
|
145
182
|
await Promise.all(documents.map(async (docId) => this.migrateDocument(drive, docId)));
|
|
146
183
|
}
|
|
147
184
|
}
|
|
185
|
+
async migrateDrive(driveId) {
|
|
186
|
+
const drive = await this.getDrive(driveId);
|
|
187
|
+
const migratedDrive = migrateDocumentOperationSignatures(drive);
|
|
188
|
+
if (migratedDrive !== drive) {
|
|
189
|
+
return (await this.db).setItem(this.buildDriveKey(driveId), migratedDrive);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
148
192
|
async migrateDocument(drive, id) {
|
|
149
193
|
const document = await this.getDocument(drive, id);
|
|
150
194
|
const migratedDocument = migrateDocumentOperationSignatures(document);
|
|
151
195
|
if (migratedDocument !== document) {
|
|
152
|
-
return (await this.db).setItem(this.
|
|
196
|
+
return (await this.db).setItem(this.buildDocumentKey(id), migratedDocument);
|
|
153
197
|
}
|
|
154
198
|
}
|
|
155
199
|
}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { type DocumentDriveAction, type DocumentDriveDocument } from "#drive-document-model/gen/types";
|
|
2
2
|
import { type SynchronizationUnitQuery } from "#server/types";
|
|
3
3
|
import { type DocumentHeader, type Operation, type PHDocument } from "document-model";
|
|
4
|
-
import { type IDriveStorage } from "./types.js";
|
|
5
|
-
export declare class FilesystemStorage implements IDriveStorage {
|
|
4
|
+
import { IDocumentStorage, type IDriveStorage } from "./types.js";
|
|
5
|
+
export declare class FilesystemStorage implements IDriveStorage, IDocumentStorage {
|
|
6
6
|
private basePath;
|
|
7
|
-
private drivesPath;
|
|
8
|
-
private static DRIVES_DIR;
|
|
9
7
|
constructor(basePath: string);
|
|
10
8
|
private _buildDocumentPath;
|
|
9
|
+
private _buildDrivePath;
|
|
10
|
+
private _buildManifestPath;
|
|
11
|
+
private getDriveManifest;
|
|
12
|
+
private updateDriveManifest;
|
|
11
13
|
getDocuments(drive: string): Promise<string[]>;
|
|
14
|
+
exists(documentId: string): Promise<boolean>;
|
|
12
15
|
checkDocumentExists(drive: string, id: string): Promise<boolean>;
|
|
13
16
|
getDocument<TDocument extends PHDocument>(drive: string, id: string): Promise<TDocument>;
|
|
14
17
|
createDocument(drive: string, id: string, document: PHDocument): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../../src/storage/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../../src/storage/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAoBlE,qBAAa,iBAAkB,YAAW,aAAa,EAAE,gBAAgB;IACvE,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAK5B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,kBAAkB;YAIZ,gBAAgB;YAWhB,mBAAmB;IAQ3B,YAAY,CAAC,KAAK,EAAE,MAAM;IAKhC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK5C,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1D,WAAW,CAAC,SAAS,SAAS,UAAU,EAC5C,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,SAAS,CAAC;IAWf,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU;IAgB9D,YAAY;IAeZ,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IA0BxC,qBAAqB,CACzB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE,cAAc;IAuBlB,SAAS;IAWT,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAWpD,cAAc,CAAC,IAAI,EAAE,MAAM;IAmB3B,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB;IAUpD,WAAW,CAAC,EAAE,EAAE,MAAM;IActB,kBAAkB,CACtB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,SAAS,CAAC,mBAAmB,CAAC,EAAE,EAC5C,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC;IAqBV,+BAA+B,CACnC,KAAK,EAAE,wBAAwB,EAAE,GAChC,OAAO,CACR;QACE,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,EAAE,CACJ;CA2CF"}
|