@arikajs/storage 0.0.4 → 0.0.6

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 (42) hide show
  1. package/README.md +77 -19
  2. package/dist/Contracts/Filesystem.d.ts +16 -0
  3. package/dist/Contracts/Filesystem.d.ts.map +1 -1
  4. package/dist/Disk.d.ts +16 -0
  5. package/dist/Disk.d.ts.map +1 -1
  6. package/dist/Disk.js +69 -0
  7. package/dist/Disk.js.map +1 -1
  8. package/dist/Drivers/AzureDriver.d.ts +26 -0
  9. package/dist/Drivers/AzureDriver.d.ts.map +1 -0
  10. package/dist/Drivers/AzureDriver.js +144 -0
  11. package/dist/Drivers/AzureDriver.js.map +1 -0
  12. package/dist/Drivers/GCSDriver.d.ts +31 -0
  13. package/dist/Drivers/GCSDriver.d.ts.map +1 -0
  14. package/dist/Drivers/GCSDriver.js +138 -0
  15. package/dist/Drivers/GCSDriver.js.map +1 -0
  16. package/dist/StorageManager.d.ts +10 -0
  17. package/dist/StorageManager.d.ts.map +1 -1
  18. package/dist/StorageManager.js +29 -0
  19. package/dist/StorageManager.js.map +1 -1
  20. package/dist/src/Contracts/Filesystem.d.ts +16 -0
  21. package/dist/src/Contracts/Filesystem.d.ts.map +1 -1
  22. package/dist/src/Disk.d.ts +16 -0
  23. package/dist/src/Disk.d.ts.map +1 -1
  24. package/dist/src/Disk.js +69 -0
  25. package/dist/src/Disk.js.map +1 -1
  26. package/dist/src/Drivers/AzureDriver.d.ts +26 -0
  27. package/dist/src/Drivers/AzureDriver.d.ts.map +1 -0
  28. package/dist/src/Drivers/AzureDriver.js +144 -0
  29. package/dist/src/Drivers/AzureDriver.js.map +1 -0
  30. package/dist/src/Drivers/GCSDriver.d.ts +31 -0
  31. package/dist/src/Drivers/GCSDriver.d.ts.map +1 -0
  32. package/dist/src/Drivers/GCSDriver.js +138 -0
  33. package/dist/src/Drivers/GCSDriver.js.map +1 -0
  34. package/dist/src/StorageManager.d.ts +10 -0
  35. package/dist/src/StorageManager.d.ts.map +1 -1
  36. package/dist/src/StorageManager.js +29 -0
  37. package/dist/src/StorageManager.js.map +1 -1
  38. package/dist/tests/EnterpriseFeatures.test.d.ts +2 -0
  39. package/dist/tests/EnterpriseFeatures.test.d.ts.map +1 -0
  40. package/dist/tests/EnterpriseFeatures.test.js +143 -0
  41. package/dist/tests/EnterpriseFeatures.test.js.map +1 -0
  42. package/package.json +54 -50
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  `@arikajs/storage` is the filesystem abstraction layer for the ArikaJS framework.
4
4
 
5
- It provides a clean, unified API to work with local and cloud-based storage systems using interchangeable drivers, inspired by Laravel's Storage but designed for Node.js and TypeScript.
5
+ It provides a clean, unified API to work with local and cloud-based storage systems using interchangeable drivers, designed for maximum developer experience but designed for Node.js and TypeScript.
6
6
 
7
7
  This package allows ArikaJS applications to interact with files without caring where or how they are stored.
8
8
 
@@ -12,12 +12,15 @@ This package allows ArikaJS applications to interact with files without caring w
12
12
 
13
13
  - **Multiple storage disks**: Configure different storage locations
14
14
  - **Driver-based filesystem architecture**: Pluggable storage backends
15
+ - **Storage Extensibility**: Register custom drivers via `extend()`
16
+ - **Middleware pipelines**: Intercept operations via `disk().middleware()`
15
17
  - **Local filesystem driver**: Built-in support for local file storage (v1)
16
- - **Unified file API**: `put`, `get`, `delete`, `exists`, `url`
18
+ - **Unified file API**: `put`, `get`, `delete`, `exists`, `url`, `copy`, `move`
19
+ - **File mutation API**: `append`, `prepend`
17
20
  - **Buffer, string, and stream support**: Flexible content handling
18
21
  - **Configuration-based disk resolution**: Easy setup via config files
19
22
  - **TypeScript-first**: Full type safety with JavaScript compatibility
