@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.
- package/LICENSE +21 -0
- package/README.md +247 -0
- package/dist/Contracts/Filesystem.d.ts +48 -0
- package/dist/Contracts/Filesystem.d.ts.map +1 -0
- package/dist/Contracts/Filesystem.js +3 -0
- package/dist/Contracts/Filesystem.js.map +1 -0
- package/dist/Disk.d.ts +60 -0
- package/dist/Disk.d.ts.map +1 -0
- package/dist/Disk.js +119 -0
- package/dist/Disk.js.map +1 -0
- package/dist/Drivers/LocalDriver.d.ts +65 -0
- package/dist/Drivers/LocalDriver.d.ts.map +1 -0
- package/dist/Drivers/LocalDriver.js +156 -0
- package/dist/Drivers/LocalDriver.js.map +1 -0
- package/dist/Drivers/S3Driver.d.ts +67 -0
- package/dist/Drivers/S3Driver.d.ts.map +1 -0
- package/dist/Drivers/S3Driver.js +218 -0
- package/dist/Drivers/S3Driver.js.map +1 -0
- package/dist/Exceptions/FileNotFoundException.d.ts +4 -0
- package/dist/Exceptions/FileNotFoundException.d.ts.map +1 -0
- package/dist/Exceptions/FileNotFoundException.js +11 -0
- package/dist/Exceptions/FileNotFoundException.js.map +1 -0
- package/dist/StorageManager.d.ts +33 -0
- package/dist/StorageManager.d.ts.map +1 -0
- package/dist/StorageManager.js +87 -0
- package/dist/StorageManager.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/src/Contracts/Filesystem.d.ts +48 -0
- package/dist/src/Contracts/Filesystem.d.ts.map +1 -0
- package/dist/src/Contracts/Filesystem.js +3 -0
- package/dist/src/Contracts/Filesystem.js.map +1 -0
- package/dist/src/Disk.d.ts +60 -0
- package/dist/src/Disk.d.ts.map +1 -0
- package/dist/src/Disk.js +119 -0
- package/dist/src/Disk.js.map +1 -0
- package/dist/src/Drivers/LocalDriver.d.ts +65 -0
- package/dist/src/Drivers/LocalDriver.d.ts.map +1 -0
- package/dist/src/Drivers/LocalDriver.js +156 -0
- package/dist/src/Drivers/LocalDriver.js.map +1 -0
- package/dist/src/Drivers/S3Driver.d.ts +67 -0
- package/dist/src/Drivers/S3Driver.d.ts.map +1 -0
- package/dist/src/Drivers/S3Driver.js +218 -0
- package/dist/src/Drivers/S3Driver.js.map +1 -0
- package/dist/src/Exceptions/FileNotFoundException.d.ts +4 -0
- package/dist/src/Exceptions/FileNotFoundException.d.ts.map +1 -0
- package/dist/src/Exceptions/FileNotFoundException.js +11 -0
- package/dist/src/Exceptions/FileNotFoundException.js.map +1 -0
- package/dist/src/StorageManager.d.ts +33 -0
- package/dist/src/StorageManager.d.ts.map +1 -0
- package/dist/src/StorageManager.js +87 -0
- package/dist/src/StorageManager.js.map +1 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +37 -0
- package/dist/src/index.js.map +1 -0
- package/dist/tests/AdvancedStorage.test.d.ts +2 -0
- package/dist/tests/AdvancedStorage.test.d.ts.map +1 -0
- package/dist/tests/AdvancedStorage.test.js +121 -0
- package/dist/tests/AdvancedStorage.test.js.map +1 -0
- package/dist/tests/Storage.test.d.ts +2 -0
- package/dist/tests/Storage.test.d.ts.map +1 -0
- package/dist/tests/Storage.test.js +121 -0
- package/dist/tests/Storage.test.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,218 @@
|
|
|
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.S3Driver = void 0;
|
|
37
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
38
|
+
const s3_request_presigner_1 = require("@aws-sdk/s3-request-presigner");
|
|
39
|
+
const mime = __importStar(require("mime-types"));
|
|
40
|
+
class S3Driver {
|
|
41
|
+
constructor(config) {
|
|
42
|
+
const s3Config = {
|
|
43
|
+
region: config.region,
|
|
44
|
+
credentials: {
|
|
45
|
+
accessKeyId: config.key,
|
|
46
|
+
secretAccessKey: config.secret,
|
|
47
|
+
},
|
|
48
|
+
endpoint: config.endpoint,
|
|
49
|
+
forcePathStyle: config.forcePathStyle,
|
|
50
|
+
};
|
|
51
|
+
this.client = new client_s3_1.S3Client(s3Config);
|
|
52
|
+
this.bucket = config.bucket;
|
|
53
|
+
this.region = config.region;
|
|
54
|
+
this.urlEndpoint = config.url;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Write contents to a file.
|
|
58
|
+
*/
|
|
59
|
+
async put(path, contents) {
|
|
60
|
+
const command = new client_s3_1.PutObjectCommand({
|
|
61
|
+
Bucket: this.bucket,
|
|
62
|
+
Key: path,
|
|
63
|
+
Body: contents,
|
|
64
|
+
ContentType: mime.lookup(path) || 'application/octet-stream'
|
|
65
|
+
});
|
|
66
|
+
await this.client.send(command);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Write a stream to a file.
|
|
70
|
+
*/
|
|
71
|
+
async putStream(path, stream) {
|
|
72
|
+
// Note: For large streams, you might want to use Upload from @aws-sdk/lib-storage
|
|
73
|
+
// but for basic implementation, this works.
|
|
74
|
+
const command = new client_s3_1.PutObjectCommand({
|
|
75
|
+
Bucket: this.bucket,
|
|
76
|
+
Key: path,
|
|
77
|
+
Body: stream,
|
|
78
|
+
ContentType: mime.lookup(path) || 'application/octet-stream'
|
|
79
|
+
});
|
|
80
|
+
await this.client.send(command);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Read file contents.
|
|
84
|
+
*/
|
|
85
|
+
async get(path) {
|
|
86
|
+
const command = new client_s3_1.GetObjectCommand({
|
|
87
|
+
Bucket: this.bucket,
|
|
88
|
+
Key: path,
|
|
89
|
+
});
|
|
90
|
+
const response = await this.client.send(command);
|
|
91
|
+
if (!response.Body) {
|
|
92
|
+
throw new Error(`File not found: ${path}`);
|
|
93
|
+
}
|
|
94
|
+
// Convert stream to buffer
|
|
95
|
+
return this.streamToBuffer(response.Body);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Read file as a stream.
|
|
99
|
+
*/
|
|
100
|
+
readStream(path) {
|
|
101
|
+
// We use a custom stream that fetches from S3 on demand
|
|
102
|
+
// Alternatively, we can use a pass-through stream but it's more complex.
|
|
103
|
+
// For simplicity, we return the S3 body which is a Readable.
|
|
104
|
+
// However, this needs to be an async call in some contexts.
|
|
105
|
+
// A better way is to provide a method that returns a Promise of a Readable.
|
|
106
|
+
// But to match the interface sync signature:
|
|
107
|
+
const { Readable } = require('stream');
|
|
108
|
+
const passThrough = new Readable({
|
|
109
|
+
read() { }
|
|
110
|
+
});
|
|
111
|
+
this.client.send(new client_s3_1.GetObjectCommand({
|
|
112
|
+
Bucket: this.bucket,
|
|
113
|
+
Key: path
|
|
114
|
+
})).then(response => {
|
|
115
|
+
if (response.Body) {
|
|
116
|
+
response.Body.pipe(passThrough);
|
|
117
|
+
}
|
|
118
|
+
}).catch(err => {
|
|
119
|
+
passThrough.emit('error', err);
|
|
120
|
+
});
|
|
121
|
+
return passThrough;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Check if a file exists.
|
|
125
|
+
*/
|
|
126
|
+
async exists(path) {
|
|
127
|
+
try {
|
|
128
|
+
const command = new client_s3_1.HeadObjectCommand({
|
|
129
|
+
Bucket: this.bucket,
|
|
130
|
+
Key: path,
|
|
131
|
+
});
|
|
132
|
+
await this.client.send(command);
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
if (error.name === 'NotFound' || error.$metadata?.httpStatusCode === 404) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Delete a file.
|
|
144
|
+
*/
|
|
145
|
+
async delete(path) {
|
|
146
|
+
const command = new client_s3_1.DeleteObjectCommand({
|
|
147
|
+
Bucket: this.bucket,
|
|
148
|
+
Key: path,
|
|
149
|
+
});
|
|
150
|
+
await this.client.send(command);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get the URL for a file.
|
|
154
|
+
*/
|
|
155
|
+
url(path) {
|
|
156
|
+
if (this.urlEndpoint) {
|
|
157
|
+
return `${this.urlEndpoint}/${path}`;
|
|
158
|
+
}
|
|
159
|
+
return `https://${this.bucket}.s3.${this.region}.amazonaws.com/${path}`;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Get a temporary URL for a file.
|
|
163
|
+
*/
|
|
164
|
+
async temporaryUrl(path, expiresAt) {
|
|
165
|
+
const command = new client_s3_1.GetObjectCommand({
|
|
166
|
+
Bucket: this.bucket,
|
|
167
|
+
Key: path,
|
|
168
|
+
});
|
|
169
|
+
const expiresIn = Math.floor((expiresAt.getTime() - Date.now()) / 1000);
|
|
170
|
+
return await (0, s3_request_presigner_1.getSignedUrl)(this.client, command, { expiresIn });
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get the file size in bytes.
|
|
174
|
+
*/
|
|
175
|
+
async size(path) {
|
|
176
|
+
const command = new client_s3_1.HeadObjectCommand({
|
|
177
|
+
Bucket: this.bucket,
|
|
178
|
+
Key: path,
|
|
179
|
+
});
|
|
180
|
+
const response = await this.client.send(command);
|
|
181
|
+
return response.ContentLength || 0;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get the last modified time of the file.
|
|
185
|
+
*/
|
|
186
|
+
async lastModified(path) {
|
|
187
|
+
const command = new client_s3_1.HeadObjectCommand({
|
|
188
|
+
Bucket: this.bucket,
|
|
189
|
+
Key: path,
|
|
190
|
+
});
|
|
191
|
+
const response = await this.client.send(command);
|
|
192
|
+
return response.LastModified?.getTime() || 0;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Get the mime type of the file.
|
|
196
|
+
*/
|
|
197
|
+
async mimeType(path) {
|
|
198
|
+
const command = new client_s3_1.HeadObjectCommand({
|
|
199
|
+
Bucket: this.bucket,
|
|
200
|
+
Key: path,
|
|
201
|
+
});
|
|
202
|
+
const response = await this.client.send(command);
|
|
203
|
+
return response.ContentType || mime.lookup(path) || 'application/octet-stream';
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Helper to convert stream to buffer.
|
|
207
|
+
*/
|
|
208
|
+
async streamToBuffer(stream) {
|
|
209
|
+
return new Promise((resolve, reject) => {
|
|
210
|
+
const chunks = [];
|
|
211
|
+
stream.on('data', (chunk) => chunks.push(chunk));
|
|
212
|
+
stream.on('error', reject);
|
|
213
|
+
stream.on('end', () => resolve(Buffer.concat(chunks)));
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
exports.S3Driver = S3Driver;
|
|
218
|
+
//# sourceMappingURL=S3Driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"S3Driver.js","sourceRoot":"","sources":["../../../src/Drivers/S3Driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileNotFoundException.d.ts","sourceRoot":"","sources":["../../../src/Exceptions/FileNotFoundException.ts"],"names":[],"mappings":"AAAA,qBAAa,qBAAsB,SAAQ,KAAK;gBAChC,IAAI,EAAE,MAAM;CAI3B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FileNotFoundException = void 0;
|
|
4
|
+
class FileNotFoundException extends Error {
|
|
5
|
+
constructor(path) {
|
|
6
|
+
super(`File not found at path: ${path}`);
|
|
7
|
+
this.name = 'FileNotFoundException';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.FileNotFoundException = FileNotFoundException;
|
|
11
|
+
//# sourceMappingURL=FileNotFoundException.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileNotFoundException.js","sourceRoot":"","sources":["../../../src/Exceptions/FileNotFoundException.ts"],"names":[],"mappings":";;;AAAA,MAAa,qBAAsB,SAAQ,KAAK;IAC5C,YAAY,IAAY;QACpB,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACxC,CAAC;CACJ;AALD,sDAKC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Disk } from './Disk';
|
|
2
|
+
export declare class StorageManager {
|
|
3
|
+
private disks;
|
|
4
|
+
private config;
|
|
5
|
+
constructor(config: any);
|
|
6
|
+
/**
|
|
7
|
+
* Get a disk instance.
|
|
8
|
+
*/
|
|
9
|
+
disk(name?: string): Disk;
|
|
10
|
+
/**
|
|
11
|
+
* Resolve a disk from configuration.
|
|
12
|
+
*/
|
|
13
|
+
private resolveDisk;
|
|
14
|
+
/**
|
|
15
|
+
* Create a driver instance based on configuration.
|
|
16
|
+
*/
|
|
17
|
+
private createDriver;
|
|
18
|
+
/**
|
|
19
|
+
* Proxy methods to the default disk.
|
|
20
|
+
*/
|
|
21
|
+
put(path: string, contents: string | Buffer): Promise<void>;
|
|
22
|
+
putStream(path: string, stream: any): Promise<void>;
|
|
23
|
+
get(path: string): Promise<Buffer>;
|
|
24
|
+
readStream(path: string): any;
|
|
25
|
+
exists(path: string): Promise<boolean>;
|
|
26
|
+
delete(path: string): Promise<void>;
|
|
27
|
+
url(path: string): string;
|
|
28
|
+
temporaryUrl(path: string, expiresAt: Date): Promise<string>;
|
|
29
|
+
size(path: string): Promise<number>;
|
|
30
|
+
lastModified(path: string): Promise<number>;
|
|
31
|
+
mimeType(path: string): Promise<string>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=StorageManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageManager.d.ts","sourceRoot":"","sources":["../../src/StorageManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAK9B,qBAAa,cAAc;IACvB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,MAAM,CAAM;gBAER,MAAM,EAAE,GAAG;IAIvB;;OAEG;IACI,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAchC;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB;;OAEG;IACU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAIvB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAItC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAInB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5D,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAInC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAGvD"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StorageManager = void 0;
|
|
4
|
+
const Disk_1 = require("./Disk");
|
|
5
|
+
const LocalDriver_1 = require("./Drivers/LocalDriver");
|
|
6
|
+
const S3Driver_1 = require("./Drivers/S3Driver");
|
|
7
|
+
class StorageManager {
|
|
8
|
+
constructor(config) {
|
|
9
|
+
this.disks = new Map();
|
|
10
|
+
this.config = config;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get a disk instance.
|
|
14
|
+
*/
|
|
15
|
+
disk(name) {
|
|
16
|
+
name = name || this.config.default;
|
|
17
|
+
if (!name) {
|
|
18
|
+
throw new Error('No default disk configured.');
|
|
19
|
+
}
|
|
20
|
+
if (!this.disks.has(name)) {
|
|
21
|
+
this.disks.set(name, this.resolveDisk(name));
|
|
22
|
+
}
|
|
23
|
+
return this.disks.get(name);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolve a disk from configuration.
|
|
27
|
+
*/
|
|
28
|
+
resolveDisk(name) {
|
|
29
|
+
const diskConfig = this.config.disks[name];
|
|
30
|
+
if (!diskConfig) {
|
|
31
|
+
throw new Error(`Disk [${name}] is not configured.`);
|
|
32
|
+
}
|
|
33
|
+
const driver = this.createDriver(diskConfig);
|
|
34
|
+
return new Disk_1.Disk(driver);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Create a driver instance based on configuration.
|
|
38
|
+
*/
|
|
39
|
+
createDriver(config) {
|
|
40
|
+
switch (config.driver) {
|
|
41
|
+
case 'local':
|
|
42
|
+
return new LocalDriver_1.LocalDriver(config);
|
|
43
|
+
case 's3':
|
|
44
|
+
return new S3Driver_1.S3Driver(config);
|
|
45
|
+
default:
|
|
46
|
+
throw new Error(`Driver [${config.driver}] is not supported.`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Proxy methods to the default disk.
|
|
51
|
+
*/
|
|
52
|
+
async put(path, contents) {
|
|
53
|
+
return await this.disk().put(path, contents);
|
|
54
|
+
}
|
|
55
|
+
async putStream(path, stream) {
|
|
56
|
+
return await this.disk().putStream(path, stream);
|
|
57
|
+
}
|
|
58
|
+
async get(path) {
|
|
59
|
+
return await this.disk().get(path);
|
|
60
|
+
}
|
|
61
|
+
readStream(path) {
|
|
62
|
+
return this.disk().readStream(path);
|
|
63
|
+
}
|
|
64
|
+
async exists(path) {
|
|
65
|
+
return await this.disk().exists(path);
|
|
66
|
+
}
|
|
67
|
+
async delete(path) {
|
|
68
|
+
return await this.disk().delete(path);
|
|
69
|
+
}
|
|
70
|
+
url(path) {
|
|
71
|
+
return this.disk().url(path);
|
|
72
|
+
}
|
|
73
|
+
async temporaryUrl(path, expiresAt) {
|
|
74
|
+
return await this.disk().temporaryUrl(path, expiresAt);
|
|
75
|
+
}
|
|
76
|
+
async size(path) {
|
|
77
|
+
return await this.disk().size(path);
|
|
78
|
+
}
|
|
79
|
+
async lastModified(path) {
|
|
80
|
+
return await this.disk().lastModified(path);
|
|
81
|
+
}
|
|
82
|
+
async mimeType(path) {
|
|
83
|
+
return await this.disk().mimeType(path);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.StorageManager = StorageManager;
|
|
87
|
+
//# sourceMappingURL=StorageManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageManager.js","sourceRoot":"","sources":["../../src/StorageManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './StorageManager';
|
|
2
|
+
export * from './Disk';
|
|
3
|
+
export * from './Contracts/Filesystem';
|
|
4
|
+
export * from './Drivers/LocalDriver';
|
|
5
|
+
export * from './Drivers/S3Driver';
|
|
6
|
+
export * from './Exceptions/FileNotFoundException';
|
|
7
|
+
import { StorageManager } from './StorageManager';
|
|
8
|
+
export declare const Storage: StorageManager;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oCAAoC,CAAC;AAGnD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAalD,eAAO,MAAM,OAAO,gBAAoC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.Storage = void 0;
|
|
18
|
+
__exportStar(require("./StorageManager"), exports);
|
|
19
|
+
__exportStar(require("./Disk"), exports);
|
|
20
|
+
__exportStar(require("./Contracts/Filesystem"), exports);
|
|
21
|
+
__exportStar(require("./Drivers/LocalDriver"), exports);
|
|
22
|
+
__exportStar(require("./Drivers/S3Driver"), exports);
|
|
23
|
+
__exportStar(require("./Exceptions/FileNotFoundException"), exports);
|
|
24
|
+
// Export a default Storage instance (will be configured by the application)
|
|
25
|
+
const StorageManager_1 = require("./StorageManager");
|
|
26
|
+
// Default configuration for standalone usage
|
|
27
|
+
const defaultConfig = {
|
|
28
|
+
default: 'local',
|
|
29
|
+
disks: {
|
|
30
|
+
local: {
|
|
31
|
+
driver: 'local',
|
|
32
|
+
root: './storage/app'
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.Storage = new StorageManager_1.StorageManager(defaultConfig);
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"AdvancedStorage.test.d.ts","sourceRoot":"","sources":["../../tests/AdvancedStorage.test.ts"],"names":[],"mappings":""}
|
|
@@ -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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const node_test_1 = require("node:test");
|
|
37
|
+
const assert = __importStar(require("node:assert"));
|
|
38
|
+
const fs = __importStar(require("fs/promises"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const stream_1 = require("stream");
|
|
41
|
+
const src_1 = require("../src");
|
|
42
|
+
(0, node_test_1.describe)('Advanced Storage Features', () => {
|
|
43
|
+
const testRoot = path.join(process.cwd(), 'test-storage-advanced');
|
|
44
|
+
let storage;
|
|
45
|
+
(0, node_test_1.beforeEach)(async () => {
|
|
46
|
+
await fs.mkdir(testRoot, { recursive: true });
|
|
47
|
+
const config = {
|
|
48
|
+
default: 'local',
|
|
49
|
+
disks: {
|
|
50
|
+
local: {
|
|
51
|
+
driver: 'local',
|
|
52
|
+
root: testRoot,
|
|
53
|
+
url: 'http://localhost:3000/storage'
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
storage = new src_1.StorageManager(config);
|
|
58
|
+
});
|
|
59
|
+
(0, node_test_1.afterEach)(async () => {
|
|
60
|
+
try {
|
|
61
|
+
await fs.rm(testRoot, { recursive: true, force: true });
|
|
62
|
+
}
|
|
63
|
+
catch (error) { }
|
|
64
|
+
});
|
|
65
|
+
(0, node_test_1.it)('handles streaming uploads and downloads', async () => {
|
|
66
|
+
const fileName = 'stream.txt';
|
|
67
|
+
const content = 'Streaming across Arika';
|
|
68
|
+
const stream = stream_1.Readable.from([content]);
|
|
69
|
+
// Test putStream
|
|
70
|
+
await storage.putStream(fileName, stream);
|
|
71
|
+
// Test exists
|
|
72
|
+
assert.strictEqual(await storage.exists(fileName), true);
|
|
73
|
+
// Test readStream
|
|
74
|
+
const readStream = storage.readStream(fileName);
|
|
75
|
+
let retrieved = '';
|
|
76
|
+
for await (const chunk of readStream) {
|
|
77
|
+
retrieved += chunk;
|
|
78
|
+
}
|
|
79
|
+
assert.strictEqual(retrieved, content);
|
|
80
|
+
});
|
|
81
|
+
(0, node_test_1.it)('retrieves file metadata (size, lastModified, mimeType)', async () => {
|
|
82
|
+
const fileName = 'test.json';
|
|
83
|
+
const content = JSON.stringify({ arika: 'js' });
|
|
84
|
+
await storage.put(fileName, content);
|
|
85
|
+
// Size
|
|
86
|
+
const size = await storage.size(fileName);
|
|
87
|
+
assert.strictEqual(size, Buffer.from(content).length);
|
|
88
|
+
// Last Modified
|
|
89
|
+
const lastModified = await storage.lastModified(fileName);
|
|
90
|
+
assert.ok(lastModified > 0);
|
|
91
|
+
assert.ok(Date.now() - lastModified < 5000); // Created recently
|
|
92
|
+
// Mime Type
|
|
93
|
+
const mimeType = await storage.mimeType(fileName);
|
|
94
|
+
assert.strictEqual(mimeType, 'application/json');
|
|
95
|
+
});
|
|
96
|
+
(0, node_test_1.it)('executes disk-level middleware', async () => {
|
|
97
|
+
const fileName = 'middleware.txt';
|
|
98
|
+
let middlewareCalled = false;
|
|
99
|
+
// Register a simple middleware that appends text to the path
|
|
100
|
+
storage.disk('local').middleware(async (data, next) => {
|
|
101
|
+
middlewareCalled = true;
|
|
102
|
+
if (data.operation === 'put') {
|
|
103
|
+
data.contents = data.contents + ' (filtered by middleware)';
|
|
104
|
+
}
|
|
105
|
+
return await next(data);
|
|
106
|
+
});
|
|
107
|
+
await storage.disk('local').put(fileName, 'Hello');
|
|
108
|
+
const content = await storage.disk('local').get(fileName);
|
|
109
|
+
assert.strictEqual(middlewareCalled, true);
|
|
110
|
+
assert.strictEqual(content.toString(), 'Hello (filtered by middleware)');
|
|
111
|
+
});
|
|
112
|
+
(0, node_test_1.it)('handles temporary URLs (Local Driver fallback)', async () => {
|
|
113
|
+
const fileName = 'private.txt';
|
|
114
|
+
await storage.put(fileName, 'secret');
|
|
115
|
+
const expiresAt = new Date(Date.now() + 3600000);
|
|
116
|
+
const url = await storage.temporaryUrl(fileName, expiresAt);
|
|
117
|
+
// For local driver, it falls back to normal URL
|
|
118
|
+
assert.strictEqual(url, 'http://localhost:3000/storage/private.txt');
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=AdvancedStorage.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdvancedStorage.test.js","sourceRoot":"","sources":["../../tests/AdvancedStorage.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Storage.test.d.ts","sourceRoot":"","sources":["../../tests/Storage.test.ts"],"names":[],"mappings":""}
|