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