document-drive 1.29.0-dev.1 → 1.29.0-dev.2
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/src/cache/memory.d.ts +15 -8
- package/dist/src/cache/memory.d.ts.map +1 -1
- package/dist/src/cache/memory.js +53 -29
- package/dist/src/cache/redis.d.ts +15 -8
- package/dist/src/cache/redis.d.ts.map +1 -1
- package/dist/src/cache/redis.js +67 -27
- package/dist/src/cache/types.d.ts +10 -3
- package/dist/src/cache/types.d.ts.map +1 -1
- package/dist/src/cache/util.d.ts +3 -0
- package/dist/src/cache/util.d.ts.map +1 -0
- package/dist/src/cache/util.js +13 -0
- package/dist/src/drive-document-model/gen/schema/zod.d.ts +8 -8
- package/dist/src/drive-document-model/gen/schema/zod.d.ts.map +1 -1
- package/dist/src/server/base-server.d.ts.map +1 -1
- package/dist/src/server/base-server.js +13 -15
- package/dist/src/server/sync-manager.js +2 -2
- package/dist/src/storage/browser.d.ts +6 -1
- package/dist/src/storage/browser.d.ts.map +1 -1
- package/dist/src/storage/browser.js +56 -4
- package/dist/src/storage/filesystem.d.ts +5 -1
- package/dist/src/storage/filesystem.d.ts.map +1 -1
- package/dist/src/storage/filesystem.js +59 -6
- package/dist/src/storage/ipfs.d.ts +4 -0
- package/dist/src/storage/ipfs.d.ts.map +1 -1
- package/dist/src/storage/ipfs.js +58 -5
- package/dist/src/storage/memory.d.ts +5 -1
- package/dist/src/storage/memory.d.ts.map +1 -1
- package/dist/src/storage/memory.js +47 -15
- package/dist/src/storage/prisma/factory.d.ts +2 -2
- package/dist/src/storage/prisma/factory.d.ts.map +1 -1
- package/dist/src/storage/prisma/index.d.ts +10 -4
- package/dist/src/storage/prisma/index.d.ts.map +1 -1
- package/dist/src/storage/prisma/index.js +209 -128
- package/dist/src/storage/types.d.ts +5 -4
- package/dist/src/storage/types.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -15,6 +15,10 @@ export class BrowserStorage {
|
|
|
15
15
|
: BrowserStorage.DBName,
|
|
16
16
|
}));
|
|
17
17
|
}
|
|
18
|
+
async clear() {
|
|
19
|
+
const db = await this.db;
|
|
20
|
+
await db.clear();
|
|
21
|
+
}
|
|
18
22
|
////////////////////////////////
|
|
19
23
|
// IDocumentStorage
|
|
20
24
|
////////////////////////////////
|
|
@@ -35,13 +39,61 @@ export class BrowserStorage {
|
|
|
35
39
|
}
|
|
36
40
|
return document;
|
|
37
41
|
}
|
|
42
|
+
async delete(documentId) {
|
|
43
|
+
const db = await this.db;
|
|
44
|
+
const document = await db.getItem(this.buildDocumentKey(documentId));
|
|
45
|
+
if (!document) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
// delete the document from all other drive manifests
|
|
49
|
+
const drives = await this.getDrives();
|
|
50
|
+
for (const driveId of drives) {
|
|
51
|
+
if (driveId === documentId)
|
|
52
|
+
continue;
|
|
53
|
+
await this.removeChild(driveId, documentId);
|
|
54
|
+
}
|
|
55
|
+
// delete any manifest for this document
|
|
56
|
+
await db.removeItem(this.buildManifestKey(documentId));
|
|
57
|
+
// finally, delete the specified document
|
|
58
|
+
await db.removeItem(this.buildDocumentKey(documentId));
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
async removeChild(parentId, childId) {
|
|
62
|
+
const manifest = await this.getManifest(parentId);
|
|
63
|
+
const docIndex = manifest.documentIds.indexOf(childId);
|
|
64
|
+
if (docIndex !== -1) {
|
|
65
|
+
manifest.documentIds.splice(docIndex, 1);
|
|
66
|
+
await this.updateDriveManifest(parentId, manifest);
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
async addChild(parentId, childId) {
|
|
72
|
+
if (parentId === childId) {
|
|
73
|
+
throw new Error("Cannot associate a document with itself");
|
|
74
|
+
}
|
|
75
|
+
// check if the child is a parent of the parent
|
|
76
|
+
const children = await this.getChildren(childId);
|
|
77
|
+
if (children.includes(parentId)) {
|
|
78
|
+
throw new Error("Cannot associate a document with its child");
|
|
79
|
+
}
|
|
80
|
+
const manifest = await this.getManifest(parentId);
|
|
81
|
+
if (!manifest.documentIds.includes(childId)) {
|
|
82
|
+
manifest.documentIds.push(childId);
|
|
83
|
+
await this.updateDriveManifest(parentId, manifest);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async getChildren(parentId) {
|
|
87
|
+
const manifest = await this.getManifest(parentId);
|
|
88
|
+
return manifest.documentIds;
|
|
89
|
+
}
|
|
38
90
|
////////////////////////////////
|
|
39
91
|
// IDriveStorage
|
|
40
92
|
////////////////////////////////
|
|
41
93
|
checkDocumentExists(drive, documentId) {
|
|
42
94
|
return this.exists(documentId);
|
|
43
95
|
}
|
|
44
|
-
async
|
|
96
|
+
async getManifest(driveId) {
|
|
45
97
|
const db = await this.db;
|
|
46
98
|
const manifest = await db.getItem(this.buildManifestKey(driveId));
|
|
47
99
|
return manifest || { documentIds: [] };
|
|
@@ -51,7 +103,7 @@ export class BrowserStorage {
|
|
|
51
103
|
await db.setItem(this.buildManifestKey(driveId), manifest);
|
|
52
104
|
}
|
|
53
105
|
async getDocuments(drive) {
|
|
54
|
-
const manifest = await this.
|
|
106
|
+
const manifest = await this.getManifest(drive);
|
|
55
107
|
return manifest.documentIds;
|
|
56
108
|
}
|
|
57
109
|
async getDocument(driveId, id) {
|
|
@@ -60,7 +112,7 @@ export class BrowserStorage {
|
|
|
60
112
|
async createDocument(drive, id, document) {
|
|
61
113
|
await this.create(id, document);
|
|
62
114
|
// Update the drive manifest to include this document
|
|
63
|
-
const manifest = await this.
|
|
115
|
+
const manifest = await this.getManifest(drive);
|
|
64
116
|
if (!manifest.documentIds.includes(id)) {
|
|
65
117
|
manifest.documentIds.push(id);
|
|
66
118
|
await this.updateDriveManifest(drive, manifest);
|
|
@@ -69,7 +121,7 @@ export class BrowserStorage {
|
|
|
69
121
|
async deleteDocument(drive, id) {
|
|
70
122
|
await (await this.db).removeItem(this.buildDocumentKey(id));
|
|
71
123
|
// Update the drive manifest to remove this document
|
|
72
|
-
const manifest = await this.
|
|
124
|
+
const manifest = await this.getManifest(drive);
|
|
73
125
|
const docIndex = manifest.documentIds.indexOf(id);
|
|
74
126
|
if (docIndex !== -1) {
|
|
75
127
|
manifest.documentIds.splice(docIndex, 1);
|
|
@@ -8,6 +8,10 @@ export declare class FilesystemStorage implements IDriveStorage, IDocumentStorag
|
|
|
8
8
|
exists(documentId: string): Promise<boolean>;
|
|
9
9
|
create(documentId: string, document: PHDocument): Promise<void>;
|
|
10
10
|
get<TDocument extends PHDocument>(documentId: string): Promise<TDocument>;
|
|
11
|
+
delete(documentId: string): Promise<boolean>;
|
|
12
|
+
addChild(parentId: string, childId: string): Promise<void>;
|
|
13
|
+
removeChild(parentId: string, childId: string): Promise<boolean>;
|
|
14
|
+
getChildren(parentId: string): Promise<string[]>;
|
|
11
15
|
getDocuments(drive: string): Promise<string[]>;
|
|
12
16
|
checkDocumentExists(drive: string, id: string): Promise<boolean>;
|
|
13
17
|
getDocument<TDocument extends PHDocument>(drive: string, id: string): Promise<TDocument>;
|
|
@@ -30,7 +34,7 @@ export declare class FilesystemStorage implements IDriveStorage, IDocumentStorag
|
|
|
30
34
|
}[]>;
|
|
31
35
|
private _buildDocumentPath;
|
|
32
36
|
private _buildManifestPath;
|
|
33
|
-
private
|
|
37
|
+
private getManifest;
|
|
34
38
|
private updateDriveManifest;
|
|
35
39
|
}
|
|
36
40
|
//# sourceMappingURL=filesystem.d.ts.map
|
|
@@ -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;AAWxB,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAavE,qBAAa,iBAAkB,YAAW,aAAa,EAAE,gBAAgB;IACvE,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAS5B,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK5C,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU;IAS/C,GAAG,CAAC,SAAS,SAAS,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAYnE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2B5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB1D,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYhE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAShD,YAAY,CAAC,KAAK,EAAE,MAAM;IAKhC,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;IAIf,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;IASpD,cAAc,CAAC,IAAI,EAAE,MAAM;IAmB3B,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB;IAqBpD,WAAW,CAAC,EAAE,EAAE,MAAM;IAYtB,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,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;IA4CD,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,kBAAkB;YAIZ,WAAW;YAWX,mBAAmB;CAOlC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DriveNotFoundError } from "#server/error";
|
|
2
2
|
import { mergeOperations } from "#utils/misc";
|
|
3
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
3
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync, } from "fs";
|
|
4
4
|
import fs from "fs/promises";
|
|
5
5
|
import stringify from "json-stringify-deterministic";
|
|
6
6
|
import path from "path";
|
|
@@ -40,11 +40,64 @@ export class FilesystemStorage {
|
|
|
40
40
|
throw new Error(`Document with id ${documentId} not found`);
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
async delete(documentId) {
|
|
44
|
+
// delete the document from all other drive manifests
|
|
45
|
+
const drives = await this.getDrives();
|
|
46
|
+
for (const driveId of drives) {
|
|
47
|
+
if (driveId === documentId)
|
|
48
|
+
continue;
|
|
49
|
+
await this.removeChild(driveId, documentId);
|
|
50
|
+
}
|
|
51
|
+
// delete any manifest for this document
|
|
52
|
+
try {
|
|
53
|
+
await fs.rm(this._buildManifestPath(documentId));
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
// there may be no manifest for this document
|
|
57
|
+
}
|
|
58
|
+
// finally, delete the specified document
|
|
59
|
+
const documentPath = this._buildDocumentPath(documentId);
|
|
60
|
+
if (existsSync(documentPath)) {
|
|
61
|
+
unlinkSync(documentPath);
|
|
62
|
+
return Promise.resolve(true);
|
|
63
|
+
}
|
|
64
|
+
return Promise.resolve(false);
|
|
65
|
+
}
|
|
66
|
+
async addChild(parentId, childId) {
|
|
67
|
+
if (parentId === childId) {
|
|
68
|
+
throw new Error("Cannot associate a document with itself");
|
|
69
|
+
}
|
|
70
|
+
// check if the child is a parent of the parent
|
|
71
|
+
const children = await this.getChildren(childId);
|
|
72
|
+
if (children.includes(parentId)) {
|
|
73
|
+
throw new Error("Cannot associate a document with its child");
|
|
74
|
+
}
|
|
75
|
+
// Update the drive manifest to include this document
|
|
76
|
+
const manifest = await this.getManifest(parentId);
|
|
77
|
+
if (!manifest.documentIds.includes(childId)) {
|
|
78
|
+
manifest.documentIds.push(childId);
|
|
79
|
+
await this.updateDriveManifest(parentId, manifest);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async removeChild(parentId, childId) {
|
|
83
|
+
const manifest = await this.getManifest(parentId);
|
|
84
|
+
const docIndex = manifest.documentIds.indexOf(childId);
|
|
85
|
+
if (docIndex !== -1) {
|
|
86
|
+
manifest.documentIds.splice(docIndex, 1);
|
|
87
|
+
await this.updateDriveManifest(parentId, manifest);
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
async getChildren(parentId) {
|
|
93
|
+
const manifest = await this.getManifest(parentId);
|
|
94
|
+
return manifest.documentIds;
|
|
95
|
+
}
|
|
43
96
|
////////////////////////////////
|
|
44
97
|
// IDriveStorage
|
|
45
98
|
////////////////////////////////
|
|
46
99
|
async getDocuments(drive) {
|
|
47
|
-
const manifest = await this.
|
|
100
|
+
const manifest = await this.getManifest(drive);
|
|
48
101
|
return manifest.documentIds;
|
|
49
102
|
}
|
|
50
103
|
checkDocumentExists(drive, id) {
|
|
@@ -59,7 +112,7 @@ export class FilesystemStorage {
|
|
|
59
112
|
encoding: "utf-8",
|
|
60
113
|
});
|
|
61
114
|
// Update the drive manifest to include this document
|
|
62
|
-
const manifest = await this.
|
|
115
|
+
const manifest = await this.getManifest(drive);
|
|
63
116
|
if (!manifest.documentIds.includes(id)) {
|
|
64
117
|
manifest.documentIds.push(id);
|
|
65
118
|
await this.updateDriveManifest(drive, manifest);
|
|
@@ -77,7 +130,7 @@ export class FilesystemStorage {
|
|
|
77
130
|
}
|
|
78
131
|
async deleteDocument(drive, id) {
|
|
79
132
|
// Update the drive manifest to remove this document
|
|
80
|
-
const manifest = await this.
|
|
133
|
+
const manifest = await this.getManifest(drive);
|
|
81
134
|
const docIndex = manifest.documentIds.indexOf(id);
|
|
82
135
|
if (docIndex !== -1) {
|
|
83
136
|
manifest.documentIds.splice(docIndex, 1);
|
|
@@ -89,7 +142,7 @@ export class FilesystemStorage {
|
|
|
89
142
|
for (const driveId of drives) {
|
|
90
143
|
if (driveId === drive)
|
|
91
144
|
continue;
|
|
92
|
-
const otherManifest = await this.
|
|
145
|
+
const otherManifest = await this.getManifest(driveId);
|
|
93
146
|
if (otherManifest.documentIds.includes(id)) {
|
|
94
147
|
// Document still referenced by another drive, don't delete the file
|
|
95
148
|
return Promise.resolve();
|
|
@@ -219,7 +272,7 @@ export class FilesystemStorage {
|
|
|
219
272
|
_buildManifestPath(driveId) {
|
|
220
273
|
return `${this.basePath}/manifest-${driveId}.json`;
|
|
221
274
|
}
|
|
222
|
-
async
|
|
275
|
+
async getManifest(driveId) {
|
|
223
276
|
const manifestPath = this._buildManifestPath(driveId);
|
|
224
277
|
try {
|
|
225
278
|
const content = readFileSync(manifestPath, { encoding: "utf-8" });
|
|
@@ -9,6 +9,10 @@ export declare class IPFSStorage implements IStorage, IDocumentStorage {
|
|
|
9
9
|
exists(documentId: string): Promise<boolean>;
|
|
10
10
|
create(documentId: string, document: PHDocument): Promise<void>;
|
|
11
11
|
get<TDocument extends PHDocument>(documentId: string): Promise<TDocument>;
|
|
12
|
+
delete(documentId: string): Promise<boolean>;
|
|
13
|
+
addChild(parentId: string, childId: string): Promise<void>;
|
|
14
|
+
removeChild(parentId: string, childId: string): Promise<boolean>;
|
|
15
|
+
getChildren(parentId: string): Promise<string[]>;
|
|
12
16
|
checkDocumentExists(drive: string, id: string): Promise<boolean>;
|
|
13
17
|
getDocuments(drive: string): Promise<string[]>;
|
|
14
18
|
getDocument<TDocument extends PHDocument>(drive: string, id: string): Promise<TDocument>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipfs.d.ts","sourceRoot":"","sources":["../../../src/storage/ipfs.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,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAO7D,qBAAa,WAAY,YAAW,QAAQ,EAAE,gBAAgB;IAC5D,OAAO,CAAC,EAAE,CAAM;gBAEJ,KAAK,EAAE,KAAK;IAQlB,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB5C,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/D,GAAG,CAAC,SAAS,SAAS,UAAU,EACpC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ipfs.d.ts","sourceRoot":"","sources":["../../../src/storage/ipfs.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,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAO7D,qBAAa,WAAY,YAAW,QAAQ,EAAE,gBAAgB;IAC5D,OAAO,CAAC,EAAE,CAAM;gBAEJ,KAAK,EAAE,KAAK;IAQlB,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB5C,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/D,GAAG,CAAC,SAAS,SAAS,UAAU,EACpC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC;IAkBf,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB1D,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYhE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQhD,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhE,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK9C,WAAW,CAAC,SAAS,SAAS,UAAU,EAC5C,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,SAAS,CAAC;IAIf,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,IAAI,CAAC;IAaV,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCxD,qBAAqB,CAAC,SAAS,SAAS,UAAU,EACtD,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC;IAeV,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAqB9B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAepD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAkB5D,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BtC,kBAAkB,CACtB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,SAAS,CAAC,mBAAmB,CAAC,EAAE,EAC5C,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC;IAcV,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7B,+BAA+B,CACnC,KAAK,EAAE,wBAAwB,EAAE,GAChC,OAAO,CACR;QACE,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;IA4CD,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,uBAAuB;YAIjB,gBAAgB;YAgBhB,mBAAmB;CASlC"}
|
package/dist/src/storage/ipfs.js
CHANGED
|
@@ -45,7 +45,59 @@ export class IPFSStorage {
|
|
|
45
45
|
throw new Error(`Document with id ${documentId} not found`);
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
async delete(documentId) {
|
|
49
|
+
// delete the document from all other drive manifests
|
|
50
|
+
const drives = await this.getDrives();
|
|
51
|
+
for (const driveId of drives) {
|
|
52
|
+
if (driveId === documentId)
|
|
53
|
+
continue;
|
|
54
|
+
await this.removeChild(driveId, documentId);
|
|
55
|
+
}
|
|
56
|
+
// delete any manifest for this document
|
|
57
|
+
try {
|
|
58
|
+
await this.fs.rm(this._buildDriveManifestPath(documentId));
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
// there may be no manifest for this document
|
|
62
|
+
}
|
|
63
|
+
// finally, delete the specified document
|
|
64
|
+
try {
|
|
65
|
+
await this.fs.rm(this._buildDocumentPath(documentId));
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async addChild(parentId, childId) {
|
|
73
|
+
if (parentId === childId) {
|
|
74
|
+
throw new Error("Cannot associate a document with itself");
|
|
75
|
+
}
|
|
76
|
+
// check if the child is a parent of the parent
|
|
77
|
+
const children = await this.getChildren(childId);
|
|
78
|
+
if (children.includes(parentId)) {
|
|
79
|
+
throw new Error("Cannot associate a document with its child");
|
|
80
|
+
}
|
|
81
|
+
const manifest = await this.getDriveManifest(parentId);
|
|
82
|
+
if (!manifest.documentIds.includes(childId)) {
|
|
83
|
+
manifest.documentIds.push(childId);
|
|
84
|
+
await this.updateDriveManifest(parentId, manifest);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async removeChild(parentId, childId) {
|
|
88
|
+
const manifest = await this.getDriveManifest(parentId);
|
|
89
|
+
const docIndex = manifest.documentIds.indexOf(childId);
|
|
90
|
+
if (docIndex !== -1) {
|
|
91
|
+
manifest.documentIds.splice(docIndex, 1);
|
|
92
|
+
await this.updateDriveManifest(parentId, manifest);
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
async getChildren(parentId) {
|
|
98
|
+
const manifest = await this.getDriveManifest(parentId);
|
|
99
|
+
return manifest.documentIds;
|
|
100
|
+
}
|
|
49
101
|
// IDriveStorage
|
|
50
102
|
////////////////////////////////
|
|
51
103
|
async checkDocumentExists(drive, id) {
|
|
@@ -115,10 +167,11 @@ export class IPFSStorage {
|
|
|
115
167
|
// List all files in root directory
|
|
116
168
|
const drives = [];
|
|
117
169
|
for await (const entry of this.fs.ls("/")) {
|
|
118
|
-
if (entry.
|
|
119
|
-
entry.name.startsWith("drive-") &&
|
|
170
|
+
if (entry.name.startsWith("manifest-") &&
|
|
120
171
|
entry.name.endsWith(".json")) {
|
|
121
|
-
const driveId = entry.name
|
|
172
|
+
const driveId = entry.name
|
|
173
|
+
.replace("manifest-", "")
|
|
174
|
+
.replace(".json", "");
|
|
122
175
|
drives.push(driveId);
|
|
123
176
|
}
|
|
124
177
|
}
|
|
@@ -269,6 +322,6 @@ export class IPFSStorage {
|
|
|
269
322
|
const manifestPath = this._buildDriveManifestPath(driveId);
|
|
270
323
|
const manifestContent = stringify(manifest);
|
|
271
324
|
const manifestBuffer = new TextEncoder().encode(manifestContent);
|
|
272
|
-
await this.fs.writeBytes(manifestBuffer, manifestPath);
|
|
325
|
+
await this.fs.writeBytes(manifestBuffer, manifestPath, { force: true });
|
|
273
326
|
}
|
|
274
327
|
}
|
|
@@ -9,6 +9,10 @@ export declare class MemoryStorage implements IDriveStorage, IDocumentStorage {
|
|
|
9
9
|
exists(documentId: string): Promise<boolean>;
|
|
10
10
|
create(documentId: string, document: PHDocument): Promise<void>;
|
|
11
11
|
get<TDocument extends PHDocument>(documentId: string): Promise<TDocument>;
|
|
12
|
+
delete(documentId: string): Promise<boolean>;
|
|
13
|
+
addChild(parentId: string, childId: string): Promise<void>;
|
|
14
|
+
removeChild(parentId: string, childId: string): Promise<boolean>;
|
|
15
|
+
getChildren(parentId: string): Promise<string[]>;
|
|
12
16
|
checkDocumentExists(drive: string, id: string): Promise<boolean>;
|
|
13
17
|
getDocuments(drive: string): Promise<string[]>;
|
|
14
18
|
getDocument<TDocument extends PHDocument>(driveId: string, id: string): Promise<TDocument>;
|
|
@@ -29,7 +33,7 @@ export declare class MemoryStorage implements IDriveStorage, IDocumentStorage {
|
|
|
29
33
|
lastUpdated: string;
|
|
30
34
|
revision: number;
|
|
31
35
|
}[]>;
|
|
32
|
-
private
|
|
36
|
+
private getManifest;
|
|
33
37
|
private updateDriveManifest;
|
|
34
38
|
}
|
|
35
39
|
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/storage/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE7E,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,qBAAqB,EAE1B,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAMvE,qBAAa,aAAc,YAAW,aAAa,EAAE,gBAAgB;IACnE,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,cAAc,CAAgC;;IAWtD,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM5C,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU;IAM/C,GAAG,CAAC,SAAS,SAAS,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/storage/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE7E,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,qBAAqB,EAE1B,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAMvE,qBAAa,aAAc,YAAW,aAAa,EAAE,gBAAgB;IACnE,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,cAAc,CAAgC;;IAWtD,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM5C,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU;IAM/C,GAAG,CAAC,SAAS,SAAS,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAcnE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAgB1C,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAU7C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAStD,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhE,YAAY,CAAC,KAAK,EAAE,MAAM;IAK1B,WAAW,CAAC,SAAS,SAAS,UAAU,EACtC,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,SAAS,CAAC;IAIf,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU;IAS9D,qBAAqB,CACzB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC;IAeV,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAIxC,SAAS;IAIT,QAAQ,CAAC,EAAE,EAAE,MAAM;IAQnB,cAAc,CAAC,IAAI,EAAE,MAAM;IAW3B,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB;IAqBpD,kBAAkB,CACtB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,qBAAqB,CAAC,qBAAqB,CAAC,EAAE,EAC1D,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC;IAcV,WAAW,CAAC,EAAE,EAAE,MAAM;IA4BtB,+BAA+B,CACnC,KAAK,EAAE,wBAAwB,EAAE,GAChC,OAAO,CACR;QACE,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;IA4CD,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,mBAAmB;CAG5B"}
|
|
@@ -28,6 +28,47 @@ export class MemoryStorage {
|
|
|
28
28
|
}
|
|
29
29
|
return Promise.resolve(document);
|
|
30
30
|
}
|
|
31
|
+
async delete(documentId) {
|
|
32
|
+
// delete the document from all other drive manifests
|
|
33
|
+
const drives = await this.getDrives();
|
|
34
|
+
for (const driveId of drives) {
|
|
35
|
+
if (driveId === documentId)
|
|
36
|
+
continue;
|
|
37
|
+
await this.removeChild(driveId, documentId);
|
|
38
|
+
}
|
|
39
|
+
// delete any manifest for this document
|
|
40
|
+
delete this.driveManifests[documentId];
|
|
41
|
+
if (this.documents[documentId]) {
|
|
42
|
+
delete this.documents[documentId];
|
|
43
|
+
return Promise.resolve(true);
|
|
44
|
+
}
|
|
45
|
+
return Promise.resolve(false);
|
|
46
|
+
}
|
|
47
|
+
async addChild(parentId, childId) {
|
|
48
|
+
if (parentId === childId) {
|
|
49
|
+
throw new Error("Cannot associate a document with itself");
|
|
50
|
+
}
|
|
51
|
+
// check if the child is a parent of the parent
|
|
52
|
+
const children = await this.getChildren(childId);
|
|
53
|
+
if (children.includes(parentId)) {
|
|
54
|
+
throw new Error("Cannot associate a document with its child");
|
|
55
|
+
}
|
|
56
|
+
const manifest = this.getManifest(parentId);
|
|
57
|
+
manifest.documentIds.add(childId);
|
|
58
|
+
this.updateDriveManifest(parentId, manifest);
|
|
59
|
+
}
|
|
60
|
+
async removeChild(parentId, childId) {
|
|
61
|
+
const manifest = this.getManifest(parentId);
|
|
62
|
+
if (manifest.documentIds.delete(childId)) {
|
|
63
|
+
this.updateDriveManifest(parentId, manifest);
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
async getChildren(parentId) {
|
|
69
|
+
const manifest = this.getManifest(parentId);
|
|
70
|
+
return [...manifest.documentIds];
|
|
71
|
+
}
|
|
31
72
|
////////////////////////////////
|
|
32
73
|
// IDriveStorage
|
|
33
74
|
////////////////////////////////
|
|
@@ -35,7 +76,7 @@ export class MemoryStorage {
|
|
|
35
76
|
return this.exists(id);
|
|
36
77
|
}
|
|
37
78
|
getDocuments(drive) {
|
|
38
|
-
const manifest = this.
|
|
79
|
+
const manifest = this.getManifest(drive);
|
|
39
80
|
return Promise.resolve([...manifest.documentIds]);
|
|
40
81
|
}
|
|
41
82
|
getDocument(driveId, id) {
|
|
@@ -48,7 +89,7 @@ export class MemoryStorage {
|
|
|
48
89
|
async createDocument(drive, id, document) {
|
|
49
90
|
await this.create(id, document);
|
|
50
91
|
// Update the drive manifest
|
|
51
|
-
const manifest = this.
|
|
92
|
+
const manifest = this.getManifest(drive);
|
|
52
93
|
manifest.documentIds.add(id);
|
|
53
94
|
this.updateDriveManifest(drive, manifest);
|
|
54
95
|
}
|
|
@@ -65,16 +106,7 @@ export class MemoryStorage {
|
|
|
65
106
|
};
|
|
66
107
|
}
|
|
67
108
|
async deleteDocument(drive, id) {
|
|
68
|
-
|
|
69
|
-
const drives = await this.getDrives();
|
|
70
|
-
for (const driveId of drives) {
|
|
71
|
-
const manifest = this.getDriveManifest(driveId);
|
|
72
|
-
if (manifest.documentIds.has(id)) {
|
|
73
|
-
manifest.documentIds.delete(id);
|
|
74
|
-
this.updateDriveManifest(driveId, manifest);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
delete this.documents[id];
|
|
109
|
+
this.delete(id);
|
|
78
110
|
}
|
|
79
111
|
async getDrives() {
|
|
80
112
|
return Object.keys(this.driveManifests);
|
|
@@ -125,7 +157,7 @@ export class MemoryStorage {
|
|
|
125
157
|
}
|
|
126
158
|
async deleteDrive(id) {
|
|
127
159
|
// Get all documents in this drive
|
|
128
|
-
const manifest = this.
|
|
160
|
+
const manifest = this.getManifest(id);
|
|
129
161
|
// delete each document that belongs only to this drive
|
|
130
162
|
const drives = await this.getDrives();
|
|
131
163
|
await Promise.all([...manifest.documentIds].map((docId) => {
|
|
@@ -133,7 +165,7 @@ export class MemoryStorage {
|
|
|
133
165
|
if (driveId === id) {
|
|
134
166
|
continue;
|
|
135
167
|
}
|
|
136
|
-
const manifest = this.
|
|
168
|
+
const manifest = this.getManifest(driveId);
|
|
137
169
|
if (manifest.documentIds.has(docId)) {
|
|
138
170
|
return;
|
|
139
171
|
}
|
|
@@ -176,7 +208,7 @@ export class MemoryStorage {
|
|
|
176
208
|
////////////////////////////////
|
|
177
209
|
// Private
|
|
178
210
|
////////////////////////////////
|
|
179
|
-
|
|
211
|
+
getManifest(driveId) {
|
|
180
212
|
if (!this.driveManifests[driveId]) {
|
|
181
213
|
this.driveManifests[driveId] = { documentIds: new Set() };
|
|
182
214
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { ICache } from "#cache/types";
|
|
1
2
|
import { PrismaStorage } from "#storage/prisma/index";
|
|
2
|
-
import { IOperationsCache } from "#storage/types";
|
|
3
3
|
export declare class PrismaStorageFactory {
|
|
4
4
|
private readonly prisma;
|
|
5
5
|
private readonly cache;
|
|
6
|
-
constructor(dbUrl: string, cache:
|
|
6
|
+
constructor(dbUrl: string, cache: ICache);
|
|
7
7
|
build(): PrismaStorage;
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../src/storage/prisma/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../src/storage/prisma/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAItD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAWxC,KAAK;CAGN"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { type Prisma, type PrismaClient } from "@prisma/client";
|
|
2
2
|
import type { BaseStateFromDocument, DocumentHeader, Operation, OperationFromDocument, PHDocument } from "document-model";
|
|
3
3
|
import { type IBackOffOptions } from "exponential-backoff";
|
|
4
|
+
import { ICache } from "../../cache/types.js";
|
|
4
5
|
import { type DocumentDriveAction, type DocumentDriveDocument } from "../../drive-document-model/gen/types.js";
|
|
5
6
|
import { type SynchronizationUnitQuery } from "../../server/types.js";
|
|
6
|
-
import type { IDocumentStorage, IDriveStorage
|
|
7
|
+
import type { IDocumentStorage, IDriveStorage } from "../types.js";
|
|
7
8
|
export * from "./factory.js";
|
|
8
9
|
type Transaction = Omit<PrismaClient<Prisma.PrismaClientOptions, never>, "$connect" | "$disconnect" | "$on" | "$transaction" | "$use" | "$extends"> | ExtendedPrismaClient;
|
|
9
10
|
export type PrismaStorageOptions = {
|
|
@@ -26,12 +27,17 @@ declare function getRetryTransactionsClient<T extends PrismaClient>(prisma: T, b
|
|
|
26
27
|
}, {}>;
|
|
27
28
|
type ExtendedPrismaClient = ReturnType<typeof getRetryTransactionsClient<PrismaClient>>;
|
|
28
29
|
export declare class PrismaStorage implements IDriveStorage, IDocumentStorage {
|
|
30
|
+
private logger;
|
|
29
31
|
private db;
|
|
30
32
|
private cache;
|
|
31
|
-
constructor(db: PrismaClient, cache:
|
|
33
|
+
constructor(db: PrismaClient, cache: ICache, options?: PrismaStorageOptions);
|
|
32
34
|
exists(documentId: string): Promise<boolean>;
|
|
33
35
|
create(documentId: string, document: PHDocument): Promise<void>;
|
|
34
|
-
get<TDocument extends PHDocument>(documentId: string): Promise<TDocument>;
|
|
36
|
+
get<TDocument extends PHDocument>(documentId: string, tx?: Transaction): Promise<TDocument>;
|
|
37
|
+
delete(documentId: string): Promise<boolean>;
|
|
38
|
+
addChild(parentId: string, childId: string): Promise<void>;
|
|
39
|
+
removeChild(parentId: string, childId: string): Promise<boolean>;
|
|
40
|
+
getChildren(parentId: string): Promise<string[]>;
|
|
35
41
|
createDrive(id: string, drive: DocumentDriveDocument): Promise<void>;
|
|
36
42
|
addDriveOperations(id: string, operations: Operation<DocumentDriveAction>[], header: DocumentHeader): Promise<void>;
|
|
37
43
|
addDriveOperationsWithTransaction(drive: string, callback: (document: DocumentDriveDocument) => Promise<{
|
|
@@ -48,7 +54,7 @@ export declare class PrismaStorage implements IDriveStorage, IDocumentStorage {
|
|
|
48
54
|
addDocumentOperations(drive: string, id: string, operations: Operation[], header: DocumentHeader): Promise<void>;
|
|
49
55
|
getDocuments(drive: string): Promise<string[]>;
|
|
50
56
|
checkDocumentExists(driveId: string, id: string): Promise<boolean>;
|
|
51
|
-
getDocument<TDocument extends PHDocument>(driveId: string,
|
|
57
|
+
getDocument<TDocument extends PHDocument>(driveId: string, documentId: string, tx?: Transaction): Promise<TDocument>;
|
|
52
58
|
deleteDocument(drive: string, id: string): Promise<void>;
|
|
53
59
|
getDrives(): Promise<string[]>;
|
|
54
60
|
getDrive(id: string): Promise<DocumentDriveDocument>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/prisma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/storage/prisma/index.ts"],"names":[],"mappings":"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"}
|