@elsikora/nestjs-crud-config 4.1.0 → 5.0.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/README.md +31 -24
  2. package/dist/{esm/external → external}/tslib/tslib.es6.js +0 -1
  3. package/dist/{esm/index.d.ts → index.d.ts} +2 -2
  4. package/dist/{esm/index.js → index.js} +0 -1
  5. package/dist/{esm/modules → modules}/config/config.module.d.ts +1 -1
  6. package/dist/{esm/modules → modules}/config/config.module.js +0 -1
  7. package/dist/{cjs/modules → modules}/config/config.service.d.ts +5 -5
  8. package/dist/{esm/modules → modules}/config/config.service.js +0 -1
  9. package/dist/{cjs/modules → modules}/config/data/controller.d.ts +4 -4
  10. package/dist/{esm/modules → modules}/config/data/controller.js +0 -1
  11. package/dist/{cjs/modules → modules}/config/data/entity/entity.d.ts +3 -3
  12. package/dist/{esm/modules → modules}/config/data/entity/entity.js +0 -1
  13. package/dist/modules/config/data/entity/index.d.ts +1 -0
  14. package/dist/modules/config/data/index.d.ts +3 -0
  15. package/dist/modules/config/data/interface/index.d.ts +1 -0
  16. package/dist/{cjs/modules → modules}/config/data/interface/interface.d.ts +1 -1
  17. package/dist/modules/config/index.d.ts +11 -0
  18. package/dist/modules/config/interface/index.d.ts +4 -0
  19. package/dist/{cjs/modules → modules}/config/migration/entity/entity.d.ts +2 -2
  20. package/dist/{esm/modules → modules}/config/migration/entity/entity.js +0 -1
  21. package/dist/modules/config/migration/entity/index.d.ts +1 -0
  22. package/dist/modules/config/migration/enum/index.d.ts +1 -0
  23. package/dist/{esm/modules → modules}/config/migration/enum/status.js +0 -1
  24. package/dist/modules/config/migration/index.d.ts +5 -0
  25. package/dist/{cjs/modules → modules}/config/migration/interface/index.d.ts +3 -3
  26. package/dist/{esm/modules → modules}/config/migration/interface/interface.d.ts +1 -1
  27. package/dist/{cjs/modules → modules}/config/migration/interface/migration-definition.interface.d.ts +1 -1
  28. package/dist/{esm/modules → modules}/config/migration/interface/migration-options.interface.d.ts +1 -1
  29. package/dist/{esm/modules → modules}/config/migration/migration-runner.service.d.ts +2 -2
  30. package/dist/{esm/modules → modules}/config/migration/migration-runner.service.js +0 -1
  31. package/dist/{esm/modules → modules}/config/migration/migration.service.d.ts +3 -3
  32. package/dist/{esm/modules → modules}/config/migration/migration.service.js +2 -6
  33. package/dist/{cjs/modules → modules}/config/section/controller.d.ts +4 -4
  34. package/dist/{esm/modules → modules}/config/section/controller.js +0 -1
  35. package/dist/{esm/modules → modules}/config/section/entity/entity.d.ts +2 -2
  36. package/dist/{esm/modules → modules}/config/section/entity/entity.js +0 -1
  37. package/dist/modules/config/section/entity/index.d.ts +1 -0
  38. package/dist/modules/config/section/index.d.ts +2 -0
  39. package/dist/modules/config/section/interface/index.d.ts +1 -0
  40. package/dist/modules/config/type/index.d.ts +2 -0
  41. package/dist/{cjs/modules → modules}/config/type/type.d.ts +1 -1
  42. package/dist/modules/index.d.ts +1 -0
  43. package/dist/{esm/shared → shared}/constant/api-property.constant.js +0 -1
  44. package/dist/{esm/shared → shared}/constant/config/data.constant.js +0 -1
  45. package/dist/shared/constant/config/index.d.ts +3 -0
  46. package/dist/{esm/shared → shared}/constant/config/migration.constant.js +0 -1
  47. package/dist/{esm/shared → shared}/constant/config/section.constant.js +0 -1
  48. package/dist/{esm/shared → shared}/constant/crypto.constant.js +0 -1
  49. package/dist/shared/constant/index.d.ts +4 -0
  50. package/dist/{esm/shared → shared}/constant/token.constant.js +0 -1
  51. package/dist/{esm/shared → shared}/enum/environment.enum.js +0 -1
  52. package/dist/shared/enum/index.d.ts +6 -0
  53. package/dist/{esm/shared → shared}/enum/instance-name.enum.js +0 -1
  54. package/dist/{esm/shared → shared}/enum/service.enum.js +0 -1
  55. package/dist/shared/index.d.ts +5 -0
  56. package/dist/{cjs/shared → shared}/interface/config/async-module-properties.interface.d.ts +4 -4
  57. package/dist/{cjs/shared → shared}/interface/config/controller-options.interface.d.ts +2 -2
  58. package/dist/{cjs/shared → shared}/interface/config/entity/index.d.ts +3 -3
  59. package/dist/{esm/shared → shared}/interface/config/entity/options.interface.d.ts +1 -1
  60. package/dist/{cjs/shared → shared}/interface/config/index.d.ts +8 -8
  61. package/dist/{esm/shared → shared}/interface/config/options.interface.d.ts +5 -5
  62. package/dist/{cjs/shared → shared}/interface/config/properties-factory.interface.d.ts +1 -1
  63. package/dist/{esm/shared → shared}/interface/config/static-options.interface.d.ts +2 -2
  64. package/dist/shared/interface/index.d.ts +2 -0
  65. package/dist/{cjs/shared → shared}/interface/utility/create-dynamic-entity/index.d.ts +2 -2
  66. package/dist/{esm/shared → shared}/interface/utility/create-dynamic-entity/options.interface.d.ts +1 -1
  67. package/dist/shared/interface/utility/index.d.ts +1 -0
  68. package/dist/shared/type/index.d.ts +1 -0
  69. package/dist/{cjs/shared → shared}/utility/create-dynamic/entity.utility.d.ts +2 -2
  70. package/dist/{esm/shared → shared}/utility/create-dynamic/entity.utility.js +0 -1
  71. package/dist/shared/utility/create-dynamic/index.d.ts +2 -0
  72. package/dist/{cjs/shared → shared}/utility/create-dynamic/service.utility.d.ts +1 -1
  73. package/dist/{esm/shared → shared}/utility/create-dynamic/service.utility.js +0 -1
  74. package/dist/{cjs/shared → shared}/utility/crypto.utility.d.ts +1 -1
  75. package/dist/{esm/shared → shared}/utility/crypto.utility.js +0 -1
  76. package/dist/shared/utility/index.d.ts +4 -0
  77. package/dist/shared/utility/logger.utility.d.ts +37 -0
  78. package/dist/{esm/shared → shared}/utility/logger.utility.js +26 -6
  79. package/package.json +72 -65
  80. package/dist/cjs/external/tslib/tslib.es6.js +0 -43
  81. package/dist/cjs/external/tslib/tslib.es6.js.map +0 -1
  82. package/dist/cjs/index.d.ts +0 -11
  83. package/dist/cjs/index.js +0 -81
  84. package/dist/cjs/index.js.map +0 -1
  85. package/dist/cjs/modules/config/config.module.d.ts +0 -33
  86. package/dist/cjs/modules/config/config.module.js +0 -321
  87. package/dist/cjs/modules/config/config.module.js.map +0 -1
  88. package/dist/cjs/modules/config/config.service.js +0 -315
  89. package/dist/cjs/modules/config/config.service.js.map +0 -1
  90. package/dist/cjs/modules/config/data/controller.js +0 -124
  91. package/dist/cjs/modules/config/data/controller.js.map +0 -1
  92. package/dist/cjs/modules/config/data/entity/entity.js +0 -161
  93. package/dist/cjs/modules/config/data/entity/entity.js.map +0 -1
  94. package/dist/cjs/modules/config/data/entity/index.d.ts +0 -1
  95. package/dist/cjs/modules/config/data/index.d.ts +0 -3
  96. package/dist/cjs/modules/config/data/interface/index.d.ts +0 -1
  97. package/dist/cjs/modules/config/index.d.ts +0 -11
  98. package/dist/cjs/modules/config/interface/index.d.ts +0 -4
  99. package/dist/cjs/modules/config/migration/entity/entity.js +0 -141
  100. package/dist/cjs/modules/config/migration/entity/entity.js.map +0 -1
  101. package/dist/cjs/modules/config/migration/entity/index.d.ts +0 -1
  102. package/dist/cjs/modules/config/migration/enum/index.d.ts +0 -1
  103. package/dist/cjs/modules/config/migration/enum/status.js +0 -11
  104. package/dist/cjs/modules/config/migration/enum/status.js.map +0 -1
  105. package/dist/cjs/modules/config/migration/index.d.ts +0 -5
  106. package/dist/cjs/modules/config/migration/interface/interface.d.ts +0 -12
  107. package/dist/cjs/modules/config/migration/interface/migration-options.interface.d.ts +0 -39
  108. package/dist/cjs/modules/config/migration/migration-runner.service.d.ts +0 -26
  109. package/dist/cjs/modules/config/migration/migration-runner.service.js +0 -93
  110. package/dist/cjs/modules/config/migration/migration-runner.service.js.map +0 -1
  111. package/dist/cjs/modules/config/migration/migration.service.d.ts +0 -79
  112. package/dist/cjs/modules/config/migration/migration.service.js +0 -377
  113. package/dist/cjs/modules/config/migration/migration.service.js.map +0 -1
  114. package/dist/cjs/modules/config/section/controller.js +0 -86
  115. package/dist/cjs/modules/config/section/controller.js.map +0 -1
  116. package/dist/cjs/modules/config/section/entity/entity.d.ts +0 -18
  117. package/dist/cjs/modules/config/section/entity/entity.js +0 -99
  118. package/dist/cjs/modules/config/section/entity/entity.js.map +0 -1
  119. package/dist/cjs/modules/config/section/entity/index.d.ts +0 -1
  120. package/dist/cjs/modules/config/section/index.d.ts +0 -2
  121. package/dist/cjs/modules/config/section/interface/index.d.ts +0 -1
  122. package/dist/cjs/modules/config/type/index.d.ts +0 -2
  123. package/dist/cjs/modules/index.d.ts +0 -1
  124. package/dist/cjs/package.json +0 -8
  125. package/dist/cjs/shared/constant/api-property.constant.js +0 -11
  126. package/dist/cjs/shared/constant/api-property.constant.js.map +0 -1
  127. package/dist/cjs/shared/constant/config/data.constant.js +0 -17
  128. package/dist/cjs/shared/constant/config/data.constant.js.map +0 -1
  129. package/dist/cjs/shared/constant/config/index.d.ts +0 -3
  130. package/dist/cjs/shared/constant/config/migration.constant.js +0 -15
  131. package/dist/cjs/shared/constant/config/migration.constant.js.map +0 -1
  132. package/dist/cjs/shared/constant/config/section.constant.js +0 -13
  133. package/dist/cjs/shared/constant/config/section.constant.js.map +0 -1
  134. package/dist/cjs/shared/constant/crypto.constant.js +0 -17
  135. package/dist/cjs/shared/constant/crypto.constant.js.map +0 -1
  136. package/dist/cjs/shared/constant/index.d.ts +0 -4
  137. package/dist/cjs/shared/constant/token.constant.js +0 -24
  138. package/dist/cjs/shared/constant/token.constant.js.map +0 -1
  139. package/dist/cjs/shared/enum/environment.enum.js +0 -20
  140. package/dist/cjs/shared/enum/environment.enum.js.map +0 -1
  141. package/dist/cjs/shared/enum/index.d.ts +0 -6
  142. package/dist/cjs/shared/enum/instance-name.enum.js +0 -11
  143. package/dist/cjs/shared/enum/instance-name.enum.js.map +0 -1
  144. package/dist/cjs/shared/enum/service.enum.js +0 -224
  145. package/dist/cjs/shared/enum/service.enum.js.map +0 -1
  146. package/dist/cjs/shared/index.d.ts +0 -5
  147. package/dist/cjs/shared/interface/config/entity/options.interface.d.ts +0 -25
  148. package/dist/cjs/shared/interface/config/options.interface.d.ts +0 -39
  149. package/dist/cjs/shared/interface/config/static-options.interface.d.ts +0 -45
  150. package/dist/cjs/shared/interface/index.d.ts +0 -2
  151. package/dist/cjs/shared/interface/utility/create-dynamic-entity/options.interface.d.ts +0 -15
  152. package/dist/cjs/shared/interface/utility/index.d.ts +0 -1
  153. package/dist/cjs/shared/type/index.d.ts +0 -1
  154. package/dist/cjs/shared/utility/create-dynamic/entity.utility.js +0 -68
  155. package/dist/cjs/shared/utility/create-dynamic/entity.utility.js.map +0 -1
  156. package/dist/cjs/shared/utility/create-dynamic/index.d.ts +0 -2
  157. package/dist/cjs/shared/utility/create-dynamic/service.utility.js +0 -35
  158. package/dist/cjs/shared/utility/create-dynamic/service.utility.js.map +0 -1
  159. package/dist/cjs/shared/utility/crypto.utility.js +0 -133
  160. package/dist/cjs/shared/utility/crypto.utility.js.map +0 -1
  161. package/dist/cjs/shared/utility/index.d.ts +0 -4
  162. package/dist/cjs/shared/utility/logger.utility.d.ts +0 -21
  163. package/dist/cjs/shared/utility/logger.utility.js +0 -68
  164. package/dist/cjs/shared/utility/logger.utility.js.map +0 -1
  165. package/dist/esm/external/tslib/tslib.es6.js.map +0 -1
  166. package/dist/esm/index.js.map +0 -1
  167. package/dist/esm/modules/config/config.module.js.map +0 -1
  168. package/dist/esm/modules/config/config.service.d.ts +0 -56
  169. package/dist/esm/modules/config/config.service.js.map +0 -1
  170. package/dist/esm/modules/config/data/controller.d.ts +0 -11
  171. package/dist/esm/modules/config/data/controller.js.map +0 -1
  172. package/dist/esm/modules/config/data/entity/entity.d.ts +0 -25
  173. package/dist/esm/modules/config/data/entity/entity.js.map +0 -1
  174. package/dist/esm/modules/config/data/entity/index.d.ts +0 -1
  175. package/dist/esm/modules/config/data/index.d.ts +0 -3
  176. package/dist/esm/modules/config/data/interface/index.d.ts +0 -1
  177. package/dist/esm/modules/config/data/interface/interface.d.ts +0 -13
  178. package/dist/esm/modules/config/index.d.ts +0 -11
  179. package/dist/esm/modules/config/interface/delete-options.interface.d.ts +0 -24
  180. package/dist/esm/modules/config/interface/get-list-options.interface.d.ts +0 -24
  181. package/dist/esm/modules/config/interface/get-options.interface.d.ts +0 -32
  182. package/dist/esm/modules/config/interface/index.d.ts +0 -4
  183. package/dist/esm/modules/config/interface/set-options.interface.d.ts +0 -36
  184. package/dist/esm/modules/config/migration/entity/entity.d.ts +0 -16
  185. package/dist/esm/modules/config/migration/entity/entity.js.map +0 -1
  186. package/dist/esm/modules/config/migration/entity/index.d.ts +0 -1
  187. package/dist/esm/modules/config/migration/enum/index.d.ts +0 -1
  188. package/dist/esm/modules/config/migration/enum/status.d.ts +0 -7
  189. package/dist/esm/modules/config/migration/enum/status.js.map +0 -1
  190. package/dist/esm/modules/config/migration/index.d.ts +0 -5
  191. package/dist/esm/modules/config/migration/interface/index.d.ts +0 -3
  192. package/dist/esm/modules/config/migration/interface/migration-definition.interface.d.ts +0 -31
  193. package/dist/esm/modules/config/migration/migration-runner.service.js.map +0 -1
  194. package/dist/esm/modules/config/migration/migration.service.js.map +0 -1
  195. package/dist/esm/modules/config/section/controller.d.ts +0 -11
  196. package/dist/esm/modules/config/section/controller.js.map +0 -1
  197. package/dist/esm/modules/config/section/entity/entity.js.map +0 -1
  198. package/dist/esm/modules/config/section/entity/index.d.ts +0 -1
  199. package/dist/esm/modules/config/section/index.d.ts +0 -2
  200. package/dist/esm/modules/config/section/interface/index.d.ts +0 -1
  201. package/dist/esm/modules/config/section/interface/interface.d.ts +0 -8
  202. package/dist/esm/modules/config/type/index.d.ts +0 -2
  203. package/dist/esm/modules/config/type/item.type.d.ts +0 -1
  204. package/dist/esm/modules/config/type/type.d.ts +0 -2
  205. package/dist/esm/modules/index.d.ts +0 -1
  206. package/dist/esm/package.json +0 -8
  207. package/dist/esm/shared/constant/api-property.constant.d.ts +0 -4
  208. package/dist/esm/shared/constant/api-property.constant.js.map +0 -1
  209. package/dist/esm/shared/constant/config/data.constant.d.ts +0 -7
  210. package/dist/esm/shared/constant/config/data.constant.js.map +0 -1
  211. package/dist/esm/shared/constant/config/index.d.ts +0 -3
  212. package/dist/esm/shared/constant/config/migration.constant.d.ts +0 -6
  213. package/dist/esm/shared/constant/config/migration.constant.js.map +0 -1
  214. package/dist/esm/shared/constant/config/section.constant.d.ts +0 -5
  215. package/dist/esm/shared/constant/config/section.constant.js.map +0 -1
  216. package/dist/esm/shared/constant/crypto.constant.d.ts +0 -7
  217. package/dist/esm/shared/constant/crypto.constant.js.map +0 -1
  218. package/dist/esm/shared/constant/index.d.ts +0 -4
  219. package/dist/esm/shared/constant/token.constant.d.ts +0 -10
  220. package/dist/esm/shared/constant/token.constant.js.map +0 -1
  221. package/dist/esm/shared/enum/environment.enum.d.ts +0 -16
  222. package/dist/esm/shared/enum/environment.enum.js.map +0 -1
  223. package/dist/esm/shared/enum/index.d.ts +0 -6
  224. package/dist/esm/shared/enum/instance-name.enum.d.ts +0 -7
  225. package/dist/esm/shared/enum/instance-name.enum.js.map +0 -1
  226. package/dist/esm/shared/enum/service.enum.d.ts +0 -220
  227. package/dist/esm/shared/enum/service.enum.js.map +0 -1
  228. package/dist/esm/shared/index.d.ts +0 -5
  229. package/dist/esm/shared/interface/config/async-module-properties.interface.d.ts +0 -47
  230. package/dist/esm/shared/interface/config/cache-options.interface.d.ts +0 -18
  231. package/dist/esm/shared/interface/config/controller-options.interface.d.ts +0 -32
  232. package/dist/esm/shared/interface/config/encryption-options.interface.d.ts +0 -19
  233. package/dist/esm/shared/interface/config/entity/data-options.interface.d.ts +0 -25
  234. package/dist/esm/shared/interface/config/entity/index.d.ts +0 -3
  235. package/dist/esm/shared/interface/config/entity/section-options.interface.d.ts +0 -17
  236. package/dist/esm/shared/interface/config/index.d.ts +0 -8
  237. package/dist/esm/shared/interface/config/properties-factory.interface.d.ts +0 -11
  238. package/dist/esm/shared/interface/index.d.ts +0 -2
  239. package/dist/esm/shared/interface/utility/create-dynamic-entity/index.d.ts +0 -2
  240. package/dist/esm/shared/interface/utility/create-dynamic-entity/relation-options.interface.d.ts +0 -9
  241. package/dist/esm/shared/interface/utility/index.d.ts +0 -1
  242. package/dist/esm/shared/type/dynamic-entity.type.d.ts +0 -2
  243. package/dist/esm/shared/type/index.d.ts +0 -1
  244. package/dist/esm/shared/utility/create-dynamic/entity.utility.d.ts +0 -11
  245. package/dist/esm/shared/utility/create-dynamic/entity.utility.js.map +0 -1
  246. package/dist/esm/shared/utility/create-dynamic/index.d.ts +0 -2
  247. package/dist/esm/shared/utility/create-dynamic/service.utility.d.ts +0 -10
  248. package/dist/esm/shared/utility/create-dynamic/service.utility.js.map +0 -1
  249. package/dist/esm/shared/utility/crypto.utility.d.ts +0 -37
  250. package/dist/esm/shared/utility/crypto.utility.js.map +0 -1
  251. package/dist/esm/shared/utility/index.d.ts +0 -4
  252. package/dist/esm/shared/utility/logger.utility.d.ts +0 -21
  253. package/dist/esm/shared/utility/logger.utility.js.map +0 -1
  254. /package/dist/{cjs/modules → modules}/config/interface/delete-options.interface.d.ts +0 -0
  255. /package/dist/{cjs/modules → modules}/config/interface/get-list-options.interface.d.ts +0 -0
  256. /package/dist/{cjs/modules → modules}/config/interface/get-options.interface.d.ts +0 -0
  257. /package/dist/{cjs/modules → modules}/config/interface/set-options.interface.d.ts +0 -0
  258. /package/dist/{cjs/modules → modules}/config/migration/enum/status.d.ts +0 -0
  259. /package/dist/{cjs/modules → modules}/config/section/interface/interface.d.ts +0 -0
  260. /package/dist/{cjs/modules → modules}/config/type/item.type.d.ts +0 -0
  261. /package/dist/{cjs/shared → shared}/constant/api-property.constant.d.ts +0 -0
  262. /package/dist/{cjs/shared → shared}/constant/config/data.constant.d.ts +0 -0
  263. /package/dist/{cjs/shared → shared}/constant/config/migration.constant.d.ts +0 -0
  264. /package/dist/{cjs/shared → shared}/constant/config/section.constant.d.ts +0 -0
  265. /package/dist/{cjs/shared → shared}/constant/crypto.constant.d.ts +0 -0
  266. /package/dist/{cjs/shared → shared}/constant/token.constant.d.ts +0 -0
  267. /package/dist/{cjs/shared → shared}/enum/environment.enum.d.ts +0 -0
  268. /package/dist/{cjs/shared → shared}/enum/instance-name.enum.d.ts +0 -0
  269. /package/dist/{cjs/shared → shared}/enum/service.enum.d.ts +0 -0
  270. /package/dist/{cjs/shared → shared}/interface/config/cache-options.interface.d.ts +0 -0
  271. /package/dist/{cjs/shared → shared}/interface/config/encryption-options.interface.d.ts +0 -0
  272. /package/dist/{cjs/shared → shared}/interface/config/entity/data-options.interface.d.ts +0 -0
  273. /package/dist/{cjs/shared → shared}/interface/config/entity/section-options.interface.d.ts +0 -0
  274. /package/dist/{cjs/shared → shared}/interface/utility/create-dynamic-entity/relation-options.interface.d.ts +0 -0
  275. /package/dist/{cjs/shared → shared}/type/dynamic-entity.type.d.ts +0 -0
