@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
package/shared/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from './serviceRegistryModule';
1
+ export * from './service-registry.module';
2
2
  export * from './services';
package/shared/index.js CHANGED
@@ -14,5 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./serviceRegistryModule"), exports);
17
+ __exportStar(require("./service-registry.module"), exports);
18
18
  __exportStar(require("./services"), exports);
@@ -27,8 +27,6 @@ const typeorm_1 = require("@nestjs/typeorm");
27
27
  const schedule_1 = require("@nestjs/schedule");
28
28
  const setup_1 = require("@sentry/nestjs/setup");
29
29
  const cache_1 = require("../cache");
30
- const transactional_1 = require("@nestjs-cls/transactional");
31
- const transactional_adapter_typeorm_1 = require("@nestjs-cls/transactional-adapter-typeorm");
32
30
  const nestjs_i18n_1 = require("nestjs-i18n");
33
31
  const health_checker_1 = require("../health-checker");
34
32
  const nestjs_redis_1 = require("@songkeys/nestjs-redis");
@@ -38,9 +36,9 @@ const redis_lock_1 = require("../redis-lock");
38
36
  const typeorm_2 = require("typeorm");
39
37
  const vault_1 = require("../vault");
40
38
  const validators_1 = require("../validators");
39
+ const transaction_1 = require("@nest-omni/transaction");
41
40
  const providers = [
42
41
  services_1.ApiConfigService,
43
- services_1.ValidatorService,
44
42
  services_1.GeneratorService,
45
43
  services_1.TranslationService,
46
44
  validators_1.IsExistsValidator,
@@ -48,6 +46,7 @@ const providers = [
48
46
  validators_1.CustomValidateValidator,
49
47
  ];
50
48
  if (!((_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a.ENV_FILE_PATH)) {
49
+ // 兼容单元测试,没有加载初始化文件,手动引入
51
50
  Promise.resolve().then(() => require('../setup/bootstrap.setup'));
52
51
  }
53
52
  services_1.ApiConfigService.rootPath = process.env.ROOT_PATH;
@@ -60,19 +59,6 @@ const modules = [
60
59
  expandVariables: false,
61
60
  envFilePath: [process.env.ENV_FILE_PATH, process.env.BASE_ENV_FILE_PATH],
62
61
  }),
63
- nestjs_cls_1.ClsModule.forRoot({
64
- global: true,
65
- middleware: { mount: true, saveReq: true },
66
- plugins: [
67
- new transactional_1.ClsPluginTransactional({
68
- imports: [typeorm_1.TypeOrmModule],
69
- adapter: new transactional_adapter_typeorm_1.TransactionalAdapterTypeOrm({
70
- dataSourceToken: typeorm_2.DataSource,
71
- }),
72
- enableTransactionProxy: true,
73
- }),
74
- ],
75
- }),
76
62
  nestjs_pino_1.LoggerModule.forRootAsync({
77
63
  inject: [services_1.ApiConfigService],
78
64
  useFactory: (config) => config.pinoConfig,
@@ -100,10 +86,23 @@ const modules = [
100
86
  }),
101
87
  ];
102
88
  if (services_1.ApiConfigService.toBoolean(process.env.DB_ENABLED, true)) {
89
+ // 1. 首先导入 TransactionModule
90
+ modules.push(transaction_1.TransactionModule.forRoot());
91
+ // 2. 导入 TypeORM 模块,并在初始化后注册数据源
103
92
  modules.push(typeorm_1.TypeOrmModule.forRootAsync({
104
93
  inject: [services_1.ApiConfigService],
105
94
  useFactory: (config) => config.typeormConfig,
106
95
  }));
96
+ // 4. 配置 CLS 模块
97
+ modules.push(nestjs_cls_1.ClsModule.forRootAsync({
98
+ imports: [typeorm_1.TypeOrmModule],
99
+ useFactory(args) {
100
+ return {
101
+ middleware: { mount: true, saveReq: true },
102
+ };
103
+ },
104
+ global: true,
105
+ }));
107
106
  }
108
107
  if (services_1.ApiConfigService.toBoolean(process.env.BULL_ENABLED)) {
109
108
  modules.push(bull_1.BullModule.forRootAsync({
@@ -117,6 +116,7 @@ if (services_1.ApiConfigService.toBoolean(process.env.CACHE_ENABLED)) {
117
116
  isGlobal: true,
118
117
  useFactory: (config, redisService, dataSource) => __awaiter(void 0, void 0, void 0, function* () {
119
118
  let redisClient = null;
119
+ // Try to get Redis client (use default client)
120
120
  try {
121
121
  redisClient = redisService.getClient();
122
122
  }
@@ -135,6 +135,7 @@ if (services_1.ApiConfigService.toBoolean(process.env.CACHE_ENABLED)) {
135
135
  }),
136
136
  }));
137
137
  }
138
+ // Add RedisLockModule if both Redis and Cache are enabled
138
139
  if (services_1.ApiConfigService.toBoolean(process.env.SCHEDULE_ENABLED) &&
139
140
  services_1.ApiConfigService.toBoolean(process.env.REDIS_LOCK_ENABLED, true)) {
140
141
  modules.push(redis_lock_1.RedisLockModule.forRootAsync({
@@ -142,6 +143,7 @@ if (services_1.ApiConfigService.toBoolean(process.env.SCHEDULE_ENABLED) &&
142
143
  isGlobal: true,
143
144
  useFactory: (config, redisService) => __awaiter(void 0, void 0, void 0, function* () {
144
145
  let redisClient = null;
146
+ // Try to get Redis client (use default client)
145
147
  try {
146
148
  redisClient = redisService.getClient();
147
149
  }
@@ -150,7 +152,7 @@ if (services_1.ApiConfigService.toBoolean(process.env.SCHEDULE_ENABLED) &&
150
152
  }
151
153
  return {
152
154
  redisClient,
153
- defaultTtl: config.getNumber('REDIS_LOCK_TTL', 300000),
155
+ defaultTtl: config.getNumber('REDIS_LOCK_TTL', 300000), // 5 minutes
154
156
  defaultKeyPrefix: config.getString('REDIS_LOCK_KEY_PREFIX', 'lock'),
155
157
  defaultRetryCount: config.getNumber('REDIS_LOCK_RETRY_COUNT', 3),
156
158
  defaultRetryDelay: config.getNumber('REDIS_LOCK_RETRY_DELAY', 200),
@@ -41,6 +41,9 @@ export declare class ApiConfigService {
41
41
  password: string;
42
42
  db: number;
43
43
  };
44
+ /**
45
+ * 是否使用Redis,用于health check
46
+ */
44
47
  get isRedisEnabled(): boolean;
45
48
  get bullConfig(): BullRootModuleOptions;
46
49
  get pinoConfig(): Params;
@@ -47,6 +47,7 @@ let ApiConfigService = ApiConfigService_1 = class ApiConfigService {
47
47
  }
48
48
  get typeormConfig() {
49
49
  return {
50
+ name: 'default',
50
51
  autoLoadEntities: true,
51
52
  type: 'mysql',
52
53
  host: this.getString('DB_HOST'),
@@ -99,15 +100,19 @@ let ApiConfigService = ApiConfigService_1 = class ApiConfigService {
99
100
  if (!origin) {
100
101
  return callback(null, true);
101
102
  }
103
+ // 支持通配符匹配逻辑
102
104
  const isAllowed = allowedDomains.some((domain) => {
105
+ // 处理包含通配符的情况(如 *.example.com)
103
106
  if (domain.includes('*')) {
107
+ // 将通配符转换为正则表达式
104
108
  const regexPattern = domain
105
109
  .replace(/\./g, '\\.')
106
- .replace(':*', '(:\\d+)?')
110
+ .replace(':*', '(:\\d+)?') // 处理端口通配符
107
111
  .replace('*\\.', '(.*\\.)?');
108
112
  const fullRegex = new RegExp(`^https?:\/\/${regexPattern}$`, 'i');
109
113
  return fullRegex.test(origin);
110
114
  }
115
+ // 完全匹配(包含端口匹配)
111
116
  return origin === domain || origin.startsWith(`${domain}:`);
112
117
  });
113
118
  isAllowed
@@ -160,6 +165,9 @@ let ApiConfigService = ApiConfigService_1 = class ApiConfigService {
160
165
  db: this.getNumber('REDIS_DB'),
161
166
  };
162
167
  }
168
+ /**
169
+ * 是否使用Redis,用于health check
170
+ */
163
171
  get isRedisEnabled() {
164
172
  return (this.getBoolean('BULL_ENABLED') ||
165
173
  this.getBoolean('CACHE_ENABLED') ||
@@ -168,7 +176,9 @@ let ApiConfigService = ApiConfigService_1 = class ApiConfigService {
168
176
  }
169
177
  get bullConfig() {
170
178
  return {
171
- redis: Object.assign(Object.assign({}, this.ioRedisConfig), { retryStrategy: (times) => Math.min(times * 1000, 5000) }),
179
+ redis: Object.assign(Object.assign({}, this.ioRedisConfig), {
180
+ // 增加重连策略
181
+ retryStrategy: (times) => Math.min(times * 1000, 5000) }),
172
182
  prefix: this.getString('BULL_PREFIX'),
173
183
  defaultJobOptions: {
174
184
  removeOnComplete: true,
@@ -178,16 +188,18 @@ let ApiConfigService = ApiConfigService_1 = class ApiConfigService {
178
188
  type: 'exponential',
179
189
  delay: this.getNumber('BULL_JOB_BACKOFF_DELAY_MS', 5000),
180
190
  },
181
- timeout: this.getNumber('BULL_JOB_TIMEOUT_MS', 30 * 1000),
191
+ timeout: this.getNumber('BULL_JOB_TIMEOUT_MS', 30 * 1000), // 默认30秒超时
182
192
  },
183
193
  settings: {
184
- maxStalledCount: 2,
185
- guardInterval: 5000,
186
- retryProcessDelay: 1000,
194
+ // 增强稳定性配置
195
+ maxStalledCount: 2, // 最大卡住重试次数
196
+ guardInterval: 5000, // 检查卡住任务间隔
197
+ retryProcessDelay: 1000, // 进程重启后的重试延迟
187
198
  },
199
+ // 增加队列级限流配置
188
200
  limiter: {
189
- max: this.getNumber('BULL_MAX_CONCURRENT_JOBS', 100),
190
- duration: 1000,
201
+ max: this.getNumber('BULL_MAX_CONCURRENT_JOBS', 100), // 最大并发任务数
202
+ duration: 1000, // 时间窗口
191
203
  },
192
204
  };
193
205
  }
@@ -275,7 +287,7 @@ let ApiConfigService = ApiConfigService_1 = class ApiConfigService {
275
287
  if (defaultValue !== undefined) {
276
288
  return defaultValue;
277
289
  }
278
- throw new Error(`key:'${key}' - environment does not set`);
290
+ throw new Error(`key:'${key}' - environment does not set`); // probably we should call process.exit() too to avoid locking the service
279
291
  }
280
292
  return value;
281
293
  }
@@ -1,4 +1,3 @@
1
1
  export * from './api-config.service';
2
2
  export * from './generator.service';
3
3
  export * from './translation.service';
4
- export * from './validator.service';
@@ -17,4 +17,3 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./api-config.service"), exports);
18
18
  __exportStar(require("./generator.service"), exports);
19
19
  __exportStar(require("./translation.service"), exports);
20
- __exportStar(require("./validator.service"), exports);
@@ -1,6 +1,23 @@
1
1
  import { ReferenceObject, SchemaObject } from '@nestjs/swagger/dist/interfaces/open-api-spec.interface';
2
2
  import 'reflect-metadata';
3
3
  import { IOptions } from './options';
4
+ /**
5
+ * Either a plain JSON Schema object that gets merged into the existing schema,
6
+ * or a function that receives as parameters the existing schema and global
7
+ * options, returning an updated schema.
8
+ */
4
9
  export type DecoratorSchema = ReferenceObject | SchemaObject | ((source: SchemaObject, options: IOptions) => ReferenceObject | SchemaObject);
10
+ /**
11
+ * Supplement class or property with additional JSON Schema keywords.
12
+ *
13
+ * @param schema JSON Schema object that is merged into the schema derived from
14
+ * class-validator decorators. In case of conflicts, keywords defined here
15
+ * overwrite the existing ones. Alternatively you can supply a function that
16
+ * receives as parameters the existing schema and global options, returning an
17
+ * updated schema.
18
+ */
5
19
  export declare function JSONSchema(schema: DecoratorSchema): (target: object | Function, key?: string) => void;
20
+ /**
21
+ * Get the JSON Schema stored in given target's metadata.
22
+ */
6
23
  export declare function getMetadataSchema(target: object | Function, key: string): DecoratorSchema;
@@ -4,19 +4,34 @@ exports.JSONSchema = JSONSchema;
4
4
  exports.getMetadataSchema = getMetadataSchema;
5
5
  require("reflect-metadata");
6
6
  const SCHEMA_KEY = Symbol('class-validator-jsonschema:JSONSchema');
7
+ /**
8
+ * Supplement class or property with additional JSON Schema keywords.
9
+ *
10
+ * @param schema JSON Schema object that is merged into the schema derived from
11
+ * class-validator decorators. In case of conflicts, keywords defined here
12
+ * overwrite the existing ones. Alternatively you can supply a function that
13
+ * receives as parameters the existing schema and global options, returning an
14
+ * updated schema.
15
+ */
7
16
  function JSONSchema(schema) {
8
17
  return (target, key) => {
9
18
  if (key) {
10
- setMetadataSchema(schema, target.constructor, key);
19
+ setMetadataSchema(schema, target.constructor, key); // Property metadata
11
20
  }
12
21
  else {
13
- setMetadataSchema(schema, target, target.name);
22
+ setMetadataSchema(schema, target, target.name); // Class metadata
14
23
  }
15
24
  };
16
25
  }
26
+ /**
27
+ * Get the JSON Schema stored in given target's metadata.
28
+ */
17
29
  function getMetadataSchema(target, key) {
18
30
  return Reflect.getMetadata(SCHEMA_KEY, target.constructor, key) || {};
19
31
  }
32
+ /**
33
+ * Store given JSON Schema into target object's metadata.
34
+ */
20
35
  function setMetadataSchema(value, target, key) {
21
36
  return Reflect.defineMetadata(SCHEMA_KEY, value, target, key);
22
37
  }
@@ -2,5 +2,11 @@ import { ValidationMetadata } from 'class-validator/types/metadata/ValidationMet
2
2
  import { IOptions } from './options';
3
3
  import { I18nService } from 'nestjs-i18n';
4
4
  export { JSONSchema } from './decorators';
5
+ /**
6
+ * Convert an array of class-validator metadata into JSON Schema definitions.
7
+ */
5
8
  export declare function validationMetadataArrayToSchemas(metadatas: ValidationMetadata[], i18n: any, userOptions?: Partial<IOptions>): any;
9
+ /**
10
+ * Generate JSON Schema definitions from the target object constructor.
11
+ */
6
12
  export declare function targetConstructorToSchema(targetConstructor: Function, i18n: I18nService, userOptions?: Partial<IOptions>): any;
@@ -9,6 +9,9 @@ const defaultConverters_1 = require("./defaultConverters");
9
9
  const options_1 = require("./options");
10
10
  var decorators_1 = require("./decorators");
11
11
  Object.defineProperty(exports, "JSONSchema", { enumerable: true, get: function () { return decorators_1.JSONSchema; } });
12
+ /**
13
+ * Convert an array of class-validator metadata into JSON Schema definitions.
14
+ */
12
15
  function validationMetadataArrayToSchemas(metadatas, i18n, userOptions) {
13
16
  const options = Object.assign(Object.assign({}, options_1.defaultOptions), userOptions);
14
17
  const rules = [];
@@ -46,6 +49,9 @@ function getFirstNonNullDataType(data) {
46
49
  }
47
50
  return undefined;
48
51
  }
52
+ /**
53
+ * Generate JSON Schema definitions from the target object constructor.
54
+ */
49
55
  function targetConstructorToSchema(targetConstructor, i18n, userOptions) {
50
56
  const options = Object.assign(Object.assign({}, options_1.defaultOptions), userOptions);
51
57
  const storage = options.classValidatorMetadataStorage;
@@ -64,6 +70,15 @@ function populateMetadatasWithConstraints(storage, metadatas) {
64
70
  return Object.assign({}, meta);
65
71
  });
66
72
  }
73
+ /**
74
+ * Return target class' inherited validation metadatas, with original metadatas
75
+ * given precedence over inherited ones in case of duplicates.
76
+ *
77
+ * Adapted from `class-validator` source.
78
+ *
79
+ * @param target Target child class.
80
+ * @param metadatas All class-validator metadata objects.
81
+ */
67
82
  function getInheritedMetadatas(target, metadatas) {
68
83
  return metadatas.filter((d) => d.target instanceof Function &&
69
84
  target.prototype instanceof d.target &&
@@ -71,6 +86,9 @@ function getInheritedMetadatas(target, metadatas) {
71
86
  m.target === target &&
72
87
  m.type === d.type));
73
88
  }
89
+ /**
90
+ * Convert a property's class-validator metadata into a JSON Schema property.
91
+ */
74
92
  function applyConverters(propertyMetadatas, options, i18n) {
75
93
  const converters = Object.assign(Object.assign({}, defaultConverters_1.defaultConverters), options.additionalConverters);
76
94
  const convert = (meta) => {
@@ -83,12 +101,13 @@ function applyConverters(propertyMetadatas, options, i18n) {
83
101
  const converterResult = typeof converter === 'function' ? converter(meta, options) : converter;
84
102
  const items = {};
85
103
  let message = '';
104
+ // @ts-ignore
86
105
  const originMessage = typeof meta.message === 'function'
87
106
  ? meta.message({
88
- value: undefined,
107
+ value: undefined, // We don't have the actual value in this context
89
108
  constraints: meta.constraints,
90
109
  targetName: meta.target.name || '',
91
- object: {},
110
+ object: {}, // We don't have the actual object in this context
92
111
  property: meta.propertyName,
93
112
  })
94
113
  : meta.message;
@@ -109,15 +128,23 @@ function applyConverters(propertyMetadatas, options, i18n) {
109
128
  }
110
129
  return meta.each ? { items, type: 'array' } : items;
111
130
  };
131
+ // const constraints = [];
112
132
  const constraints = propertyMetadatas.map((meta) => {
113
133
  return convert(meta);
114
134
  });
115
135
  return (0, lodash_1.reject)(constraints, (item) => (0, lodash_1.isEmpty)(item));
116
136
  }
137
+ /** Check whether property is excluded with class-transformer `@Exclude` decorator. */
117
138
  function isExcluded(propertyMetadata, options) {
118
139
  var _a;
119
140
  return !!((_a = options.classTransformerMetadataStorage) === null || _a === void 0 ? void 0 : _a.findExcludeMetadata(propertyMetadata.target, propertyMetadata.propertyName));
120
141
  }
142
+ /**
143
+ * Get the required property names of a validated class.
144
+ * @param target Validation target class.
145
+ * @param metadatas Validation metadata objects of the validated class.
146
+ * @param options Global class-validator options.
147
+ */
121
148
  function getRequiredPropNames(target, metadatas, options) {
122
149
  function isDefined(metas) {
123
150
  return (metas && metas.some(({ type }) => type === cv.ValidationTypes.IS_DEFINED));
@@ -127,6 +154,7 @@ function getRequiredPropNames(target, metadatas, options) {
127
154
  metas.some(({ type }) => [cv.ValidationTypes.CONDITIONAL_VALIDATION, cv.IS_EMPTY].includes(type)));
128
155
  }
129
156
  return (Object.entries((0, lodash_1.groupBy)(metadatas, (m) => m.propertyName))
157
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
130
158
  .filter(([_, metas]) => {
131
159
  const own = metas.filter((m) => m.target === target);
132
160
  const inherited = metas.filter((m) => m.target !== target);
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.defaultConverters = void 0;
4
+ // tslint:disable:no-submodule-imports
4
5
  const cv = require("class-validator");
5
6
  require("reflect-metadata");
6
7
  exports.defaultConverters = {
@@ -2,10 +2,33 @@ import type { MetadataStorage as ClassTransformerMetadataStorage } from 'class-t
2
2
  import { MetadataStorage, ValidatorOptions } from 'class-validator';
3
3
  import { ISchemaConverters } from './defaultConverters';
4
4
  export interface IOptions extends ValidatorOptions {
5
+ /**
6
+ * A map of additional metadata-to-schema converters that can be used to
7
+ * supplement or override the default ones. The key should correspond to the
8
+ * 'type' property of a ValidationMetadata object.
9
+ */
5
10
  additionalConverters: ISchemaConverters;
11
+ /**
12
+ * Metadata storage instance of class-transformer. This value can be
13
+ * optionally defined in order for class-transformer's @Type decorators to
14
+ * have effect in JSON Schema generation.
15
+ */
6
16
  classTransformerMetadataStorage?: ClassTransformerMetadataStorage;
17
+ /**
18
+ * Metadata storage instance of class-validator. This value can be
19
+ * optionally defined in order to override the default storage used
20
+ * to parse decorator metadata.
21
+ */
7
22
  classValidatorMetadataStorage: MetadataStorage;
23
+ /**
24
+ * A prefix added to all `$ref` JSON pointers referencing other schemas.
25
+ * Defaults to '#/definitions/'.
26
+ */
8
27
  refPointerPrefix: string;
28
+ /**
29
+ * Property used to group schemas.
30
+ * Defaults to `name`, i.e., class name.
31
+ */
9
32
  schemaNameField: string;
10
33
  }
11
34
  export declare const defaultOptions: IOptions;
@@ -0,0 +1,143 @@
1
+ import type { ValidationOptions } from 'class-validator';
2
+ import { IsPhoneNumber as isPhoneNumber, ValidationArguments, ValidatorConstraintInterface } from 'class-validator';
3
+ /**
4
+ * 验证密码格式(只允许字母、数字和特定特殊字符)
5
+ *
6
+ * @param validationOptions 验证选项
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * class UserDto {
11
+ * @IsPassword({ message: 'Invalid password format' })
12
+ * password: string;
13
+ * }
14
+ * ```
15
+ */
16
+ export declare function IsPassword(validationOptions?: ValidationOptions): PropertyDecorator;
17
+ /**
18
+ * 验证手机号码(支持指定国家/地区)
19
+ *
20
+ * @param validationOptions 验证选项,可以指定 region
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * class ContactDto {
25
+ * @IsPhoneNumber({ region: 'CN' })
26
+ * phone: string;
27
+ * }
28
+ * ```
29
+ */
30
+ export declare function IsPhoneNumber(validationOptions?: ValidationOptions & {
31
+ region?: Parameters<typeof isPhoneNumber>[0];
32
+ }): PropertyDecorator;
33
+ /**
34
+ * 验证临时文件路径(必须以 tmp/ 开头)
35
+ *
36
+ * @param validationOptions 验证选项
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * class FileDto {
41
+ * @IsTmpKey()
42
+ * filePath: string; // 必须是 'tmp/...'
43
+ * }
44
+ * ```
45
+ */
46
+ export declare function IsTmpKey(validationOptions?: ValidationOptions): PropertyDecorator;
47
+ /**
48
+ * 允许字段为 undefined,如果不是 undefined 才执行其他验证
49
+ *
50
+ * @param options 验证选项
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * class UserDto {
55
+ * @IsUndefinable()
56
+ * @IsString()
57
+ * nickname?: string; // undefined 或字符串
58
+ * }
59
+ * ```
60
+ */
61
+ export declare function IsUndefinable(options?: ValidationOptions): PropertyDecorator;
62
+ /**
63
+ * 允许字段为空值(null、undefined 或空字符串),如果不为空才执行其他验证
64
+ *
65
+ * @param options 验证选项
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * class UserDto {
70
+ * @IsEmptyable()
71
+ * @IsEmail()
72
+ * email?: string; // 可以为空,或者必须是有效邮箱
73
+ * }
74
+ * ```
75
+ */
76
+ export declare function IsEmptyable(options?: ValidationOptions): PropertyDecorator;
77
+ /**
78
+ * 允许字段为 null,如果不是 null 才执行其他验证
79
+ *
80
+ * @param options 验证选项
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * class UserDto {
85
+ * @IsNullable()
86
+ * @IsNumber()
87
+ * age?: number | null; // null 或数字
88
+ * }
89
+ * ```
90
+ */
91
+ export declare function IsNullable(options?: ValidationOptions): PropertyDecorator;
92
+ /**
93
+ * 验证 HTTP/HTTPS URL
94
+ *
95
+ * @param validationOptions 验证选项
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * class WebsiteDto {
100
+ * @IsHttpUrl({ message: 'Invalid URL' })
101
+ * url: string;
102
+ * }
103
+ * ```
104
+ */
105
+ export declare function IsHttpUrl(validationOptions?: ValidationOptions): (object: any, propertyName: string) => void;
106
+ /**
107
+ * Validator constraint for AtLeastOneField decorator
108
+ */
109
+ export declare class AtLeastOneFieldConstraint implements ValidatorConstraintInterface {
110
+ validate(value: any, args: ValidationArguments): boolean;
111
+ defaultMessage(args: ValidationArguments): string;
112
+ }
113
+ /**
114
+ * 验证至少提供指定字段中的一个
115
+ *
116
+ * @param properties 要检查的属性名数组
117
+ * @param validationOptions 验证选项
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * class ContactDto {
122
+ * @AtLeastOneField(['email', 'phone'], {
123
+ * message: 'Either email or phone must be provided'
124
+ * })
125
+ * email?: string;
126
+ *
127
+ * phone?: string;
128
+ * }
129
+ * ```
130
+ *
131
+ * @example
132
+ * 使用虚拟字段(推荐用于类级别验证):
133
+ * ```typescript
134
+ * class ContactDto {
135
+ * @AtLeastOneField(['email', 'phone'])
136
+ * _atLeastOne: any; // 虚拟字段用于验证
137
+ *
138
+ * email?: string;
139
+ * phone?: string;
140
+ * }
141
+ * ```
142
+ */
143
+ export declare function AtLeastOneField(properties: string[], validationOptions?: ValidationOptions): PropertyDecorator;