@lossless.org/client 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.smartconfig.json +37 -0
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/classes.losslessorgclient.d.ts +32 -0
- package/dist_ts/classes.losslessorgclient.js +103 -0
- package/dist_ts/core/classes.error.d.ts +16 -0
- package/dist_ts/core/classes.error.js +29 -0
- package/dist_ts/core/classes.operation.d.ts +17 -0
- package/dist_ts/core/classes.operation.js +70 -0
- package/dist_ts/core/interfaces.d.ts +18 -0
- package/dist_ts/core/interfaces.js +2 -0
- package/dist_ts/index.d.ts +4 -0
- package/dist_ts/index.js +3 -0
- package/dist_ts/nosqldb/classes.atomicdelete.d.ts +26 -0
- package/dist_ts/nosqldb/classes.atomicdelete.js +44 -0
- package/dist_ts/nosqldb/classes.atomicfindoneandupdate.d.ts +27 -0
- package/dist_ts/nosqldb/classes.atomicfindoneandupdate.js +86 -0
- package/dist_ts/nosqldb/classes.atomicupdate.d.ts +26 -0
- package/dist_ts/nosqldb/classes.atomicupdate.js +55 -0
- package/dist_ts/nosqldb/classes.bootstraprecord.d.ts +14 -0
- package/dist_ts/nosqldb/classes.bootstraprecord.js +80 -0
- package/dist_ts/nosqldb/classes.bsonassertion.d.ts +2 -0
- package/dist_ts/nosqldb/classes.bsonassertion.js +29 -0
- package/dist_ts/nosqldb/classes.bsonobjectid.d.ts +2 -0
- package/dist_ts/nosqldb/classes.bsonobjectid.js +50 -0
- package/dist_ts/nosqldb/classes.bsonsnapshot.d.ts +3 -0
- package/dist_ts/nosqldb/classes.bsonsnapshot.js +126 -0
- package/dist_ts/nosqldb/classes.cached-document.d.ts +27 -0
- package/dist_ts/nosqldb/classes.cached-document.js +112 -0
- package/dist_ts/nosqldb/classes.collection.d.ts +302 -0
- package/dist_ts/nosqldb/classes.collection.js +1568 -0
- package/dist_ts/nosqldb/classes.collectionfactory.d.ts +30 -0
- package/dist_ts/nosqldb/classes.collectionfactory.js +65 -0
- package/dist_ts/nosqldb/classes.collectionlifecycle.d.ts +4 -0
- package/dist_ts/nosqldb/classes.collectionlifecycle.js +15 -0
- package/dist_ts/nosqldb/classes.collectionpreparation.d.ts +34 -0
- package/dist_ts/nosqldb/classes.collectionpreparation.js +134 -0
- package/dist_ts/nosqldb/classes.collectiontopology.d.ts +47 -0
- package/dist_ts/nosqldb/classes.collectiontopology.js +388 -0
- package/dist_ts/nosqldb/classes.connection.d.ts +18 -0
- package/dist_ts/nosqldb/classes.connection.js +23 -0
- package/dist_ts/nosqldb/classes.convenience.d.ts +1 -0
- package/dist_ts/nosqldb/classes.convenience.js +5 -0
- package/dist_ts/nosqldb/classes.cursor.d.ts +15 -0
- package/dist_ts/nosqldb/classes.cursor.js +82 -0
- package/dist_ts/nosqldb/classes.cursoroperation.d.ts +7 -0
- package/dist_ts/nosqldb/classes.cursoroperation.js +36 -0
- package/dist_ts/nosqldb/classes.db.d.ts +98 -0
- package/dist_ts/nosqldb/classes.db.js +434 -0
- package/dist_ts/nosqldb/classes.distributedcoordinator.d.ts +52 -0
- package/dist_ts/nosqldb/classes.distributedcoordinator.js +314 -0
- package/dist_ts/nosqldb/classes.doc.d.ts +722 -0
- package/dist_ts/nosqldb/classes.doc.js +2976 -0
- package/dist_ts/nosqldb/classes.easystore.d.ts +42 -0
- package/dist_ts/nosqldb/classes.easystore.js +199 -0
- package/dist_ts/nosqldb/classes.exactpersistence.d.ts +141 -0
- package/dist_ts/nosqldb/classes.exactpersistence.js +1110 -0
- package/dist_ts/nosqldb/classes.lucene.adapter.d.ts +173 -0
- package/dist_ts/nosqldb/classes.lucene.adapter.js +623 -0
- package/dist_ts/nosqldb/classes.mongoadministration.d.ts +73 -0
- package/dist_ts/nosqldb/classes.mongoadministration.js +497 -0
- package/dist_ts/nosqldb/classes.namespaceinspection.d.ts +42 -0
- package/dist_ts/nosqldb/classes.namespaceinspection.js +138 -0
- package/dist_ts/nosqldb/classes.operationbudget.d.ts +22 -0
- package/dist_ts/nosqldb/classes.operationbudget.js +65 -0
- package/dist_ts/nosqldb/classes.ordinarypersistence.d.ts +18 -0
- package/dist_ts/nosqldb/classes.ordinarypersistence.js +71 -0
- package/dist_ts/nosqldb/classes.persistence.d.ts +14 -0
- package/dist_ts/nosqldb/classes.persistence.js +34 -0
- package/dist_ts/nosqldb/classes.session.d.ts +28 -0
- package/dist_ts/nosqldb/classes.session.js +246 -0
- package/dist_ts/nosqldb/classes.storedinspection.d.ts +44 -0
- package/dist_ts/nosqldb/classes.storedinspection.js +100 -0
- package/dist_ts/nosqldb/classes.testdatabase.d.ts +56 -0
- package/dist_ts/nosqldb/classes.testdatabase.js +250 -0
- package/dist_ts/nosqldb/classes.watcher.d.ts +37 -0
- package/dist_ts/nosqldb/classes.watcher.js +98 -0
- package/dist_ts/nosqldb/index.d.ts +27 -0
- package/dist_ts/nosqldb/index.js +18 -0
- package/dist_ts/nosqldb/logging.d.ts +2 -0
- package/dist_ts/nosqldb/logging.js +3 -0
- package/dist_ts/nosqldb/plugins.d.ts +17 -0
- package/dist_ts/nosqldb/plugins.js +20 -0
- package/dist_ts/nosqldb/shim.d.ts +1 -0
- package/dist_ts/nosqldb/shim.js +8 -0
- package/dist_ts/nosqldb/testsupport.d.ts +3 -0
- package/dist_ts/nosqldb/testsupport.js +3 -0
- package/dist_ts/objectstorage/classes.bucket.d.ts +227 -0
- package/dist_ts/objectstorage/classes.bucket.js +939 -0
- package/dist_ts/objectstorage/classes.connection.d.ts +21 -0
- package/dist_ts/objectstorage/classes.connection.js +27 -0
- package/dist_ts/objectstorage/classes.directory.d.ts +124 -0
- package/dist_ts/objectstorage/classes.directory.js +335 -0
- package/dist_ts/objectstorage/classes.exactpathpurgeerror.d.ts +5 -0
- package/dist_ts/objectstorage/classes.exactpathpurgeerror.js +18 -0
- package/dist_ts/objectstorage/classes.exactuploaderror.d.ts +5 -0
- package/dist_ts/objectstorage/classes.exactuploaderror.js +19 -0
- package/dist_ts/objectstorage/classes.file.d.ts +91 -0
- package/dist_ts/objectstorage/classes.file.js +255 -0
- package/dist_ts/objectstorage/classes.listcursor.d.ts +41 -0
- package/dist_ts/objectstorage/classes.listcursor.js +67 -0
- package/dist_ts/objectstorage/classes.metadata.d.ts +57 -0
- package/dist_ts/objectstorage/classes.metadata.js +113 -0
- package/dist_ts/objectstorage/classes.smartbucket.d.ts +57 -0
- package/dist_ts/objectstorage/classes.smartbucket.js +357 -0
- package/dist_ts/objectstorage/classes.trash.d.ts +11 -0
- package/dist_ts/objectstorage/classes.trash.js +22 -0
- package/dist_ts/objectstorage/classes.watcher.d.ts +79 -0
- package/dist_ts/objectstorage/classes.watcher.js +249 -0
- package/dist_ts/objectstorage/helpers.d.ts +25 -0
- package/dist_ts/objectstorage/helpers.js +215 -0
- package/dist_ts/objectstorage/index.d.ts +13 -0
- package/dist_ts/objectstorage/index.js +13 -0
- package/dist_ts/objectstorage/interfaces.d.ts +276 -0
- package/dist_ts/objectstorage/interfaces.js +2 -0
- package/dist_ts/objectstorage/internal.exactpathpurge.operations.d.ts +11 -0
- package/dist_ts/objectstorage/internal.exactpathpurge.operations.js +1069 -0
- package/dist_ts/objectstorage/internal.exactupload.capability.d.ts +40 -0
- package/dist_ts/objectstorage/internal.exactupload.capability.js +382 -0
- package/dist_ts/objectstorage/internal.exactupload.operations.d.ts +11 -0
- package/dist_ts/objectstorage/internal.exactupload.operations.js +1104 -0
- package/dist_ts/objectstorage/internal.multipart.planner.d.ts +8 -0
- package/dist_ts/objectstorage/internal.multipart.planner.js +63 -0
- package/dist_ts/objectstorage/internal.multipart.stream.d.ts +17 -0
- package/dist_ts/objectstorage/internal.multipart.stream.js +440 -0
- package/dist_ts/objectstorage/internal.multipart.types.d.ts +82 -0
- package/dist_ts/objectstorage/internal.multipart.types.js +2 -0
- package/dist_ts/objectstorage/plugins.d.ts +17 -0
- package/dist_ts/objectstorage/plugins.js +23 -0
- package/dist_ts/plugins.d.ts +4 -0
- package/dist_ts/plugins.js +5 -0
- package/dist_ts/sqldb/classes.clickhouseconnection.d.ts +39 -0
- package/dist_ts/sqldb/classes.clickhouseconnection.js +225 -0
- package/dist_ts/sqldb/classes.sqlconnection.d.ts +50 -0
- package/dist_ts/sqldb/classes.sqlconnection.js +376 -0
- package/dist_ts/sqldb/classes.sqltable.d.ts +29 -0
- package/dist_ts/sqldb/classes.sqltable.js +70 -0
- package/dist_ts/sqldb/clickhouse/classes.metricwriter.d.ts +27 -0
- package/dist_ts/sqldb/clickhouse/classes.metricwriter.js +89 -0
- package/dist_ts/sqldb/clickhouse/index.d.ts +9 -0
- package/dist_ts/sqldb/clickhouse/index.js +13 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.clickhousetable.d.ts +88 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.clickhousetable.js +304 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.httpclient.d.ts +28 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.httpclient.js +46 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.querybuilder.d.ts +43 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.querybuilder.js +155 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.resultset.d.ts +13 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.resultset.js +36 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.smartclickhouse.d.ts +49 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.smartclickhouse.js +106 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.timedatatable.d.ts +51 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.classes.timedatatable.js +96 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.plugins.d.ts +5 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.plugins.js +6 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.types.d.ts +53 -0
- package/dist_ts/sqldb/clickhouse/smartclickhouse.types.js +41 -0
- package/dist_ts/sqldb/index.d.ts +6 -0
- package/dist_ts/sqldb/index.js +6 -0
- package/dist_ts/sqldb/interfaces.d.ts +53 -0
- package/dist_ts/sqldb/interfaces.js +19 -0
- package/dist_ts/sqldb/internal.sqlpool.d.ts +51 -0
- package/dist_ts/sqldb/internal.sqlpool.js +214 -0
- package/dist_ts/sqldb/plugins.clickhouse.d.ts +4 -0
- package/dist_ts/sqldb/plugins.clickhouse.js +5 -0
- package/dist_ts/sqldb/plugins.mariadb.d.ts +4 -0
- package/dist_ts/sqldb/plugins.mariadb.js +5 -0
- package/docs/source/smartbucket/license.md +19 -0
- package/docs/source/smartclickhouse/license.md +19 -0
- package/license.md +21 -0
- package/package.json +101 -0
- package/readme.md +157 -0
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/classes.losslessorgclient.ts +104 -0
- package/ts/core/classes.error.ts +31 -0
- package/ts/core/classes.operation.ts +60 -0
- package/ts/core/interfaces.ts +24 -0
- package/ts/index.ts +4 -0
- package/ts/nosqldb/classes.atomicdelete.ts +81 -0
- package/ts/nosqldb/classes.atomicfindoneandupdate.ts +152 -0
- package/ts/nosqldb/classes.atomicupdate.ts +99 -0
- package/ts/nosqldb/classes.bootstraprecord.ts +107 -0
- package/ts/nosqldb/classes.bsonassertion.ts +25 -0
- package/ts/nosqldb/classes.bsonobjectid.ts +45 -0
- package/ts/nosqldb/classes.bsonsnapshot.ts +105 -0
- package/ts/nosqldb/classes.cached-document.ts +67 -0
- package/ts/nosqldb/classes.collection.ts +2399 -0
- package/ts/nosqldb/classes.collectionfactory.ts +87 -0
- package/ts/nosqldb/classes.collectionlifecycle.ts +24 -0
- package/ts/nosqldb/classes.collectionpreparation.ts +164 -0
- package/ts/nosqldb/classes.collectiontopology.ts +645 -0
- package/ts/nosqldb/classes.connection.ts +31 -0
- package/ts/nosqldb/classes.convenience.ts +5 -0
- package/ts/nosqldb/classes.cursor.ts +88 -0
- package/ts/nosqldb/classes.cursoroperation.ts +38 -0
- package/ts/nosqldb/classes.db.ts +637 -0
- package/ts/nosqldb/classes.distributedcoordinator.ts +305 -0
- package/ts/nosqldb/classes.doc.ts +4928 -0
- package/ts/nosqldb/classes.easystore.ts +154 -0
- package/ts/nosqldb/classes.exactpersistence.ts +1974 -0
- package/ts/nosqldb/classes.lucene.adapter.ts +780 -0
- package/ts/nosqldb/classes.mongoadministration.ts +867 -0
- package/ts/nosqldb/classes.namespaceinspection.ts +199 -0
- package/ts/nosqldb/classes.operationbudget.ts +75 -0
- package/ts/nosqldb/classes.ordinarypersistence.ts +84 -0
- package/ts/nosqldb/classes.persistence.ts +62 -0
- package/ts/nosqldb/classes.session.ts +389 -0
- package/ts/nosqldb/classes.storedinspection.ts +151 -0
- package/ts/nosqldb/classes.testdatabase.ts +272 -0
- package/ts/nosqldb/classes.watcher.ts +96 -0
- package/ts/nosqldb/index.ts +51 -0
- package/ts/nosqldb/logging.ts +3 -0
- package/ts/nosqldb/plugins.ts +37 -0
- package/ts/nosqldb/shim.ts +6 -0
- package/ts/nosqldb/testsupport.ts +13 -0
- package/ts/objectstorage/classes.bucket.ts +1114 -0
- package/ts/objectstorage/classes.connection.ts +36 -0
- package/ts/objectstorage/classes.directory.ts +425 -0
- package/ts/objectstorage/classes.exactpathpurgeerror.ts +24 -0
- package/ts/objectstorage/classes.exactuploaderror.ts +25 -0
- package/ts/objectstorage/classes.file.ts +303 -0
- package/ts/objectstorage/classes.listcursor.ts +89 -0
- package/ts/objectstorage/classes.metadata.ts +134 -0
- package/ts/objectstorage/classes.smartbucket.ts +445 -0
- package/ts/objectstorage/classes.trash.ts +30 -0
- package/ts/objectstorage/classes.watcher.ts +289 -0
- package/ts/objectstorage/helpers.ts +254 -0
- package/ts/objectstorage/index.ts +13 -0
- package/ts/objectstorage/interfaces.ts +389 -0
- package/ts/objectstorage/internal.exactpathpurge.operations.ts +1936 -0
- package/ts/objectstorage/internal.exactupload.capability.ts +580 -0
- package/ts/objectstorage/internal.exactupload.operations.ts +1715 -0
- package/ts/objectstorage/internal.multipart.planner.ts +90 -0
- package/ts/objectstorage/internal.multipart.stream.ts +606 -0
- package/ts/objectstorage/internal.multipart.types.ts +106 -0
- package/ts/objectstorage/plugins.ts +35 -0
- package/ts/plugins.ts +4 -0
- package/ts/sqldb/classes.clickhouseconnection.ts +189 -0
- package/ts/sqldb/classes.sqlconnection.ts +350 -0
- package/ts/sqldb/classes.sqltable.ts +70 -0
- package/ts/sqldb/clickhouse/classes.metricwriter.ts +72 -0
- package/ts/sqldb/clickhouse/index.ts +16 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.clickhousetable.ts +372 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.httpclient.ts +52 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.querybuilder.ts +120 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.resultset.ts +44 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.smartclickhouse.ts +123 -0
- package/ts/sqldb/clickhouse/smartclickhouse.classes.timedatatable.ts +114 -0
- package/ts/sqldb/clickhouse/smartclickhouse.plugins.ts +5 -0
- package/ts/sqldb/clickhouse/smartclickhouse.types.ts +134 -0
- package/ts/sqldb/index.ts +6 -0
- package/ts/sqldb/interfaces.ts +61 -0
- package/ts/sqldb/internal.sqlpool.ts +179 -0
- package/ts/sqldb/plugins.clickhouse.ts +4 -0
- package/ts/sqldb/plugins.mariadb.ts +4 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import * as helpers from './helpers.js';
|
|
3
|
+
import * as interfaces from './interfaces.js';
|
|
4
|
+
import { Directory } from './classes.directory.js';
|
|
5
|
+
import { MetaData } from './classes.metadata.js';
|
|
6
|
+
/**
|
|
7
|
+
* represents a file in a directory
|
|
8
|
+
*/
|
|
9
|
+
export class File {
|
|
10
|
+
// STATIC
|
|
11
|
+
/**
|
|
12
|
+
* creates a file in draft mode
|
|
13
|
+
* you need to call .save() to store it in object storage
|
|
14
|
+
* @param optionsArg
|
|
15
|
+
*/
|
|
16
|
+
static async create(optionsArg) {
|
|
17
|
+
const contents = typeof optionsArg.contents === 'string'
|
|
18
|
+
? Buffer.from(optionsArg.contents, optionsArg.encoding)
|
|
19
|
+
: optionsArg.contents;
|
|
20
|
+
const file = new File({
|
|
21
|
+
directoryRefArg: optionsArg.directory,
|
|
22
|
+
fileName: optionsArg.name,
|
|
23
|
+
});
|
|
24
|
+
if (contents instanceof plugins.stream.Readable) {
|
|
25
|
+
await optionsArg.directory.fastPutStream({
|
|
26
|
+
path: optionsArg.name,
|
|
27
|
+
stream: contents,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
await optionsArg.directory.fastPut({
|
|
32
|
+
path: optionsArg.name,
|
|
33
|
+
contents: contents,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return file;
|
|
37
|
+
}
|
|
38
|
+
// INSTANCE
|
|
39
|
+
parentDirectoryRef;
|
|
40
|
+
name;
|
|
41
|
+
/**
|
|
42
|
+
* get the full path to the file
|
|
43
|
+
* @returns the full path to the file
|
|
44
|
+
*/
|
|
45
|
+
getBasePath() {
|
|
46
|
+
return plugins.path.join(this.parentDirectoryRef.getBasePath(), this.name);
|
|
47
|
+
}
|
|
48
|
+
constructor(optionsArg) {
|
|
49
|
+
this.parentDirectoryRef = optionsArg.directoryRefArg;
|
|
50
|
+
this.name = optionsArg.fileName;
|
|
51
|
+
}
|
|
52
|
+
async getContentsAsString() {
|
|
53
|
+
const fileBuffer = await this.getContents();
|
|
54
|
+
return fileBuffer.toString();
|
|
55
|
+
}
|
|
56
|
+
async getContents() {
|
|
57
|
+
const resultBuffer = await this.parentDirectoryRef.bucketRef.fastGet({
|
|
58
|
+
path: this.getBasePath(),
|
|
59
|
+
});
|
|
60
|
+
return resultBuffer;
|
|
61
|
+
}
|
|
62
|
+
async getReadStream(typeArg) {
|
|
63
|
+
const readStream = this.parentDirectoryRef.bucketRef.fastGetStream({
|
|
64
|
+
path: this.getBasePath(),
|
|
65
|
+
}, typeArg);
|
|
66
|
+
return readStream;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* deletes this file
|
|
70
|
+
*/
|
|
71
|
+
async delete(optionsArg) {
|
|
72
|
+
optionsArg = {
|
|
73
|
+
...{
|
|
74
|
+
mode: 'permanent',
|
|
75
|
+
},
|
|
76
|
+
...optionsArg,
|
|
77
|
+
};
|
|
78
|
+
if (optionsArg.mode === 'permanent') {
|
|
79
|
+
await this.parentDirectoryRef.bucketRef.fastRemove({
|
|
80
|
+
path: this.getBasePath(),
|
|
81
|
+
});
|
|
82
|
+
if (!this.name.endsWith('.metadata')) {
|
|
83
|
+
if (await this.hasMetaData()) {
|
|
84
|
+
const metadata = await this.getMetaData();
|
|
85
|
+
await metadata.metadataFile.delete(optionsArg);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else if (optionsArg.mode === 'trash') {
|
|
90
|
+
const metadata = await this.getMetaData();
|
|
91
|
+
await metadata.storeCustomMetaData({
|
|
92
|
+
key: 'recycle',
|
|
93
|
+
value: {
|
|
94
|
+
deletedAt: Date.now(),
|
|
95
|
+
originalPath: this.getBasePath(),
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
const trash = await this.parentDirectoryRef.bucketRef.getTrash();
|
|
99
|
+
const trashDir = await trash.getTrashDir();
|
|
100
|
+
await this.move({
|
|
101
|
+
directory: trashDir,
|
|
102
|
+
path: await trash.getTrashKeyByOriginalBasePath(this.getBasePath()),
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
await this.parentDirectoryRef.listFiles();
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* restores
|
|
109
|
+
*/
|
|
110
|
+
async restore(optionsArg = {}) {
|
|
111
|
+
optionsArg = {
|
|
112
|
+
useOriginalPath: (() => {
|
|
113
|
+
return optionsArg.toPath ? false : true;
|
|
114
|
+
})(),
|
|
115
|
+
overwrite: false,
|
|
116
|
+
...optionsArg,
|
|
117
|
+
};
|
|
118
|
+
const metadata = await this.getMetaData();
|
|
119
|
+
const moveToPath = optionsArg.toPath || (await metadata.getCustomMetaData({
|
|
120
|
+
key: 'recycle'
|
|
121
|
+
})).originalPath;
|
|
122
|
+
await metadata.deleteCustomMetaData({
|
|
123
|
+
key: 'recycle'
|
|
124
|
+
});
|
|
125
|
+
await this.move({
|
|
126
|
+
path: moveToPath,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* allows locking the file
|
|
131
|
+
* @param optionsArg
|
|
132
|
+
*/
|
|
133
|
+
async lock(optionsArg) {
|
|
134
|
+
const metadata = await this.getMetaData();
|
|
135
|
+
await metadata.setLock({
|
|
136
|
+
lock: 'locked',
|
|
137
|
+
expires: Date.now() + (optionsArg?.timeoutMillis || 1000),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* actively unlocks a file
|
|
142
|
+
*
|
|
143
|
+
*/
|
|
144
|
+
async unlock(optionsArg) {
|
|
145
|
+
const metadata = await this.getMetaData();
|
|
146
|
+
await metadata.removeLock({
|
|
147
|
+
force: optionsArg?.force || false,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
async updateWithContents(optionsArg) {
|
|
151
|
+
if (optionsArg.contents instanceof plugins.stream.Readable ||
|
|
152
|
+
optionsArg.contents instanceof ReadableStream) {
|
|
153
|
+
await this.parentDirectoryRef.bucketRef.fastPutStream({
|
|
154
|
+
path: this.getBasePath(),
|
|
155
|
+
readableStream: optionsArg.contents,
|
|
156
|
+
overwrite: true,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
else if (Buffer.isBuffer(optionsArg.contents)) {
|
|
160
|
+
await this.parentDirectoryRef.bucketRef.fastPut({
|
|
161
|
+
path: this.getBasePath(),
|
|
162
|
+
contents: optionsArg.contents,
|
|
163
|
+
overwrite: true,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
else if (typeof optionsArg.contents === 'string') {
|
|
167
|
+
await this.parentDirectoryRef.bucketRef.fastPut({
|
|
168
|
+
path: this.getBasePath(),
|
|
169
|
+
contents: Buffer.from(optionsArg.contents, optionsArg.encoding),
|
|
170
|
+
overwrite: true,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* moves the file to another directory
|
|
176
|
+
*/
|
|
177
|
+
async move(pathDescriptorArg) {
|
|
178
|
+
let moveToPath = '';
|
|
179
|
+
const isDirectory = await this.parentDirectoryRef.bucketRef.isDirectory(pathDescriptorArg);
|
|
180
|
+
if (isDirectory) {
|
|
181
|
+
moveToPath = await helpers.reducePathDescriptorToPath({
|
|
182
|
+
...pathDescriptorArg,
|
|
183
|
+
path: plugins.path.join(pathDescriptorArg.path, this.name),
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
moveToPath = await helpers.reducePathDescriptorToPath(pathDescriptorArg);
|
|
188
|
+
}
|
|
189
|
+
// lets move the file
|
|
190
|
+
await this.parentDirectoryRef.bucketRef.fastMove({
|
|
191
|
+
sourcePath: this.getBasePath(),
|
|
192
|
+
destinationPath: moveToPath,
|
|
193
|
+
overwrite: true,
|
|
194
|
+
});
|
|
195
|
+
// lets move the metadatafile
|
|
196
|
+
if (!this.name.endsWith('.metadata')) {
|
|
197
|
+
const metadata = await this.getMetaData();
|
|
198
|
+
await this.parentDirectoryRef.bucketRef.fastMove({
|
|
199
|
+
sourcePath: metadata.metadataFile.getBasePath(),
|
|
200
|
+
destinationPath: moveToPath + '.metadata',
|
|
201
|
+
overwrite: true,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
// lets update references of this
|
|
205
|
+
const baseDirectory = await this.parentDirectoryRef.bucketRef.getBaseDirectory();
|
|
206
|
+
this.parentDirectoryRef = await baseDirectory.getSubDirectoryByName(await helpers.reducePathDescriptorToPath(pathDescriptorArg), {
|
|
207
|
+
couldBeFilePath: true,
|
|
208
|
+
});
|
|
209
|
+
this.name = pathDescriptorArg.path;
|
|
210
|
+
}
|
|
211
|
+
async hasMetaData() {
|
|
212
|
+
if (!this.name.endsWith('.metadata')) {
|
|
213
|
+
const hasMetadataBool = MetaData.hasMetaData({
|
|
214
|
+
file: this,
|
|
215
|
+
});
|
|
216
|
+
return hasMetadataBool;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* allows updating the metadata of a file
|
|
224
|
+
* @param updatedMetadata
|
|
225
|
+
*/
|
|
226
|
+
async getMetaData() {
|
|
227
|
+
if (this.name.endsWith('.metadata')) {
|
|
228
|
+
throw new Error('metadata files cannot have metadata');
|
|
229
|
+
}
|
|
230
|
+
const metadata = await MetaData.createForFile({
|
|
231
|
+
file: this,
|
|
232
|
+
});
|
|
233
|
+
return metadata;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* gets the contents as json
|
|
237
|
+
*/
|
|
238
|
+
async getJsonData() {
|
|
239
|
+
const json = await this.getContentsAsString();
|
|
240
|
+
const parsed = await JSON.parse(json);
|
|
241
|
+
return parsed;
|
|
242
|
+
}
|
|
243
|
+
async writeJsonData(dataArg) {
|
|
244
|
+
await this.updateWithContents({
|
|
245
|
+
contents: JSON.stringify(dataArg),
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
async getMagicBytes(optionsArg) {
|
|
249
|
+
return this.parentDirectoryRef.bucketRef.getMagicBytes({
|
|
250
|
+
path: this.getBasePath(),
|
|
251
|
+
length: optionsArg.length,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5maWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvb2JqZWN0c3RvcmFnZS9jbGFzc2VzLmZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxLQUFLLFVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWpEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLElBQUk7SUFDZixTQUFTO0lBRVQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBUTFCO1FBQ0MsTUFBTSxRQUFRLEdBQ1osT0FBTyxVQUFVLENBQUMsUUFBUSxLQUFLLFFBQVE7WUFDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDO1lBQ3BCLGVBQWUsRUFBRSxVQUFVLENBQUMsU0FBUztZQUNyQyxRQUFRLEVBQUUsVUFBVSxDQUFDLElBQUk7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxRQUFRLFlBQVksT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoRCxNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO2dCQUN2QyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7Z0JBQ3JCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxVQUFVLENB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
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Bucket } from './classes.bucket.js';
|
|
2
|
+
export interface IListCursorOptions {
|
|
3
|
+
pageSize?: number;
|
|
4
|
+
}
|
|
5
|
+
export interface IListCursorResult {
|
|
6
|
+
keys: string[];
|
|
7
|
+
done: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* ListCursor provides explicit pagination control for listing objects in a bucket.
|
|
11
|
+
* Useful for UI pagination, resumable operations, and manual batch processing.
|
|
12
|
+
*/
|
|
13
|
+
export declare class ListCursor {
|
|
14
|
+
private bucket;
|
|
15
|
+
private prefix;
|
|
16
|
+
private continuationToken?;
|
|
17
|
+
private exhausted;
|
|
18
|
+
private pageSize;
|
|
19
|
+
constructor(bucket: Bucket, prefix: string, options?: IListCursorOptions);
|
|
20
|
+
/**
|
|
21
|
+
* Fetch the next page of object keys
|
|
22
|
+
* @returns Object with keys array and done flag
|
|
23
|
+
*/
|
|
24
|
+
next(): Promise<IListCursorResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Check if there are more pages to fetch
|
|
27
|
+
*/
|
|
28
|
+
hasMore(): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Reset the cursor to start from the beginning
|
|
31
|
+
*/
|
|
32
|
+
reset(): void;
|
|
33
|
+
/**
|
|
34
|
+
* Get the current continuation token (for saving/restoring state)
|
|
35
|
+
*/
|
|
36
|
+
getToken(): string | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Set the continuation token (for resuming from a saved state)
|
|
39
|
+
*/
|
|
40
|
+
setToken(token: string | undefined): void;
|
|
41
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// classes.listcursor.ts
|
|
2
|
+
import * as plugins from './plugins.js';
|
|
3
|
+
/**
|
|
4
|
+
* ListCursor provides explicit pagination control for listing objects in a bucket.
|
|
5
|
+
* Useful for UI pagination, resumable operations, and manual batch processing.
|
|
6
|
+
*/
|
|
7
|
+
export class ListCursor {
|
|
8
|
+
bucket;
|
|
9
|
+
prefix;
|
|
10
|
+
continuationToken;
|
|
11
|
+
exhausted = false;
|
|
12
|
+
pageSize;
|
|
13
|
+
constructor(bucket, prefix, options = {}) {
|
|
14
|
+
this.bucket = bucket;
|
|
15
|
+
this.prefix = prefix;
|
|
16
|
+
this.pageSize = options.pageSize || 1000;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Fetch the next page of object keys
|
|
20
|
+
* @returns Object with keys array and done flag
|
|
21
|
+
*/
|
|
22
|
+
async next() {
|
|
23
|
+
if (this.exhausted) {
|
|
24
|
+
return { keys: [], done: true };
|
|
25
|
+
}
|
|
26
|
+
const command = new plugins.s3.ListObjectsV2Command({
|
|
27
|
+
Bucket: this.bucket.name,
|
|
28
|
+
Prefix: this.prefix,
|
|
29
|
+
MaxKeys: this.pageSize,
|
|
30
|
+
ContinuationToken: this.continuationToken,
|
|
31
|
+
});
|
|
32
|
+
const response = await this.bucket.smartbucketRef.storageClient.send(command);
|
|
33
|
+
const keys = (response.Contents || [])
|
|
34
|
+
.map((obj) => obj.Key)
|
|
35
|
+
.filter((key) => !!key);
|
|
36
|
+
this.continuationToken = response.NextContinuationToken;
|
|
37
|
+
this.exhausted = !this.continuationToken;
|
|
38
|
+
return { keys, done: this.exhausted };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if there are more pages to fetch
|
|
42
|
+
*/
|
|
43
|
+
hasMore() {
|
|
44
|
+
return !this.exhausted;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Reset the cursor to start from the beginning
|
|
48
|
+
*/
|
|
49
|
+
reset() {
|
|
50
|
+
this.continuationToken = undefined;
|
|
51
|
+
this.exhausted = false;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get the current continuation token (for saving/restoring state)
|
|
55
|
+
*/
|
|
56
|
+
getToken() {
|
|
57
|
+
return this.continuationToken;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Set the continuation token (for resuming from a saved state)
|
|
61
|
+
*/
|
|
62
|
+
setToken(token) {
|
|
63
|
+
this.continuationToken = token;
|
|
64
|
+
this.exhausted = !token;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5saXN0Y3Vyc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvb2JqZWN0c3RvcmFnZS9jbGFzc2VzLmxpc3RjdXJzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0JBQXdCO0FBRXhCLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBWXhDOzs7R0FHRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBTVg7SUFDQTtJQU5GLGlCQUFpQixDQUFVO0lBQzNCLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsUUFBUSxDQUFTO0lBRXpCLFlBQ1UsTUFBYyxFQUNkLE1BQWMsRUFDdEIsVUFBOEIsRUFBRTtRQUZ4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUd0QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsSUFBSTtRQUNmLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDO1lBQ2xELE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUk7WUFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN0QixpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1NBQzFDLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5RSxNQUFNLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO2FBQ25DLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzthQUNyQixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFekMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztRQUN4RCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBRXpDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxLQUF5QjtRQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDMUIsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import { File } from './classes.file.js';
|
|
3
|
+
export declare class MetaData {
|
|
4
|
+
static hasMetaData(optionsArg: {
|
|
5
|
+
file: File;
|
|
6
|
+
}): Promise<boolean>;
|
|
7
|
+
static createForFile(optionsArg: {
|
|
8
|
+
file: File;
|
|
9
|
+
}): Promise<MetaData>;
|
|
10
|
+
/**
|
|
11
|
+
* the file that contains the metadata
|
|
12
|
+
*/
|
|
13
|
+
metadataFile: File;
|
|
14
|
+
/**
|
|
15
|
+
* the file that the metadata is for
|
|
16
|
+
*/
|
|
17
|
+
fileRef: File;
|
|
18
|
+
getFileType(optionsArg?: {
|
|
19
|
+
useFileExtension?: boolean;
|
|
20
|
+
useMagicBytes?: boolean;
|
|
21
|
+
}): Promise<plugins.smartmime.IFileTypeResult | undefined>;
|
|
22
|
+
/**
|
|
23
|
+
* gets the size of the fileRef
|
|
24
|
+
*/
|
|
25
|
+
getSizeInBytes(): Promise<number>;
|
|
26
|
+
private prefixCustomMetaData;
|
|
27
|
+
storeCustomMetaData<T = any>(optionsArg: {
|
|
28
|
+
key: string;
|
|
29
|
+
value: T;
|
|
30
|
+
}): Promise<void>;
|
|
31
|
+
getCustomMetaData<T = any>(optionsArg: {
|
|
32
|
+
key: string;
|
|
33
|
+
}): Promise<T>;
|
|
34
|
+
deleteCustomMetaData(optionsArg: {
|
|
35
|
+
key: string;
|
|
36
|
+
}): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* set a lock on the ref file
|
|
39
|
+
* @param optionsArg
|
|
40
|
+
*/
|
|
41
|
+
setLock(optionsArg: {
|
|
42
|
+
lock: string;
|
|
43
|
+
expires: number;
|
|
44
|
+
}): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* remove the lock on the ref file
|
|
47
|
+
* @param optionsArg
|
|
48
|
+
*/
|
|
49
|
+
removeLock(optionsArg: {
|
|
50
|
+
force: boolean;
|
|
51
|
+
}): Promise<void>;
|
|
52
|
+
checkLocked(): Promise<boolean>;
|
|
53
|
+
getLockInfo(): Promise<{
|
|
54
|
+
lock: string;
|
|
55
|
+
expires: number;
|
|
56
|
+
}>;
|
|
57
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import { File } from './classes.file.js';
|
|
3
|
+
export class MetaData {
|
|
4
|
+
static async hasMetaData(optionsArg) {
|
|
5
|
+
// try finding the existing metadata file; return false if it doesn't exist
|
|
6
|
+
try {
|
|
7
|
+
const existingFile = await optionsArg.file.parentDirectoryRef.getFile({
|
|
8
|
+
path: optionsArg.file.name + '.metadata',
|
|
9
|
+
});
|
|
10
|
+
return !!existingFile;
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
const message = error?.message || '';
|
|
14
|
+
const isNotFound = message.includes('File not found') ||
|
|
15
|
+
error?.name === 'NotFound' ||
|
|
16
|
+
error?.$metadata?.httpStatusCode === 404;
|
|
17
|
+
if (isNotFound) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// static
|
|
24
|
+
static async createForFile(optionsArg) {
|
|
25
|
+
const metaData = new MetaData();
|
|
26
|
+
metaData.fileRef = optionsArg.file;
|
|
27
|
+
// lets find the existing metadata file
|
|
28
|
+
metaData.metadataFile = await metaData.fileRef.parentDirectoryRef.getFile({
|
|
29
|
+
path: metaData.fileRef.name + '.metadata',
|
|
30
|
+
createWithContents: '{}',
|
|
31
|
+
});
|
|
32
|
+
return metaData;
|
|
33
|
+
}
|
|
34
|
+
// instance
|
|
35
|
+
/**
|
|
36
|
+
* the file that contains the metadata
|
|
37
|
+
*/
|
|
38
|
+
metadataFile;
|
|
39
|
+
/**
|
|
40
|
+
* the file that the metadata is for
|
|
41
|
+
*/
|
|
42
|
+
fileRef;
|
|
43
|
+
async getFileType(optionsArg) {
|
|
44
|
+
if ((optionsArg && optionsArg.useFileExtension) || !optionsArg) {
|
|
45
|
+
const fileType = await plugins.smartmime.detectMimeType({
|
|
46
|
+
path: this.fileRef.name,
|
|
47
|
+
});
|
|
48
|
+
return fileType;
|
|
49
|
+
}
|
|
50
|
+
if (optionsArg && optionsArg.useMagicBytes) {
|
|
51
|
+
const fileType = await plugins.smartmime.detectMimeType({
|
|
52
|
+
buffer: await this.fileRef.getMagicBytes({
|
|
53
|
+
length: 100,
|
|
54
|
+
})
|
|
55
|
+
});
|
|
56
|
+
return fileType;
|
|
57
|
+
}
|
|
58
|
+
throw new Error('optionsArg.useFileExtension and optionsArg.useMagicBytes cannot both be false');
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* gets the size of the fileRef
|
|
62
|
+
*/
|
|
63
|
+
async getSizeInBytes() {
|
|
64
|
+
const stat = await this.fileRef.parentDirectoryRef.bucketRef.fastStat({
|
|
65
|
+
path: this.fileRef.getBasePath(),
|
|
66
|
+
});
|
|
67
|
+
return stat.ContentLength;
|
|
68
|
+
}
|
|
69
|
+
prefixCustomMetaData = 'custom_';
|
|
70
|
+
async storeCustomMetaData(optionsArg) {
|
|
71
|
+
const data = await this.metadataFile.getJsonData();
|
|
72
|
+
data[this.prefixCustomMetaData + optionsArg.key] = optionsArg.value;
|
|
73
|
+
await this.metadataFile.writeJsonData(data);
|
|
74
|
+
}
|
|
75
|
+
async getCustomMetaData(optionsArg) {
|
|
76
|
+
const data = await this.metadataFile.getJsonData();
|
|
77
|
+
return data[this.prefixCustomMetaData + optionsArg.key];
|
|
78
|
+
}
|
|
79
|
+
async deleteCustomMetaData(optionsArg) {
|
|
80
|
+
const data = await this.metadataFile.getJsonData();
|
|
81
|
+
delete data[this.prefixCustomMetaData + optionsArg.key];
|
|
82
|
+
await this.metadataFile.writeJsonData(data);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* set a lock on the ref file
|
|
86
|
+
* @param optionsArg
|
|
87
|
+
*/
|
|
88
|
+
async setLock(optionsArg) {
|
|
89
|
+
const data = await this.metadataFile.getJsonData();
|
|
90
|
+
data.lock = optionsArg.lock;
|
|
91
|
+
data.lockExpires = optionsArg.expires;
|
|
92
|
+
await this.metadataFile.writeJsonData(data);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* remove the lock on the ref file
|
|
96
|
+
* @param optionsArg
|
|
97
|
+
*/
|
|
98
|
+
async removeLock(optionsArg) {
|
|
99
|
+
const data = await this.metadataFile.getJsonData();
|
|
100
|
+
delete data.lock;
|
|
101
|
+
delete data.lockExpires;
|
|
102
|
+
await this.metadataFile.writeJsonData(data);
|
|
103
|
+
}
|
|
104
|
+
async checkLocked() {
|
|
105
|
+
const data = await this.metadataFile.getJsonData();
|
|
106
|
+
return data.lock && data.lockExpires > Date.now();
|
|
107
|
+
}
|
|
108
|
+
async getLockInfo() {
|
|
109
|
+
const data = await this.metadataFile.getJsonData();
|
|
110
|
+
return { lock: data.lock, expires: data.lockExpires };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5tZXRhZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL29iamVjdHN0b3JhZ2UvY2xhc3Nlcy5tZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekMsTUFBTSxPQUFPLFFBQVE7SUFDWixNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUEwQjtRQUN4RCwyRUFBMkU7UUFDM0UsSUFBSSxDQUFDO1lBQ0gsTUFBTSxZQUFZLEdBQUcsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztnQkFDcEUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVc7YUFDekMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ3hCLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO1lBQ3JDLE1BQU0sVUFBVSxHQUNkLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2xDLEtBQUssRUFBRSxJQUFJLEtBQUssVUFBVTtnQkFDMUIsS0FBSyxFQUFFLFNBQVMsRUFBRSxjQUFjLEtBQUssR0FBRyxDQUFDO1lBQzNDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVM7SUFDRixNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUEwQjtRQUMxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLFFBQVEsQ0FBQyxPQUFP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
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import { Bucket } from './classes.bucket.js';
|
|
3
|
+
import type { ISmartBucketReadinessOptions, TSmartBucketReadinessResult } from './interfaces.js';
|
|
4
|
+
export declare class SmartBucket {
|
|
5
|
+
config: plugins.tsclass.storage.IStorageDescriptor;
|
|
6
|
+
private currentStorageClient;
|
|
7
|
+
private ownedStorageClient;
|
|
8
|
+
private lifecycleState;
|
|
9
|
+
private lifecycleEpoch;
|
|
10
|
+
private activeReadinessControllers;
|
|
11
|
+
private retiredStorageClients;
|
|
12
|
+
private storageClientMutationInProgress;
|
|
13
|
+
private closePromise;
|
|
14
|
+
private operationCloseStarted;
|
|
15
|
+
private operationCloseSettlement;
|
|
16
|
+
/**
|
|
17
|
+
* The current S3 client used by bucket operations.
|
|
18
|
+
*/
|
|
19
|
+
get storageClient(): plugins.s3.S3Client;
|
|
20
|
+
/**
|
|
21
|
+
* Changes the current S3 client without transferring lifecycle ownership.
|
|
22
|
+
*/
|
|
23
|
+
set storageClient(storageClientArg: plugins.s3.S3Client);
|
|
24
|
+
/** @deprecated Use storageClient instead */
|
|
25
|
+
get s3Client(): plugins.s3.S3Client;
|
|
26
|
+
/**
|
|
27
|
+
* the constructor of SmartBucket
|
|
28
|
+
*/
|
|
29
|
+
constructor(configArg: plugins.tsclass.storage.IStorageDescriptor, clientOptions?: {
|
|
30
|
+
forcePathStyle?: boolean;
|
|
31
|
+
});
|
|
32
|
+
createBucket(bucketNameArg: string): Promise<Bucket>;
|
|
33
|
+
removeBucket(bucketName: string): Promise<void>;
|
|
34
|
+
getBucketByName(bucketNameArg: string): Promise<Bucket>;
|
|
35
|
+
/**
|
|
36
|
+
* Check if a bucket exists
|
|
37
|
+
*/
|
|
38
|
+
bucketExists(bucketNameArg: string): Promise<boolean>;
|
|
39
|
+
/**
|
|
40
|
+
* Transfers exclusive lifecycle ownership of an S3 client to this SmartBucket.
|
|
41
|
+
*/
|
|
42
|
+
replaceStorageClient(storageClientArg: plugins.s3.S3Client): void;
|
|
43
|
+
/**
|
|
44
|
+
* Performs a bounded, read-only round trip to verify bucket readiness.
|
|
45
|
+
*/
|
|
46
|
+
checkReadiness(bucketNameArg: string, optionsArg?: ISmartBucketReadinessOptions): Promise<TSmartBucketReadinessResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Cancels active readiness and object operations before closing the owned S3 client.
|
|
49
|
+
*/
|
|
50
|
+
close(): Promise<void>;
|
|
51
|
+
private isStorageClient;
|
|
52
|
+
private abortActiveReadinessProbes;
|
|
53
|
+
private sendReadinessProbe;
|
|
54
|
+
private getReadinessLifecycleReason;
|
|
55
|
+
private getStaleReadinessReason;
|
|
56
|
+
private createReadinessFailure;
|
|
57
|
+
}
|