@flusys/nestjs-form-builder 7.1.0 → 8.0.0-beta.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/config/index.d.ts +3 -3
- package/controllers/form-result.controller.d.ts +3 -3
- package/controllers/form.controller.d.ts +3 -3
- package/controllers/index.d.ts +2 -2
- package/docs/form-builder-swagger.config.d.ts +2 -2
- package/docs/index.d.ts +1 -1
- package/dtos/form.dto.d.ts +1 -1
- package/dtos/index.d.ts +2 -2
- package/entities/form-with-company.entity.d.ts +1 -1
- package/entities/form.entity.d.ts +1 -1
- package/entities/index.d.ts +7 -7
- package/enums/index.d.ts +1 -1
- package/fesm/262.js +1841 -0
- package/fesm/98.js +807 -0
- package/fesm/config/index.js +98 -3
- package/fesm/controllers/index.js +14 -2
- package/fesm/docs/index.js +171 -1
- package/fesm/dtos/index.js +571 -2
- package/fesm/entities/index.js +342 -10
- package/fesm/enums/index.js +38 -1
- package/fesm/index.js +482 -10
- package/fesm/interfaces/index.js +17 -3
- package/fesm/modules/index.js +178 -1
- package/fesm/runtime.js +85 -0
- package/fesm/services/index.js +35 -4
- package/index.d.ts +10 -10
- package/interfaces/form-builder-module.interface.d.ts +3 -3
- package/interfaces/form-result.interface.d.ts +1 -1
- package/interfaces/form.interface.d.ts +2 -2
- package/interfaces/index.d.ts +3 -3
- package/modules/form-builder.module.d.ts +2 -2
- package/modules/index.d.ts +1 -1
- package/package.json +26 -36
- package/services/form-builder-config.service.d.ts +4 -4
- package/services/form-builder-datasource.provider.d.ts +3 -3
- package/services/form-result.service.d.ts +6 -6
- package/services/form.service.d.ts +7 -7
- package/services/index.d.ts +4 -4
- package/utils/index.d.ts +2 -2
- package/utils/permission.utils.d.ts +1 -1
- package/cjs/config/event-actions.js +0 -33
- package/cjs/config/form-builder.constants.js +0 -13
- package/cjs/config/index.js +0 -20
- package/cjs/config/message-keys.js +0 -38
- package/cjs/controllers/form-result.controller.js +0 -281
- package/cjs/controllers/form-result.controller.spec.js +0 -257
- package/cjs/controllers/form.controller.js +0 -231
- package/cjs/controllers/form.controller.spec.js +0 -212
- package/cjs/controllers/index.js +0 -19
- package/cjs/docs/form-builder-swagger.config.js +0 -150
- package/cjs/docs/form-builder-swagger.config.spec.js +0 -75
- package/cjs/docs/index.js +0 -11
- package/cjs/dtos/form-result.dto.js +0 -248
- package/cjs/dtos/form.dto.js +0 -270
- package/cjs/dtos/index.js +0 -19
- package/cjs/entities/form-result.entity.js +0 -100
- package/cjs/entities/form-with-company.entity.js +0 -65
- package/cjs/entities/form.entity.js +0 -127
- package/cjs/entities/index.js +0 -52
- package/cjs/entities/index.spec.js +0 -18
- package/cjs/enums/form-access-type.enum.js +0 -19
- package/cjs/enums/index.js +0 -18
- package/cjs/index.js +0 -28
- package/cjs/interfaces/form-builder-module.interface.js +0 -4
- package/cjs/interfaces/form-result.interface.js +0 -4
- package/cjs/interfaces/form.interface.js +0 -4
- package/cjs/interfaces/index.js +0 -20
- package/cjs/modules/form-builder.module.js +0 -136
- package/cjs/modules/form-builder.module.spec.js +0 -133
- package/cjs/modules/index.js +0 -18
- package/cjs/services/form-builder-config.service.js +0 -69
- package/cjs/services/form-builder-config.service.spec.js +0 -121
- package/cjs/services/form-builder-datasource.provider.js +0 -125
- package/cjs/services/form-builder-datasource.provider.spec.js +0 -147
- package/cjs/services/form-result.service.js +0 -366
- package/cjs/services/form-result.service.spec.js +0 -823
- package/cjs/services/form.service.js +0 -341
- package/cjs/services/form.service.spec.js +0 -746
- package/cjs/services/index.js +0 -21
- package/cjs/utils/computed-field.utils.js +0 -199
- package/cjs/utils/computed-field.utils.spec.js +0 -1205
- package/cjs/utils/index.js +0 -19
- package/cjs/utils/permission.utils.js +0 -44
- package/cjs/utils/permission.utils.spec.js +0 -118
- package/fesm/config/event-actions.js +0 -12
- package/fesm/config/form-builder.constants.js +0 -3
- package/fesm/config/message-keys.js +0 -20
- package/fesm/controllers/form-result.controller.js +0 -271
- package/fesm/controllers/form-result.controller.spec.js +0 -253
- package/fesm/controllers/form.controller.js +0 -221
- package/fesm/controllers/form.controller.spec.js +0 -208
- package/fesm/docs/form-builder-swagger.config.js +0 -146
- package/fesm/docs/form-builder-swagger.config.spec.js +0 -71
- package/fesm/dtos/form-result.dto.js +0 -215
- package/fesm/dtos/form.dto.js +0 -243
- package/fesm/entities/form-result.entity.js +0 -90
- package/fesm/entities/form-with-company.entity.js +0 -55
- package/fesm/entities/form.entity.js +0 -117
- package/fesm/entities/index.spec.js +0 -14
- package/fesm/enums/form-access-type.enum.js +0 -9
- package/fesm/interfaces/form-builder-module.interface.js +0 -3
- package/fesm/interfaces/form-result.interface.js +0 -6
- package/fesm/interfaces/form.interface.js +0 -3
- package/fesm/modules/form-builder.module.js +0 -126
- package/fesm/modules/form-builder.module.spec.js +0 -129
- package/fesm/services/form-builder-config.service.js +0 -59
- package/fesm/services/form-builder-config.service.spec.js +0 -117
- package/fesm/services/form-builder-datasource.provider.js +0 -74
- package/fesm/services/form-builder-datasource.provider.spec.js +0 -143
- package/fesm/services/form-result.service.js +0 -356
- package/fesm/services/form-result.service.spec.js +0 -778
- package/fesm/services/form.service.js +0 -331
- package/fesm/services/form.service.spec.js +0 -701
- package/fesm/utils/computed-field.utils.js +0 -195
- package/fesm/utils/computed-field.utils.spec.js +0 -1201
- package/fesm/utils/index.js +0 -2
- package/fesm/utils/permission.utils.js +0 -42
- package/fesm/utils/permission.utils.spec.js +0 -114
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "FormBuilderConfigService", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return FormBuilderConfigService;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _common = require("@nestjs/common");
|
|
12
|
-
const _formbuilderconstants = require("../config/form-builder.constants");
|
|
13
|
-
const _formbuildermoduleinterface = require("../interfaces/form-builder-module.interface");
|
|
14
|
-
function _define_property(obj, key, value) {
|
|
15
|
-
if (key in obj) {
|
|
16
|
-
Object.defineProperty(obj, key, {
|
|
17
|
-
value: value,
|
|
18
|
-
enumerable: true,
|
|
19
|
-
configurable: true,
|
|
20
|
-
writable: true
|
|
21
|
-
});
|
|
22
|
-
} else {
|
|
23
|
-
obj[key] = value;
|
|
24
|
-
}
|
|
25
|
-
return obj;
|
|
26
|
-
}
|
|
27
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
28
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
29
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
30
|
-
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;
|
|
31
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
32
|
-
}
|
|
33
|
-
function _ts_metadata(k, v) {
|
|
34
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
35
|
-
}
|
|
36
|
-
function _ts_param(paramIndex, decorator) {
|
|
37
|
-
return function(target, key) {
|
|
38
|
-
decorator(target, key, paramIndex);
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
let FormBuilderConfigService = class FormBuilderConfigService {
|
|
42
|
-
isCompanyFeatureEnabled(tenant) {
|
|
43
|
-
return tenant?.enableCompanyFeature ?? this.options.bootstrapAppConfig?.enableCompanyFeature ?? false;
|
|
44
|
-
}
|
|
45
|
-
getDatabaseMode() {
|
|
46
|
-
return this.options.bootstrapAppConfig?.databaseMode ?? 'single';
|
|
47
|
-
}
|
|
48
|
-
isMultiTenant() {
|
|
49
|
-
return this.getDatabaseMode() === 'multi-tenant';
|
|
50
|
-
}
|
|
51
|
-
getOptions() {
|
|
52
|
-
return this.options;
|
|
53
|
-
}
|
|
54
|
-
getConfig() {
|
|
55
|
-
return this.options.config;
|
|
56
|
-
}
|
|
57
|
-
constructor(options){
|
|
58
|
-
_define_property(this, "options", void 0);
|
|
59
|
-
this.options = options;
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
FormBuilderConfigService = _ts_decorate([
|
|
63
|
-
(0, _common.Injectable)(),
|
|
64
|
-
_ts_param(0, (0, _common.Inject)(_formbuilderconstants.FORM_BUILDER_MODULE_OPTIONS)),
|
|
65
|
-
_ts_metadata("design:type", Function),
|
|
66
|
-
_ts_metadata("design:paramtypes", [
|
|
67
|
-
typeof _formbuildermoduleinterface.FormBuilderModuleOptions === "undefined" ? Object : _formbuildermoduleinterface.FormBuilderModuleOptions
|
|
68
|
-
])
|
|
69
|
-
], FormBuilderConfigService);
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
const _formbuilderconfigservice = require("./form-builder-config.service");
|
|
6
|
-
function buildOptions(overrides = {}) {
|
|
7
|
-
return {
|
|
8
|
-
bootstrapAppConfig: undefined,
|
|
9
|
-
config: undefined,
|
|
10
|
-
...overrides
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
describe('FormBuilderConfigService', ()=>{
|
|
14
|
-
describe('isCompanyFeatureEnabled', ()=>{
|
|
15
|
-
it('returns false when neither tenant nor bootstrap config enable the feature', ()=>{
|
|
16
|
-
const service = new _formbuilderconfigservice.FormBuilderConfigService(buildOptions());
|
|
17
|
-
expect(service.isCompanyFeatureEnabled()).toBe(false);
|
|
18
|
-
});
|
|
19
|
-
it('returns true when bootstrapAppConfig enables the feature', ()=>{
|
|
20
|
-
const service = new _formbuilderconfigservice.FormBuilderConfigService(buildOptions({
|
|
21
|
-
bootstrapAppConfig: {
|
|
22
|
-
databaseMode: 'single',
|
|
23
|
-
enableCompanyFeature: true
|
|
24
|
-
}
|
|
25
|
-
}));
|
|
26
|
-
expect(service.isCompanyFeatureEnabled()).toBe(true);
|
|
27
|
-
});
|
|
28
|
-
it('prefers the tenant override over bootstrapAppConfig when a tenant is passed', ()=>{
|
|
29
|
-
const service = new _formbuilderconfigservice.FormBuilderConfigService(buildOptions({
|
|
30
|
-
bootstrapAppConfig: {
|
|
31
|
-
databaseMode: 'multi-tenant',
|
|
32
|
-
enableCompanyFeature: false
|
|
33
|
-
}
|
|
34
|
-
}));
|
|
35
|
-
const result = service.isCompanyFeatureEnabled({
|
|
36
|
-
enableCompanyFeature: true
|
|
37
|
-
});
|
|
38
|
-
expect(result).toBe(true);
|
|
39
|
-
});
|
|
40
|
-
it('falls back to bootstrapAppConfig when tenant does not specify enableCompanyFeature', ()=>{
|
|
41
|
-
const service = new _formbuilderconfigservice.FormBuilderConfigService(buildOptions({
|
|
42
|
-
bootstrapAppConfig: {
|
|
43
|
-
databaseMode: 'multi-tenant',
|
|
44
|
-
enableCompanyFeature: true
|
|
45
|
-
}
|
|
46
|
-
}));
|
|
47
|
-
const result = service.isCompanyFeatureEnabled({
|
|
48
|
-
id: 'tenant-1'
|
|
49
|
-
});
|
|
50
|
-
expect(result).toBe(true);
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
describe('getDatabaseMode', ()=>{
|
|
54
|
-
it('returns the configured database mode', ()=>{
|
|
55
|
-
const service = new _formbuilderconfigservice.FormBuilderConfigService(buildOptions({
|
|
56
|
-
bootstrapAppConfig: {
|
|
57
|
-
databaseMode: 'multi-tenant'
|
|
58
|
-
}
|
|
59
|
-
}));
|
|
60
|
-
expect(service.getDatabaseMode()).toBe('multi-tenant');
|
|
61
|
-
});
|
|
62
|
-
it('defaults to "single" when bootstrapAppConfig is missing', ()=>{
|
|
63
|
-
const service = new _formbuilderconfigservice.FormBuilderConfigService(buildOptions({
|
|
64
|
-
bootstrapAppConfig: undefined
|
|
65
|
-
}));
|
|
66
|
-
expect(service.getDatabaseMode()).toBe('single');
|
|
67
|
-
});
|
|
68
|
-
it('defaults to "single" when databaseMode is not set on bootstrapAppConfig', ()=>{
|
|
69
|
-
const service = new _formbuilderconfigservice.FormBuilderConfigService(buildOptions({
|
|
70
|
-
bootstrapAppConfig: {}
|
|
71
|
-
}));
|
|
72
|
-
expect(service.getDatabaseMode()).toBe('single');
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
describe('isMultiTenant', ()=>{
|
|
76
|
-
it('returns true when database mode is multi-tenant', ()=>{
|
|
77
|
-
const service = new _formbuilderconfigservice.FormBuilderConfigService(buildOptions({
|
|
78
|
-
bootstrapAppConfig: {
|
|
79
|
-
databaseMode: 'multi-tenant'
|
|
80
|
-
}
|
|
81
|
-
}));
|
|
82
|
-
expect(service.isMultiTenant()).toBe(true);
|
|
83
|
-
});
|
|
84
|
-
it('returns false when database mode is single', ()=>{
|
|
85
|
-
const service = new _formbuilderconfigservice.FormBuilderConfigService(buildOptions({
|
|
86
|
-
bootstrapAppConfig: {
|
|
87
|
-
databaseMode: 'single'
|
|
88
|
-
}
|
|
89
|
-
}));
|
|
90
|
-
expect(service.isMultiTenant()).toBe(false);
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
describe('getOptions', ()=>{
|
|
94
|
-
it('returns the exact options object it was constructed with', ()=>{
|
|
95
|
-
const options = buildOptions({
|
|
96
|
-
config: {
|
|
97
|
-
tenants: []
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
const service = new _formbuilderconfigservice.FormBuilderConfigService(options);
|
|
101
|
-
expect(service.getOptions()).toBe(options);
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
describe('getConfig', ()=>{
|
|
105
|
-
it('returns the config sub-object', ()=>{
|
|
106
|
-
const config = {
|
|
107
|
-
tenants: []
|
|
108
|
-
};
|
|
109
|
-
const service = new _formbuilderconfigservice.FormBuilderConfigService(buildOptions({
|
|
110
|
-
config
|
|
111
|
-
}));
|
|
112
|
-
expect(service.getConfig()).toBe(config);
|
|
113
|
-
});
|
|
114
|
-
it('returns undefined when config was never provided', ()=>{
|
|
115
|
-
const service = new _formbuilderconfigservice.FormBuilderConfigService(buildOptions({
|
|
116
|
-
config: undefined
|
|
117
|
-
}));
|
|
118
|
-
expect(service.getConfig()).toBeUndefined();
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
});
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "FormBuilderDataSourceProvider", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return FormBuilderDataSourceProvider;
|
|
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 _formbuilderconfigservice = require("./form-builder-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 FormBuilderDataSourceProvider = class FormBuilderDataSourceProvider 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
|
-
async getFormBuilderEntities(enableCompanyFeature) {
|
|
94
|
-
const enable = enableCompanyFeature ?? this.configService.isCompanyFeatureEnabled();
|
|
95
|
-
const { getFormBuilderEntitiesByConfig } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../entities")));
|
|
96
|
-
return getFormBuilderEntitiesByConfig(enable);
|
|
97
|
-
}
|
|
98
|
-
async createDataSourceFromConfig(config) {
|
|
99
|
-
const enableCompanyFeature = this.configService.isCompanyFeatureEnabled(this.getCurrentTenant() ?? undefined);
|
|
100
|
-
const entities = await this.getFormBuilderEntities(enableCompanyFeature);
|
|
101
|
-
return super.createDataSourceFromConfig(config, entities);
|
|
102
|
-
}
|
|
103
|
-
constructor(configService, request){
|
|
104
|
-
super(FormBuilderDataSourceProvider.buildParentOptions(configService.getOptions()), request), _define_property(this, "configService", void 0), this.configService = configService;
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
_define_property(FormBuilderDataSourceProvider, "tenantConnections", new Map());
|
|
108
|
-
_define_property(FormBuilderDataSourceProvider, "singleDataSource", null);
|
|
109
|
-
_define_property(FormBuilderDataSourceProvider, "tenantsRegistry", new Map());
|
|
110
|
-
_define_property(FormBuilderDataSourceProvider, "initialized", false);
|
|
111
|
-
_define_property(FormBuilderDataSourceProvider, "connectionLocks", new Map());
|
|
112
|
-
_define_property(FormBuilderDataSourceProvider, "singleConnectionLock", null);
|
|
113
|
-
FormBuilderDataSourceProvider = _ts_decorate([
|
|
114
|
-
(0, _common.Injectable)({
|
|
115
|
-
scope: _common.Scope.REQUEST
|
|
116
|
-
}),
|
|
117
|
-
_ts_param(0, (0, _common.Inject)(_formbuilderconfigservice.FormBuilderConfigService)),
|
|
118
|
-
_ts_param(1, (0, _common.Optional)()),
|
|
119
|
-
_ts_param(1, (0, _common.Inject)(_core.REQUEST)),
|
|
120
|
-
_ts_metadata("design:type", Function),
|
|
121
|
-
_ts_metadata("design:paramtypes", [
|
|
122
|
-
typeof _formbuilderconfigservice.FormBuilderConfigService === "undefined" ? Object : _formbuilderconfigservice.FormBuilderConfigService,
|
|
123
|
-
typeof _express.Request === "undefined" ? Object : _express.Request
|
|
124
|
-
])
|
|
125
|
-
], FormBuilderDataSourceProvider);
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
const _formbuilderdatasourceprovider = require("./form-builder-datasource.provider");
|
|
6
|
-
const _entities = require("../entities");
|
|
7
|
-
function buildConfigService(overrides = {}) {
|
|
8
|
-
const options = {
|
|
9
|
-
bootstrapAppConfig: {
|
|
10
|
-
databaseMode: 'single'
|
|
11
|
-
},
|
|
12
|
-
config: {
|
|
13
|
-
defaultDatabaseConfig: {
|
|
14
|
-
type: 'mysql',
|
|
15
|
-
host: 'localhost',
|
|
16
|
-
port: 3306,
|
|
17
|
-
username: 'root',
|
|
18
|
-
password: 'password',
|
|
19
|
-
database: 'flusys_test'
|
|
20
|
-
},
|
|
21
|
-
tenantDefaultDatabaseConfig: undefined,
|
|
22
|
-
tenants: []
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
return {
|
|
26
|
-
getOptions: jest.fn().mockReturnValue(options),
|
|
27
|
-
isCompanyFeatureEnabled: jest.fn().mockReturnValue(overrides.isCompanyFeatureEnabled ?? false)
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
describe('FormBuilderDataSourceProvider', ()=>{
|
|
31
|
-
afterEach(()=>{
|
|
32
|
-
// Reset the isolated static caches this provider owns so tests don't leak state between runs.
|
|
33
|
-
_formbuilderdatasourceprovider.FormBuilderDataSourceProvider.tenantConnections = new Map();
|
|
34
|
-
_formbuilderdatasourceprovider.FormBuilderDataSourceProvider.singleDataSource = null;
|
|
35
|
-
_formbuilderdatasourceprovider.FormBuilderDataSourceProvider.tenantsRegistry = new Map();
|
|
36
|
-
_formbuilderdatasourceprovider.FormBuilderDataSourceProvider.initialized = false;
|
|
37
|
-
_formbuilderdatasourceprovider.FormBuilderDataSourceProvider.connectionLocks = new Map();
|
|
38
|
-
_formbuilderdatasourceprovider.FormBuilderDataSourceProvider.singleConnectionLock = null;
|
|
39
|
-
});
|
|
40
|
-
it('constructs and forwards bootstrap/database config to the base class', ()=>{
|
|
41
|
-
const configService = buildConfigService();
|
|
42
|
-
const provider = new _formbuilderdatasourceprovider.FormBuilderDataSourceProvider(configService, undefined);
|
|
43
|
-
expect(configService.getOptions).toHaveBeenCalled();
|
|
44
|
-
expect(provider.getDatabaseMode()).toBe('single');
|
|
45
|
-
expect(provider.isMultiTenant()).toBe(false);
|
|
46
|
-
});
|
|
47
|
-
it('reflects multi-tenant mode from bootstrapAppConfig', ()=>{
|
|
48
|
-
const configService = buildConfigService();
|
|
49
|
-
configService.getOptions.mockReturnValue({
|
|
50
|
-
bootstrapAppConfig: {
|
|
51
|
-
databaseMode: 'multi-tenant'
|
|
52
|
-
},
|
|
53
|
-
config: {}
|
|
54
|
-
});
|
|
55
|
-
const provider = new _formbuilderdatasourceprovider.FormBuilderDataSourceProvider(configService, undefined);
|
|
56
|
-
expect(provider.isMultiTenant()).toBe(true);
|
|
57
|
-
});
|
|
58
|
-
it('owns isolated static caches, separate from the base MultiTenantDataSourceService', ()=>{
|
|
59
|
-
// Each DataSource Provider must override BOTH static cache properties and the
|
|
60
|
-
// methods that read them — otherwise modules would share connections (see FLUSYS_NEST/CLAUDE.md).
|
|
61
|
-
expect(_formbuilderdatasourceprovider.FormBuilderDataSourceProvider.tenantConnections).not.toBe(Object.getPrototypeOf(_formbuilderdatasourceprovider.FormBuilderDataSourceProvider).tenantConnections);
|
|
62
|
-
});
|
|
63
|
-
describe('getFormBuilderEntities', ()=>{
|
|
64
|
-
it('returns core entities (no company feature) using the config service default', async ()=>{
|
|
65
|
-
const configService = buildConfigService({
|
|
66
|
-
isCompanyFeatureEnabled: false
|
|
67
|
-
});
|
|
68
|
-
const provider = new _formbuilderdatasourceprovider.FormBuilderDataSourceProvider(configService, undefined);
|
|
69
|
-
const entities = await provider.getFormBuilderEntities();
|
|
70
|
-
expect(entities).toEqual([
|
|
71
|
-
_entities.Form,
|
|
72
|
-
_entities.FormResult
|
|
73
|
-
]);
|
|
74
|
-
});
|
|
75
|
-
it('returns company entities using the config service default', async ()=>{
|
|
76
|
-
const configService = buildConfigService({
|
|
77
|
-
isCompanyFeatureEnabled: true
|
|
78
|
-
});
|
|
79
|
-
const provider = new _formbuilderdatasourceprovider.FormBuilderDataSourceProvider(configService, undefined);
|
|
80
|
-
const entities = await provider.getFormBuilderEntities();
|
|
81
|
-
expect(entities).toEqual([
|
|
82
|
-
_entities.FormWithCompany,
|
|
83
|
-
_entities.FormResult
|
|
84
|
-
]);
|
|
85
|
-
});
|
|
86
|
-
it('allows an explicit enableCompanyFeature override, bypassing config service', async ()=>{
|
|
87
|
-
const configService = buildConfigService({
|
|
88
|
-
isCompanyFeatureEnabled: false
|
|
89
|
-
});
|
|
90
|
-
const provider = new _formbuilderdatasourceprovider.FormBuilderDataSourceProvider(configService, undefined);
|
|
91
|
-
const entities = await provider.getFormBuilderEntities(true);
|
|
92
|
-
expect(entities).toEqual([
|
|
93
|
-
_entities.FormWithCompany,
|
|
94
|
-
_entities.FormResult
|
|
95
|
-
]);
|
|
96
|
-
expect(configService.isCompanyFeatureEnabled).not.toHaveBeenCalled();
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
describe('createDataSourceFromConfig', ()=>{
|
|
100
|
-
it('builds a DataSource using core entities when company feature disabled', async ()=>{
|
|
101
|
-
const configService = buildConfigService({
|
|
102
|
-
isCompanyFeatureEnabled: false
|
|
103
|
-
});
|
|
104
|
-
const provider = new _formbuilderdatasourceprovider.FormBuilderDataSourceProvider(configService, undefined);
|
|
105
|
-
const fakeDataSource = {
|
|
106
|
-
isInitialized: true
|
|
107
|
-
};
|
|
108
|
-
const superSpy = jest.spyOn(Object.getPrototypeOf(Object.getPrototypeOf(provider)), 'createDataSourceFromConfig').mockResolvedValue(fakeDataSource);
|
|
109
|
-
const config = {
|
|
110
|
-
type: 'mysql',
|
|
111
|
-
host: 'localhost',
|
|
112
|
-
port: 3306,
|
|
113
|
-
username: 'root',
|
|
114
|
-
password: 'password',
|
|
115
|
-
database: 'flusys_test'
|
|
116
|
-
};
|
|
117
|
-
const result = await provider.createDataSourceFromConfig(config);
|
|
118
|
-
expect(superSpy).toHaveBeenCalledWith(config, [
|
|
119
|
-
_entities.Form,
|
|
120
|
-
_entities.FormResult
|
|
121
|
-
]);
|
|
122
|
-
expect(result).toBe(fakeDataSource);
|
|
123
|
-
superSpy.mockRestore();
|
|
124
|
-
});
|
|
125
|
-
it('builds a DataSource using company entities when company feature enabled', async ()=>{
|
|
126
|
-
const configService = buildConfigService({
|
|
127
|
-
isCompanyFeatureEnabled: true
|
|
128
|
-
});
|
|
129
|
-
const provider = new _formbuilderdatasourceprovider.FormBuilderDataSourceProvider(configService, undefined);
|
|
130
|
-
const fakeDataSource = {
|
|
131
|
-
isInitialized: true
|
|
132
|
-
};
|
|
133
|
-
const superSpy = jest.spyOn(Object.getPrototypeOf(Object.getPrototypeOf(provider)), 'createDataSourceFromConfig').mockResolvedValue(fakeDataSource);
|
|
134
|
-
const config = {
|
|
135
|
-
type: 'mysql',
|
|
136
|
-
database: 'flusys_test'
|
|
137
|
-
};
|
|
138
|
-
const result = await provider.createDataSourceFromConfig(config);
|
|
139
|
-
expect(superSpy).toHaveBeenCalledWith(config, [
|
|
140
|
-
_entities.FormWithCompany,
|
|
141
|
-
_entities.FormResult
|
|
142
|
-
]);
|
|
143
|
-
expect(result).toBe(fakeDataSource);
|
|
144
|
-
superSpy.mockRestore();
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
});
|