@heilgar/file-storage-adapter-core 1.0.1 → 1.0.2
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/README.md +24 -0
- package/dist/base-adapter.d.ts +8 -0
- package/dist/base-adapter.d.ts.map +1 -1
- package/dist/base-adapter.js +25 -4
- package/dist/base-adapter.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +5 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# File Storage Adapter Core
|
|
2
|
+
|
|
3
|
+
Interfaces and base adapter helpers for storage providers.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm install @heilgar/file-storage-adapter-core
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import type { FileStorageAdapter } from '@heilgar/file-storage-adapter-core';
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## API
|
|
18
|
+
|
|
19
|
+
The core package exports the `FileStorageAdapter` interface and `BaseAdapter`
|
|
20
|
+
helper. Implementations should provide:
|
|
21
|
+
|
|
22
|
+
- `upload`, `download`, `getMetadata`, `delete`, `exists`, `list`
|
|
23
|
+
- `getSignedUrl`, `getSignedUrlUpload`
|
|
24
|
+
- `copy`, `move`
|
package/dist/base-adapter.d.ts
CHANGED
|
@@ -26,6 +26,14 @@ export declare abstract class BaseAdapter implements FileStorageAdapter {
|
|
|
26
26
|
* @returns A Promise that resolves to a Buffer
|
|
27
27
|
*/
|
|
28
28
|
protected toBuffer(file: Buffer | NodeJS.ReadableStream | File): Promise<Buffer>;
|
|
29
|
+
/**
|
|
30
|
+
* Extracts the filename from a key path.
|
|
31
|
+
*
|
|
32
|
+
* @param key - The file key/path
|
|
33
|
+
*
|
|
34
|
+
* @returns The filename without the directory path
|
|
35
|
+
*/
|
|
36
|
+
protected extractFileName(key: string): string;
|
|
29
37
|
abstract upload(key: string, file: Buffer | NodeJS.ReadableStream | File, options?: UploadOptions): Promise<FileMetadata>;
|
|
30
38
|
abstract download(key: string, options?: DownloadOptions): Promise<FileObject>;
|
|
31
39
|
abstract getMetadata(key: string): Promise<FileMetadata | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../src/base-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,wBAAwB,EACxB,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,8BAAsB,WAAY,YAAW,kBAAkB;IACjD,SAAS,CAAC,MAAM,EAAE,wBAAwB;gBAAhC,MAAM,GAAE,wBAA6B;IAE3D;;;;;;OAMG;IACH,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../src/base-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,wBAAwB,EACxB,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,8BAAsB,WAAY,YAAW,kBAAkB;IACjD,SAAS,CAAC,MAAM,EAAE,wBAAwB;gBAAhC,MAAM,GAAE,wBAA6B;IAE3D;;;;;;OAMG;IACH,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAUzC;;;;;;OAMG;IACH,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAmBhD;;;;;;OAMG;cACa,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBtF;;;;;;OAMG;IACH,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAK9C,QAAQ,CAAC,MAAM,CACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,GAAG,IAAI,EAC3C,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAC9E,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAC/D,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9C,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IACzD,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9E,QAAQ,CAAC,kBAAkB,CACzB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,qBAAqB,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAC/E,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAChF"}
|
package/dist/base-adapter.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { posix as pathPosix } from 'node:path';
|
|
2
2
|
export class BaseAdapter {
|
|
3
3
|
constructor(config = {}) {
|
|
4
4
|
this.config = config;
|
|
@@ -12,7 +12,9 @@ export class BaseAdapter {
|
|
|
12
12
|
*/
|
|
13
13
|
getFullKey(key) {
|
|
14
14
|
if (this.config.basePath) {
|
|
15
|
-
|
|
15
|
+
const basePath = this.config.basePath.replace(/\\/g, '/');
|
|
16
|
+
const normalizedKey = key.replace(/\\/g, '/');
|
|
17
|
+
return pathPosix.join(basePath, normalizedKey);
|
|
16
18
|
}
|
|
17
19
|
return key;
|
|
18
20
|
}
|
|
@@ -24,8 +26,16 @@ export class BaseAdapter {
|
|
|
24
26
|
* @returns The file key without the base path if applicable
|
|
25
27
|
*/
|
|
26
28
|
stripBasePath(fullKey) {
|
|
27
|
-
if (this.config.basePath
|
|
28
|
-
|
|
29
|
+
if (this.config.basePath) {
|
|
30
|
+
const basePath = this.config.basePath.replace(/\\/g, '/').replace(/\/+$/, '');
|
|
31
|
+
const normalizedFullKey = fullKey.replace(/\\/g, '/');
|
|
32
|
+
if (normalizedFullKey === basePath) {
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
if (normalizedFullKey.startsWith(`${basePath}/`)) {
|
|
36
|
+
return normalizedFullKey.slice(basePath.length + 1);
|
|
37
|
+
}
|
|
38
|
+
return normalizedFullKey;
|
|
29
39
|
}
|
|
30
40
|
return fullKey;
|
|
31
41
|
}
|
|
@@ -50,5 +60,16 @@ export class BaseAdapter {
|
|
|
50
60
|
}
|
|
51
61
|
return Buffer.concat(chunks);
|
|
52
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Extracts the filename from a key path.
|
|
65
|
+
*
|
|
66
|
+
* @param key - The file key/path
|
|
67
|
+
*
|
|
68
|
+
* @returns The filename without the directory path
|
|
69
|
+
*/
|
|
70
|
+
extractFileName(key) {
|
|
71
|
+
const normalizedKey = key.replace(/\\/g, '/');
|
|
72
|
+
return normalizedKey.split('/').pop() || normalizedKey;
|
|
73
|
+
}
|
|
53
74
|
}
|
|
54
75
|
//# sourceMappingURL=base-adapter.js.map
|
package/dist/base-adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-adapter.js","sourceRoot":"","sources":["../src/base-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"base-adapter.js","sourceRoot":"","sources":["../src/base-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AAc/C,MAAM,OAAgB,WAAW;IAC/B,YAAsB,SAAmC,EAAE;QAArC,WAAM,GAAN,MAAM,CAA+B;IAAG,CAAC;IAE/D;;;;;;OAMG;IACO,UAAU,CAAC,GAAW;QAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC1D,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9C,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;OAMG;IACO,aAAa,CAAC,OAAe;QACrC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9E,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAEtD,IAAI,iBAAiB,KAAK,QAAQ,EAAE,CAAC;gBACnC,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,IAAI,iBAAiB,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACjD,OAAO,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,QAAQ,CAAC,IAA2C;QAClE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,QAAQ,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAA6B,EAAE,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;OAMG;IACO,eAAe,CAAC,GAAW;QACnC,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9C,OAAO,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,aAAa,CAAC;IACzD,CAAC;CAmBF"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export interface FileMetadata {
|
|
2
2
|
name: string;
|
|
3
3
|
mimeType: string;
|
|
4
|
-
|
|
4
|
+
sizeInBytes: number;
|
|
5
5
|
uploadedAt: Date;
|
|
6
|
-
|
|
6
|
+
customMetadata?: Record<string, any>;
|
|
7
7
|
}
|
|
8
8
|
export interface FileObject extends FileMetadata {
|
|
9
9
|
content: Buffer;
|
|
@@ -13,6 +13,7 @@ export interface UploadOptions {
|
|
|
13
13
|
cacheControl?: string;
|
|
14
14
|
path?: string;
|
|
15
15
|
metadata?: Record<string, any>;
|
|
16
|
+
isPubliclyAccessible?: boolean;
|
|
16
17
|
}
|
|
17
18
|
export interface ListOptions {
|
|
18
19
|
prefix?: string;
|
|
@@ -26,8 +27,8 @@ export interface ListResult {
|
|
|
26
27
|
}
|
|
27
28
|
export interface DownloadOptions {
|
|
28
29
|
range?: {
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
startByte: number;
|
|
31
|
+
endByte: number;
|
|
31
32
|
};
|
|
32
33
|
}
|
|
33
34
|
export interface SignedUrlOptions {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|