@nest-omni/core 4.1.3-2 → 4.1.3-20

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 (386) hide show
  1. package/audit/audit.module.d.ts +10 -0
  2. package/audit/audit.module.js +63 -1
  3. package/audit/controllers/audit.controller.d.ts +88 -0
  4. package/audit/controllers/audit.controller.js +74 -0
  5. package/audit/decorators/audit-action.decorator.d.ts +74 -0
  6. package/audit/decorators/audit-action.decorator.js +42 -0
  7. package/audit/decorators/audit-controller.decorator.d.ts +9 -1
  8. package/audit/decorators/audit-controller.decorator.js +11 -2
  9. package/audit/decorators/audit-operation.decorator.d.ts +45 -0
  10. package/audit/decorators/audit-operation.decorator.js +49 -0
  11. package/audit/decorators/entity-audit.decorator.d.ts +85 -1
  12. package/audit/decorators/entity-audit.decorator.js +153 -3
  13. package/audit/decorators/index.d.ts +2 -0
  14. package/audit/decorators/index.js +2 -0
  15. package/audit/dto/audit-log-query.dto.d.ts +3 -0
  16. package/audit/dto/audit-log-query.dto.js +3 -0
  17. package/audit/dto/begin-transaction.dto.d.ts +3 -0
  18. package/audit/dto/begin-transaction.dto.js +3 -0
  19. package/audit/dto/compare-entities.dto.d.ts +3 -0
  20. package/audit/dto/compare-entities.dto.js +3 -0
  21. package/audit/dto/pre-check-restore.dto.d.ts +3 -0
  22. package/audit/dto/pre-check-restore.dto.js +3 -0
  23. package/audit/dto/restore-entity.dto.d.ts +3 -0
  24. package/audit/dto/restore-entity.dto.js +3 -0
  25. package/audit/entities/audit-action-summary.entity.d.ts +23 -0
  26. package/audit/entities/audit-action-summary.entity.js +101 -0
  27. package/audit/entities/entity-audit-log.entity.d.ts +11 -0
  28. package/audit/entities/entity-audit-log.entity.js +57 -2
  29. package/audit/entities/entity-transaction.entity.d.ts +11 -2
  30. package/audit/entities/entity-transaction.entity.js +42 -3
  31. package/audit/entities/index.d.ts +3 -0
  32. package/audit/entities/index.js +3 -0
  33. package/audit/entities/manual-operation-log.entity.d.ts +4 -0
  34. package/audit/entities/manual-operation-log.entity.js +12 -1
  35. package/audit/entities/operation-template.entity.d.ts +4 -0
  36. package/audit/entities/operation-template.entity.js +4 -0
  37. package/audit/enums/audit.enums.d.ts +37 -6
  38. package/audit/enums/audit.enums.js +40 -7
  39. package/audit/index.d.ts +4 -1
  40. package/audit/index.js +34 -1
  41. package/audit/interceptors/audit-action.interceptor.d.ts +38 -0
  42. package/audit/interceptors/audit-action.interceptor.js +215 -0
  43. package/audit/interceptors/audit.interceptor.d.ts +15 -0
  44. package/audit/interceptors/audit.interceptor.js +23 -1
  45. package/audit/interceptors/index.d.ts +1 -0
  46. package/audit/interceptors/index.js +1 -0
  47. package/audit/interfaces/audit.interfaces.d.ts +187 -2
  48. package/audit/services/audit-action.service.d.ts +141 -0
  49. package/audit/services/audit-action.service.js +244 -0
  50. package/audit/services/audit-context.service.d.ts +97 -0
  51. package/audit/services/audit-context.service.js +185 -0
  52. package/audit/services/audit-strategy.service.d.ts +6 -0
  53. package/audit/services/audit-strategy.service.js +13 -0
  54. package/audit/services/entity-audit.service.d.ts +230 -3
  55. package/audit/services/entity-audit.service.js +607 -14
  56. package/audit/services/index.d.ts +3 -0
  57. package/audit/services/index.js +3 -0
  58. package/audit/services/manual-audit-log.service.d.ts +134 -9
  59. package/audit/services/manual-audit-log.service.js +157 -40
  60. package/audit/services/multi-database.service.d.ts +9 -2
  61. package/audit/services/multi-database.service.js +9 -21
  62. package/audit/services/operation-description.service.d.ts +71 -2
  63. package/audit/services/operation-description.service.js +231 -20
  64. package/audit/services/transaction-audit.service.d.ts +30 -0
  65. package/audit/services/transaction-audit.service.js +53 -5
  66. package/audit/subscribers/entity-audit.subscriber.d.ts +19 -0
  67. package/audit/subscribers/entity-audit.subscriber.js +76 -1
  68. package/cache/cache-metrics.service.d.ts +67 -0
  69. package/cache/cache-metrics.service.js +68 -4
  70. package/cache/cache-serialization.service.d.ts +31 -0
  71. package/cache/cache-serialization.service.js +25 -0
  72. package/cache/cache.constants.d.ts +9 -0
  73. package/cache/cache.constants.js +9 -0
  74. package/cache/cache.health.d.ts +26 -0
  75. package/cache/cache.health.js +30 -0
  76. package/cache/cache.module.d.ts +82 -2
  77. package/cache/cache.module.js +76 -5
  78. package/cache/cache.service.d.ts +140 -0
  79. package/cache/cache.service.js +169 -0
  80. package/cache/cache.warmup.service.d.ts +39 -0
  81. package/cache/cache.warmup.service.js +32 -0
  82. package/cache/decorators/cache-evict.decorator.d.ts +47 -0
  83. package/cache/decorators/cache-evict.decorator.js +56 -0
  84. package/cache/decorators/cache-put.decorator.d.ts +34 -0
  85. package/cache/decorators/cache-put.decorator.js +39 -0
  86. package/cache/decorators/cacheable.decorator.d.ts +40 -0
  87. package/cache/decorators/cacheable.decorator.js +55 -0
  88. package/cache/dependencies/callback.dependency.d.ts +33 -0
  89. package/cache/dependencies/callback.dependency.js +39 -1
  90. package/cache/dependencies/chain.dependency.d.ts +28 -0
  91. package/cache/dependencies/chain.dependency.js +34 -0
  92. package/cache/dependencies/db.dependency.d.ts +83 -7
  93. package/cache/dependencies/db.dependency.js +89 -14
  94. package/cache/dependencies/file.dependency.d.ts +32 -0
  95. package/cache/dependencies/file.dependency.js +34 -0
  96. package/cache/dependencies/tag.dependency.d.ts +75 -4
  97. package/cache/dependencies/tag.dependency.js +145 -11
  98. package/cache/dependencies/time.dependency.d.ts +43 -0
  99. package/cache/dependencies/time.dependency.js +43 -0
  100. package/cache/examples/basic-usage.d.ts +15 -0
  101. package/cache/examples/basic-usage.js +62 -8
  102. package/cache/index.js +9 -0
  103. package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
  104. package/cache/interfaces/cache-options.interface.d.ts +89 -0
  105. package/cache/interfaces/cache-options.interface.js +6 -0
  106. package/cache/interfaces/cache-provider.interface.d.ts +78 -0
  107. package/cache/providers/base-cache.provider.d.ts +14 -0
  108. package/cache/providers/base-cache.provider.js +16 -0
  109. package/cache/providers/cls-cache.provider.d.ts +20 -0
  110. package/cache/providers/cls-cache.provider.js +28 -0
  111. package/cache/providers/memory-cache.provider.d.ts +43 -0
  112. package/cache/providers/memory-cache.provider.js +66 -0
  113. package/cache/providers/redis-cache.provider.d.ts +26 -0
  114. package/cache/providers/redis-cache.provider.js +29 -0
  115. package/cache/utils/dependency-manager.util.d.ts +52 -0
  116. package/cache/utils/dependency-manager.util.js +59 -0
  117. package/cache/utils/key-generator.util.d.ts +42 -0
  118. package/cache/utils/key-generator.util.js +53 -1
  119. package/common/abstract.entity.d.ts +14 -0
  120. package/common/abstract.entity.js +14 -0
  121. package/common/boilerplate.polyfill.d.ts +142 -0
  122. package/common/boilerplate.polyfill.js +18 -1
  123. package/common/dto/dto-container.d.ts +16 -0
  124. package/common/dto/dto-container.js +20 -0
  125. package/common/dto/dto-decorators.d.ts +18 -0
  126. package/common/dto/dto-decorators.js +14 -0
  127. package/common/dto/dto-extensions.d.ts +11 -0
  128. package/common/dto/dto-extensions.js +9 -0
  129. package/common/dto/dto-service-accessor.d.ts +17 -0
  130. package/common/dto/dto-service-accessor.js +18 -0
  131. package/common/dto/dto-transformer.d.ts +12 -0
  132. package/common/dto/dto-transformer.js +9 -0
  133. package/common/dto/index.js +2 -0
  134. package/common/examples/paginate-and-map.example.d.ts +6 -0
  135. package/common/examples/paginate-and-map.example.js +26 -0
  136. package/common/utils.d.ts +15 -0
  137. package/common/utils.js +15 -0
  138. package/constants/language-code.js +1 -0
  139. package/decorators/field.decorators.d.ts +1 -1
  140. package/decorators/field.decorators.js +8 -1
  141. package/decorators/property.decorators.js +1 -0
  142. package/decorators/public-route.decorator.js +1 -0
  143. package/decorators/transform.decorators.d.ts +27 -0
  144. package/decorators/transform.decorators.js +29 -0
  145. package/decorators/translate.decorator.js +1 -0
  146. package/decorators/user.decorator.js +1 -0
  147. package/decorators/validator.decorators.d.ts +8 -18
  148. package/decorators/validator.decorators.js +22 -190
  149. package/file-upload/controllers/file-access.controller.d.ts +23 -0
  150. package/file-upload/controllers/file-access.controller.js +128 -0
  151. package/file-upload/decorators/column.decorator.d.ts +151 -0
  152. package/file-upload/decorators/column.decorator.js +273 -0
  153. package/file-upload/decorators/csv-data.decorator.d.ts +30 -0
  154. package/file-upload/decorators/csv-data.decorator.js +85 -0
  155. package/file-upload/decorators/csv-import.decorator.d.ts +34 -0
  156. package/file-upload/decorators/csv-import.decorator.js +24 -0
  157. package/file-upload/decorators/examples/column-mapping.example.d.ts +76 -0
  158. package/file-upload/decorators/examples/column-mapping.example.js +122 -0
  159. package/file-upload/decorators/excel-data.decorator.d.ts +30 -0
  160. package/file-upload/decorators/excel-data.decorator.js +85 -0
  161. package/file-upload/decorators/file-upload.decorator.d.ts +83 -0
  162. package/file-upload/decorators/file-upload.decorator.js +172 -0
  163. package/file-upload/decorators/index.d.ts +5 -0
  164. package/file-upload/decorators/index.js +38 -0
  165. package/file-upload/decorators/process.decorator.d.ts +40 -0
  166. package/file-upload/decorators/process.decorator.js +52 -0
  167. package/file-upload/decorators/validate-data.decorator.d.ts +91 -0
  168. package/file-upload/decorators/validate-data.decorator.js +39 -0
  169. package/file-upload/dto/create-file.dto.d.ts +24 -0
  170. package/file-upload/dto/create-file.dto.js +112 -0
  171. package/file-upload/dto/find-files.dto.d.ts +15 -0
  172. package/file-upload/dto/find-files.dto.js +76 -0
  173. package/file-upload/dto/index.d.ts +4 -0
  174. package/file-upload/dto/index.js +20 -0
  175. package/file-upload/dto/pagination.dto.d.ts +7 -0
  176. package/file-upload/dto/pagination.dto.js +39 -0
  177. package/file-upload/dto/update-file.dto.d.ts +15 -0
  178. package/file-upload/dto/update-file.dto.js +67 -0
  179. package/file-upload/entities/file-metadata.entity.d.ts +25 -0
  180. package/file-upload/entities/file-metadata.entity.js +76 -0
  181. package/file-upload/entities/file.entity.d.ts +114 -0
  182. package/file-upload/entities/file.entity.js +350 -0
  183. package/file-upload/entities/index.d.ts +2 -0
  184. package/file-upload/entities/index.js +18 -0
  185. package/file-upload/enums/file-type.enum.d.ts +72 -0
  186. package/file-upload/enums/file-type.enum.js +212 -0
  187. package/file-upload/exceptions/file-upload.exception.d.ts +57 -0
  188. package/file-upload/exceptions/file-upload.exception.js +120 -0
  189. package/file-upload/exceptions/index.d.ts +1 -0
  190. package/file-upload/exceptions/index.js +17 -0
  191. package/file-upload/file-upload.module.d.ts +89 -0
  192. package/file-upload/file-upload.module.js +292 -0
  193. package/file-upload/index.d.ts +37 -0
  194. package/file-upload/index.js +77 -0
  195. package/file-upload/interceptors/file-upload.interceptor.d.ts +101 -0
  196. package/file-upload/interceptors/file-upload.interceptor.js +594 -0
  197. package/file-upload/interceptors/index.d.ts +1 -0
  198. package/file-upload/interceptors/index.js +17 -0
  199. package/file-upload/interfaces/custom-file-type.interface.d.ts +72 -0
  200. package/file-upload/interfaces/custom-file-type.interface.js +2 -0
  201. package/file-upload/interfaces/file-buffer.interface.d.ts +72 -0
  202. package/file-upload/interfaces/file-buffer.interface.js +2 -0
  203. package/file-upload/interfaces/file-entity.interface.d.ts +142 -0
  204. package/file-upload/interfaces/file-entity.interface.js +28 -0
  205. package/file-upload/interfaces/file-metadata.interface.d.ts +21 -0
  206. package/file-upload/interfaces/file-metadata.interface.js +2 -0
  207. package/file-upload/interfaces/file-processor.interface.d.ts +93 -0
  208. package/file-upload/interfaces/file-processor.interface.js +2 -0
  209. package/file-upload/interfaces/file-upload-options.interface.d.ts +74 -0
  210. package/file-upload/interfaces/file-upload-options.interface.js +5 -0
  211. package/file-upload/interfaces/index.d.ts +7 -0
  212. package/file-upload/interfaces/index.js +24 -0
  213. package/file-upload/interfaces/processor-options.interface.d.ts +102 -0
  214. package/file-upload/interfaces/processor-options.interface.js +2 -0
  215. package/file-upload/interfaces/storage-provider.interface.d.ts +239 -0
  216. package/file-upload/interfaces/storage-provider.interface.js +2 -0
  217. package/file-upload/interfaces/upload-options.interface.d.ts +19 -0
  218. package/file-upload/interfaces/upload-options.interface.js +2 -0
  219. package/file-upload/processors/csv.processor.d.ts +98 -0
  220. package/file-upload/processors/csv.processor.js +391 -0
  221. package/file-upload/processors/excel.processor.d.ts +130 -0
  222. package/file-upload/processors/excel.processor.js +547 -0
  223. package/file-upload/processors/image.processor.d.ts +199 -0
  224. package/file-upload/processors/image.processor.js +377 -0
  225. package/file-upload/providers/index.d.ts +2 -0
  226. package/file-upload/providers/index.js +18 -0
  227. package/file-upload/providers/local-storage.provider.d.ts +98 -0
  228. package/file-upload/providers/local-storage.provider.js +484 -0
  229. package/file-upload/providers/s3-storage.provider.d.ts +87 -0
  230. package/file-upload/providers/s3-storage.provider.js +455 -0
  231. package/file-upload/services/file-signature-validator.service.d.ts +118 -0
  232. package/file-upload/services/file-signature-validator.service.js +376 -0
  233. package/file-upload/services/file.service.d.ts +193 -0
  234. package/file-upload/services/file.service.js +638 -0
  235. package/file-upload/services/index.d.ts +4 -0
  236. package/file-upload/services/index.js +20 -0
  237. package/file-upload/services/malicious-file-detector.service.d.ts +300 -0
  238. package/file-upload/services/malicious-file-detector.service.js +1234 -0
  239. package/file-upload/services/mime-registry.service.d.ts +47 -0
  240. package/file-upload/services/mime-registry.service.js +167 -0
  241. package/file-upload/utils/checksum.util.d.ts +28 -0
  242. package/file-upload/utils/checksum.util.js +65 -0
  243. package/file-upload/utils/dynamic-import.util.d.ts +54 -0
  244. package/file-upload/utils/dynamic-import.util.js +156 -0
  245. package/file-upload/utils/filename.util.d.ts +59 -0
  246. package/file-upload/utils/filename.util.js +184 -0
  247. package/file-upload/utils/filepath.util.d.ts +70 -0
  248. package/file-upload/utils/filepath.util.js +152 -0
  249. package/file-upload/utils/index.d.ts +4 -0
  250. package/file-upload/utils/index.js +20 -0
  251. package/filters/constraint-errors.js +1 -0
  252. package/helpers/common.helper.d.ts +13 -0
  253. package/helpers/common.helper.js +13 -0
  254. package/http-client/config/http-client.config.d.ts +20 -0
  255. package/http-client/config/http-client.config.js +48 -21
  256. package/http-client/decorators/http-client.decorators.d.ts +55 -14
  257. package/http-client/decorators/http-client.decorators.js +154 -78
  258. package/http-client/entities/http-log.entity.d.ts +217 -8
  259. package/http-client/entities/http-log.entity.js +7 -22
  260. package/http-client/errors/http-client.errors.d.ts +57 -0
  261. package/http-client/errors/http-client.errors.js +58 -0
  262. package/http-client/examples/advanced-usage.example.d.ts +40 -0
  263. package/http-client/examples/advanced-usage.example.js +53 -61
  264. package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
  265. package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
  266. package/http-client/examples/basic-usage.example.d.ts +60 -0
  267. package/http-client/examples/basic-usage.example.js +60 -0
  268. package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
  269. package/http-client/examples/multi-api-configuration.example.js +76 -5
  270. package/http-client/examples/proxy-from-environment.example.d.ts +133 -0
  271. package/http-client/examples/proxy-from-environment.example.js +409 -0
  272. package/http-client/http-client.module.d.ts +48 -2
  273. package/http-client/http-client.module.js +147 -68
  274. package/http-client/index.d.ts +1 -1
  275. package/http-client/index.js +8 -0
  276. package/http-client/interfaces/api-client-config.interface.d.ts +80 -45
  277. package/http-client/interfaces/api-client-config.interface.js +3 -0
  278. package/http-client/interfaces/http-client-config.interface.d.ts +109 -52
  279. package/http-client/services/api-client-registry.service.d.ts +50 -11
  280. package/http-client/services/api-client-registry.service.js +90 -250
  281. package/http-client/services/circuit-breaker.service.d.ts +115 -2
  282. package/http-client/services/circuit-breaker.service.js +237 -7
  283. package/http-client/services/http-client.service.d.ts +124 -14
  284. package/http-client/services/http-client.service.js +437 -148
  285. package/http-client/services/http-log-query.service.d.ts +83 -0
  286. package/http-client/services/http-log-query.service.js +121 -13
  287. package/http-client/services/http-replay.service.d.ts +101 -0
  288. package/http-client/services/http-replay.service.js +86 -0
  289. package/http-client/services/index.d.ts +0 -1
  290. package/http-client/services/index.js +0 -1
  291. package/http-client/services/log-cleanup.service.d.ts +63 -0
  292. package/http-client/services/log-cleanup.service.js +54 -2
  293. package/http-client/services/logging.service.d.ts +116 -7
  294. package/http-client/services/logging.service.js +349 -86
  295. package/http-client/utils/call-stack-extractor.util.d.ts +63 -0
  296. package/http-client/utils/call-stack-extractor.util.js +83 -0
  297. package/http-client/utils/context-extractor.util.d.ts +49 -0
  298. package/http-client/utils/context-extractor.util.js +52 -0
  299. package/http-client/utils/curl-generator.util.d.ts +21 -0
  300. package/http-client/utils/curl-generator.util.js +44 -3
  301. package/http-client/utils/index.d.ts +1 -0
  302. package/http-client/utils/index.js +1 -0
  303. package/http-client/utils/proxy-environment.util.d.ts +42 -0
  304. package/http-client/utils/proxy-environment.util.js +148 -0
  305. package/http-client/utils/request-id.util.d.ts +18 -0
  306. package/http-client/utils/request-id.util.js +20 -0
  307. package/http-client/utils/retry-recorder.util.d.ts +42 -0
  308. package/http-client/utils/retry-recorder.util.js +44 -0
  309. package/http-client/utils/security-validator.util.d.ts +118 -0
  310. package/http-client/utils/security-validator.util.js +352 -0
  311. package/index.d.ts +3 -1
  312. package/index.js +12 -1
  313. package/interceptors/translation-interceptor.service.js +5 -0
  314. package/package.json +11 -7
  315. package/providers/context.provider.js +2 -0
  316. package/providers/generator.provider.d.ts +4 -0
  317. package/providers/generator.provider.js +4 -0
  318. package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
  319. package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
  320. package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
  321. package/redis-lock/examples/lock-strategy.examples.js +130 -15
  322. package/redis-lock/index.d.ts +2 -0
  323. package/redis-lock/index.js +8 -1
  324. package/redis-lock/lock-heartbeat.service.d.ts +80 -0
  325. package/redis-lock/lock-heartbeat.service.js +232 -0
  326. package/redis-lock/redis-lock.decorator.d.ts +101 -0
  327. package/redis-lock/redis-lock.decorator.js +120 -0
  328. package/redis-lock/redis-lock.module.d.ts +66 -0
  329. package/redis-lock/redis-lock.module.js +175 -70
  330. package/redis-lock/redis-lock.service.d.ts +282 -0
  331. package/redis-lock/redis-lock.service.js +343 -20
  332. package/setup/bootstrap.setup.d.ts +1 -0
  333. package/setup/bootstrap.setup.js +21 -0
  334. package/setup/index.d.ts +1 -0
  335. package/setup/index.js +1 -0
  336. package/setup/mode.setup.d.ts +44 -0
  337. package/setup/mode.setup.js +44 -0
  338. package/setup/run-in-mode.decorator.d.ts +56 -0
  339. package/setup/run-in-mode.decorator.js +92 -0
  340. package/setup/schedule.decorator.d.ts +227 -0
  341. package/setup/schedule.decorator.js +240 -12
  342. package/setup/worker.decorator.d.ts +86 -0
  343. package/setup/worker.decorator.js +97 -0
  344. package/shared/index.d.ts +1 -1
  345. package/shared/index.js +1 -1
  346. package/shared/{serviceRegistryModule.js → service-registry.module.js} +19 -17
  347. package/shared/services/api-config.service.d.ts +3 -0
  348. package/shared/services/api-config.service.js +21 -9
  349. package/shared/services/index.d.ts +0 -1
  350. package/shared/services/index.js +0 -1
  351. package/validator-json/decorators.d.ts +17 -0
  352. package/validator-json/decorators.js +17 -2
  353. package/validator-json/default.d.ts +6 -0
  354. package/validator-json/default.js +30 -2
  355. package/validator-json/defaultConverters.js +1 -0
  356. package/validator-json/options.d.ts +23 -0
  357. package/validators/common-validators.d.ts +143 -0
  358. package/validators/common-validators.js +249 -0
  359. package/validators/custom-validate.examples.d.ts +23 -0
  360. package/validators/custom-validate.examples.js +78 -6
  361. package/validators/custom-validate.validator.d.ts +108 -0
  362. package/validators/custom-validate.validator.js +85 -0
  363. package/validators/file-mimetype.validator.d.ts +0 -2
  364. package/validators/file-mimetype.validator.js +4 -6
  365. package/validators/index.d.ts +1 -0
  366. package/validators/index.js +1 -0
  367. package/validators/is-exists.validator.d.ts +26 -6
  368. package/validators/is-exists.validator.js +30 -7
  369. package/validators/is-unique.validator.d.ts +33 -7
  370. package/validators/is-unique.validator.js +59 -17
  371. package/validators/skip-empty.validator.d.ts +5 -0
  372. package/validators/skip-empty.validator.js +5 -0
  373. package/vault/interfaces/vault-options.interface.d.ts +9 -0
  374. package/vault/vault-config.loader.d.ts +30 -0
  375. package/vault/vault-config.loader.js +48 -1
  376. package/vault/vault-config.service.d.ts +53 -0
  377. package/vault/vault-config.service.js +57 -0
  378. package/vault/vault.module.d.ts +4 -0
  379. package/vault/vault.module.js +4 -0
  380. package/decorators/examples/validation-decorators.example.d.ts +0 -69
  381. package/decorators/examples/validation-decorators.example.js +0 -331
  382. package/http-client/services/cache.service.d.ts +0 -24
  383. package/http-client/services/cache.service.js +0 -264
  384. package/shared/services/validator.service.d.ts +0 -3
  385. package/shared/services/validator.service.js +0 -20
  386. /package/shared/{serviceRegistryModule.d.ts → service-registry.module.d.ts} +0 -0
