@elsikora/nestjs-crud-config 1.0.1 → 1.1.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +644 -286
  2. package/dist/cjs/index.js +26 -10
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/modules/config/config.module.js +67 -1
  5. package/dist/cjs/modules/config/config.module.js.map +1 -1
  6. package/dist/cjs/modules/config/config.service.js +55 -98
  7. package/dist/cjs/modules/config/config.service.js.map +1 -1
  8. package/dist/cjs/modules/config/data/entity/entity.js +1 -0
  9. package/dist/cjs/modules/config/data/entity/entity.js.map +1 -1
  10. package/dist/cjs/modules/config/index.d.ts +2 -0
  11. package/dist/cjs/modules/config/migration/entity/entity.d.ts +12 -0
  12. package/dist/cjs/modules/config/migration/entity/entity.js +139 -0
  13. package/dist/cjs/modules/config/migration/entity/entity.js.map +1 -0
  14. package/dist/cjs/modules/config/migration/entity/index.d.ts +1 -0
  15. package/dist/cjs/modules/config/migration/enum/index.d.ts +1 -0
  16. package/dist/cjs/modules/config/migration/enum/status.d.ts +7 -0
  17. package/dist/cjs/modules/config/migration/enum/status.js +11 -0
  18. package/dist/cjs/modules/config/migration/enum/status.js.map +1 -0
  19. package/dist/cjs/modules/config/migration/index.d.ts +5 -0
  20. package/dist/cjs/modules/config/migration/interface/index.d.ts +3 -0
  21. package/dist/cjs/modules/config/migration/interface/interface.d.ts +11 -0
  22. package/dist/cjs/modules/config/migration/interface/migration-definition.interface.d.ts +29 -0
  23. package/dist/cjs/modules/config/migration/interface/migration-options.interface.d.ts +34 -0
  24. package/dist/cjs/modules/config/migration/migration-runner.service.d.ts +22 -0
  25. package/dist/cjs/modules/config/migration/migration-runner.service.js +85 -0
  26. package/dist/cjs/modules/config/migration/migration-runner.service.js.map +1 -0
  27. package/dist/cjs/modules/config/migration/migration.service.d.ts +68 -0
  28. package/dist/cjs/modules/config/migration/migration.service.js +331 -0
  29. package/dist/cjs/modules/config/migration/migration.service.js.map +1 -0
  30. package/dist/cjs/modules/config/section/entity/entity.js +1 -0
  31. package/dist/cjs/modules/config/section/entity/entity.js.map +1 -1
  32. package/dist/cjs/package.json +2 -1
  33. package/dist/cjs/shared/constant/config/index.d.ts +1 -0
  34. package/dist/cjs/shared/constant/config/migration.constant.d.ts +6 -0
  35. package/dist/cjs/shared/constant/config/migration.constant.js +15 -0
  36. package/dist/cjs/shared/constant/config/migration.constant.js.map +1 -0
  37. package/dist/cjs/shared/constant/token.constant.d.ts +2 -0
  38. package/dist/cjs/shared/constant/token.constant.js +4 -0
  39. package/dist/cjs/shared/constant/token.constant.js.map +1 -1
  40. package/dist/cjs/shared/interface/config/options.interface.d.ts +3 -2
  41. package/dist/cjs/shared/utility/index.d.ts +1 -0
  42. package/dist/cjs/shared/utility/logger.utility.d.ts +21 -0
  43. package/dist/cjs/shared/utility/logger.utility.js +67 -0
  44. package/dist/cjs/shared/utility/logger.utility.js.map +1 -0
  45. package/dist/esm/index.js +10 -3
  46. package/dist/esm/index.js.map +1 -1
  47. package/dist/esm/modules/config/config.module.js +67 -1
  48. package/dist/esm/modules/config/config.module.js.map +1 -1
  49. package/dist/esm/modules/config/config.service.js +56 -99
  50. package/dist/esm/modules/config/config.service.js.map +1 -1
  51. package/dist/esm/modules/config/data/entity/entity.js +1 -0
  52. package/dist/esm/modules/config/data/entity/entity.js.map +1 -1
  53. package/dist/esm/modules/config/index.d.ts +2 -0
  54. package/dist/esm/modules/config/migration/entity/entity.d.ts +12 -0
  55. package/dist/esm/modules/config/migration/entity/entity.js +137 -0
  56. package/dist/esm/modules/config/migration/entity/entity.js.map +1 -0
  57. package/dist/esm/modules/config/migration/entity/index.d.ts +1 -0
  58. package/dist/esm/modules/config/migration/enum/index.d.ts +1 -0
  59. package/dist/esm/modules/config/migration/enum/status.d.ts +7 -0
  60. package/dist/esm/modules/config/migration/enum/status.js +11 -0
  61. package/dist/esm/modules/config/migration/enum/status.js.map +1 -0
  62. package/dist/esm/modules/config/migration/index.d.ts +5 -0
  63. package/dist/esm/modules/config/migration/interface/index.d.ts +3 -0
  64. package/dist/esm/modules/config/migration/interface/interface.d.ts +11 -0
  65. package/dist/esm/modules/config/migration/interface/migration-definition.interface.d.ts +29 -0
  66. package/dist/esm/modules/config/migration/interface/migration-options.interface.d.ts +34 -0
  67. package/dist/esm/modules/config/migration/migration-runner.service.d.ts +22 -0
  68. package/dist/esm/modules/config/migration/migration-runner.service.js +85 -0
  69. package/dist/esm/modules/config/migration/migration-runner.service.js.map +1 -0
  70. package/dist/esm/modules/config/migration/migration.service.d.ts +68 -0
  71. package/dist/esm/modules/config/migration/migration.service.js +331 -0
  72. package/dist/esm/modules/config/migration/migration.service.js.map +1 -0
  73. package/dist/esm/modules/config/section/entity/entity.js +1 -0
  74. package/dist/esm/modules/config/section/entity/entity.js.map +1 -1
  75. package/dist/esm/package.json +2 -1
  76. package/dist/esm/shared/constant/config/index.d.ts +1 -0
  77. package/dist/esm/shared/constant/config/migration.constant.d.ts +6 -0
  78. package/dist/esm/shared/constant/config/migration.constant.js +13 -0
  79. package/dist/esm/shared/constant/config/migration.constant.js.map +1 -0
  80. package/dist/esm/shared/constant/token.constant.d.ts +2 -0
  81. package/dist/esm/shared/constant/token.constant.js +4 -0
  82. package/dist/esm/shared/constant/token.constant.js.map +1 -1
  83. package/dist/esm/shared/interface/config/options.interface.d.ts +3 -2
  84. package/dist/esm/shared/utility/index.d.ts +1 -0
  85. package/dist/esm/shared/utility/logger.utility.d.ts +21 -0
  86. package/dist/esm/shared/utility/logger.utility.js +67 -0
  87. package/dist/esm/shared/utility/logger.utility.js.map +1 -0
  88. package/package.json +15 -14
