@ackplus/nest-file-storage 0.1.51 → 1.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/{src → dist}/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/{src → dist}/lib/constants.d.ts +1 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js.map +1 -0
- package/{src → dist}/lib/file-storage.service.d.ts +1 -0
- package/dist/lib/file-storage.service.d.ts.map +1 -0
- package/dist/lib/file-storage.service.js +30 -0
- package/dist/lib/file-storage.service.js.map +1 -0
- package/{src → dist}/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +22 -0
- package/dist/lib/index.js.map +1 -0
- package/{src → dist}/lib/interceptor/file-storage.interceptor.d.ts +4 -0
- package/dist/lib/interceptor/file-storage.interceptor.d.ts.map +1 -0
- package/dist/lib/interceptor/file-storage.interceptor.js +141 -0
- package/dist/lib/interceptor/file-storage.interceptor.js.map +1 -0
- package/{src → dist}/lib/nest-file-storage.module.d.ts +1 -0
- package/dist/lib/nest-file-storage.module.d.ts.map +1 -0
- package/{src → dist}/lib/nest-file-storage.module.js +16 -11
- package/dist/lib/nest-file-storage.module.js.map +1 -0
- package/{src → dist}/lib/storage/azure.storage.d.ts +1 -0
- package/dist/lib/storage/azure.storage.d.ts.map +1 -0
- package/dist/lib/storage/azure.storage.js +189 -0
- package/dist/lib/storage/azure.storage.js.map +1 -0
- package/dist/lib/storage/local.storage.d.ts +35 -0
- package/dist/lib/storage/local.storage.d.ts.map +1 -0
- package/dist/lib/storage/local.storage.js +219 -0
- package/dist/lib/storage/local.storage.js.map +1 -0
- package/{src → dist}/lib/storage/s3.storage.d.ts +1 -0
- package/dist/lib/storage/s3.storage.d.ts.map +1 -0
- package/dist/lib/storage/s3.storage.js +231 -0
- package/dist/lib/storage/s3.storage.js.map +1 -0
- package/{src → dist}/lib/storage.factory.d.ts +1 -0
- package/dist/lib/storage.factory.d.ts.map +1 -0
- package/dist/lib/storage.factory.js +82 -0
- package/dist/lib/storage.factory.js.map +1 -0
- package/{src → dist}/lib/types.d.ts +14 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js.map +1 -0
- package/package.json +22 -7
- package/src/index.js +0 -8
- package/src/index.js.map +0 -1
- package/src/lib/constants.js.map +0 -1
- package/src/lib/file-storage.service.js +0 -31
- package/src/lib/file-storage.service.js.map +0 -1
- package/src/lib/index.js +0 -9
- package/src/lib/index.js.map +0 -1
- package/src/lib/interceptor/file-storage.interceptor.js +0 -122
- package/src/lib/interceptor/file-storage.interceptor.js.map +0 -1
- package/src/lib/nest-file-storage.module.js.map +0 -1
- package/src/lib/storage/azure.storage.js +0 -153
- package/src/lib/storage/azure.storage.js.map +0 -1
- package/src/lib/storage/local.storage.d.ts +0 -17
- package/src/lib/storage/local.storage.js +0 -133
- package/src/lib/storage/local.storage.js.map +0 -1
- package/src/lib/storage/s3.storage.js +0 -212
- package/src/lib/storage/s3.storage.js.map +0 -1
- package/src/lib/storage.factory.js +0 -49
- package/src/lib/storage.factory.js.map +0 -1
- package/src/lib/types.js.map +0 -1
- package/tsconfig.tsbuildinfo +0 -1
- /package/{src → dist}/lib/constants.js +0 -0
- /package/{src → dist}/lib/types.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":";;;AAIA,IAAY,eAIX;AAJD,WAAY,eAAe;IACvB,kCAAe,CAAA;IACf,4BAAS,CAAA;IACT,kCAAe,CAAA;AACnB,CAAC,EAJW,eAAe,+BAAf,eAAe,QAI1B"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ackplus/nest-file-storage",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"type": "commonjs",
|
|
5
|
-
"main": "./
|
|
6
|
-
"types": "./
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
7
10
|
"license": "MIT",
|
|
8
11
|
"repository": {
|
|
9
12
|
"type": "git",
|
|
@@ -16,7 +19,8 @@
|
|
|
16
19
|
"peerDependencies": {
|
|
17
20
|
"typeorm": "^0.3.23",
|
|
18
21
|
"@nestjs/typeorm": "^11.0.0",
|
|
19
|
-
"@nestjs/common": "^10.
|
|
22
|
+
"@nestjs/common": "^10.0.0 || ^11.0.0",
|
|
23
|
+
"@nestjs/core": "^10.0.0 || ^11.0.0",
|
|
20
24
|
"@azure/storage-blob": "^12.0.0",
|
|
21
25
|
"@aws-sdk/client-s3": "^3.0.0",
|
|
22
26
|
"@aws-sdk/s3-request-presigner": "^3.0.0"
|
|
@@ -35,8 +39,12 @@
|
|
|
35
39
|
"devDependencies": {
|
|
36
40
|
"typeorm": "^0.3.23",
|
|
37
41
|
"@nestjs/typeorm": "^11.0.0",
|
|
38
|
-
"@nestjs/common": "^
|
|
39
|
-
"@
|
|
42
|
+
"@nestjs/common": "^11.1.3",
|
|
43
|
+
"@nestjs/core": "^11.1.3",
|
|
44
|
+
"@types/multer": "^2.0.0",
|
|
45
|
+
"@types/node": "^20.0.0",
|
|
46
|
+
"@types/uuid": "^9.0.0",
|
|
47
|
+
"@types/concat-stream": "^2.0.0"
|
|
40
48
|
},
|
|
41
49
|
"dependencies": {
|
|
42
50
|
"tslib": "^2.3.0",
|
|
@@ -47,6 +55,13 @@
|
|
|
47
55
|
"lodash": "^4.17.21",
|
|
48
56
|
"rxjs": "^7.8.0",
|
|
49
57
|
"multer": "^2.0.1",
|
|
50
|
-
"moment": "^2.30.1"
|
|
58
|
+
"moment": "^2.30.1",
|
|
59
|
+
"uuid": "^9.0.0",
|
|
60
|
+
"concat-stream": "^2.0.0"
|
|
61
|
+
},
|
|
62
|
+
"scripts": {
|
|
63
|
+
"build": "pnpm run clean && tsc -p tsconfig.lib.json",
|
|
64
|
+
"clean": "rimraf dist",
|
|
65
|
+
"dev": "tsc -p tsconfig.lib.json --watch --preserveWatchOutput"
|
|
51
66
|
}
|
|
52
67
|
}
|
package/src/index.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
tslib_1.__exportStar(require("./lib/nest-file-storage.module"), exports);
|
|
5
|
-
tslib_1.__exportStar(require("./lib/file-storage.service"), exports);
|
|
6
|
-
tslib_1.__exportStar(require("./lib/interceptor/file-storage.interceptor"), exports);
|
|
7
|
-
tslib_1.__exportStar(require("./lib/types"), exports);
|
|
8
|
-
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/nest-file-storage/src/index.ts"],"names":[],"mappings":";;;AAAA,yEAA+C;AAC/C,qEAA2C;AAC3C,qFAA2D;AAC3D,sDAA4B"}
|
package/src/lib/constants.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../packages/nest-file-storage/src/lib/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,oBAAoB,GAAG,oBAAoB,CAAC"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FileStorageService = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const storage_factory_1 = require("./storage.factory");
|
|
6
|
-
class FileStorageService {
|
|
7
|
-
static setOptions(options) {
|
|
8
|
-
FileStorageService.options = options;
|
|
9
|
-
}
|
|
10
|
-
static getOptions() {
|
|
11
|
-
return FileStorageService.options;
|
|
12
|
-
}
|
|
13
|
-
static getStorage(storageType) {
|
|
14
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
15
|
-
const options = this.getOptions();
|
|
16
|
-
if ('storageFactory' in options) {
|
|
17
|
-
const classOptions = options;
|
|
18
|
-
const StorageClass = yield classOptions.storageFactory();
|
|
19
|
-
return new StorageClass(classOptions.options);
|
|
20
|
-
}
|
|
21
|
-
const configOptions = options;
|
|
22
|
-
if (!storageType) {
|
|
23
|
-
storageType = configOptions.storage;
|
|
24
|
-
}
|
|
25
|
-
const config = configOptions[`${storageType}Config`];
|
|
26
|
-
return yield storage_factory_1.StorageFactory.createStorage(storageType, config);
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
exports.FileStorageService = FileStorageService;
|
|
31
|
-
//# sourceMappingURL=file-storage.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-storage.service.js","sourceRoot":"","sources":["../../../../../packages/nest-file-storage/src/lib/file-storage.service.ts"],"names":[],"mappings":";;;;AAAA,uDAAmD;AAInD,MAAa,kBAAkB;IAI3B,MAAM,CAAC,UAAU,CAAC,OAAiC;QAC/C,kBAAkB,CAAC,OAAO,GAAG,OAAO,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,UAAU;QACb,OAAO,kBAAkB,CAAC,OAAO,CAAC;IACtC,CAAC;IAED,MAAM,CAAO,UAAU,CAAC,WAA6B;;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAGlC,IAAI,gBAAgB,IAAI,OAAO,EAAE,CAAC;gBAC9B,MAAM,YAAY,GAAG,OAAkC,CAAC;gBACxD,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,CAAC;gBACzD,OAAO,IAAI,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAClD,CAAC;YAGD,MAAM,aAAa,GAAG,OAAmC,CAAC;YAC1D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC;YACxC,CAAC;YACD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,WAAW,QAAQ,CAAC,CAAC;YACrD,OAAO,MAAM,gCAAc,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACnE,CAAC;KAAA;CAEJ;AA/BD,gDA+BC"}
|
package/src/lib/index.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
tslib_1.__exportStar(require("./nest-file-storage.module"), exports);
|
|
5
|
-
tslib_1.__exportStar(require("./types"), exports);
|
|
6
|
-
tslib_1.__exportStar(require("./storage.factory"), exports);
|
|
7
|
-
tslib_1.__exportStar(require("./interceptor/file-storage.interceptor"), exports);
|
|
8
|
-
tslib_1.__exportStar(require("./file-storage.service"), exports);
|
|
9
|
-
//# sourceMappingURL=index.js.map
|
package/src/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/nest-file-storage/src/lib/index.ts"],"names":[],"mappings":";;;AAAA,qEAA2C;AAC3C,kDAAwB;AACxB,4DAAkC;AAClC,iFAAuD;AACvD,iEAAuC"}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FileStorageInterceptor = FileStorageInterceptor;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const multer_1 = tslib_1.__importDefault(require("multer"));
|
|
6
|
-
const file_storage_service_1 = require("../file-storage.service");
|
|
7
|
-
const storage_factory_1 = require("../storage.factory");
|
|
8
|
-
const types_1 = require("../types");
|
|
9
|
-
function mapFileObject(file) {
|
|
10
|
-
return {
|
|
11
|
-
fieldName: file.fieldname,
|
|
12
|
-
originalName: file.originalname,
|
|
13
|
-
fileName: file.filename,
|
|
14
|
-
mimetype: file.mimetype,
|
|
15
|
-
size: file.size,
|
|
16
|
-
key: file.key,
|
|
17
|
-
path: file.path,
|
|
18
|
-
url: file.url,
|
|
19
|
-
encoding: file.encoding,
|
|
20
|
-
fullPath: file.fullPath
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
function applyFileKeyMapping(request, fileConfig, interceptorOptions) {
|
|
24
|
-
const mapCallback = (interceptorOptions === null || interceptorOptions === void 0 ? void 0 : interceptorOptions.mapToRequestBody) || ((file) => {
|
|
25
|
-
if (Array.isArray(file)) {
|
|
26
|
-
return file.map(f => f.key);
|
|
27
|
-
}
|
|
28
|
-
return file.key;
|
|
29
|
-
});
|
|
30
|
-
if (fileConfig.type === 'single') {
|
|
31
|
-
const file = request.file;
|
|
32
|
-
if (file) {
|
|
33
|
-
const fieldName = fileConfig.fieldName || 'file';
|
|
34
|
-
const mappedFile = mapFileObject(file);
|
|
35
|
-
request.body[fieldName] = mapCallback(mappedFile, fieldName, request);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
else if (fileConfig.type === 'array') {
|
|
39
|
-
const files = request.files;
|
|
40
|
-
if (files && files.length > 0) {
|
|
41
|
-
const fieldName = fileConfig.fieldName || 'files';
|
|
42
|
-
const mappedFiles = files.map(file => mapFileObject(file));
|
|
43
|
-
request.body[fieldName] = mapCallback(mappedFiles, fieldName, request);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
else if (fileConfig.type === 'fields') {
|
|
47
|
-
const files = request.files;
|
|
48
|
-
if (files) {
|
|
49
|
-
Object.keys(files).forEach(fieldName => {
|
|
50
|
-
const mappedFiles = files[fieldName].map(file => mapFileObject(file));
|
|
51
|
-
request.body[fieldName] = mapCallback(mappedFiles, fieldName, request);
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
function FileStorageInterceptor(fileConfig, interceptorOptions) {
|
|
57
|
-
if (typeof fileConfig === 'string') {
|
|
58
|
-
fileConfig = {
|
|
59
|
-
type: 'single',
|
|
60
|
-
fieldName: fileConfig,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
return {
|
|
64
|
-
intercept(context, next) {
|
|
65
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
66
|
-
var _a, _b;
|
|
67
|
-
const options = file_storage_service_1.FileStorageService.getOptions();
|
|
68
|
-
const request = context.switchToHttp().getRequest();
|
|
69
|
-
const response = context.switchToHttp().getResponse();
|
|
70
|
-
let storageType;
|
|
71
|
-
let storageConfig;
|
|
72
|
-
if ('storage' in options) {
|
|
73
|
-
const configOptions = options;
|
|
74
|
-
storageType = (_a = interceptorOptions === null || interceptorOptions === void 0 ? void 0 : interceptorOptions.storageType) !== null && _a !== void 0 ? _a : configOptions.storage;
|
|
75
|
-
storageConfig = configOptions[`${storageType}Config`];
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
storageType = (_b = interceptorOptions === null || interceptorOptions === void 0 ? void 0 : interceptorOptions.storageType) !== null && _b !== void 0 ? _b : types_1.FileStorageEnum.LOCAL;
|
|
79
|
-
storageConfig = {};
|
|
80
|
-
}
|
|
81
|
-
const storageOptions = Object.assign(Object.assign(Object.assign({}, storageConfig), ((interceptorOptions === null || interceptorOptions === void 0 ? void 0 : interceptorOptions.storageOptions) || {})), { fileName: (interceptorOptions === null || interceptorOptions === void 0 ? void 0 : interceptorOptions.fileName) || (storageConfig === null || storageConfig === void 0 ? void 0 : storageConfig.fileName), fileDist: (file, req) => {
|
|
82
|
-
var _a;
|
|
83
|
-
if (interceptorOptions === null || interceptorOptions === void 0 ? void 0 : interceptorOptions.fileDist) {
|
|
84
|
-
return interceptorOptions.fileDist(file, req);
|
|
85
|
-
}
|
|
86
|
-
return (_a = storageConfig === null || storageConfig === void 0 ? void 0 : storageConfig.fileDist) === null || _a === void 0 ? void 0 : _a.call(storageConfig, file, req);
|
|
87
|
-
}, prefix: (interceptorOptions === null || interceptorOptions === void 0 ? void 0 : interceptorOptions.prefix) || (storageConfig === null || storageConfig === void 0 ? void 0 : storageConfig.prefix) });
|
|
88
|
-
const storage = yield storage_factory_1.StorageFactory.createStorage(storageType, storageOptions);
|
|
89
|
-
const multerInstance = (0, multer_1.default)({ storage });
|
|
90
|
-
let multerMiddleware;
|
|
91
|
-
switch (fileConfig.type) {
|
|
92
|
-
case 'single':
|
|
93
|
-
if (!fileConfig.fieldName) {
|
|
94
|
-
throw new Error('fieldName is required for single file upload.');
|
|
95
|
-
}
|
|
96
|
-
multerMiddleware = multerInstance.single(fileConfig.fieldName);
|
|
97
|
-
break;
|
|
98
|
-
case 'array':
|
|
99
|
-
if (!fileConfig.fieldName) {
|
|
100
|
-
throw new Error('fieldName is required for multiple file upload.');
|
|
101
|
-
}
|
|
102
|
-
multerMiddleware = multerInstance.array(fileConfig.fieldName, fileConfig.maxCount);
|
|
103
|
-
break;
|
|
104
|
-
case 'fields':
|
|
105
|
-
if (!fileConfig.fields || !Array.isArray(fileConfig.fields)) {
|
|
106
|
-
throw new Error('fields array is required for multiple fields file upload.');
|
|
107
|
-
}
|
|
108
|
-
multerMiddleware = multerInstance.fields(fileConfig.fields);
|
|
109
|
-
break;
|
|
110
|
-
default:
|
|
111
|
-
throw new Error('Invalid file upload type. Use "single", "array", or "fields".');
|
|
112
|
-
}
|
|
113
|
-
yield new Promise((resolve, reject) => {
|
|
114
|
-
multerMiddleware(request, response, (err) => (err ? reject(err) : resolve(true)));
|
|
115
|
-
});
|
|
116
|
-
applyFileKeyMapping(request, fileConfig, interceptorOptions);
|
|
117
|
-
return next.handle();
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
//# sourceMappingURL=file-storage.interceptor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-storage.interceptor.js","sourceRoot":"","sources":["../../../../../../packages/nest-file-storage/src/lib/interceptor/file-storage.interceptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nest-file-storage.module.js","sourceRoot":"","sources":["../../../../../packages/nest-file-storage/src/lib/nest-file-storage.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAAiE;AAEjE,2CAAmD;AACnD,iEAA4D;AAKrD,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAE9B,MAAM,CAAC,OAAO,CAAC,OAAiC;QAC5C,OAAO;YACH,MAAM,EAAE,uBAAqB;YAC7B,SAAS,EAAE;gBACP;oBACI,OAAO,EAAE,gCAAoB;oBAC7B,UAAU,EAAE,GAAS,EAAE;wBACnB,yCAAkB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;wBACvC,OAAO,OAAO,CAAC;oBACnB,CAAC,CAAA;oBACD,MAAM,EAAE,EAAE;iBACb;gBACD,yCAAkB;aACrB;YACD,OAAO,EAAE,EAAE;SACd,CAAC;IACN,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAgC;QAChD,MAAM,cAAc,GAAe,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEtE,OAAO;YACH,MAAM,EAAE,uBAAqB;YAC7B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,SAAS,EAAE,CAAC,GAAG,cAAc,EAAE,yCAAkB,CAAC;YAClD,OAAO,EAAE,EAAE;SACd,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAAC,OAAgC;QAChE,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO;YACH,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;YACxC;gBACI,OAAO,EAAE,OAAO,CAAC,QAAS;gBAC1B,QAAQ,EAAE,OAAO,CAAC,QAAS;aAC9B;SACJ,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,0BAA0B,CAAC,OAAgC;QACtE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO;gBACH,OAAO,EAAE,gCAAoB;gBAC7B,UAAU,EAAE,CAAO,GAAG,IAAW,EAAE,EAAE;oBACjC,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,UAAW,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC9D,yCAAkB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;oBAClD,OAAO,kBAAkB,CAAC;gBAC9B,CAAC,CAAA;gBACD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;aAC/B,CAAC;QACN,CAAC;QAED,OAAO;YACH,OAAO,EAAE,gCAAoB;YAC7B,UAAU,EAAE,CAAO,cAAyC,EAAE,EAAE;gBAC5D,MAAM,kBAAkB,GAAG,MAAM,cAAc,CAAC,wBAAwB,EAAE,CAAC;gBAC3E,yCAAkB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;gBAClD,OAAO,kBAAkB,CAAC;YAC9B,CAAC,CAAA;YACD,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAS,CAAC;SACrD,CAAC;IACN,CAAC;CAEJ,CAAA;AArEY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,qBAAqB,CAqEjC"}
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AzureStorage = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const storage_blob_1 = require("@azure/storage-blob");
|
|
6
|
-
const concat_stream_1 = tslib_1.__importDefault(require("concat-stream"));
|
|
7
|
-
const moment_1 = tslib_1.__importDefault(require("moment"));
|
|
8
|
-
const path_1 = tslib_1.__importStar(require("path"));
|
|
9
|
-
const uuid_1 = require("uuid");
|
|
10
|
-
class AzureStorage {
|
|
11
|
-
constructor(options) {
|
|
12
|
-
this.options = options;
|
|
13
|
-
this.fileNameFunction = options.fileName || ((file, _req) => {
|
|
14
|
-
return `${(0, uuid_1.v4)()}-${file.originalname}`;
|
|
15
|
-
});
|
|
16
|
-
this.fileDistFunction = options.fileDist || ((_file, _req) => {
|
|
17
|
-
return path_1.default.join('uploads', (0, moment_1.default)().format('YYYY'), (0, moment_1.default)().format('MM'), (0, moment_1.default)().format('DD'));
|
|
18
|
-
});
|
|
19
|
-
const sharedKeyCredential = new storage_blob_1.StorageSharedKeyCredential(options.account, options.accountKey);
|
|
20
|
-
this.blobServiceClient = new storage_blob_1.BlobServiceClient(`https://${options.account}.blob.core.windows.net`, sharedKeyCredential);
|
|
21
|
-
}
|
|
22
|
-
_handleFile(req, file, cb) {
|
|
23
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
24
|
-
try {
|
|
25
|
-
const dist = yield this.fileDistFunction(file, req);
|
|
26
|
-
const key = yield this.fileNameFunction(file, req);
|
|
27
|
-
const filePath = (0, path_1.join)(dist, key);
|
|
28
|
-
file.stream.pipe((0, concat_stream_1.default)({ encoding: 'buffer' }, (buffer) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
29
|
-
var _a;
|
|
30
|
-
const uploadedFile = yield this.putFile(buffer, filePath);
|
|
31
|
-
const fileInfo = Object.assign(Object.assign({}, uploadedFile), { fieldName: file.fieldname, originalName: file.originalname, mimetype: file.mimetype });
|
|
32
|
-
let transformData = fileInfo;
|
|
33
|
-
if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.transformUploadedFileObject) {
|
|
34
|
-
transformData = yield this.options.transformUploadedFileObject(fileInfo);
|
|
35
|
-
}
|
|
36
|
-
cb(null, transformData);
|
|
37
|
-
})));
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
cb(error);
|
|
41
|
-
}
|
|
42
|
-
file.stream.on('error', (err) => cb(err));
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
_removeFile(_req, file, cb) {
|
|
46
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
47
|
-
try {
|
|
48
|
-
const blobClient = this.blobServiceClient
|
|
49
|
-
.getContainerClient(this.options.container)
|
|
50
|
-
.getBlobClient(file.key);
|
|
51
|
-
yield blobClient.delete();
|
|
52
|
-
cb(null);
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
cb(error);
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
getUrl(key) {
|
|
60
|
-
return `https://${this.options.account}.blob.core.windows.net/${this.options.container}/${key}`;
|
|
61
|
-
}
|
|
62
|
-
getSignedUrl(key, signatureValues = {}) {
|
|
63
|
-
if (!key)
|
|
64
|
-
return null;
|
|
65
|
-
const cloudFrontDomain = process.env.AZURE_CDN_DOMAIN_NAME;
|
|
66
|
-
if (cloudFrontDomain) {
|
|
67
|
-
return `${cloudFrontDomain}/${key}`;
|
|
68
|
-
}
|
|
69
|
-
const containerClient = this.blobServiceClient.getContainerClient(this.options.container);
|
|
70
|
-
const blobClient = containerClient.getBlobClient(key);
|
|
71
|
-
const sharedKeyCredential = new storage_blob_1.StorageSharedKeyCredential(this.options.account, this.options.accountKey);
|
|
72
|
-
const expiresOn = new Date();
|
|
73
|
-
expiresOn.setHours(expiresOn.getHours() + 1);
|
|
74
|
-
const sasToken = (0, storage_blob_1.generateBlobSASQueryParameters)(Object.assign({ containerName: this.options.container, blobName: key, permissions: storage_blob_1.BlobSASPermissions.parse('r'), protocol: storage_blob_1.SASProtocol.Https, startsOn: new Date(), expiresOn }, signatureValues), sharedKeyCredential).toString();
|
|
75
|
-
return `${blobClient.url}?${sasToken}`;
|
|
76
|
-
}
|
|
77
|
-
getFile(key) {
|
|
78
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
79
|
-
const containerClient = this.blobServiceClient.getContainerClient(this.options.container);
|
|
80
|
-
const blobClient = containerClient.getBlobClient(key);
|
|
81
|
-
const downloadResponse = yield blobClient.download();
|
|
82
|
-
const stream = downloadResponse.readableStreamBody;
|
|
83
|
-
return new Promise((resolve, reject) => {
|
|
84
|
-
const chunks = [];
|
|
85
|
-
stream === null || stream === void 0 ? void 0 : stream.on('data', (chunk) => chunks.push(chunk));
|
|
86
|
-
stream === null || stream === void 0 ? void 0 : stream.on('end', () => resolve(Buffer.concat(chunks)));
|
|
87
|
-
stream === null || stream === void 0 ? void 0 : stream.on('error', reject);
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
putFile(buffer, key) {
|
|
92
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
93
|
-
try {
|
|
94
|
-
const containerClient = this.blobServiceClient.getContainerClient(this.options.container);
|
|
95
|
-
const blockBlobClient = containerClient.getBlockBlobClient(key);
|
|
96
|
-
yield blockBlobClient.uploadData(buffer);
|
|
97
|
-
const fileInfo = {
|
|
98
|
-
originalName: (0, path_1.basename)(key),
|
|
99
|
-
fileName: (0, path_1.basename)(key),
|
|
100
|
-
size: buffer.length,
|
|
101
|
-
buffer,
|
|
102
|
-
key,
|
|
103
|
-
fullPath: key,
|
|
104
|
-
url: this.getUrl(key),
|
|
105
|
-
};
|
|
106
|
-
return fileInfo;
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
console.error(`Error uploading file "${key}":`, error);
|
|
110
|
-
throw error;
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
deleteFile(key) {
|
|
115
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
116
|
-
try {
|
|
117
|
-
const blobClient = this.blobServiceClient
|
|
118
|
-
.getContainerClient(this.options.container)
|
|
119
|
-
.getBlobClient(key);
|
|
120
|
-
yield blobClient.delete();
|
|
121
|
-
}
|
|
122
|
-
catch (error) {
|
|
123
|
-
console.error(`Error deleting blob "${key}":`, error);
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
copyFile(oldKey, newKey) {
|
|
128
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
129
|
-
try {
|
|
130
|
-
const containerClient = this.blobServiceClient.getContainerClient(this.options.container);
|
|
131
|
-
const sourceBlobClient = containerClient.getBlobClient(oldKey);
|
|
132
|
-
const destinationBlobClient = containerClient.getBlobClient(newKey);
|
|
133
|
-
const copyPoller = yield destinationBlobClient.beginCopyFromURL(sourceBlobClient.url);
|
|
134
|
-
yield copyPoller.pollUntilDone();
|
|
135
|
-
const properties = yield destinationBlobClient.getProperties();
|
|
136
|
-
return {
|
|
137
|
-
originalName: (0, path_1.basename)(newKey),
|
|
138
|
-
size: properties.contentLength || 0,
|
|
139
|
-
fileName: (0, path_1.basename)(newKey),
|
|
140
|
-
key: newKey,
|
|
141
|
-
fullPath: newKey,
|
|
142
|
-
url: this.getUrl(newKey),
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
catch (error) {
|
|
146
|
-
console.error('Error copying file in Azure Blob Storage:', error);
|
|
147
|
-
throw error;
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
exports.AzureStorage = AzureStorage;
|
|
153
|
-
//# sourceMappingURL=azure.storage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"azure.storage.js","sourceRoot":"","sources":["../../../../../../packages/nest-file-storage/src/lib/storage/azure.storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { StorageEngine } from 'multer';
|
|
2
|
-
import { LocalStorageOptions, Storage, UploadedFile } from '../types';
|
|
3
|
-
export declare class LocalStorage implements StorageEngine, Storage {
|
|
4
|
-
private options;
|
|
5
|
-
private rootPath;
|
|
6
|
-
private fileNameFunction;
|
|
7
|
-
private fileDistFunction;
|
|
8
|
-
constructor(options: LocalStorageOptions);
|
|
9
|
-
_handleFile(req: any, file: Express.Multer.File, cb: (error?: any, info?: any) => void): Promise<void>;
|
|
10
|
-
_removeFile(_req: any, file: any, cb: (error: Error | null) => void): void;
|
|
11
|
-
getUrl(filePath: string): string;
|
|
12
|
-
getFile(file: string): Promise<Buffer>;
|
|
13
|
-
deleteFile(file: string): Promise<void>;
|
|
14
|
-
putFile(fileContent: Buffer, key: string): Promise<UploadedFile>;
|
|
15
|
-
path(filePath: string): string;
|
|
16
|
-
copyFile(oldKey: string, newKey: string): Promise<UploadedFile>;
|
|
17
|
-
}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LocalStorage = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const concat_stream_1 = tslib_1.__importDefault(require("concat-stream"));
|
|
6
|
-
const fs = tslib_1.__importStar(require("fs"));
|
|
7
|
-
const moment_1 = tslib_1.__importDefault(require("moment"));
|
|
8
|
-
const path = tslib_1.__importStar(require("path"));
|
|
9
|
-
const path_1 = require("path");
|
|
10
|
-
const uuid_1 = require("uuid");
|
|
11
|
-
class LocalStorage {
|
|
12
|
-
constructor(options) {
|
|
13
|
-
this.options = options;
|
|
14
|
-
this.rootPath = options.rootPath || path.join(process.cwd(), 'public');
|
|
15
|
-
this.fileNameFunction = options.fileName || ((file, _req) => {
|
|
16
|
-
return `${(0, uuid_1.v4)()}-${file.originalname}`;
|
|
17
|
-
});
|
|
18
|
-
this.fileDistFunction = options.fileDist || ((_file, _req) => {
|
|
19
|
-
return path.join(this.rootPath, (0, moment_1.default)().format('YYYY'), (0, moment_1.default)().format('MM'), (0, moment_1.default)().format('DD'));
|
|
20
|
-
});
|
|
21
|
-
if (!fs.existsSync(this.rootPath)) {
|
|
22
|
-
fs.mkdirSync(this.rootPath, { recursive: true });
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
_handleFile(req, file, cb) {
|
|
26
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
27
|
-
try {
|
|
28
|
-
const dist = yield this.fileDistFunction(file, req);
|
|
29
|
-
const key = yield this.fileNameFunction(file, req);
|
|
30
|
-
const filePath = (0, path_1.join)(dist, key);
|
|
31
|
-
file.stream.pipe((0, concat_stream_1.default)({ encoding: 'buffer' }, (buffer) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
32
|
-
var _a;
|
|
33
|
-
const uploadedFile = yield this.putFile(buffer, filePath);
|
|
34
|
-
const fileInfo = Object.assign(Object.assign({}, uploadedFile), { fieldName: file.fieldname, originalName: file.originalname, mimetype: file.mimetype });
|
|
35
|
-
let transformData = fileInfo;
|
|
36
|
-
if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.transformUploadedFileObject) {
|
|
37
|
-
transformData = yield this.options.transformUploadedFileObject(fileInfo);
|
|
38
|
-
}
|
|
39
|
-
cb(null, transformData);
|
|
40
|
-
})));
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
console.error('error', error);
|
|
44
|
-
cb(error);
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
_removeFile(_req, file, cb) {
|
|
49
|
-
const filePath = file.path;
|
|
50
|
-
fs.unlink(filePath, (err) => {
|
|
51
|
-
if (err) {
|
|
52
|
-
cb(err);
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
cb(null);
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
getUrl(filePath) {
|
|
60
|
-
if (filePath && filePath.startsWith('http')) {
|
|
61
|
-
return filePath;
|
|
62
|
-
}
|
|
63
|
-
return filePath ? `${this.options.baseUrl}/${filePath}` : null;
|
|
64
|
-
}
|
|
65
|
-
getFile(file) {
|
|
66
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
67
|
-
return fs.promises.readFile(this.path(file));
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
deleteFile(file) {
|
|
71
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
return fs.promises.unlink(this.path(file));
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
putFile(fileContent, key) {
|
|
76
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
77
|
-
return new Promise((putFileResolve, reject) => {
|
|
78
|
-
const path = (0, path_1.join)(this.options.rootPath, key);
|
|
79
|
-
const directoryPath = (0, path_1.dirname)(path);
|
|
80
|
-
fs.mkdirSync(directoryPath, { recursive: true });
|
|
81
|
-
fs.writeFile(path, fileContent, (err) => {
|
|
82
|
-
if (err) {
|
|
83
|
-
reject(err);
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
const stats = fs.statSync(path);
|
|
87
|
-
const baseName = (0, path_1.basename)(key);
|
|
88
|
-
const fileInfo = {
|
|
89
|
-
originalName: baseName,
|
|
90
|
-
size: stats.size,
|
|
91
|
-
fileName: baseName,
|
|
92
|
-
key,
|
|
93
|
-
url: this.getUrl(key),
|
|
94
|
-
fullPath: path,
|
|
95
|
-
};
|
|
96
|
-
putFileResolve(fileInfo);
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
path(filePath) {
|
|
102
|
-
return filePath ? `${this.options.rootPath}/${filePath}` : null;
|
|
103
|
-
}
|
|
104
|
-
copyFile(oldKey, newKey) {
|
|
105
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
106
|
-
return new Promise((resolve, reject) => {
|
|
107
|
-
const oldPath = (0, path_1.join)(this.options.rootPath, oldKey);
|
|
108
|
-
const newPath = (0, path_1.join)(this.options.rootPath, newKey);
|
|
109
|
-
const directoryPath = (0, path_1.dirname)(newPath);
|
|
110
|
-
fs.mkdirSync(directoryPath, { recursive: true });
|
|
111
|
-
fs.copyFile(oldPath, newPath, (err) => {
|
|
112
|
-
if (err) {
|
|
113
|
-
reject(err);
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
const stats = fs.statSync(newPath);
|
|
117
|
-
const baseName = (0, path_1.basename)(newKey);
|
|
118
|
-
const fileInfo = {
|
|
119
|
-
originalName: baseName,
|
|
120
|
-
size: stats.size,
|
|
121
|
-
fileName: baseName,
|
|
122
|
-
key: newKey,
|
|
123
|
-
fullPath: newPath,
|
|
124
|
-
url: this.getUrl(newKey),
|
|
125
|
-
};
|
|
126
|
-
resolve(fileInfo);
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
exports.LocalStorage = LocalStorage;
|
|
133
|
-
//# sourceMappingURL=local.storage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local.storage.js","sourceRoot":"","sources":["../../../../../../packages/nest-file-storage/src/lib/storage/local.storage.ts"],"names":[],"mappings":"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"}
|