@unchainedshop/file-upload 3.0.0-alpha3 → 3.0.0-alpha4
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/lib/director/FileAdapter.d.ts +7 -8
- package/lib/director/FileAdapter.d.ts.map +1 -1
- package/lib/director/FileAdapter.js.map +1 -1
- package/lib/director/FileDirector.d.ts +7 -8
- package/lib/director/FileDirector.d.ts.map +1 -1
- package/lib/director/FileDirector.js.map +1 -1
- package/lib/file-upload-index.d.ts +3 -1
- package/lib/file-upload-index.d.ts.map +1 -1
- package/lib/file-upload-index.js +2 -1
- package/lib/file-upload-index.js.map +1 -1
- package/lib/get-file-from-file-data.d.ts +13 -0
- package/lib/get-file-from-file-data.d.ts.map +1 -0
- package/lib/get-file-from-file-data.js +12 -0
- package/lib/get-file-from-file-data.js.map +1 -0
- package/lib/types.d.ts +21 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -0
- package/package.json +9 -6
- package/src/director/FileAdapter.ts +8 -9
- package/src/director/FileDirector.ts +6 -4
- package/src/file-upload-index.test.ts +5 -4
- package/src/file-upload-index.ts +3 -1
- package/src/get-file-from-file-data.ts +14 -0
- package/src/types.ts +21 -0
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import { UnchainedCore } from '@unchainedshop/core';
|
|
2
|
-
import { File, UploadFileData } from '@unchainedshop/core-files';
|
|
3
1
|
import { Readable } from 'stream';
|
|
4
2
|
import { IBaseAdapter } from '@unchainedshop/utils';
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import { UploadedFile, UploadFileData } from '../types.js';
|
|
4
|
+
export interface IFileAdapter<Context = unknown> extends IBaseAdapter {
|
|
5
|
+
createSignedURL: (directoryName: string, fileName: string, unchainedAPI: Context) => Promise<(UploadFileData & {
|
|
7
6
|
putURL: string;
|
|
8
7
|
}) | null>;
|
|
9
|
-
removeFiles: (files: Array<
|
|
10
|
-
uploadFileFromStream: (directoryName: string, rawFile: any, unchainedAPI:
|
|
8
|
+
removeFiles: (files: Array<UploadedFile>, unchainedContext: Context) => Promise<void>;
|
|
9
|
+
uploadFileFromStream: (directoryName: string, rawFile: any, unchainedAPI: Context) => Promise<UploadFileData | null>;
|
|
11
10
|
uploadFileFromURL: (directoryName: string, fileInput: {
|
|
12
11
|
fileLink: string;
|
|
13
12
|
fileName: string;
|
|
14
13
|
fileId?: string;
|
|
15
14
|
headers?: Record<string, unknown>;
|
|
16
|
-
}, unchainedAPI:
|
|
17
|
-
createDownloadStream: (file:
|
|
15
|
+
}, unchainedAPI: Context) => Promise<UploadFileData | null>;
|
|
16
|
+
createDownloadStream: (file: UploadedFile, unchainedAPI: Context) => Promise<Readable>;
|
|
18
17
|
}
|
|
19
18
|
export declare const FileAdapter: Omit<IFileAdapter, 'key' | 'label' | 'version'>;
|
|
20
19
|
//# sourceMappingURL=FileAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileAdapter.d.ts","sourceRoot":"","sources":["../../src/director/FileAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FileAdapter.d.ts","sourceRoot":"","sources":["../../src/director/FileAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,WAAW,YAAY,CAAC,OAAO,GAAG,OAAO,CAAE,SAAQ,YAAY;IACnE,eAAe,EAAE,CACf,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,KAClB,OAAO,CAAC,CAAC,cAAc,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3D,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,gBAAgB,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtF,oBAAoB,EAAE,CACpB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,GAAG,EACZ,YAAY,EAAE,OAAO,KAClB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACpC,iBAAiB,EAAE,CACjB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,EACD,YAAY,EAAE,OAAO,KAClB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACpC,oBAAoB,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACxF;AACD,eAAO,MAAM,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,CA+BvE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileAdapter.js","sourceRoot":"","sources":["../../src/director/FileAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FileAdapter.js","sourceRoot":"","sources":["../../src/director/FileAdapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AA4BtD,MAAM,CAAC,MAAM,WAAW,GAAoD;IAC1E,eAAe;QACb,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW;QACT,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IACD,oBAAoB;QAClB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,oBAAoB;QAClB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,iBAAiB;QACf,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,OAAe,EAAE,EAAE,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE;QAC9D,OAAO,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import { UnchainedCore } from '@unchainedshop/core';
|
|
2
|
-
import { File } from '@unchainedshop/core-files';
|
|
3
1
|
import { IFileAdapter } from './FileAdapter.js';
|
|
4
|
-
|
|
2
|
+
import { UploadedFile } from '../types.js';
|
|
3
|
+
export type UploadFileCallback<UnchainedAPI = unknown> = (file: UploadedFile, unchainedAPI: UnchainedAPI) => Promise<void>;
|
|
5
4
|
export declare const FileDirector: {
|
|
6
|
-
registerFileUploadCallback(directoryName: string, fn: UploadFileCallback): void;
|
|
5
|
+
registerFileUploadCallback<UnchainedAPI>(directoryName: string, fn: UploadFileCallback<UnchainedAPI>): void;
|
|
7
6
|
getFileUploadCallback(directoryName: string): UploadFileCallback;
|
|
8
7
|
getAdapters: (options?: {
|
|
9
|
-
adapterFilter?: (adapter: IFileAdapter) => boolean;
|
|
10
|
-
}) => IFileAdapter[];
|
|
11
|
-
getAdapter: (key: string) => IFileAdapter
|
|
12
|
-
registerAdapter: (A: IFileAdapter) => void;
|
|
8
|
+
adapterFilter?: (adapter: IFileAdapter<unknown>) => boolean;
|
|
9
|
+
}) => IFileAdapter<unknown>[];
|
|
10
|
+
getAdapter: (key: string) => IFileAdapter<unknown>;
|
|
11
|
+
registerAdapter: (A: IFileAdapter<unknown>) => void;
|
|
13
12
|
unregisterAdapter: (key: string) => boolean;
|
|
14
13
|
};
|
|
15
14
|
//# sourceMappingURL=FileDirector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileDirector.d.ts","sourceRoot":"","sources":["../../src/director/FileDirector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"FileDirector.d.ts","sourceRoot":"","sources":["../../src/director/FileDirector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,kBAAkB,CAAC,YAAY,GAAG,OAAO,IAAI,CACvD,IAAI,EAAE,YAAY,EAClB,YAAY,EAAE,YAAY,KACvB,OAAO,CAAC,IAAI,CAAC,CAAC;AAMnB,eAAO,MAAM,YAAY;+BAGI,YAAY,iBAAiB,MAAM,MAAM,kBAAkB,CAAC,YAAY,CAAC;yCAM/D,MAAM,GAAG,kBAAkB;;;;;;;CAGjE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileDirector.js","sourceRoot":"","sources":["../../src/director/FileDirector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"FileDirector.js","sourceRoot":"","sources":["../../src/director/FileDirector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AASpD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA8B,CAAC;AAEjE,MAAM,YAAY,GAAG,YAAY,CAAe,cAAc,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,GAAG,YAAY;IAEf,0BAA0B,CAAe,aAAqB,EAAE,EAAoC;QAClG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAC3C,kBAAkB,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,qBAAqB,CAAC,aAAqB;QACzC,OAAO,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/C,CAAC;CACF,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import buildHashedFilename from './build-hashed-filename.js';
|
|
2
2
|
import resolveExpirationDate from './put-expiration.js';
|
|
3
|
+
import getFileFromFileData from './get-file-from-file-data.js';
|
|
3
4
|
export { FileDirector } from './director/FileDirector.js';
|
|
4
5
|
export { FileAdapter, IFileAdapter } from './director/FileAdapter.js';
|
|
5
|
-
export { buildHashedFilename, resolveExpirationDate };
|
|
6
|
+
export { buildHashedFilename, resolveExpirationDate, getFileFromFileData };
|
|
7
|
+
export type * from './types.js';
|
|
6
8
|
//# sourceMappingURL=file-upload-index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-upload-index.d.ts","sourceRoot":"","sources":["../src/file-upload-index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,4BAA4B,CAAC;AAC7D,OAAO,qBAAqB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"file-upload-index.d.ts","sourceRoot":"","sources":["../src/file-upload-index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,4BAA4B,CAAC;AAC7D,OAAO,qBAAqB,MAAM,qBAAqB,CAAC;AACxD,OAAO,mBAAmB,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,CAAC;AAC3E,mBAAmB,YAAY,CAAC"}
|
package/lib/file-upload-index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import buildHashedFilename from './build-hashed-filename.js';
|
|
2
2
|
import resolveExpirationDate from './put-expiration.js';
|
|
3
|
+
import getFileFromFileData from './get-file-from-file-data.js';
|
|
3
4
|
export { FileDirector } from './director/FileDirector.js';
|
|
4
5
|
export { FileAdapter } from './director/FileAdapter.js';
|
|
5
|
-
export { buildHashedFilename, resolveExpirationDate };
|
|
6
|
+
export { buildHashedFilename, resolveExpirationDate, getFileFromFileData };
|
|
6
7
|
//# sourceMappingURL=file-upload-index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-upload-index.js","sourceRoot":"","sources":["../src/file-upload-index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,4BAA4B,CAAC;AAC7D,OAAO,qBAAqB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"file-upload-index.js","sourceRoot":"","sources":["../src/file-upload-index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,4BAA4B,CAAC;AAC7D,OAAO,qBAAqB,MAAM,qBAAqB,CAAC;AACxD,OAAO,mBAAmB,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAgB,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { UploadFileData } from './types.js';
|
|
2
|
+
export declare const getFileFromFileData: (fileData: UploadFileData, meta: any) => {
|
|
3
|
+
_id: string;
|
|
4
|
+
path: string;
|
|
5
|
+
expires: Date;
|
|
6
|
+
name: string;
|
|
7
|
+
size: number;
|
|
8
|
+
type: string;
|
|
9
|
+
url: string;
|
|
10
|
+
meta: any;
|
|
11
|
+
};
|
|
12
|
+
export default getFileFromFileData;
|
|
13
|
+
//# sourceMappingURL=get-file-from-file-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-file-from-file-data.d.ts","sourceRoot":"","sources":["../src/get-file-from-file-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,mBAAmB,aAAc,cAAc,QAAQ,GAAG;;;;;;;;;CASrE,CAAC;AAEH,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const getFileFromFileData = (fileData, meta) => ({
|
|
2
|
+
_id: fileData._id,
|
|
3
|
+
path: fileData.directoryName,
|
|
4
|
+
expires: fileData.expiryDate,
|
|
5
|
+
name: fileData.fileName,
|
|
6
|
+
size: fileData.size,
|
|
7
|
+
type: fileData.type || 'application/octet-stream',
|
|
8
|
+
url: fileData.url,
|
|
9
|
+
meta,
|
|
10
|
+
});
|
|
11
|
+
export default getFileFromFileData;
|
|
12
|
+
//# sourceMappingURL=get-file-from-file-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-file-from-file-data.js","sourceRoot":"","sources":["../src/get-file-from-file-data.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAwB,EAAE,IAAS,EAAE,EAAE,CAAC,CAAC;IAC3E,GAAG,EAAE,QAAQ,CAAC,GAAG;IACjB,IAAI,EAAE,QAAQ,CAAC,aAAa;IAC5B,OAAO,EAAE,QAAQ,CAAC,UAAU;IAC5B,IAAI,EAAE,QAAQ,CAAC,QAAQ;IACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;IACnB,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,0BAA0B;IACjD,GAAG,EAAE,QAAQ,CAAC,GAAG;IACjB,IAAI;CACL,CAAC,CAAC;AAEH,eAAe,mBAAmB,CAAC"}
|
package/lib/types.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface UploadFileData {
|
|
2
|
+
_id?: string;
|
|
3
|
+
directoryName: string;
|
|
4
|
+
expiryDate: Date;
|
|
5
|
+
fileName: string;
|
|
6
|
+
hash: string;
|
|
7
|
+
hashedName: string;
|
|
8
|
+
size?: number;
|
|
9
|
+
type: string;
|
|
10
|
+
url: string;
|
|
11
|
+
}
|
|
12
|
+
export interface UploadedFile {
|
|
13
|
+
_id?: string;
|
|
14
|
+
path: string;
|
|
15
|
+
meta?: Record<string, unknown>;
|
|
16
|
+
name: string;
|
|
17
|
+
size?: number;
|
|
18
|
+
type?: string;
|
|
19
|
+
url?: string;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd"}
|
package/lib/types.js
ADDED
package/lib/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unchainedshop/file-upload",
|
|
3
|
-
"version": "3.0.0-
|
|
3
|
+
"version": "3.0.0-alpha4",
|
|
4
4
|
"main": "lib/file-upload-index.js",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./lib/file-upload-index.js",
|
|
@@ -24,22 +24,25 @@
|
|
|
24
24
|
"ecommerce",
|
|
25
25
|
"core"
|
|
26
26
|
],
|
|
27
|
-
"
|
|
27
|
+
"authors": [
|
|
28
|
+
"Joël Meiller",
|
|
29
|
+
"Pascal Kaufmann"
|
|
30
|
+
],
|
|
28
31
|
"license": "EUPL-1.2",
|
|
29
32
|
"bugs": {
|
|
30
33
|
"url": "https://github.com/unchainedshop/unchained/issues"
|
|
31
34
|
},
|
|
32
35
|
"homepage": "https://github.com/unchainedshop/unchained#readme",
|
|
33
36
|
"dependencies": {
|
|
34
|
-
"@unchainedshop/logger": "^3.0.0-
|
|
35
|
-
"@unchainedshop/utils": "^3.0.0-
|
|
37
|
+
"@unchainedshop/logger": "^3.0.0-alpha4",
|
|
38
|
+
"@unchainedshop/utils": "^3.0.0-alpha4",
|
|
36
39
|
"base-x": "^5.0.0",
|
|
37
40
|
"mime-types": "^2.1.35"
|
|
38
41
|
},
|
|
39
42
|
"devDependencies": {
|
|
40
|
-
"@types/node": "^22.
|
|
43
|
+
"@types/node": "^22.7.8",
|
|
41
44
|
"jest": "^29.7.0",
|
|
42
45
|
"ts-jest": "^29.2.5",
|
|
43
|
-
"typescript": "^5.6.
|
|
46
|
+
"typescript": "^5.6.3"
|
|
44
47
|
}
|
|
45
48
|
}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import { log, LogLevel } from '@unchainedshop/logger';
|
|
2
|
-
import { UnchainedCore } from '@unchainedshop/core';
|
|
3
|
-
import { File, UploadFileData } from '@unchainedshop/core-files';
|
|
4
1
|
import { Readable } from 'stream';
|
|
2
|
+
import { log, LogLevel } from '@unchainedshop/logger';
|
|
5
3
|
import { IBaseAdapter } from '@unchainedshop/utils';
|
|
4
|
+
import { UploadedFile, UploadFileData } from '../types.js';
|
|
6
5
|
|
|
7
|
-
export interface IFileAdapter extends IBaseAdapter {
|
|
6
|
+
export interface IFileAdapter<Context = unknown> extends IBaseAdapter {
|
|
8
7
|
createSignedURL: (
|
|
9
8
|
directoryName: string,
|
|
10
9
|
fileName: string,
|
|
11
|
-
unchainedAPI:
|
|
10
|
+
unchainedAPI: Context,
|
|
12
11
|
) => Promise<(UploadFileData & { putURL: string }) | null>;
|
|
13
|
-
removeFiles: (files: Array<
|
|
12
|
+
removeFiles: (files: Array<UploadedFile>, unchainedContext: Context) => Promise<void>;
|
|
14
13
|
uploadFileFromStream: (
|
|
15
14
|
directoryName: string,
|
|
16
15
|
rawFile: any,
|
|
17
|
-
unchainedAPI:
|
|
16
|
+
unchainedAPI: Context,
|
|
18
17
|
) => Promise<UploadFileData | null>;
|
|
19
18
|
uploadFileFromURL: (
|
|
20
19
|
directoryName: string,
|
|
@@ -24,9 +23,9 @@ export interface IFileAdapter extends IBaseAdapter {
|
|
|
24
23
|
fileId?: string;
|
|
25
24
|
headers?: Record<string, unknown>;
|
|
26
25
|
},
|
|
27
|
-
unchainedAPI:
|
|
26
|
+
unchainedAPI: Context,
|
|
28
27
|
) => Promise<UploadFileData | null>;
|
|
29
|
-
createDownloadStream: (file:
|
|
28
|
+
createDownloadStream: (file: UploadedFile, unchainedAPI: Context) => Promise<Readable>;
|
|
30
29
|
}
|
|
31
30
|
export const FileAdapter: Omit<IFileAdapter, 'key' | 'label' | 'version'> = {
|
|
32
31
|
createSignedURL() {
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { BaseDirector } from '@unchainedshop/utils';
|
|
2
|
-
import { UnchainedCore } from '@unchainedshop/core';
|
|
3
|
-
import { File } from '@unchainedshop/core-files';
|
|
4
2
|
import { IFileAdapter } from './FileAdapter.js';
|
|
3
|
+
import { UploadedFile } from '../types.js';
|
|
5
4
|
|
|
6
|
-
export type UploadFileCallback =
|
|
5
|
+
export type UploadFileCallback<UnchainedAPI = unknown> = (
|
|
6
|
+
file: UploadedFile,
|
|
7
|
+
unchainedAPI: UnchainedAPI,
|
|
8
|
+
) => Promise<void>;
|
|
7
9
|
|
|
8
10
|
const FileUploadRegistry = new Map<string, UploadFileCallback>();
|
|
9
11
|
|
|
@@ -12,7 +14,7 @@ const baseDirector = BaseDirector<IFileAdapter>('FileDirector');
|
|
|
12
14
|
export const FileDirector = {
|
|
13
15
|
...baseDirector,
|
|
14
16
|
|
|
15
|
-
registerFileUploadCallback(directoryName: string, fn: UploadFileCallback) {
|
|
17
|
+
registerFileUploadCallback<UnchainedAPI>(directoryName: string, fn: UploadFileCallback<UnchainedAPI>) {
|
|
16
18
|
if (!FileUploadRegistry.has(directoryName)) {
|
|
17
19
|
FileUploadRegistry.set(directoryName, fn);
|
|
18
20
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import buildHashedFilename from
|
|
2
|
-
|
|
1
|
+
import buildHashedFilename from './build-hashed-filename.js';
|
|
3
2
|
|
|
4
3
|
describe('File Uploader', () => {
|
|
5
|
-
it('Generate unique file name',
|
|
6
|
-
expect(
|
|
4
|
+
it('Generate unique file name', () => {
|
|
5
|
+
expect(
|
|
6
|
+
buildHashedFilename('root', 'file1.jpg', new Date(new Date('2022-12-04T17:13:09.285Z'))),
|
|
7
|
+
).toEqual('4hI2YuPDacR8ERoR7iM6cQ-file1.jpg');
|
|
7
8
|
});
|
|
8
9
|
});
|
package/src/file-upload-index.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import buildHashedFilename from './build-hashed-filename.js';
|
|
2
2
|
import resolveExpirationDate from './put-expiration.js';
|
|
3
|
+
import getFileFromFileData from './get-file-from-file-data.js';
|
|
3
4
|
|
|
4
5
|
export { FileDirector } from './director/FileDirector.js';
|
|
5
6
|
export { FileAdapter, IFileAdapter } from './director/FileAdapter.js';
|
|
6
|
-
export { buildHashedFilename, resolveExpirationDate };
|
|
7
|
+
export { buildHashedFilename, resolveExpirationDate, getFileFromFileData };
|
|
8
|
+
export type * from './types.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { UploadFileData } from './types.js';
|
|
2
|
+
|
|
3
|
+
export const getFileFromFileData = (fileData: UploadFileData, meta: any) => ({
|
|
4
|
+
_id: fileData._id,
|
|
5
|
+
path: fileData.directoryName,
|
|
6
|
+
expires: fileData.expiryDate,
|
|
7
|
+
name: fileData.fileName,
|
|
8
|
+
size: fileData.size,
|
|
9
|
+
type: fileData.type || 'application/octet-stream',
|
|
10
|
+
url: fileData.url,
|
|
11
|
+
meta,
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
export default getFileFromFileData;
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface UploadFileData {
|
|
2
|
+
_id?: string;
|
|
3
|
+
directoryName: string;
|
|
4
|
+
expiryDate: Date;
|
|
5
|
+
fileName: string;
|
|
6
|
+
hash: string;
|
|
7
|
+
hashedName: string;
|
|
8
|
+
size?: number;
|
|
9
|
+
type: string;
|
|
10
|
+
url: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface UploadedFile {
|
|
14
|
+
_id?: string;
|
|
15
|
+
path: string;
|
|
16
|
+
meta?: Record<string, unknown>;
|
|
17
|
+
name: string;
|
|
18
|
+
size?: number;
|
|
19
|
+
type?: string;
|
|
20
|
+
url?: string;
|
|
21
|
+
}
|