@@ -0,0 +1,331 @@
1
+ 'use strict';
2
+
3
+ var tslib_es6 = require('../../../external/tslib/tslib.es6.js');
4
+ var config_service = require('../config.service.js');
5
+ var common = require('@nestjs/common');
6
+ var migration_constant = require('../../../shared/constant/config/migration.constant.js');
7
+ var token_constant = require('../../../shared/constant/token.constant.js');
8
+ var typeorm = require('typeorm');
9
+ var service_utility = require('../../../shared/utility/create-dynamic/service.utility.js');
10
+ var entity = require('./entity/entity.js');
11
+ var status = require('./enum/status.js');
12
+
13
+ var ConfigMigrationService_1;
14
+ exports.ConfigMigrationService = ConfigMigrationService_1 = class ConfigMigrationService {
15
+ dataSource;
16
+ options;
17
+ configService;
18
+ LOGGER = new common.Logger(ConfigMigrationService_1.name);
19
+ migrationService;
20
+ constructor(dataSource, options, configService) {
21
+ this.dataSource = dataSource;
22
+ this.options = options;
23
+ this.configService = configService;
24
+ }
25
+ /**
26
+ * Cleans up failed migrations
27
+ * @param {string} [migrationName] - Optional migration name to clean up
28
+ * @returns {Promise<void>} Promise that resolves when cleanup is complete
29
+ */
30
+ async cleanupFailedMigrations(migrationName) {
31
+ try {
32
+ const whereCondition = migrationName
33
+ ? { name: migrationName, status: status.EConfigMigrationStatus.FAILED }
34
+ : { status: status.EConfigMigrationStatus.FAILED };
35
+ // Use bulk delete operation to avoid N+1 problem
36
+ const result = await this.migrationService.getList({ where: whereCondition });
37
+ if (result.items.length === 0) {
38
+ this.LOGGER.verbose("No failed migrations found to clean up");
39
+ return;
40
+ }
41
+ // Delete all failed migrations in bulk
42
+ const migrationIds = result.items.map((m) => m.id);
43
+ for (const id of migrationIds) {
44
+ await this.migrationService.delete({ id });
45
+ }
46
+ this.LOGGER.verbose(`Cleaned up ${result.items.length} failed migration(s): ${result.items.map((m) => m.name).join(", ")}`);
47
+ }
48
+ catch (error) {
49
+ this.LOGGER.error("Failed to cleanup failed migrations:", error);
50
+ throw error;
51
+ }
52
+ }
53
+ /**
54
+ * Cleans up stuck migrations (running for too long)
55
+ * @param {number} [timeoutMinutes] - Minutes after which a RUNNING migration is considered stuck
56
+ * @returns {Promise<void>} Promise that resolves when cleanup is complete
57
+ */
58
+ async cleanupStuckMigrations(timeoutMinutes = migration_constant.CONFIG_MIGRATION_CONSTANT.DEFAULT_STUCK_MIGRATION_TIMEOUT_MINUTES) {
59
+ try {
60
+ const cutoffTime = new Date();
61
+ cutoffTime.setMinutes(cutoffTime.getMinutes() - timeoutMinutes);
62
+ const runningMigrations = await this.migrationService.getList({
63
+ where: { status: status.EConfigMigrationStatus.RUNNING },
64
+ });
65
+ const stuckMigrations = runningMigrations.items.filter((migration) => {
66
+ return migration.startedAt && new Date(migration.startedAt) < cutoffTime;
67
+ });
68
+ if (stuckMigrations.length === 0) {
69
+ this.LOGGER.verbose("No stuck migrations found");
70
+ return;
71
+ }
72
+ this.LOGGER.warn(`Found ${stuckMigrations.length} stuck migration(s): ${stuckMigrations.map((m) => m.name).join(", ")}`);
73
+ // Mark stuck migrations as STUCK status
74
+ for (const migration of stuckMigrations) {
75
+ await this.migrationService.update({ id: migration.id }, {
76
+ failedAt: new Date(),
77
+ status: status.EConfigMigrationStatus.STUCK,
78
+ });
79
+ this.LOGGER.verbose(`Marked migration as stuck: ${migration.name}`);
80
+ }
81
+ this.LOGGER.warn(`Marked ${stuckMigrations.length} migration(s) as stuck. You may need to investigate and clean them up manually.`);
82
+ }
83
+ catch (error) {
84
+ this.LOGGER.error("Failed to cleanup stuck migrations:", error);
85
+ throw error;
86
+ }
87
+ }
88
+ /**
89
+ * Executes pending migrations
90
+ * @param {Array<IConfigMigrationDefinition>} migrations - Array of migration definitions
91
+ * @param {boolean} [useTransaction] - Whether to run migrations in a transaction
92
+ * @returns {Promise<void>} Promise that resolves when all migrations are executed
93
+ */
94
+ async executeMigrations(migrations, useTransaction = true) {
95
+ if (!migrations || migrations.length === 0) {
96
+ this.LOGGER.verbose("No migrations to execute");
97
+ return;
98
+ }
99
+ // Validate migrations
100
+ this.validateMigrations(migrations);
101
+ // Sort migrations by name to ensure consistent order
102
+ const sortedMigrations = [...migrations].sort((a, b) => a.name.localeCompare(b.name));
103
+ this.LOGGER.verbose(`Starting migration execution for ${sortedMigrations.length} migrations`);
104
+ // Clean up stuck migrations before starting new ones
105
+ const timeoutMinutes = this.options.migrationOptions?.stuckMigrationTimeoutMinutes ??
106
+ migration_constant.CONFIG_MIGRATION_CONSTANT.DEFAULT_STUCK_MIGRATION_TIMEOUT_MINUTES;
107
+ await this.cleanupStuckMigrations(timeoutMinutes);
108
+ const executedMigrations = await this.getExecutedMigrations();
109
+ const completedMigrationNames = new Set(executedMigrations
110
+ .filter((m) => m.status === status.EConfigMigrationStatus.COMPLETED)
111
+ .map((m) => m.name));
112
+ // Also check for currently running migrations to avoid conflicts
113
+ const runningMigrationNames = new Set(executedMigrations
114
+ .filter((m) => m.status === status.EConfigMigrationStatus.RUNNING)
115
+ .map((m) => m.name));
116
+ const pendingMigrations = sortedMigrations.filter((migration) => !completedMigrationNames.has(migration.name) && !runningMigrationNames.has(migration.name));
117
+ if (pendingMigrations.length === 0) {
118
+ this.LOGGER.verbose("No pending migrations to execute");
119
+ return;
120
+ }
121
+ this.LOGGER.verbose(`Found ${pendingMigrations.length} pending migration(s): ${pendingMigrations.map((m) => m.name).join(", ")}`);
122
+ if (useTransaction) {
123
+ await this.dataSource.transaction(async (transactionalEntityManager) => {
124
+ for (const migration of pendingMigrations) {
125
+ await this.executeSingleMigration(migration, transactionalEntityManager);
126
+ }
127
+ });
128
+ }
129
+ else {
130
+ for (const migration of pendingMigrations) {
131
+ await this.executeSingleMigration(migration);
132
+ }
133
+ }
134
+ this.LOGGER.verbose(`Successfully executed ${pendingMigrations.length} migration(s): ${pendingMigrations.map((m) => m.name).join(", ")}`);
135
+ }
136
+ /**
137
+ * Gets list of executed migration names
138
+ * @returns {Promise<string[]>} Promise that resolves to list of executed migration names
139
+ */
140
+ async getExecutedMigrationList() {
141
+ const executedMigrations = await this.getExecutedMigrations();
142
+ return executedMigrations.map((migration) => migration.name);
143
+ }
144
+ /**
145
+ * Gets list of executed migrations
146
+ * @returns {Promise<IConfigMigration[]>} Promise that resolves to list of executed migrations
147
+ */
148
+ async getExecutedMigrations() {
149
+ try {
150
+ const result = await this.migrationService.getList({
151
+ order: { name: "ASC" },
152
+ });
153
+ return result.items;
154
+ }
155
+ catch (error) {
156
+ const errorMessage = `Failed to get executed migrations: ${error instanceof Error ? error.message : String(error)}`;
157
+ this.LOGGER.error(errorMessage);
158
+ throw error;
159
+ }
160
+ }
161
+ /**
162
+ * Checks if a migration has been executed
163
+ * @param {string} migrationName - The name of the migration to check
164
+ * @returns {Promise<boolean>} Promise that resolves to true if migration is executed
165
+ */
166
+ async isMigrationExecuted(migrationName) {
167
+ try {
168
+ const result = await this.migrationService.getList({
169
+ where: { name: migrationName },
170
+ });
171
+ return result.items.length > 0 && result.items[0]?.status === status.EConfigMigrationStatus.COMPLETED;
172
+ }
173
+ catch (error) {
174
+ this.LOGGER.error(`Failed to check if migration '${migrationName}' is executed:`, error);
175
+ throw error;
176
+ }
177
+ }
178
+ onModuleInit() {
179
+ const tableName = this.options.migrationOptions?.tableName ?? migration_constant.CONFIG_MIGRATION_CONSTANT.DEFAULT_TABLE_NAME;
180
+ const tablePrefix = this.options.entityOptions?.tablePrefix ?? "";
181
+ const finalTableName = `${tablePrefix}${tableName}`;
182
+ const migrationEntity = entity.createConfigMigrationEntity({
183
+ maxNameLength: migration_constant.CONFIG_MIGRATION_CONSTANT.MAX_NAME_LENGTH,
184
+ tableName: finalTableName,
185
+ });
186
+ const repository = this.dataSource.getRepository(migrationEntity);
187
+ const DynamicServiceClass = service_utility.createDynamicService(migrationEntity, "ConfigMigrationService");
188
+ // @ts-ignore
189
+ this.migrationService = new DynamicServiceClass(repository);
190
+ }
191
+ /**
192
+ * Rolls back a migration
193
+ * @param {string} migrationName - The name of the migration to roll back
194
+ * @param {Array<IConfigMigrationDefinition>} migrations - Array of migration definitions
195
+ * @returns {Promise<void>} Promise that resolves when rollback is complete
196
+ */
197
+ async rollbackMigration(migrationName, migrations) {
198
+ const migration = migrations.find((m) => m.name === migrationName);
199
+ if (!migration) {
200
+ throw new Error(`Migration '${migrationName}' not found`);
201
+ }
202
+ if (!migration.down) {
203
+ throw new Error(`Migration '${migrationName}' does not have a down method`);
204
+ }
205
+ const startTime = new Date();
206
+ try {
207
+ this.LOGGER.verbose(`Starting rollback for migration: ${migration.name}`);
208
+ await this.dataSource.transaction(async (transactionalEntityManager) => {
209
+ try {
210
+ // Execute the down method
211
+ if (migration.down) {
212
+ await migration.down(this.configService, transactionalEntityManager);
213
+ }
214
+ // Delete the migration record
215
+ await this.migrationService.delete({ name: migrationName });
216
+ this.LOGGER.verbose(`Successfully rolled back migration: ${migration.name}`);
217
+ }
218
+ catch (downError) {
219
+ const errorMessage = `Failed to rollback migration '${migration.name}': ${downError instanceof Error ? downError.message : String(downError)}`;
220
+ this.LOGGER.error(errorMessage);
221
+ // Don't update the migration record on rollback failure
222
+ throw downError;
223
+ }
224
+ });
225
+ const completedTime = new Date();
226
+ this.LOGGER.verbose(`Migration rollback completed: ${migration.name} (took ${completedTime.getTime() - startTime.getTime()}ms)`);
227
+ }
228
+ catch (error) {
229
+ const duration = Date.now() - startTime.getTime();
230
+ this.LOGGER.error(`Migration rollback failed: ${migration.name} (took ${duration}ms)`, error);
231
+ const failedTime = new Date();
232
+ // Update migration status to FAILED
233
+ await this.migrationService.update({ name: migrationName }, {
234
+ failedAt: failedTime,
235
+ status: status.EConfigMigrationStatus.FAILED,
236
+ });
237
+ throw error;
238
+ }
239
+ }
240
+ /**
241
+ * Executes a single migration
242
+ * @param {IConfigMigrationDefinition} migration - Migration definition
243
+ * @param {EntityManager} [transactionalEntityManager] - Optional transaction manager
244
+ * @returns {Promise<void>} Promise that resolves when migration is executed
245
+ */
246
+ async executeSingleMigration(migration, transactionalEntityManager) {
247
+ this.LOGGER.verbose(`Executing migration: ${migration.name}`);
248
+ // First, record the migration as started (to prevent race conditions)
249
+ let migrationRecord;
250
+ const startTime = new Date();
251
+ try {
252
+ migrationRecord = await this.migrationService.create({
253
+ name: migration.name,
254
+ startedAt: startTime,
255
+ status: status.EConfigMigrationStatus.RUNNING,
256
+ }, transactionalEntityManager);
257
+ }
258
+ catch (error) {
259
+ // If creation fails due to unique constraint violation, migration might already be running
260
+ const errorMessage = error instanceof Error ? error.message : String(error);
261
+ if (errorMessage.includes("duplicate") ||
262
+ errorMessage.includes("unique") ||
263
+ errorMessage.includes("UNIQUE")) {
264
+ this.LOGGER.warn(`Migration '${migration.name}' is already running or has been executed`);
265
+ return;
266
+ }
267
+ throw error;
268
+ }
269
+ try {
270
+ // Execute the migration
271
+ await migration.up(this.configService, transactionalEntityManager);
272
+ // Update status to completed with executedAt timestamp
273
+ const completedTime = new Date();
274
+ await this.migrationService.update({ id: migrationRecord.id }, {
275
+ executedAt: completedTime,
276
+ status: status.EConfigMigrationStatus.COMPLETED,
277
+ }, transactionalEntityManager);
278
+ const duration = completedTime.getTime() - startTime.getTime();
279
+ this.LOGGER.verbose(`Successfully executed migration: ${migration.name} (${duration}ms)`);
280
+ }
281
+ catch (error) {
282
+ this.LOGGER.error(`Failed to execute migration: ${migration.name}`, error);
283
+ // Mark migration as failed with failedAt timestamp
284
+ const failedTime = new Date();
285
+ try {
286
+ await this.migrationService.update({ id: migrationRecord.id }, {
287
+ failedAt: failedTime,
288
+ status: status.EConfigMigrationStatus.FAILED,
289
+ }, transactionalEntityManager);
290
+ }
291
+ catch (updateError) {
292
+ this.LOGGER.error(`Failed to update migration status for ${migration.name}:`, updateError);
293
+ }
294
+ throw error;
295
+ }
296
+ }
297
+ /**
298
+ * Validates migrations for duplicates and naming issues
299
+ * @param {Array<IConfigMigrationDefinition>} migrations - Array of migration definitions
300
+ */
301
+ validateMigrations(migrations) {
302
+ // Check for duplicate names
303
+ const migrationNames = migrations.map((m) => m.name);
304
+ const duplicates = migrationNames.filter((name, index) => migrationNames.indexOf(name) !== index);
305
+ if (duplicates.length > 0) {
306
+ throw new Error(`Duplicate migration names found: ${duplicates.join(", ")}`);
307
+ }
308
+ // Check for invalid names (cannot be empty or contain only whitespace)
309
+ const invalidNames = migrationNames.filter((name) => !name?.trim());
310
+ if (invalidNames.length > 0) {
311
+ throw new Error("Migration names cannot be empty or contain only whitespace");
312
+ }
313
+ // Check for missing required methods
314
+ const invalidMigrations = migrations.filter((m) => !m.up || typeof m.up !== "function");
315
+ if (invalidMigrations.length > 0) {
316
+ throw new Error(`Migrations missing required 'up' method: ${invalidMigrations.map((m) => m.name).join(", ")}`);
317
+ }
318
+ // Check for names that are too long
319
+ const tooLongNames = migrationNames.filter((name) => name.length > migration_constant.CONFIG_MIGRATION_CONSTANT.MAX_NAME_LENGTH);
320
+ if (tooLongNames.length > 0) {
321
+ throw new Error(`Migration names too long (max ${migration_constant.CONFIG_MIGRATION_CONSTANT.MAX_NAME_LENGTH} characters): ${tooLongNames.join(", ")}`);
322
+ }
323
+ }
324
+ };
325
+ exports.ConfigMigrationService = ConfigMigrationService_1 = tslib_es6.__decorate([
326
+ common.Injectable(),
327
+ tslib_es6.__param(0, common.Inject(typeorm.DataSource)),
328
+ tslib_es6.__param(1, common.Inject(token_constant.TOKEN_CONSTANT.CONFIG_OPTIONS)),
329
+ tslib_es6.__metadata("design:paramtypes", [typeorm.DataSource, Object, config_service.CrudConfigService])
330
+ ], exports.ConfigMigrationService);
331
+ //# sourceMappingURL=migration.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.service.js","sources":["../../../../../../src/modules/config/migration/migration.service.ts"],"sourcesContent":[null],"names":["ConfigMigrationService","Logger","EConfigMigrationStatus","CONFIG_MIGRATION_CONSTANT","createConfigMigrationEntity","createDynamicService","__decorate","Injectable","__param","Inject","DataSource","TOKEN_CONSTANT","__metadata","CrudConfigService"],"mappings":"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"}
@@ -8,6 +8,7 @@ require('@nestjs/common');
8
8
  require('@nestjs/typeorm');
