@flusys/nestjs-storage 7.1.0 → 8.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.
- package/config/index.d.ts +3 -3
- package/controllers/file-manager.controller.d.ts +4 -4
- package/controllers/folder.controller.d.ts +2 -2
- package/controllers/index.d.ts +4 -4
- package/controllers/storage-config.controller.d.ts +2 -2
- package/controllers/upload.controller.d.ts +3 -3
- package/docs/index.d.ts +1 -1
- package/docs/storage-swagger.config.d.ts +2 -2
- package/dtos/index.d.ts +4 -4
- package/entities/file-manager-with-company.entity.d.ts +2 -2
- package/entities/file-manager.entity.d.ts +1 -1
- package/entities/folder-with-company.entity.d.ts +1 -1
- package/entities/index.d.ts +15 -15
- package/entities/storage-config-with-company.entity.d.ts +1 -1
- package/enums/index.d.ts +1 -1
- package/fesm/493.js +2768 -0
- package/fesm/537.js +1157 -0
- package/fesm/562.js +786 -0
- package/fesm/{providers/azure-provider.optional.js → chunks/190.js} +33 -30
- package/fesm/chunks/252.js +12 -0
- package/fesm/chunks/327.js +12 -0
- package/fesm/chunks/385.js +12 -0
- package/fesm/{providers/s3-provider.optional.js → chunks/591.js} +37 -34
- package/fesm/chunks/746.js +12 -0
- package/fesm/chunks/798.js +12 -0
- package/fesm/{providers/sftp-provider.optional.js → chunks/918.js} +35 -31
- package/fesm/config/index.js +119 -3
- package/fesm/controllers/index.js +16 -4
- package/fesm/docs/index.js +206 -1
- package/fesm/dtos/index.js +879 -4
- package/fesm/entities/index.js +463 -18
- package/fesm/enums/index.js +36 -1
- package/fesm/index.js +398 -12
- package/fesm/interfaces/index.js +19 -5
- package/fesm/modules/index.js +16 -1
- package/fesm/providers/index.js +364 -3
- package/fesm/runtime.js +252 -0
- package/fesm/services/index.js +16 -6
- package/fesm/utils/index.js +149 -1
- package/index.d.ts +11 -11
- package/interfaces/file-manager.interface.d.ts +1 -1
- package/interfaces/folder.interface.d.ts +1 -1
- package/interfaces/index.d.ts +5 -5
- package/interfaces/storage-config.interface.d.ts +1 -1
- package/interfaces/storage-module-options.interface.d.ts +3 -3
- package/interfaces/storage-provider.interface.d.ts +1 -1
- package/middlewares/file-serve.middleware.d.ts +4 -3
- package/middlewares/index.d.ts +1 -1
- package/modules/index.d.ts +1 -1
- package/modules/storage.module.d.ts +2 -2
- package/package.json +30 -41
- package/providers/azure-provider.optional.d.ts +2 -2
- package/providers/index.d.ts +3 -3
- package/providers/local-provider.d.ts +2 -2
- package/providers/s3-provider.optional.d.ts +2 -2
- package/providers/sftp-provider.optional.d.ts +2 -2
- package/providers/storage-factory.service.d.ts +3 -3
- package/providers/storage-provider.registry.d.ts +2 -2
- package/services/file-manager.service.d.ts +9 -8
- package/services/folder.service.d.ts +6 -6
- package/services/index.d.ts +6 -6
- package/services/storage-config.service.d.ts +3 -3
- package/services/storage-datasource.provider.d.ts +3 -3
- package/services/storage-provider-config.service.d.ts +7 -7
- package/services/upload.service.d.ts +6 -6
- package/utils/image-compressor.util.d.ts +1 -1
- package/utils/index.d.ts +1 -1
- package/cjs/config/event-actions.js +0 -34
- package/cjs/config/index.js +0 -20
- package/cjs/config/message-keys.js +0 -46
- package/cjs/config/storage.constants.js +0 -28
- package/cjs/controllers/file-manager.controller.js +0 -152
- package/cjs/controllers/file-manager.controller.spec.js +0 -135
- package/cjs/controllers/folder.controller.js +0 -102
- package/cjs/controllers/folder.controller.spec.js +0 -86
- package/cjs/controllers/index.js +0 -21
- package/cjs/controllers/storage-config.controller.js +0 -102
- package/cjs/controllers/storage-config.controller.spec.js +0 -85
- package/cjs/controllers/upload.controller.js +0 -234
- package/cjs/controllers/upload.controller.spec.js +0 -132
- package/cjs/docs/index.js +0 -11
- package/cjs/docs/storage-swagger.config.js +0 -188
- package/cjs/docs/storage-swagger.config.spec.js +0 -72
- package/cjs/dtos/file-manager.dto.js +0 -327
- package/cjs/dtos/folder.dto.js +0 -105
- package/cjs/dtos/index.js +0 -21
- package/cjs/dtos/storage-config.dto.js +0 -170
- package/cjs/dtos/upload.dto.js +0 -272
- package/cjs/entities/file-manager-with-company.entity.js +0 -61
- package/cjs/entities/file-manager.entity.js +0 -122
- package/cjs/entities/folder-with-company.entity.js +0 -55
- package/cjs/entities/folder.entity.js +0 -64
- package/cjs/entities/index.js +0 -63
- package/cjs/entities/index.spec.js +0 -18
- package/cjs/entities/storage-config-with-company.entity.js +0 -51
- package/cjs/entities/storage-config.entity.js +0 -96
- package/cjs/enums/file-location.enum.js +0 -17
- package/cjs/enums/index.js +0 -18
- package/cjs/index.js +0 -29
- package/cjs/interfaces/file-manager.interface.js +0 -4
- package/cjs/interfaces/folder.interface.js +0 -4
- package/cjs/interfaces/index.js +0 -22
- package/cjs/interfaces/storage-config.interface.js +0 -4
- package/cjs/interfaces/storage-module-options.interface.js +0 -4
- package/cjs/interfaces/storage-provider.interface.js +0 -4
- package/cjs/middlewares/file-serve.middleware.js +0 -241
- package/cjs/middlewares/file-serve.middleware.spec.js +0 -211
- package/cjs/middlewares/index.js +0 -18
- package/cjs/modules/index.js +0 -18
- package/cjs/modules/storage.module.js +0 -165
- package/cjs/modules/storage.module.spec.js +0 -184
- package/cjs/providers/azure-provider.optional.js +0 -155
- package/cjs/providers/azure-provider.optional.spec.js +0 -228
- package/cjs/providers/index.js +0 -26
- package/cjs/providers/local-provider.js +0 -230
- package/cjs/providers/local-provider.spec.js +0 -239
- package/cjs/providers/s3-provider.optional.js +0 -175
- package/cjs/providers/s3-provider.optional.spec.js +0 -243
- package/cjs/providers/sftp-provider.optional.js +0 -203
- package/cjs/providers/sftp-provider.optional.spec.js +0 -217
- package/cjs/providers/storage-factory.service.js +0 -175
- package/cjs/providers/storage-factory.service.spec.js +0 -253
- package/cjs/providers/storage-provider.registry.js +0 -41
- package/cjs/providers/storage-provider.registry.spec.js +0 -67
- package/cjs/services/file-manager.service.js +0 -387
- package/cjs/services/file-manager.service.spec.js +0 -580
- package/cjs/services/folder.service.js +0 -101
- package/cjs/services/folder.service.spec.js +0 -167
- package/cjs/services/index.js +0 -23
- package/cjs/services/storage-config.service.js +0 -129
- package/cjs/services/storage-config.service.spec.js +0 -257
- package/cjs/services/storage-datasource.provider.js +0 -137
- package/cjs/services/storage-datasource.provider.spec.js +0 -217
- package/cjs/services/storage-provider-config.service.js +0 -171
- package/cjs/services/storage-provider-config.service.spec.js +0 -265
- package/cjs/services/upload.service.js +0 -376
- package/cjs/services/upload.service.spec.js +0 -426
- package/cjs/utils/file-validator.util.js +0 -440
- package/cjs/utils/file-validator.util.spec.js +0 -259
- package/cjs/utils/image-compressor.util.js +0 -162
- package/cjs/utils/image-compressor.util.spec.js +0 -166
- package/cjs/utils/index.js +0 -18
- package/fesm/config/event-actions.js +0 -13
- package/fesm/config/message-keys.js +0 -22
- package/fesm/config/storage.constants.js +0 -7
- package/fesm/controllers/file-manager.controller.js +0 -142
- package/fesm/controllers/file-manager.controller.spec.js +0 -131
- package/fesm/controllers/folder.controller.js +0 -92
- package/fesm/controllers/folder.controller.spec.js +0 -82
- package/fesm/controllers/storage-config.controller.js +0 -92
- package/fesm/controllers/storage-config.controller.spec.js +0 -81
- package/fesm/controllers/upload.controller.js +0 -224
- package/fesm/controllers/upload.controller.spec.js +0 -128
- package/fesm/docs/storage-swagger.config.js +0 -181
- package/fesm/docs/storage-swagger.config.spec.js +0 -68
- package/fesm/dtos/file-manager.dto.js +0 -300
- package/fesm/dtos/folder.dto.js +0 -84
- package/fesm/dtos/storage-config.dto.js +0 -149
- package/fesm/dtos/upload.dto.js +0 -245
- package/fesm/entities/file-manager-with-company.entity.js +0 -51
- package/fesm/entities/file-manager.entity.js +0 -112
- package/fesm/entities/folder-with-company.entity.js +0 -45
- package/fesm/entities/folder.entity.js +0 -54
- package/fesm/entities/index.spec.js +0 -14
- package/fesm/entities/storage-config-with-company.entity.js +0 -41
- package/fesm/entities/storage-config.entity.js +0 -86
- package/fesm/enums/file-location.enum.js +0 -7
- package/fesm/interfaces/file-manager.interface.js +0 -1
- package/fesm/interfaces/folder.interface.js +0 -1
- package/fesm/interfaces/storage-config.interface.js +0 -1
- package/fesm/interfaces/storage-module-options.interface.js +0 -3
- package/fesm/interfaces/storage-provider.interface.js +0 -4
- package/fesm/middlewares/file-serve.middleware.js +0 -190
- package/fesm/middlewares/file-serve.middleware.spec.js +0 -207
- package/fesm/middlewares/index.js +0 -1
- package/fesm/modules/storage.module.js +0 -156
- package/fesm/modules/storage.module.spec.js +0 -180
- package/fesm/providers/azure-provider.optional.spec.js +0 -224
- package/fesm/providers/local-provider.js +0 -182
- package/fesm/providers/local-provider.spec.js +0 -194
- package/fesm/providers/s3-provider.optional.spec.js +0 -239
- package/fesm/providers/sftp-provider.optional.spec.js +0 -213
- package/fesm/providers/storage-factory.service.js +0 -124
- package/fesm/providers/storage-factory.service.spec.js +0 -249
- package/fesm/providers/storage-provider.registry.js +0 -34
- package/fesm/providers/storage-provider.registry.spec.js +0 -63
- package/fesm/services/file-manager.service.js +0 -336
- package/fesm/services/file-manager.service.spec.js +0 -576
- package/fesm/services/folder.service.js +0 -91
- package/fesm/services/folder.service.spec.js +0 -163
- package/fesm/services/storage-config.service.js +0 -119
- package/fesm/services/storage-config.service.spec.js +0 -253
- package/fesm/services/storage-datasource.provider.js +0 -86
- package/fesm/services/storage-datasource.provider.spec.js +0 -172
- package/fesm/services/storage-provider-config.service.js +0 -161
- package/fesm/services/storage-provider-config.service.spec.js +0 -261
- package/fesm/services/upload.service.js +0 -366
- package/fesm/services/upload.service.spec.js +0 -422
- package/fesm/utils/file-validator.util.js +0 -433
- package/fesm/utils/file-validator.util.spec.js +0 -255
- package/fesm/utils/image-compressor.util.js +0 -114
- package/fesm/utils/image-compressor.util.spec.js +0 -162
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "StorageDataSourceProvider", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return StorageDataSourceProvider;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _modules = require("@flusys/nestjs-shared/modules");
|
|
12
|
-
const _common = require("@nestjs/common");
|
|
13
|
-
const _core = require("@nestjs/core");
|
|
14
|
-
const _express = require("express");
|
|
15
|
-
const _storageconfigservice = require("./storage-config.service");
|
|
16
|
-
function _define_property(obj, key, value) {
|
|
17
|
-
if (key in obj) {
|
|
18
|
-
Object.defineProperty(obj, key, {
|
|
19
|
-
value: value,
|
|
20
|
-
enumerable: true,
|
|
21
|
-
configurable: true,
|
|
22
|
-
writable: true
|
|
23
|
-
});
|
|
24
|
-
} else {
|
|
25
|
-
obj[key] = value;
|
|
26
|
-
}
|
|
27
|
-
return obj;
|
|
28
|
-
}
|
|
29
|
-
function _getRequireWildcardCache(nodeInterop) {
|
|
30
|
-
if (typeof WeakMap !== "function") return null;
|
|
31
|
-
var cacheBabelInterop = new WeakMap();
|
|
32
|
-
var cacheNodeInterop = new WeakMap();
|
|
33
|
-
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
34
|
-
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
35
|
-
})(nodeInterop);
|
|
36
|
-
}
|
|
37
|
-
function _interop_require_wildcard(obj, nodeInterop) {
|
|
38
|
-
if (!nodeInterop && obj && obj.__esModule) {
|
|
39
|
-
return obj;
|
|
40
|
-
}
|
|
41
|
-
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
42
|
-
return {
|
|
43
|
-
default: obj
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
var cache = _getRequireWildcardCache(nodeInterop);
|
|
47
|
-
if (cache && cache.has(obj)) {
|
|
48
|
-
return cache.get(obj);
|
|
49
|
-
}
|
|
50
|
-
var newObj = {
|
|
51
|
-
__proto__: null
|
|
52
|
-
};
|
|
53
|
-
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
54
|
-
for(var key in obj){
|
|
55
|
-
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
56
|
-
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
57
|
-
if (desc && (desc.get || desc.set)) {
|
|
58
|
-
Object.defineProperty(newObj, key, desc);
|
|
59
|
-
} else {
|
|
60
|
-
newObj[key] = obj[key];
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
newObj.default = obj;
|
|
65
|
-
if (cache) {
|
|
66
|
-
cache.set(obj, newObj);
|
|
67
|
-
}
|
|
68
|
-
return newObj;
|
|
69
|
-
}
|
|
70
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
71
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
72
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
73
|
-
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;
|
|
74
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
75
|
-
}
|
|
76
|
-
function _ts_metadata(k, v) {
|
|
77
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
78
|
-
}
|
|
79
|
-
function _ts_param(paramIndex, decorator) {
|
|
80
|
-
return function(target, key) {
|
|
81
|
-
decorator(target, key, paramIndex);
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
let StorageDataSourceProvider = class StorageDataSourceProvider extends _modules.MultiTenantDataSourceService {
|
|
85
|
-
static buildParentOptions(options) {
|
|
86
|
-
return {
|
|
87
|
-
bootstrapAppConfig: options.bootstrapAppConfig,
|
|
88
|
-
defaultDatabaseConfig: options.config?.defaultDatabaseConfig,
|
|
89
|
-
tenantDefaultDatabaseConfig: options.config?.tenantDefaultDatabaseConfig,
|
|
90
|
-
tenants: options.config?.tenants
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
getEnableCompanyFeatureForTenant(tenant) {
|
|
94
|
-
return tenant?.enableCompanyFeature ?? this.configService.isCompanyFeatureEnabled();
|
|
95
|
-
}
|
|
96
|
-
async getStorageEntities(enableCompanyFeature) {
|
|
97
|
-
const enable = enableCompanyFeature ?? this.configService.isCompanyFeatureEnabled();
|
|
98
|
-
const entities = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../entities")));
|
|
99
|
-
return enable ? [
|
|
100
|
-
entities.FileManagerWithCompany,
|
|
101
|
-
entities.FolderWithCompany,
|
|
102
|
-
entities.StorageConfigWithCompany
|
|
103
|
-
] : [
|
|
104
|
-
entities.FileManager,
|
|
105
|
-
entities.Folder,
|
|
106
|
-
entities.StorageConfig
|
|
107
|
-
];
|
|
108
|
-
}
|
|
109
|
-
async createDataSourceFromConfig(config) {
|
|
110
|
-
const currentTenant = this.getCurrentTenant();
|
|
111
|
-
const enableCompanyFeature = this.getEnableCompanyFeatureForTenant(currentTenant ?? undefined);
|
|
112
|
-
const entities = await this.getStorageEntities(enableCompanyFeature);
|
|
113
|
-
return super.createDataSourceFromConfig(config, entities);
|
|
114
|
-
}
|
|
115
|
-
constructor(configService, request){
|
|
116
|
-
super(StorageDataSourceProvider.buildParentOptions(configService.getOptions()), request), _define_property(this, "configService", void 0), this.configService = configService;
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
_define_property(StorageDataSourceProvider, "tenantConnections", new Map());
|
|
120
|
-
_define_property(StorageDataSourceProvider, "singleDataSource", null);
|
|
121
|
-
_define_property(StorageDataSourceProvider, "tenantsRegistry", new Map());
|
|
122
|
-
_define_property(StorageDataSourceProvider, "initialized", false);
|
|
123
|
-
_define_property(StorageDataSourceProvider, "connectionLocks", new Map());
|
|
124
|
-
_define_property(StorageDataSourceProvider, "singleConnectionLock", null);
|
|
125
|
-
StorageDataSourceProvider = _ts_decorate([
|
|
126
|
-
(0, _common.Injectable)({
|
|
127
|
-
scope: _common.Scope.REQUEST
|
|
128
|
-
}),
|
|
129
|
-
_ts_param(0, (0, _common.Inject)(_storageconfigservice.StorageConfigService)),
|
|
130
|
-
_ts_param(1, (0, _common.Optional)()),
|
|
131
|
-
_ts_param(1, (0, _common.Inject)(_core.REQUEST)),
|
|
132
|
-
_ts_metadata("design:type", Function),
|
|
133
|
-
_ts_metadata("design:paramtypes", [
|
|
134
|
-
typeof _storageconfigservice.StorageConfigService === "undefined" ? Object : _storageconfigservice.StorageConfigService,
|
|
135
|
-
typeof _express.Request === "undefined" ? Object : _express.Request
|
|
136
|
-
])
|
|
137
|
-
], StorageDataSourceProvider);
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
const _modules = require("@flusys/nestjs-shared/modules");
|
|
6
|
-
const _storagedatasourceprovider = require("./storage-datasource.provider");
|
|
7
|
-
const _entities = /*#__PURE__*/ _interop_require_wildcard(require("../entities"));
|
|
8
|
-
function _getRequireWildcardCache(nodeInterop) {
|
|
9
|
-
if (typeof WeakMap !== "function") return null;
|
|
10
|
-
var cacheBabelInterop = new WeakMap();
|
|
11
|
-
var cacheNodeInterop = new WeakMap();
|
|
12
|
-
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
13
|
-
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
14
|
-
})(nodeInterop);
|
|
15
|
-
}
|
|
16
|
-
function _interop_require_wildcard(obj, nodeInterop) {
|
|
17
|
-
if (!nodeInterop && obj && obj.__esModule) {
|
|
18
|
-
return obj;
|
|
19
|
-
}
|
|
20
|
-
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
21
|
-
return {
|
|
22
|
-
default: obj
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
var cache = _getRequireWildcardCache(nodeInterop);
|
|
26
|
-
if (cache && cache.has(obj)) {
|
|
27
|
-
return cache.get(obj);
|
|
28
|
-
}
|
|
29
|
-
var newObj = {
|
|
30
|
-
__proto__: null
|
|
31
|
-
};
|
|
32
|
-
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
33
|
-
for(var key in obj){
|
|
34
|
-
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
35
|
-
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
36
|
-
if (desc && (desc.get || desc.set)) {
|
|
37
|
-
Object.defineProperty(newObj, key, desc);
|
|
38
|
-
} else {
|
|
39
|
-
newObj[key] = obj[key];
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
newObj.default = obj;
|
|
44
|
-
if (cache) {
|
|
45
|
-
cache.set(obj, newObj);
|
|
46
|
-
}
|
|
47
|
-
return newObj;
|
|
48
|
-
}
|
|
49
|
-
function buildMockConfigService(overrides = {}) {
|
|
50
|
-
const options = {
|
|
51
|
-
bootstrapAppConfig: {
|
|
52
|
-
databaseMode: 'single',
|
|
53
|
-
enableCompanyFeature: false
|
|
54
|
-
},
|
|
55
|
-
config: {},
|
|
56
|
-
...overrides
|
|
57
|
-
};
|
|
58
|
-
return {
|
|
59
|
-
isCompanyFeatureEnabled: jest.fn().mockReturnValue(options.bootstrapAppConfig?.enableCompanyFeature ?? false),
|
|
60
|
-
getOptions: jest.fn().mockReturnValue(options)
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
describe('StorageDataSourceProvider', ()=>{
|
|
64
|
-
afterEach(()=>{
|
|
65
|
-
jest.restoreAllMocks();
|
|
66
|
-
});
|
|
67
|
-
describe('construction', ()=>{
|
|
68
|
-
it('propagates bootstrap options from StorageConfigService into the parent data-source service', ()=>{
|
|
69
|
-
const configService = buildMockConfigService({
|
|
70
|
-
bootstrapAppConfig: {
|
|
71
|
-
databaseMode: 'multi-tenant',
|
|
72
|
-
enableCompanyFeature: true
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
const provider = new _storagedatasourceprovider.StorageDataSourceProvider(configService);
|
|
76
|
-
expect(provider.getDatabaseMode()).toBe('multi-tenant');
|
|
77
|
-
expect(provider.isMultiTenant()).toBe(true);
|
|
78
|
-
});
|
|
79
|
-
it('defaults to single database mode when bootstrap config is absent', ()=>{
|
|
80
|
-
const configService = buildMockConfigService({
|
|
81
|
-
bootstrapAppConfig: undefined
|
|
82
|
-
});
|
|
83
|
-
const provider = new _storagedatasourceprovider.StorageDataSourceProvider(configService);
|
|
84
|
-
expect(provider.getDatabaseMode()).toBe('single');
|
|
85
|
-
expect(provider.isMultiTenant()).toBe(false);
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
describe('getEnableCompanyFeatureForTenant', ()=>{
|
|
89
|
-
it('uses the tenant-level override when provided', ()=>{
|
|
90
|
-
const configService = buildMockConfigService();
|
|
91
|
-
const provider = new _storagedatasourceprovider.StorageDataSourceProvider(configService);
|
|
92
|
-
const result = provider.getEnableCompanyFeatureForTenant({
|
|
93
|
-
id: 'tenant-1',
|
|
94
|
-
enableCompanyFeature: true
|
|
95
|
-
});
|
|
96
|
-
expect(result).toBe(true);
|
|
97
|
-
});
|
|
98
|
-
it('falls back to global config when tenant has no override', ()=>{
|
|
99
|
-
const configService = buildMockConfigService({
|
|
100
|
-
bootstrapAppConfig: {
|
|
101
|
-
databaseMode: 'single',
|
|
102
|
-
enableCompanyFeature: true
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
const provider = new _storagedatasourceprovider.StorageDataSourceProvider(configService);
|
|
106
|
-
const result = provider.getEnableCompanyFeatureForTenant({
|
|
107
|
-
id: 'tenant-1'
|
|
108
|
-
});
|
|
109
|
-
expect(result).toBe(true);
|
|
110
|
-
});
|
|
111
|
-
it('falls back to global config when no tenant is provided', ()=>{
|
|
112
|
-
const configService = buildMockConfigService({
|
|
113
|
-
bootstrapAppConfig: {
|
|
114
|
-
databaseMode: 'single',
|
|
115
|
-
enableCompanyFeature: false
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
const provider = new _storagedatasourceprovider.StorageDataSourceProvider(configService);
|
|
119
|
-
expect(provider.getEnableCompanyFeatureForTenant(undefined)).toBe(false);
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
describe('getStorageEntities', ()=>{
|
|
123
|
-
it('returns company-scoped entities when company feature is enabled', async ()=>{
|
|
124
|
-
const configService = buildMockConfigService();
|
|
125
|
-
const provider = new _storagedatasourceprovider.StorageDataSourceProvider(configService);
|
|
126
|
-
const result = await provider.getStorageEntities(true);
|
|
127
|
-
expect(result).toEqual([
|
|
128
|
-
_entities.FileManagerWithCompany,
|
|
129
|
-
_entities.FolderWithCompany,
|
|
130
|
-
_entities.StorageConfigWithCompany
|
|
131
|
-
]);
|
|
132
|
-
});
|
|
133
|
-
it('returns core entities when company feature is disabled', async ()=>{
|
|
134
|
-
const configService = buildMockConfigService();
|
|
135
|
-
const provider = new _storagedatasourceprovider.StorageDataSourceProvider(configService);
|
|
136
|
-
const result = await provider.getStorageEntities(false);
|
|
137
|
-
expect(result).toEqual([
|
|
138
|
-
_entities.FileManager,
|
|
139
|
-
_entities.Folder,
|
|
140
|
-
_entities.StorageConfig
|
|
141
|
-
]);
|
|
142
|
-
});
|
|
143
|
-
it('falls back to the config service value when no explicit flag is passed', async ()=>{
|
|
144
|
-
const configService = buildMockConfigService({
|
|
145
|
-
bootstrapAppConfig: {
|
|
146
|
-
databaseMode: 'single',
|
|
147
|
-
enableCompanyFeature: true
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
const provider = new _storagedatasourceprovider.StorageDataSourceProvider(configService);
|
|
151
|
-
const result = await provider.getStorageEntities();
|
|
152
|
-
expect(result).toEqual([
|
|
153
|
-
_entities.FileManagerWithCompany,
|
|
154
|
-
_entities.FolderWithCompany,
|
|
155
|
-
_entities.StorageConfigWithCompany
|
|
156
|
-
]);
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
describe('createDataSourceFromConfig', ()=>{
|
|
160
|
-
it('resolves storage entities for the current tenant/config and delegates to the parent implementation', async ()=>{
|
|
161
|
-
const configService = buildMockConfigService({
|
|
162
|
-
bootstrapAppConfig: {
|
|
163
|
-
databaseMode: 'single',
|
|
164
|
-
enableCompanyFeature: false
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
const provider = new _storagedatasourceprovider.StorageDataSourceProvider(configService);
|
|
168
|
-
jest.spyOn(provider, 'getCurrentTenant').mockReturnValue(null);
|
|
169
|
-
const superCreateSpy = jest.spyOn(_modules.MultiTenantDataSourceService.prototype, 'createDataSourceFromConfig').mockResolvedValue({
|
|
170
|
-
isInitialized: true
|
|
171
|
-
});
|
|
172
|
-
const config = {
|
|
173
|
-
type: 'mysql',
|
|
174
|
-
host: 'localhost',
|
|
175
|
-
port: 3306,
|
|
176
|
-
username: 'root',
|
|
177
|
-
password: '',
|
|
178
|
-
database: 'test'
|
|
179
|
-
};
|
|
180
|
-
const result = await provider.createDataSourceFromConfig(config);
|
|
181
|
-
expect(superCreateSpy).toHaveBeenCalledWith(config, [
|
|
182
|
-
_entities.FileManager,
|
|
183
|
-
_entities.Folder,
|
|
184
|
-
_entities.StorageConfig
|
|
185
|
-
]);
|
|
186
|
-
expect(result).toEqual({
|
|
187
|
-
isInitialized: true
|
|
188
|
-
});
|
|
189
|
-
});
|
|
190
|
-
it('uses the tenant enableCompanyFeature override to pick company-scoped entities', async ()=>{
|
|
191
|
-
const configService = buildMockConfigService({
|
|
192
|
-
bootstrapAppConfig: {
|
|
193
|
-
databaseMode: 'multi-tenant',
|
|
194
|
-
enableCompanyFeature: false
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
const provider = new _storagedatasourceprovider.StorageDataSourceProvider(configService);
|
|
198
|
-
jest.spyOn(provider, 'getCurrentTenant').mockReturnValue({
|
|
199
|
-
id: 'tenant-1',
|
|
200
|
-
enableCompanyFeature: true
|
|
201
|
-
});
|
|
202
|
-
const superCreateSpy = jest.spyOn(_modules.MultiTenantDataSourceService.prototype, 'createDataSourceFromConfig').mockResolvedValue({
|
|
203
|
-
isInitialized: true
|
|
204
|
-
});
|
|
205
|
-
const config = {
|
|
206
|
-
type: 'mysql',
|
|
207
|
-
database: 'tenant_db'
|
|
208
|
-
};
|
|
209
|
-
await provider.createDataSourceFromConfig(config);
|
|
210
|
-
expect(superCreateSpy).toHaveBeenCalledWith(config, [
|
|
211
|
-
_entities.FileManagerWithCompany,
|
|
212
|
-
_entities.FolderWithCompany,
|
|
213
|
-
_entities.StorageConfigWithCompany
|
|
214
|
-
]);
|
|
215
|
-
});
|
|
216
|
-
});
|
|
217
|
-
});
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "StorageProviderConfigService", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return StorageProviderConfigService;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _classes = require("@flusys/nestjs-shared/classes");
|
|
12
|
-
const _modules = require("@flusys/nestjs-shared/modules");
|
|
13
|
-
const _utils = require("@flusys/nestjs-shared/utils");
|
|
14
|
-
const _common = require("@nestjs/common");
|
|
15
|
-
const _typeorm = require("typeorm");
|
|
16
|
-
const _config = require("../config");
|
|
17
|
-
const _entities = require("../entities");
|
|
18
|
-
const _storageconfigservice = require("./storage-config.service");
|
|
19
|
-
const _storagedatasourceprovider = require("./storage-datasource.provider");
|
|
20
|
-
function _define_property(obj, key, value) {
|
|
21
|
-
if (key in obj) {
|
|
22
|
-
Object.defineProperty(obj, key, {
|
|
23
|
-
value: value,
|
|
24
|
-
enumerable: true,
|
|
25
|
-
configurable: true,
|
|
26
|
-
writable: true
|
|
27
|
-
});
|
|
28
|
-
} else {
|
|
29
|
-
obj[key] = value;
|
|
30
|
-
}
|
|
31
|
-
return obj;
|
|
32
|
-
}
|
|
33
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
34
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
35
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
36
|
-
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;
|
|
37
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
38
|
-
}
|
|
39
|
-
function _ts_metadata(k, v) {
|
|
40
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
41
|
-
}
|
|
42
|
-
function _ts_param(paramIndex, decorator) {
|
|
43
|
-
return function(target, key) {
|
|
44
|
-
decorator(target, key, paramIndex);
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
let StorageProviderConfigService = class StorageProviderConfigService extends _classes.ApiService {
|
|
48
|
-
async beforeDeleteOperation(dto, _user, _queryRunner) {
|
|
49
|
-
const ids = Array.isArray(dto.id) ? dto.id : [
|
|
50
|
-
dto.id
|
|
51
|
-
];
|
|
52
|
-
await this.ensureDataSourceRepository();
|
|
53
|
-
const defaultConfigs = await this.repository.find({
|
|
54
|
-
where: {
|
|
55
|
-
id: (0, _typeorm.In)(ids),
|
|
56
|
-
isDefault: true,
|
|
57
|
-
deletedAt: (0, _typeorm.IsNull)()
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
if (defaultConfigs.length > 0) {
|
|
61
|
-
const names = defaultConfigs.map((c)=>c.name).join(', ');
|
|
62
|
-
throw new _common.ForbiddenException({
|
|
63
|
-
message: `Cannot delete the default storage config(s): ${names}. Set another config as default first.`,
|
|
64
|
-
messageKey: _config.STORAGE_CONFIG_MESSAGES.DEFAULT_DELETE_FORBIDDEN,
|
|
65
|
-
messageVariables: {
|
|
66
|
-
names
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
// ─── Override Methods ───────────────────────────────────────────────────────
|
|
72
|
-
async convertSingleDtoToEntity(dto, user) {
|
|
73
|
-
const entity = await super.convertSingleDtoToEntity(dto, user);
|
|
74
|
-
if (this.storageConfig.isCompanyFeatureEnabled()) {
|
|
75
|
-
entity.companyId = user?.companyId ?? null;
|
|
76
|
-
}
|
|
77
|
-
return entity;
|
|
78
|
-
}
|
|
79
|
-
async getSelectQuery(query, _user, select) {
|
|
80
|
-
if (!select?.length) {
|
|
81
|
-
select = [
|
|
82
|
-
'id',
|
|
83
|
-
'name',
|
|
84
|
-
'storage',
|
|
85
|
-
'config',
|
|
86
|
-
'isActive',
|
|
87
|
-
'isDefault',
|
|
88
|
-
'createdAt',
|
|
89
|
-
'updatedAt'
|
|
90
|
-
];
|
|
91
|
-
if (this.storageConfig.isCompanyFeatureEnabled()) {
|
|
92
|
-
select.push('companyId');
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
query.select(select.map((f)=>`${this.entityName}.${f}`));
|
|
96
|
-
return {
|
|
97
|
-
query,
|
|
98
|
-
isRaw: false
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
async getExtraManipulateQuery(query, filterDto, user) {
|
|
102
|
-
const result = await super.getExtraManipulateQuery(query, filterDto, user);
|
|
103
|
-
(0, _utils.applyCompanyFilter)(query, {
|
|
104
|
-
isCompanyFeatureEnabled: this.storageConfig.isCompanyFeatureEnabled(),
|
|
105
|
-
entityAlias: 'storageConfig'
|
|
106
|
-
}, user);
|
|
107
|
-
query.orderBy(`${this.entityName}.createdAt`, 'DESC');
|
|
108
|
-
return result;
|
|
109
|
-
}
|
|
110
|
-
async findByIdDirect(id) {
|
|
111
|
-
await this.ensureDataSourceRepository();
|
|
112
|
-
return await this.repository.findOne({
|
|
113
|
-
where: {
|
|
114
|
-
id
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
async getDefaultConfig(user) {
|
|
119
|
-
await this.ensureDataSourceRepository();
|
|
120
|
-
const baseWhere = (0, _utils.buildCompanyWhereCondition)({
|
|
121
|
-
isActive: true
|
|
122
|
-
}, this.storageConfig.isCompanyFeatureEnabled(), user);
|
|
123
|
-
const defaultConfig = await this.repository.findOne({
|
|
124
|
-
where: {
|
|
125
|
-
...baseWhere,
|
|
126
|
-
isDefault: true
|
|
127
|
-
},
|
|
128
|
-
order: {
|
|
129
|
-
createdAt: 'ASC'
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
if (defaultConfig) {
|
|
133
|
-
return defaultConfig;
|
|
134
|
-
}
|
|
135
|
-
return await this.repository.findOne({
|
|
136
|
-
where: baseWhere,
|
|
137
|
-
order: {
|
|
138
|
-
createdAt: 'ASC'
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
async getConfigByType(storage, user) {
|
|
143
|
-
await this.ensureDataSourceRepository();
|
|
144
|
-
const where = (0, _utils.buildCompanyWhereCondition)({
|
|
145
|
-
storage,
|
|
146
|
-
isActive: true
|
|
147
|
-
}, this.storageConfig.isCompanyFeatureEnabled(), user);
|
|
148
|
-
return await this.repository.find({
|
|
149
|
-
where
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
constructor(cacheManager, utilsService, storageConfig, dataSourceProvider){
|
|
153
|
-
super(_config.STORAGE_EVENT_ENTITIES.STORAGE_CONFIG, cacheManager, utilsService, StorageProviderConfigService.name, true, _config.STORAGE_EVENT_MODULE, dataSourceProvider, storageConfig.isCompanyFeatureEnabled() ? _entities.StorageConfigWithCompany : _entities.StorageConfig), _define_property(this, "cacheManager", void 0), _define_property(this, "utilsService", void 0), _define_property(this, "storageConfig", void 0), this.cacheManager = cacheManager, this.utilsService = utilsService, this.storageConfig = storageConfig;
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
StorageProviderConfigService = _ts_decorate([
|
|
157
|
-
(0, _common.Injectable)({
|
|
158
|
-
scope: _common.Scope.REQUEST
|
|
159
|
-
}),
|
|
160
|
-
_ts_param(0, (0, _common.Inject)('CACHE_INSTANCE')),
|
|
161
|
-
_ts_param(1, (0, _common.Inject)(_modules.UtilsService)),
|
|
162
|
-
_ts_param(2, (0, _common.Inject)(_storageconfigservice.StorageConfigService)),
|
|
163
|
-
_ts_param(3, (0, _common.Inject)(_storagedatasourceprovider.StorageDataSourceProvider)),
|
|
164
|
-
_ts_metadata("design:type", Function),
|
|
165
|
-
_ts_metadata("design:paramtypes", [
|
|
166
|
-
typeof _classes.HybridCache === "undefined" ? Object : _classes.HybridCache,
|
|
167
|
-
typeof _modules.UtilsService === "undefined" ? Object : _modules.UtilsService,
|
|
168
|
-
typeof _storageconfigservice.StorageConfigService === "undefined" ? Object : _storageconfigservice.StorageConfigService,
|
|
169
|
-
typeof _storagedatasourceprovider.StorageDataSourceProvider === "undefined" ? Object : _storagedatasourceprovider.StorageDataSourceProvider
|
|
170
|
-
])
|
|
171
|
-
], StorageProviderConfigService);
|