@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
+ import { __decorate, __param, __metadata } from '../../../external/tslib/tslib.es6.js';
2
+ import { CrudConfigService } from '../config.service.js';
3
+ import { Injectable, Inject, Logger } from '@nestjs/common';
4
+ import { CONFIG_MIGRATION_CONSTANT } from '../../../shared/constant/config/migration.constant.js';
5
+ import { TOKEN_CONSTANT } from '../../../shared/constant/token.constant.js';
6
+ import { DataSource } from 'typeorm';
7
+ import { createDynamicService } from '../../../shared/utility/create-dynamic/service.utility.js';
8
+ import { createConfigMigrationEntity } from './entity/entity.js';
9
+ import { EConfigMigrationStatus } from './enum/status.js';
10
+
11
+ var ConfigMigrationService_1;
12
+ let ConfigMigrationService = ConfigMigrationService_1 = class ConfigMigrationService {
13
+ dataSource;
14
+ options;
15
+ configService;
16
+ LOGGER = new Logger(ConfigMigrationService_1.name);
17
+ migrationService;
18
+ constructor(dataSource, options, configService) {
19
+ this.dataSource = dataSource;
20
+ this.options = options;
21
+ this.configService = configService;
22
+ }
23
+ /**
24
+ * Cleans up failed migrations
25
+ * @param {string} [migrationName] - Optional migration name to clean up
26
+ * @returns {Promise<void>} Promise that resolves when cleanup is complete
27
+ */
28
+ async cleanupFailedMigrations(migrationName) {
29
+ try {
30
+ const whereCondition = migrationName
31
+ ? { name: migrationName, status: EConfigMigrationStatus.FAILED }
32
+ : { status: EConfigMigrationStatus.FAILED };
33
+ // Use bulk delete operation to avoid N+1 problem
34
+ const result = await this.migrationService.getList({ where: whereCondition });
35
+ if (result.items.length === 0) {
36
+ this.LOGGER.verbose("No failed migrations found to clean up");
37
+ return;
38
+ }
39
+ // Delete all failed migrations in bulk
40
+ const migrationIds = result.items.map((m) => m.id);
41
+ for (const id of migrationIds) {
42
+ await this.migrationService.delete({ id });
43
+ }
44
+ this.LOGGER.verbose(`Cleaned up ${result.items.length} failed migration(s): ${result.items.map((m) => m.name).join(", ")}`);
45
+ }
46
+ catch (error) {
47
+ this.LOGGER.error("Failed to cleanup failed migrations:", error);
48
+ throw error;
49
+ }
50
+ }
51
+ /**
52
+ * Cleans up stuck migrations (running for too long)
53
+ * @param {number} [timeoutMinutes] - Minutes after which a RUNNING migration is considered stuck
54
+ * @returns {Promise<void>} Promise that resolves when cleanup is complete
55
+ */
56
+ async cleanupStuckMigrations(timeoutMinutes = CONFIG_MIGRATION_CONSTANT.DEFAULT_STUCK_MIGRATION_TIMEOUT_MINUTES) {
57
+ try {
58
+ const cutoffTime = new Date();
59
+ cutoffTime.setMinutes(cutoffTime.getMinutes() - timeoutMinutes);
60
+ const runningMigrations = await this.migrationService.getList({
61
+ where: { status: EConfigMigrationStatus.RUNNING },
62
+ });
63
+ const stuckMigrations = runningMigrations.items.filter((migration) => {
64
+ return migration.startedAt && new Date(migration.startedAt) < cutoffTime;
65
+ });
66
+ if (stuckMigrations.length === 0) {
67
+ this.LOGGER.verbose("No stuck migrations found");
68
+ return;
69
+ }
70
+ this.LOGGER.warn(`Found ${stuckMigrations.length} stuck migration(s): ${stuckMigrations.map((m) => m.name).join(", ")}`);
71
+ // Mark stuck migrations as STUCK status
72
+ for (const migration of stuckMigrations) {
73
+ await this.migrationService.update({ id: migration.id }, {
74
+ failedAt: new Date(),
75
+ status: EConfigMigrationStatus.STUCK,
76
+ });
77
+ this.LOGGER.verbose(`Marked migration as stuck: ${migration.name}`);
78
+ }
79
+ this.LOGGER.warn(`Marked ${stuckMigrations.length} migration(s) as stuck. You may need to investigate and clean them up manually.`);
80
+ }
81
+ catch (error) {
82
+ this.LOGGER.error("Failed to cleanup stuck migrations:", error);
83
+ throw error;
84
+ }
85
+ }
86
+ /**
87
+ * Executes pending migrations
88
+ * @param {Array<IConfigMigrationDefinition>} migrations - Array of migration definitions
89
+ * @param {boolean} [useTransaction] - Whether to run migrations in a transaction
90
+ * @returns {Promise<void>} Promise that resolves when all migrations are executed
91
+ */
92
+ async executeMigrations(migrations, useTransaction = true) {
93
+ if (!migrations || migrations.length === 0) {
94
+ this.LOGGER.verbose("No migrations to execute");
95
+ return;
96
+ }
97
+ // Validate migrations
98
+ this.validateMigrations(migrations);
99
+ // Sort migrations by name to ensure consistent order
100
+ const sortedMigrations = [...migrations].sort((a, b) => a.name.localeCompare(b.name));
101
+ this.LOGGER.verbose(`Starting migration execution for ${sortedMigrations.length} migrations`);
102
+ // Clean up stuck migrations before starting new ones
103
+ const timeoutMinutes = this.options.migrationOptions?.stuckMigrationTimeoutMinutes ??
104
+ CONFIG_MIGRATION_CONSTANT.DEFAULT_STUCK_MIGRATION_TIMEOUT_MINUTES;
105
+ await this.cleanupStuckMigrations(timeoutMinutes);
106
+ const executedMigrations = await this.getExecutedMigrations();
107
+ const completedMigrationNames = new Set(executedMigrations
108
+ .filter((m) => m.status === EConfigMigrationStatus.COMPLETED)
109
+ .map((m) => m.name));
110
+ // Also check for currently running migrations to avoid conflicts
111
+ const runningMigrationNames = new Set(executedMigrations
112
+ .filter((m) => m.status === EConfigMigrationStatus.RUNNING)
113
+ .map((m) => m.name));
114
+ const pendingMigrations = sortedMigrations.filter((migration) => !completedMigrationNames.has(migration.name) && !runningMigrationNames.has(migration.name));
115
+ if (pendingMigrations.length === 0) {
116
+ this.LOGGER.verbose("No pending migrations to execute");
117
+ return;
118
+ }
119
+ this.LOGGER.verbose(`Found ${pendingMigrations.length} pending migration(s): ${pendingMigrations.map((m) => m.name).join(", ")}`);
120
+ if (useTransaction) {
121
+ await this.dataSource.transaction(async (transactionalEntityManager) => {
122
+ for (const migration of pendingMigrations) {
123
+ await this.executeSingleMigration(migration, transactionalEntityManager);
124
+ }
125
+ });
126
+ }
127
+ else {
128
+ for (const migration of pendingMigrations) {
129
+ await this.executeSingleMigration(migration);
130
+ }
131
+ }
132
+ this.LOGGER.verbose(`Successfully executed ${pendingMigrations.length} migration(s): ${pendingMigrations.map((m) => m.name).join(", ")}`);
133
+ }
134
+ /**
135
+ * Gets list of executed migration names
136
+ * @returns {Promise<string[]>} Promise that resolves to list of executed migration names
137
+ */
138
+ async getExecutedMigrationList() {
139
+ const executedMigrations = await this.getExecutedMigrations();
140
+ return executedMigrations.map((migration) => migration.name);
141
+ }
142
+ /**
143
+ * Gets list of executed migrations
144
+ * @returns {Promise<IConfigMigration[]>} Promise that resolves to list of executed migrations
145
+ */
146
+ async getExecutedMigrations() {
147
+ try {
148
+ const result = await this.migrationService.getList({
149
+ order: { name: "ASC" },
150
+ });
151
+ return result.items;
152
+ }
153
+ catch (error) {
154
+ const errorMessage = `Failed to get executed migrations: ${error instanceof Error ? error.message : String(error)}`;
155
+ this.LOGGER.error(errorMessage);
156
+ throw error;
157
+ }
158
+ }
159
+ /**
160
+ * Checks if a migration has been executed
161
+ * @param {string} migrationName - The name of the migration to check
162
+ * @returns {Promise<boolean>} Promise that resolves to true if migration is executed
163
+ */
164
+ async isMigrationExecuted(migrationName) {
165
+ try {
166
+ const result = await this.migrationService.getList({
167
+ where: { name: migrationName },
168
+ });
169
+ return result.items.length > 0 && result.items[0]?.status === EConfigMigrationStatus.COMPLETED;
170
+ }
171
+ catch (error) {
172
+ this.LOGGER.error(`Failed to check if migration '${migrationName}' is executed:`, error);
173
+ throw error;
174
+ }
175
+ }
176
+ onModuleInit() {
177
+ const tableName = this.options.migrationOptions?.tableName ?? CONFIG_MIGRATION_CONSTANT.DEFAULT_TABLE_NAME;
178
+ const tablePrefix = this.options.entityOptions?.tablePrefix ?? "";
179
+ const finalTableName = `${tablePrefix}${tableName}`;
180
+ const migrationEntity = createConfigMigrationEntity({
181
+ maxNameLength: CONFIG_MIGRATION_CONSTANT.MAX_NAME_LENGTH,
182
+ tableName: finalTableName,
183
+ });
184
+ const repository = this.dataSource.getRepository(migrationEntity);
185
+ const DynamicServiceClass = createDynamicService(migrationEntity, "ConfigMigrationService");
186
+ // @ts-ignore
187
+ this.migrationService = new DynamicServiceClass(repository);
188
+ }
189
+ /**
190
+ * Rolls back a migration
191
+ * @param {string} migrationName - The name of the migration to roll back
192
+ * @param {Array<IConfigMigrationDefinition>} migrations - Array of migration definitions
193
+ * @returns {Promise<void>} Promise that resolves when rollback is complete
194
+ */
195
+ async rollbackMigration(migrationName, migrations) {
196
+ const migration = migrations.find((m) => m.name === migrationName);
197
+ if (!migration) {
198
+ throw new Error(`Migration '${migrationName}' not found`);
199
+ }
200
+ if (!migration.down) {
201
+ throw new Error(`Migration '${migrationName}' does not have a down method`);
202
+ }
203
+ const startTime = new Date();
204
+ try {
205
+ this.LOGGER.verbose(`Starting rollback for migration: ${migration.name}`);
206
+ await this.dataSource.transaction(async (transactionalEntityManager) => {
207
+ try {
208
+ // Execute the down method
209
+ if (migration.down) {
210
+ await migration.down(this.configService, transactionalEntityManager);
211
+ }
212
+ // Delete the migration record
213
+ await this.migrationService.delete({ name: migrationName });
214
+ this.LOGGER.verbose(`Successfully rolled back migration: ${migration.name}`);
215
+ }
216
+ catch (downError) {
217
+ const errorMessage = `Failed to rollback migration '${migration.name}': ${downError instanceof Error ? downError.message : String(downError)}`;
218
+ this.LOGGER.error(errorMessage);
219
+ // Don't update the migration record on rollback failure
220
+ throw downError;
221
+ }
222
+ });
223
+ const completedTime = new Date();
224
+ this.LOGGER.verbose(`Migration rollback completed: ${migration.name} (took ${completedTime.getTime() - startTime.getTime()}ms)`);
225
+ }
226
+ catch (error) {
227
+ const duration = Date.now() - startTime.getTime();
228
+ this.LOGGER.error(`Migration rollback failed: ${migration.name} (took ${duration}ms)`, error);
229
+ const failedTime = new Date();
230
+ // Update migration status to FAILED
231
+ await this.migrationService.update({ name: migrationName }, {
232
+ failedAt: failedTime,
233
+ status: EConfigMigrationStatus.FAILED,
234
+ });
235
+ throw error;
236
+ }
237
+ }
238
+ /**
239
+ * Executes a single migration
240
+ * @param {IConfigMigrationDefinition} migration - Migration definition
241
+ * @param {EntityManager} [transactionalEntityManager] - Optional transaction manager
242
+ * @returns {Promise<void>} Promise that resolves when migration is executed
243
+ */
244
+ async executeSingleMigration(migration, transactionalEntityManager) {
245
+ this.LOGGER.verbose(`Executing migration: ${migration.name}`);
246
+ // First, record the migration as started (to prevent race conditions)
247
+ let migrationRecord;
248
+ const startTime = new Date();
249
+ try {
250
+ migrationRecord = await this.migrationService.create({
251
+ name: migration.name,
252
+ startedAt: startTime,
253
+ status: EConfigMigrationStatus.RUNNING,
254
+ }, transactionalEntityManager);
255
+ }
256
+ catch (error) {
257
+ // If creation fails due to unique constraint violation, migration might already be running
258
+ const errorMessage = error instanceof Error ? error.message : String(error);
259
+ if (errorMessage.includes("duplicate") ||
260
+ errorMessage.includes("unique") ||
261
+ errorMessage.includes("UNIQUE")) {
262
+ this.LOGGER.warn(`Migration '${migration.name}' is already running or has been executed`);
263
+ return;
264
+ }
265
+ throw error;
266
+ }
267
+ try {
268
+ // Execute the migration
269
+ await migration.up(this.configService, transactionalEntityManager);
270
+ // Update status to completed with executedAt timestamp
271
+ const completedTime = new Date();
272
+ await this.migrationService.update({ id: migrationRecord.id }, {
273
+ executedAt: completedTime,
274
+ status: EConfigMigrationStatus.COMPLETED,
275
+ }, transactionalEntityManager);
276
+ const duration = completedTime.getTime() - startTime.getTime();
277
+ this.LOGGER.verbose(`Successfully executed migration: ${migration.name} (${duration}ms)`);
278
+ }
279
+ catch (error) {
280
+ this.LOGGER.error(`Failed to execute migration: ${migration.name}`, error);
281
+ // Mark migration as failed with failedAt timestamp
282
+ const failedTime = new Date();
283
+ try {
284
+ await this.migrationService.update({ id: migrationRecord.id }, {
285
+ failedAt: failedTime,
286
+ status: EConfigMigrationStatus.FAILED,
287
+ }, transactionalEntityManager);
288
+ }
289
+ catch (updateError) {
290
+ this.LOGGER.error(`Failed to update migration status for ${migration.name}:`, updateError);
291
+ }
292
+ throw error;
293
+ }
294
+ }
295
+ /**
296
+ * Validates migrations for duplicates and naming issues
297
+ * @param {Array<IConfigMigrationDefinition>} migrations - Array of migration definitions
298
+ */
299
+ validateMigrations(migrations) {
300
+ // Check for duplicate names
301
+ const migrationNames = migrations.map((m) => m.name);
302
+ const duplicates = migrationNames.filter((name, index) => migrationNames.indexOf(name) !== index);
303
+ if (duplicates.length > 0) {
304
+ throw new Error(`Duplicate migration names found: ${duplicates.join(", ")}`);
305
+ }
306
+ // Check for invalid names (cannot be empty or contain only whitespace)
307
+ const invalidNames = migrationNames.filter((name) => !name?.trim());
308
+ if (invalidNames.length > 0) {
309
+ throw new Error("Migration names cannot be empty or contain only whitespace");
310
+ }
311
+ // Check for missing required methods
312
+ const invalidMigrations = migrations.filter((m) => !m.up || typeof m.up !== "function");
313
+ if (invalidMigrations.length > 0) {
314
+ throw new Error(`Migrations missing required 'up' method: ${invalidMigrations.map((m) => m.name).join(", ")}`);
315
+ }
316
+ // Check for names that are too long
317
+ const tooLongNames = migrationNames.filter((name) => name.length > CONFIG_MIGRATION_CONSTANT.MAX_NAME_LENGTH);
318
+ if (tooLongNames.length > 0) {
319
+ throw new Error(`Migration names too long (max ${CONFIG_MIGRATION_CONSTANT.MAX_NAME_LENGTH} characters): ${tooLongNames.join(", ")}`);
320
+ }
321
+ }
322
+ };
323
+ ConfigMigrationService = ConfigMigrationService_1 = __decorate([
324
+ Injectable(),
325
+ __param(0, Inject(DataSource)),
326
+ __param(1, Inject(TOKEN_CONSTANT.CONFIG_OPTIONS)),
327
+ __metadata("design:paramtypes", [DataSource, Object, CrudConfigService])
328
+ ], ConfigMigrationService);
329
+
330
+ export { 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":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import '@nestjs/common';
6
6
  import '@nestjs/typeorm';
7
7
  import { UpdateDateColumn, CreateDateColumn } from 'typeorm';
8
8
  import '../../../../shared/utility/crypto.utility.js';
9
+ import '../../../../shared/utility/logger.utility.js';
9
10
 
10
11
  /**
11
12
  * 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":[],"mappings":";;;;;;;;;AAcA;;;;;;;AAOG;AACG,SAAU,yBAAyB,CAAC,OAIzC,EAAA;AACA,IAAA,OAAO,wBAAwB,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,gBAAA,gBAAgB,EAAE;AAClB,gBAAA,mBAAmB,CAAC;oBACnB,MAAM,EAAE,oBAAoB,CAAC,SAAS;oBACtC,UAAU,EAAE,0BAA0B,CAAC,UAAU;oBACjD,IAAI,EAAE,wBAAwB,CAAC,IAAI;iBACnC,CAAsB;AACvB,aAAA;AACD,YAAA,WAAW,EAAE;AACZ,gBAAA,mBAAmB,CAAC;AACnB,oBAAA,WAAW,EAAE,MAAM;AACnB,oBAAA,YAAY,EAAE,SAAS;oBACvB,MAAM,EAAE,sBAAsB,CAAC,MAAM;AACrC,oBAAA,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE,OAAO,CAAC,oBAAoB;oBACvC,SAAS,EAAE,qBAAqB,CAAC,eAAe;AAChD,oBAAA,OAAO,EAAE,CAAA,KAAA,EAAQ,OAAO,CAAC,oBAAoB,CAAA,EAAA,CAAI;oBACjD,IAAI,EAAE,wBAAwB,CAAC,MAAM;iBACrC,CAAsB;AACvB,aAAA;AACD,YAAA,EAAE,EAAE;AACH,gBAAA,mBAAmB,CAAC;oBACnB,IAAI,EAAE,wBAAwB,CAAC,IAAI;iBACnC,CAAsB;AACvB,aAAA;AACD,YAAA,IAAI,EAAE;AACL,gBAAA,mBAAmB,CAAC;AACnB,oBAAA,WAAW,EAAE,MAAM;AACnB,oBAAA,YAAY,EAAE,SAAS;oBACvB,MAAM,EAAE,sBAAsB,CAAC,MAAM;oBACrC,SAAS,EAAE,OAAO,CAAC,aAAa;oBAChC,SAAS,EAAE,qBAAqB,CAAC,eAAe;AAChD,oBAAA,OAAO,EAAE,CAAA,cAAA,EAAiB,OAAO,CAAC,aAAa,CAAA,EAAA,CAAI;oBACnD,IAAI,EAAE,wBAAwB,CAAC,MAAM;iBACrC,CAAsB;AACvB,aAAA;AACD,YAAA,SAAS,EAAE;AACV,gBAAA,gBAAgB,EAAE;AAClB,gBAAA,mBAAmB,CAAC;oBACnB,MAAM,EAAE,oBAAoB,CAAC,SAAS;oBACtC,UAAU,EAAE,0BAA0B,CAAC,UAAU;oBACjD,IAAI,EAAE,wBAAwB,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":[],"mappings":";;;;;;;;;;AAcA;;;;;;;AAOG;AACG,SAAU,yBAAyB,CAAC,OAIzC,EAAA;AACA,IAAA,OAAO,wBAAwB,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,gBAAA,gBAAgB,EAAE;AAClB,gBAAA,mBAAmB,CAAC;oBACnB,MAAM,EAAE,oBAAoB,CAAC,SAAS;oBACtC,UAAU,EAAE,0BAA0B,CAAC,UAAU;oBACjD,IAAI,EAAE,wBAAwB,CAAC,IAAI;iBACnC,CAAsB;AACvB,aAAA;AACD,YAAA,WAAW,EAAE;AACZ,gBAAA,mBAAmB,CAAC;AACnB,oBAAA,WAAW,EAAE,MAAM;AACnB,oBAAA,YAAY,EAAE,SAAS;oBACvB,MAAM,EAAE,sBAAsB,CAAC,MAAM;AACrC,oBAAA,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE,OAAO,CAAC,oBAAoB;oBACvC,SAAS,EAAE,qBAAqB,CAAC,eAAe;AAChD,oBAAA,OAAO,EAAE,CAAA,KAAA,EAAQ,OAAO,CAAC,oBAAoB,CAAA,EAAA,CAAI;oBACjD,IAAI,EAAE,wBAAwB,CAAC,MAAM;iBACrC,CAAsB;AACvB,aAAA;AACD,YAAA,EAAE,EAAE;AACH,gBAAA,mBAAmB,CAAC;oBACnB,IAAI,EAAE,wBAAwB,CAAC,IAAI;iBACnC,CAAsB;AACvB,aAAA;AACD,YAAA,IAAI,EAAE;AACL,gBAAA,mBAAmB,CAAC;AACnB,oBAAA,WAAW,EAAE,MAAM;AACnB,oBAAA,YAAY,EAAE,SAAS;oBACvB,MAAM,EAAE,sBAAsB,CAAC,MAAM;oBACrC,SAAS,EAAE,OAAO,CAAC,aAAa;oBAChC,SAAS,EAAE,qBAAqB,CAAC,eAAe;AAChD,oBAAA,OAAO,EAAE,CAAA,cAAA,EAAiB,OAAO,CAAC,aAAa,CAAA,EAAA,CAAI;oBACnD,IAAI,EAAE,wBAAwB,CAAC,MAAM;iBACrC,CAAsB;AACvB,aAAA;AACD,YAAA,SAAS,EAAE;AACV,gBAAA,gBAAgB,EAAE;AAClB,gBAAA,mBAAmB,CAAC;oBACnB,MAAM,EAAE,oBAAoB,CAAC,SAAS;oBACtC,UAAU,EAAE,0BAA0B,CAAC,UAAU;oBACjD,IAAI,EAAE,wBAAwB,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,13 @@
1
+ const MAX_NAME_LENGTH = 255;
2
+ const DEFAULT_STUCK_MIGRATION_TIMEOUT_MINUTES = 30;
3
+ const MAX_STATUS_LENGTH = 20;
4
+ const DEFAULT_TABLE_NAME = "config_migrations";
5
+ const CONFIG_MIGRATION_CONSTANT = {
6
+ DEFAULT_STUCK_MIGRATION_TIMEOUT_MINUTES: DEFAULT_STUCK_MIGRATION_TIMEOUT_MINUTES,
7
+ DEFAULT_TABLE_NAME: DEFAULT_TABLE_NAME,
8
+ MAX_NAME_LENGTH: MAX_NAME_LENGTH,
9
+ MAX_STATUS_LENGTH: MAX_STATUS_LENGTH,
10
+ };
11
+
12
+ export { CONFIG_MIGRATION_CONSTANT };
13
+ //# 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;
@@ -2,12 +2,16 @@ const CONFIG_SECTION_SERVICE = Symbol("CRUD_CONFIG_SECTION_SERVICE");
2
2
  const CONFIG_DATA_SERVICE = Symbol("CRUD_CONFIG_DATA_SERVICE");
3
3
  const CONFIG_SECTION_ENTITY = Symbol("CRUD_CONFIG_SECTION_ENTITY");
4
4
  const CONFIG_DATA_ENTITY = Symbol("CRUD_CONFIG_DATA_ENTITY");
5
+ const CONFIG_MIGRATION_SERVICE = Symbol("CRUD_CONFIG_MIGRATION_SERVICE");
6
+ const CONFIG_MIGRATION_ENTITY = Symbol("CRUD_CONFIG_MIGRATION_ENTITY");
5
7
  const CONFIG_OPTIONS = Symbol("CRUD_CONFIG_OPTIONS");
6
8
  const DYNAMIC_PROVIDERS_FACTORY = Symbol("CRUD_CONFIG_DYNAMIC_PROVIDERS_FACTORY");
7
9
  // eslint-disable-next-line @elsikora/no-secrets/no-pattern-match
8
10
  const TOKEN_CONSTANT = {
9
11
  CONFIG_DATA_ENTITY,
10
12
  CONFIG_DATA_SERVICE,
13
+ CONFIG_MIGRATION_ENTITY,
14
+ CONFIG_MIGRATION_SERVICE,
11
15
  CONFIG_OPTIONS,
12
16
  CONFIG_SECTION_ENTITY,
13
17
  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
+ import { __decorate, __metadata } from '../../external/tslib/tslib.es6.js';
2
+ import { Injectable, ConsoleLogger } from '@nestjs/common';
3
+ import 'dotenv/config';
4
+
5
+ var LoggerUtility_1;
6
+ /**
7
+ * Custom logger that extends NestJS's ConsoleLogger with environment-based log level filtering
8
+ */
9
+ let LoggerUtility = class LoggerUtility extends ConsoleLogger {
10
+ static { LoggerUtility_1 = this; }
11
+ static ENV_LOG_LEVEL_KEY = "NCC_LOG_LEVEL";
12
+ constructor(context) {
13
+ super(context ?? "DefaultContext", {
14
+ logLevels: LoggerUtility_1.getLogLevelsFromEnv(),
15
+ });
16
+ }
17
+ /**
18
+ * Static method to create a logger with a specific context
19
+ * @param {string} context - The context name for the logger
20
+ * @returns {LoggerUtility} A new logger instance with the specified context
21
+ */
22
+ static getLogger(context) {
23
+ return new LoggerUtility_1(`NestJS-Crud-Config/${context ?? "Core"}`);
24
+ }
25
+ /**
26
+ * Get the current log level from environment variable
27
+ * @returns {Array<LogLevel>} Array of enabled log levels based on environment configuration
28
+ * @private
29
+ */
30
+ static getLogLevelsFromEnv() {
31
+ const logLevel = process.env[this.ENV_LOG_LEVEL_KEY] ?? "none";
32
+ if (!logLevel) {
33
+ // Default log levels if not specified in env
34
+ return ["error", "warn", "log"];
35
+ }
36
+ switch (logLevel.toLowerCase()) {
37
+ case "debug": {
38
+ return ["error", "warn", "log", "debug"];
39
+ }
40
+ case "error": {
41
+ return ["error"];
42
+ }
43
+ case "log": {
44
+ return ["error", "warn", "log"];
45
+ }
46
+ case "none": {
47
+ return [];
48
+ }
49
+ case "verbose": {
50
+ return ["error", "warn", "log", "debug", "verbose"];
51
+ }
52
+ case "warn": {
53
+ return ["error", "warn"];
54
+ }
55
+ default: {
56
+ return ["error", "warn", "log"];
57
+ }
58
+ }
59
+ }
60
+ };
61
+ LoggerUtility = LoggerUtility_1 = __decorate([
62
+ Injectable(),
63
+ __metadata("design:paramtypes", [String])
64
+ ], LoggerUtility);
65
+
66
+ export { 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":[],"mappings":";;;;;AAMA;;AAEG;AAEI,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,aAAa,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;;AA5DY,aAAa,GAAA,eAAA,GAAA,UAAA,CAAA;AADzB,IAAA,UAAU,EAAE;;AACA,CAAA,EAAA,aAAa,CA6DzB;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elsikora/nestjs-crud-config",
3
- "version": "1.0.1",
3
+ "version": "1.1.0-dev.2",
4
4
  "description": "NestJS application configuration with database storage",
5
5
  "homepage": "https://github.com/ElsiKora/NestJS-Crud-Config#readme",
6
6
  "bugs": {
@@ -53,7 +53,8 @@
53
53
  "dependencies": {
54
54
  "@elsikora/nestjs-crud-automator": "^1.10.3",
55
55
  "@nestjs/cache-manager": "^3.0.1",
56
- "@nestjs/event-emitter": "^3.0.1"
56
+ "@nestjs/event-emitter": "^3.0.1",
57
+ "dotenv": "^17.2.0"
57
58
  },
58
59
  "devDependencies": {
59
60
  "@commitlint/cli": "^19.8.1",
@@ -63,13 +64,13 @@
63
64
  "@elsikora/eslint-plugin-nestjs-typed": "^3.0.1",
64
65
  "@elsikora/git-branch-lint": "^1.1.2",
65
66
  "@nestjs/cli": "^11.0.7",
66
- "@nestjs/common": "^11.1.3",
67
- "@nestjs/core": "^11.1.3",
67
+ "@nestjs/common": "^11.1.5",
68
+ "@nestjs/core": "^11.1.5",
68
69
  "@nestjs/schematics": "^11.0.5",
69
- "@nestjs/testing": "^11.1.3",
70
+ "@nestjs/testing": "^11.1.5",
70
71
  "@nestjs/typeorm": "^11.0.0",
71
72
  "@rollup/plugin-node-resolve": "^16.0.1",
72
- "@rollup/plugin-typescript": "^12.1.3",
73
+ "@rollup/plugin-typescript": "^12.1.4",
73
74
  "@saithodev/semantic-release-backmerge": "^4.0.1",
74
75
  "@semantic-release/changelog": "^6.0.3",
75
76
  "@semantic-release/commit-analyzer": "^13.0.1",
@@ -77,27 +78,27 @@
77
78
  "@semantic-release/github": "^11.0.3",
78
79
  "@semantic-release/npm": "^12.0.2",
79
80
  "@semantic-release/release-notes-generator": "^14.0.3",
80
- "@types/node": "^24.0.3",
81
+ "@types/node": "^24.1.0",
81
82
  "@vitest/coverage-v8": "^3.2.4",
82
83
  "@vitest/ui": "^3.2.4",
83
84
  "commitizen": "^4.3.1",
84
- "conventional-changelog-conventionalcommits": "^9.0.0",
85
- "eslint": "^9.30.0",
86
- "eslint-plugin-n": "^17.20.0",
85
+ "conventional-changelog-conventionalcommits": "^9.1.0",
86
+ "eslint": "^9.31.0",
87
+ "eslint-plugin-n": "^17.21.0",
87
88
  "eslint-plugin-ng-module-sort": "^1.3.2",
88
89
  "eslint-plugin-no-secrets": "^2.2.1",
89
- "eslint-plugin-typeorm-typescript": "^0.5.0",
90
+ "eslint-plugin-typeorm-typescript": "^0.5.1",
90
91
  "husky": "^9.1.7",
91
92
  "lint-staged": "^16.1.2",
92
93
  "lodash": "^4.17.21",
93
94
  "prettier": "^3.6.2",
94
95
  "rimraf": "^6.0.1",
95
- "rollup": "^4.44.0",
96
+ "rollup": "^4.45.1",
96
97
  "rollup-plugin-dts-path-alias": "^0.0.3",
97
98
  "rollup-plugin-generate-package-json": "^3.2.0",
98
99
  "rxjs": "^7.8.2",
99
- "semantic-release": "^24.2.6",
100
- "supertest": "^7.1.1",
100
+ "semantic-release": "^24.2.7",
101
+ "sqlite3": "^5.1.7",
101
102
  "tslib": "^2.8.1",
102
103
  "typeorm": "^0.3.25",
103
104
  "typescript": "^5.8.3",