@@ -28,6 +28,9 @@ let CustomValidateValidator = class CustomValidateValidator {
28
28
  constructor(moduleRef) {
29
29
  this.moduleRef = moduleRef;
30
30
  }
31
+ /**
32
+ * 验证入口
33
+ */
31
34
  validate(value, args) {
32
35
  return __awaiter(this, void 0, void 0, function* () {
33
36
  const [constraint, ...extraArgs] = args.constraints;
@@ -40,12 +43,15 @@ let CustomValidateValidator = class CustomValidateValidator {
40
43
  args,
41
44
  };
42
45
  try {
46
+ // 1. 如果是函数,直接调用
43
47
  if (typeof constraint === 'function') {
44
48
  return yield this.callFunction(constraint, value, context, extraArgs);
45
49
  }
50
+ // 2. 如果是字符串,调用 Entity 方法
46
51
  if (typeof constraint === 'string') {
47
52
  return yield this.callEntityMethod(args.object, constraint, value, context, extraArgs);
48
53
  }
54
+ // 3. 如果是数组,调用 Service 方法
49
55
  if (Array.isArray(constraint)) {
50
56
  return yield this.callServiceMethod(constraint, value, context);
51
57
  }
@@ -53,17 +59,24 @@ let CustomValidateValidator = class CustomValidateValidator {
53
59
  `Expected: function, string, or array. Got: ${typeof constraint}`);
54
60
  }
55
61
  catch (error) {
62
+ // 验证函数执行出错,记录详细错误信息
56
63
  console.error(`[@CustomValidate] Validation error for property "${args.property}":`, error);
57
64
  throw error;
58
65
  }
59
66
  });
60
67
  }
68
+ /**
69
+ * 调用内联函数
70
+ */
61
71
  callFunction(fn, value, context, extraArgs) {
62
72
  return __awaiter(this, void 0, void 0, function* () {
63
73
  const result = fn(value, context, ...extraArgs);
64
74
  return result instanceof Promise ? yield result : result;
65
75
  });
66
76
  }
77
+ /**
78
+ * 调用 Entity 方法
79
+ */
67
80
  callEntityMethod(entity, methodName, value, context, extraArgs) {
68
81
  return __awaiter(this, void 0, void 0, function* () {
69
82
  if (!entity || typeof entity[methodName] !== 'function') {
@@ -74,13 +87,18 @@ let CustomValidateValidator = class CustomValidateValidator {
74
87
  return result instanceof Promise ? yield result : result;
75
88
  });
76
89
  }
90
+ /**
91
+ * 调用 Service 方法
92
+ */
77
93
  callServiceMethod(constraint, value, context) {
78
94
  return __awaiter(this, void 0, void 0, function* () {
79
95
  let [serviceClass, methodName, ...extraArgs] = constraint;
96
+ // 验证参数
80
97
  if (!serviceClass || !methodName) {
81
98
  throw new Error(`[@CustomValidate] Invalid service constraint format. ` +
82
99
  `Expected: [ServiceClass, 'methodName'] or [() => ServiceClass, 'methodName']`);
83
100
  }
101
+ // 解析延迟引用(解决循环依赖)
84
102
  if (typeof serviceClass === 'function' && !serviceClass.prototype) {
85
103
  serviceClass = serviceClass();
86
104
  }
@@ -89,6 +107,7 @@ let CustomValidateValidator = class CustomValidateValidator {
89
107
  `This may be caused by circular dependencies. ` +
90
108
  `Consider using lazy reference: [() => ServiceClass, 'methodName']`);
91
109
  }
110
+ // 通过依赖注入获取 service 实例
92
111
  let service;
93
112
  try {
94
113
  service = this.moduleRef.get(serviceClass, { strict: false });
@@ -106,7 +125,11 @@ let CustomValidateValidator = class CustomValidateValidator {
106
125
  return result instanceof Promise ? yield result : result;
107
126
  });
108
127
  }
128
+ /**
129
+ * 默认错误消息
130
+ */
109
131
  defaultMessage(args) {
132
+ // 优先使用 i18n
110
133
  return (0, nestjs_i18n_1.i18nValidationMessage)('validation.CUSTOM_VALIDATE')(args);
111
134
  }
112
135
  };
@@ -116,6 +139,68 @@ exports.CustomValidateValidator = CustomValidateValidator = __decorate([
116
139
  (0, class_validator_1.ValidatorConstraint)({ name: 'customValidate', async: true }),
117
140
  __metadata("design:paramtypes", [core_1.ModuleRef])
118
141
  ], CustomValidateValidator);
142
+ /**
143
+ * @CustomValidate 装饰器
144
+ *
145
+ * 支持多种验证方式的灵活验证装饰器
146
+ *
147
+ * @example
148
+ *
149
+ * // 1. 内联函数(同步)
150
+ * @CustomValidate(
151
+ * (value) => value > 0,
152
+ * { message: '价格必须大于0' }
153
+ * )
154
+ * price: number;
155
+ *
156
+ * @example
157
+ * // 2. 内联函数(异步)
158
+ * @CustomValidate(
159
+ * async (value, context) => {
160
+ * const response = await fetch(`/api/check/${value}`);
161
+ * return response.ok;
162
+ * }
163
+ * )
164
+ * username: string;
165
+ *
166
+ * @example
167
+ * // 3. Entity 方法
168
+ * @CustomValidate('validateVersion')
169
+ * version: string;
170
+ *
171
+ * validateVersion(value: string): boolean {
172
+ * return /^\d+\.\d+\.\d+$/.test(value);
173
+ * }
174
+ *
175
+ * @example
176
+ * // 4. Service 方法
177
+ * @CustomValidate([UserValidationService, 'checkUsername'])
178
+ * username: string;
179
+ *
180
+ * @example
181
+ * // 5. 延迟引用(解决循环依赖)
182
+ * @CustomValidate([() => UserValidationService, 'checkUsername'])
183
+ * username: string;
184
+ *
185
+ * @example
186
+ * // 6. 带额外参数
187
+ * @CustomValidate(
188
+ * [ValidationService, 'checkRange', 0, 100],
189
+ * { message: '价格必须在 0-100 之间' }
190
+ * )
191
+ * price: number;
192
+ *
193
+ * @example
194
+ * // 7. 使用 i18n
195
+ * @CustomValidate(
196
+ * (value) => value.length >= 6,
197
+ * { message: 'validation.PASSWORD_TOO_SHORT' }
198
+ * )
199
+ * password: string;
200
+ *
201
+ * @param constraint 验证约束(函数、方法名、或 [Service, 方法名])
202
+ * @param validationOptions 验证选项
203
+ */
119
204
  function CustomValidate(constraint, validationOptions) {
120
205
  return (object, propertyName) => {
121
206
  (0, class_validator_1.registerDecorator)({
@@ -5,8 +5,6 @@ export type FileMimetypeValidatorOptions = {
5
5
  message?: string;
6
6
  };
7
7
  export declare class FileMimetypeValidator extends FileValidator<FileMimetypeValidatorOptions, IFile> {
8
- private allowedMimetypes;
9
- private message;
10
8
  constructor(options: FileMimetypeValidatorOptions);
11
9
  buildErrorMessage(): string;
12
10
  isValid(file?: IFile): boolean;
@@ -5,17 +5,15 @@ const file_validator_interface_1 = require("@nestjs/common/pipes/file/file-valid
5
5
  class FileMimetypeValidator extends file_validator_interface_1.FileValidator {
6
6
  constructor(options) {
7
7
  super(options);
8
- this.allowedMimetypes = options.allowedMimetypes;
9
- this.message = options.message;
10
8
  }
11
9
  buildErrorMessage() {
12
- if (this.message) {
13
- return this.message;
10
+ if (this.validationOptions.message) {
11
+ return this.validationOptions.message;
14
12
  }
15
- return `Invalid file type. Only ${this.allowedMimetypes.join(', ')} are allowed.`;
13
+ return `Invalid file type. Only ${this.validationOptions.allowedMimetypes.join(', ')} are allowed.`;
16
14
  }
17
15
  isValid(file) {
18
- return this.allowedMimetypes.includes(file.mimetype);
16
+ return this.validationOptions.allowedMimetypes.includes(file.mimetype);
19
17
  }
20
18
  }
21
19
  exports.FileMimetypeValidator = FileMimetypeValidator;
@@ -5,3 +5,4 @@ export * from './is-exists.validator';
5
5
  export * from './is-unique.validator';
6
6
  export * from './same-as.validator';
7
7
  export * from './custom-validate.validator';
8
+ export * from './common-validators';
@@ -21,3 +21,4 @@ __exportStar(require("./is-exists.validator"), exports);
21
21
  __exportStar(require("./is-unique.validator"), exports);
22
22
  __exportStar(require("./same-as.validator"), exports);
23
23
  __exportStar(require("./custom-validate.validator"), exports);
24
+ __exportStar(require("./common-validators"), exports);
@@ -1,18 +1,38 @@
1
1
  import type { ValidationArguments, ValidationOptions, ValidatorConstraintInterface } from 'class-validator';
2
2
  import type { EntitySchema, FindOptionsWhere, ObjectType } from 'typeorm';
3
- import { TransactionHost } from '@nestjs-cls/transactional';
4
- import { TransactionalAdapterTypeOrm } from '@nestjs-cls/transactional-adapter-typeorm';
5
3
  export declare class IsExistsValidator implements ValidatorConstraintInterface {
6
- private readonly transactionHost;
7
- constructor(transactionHost: TransactionHost<TransactionalAdapterTypeOrm>);
4
+ constructor();
5
+ /**
6
+ * 解析 Entity 引用,支持多种形式:
7
+ * 1. Entity 类直接引用
8
+ * 2. 延迟函数 () => Entity
9
+ * 3. 字符串名称 "EntityName"
10
+ * 4. undefined (从属性名自动推断)
11
+ */
8
12
  private resolveEntity;
13
+ /**
14
+ * 从属性名推断 Entity 名称
15
+ * 例如:appId -> App, userId -> User
16
+ */
9
17
  private inferEntityNameFromProperty;
10
18
  validate<E>(value: string, args: IExistsValidationArguments<E>): Promise<boolean>;
11
19
  defaultMessage(args: ValidationArguments): string;
12
20
  }
21
+ /**
22
+ * IsExists 配置选项
23
+ */
24
+ export interface IsExistsOptions {
25
+ /**
26
+ * 数据源名称或 DataSource 实例
27
+ * 用于多数据源场景,指定使用哪个数据源进行验证
28
+ * 例如:'readonly', 'report', 或直接传入 DataSource 实例
29
+ */
30
+ dataSource?: string;
31
+ }
13
32
  type ExistsValidationConstraints<E> = [
14
- ObjectType<E> | EntitySchema<E> | string | (() => ObjectType<E> | EntitySchema<E> | string),
15
- (validationArguments: ValidationArguments) => FindOptionsWhere<E>
33
+ (ObjectType<E> | EntitySchema<E> | string | (() => ObjectType<E> | EntitySchema<E> | string)),
34
+ (validationArguments: ValidationArguments) => FindOptionsWhere<E>,
35
+ IsExistsOptions?
16
36
  ];
17
37
  interface IExistsValidationArguments<E> extends ValidationArguments {
18
38
  constraints: ExistsValidationConstraints<E>;
@@ -23,31 +23,44 @@ exports.IsExists = IsExists;
23
23
  const class_validator_1 = require("class-validator");
24
24
  const nestjs_i18n_1 = require("nestjs-i18n");
25
25
  const common_1 = require("@nestjs/common");
26
- const transactional_1 = require("@nestjs-cls/transactional");
26
+ const transaction_1 = require("@nest-omni/transaction");
27
27
  let IsExistsValidator = class IsExistsValidator {
28
- constructor(transactionHost) {
29
- this.transactionHost = transactionHost;
30
- }
28
+ constructor() { }
29
+ /**
30
+ * 解析 Entity 引用,支持多种形式:
31
+ * 1. Entity 类直接引用
32
+ * 2. 延迟函数 () => Entity
33
+ * 3. 字符串名称 "EntityName"
34
+ * 4. undefined (从属性名自动推断)
35
+ */
31
36
  resolveEntity(entityRef, propertyName, object) {
37
+ // 1. 如果是字符串,直接返回(TypeORM 支持字符串)
32
38
  if (typeof entityRef === 'string') {
33
39
  return entityRef;
34
40
  }
41
+ // 2. 如果是函数,需要区分延迟函数和 Entity 类
35
42
  if (typeof entityRef === 'function') {
43
+ // 2.1 箭头函数没有 prototype,是延迟函数
36
44
  if (!entityRef.prototype) {
37
45
  const resolved = entityRef();
38
46
  if (resolved)
39
47
  return resolved;
40
48
  }
41
49
  else {
50
+ // 2.2 有 prototype,是 Entity 类或普通构造函数
51
+ // 直接返回
42
52
  return entityRef;
43
53
  }
44
54
  }
55
+ // 3. 如果是 undefined,尝试从属性名推断 Entity
56
+ // 例如:appId -> AppEntity, userId -> UserEntity
45
57
  if (!entityRef) {
46
58
  const inferredEntityName = this.inferEntityNameFromProperty(propertyName);
47
59
  if (inferredEntityName) {
48
60
  console.warn(`[IsExists] Entity reference is undefined for property "${propertyName}". ` +
49
61
  `This may be caused by circular dependencies. ` +
50
62
  `Consider using lazy reference: () => ${inferredEntityName}`);
63
+ // 返回字符串形式的 Entity 名称
51
64
  return inferredEntityName;
52
65
  }
53
66
  }
@@ -58,18 +71,28 @@ let IsExistsValidator = class IsExistsValidator {
58
71
  `2. String reference: @IsExists(["EntityName", ...])\n` +
59
72
  `3. Break the circular dependency`);
60
73
  }
74
+ /**
75
+ * 从属性名推断 Entity 名称
76
+ * 例如:appId -> App, userId -> User
77
+ */
61
78
  inferEntityNameFromProperty(propertyName) {
79
+ // 移除常见后缀:Id, Ids, Key, Code
62
80
  const name = propertyName.replace(/(Id|Ids|Key|Code)$/, '');
63
81
  if (!name)
64
82
  return null;
83
+ // 转换为 PascalCase 并添加 Entity 后缀
65
84
  const entityName = name.charAt(0).toUpperCase() + name.slice(1) + 'Entity';
66
85
  return entityName;
67
86
  }
68
87
  validate(value, args) {
69
88
  return __awaiter(this, void 0, void 0, function* () {
70
- const [entityRef, findCondition] = args.constraints;
89
+ const [entityRef, findCondition, options] = args.constraints;
90
+ // 解析 Entity 引用
71
91
  const entityClass = this.resolveEntity(entityRef, args.property, args.object);
72
- const repository = this.transactionHost.tx.getRepository(entityClass);
92
+ // 获取数据源(支持多数据源)
93
+ const dataSourceName = (options === null || options === void 0 ? void 0 : options.dataSource) || 'default';
94
+ const dataSource = (0, transaction_1.getDataSource)(dataSourceName);
95
+ const repository = dataSource.getRepository(entityClass);
73
96
  args.value = value;
74
97
  return ((yield repository.count({
75
98
  where: findCondition(args),
@@ -84,7 +107,7 @@ exports.IsExistsValidator = IsExistsValidator;
84
107
  exports.IsExistsValidator = IsExistsValidator = __decorate([
85
108
  (0, common_1.Injectable)(),
86
109
  (0, class_validator_1.ValidatorConstraint)({ name: 'isExists', async: true }),
87
- __metadata("design:paramtypes", [transactional_1.TransactionHost])
110
+ __metadata("design:paramtypes", [])
88
111
  ], IsExistsValidator);
89
112
  function IsExists(constraints, validationOptions) {
90
113
  return (object, propertyName) => {
@@ -1,18 +1,44 @@
1
1
  import type { ValidationArguments, ValidationOptions, ValidatorConstraintInterface } from 'class-validator';
2
- import { EntitySchema, FindOptionsWhere, ObjectType } from 'typeorm';
3
- import { TransactionHost } from '@nestjs-cls/transactional';
4
- import { TransactionalAdapterTypeOrm } from '@nestjs-cls/transactional-adapter-typeorm';
2
+ import type { EntitySchema, FindOptionsWhere, ObjectType } from 'typeorm';
5
3
  export declare class IsUniqueValidator implements ValidatorConstraintInterface {
6
- private readonly transactionHost;
7
- constructor(transactionHost: TransactionHost<TransactionalAdapterTypeOrm>);
4
+ constructor();
5
+ /**
6
+ * 解析 Entity 引用,支持多种形式:
7
+ * 1. Entity 类直接引用
8
+ * 2. 延迟函数 () => Entity
9
+ * 3. 字符串名称 "EntityName"
10
+ * 4. undefined (从属性名自动推断)
11
+ */
8
12
  private resolveEntity;
13
+ /**
14
+ * 从属性名推断 Entity 名称
15
+ * 例如:appId -> App, userId -> User
16
+ */
9
17
  private inferEntityNameFromProperty;
10
18
  validate<E>(value: string, args: IUniqueValidationArguments<E>): Promise<boolean>;
11
19
  defaultMessage(args: ValidationArguments): string;
12
20
  }
21
+ /**
22
+ * IsUnique 配置选项
23
+ */
24
+ export interface IsUniqueOptions {
25
+ /**
26
+ * 手动指定用于判断是否为新建的字段名
27
+ * 适用于视图(View)等没有主键的场景
28
+ * 例如:uniqueKeys: ['id'] 或 uniqueKeys: ['id', 'version']
29
+ */
30
+ uniqueKeys?: string[];
31
+ /**
32
+ * 数据源名称或 DataSource 实例
33
+ * 用于多数据源场景,指定使用哪个数据源进行验证
34
+ * 例如:'readonly', 'report', 或直接传入 DataSource 实例
35
+ */
36
+ dataSource?: string;
37
+ }
13
38
  type UniqueValidationConstraints<E> = [
14
- ObjectType<E> | EntitySchema<E> | string | (() => ObjectType<E> | EntitySchema<E> | string),
15
- (validationArguments: ValidationArguments) => FindOptionsWhere<E>
39
+ (ObjectType<E> | EntitySchema<E> | string | (() => ObjectType<E> | EntitySchema<E> | string)),
40
+ (validationArguments: ValidationArguments) => FindOptionsWhere<E>,
41
+ IsUniqueOptions?
16
42
  ];
17
43
  interface IUniqueValidationArguments<E> extends ValidationArguments {
18
44
  constraints: UniqueValidationConstraints<E>;
@@ -23,25 +23,36 @@ exports.IsUnique = IsUnique;
23
23
  const class_validator_1 = require("class-validator");
24
24
  const nestjs_i18n_1 = require("nestjs-i18n");
25
25
  const common_1 = require("@nestjs/common");
26
- const transactional_1 = require("@nestjs-cls/transactional");
26
+ const transaction_1 = require("@nest-omni/transaction");
27
27
  let IsUniqueValidator = class IsUniqueValidator {
28
- constructor(transactionHost) {
29
- this.transactionHost = transactionHost;
30
- }
28
+ constructor() { }
29
+ /**
30
+ * 解析 Entity 引用,支持多种形式:
31
+ * 1. Entity 类直接引用
32
+ * 2. 延迟函数 () => Entity
33
+ * 3. 字符串名称 "EntityName"
34
+ * 4. undefined (从属性名自动推断)
35
+ */
31
36
  resolveEntity(entityRef, propertyName, object) {
37
+ // 1. 如果是字符串,直接返回(TypeORM 支持字符串)
32
38
  if (typeof entityRef === 'string') {
33
39
  return entityRef;
34
40
  }
41
+ // 2. 如果是函数,需要区分延迟函数和 Entity 类
35
42
  if (typeof entityRef === 'function') {
43
+ // 2.1 箭头函数没有 prototype,是延迟函数
36
44
  if (!entityRef.prototype) {
37
45
  const resolved = entityRef();
38
46
  if (resolved)
39
47
  return resolved;
40
48
  }
41
49
  else {
50
+ // 2.2 有 prototype,是 Entity 类或普通构造函数
51
+ // 直接返回
42
52
  return entityRef;
43
53
  }
44
54
  }
55
+ // 3. 如果是 undefined,尝试从属性名推断 Entity
45
56
  if (!entityRef) {
46
57
  const inferredEntityName = this.inferEntityNameFromProperty(propertyName);
47
58
  if (inferredEntityName) {
@@ -58,6 +69,10 @@ let IsUniqueValidator = class IsUniqueValidator {
58
69
  `2. String reference: @IsUnique(["EntityName", ...])\n` +
59
70
  `3. Break the circular dependency`);
60
71
  }
72
+ /**
73
+ * 从属性名推断 Entity 名称
74
+ * 例如:appId -> App, userId -> User
75
+ */
61
76
  inferEntityNameFromProperty(propertyName) {
62
77
  const name = propertyName.replace(/(Id|Ids|Key|Code)$/, '');
63
78
  if (!name)
@@ -67,39 +82,66 @@ let IsUniqueValidator = class IsUniqueValidator {
67
82
  }
68
83
  validate(value, args) {
69
84
  return __awaiter(this, void 0, void 0, function* () {
70
- const [entityRef, findCondition] = args.constraints;
85
+ const [entityRef, findCondition, options] = args.constraints;
86
+ // 解析 Entity 引用
71
87
  const entityClass = this.resolveEntity(entityRef, args.property, args.object);
72
- const repository = this.transactionHost.tx.getRepository(entityClass);
88
+ // 获取数据源(支持多数据源)
89
+ const dataSourceName = (options === null || options === void 0 ? void 0 : options.dataSource) || 'default';
90
+ const dataSource = (0, transaction_1.getDataSource)(dataSourceName);
91
+ const repository = dataSource.getRepository(entityClass);
73
92
  args.value = value;
74
93
  let exists;
75
94
  const defCon = findCondition(args);
76
- const pkCols = repository.metadata
77
- .primaryColumns.map((column) => column.propertyName);
78
- const isNew = pkCols.some((pk) => args.object[pk]);
79
- if (!isNew) {
80
- exists =
81
- (yield repository
82
- .count({ where: defCon })) < 1;
95
+ // 获取用于判断是否为新建的字段
96
+ // 优先级:手动配置的 uniqueKeys > 实体主键
97
+ let pkCols;
98
+ if ((options === null || options === void 0 ? void 0 : options.uniqueKeys) && options.uniqueKeys.length > 0) {
99
+ // 1. 使用手动指定的字段
100
+ pkCols = options.uniqueKeys;
101
+ }
102
+ else {
103
+ // 2. 使用实体的主键
104
+ pkCols = repository.metadata.primaryColumns.map((column) => column.propertyName);
105
+ }
106
+ // 如果没有主键也没有 uniqueKeys,使用简化逻辑
107
+ // 查询条件本身表示唯一性,只要存在记录就不允许
108
+ if (pkCols.length === 0) {
109
+ const count = yield repository.count({ where: defCon });
110
+ exists = count < 1;
111
+ return exists;
112
+ }
113
+ // 修复:检查是否为新建记录
114
+ // 如果所有 uniqueKeys/主键都没有值(null/undefined),则为新建
115
+ const isNew = !pkCols.some((pk) => {
116
+ const pkValue = args.object[pk];
117
+ return pkValue !== null && pkValue !== undefined && pkValue !== '';
118
+ });
119
+ if (isNew) {
120
+ // 新建场景:简单检查是否存在相同值的记录
121
+ exists = (yield repository.count({ where: defCon })) < 1;
83
122
  }
84
123
  else {
124
+ // 更新场景:需要排除当前记录(通过主键对比)
85
125
  const entities = yield repository
86
126
  .createQueryBuilder()
87
127
  .where(defCon)
88
- .select(pkCols)
89
128
  .limit(2)
90
- .execute();
129
+ .getMany();
91
130
  const entityCount = entities.length;
92
131
  if (entityCount === 1) {
132
+ // 只有一条记录,检查是否是当前记录本身
93
133
  const entity = entities[0];
94
134
  const oldPk = {};
95
135
  const newPk = {};
96
- pkCols.map((pk) => {
136
+ pkCols.forEach((pk) => {
97
137
  oldPk[pk] = entity[pk];
98
138
  newPk[pk] = args.object[pk];
99
139
  });
140
+ // 如果主键相同,说明是自己,允许(唯一)
100
141
  exists = JSON.stringify(oldPk) === JSON.stringify(newPk);
101
142
  }
102
143
  else {
144
+ // 0条或多条记录
103
145
  exists = entityCount < 1;
104
146
  }
105
147
  }
@@ -114,7 +156,7 @@ exports.IsUniqueValidator = IsUniqueValidator;
114
156
  exports.IsUniqueValidator = IsUniqueValidator = __decorate([
115
157
  (0, common_1.Injectable)(),
116
158
  (0, class_validator_1.ValidatorConstraint)({ name: 'isUnique', async: true }),
117
- __metadata("design:paramtypes", [transactional_1.TransactionHost])
159
+ __metadata("design:paramtypes", [])
118
160
  ], IsUniqueValidator);
119
161
  function IsUnique(constraints, validationOptions) {
120
162
  return function (object, propertyName) {
@@ -1 +1,6 @@
1
+ /**
2
+ * When the value is emtpy, validation is skipped
3
+ * @param field
4
+ * @constructor
5
+ */
1
6
  export declare function SkipEmpty(field?: string): <TFunction extends Function, Y>(target: TFunction | object, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
@@ -5,6 +5,11 @@ const common_1 = require("@nestjs/common");
5
5
  const swagger_1 = require("@nestjs/swagger");
6
6
  const class_validator_1 = require("class-validator");
7
7
  const lodash_1 = require("lodash");
8
+ /**
9
+ * When the value is emtpy, validation is skipped
10
+ * @param field
11
+ * @constructor
12
+ */
8
13
  function SkipEmpty(field) {
9
14
  return (0, common_1.applyDecorators)((0, swagger_1.ApiProperty)({ required: false }), (0, class_validator_1.ValidateIf)((obj, value) => {
10
15
  if (field) {
@@ -1,3 +1,6 @@
1
+ /**
2
+ * Vault 认证选项
3
+ */
1
4
  export interface VaultAuthOptions {
2
5
  token?: string;
3
6
  roleId?: string;
@@ -5,6 +8,9 @@ export interface VaultAuthOptions {
5
8
  k8sRole?: string;
6
9
  k8sServiceAccountToken?: string;
7
10
  }
11
+ /**
12
+ * Vault 配置选项
13
+ */
8
14
  export interface VaultOptions {
9
15
  endpoint: string;
10
16
  auth: VaultAuthOptions;
@@ -16,6 +22,9 @@ export interface VaultOptions {
16
22
  hotReloadInterval?: number;
17
23
  failOnError?: boolean;
18
24
  }
25
+ /**
26
+ * Vault 配置
27
+ */
19
28
  export interface VaultConfig {
20
29
  enabled: boolean;
21
30
  options?: VaultOptions;
@@ -1,13 +1,43 @@
1
+ /**
2
+ * Vault 配置加载器
3
+ * 负责在应用启动时从 Vault 加载配置并注入到 process.env
4
+ * 配置优先级: base.env < 环境.env < Vault
5
+ */
1
6
  export declare class VaultConfigLoader {
2
7
  private static readonly logger;
3
8
  private static vaultClient;
4
9
  private static hotReloadTimer;
10
+ /**
11
+ * 从环境变量构建 Vault 配置
12
+ */
5
13
  private static buildVaultOptions;
14
+ /**
15
+ * 初始化 Vault 客户端并进行认证
16
+ */
6
17
  private static initializeVaultClient;
18
+ /**
19
+ * 从 Vault 读取指定路径的配置
20
+ */
7
21
  private static readSecrets;
22
+ /**
23
+ * 加载 Vault 配置并注入到 process.env
24
+ * 配置优先级: base.env < 环境.env < Vault(Vault 会覆盖之前的配置)
25
+ */
8
26
  static loadVaultConfig(): Promise<void>;
27
+ /**
28
+ * 启动配置热更新
29
+ */
9
30
  private static startHotReload;
31
+ /**
32
+ * 停止热更新
33
+ */
10
34
  static stopHotReload(): void;
35
+ /**
36
+ * 获取 Vault 客户端(用于运行时动态读取)
37
+ */
11
38
  static getVaultClient(): any;
39
+ /**
40
+ * 检查 Vault 是否已连接
41
+ */
12
42
  static isConnected(): boolean;
13
43
  }