9
9
  var typeorm = require('typeorm');
10
10
  require('../../../../shared/utility/crypto.utility.js');
11
+ require('../../../../shared/utility/logger.utility.js');
11
12
 
12
13
  /**
13
14
  * Creates a dynamic ConfigSection entity with TypeORM decorators
@@ -1 +1 @@
1
- {"version":3,"file":"entity.js","sources":["../../../../../../../src/modules/config/section/entity/entity.ts"],"sourcesContent":[null],"names":["createDynamicEntityClass","CreateDateColumn","ApiPropertyDescribe","EApiPropertyDateType","EApiPropertyDateIdentifier","EApiPropertyDescribeType","EApiPropertyStringType","API_PROPERTY_CONSTANT","UpdateDateColumn"],"mappings":";;;;;;;;;;;AAcA;;;;;;;AAOG;AACG,SAAU,yBAAyB,CAAC,OAIzC,EAAA;AACA,IAAA,OAAOA,uCAAwB,CAAC;AAC/B,QAAA,OAAO,EAAE;AACR,YAAA,SAAS,EAAE;AACV,gBAAA,OAAO,EAAE,MAAM,mBAAmB;AAClC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,IAAI,EAAE,WAAW;AACjB,aAAA;AACD,YAAA,WAAW,EAAE;gBACZ,MAAM,EAAE,OAAO,CAAC,oBAAoB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,IAAI,EAAE,SAAS;AACf,aAAA;AACD,YAAA,IAAI,EAAE;gBACL,MAAM,EAAE,OAAO,CAAC,aAAa;AAC7B,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,IAAI,EAAE,SAAS;AACf,aAAA;AACD,YAAA,SAAS,EAAE;AACV,gBAAA,OAAO,EAAE,MAAM,mBAAmB;AAClC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,IAAI,EAAE,WAAW;AACjB,aAAA;AACD,SAAA;AACD,QAAA,UAAU,EAAE;AACX,YAAA,SAAS,EAAE;AACV,gBAAAC,wBAAgB,EAAE;AAClB,gBAAAC,uCAAmB,CAAC;oBACnB,MAAM,EAAEC,wCAAoB,CAAC,SAAS;oBACtC,UAAU,EAAEC,8CAA0B,CAAC,UAAU;oBACjD,IAAI,EAAEC,4CAAwB,CAAC,IAAI;iBACnC,CAAsB;AACvB,aAAA;AACD,YAAA,WAAW,EAAE;AACZ,gBAAAH,uCAAmB,CAAC;AACnB,oBAAA,WAAW,EAAE,MAAM;AACnB,oBAAA,YAAY,EAAE,SAAS;oBACvB,MAAM,EAAEI,0CAAsB,CAAC,MAAM;AACrC,oBAAA,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE,OAAO,CAAC,oBAAoB;oBACvC,SAAS,EAAEC,0CAAqB,CAAC,eAAe;AAChD,oBAAA,OAAO,EAAE,CAAA,KAAA,EAAQ,OAAO,CAAC,oBAAoB,CAAA,EAAA,CAAI;oBACjD,IAAI,EAAEF,4CAAwB,CAAC,MAAM;iBACrC,CAAsB;AACvB,aAAA;AACD,YAAA,EAAE,EAAE;AACH,gBAAAH,uCAAmB,CAAC;oBACnB,IAAI,EAAEG,4CAAwB,CAAC,IAAI;iBACnC,CAAsB;AACvB,aAAA;AACD,YAAA,IAAI,EAAE;AACL,gBAAAH,uCAAmB,CAAC;AACnB,oBAAA,WAAW,EAAE,MAAM;AACnB,oBAAA,YAAY,EAAE,SAAS;oBACvB,MAAM,EAAEI,0CAAsB,CAAC,MAAM;oBACrC,SAAS,EAAE,OAAO,CAAC,aAAa;oBAChC,SAAS,EAAEC,0CAAqB,CAAC,eAAe;AAChD,oBAAA,OAAO,EAAE,CAAA,cAAA,EAAiB,OAAO,CAAC,aAAa,CAAA,EAAA,CAAI;oBACnD,IAAI,EAAEF,4CAAwB,CAAC,MAAM;iBACrC,CAAsB;AACvB,aAAA;AACD,YAAA,SAAS,EAAE;AACV,gBAAAG,wBAAgB,EAAE;AAClB,gBAAAN,uCAAmB,CAAC;oBACnB,MAAM,EAAEC,wCAAoB,CAAC,SAAS;oBACtC,UAAU,EAAEC,8CAA0B,CAAC,UAAU;oBACjD,IAAI,EAAEC,4CAAwB,CAAC,IAAI;iBACnC,CAAsB;AACvB,aAAA;AACD,SAAA;AACD,QAAA,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,KAAA,CAAC;AACH;;;;"}
1
+ {"version":3,"file":"entity.js","sources":["../../../../../../../src/modules/config/section/entity/entity.ts"],"sourcesContent":[null],"names":["createDynamicEntityClass","CreateDateColumn","ApiPropertyDescribe","EApiPropertyDateType","EApiPropertyDateIdentifier","EApiPropertyDescribeType","EApiPropertyStringType","API_PROPERTY_CONSTANT","UpdateDateColumn"],"mappings":";;;;;;;;;;;;AAcA;;;;;;;AAOG;AACG,SAAU,yBAAyB,CAAC,OAIzC,EAAA;AACA,IAAA,OAAOA,uCAAwB,CAAC;AAC/B,QAAA,OAAO,EAAE;AACR,YAAA,SAAS,EAAE;AACV,gBAAA,OAAO,EAAE,MAAM,mBAAmB;AAClC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,IAAI,EAAE,WAAW;AACjB,aAAA;AACD,YAAA,WAAW,EAAE;gBACZ,MAAM,EAAE,OAAO,CAAC,oBAAoB;AACpC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,IAAI,EAAE,SAAS;AACf,aAAA;AACD,YAAA,IAAI,EAAE;gBACL,MAAM,EAAE,OAAO,CAAC,aAAa;AAC7B,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,IAAI,EAAE,SAAS;AACf,aAAA;AACD,YAAA,SAAS,EAAE;AACV,gBAAA,OAAO,EAAE,MAAM,mBAAmB;AAClC,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,IAAI,EAAE,WAAW;AACjB,aAAA;AACD,SAAA;AACD,QAAA,UAAU,EAAE;AACX,YAAA,SAAS,EAAE;AACV,gBAAAC,wBAAgB,EAAE;AAClB,gBAAAC,uCAAmB,CAAC;oBACnB,MAAM,EAAEC,wCAAoB,CAAC,SAAS;oBACtC,UAAU,EAAEC,8CAA0B,CAAC,UAAU;oBACjD,IAAI,EAAEC,4CAAwB,CAAC,IAAI;iBACnC,CAAsB;AACvB,aAAA;AACD,YAAA,WAAW,EAAE;AACZ,gBAAAH,uCAAmB,CAAC;AACnB,oBAAA,WAAW,EAAE,MAAM;AACnB,oBAAA,YAAY,EAAE,SAAS;oBACvB,MAAM,EAAEI,0CAAsB,CAAC,MAAM;AACrC,oBAAA,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE,OAAO,CAAC,oBAAoB;oBACvC,SAAS,EAAEC,0CAAqB,CAAC,eAAe;AAChD,oBAAA,OAAO,EAAE,CAAA,KAAA,EAAQ,OAAO,CAAC,oBAAoB,CAAA,EAAA,CAAI;oBACjD,IAAI,EAAEF,4CAAwB,CAAC,MAAM;iBACrC,CAAsB;AACvB,aAAA;AACD,YAAA,EAAE,EAAE;AACH,gBAAAH,uCAAmB,CAAC;oBACnB,IAAI,EAAEG,4CAAwB,CAAC,IAAI;iBACnC,CAAsB;AACvB,aAAA;AACD,YAAA,IAAI,EAAE;AACL,gBAAAH,uCAAmB,CAAC;AACnB,oBAAA,WAAW,EAAE,MAAM;AACnB,oBAAA,YAAY,EAAE,SAAS;oBACvB,MAAM,EAAEI,0CAAsB,CAAC,MAAM;oBACrC,SAAS,EAAE,OAAO,CAAC,aAAa;oBAChC,SAAS,EAAEC,0CAAqB,CAAC,eAAe;AAChD,oBAAA,OAAO,EAAE,CAAA,cAAA,EAAiB,OAAO,CAAC,aAAa,CAAA,EAAA,CAAI;oBACnD,IAAI,EAAEF,4CAAwB,CAAC,MAAM;iBACrC,CAAsB;AACvB,aAAA;AACD,YAAA,SAAS,EAAE;AACV,gBAAAG,wBAAgB,EAAE;AAClB,gBAAAN,uCAAmB,CAAC;oBACnB,MAAM,EAAEC,wCAAoB,CAAC,SAAS;oBACtC,UAAU,EAAEC,8CAA0B,CAAC,UAAU;oBACjD,IAAI,EAAEC,4CAAwB,CAAC,IAAI;iBACnC,CAAsB;AACvB,aAAA;AACD,SAAA;AACD,QAAA,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,KAAA,CAAC;AACH;;;;"}
@@ -3,6 +3,7 @@
3
3
  "dependencies": {
4
4
  "@elsikora/nestjs-crud-automator": "^1.10.3",
5
5
  "@nestjs/cache-manager": "^3.0.1",
6
- "@nestjs/event-emitter": "^3.0.1"
6
+ "@nestjs/event-emitter": "^3.0.1",
7
+ "dotenv": "^17.2.0"
7
8
  }
8
9
  }
@@ -1,2 +1,3 @@
1
1
  export { CONFIG_DATA_CONSTANT } from './data.constant';
2
+ export { CONFIG_MIGRATION_CONSTANT } from './migration.constant';
2
3
  export { CONFIG_SECTION_CONSTANT } from './section.constant';
@@ -0,0 +1,6 @@
1
+ export declare const CONFIG_MIGRATION_CONSTANT: {
2
+ readonly DEFAULT_STUCK_MIGRATION_TIMEOUT_MINUTES: number;
3
+ readonly DEFAULT_TABLE_NAME: string;
4
+ readonly MAX_NAME_LENGTH: number;
5
+ readonly MAX_STATUS_LENGTH: number;
6
+ };
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ const MAX_NAME_LENGTH = 255;
4
+ const DEFAULT_STUCK_MIGRATION_TIMEOUT_MINUTES = 30;
5
+ const MAX_STATUS_LENGTH = 20;
6
+ const DEFAULT_TABLE_NAME = "config_migrations";
7
+ const CONFIG_MIGRATION_CONSTANT = {
8
+ DEFAULT_STUCK_MIGRATION_TIMEOUT_MINUTES: DEFAULT_STUCK_MIGRATION_TIMEOUT_MINUTES,
9
+ DEFAULT_TABLE_NAME: DEFAULT_TABLE_NAME,
10
+ MAX_NAME_LENGTH: MAX_NAME_LENGTH,
11
+ MAX_STATUS_LENGTH: MAX_STATUS_LENGTH,
12
+ };
13
+
14
+ exports.CONFIG_MIGRATION_CONSTANT = CONFIG_MIGRATION_CONSTANT;
15
+ //# sourceMappingURL=migration.constant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.constant.js","sources":["../../../../../../src/shared/constant/config/migration.constant.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA,MAAM,eAAe,GAAW,GAAG;AACnC,MAAM,uCAAuC,GAAW,EAAE;AAC1D,MAAM,iBAAiB,GAAW,EAAE;AACpC,MAAM,kBAAkB,GAAW,mBAAmB;AAE/C,MAAM,yBAAyB,GAKlC;AACH,IAAA,uCAAuC,EAAE,uCAAuC;AAChF,IAAA,kBAAkB,EAAE,kBAAkB;AACtC,IAAA,eAAe,EAAE,eAAe;AAChC,IAAA,iBAAiB,EAAE,iBAAiB;;;;;"}
@@ -1,6 +1,8 @@
1
1
  export declare const TOKEN_CONSTANT: {
2
2
  readonly CONFIG_DATA_ENTITY: symbol;
3
3
  readonly CONFIG_DATA_SERVICE: symbol;
4
+ readonly CONFIG_MIGRATION_ENTITY: symbol;
5
+ readonly CONFIG_MIGRATION_SERVICE: symbol;
4
6
  readonly CONFIG_OPTIONS: symbol;
5
7
  readonly CONFIG_SECTION_ENTITY: symbol;
6
8
  readonly CONFIG_SECTION_SERVICE: symbol;
@@ -4,12 +4,16 @@ const CONFIG_SECTION_SERVICE = Symbol("CRUD_CONFIG_SECTION_SERVICE");
4
4
  const CONFIG_DATA_SERVICE = Symbol("CRUD_CONFIG_DATA_SERVICE");
5
5
  const CONFIG_SECTION_ENTITY = Symbol("CRUD_CONFIG_SECTION_ENTITY");
6
6
  const CONFIG_DATA_ENTITY = Symbol("CRUD_CONFIG_DATA_ENTITY");
7
+ const CONFIG_MIGRATION_SERVICE = Symbol("CRUD_CONFIG_MIGRATION_SERVICE");
8
+ const CONFIG_MIGRATION_ENTITY = Symbol("CRUD_CONFIG_MIGRATION_ENTITY");
7
9
  const CONFIG_OPTIONS = Symbol("CRUD_CONFIG_OPTIONS");
8
10
  const DYNAMIC_PROVIDERS_FACTORY = Symbol("CRUD_CONFIG_DYNAMIC_PROVIDERS_FACTORY");
9
11
  // eslint-disable-next-line @elsikora/no-secrets/no-pattern-match
10
12
  const TOKEN_CONSTANT = {
11
13
  CONFIG_DATA_ENTITY,
12
14
  CONFIG_DATA_SERVICE,
15
+ CONFIG_MIGRATION_ENTITY,
16
+ CONFIG_MIGRATION_SERVICE,
13
17
  CONFIG_OPTIONS,
14
18
  CONFIG_SECTION_ENTITY,
15
19
  CONFIG_SECTION_SERVICE,
@@ -1 +1 @@
1
- {"version":3,"file":"token.constant.js","sources":["../../../../../src/shared/constant/token.constant.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA,MAAM,sBAAsB,GAAW,MAAM,CAAC,6BAA6B,CAAC;AAC5E,MAAM,mBAAmB,GAAW,MAAM,CAAC,0BAA0B,CAAC;AACtE,MAAM,qBAAqB,GAAW,MAAM,CAAC,4BAA4B,CAAC;AAC1E,MAAM,kBAAkB,GAAW,MAAM,CAAC,yBAAyB,CAAC;AACpE,MAAM,cAAc,GAAW,MAAM,CAAC,qBAAqB,CAAC;AAC5D,MAAM,yBAAyB,GAAW,MAAM,CAAC,uCAAuC,CAAC;AAEzF;AACO,MAAM,cAAc,GAOvB;IACH,kBAAkB;IAClB,mBAAmB;IACnB,cAAc;IACd,qBAAqB;IACrB,sBAAsB;IACtB,yBAAyB;;;;;"}
1
+ {"version":3,"file":"token.constant.js","sources":["../../../../../src/shared/constant/token.constant.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA,MAAM,sBAAsB,GAAW,MAAM,CAAC,6BAA6B,CAAC;AAC5E,MAAM,mBAAmB,GAAW,MAAM,CAAC,0BAA0B,CAAC;AACtE,MAAM,qBAAqB,GAAW,MAAM,CAAC,4BAA4B,CAAC;AAC1E,MAAM,kBAAkB,GAAW,MAAM,CAAC,yBAAyB,CAAC;AACpE,MAAM,wBAAwB,GAAW,MAAM,CAAC,+BAA+B,CAAC;AAChF,MAAM,uBAAuB,GAAW,MAAM,CAAC,8BAA8B,CAAC;AAC9E,MAAM,cAAc,GAAW,MAAM,CAAC,qBAAqB,CAAC;AAC5D,MAAM,yBAAyB,GAAW,MAAM,CAAC,uCAAuC,CAAC;AAEzF;AACO,MAAM,cAAc,GASvB;IACH,kBAAkB;IAClB,mBAAmB;IACnB,uBAAuB;IACvB,wBAAwB;IACxB,cAAc;IACd,qBAAqB;IACrB,sBAAsB;IACtB,yBAAyB;;;;;"}
@@ -1,3 +1,4 @@
1
+ import type { IConfigMigrationOptions } from '../../../modules/config/migration/interface/index';
1
2
  import type { IConfigCacheOptions } from './cache-options.interface';
2
3
  import type { IConfigControllersOptions } from './controller-options.interface';
3
4
  import type { IConfigEncryptionOptions } from './encryption-options.interface';
@@ -27,9 +28,9 @@ export interface IConfigOptions {
27
28
  */
