@ackplus/nest-file-storage 0.1.51 → 1.1.0

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 (50) hide show
  1. package/README.md +6 -404
  2. package/eslint.config.mjs +22 -0
  3. package/jest.config.ts +10 -0
  4. package/package.json +3 -45
  5. package/project.json +38 -0
  6. package/src/lib/constants.ts +1 -0
  7. package/src/lib/file-storage.service.ts +36 -0
  8. package/src/lib/interceptor/file-storage.interceptor.ts +174 -0
  9. package/src/lib/nest-file-storage.module.ts +78 -0
  10. package/src/lib/storage/azure.storage.ts +214 -0
  11. package/src/lib/storage/local.storage.ts +233 -0
  12. package/src/lib/storage/s3.storage.ts +242 -0
  13. package/src/lib/storage.factory.ts +58 -0
  14. package/src/lib/{types.d.ts → types.ts} +48 -22
  15. package/tsconfig.json +17 -0
  16. package/tsconfig.lib.json +14 -0
  17. package/tsconfig.spec.json +15 -0
  18. package/src/index.js +0 -8
  19. package/src/index.js.map +0 -1
  20. package/src/lib/constants.d.ts +0 -1
  21. package/src/lib/constants.js +0 -5
  22. package/src/lib/constants.js.map +0 -1
  23. package/src/lib/file-storage.service.d.ts +0 -7
  24. package/src/lib/file-storage.service.js +0 -31
  25. package/src/lib/file-storage.service.js.map +0 -1
  26. package/src/lib/index.js +0 -9
  27. package/src/lib/index.js.map +0 -1
  28. package/src/lib/interceptor/file-storage.interceptor.d.ts +0 -21
  29. package/src/lib/interceptor/file-storage.interceptor.js +0 -122
  30. package/src/lib/interceptor/file-storage.interceptor.js.map +0 -1
  31. package/src/lib/nest-file-storage.module.d.ts +0 -8
  32. package/src/lib/nest-file-storage.module.js +0 -75
  33. package/src/lib/nest-file-storage.module.js.map +0 -1
  34. package/src/lib/storage/azure.storage.d.ts +0 -18
  35. package/src/lib/storage/azure.storage.js +0 -153
  36. package/src/lib/storage/azure.storage.js.map +0 -1
  37. package/src/lib/storage/local.storage.d.ts +0 -17
  38. package/src/lib/storage/local.storage.js +0 -133
  39. package/src/lib/storage/local.storage.js.map +0 -1
  40. package/src/lib/storage/s3.storage.d.ts +0 -19
  41. package/src/lib/storage/s3.storage.js +0 -212
  42. package/src/lib/storage/s3.storage.js.map +0 -1
  43. package/src/lib/storage.factory.d.ts +0 -8
  44. package/src/lib/storage.factory.js +0 -49
  45. package/src/lib/storage.factory.js.map +0 -1
  46. package/src/lib/types.js +0 -10
  47. package/src/lib/types.js.map +0 -1
  48. package/tsconfig.tsbuildinfo +0 -1
  49. /package/src/{index.d.ts → index.ts} +0 -0
  50. /package/src/lib/{index.d.ts → index.ts} +0 -0
