@arikajs/storage 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +247 -0
  3. package/dist/Contracts/Filesystem.d.ts +48 -0
  4. package/dist/Contracts/Filesystem.d.ts.map +1 -0
  5. package/dist/Contracts/Filesystem.js +3 -0
  6. package/dist/Contracts/Filesystem.js.map +1 -0
  7. package/dist/Disk.d.ts +60 -0
  8. package/dist/Disk.d.ts.map +1 -0
  9. package/dist/Disk.js +119 -0
  10. package/dist/Disk.js.map +1 -0
  11. package/dist/Drivers/LocalDriver.d.ts +65 -0
  12. package/dist/Drivers/LocalDriver.d.ts.map +1 -0
  13. package/dist/Drivers/LocalDriver.js +156 -0
  14. package/dist/Drivers/LocalDriver.js.map +1 -0
  15. package/dist/Drivers/S3Driver.d.ts +67 -0
  16. package/dist/Drivers/S3Driver.d.ts.map +1 -0
  17. package/dist/Drivers/S3Driver.js +218 -0
  18. package/dist/Drivers/S3Driver.js.map +1 -0
  19. package/dist/Exceptions/FileNotFoundException.d.ts +4 -0
  20. package/dist/Exceptions/FileNotFoundException.d.ts.map +1 -0
  21. package/dist/Exceptions/FileNotFoundException.js +11 -0
  22. package/dist/Exceptions/FileNotFoundException.js.map +1 -0
  23. package/dist/StorageManager.d.ts +33 -0
  24. package/dist/StorageManager.d.ts.map +1 -0
  25. package/dist/StorageManager.js +87 -0
  26. package/dist/StorageManager.js.map +1 -0
  27. package/dist/index.d.ts +9 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +37 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/src/Contracts/Filesystem.d.ts +48 -0
  32. package/dist/src/Contracts/Filesystem.d.ts.map +1 -0
  33. package/dist/src/Contracts/Filesystem.js +3 -0
  34. package/dist/src/Contracts/Filesystem.js.map +1 -0
  35. package/dist/src/Disk.d.ts +60 -0
  36. package/dist/src/Disk.d.ts.map +1 -0
  37. package/dist/src/Disk.js +119 -0
  38. package/dist/src/Disk.js.map +1 -0
  39. package/dist/src/Drivers/LocalDriver.d.ts +65 -0
  40. package/dist/src/Drivers/LocalDriver.d.ts.map +1 -0
  41. package/dist/src/Drivers/LocalDriver.js +156 -0
  42. package/dist/src/Drivers/LocalDriver.js.map +1 -0
  43. package/dist/src/Drivers/S3Driver.d.ts +67 -0
  44. package/dist/src/Drivers/S3Driver.d.ts.map +1 -0
  45. package/dist/src/Drivers/S3Driver.js +218 -0
  46. package/dist/src/Drivers/S3Driver.js.map +1 -0
  47. package/dist/src/Exceptions/FileNotFoundException.d.ts +4 -0
  48. package/dist/src/Exceptions/FileNotFoundException.d.ts.map +1 -0
  49. package/dist/src/Exceptions/FileNotFoundException.js +11 -0
  50. package/dist/src/Exceptions/FileNotFoundException.js.map +1 -0
  51. package/dist/src/StorageManager.d.ts +33 -0
  52. package/dist/src/StorageManager.d.ts.map +1 -0
  53. package/dist/src/StorageManager.js +87 -0
  54. package/dist/src/StorageManager.js.map +1 -0
  55. package/dist/src/index.d.ts +9 -0
  56. package/dist/src/index.d.ts.map +1 -0
  57. package/dist/src/index.js +37 -0
  58. package/dist/src/index.js.map +1 -0
  59. package/dist/tests/AdvancedStorage.test.d.ts +2 -0
  60. package/dist/tests/AdvancedStorage.test.d.ts.map +1 -0
  61. package/dist/tests/AdvancedStorage.test.js +121 -0
  62. package/dist/tests/AdvancedStorage.test.js.map +1 -0
  63. package/dist/tests/Storage.test.d.ts +2 -0
  64. package/dist/tests/Storage.test.d.ts.map +1 -0
  65. package/dist/tests/Storage.test.js +121 -0
  66. package/dist/tests/Storage.test.js.map +1 -0
  67. package/package.json +52 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,yCAAuB;AACvB,yDAAuC;AACvC,wDAAsC;AACtC,qDAAmC;AACnC,qEAAmD;AAEnD,4EAA4E;AAC5E,qDAAkD;AAElD,6CAA6C;AAC7C,MAAM,aAAa,GAAG;IAClB,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE;QACH,KAAK,EAAE;YACH,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,eAAe;SACxB;KACJ;CACJ,CAAC;AAEW,QAAA,OAAO,GAAG,IAAI,+BAAc,CAAC,aAAa,CAAC,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { Readable } from 'stream';