28
29
  environment?: string;
29
30
  /**
30
- * Whether to log verbose information
31
+ * Migration configuration options
31
32
  */
32
- isVerbose?: boolean;
33
+ migrationOptions?: IConfigMigrationOptions;
33
34
  /**
34
35
  * Whether to automatically create missing sections
35
36
  */
@@ -1,3 +1,4 @@
1
1
  export * from './create-dynamic/index';
2
2
  export { createDynamicEntityClass as createDynamicEntityUtility } from './create-dynamic-entity.utility';
3
3
  export * from './crypto.utility';
4
+ export * from './logger.utility';
@@ -0,0 +1,21 @@
1
+ import { ConsoleLogger } from "@nestjs/common";
2
+ import "dotenv/config";
3
+ /**
4
+ * Custom logger that extends NestJS's ConsoleLogger with environment-based log level filtering
5
+ */
6
+ export declare class LoggerUtility extends ConsoleLogger {
7
+ private static readonly ENV_LOG_LEVEL_KEY;
8
+ constructor(context?: string);
9
+ /**
10
+ * Static method to create a logger with a specific context
11
+ * @param {string} context - The context name for the logger
12
+ * @returns {LoggerUtility} A new logger instance with the specified context
13
+ */
14
+ static getLogger(context?: string): LoggerUtility;
15
+ /**
16
+ * Get the current log level from environment variable
17
+ * @returns {Array<LogLevel>} Array of enabled log levels based on environment configuration
18
+ * @private
19
+ */
20
+ private static getLogLevelsFromEnv;
21
+ }
@@ -0,0 +1,67 @@
1
+ 'use strict';
2
+
3
+ var tslib_es6 = require('../../external/tslib/tslib.es6.js');
4
+ var common = require('@nestjs/common');
5
+ require('dotenv/config');
6
+
7
+ var LoggerUtility_1;
8
+ /**
9
+ * Custom logger that extends NestJS's ConsoleLogger with environment-based log level filtering
10
+ */
11
+ exports.LoggerUtility = class LoggerUtility extends common.ConsoleLogger {
12
+ static { LoggerUtility_1 = this; }
13
+ static ENV_LOG_LEVEL_KEY = "NCC_LOG_LEVEL";
14
+ constructor(context) {
15
+ super(context ?? "DefaultContext", {
16
+ logLevels: LoggerUtility_1.getLogLevelsFromEnv(),
17
+ });
18
+ }
19
+ /**
20
+ * Static method to create a logger with a specific context
21
+ * @param {string} context - The context name for the logger
22
+ * @returns {LoggerUtility} A new logger instance with the specified context
23
+ */
24
+ static getLogger(context) {
25
+ return new LoggerUtility_1(`NestJS-Crud-Config/${context ?? "Core"}`);
26
+ }
27
+ /**
28
+ * Get the current log level from environment variable
29
+ * @returns {Array<LogLevel>} Array of enabled log levels based on environment configuration
30
+ * @private
31
+ */
32
+ static getLogLevelsFromEnv() {
33
+ const logLevel = process.env[this.ENV_LOG_LEVEL_KEY] ?? "none";
34
+ if (!logLevel) {
35
+ // Default log levels if not specified in env
36
+ return ["error", "warn", "log"];
37
+ }
38
+ switch (logLevel.toLowerCase()) {
39
+ case "debug": {
40
+ return ["error", "warn", "log", "debug"];
41
+ }
42
+ case "error": {
43
+ return ["error"];
44
+ }
45
+ case "log": {
46
+ return ["error", "warn", "log"];
47
+ }
48
+ case "none": {
49
+ return [];
50
+ }
51
+ case "verbose": {
52
+ return ["error", "warn", "log", "debug", "verbose"];
53
+ }
54
+ case "warn": {
55
+ return ["error", "warn"];
56
+ }
57
+ default: {
58
+ return ["error", "warn", "log"];
59
+ }
60
+ }
61
+ }
62
+ };
63
+ exports.LoggerUtility = LoggerUtility_1 = tslib_es6.__decorate([
64
+ common.Injectable(),
65
+ tslib_es6.__metadata("design:paramtypes", [String])
66
+ ], exports.LoggerUtility);
67
+ //# sourceMappingURL=logger.utility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.utility.js","sources":["../../../../../src/shared/utility/logger.utility.ts"],"sourcesContent":[null],"names":["LoggerUtility","ConsoleLogger","__decorate","Injectable"],"mappings":";;;;;;;AAMA;;AAEG;AAEUA,qBAAa,GAAnB,MAAM,aAAc,SAAQC,oBAAa,CAAA;;AACvC,IAAA,OAAgB,iBAAiB,GAAW,eAAe;AAEnE,IAAA,WAAA,CAAY,OAAgB,EAAA;AAC3B,QAAA,KAAK,CAAC,OAAO,IAAI,gBAAgB,EAAE;AAClC,YAAA,SAAS,EAAE,eAAa,CAAC,mBAAmB,EAAE;AAC9C,SAAA,CAAC;IACH;AAEA;;;;AAIG;IACI,OAAO,SAAS,CAAC,OAAgB,EAAA;QACvC,OAAO,IAAI,eAAa,CAAC,CAAA,mBAAA,EAAsB,OAAO,IAAI,MAAM,CAAA,CAAE,CAAC;IACpE;AAEA;;;;AAIG;AACK,IAAA,OAAO,mBAAmB,GAAA;AACjC,QAAA,MAAM,QAAQ,GAAW,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,MAAM;QAEtE,IAAI,CAAC,QAAQ,EAAE;;AAEd,YAAA,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;QAChC;AAEA,QAAA,QAAQ,QAAQ,CAAC,WAAW,EAAE;YAC7B,KAAK,OAAO,EAAE;gBACb,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC;YACzC;YAEA,KAAK,OAAO,EAAE;gBACb,OAAO,CAAC,OAAO,CAAC;YACjB;YAEA,KAAK,KAAK,EAAE;AACX,gBAAA,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;YAChC;YAEA,KAAK,MAAM,EAAE;AACZ,gBAAA,OAAO,EAAE;YACV;YAEA,KAAK,SAAS,EAAE;gBACf,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC;YACpD;YAEA,KAAK,MAAM,EAAE;AACZ,gBAAA,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;YACzB;YAEA,SAAS;AACR,gBAAA,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;YAChC;;IAEF;;AA5DYD,qBAAa,GAAA,eAAA,GAAAE,oBAAA,CAAA;AADzB,IAAAC,iBAAU,EAAE;;AACA,CAAA,EAAAH,qBAAa,CA6DzB;;"}
package/dist/esm/index.js CHANGED
@@ -1,15 +1,22 @@
1
1
  export { CrudConfigModule } from './modules/config/config.module.js';