@@ -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,8 +0,0 @@
1
- import { DynamicModule } from '@nestjs/common';
2
- import { FileStorageAsyncOptions, FileStorageModuleOptions } from './types';
3
- export declare class NestFileStorageModule {
4
- static forRoot(options: FileStorageModuleOptions): DynamicModule;
5
- static forRootAsync(options: FileStorageAsyncOptions): DynamicModule;
6
- private static createAsyncProviders;
7
- private static createAsyncOptionsProvider;
8
- }
@@ -1,75 +0,0 @@
1
- "use strict";
2
- var NestFileStorageModule_1;
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.NestFileStorageModule = void 0;
5
- const tslib_1 = require("tslib");
6
- const common_1 = require("@nestjs/common");
7
- const constants_1 = require("./constants");
8
- const file_storage_service_1 = require("./file-storage.service");
9
- let NestFileStorageModule = NestFileStorageModule_1 = class NestFileStorageModule {
10
- static forRoot(options) {
11
- return {
12
- module: NestFileStorageModule_1,
13
- providers: [
14
- {
15
- provide: constants_1.FILE_STORAGE_OPTIONS,
16
- useFactory: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
17
- file_storage_service_1.FileStorageService.setOptions(options);
18
- return options;
19
- }),
20
- inject: [],
21
- },
22
- file_storage_service_1.FileStorageService,
23
- ],
24
- exports: [],
25
- };
26
- }
27
- static forRootAsync(options) {
28
- const asyncProviders = this.createAsyncProviders(options);
29
- return {
30
- module: NestFileStorageModule_1,
31
- imports: options.imports || [],
32
- providers: [...asyncProviders, file_storage_service_1.FileStorageService],
33
- exports: [],
34
- };
35
- }
36
- static createAsyncProviders(options) {
37
- if (options.useExisting || options.useFactory) {
38
- return [this.createAsyncOptionsProvider(options)];
39
- }
40
- return [
41
- this.createAsyncOptionsProvider(options),
42
- {
43
- provide: options.useClass,
44
- useClass: options.useClass,
45
- },
46
- ];
47
- }
48
- static createAsyncOptionsProvider(options) {
49
- if (options.useFactory) {
50
- return {
51
- provide: constants_1.FILE_STORAGE_OPTIONS,
52
- useFactory: (...args) => tslib_1.__awaiter(this, void 0, void 0, function* () {
53
- const fileStorageOptions = yield options.useFactory(...args);
54
- file_storage_service_1.FileStorageService.setOptions(fileStorageOptions);
55
- return fileStorageOptions;
56
- }),
57
- inject: options.inject || [],
58
- };
59
- }
60
- return {
61
- provide: constants_1.FILE_STORAGE_OPTIONS,
62
- useFactory: (optionsFactory) => tslib_1.__awaiter(this, void 0, void 0, function* () {
63
- const fileStorageOptions = yield optionsFactory.createFileStorageOptions();
64
- file_storage_service_1.FileStorageService.setOptions(fileStorageOptions);
65
- return fileStorageOptions;
66
- }),
67
- inject: [options.useExisting || options.useClass],
68
- };
69
- }
70
- };
71
- exports.NestFileStorageModule = NestFileStorageModule;
72
- exports.NestFileStorageModule = NestFileStorageModule = NestFileStorageModule_1 = tslib_1.__decorate([
73
- (0, common_1.Module)({})
74
- ], NestFileStorageModule);
75
- //# sourceMappingURL=nest-file-storage.module.js.map
@@ -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,18 +0,0 @@
1
- import { BlobSASSignatureValues } from '@azure/storage-blob';
2
- import { StorageEngine } from 'multer';
3
- import { AzureStorageOptions, Storage, UploadedFile } from '../types';
4
- export declare class AzureStorage implements StorageEngine, Storage {
5
- private options;
6
- private blobServiceClient;
7
- private fileNameFunction;
8
- private fileDistFunction;
9
- constructor(options: AzureStorageOptions);
10
- _handleFile(req: any, file: any, cb: (error?: any, info?: any) => void): Promise<void>;
11
- _removeFile(_req: any, file: any, cb: (error: Error | null) => void): Promise<void>;
12
- getUrl(key: string): string;
13
- getSignedUrl(key: string, signatureValues?: Partial<Omit<BlobSASSignatureValues, 'containerName'>>): string;
14
- getFile(key: string): Promise<Buffer>;
15
- putFile(buffer: Buffer, key: string): Promise<UploadedFile>;
16
- deleteFile(key: string): Promise<void>;
17
- copyFile(oldKey: string, newKey: string): Promise<UploadedFile>;
18
- }
@@ -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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"}
@@ -1,19 +0,0 @@
1
- import { GetObjectCommandInput } from '@aws-sdk/client-s3';
2
- import { StorageEngine } from 'multer';
3
- import { S3StorageOptions, Storage, UploadedFile } from '../types';
4
- export declare class S3Storage implements StorageEngine, Storage {
5
- private options;
6
- private s3;
7
- private fileNameFunction;
8
- private fileDistFunction;
9
- constructor(options: S3StorageOptions);
10
- _handleFile(req: any, file: Express.Multer.File, cb: (error?: any, info?: any) => void): Promise<void>;
11
- _removeFile(_req: any, file: any, cb: (error: Error | null) => void): void;
12
- getUrl(key: string): string;
13
- getSignedUrl(key: string, objectConfig?: Partial<GetObjectCommandInput>): Promise<string>;
14
- getFile(key: string): Promise<Buffer>;
15
- putFile(fileContent: Buffer, key: string): Promise<any>;
16
- deleteFile(key: string): Promise<void>;
17
- private streamToBuffer;
18
- copyFile(oldKey: string, newKey: string): Promise<UploadedFile>;
19
- }