@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
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EXCEL_COLUMN_METADATA = exports.CSV_COLUMN_METADATA = void 0;
4
+ exports.CSVColumn = CSVColumn;
5
+ exports.ExcelColumn = ExcelColumn;
6
+ exports.getCsvColumnMapping = getCsvColumnMapping;
7
+ exports.getExcelColumnMapping = getExcelColumnMapping;
8
+ exports.excelColumnToNumber = excelColumnToNumber;
9
+ exports.processRowWithMapping = processRowWithMapping;
10
+ exports.numberToExcelColumn = numberToExcelColumn;
11
+ exports.formatValidationErrors = formatValidationErrors;
12
+ exports.createImportResult = createImportResult;
13
+ require("reflect-metadata");
14
+ /**
15
+ * CSV列名映射元数据键
16
+ */
17
+ exports.CSV_COLUMN_METADATA = 'csv:column';
18
+ /**
19
+ * Excel列名映射元数据键
20
+ */
21
+ exports.EXCEL_COLUMN_METADATA = 'excel:column';
22
+ /**
23
+ * CSV列装饰器
24
+ * 用于指定CSV文件中列与DTO属性的映射关系
25
+ * 支持列名、列序号(从0开始)或Excel列名(A, B, C)
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * export class UserImportDto {
30
+ * @CSVColumn('姓名') // 使用列名
31
+ * @CSVColumn(0) // 使用列序号(第一列)
32
+ * @CSVColumn('A') // 使用Excel列名
33
+ * @IsString()
34
+ * @Length(2, 50)
35
+ * name: string;
36
+ *
37
+ * @CSVColumn('年龄') // 使用列名
38
+ * @CSVColumn(1) // 使用列序号(第二列)
39
+ * @CSVColumn('B') // 使用Excel列名
40
+ * @IsNumber()
41
+ * @Min(0)
42
+ * @Max(150)
43
+ * age: number;
44
+ * }
45
+ * ```
46
+ */
47
+ function CSVColumn(columnIdentifier) {
48
+ return (target, propertyKey) => {
49
+ // target 是类的原型,我们需要将元数据存储在构造函数上
50
+ const constructor = target.constructor;
51
+ const columns = Reflect.getMetadata(exports.CSV_COLUMN_METADATA, constructor) || {};
52
+ columns[propertyKey] = columnIdentifier;
53
+ Reflect.defineMetadata(exports.CSV_COLUMN_METADATA, columns, constructor);
54
+ };
55
+ }
56
+ /**
57
+ * Excel列装饰器
58
+ * 用于指定Excel文件中列与DTO属性的映射关系
59
+ * 支持列名、列序号(从0开始)或Excel列名(A, B, C)
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * export class ProductImportDto {
64
+ * @ExcelColumn('产品名称') // 使用列名
65
+ * @ExcelColumn(0) // 使用列序号(第一列)
66
+ * @ExcelColumn('A') // 使用Excel列名
67
+ * @IsString()
68
+ * @Length(2, 200)
69
+ * name: string;
70
+ *
71
+ * @ExcelColumn('价格') // 使用列名
72
+ * @ExcelColumn(1) // 使用列序号(第二列)
73
+ * @ExcelColumn('B') // 使用Excel列名
74
+ * @IsNumber()
75
+ * @Min(0)
76
+ * price: number;
77
+ * }
78
+ * ```
79
+ */
80
+ function ExcelColumn(columnIdentifier) {
81
+ return (target, propertyKey) => {
82
+ // target 是类的原型,我们需要将元数据存储在构造函数上
83
+ const constructor = target.constructor;
84
+ const columns = Reflect.getMetadata(exports.EXCEL_COLUMN_METADATA, constructor) || {};
85
+ columns[propertyKey] = columnIdentifier;
86
+ Reflect.defineMetadata(exports.EXCEL_COLUMN_METADATA, columns, constructor);
87
+ };
88
+ }
89
+ /**
90
+ * 获取CSV列映射信息
91
+ * 返回列标识到属性名的映射Map
92
+ *
93
+ * @param dtoClass DTO类
94
+ * @returns Map<列标识, 属性名>
95
+ */
96
+ function getCsvColumnMapping(dtoClass) {
97
+ const constructor = dtoClass;
98
+ const mapping = new Map();
99
+ if (!constructor) {
100
+ return mapping;
101
+ }
102
+ // 从构造函数获取列映射元数据
103
+ const columns = Reflect.getMetadata(exports.CSV_COLUMN_METADATA, constructor) || {};
104
+ for (const [propertyKey, columnIdentifier] of Object.entries(columns)) {
105
+ mapping.set(columnIdentifier, propertyKey);
106
+ }
107
+ return mapping;
108
+ }
109
+ /**
110
+ * 获取Excel列映射信息
111
+ * 返回列标识到属性名的映射Map
112
+ *
113
+ * @param dtoClass DTO类
114
+ * @returns Map<列标识, 属性名>
115
+ */
116
+ function getExcelColumnMapping(dtoClass) {
117
+ const constructor = dtoClass;
118
+ const mapping = new Map();
119
+ if (!constructor) {
120
+ return mapping;
121
+ }
122
+ // 从构造函数获取列映射元数据
123
+ const columns = Reflect.getMetadata(exports.EXCEL_COLUMN_METADATA, constructor) || {};
124
+ for (const [propertyKey, columnIdentifier] of Object.entries(columns)) {
125
+ mapping.set(columnIdentifier, propertyKey);
126
+ }
127
+ return mapping;
128
+ }
129
+ /**
130
+ * Excel列名转数字(A=0, B=1, ..., AA=26, AB=27)
131
+ */
132
+ function excelColumnToNumber(columnLetter) {
133
+ let result = 0;
134
+ for (let i = 0; i < columnLetter.length; i++) {
135
+ const char = columnLetter.toUpperCase().charCodeAt(i) - 64; // A=65, so A-64=1
136
+ result = result * 26 + char;
137
+ }
138
+ return result - 1; // 转换为0基索引
139
+ }
140
+ /**
141
+ * 处理行数据
142
+ * 将原始数据行转换为DTO实例,支持多语言错误信息
143
+ * 支持列名、列序号和Excel列名(A, B, C)
144
+ *
145
+ * @param rowData 原始行数据
146
+ * @param dtoClass DTO类
147
+ * @param columnMapping 列映射
148
+ * @param type 数据类型(csv/excel)
149
+ * @returns 转换结果
150
+ */
151
+ function processRowWithMapping(rowData, dtoClass, columnMapping, type) {
152
+ const instance = new dtoClass();
153
+ const errors = [];
154
+ // 遍历所有映射的列
155
+ for (const [columnIdentifier, propertyKey] of columnMapping.entries()) {
156
+ let value;
157
+ if (typeof columnIdentifier === 'number') {
158
+ // 列序号(0基索引)
159
+ if (Array.isArray(rowData)) {
160
+ // 如果rowData是数组,直接使用索引
161
+ value = rowData[columnIdentifier];
162
+ }
163
+ else if (type === 'excel') {
164
+ // Excel数据:尝试将列序号转换为Excel列名
165
+ const columnLetter = numberToExcelColumn(columnIdentifier);
166
+ value = rowData[columnLetter];
167
+ }
168
+ else {
169
+ // CSV数据:如果无法通过索引获取,则跳过
170
+ value = undefined;
171
+ }
172
+ }
173
+ else if (typeof columnIdentifier === 'string') {
174
+ // 列名或Excel列名
175
+ // 优先通过列名获取值
176
+ if (rowData.hasOwnProperty(columnIdentifier)) {
177
+ value = rowData[columnIdentifier];
178
+ }
179
+ else if (type === 'excel' && /^[A-Za-z]+$/.test(columnIdentifier)) {
180
+ // 如果是Excel列名格式(如A, B, C),但数据中没有,尝试其他方式
181
+ value = undefined;
182
+ }
183
+ // 如果是数组且列标识是特殊的索引格式
184
+ else if (Array.isArray(rowData) && columnIdentifier.startsWith('__index_')) {
185
+ const index = parseInt(columnIdentifier.replace('__index_', ''), 10);
186
+ if (!isNaN(index) && index < rowData.length) {
187
+ value = rowData[index];
188
+ }
189
+ }
190
+ }
191
+ // 设置值到实例
192
+ instance[propertyKey] = value;
193
+ }
194
+ return { instance, errors };
195
+ }
196
+ /**
197
+ * 数字转Excel列名(0=A, 1=B, ..., 26=AA, 27=AB)
198
+ */
199
+ function numberToExcelColumn(num) {
200
+ let result = '';
201
+ let n = num + 1; // 转换为1基索引
202
+ while (n > 0) {
203
+ n--;
204
+ result = String.fromCharCode(65 + (n % 26)) + result;
205
+ n = Math.floor(n / 26);
206
+ }
207
+ return result;
208
+ }
209
+ /**
210
+ * 格式化验证错误为多语言
211
+ * 支持中英文错误信息
212
+ *
213
+ * @param errors class-validator错误数组
214
+ * @returns 格式化后的错误信息
215
+ */
216
+ function formatValidationErrors(errors) {
217
+ return errors.map(error => {
218
+ var _a, _b, _c, _d, _e;
219
+ const constraint = Object.values(error.constraints)[0];
220
+ // 英文错误信息直接使用
221
+ if (/^[a-zA-Z\s]+$/.test(constraint.message)) {
222
+ return `${error.property}: ${constraint.message}`;
223
+ }
224
+ // 中文错误信息特殊处理
225
+ const chineseMessages = {
226
+ 'isString': '必须是字符串',
227
+ 'isNumber': '必须是数字',
228
+ 'isBoolean': '必须是布尔值',
229
+ 'isDate': '必须是日期格式',
230
+ 'min': `不能小于 ${(_a = constraint.values) === null || _a === void 0 ? void 0 : _a[0]}`,
231
+ 'max': `不能大于 ${(_b = constraint.values) === null || _b === void 0 ? void 0 : _b[0]}`,
232
+ 'minLength': `长度不能少于 ${(_c = constraint.values) === null || _c === void 0 ? void 0 : _c[0]}`,
233
+ 'maxLength': `长度不能超过 ${(_d = constraint.values) === null || _d === void 0 ? void 0 : _d[0]}`,
234
+ 'isEmail': '邮箱格式不正确',
235
+ 'isEnum': `必须是以下值之一: ${(_e = constraint.values) === null || _e === void 0 ? void 0 : _e.join(', ')}`,
236
+ 'matches': '格式不正确',
237
+ };
238
+ const ruleName = constraint.message.split(' ')[0];
239
+ const chineseMessage = chineseMessages[ruleName];
240
+ if (chineseMessage) {
241
+ const args = constraint.values || [];
242
+ let message = chineseMessage;
243
+ args.forEach(arg => {
244
+ message = message.replace(/\$\{(\w+)\}/g, (_, key) => {
245
+ const index = parseInt(key.replace(/[^\d]/g, '')) - 1;
246
+ return args[index] !== undefined ? args[index] : `$${key}`;
247
+ });
248
+ });
249
+ return `${error.property}: ${message}`;
250
+ }
251
+ // 默认使用原错误信息
252
+ return `${error.property}: ${constraint.message}`;
253
+ });
254
+ }
255
+ /**
256
+ * 创建CSV数据导入结果
257
+ * @param data 成功导入的数据
258
+ * @param errors 错误信息
259
+ * @param totalRows 总行数
260
+ * @param headers 表头信息
261
+ * @returns 导入结果对象
262
+ */
263
+ function createImportResult(data, errors, totalRows, headers) {
264
+ return {
265
+ success: errors.length === 0,
266
+ data,
267
+ errors,
268
+ totalCount: totalRows,
269
+ successCount: data.length,
270
+ errorCount: errors.length,
271
+ headers
272
+ };
273
+ }
@@ -0,0 +1,30 @@
1
+ import 'reflect-metadata';
2
+ /**
3
+ * CSV 列映射装饰器
4
+ * 用于标记 DTO 类的属性对应的 CSV 列名
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * class UserDto {
9
+ * @CsvColumn('姓名')
10
+ * name: string;
11
+ *
12
+ * @CsvColumn('邮箱')
13
+ * email: string;
14
+ * }
15
+ * ```
16
+ */
17
+ export declare function CsvColumn(columnName: string): PropertyDecorator;
18
+ /**
19
+ * 获取 CSV 列映射
20
+ */
21
+ export declare function getCsvColumnMapping(dto: any): Record<string, string>;
22
+ /**
23
+ * 解析并验证 CSV 数据
24
+ */
25
+ export declare function parseAndValidateCsvData(data: any[], dto: any, options?: {
26
+ skipValidation?: boolean;
27
+ }): Promise<{
28
+ data: any[];
29
+ errors: any[];
30
+ }>;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CsvColumn = CsvColumn;
13
+ exports.getCsvColumnMapping = getCsvColumnMapping;
14
+ exports.parseAndValidateCsvData = parseAndValidateCsvData;
15
+ require("reflect-metadata");
16
+ const class_transformer_1 = require("class-transformer");
17
+ const class_validator_1 = require("class-validator");
18
+ const CSV_COLUMN_METADATA_KEY = Symbol('csv:column');
19
+ /**
20
+ * CSV 列映射装饰器
21
+ * 用于标记 DTO 类的属性对应的 CSV 列名
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * class UserDto {
26
+ * @CsvColumn('姓名')
27
+ * name: string;
28
+ *
29
+ * @CsvColumn('邮箱')
30
+ * email: string;
31
+ * }
32
+ * ```
33
+ */
34
+ function CsvColumn(columnName) {
35
+ return (target, propertyKey) => {
36
+ const existingColumns = Reflect.getMetadata(CSV_COLUMN_METADATA_KEY, target.constructor) || {};
37
+ existingColumns[columnName] = propertyKey;
38
+ Reflect.defineMetadata(CSV_COLUMN_METADATA_KEY, existingColumns, target.constructor);
39
+ };
40
+ }
41
+ /**
42
+ * 获取 CSV 列映射
43
+ */
44
+ function getCsvColumnMapping(dto) {
45
+ return Reflect.getMetadata(CSV_COLUMN_METADATA_KEY, dto) || {};
46
+ }
47
+ /**
48
+ * 解析并验证 CSV 数据
49
+ */
50
+ function parseAndValidateCsvData(data, dto, options) {
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ const columnMapping = getCsvColumnMapping(dto);
53
+ const results = [];
54
+ const errors = [];
55
+ for (let i = 0; i < data.length; i++) {
56
+ const row = data[i];
57
+ const mappedData = {};
58
+ // 映射列名
59
+ for (const [csvColumn, dtoProperty] of Object.entries(columnMapping)) {
60
+ if (row.hasOwnProperty(csvColumn)) {
61
+ mappedData[dtoProperty] = row[csvColumn];
62
+ }
63
+ }
64
+ // 转换为 DTO 实例
65
+ const instance = (0, class_transformer_1.plainToInstance)(dto, mappedData);
66
+ // 验证
67
+ if (!(options === null || options === void 0 ? void 0 : options.skipValidation)) {
68
+ const validationErrors = yield (0, class_validator_1.validate)(instance);
69
+ if (validationErrors.length > 0) {
70
+ errors.push({
71
+ row: i + 1,
72
+ data: row,
73
+ errors: validationErrors.map((e) => ({
74
+ property: e.property,
75
+ constraints: e.constraints,
76
+ })),
77
+ });
78
+ continue;
79
+ }
80
+ }
81
+ results.push(instance);
82
+ }
83
+ return { data: results, errors };
84
+ });
85
+ }
@@ -0,0 +1,34 @@
1
+ import { CsvProcessorOptions } from '../processors/csv.processor';
2
+ import { ValidateDataOptions } from './validate-data.decorator';
3
+ /**
4
+ * CSV 处理装饰器元数据键
5
+ */
6
+ export declare const CSV_PROCESS_KEY = "csv:process";
7
+ /**
8
+ * CSV 数据处理选项
9
+ */
10
+ export interface CsvDataOptions extends CsvProcessorOptions {
11
+ /** 验证类(使用 class-validator) */
12
+ validateClass?: any;
13
+ /** 验证选项 */
14
+ validation?: ValidateDataOptions;
15
+ /** 批处理大小 */
16
+ batchSize?: number;
17
+ /** 是否异步处理 */
18
+ async?: boolean;
19
+ }
20
+ /**
21
+ * CSV 数据处理装饰器
22
+ * 用于标记方法处理 CSV 文件数据
23
+ */
24
+ export declare const CsvData: (options?: CsvDataOptions) => import("@nestjs/common").CustomDecorator<string>;
25
+ /**
26
+ * CSV 批量导入装饰器
27
+ * 专门用于批量导入场景
28
+ */
29
+ export declare const CsvImport: (validateClass: any, options?: Omit<CsvDataOptions, "validateClass"> & {
30
+ /** 目标服务名 */
31
+ service?: string;
32
+ /** 目标方法名 */
33
+ method?: string;
34
+ }) => import("@nestjs/common").CustomDecorator<string>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CsvImport = exports.CsvData = exports.CSV_PROCESS_KEY = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ /**
6
+ * CSV 处理装饰器元数据键
7
+ */
8
+ exports.CSV_PROCESS_KEY = 'csv:process';
9
+ /**
10
+ * CSV 数据处理装饰器
11
+ * 用于标记方法处理 CSV 文件数据
12
+ */
13
+ const CsvData = (options = {}) => {
14
+ return (0, common_1.SetMetadata)(exports.CSV_PROCESS_KEY, options);
15
+ };
16
+ exports.CsvData = CsvData;
17
+ /**
18
+ * CSV 批量导入装饰器
19
+ * 专门用于批量导入场景
20
+ */
21
+ const CsvImport = (validateClass, options = {}) => {
22
+ return (0, common_1.SetMetadata)(exports.CSV_PROCESS_KEY, Object.assign(Object.assign({}, options), { validateClass, type: 'import' }));
23
+ };
24
+ exports.CsvImport = CsvImport;
@@ -0,0 +1,76 @@
1
+ /**
2
+ * 用户导入DTO示例
3
+ * 展示如何使用列序号、列名和Excel列名进行映射
4
+ */
5
+ export declare class UserImportDto {
6
+ /**
7
+ * 使用列名映射(推荐,更易读)
8
+ * CSV: 通过表头"姓名"找到列
9
+ * Excel: 通过表头"姓名"或列名"A"找到列
10
+ */
11
+ name: string;
12
+ /**
13
+ * 使用列序号映射(从0开始)
14
+ * CSV: 第2列(索引为1)
15
+ * Excel: 第2列(B列)
16
+ */
17
+ age: number;
18
+ /**
19
+ * 使用Excel列名映射
20
+ * CSV: 如果没有表头,需要使用数字索引
21
+ * Excel: 可以直接使用列名"C"
22
+ */
23
+ email: string;
24
+ /**
25
+ * 混合使用不同的映射方式
26
+ */
27
+ phone?: string;
28
+ /**
29
+ * 使用较大的列索引
30
+ */
31
+ address?: string;
32
+ /**
33
+ * 使用更大的Excel列名(如AA, AB等)
34
+ */
35
+ notes?: string;
36
+ }
37
+ /**
38
+ * 产品导入DTO示例
39
+ */
40
+ export declare class ProductImportDto {
41
+ /**
42
+ * 产品名称 - 第1列
43
+ */
44
+ name: string;
45
+ /**
46
+ * 价格 - 第2列
47
+ */
48
+ price: number;
49
+ /**
50
+ * 库存 - 第3列
51
+ */
52
+ stock: number;
53
+ /**
54
+ * 描述 - 第4列(可选)
55
+ */
56
+ description?: string;
57
+ }
58
+ /**
59
+ * 使用说明:
60
+ *
61
+ * 1. CSV文件:
62
+ * - 如果CSV有表头,建议使用列名(如 @CSVColumn('姓名'))
63
+ * - 如果CSV没有表头,使用数字索引(如 @CSVColumn(0) 表示第1列)
64
+ *
65
+ * 2. Excel文件:
66
+ * - 可以使用列名(如 @ExcelColumn('姓名'))
67
+ * - 可以使用数字索引(如 @ExcelColumn(0) 表示第1列)
68
+ * - 可以使用Excel列名(如 @ExcelColumn('A') 表示A列)
69
+ * - 数字索引会自动转换为对应的Excel列名(0 -> A, 1 -> B, 26 -> AA)
70
+ *
71
+ * 3. 最佳实践:
72
+ * - 优先使用列名,代码更易读
73
+ * - 对于无表头的CSV文件,使用数字索引
74
+ * - 对于Excel文件,推荐使用Excel列名(A, B, C)或数字索引
75
+ * - 可以混合使用不同的映射方式
76
+ */
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ProductImportDto = exports.UserImportDto = void 0;
13
+ const column_decorator_1 = require("../column.decorator");
14
+ const class_validator_1 = require("class-validator");
15
+ /**
16
+ * 用户导入DTO示例
17
+ * 展示如何使用列序号、列名和Excel列名进行映射
18
+ */
19
+ class UserImportDto {
20
+ }
21
+ exports.UserImportDto = UserImportDto;
22
+ __decorate([
23
+ (0, column_decorator_1.CSVColumn)('姓名'),
24
+ (0, column_decorator_1.ExcelColumn)('姓名'),
25
+ (0, class_validator_1.IsString)(),
26
+ __metadata("design:type", String)
27
+ ], UserImportDto.prototype, "name", void 0);
28
+ __decorate([
29
+ (0, column_decorator_1.CSVColumn)(1),
30
+ (0, column_decorator_1.ExcelColumn)(1),
31
+ (0, class_validator_1.IsNumber)(),
32
+ (0, class_validator_1.Min)(0),
33
+ (0, class_validator_1.Max)(150),
34
+ __metadata("design:type", Number)
35
+ ], UserImportDto.prototype, "age", void 0);
36
+ __decorate([
37
+ (0, column_decorator_1.CSVColumn)(2) // CSV使用数字索引
38
+ ,
39
+ (0, column_decorator_1.ExcelColumn)('C') // Excel使用列名
40
+ ,
41
+ (0, class_validator_1.IsEmail)(),
42
+ __metadata("design:type", String)
43
+ ], UserImportDto.prototype, "email", void 0);
44
+ __decorate([
45
+ (0, column_decorator_1.CSVColumn)('电话') // CSV使用列名
46
+ ,
47
+ (0, column_decorator_1.ExcelColumn)('D') // Excel使用列名
48
+ ,
49
+ (0, class_validator_1.IsOptional)(),
50
+ (0, class_validator_1.IsString)(),
51
+ __metadata("design:type", String)
52
+ ], UserImportDto.prototype, "phone", void 0);
53
+ __decorate([
54
+ (0, column_decorator_1.CSVColumn)(4) // 第5列
55
+ ,
56
+ (0, column_decorator_1.ExcelColumn)('E') // 或使用Excel列名
57
+ ,
58
+ (0, class_validator_1.IsOptional)(),
59
+ (0, class_validator_1.IsString)(),
60
+ __metadata("design:type", String)
61
+ ], UserImportDto.prototype, "address", void 0);
62
+ __decorate([
63
+ (0, column_decorator_1.CSVColumn)(26) // 第27列
64
+ ,
65
+ (0, column_decorator_1.ExcelColumn)('AA') // Excel列AA
66
+ ,
67
+ (0, class_validator_1.IsOptional)(),
68
+ (0, class_validator_1.IsString)(),
69
+ __metadata("design:type", String)
70
+ ], UserImportDto.prototype, "notes", void 0);
71
+ /**
72
+ * 产品导入DTO示例
73
+ */
74
+ class ProductImportDto {
75
+ }
76
+ exports.ProductImportDto = ProductImportDto;
77
+ __decorate([
78
+ (0, column_decorator_1.CSVColumn)('产品名称'),
79
+ (0, column_decorator_1.ExcelColumn)(0),
80
+ (0, class_validator_1.IsString)(),
81
+ __metadata("design:type", String)
82
+ ], ProductImportDto.prototype, "name", void 0);
83
+ __decorate([
84
+ (0, column_decorator_1.CSVColumn)('价格'),
85
+ (0, column_decorator_1.ExcelColumn)('B'),
86
+ (0, class_validator_1.IsNumber)(),
87
+ (0, class_validator_1.Min)(0),
88
+ __metadata("design:type", Number)
89
+ ], ProductImportDto.prototype, "price", void 0);
90
+ __decorate([
91
+ (0, column_decorator_1.CSVColumn)('库存数量'),
92
+ (0, column_decorator_1.ExcelColumn)(2),
93
+ (0, class_validator_1.IsNumber)(),
94
+ (0, class_validator_1.Min)(0),
95
+ __metadata("design:type", Number)
96
+ ], ProductImportDto.prototype, "stock", void 0);
97
+ __decorate([
98
+ (0, column_decorator_1.CSVColumn)(3),
99
+ (0, column_decorator_1.ExcelColumn)('D'),
100
+ (0, class_validator_1.IsOptional)(),
101
+ (0, class_validator_1.IsString)(),
102
+ __metadata("design:type", String)
103
+ ], ProductImportDto.prototype, "description", void 0);
104
+ /**
105
+ * 使用说明:
106
+ *
107
+ * 1. CSV文件:
108
+ * - 如果CSV有表头,建议使用列名(如 @CSVColumn('姓名'))
109
+ * - 如果CSV没有表头,使用数字索引(如 @CSVColumn(0) 表示第1列)
110
+ *
111
+ * 2. Excel文件:
112
+ * - 可以使用列名(如 @ExcelColumn('姓名'))
113
+ * - 可以使用数字索引(如 @ExcelColumn(0) 表示第1列)
114
+ * - 可以使用Excel列名(如 @ExcelColumn('A') 表示A列)
115
+ * - 数字索引会自动转换为对应的Excel列名(0 -> A, 1 -> B, 26 -> AA)
116
+ *
117
+ * 3. 最佳实践:
118
+ * - 优先使用列名,代码更易读
119
+ * - 对于无表头的CSV文件,使用数字索引
120
+ * - 对于Excel文件,推荐使用Excel列名(A, B, C)或数字索引
121
+ * - 可以混合使用不同的映射方式
122
+ */
@@ -0,0 +1,30 @@
1
+ import 'reflect-metadata';
2
+ /**
3
+ * Excel 列映射装饰器
4
+ * 用于标记 DTO 类的属性对应的 Excel 列名
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * class UserDto {
9
+ * @ExcelColumn('姓名')
10
+ * name: string;
11
+ *
12
+ * @ExcelColumn('邮箱')
13
+ * email: string;
14
+ * }
15
+ * ```
16
+ */
17
+ export declare function ExcelColumn(columnName: string): PropertyDecorator;
18
+ /**
19
+ * 获取 Excel 列映射
20
+ */
21
+ export declare function getExcelColumnMapping(dto: any): Record<string, string>;
22
+ /**
23
+ * 解析并验证 Excel 数据
24
+ */
25
+ export declare function parseAndValidateExcelData(data: any[], dto: any, options?: {
26
+ skipValidation?: boolean;
27
+ }): Promise<{
28
+ data: any[];
29
+ errors: any[];
30
+ }>;