@@ -1,93 +0,0 @@
1
- 'use strict';
2
-
3
- var tslib_es6 = require('../../../external/tslib/tslib.es6.js');
4
- var common = require('@nestjs/common');
5
- var migration_constant = require('../../../shared/constant/config/migration.constant.js');
6
- var token_constant = require('../../../shared/constant/token.constant.js');
7
- require('typeorm');
8
- require('@elsikora/nestjs-crud-automator');
9
- require('@nestjs/typeorm');
10
- require('../../../shared/utility/crypto.utility.js');
11
- var logger_utility = require('../../../shared/utility/logger.utility.js');
12
- var status = require('./enum/status.js');
13
- var migration_service = require('./migration.service.js');
14
-
15
- /**
16
- * Service that runs migrations on application startup
17
- * @see {@link https://elsikora.com/docs/nestjs-crud-config/migration-system | Migration System}
18
- * @see {@link https://elsikora.com/docs/nestjs-crud-config/api-reference/classes/config-migration-runner-service | API Reference - ConfigMigrationRunnerService}
19
- */
20
- exports.ConfigMigrationRunnerService = class ConfigMigrationRunnerService {
21
- migrationService;
22
- options;
23
- LOGGER = logger_utility.LoggerUtility.getLogger("ConfigMigrationRunnerService");
24
- constructor(migrationService, options) {
25
- this.migrationService = migrationService;
26
- this.options = options;
27
- }
28
- /**
29
- * Called when the application is fully bootstrapped
30
- * Runs migrations if enabled and configured to run on startup
31
- */
32
- async onApplicationBootstrap() {
33
- const migrationOptions = this.options.migrationOptions;
34
- if (!migrationOptions?.isEnabled) {
35
- this.LOGGER.verbose("Migrations are disabled");
36
- return;
37
- }
38
- if (!migrationOptions.shouldRunOnStartup) {
39
- this.LOGGER.verbose("Migrations configured to not run on startup");
40
- return;
41
- }
42
- if (!migrationOptions.migrations || migrationOptions.migrations.length === 0) {
43
- this.LOGGER.verbose("No migrations configured");
44
- return;
45
- }
46
- try {
47
- this.LOGGER.verbose("Starting migration runner");
48
- // Check for failed and stuck migrations from previous runs
49
- const allMigrations = await this.migrationService.getExecutedMigrations();
50
- const failedMigrations = allMigrations.filter((m) => m.status === status.EConfigMigrationStatus.FAILED);
51
- if (failedMigrations.length > 0) {
52
- this.LOGGER.warn(`Found ${failedMigrations.length} failed migration(s) from previous runs: ${failedMigrations.map((m) => m.name).join(", ")}`);
53
- this.LOGGER.warn("Consider reviewing and cleaning up failed migrations before proceeding");
54
- }
55
- // Clean up stuck migrations with configured timeout
56
- const timeoutMinutes = migrationOptions.stuckMigrationTimeoutMinutes ??
57
- migration_constant.CONFIG_MIGRATION_CONSTANT.DEFAULT_STUCK_MIGRATION_TIMEOUT_MINUTES;
58
- await this.migrationService.cleanupStuckMigrations(timeoutMinutes);
59
- await this.migrationService.executeMigrations(migrationOptions.migrations, migrationOptions.useTransaction ?? true);
60
- this.LOGGER.verbose("Migration runner completed successfully");
61
- }
62
- catch (error) {
63
- this.LOGGER.error("Migration runner failed:", error);
64
- throw error;
65
- }
66
- }
67
- /**
68
- * Manually run migrations, optionally participating in an existing Automator owner
69
- * @param {EntityManager} [ownerManager] - Existing active owner manager for the configured DataSource
70
- * @returns {Promise<void>} Promise that resolves when migrations are complete
71
- */
72
- async runMigrations(ownerManager) {
73
- const migrationOptions = this.options.migrationOptions;
74
- if (!migrationOptions?.isEnabled) {
75
- throw new Error("Migrations are not enabled");
76
- }
77
- if (!migrationOptions.migrations || migrationOptions.migrations.length === 0) {
78
- throw new Error("No migrations configured");
79
- }
80
- if (ownerManager === undefined) {
81
- await this.migrationService.executeMigrations(migrationOptions.migrations, migrationOptions.useTransaction ?? true);
82
- }
83
- else {
84
- await this.migrationService.executeMigrations(migrationOptions.migrations, migrationOptions.useTransaction ?? true, ownerManager);
85
- }
86
- }
87
- };
88
- exports.ConfigMigrationRunnerService = tslib_es6.__decorate([
89
- common.Injectable(),
90
- tslib_es6.__param(1, common.Inject(token_constant.TOKEN_CONSTANT.CONFIG_OPTIONS)),
91
- tslib_es6.__metadata("design:paramtypes", [migration_service.ConfigMigrationService, Object])
92
- ], exports.ConfigMigrationRunnerService);
93
- //# sourceMappingURL=migration-runner.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migration-runner.service.js","sources":["../../../../../../src/modules/config/migration/migration-runner.service.ts"],"sourcesContent":[null],"names":["ConfigMigrationRunnerService","LoggerUtility","EConfigMigrationStatus","CONFIG_MIGRATION_CONSTANT","__decorate","Injectable","__param","Inject","TOKEN_CONSTANT","ConfigMigrationService"],"mappings":"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"}
@@ -1,79 +0,0 @@
1
- import { ApiServiceBase } from '@elsikora/nestjs-crud-automator';
2
- import { IConfigOptions } from '../../../shared/interface/config';
3
- import { IConfigMigration, IConfigMigrationDefinition } from './interface';
4
- import { CrudConfigService } from '../config.service';
5
- import { OnModuleInit } from '@nestjs/common';
6
- import { DataSource, EntityManager } from 'typeorm';
7
- /**
8
- * Service responsible for coordinating and tracking execution of migrations.
9
- * @see {@link https://elsikora.com/docs/nestjs-crud-config/migration-system | Migration System}
10
- * @see {@link https://elsikora.com/docs/nestjs-crud-config/api-reference/classes/config-migration-service | API Reference - ConfigMigrationService}
11
- */
12
- export declare class ConfigMigrationService implements OnModuleInit {
13
- private readonly dataSource;
14
- private readonly options;
15
- private readonly configService;
16
- private readonly LOGGER;
17
- private readonly MIGRATION_SERVICE;
18
- constructor(dataSource: DataSource, options: IConfigOptions, configService: CrudConfigService, migrationService: ApiServiceBase<IConfigMigration>);
19
- /**
20
- * Cleans up failed migrations
21
- * @param {string} [migrationName] - Optional migration name to clean up
22
- * @returns {Promise<void>} Promise that resolves when cleanup is complete
23
- */
24
- cleanupFailedMigrations(migrationName?: string): Promise<void>;
25
- /**
26
- * Cleans up stuck migrations (running for too long)
27
- * @param {number} [timeoutMinutes] - Minutes after which a RUNNING migration is considered stuck
28
- * @returns {Promise<void>} Promise that resolves when cleanup is complete
29
- */
30
- cleanupStuckMigrations(timeoutMinutes?: number): Promise<void>;
31
- /**
32
- * Executes pending migrations
33
- * @param {Array<IConfigMigrationDefinition>} migrations - Array of migration definitions
34
- * @param {boolean} [useTransaction] - Whether to use the named crud-config-migrations owner; defaults to true
35
- * @param {EntityManager} [ownerManager] - Existing active Automator owner manager; requires useTransaction
36
- * @returns {Promise<void>} Promise that resolves when all migrations are executed
37
- */
38
- executeMigrations(migrations: Array<IConfigMigrationDefinition>, useTransaction?: boolean, ownerManager?: EntityManager): Promise<void>;
39
- /**
40
- * Gets list of executed migration names
41
- * @returns {Promise<string[]>} Promise that resolves to list of executed migration names
42
- */
43
- getExecutedMigrationList(): Promise<Array<string>>;
44
- /**
45
- * Gets list of executed migrations
46
- * @returns {Promise<IConfigMigration[]>} Promise that resolves to list of executed migrations
47
- */
48
- getExecutedMigrations(): Promise<Array<IConfigMigration>>;
49
- /**
50
- * Checks if a migration has been executed
51
- * @param {string} migrationName - The name of the migration to check
52
- * @returns {Promise<boolean>} Promise that resolves to true if migration is executed
53
- */
54
- isMigrationExecuted(migrationName: string): Promise<boolean>;
55
- onModuleInit(): void;
56
- /**
57
- * Rolls back a migration inside the named owner or a supplied active Automator owner
58
- * @param {string} migrationName - The name of the migration to roll back
59
- * @param {Array<IConfigMigrationDefinition>} migrations - Array of migration definitions
60
- * @param {EntityManager} [ownerManager] - Existing active Automator owner manager
61
- * @returns {Promise<void>} Promise that resolves when rollback is complete
62
- */
63
- rollbackMigration(migrationName: string, migrations: Array<IConfigMigrationDefinition>, ownerManager?: EntityManager): Promise<void>;
64
- private executePendingMigrations;
65
- private executeRollback;
66
- /**
67
- * Executes a single migration
68
- * @param {IConfigMigrationDefinition} migration - Migration definition
69
- * @param {EntityManager} [transactionalEntityManager] - Optional transaction manager
70
- * @returns {Promise<void>} Promise that resolves when migration is executed
71
- */
72
- private executeSingleMigration;
73
- private runWithOwnerManager;
74
- /**
75
- * Validates migrations for duplicates and naming issues
76
- * @param {Array<IConfigMigrationDefinition>} migrations - Array of migration definitions
77
- */
78
- private validateMigrations;
79
- }
@@ -1,377 +0,0 @@
1
- 'use strict';
2
-
3
- var tslib_es6 = require('../../../external/tslib/tslib.es6.js');
4
- var nestjsCrudAutomator = require('@elsikora/nestjs-crud-automator');
5
- var config_service = require('../config.service.js');
6
- var common = require('@nestjs/common');
7
- var migration_constant = require('../../../shared/constant/config/migration.constant.js');
8
- var token_constant = require('../../../shared/constant/token.constant.js');
9
- var typeorm = require('typeorm');
10
- var status = require('./enum/status.js');
11
-
12
- var ConfigMigrationService_1;
13
- /**
14
- * Service responsible for coordinating and tracking execution of migrations.
15
- * @see {@link https://elsikora.com/docs/nestjs-crud-config/migration-system | Migration System}
16
- * @see {@link https://elsikora.com/docs/nestjs-crud-config/api-reference/classes/config-migration-service | API Reference - ConfigMigrationService}
17
- */
18
- exports.ConfigMigrationService = ConfigMigrationService_1 = class ConfigMigrationService {
19
- dataSource;
20
- options;
21
- configService;
22
- LOGGER = new common.Logger(ConfigMigrationService_1.name);
23
- MIGRATION_SERVICE;
24
- constructor(dataSource, options, configService, migrationService) {
25
- this.dataSource = dataSource;
26
- this.options = options;
27
- this.configService = configService;
28
- this.MIGRATION_SERVICE = migrationService;
29
- }
30
- /**
31
- * Cleans up failed migrations
32
- * @param {string} [migrationName] - Optional migration name to clean up
33
- * @returns {Promise<void>} Promise that resolves when cleanup is complete
34
- */
35
- async cleanupFailedMigrations(migrationName) {
36
- try {
37
- const whereCondition = migrationName
38
- ? { name: migrationName, status: status.EConfigMigrationStatus.FAILED }
39
- : { status: status.EConfigMigrationStatus.FAILED };
40
- // Use bulk delete operation to avoid N+1 problem
41
- const result = await this.MIGRATION_SERVICE.getList({ where: whereCondition });
42
- if (result.items.length === 0) {
43
- this.LOGGER.verbose("No failed migrations found to clean up");
44
- return;
45
- }
46
- // Delete all failed migrations in bulk
47
- const migrationIds = result.items.map((m) => m.id);
48
- for (const id of migrationIds) {
49
- await this.MIGRATION_SERVICE.delete({ id });
50
- }
51
- this.LOGGER.verbose(`Cleaned up ${result.items.length} failed migration(s): ${result.items.map((m) => m.name).join(", ")}`);
52
- }
53
- catch (error) {
54
- this.LOGGER.error("Failed to cleanup failed migrations:", error);
55
- throw error;
56
- }
57
- }
58
- /**
59
- * Cleans up stuck migrations (running for too long)
60
- * @param {number} [timeoutMinutes] - Minutes after which a RUNNING migration is considered stuck
61
- * @returns {Promise<void>} Promise that resolves when cleanup is complete
62
- */
63
- async cleanupStuckMigrations(timeoutMinutes = migration_constant.CONFIG_MIGRATION_CONSTANT.DEFAULT_STUCK_MIGRATION_TIMEOUT_MINUTES) {
64
- try {
65
- const cutoffTime = new Date();
66
- cutoffTime.setMinutes(cutoffTime.getMinutes() - timeoutMinutes);
67
- const runningMigrations = await this.MIGRATION_SERVICE.getList({
68
- where: { status: status.EConfigMigrationStatus.RUNNING },
69
- });
70
- const stuckMigrations = runningMigrations.items.filter((migration) => {
71
- return migration.startedAt && new Date(migration.startedAt) < cutoffTime;
72
- });
73
- if (stuckMigrations.length === 0) {
74
- this.LOGGER.verbose("No stuck migrations found");
75
- return;
76
- }
77
- this.LOGGER.warn(`Found ${stuckMigrations.length} stuck migration(s): ${stuckMigrations.map((m) => m.name).join(", ")}`);
78
- // Mark stuck migrations as STUCK status
79
- for (const migration of stuckMigrations) {
80
- await this.MIGRATION_SERVICE.update({ id: migration.id }, {
81
- failedAt: new Date(),
82
- status: status.EConfigMigrationStatus.STUCK,
83
- });
84
- this.LOGGER.verbose(`Marked migration as stuck: ${migration.name}`);
85
- }
86
- this.LOGGER.warn(`Marked ${stuckMigrations.length} migration(s) as stuck. You may need to investigate and clean them up manually.`);
87
- }
88
- catch (error) {
89
- this.LOGGER.error("Failed to cleanup stuck migrations:", error);
90
- throw error;
91
- }
92
- }
93
- /**
94
- * Executes pending migrations
95
- * @param {Array<IConfigMigrationDefinition>} migrations - Array of migration definitions
96
- * @param {boolean} [useTransaction] - Whether to use the named crud-config-migrations owner; defaults to true
97
- * @param {EntityManager} [ownerManager] - Existing active Automator owner manager; requires useTransaction
98
- * @returns {Promise<void>} Promise that resolves when all migrations are executed
99
- */
100
- async executeMigrations(migrations, useTransaction = true, ownerManager) {
101
- if (ownerManager !== undefined) {
102
- if (!useTransaction) {
103
- throw new Error("Owner manager requires transaction-enabled migrations");
104
- }
105
- await this.runWithOwnerManager(ownerManager, async () => {
106
- await this.executePendingMigrations(migrations, true, ownerManager);
107
- });
108
- return;
109
- }
110
- await this.executePendingMigrations(migrations, useTransaction);
111
- }
112
- /**
113
- * Gets list of executed migration names
114
- * @returns {Promise<string[]>} Promise that resolves to list of executed migration names
115
- */
116
- async getExecutedMigrationList() {
117
- const executedMigrations = await this.getExecutedMigrations();
118
- return executedMigrations.map((migration) => migration.name);
119
- }
120
- /**
121
- * Gets list of executed migrations
122
- * @returns {Promise<IConfigMigration[]>} Promise that resolves to list of executed migrations
123
- */
124
- async getExecutedMigrations() {
125
- try {
126
- const result = await this.MIGRATION_SERVICE.getList({
127
- order: { name: "ASC" },
128
- });
129
- return result.items;
130
- }
131
- catch (error) {
132
- const errorMessage = `Failed to get executed migrations: ${error instanceof Error ? error.message : String(error)}`;
133
- this.LOGGER.error(errorMessage);
134
- throw error;
135
- }
136
- }
137
- /**
138
- * Checks if a migration has been executed
139
- * @param {string} migrationName - The name of the migration to check
140
- * @returns {Promise<boolean>} Promise that resolves to true if migration is executed
141
- */
142
- async isMigrationExecuted(migrationName) {
143
- try {
144
- const result = await this.MIGRATION_SERVICE.getList({
145
- where: { name: migrationName },
146
- });
147
- return result.items.length > 0 && result.items[0]?.status === status.EConfigMigrationStatus.COMPLETED;
148
- }
149
- catch (error) {
150
- this.LOGGER.error(`Failed to check if migration '${migrationName}' is executed:`, error);
151
- throw error;
152
- }
153
- }
154
- onModuleInit() {
155
- // Remove the dynamic entity creation - we already have the service injected
156
- this.LOGGER.log("Migration service initialized");
157
- }
158
- /**
159
- * Rolls back a migration inside the named owner or a supplied active Automator owner
160
- * @param {string} migrationName - The name of the migration to roll back
161
- * @param {Array<IConfigMigrationDefinition>} migrations - Array of migration definitions
162
- * @param {EntityManager} [ownerManager] - Existing active Automator owner manager
163
- * @returns {Promise<void>} Promise that resolves when rollback is complete
164
- */
165
- async rollbackMigration(migrationName, migrations, ownerManager) {
166
- if (ownerManager !== undefined) {
167
- await this.runWithOwnerManager(ownerManager, async () => {
168
- await this.executeRollback(migrationName, migrations, ownerManager);
169
- });
170
- return;
171
- }
172
- await this.executeRollback(migrationName, migrations);
173
- }
174
- async executePendingMigrations(migrations, useTransaction, ownerManager) {
175
- if (!migrations || migrations.length === 0) {
176
- this.LOGGER.verbose("No migrations to execute");
177
- return;
178
- }
179
- // Validate migrations
180
- this.validateMigrations(migrations);
181
- // Sort migrations by name to ensure consistent order
182
- const sortedMigrations = [];
183
- for (const migration of migrations) {
184
- const insertIndex = sortedMigrations.findIndex((item) => migration.name.localeCompare(item.name) < 0);
185
- if (insertIndex === -1) {
186
- sortedMigrations.push(migration);
187
- }
188
- else {
189
- sortedMigrations.splice(insertIndex, 0, migration);
190
- }
191
- }
192
- this.LOGGER.verbose(`Starting migration execution for ${sortedMigrations.length} migrations`);
193
- // Clean up stuck migrations before starting new ones
194
- const timeoutMinutes = this.options.migrationOptions?.stuckMigrationTimeoutMinutes ??
195
- migration_constant.CONFIG_MIGRATION_CONSTANT.DEFAULT_STUCK_MIGRATION_TIMEOUT_MINUTES;
196
- await this.cleanupStuckMigrations(timeoutMinutes);
197
- const executedMigrations = await this.getExecutedMigrations();
198
- const completedMigrationNames = new Set(executedMigrations
199
- .filter((m) => m.status === status.EConfigMigrationStatus.COMPLETED)
200
- .map((m) => m.name));
201
- // Also check for currently running migrations to avoid conflicts
202
- const runningMigrationNames = new Set(executedMigrations
203
- .filter((m) => m.status === status.EConfigMigrationStatus.RUNNING)
204
- .map((m) => m.name));
205
- const pendingMigrations = sortedMigrations.filter((migration) => !completedMigrationNames.has(migration.name) && !runningMigrationNames.has(migration.name));
206
- if (pendingMigrations.length === 0) {
207
- this.LOGGER.verbose("No pending migrations to execute");
208
- return;
209
- }
210
- this.LOGGER.verbose(`Found ${pendingMigrations.length} pending migration(s): ${pendingMigrations.map((m) => m.name).join(", ")}`);
211
- if (ownerManager !== undefined) {
212
- for (const migration of pendingMigrations) {
213
- await this.executeSingleMigration(migration, ownerManager);
214
- }
215
- }
216
- else if (useTransaction) {
217
- await nestjsCrudAutomator.ApiFunctionTransactionScope.runWithDataSource(this.dataSource, { name: "crud-config-migrations" }, async (transactionalEntityManager) => {
218
- for (const migration of pendingMigrations) {
219
- await this.executeSingleMigration(migration, transactionalEntityManager);
220
- }
221
- });
222
- }
223
- else {
224
- for (const migration of pendingMigrations) {
225
- await this.executeSingleMigration(migration);
226
- }
227
- }
228
- this.LOGGER.verbose(`Successfully executed ${pendingMigrations.length} migration(s): ${pendingMigrations.map((m) => m.name).join(", ")}`);
229
- }
230
- async executeRollback(migrationName, migrations, ownerManager) {
231
- const migration = migrations.find((m) => m.name === migrationName);
232
- if (!migration) {
233
- throw new Error(`Migration '${migrationName}' not found`);
234
- }
235
- if (!migration.down) {
236
- throw new Error(`Migration '${migrationName}' does not have a down method`);
237
- }
238
- const startTime = new Date();
239
- try {
240
- this.LOGGER.verbose(`Starting rollback for migration: ${migration.name}`);
241
- const executeDown = async (transactionalEntityManager) => {
242
- try {
243
- // Execute the down method
244
- await migration.down?.(this.configService, transactionalEntityManager);
245
- // Delete the migration record in the rollback transaction context.
246
- await this.MIGRATION_SERVICE.delete({ name: migrationName });
247
- this.LOGGER.verbose(`Successfully rolled back migration: ${migration.name}`);
248
- }
249
- catch (downError) {
250
- const errorMessage = `Failed to rollback migration '${migration.name}': ${downError instanceof Error ? downError.message : String(downError)}`;
251
- this.LOGGER.error(errorMessage);
252
- // Don't update the migration record on rollback failure
253
- throw downError;
254
- }
255
- };
256
- if (ownerManager === undefined) {
257
- await nestjsCrudAutomator.ApiFunctionTransactionScope.runWithDataSource(this.dataSource, { name: "crud-config-migrations" }, executeDown);
258
- }
259
- else {
260
- await executeDown(ownerManager);
261
- }
262
- const completedTime = new Date();
263
- this.LOGGER.verbose(`Migration rollback completed: ${migration.name} (took ${completedTime.getTime() - startTime.getTime()}ms)`);
264
- }
265
- catch (error) {
266
- const duration = Date.now() - startTime.getTime();
267
- this.LOGGER.error(`Migration rollback failed: ${migration.name} (took ${duration}ms)`, error);
268
- const failedTime = new Date();
269
- // A failed participant SQL operation can leave the caller's transaction aborted.
270
- try {
271
- await this.MIGRATION_SERVICE.update({ name: migrationName }, {
272
- failedAt: failedTime,
273
- status: status.EConfigMigrationStatus.FAILED,
274
- });
275
- }
276
- catch (updateError) {
277
- if (ownerManager === undefined) {
278
- throw updateError;
279
- }
280
- this.LOGGER.error(`Failed to update migration status for ${migration.name}:`, updateError);
281
- }
282
- throw error;
283
- }
284
- }
285
- /**
286
- * Executes a single migration
287
- * @param {IConfigMigrationDefinition} migration - Migration definition
288
- * @param {EntityManager} [transactionalEntityManager] - Optional transaction manager
289
- * @returns {Promise<void>} Promise that resolves when migration is executed
290
- */
291
- async executeSingleMigration(migration, transactionalEntityManager) {
292
- this.LOGGER.verbose(`Executing migration: ${migration.name}`);
293
- // First, record the migration as started (to prevent race conditions)
294
- const startTime = new Date();
295
- const migrationRecord = await this.MIGRATION_SERVICE.create({
296
- name: migration.name,
297
- startedAt: startTime,
298
- status: status.EConfigMigrationStatus.RUNNING,
299
- });
300
- try {
301
- // Execute the migration
302
- await migration.up(this.configService, transactionalEntityManager);
303
- // Update status to completed with executedAt timestamp
304
- const completedTime = new Date();
305
- await this.MIGRATION_SERVICE.update({ id: migrationRecord.id }, {
306
- executedAt: completedTime,
307
- status: status.EConfigMigrationStatus.COMPLETED,
308
- });
309
- const duration = completedTime.getTime() - startTime.getTime();
310
- this.LOGGER.verbose(`Successfully executed migration: ${migration.name} (${duration}ms)`);
311
- }
312
- catch (error) {
313
- this.LOGGER.error(`Failed to execute migration: ${migration.name}`, error);
314
- // Mark migration as failed with failedAt timestamp
315
- const failedTime = new Date();
316
- try {
317
- await this.MIGRATION_SERVICE.update({ id: migrationRecord.id }, {
318
- failedAt: failedTime,
319
- status: status.EConfigMigrationStatus.FAILED,
320
- });
321
- }
322
- catch (updateError) {
323
- this.LOGGER.error(`Failed to update migration status for ${migration.name}:`, updateError);
324
- }
325
- throw error;
326
- }
327
- }
328
- async runWithOwnerManager(ownerManager, callback) {
329
- const queryRunner = ownerManager.queryRunner;
330
- if (
331
- // eslint-disable-next-line @elsikora/sonar/deprecation -- The supported TypeORM 0.3 peer exposes DataSource identity as connection.
332
- ownerManager.connection !== this.dataSource ||
333
- // eslint-disable-next-line @elsikora/sonar/deprecation -- The supported TypeORM 0.3 QueryRunner exposes DataSource identity as connection.
334
- queryRunner?.connection !== this.dataSource ||
335
- queryRunner.manager !== ownerManager ||
336
- !queryRunner.isTransactionActive ||
337
- queryRunner.isReleased) {
338
- throw new Error("Migration participation requires the active owner manager for this DataSource");
339
- }
340
- await nestjsCrudAutomator.ApiFunctionTransactionScope.runWithEntityManager(ownerManager, callback);
341
- }
342
- /**
343
- * Validates migrations for duplicates and naming issues
344
- * @param {Array<IConfigMigrationDefinition>} migrations - Array of migration definitions
345
- */
346
- validateMigrations(migrations) {
347
- // Check for duplicate names
348
- const migrationNames = migrations.map((m) => m.name);
349
- const duplicates = migrationNames.filter((name, index) => migrationNames.indexOf(name) !== index);
350
- if (duplicates.length > 0) {
351
- throw new Error(`Duplicate migration names found: ${duplicates.join(", ")}`);
352
- }
353
- // Check for invalid names (cannot be empty or contain only whitespace)
354
- const invalidNames = migrationNames.filter((name) => !name?.trim());
355
- if (invalidNames.length > 0) {
356
- throw new Error("Migration names cannot be empty or contain only whitespace");
357
- }
358
- // Check for missing required methods
359
- const invalidMigrations = migrations.filter((m) => !m.up || typeof m.up !== "function");
360
- if (invalidMigrations.length > 0) {
361
- throw new Error(`Migrations missing required 'up' method: ${invalidMigrations.map((m) => m.name).join(", ")}`);
362
- }
363
- // Check for names that are too long
364
- const tooLongNames = migrationNames.filter((name) => name.length > migration_constant.CONFIG_MIGRATION_CONSTANT.MAX_NAME_LENGTH);
365
- if (tooLongNames.length > 0) {
366
- throw new Error(`Migration names too long (max ${migration_constant.CONFIG_MIGRATION_CONSTANT.MAX_NAME_LENGTH} characters): ${tooLongNames.join(", ")}`);
367
- }
368
- }
369
- };
370
- exports.ConfigMigrationService = ConfigMigrationService_1 = tslib_es6.__decorate([
371
- common.Injectable(),
372
- tslib_es6.__param(0, common.Inject(typeorm.DataSource)),
373
- tslib_es6.__param(1, common.Inject(token_constant.TOKEN_CONSTANT.CONFIG_OPTIONS)),
374
- tslib_es6.__param(3, common.Inject(token_constant.TOKEN_CONSTANT.CONFIG_MIGRATION_SERVICE)),
375
- tslib_es6.__metadata("design:paramtypes", [typeorm.DataSource, Object, config_service.CrudConfigService, Function])
376
- ], exports.ConfigMigrationService);
377
- //# sourceMappingURL=migration.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migration.service.js","sources":["../../../../../../src/modules/config/migration/migration.service.ts"],"sourcesContent":[null],"names":["ConfigMigrationService","Logger","EConfigMigrationStatus","CONFIG_MIGRATION_CONSTANT","ApiFunctionTransactionScope","__decorate","Injectable","__param","Inject","DataSource","TOKEN_CONSTANT","__metadata","CrudConfigService"],"mappings":"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"}