2
2
  export { CrudConfigService } from './modules/config/config.service.js';
3
+ import '@elsikora/nestjs-crud-automator';
3
4
  export { API_PROPERTY_CONSTANT } from './shared/constant/api-property.constant.js';
4
5
  export { CONFIG_DATA_CONSTANT } from './shared/constant/config/data.constant.js';
6
+ export { CONFIG_MIGRATION_CONSTANT } from './shared/constant/config/migration.constant.js';
5
7
  export { CONFIG_SECTION_CONSTANT } from './shared/constant/config/section.constant.js';
6
8
  export { CRYPTO_CONSTANT } from './shared/constant/crypto.constant.js';
7
9
  export { TOKEN_CONSTANT } from './shared/constant/token.constant.js';
8
- export { EEnvironment } from './shared/enum/environment.enum.js';
9
- export { EInstanceName } from './shared/enum/instance-name.enum.js';
10
- export { EService } from './shared/enum/service.enum.js';
11
10
  export { createDynamicEntityClass } from './shared/utility/create-dynamic/entity.utility.js';
12
11
  export { createDynamicService } from './shared/utility/create-dynamic/service.utility.js';
13
12
  export { createDynamicEntityClass as createDynamicEntityUtility } from './shared/utility/create-dynamic-entity.utility.js';
14
13
  export { CryptoUtility } from './shared/utility/crypto.utility.js';
14
+ export { LoggerUtility } from './shared/utility/logger.utility.js';
15
+ import 'typeorm';
16
+ export { EConfigMigrationStatus } from './modules/config/migration/enum/status.js';
17
+ import './modules/config/migration/migration-runner.service.js';
18
+ import './modules/config/migration/migration.service.js';
19
+ export { EEnvironment } from './shared/enum/environment.enum.js';
20
+ export { EInstanceName } from './shared/enum/instance-name.enum.js';
21
+ export { EService } from './shared/enum/service.enum.js';
15
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}