@elsikora/nestjs-crud-config 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.
- package/LICENSE +21 -0
- package/README.md +633 -0
- package/dist/cjs/external/tslib/tslib.es6.js +43 -0
- package/dist/cjs/external/tslib/tslib.es6.js.map +1 -0
- package/dist/cjs/index.d.ts +13 -0
- package/dist/cjs/index.js +52 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/modules/config/config.module.d.ts +13 -0
- package/dist/cjs/modules/config/config.module.js +230 -0
- package/dist/cjs/modules/config/config.module.js.map +1 -0
- package/dist/cjs/modules/config/config.service.d.ts +50 -0
- package/dist/cjs/modules/config/config.service.js +355 -0
- package/dist/cjs/modules/config/config.service.js.map +1 -0
- package/dist/cjs/modules/config/data/controller.d.ts +10 -0
- package/dist/cjs/modules/config/data/controller.js +76 -0
- package/dist/cjs/modules/config/data/controller.js.map +1 -0
- package/dist/cjs/modules/config/data/entity/entity.d.ts +20 -0
- package/dist/cjs/modules/config/data/entity/entity.js +158 -0
- package/dist/cjs/modules/config/data/entity/entity.js.map +1 -0
- package/dist/cjs/modules/config/data/entity/index.d.ts +1 -0
- package/dist/cjs/modules/config/data/event/before-insert.event.d.ts +20 -0
- package/dist/cjs/modules/config/data/event/before-insert.event.js +23 -0
- package/dist/cjs/modules/config/data/event/before-insert.event.js.map +1 -0
- package/dist/cjs/modules/config/data/event/index.d.ts +1 -0
- package/dist/cjs/modules/config/data/index.d.ts +6 -0
- package/dist/cjs/modules/config/data/interface/index.d.ts +1 -0
- package/dist/cjs/modules/config/data/interface/interface.d.ts +12 -0
- package/dist/cjs/modules/config/data/listener/before-insert.listener.d.ts +19 -0
- package/dist/cjs/modules/config/data/listener/before-insert.listener.js +59 -0
- package/dist/cjs/modules/config/data/listener/before-insert.listener.js.map +1 -0
- package/dist/cjs/modules/config/data/listener/index.d.ts +1 -0
- package/dist/cjs/modules/config/data/subscriber/before-insert.subscriber.d.ts +26 -0
- package/dist/cjs/modules/config/data/subscriber/before-insert.subscriber.js +74 -0
- package/dist/cjs/modules/config/data/subscriber/before-insert.subscriber.js.map +1 -0
- package/dist/cjs/modules/config/data/subscriber/index.d.ts +1 -0
- package/dist/cjs/modules/config/index.d.ts +9 -0
- package/dist/cjs/modules/config/interface/delete-options.interface.d.ts +22 -0
- package/dist/cjs/modules/config/interface/get-list-options.interface.d.ts +22 -0
- package/dist/cjs/modules/config/interface/get-options.interface.d.ts +30 -0
- package/dist/cjs/modules/config/interface/index.d.ts +4 -0
- package/dist/cjs/modules/config/interface/set-options.interface.d.ts +34 -0
- package/dist/cjs/modules/config/section/controller.d.ts +10 -0
- package/dist/cjs/modules/config/section/controller.js +46 -0
- package/dist/cjs/modules/config/section/controller.js.map +1 -0
- package/dist/cjs/modules/config/section/entity/entity.d.ts +14 -0
- package/dist/cjs/modules/config/section/entity/entity.js +96 -0
- package/dist/cjs/modules/config/section/entity/entity.js.map +1 -0
- package/dist/cjs/modules/config/section/entity/index.d.ts +1 -0
- package/dist/cjs/modules/config/section/index.d.ts +2 -0
- package/dist/cjs/modules/config/section/interface/index.d.ts +1 -0
- package/dist/cjs/modules/config/section/interface/interface.d.ts +7 -0
- package/dist/cjs/modules/config/type/index.d.ts +2 -0
- package/dist/cjs/modules/config/type/item.type.d.ts +1 -0
- package/dist/cjs/modules/config/type/type.d.ts +2 -0
- package/dist/cjs/package.json +8 -0
- package/dist/cjs/shared/constant/api-property.constant.d.ts +4 -0
- package/dist/cjs/shared/constant/api-property.constant.js +11 -0
- package/dist/cjs/shared/constant/api-property.constant.js.map +1 -0
- package/dist/cjs/shared/constant/config/data.constant.d.ts +7 -0
- package/dist/cjs/shared/constant/config/data.constant.js +17 -0
- package/dist/cjs/shared/constant/config/data.constant.js.map +1 -0
- package/dist/cjs/shared/constant/config/index.d.ts +2 -0
- package/dist/cjs/shared/constant/config/section.constant.d.ts +5 -0
- package/dist/cjs/shared/constant/config/section.constant.js +13 -0
- package/dist/cjs/shared/constant/config/section.constant.js.map +1 -0
- package/dist/cjs/shared/constant/crypto.constant.d.ts +7 -0
- package/dist/cjs/shared/constant/crypto.constant.js +17 -0
- package/dist/cjs/shared/constant/crypto.constant.js.map +1 -0
- package/dist/cjs/shared/constant/index.d.ts +4 -0
- package/dist/cjs/shared/constant/token.constant.d.ts +8 -0
- package/dist/cjs/shared/constant/token.constant.js +20 -0
- package/dist/cjs/shared/constant/token.constant.js.map +1 -0
- package/dist/cjs/shared/enum/environment.enum.d.ts +16 -0
- package/dist/cjs/shared/enum/environment.enum.js +20 -0
- package/dist/cjs/shared/enum/environment.enum.js.map +1 -0
- package/dist/cjs/shared/enum/index.d.ts +6 -0
- package/dist/cjs/shared/enum/instance-name.enum.d.ts +7 -0
- package/dist/cjs/shared/enum/instance-name.enum.js +11 -0
- package/dist/cjs/shared/enum/instance-name.enum.js.map +1 -0
- package/dist/cjs/shared/enum/service.enum.d.ts +220 -0
- package/dist/cjs/shared/enum/service.enum.js +224 -0
- package/dist/cjs/shared/enum/service.enum.js.map +1 -0
- package/dist/cjs/shared/index.d.ts +5 -0
- package/dist/cjs/shared/interface/config/async-module-properties.interface.d.ts +16 -0
- package/dist/cjs/shared/interface/config/cache-options.interface.d.ts +17 -0
- package/dist/cjs/shared/interface/config/config-data-entity-options.interface.d.ts +25 -0
- package/dist/cjs/shared/interface/config/controller-options.interface.d.ts +28 -0
- package/dist/cjs/shared/interface/config/encryption-options.interface.d.ts +13 -0
- package/dist/cjs/shared/interface/config/entity/data-options.interface.d.ts +25 -0
- package/dist/cjs/shared/interface/config/entity/index.d.ts +3 -0
- package/dist/cjs/shared/interface/config/entity/options.interface.d.ts +18 -0
- package/dist/cjs/shared/interface/config/entity/section-options.interface.d.ts +17 -0
- package/dist/cjs/shared/interface/config/index.d.ts +7 -0
- package/dist/cjs/shared/interface/config/options.interface.d.ts +37 -0
- package/dist/cjs/shared/interface/config/properties-factory.interface.d.ts +11 -0
- package/dist/cjs/shared/interface/index.d.ts +2 -0
- package/dist/cjs/shared/interface/utility/create-dynamic-entity/index.d.ts +2 -0
- package/dist/cjs/shared/interface/utility/create-dynamic-entity/options.interface.d.ts +15 -0
- package/dist/cjs/shared/interface/utility/create-dynamic-entity/relation-options.interface.d.ts +9 -0
- package/dist/cjs/shared/interface/utility/index.d.ts +1 -0
- package/dist/cjs/shared/type/dynamic-entity.type.d.ts +1 -0
- package/dist/cjs/shared/type/index.d.ts +1 -0
- package/dist/cjs/shared/utility/create-dynamic/entity.utility.d.ts +9 -0
- package/dist/cjs/shared/utility/create-dynamic/entity.utility.js +67 -0
- package/dist/cjs/shared/utility/create-dynamic/entity.utility.js.map +1 -0
- package/dist/cjs/shared/utility/create-dynamic/index.d.ts +2 -0
- package/dist/cjs/shared/utility/create-dynamic/service.utility.d.ts +9 -0
- package/dist/cjs/shared/utility/create-dynamic/service.utility.js +34 -0
- package/dist/cjs/shared/utility/create-dynamic/service.utility.js.map +1 -0
- package/dist/cjs/shared/utility/create-dynamic-entity.utility.d.ts +9 -0
- package/dist/cjs/shared/utility/create-dynamic-entity.utility.js +67 -0
- package/dist/cjs/shared/utility/create-dynamic-entity.utility.js.map +1 -0
- package/dist/cjs/shared/utility/crypto.utility.d.ts +27 -0
- package/dist/cjs/shared/utility/crypto.utility.js +72 -0
- package/dist/cjs/shared/utility/crypto.utility.js.map +1 -0
- package/dist/cjs/shared/utility/index.d.ts +3 -0
- package/dist/esm/external/tslib/tslib.es6.js +39 -0
- package/dist/esm/external/tslib/tslib.es6.js.map +1 -0
- package/dist/esm/index.d.ts +13 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/modules/config/config.module.d.ts +13 -0
- package/dist/esm/modules/config/config.module.js +230 -0
- package/dist/esm/modules/config/config.module.js.map +1 -0
- package/dist/esm/modules/config/config.service.d.ts +50 -0
- package/dist/esm/modules/config/config.service.js +355 -0
- package/dist/esm/modules/config/config.service.js.map +1 -0
- package/dist/esm/modules/config/data/controller.d.ts +10 -0
- package/dist/esm/modules/config/data/controller.js +74 -0
- package/dist/esm/modules/config/data/controller.js.map +1 -0
- package/dist/esm/modules/config/data/entity/entity.d.ts +20 -0
- package/dist/esm/modules/config/data/entity/entity.js +156 -0
- package/dist/esm/modules/config/data/entity/entity.js.map +1 -0
- package/dist/esm/modules/config/data/entity/index.d.ts +1 -0
- package/dist/esm/modules/config/data/event/before-insert.event.d.ts +20 -0
- package/dist/esm/modules/config/data/event/before-insert.event.js +21 -0
- package/dist/esm/modules/config/data/event/before-insert.event.js.map +1 -0
- package/dist/esm/modules/config/data/event/index.d.ts +1 -0
- package/dist/esm/modules/config/data/index.d.ts +6 -0
- package/dist/esm/modules/config/data/interface/index.d.ts +1 -0
- package/dist/esm/modules/config/data/interface/interface.d.ts +12 -0
- package/dist/esm/modules/config/data/listener/before-insert.listener.d.ts +19 -0
- package/dist/esm/modules/config/data/listener/before-insert.listener.js +59 -0
- package/dist/esm/modules/config/data/listener/before-insert.listener.js.map +1 -0
- package/dist/esm/modules/config/data/listener/index.d.ts +1 -0
- package/dist/esm/modules/config/data/subscriber/before-insert.subscriber.d.ts +26 -0
- package/dist/esm/modules/config/data/subscriber/before-insert.subscriber.js +74 -0
- package/dist/esm/modules/config/data/subscriber/before-insert.subscriber.js.map +1 -0
- package/dist/esm/modules/config/data/subscriber/index.d.ts +1 -0
- package/dist/esm/modules/config/index.d.ts +9 -0
- package/dist/esm/modules/config/interface/delete-options.interface.d.ts +22 -0
- package/dist/esm/modules/config/interface/get-list-options.interface.d.ts +22 -0
- package/dist/esm/modules/config/interface/get-options.interface.d.ts +30 -0
- package/dist/esm/modules/config/interface/index.d.ts +4 -0
- package/dist/esm/modules/config/interface/set-options.interface.d.ts +34 -0
- package/dist/esm/modules/config/section/controller.d.ts +10 -0
- package/dist/esm/modules/config/section/controller.js +44 -0
- package/dist/esm/modules/config/section/controller.js.map +1 -0
- package/dist/esm/modules/config/section/entity/entity.d.ts +14 -0
- package/dist/esm/modules/config/section/entity/entity.js +94 -0
- package/dist/esm/modules/config/section/entity/entity.js.map +1 -0
- package/dist/esm/modules/config/section/entity/index.d.ts +1 -0
- package/dist/esm/modules/config/section/index.d.ts +2 -0
- package/dist/esm/modules/config/section/interface/index.d.ts +1 -0
- package/dist/esm/modules/config/section/interface/interface.d.ts +7 -0
- package/dist/esm/modules/config/type/index.d.ts +2 -0
- package/dist/esm/modules/config/type/item.type.d.ts +1 -0
- package/dist/esm/modules/config/type/type.d.ts +2 -0
- package/dist/esm/package.json +8 -0
- package/dist/esm/shared/constant/api-property.constant.d.ts +4 -0
- package/dist/esm/shared/constant/api-property.constant.js +9 -0
- package/dist/esm/shared/constant/api-property.constant.js.map +1 -0
- package/dist/esm/shared/constant/config/data.constant.d.ts +7 -0
- package/dist/esm/shared/constant/config/data.constant.js +15 -0
- package/dist/esm/shared/constant/config/data.constant.js.map +1 -0
- package/dist/esm/shared/constant/config/index.d.ts +2 -0
- package/dist/esm/shared/constant/config/section.constant.d.ts +5 -0
- package/dist/esm/shared/constant/config/section.constant.js +11 -0
- package/dist/esm/shared/constant/config/section.constant.js.map +1 -0
- package/dist/esm/shared/constant/crypto.constant.d.ts +7 -0
- package/dist/esm/shared/constant/crypto.constant.js +15 -0
- package/dist/esm/shared/constant/crypto.constant.js.map +1 -0
- package/dist/esm/shared/constant/index.d.ts +4 -0
- package/dist/esm/shared/constant/token.constant.d.ts +8 -0
- package/dist/esm/shared/constant/token.constant.js +18 -0
- package/dist/esm/shared/constant/token.constant.js.map +1 -0
- package/dist/esm/shared/enum/environment.enum.d.ts +16 -0
- package/dist/esm/shared/enum/environment.enum.js +20 -0
- package/dist/esm/shared/enum/environment.enum.js.map +1 -0
- package/dist/esm/shared/enum/index.d.ts +6 -0
- package/dist/esm/shared/enum/instance-name.enum.d.ts +7 -0
- package/dist/esm/shared/enum/instance-name.enum.js +11 -0
- package/dist/esm/shared/enum/instance-name.enum.js.map +1 -0
- package/dist/esm/shared/enum/service.enum.d.ts +220 -0
- package/dist/esm/shared/enum/service.enum.js +224 -0
- package/dist/esm/shared/enum/service.enum.js.map +1 -0
- package/dist/esm/shared/index.d.ts +5 -0
- package/dist/esm/shared/interface/config/async-module-properties.interface.d.ts +16 -0
- package/dist/esm/shared/interface/config/cache-options.interface.d.ts +17 -0
- package/dist/esm/shared/interface/config/config-data-entity-options.interface.d.ts +25 -0
- package/dist/esm/shared/interface/config/controller-options.interface.d.ts +28 -0
- package/dist/esm/shared/interface/config/encryption-options.interface.d.ts +13 -0
- package/dist/esm/shared/interface/config/entity/data-options.interface.d.ts +25 -0
- package/dist/esm/shared/interface/config/entity/index.d.ts +3 -0
- package/dist/esm/shared/interface/config/entity/options.interface.d.ts +18 -0
- package/dist/esm/shared/interface/config/entity/section-options.interface.d.ts +17 -0
- package/dist/esm/shared/interface/config/index.d.ts +7 -0
- package/dist/esm/shared/interface/config/options.interface.d.ts +37 -0
- package/dist/esm/shared/interface/config/properties-factory.interface.d.ts +11 -0
- package/dist/esm/shared/interface/index.d.ts +2 -0
- package/dist/esm/shared/interface/utility/create-dynamic-entity/index.d.ts +2 -0
- package/dist/esm/shared/interface/utility/create-dynamic-entity/options.interface.d.ts +15 -0
- package/dist/esm/shared/interface/utility/create-dynamic-entity/relation-options.interface.d.ts +9 -0
- package/dist/esm/shared/interface/utility/index.d.ts +1 -0
- package/dist/esm/shared/type/dynamic-entity.type.d.ts +1 -0
- package/dist/esm/shared/type/index.d.ts +1 -0
- package/dist/esm/shared/utility/create-dynamic/entity.utility.d.ts +9 -0
- package/dist/esm/shared/utility/create-dynamic/entity.utility.js +65 -0
- package/dist/esm/shared/utility/create-dynamic/entity.utility.js.map +1 -0
- package/dist/esm/shared/utility/create-dynamic/index.d.ts +2 -0
- package/dist/esm/shared/utility/create-dynamic/service.utility.d.ts +9 -0
- package/dist/esm/shared/utility/create-dynamic/service.utility.js +32 -0
- package/dist/esm/shared/utility/create-dynamic/service.utility.js.map +1 -0
- package/dist/esm/shared/utility/create-dynamic-entity.utility.d.ts +9 -0
- package/dist/esm/shared/utility/create-dynamic-entity.utility.js +65 -0
- package/dist/esm/shared/utility/create-dynamic-entity.utility.js.map +1 -0
- package/dist/esm/shared/utility/crypto.utility.d.ts +27 -0
- package/dist/esm/shared/utility/crypto.utility.js +72 -0
- package/dist/esm/shared/utility/crypto.utility.js.map +1 -0
- package/dist/esm/shared/utility/index.d.ts +3 -0
- package/package.json +115 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { IConfigData } from './data/index';
|
|
2
|
+
import type { IConfigSection } from './section/index';
|
|
3
|
+
import type { IConfigOptions } from '../../shared/interface/config/index';
|
|
4
|
+
import { ApiServiceBase } from "@elsikora/nestjs-crud-automator";
|
|
5
|
+
import { Cache } from "@nestjs/cache-manager";
|
|
6
|
+
import { CryptoUtility } from '../../shared/utility/index';
|
|
7
|
+
import { DataSource } from "typeorm";
|
|
8
|
+
import { IConfigDeleteOptions, IConfigGetListOptions, IConfigGetOptions, IConfigSetOptions } from './interface/index';
|
|
9
|
+
/**
|
|
10
|
+
* Service for managing configuration data with caching support
|
|
11
|
+
* Provides methods to retrieve configuration values with optional decryption
|
|
12
|
+
*/
|
|
13
|
+
export declare class CrudConfigService {
|
|
14
|
+
private readonly sectionService;
|
|
15
|
+
private readonly dataService;
|
|
16
|
+
private readonly cacheManager;
|
|
17
|
+
private readonly options?;
|
|
18
|
+
private readonly dataSource?;
|
|
19
|
+
private readonly cryptoUtility?;
|
|
20
|
+
private readonly LOGGER;
|
|
21
|
+
constructor(sectionService: ApiServiceBase<IConfigSection>, dataService: ApiServiceBase<IConfigData>, cacheManager: Cache, options?: IConfigOptions | undefined, dataSource?: DataSource | undefined, cryptoUtility?: CryptoUtility | undefined);
|
|
22
|
+
/**
|
|
23
|
+
* Deletes a configuration value
|
|
24
|
+
* @param {IConfigDeleteOptions} options Configuration options to identify the value to delete
|
|
25
|
+
* @returns {Promise<void>} Promise resolving when the configuration is deleted
|
|
26
|
+
*/
|
|
27
|
+
delete(options: IConfigDeleteOptions): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Retrieves configuration data based on the provided options
|
|
30
|
+
* @param {IConfigGetOptions} options Configuration retrieval options
|
|
31
|
+
* @returns {Promise<IConfigData>} Promise resolving to the configuration data
|
|
32
|
+
*/
|
|
33
|
+
get(options: IConfigGetOptions): Promise<IConfigData>;
|
|
34
|
+
/**
|
|
35
|
+
* Lists all configuration values in a section.
|
|
36
|
+
* Supports caching and running within a TypeORM transaction.
|
|
37
|
+
* @param {IConfigGetListOptions} options Options for listing configurations.
|
|
38
|
+
* @returns {Promise<Array<IConfigData>>} Promise resolving to an array of configuration data.
|
|
39
|
+
*/
|
|
40
|
+
getList(options: IConfigGetListOptions): Promise<Array<IConfigData>>;
|
|
41
|
+
/**
|
|
42
|
+
* Sets a configuration value with optional encryption.
|
|
43
|
+
* The specified section must already exist.
|
|
44
|
+
* If a configuration with the same name and environment already exists, it will be updated. Otherwise, a new one will be created.
|
|
45
|
+
* @param {IConfigSetOptions} options Configuration set options
|
|
46
|
+
* @returns {Promise<IConfigData>} Promise resolving to the saved configuration data
|
|
47
|
+
*/
|
|
48
|
+
set(options: IConfigSetOptions): Promise<IConfigData>;
|
|
49
|
+
private getOrCreateSection;
|
|
50
|
+
}
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import { __decorate, __param, __metadata } from '../../external/tslib/tslib.es6.js';
|
|
2
|
+
import { ApiServiceBase, ErrorString, EErrorStringAction } from '@elsikora/nestjs-crud-automator';
|
|
3
|
+
import { CACHE_MANAGER, Cache } from '@nestjs/cache-manager';
|
|
4
|
+
import { Injectable, Inject, Optional, Logger, HttpException, InternalServerErrorException, NotFoundException } from '@nestjs/common';
|
|
5
|
+
import { TOKEN_CONSTANT } from '../../shared/constant/token.constant.js';
|
|
6
|
+
import { DataSource } from 'typeorm';
|
|
7
|
+
import '@nestjs/typeorm';
|
|
8
|
+
import { CryptoUtility } from '../../shared/utility/crypto.utility.js';
|
|
9
|
+
|
|
10
|
+
var CrudConfigService_1;
|
|
11
|
+
/**
|
|
12
|
+
* Service for managing configuration data with caching support
|
|
13
|
+
* Provides methods to retrieve configuration values with optional decryption
|
|
14
|
+
*/
|
|
15
|
+
let CrudConfigService = CrudConfigService_1 = class CrudConfigService {
|
|
16
|
+
sectionService;
|
|
17
|
+
dataService;
|
|
18
|
+
cacheManager;
|
|
19
|
+
options;
|
|
20
|
+
dataSource;
|
|
21
|
+
cryptoUtility;
|
|
22
|
+
LOGGER = new Logger(CrudConfigService_1.name);
|
|
23
|
+
constructor(sectionService, dataService, cacheManager, options, dataSource, cryptoUtility) {
|
|
24
|
+
this.sectionService = sectionService;
|
|
25
|
+
this.dataService = dataService;
|
|
26
|
+
this.cacheManager = cacheManager;
|
|
27
|
+
this.options = options;
|
|
28
|
+
this.dataSource = dataSource;
|
|
29
|
+
this.cryptoUtility = cryptoUtility;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Deletes a configuration value
|
|
33
|
+
* @param {IConfigDeleteOptions} options Configuration options to identify the value to delete
|
|
34
|
+
* @returns {Promise<void>} Promise resolving when the configuration is deleted
|
|
35
|
+
*/
|
|
36
|
+
async delete(options) {
|
|
37
|
+
if (this.options?.isVerbose) {
|
|
38
|
+
this.LOGGER.verbose(`Entering delete method with options: ${JSON.stringify(options)}`);
|
|
39
|
+
}
|
|
40
|
+
const { environment, eventManager, name, section: sectionName } = options;
|
|
41
|
+
const finalEnvironment = environment ?? this.options?.environment ?? "default";
|
|
42
|
+
try {
|
|
43
|
+
const section = await this.sectionService.get({ where: { name: sectionName } }, eventManager);
|
|
44
|
+
const data = await this.dataService.get({
|
|
45
|
+
where: {
|
|
46
|
+
environment: finalEnvironment,
|
|
47
|
+
name,
|
|
48
|
+
section: { id: section.id },
|
|
49
|
+
},
|
|
50
|
+
}, eventManager);
|
|
51
|
+
await this.dataService.delete({ id: data.id }, eventManager);
|
|
52
|
+
if (this.options?.cacheOptions?.isEnabled && this.cacheManager) {
|
|
53
|
+
const cacheKey = `config:${sectionName}:${name}:${finalEnvironment}`;
|
|
54
|
+
const listCacheKey = `config:list:${sectionName}:${finalEnvironment}`;
|
|
55
|
+
await Promise.all([this.cacheManager.del(cacheKey), this.cacheManager.del(listCacheKey)]);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
if (this.options?.isVerbose) {
|
|
60
|
+
this.LOGGER.error(`Error in delete method: ${error.message}`);
|
|
61
|
+
}
|
|
62
|
+
if (error instanceof HttpException) {
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
throw new InternalServerErrorException(ErrorString({ entity: { name: "ConfigData" }, type: EErrorStringAction.DELETING_ERROR }));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Retrieves configuration data based on the provided options
|
|
70
|
+
* @param {IConfigGetOptions} options Configuration retrieval options
|
|
71
|
+
* @returns {Promise<IConfigData>} Promise resolving to the configuration data
|
|
72
|
+
*/
|
|
73
|
+
async get(options) {
|
|
74
|
+
if (this.options?.isVerbose) {
|
|
75
|
+
this.LOGGER.verbose(`Entering get method with options: ${JSON.stringify(options)}`);
|
|
76
|
+
}
|
|
77
|
+
const { environment, eventManager, name, section, shouldLoadSectionInfo, useCache, } = options;
|
|
78
|
+
const finalEnvironment = environment ?? this.options?.environment ?? "default";
|
|
79
|
+
const cacheKey = `config:${section}:${name}:${finalEnvironment}`;
|
|
80
|
+
try {
|
|
81
|
+
// Check cache first if enabled
|
|
82
|
+
if (useCache && this.options?.cacheOptions?.isEnabled && this.cacheManager) {
|
|
83
|
+
const cachedData = await this.cacheManager.get(cacheKey);
|
|
84
|
+
if (cachedData) {
|
|
85
|
+
if (this.options?.isVerbose) {
|
|
86
|
+
this.LOGGER.verbose(`Returning cached config data for ${name}`);
|
|
87
|
+
}
|
|
88
|
+
return cachedData;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Fetch section
|
|
92
|
+
if (this.options?.isVerbose) {
|
|
93
|
+
this.LOGGER.verbose(`Fetching section: ${section}`);
|
|
94
|
+
}
|
|
95
|
+
const sectionData = await this.sectionService.get({ where: { name: section } }, eventManager);
|
|
96
|
+
if (this.options?.isVerbose) {
|
|
97
|
+
this.LOGGER.verbose(`Fetching config data for name: ${name}, environment: ${finalEnvironment}`);
|
|
98
|
+
}
|
|
99
|
+
const data = await this.dataService.get({
|
|
100
|
+
// eslint-disable-next-line @elsikora/typescript/naming-convention
|
|
101
|
+
relations: { section: shouldLoadSectionInfo },
|
|
102
|
+
where: { environment: finalEnvironment, name, section: { id: sectionData.id } },
|
|
103
|
+
}, eventManager);
|
|
104
|
+
if (data.isEncrypted) {
|
|
105
|
+
if (!this.options?.encryptionOptions?.encryptionKey) {
|
|
106
|
+
throw new InternalServerErrorException(ErrorString({ entity: { name: "ConfigData" }, type: EErrorStringAction.KEY_NOT_FOUND }));
|
|
107
|
+
}
|
|
108
|
+
if (!this.cryptoUtility) {
|
|
109
|
+
throw new InternalServerErrorException("CryptoUtility not available");
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
data.value = this.cryptoUtility.decrypt(data.value, this.options.encryptionOptions.encryptionKey);
|
|
113
|
+
if (this.options?.isVerbose) {
|
|
114
|
+
this.LOGGER.verbose(`Decrypted value for ${name}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
if (this.options?.isVerbose) {
|
|
119
|
+
this.LOGGER.error(`Decryption error for ${name}: ${error.message}`);
|
|
120
|
+
}
|
|
121
|
+
throw new InternalServerErrorException(ErrorString({ entity: { name: "ConfigData" }, type: EErrorStringAction.DECRYPTION_ERROR }));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (useCache && this.options?.cacheOptions?.isEnabled && this.cacheManager) {
|
|
125
|
+
const ttl = this.options.cacheOptions.maxCacheTTL;
|
|
126
|
+
await this.cacheManager.set(cacheKey, data, ttl);
|
|
127
|
+
}
|
|
128
|
+
if (this.options?.isVerbose) {
|
|
129
|
+
this.LOGGER.verbose(`Returning config data for ${name}`);
|
|
130
|
+
}
|
|
131
|
+
return data;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (this.options?.isVerbose) {
|
|
135
|
+
this.LOGGER.error(`Error in get method: ${error.message}`);
|
|
136
|
+
}
|
|
137
|
+
if (error instanceof HttpException) {
|
|
138
|
+
throw error;
|
|
139
|
+
}
|
|
140
|
+
throw new InternalServerErrorException(ErrorString({ entity: { name: "ConfigData" }, type: EErrorStringAction.FETCHING_ERROR }));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Lists all configuration values in a section.
|
|
145
|
+
* Supports caching and running within a TypeORM transaction.
|
|
146
|
+
* @param {IConfigGetListOptions} options Options for listing configurations.
|
|
147
|
+
* @returns {Promise<Array<IConfigData>>} Promise resolving to an array of configuration data.
|
|
148
|
+
*/
|
|
149
|
+
async getList(options) {
|
|
150
|
+
if (this.options?.isVerbose) {
|
|
151
|
+
this.LOGGER.verbose(`Entering getList method with options: ${JSON.stringify(options)}`);
|
|
152
|
+
}
|
|
153
|
+
const { environment, eventManager, section: sectionName, useCache, } = options;
|
|
154
|
+
const finalEnvironment = environment ?? this.options?.environment ?? "default";
|
|
155
|
+
const cacheKey = `config:list:${sectionName}:${finalEnvironment}`;
|
|
156
|
+
try {
|
|
157
|
+
// Check cache first if enabled
|
|
158
|
+
if (useCache && this.options?.cacheOptions?.isEnabled && this.cacheManager) {
|
|
159
|
+
const cachedItems = await this.cacheManager.get(cacheKey);
|
|
160
|
+
if (cachedItems) {
|
|
161
|
+
if (this.options?.isVerbose) {
|
|
162
|
+
this.LOGGER.verbose(`Returning cached config list for ${sectionName}`);
|
|
163
|
+
}
|
|
164
|
+
return cachedItems;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (this.options?.isVerbose) {
|
|
168
|
+
this.LOGGER.verbose(`Fetching section: ${sectionName}`);
|
|
169
|
+
}
|
|
170
|
+
const section = await this.sectionService.get({ where: { name: sectionName } }, eventManager);
|
|
171
|
+
if (this.options?.isVerbose) {
|
|
172
|
+
this.LOGGER.verbose(`Fetching config list for section: ${sectionName}, environment: ${finalEnvironment}`);
|
|
173
|
+
}
|
|
174
|
+
const result = await this.dataService.getList({ where: { environment: finalEnvironment, section: { id: section.id } } }, eventManager);
|
|
175
|
+
if (useCache && this.options?.cacheOptions?.isEnabled && this.cacheManager) {
|
|
176
|
+
const ttl = this.options?.cacheOptions?.maxCacheTTL;
|
|
177
|
+
await this.cacheManager.set(cacheKey, result.items, ttl);
|
|
178
|
+
}
|
|
179
|
+
if (this.options?.isVerbose) {
|
|
180
|
+
this.LOGGER.verbose(`Returning ${result.items.length} config items`);
|
|
181
|
+
}
|
|
182
|
+
return result.items;
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
if (this.options?.isVerbose) {
|
|
186
|
+
this.LOGGER.error(`Error in getList method: ${error.message}`);
|
|
187
|
+
}
|
|
188
|
+
if (error instanceof HttpException) {
|
|
189
|
+
throw error;
|
|
190
|
+
}
|
|
191
|
+
throw new InternalServerErrorException(ErrorString({ entity: { name: "ConfigData" }, type: EErrorStringAction.FETCHING_LIST_ERROR }));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Sets a configuration value with optional encryption.
|
|
196
|
+
* The specified section must already exist.
|
|
197
|
+
* If a configuration with the same name and environment already exists, it will be updated. Otherwise, a new one will be created.
|
|
198
|
+
* @param {IConfigSetOptions} options Configuration set options
|
|
199
|
+
* @returns {Promise<IConfigData>} Promise resolving to the saved configuration data
|
|
200
|
+
*/
|
|
201
|
+
async set(options) {
|
|
202
|
+
if (this.options?.isVerbose) {
|
|
203
|
+
const maskedOptions = {
|
|
204
|
+
...options,
|
|
205
|
+
value: "***",
|
|
206
|
+
};
|
|
207
|
+
this.LOGGER.verbose(`Entering set method with options: ${JSON.stringify(maskedOptions)}`);
|
|
208
|
+
}
|
|
209
|
+
const { description, environment, eventManager, name, section: sectionName, value, } = options;
|
|
210
|
+
const finalEnvironment = environment ?? this.options?.environment ?? "default";
|
|
211
|
+
const shouldApplyEncryption = this.options?.encryptionOptions?.isEnabled ?? false;
|
|
212
|
+
let finalValue = value;
|
|
213
|
+
let isEncrypted = false;
|
|
214
|
+
if (shouldApplyEncryption) {
|
|
215
|
+
if (!this.options?.encryptionOptions?.encryptionKey) {
|
|
216
|
+
throw new InternalServerErrorException(ErrorString({ entity: { name: "ConfigData" }, type: EErrorStringAction.KEY_NOT_FOUND }));
|
|
217
|
+
}
|
|
218
|
+
if (!this.cryptoUtility) {
|
|
219
|
+
throw new InternalServerErrorException("CryptoUtility not available");
|
|
220
|
+
}
|
|
221
|
+
try {
|
|
222
|
+
finalValue = this.cryptoUtility.encrypt(value, this.options.encryptionOptions.encryptionKey);
|
|
223
|
+
isEncrypted = true;
|
|
224
|
+
if (this.options?.isVerbose) {
|
|
225
|
+
this.LOGGER.verbose(`Encrypted value for ${name}`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
if (this.options?.isVerbose) {
|
|
230
|
+
this.LOGGER.error(`Encryption error for ${name}: ${error.message}`);
|
|
231
|
+
}
|
|
232
|
+
throw new InternalServerErrorException(ErrorString({ entity: { name: "ConfigData" }, type: EErrorStringAction.ENCRYPTION_ERROR }));
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
let queryRunner;
|
|
236
|
+
let useTransaction = false;
|
|
237
|
+
let localEventManager = eventManager;
|
|
238
|
+
try {
|
|
239
|
+
useTransaction = !eventManager;
|
|
240
|
+
if (useTransaction) {
|
|
241
|
+
if (!this.dataSource) {
|
|
242
|
+
throw new InternalServerErrorException("DataSource not available for transaction");
|
|
243
|
+
}
|
|
244
|
+
queryRunner = this.dataSource.createQueryRunner();
|
|
245
|
+
await queryRunner.connect();
|
|
246
|
+
await queryRunner.startTransaction();
|
|
247
|
+
localEventManager = queryRunner.manager;
|
|
248
|
+
}
|
|
249
|
+
if (this.options?.isVerbose) {
|
|
250
|
+
this.LOGGER.verbose(`Fetching or creating section: ${sectionName}`);
|
|
251
|
+
}
|
|
252
|
+
const section = await this.getOrCreateSection(sectionName, localEventManager);
|
|
253
|
+
if (this.options?.isVerbose) {
|
|
254
|
+
this.LOGGER.verbose(`Preparing config data for ${name}`);
|
|
255
|
+
}
|
|
256
|
+
const configData = {
|
|
257
|
+
description: description ?? undefined,
|
|
258
|
+
environment: finalEnvironment,
|
|
259
|
+
isEncrypted,
|
|
260
|
+
name,
|
|
261
|
+
section: { id: section.id },
|
|
262
|
+
value: finalValue,
|
|
263
|
+
};
|
|
264
|
+
let result;
|
|
265
|
+
try {
|
|
266
|
+
if (this.options?.isVerbose) {
|
|
267
|
+
this.LOGGER.verbose(`Checking for existing config: ${name}`);
|
|
268
|
+
}
|
|
269
|
+
const existingData = await this.dataService.get({ where: { environment: finalEnvironment, name, section: { id: section.id } } }, localEventManager);
|
|
270
|
+
if (this.options?.isVerbose) {
|
|
271
|
+
this.LOGGER.verbose(`Updating existing config: ${name}`);
|
|
272
|
+
}
|
|
273
|
+
result = await this.dataService.update({ id: existingData.id }, configData, localEventManager);
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
if (error instanceof NotFoundException) {
|
|
277
|
+
if (this.options?.isVerbose) {
|
|
278
|
+
this.LOGGER.verbose(`Config ${name} not found, creating new one`);
|
|
279
|
+
}
|
|
280
|
+
result = await this.dataService.create(configData, localEventManager);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
if (this.options?.isVerbose) {
|
|
284
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
285
|
+
this.LOGGER.error(`Error updating config: ${errorMessage}`);
|
|
286
|
+
}
|
|
287
|
+
throw error;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (this.options?.cacheOptions?.isEnabled && this.cacheManager) {
|
|
291
|
+
const cacheKey = `config:${sectionName}:${name}:${finalEnvironment}`;
|
|
292
|
+
const listCacheKey = `config:list:${sectionName}:${finalEnvironment}`;
|
|
293
|
+
await Promise.all([this.cacheManager.del(cacheKey), this.cacheManager.del(listCacheKey)]);
|
|
294
|
+
}
|
|
295
|
+
if (useTransaction && queryRunner) {
|
|
296
|
+
await queryRunner.commitTransaction();
|
|
297
|
+
await queryRunner.release();
|
|
298
|
+
}
|
|
299
|
+
if (this.options?.isVerbose) {
|
|
300
|
+
this.LOGGER.verbose(`Set method completed successfully for ${name}`);
|
|
301
|
+
}
|
|
302
|
+
return result;
|
|
303
|
+
}
|
|
304
|
+
catch (error) {
|
|
305
|
+
if (useTransaction && queryRunner) {
|
|
306
|
+
await queryRunner.rollbackTransaction();
|
|
307
|
+
await queryRunner.release();
|
|
308
|
+
}
|
|
309
|
+
if (this.options?.isVerbose) {
|
|
310
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
311
|
+
this.LOGGER.error(`Error in set method: ${errorMessage}`);
|
|
312
|
+
}
|
|
313
|
+
if (error instanceof HttpException) {
|
|
314
|
+
throw error;
|
|
315
|
+
}
|
|
316
|
+
throw new InternalServerErrorException(ErrorString({ entity: { name: "ConfigData" }, type: EErrorStringAction.CREATING_ERROR }));
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
async getOrCreateSection(sectionName, eventManager) {
|
|
320
|
+
try {
|
|
321
|
+
return await this.sectionService.get({ where: { name: sectionName } }, eventManager);
|
|
322
|
+
}
|
|
323
|
+
catch (error) {
|
|
324
|
+
if (error instanceof NotFoundException && this.options?.shouldAutoCreateSections) {
|
|
325
|
+
if (this.options?.isVerbose) {
|
|
326
|
+
this.LOGGER.verbose(`Section ${sectionName} not found, creating new one`);
|
|
327
|
+
}
|
|
328
|
+
return await this.sectionService.create({ name: sectionName }, eventManager);
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
if (this.options?.isVerbose) {
|
|
332
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
333
|
+
this.LOGGER.error(`Error fetching section: ${errorMessage}`);
|
|
334
|
+
}
|
|
335
|
+
throw error;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
CrudConfigService = CrudConfigService_1 = __decorate([
|
|
341
|
+
Injectable(),
|
|
342
|
+
__param(0, Inject(TOKEN_CONSTANT.CONFIG_SECTION_SERVICE)),
|
|
343
|
+
__param(1, Inject(TOKEN_CONSTANT.CONFIG_DATA_SERVICE)),
|
|
344
|
+
__param(2, Optional()),
|
|
345
|
+
__param(2, Inject(CACHE_MANAGER)),
|
|
346
|
+
__param(3, Optional()),
|
|
347
|
+
__param(3, Inject(TOKEN_CONSTANT.CONFIG_OPTIONS)),
|
|
348
|
+
__metadata("design:paramtypes", [ApiServiceBase,
|
|
349
|
+
ApiServiceBase,
|
|
350
|
+
Cache, Object, DataSource,
|
|
351
|
+
CryptoUtility])
|
|
352
|
+
], CrudConfigService);
|
|
353
|
+
|
|
354
|
+
export { CrudConfigService };
|
|
355
|
+
//# sourceMappingURL=config.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.service.js","sources":["../../../../../src/modules/config/config.service.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Type } from "@nestjs/common/interfaces";
|
|
2
|
+
import { IConfigControllerOptions } from '../../../shared/interface/config/index';
|
|
3
|
+
import { TDynamicEntity } from '../../../shared/type/index';
|
|
4
|
+
/**
|
|
5
|
+
* Factory to create dynamic ConfigData controller with the correct entity
|
|
6
|
+
* @param {TDynamicEntity} entity The entity type to create controller for
|
|
7
|
+
* @param {IConfigControllerOptions} [options] Controller configuration options
|
|
8
|
+
* @returns {Type} The dynamic controller class
|
|
9
|
+
*/
|
|
10
|
+
export declare function createDynamicDataController(entity: TDynamicEntity, options?: IConfigControllerOptions): Type;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { __decorate, __param, __metadata } from '../../../external/tslib/tslib.es6.js';
|
|
2
|
+
import { EApiRouteType, EApiControllerLoadRelationsStrategy, ApiController, ApiServiceBase } from '@elsikora/nestjs-crud-automator';
|
|
3
|
+
import { Inject } from '@nestjs/common';
|
|
4
|
+
import { TOKEN_CONSTANT } from '../../../shared/constant/token.constant.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Factory to create dynamic ConfigData controller with the correct entity
|
|
8
|
+
* @param {TDynamicEntity} entity The entity type to create controller for
|
|
9
|
+
* @param {IConfigControllerOptions} [options] Controller configuration options
|
|
10
|
+
* @returns {Type} The dynamic controller class
|
|
11
|
+
*/
|
|
12
|
+
function createDynamicDataController(entity, options) {
|
|
13
|
+
const defaultConfig = {
|
|
14
|
+
entity,
|
|
15
|
+
name: "ConfigData",
|
|
16
|
+
path: "config/data",
|
|
17
|
+
routes: {
|
|
18
|
+
[EApiRouteType.CREATE]: {
|
|
19
|
+
isEnabled: true,
|
|
20
|
+
request: {
|
|
21
|
+
relations: {
|
|
22
|
+
relationsLoadStrategy: EApiControllerLoadRelationsStrategy.MANUAL,
|
|
23
|
+
relationsServices: {
|
|
24
|
+
section: "sectionService",
|
|
25
|
+
},
|
|
26
|
+
relationsToLoad: ["section"],
|
|
27
|
+
servicesLoadStrategy: EApiControllerLoadRelationsStrategy.MANUAL,
|
|
28
|
+
shouldLoadRelations: true,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
[EApiRouteType.DELETE]: { isEnabled: true },
|
|
33
|
+
[EApiRouteType.GET]: { isEnabled: true },
|
|
34
|
+
[EApiRouteType.GET_LIST]: { isEnabled: true },
|
|
35
|
+
[EApiRouteType.UPDATE]: {
|
|
36
|
+
isEnabled: true,
|
|
37
|
+
request: {
|
|
38
|
+
relations: {
|
|
39
|
+
relationsLoadStrategy: EApiControllerLoadRelationsStrategy.MANUAL,
|
|
40
|
+
relationsServices: {
|
|
41
|
+
section: "sectionService",
|
|
42
|
+
},
|
|
43
|
+
relationsToLoad: ["section"],
|
|
44
|
+
servicesLoadStrategy: EApiControllerLoadRelationsStrategy.MANUAL,
|
|
45
|
+
shouldLoadRelations: true,
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
const config = {
|
|
52
|
+
...defaultConfig,
|
|
53
|
+
...options?.properties,
|
|
54
|
+
};
|
|
55
|
+
let DynamicConfigDataController = class DynamicConfigDataController {
|
|
56
|
+
service;
|
|
57
|
+
sectionService;
|
|
58
|
+
constructor(service, sectionService) {
|
|
59
|
+
this.service = service;
|
|
60
|
+
this.sectionService = sectionService;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
DynamicConfigDataController = __decorate([
|
|
64
|
+
ApiController(config),
|
|
65
|
+
__param(0, Inject(TOKEN_CONSTANT.CONFIG_DATA_SERVICE)),
|
|
66
|
+
__param(1, Inject(TOKEN_CONSTANT.CONFIG_SECTION_SERVICE)),
|
|
67
|
+
__metadata("design:paramtypes", [ApiServiceBase,
|
|
68
|
+
ApiServiceBase])
|
|
69
|
+
], DynamicConfigDataController);
|
|
70
|
+
return DynamicConfigDataController;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export { createDynamicDataController };
|
|
74
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","sources":["../../../../../../src/modules/config/data/controller.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAcA;;;;;AAKG;AACG,SAAU,2BAA2B,CAC1C,MAAsB,EACtB,OAAkC,EAAA;AAElC,IAAA,MAAM,aAAa,GAA4C;QAC9D,MAAM;AACN,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,MAAM,EAAE;AACP,YAAA,CAAC,aAAa,CAAC,MAAM,GAAG;AACvB,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,OAAO,EAAE;AACR,oBAAA,SAAS,EAAE;wBACV,qBAAqB,EAAE,mCAAmC,CAAC,MAAM;AACjE,wBAAA,iBAAiB,EAAE;AAClB,4BAAA,OAAO,EAAE,gBAAgB;AACzB,yBAAA;wBACD,eAAe,EAAE,CAAC,SAAgC,CAAC;wBACnD,oBAAoB,EAAE,mCAAmC,CAAC,MAAM;AAChE,wBAAA,mBAAmB,EAAE,IAAI;AACzB,qBAAA;AACD,iBAAA;AACD,aAAA;YACD,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE;YAC3C,CAAC,aAAa,CAAC,GAAG,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE;YACxC,CAAC,aAAa,CAAC,QAAQ,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE;AAC7C,YAAA,CAAC,aAAa,CAAC,MAAM,GAAG;AACvB,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,OAAO,EAAE;AACR,oBAAA,SAAS,EAAE;wBACV,qBAAqB,EAAE,mCAAmC,CAAC,MAAM;AACjE,wBAAA,iBAAiB,EAAE;AAClB,4BAAA,OAAO,EAAE,gBAAgB;AACzB,yBAAA;wBACD,eAAe,EAAE,CAAC,SAAgC,CAAC;wBACnD,oBAAoB,EAAE,mCAAmC,CAAC,MAAM;AAChE,wBAAA,mBAAmB,EAAE,IAAI;AACzB,qBAAA;AACD,iBAAA;AACD,aAAA;AACD,SAAA;KACD;AAED,IAAA,MAAM,MAAM,GAA4C;AACvD,QAAA,GAAG,aAAa;QAChB,GAAG,OAAO,EAAE,UAAU;KACtB;IAED,IACM,2BAA2B,GADjC,MACM,2BAA2B,CAAA;AAGf,QAAA,OAAA;AAEA,QAAA,cAAA;QAJjB,WAAA,CAEiB,OAAsC,EAEtC,cAA6C,EAAA;YAF7C,IAAA,CAAA,OAAO,GAAP,OAAO;YAEP,IAAA,CAAA,cAAc,GAAd,cAAc;QAC5B;KACH;IAPK,2BAA2B,GAAA,UAAA,CAAA;QADhC,aAAa,CAAC,MAAM,CAAC;AAGnB,QAAA,OAAA,CAAA,CAAA,EAAA,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAA;AAE1C,QAAA,OAAA,CAAA,CAAA,EAAA,MAAM,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAA;yCADrB,cAAc;YAEP,cAAc,CAAA;AAL1C,KAAA,EAAA,2BAA2B,CAOhC;AAED,IAAA,OAAO,2BAA2B;AACnC;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { TDynamicEntity } from '../../../../shared/type/index';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a dynamic ConfigData entity with TypeORM decorators
|
|
4
|
+
* @param {object} options - Configuration options for the entity
|
|
5
|
+
* @param {TDynamicEntity} options.configSectionEntity - The ConfigSection entity to create relation with
|
|
6
|
+
* @param {number} options.maxDescriptionLength - Maximum length for description field
|
|
7
|
+
* @param {number} options.maxEnvironmentLength - Maximum length for environment field
|
|
8
|
+
* @param {number} options.maxNameLength - Maximum length for name field
|
|
9
|
+
* @param {number} options.maxValueLength - Maximum length for value field
|
|
10
|
+
* @param {string} options.tableName - Name of the database table
|
|
11
|
+
* @returns {TDynamicEntity} Dynamically created ConfigData entity class
|
|
12
|
+
*/
|
|
13
|
+
export declare function createConfigDataEntity(options: {
|
|
14
|
+
configSectionEntity: TDynamicEntity;
|
|
15
|
+
maxDescriptionLength: number;
|
|
16
|
+
maxEnvironmentLength: number;
|
|
17
|
+
maxNameLength: number;
|
|
18
|
+
maxValueLength: number;
|
|
19
|
+
tableName: string;
|
|
20
|
+
}): TDynamicEntity;
|