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

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 (441) hide show
  1. package/audit/audit.module.d.ts +11 -0
  2. package/audit/audit.module.js +65 -1
  3. package/audit/controllers/audit.controller.d.ts +81 -1
  4. package/audit/controllers/audit.controller.js +67 -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 +38 -0
  10. package/audit/decorators/audit-operation.decorator.js +42 -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-action-query.dto.d.ts +13 -0
  16. package/audit/dto/audit-action-query.dto.js +77 -0
  17. package/audit/dto/audit-log-query.dto.d.ts +3 -0
  18. package/audit/dto/audit-log-query.dto.js +3 -0
  19. package/audit/dto/begin-transaction.dto.d.ts +3 -0
  20. package/audit/dto/begin-transaction.dto.js +3 -0
  21. package/audit/dto/compare-entities.dto.d.ts +3 -0
  22. package/audit/dto/compare-entities.dto.js +3 -0
  23. package/audit/dto/index.d.ts +1 -0
  24. package/audit/dto/index.js +1 -0
  25. package/audit/dto/pre-check-restore.dto.d.ts +3 -0
  26. package/audit/dto/pre-check-restore.dto.js +3 -0
  27. package/audit/dto/restore-entity.dto.d.ts +3 -0
  28. package/audit/dto/restore-entity.dto.js +3 -0
  29. package/audit/entities/audit-action-summary.entity.d.ts +23 -0
  30. package/audit/entities/audit-action-summary.entity.js +101 -0
  31. package/audit/entities/entity-audit-log.entity.d.ts +10 -2
  32. package/audit/entities/entity-audit-log.entity.js +48 -9
  33. package/audit/entities/entity-transaction.entity.d.ts +11 -2
  34. package/audit/entities/entity-transaction.entity.js +42 -3
  35. package/audit/entities/index.d.ts +3 -0
  36. package/audit/entities/index.js +3 -0
  37. package/audit/entities/manual-operation-log.entity.d.ts +4 -2
  38. package/audit/entities/manual-operation-log.entity.js +12 -9
  39. package/audit/entities/operation-template.entity.d.ts +4 -0
  40. package/audit/entities/operation-template.entity.js +4 -0
  41. package/audit/enums/audit.enums.d.ts +29 -6
  42. package/audit/enums/audit.enums.js +31 -7
  43. package/audit/examples/decorator-value-mapping.example.d.ts +70 -0
  44. package/audit/examples/decorator-value-mapping.example.js +414 -0
  45. package/audit/index.d.ts +5 -1
  46. package/audit/index.js +38 -1
  47. package/audit/interceptors/audit-action.interceptor.d.ts +38 -0
  48. package/audit/interceptors/audit-action.interceptor.js +215 -0
  49. package/audit/interceptors/audit.interceptor.d.ts +16 -0
  50. package/audit/interceptors/audit.interceptor.js +41 -11
  51. package/audit/interceptors/index.d.ts +1 -0
  52. package/audit/interceptors/index.js +1 -0
  53. package/audit/interfaces/audit.interfaces.d.ts +174 -4
  54. package/audit/services/audit-action.service.d.ts +141 -0
  55. package/audit/services/audit-action.service.js +244 -0
  56. package/audit/services/audit-context.service.d.ts +106 -0
  57. package/audit/services/audit-context.service.js +185 -0
  58. package/audit/services/audit-strategy.service.d.ts +6 -0
  59. package/audit/services/audit-strategy.service.js +13 -0
  60. package/audit/services/entity-audit.service.d.ts +273 -5
  61. package/audit/services/entity-audit.service.js +840 -60
  62. package/audit/services/index.d.ts +3 -0
  63. package/audit/services/index.js +3 -0
  64. package/audit/services/manual-audit-log.service.d.ts +133 -9
  65. package/audit/services/manual-audit-log.service.js +157 -42
  66. package/audit/services/multi-database.service.d.ts +9 -2
  67. package/audit/services/multi-database.service.js +9 -21
  68. package/audit/services/operation-description.service.d.ts +71 -2
  69. package/audit/services/operation-description.service.js +231 -20
  70. package/audit/services/transaction-audit.service.d.ts +30 -0
  71. package/audit/services/transaction-audit.service.js +53 -5
  72. package/audit/subscribers/entity-audit.subscriber.d.ts +20 -0
  73. package/audit/subscribers/entity-audit.subscriber.js +98 -6
  74. package/cache/cache-metrics.service.d.ts +67 -0
  75. package/cache/cache-metrics.service.js +68 -4
  76. package/cache/cache-serialization.service.d.ts +31 -0
  77. package/cache/cache-serialization.service.js +25 -0
  78. package/cache/cache.constants.d.ts +9 -0
  79. package/cache/cache.constants.js +9 -0
  80. package/cache/cache.health.d.ts +26 -0
  81. package/cache/cache.health.js +30 -0
  82. package/cache/cache.module.d.ts +87 -2
  83. package/cache/cache.module.js +84 -11
  84. package/cache/cache.service.d.ts +143 -3
  85. package/cache/cache.service.js +173 -4
  86. package/cache/cache.warmup.service.d.ts +39 -0
  87. package/cache/cache.warmup.service.js +32 -0
  88. package/cache/decorators/cache-evict.decorator.d.ts +47 -0
  89. package/cache/decorators/cache-evict.decorator.js +56 -0
  90. package/cache/decorators/cache-put.decorator.d.ts +34 -0
  91. package/cache/decorators/cache-put.decorator.js +39 -0
  92. package/cache/decorators/cacheable.decorator.d.ts +40 -0
  93. package/cache/decorators/cacheable.decorator.js +55 -0
  94. package/cache/dependencies/callback.dependency.d.ts +33 -0
  95. package/cache/dependencies/callback.dependency.js +39 -1
  96. package/cache/dependencies/chain.dependency.d.ts +28 -0
  97. package/cache/dependencies/chain.dependency.js +34 -0
  98. package/cache/dependencies/db.dependency.d.ts +83 -7
  99. package/cache/dependencies/db.dependency.js +89 -14
  100. package/cache/dependencies/file.dependency.d.ts +32 -0
  101. package/cache/dependencies/file.dependency.js +34 -0
  102. package/cache/dependencies/tag.dependency.d.ts +75 -4
  103. package/cache/dependencies/tag.dependency.js +145 -11
  104. package/cache/dependencies/time.dependency.d.ts +43 -0
  105. package/cache/dependencies/time.dependency.js +43 -0
  106. package/cache/entities/index.d.ts +1 -0
  107. package/cache/entities/index.js +17 -0
  108. package/cache/entities/typeorm-cache.entity.d.ts +71 -0
  109. package/cache/entities/typeorm-cache.entity.js +110 -0
  110. package/cache/examples/basic-usage.d.ts +15 -0
  111. package/cache/examples/basic-usage.js +62 -8
  112. package/cache/index.d.ts +2 -1
  113. package/cache/index.js +28 -2
  114. package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
  115. package/cache/interfaces/cache-options.interface.d.ts +89 -0
  116. package/cache/interfaces/cache-options.interface.js +6 -0
  117. package/cache/interfaces/cache-provider.interface.d.ts +78 -0
  118. package/cache/providers/base-cache.provider.d.ts +14 -0
  119. package/cache/providers/base-cache.provider.js +16 -0
  120. package/cache/providers/cls-cache.provider.d.ts +20 -0
  121. package/cache/providers/cls-cache.provider.js +28 -0
  122. package/cache/providers/index.d.ts +2 -1
  123. package/cache/providers/index.js +2 -1
  124. package/cache/providers/lrucache.provider.d.ts +76 -0
  125. package/cache/providers/lrucache.provider.js +226 -0
  126. package/cache/providers/redis-cache.provider.d.ts +26 -0
  127. package/cache/providers/redis-cache.provider.js +29 -0
  128. package/cache/providers/typeorm-cache.provider.d.ts +211 -0
  129. package/cache/providers/typeorm-cache.provider.js +483 -0
  130. package/cache/utils/dependency-manager.util.d.ts +52 -0
  131. package/cache/utils/dependency-manager.util.js +59 -0
  132. package/cache/utils/key-generator.util.d.ts +42 -0
  133. package/cache/utils/key-generator.util.js +53 -1
  134. package/common/abstract.entity.d.ts +14 -0
  135. package/common/abstract.entity.js +14 -0
  136. package/common/boilerplate.polyfill.d.ts +143 -0
  137. package/common/boilerplate.polyfill.js +35 -1
  138. package/common/dto/dto-container.d.ts +16 -0
  139. package/common/dto/dto-container.js +20 -0
  140. package/common/dto/dto-decorators.d.ts +18 -0
  141. package/common/dto/dto-decorators.js +14 -0
  142. package/common/dto/dto-extensions.d.ts +11 -0
  143. package/common/dto/dto-extensions.js +9 -0
  144. package/common/dto/dto-service-accessor.d.ts +17 -0
  145. package/common/dto/dto-service-accessor.js +18 -0
  146. package/common/dto/dto-transformer.d.ts +12 -0
  147. package/common/dto/dto-transformer.js +9 -0
  148. package/common/dto/index.js +2 -0
  149. package/common/examples/paginate-and-map.example.d.ts +6 -0
  150. package/common/examples/paginate-and-map.example.js +26 -0
  151. package/common/helpers/validation-metadata-helper.d.ts +55 -0
  152. package/common/helpers/validation-metadata-helper.js +60 -0
  153. package/common/index.d.ts +1 -0
  154. package/common/index.js +4 -0
  155. package/common/utils.d.ts +15 -0
  156. package/common/utils.js +15 -0
  157. package/constants/language-code.js +1 -0
  158. package/decorators/field.decorators.d.ts +72 -3
  159. package/decorators/field.decorators.js +155 -19
  160. package/decorators/property.decorators.js +1 -0
  161. package/decorators/public-route.decorator.js +1 -0
  162. package/decorators/transform.decorators.d.ts +27 -2
  163. package/decorators/transform.decorators.js +29 -23
  164. package/decorators/translate.decorator.js +1 -0
  165. package/decorators/user.decorator.js +1 -0
  166. package/decorators/validator.decorators.d.ts +8 -18
  167. package/decorators/validator.decorators.js +22 -190
  168. package/file-upload/controllers/file-access.controller.d.ts +23 -0
  169. package/file-upload/controllers/file-access.controller.js +128 -0
  170. package/file-upload/decorators/column.decorator.d.ts +151 -0
  171. package/file-upload/decorators/column.decorator.js +273 -0
  172. package/file-upload/decorators/csv-data.decorator.d.ts +30 -0
  173. package/file-upload/decorators/csv-data.decorator.js +85 -0
  174. package/file-upload/decorators/csv-import.decorator.d.ts +34 -0
  175. package/file-upload/decorators/csv-import.decorator.js +24 -0
  176. package/file-upload/decorators/examples/column-mapping.example.d.ts +76 -0
  177. package/file-upload/decorators/examples/column-mapping.example.js +122 -0
  178. package/file-upload/decorators/excel-data.decorator.d.ts +30 -0
  179. package/file-upload/decorators/excel-data.decorator.js +85 -0
  180. package/file-upload/decorators/file-upload.decorator.d.ts +83 -0
  181. package/file-upload/decorators/file-upload.decorator.js +172 -0
  182. package/file-upload/decorators/index.d.ts +5 -0
  183. package/file-upload/decorators/index.js +38 -0
  184. package/file-upload/decorators/process.decorator.d.ts +40 -0
  185. package/file-upload/decorators/process.decorator.js +52 -0
  186. package/file-upload/decorators/validate-data.decorator.d.ts +91 -0
  187. package/file-upload/decorators/validate-data.decorator.js +39 -0
  188. package/file-upload/dto/create-file.dto.d.ts +24 -0
  189. package/file-upload/dto/create-file.dto.js +112 -0
  190. package/file-upload/dto/find-files.dto.d.ts +15 -0
  191. package/file-upload/dto/find-files.dto.js +76 -0
  192. package/file-upload/dto/index.d.ts +4 -0
  193. package/file-upload/dto/index.js +20 -0
  194. package/file-upload/dto/pagination.dto.d.ts +7 -0
  195. package/file-upload/dto/pagination.dto.js +39 -0
  196. package/file-upload/dto/update-file.dto.d.ts +15 -0
  197. package/file-upload/dto/update-file.dto.js +67 -0
  198. package/file-upload/entities/file-metadata.entity.d.ts +25 -0
  199. package/file-upload/entities/file-metadata.entity.js +76 -0
  200. package/file-upload/entities/file.entity.d.ts +114 -0
  201. package/file-upload/entities/file.entity.js +350 -0
  202. package/file-upload/entities/index.d.ts +2 -0
  203. package/file-upload/entities/index.js +18 -0
  204. package/file-upload/enums/file-type.enum.d.ts +72 -0
  205. package/file-upload/enums/file-type.enum.js +212 -0
  206. package/file-upload/exceptions/file-upload.exception.d.ts +57 -0
  207. package/file-upload/exceptions/file-upload.exception.js +120 -0
  208. package/file-upload/exceptions/index.d.ts +1 -0
  209. package/file-upload/exceptions/index.js +17 -0
  210. package/file-upload/file-upload.module.d.ts +89 -0
  211. package/file-upload/file-upload.module.js +292 -0
  212. package/file-upload/index.d.ts +37 -0
  213. package/file-upload/index.js +77 -0
  214. package/file-upload/interceptors/file-upload.interceptor.d.ts +101 -0
  215. package/file-upload/interceptors/file-upload.interceptor.js +594 -0
  216. package/file-upload/interceptors/index.d.ts +1 -0
  217. package/file-upload/interceptors/index.js +17 -0
  218. package/file-upload/interfaces/custom-file-type.interface.d.ts +72 -0
  219. package/file-upload/interfaces/custom-file-type.interface.js +2 -0
  220. package/file-upload/interfaces/file-buffer.interface.d.ts +72 -0
  221. package/file-upload/interfaces/file-buffer.interface.js +2 -0
  222. package/file-upload/interfaces/file-entity.interface.d.ts +142 -0
  223. package/file-upload/interfaces/file-entity.interface.js +28 -0
  224. package/file-upload/interfaces/file-metadata.interface.d.ts +21 -0
  225. package/file-upload/interfaces/file-metadata.interface.js +2 -0
  226. package/file-upload/interfaces/file-processor.interface.d.ts +93 -0
  227. package/file-upload/interfaces/file-processor.interface.js +2 -0
  228. package/file-upload/interfaces/file-upload-options.interface.d.ts +74 -0
  229. package/file-upload/interfaces/file-upload-options.interface.js +5 -0
  230. package/file-upload/interfaces/index.d.ts +7 -0
  231. package/file-upload/interfaces/index.js +24 -0
  232. package/file-upload/interfaces/processor-options.interface.d.ts +102 -0
  233. package/file-upload/interfaces/processor-options.interface.js +2 -0
  234. package/file-upload/interfaces/storage-provider.interface.d.ts +239 -0
  235. package/file-upload/interfaces/storage-provider.interface.js +2 -0
  236. package/file-upload/interfaces/upload-options.interface.d.ts +19 -0
  237. package/file-upload/interfaces/upload-options.interface.js +2 -0
  238. package/file-upload/processors/csv.processor.d.ts +98 -0
  239. package/file-upload/processors/csv.processor.js +391 -0
  240. package/file-upload/processors/excel.processor.d.ts +130 -0
  241. package/file-upload/processors/excel.processor.js +547 -0
  242. package/file-upload/processors/image.processor.d.ts +199 -0
  243. package/file-upload/processors/image.processor.js +377 -0
  244. package/file-upload/providers/index.d.ts +2 -0
  245. package/file-upload/providers/index.js +18 -0
  246. package/file-upload/providers/local-storage.provider.d.ts +98 -0
  247. package/file-upload/providers/local-storage.provider.js +484 -0
  248. package/file-upload/providers/s3-storage.provider.d.ts +87 -0
  249. package/file-upload/providers/s3-storage.provider.js +455 -0
  250. package/file-upload/services/file-signature-validator.service.d.ts +118 -0
  251. package/file-upload/services/file-signature-validator.service.js +376 -0
  252. package/file-upload/services/file.service.d.ts +193 -0
  253. package/file-upload/services/file.service.js +638 -0
  254. package/file-upload/services/index.d.ts +4 -0
  255. package/file-upload/services/index.js +20 -0
  256. package/file-upload/services/malicious-file-detector.service.d.ts +300 -0
  257. package/file-upload/services/malicious-file-detector.service.js +1234 -0
  258. package/file-upload/services/mime-registry.service.d.ts +47 -0
  259. package/file-upload/services/mime-registry.service.js +167 -0
  260. package/file-upload/utils/checksum.util.d.ts +28 -0
  261. package/file-upload/utils/checksum.util.js +65 -0
  262. package/file-upload/utils/dynamic-import.util.d.ts +54 -0
  263. package/file-upload/utils/dynamic-import.util.js +156 -0
  264. package/file-upload/utils/filename.util.d.ts +59 -0
  265. package/file-upload/utils/filename.util.js +184 -0
  266. package/file-upload/utils/filepath.util.d.ts +70 -0
  267. package/file-upload/utils/filepath.util.js +152 -0
  268. package/file-upload/utils/index.d.ts +4 -0
  269. package/file-upload/utils/index.js +20 -0
  270. package/filters/bad-request.filter.js +19 -4
  271. package/filters/constraint-errors.js +1 -0
  272. package/helpers/common.helper.d.ts +13 -0
  273. package/helpers/common.helper.js +13 -0
  274. package/http-client/config/http-client.config.d.ts +20 -0
  275. package/http-client/config/http-client.config.js +48 -21
  276. package/http-client/decorators/http-client.decorators.d.ts +55 -14
  277. package/http-client/decorators/http-client.decorators.js +154 -78
  278. package/http-client/entities/http-log.entity.d.ts +217 -8
  279. package/http-client/entities/http-log.entity.js +7 -22
  280. package/http-client/errors/http-client.errors.d.ts +57 -0
  281. package/http-client/errors/http-client.errors.js +58 -0
  282. package/http-client/examples/advanced-usage.example.d.ts +40 -0
  283. package/http-client/examples/advanced-usage.example.js +53 -61
  284. package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
  285. package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
  286. package/http-client/examples/basic-usage.example.d.ts +60 -0
  287. package/http-client/examples/basic-usage.example.js +60 -0
  288. package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
  289. package/http-client/examples/multi-api-configuration.example.js +76 -5
  290. package/http-client/examples/proxy-from-environment.example.d.ts +133 -0
  291. package/http-client/examples/proxy-from-environment.example.js +409 -0
  292. package/http-client/http-client.module.d.ts +48 -2
  293. package/http-client/http-client.module.js +147 -68
  294. package/http-client/index.d.ts +1 -1
  295. package/http-client/index.js +8 -0
  296. package/http-client/interfaces/api-client-config.interface.d.ts +80 -45
  297. package/http-client/interfaces/api-client-config.interface.js +3 -0
  298. package/http-client/interfaces/http-client-config.interface.d.ts +109 -52
  299. package/http-client/services/api-client-registry.service.d.ts +50 -11
  300. package/http-client/services/api-client-registry.service.js +90 -250
  301. package/http-client/services/circuit-breaker.service.d.ts +115 -2
  302. package/http-client/services/circuit-breaker.service.js +237 -7
  303. package/http-client/services/http-client.service.d.ts +124 -14
  304. package/http-client/services/http-client.service.js +437 -148
  305. package/http-client/services/http-log-query.service.d.ts +83 -0
  306. package/http-client/services/http-log-query.service.js +121 -13
  307. package/http-client/services/http-replay.service.d.ts +101 -0
  308. package/http-client/services/http-replay.service.js +86 -0
  309. package/http-client/services/index.d.ts +0 -1
  310. package/http-client/services/index.js +0 -1
  311. package/http-client/services/log-cleanup.service.d.ts +63 -0
  312. package/http-client/services/log-cleanup.service.js +54 -2
  313. package/http-client/services/logging.service.d.ts +116 -7
  314. package/http-client/services/logging.service.js +349 -86
  315. package/http-client/utils/call-stack-extractor.util.d.ts +63 -0
  316. package/http-client/utils/call-stack-extractor.util.js +83 -0
  317. package/http-client/utils/context-extractor.util.d.ts +49 -0
  318. package/http-client/utils/context-extractor.util.js +54 -0
  319. package/http-client/utils/curl-generator.util.d.ts +21 -0
  320. package/http-client/utils/curl-generator.util.js +44 -3
  321. package/http-client/utils/index.d.ts +1 -0
  322. package/http-client/utils/index.js +1 -0
  323. package/http-client/utils/proxy-environment.util.d.ts +42 -0
  324. package/http-client/utils/proxy-environment.util.js +148 -0
  325. package/http-client/utils/request-id.util.d.ts +18 -0
  326. package/http-client/utils/request-id.util.js +20 -0
  327. package/http-client/utils/retry-recorder.util.d.ts +42 -0
  328. package/http-client/utils/retry-recorder.util.js +44 -0
  329. package/http-client/utils/security-validator.util.d.ts +118 -0
  330. package/http-client/utils/security-validator.util.js +352 -0
  331. package/index.d.ts +3 -1
  332. package/index.js +12 -1
  333. package/interceptors/translation-interceptor.service.js +5 -0
  334. package/ip-filter/constants.d.ts +21 -0
  335. package/ip-filter/constants.js +24 -0
  336. package/ip-filter/decorators/index.d.ts +1 -0
  337. package/ip-filter/decorators/index.js +17 -0
  338. package/ip-filter/decorators/ip-filter.decorator.d.ts +58 -0
  339. package/ip-filter/decorators/ip-filter.decorator.js +79 -0
  340. package/ip-filter/guards/index.d.ts +1 -0
  341. package/ip-filter/guards/index.js +17 -0
  342. package/ip-filter/guards/ip-filter.guard.d.ts +62 -0
  343. package/ip-filter/guards/ip-filter.guard.js +174 -0
  344. package/ip-filter/index.d.ts +7 -0
  345. package/ip-filter/index.js +23 -0
  346. package/ip-filter/interfaces/index.d.ts +4 -0
  347. package/ip-filter/interfaces/index.js +20 -0
  348. package/ip-filter/interfaces/ip-filter-async-options.interface.d.ts +15 -0
  349. package/ip-filter/interfaces/ip-filter-async-options.interface.js +2 -0
  350. package/ip-filter/interfaces/ip-filter-metadata.interface.d.ts +26 -0
  351. package/ip-filter/interfaces/ip-filter-metadata.interface.js +2 -0
  352. package/ip-filter/interfaces/ip-filter-options.interface.d.ts +34 -0
  353. package/ip-filter/interfaces/ip-filter-options.interface.js +2 -0
  354. package/ip-filter/interfaces/ip-rule.interface.d.ts +36 -0
  355. package/ip-filter/interfaces/ip-rule.interface.js +2 -0
  356. package/ip-filter/ip-filter.module.d.ts +55 -0
  357. package/ip-filter/ip-filter.module.js +105 -0
  358. package/ip-filter/services/index.d.ts +1 -0
  359. package/ip-filter/services/index.js +17 -0
  360. package/ip-filter/services/ip-filter.service.d.ts +92 -0
  361. package/ip-filter/services/ip-filter.service.js +238 -0
  362. package/ip-filter/utils/index.d.ts +1 -0
  363. package/ip-filter/utils/index.js +17 -0
  364. package/ip-filter/utils/ip-utils.d.ts +61 -0
  365. package/ip-filter/utils/ip-utils.js +162 -0
  366. package/package.json +32 -29
  367. package/providers/context.provider.d.ts +9 -0
  368. package/providers/context.provider.js +15 -0
  369. package/providers/generator.provider.d.ts +4 -0
  370. package/providers/generator.provider.js +4 -0
  371. package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
  372. package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
  373. package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
  374. package/redis-lock/examples/lock-strategy.examples.js +130 -15
  375. package/redis-lock/index.d.ts +2 -0
  376. package/redis-lock/index.js +8 -1
  377. package/redis-lock/lock-heartbeat.service.d.ts +80 -0
  378. package/redis-lock/lock-heartbeat.service.js +232 -0
  379. package/redis-lock/redis-lock.decorator.d.ts +101 -0
  380. package/redis-lock/redis-lock.decorator.js +120 -0
  381. package/redis-lock/redis-lock.module.d.ts +66 -0
  382. package/redis-lock/redis-lock.module.js +175 -70
  383. package/redis-lock/redis-lock.service.d.ts +282 -0
  384. package/redis-lock/redis-lock.service.js +343 -20
  385. package/setup/bootstrap.setup.d.ts +2 -1
  386. package/setup/bootstrap.setup.js +22 -1
  387. package/setup/index.d.ts +1 -0
  388. package/setup/index.js +1 -0
  389. package/setup/mode.setup.d.ts +44 -0
  390. package/setup/mode.setup.js +44 -0
  391. package/setup/run-in-mode.decorator.d.ts +56 -0
  392. package/setup/run-in-mode.decorator.js +92 -0
  393. package/setup/schedule.decorator.d.ts +227 -0
  394. package/setup/schedule.decorator.js +240 -12
  395. package/setup/worker.decorator.d.ts +86 -0
  396. package/setup/worker.decorator.js +97 -0
  397. package/shared/index.d.ts +1 -1
  398. package/shared/index.js +1 -1
  399. package/shared/{serviceRegistryModule.js → service-registry.module.js} +19 -18
  400. package/shared/services/api-config.service.d.ts +3 -0
  401. package/shared/services/api-config.service.js +21 -9
  402. package/shared/services/index.d.ts +0 -1
  403. package/shared/services/index.js +0 -1
  404. package/validator-json/decorators.d.ts +17 -0
  405. package/validator-json/decorators.js +17 -2
  406. package/validator-json/default.d.ts +6 -0
  407. package/validator-json/default.js +30 -2
  408. package/validator-json/defaultConverters.js +1 -0
  409. package/validator-json/options.d.ts +23 -0
  410. package/validators/common-validators.d.ts +143 -0
  411. package/validators/common-validators.js +249 -0
  412. package/validators/custom-validate.examples.d.ts +23 -0
  413. package/validators/custom-validate.examples.js +78 -6
  414. package/validators/custom-validate.validator.d.ts +108 -0
  415. package/validators/custom-validate.validator.js +85 -0
  416. package/validators/file-mimetype.validator.d.ts +0 -2
  417. package/validators/file-mimetype.validator.js +4 -6
  418. package/validators/index.d.ts +1 -0
  419. package/validators/index.js +1 -0
  420. package/validators/is-exists.validator.d.ts +26 -6
  421. package/validators/is-exists.validator.js +30 -7
  422. package/validators/is-unique.validator.d.ts +33 -7
  423. package/validators/is-unique.validator.js +59 -17
  424. package/validators/skip-empty.validator.d.ts +5 -0
  425. package/validators/skip-empty.validator.js +5 -0
  426. package/vault/interfaces/vault-options.interface.d.ts +9 -0
  427. package/vault/vault-config.loader.d.ts +30 -0
  428. package/vault/vault-config.loader.js +48 -1
  429. package/vault/vault-config.service.d.ts +53 -0
  430. package/vault/vault-config.service.js +57 -0
  431. package/vault/vault.module.d.ts +4 -0
  432. package/vault/vault.module.js +4 -0
  433. package/cache/providers/memory-cache.provider.d.ts +0 -26
  434. package/cache/providers/memory-cache.provider.js +0 -171
  435. package/decorators/examples/validation-decorators.example.d.ts +0 -69
  436. package/decorators/examples/validation-decorators.example.js +0 -331
  437. package/http-client/services/cache.service.d.ts +0 -24
  438. package/http-client/services/cache.service.js +0 -264
  439. package/shared/services/validator.service.d.ts +0 -3
  440. package/shared/services/validator.service.js +0 -20
  441. /package/shared/{serviceRegistryModule.d.ts → service-registry.module.d.ts} +0 -0
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.transformEntityToDto = transformEntityToDto;
13
13
  const typeorm_1 = require("typeorm");
