@typetron/framework 0.5.31 → 0.5.32
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/Framework/Readme.md +8 -3
- package/Storage/Readme.md +137 -32
- package/build/Cache/Stores/FileStore.d.ts +3 -3
- package/build/Cache/Stores/FileStore.d.ts.map +1 -1
- package/build/Cache/Stores/FileStore.js.map +1 -1
- package/build/Database/List.d.ts +1 -1
- package/build/Database/Migrations/Migrator.d.ts +3 -3
- package/build/Database/Migrations/Migrator.d.ts.map +1 -1
- package/build/Database/Migrations/Migrator.js.map +1 -1
- package/build/Database/Seeders/SeederManager.d.ts +3 -3
- package/build/Database/Seeders/SeederManager.d.ts.map +1 -1
- package/build/Database/Seeders/SeederManager.js +3 -3
- package/build/Database/Seeders/SeederManager.js.map +1 -1
- package/build/Framework/Application.js +1 -1
- package/build/Framework/Application.js.map +1 -1
- package/build/Framework/Config/StorageConfig.d.ts +7 -0
- package/build/Framework/Config/StorageConfig.d.ts.map +1 -0
- package/build/Framework/Config/StorageConfig.js +15 -0
- package/build/Framework/Config/StorageConfig.js.map +1 -0
- package/build/Framework/Config/index.d.ts +1 -0
- package/build/Framework/Config/index.d.ts.map +1 -1
- package/build/Framework/Config/index.js +1 -0
- package/build/Framework/Config/index.js.map +1 -1
- package/build/Framework/Middleware/StaticAssetsMiddleware.d.ts +2 -2
- package/build/Framework/Middleware/StaticAssetsMiddleware.d.ts.map +1 -1
- package/build/Framework/Middleware/StaticAssetsMiddleware.js +1 -1
- package/build/Framework/Middleware/StaticAssetsMiddleware.js.map +1 -1
- package/build/Framework/Providers/CacheProvider.js +1 -1
- package/build/Framework/Providers/CacheProvider.js.map +1 -1
- package/build/Framework/Providers/DatabaseProvider.d.ts +2 -2
- package/build/Framework/Providers/DatabaseProvider.d.ts.map +1 -1
- package/build/Framework/Providers/DatabaseProvider.js +1 -1
- package/build/Framework/Providers/DatabaseProvider.js.map +1 -1
- package/build/Framework/Providers/StorageProvider.d.ts +7 -0
- package/build/Framework/Providers/StorageProvider.d.ts.map +1 -0
- package/build/Framework/Providers/StorageProvider.js +28 -0
- package/build/Framework/Providers/StorageProvider.js.map +1 -0
- package/build/Framework/Providers/WebsocketsProvider.d.ts.map +1 -1
- package/build/Framework/Providers/WebsocketsProvider.js +13 -0
- package/build/Framework/Providers/WebsocketsProvider.js.map +1 -1
- package/build/Framework/index.d.ts +1 -0
- package/build/Framework/index.d.ts.map +1 -1
- package/build/Framework/index.js +1 -0
- package/build/Framework/index.js.map +1 -1
- package/build/Router/Http/Request.d.ts.map +1 -1
- package/build/Router/Http/Request.js +3 -4
- package/build/Router/Http/Request.js.map +1 -1
- package/build/Router/Router.js +1 -1
- package/build/Router/Router.js.map +1 -1
- package/build/Router/Servers/uNetworking.d.ts.map +1 -1
- package/build/Router/Servers/uNetworking.js +3 -4
- package/build/Router/Servers/uNetworking.js.map +1 -1
- package/build/Storage/Drivers/LocalDriver.d.ts +26 -0
- package/build/Storage/Drivers/LocalDriver.d.ts.map +1 -0
- package/build/Storage/Drivers/LocalDriver.js +209 -0
- package/build/Storage/Drivers/LocalDriver.js.map +1 -0
- package/build/Storage/Drivers/MemoryDriver.d.ts +25 -0
- package/build/Storage/Drivers/MemoryDriver.d.ts.map +1 -0
- package/build/Storage/Drivers/MemoryDriver.js +108 -0
- package/build/Storage/Drivers/MemoryDriver.js.map +1 -0
- package/build/Storage/Drivers/ReadOnlyDriver.d.ts +22 -0
- package/build/Storage/Drivers/ReadOnlyDriver.d.ts.map +1 -0
- package/build/Storage/Drivers/ReadOnlyDriver.js +38 -0
- package/build/Storage/Drivers/ReadOnlyDriver.js.map +1 -0
- package/build/Storage/Drivers/S3Driver.d.ts +32 -0
- package/build/Storage/Drivers/S3Driver.d.ts.map +1 -0
- package/build/Storage/Drivers/S3Driver.js +248 -0
- package/build/Storage/Drivers/S3Driver.js.map +1 -0
- package/build/Storage/Drivers/ScopedDriver.d.ts +24 -0
- package/build/Storage/Drivers/ScopedDriver.d.ts.map +1 -0
- package/build/Storage/Drivers/ScopedDriver.js +50 -0
- package/build/Storage/Drivers/ScopedDriver.js.map +1 -0
- package/build/Storage/File.d.ts +14 -4
- package/build/Storage/File.d.ts.map +1 -1
- package/build/Storage/File.js +29 -47
- package/build/Storage/File.js.map +1 -1
- package/build/Storage/Filesystem.d.ts +31 -0
- package/build/Storage/Filesystem.d.ts.map +1 -0
- package/build/Storage/Filesystem.js +121 -0
- package/build/Storage/Filesystem.js.map +1 -0
- package/build/Storage/PathPrefixer.d.ts +9 -0
- package/build/Storage/PathPrefixer.d.ts.map +1 -0
- package/build/Storage/PathPrefixer.js +53 -0
- package/build/Storage/PathPrefixer.js.map +1 -0
- package/build/Storage/Storage.d.ts +37 -9
- package/build/Storage/Storage.d.ts.map +1 -1
- package/build/Storage/Storage.js +85 -101
- package/build/Storage/Storage.js.map +1 -1
- package/build/Storage/StorageDisk.d.ts +34 -0
- package/build/Storage/StorageDisk.d.ts.map +1 -0
- package/build/Storage/StorageDisk.js +104 -0
- package/build/Storage/StorageDisk.js.map +1 -0
- package/build/Storage/StorageDriver.d.ts +19 -0
- package/build/Storage/StorageDriver.d.ts.map +1 -0
- package/build/Storage/StorageDriver.js +7 -0
- package/build/Storage/StorageDriver.js.map +1 -0
- package/build/Storage/UploadedFile.d.ts +9 -0
- package/build/Storage/UploadedFile.d.ts.map +1 -0
- package/build/Storage/UploadedFile.js +22 -0
- package/build/Storage/UploadedFile.js.map +1 -0
- package/build/Storage/errors.d.ts +21 -0
- package/build/Storage/errors.d.ts.map +1 -0
- package/build/Storage/errors.js +43 -0
- package/build/Storage/errors.js.map +1 -0
- package/build/Storage/index.d.ts +12 -0
- package/build/Storage/index.d.ts.map +1 -1
- package/build/Storage/index.js +12 -0
- package/build/Storage/index.js.map +1 -1
- package/build/Storage/types.d.ts +73 -0
- package/build/Storage/types.d.ts.map +1 -0
- package/build/Storage/types.js +3 -0
- package/build/Storage/types.js.map +1 -0
- package/package.json +16 -2
package/build/Storage/File.js
CHANGED
|
@@ -1,61 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
35
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
6
|
exports.File = void 0;
|
|
37
|
-
const
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
38
8
|
class File {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
// content?: string | Buffer
|
|
9
|
+
key;
|
|
10
|
+
disk;
|
|
42
11
|
originalName;
|
|
43
12
|
saved = false;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
13
|
+
size;
|
|
14
|
+
lastModified;
|
|
15
|
+
mimeType;
|
|
16
|
+
etag;
|
|
17
|
+
metadata;
|
|
18
|
+
visibility;
|
|
19
|
+
constructor(key, disk, metadata = {}) {
|
|
20
|
+
this.key = key;
|
|
21
|
+
this.disk = disk;
|
|
22
|
+
Object.assign(this, metadata);
|
|
47
23
|
}
|
|
48
|
-
get
|
|
49
|
-
return this.
|
|
24
|
+
get name() {
|
|
25
|
+
return node_path_1.default.posix.basename(this.key.replaceAll('\\', '/'));
|
|
26
|
+
}
|
|
27
|
+
get directory() {
|
|
28
|
+
const directory = node_path_1.default.posix.dirname(this.key.replaceAll('\\', '/'));
|
|
29
|
+
return directory === '.' ? '' : directory;
|
|
50
30
|
}
|
|
31
|
+
/** The logical storage key. Kept as an alias for existing file consumers. */
|
|
51
32
|
get path() {
|
|
52
|
-
return
|
|
33
|
+
return this.key;
|
|
34
|
+
}
|
|
35
|
+
get extension() {
|
|
36
|
+
const extension = node_path_1.default.posix.extname(this.name);
|
|
37
|
+
return extension ? extension.slice(1) : undefined;
|
|
53
38
|
}
|
|
54
39
|
guessExtension() {
|
|
55
|
-
|
|
56
|
-
if (fileParts.length >= 1) {
|
|
57
|
-
return fileParts.pop();
|
|
58
|
-
}
|
|
40
|
+
return this.extension;
|
|
59
41
|
}
|
|
60
42
|
toString() {
|
|
61
43
|
return this.name;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"File.js","sourceRoot":"","sources":["../../Storage/File.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"File.js","sourceRoot":"","sources":["../../Storage/File.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAG5B,MAAa,IAAI;IAWF;IACA;IAXX,YAAY,CAAS;IACrB,KAAK,GAAG,KAAK,CAAA;IACb,IAAI,CAAS;IACb,YAAY,CAAO;IACnB,QAAQ,CAAS;IACjB,IAAI,CAAS;IACb,QAAQ,CAAyB;IACjC,UAAU,CAAa;IAEvB,YACW,GAAW,EACX,IAAa,EACpB,WAAkC,EAAE;QAF7B,QAAG,GAAH,GAAG,CAAQ;QACX,SAAI,GAAJ,IAAI,CAAS;QAGpB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,mBAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED,IAAI,SAAS;QACT,MAAM,SAAS,GAAG,mBAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;QACpE,OAAO,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IAC7C,CAAC;IAED,6EAA6E;IAC7E,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,GAAG,CAAA;IACnB,CAAC;IAED,IAAI,SAAS;QACT,MAAM,SAAS,GAAG,mBAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/C,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACrD,CAAC;IAED,cAAc;QACV,OAAO,IAAI,CAAC,SAAS,CAAA;IACzB,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,IAAI,CAAA;IACpB,CAAC;CACJ;AA5CD,oBA4CC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as fileSystem from 'node:fs/promises';
|
|
2
|
+
import { File } from './File';
|
|
3
|
+
/**
|
|
4
|
+
* Typetron's internal access to the host operating-system filesystem.
|
|
5
|
+
*
|
|
6
|
+
* Framework bootstrap uses this service before application storage configuration
|
|
7
|
+
* is available. It accepts real OS paths so Typetron can discover configuration,
|
|
8
|
+
* controllers, entities, migrations, seeders, static assets, and file-cache data.
|
|
9
|
+
* Application code should use `Storage` and its configured disks instead.
|
|
10
|
+
*
|
|
11
|
+
* This is deliberately separate from `LocalDriver`: a local storage disk is
|
|
12
|
+
* constrained to its configured root and works with portable logical keys,
|
|
13
|
+
* while this service works with framework-owned host paths.
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
export declare class Filesystem {
|
|
18
|
+
/**
|
|
19
|
+
* Lists files synchronously because framework modules are currently loaded
|
|
20
|
+
* synchronously during bootstrap. Application storage listings are async.
|
|
21
|
+
*/
|
|
22
|
+
files(directory: string, recursively?: boolean): File[];
|
|
23
|
+
read(filePath: string): Promise<Buffer>;
|
|
24
|
+
exists(filePath: string): Promise<boolean>;
|
|
25
|
+
save(file: File, destination: string, name?: string | number): Promise<File>;
|
|
26
|
+
put(filePath: string, content: string | Buffer, options?: Parameters<typeof fileSystem.writeFile>[2]): Promise<File>;
|
|
27
|
+
makeDirectory(directory: string): Promise<void>;
|
|
28
|
+
deleteDirectory(directory: string): Promise<void>;
|
|
29
|
+
delete(filePath: string): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=Filesystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Filesystem.d.ts","sourceRoot":"","sources":["../../Storage/Filesystem.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B;;;;;;;;;;;;;GAaG;AACH,qBAAa,UAAU;IACnB;;;OAGG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,IAAI,EAAE;IAc/C,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1C,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5E,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAShD"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.Filesystem = void 0;
|
|
40
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
41
|
+
const fileSystem = __importStar(require("node:fs/promises"));
|
|
42
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
43
|
+
const File_1 = require("./File");
|
|
44
|
+
/**
|
|
45
|
+
* Typetron's internal access to the host operating-system filesystem.
|
|
46
|
+
*
|
|
47
|
+
* Framework bootstrap uses this service before application storage configuration
|
|
48
|
+
* is available. It accepts real OS paths so Typetron can discover configuration,
|
|
49
|
+
* controllers, entities, migrations, seeders, static assets, and file-cache data.
|
|
50
|
+
* Application code should use `Storage` and its configured disks instead.
|
|
51
|
+
*
|
|
52
|
+
* This is deliberately separate from `LocalDriver`: a local storage disk is
|
|
53
|
+
* constrained to its configured root and works with portable logical keys,
|
|
54
|
+
* while this service works with framework-owned host paths.
|
|
55
|
+
*
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
58
|
+
class Filesystem {
|
|
59
|
+
/**
|
|
60
|
+
* Lists files synchronously because framework modules are currently loaded
|
|
61
|
+
* synchronously during bootstrap. Application storage listings are async.
|
|
62
|
+
*/
|
|
63
|
+
files(directory, recursively = false) {
|
|
64
|
+
return node_fs_1.default.readdirSync(directory).reduce((files, name) => {
|
|
65
|
+
const filePath = node_path_1.default.join(directory, name);
|
|
66
|
+
const stats = node_fs_1.default.statSync(filePath);
|
|
67
|
+
if (stats.isFile()) {
|
|
68
|
+
files.push(new File_1.File(filePath));
|
|
69
|
+
}
|
|
70
|
+
if (recursively && stats.isDirectory()) {
|
|
71
|
+
files.push(...this.files(filePath, true));
|
|
72
|
+
}
|
|
73
|
+
return files;
|
|
74
|
+
}, []);
|
|
75
|
+
}
|
|
76
|
+
async read(filePath) {
|
|
77
|
+
return fileSystem.readFile(filePath);
|
|
78
|
+
}
|
|
79
|
+
async exists(filePath) {
|
|
80
|
+
try {
|
|
81
|
+
await fileSystem.access(filePath);
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async save(file, destination, name) {
|
|
89
|
+
const stats = await fileSystem.stat(destination).catch(() => undefined);
|
|
90
|
+
const destinationPath = stats?.isDirectory()
|
|
91
|
+
? node_path_1.default.join(destination, String(name ?? file.name))
|
|
92
|
+
: destination;
|
|
93
|
+
await fileSystem.mkdir(node_path_1.default.dirname(destinationPath), { recursive: true });
|
|
94
|
+
await fileSystem.copyFile(file.path, destinationPath);
|
|
95
|
+
return new File_1.File(destinationPath);
|
|
96
|
+
}
|
|
97
|
+
async put(filePath, content, options) {
|
|
98
|
+
await fileSystem.mkdir(node_path_1.default.dirname(filePath), { recursive: true });
|
|
99
|
+
await fileSystem.writeFile(filePath, content, options);
|
|
100
|
+
return new File_1.File(filePath);
|
|
101
|
+
}
|
|
102
|
+
async makeDirectory(directory) {
|
|
103
|
+
await fileSystem.mkdir(directory, { recursive: true });
|
|
104
|
+
}
|
|
105
|
+
async deleteDirectory(directory) {
|
|
106
|
+
if (await this.exists(directory)) {
|
|
107
|
+
await fileSystem.rm(directory, { recursive: true });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async delete(filePath) {
|
|
111
|
+
if (!(await this.exists(filePath))) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if ((await fileSystem.stat(filePath)).isDirectory()) {
|
|
115
|
+
throw new Error('Can not delete because this path leads to a directory and not a file.');
|
|
116
|
+
}
|
|
117
|
+
await fileSystem.unlink(filePath);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
exports.Filesystem = Filesystem;
|
|
121
|
+
//# sourceMappingURL=Filesystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Filesystem.js","sourceRoot":"","sources":["../../Storage/Filesystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare class PathPrefixer {
|
|
2
|
+
private readonly prefixValue;
|
|
3
|
+
constructor(prefix?: string);
|
|
4
|
+
normalize(key: string, allowEmpty?: boolean): string;
|
|
5
|
+
prefix(key: string, allowEmpty?: boolean): string;
|
|
6
|
+
stripPrefix(key: string): string;
|
|
7
|
+
resolve(root: string, key: string): string;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=PathPrefixer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PathPrefixer.d.ts","sourceRoot":"","sources":["../../Storage/PathPrefixer.ts"],"names":[],"mappings":"AAGA,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;gBAExB,MAAM,SAAK;IAIvB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,UAAQ,GAAG,MAAM;IAalD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,UAAQ,GAAG,MAAM;IAK/C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAchC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;CAS7C"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PathPrefixer = void 0;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const errors_1 = require("./errors");
|
|
9
|
+
class PathPrefixer {
|
|
10
|
+
prefixValue;
|
|
11
|
+
constructor(prefix = '') {
|
|
12
|
+
this.prefixValue = this.normalize(prefix, true);
|
|
13
|
+
}
|
|
14
|
+
normalize(key, allowEmpty = false) {
|
|
15
|
+
if (key.includes('\0')) {
|
|
16
|
+
throw new errors_1.InvalidStorageKey(key);
|
|
17
|
+
}
|
|
18
|
+
const normalized = key.replaceAll('\\', '/').replace(/^\/+|\/+$/g, '').replace(/\/{2,}/g, '/');
|
|
19
|
+
const segments = normalized.split('/');
|
|
20
|
+
if (segments.includes('..') || (!allowEmpty && !normalized)) {
|
|
21
|
+
throw new errors_1.InvalidStorageKey(key);
|
|
22
|
+
}
|
|
23
|
+
return normalized;
|
|
24
|
+
}
|
|
25
|
+
prefix(key, allowEmpty = false) {
|
|
26
|
+
const normalized = this.normalize(key, allowEmpty);
|
|
27
|
+
return [this.prefixValue, normalized].filter(Boolean).join('/');
|
|
28
|
+
}
|
|
29
|
+
stripPrefix(key) {
|
|
30
|
+
const normalized = this.normalize(key, true);
|
|
31
|
+
if (!this.prefixValue) {
|
|
32
|
+
return normalized;
|
|
33
|
+
}
|
|
34
|
+
if (normalized === this.prefixValue) {
|
|
35
|
+
return '';
|
|
36
|
+
}
|
|
37
|
+
if (!normalized.startsWith(`${this.prefixValue}/`)) {
|
|
38
|
+
throw new errors_1.InvalidStorageKey(key);
|
|
39
|
+
}
|
|
40
|
+
return normalized.slice(this.prefixValue.length + 1);
|
|
41
|
+
}
|
|
42
|
+
resolve(root, key) {
|
|
43
|
+
const normalized = this.prefix(key);
|
|
44
|
+
const resolvedRoot = node_path_1.default.resolve(root);
|
|
45
|
+
const resolved = node_path_1.default.resolve(resolvedRoot, ...normalized.split('/'));
|
|
46
|
+
if (resolved !== resolvedRoot && !resolved.startsWith(`${resolvedRoot}${node_path_1.default.sep}`)) {
|
|
47
|
+
throw new errors_1.InvalidStorageKey(key);
|
|
48
|
+
}
|
|
49
|
+
return resolved;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.PathPrefixer = PathPrefixer;
|
|
53
|
+
//# sourceMappingURL=PathPrefixer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PathPrefixer.js","sourceRoot":"","sources":["../../Storage/PathPrefixer.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAC5B,qCAA4C;AAE5C,MAAa,YAAY;IACJ,WAAW,CAAQ;IAEpC,YAAY,MAAM,GAAG,EAAE;QACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACnD,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,UAAU,GAAG,KAAK;QACrC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,0BAAiB,CAAC,GAAG,CAAC,CAAA;QACpC,CAAC;QAED,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QAC9F,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,0BAAiB,CAAC,GAAG,CAAC,CAAA;QACpC,CAAC;QACD,OAAO,UAAU,CAAA;IACrB,CAAC;IAED,MAAM,CAAC,GAAW,EAAE,UAAU,GAAG,KAAK;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QAClD,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACnE,CAAC;IAED,WAAW,CAAC,GAAW;QACnB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,OAAO,UAAU,CAAA;QACrB,CAAC;QACD,IAAI,UAAU,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,OAAO,EAAE,CAAA;QACb,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,0BAAiB,CAAC,GAAG,CAAC,CAAA;QACpC,CAAC;QACD,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACxD,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,GAAW;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACnC,MAAM,YAAY,GAAG,mBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,QAAQ,GAAG,mBAAI,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QACrE,IAAI,QAAQ,KAAK,YAAY,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY,GAAG,mBAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,0BAAiB,CAAC,GAAG,CAAC,CAAA;QACpC,CAAC;QACD,OAAO,QAAQ,CAAA;IACnB,CAAC;CACJ;AAhDD,oCAgDC"}
|
|
@@ -1,13 +1,41 @@
|
|
|
1
|
+
import { Readable } from 'node:stream';
|
|
1
2
|
import { File } from './File';
|
|
3
|
+
import { StorageDisk } from './StorageDisk';
|
|
4
|
+
import { StorageDriver } from './StorageDriver';
|
|
5
|
+
import { UploadedFile } from './UploadedFile';
|
|
6
|
+
import { ListOptions, StorageConfiguration, StorageContent, StorageDiskConfig, TemporaryUrlOptions, Visibility, WriteOptions } from './types';
|
|
7
|
+
export type StorageDriverFactory = (config: StorageDiskConfig, name: string, storage: Storage) => StorageDriver;
|
|
2
8
|
export declare class Storage {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
readonly config: StorageConfiguration;
|
|
10
|
+
private readonly disks;
|
|
11
|
+
private readonly factories;
|
|
12
|
+
private readonly resolving;
|
|
13
|
+
constructor(config?: StorageConfiguration);
|
|
14
|
+
disk(name?: string): StorageDisk;
|
|
15
|
+
build(config: StorageDiskConfig, name?: string): StorageDisk;
|
|
16
|
+
extend(driver: string, factory: StorageDriverFactory): this;
|
|
17
|
+
set(name: string, disk: StorageDisk): this;
|
|
18
|
+
forget(name: string): this;
|
|
19
|
+
fake(name?: string): StorageDisk;
|
|
20
|
+
put(key: string, content: StorageContent, options?: WriteOptions): Promise<File>;
|
|
21
|
+
putFile(key: string, file: UploadedFile, options?: WriteOptions): Promise<File>;
|
|
22
|
+
read(key: string): Promise<Buffer>;
|
|
23
|
+
get(key: string): Promise<Buffer>;
|
|
24
|
+
readStream(key: string): Promise<Readable>;
|
|
25
|
+
json<T>(key: string): Promise<T>;
|
|
26
|
+
exists(key: string): Promise<boolean>;
|
|
27
|
+
missing(key: string): Promise<boolean>;
|
|
28
|
+
stat(key: string): Promise<File>;
|
|
29
|
+
list(prefix?: string, options?: ListOptions): AsyncIterable<import("./types").StorageEntry>;
|
|
30
|
+
files(prefix?: string, options?: ListOptions): Promise<File[]>;
|
|
31
|
+
directories(prefix?: string): Promise<string[]>;
|
|
32
|
+
delete(key: string): Promise<void>;
|
|
33
|
+
deleteDirectory(prefix: string): Promise<void>;
|
|
34
|
+
copy(source: string, destination: string): Promise<File>;
|
|
35
|
+
move(source: string, destination: string): Promise<File>;
|
|
36
|
+
visibility(key: string): Promise<Visibility>;
|
|
37
|
+
setVisibility(key: string, visibility: Visibility): Promise<void>;
|
|
38
|
+
url(key: string): string;
|
|
39
|
+
temporaryUrl(key: string, expiresInSeconds: number, options?: TemporaryUrlOptions): Promise<string>;
|
|
12
40
|
}
|
|
13
41
|
//# sourceMappingURL=Storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../../Storage/Storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../../Storage/Storage.ts"],"names":[],"mappings":"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"}
|
package/build/Storage/Storage.js
CHANGED
|
@@ -1,119 +1,103 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.Storage = void 0;
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
const
|
|
4
|
+
const LocalDriver_1 = require("./Drivers/LocalDriver");
|
|
5
|
+
const MemoryDriver_1 = require("./Drivers/MemoryDriver");
|
|
6
|
+
const ReadOnlyDriver_1 = require("./Drivers/ReadOnlyDriver");
|
|
7
|
+
const S3Driver_1 = require("./Drivers/S3Driver");
|
|
8
|
+
const ScopedDriver_1 = require("./Drivers/ScopedDriver");
|
|
9
|
+
const StorageDisk_1 = require("./StorageDisk");
|
|
10
|
+
const errors_1 = require("./errors");
|
|
11
|
+
const defaultConfiguration = {
|
|
12
|
+
default: 'local',
|
|
13
|
+
disks: { local: { driver: 'local', root: 'storage/app' } },
|
|
14
|
+
};
|
|
41
15
|
class Storage {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
async read(filePath) {
|
|
60
|
-
return fileSystem.readFile(filePath);
|
|
16
|
+
config;
|
|
17
|
+
disks = new Map();
|
|
18
|
+
factories = new Map();
|
|
19
|
+
resolving = new Set();
|
|
20
|
+
constructor(config = defaultConfiguration) {
|
|
21
|
+
this.config = config;
|
|
22
|
+
this.extend('local', config => new LocalDriver_1.LocalDriver(config));
|
|
23
|
+
this.extend('memory', config => new MemoryDriver_1.MemoryDriver(config));
|
|
24
|
+
this.extend('s3', config => new S3Driver_1.S3Driver(config));
|
|
25
|
+
this.extend('scoped', config => {
|
|
26
|
+
const scoped = config;
|
|
27
|
+
return new ScopedDriver_1.ScopedDriver(this.disk(scoped.disk).driver(), scoped.prefix);
|
|
28
|
+
});
|
|
29
|
+
this.extend('read-only', config => {
|
|
30
|
+
const readOnly = config;
|
|
31
|
+
return new ReadOnlyDriver_1.ReadOnlyDriver(this.disk(readOnly.disk).driver());
|
|
32
|
+
});
|
|
61
33
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
return
|
|
34
|
+
disk(name = this.config.default) {
|
|
35
|
+
const cached = this.disks.get(name);
|
|
36
|
+
if (cached) {
|
|
37
|
+
return cached;
|
|
66
38
|
}
|
|
67
|
-
|
|
68
|
-
|
|
39
|
+
const config = this.config.disks[name];
|
|
40
|
+
if (!config) {
|
|
41
|
+
throw new errors_1.StorageDiskNotFound(name);
|
|
69
42
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const newPath = path.join(directory, file.name);
|
|
73
|
-
if (!file.name) {
|
|
74
|
-
file.name = String(name || this.generateRandomFileName() + '.' + file.extension);
|
|
43
|
+
if (this.resolving.has(name)) {
|
|
44
|
+
throw new Error(`Circular storage disk configuration detected at '${name}'.`);
|
|
75
45
|
}
|
|
76
|
-
|
|
77
|
-
|
|
46
|
+
this.resolving.add(name);
|
|
47
|
+
try {
|
|
48
|
+
const disk = this.build(config, name);
|
|
49
|
+
this.disks.set(name, disk);
|
|
50
|
+
return disk;
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
this.resolving.delete(name);
|
|
78
54
|
}
|
|
79
|
-
return new Promise(async (resolve, reject) => {
|
|
80
|
-
fileSystemDeprecated
|
|
81
|
-
.createReadStream(file.path)
|
|
82
|
-
.on('error', reject)
|
|
83
|
-
.pipe(fileSystemDeprecated.createWriteStream(newPath))
|
|
84
|
-
.on('finish', () => resolve(file))
|
|
85
|
-
.on('error', reject);
|
|
86
|
-
});
|
|
87
55
|
}
|
|
88
|
-
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
await this.makeDirectory(file.directory);
|
|
56
|
+
build(config, name = 'ondemand') {
|
|
57
|
+
const factory = this.factories.get(config.driver);
|
|
58
|
+
if (!factory) {
|
|
59
|
+
throw new errors_1.StorageDriverNotSupported(config.driver);
|
|
93
60
|
}
|
|
94
|
-
|
|
95
|
-
return file;
|
|
61
|
+
return new StorageDisk_1.StorageDisk(name, factory(config, name, this));
|
|
96
62
|
}
|
|
97
|
-
|
|
98
|
-
|
|
63
|
+
extend(driver, factory) {
|
|
64
|
+
this.factories.set(driver, factory);
|
|
65
|
+
return this;
|
|
99
66
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
67
|
+
set(name, disk) {
|
|
68
|
+
this.disks.set(name, disk);
|
|
69
|
+
return this;
|
|
104
70
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
71
|
+
forget(name) {
|
|
72
|
+
this.disks.delete(name);
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
fake(name = this.config.default) {
|
|
76
|
+
const disk = new StorageDisk_1.StorageDisk(name, new MemoryDriver_1.MemoryDriver({ driver: 'memory' }));
|
|
77
|
+
this.set(name, disk);
|
|
78
|
+
return disk;
|
|
113
79
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
80
|
+
put(key, content, options) { return this.disk().put(key, content, options); }
|
|
81
|
+
putFile(key, file, options) { return this.disk().putFile(key, file, options); }
|
|
82
|
+
read(key) { return this.disk().read(key); }
|
|
83
|
+
get(key) { return this.disk().get(key); }
|
|
84
|
+
readStream(key) { return this.disk().readStream(key); }
|
|
85
|
+
json(key) { return this.disk().json(key); }
|
|
86
|
+
exists(key) { return this.disk().exists(key); }
|
|
87
|
+
missing(key) { return this.disk().missing(key); }
|
|
88
|
+
stat(key) { return this.disk().stat(key); }
|
|
89
|
+
list(prefix = '', options) { return this.disk().list(prefix, options); }
|
|
90
|
+
files(prefix = '', options) { return this.disk().files(prefix, options); }
|
|
91
|
+
directories(prefix = '') { return this.disk().directories(prefix); }
|
|
92
|
+
delete(key) { return this.disk().delete(key); }
|
|
93
|
+
deleteDirectory(prefix) { return this.disk().deleteDirectory(prefix); }
|
|
94
|
+
copy(source, destination) { return this.disk().copy(source, destination); }
|
|
95
|
+
move(source, destination) { return this.disk().move(source, destination); }
|
|
96
|
+
visibility(key) { return this.disk().visibility(key); }
|
|
97
|
+
setVisibility(key, visibility) { return this.disk().setVisibility(key, visibility); }
|
|
98
|
+
url(key) { return this.disk().url(key); }
|
|
99
|
+
temporaryUrl(key, expiresInSeconds, options) {
|
|
100
|
+
return this.disk().temporaryUrl(key, expiresInSeconds, options);
|
|
117
101
|
}
|
|
118
102
|
}
|
|
119
103
|
exports.Storage = Storage;
|