@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.
- package/audit/audit.module.d.ts +11 -0
- package/audit/audit.module.js +65 -1
- package/audit/controllers/audit.controller.d.ts +81 -1
- package/audit/controllers/audit.controller.js +67 -0
- package/audit/decorators/audit-action.decorator.d.ts +74 -0
- package/audit/decorators/audit-action.decorator.js +42 -0
- package/audit/decorators/audit-controller.decorator.d.ts +9 -1
- package/audit/decorators/audit-controller.decorator.js +11 -2
- package/audit/decorators/audit-operation.decorator.d.ts +38 -0
- package/audit/decorators/audit-operation.decorator.js +42 -0
- package/audit/decorators/entity-audit.decorator.d.ts +85 -1
- package/audit/decorators/entity-audit.decorator.js +153 -3
- package/audit/decorators/index.d.ts +2 -0
- package/audit/decorators/index.js +2 -0
- package/audit/dto/audit-action-query.dto.d.ts +13 -0
- package/audit/dto/audit-action-query.dto.js +77 -0
- package/audit/dto/audit-log-query.dto.d.ts +3 -0
- package/audit/dto/audit-log-query.dto.js +3 -0
- package/audit/dto/begin-transaction.dto.d.ts +3 -0
- package/audit/dto/begin-transaction.dto.js +3 -0
- package/audit/dto/compare-entities.dto.d.ts +3 -0
- package/audit/dto/compare-entities.dto.js +3 -0
- package/audit/dto/index.d.ts +1 -0
- package/audit/dto/index.js +1 -0
- package/audit/dto/pre-check-restore.dto.d.ts +3 -0
- package/audit/dto/pre-check-restore.dto.js +3 -0
- package/audit/dto/restore-entity.dto.d.ts +3 -0
- package/audit/dto/restore-entity.dto.js +3 -0
- package/audit/entities/audit-action-summary.entity.d.ts +23 -0
- package/audit/entities/audit-action-summary.entity.js +101 -0
- package/audit/entities/entity-audit-log.entity.d.ts +10 -2
- package/audit/entities/entity-audit-log.entity.js +48 -9
- package/audit/entities/entity-transaction.entity.d.ts +11 -2
- package/audit/entities/entity-transaction.entity.js +42 -3
- package/audit/entities/index.d.ts +3 -0
- package/audit/entities/index.js +3 -0
- package/audit/entities/manual-operation-log.entity.d.ts +4 -2
- package/audit/entities/manual-operation-log.entity.js +12 -9
- package/audit/entities/operation-template.entity.d.ts +4 -0
- package/audit/entities/operation-template.entity.js +4 -0
- package/audit/enums/audit.enums.d.ts +29 -6
- package/audit/enums/audit.enums.js +31 -7
- package/audit/examples/decorator-value-mapping.example.d.ts +70 -0
- package/audit/examples/decorator-value-mapping.example.js +414 -0
- package/audit/index.d.ts +5 -1
- package/audit/index.js +38 -1
- package/audit/interceptors/audit-action.interceptor.d.ts +38 -0
- package/audit/interceptors/audit-action.interceptor.js +215 -0
- package/audit/interceptors/audit.interceptor.d.ts +16 -0
- package/audit/interceptors/audit.interceptor.js +41 -11
- package/audit/interceptors/index.d.ts +1 -0
- package/audit/interceptors/index.js +1 -0
- package/audit/interfaces/audit.interfaces.d.ts +174 -4
- package/audit/services/audit-action.service.d.ts +141 -0
- package/audit/services/audit-action.service.js +244 -0
- package/audit/services/audit-context.service.d.ts +106 -0
- package/audit/services/audit-context.service.js +185 -0
- package/audit/services/audit-strategy.service.d.ts +6 -0
- package/audit/services/audit-strategy.service.js +13 -0
- package/audit/services/entity-audit.service.d.ts +273 -5
- package/audit/services/entity-audit.service.js +840 -60
- package/audit/services/index.d.ts +3 -0
- package/audit/services/index.js +3 -0
- package/audit/services/manual-audit-log.service.d.ts +133 -9
- package/audit/services/manual-audit-log.service.js +157 -42
- package/audit/services/multi-database.service.d.ts +9 -2
- package/audit/services/multi-database.service.js +9 -21
- package/audit/services/operation-description.service.d.ts +71 -2
- package/audit/services/operation-description.service.js +231 -20
- package/audit/services/transaction-audit.service.d.ts +30 -0
- package/audit/services/transaction-audit.service.js +53 -5
- package/audit/subscribers/entity-audit.subscriber.d.ts +20 -0
- package/audit/subscribers/entity-audit.subscriber.js +98 -6
- package/cache/cache-metrics.service.d.ts +67 -0
- package/cache/cache-metrics.service.js +68 -4
- package/cache/cache-serialization.service.d.ts +31 -0
- package/cache/cache-serialization.service.js +25 -0
- package/cache/cache.constants.d.ts +9 -0
- package/cache/cache.constants.js +9 -0
- package/cache/cache.health.d.ts +26 -0
- package/cache/cache.health.js +30 -0
- package/cache/cache.module.d.ts +87 -2
- package/cache/cache.module.js +84 -11
- package/cache/cache.service.d.ts +143 -3
- package/cache/cache.service.js +173 -4
- package/cache/cache.warmup.service.d.ts +39 -0
- package/cache/cache.warmup.service.js +32 -0
- package/cache/decorators/cache-evict.decorator.d.ts +47 -0
- package/cache/decorators/cache-evict.decorator.js +56 -0
- package/cache/decorators/cache-put.decorator.d.ts +34 -0
- package/cache/decorators/cache-put.decorator.js +39 -0
- package/cache/decorators/cacheable.decorator.d.ts +40 -0
- package/cache/decorators/cacheable.decorator.js +55 -0
- package/cache/dependencies/callback.dependency.d.ts +33 -0
- package/cache/dependencies/callback.dependency.js +39 -1
- package/cache/dependencies/chain.dependency.d.ts +28 -0
- package/cache/dependencies/chain.dependency.js +34 -0
- package/cache/dependencies/db.dependency.d.ts +83 -7
- package/cache/dependencies/db.dependency.js +89 -14
- package/cache/dependencies/file.dependency.d.ts +32 -0
- package/cache/dependencies/file.dependency.js +34 -0
- package/cache/dependencies/tag.dependency.d.ts +75 -4
- package/cache/dependencies/tag.dependency.js +145 -11
- package/cache/dependencies/time.dependency.d.ts +43 -0
- package/cache/dependencies/time.dependency.js +43 -0
- package/cache/entities/index.d.ts +1 -0
- package/cache/entities/index.js +17 -0
- package/cache/entities/typeorm-cache.entity.d.ts +71 -0
- package/cache/entities/typeorm-cache.entity.js +110 -0
- package/cache/examples/basic-usage.d.ts +15 -0
- package/cache/examples/basic-usage.js +62 -8
- package/cache/index.d.ts +2 -1
- package/cache/index.js +28 -2
- package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
- package/cache/interfaces/cache-options.interface.d.ts +89 -0
- package/cache/interfaces/cache-options.interface.js +6 -0
- package/cache/interfaces/cache-provider.interface.d.ts +78 -0
- package/cache/providers/base-cache.provider.d.ts +14 -0
- package/cache/providers/base-cache.provider.js +16 -0
- package/cache/providers/cls-cache.provider.d.ts +20 -0
- package/cache/providers/cls-cache.provider.js +28 -0
- package/cache/providers/index.d.ts +2 -1
- package/cache/providers/index.js +2 -1
- package/cache/providers/lrucache.provider.d.ts +76 -0
- package/cache/providers/lrucache.provider.js +226 -0
- package/cache/providers/redis-cache.provider.d.ts +26 -0
- package/cache/providers/redis-cache.provider.js +29 -0
- package/cache/providers/typeorm-cache.provider.d.ts +211 -0
- package/cache/providers/typeorm-cache.provider.js +483 -0
- package/cache/utils/dependency-manager.util.d.ts +52 -0
- package/cache/utils/dependency-manager.util.js +59 -0
- package/cache/utils/key-generator.util.d.ts +42 -0
- package/cache/utils/key-generator.util.js +53 -1
- package/common/abstract.entity.d.ts +14 -0
- package/common/abstract.entity.js +14 -0
- package/common/boilerplate.polyfill.d.ts +143 -0
- package/common/boilerplate.polyfill.js +35 -1
- package/common/dto/dto-container.d.ts +16 -0
- package/common/dto/dto-container.js +20 -0
- package/common/dto/dto-decorators.d.ts +18 -0
- package/common/dto/dto-decorators.js +14 -0
- package/common/dto/dto-extensions.d.ts +11 -0
- package/common/dto/dto-extensions.js +9 -0
- package/common/dto/dto-service-accessor.d.ts +17 -0
- package/common/dto/dto-service-accessor.js +18 -0
- package/common/dto/dto-transformer.d.ts +12 -0
- package/common/dto/dto-transformer.js +9 -0
- package/common/dto/index.js +2 -0
- package/common/examples/paginate-and-map.example.d.ts +6 -0
- package/common/examples/paginate-and-map.example.js +26 -0
- package/common/helpers/validation-metadata-helper.d.ts +55 -0
- package/common/helpers/validation-metadata-helper.js +60 -0
- package/common/index.d.ts +1 -0
- package/common/index.js +4 -0
- package/common/utils.d.ts +15 -0
- package/common/utils.js +15 -0
- package/constants/language-code.js +1 -0
- package/decorators/field.decorators.d.ts +72 -3
- package/decorators/field.decorators.js +155 -19
- package/decorators/property.decorators.js +1 -0
- package/decorators/public-route.decorator.js +1 -0
- package/decorators/transform.decorators.d.ts +27 -2
- package/decorators/transform.decorators.js +29 -23
- package/decorators/translate.decorator.js +1 -0
- package/decorators/user.decorator.js +1 -0
- package/decorators/validator.decorators.d.ts +8 -18
- package/decorators/validator.decorators.js +22 -190
- package/file-upload/controllers/file-access.controller.d.ts +23 -0
- package/file-upload/controllers/file-access.controller.js +128 -0
- package/file-upload/decorators/column.decorator.d.ts +151 -0
- package/file-upload/decorators/column.decorator.js +273 -0
- package/file-upload/decorators/csv-data.decorator.d.ts +30 -0
- package/file-upload/decorators/csv-data.decorator.js +85 -0
- package/file-upload/decorators/csv-import.decorator.d.ts +34 -0
- package/file-upload/decorators/csv-import.decorator.js +24 -0
- package/file-upload/decorators/examples/column-mapping.example.d.ts +76 -0
- package/file-upload/decorators/examples/column-mapping.example.js +122 -0
- package/file-upload/decorators/excel-data.decorator.d.ts +30 -0
- package/file-upload/decorators/excel-data.decorator.js +85 -0
- package/file-upload/decorators/file-upload.decorator.d.ts +83 -0
- package/file-upload/decorators/file-upload.decorator.js +172 -0
- package/file-upload/decorators/index.d.ts +5 -0
- package/file-upload/decorators/index.js +38 -0
- package/file-upload/decorators/process.decorator.d.ts +40 -0
- package/file-upload/decorators/process.decorator.js +52 -0
- package/file-upload/decorators/validate-data.decorator.d.ts +91 -0
- package/file-upload/decorators/validate-data.decorator.js +39 -0
- package/file-upload/dto/create-file.dto.d.ts +24 -0
- package/file-upload/dto/create-file.dto.js +112 -0
- package/file-upload/dto/find-files.dto.d.ts +15 -0
- package/file-upload/dto/find-files.dto.js +76 -0
- package/file-upload/dto/index.d.ts +4 -0
- package/file-upload/dto/index.js +20 -0
- package/file-upload/dto/pagination.dto.d.ts +7 -0
- package/file-upload/dto/pagination.dto.js +39 -0
- package/file-upload/dto/update-file.dto.d.ts +15 -0
- package/file-upload/dto/update-file.dto.js +67 -0
- package/file-upload/entities/file-metadata.entity.d.ts +25 -0
- package/file-upload/entities/file-metadata.entity.js +76 -0
- package/file-upload/entities/file.entity.d.ts +114 -0
- package/file-upload/entities/file.entity.js +350 -0
- package/file-upload/entities/index.d.ts +2 -0
- package/file-upload/entities/index.js +18 -0
- package/file-upload/enums/file-type.enum.d.ts +72 -0
- package/file-upload/enums/file-type.enum.js +212 -0
- package/file-upload/exceptions/file-upload.exception.d.ts +57 -0
- package/file-upload/exceptions/file-upload.exception.js +120 -0
- package/file-upload/exceptions/index.d.ts +1 -0
- package/file-upload/exceptions/index.js +17 -0
- package/file-upload/file-upload.module.d.ts +89 -0
- package/file-upload/file-upload.module.js +292 -0
- package/file-upload/index.d.ts +37 -0
- package/file-upload/index.js +77 -0
- package/file-upload/interceptors/file-upload.interceptor.d.ts +101 -0
- package/file-upload/interceptors/file-upload.interceptor.js +594 -0
- package/file-upload/interceptors/index.d.ts +1 -0
- package/file-upload/interceptors/index.js +17 -0
- package/file-upload/interfaces/custom-file-type.interface.d.ts +72 -0
- package/file-upload/interfaces/custom-file-type.interface.js +2 -0
- package/file-upload/interfaces/file-buffer.interface.d.ts +72 -0
- package/file-upload/interfaces/file-buffer.interface.js +2 -0
- package/file-upload/interfaces/file-entity.interface.d.ts +142 -0
- package/file-upload/interfaces/file-entity.interface.js +28 -0
- package/file-upload/interfaces/file-metadata.interface.d.ts +21 -0
- package/file-upload/interfaces/file-metadata.interface.js +2 -0
- package/file-upload/interfaces/file-processor.interface.d.ts +93 -0
- package/file-upload/interfaces/file-processor.interface.js +2 -0
- package/file-upload/interfaces/file-upload-options.interface.d.ts +74 -0
- package/file-upload/interfaces/file-upload-options.interface.js +5 -0
- package/file-upload/interfaces/index.d.ts +7 -0
- package/file-upload/interfaces/index.js +24 -0
- package/file-upload/interfaces/processor-options.interface.d.ts +102 -0
- package/file-upload/interfaces/processor-options.interface.js +2 -0
- package/file-upload/interfaces/storage-provider.interface.d.ts +239 -0
- package/file-upload/interfaces/storage-provider.interface.js +2 -0
- package/file-upload/interfaces/upload-options.interface.d.ts +19 -0
- package/file-upload/interfaces/upload-options.interface.js +2 -0
- package/file-upload/processors/csv.processor.d.ts +98 -0
- package/file-upload/processors/csv.processor.js +391 -0
- package/file-upload/processors/excel.processor.d.ts +130 -0
- package/file-upload/processors/excel.processor.js +547 -0
- package/file-upload/processors/image.processor.d.ts +199 -0
- package/file-upload/processors/image.processor.js +377 -0
- package/file-upload/providers/index.d.ts +2 -0
- package/file-upload/providers/index.js +18 -0
- package/file-upload/providers/local-storage.provider.d.ts +98 -0
- package/file-upload/providers/local-storage.provider.js +484 -0
- package/file-upload/providers/s3-storage.provider.d.ts +87 -0
- package/file-upload/providers/s3-storage.provider.js +455 -0
- package/file-upload/services/file-signature-validator.service.d.ts +118 -0
- package/file-upload/services/file-signature-validator.service.js +376 -0
- package/file-upload/services/file.service.d.ts +193 -0
- package/file-upload/services/file.service.js +638 -0
- package/file-upload/services/index.d.ts +4 -0
- package/file-upload/services/index.js +20 -0
- package/file-upload/services/malicious-file-detector.service.d.ts +300 -0
- package/file-upload/services/malicious-file-detector.service.js +1234 -0
- package/file-upload/services/mime-registry.service.d.ts +47 -0
- package/file-upload/services/mime-registry.service.js +167 -0
- package/file-upload/utils/checksum.util.d.ts +28 -0
- package/file-upload/utils/checksum.util.js +65 -0
- package/file-upload/utils/dynamic-import.util.d.ts +54 -0
- package/file-upload/utils/dynamic-import.util.js +156 -0
- package/file-upload/utils/filename.util.d.ts +59 -0
- package/file-upload/utils/filename.util.js +184 -0
- package/file-upload/utils/filepath.util.d.ts +70 -0
- package/file-upload/utils/filepath.util.js +152 -0
- package/file-upload/utils/index.d.ts +4 -0
- package/file-upload/utils/index.js +20 -0
- package/filters/bad-request.filter.js +19 -4
- package/filters/constraint-errors.js +1 -0
- package/helpers/common.helper.d.ts +13 -0
- package/helpers/common.helper.js +13 -0
- package/http-client/config/http-client.config.d.ts +20 -0
- package/http-client/config/http-client.config.js +48 -21
- package/http-client/decorators/http-client.decorators.d.ts +55 -14
- package/http-client/decorators/http-client.decorators.js +154 -78
- package/http-client/entities/http-log.entity.d.ts +217 -8
- package/http-client/entities/http-log.entity.js +7 -22
- package/http-client/errors/http-client.errors.d.ts +57 -0
- package/http-client/errors/http-client.errors.js +58 -0
- package/http-client/examples/advanced-usage.example.d.ts +40 -0
- package/http-client/examples/advanced-usage.example.js +53 -61
- package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
- package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
- package/http-client/examples/basic-usage.example.d.ts +60 -0
- package/http-client/examples/basic-usage.example.js +60 -0
- package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
- package/http-client/examples/multi-api-configuration.example.js +76 -5
- package/http-client/examples/proxy-from-environment.example.d.ts +133 -0
- package/http-client/examples/proxy-from-environment.example.js +409 -0
- package/http-client/http-client.module.d.ts +48 -2
- package/http-client/http-client.module.js +147 -68
- package/http-client/index.d.ts +1 -1
- package/http-client/index.js +8 -0
- package/http-client/interfaces/api-client-config.interface.d.ts +80 -45
- package/http-client/interfaces/api-client-config.interface.js +3 -0
- package/http-client/interfaces/http-client-config.interface.d.ts +109 -52
- package/http-client/services/api-client-registry.service.d.ts +50 -11
- package/http-client/services/api-client-registry.service.js +90 -250
- package/http-client/services/circuit-breaker.service.d.ts +115 -2
- package/http-client/services/circuit-breaker.service.js +237 -7
- package/http-client/services/http-client.service.d.ts +124 -14
- package/http-client/services/http-client.service.js +437 -148
- package/http-client/services/http-log-query.service.d.ts +83 -0
- package/http-client/services/http-log-query.service.js +121 -13
- package/http-client/services/http-replay.service.d.ts +101 -0
- package/http-client/services/http-replay.service.js +86 -0
- package/http-client/services/index.d.ts +0 -1
- package/http-client/services/index.js +0 -1
- package/http-client/services/log-cleanup.service.d.ts +63 -0
- package/http-client/services/log-cleanup.service.js +54 -2
- package/http-client/services/logging.service.d.ts +116 -7
- package/http-client/services/logging.service.js +349 -86
- package/http-client/utils/call-stack-extractor.util.d.ts +63 -0
- package/http-client/utils/call-stack-extractor.util.js +83 -0
- package/http-client/utils/context-extractor.util.d.ts +49 -0
- package/http-client/utils/context-extractor.util.js +54 -0
- package/http-client/utils/curl-generator.util.d.ts +21 -0
- package/http-client/utils/curl-generator.util.js +44 -3
- package/http-client/utils/index.d.ts +1 -0
- package/http-client/utils/index.js +1 -0
- package/http-client/utils/proxy-environment.util.d.ts +42 -0
- package/http-client/utils/proxy-environment.util.js +148 -0
- package/http-client/utils/request-id.util.d.ts +18 -0
- package/http-client/utils/request-id.util.js +20 -0
- package/http-client/utils/retry-recorder.util.d.ts +42 -0
- package/http-client/utils/retry-recorder.util.js +44 -0
- package/http-client/utils/security-validator.util.d.ts +118 -0
- package/http-client/utils/security-validator.util.js +352 -0
- package/index.d.ts +3 -1
- package/index.js +12 -1
- package/interceptors/translation-interceptor.service.js +5 -0
- package/ip-filter/constants.d.ts +21 -0
- package/ip-filter/constants.js +24 -0
- package/ip-filter/decorators/index.d.ts +1 -0
- package/ip-filter/decorators/index.js +17 -0
- package/ip-filter/decorators/ip-filter.decorator.d.ts +58 -0
- package/ip-filter/decorators/ip-filter.decorator.js +79 -0
- package/ip-filter/guards/index.d.ts +1 -0
- package/ip-filter/guards/index.js +17 -0
- package/ip-filter/guards/ip-filter.guard.d.ts +62 -0
- package/ip-filter/guards/ip-filter.guard.js +174 -0
- package/ip-filter/index.d.ts +7 -0
- package/ip-filter/index.js +23 -0
- package/ip-filter/interfaces/index.d.ts +4 -0
- package/ip-filter/interfaces/index.js +20 -0
- package/ip-filter/interfaces/ip-filter-async-options.interface.d.ts +15 -0
- package/ip-filter/interfaces/ip-filter-async-options.interface.js +2 -0
- package/ip-filter/interfaces/ip-filter-metadata.interface.d.ts +26 -0
- package/ip-filter/interfaces/ip-filter-metadata.interface.js +2 -0
- package/ip-filter/interfaces/ip-filter-options.interface.d.ts +34 -0
- package/ip-filter/interfaces/ip-filter-options.interface.js +2 -0
- package/ip-filter/interfaces/ip-rule.interface.d.ts +36 -0
- package/ip-filter/interfaces/ip-rule.interface.js +2 -0
- package/ip-filter/ip-filter.module.d.ts +55 -0
- package/ip-filter/ip-filter.module.js +105 -0
- package/ip-filter/services/index.d.ts +1 -0
- package/ip-filter/services/index.js +17 -0
- package/ip-filter/services/ip-filter.service.d.ts +92 -0
- package/ip-filter/services/ip-filter.service.js +238 -0
- package/ip-filter/utils/index.d.ts +1 -0
- package/ip-filter/utils/index.js +17 -0
- package/ip-filter/utils/ip-utils.d.ts +61 -0
- package/ip-filter/utils/ip-utils.js +162 -0
- package/package.json +32 -29
- package/providers/context.provider.d.ts +9 -0
- package/providers/context.provider.js +15 -0
- package/providers/generator.provider.d.ts +4 -0
- package/providers/generator.provider.js +4 -0
- package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
- package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
- package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
- package/redis-lock/examples/lock-strategy.examples.js +130 -15
- package/redis-lock/index.d.ts +2 -0
- package/redis-lock/index.js +8 -1
- package/redis-lock/lock-heartbeat.service.d.ts +80 -0
- package/redis-lock/lock-heartbeat.service.js +232 -0
- package/redis-lock/redis-lock.decorator.d.ts +101 -0
- package/redis-lock/redis-lock.decorator.js +120 -0
- package/redis-lock/redis-lock.module.d.ts +66 -0
- package/redis-lock/redis-lock.module.js +175 -70
- package/redis-lock/redis-lock.service.d.ts +282 -0
- package/redis-lock/redis-lock.service.js +343 -20
- package/setup/bootstrap.setup.d.ts +2 -1
- package/setup/bootstrap.setup.js +22 -1
- package/setup/index.d.ts +1 -0
- package/setup/index.js +1 -0
- package/setup/mode.setup.d.ts +44 -0
- package/setup/mode.setup.js +44 -0
- package/setup/run-in-mode.decorator.d.ts +56 -0
- package/setup/run-in-mode.decorator.js +92 -0
- package/setup/schedule.decorator.d.ts +227 -0
- package/setup/schedule.decorator.js +240 -12
- package/setup/worker.decorator.d.ts +86 -0
- package/setup/worker.decorator.js +97 -0
- package/shared/index.d.ts +1 -1
- package/shared/index.js +1 -1
- package/shared/{serviceRegistryModule.js → service-registry.module.js} +19 -18
- package/shared/services/api-config.service.d.ts +3 -0
- package/shared/services/api-config.service.js +21 -9
- package/shared/services/index.d.ts +0 -1
- package/shared/services/index.js +0 -1
- package/validator-json/decorators.d.ts +17 -0
- package/validator-json/decorators.js +17 -2
- package/validator-json/default.d.ts +6 -0
- package/validator-json/default.js +30 -2
- package/validator-json/defaultConverters.js +1 -0
- package/validator-json/options.d.ts +23 -0
- package/validators/common-validators.d.ts +143 -0
- package/validators/common-validators.js +249 -0
- package/validators/custom-validate.examples.d.ts +23 -0
- package/validators/custom-validate.examples.js +78 -6
- package/validators/custom-validate.validator.d.ts +108 -0
- package/validators/custom-validate.validator.js +85 -0
- package/validators/file-mimetype.validator.d.ts +0 -2
- package/validators/file-mimetype.validator.js +4 -6
- package/validators/index.d.ts +1 -0
- package/validators/index.js +1 -0
- package/validators/is-exists.validator.d.ts +26 -6
- package/validators/is-exists.validator.js +30 -7
- package/validators/is-unique.validator.d.ts +33 -7
- package/validators/is-unique.validator.js +59 -17
- package/validators/skip-empty.validator.d.ts +5 -0
- package/validators/skip-empty.validator.js +5 -0
- package/vault/interfaces/vault-options.interface.d.ts +9 -0
- package/vault/vault-config.loader.d.ts +30 -0
- package/vault/vault-config.loader.js +48 -1
- package/vault/vault-config.service.d.ts +53 -0
- package/vault/vault-config.service.js +57 -0
- package/vault/vault.module.d.ts +4 -0
- package/vault/vault.module.js +4 -0
- package/cache/providers/memory-cache.provider.d.ts +0 -26
- package/cache/providers/memory-cache.provider.js +0 -171
- package/decorators/examples/validation-decorators.example.d.ts +0 -69
- package/decorators/examples/validation-decorators.example.js +0 -331
- package/http-client/services/cache.service.d.ts +0 -24
- package/http-client/services/cache.service.js +0 -264
- package/shared/services/validator.service.d.ts +0 -3
- package/shared/services/validator.service.js +0 -20
- /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) {
|
package/common/dto/index.js
CHANGED
|
@@ -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
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
|
|
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 {};
|