20
- - **Designed for cloud drivers**: Ready for S3, GCS, Azure (planned)
23
+ - **Designed for cloud drivers**: Ready for S3, GCS, Azure (S3 shipped)
21
24
 
22
25
  ---
23
26
 
@@ -97,8 +100,8 @@ export default {
97
100
  | :--- | :--- |
98
101
  | Local filesystem | ✅ Supported |
99
102
  | Amazon S3 | ✅ Supported |
100
- | Google Cloud Storage | Planned |
101
- | Azure Blob Storage | Planned |
103
+ | Google Cloud Storage | Supported |
104
+ | Azure Blob Storage | Supported |
102
105
 
103
106
  ---
104
107
 
@@ -138,6 +141,38 @@ Delete a file.
138
141
  await Storage.delete('file.txt');
139
142
  ```
140
143
 
144
+ ### `Storage.copy(path, newPath)`
145
+
146
+ Copy a file to a new location.
147
+
148
+ ```ts
149
+ await Storage.copy('file.txt', 'backup.txt');
150
+ ```
151
+
152
+ ### `Storage.move(path, newPath)`
153
+
154
+ Move a file to a new location.
155
+
156
+ ```ts
157
+ await Storage.move('file.txt', 'archive.txt');
158
+ ```
159
+
160
+ ### `Storage.append(path, contents)`
161
+
162
+ Append contents to a file.
163
+
164
+ ```ts
165
+ await Storage.append('log.txt', 'New log entry');
166
+ ```
167
+
168
+ ### `Storage.prepend(path, contents)`
169
+
170
+ Prepend contents to a file.
171
+
172
+ ```ts
173
+ await Storage.prepend('log.txt', 'First entry');
174
+ ```
175
+
141
176
  ### `Storage.url(path)`
142
177
 
143
178
  Get the public URL for a file.
@@ -150,26 +185,27 @@ Returns a public URL if supported by the disk.
150
185
 
151
186
  ---
152
187
 
153
- ## 🧠 Architecture
188
+ ## 🏗 Architecture
154
189
 
155
- ```
190
+ ```text
156
191
  storage/
157
192
  ├── src/
158
- │ ├── StorageManager.ts ← Resolves disks and drivers
159
- ├── Disk.ts ← Disk wrapper
160
- │ ├── Drivers/
161
- │ │ └── LocalDriver.ts ← Local filesystem implementation
162
- │ ├── Contracts/
163
- │ │ └── Filesystem.ts ← Driver interface
164
- ├── Exceptions/
193
+ │ ├── Contracts
194
+ │ └── Filesystem.ts
195
+ │ ├── Drivers
196
+ │ │ ├── AzureDriver.ts
197
+ ├── GCSDriver.ts
198
+ │ │ ├── LocalDriver.ts
199
+ │ └── S3Driver.ts
200
+ │ ├── Exceptions
165
201
  │ │ └── FileNotFoundException.ts
166
- └── index.ts
202
+ ├── Disk.ts
203
+ │ ├── index.ts
204
+ │ └── StorageManager.ts
167
205
  ├── tests/
168
- │ └── Storage.test.ts
169
206
  ├── package.json
170
207
  ├── tsconfig.json
171
- ├── README.md
172
- └── LICENSE
208
+ └── README.md
173
209
  ```
174
210
 
175
211
  ---
@@ -204,7 +240,27 @@ class CustomDriver implements Filesystem {
204
240
  }
205
241
  ```
206
242
 
207
- Register it inside `StorageManager`.
243
+ Register it inside `StorageManager` using the `extend()` method:
244
+ ```ts
245
+ storage.extend('custom', (config) => new CustomDriver(config));
246
+ ```
247
+
248
+ ---
249
+
250
+ ## 🚦 Storage Middleware
251
+
252
+ You can attach disk-level middleware to intercept any storage operations (e.g., logging every write, encrypting payloads on `.put()`, etc.).
253
+
254
+ ```ts
255
+ storage.disk('local').middleware(async (data, next) => {
256
+ if (data.operation === 'put') {
257
+ console.log(`Writing file: ${data.path}`);
258
+ // Optionally modify payload before saving!
259
+ // data.contents = encrypt(data.contents);
260
+ }
261
+ return await next(data);
262
+ });
263
+ ```
208
264
 
209
265
  ---
210
266
 
@@ -229,6 +285,8 @@ The storage layer is fully testable by mocking drivers or using temporary disks.
229
285
  ## 🛣 Roadmap
230
286
 
231
287
  - [x] S3 driver
288
+ - [x] GCS driver
289
+ - [x] Azure Blob driver
232
290
  - [x] Streaming API
233
291
  - [x] Temporary signed URLs
234
292
  - [x] Disk-level middleware
@@ -44,5 +44,21 @@ export interface Filesystem {
44
44
  * Get the mime type of the file.
45
45
  */
46
46
  mimeType(path: string): Promise<string>;
47
+ /**
48
+ * Copy a file to a new location.
49
+ */
50
+ copy?(path: string, newPath: string): Promise<void>;
51
+ /**
52
+ * Move a file to a new location.
53
+ */
54
+ move?(path: string, newPath: string): Promise<void>;
55
+ /**
56
+ * Append to a file.
57
+ */
58
+ append?(path: string, contents: string | Buffer): Promise<void>;
59
+ /**
60
+ * Prepend to a file.
61
+ */
62
+ prepend?(path: string, contents: string | Buffer): Promise<void>;
47
63
  }
48
64
  //# sourceMappingURL=Filesystem.d.ts.map
@@ -1 +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"}
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;IAExC;;OAEG;IACH,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD;;OAEG;IACH,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD;;OAEG;IACH,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;OAEG;IACH,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE"}
package/dist/Disk.d.ts CHANGED
@@ -56,5 +56,21 @@ export declare class Disk {
56
56
  * Get the mime type of the file.
57
57
  */
58
58
  mimeType(path: string): Promise<string>;
59
+ /**
60
+ * Copy a file to a new location.
61
+ */
62
+ copy(path: string, newPath: string): Promise<void>;
63
+ /**
64
+ * Move a file to a new location.
65
+ */
66
+ move(path: string, newPath: string): Promise<void>;
67
+ /**
68
+ * Append to a file.
69
+ */
70
+ append(path: string, contents: string | Buffer): Promise<void>;
71
+ /**
72
+ * Prepend to a file.
73
+ */
74
+ prepend(path: string, contents: string | Buffer): Promise<void>;
59
75
  }
60
76
  //# sourceMappingURL=Disk.d.ts.map
@@ -1 +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"}
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;IAMpD;;OAEG;IACU,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/D;;OAEG;IACU,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY/D;;OAEG;IACU,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB3E;;OAEG;IACU,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAmB/E"}
package/dist/Disk.js CHANGED
@@ -114,6 +114,75 @@ class Disk {
114
114
  return await this.driver.mimeType(data.path);
115
115
  });
116
116
  }
117
+ /**
118
+ * Copy a file to a new location.
119
+ */
120
+ async copy(path, newPath) {
121
+ return await this.runPipeline('copy', { path, newPath }, async (data) => {
122
+ if (typeof this.driver.copy === 'function') {
123
+ return await this.driver.copy(data.path, data.newPath);
124
+ }
125
+ // Fallback
126
+ const content = await this.driver.get(data.path);
127
+ await this.driver.put(data.newPath, content);
128
+ });
129
+ }
130
+ /**
131
+ * Move a file to a new location.
132
+ */
133
+ async move(path, newPath) {
134
+ return await this.runPipeline('move', { path, newPath }, async (data) => {
135
+ if (typeof this.driver.move === 'function') {
136
+ return await this.driver.move(data.path, data.newPath);
137
+ }
138
+ // Fallback
139
+ const content = await this.driver.get(data.path);
140
+ await this.driver.put(data.newPath, content);
141
+ await this.driver.delete(data.path);
142
+ });
143
+ }
144
+ /**
145
+ * Append to a file.
146
+ */
147
+ async append(path, contents) {
148
+ return await this.runPipeline('append', { path, contents }, async (data) => {
149
+ if (typeof this.driver.append === 'function') {
150
+ return await this.driver.append(data.path, data.contents);
151
+ }
152
+ // Fallback
153
+ let existing = '';
154
+ try {
155
+ existing = await this.driver.get(data.path);
156
+ }
157
+ catch (e) { } // Ignore if it doesn't exist
158
+ const separator = existing.length > 0 ? '\n' : '';
159
+ const newContent = Buffer.isBuffer(existing)
160
+ ? Buffer.concat([existing, Buffer.from(separator), Buffer.isBuffer(data.contents) ? data.contents : Buffer.from(data.contents)])
161
+ : existing + separator + data.contents;
162
+ return await this.driver.put(data.path, newContent);
163
+ });
164
+ }
165
+ /**
166
+ * Prepend to a file.
167
+ */
168
+ async prepend(path, contents) {
169
+ return await this.runPipeline('prepend', { path, contents }, async (data) => {
170
+ if (typeof this.driver.prepend === 'function') {
171
+ return await this.driver.prepend(data.path, data.contents);
172
+ }
173
+ // Fallback
174
+ let existing = '';
175
+ try {
176
+ existing = await this.driver.get(data.path);
177
+ }
178
+ catch (e) { } // Ignore if it doesn't exist
179
+ const separator = existing.length > 0 ? '\n' : '';
180
+ const newContent = Buffer.isBuffer(existing)
181
+ ? Buffer.concat([Buffer.isBuffer(data.contents) ? data.contents : Buffer.from(data.contents), Buffer.from(separator), existing])
182
+ : data.contents + separator + existing;
183
+ return await this.driver.put(data.path, newContent);
184
+ });
185
+ }
117
186
  }
118
187
  exports.Disk = Disk;
119
188
  //# sourceMappingURL=Disk.js.map
package/dist/Disk.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Disk.js","sourceRoot":"","sources":["../src/Disk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Disk.js","sourceRoot":"","sources":["../src/Disk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Filesystem } from '../Contracts/Filesystem';
2
+ import { BlobServiceClient, ContainerClient } from '@azure/storage-blob';
3
+ import { Readable } from 'stream';
4
+ export declare class AzureDriver implements Filesystem {
5
+ protected client: BlobServiceClient;
6
+ protected container: ContainerClient;
7
+ protected containerName: string;
8
+ protected urlEndpoint?: string;
9
+ constructor(config: {
10
+ connectionString: string;
11
+ container: string;
12
+ url?: string;
13
+ });
14
+ put(path: string, contents: string | Buffer): Promise<void>;
15
+ putStream(path: string, stream: Readable): Promise<void>;
16
+ get(path: string): Promise<Buffer>;
17
+ readStream(path: string): Readable;
18
+ exists(path: string): Promise<boolean>;
19
+ delete(path: string): Promise<void>;
20
+ url(path: string): string;
21
+ temporaryUrl(path: string, expiresAt: Date): Promise<string>;
22
+ size(path: string): Promise<number>;
23
+ lastModified(path: string): Promise<number>;
24
+ mimeType(path: string): Promise<string>;
25
+ }
26
+ //# sourceMappingURL=AzureDriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AzureDriver.d.ts","sourceRoot":"","sources":["../../src/Drivers/AzureDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAsB,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,qBAAa,WAAY,YAAW,UAAU;IAC1C,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACpC,SAAS,CAAC,SAAS,EAAE,eAAe,CAAC;IACrC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;gBAEnB,MAAM,EAAE;QAChB,gBAAgB,EAAE,MAAM,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;KAChB;IAOK,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYxC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAgB5B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASzC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQnB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAoB5D,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMnC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM3C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAKhD"}
@@ -0,0 +1,144 @@
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.AzureDriver = void 0;
37
+ const storage_blob_1 = require("@azure/storage-blob");
38
+ const mime = __importStar(require("mime-types"));
39
+ class AzureDriver {
40
+ constructor(config) {
41
+ this.client = storage_blob_1.BlobServiceClient.fromConnectionString(config.connectionString);
42
+ this.containerName = config.container;
43
+ this.container = this.client.getContainerClient(config.container);
44
+ this.urlEndpoint = config.url;
45
+ }
46
+ async put(path, contents) {
47
+ const blockBlobClient = this.container.getBlockBlobClient(path);
48
+ const buffer = Buffer.isBuffer(contents) ? contents : Buffer.from(contents);
49
+ await blockBlobClient.uploadData(buffer, {
50
+ blobHTTPHeaders: {
51
+ blobContentType: mime.lookup(path) || 'application/octet-stream'
52
+ }
53
+ });
54
+ }
55
+ async putStream(path, stream) {
56
+ const blockBlobClient = this.container.getBlockBlobClient(path);
57
+ await blockBlobClient.uploadStream(stream, 4 * 1024 * 1024, 20, {
58
+ blobHTTPHeaders: {
59
+ blobContentType: mime.lookup(path) || 'application/octet-stream'
60
+ }
61
+ });
62
+ }
63
+ async get(path) {
64
+ try {
65
+ const blockBlobClient = this.container.getBlockBlobClient(path);
66
+ return await blockBlobClient.downloadToBuffer();
67
+ }
68
+ catch (error) {
69
+ if (error.statusCode === 404) {
70
+ throw new Error(`File not found: ${path}`);
71
+ }
72
+ throw error;
73
+ }
74
+ }
75
+ readStream(path) {
76
+ const blockBlobClient = this.container.getBlockBlobClient(path);
77
+ const { PassThrough } = require('stream');
78
+ const passThrough = new PassThrough();
79
+ blockBlobClient.download().then((response) => {
80
+ if (response.readableStreamBody) {
81
+ response.readableStreamBody.pipe(passThrough);
82
+ }
83
+ }).catch((err) => {
84
+ passThrough.emit('error', err);
85
+ });
86
+ return passThrough;
87
+ }
88
+ async exists(path) {
89
+ const blockBlobClient = this.container.getBlockBlobClient(path);
90
+ return await blockBlobClient.exists();
91
+ }
92
+ async delete(path) {
93
+ try {
94
+ const blockBlobClient = this.container.getBlockBlobClient(path);
95
+ await blockBlobClient.delete();
96
+ }
97
+ catch (error) {
98
+ if (error.statusCode !== 404)
99
+ throw error;
100
+ }
101
+ }
102
+ url(path) {
103
+ if (this.urlEndpoint) {
104
+ return `${this.urlEndpoint}/${path}`;
105
+ }
106
+ const blockBlobClient = this.container.getBlockBlobClient(path);
107
+ return blockBlobClient.url;
108
+ }
109
+ async temporaryUrl(path, expiresAt) {
110
+ try {
111
+ const blockBlobClient = this.container.getBlockBlobClient(path);
112
+ const permissions = new storage_blob_1.BlobSASPermissions();
113
+ permissions.read = true;
114
+ const sasUrl = await blockBlobClient.generateSasUrl({
115
+ permissions,
116
+ expiresOn: expiresAt
117
+ });
118
+ return sasUrl;
119
+ }
120
+ catch (e) {
121
+ if (e.message?.includes('generateSasUrl') || e.message?.includes('StorageSharedKeyCredential')) {
122
+ throw new Error("Temporary URL requires Shared Key Credential which must be parsed from Connection String. Alternatively configure SAS manually.");
123
+ }
124
+ throw e;
125
+ }
126
+ }
127
+ async size(path) {
128
+ const blockBlobClient = this.container.getBlockBlobClient(path);
129
+ const properties = await blockBlobClient.getProperties();
130
+ return properties.contentLength || 0;
131
+ }
132
+ async lastModified(path) {
133
+ const blockBlobClient = this.container.getBlockBlobClient(path);
134
+ const properties = await blockBlobClient.getProperties();
135
+ return properties.lastModified?.getTime() || 0;
136
+ }
137
+ async mimeType(path) {
138
+ const blockBlobClient = this.container.getBlockBlobClient(path);
139
+ const properties = await blockBlobClient.getProperties();
140
+ return properties.contentType || mime.lookup(path) || 'application/octet-stream';
141
+ }
142
+ }
143
+ exports.AzureDriver = AzureDriver;
144
+ //# sourceMappingURL=AzureDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AzureDriver.js","sourceRoot":"","sources":["../../src/Drivers/AzureDriver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { Filesystem } from '../Contracts/Filesystem';
2
+ import { Storage as GCSStorage, Bucket } from '@google-cloud/storage';
3
+ import { Readable } from 'stream';
4
+ export declare class GCSDriver implements Filesystem {
5
+ protected client: GCSStorage;
6
+ protected bucket: Bucket;
7
+ protected bucketName: string;
8
+ protected urlEndpoint?: string;
9
+ constructor(config: {
10
+ projectId?: string;
11
+ keyFilename?: string;
12
+ bucket: string;
13
+ url?: string;
14
+ credentials?: any;
15
+ });
16
+ private getFile;
17
+ put(path: string, contents: string | Buffer): Promise<void>;
18
+ putStream(path: string, stream: Readable): Promise<void>;
19
+ get(path: string): Promise<Buffer>;
20
+ readStream(path: string): Readable;
21
+ exists(path: string): Promise<boolean>;
22
+ delete(path: string): Promise<void>;
23
+ url(path: string): string;
24
+ temporaryUrl(path: string, expiresAt: Date): Promise<string>;
25
+ size(path: string): Promise<number>;
26
+ lastModified(path: string): Promise<number>;
27
+ mimeType(path: string): Promise<string>;
28
+ copy(path: string, newPath: string): Promise<void>;
29
+ move(path: string, newPath: string): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=GCSDriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GCSDriver.d.ts","sourceRoot":"","sources":["../../src/Drivers/GCSDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,EAAQ,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,qBAAa,SAAU,YAAW,UAAU;IACxC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;IAC7B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;gBAEnB,MAAM,EAAE;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,GAAG,CAAC;KACrB;IAYD,OAAO,CAAC,OAAO;IAIT,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAcxD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYxC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAI5B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASzC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOnB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAS5D,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKnC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK3C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3D"}