2
+ export interface Filesystem {
3
+ /**
4
+ * Write contents to a file.
5
+ */
6
+ put(path: string, contents: string | Buffer): Promise<void>;
7
+ /**
8
+ * Write a stream to a file.
9
+ */
10
+ putStream(path: string, stream: Readable): Promise<void>;
11
+ /**
12
+ * Read file contents.
13
+ */
14
+ get(path: string): Promise<Buffer>;
15
+ /**
16
+ * Read file as a stream.
17
+ */
18
+ readStream(path: string): Readable;
19
+ /**
20
+ * Check if a file exists.
21
+ */
22
+ exists(path: string): Promise<boolean>;
23
+ /**
24
+ * Delete a file.
25
+ */
26
+ delete(path: string): Promise<void>;
27
+ /**
28
+ * Get the URL for a file.
29
+ */
30
+ url(path: string): string;
31
+ /**
32
+ * Get a temporary URL for a file.
33
+ */
34
+ temporaryUrl(path: string, expiresAt: Date): Promise<string>;
35
+ /**
36
+ * Get the file size in bytes.
37
+ */
38
+ size(path: string): Promise<number>;
39
+ /**
40
+ * Get the last modified time of the file.
41
+ */
42
+ lastModified(path: string): Promise<number>;
43
+ /**
44
+ * Get the mime type of the file.
45
+ */
46
+ mimeType(path: string): Promise<string>;
47
+ }
48
+ //# sourceMappingURL=Filesystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Filesystem.d.ts","sourceRoot":"","sources":["../../../src/Contracts/Filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAY,MAAM,QAAQ,CAAC;AAE5C,MAAM,WAAW,UAAU;IACvB;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IAEnC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAE1B;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7D;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5C;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3C"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Filesystem.js","sourceRoot":"","sources":["../../../src/Contracts/Filesystem.ts"],"names":[],"mappings":""}
@@ -0,0 +1,60 @@
1
+ import { Readable } from 'stream';
2
+ import { Filesystem } from './Contracts/Filesystem';
3
+ export declare class Disk {
4
+ private driver;
5
+ private middlewares;
6
+ constructor(driver: Filesystem);
7
+ /**
8
+ * Register middleware for this disk.
9
+ */
10
+ middleware(middleware: any): this;
11
+ /**
12
+ * Create a pipeline for an operation.
13
+ */
14
+ protected runPipeline(operation: string, params: any, callback: (params: any) => Promise<any>): Promise<any>;
15
+ /**
16
+ * Write contents to a file.
17
+ */
18
+ put(path: string, contents: string | Buffer): Promise<void>;
19
+ /**
20
+ * Write a stream to a file.
21
+ */
22
+ putStream(path: string, stream: Readable): Promise<void>;
23
+ /**
24
+ * Read file contents.
25
+ */
26
+ get(path: string): Promise<Buffer>;
27
+ /**
28
+ * Read file as a stream.
29
+ */
30
+ readStream(path: string): Readable;
31
+ /**
32
+ * Check if a file exists.
33
+ */
34
+ exists(path: string): Promise<boolean>;
35
+ /**
36
+ * Delete a file.
37
+ */
38
+ delete(path: string): Promise<void>;
39
+ /**
40
+ * Get the URL for a file.
41
+ */
42
+ url(path: string): string;
43
+ /**
44
+ * Get a temporary URL for a file.
45
+ */
46
+ temporaryUrl(path: string, expiresAt: Date): Promise<string>;
47
+ /**
48
+ * Get the file size in bytes.
49
+ */
50
+ size(path: string): Promise<number>;
51
+ /**
52
+ * Get the last modified time of the file.
53
+ */
54
+ lastModified(path: string): Promise<number>;
55
+ /**
56
+ * Get the mime type of the file.
57
+ */
58
+ mimeType(path: string): Promise<string>;
59
+ }
60
+ //# sourceMappingURL=Disk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Disk.d.ts","sourceRoot":"","sources":["../../src/Disk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,qBAAa,IAAI;IACb,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAa;gBAEpB,MAAM,EAAE,UAAU;IAI9B;;OAEG;IACI,UAAU,CAAC,UAAU,EAAE,GAAG,GAAG,IAAI;IAKxC;;OAEG;cACa,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAYlH;;OAEG;IACU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxE;;OAEG;IACU,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrE;;OAEG;IACU,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM/C;;OAEG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAOzC;;OAEG;IACU,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMnD;;OAEG;IACU,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhD;;OAEG;IACI,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhC;;OAEG;IACU,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAMzE;;OAEG;IACU,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMhD;;OAEG;IACU,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMxD;;OAEG;IACU,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAKvD"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Disk = void 0;
4
+ const middleware_1 = require("@arikajs/middleware");
5
+ class Disk {
6
+ constructor(driver) {
7
+ this.middlewares = [];
8
+ this.driver = driver;
9
+ }
10
+ /**
11
+ * Register middleware for this disk.
12
+ */
13
+ middleware(middleware) {
14
+ this.middlewares.push(middleware);
15
+ return this;
16
+ }
17
+ /**
18
+ * Create a pipeline for an operation.
19
+ */
20
+ async runPipeline(operation, params, callback) {
21
+ if (this.middlewares.length === 0) {
22
+ return await callback(params);
23
+ }
24
+ return await new middleware_1.Pipeline()
25
+ .pipe(this.middlewares)
26
+ .handle({ operation, ...params }, async (data) => {
27
+ return await callback(data);
28
+ });
29
+ }
30
+ /**
31
+ * Write contents to a file.
32
+ */
33
+ async put(path, contents) {
34
+ return await this.runPipeline('put', { path, contents }, async (data) => {
35
+ return await this.driver.put(data.path, data.contents);
36
+ });
37
+ }
38
+ /**
39
+ * Write a stream to a file.
40
+ */
41
+ async putStream(path, stream) {
42
+ return await this.runPipeline('putStream', { path, stream }, async (data) => {
43
+ return await this.driver.putStream(data.path, data.stream);
44
+ });
45
+ }
46
+ /**
47
+ * Read file contents.
48
+ */
49
+ async get(path) {
50
+ return await this.runPipeline('get', { path }, async (data) => {
51
+ return await this.driver.get(data.path);
52
+ });
53
+ }
54
+ /**
55
+ * Read file as a stream.
56
+ */
57
+ readStream(path) {
58
+ // Note: readStream is tricky with async middleware.
59
+ // For now, we return the driver stream directly or
60
+ // we'd need a more complex implementation for streaming middleware.
61
+ return this.driver.readStream(path);
62
+ }
63
+ /**
64
+ * Check if a file exists.
65
+ */
66
+ async exists(path) {
67
+ return await this.runPipeline('exists', { path }, async (data) => {
68
+ return await this.driver.exists(data.path);
69
+ });
70
+ }
71
+ /**
72
+ * Delete a file.
73
+ */
74
+ async delete(path) {
75
+ return await this.runPipeline('delete', { path }, async (data) => {
76
+ return await this.driver.delete(data.path);
77
+ });
78
+ }
79
+ /**
80
+ * Get the URL for a file.
81
+ */
82
+ url(path) {
83
+ return this.driver.url(path);
84
+ }
85
+ /**
86
+ * Get a temporary URL for a file.
87
+ */
88
+ async temporaryUrl(path, expiresAt) {
89
+ return await this.runPipeline('temporaryUrl', { path, expiresAt }, async (data) => {
90
+ return await this.driver.temporaryUrl(data.path, data.expiresAt);
91
+ });
92
+ }
93
+ /**
94
+ * Get the file size in bytes.
95
+ */
96
+ async size(path) {
97
+ return await this.runPipeline('size', { path }, async (data) => {
98
+ return await this.driver.size(data.path);
99
+ });
100
+ }
101
+ /**
102
+ * Get the last modified time of the file.
103
+ */
104
+ async lastModified(path) {
105
+ return await this.runPipeline('lastModified', { path }, async (data) => {
106
+ return await this.driver.lastModified(data.path);
107
+ });
108
+ }
109
+ /**
110
+ * Get the mime type of the file.
111
+ */
112
+ async mimeType(path) {
113
+ return await this.runPipeline('mimeType', { path }, async (data) => {
114
+ return await this.driver.mimeType(data.path);
115
+ });
116
+ }
117
+ }
118
+ exports.Disk = Disk;
119
+ //# sourceMappingURL=Disk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Disk.js","sourceRoot":"","sources":["../../src/Disk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { Readable } from 'stream';
2
+ import { Filesystem } from '../Contracts/Filesystem';
3
+ export declare class LocalDriver implements Filesystem {
4
+ private root;
5
+ private urlPrefix;
6
+ constructor(config: {
7
+ root: string;
8
+ url?: string;
9
+ });
10
+ /**
11
+ * Get the full path for a file.
12
+ */
13
+ private getFullPath;
14
+ /**
15
+ * Ensure directory exists.
16
+ */
17
+ private ensureDirectory;
18
+ /**
19
+ * Write contents to a file.
20
+ */
21
+ put(filePath: string, contents: string | Buffer): Promise<void>;
22
+ /**
23
+ * Write a stream to a file.
24
+ */
25
+ putStream(filePath: string, stream: Readable): Promise<void>;
26
+ /**
27
+ * Read file contents.
28
+ */
29
+ get(filePath: string): Promise<Buffer>;
30
+ /**
31
+ * Read file as a stream.
32
+ */
33
+ readStream(filePath: string): Readable;
34
+ /**
35
+ * Check if a file exists.
36
+ */
37
+ exists(filePath: string): Promise<boolean>;
38
+ /**
39
+ * Delete a file.
40
+ */
41
+ delete(filePath: string): Promise<void>;
42
+ /**
43
+ * Get the URL for a file.
44
+ */
45
+ url(filePath: string): string;
46
+ /**
47
+ * Get a temporary URL for a file.
48
+ * Note: For local driver, this just returns the normal URL as local files don't support signing by default
49
+ * without a custom server implementation.
50
+ */
51
+ temporaryUrl(filePath: string, expiresAt: Date): Promise<string>;
52
+ /**
53
+ * Get the file size in bytes.
54
+ */
55
+ size(filePath: string): Promise<number>;
56
+ /**
57
+ * Get the last modified time of the file.
58
+ */
59
+ lastModified(filePath: string): Promise<number>;
60
+ /**
61
+ * Get the mime type of the file.
62
+ */
63
+ mimeType(filePath: string): Promise<string>;
64
+ }
65
+ //# sourceMappingURL=LocalDriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalDriver.d.ts","sourceRoot":"","sources":["../../../src/Drivers/LocalDriver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,qBAAa,WAAY,YAAW,UAAU;IAC1C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE;IAKlD;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;YACW,eAAe;IAK7B;;OAEG;IACU,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5E;;OAEG;IACU,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzE;;OAEG;IACU,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUnD;;OAEG;IACI,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ;IAK7C;;OAEG;IACU,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWvD;;OAEG;IACU,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpD;;OAEG;IACI,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQpC;;;;OAIG;IACU,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7E;;OAEG;IACU,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKpD;;OAEG;IACU,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK5D;;OAEG;IACU,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAG3D"}
@@ -0,0 +1,156 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.LocalDriver = void 0;
37
+ const fs = __importStar(require("fs/promises"));
38
+ const fs_1 = require("fs");
39
+ const path = __importStar(require("path"));
40
+ const promises_1 = require("stream/promises");
41
+ const mime = __importStar(require("mime-types"));
42
+ const FileNotFoundException_1 = require("../Exceptions/FileNotFoundException");
43
+ class LocalDriver {
44
+ constructor(config) {
45
+ this.root = path.resolve(config.root);
46
+ this.urlPrefix = config.url || '';
47
+ }
48
+ /**
49
+ * Get the full path for a file.
50
+ */
51
+ getFullPath(filePath) {
52
+ return path.join(this.root, filePath);
53
+ }
54
+ /**
55
+ * Ensure directory exists.
56
+ */
57
+ async ensureDirectory(filePath) {
58
+ const dir = path.dirname(filePath);
59
+ await fs.mkdir(dir, { recursive: true });
60
+ }
61
+ /**
62
+ * Write contents to a file.
63
+ */
64
+ async put(filePath, contents) {
65
+ const fullPath = this.getFullPath(filePath);
66
+ await this.ensureDirectory(fullPath);
67
+ await fs.writeFile(fullPath, contents);
68
+ }
69
+ /**
70
+ * Write a stream to a file.
71
+ */
72
+ async putStream(filePath, stream) {
73
+ const fullPath = this.getFullPath(filePath);
74
+ await this.ensureDirectory(fullPath);
75
+ const writeStream = (0, fs_1.createWriteStream)(fullPath);
76
+ await (0, promises_1.pipeline)(stream, writeStream);
77
+ }
78
+ /**
79
+ * Read file contents.
80
+ */
81
+ async get(filePath) {
82
+ const fullPath = this.getFullPath(filePath);
83
+ if (!(await this.exists(filePath))) {
84
+ throw new FileNotFoundException_1.FileNotFoundException(filePath);
85
+ }
86
+ return await fs.readFile(fullPath);
87
+ }
88
+ /**
89
+ * Read file as a stream.
90
+ */
91
+ readStream(filePath) {
92
+ const fullPath = this.getFullPath(filePath);
93
+ return (0, fs_1.createReadStream)(fullPath);
94
+ }
95
+ /**
96
+ * Check if a file exists.
97
+ */
98
+ async exists(filePath) {
99
+ const fullPath = this.getFullPath(filePath);
100
+ try {
101
+ await fs.access(fullPath);
102
+ return true;
103
+ }
104
+ catch {
105
+ return false;
106
+ }
107
+ }
108
+ /**
109
+ * Delete a file.
110
+ */
111
+ async delete(filePath) {
112
+ const fullPath = this.getFullPath(filePath);
113
+ if (await this.exists(filePath)) {
114
+ await fs.unlink(fullPath);
115
+ }
116
+ }
117
+ /**
118
+ * Get the URL for a file.
119
+ */
120
+ url(filePath) {
121
+ if (!this.urlPrefix) {
122
+ return filePath;
123
+ }
124
+ return `${this.urlPrefix}/${filePath}`.replace(/\/+/g, '/').replace(':/', '://');
125
+ }
126
+ /**
127
+ * Get a temporary URL for a file.
128
+ * Note: For local driver, this just returns the normal URL as local files don't support signing by default
129
+ * without a custom server implementation.
130
+ */
131
+ async temporaryUrl(filePath, expiresAt) {
132
+ return this.url(filePath);
133
+ }
134
+ /**
135
+ * Get the file size in bytes.
136
+ */
137
+ async size(filePath) {
138
+ const stats = await fs.stat(this.getFullPath(filePath));
139
+ return stats.size;
140
+ }
141
+ /**
142
+ * Get the last modified time of the file.
143
+ */
144
+ async lastModified(filePath) {
145
+ const stats = await fs.stat(this.getFullPath(filePath));
146
+ return stats.mtimeMs;
147
+ }
148
+ /**
149
+ * Get the mime type of the file.
150
+ */
151
+ async mimeType(filePath) {
152
+ return mime.lookup(filePath) || 'application/octet-stream';
153
+ }
154
+ }
155
+ exports.LocalDriver = LocalDriver;
156
+ //# sourceMappingURL=LocalDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalDriver.js","sourceRoot":"","sources":["../../../src/Drivers/LocalDriver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { Filesystem } from '../Contracts/Filesystem';
2
+ import { S3Client } from '@aws-sdk/client-s3';
3
+ import { Readable } from 'stream';
4
+ export declare class S3Driver implements Filesystem {
5
+ protected client: S3Client;
6
+ protected bucket: string;
7
+ protected region: string;
8
+ protected urlEndpoint?: string;
9
+ constructor(config: {
10
+ key: string;
11
+ secret: string;
12
+ region: string;
13
+ bucket: string;
14
+ endpoint?: string;
15
+ url?: string;
16
+ forcePathStyle?: boolean;
17
+ });
18
+ /**
19
+ * Write contents to a file.
20
+ */
21
+ put(path: string, contents: string | Buffer): Promise<void>;
22
+ /**
23
+ * Write a stream to a file.
24
+ */
25
+ putStream(path: string, stream: Readable): Promise<void>;
26
+ /**
27
+ * Read file contents.
28
+ */
29
+ get(path: string): Promise<Buffer>;
30
+ /**
31
+ * Read file as a stream.
32
+ */
33
+ readStream(path: string): Readable;
34
+ /**
35
+ * Check if a file exists.
36
+ */
37
+ exists(path: string): Promise<boolean>;
38
+ /**
39
+ * Delete a file.
40
+ */
41
+ delete(path: string): Promise<void>;
42
+ /**
43
+ * Get the URL for a file.
44
+ */
45
+ url(path: string): string;
46
+ /**
47
+ * Get a temporary URL for a file.
48
+ */
49
+ temporaryUrl(path: string, expiresAt: Date): Promise<string>;
50
+ /**
51
+ * Get the file size in bytes.
52
+ */
53
+ size(path: string): Promise<number>;
54
+ /**
55
+ * Get the last modified time of the file.
56
+ */
57
+ lastModified(path: string): Promise<number>;
58
+ /**
59
+ * Get the mime type of the file.
60
+ */
61
+ mimeType(path: string): Promise<string>;
62
+ /**
63
+ * Helper to convert stream to buffer.
64
+ */
65
+ private streamToBuffer;
66
+ }
67
+ //# sourceMappingURL=S3Driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S3Driver.d.ts","sourceRoot":"","sources":["../../../src/Drivers/S3Driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EACH,QAAQ,EAMX,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,qBAAa,QAAS,YAAW,UAAU;IACvC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC3B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;gBAEnB,MAAM,EAAE;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,cAAc,CAAC,EAAE,OAAO,CAAC;KAC5B;IAiBD;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjE;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAa9D;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBxC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IA2BlC;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB5C;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASzC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOzB;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAWlE;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUzC;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUjD;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAU7C;;OAEG;YACW,cAAc;CAQ/B"}