14
14
  const dto_transformer_1 = require("./dto-transformer");
15
+ // 实现Array.toDto方法
15
16
  Array.prototype.toDto = function (dtoClass, context) {
16
17
  return __awaiter(this, void 0, void 0, function* () {
17
18
  if (!this || this.length === 0) {
@@ -20,6 +21,7 @@ Array.prototype.toDto = function (dtoClass, context) {
20
21
  return yield dto_transformer_1.DtoTransformer.transformArray(this, dtoClass, context);
21
22
  });
22
23
  };
24
+ // 避免直接修改Object原型,改为使用独立的函数
23
25
  function transformEntityToDto(entity, dtoClass, context) {
24
26
  return __awaiter(this, void 0, void 0, function* () {
25
27
  if (!entity) {
@@ -28,21 +30,28 @@ function transformEntityToDto(entity, dtoClass, context) {
28
30
  return yield dto_transformer_1.DtoTransformer.transform(entity, dtoClass, context);
29
31
  });
30
32
  }
33
+ // 实现QueryBuilder.toDtoPage方法
31
34
  typeorm_1.SelectQueryBuilder.prototype.toDtoPage = function (pageOptionsDto, dtoClass, context) {
32
35
  return __awaiter(this, void 0, void 0, function* () {
33
36
  const page = pageOptionsDto.page || 1;
34
37
  const pageSize = pageOptionsDto.pageSize || 10;
35
38
  const skip = (page - 1) * pageSize;
39
+ // 获取总数
36
40
  const total = yield this.getCount();
41
+ // 应用分页
37
42
  const entities = yield this.skip(skip).take(pageSize).getMany();
38
43
  const count = entities.length;
44
+ // 调试:输出原始实体数据
39
45
  if (count) {
40
46
  console.log('Raw entity sample:', JSON.stringify(entities[0], null, 2));
41
47
  }
48
+ // 转换为DTO
42
49
  const data = yield entities.toDto(dtoClass, context);
50
+ // 调试:输出转换后的DTO数据
43
51
  if (data.length > 0) {
44
52
  console.log('Converted DTO sample:', JSON.stringify(data[0], null, 2));
45
53
  }
54
+ // 计算分页信息
46
55
  const pageCount = Math.ceil(total / pageSize);
47
56
  const hasPreviousPage = page > 1;
48
57
  const hasNextPage = page < pageCount;
@@ -1,7 +1,24 @@
1
1
  import { Constructor } from '../types';
2
+ /**
3
+ * DTO服务访问器 - 使用全局容器获取服务
4
+ * 类似class-validator的useContainer机制
5
+ */
2
6
  export declare class DtoServiceAccessor {
7
+ /**
8
+ * 获取服务实例
9
+ */
3
10
  static getService<T = any>(serviceToken: string | symbol | Constructor<any>): Promise<T | null>;
11
+ /**
12
+ * 批量获取服务
13
+ */
4
14
  static getServices<T = any>(serviceTokens: Array<string | symbol | Constructor<any>>): Promise<Record<string, T>>;
15
+ /**
16
+ * 为特定DTO类获取所需服务
17
+ * 基于预定义的服务依赖列表
18
+ */
5
19
  static getServicesForDto(dtoClass: Constructor<any>): Promise<Record<string, any>>;
20
+ /**
21
+ * 检查是否已初始化
22
+ */
6
23
  static isInitialized(): boolean;
7
24
  }
@@ -11,12 +11,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.DtoServiceAccessor = void 0;
13
13
  const dto_container_1 = require("./dto-container");
14
+ /**
15
+ * DTO服务访问器 - 使用全局容器获取服务
16
+ * 类似class-validator的useContainer机制
17
+ */
14
18
  class DtoServiceAccessor {
19
+ /**
20
+ * 获取服务实例
21
+ */
15
22
  static getService(serviceToken) {
16
23
  return __awaiter(this, void 0, void 0, function* () {
17
24
  return yield dto_container_1.DtoContainer.get(serviceToken);
18
25
  });
19
26
  }
27
+ /**
28
+ * 批量获取服务
29
+ */
20
30
  static getServices(serviceTokens) {
21
31
  return __awaiter(this, void 0, void 0, function* () {
22
32
  const services = {};
@@ -33,8 +43,13 @@ class DtoServiceAccessor {
33
43
  return services;
34
44
  });
35
45
  }
46
+ /**
47
+ * 为特定DTO类获取所需服务
48
+ * 基于预定义的服务依赖列表
49
+ */
36
50
  static getServicesForDto(dtoClass) {
37
51
  return __awaiter(this, void 0, void 0, function* () {
52
+ // 从元数据获取服务依赖
38
53
  const serviceTokens = Reflect.getMetadata('dto:required-services', dtoClass) || [];
39
54
  if (serviceTokens.length === 0) {
40
55
  return {};
@@ -42,6 +57,9 @@ class DtoServiceAccessor {
42
57
  return yield DtoServiceAccessor.getServices(serviceTokens);
43
58
  });
44
59
  }
60
+ /**
61
+ * 检查是否已初始化
62
+ */
45
63
  static isInitialized() {
46
64
  return dto_container_1.DtoContainer.isInitialized();
47
65
  }
@@ -1,11 +1,23 @@
1
1
  import { Constructor } from '../types';
2
+ /**
3
+ * DTO转换上下文
4
+ */
2
5
  export interface DtoTransformContext {
3
6
  user?: any;
4
7
  request?: any;
5
8
  services?: Record<string, any>;
6
9
  [key: string]: any;
7
10
  }
11
+ /**
12
+ * 简化的DTO转换器 - 利用class-transformer和自动服务注入
13
+ */
8
14
  export declare class DtoTransformer {
15
+ /**
16
+ * 转换单个实体到DTO
17
+ */
9
18
  static transform<EntityType, DtoType>(entity: EntityType, dtoClass: Constructor<DtoType>, context?: DtoTransformContext): Promise<DtoType>;
19
+ /**
20
+ * 批量转换实体数组到DTO数组
21
+ */
10
22
  static transformArray<EntityType, DtoType>(entities: EntityType[], dtoClass: Constructor<DtoType>, context?: DtoTransformContext): Promise<DtoType[]>;
11
23
  }
@@ -12,7 +12,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.DtoTransformer = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const dto_service_accessor_1 = require("./dto-service-accessor");
15
+ /**
16
+ * 简化的DTO转换器 - 利用class-transformer和自动服务注入
17
+ */
15
18
  class DtoTransformer {
19
+ /**
20
+ * 转换单个实体到DTO
21
+ */
16
22
  static transform(entity, dtoClass, context) {
17
23
  return __awaiter(this, void 0, void 0, function* () {
18
24
  const services = yield dto_service_accessor_1.DtoServiceAccessor.getServicesForDto(dtoClass);
@@ -27,6 +33,9 @@ class DtoTransformer {
27
33
  return (0, class_transformer_1.plainToInstance)(dtoClass, entity, options);
28
34
  });
29
35
  }
36
+ /**
37
+ * 批量转换实体数组到DTO数组
38
+ */
30
39
  static transformArray(entities, dtoClass, context) {
31
40
  return __awaiter(this, void 0, void 0, function* () {
32
41
  if (!entities || entities.length === 0) {
@@ -20,9 +20,11 @@ __exportStar(require("./create-translation.dto"), exports);
20
20
  __exportStar(require("./page.dto"), exports);
21
21
  __exportStar(require("./page-meta.dto"), exports);
22
22
  __exportStar(require("./page-options.dto"), exports);
23
+ // 导出新的DTO转换功能
23
24
  __exportStar(require("./dto-service-accessor"), exports);
24
25
  __exportStar(require("./dto-decorators"), exports);
25
26
  __exportStar(require("./dto-transformer"), exports);
26
27
  __exportStar(require("./dto-extensions"), exports);
27
28
  __exportStar(require("./dto-container"), exports);
29
+ // 需要导入扩展文件以激活原型方法扩展
28
30
  require("./dto-extensions");
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Example usage of the paginateAndMap method with async transform
3
+ *
4
+ * This file demonstrates various ways to use the enhanced paginateAndMap method
5
+ * with support for both synchronous and asynchronous transform functions.
6
+ */
1
7
  import { Repository } from 'typeorm';
2
8
  import { PageOptionsDto } from '../dto/page-options.dto';
3
9
  export declare function basicPaginationExample(repository: Repository<any>, pageOptions: PageOptionsDto): Promise<import("..").PageDto<import("..").AbstractDto>>;
@@ -1,4 +1,10 @@
1
1
  "use strict";
2
+ /**
3
+ * Example usage of the paginateAndMap method with async transform
4
+ *
5
+ * This file demonstrates various ways to use the enhanced paginateAndMap method
6
+ * with support for both synchronous and asynchronous transform functions.
7
+ */
2
8
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
9
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
10
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -24,6 +30,7 @@ exports.complexAsyncTransformExample = complexAsyncTransformExample;
24
30
  exports.iterateExample = iterateExample;
25
31
  exports.eachBatchSingleExample = eachBatchSingleExample;
26
32
  exports.eachBatchGroupExample = eachBatchGroupExample;
33
+ // Example 1: Basic usage without transform
27
34
  function basicPaginationExample(repository, pageOptions) {
28
35
  return __awaiter(this, void 0, void 0, function* () {
29
36
  const result = yield repository
@@ -32,6 +39,7 @@ function basicPaginationExample(repository, pageOptions) {
32
39
  return result;
33
40
  });
34
41
  }
42
+ // Example 2: Synchronous transform
35
43
  function syncTransformExample(repository, pageOptions) {
36
44
  return __awaiter(this, void 0, void 0, function* () {
37
45
  const result = yield repository
@@ -39,12 +47,14 @@ function syncTransformExample(repository, pageOptions) {
39
47
  .where('entity.isActive = :isActive', { isActive: true })
40
48
  .paginateAndMap(pageOptions, {
41
49
  transform: (items) => {
50
+ // Filter items synchronously
42
51
  return items.filter(item => item.status === 'approved');
43
52
  },
44
53
  });
45
54
  return result;
46
55
  });
47
56
  }
57
+ // Example 3: Async transform with external service call
48
58
  function asyncTransformExample(repository, pageOptions, externalService) {
49
59
  return __awaiter(this, void 0, void 0, function* () {
50
60
  const result = yield repository
@@ -52,16 +62,19 @@ function asyncTransformExample(repository, pageOptions, externalService) {
52
62
  .where('entity.isActive = :isActive', { isActive: true })
53
63
  .paginateAndMap(pageOptions, {
54
64
  transform: (items) => __awaiter(this, void 0, void 0, function* () {
65
+ // Enrich each item with data from external service
55
66
  const enrichedItems = yield Promise.all(items.map((item) => __awaiter(this, void 0, void 0, function* () {
56
67
  const additionalData = yield externalService.fetchData(item.id);
57
68
  return Object.assign(Object.assign({}, item), { additionalData });
58
69
  })));
70
+ // Filter after enrichment
59
71
  return enrichedItems.filter(item => { var _a; return (_a = item.additionalData) === null || _a === void 0 ? void 0 : _a.isValid; });
60
72
  }),
61
73
  });
62
74
  return result;
63
75
  });
64
76
  }
77
+ // Example 4: Async transform with batch processing
65
78
  function asyncBatchTransformExample(repository, pageOptions, batchProcessor) {
66
79
  return __awaiter(this, void 0, void 0, function* () {
67
80
  const result = yield repository
@@ -70,13 +83,16 @@ function asyncBatchTransformExample(repository, pageOptions, batchProcessor) {
70
83
  .paginateAndMap(pageOptions, {
71
84
  dtoOptions: { includeRelations: true },
72
85
  transform: (items) => __awaiter(this, void 0, void 0, function* () {
86
+ // Process items in batches for better performance
73
87
  const processedItems = yield batchProcessor.processBatch(items);
88
+ // Additional filtering or transformation
74
89
  return processedItems.map(item => (Object.assign(Object.assign({}, item), { processed: true, processedAt: new Date() })));
75
90
  }),
76
91
  });
77
92
  return result;
78
93
  });
79
94
  }
95
+ // Example 5: Complex async transform with error handling
80
96
  function complexAsyncTransformExample(repository, pageOptions, services) {
81
97
  return __awaiter(this, void 0, void 0, function* () {
82
98
  const result = yield repository
@@ -85,6 +101,7 @@ function complexAsyncTransformExample(repository, pageOptions, services) {
85
101
  .paginateAndMap(pageOptions, {
86
102
  skipCount: false,
87
103
  transform: (items) => __awaiter(this, void 0, void 0, function* () {
104
+ // Step 1: Validate items
88
105
  const validatedItems = yield Promise.all(items.map((item) => __awaiter(this, void 0, void 0, function* () {
89
106
  try {
90
107
  const isValid = yield services.validation.validate(item);
@@ -95,11 +112,14 @@ function complexAsyncTransformExample(repository, pageOptions, services) {
95
112
  return null;
96
113
  }
97
114
  })));
115
+ // Filter out invalid items
98
116
  const validItems = validatedItems.filter(item => item !== null);
117
+ // Step 2: Enrich with external data
99
118
  const enrichedItems = yield Promise.all(validItems.map((item) => __awaiter(this, void 0, void 0, function* () {
100
119
  const enrichmentData = yield services.enrichment.enrich(item.id);
101
120
  return Object.assign(Object.assign({}, item), enrichmentData);
102
121
  })));
122
+ // Step 3: Calculate derived fields
103
123
  const finalItems = yield Promise.all(enrichedItems.map((item) => __awaiter(this, void 0, void 0, function* () {
104
124
  const calculatedFields = yield services.calculation.calculate(item);
105
125
  return Object.assign(Object.assign({}, item), calculatedFields);
@@ -110,6 +130,7 @@ function complexAsyncTransformExample(repository, pageOptions, services) {
110
130
  return result;
111
131
  });
112
132
  }
133
+ // Example 6: Using iterate for large datasets
113
134
  function iterateExample(repository, processor) {
114
135
  return __awaiter(this, void 0, void 0, function* () {
115
136
  var _a, e_1, _b, _c;
@@ -117,6 +138,7 @@ function iterateExample(repository, processor) {
117
138
  .createQueryBuilder('entity')
118
139
  .where('entity.needsProcessing = :needsProcessing', { needsProcessing: true });
119
140
  try {
141
+ // Process large dataset in batches without loading everything into memory
120
142
  for (var _d = true, _e = __asyncValues(queryBuilder.iterate({ batchSize: 500 })), _f; _f = yield _e.next(), _a = _f.done, !_a; _d = true) {
121
143
  _c = _f.value;
122
144
  _d = false;
@@ -134,23 +156,27 @@ function iterateExample(repository, processor) {
134
156
  }
135
157
  });
136
158
  }
159
+ // Example 7: Using eachBatch with individual processing
137
160
  function eachBatchSingleExample(repository, processor) {
138
161
  return __awaiter(this, void 0, void 0, function* () {
139
162
  yield repository
140
163
  .createQueryBuilder('entity')
141
164
  .where('entity.status = :status', { status: 'pending' })
142
165
  .eachBatch((entity) => __awaiter(this, void 0, void 0, function* () {
166
+ // Process each entity individually
143
167
  console.log(`Processing entity ${entity.id}`);
144
168
  yield processor.processOne(entity);
145
169
  }), { batchSize: 100, mode: 'single' });
146
170
  });
147
171
  }
172
+ // Example 8: Using eachBatch with batch processing
148
173
  function eachBatchGroupExample(repository, processor) {
149
174
  return __awaiter(this, void 0, void 0, function* () {
150
175
  yield repository
151
176
  .createQueryBuilder('entity')
152
177
  .where('entity.status = :status', { status: 'pending' })
153
178
  .eachBatch((batch) => __awaiter(this, void 0, void 0, function* () {
179
+ // Process entire batch at once
154
180
  console.log(`Processing batch of ${batch.length} entities`);
155
181
  yield processor.processBatch(batch);
156
182
  }), { batchSize: 500, mode: 'batch' });
@@ -0,0 +1,55 @@
1
+ import type { Constructor } from '../types';
2
+ /**
3
+ * 字段元数据接口(简化版)
4
+ * 用于在验证错误时生成友好的错误消息
5
+ */
6
+ export interface ValidationMetadata {
7
+ /** 字段名称 */
8
+ fieldName?: string;
9
+ /** 字段标签(多语言)- 使用 fieldLabel 避免命名冲突 */
10
+ label?: string | {
11
+ zh?: string;
12
+ en?: string;
13
+ [lang: string]: string | undefined;
14
+ };
15
+ /** 字段描述(多语言)- 使用 fieldDescription 避免命名冲突 */
16
+ description?: string | {
17
+ zh?: string;
18
+ en?: string;
19
+ [lang: string]: string | undefined;
20
+ };
21
+ /** 是否为数组 */
22
+ each?: boolean;
23
+ }
24
+ /**
25
+ * 存储验证元数据到装饰器
26
+ *
27
+ * @param target - 目标类
28
+ * @param propertyKey - 属性名
29
+ * @param metadata - 验证元数据
30
+ */
31
+ export declare function setValidationMetadata(target: Constructor<any>, propertyKey: string, metadata: ValidationMetadata): void;
32
+ /**
33
+ * 获取验证元数据
34
+ *
35
+ * @param target - 目标类
36
+ * @param propertyKey - 属性名
37
+ * @returns 验证元数据
38
+ */
39
+ export declare function getValidationMetadata(target: Constructor<any>, propertyKey: string): ValidationMetadata | undefined;
40
+ /**
41
+ * 获取所有验证元数据
42
+ *
43
+ * @param target - 目标类
44
+ * @returns 所有验证元数据
45
+ */
46
+ export declare function getAllValidationMetadata(target: Constructor<any>): Record<string, ValidationMetadata>;
47
+ /**
48
+ * 获取字段的友好标签
49
+ * 根据语言环境返回对应的标签
50
+ *
51
+ * @param metadata - 验证元数据
52
+ * @param lang - 语言 (zh, en, 等)
53
+ * @returns 字段标签
54
+ */
55
+ export declare function getFieldLabelForValidation(metadata: ValidationMetadata, lang?: string): string;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setValidationMetadata = setValidationMetadata;
4
+ exports.getValidationMetadata = getValidationMetadata;
5
+ exports.getAllValidationMetadata = getAllValidationMetadata;
6
+ exports.getFieldLabelForValidation = getFieldLabelForValidation;
7
+ /**
8
+ * 验证元数据存储键
9
+ */
10
+ const VALIDATION_METADATA_KEY = 'VALIDATION_METADATA_OPTIONS';
11
+ /**
12
+ * 存储验证元数据到装饰器
13
+ *
14
+ * @param target - 目标类
15
+ * @param propertyKey - 属性名
16
+ * @param metadata - 验证元数据
17
+ */
18
+ function setValidationMetadata(target, propertyKey, metadata) {
19
+ const existingMetadata = Reflect.getMetadata(VALIDATION_METADATA_KEY, target) || {};
20
+ existingMetadata[propertyKey] = metadata;
21
+ Reflect.defineMetadata(VALIDATION_METADATA_KEY, existingMetadata, target);
22
+ }
23
+ /**
24
+ * 获取验证元数据
25
+ *
26
+ * @param target - 目标类
27
+ * @param propertyKey - 属性名
28
+ * @returns 验证元数据
29
+ */
30
+ function getValidationMetadata(target, propertyKey) {
31
+ const allMetadata = Reflect.getMetadata(VALIDATION_METADATA_KEY, target);
32
+ const metadata = allMetadata === null || allMetadata === void 0 ? void 0 : allMetadata[propertyKey];
33
+ return metadata;
34
+ }
35
+ /**
36
+ * 获取所有验证元数据
37
+ *
38
+ * @param target - 目标类
39
+ * @returns 所有验证元数据
40
+ */
41
+ function getAllValidationMetadata(target) {
42
+ return Reflect.getMetadata(VALIDATION_METADATA_KEY, target) || {};
43
+ }
44
+ /**
45
+ * 获取字段的友好标签
46
+ * 根据语言环境返回对应的标签
47
+ *
48
+ * @param metadata - 验证元数据
49
+ * @param lang - 语言 (zh, en, 等)
50
+ * @returns 字段标签
51
+ */
52
+ function getFieldLabelForValidation(metadata, lang = 'zh') {
53
+ if (!metadata.label) {
54
+ return metadata.fieldName || '';
55
+ }
56
+ if (typeof metadata.label === 'string') {
57
+ return metadata.label;
58
+ }
59
+ return metadata.label[lang] || metadata.label.zh || metadata.label.en || metadata.fieldName || '';
60
+ }
package/common/index.d.ts CHANGED
@@ -4,3 +4,4 @@ export * from './dto';
4
4
  export * from './types';
5
5
  export * from './snake-naming.strategy';
6
6
  export * from './boilerplate.polyfill';
7
+ export * from './helpers/validation-metadata-helper';
package/common/index.js CHANGED
@@ -20,3 +20,7 @@ __exportStar(require("./dto"), exports);
20
20
  __exportStar(require("./types"), exports);
21
21
  __exportStar(require("./snake-naming.strategy"), exports);
22
22
  __exportStar(require("./boilerplate.polyfill"), exports);
23
+ // ========================================
24
+ // Validation Metadata Helper
25
+ // ========================================
26
+ __exportStar(require("./helpers/validation-metadata-helper"), exports);
package/common/utils.d.ts CHANGED
@@ -1,4 +1,19 @@
1
+ /**
2
+ * generate hash from password or string
3
+ * @param {string} password
4
+ * @returns {string}
5
+ */
1
6
  export declare function generateHash(password: string): string;
7
+ /**
8
+ * validate text with hash
9
+ * @param {string} password
10
+ * @param {string} hash
11
+ * @returns {Promise<boolean>}
12
+ */
2
13
  export declare function validateHash(password: string | undefined, hash: string | undefined): Promise<boolean>;
3
14
  export declare function getVariableName<TResult>(getVar: () => TResult): string;
15
+ /**
16
+ * Generate a unique request ID
17
+ * @returns {string}
18
+ */
4
19
  export declare function generateRequestId(): string;
package/common/utils.js CHANGED
@@ -5,9 +5,20 @@ exports.validateHash = validateHash;
5
5
  exports.getVariableName = getVariableName;
6
6
  exports.generateRequestId = generateRequestId;
7
7
  const bcrypt_1 = require("bcrypt");
8
+ /**
9
+ * generate hash from password or string
10
+ * @param {string} password
11
+ * @returns {string}
12
+ */
8
13
  function generateHash(password) {
9
14
  return bcrypt_1.default.hashSync(password, 10);
10
15
  }
16
+ /**
17
+ * validate text with hash
18
+ * @param {string} password
19
+ * @param {string} hash
20
+ * @returns {Promise<boolean>}
21
+ */
11
22
  function validateHash(password, hash) {
12
23
  if (!password || !hash) {
13
24
  return Promise.resolve(false);
@@ -23,6 +34,10 @@ function getVariableName(getVar) {
23
34
  const memberParts = fullMemberName.split('.');
24
35
  return memberParts[memberParts.length - 1];
25
36
  }
37
+ /**
38
+ * Generate a unique request ID
39
+ * @returns {string}
40
+ */
26
41
  function generateRequestId() {
27
42
  return Math.random().toString(36).substring(2, 15) +
28
43
  Math.random().toString(36).substring(2, 15) +
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.supportedLanguageCount = exports.LanguageCode = void 0;
4
+ /* eslint-disable @typescript-eslint/naming-convention */
4
5
  var LanguageCode;
5
6
  (function (LanguageCode) {
6
7
  LanguageCode["en_US"] = "en-US";
@@ -7,6 +7,52 @@ interface IFieldOptions {
7
7
  nullable?: boolean;
8
8
  group?: string[];
9
9
  message?: string;
10
+ skipValidation?: boolean;
11
+ /**
12
+ * 字段标签(多语言)
13
+ * 用于审计日志、验证错误消息、UI 显示等
14
+ */
15
+ fieldLabel?: string | {
16
+ zh?: string;
17
+ en?: string;
18
+ [lang: string]: string | undefined;
19
+ };
20
+ /**
21
+ * 字段描述(多语言)
22
+ * 用于 API 文档、审计日志等
23
+ */
24
+ fieldDescription?: string | {
25
+ zh?: string;
26
+ en?: string;
27
+ [lang: string]: string | undefined;
28
+ };
29
+ /**
30
+ * 示例值
31
+ * 用于 API 文档
32
+ */
33
+ fieldExample?: any;
34
+ /**
35
+ * 值标签映射(多语言)
36
+ * 用于枚举、布尔值的友好显示(审计日志、UI)
37
+ */
38
+ valueLabels?: {
39
+ [value: string]: string | {
40
+ zh?: string;
41
+ en?: string;
42
+ [lang: string]: string | undefined;
43
+ };
44
+ };
45
+ /**
46
+ * 格式化函数
47
+ * 用于自定义显示格式(审计日志)
48
+ * 注意:命名为 displayFormatter 避免与 ApiPropertyOptions.format 冲突
49
+ */
50
+ displayFormatter?: (value: any, language?: string) => string;
51
+ /**
52
+ * 是否敏感字段
53
+ * 用于审计日志脱敏
54
+ */
55
+ sensitive?: boolean;
10
56
  }
11
57
  interface INumberFieldOptions extends IFieldOptions {
12
58
  min?: number;
@@ -58,8 +104,6 @@ export declare function EnumFieldOptional<TEnum extends object>(getEnum: () => T
58
104
  export declare function ClassFieldOptional<TClass extends object>(getClass: () => TClass, options?: Omit<ApiPropertyOptions, 'type' | 'required'> & IClassFieldOptions): PropertyDecorator;
59
105
  export declare function EmailField(options?: Omit<ApiPropertyOptions, 'type'> & IStringFieldOptions & IEmailFieldOptions): PropertyDecorator;
60
106
  export declare function EmailFieldOptional(options?: Omit<ApiPropertyOptions, 'type'> & IStringFieldOptions & IEmailFieldOptions): PropertyDecorator;
61
- export declare function PhoneField(options?: Omit<ApiPropertyOptions, 'type'> & IFieldOptions): PropertyDecorator;
62
- export declare function PhoneFieldOptional(options?: Omit<ApiPropertyOptions, 'type' | 'required'> & IFieldOptions): PropertyDecorator;
63
107
  export declare function UUIDField(options?: Omit<ApiPropertyOptions, 'type' | 'format' | 'isArray'> & IFieldOptions): PropertyDecorator;
64
108
  export declare function UUIDFieldOptional(options?: Omit<ApiPropertyOptions, 'type' | 'required' | 'isArray'> & IFieldOptions): PropertyDecorator;
65
109
  export declare function URLField(options?: Omit<ApiPropertyOptions, 'type'> & IURLFieldOptions & IStringFieldOptions): PropertyDecorator;
@@ -69,11 +113,36 @@ export declare function FQDNFieldOptional(options?: Omit<ApiPropertyOptions, 'ty
69
113
  export declare function DateField(options?: Omit<ApiPropertyOptions, 'type'> & IDateFieldOptions): PropertyDecorator;
70
114
  export declare function DateFieldOptional(options?: Omit<ApiPropertyOptions, 'type' | 'required'> & IDateFieldOptions): PropertyDecorator;
71
115
  export declare function IpFieldOptional(options?: Omit<ApiPropertyOptions, 'type'> & IIPFieldOptions & IStringFieldOptions): PropertyDecorator;
72
- export declare function IpField(options: Omit<ApiPropertyOptions, 'type'> & IStringFieldOptions & IIPFieldOptions): PropertyDecorator;
116
+ export declare function IpField(options?: Omit<ApiPropertyOptions, 'type'> & IStringFieldOptions & IIPFieldOptions): PropertyDecorator;
73
117
  export declare function ObjectField(options?: Omit<ApiPropertyOptions, 'type'> & IFieldOptions): PropertyDecorator;
74
118
  export declare function ObjectFieldOptional(options?: Omit<ApiPropertyOptions, 'type'> & IFieldOptions): PropertyDecorator;
75
119
  export declare function TimeZoneField(options?: Omit<ApiPropertyOptions, 'type'> & IStringFieldOptions): PropertyDecorator;
76
120
  export declare function TimeZoneFieldOptional(options?: Omit<ApiPropertyOptions, 'type'> & IStringFieldOptions): PropertyDecorator;
77
121
  export declare function LocaleField(options?: Omit<ApiPropertyOptions, 'type'> & IStringFieldOptions): PropertyDecorator;
78
122
  export declare function LocaleFieldOptional(options?: Omit<ApiPropertyOptions, 'type'> & IStringFieldOptions): PropertyDecorator;
123
+ /**
124
+ * @Field 装饰器
125
+ *
126
+ * 用于只需要元数据(Swagger、审计、UI配置)而不需要验证的字段
127
+ *
128
+ * @example
129
+ * // 只需要 Swagger 文档和审计元数据,不需要验证
130
+ * @Field({
131
+ * label: { zh: '备注', en: 'Remarks' },
132
+ * description: { zh: '用户备注信息', en: 'User remarks' },
133
+ * ui: { showInList: true, showInDetail: true },
134
+ * })
135
+ * remarks: string;
136
+ */
137
+ export declare function Field(options?: Omit<ApiPropertyOptions, 'type'> & IFieldOptions & {
138
+ type?: 'string' | 'number' | 'boolean' | 'object' | 'array';
139
+ }): PropertyDecorator;
140
+ /**
141
+ * @FieldOptional 装饰器
142
+ *
143
+ * 可选的元数据专用字段
144
+ */
145
+ export declare function FieldOptional(options?: Omit<ApiPropertyOptions, 'type' | 'required'> & IFieldOptions & {
146
+ type?: 'string' | 'number' | 'boolean' | 'object' | 'array';
147
+ }): PropertyDecorator;
79
148
  export {};