nest-multi-storage 1.0.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 (54) hide show
  1. package/README.md +236 -0
  2. package/dist/drivers/azure-blob.driver.d.ts +27 -0
  3. package/dist/drivers/azure-blob.driver.d.ts.map +1 -0
  4. package/dist/drivers/azure-blob.driver.js +153 -0
  5. package/dist/drivers/azure-blob.driver.js.map +1 -0
  6. package/dist/drivers/index.d.ts +4 -0
  7. package/dist/drivers/index.d.ts.map +1 -0
  8. package/dist/drivers/index.js +20 -0
  9. package/dist/drivers/index.js.map +1 -0
  10. package/dist/drivers/local.driver.d.ts +23 -0
  11. package/dist/drivers/local.driver.d.ts.map +1 -0
  12. package/dist/drivers/local.driver.js +165 -0
  13. package/dist/drivers/local.driver.js.map +1 -0
  14. package/dist/drivers/s3.driver.d.ts +24 -0
  15. package/dist/drivers/s3.driver.d.ts.map +1 -0
  16. package/dist/drivers/s3.driver.js +178 -0
  17. package/dist/drivers/s3.driver.js.map +1 -0
  18. package/dist/index.d.ts +7 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +23 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/interfaces/index.d.ts +3 -0
  23. package/dist/interfaces/index.d.ts.map +1 -0
  24. package/dist/interfaces/index.js +19 -0
  25. package/dist/interfaces/index.js.map +1 -0
  26. package/dist/interfaces/storage-driver.interface.d.ts +31 -0
  27. package/dist/interfaces/storage-driver.interface.d.ts.map +1 -0
  28. package/dist/interfaces/storage-driver.interface.js +3 -0
  29. package/dist/interfaces/storage-driver.interface.js.map +1 -0
  30. package/dist/interfaces/storage-options.interface.d.ts +42 -0
  31. package/dist/interfaces/storage-options.interface.d.ts.map +1 -0
  32. package/dist/interfaces/storage-options.interface.js +3 -0
  33. package/dist/interfaces/storage-options.interface.js.map +1 -0
  34. package/dist/storage.constants.d.ts +4 -0
  35. package/dist/storage.constants.d.ts.map +1 -0
  36. package/dist/storage.constants.js +7 -0
  37. package/dist/storage.constants.js.map +1 -0
  38. package/dist/storage.module.d.ts +9 -0
  39. package/dist/storage.module.d.ts.map +1 -0
  40. package/dist/storage.module.js +106 -0
  41. package/dist/storage.module.js.map +1 -0
  42. package/dist/storage.service.d.ts +26 -0
  43. package/dist/storage.service.d.ts.map +1 -0
  44. package/dist/storage.service.js +89 -0
  45. package/dist/storage.service.js.map +1 -0
  46. package/dist/utils/index.d.ts +2 -0
  47. package/dist/utils/index.d.ts.map +1 -0
  48. package/dist/utils/index.js +18 -0
  49. package/dist/utils/index.js.map +1 -0
  50. package/dist/utils/path.utils.d.ts +7 -0
  51. package/dist/utils/path.utils.d.ts.map +1 -0
  52. package/dist/utils/path.utils.js +61 -0
  53. package/dist/utils/path.utils.js.map +1 -0
  54. package/package.json +63 -0
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.StorageService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const storage_constants_1 = require("./storage.constants");
18
+ let StorageService = class StorageService {
19
+ constructor(options, drivers) {
20
+ this.options = options;
21
+ this.drivers = drivers;
22
+ this.currentDisk = options.default;
23
+ }
24
+ disk(diskName) {
25
+ if (!this.drivers.has(diskName)) {
26
+ throw new Error(`Storage disk "${diskName}" is not configured`);
27
+ }
28
+ const service = Object.create(this);
29
+ service.currentDisk = diskName;
30
+ return service;
31
+ }
32
+ getDriver() {
33
+ const driver = this.drivers.get(this.currentDisk);
34
+ if (!driver) {
35
+ throw new Error(`Storage disk "${this.currentDisk}" is not configured`);
36
+ }
37
+ return driver;
38
+ }
39
+ getDisks() {
40
+ return Array.from(this.drivers.keys());
41
+ }
42
+ getDefaultDisk() {
43
+ return this.options.default;
44
+ }
45
+ async put(path, content, options) {
46
+ return this.getDriver().put(path, content, options);
47
+ }
48
+ async get(path) {
49
+ return this.getDriver().get(path);
50
+ }
51
+ async getStream(path) {
52
+ return this.getDriver().getStream(path);
53
+ }
54
+ async delete(path) {
55
+ return this.getDriver().delete(path);
56
+ }
57
+ async deleteMany(paths) {
58
+ return this.getDriver().deleteMany(paths);
59
+ }
60
+ async exists(path) {
61
+ return this.getDriver().exists(path);
62
+ }
63
+ url(path) {
64
+ return this.getDriver().url(path);
65
+ }
66
+ async signedUrl(path, expiresIn) {
67
+ return this.getDriver().signedUrl(path, expiresIn);
68
+ }
69
+ async copy(from, to) {
70
+ return this.getDriver().copy(from, to);
71
+ }
72
+ async move(from, to) {
73
+ return this.getDriver().move(from, to);
74
+ }
75
+ async stat(path) {
76
+ return this.getDriver().stat(path);
77
+ }
78
+ async list(prefix) {
79
+ return this.getDriver().list(prefix);
80
+ }
81
+ };
82
+ exports.StorageService = StorageService;
83
+ exports.StorageService = StorageService = __decorate([
84
+ (0, common_1.Injectable)(),
85
+ __param(0, (0, common_1.Inject)(storage_constants_1.STORAGE_MODULE_OPTIONS)),
86
+ __param(1, (0, common_1.Inject)(storage_constants_1.STORAGE_DRIVERS)),
87
+ __metadata("design:paramtypes", [Object, Map])
88
+ ], StorageService);
89
+ //# sourceMappingURL=storage.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.service.js","sourceRoot":"","sources":["../src/storage.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './path.utils';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./path.utils"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B"}
@@ -0,0 +1,7 @@
1
+ export declare function normalizePath(filePath: string): string;
2
+ export declare function joinPath(...paths: string[]): string;
3
+ export declare function dirname(filePath: string): string;
4
+ export declare function trimLeadingSlash(filePath: string): string;
5
+ export declare function trimTrailingSlash(filePath: string): string;
6
+ export declare function ensureTrailingSlash(filePath: string): string;
7
+ //# sourceMappingURL=path.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.utils.d.ts","sourceRoot":"","sources":["../../src/utils/path.utils.ts"],"names":[],"mappings":"AAKA,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAKD,wBAAgB,QAAQ,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAEnD;AAKD,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhD;AAKD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAKD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAKD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.normalizePath = normalizePath;
37
+ exports.joinPath = joinPath;
38
+ exports.dirname = dirname;
39
+ exports.trimLeadingSlash = trimLeadingSlash;
40
+ exports.trimTrailingSlash = trimTrailingSlash;
41
+ exports.ensureTrailingSlash = ensureTrailingSlash;
42
+ const path = __importStar(require("path"));
43
+ function normalizePath(filePath) {
44
+ return filePath.replace(/\\/g, '/');
45
+ }
46
+ function joinPath(...paths) {
47
+ return normalizePath(path.join(...paths));
48
+ }
49
+ function dirname(filePath) {
50
+ return normalizePath(path.dirname(filePath));
51
+ }
52
+ function trimLeadingSlash(filePath) {
53
+ return filePath.replace(/^\/+/, '');
54
+ }
55
+ function trimTrailingSlash(filePath) {
56
+ return filePath.replace(/\/+$/, '');
57
+ }
58
+ function ensureTrailingSlash(filePath) {
59
+ return trimTrailingSlash(filePath) + '/';
60
+ }
61
+ //# sourceMappingURL=path.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.utils.js","sourceRoot":"","sources":["../../src/utils/path.utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,sCAEC;AAKD,4BAEC;AAKD,0BAEC;AAKD,4CAEC;AAKD,8CAEC;AAKD,kDAEC;AA1CD,2CAA6B;AAK7B,SAAgB,aAAa,CAAC,QAAgB;IAC1C,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAKD,SAAgB,QAAQ,CAAC,GAAG,KAAe;IACvC,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAC9C,CAAC;AAKD,SAAgB,OAAO,CAAC,QAAgB;IACpC,OAAO,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjD,CAAC;AAKD,SAAgB,gBAAgB,CAAC,QAAgB;IAC7C,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAKD,SAAgB,iBAAiB,CAAC,QAAgB;IAC9C,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAKD,SAAgB,mBAAmB,CAAC,QAAgB;IAChD,OAAO,iBAAiB,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;AAC7C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "nest-multi-storage",
3
+ "version": "1.0.0",
4
+ "description": "A flexible multi-driver storage module for NestJS supporting S3, Azure Blob Storage, and Local File System",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "prepublishOnly": "npm run build",
16
+ "test": "jest",
17
+ "test:watch": "jest --watch",
18
+ "test:cov": "jest --coverage",
19
+ "lint": "eslint \"src/**/*.ts\"",
20
+ "format": "prettier --write \"src/**/*.ts\""
21
+ },
22
+ "keywords": [
23
+ "nestjs",
24
+ "storage",
25
+ "s3",
26
+ "azure",
27
+ "blob",
28
+ "file",
29
+ "upload",
30
+ "download",
31
+ "multi-storage"
32
+ ],
33
+ "author": "c-nutthapol",
34
+ "license": "MIT",
35
+ "peerDependencies": {
36
+ "@nestjs/common": "^10.0.0 || ^11.0.0",
37
+ "@nestjs/core": "^10.0.0 || ^11.0.0",
38
+ "reflect-metadata": "^0.1.13 || ^0.2.0",
39
+ "rxjs": "^7.0.0"
40
+ },
41
+ "dependencies": {
42
+ "@aws-sdk/client-s3": "^3.700.0",
43
+ "@aws-sdk/s3-request-presigner": "^3.700.0",
44
+ "@azure/storage-blob": "^12.26.0"
45
+ },
46
+ "devDependencies": {
47
+ "@nestjs/common": "^11.0.0",
48
+ "@nestjs/core": "^11.0.0",
49
+ "@nestjs/testing": "^11.0.0",
50
+ "@types/jest": "^29.5.14",
51
+ "@types/node": "^22.10.2",
52
+ "@typescript-eslint/eslint-plugin": "^8.18.2",
53
+ "@typescript-eslint/parser": "^8.18.2",
54
+ "eslint": "^9.17.0",
55
+ "eslint-config-prettier": "^9.1.0",
56
+ "jest": "^29.7.0",
57
+ "prettier": "^3.4.2",
58
+ "reflect-metadata": "^0.2.2",
59
+ "rxjs": "^7.8.1",
60
+ "ts-jest": "^29.2.5",
61
+ "typescript": "^5.7.2"
62
+ }
63
+ }