@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
|
@@ -19,8 +19,6 @@ exports.EnumFieldOptional = EnumFieldOptional;
|
|
|
19
19
|
exports.ClassFieldOptional = ClassFieldOptional;
|
|
20
20
|
exports.EmailField = EmailField;
|
|
21
21
|
exports.EmailFieldOptional = EmailFieldOptional;
|
|
22
|
-
exports.PhoneField = PhoneField;
|
|
23
|
-
exports.PhoneFieldOptional = PhoneFieldOptional;
|
|
24
22
|
exports.UUIDField = UUIDField;
|
|
25
23
|
exports.UUIDFieldOptional = UUIDFieldOptional;
|
|
26
24
|
exports.URLField = URLField;
|
|
@@ -37,6 +35,8 @@ exports.TimeZoneField = TimeZoneField;
|
|
|
37
35
|
exports.TimeZoneFieldOptional = TimeZoneFieldOptional;
|
|
38
36
|
exports.LocaleField = LocaleField;
|
|
39
37
|
exports.LocaleFieldOptional = LocaleFieldOptional;
|
|
38
|
+
exports.Field = Field;
|
|
39
|
+
exports.FieldOptional = FieldOptional;
|
|
40
40
|
const common_1 = require("@nestjs/common");
|
|
41
41
|
const swagger_1 = require("@nestjs/swagger");
|
|
42
42
|
const nestjs_i18n_1 = require("nestjs-i18n");
|
|
@@ -46,6 +46,62 @@ const constants_1 = require("../constants");
|
|
|
46
46
|
const property_decorators_1 = require("./property.decorators");
|
|
47
47
|
const transform_decorators_1 = require("./transform.decorators");
|
|
48
48
|
const validator_decorators_1 = require("./validator.decorators");
|
|
49
|
+
// ========================================
|
|
50
|
+
// Unified Field Options Integration
|
|
51
|
+
// ========================================
|
|
52
|
+
const validation_metadata_helper_1 = require("../common/helpers/validation-metadata-helper");
|
|
53
|
+
// ========================================
|
|
54
|
+
// Helper: Apply Audit Metadata from Unified Options
|
|
55
|
+
// ========================================
|
|
56
|
+
/**
|
|
57
|
+
* 应用审计元数据装饰器
|
|
58
|
+
*
|
|
59
|
+
* 将字段元数据存储到 Reflect metadata,供审计日志系统使用
|
|
60
|
+
*/
|
|
61
|
+
function applyAuditMetadata(options) {
|
|
62
|
+
return (target, propertyKey) => {
|
|
63
|
+
// 只有当有相关元数据时才存储
|
|
64
|
+
if (options.fieldLabel ||
|
|
65
|
+
options.fieldDescription ||
|
|
66
|
+
options.valueLabels ||
|
|
67
|
+
options.displayFormatter ||
|
|
68
|
+
options.sensitive) {
|
|
69
|
+
const constructor = target.constructor;
|
|
70
|
+
const AUDIT_FIELD_OPTIONS_KEY = 'FIELD_AUDIT_OPTIONS';
|
|
71
|
+
// 获取现有的审计元数据
|
|
72
|
+
const existingOptions = Reflect.getMetadata(AUDIT_FIELD_OPTIONS_KEY, constructor) || {};
|
|
73
|
+
// 合并元数据
|
|
74
|
+
existingOptions[propertyKey] = {
|
|
75
|
+
label: options.fieldLabel,
|
|
76
|
+
description: options.fieldDescription,
|
|
77
|
+
example: options.fieldExample,
|
|
78
|
+
valueLabels: options.valueLabels,
|
|
79
|
+
formatter: options.displayFormatter,
|
|
80
|
+
sensitive: options.sensitive,
|
|
81
|
+
};
|
|
82
|
+
// 存储回 Reflect
|
|
83
|
+
Reflect.defineMetadata(AUDIT_FIELD_OPTIONS_KEY, existingOptions, constructor);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 应用验证元数据装饰器
|
|
89
|
+
*
|
|
90
|
+
* 存储验证元数据到 Reflect metadata,供验证错误过滤器使用
|
|
91
|
+
* 生成友好的多语言错误消息
|
|
92
|
+
*/
|
|
93
|
+
function applyValidationMetadata(options) {
|
|
94
|
+
return (target, propertyKey) => {
|
|
95
|
+
// 只有当有相关元数据时才存储
|
|
96
|
+
if (options.fieldLabel) {
|
|
97
|
+
(0, validation_metadata_helper_1.setValidationMetadata)(target.constructor, String(propertyKey), {
|
|
98
|
+
fieldName: String(propertyKey),
|
|
99
|
+
label: options.fieldLabel,
|
|
100
|
+
description: options.fieldDescription,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
49
105
|
function NumberField(options = {}) {
|
|
50
106
|
const decorators = [(0, class_transformer_1.Type)(() => Number)];
|
|
51
107
|
if (options.nullable) {
|
|
@@ -95,6 +151,10 @@ function NumberField(options = {}) {
|
|
|
95
151
|
message: (0, nestjs_i18n_1.i18nValidationMessage)('validation.IS_POSITIVE'),
|
|
96
152
|
}));
|
|
97
153
|
}
|
|
154
|
+
// 应用审计元数据(如果有)
|
|
155
|
+
decorators.push(applyAuditMetadata(options));
|
|
156
|
+
// 应用验证元数据(用于友好的错误消息)
|
|
157
|
+
decorators.push(applyValidationMetadata(options));
|
|
98
158
|
return (0, common_1.applyDecorators)(...decorators);
|
|
99
159
|
}
|
|
100
160
|
function NumberFieldOptional(options = {}) {
|
|
@@ -138,6 +198,10 @@ function StringField(options = {}) {
|
|
|
138
198
|
if (options.toUpperCase) {
|
|
139
199
|
decorators.push((0, transform_decorators_1.ToUpperCase)());
|
|
140
200
|
}
|
|
201
|
+
// 应用审计元数据(如果有)
|
|
202
|
+
decorators.push(applyAuditMetadata(options));
|
|
203
|
+
// 应用验证元数据(用于友好的错误消息)
|
|
204
|
+
decorators.push(applyValidationMetadata(options));
|
|
141
205
|
return (0, common_1.applyDecorators)(...decorators);
|
|
142
206
|
}
|
|
143
207
|
function StringFieldOptional(options = {}) {
|
|
@@ -145,7 +209,7 @@ function StringFieldOptional(options = {}) {
|
|
|
145
209
|
}
|
|
146
210
|
function PasswordField(options = {}) {
|
|
147
211
|
const decorators = [
|
|
148
|
-
StringField(Object.assign(Object.assign({}, options), { minLength: 6 }))
|
|
212
|
+
StringField(Object.assign(Object.assign({}, options), { minLength: 6 })) /*IsPassword()*/,
|
|
149
213
|
];
|
|
150
214
|
if (options.nullable) {
|
|
151
215
|
decorators.push((0, validator_decorators_1.IsNullable)());
|
|
@@ -172,6 +236,10 @@ function BooleanField(options = {}) {
|
|
|
172
236
|
if (options.swagger !== false) {
|
|
173
237
|
decorators.push((0, swagger_1.ApiProperty)(Object.assign({ type: Boolean }, options)));
|
|
174
238
|
}
|
|
239
|
+
// 应用审计元数据(如果有)
|
|
240
|
+
decorators.push(applyAuditMetadata(options));
|
|
241
|
+
// 应用验证元数据(用于友好的错误消息)
|
|
242
|
+
decorators.push(applyValidationMetadata(options));
|
|
175
243
|
return (0, common_1.applyDecorators)(...decorators);
|
|
176
244
|
}
|
|
177
245
|
function BooleanFieldOptional(options = {}) {
|
|
@@ -223,7 +291,9 @@ function getEnumDescription(enumType) {
|
|
|
223
291
|
const keys = Object.keys(enumType).filter((k) => typeof enumType[k] === 'number');
|
|
224
292
|
return keys.map((k) => `${enumType[k]}: ${k}`).join(', ');
|
|
225
293
|
}
|
|
294
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
226
295
|
function EnumField(getEnum, options = {}) {
|
|
296
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/ban-types
|
|
227
297
|
const enumValue = getEnum();
|
|
228
298
|
const decorators = [
|
|
229
299
|
(0, class_validator_1.IsEnum)(enumValue, {
|
|
@@ -243,9 +313,15 @@ function EnumField(getEnum, options = {}) {
|
|
|
243
313
|
if (options.swagger !== false) {
|
|
244
314
|
decorators.push((0, property_decorators_1.ApiEnumProperty)(getEnum, Object.assign(Object.assign({}, options), { isArray: options.each })));
|
|
245
315
|
}
|
|
316
|
+
// 应用审计元数据(如果有)
|
|
317
|
+
decorators.push(applyAuditMetadata(options));
|
|
318
|
+
// 应用验证元数据(用于友好的错误消息)
|
|
319
|
+
decorators.push(applyValidationMetadata(options));
|
|
246
320
|
return (0, common_1.applyDecorators)(...decorators);
|
|
247
321
|
}
|
|
322
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
248
323
|
function ClassField(getClass, options = {}) {
|
|
324
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
249
325
|
const classValue = getClass();
|
|
250
326
|
if (!classValue) {
|
|
251
327
|
throw new Error('ClassField: recursive class definition');
|
|
@@ -271,9 +347,11 @@ function ClassField(getClass, options = {}) {
|
|
|
271
347
|
}
|
|
272
348
|
return (0, common_1.applyDecorators)(...decorators);
|
|
273
349
|
}
|
|
350
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
274
351
|
function EnumFieldOptional(getEnum, options = {}) {
|
|
275
352
|
return (0, common_1.applyDecorators)((0, validator_decorators_1.IsEmptyable)(), EnumField(getEnum, Object.assign({ required: false }, options)));
|
|
276
353
|
}
|
|
354
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
277
355
|
function ClassFieldOptional(getClass, options = {}) {
|
|
278
356
|
return (0, common_1.applyDecorators)((0, validator_decorators_1.IsEmptyable)(), ClassField(getClass, Object.assign({ required: false }, options)));
|
|
279
357
|
}
|
|
@@ -297,22 +375,6 @@ function EmailField(options = {}) {
|
|
|
297
375
|
function EmailFieldOptional(options = {}) {
|
|
298
376
|
return (0, common_1.applyDecorators)((0, validator_decorators_1.IsEmptyable)(), EmailField(Object.assign({ required: false }, options)));
|
|
299
377
|
}
|
|
300
|
-
function PhoneField(options = {}) {
|
|
301
|
-
const decorators = [(0, validator_decorators_1.IsPhoneNumber)(), (0, transform_decorators_1.PhoneNumberSerializer)()];
|
|
302
|
-
if (options.nullable) {
|
|
303
|
-
decorators.push((0, validator_decorators_1.IsNullable)());
|
|
304
|
-
}
|
|
305
|
-
else {
|
|
306
|
-
decorators.push((0, class_validator_1.NotEquals)(null));
|
|
307
|
-
}
|
|
308
|
-
if (options.swagger !== false) {
|
|
309
|
-
decorators.push((0, swagger_1.ApiProperty)(Object.assign({ type: String }, options)));
|
|
310
|
-
}
|
|
311
|
-
return (0, common_1.applyDecorators)(...decorators);
|
|
312
|
-
}
|
|
313
|
-
function PhoneFieldOptional(options = {}) {
|
|
314
|
-
return (0, common_1.applyDecorators)((0, validator_decorators_1.IsEmptyable)(), PhoneField(Object.assign({ required: false }, options)));
|
|
315
|
-
}
|
|
316
378
|
function UUIDField(options = {}) {
|
|
317
379
|
const decorators = [
|
|
318
380
|
(0, class_transformer_1.Type)(() => String),
|
|
@@ -407,9 +469,14 @@ function DateField(options = {}) {
|
|
|
407
469
|
}));
|
|
408
470
|
}
|
|
409
471
|
if (options.swagger !== false) {
|
|
472
|
+
// Add default example with current date
|
|
410
473
|
const swaggerOptions = Object.assign({ type: Date, example: (_a = options.example) !== null && _a !== void 0 ? _a : new Date() }, options);
|
|
411
474
|
decorators.push((0, swagger_1.ApiProperty)(swaggerOptions));
|
|
412
475
|
}
|
|
476
|
+
// 应用审计元数据(如果有)
|
|
477
|
+
decorators.push(applyAuditMetadata(options));
|
|
478
|
+
// 应用验证元数据(用于友好的错误消息)
|
|
479
|
+
decorators.push(applyValidationMetadata(options));
|
|
413
480
|
return (0, common_1.applyDecorators)(...decorators);
|
|
414
481
|
}
|
|
415
482
|
function DateFieldOptional(options = {}) {
|
|
@@ -497,3 +564,72 @@ function LocaleField(options = {}) {
|
|
|
497
564
|
function LocaleFieldOptional(options = {}) {
|
|
498
565
|
return (0, common_1.applyDecorators)((0, validator_decorators_1.IsEmptyable)(), LocaleField(Object.assign({ required: false }, options)));
|
|
499
566
|
}
|
|
567
|
+
// ========================================
|
|
568
|
+
// @Field - 元数据专用装饰器
|
|
569
|
+
// ========================================
|
|
570
|
+
/**
|
|
571
|
+
* @Field 装饰器
|
|
572
|
+
*
|
|
573
|
+
* 用于只需要元数据(Swagger、审计、UI配置)而不需要验证的字段
|
|
574
|
+
*
|
|
575
|
+
* @example
|
|
576
|
+
* // 只需要 Swagger 文档和审计元数据,不需要验证
|
|
577
|
+
* @Field({
|
|
578
|
+
* label: { zh: '备注', en: 'Remarks' },
|
|
579
|
+
* description: { zh: '用户备注信息', en: 'User remarks' },
|
|
580
|
+
* ui: { showInList: true, showInDetail: true },
|
|
581
|
+
* })
|
|
582
|
+
* remarks: string;
|
|
583
|
+
*/
|
|
584
|
+
function Field(options = {}) {
|
|
585
|
+
const decorators = [];
|
|
586
|
+
// 标准化选项
|
|
587
|
+
// 添加类型转换(仅用于序列化)
|
|
588
|
+
const fieldType = options.type || 'string';
|
|
589
|
+
switch (fieldType) {
|
|
590
|
+
case 'number':
|
|
591
|
+
decorators.push((0, class_transformer_1.Type)(() => Number));
|
|
592
|
+
break;
|
|
593
|
+
case 'boolean':
|
|
594
|
+
decorators.push((0, class_transformer_1.Type)(() => Boolean));
|
|
595
|
+
break;
|
|
596
|
+
case 'object':
|
|
597
|
+
decorators.push((0, class_transformer_1.Type)(() => Object));
|
|
598
|
+
break;
|
|
599
|
+
case 'array':
|
|
600
|
+
decorators.push((0, class_transformer_1.Type)(() => Array));
|
|
601
|
+
if (options.each)
|
|
602
|
+
decorators.push((0, transform_decorators_1.ToArray)());
|
|
603
|
+
break;
|
|
604
|
+
case 'string':
|
|
605
|
+
default:
|
|
606
|
+
decorators.push((0, class_transformer_1.Type)(() => String));
|
|
607
|
+
break;
|
|
608
|
+
}
|
|
609
|
+
// Swagger 文档
|
|
610
|
+
if (options.swagger !== false) {
|
|
611
|
+
const swaggerType = fieldType === 'array'
|
|
612
|
+
? String
|
|
613
|
+
: fieldType === 'object'
|
|
614
|
+
? Object
|
|
615
|
+
: fieldType === 'boolean'
|
|
616
|
+
? Boolean
|
|
617
|
+
: fieldType === 'number'
|
|
618
|
+
? Number
|
|
619
|
+
: String;
|
|
620
|
+
decorators.push((0, swagger_1.ApiProperty)(Object.assign({ type: swaggerType, isArray: fieldType === 'array' || options.each }, options)));
|
|
621
|
+
}
|
|
622
|
+
// 应用审计元数据
|
|
623
|
+
decorators.push(applyAuditMetadata(options));
|
|
624
|
+
// 应用验证元数据(用于错误消息)
|
|
625
|
+
decorators.push(applyValidationMetadata(options));
|
|
626
|
+
return (0, common_1.applyDecorators)(...decorators);
|
|
627
|
+
}
|
|
628
|
+
/**
|
|
629
|
+
* @FieldOptional 装饰器
|
|
630
|
+
*
|
|
631
|
+
* 可选的元数据专用字段
|
|
632
|
+
*/
|
|
633
|
+
function FieldOptional(options = {}) {
|
|
634
|
+
return (0, common_1.applyDecorators)((0, validator_decorators_1.IsEmptyable)(), Field(Object.assign({ required: false }, options)));
|
|
635
|
+
}
|
|
@@ -22,6 +22,7 @@ function ApiUUIDPropertyOptional(options = {}) {
|
|
|
22
22
|
return ApiUUIDProperty(Object.assign({ required: false }, options));
|
|
23
23
|
}
|
|
24
24
|
function ApiEnumProperty(getEnum, options = {}) {
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
26
|
const enumValue = getEnum();
|
|
26
27
|
options.description = (0, field_decorators_1.getEnumDescription)(enumValue);
|
|
27
28
|
return (0, swagger_1.ApiProperty)(Object.assign({ enum: enumValue, enumName: (0, utils_1.getVariableName)(getEnum) }, options));
|
|
@@ -3,5 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PublicRoute = exports.PUBLIC_ROUTE_KEY = void 0;
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
5
|
exports.PUBLIC_ROUTE_KEY = 'public_route';
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
6
7
|
const PublicRoute = (isPublic = false) => (0, common_1.SetMetadata)(exports.PUBLIC_ROUTE_KEY, isPublic);
|
|
7
8
|
exports.PublicRoute = PublicRoute;
|
|
@@ -1,8 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description trim spaces from start and end, replace multiple spaces with one.
|
|
3
|
+
* @example
|
|
4
|
+
* @ApiProperty()
|
|
5
|
+
* @IsString()
|
|
6
|
+
* @Trim()
|
|
7
|
+
* name: string;
|
|
8
|
+
* @returns PropertyDecorator
|
|
9
|
+
* @constructor
|
|
10
|
+
*/
|
|
1
11
|
export declare function Trim(): PropertyDecorator;
|
|
2
12
|
export declare function ToBoolean(): PropertyDecorator;
|
|
13
|
+
/**
|
|
14
|
+
* @description convert string or number to integer
|
|
15
|
+
* @example
|
|
16
|
+
* @IsNumber()
|
|
17
|
+
* @ToInt()
|
|
18
|
+
* name: number;
|
|
19
|
+
* @returns PropertyDecorator
|
|
20
|
+
* @constructor
|
|
21
|
+
*/
|
|
3
22
|
export declare function ToInt(): PropertyDecorator;
|
|
23
|
+
/**
|
|
24
|
+
* @description transforms to array, specially for query params
|
|
25
|
+
* @example
|
|
26
|
+
* @IsNumber()
|
|
27
|
+
* @ToArray()
|
|
28
|
+
* name: number;
|
|
29
|
+
* @constructor
|
|
30
|
+
*/
|
|
4
31
|
export declare function ToArray(): PropertyDecorator;
|
|
5
32
|
export declare function ToLowerCase(): PropertyDecorator;
|
|
6
33
|
export declare function ToUpperCase(): PropertyDecorator;
|
|
7
|
-
export declare function S3UrlParser(): PropertyDecorator;
|
|
8
|
-
export declare function PhoneNumberSerializer(): PropertyDecorator;
|
|
@@ -6,18 +6,26 @@ exports.ToInt = ToInt;
|
|
|
6
6
|
exports.ToArray = ToArray;
|
|
7
7
|
exports.ToLowerCase = ToLowerCase;
|
|
8
8
|
exports.ToUpperCase = ToUpperCase;
|
|
9
|
-
exports.S3UrlParser = S3UrlParser;
|
|
10
|
-
exports.PhoneNumberSerializer = PhoneNumberSerializer;
|
|
11
9
|
const class_transformer_1 = require("class-transformer");
|
|
12
|
-
const libphonenumber_js_1 = require("libphonenumber-js");
|
|
13
10
|
const lodash_1 = require("lodash");
|
|
14
|
-
|
|
11
|
+
/**
|
|
12
|
+
* @description trim spaces from start and end, replace multiple spaces with one.
|
|
13
|
+
* @example
|
|
14
|
+
* @ApiProperty()
|
|
15
|
+
* @IsString()
|
|
16
|
+
* @Trim()
|
|
17
|
+
* name: string;
|
|
18
|
+
* @returns PropertyDecorator
|
|
19
|
+
* @constructor
|
|
20
|
+
*/
|
|
15
21
|
function Trim() {
|
|
16
22
|
return (0, class_transformer_1.Transform)((params) => {
|
|
17
23
|
const value = params.value;
|
|
18
24
|
if ((0, lodash_1.isArray)(value)) {
|
|
25
|
+
// @ts-ignore
|
|
19
26
|
return (0, lodash_1.map)(value, (v) => (0, lodash_1.trim)(v).replaceAll(/\s\s+/g, ' '));
|
|
20
27
|
}
|
|
28
|
+
// @ts-ignore
|
|
21
29
|
return (0, lodash_1.trim)(value).replaceAll(/\s\s+/g, ' ');
|
|
22
30
|
});
|
|
23
31
|
}
|
|
@@ -36,12 +44,29 @@ function ToBoolean() {
|
|
|
36
44
|
}
|
|
37
45
|
}, { toClassOnly: true });
|
|
38
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* @description convert string or number to integer
|
|
49
|
+
* @example
|
|
50
|
+
* @IsNumber()
|
|
51
|
+
* @ToInt()
|
|
52
|
+
* name: number;
|
|
53
|
+
* @returns PropertyDecorator
|
|
54
|
+
* @constructor
|
|
55
|
+
*/
|
|
39
56
|
function ToInt() {
|
|
40
57
|
return (0, class_transformer_1.Transform)((params) => {
|
|
41
58
|
const value = params.value;
|
|
42
59
|
return Number.parseInt(value, 10);
|
|
43
60
|
}, { toClassOnly: true });
|
|
44
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* @description transforms to array, specially for query params
|
|
64
|
+
* @example
|
|
65
|
+
* @IsNumber()
|
|
66
|
+
* @ToArray()
|
|
67
|
+
* name: number;
|
|
68
|
+
* @constructor
|
|
69
|
+
*/
|
|
45
70
|
function ToArray() {
|
|
46
71
|
return (0, class_transformer_1.Transform)((params) => {
|
|
47
72
|
const value = params.value;
|
|
@@ -79,22 +104,3 @@ function ToUpperCase() {
|
|
|
79
104
|
toClassOnly: true,
|
|
80
105
|
});
|
|
81
106
|
}
|
|
82
|
-
function S3UrlParser() {
|
|
83
|
-
return (0, class_transformer_1.Transform)((params) => {
|
|
84
|
-
const key = params.value;
|
|
85
|
-
switch (params.type) {
|
|
86
|
-
case class_transformer_1.TransformationType.CLASS_TO_PLAIN: {
|
|
87
|
-
return providers_1.GeneratorProvider.getS3PublicUrl(key);
|
|
88
|
-
}
|
|
89
|
-
case class_transformer_1.TransformationType.PLAIN_TO_CLASS: {
|
|
90
|
-
return providers_1.GeneratorProvider.getS3Key(key);
|
|
91
|
-
}
|
|
92
|
-
default: {
|
|
93
|
-
return key;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
function PhoneNumberSerializer() {
|
|
99
|
-
return (0, class_transformer_1.Transform)((params) => (0, libphonenumber_js_1.parsePhoneNumber)(params.value).number);
|
|
100
|
-
}
|
|
@@ -5,6 +5,7 @@ exports.StaticTranslate = StaticTranslate;
|
|
|
5
5
|
exports.DynamicTranslate = DynamicTranslate;
|
|
6
6
|
exports.STATIC_TRANSLATION_DECORATOR_KEY = 'custom:static-translate';
|
|
7
7
|
exports.DYNAMIC_TRANSLATION_DECORATOR_KEY = 'custom:dynamic-translate';
|
|
8
|
+
// FIXME: This is a temporary solution to get the translation decorator working.
|
|
8
9
|
function StaticTranslate(data = {}) {
|
|
9
10
|
return (target, key) => {
|
|
10
11
|
Reflect.defineMetadata(exports.STATIC_TRANSLATION_DECORATOR_KEY, data, target, key);
|
|
@@ -14,6 +14,7 @@ function getOmniAuthData(request, key) {
|
|
|
14
14
|
const headers = request.headers;
|
|
15
15
|
let user;
|
|
16
16
|
const configService = new config_1.ConfigService(request);
|
|
17
|
+
// 未通过网关透传用户信息且处于local开发环境,则从配置获取用户信息
|
|
17
18
|
if ((0, lodash_1.isEmpty)(headers['x-user-id']) && (0, lodash_1.isEmpty)(headers['x-app-id'])) {
|
|
18
19
|
if (process.env.NODE_ENV === 'dev' || process.env.MOCK_ENABLED === 'true') {
|
|
19
20
|
user = {
|
|
@@ -1,18 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export
|
|
8
|
-
export
|
|
9
|
-
export declare function IsEmptyable(options?: ValidationOptions): PropertyDecorator;
|
|
10
|
-
export declare function IsNullable(options?: ValidationOptions): PropertyDecorator;
|
|
11
|
-
export declare function IsHttpUrl(validationOptions?: ValidationOptions): (object: any, propertyName: string) => void;
|
|
12
|
-
export declare class AtLeastOneFieldConstraint implements ValidatorConstraintInterface {
|
|
13
|
-
validate(value: any, args: ValidationArguments): boolean;
|
|
14
|
-
defaultMessage(args: ValidationArguments): string;
|
|
15
|
-
}
|
|
16
|
-
export declare function AtLeastOneField(properties: string[], validationOptions?: ValidationOptions): PropertyDecorator;
|
|
17
|
-
export declare function CustomValidation<T = any>(validationCallback: (value: T, args: ValidationArguments) => boolean | Promise<boolean>, validationOptions?: ValidationOptions): PropertyDecorator;
|
|
18
|
-
export declare function CustomValidationMethod(methodName: string, validationOptions?: ValidationOptions): PropertyDecorator;
|
|
1
|
+
/**
|
|
2
|
+
* Validator decorators
|
|
3
|
+
*
|
|
4
|
+
* 所有验证装饰器已迁移到 validators 目录
|
|
5
|
+
* 此文件仅用于重新导出,保持导入路径的一致性
|
|
6
|
+
*/
|
|
7
|
+
export * from '../validators/common-validators';
|
|
8
|
+
export * from '../validators/custom-validate.validator';
|
|
@@ -1,193 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.AtLeastOneFieldConstraint = void 0;
|
|
19
|
-
exports.IsPassword = IsPassword;
|
|
20
|
-
exports.IsPhoneNumber = IsPhoneNumber;
|
|
21
|
-
exports.IsTmpKey = IsTmpKey;
|
|
22
|
-
exports.IsUndefinable = IsUndefinable;
|
|
23
|
-
exports.IsEmptyable = IsEmptyable;
|
|
24
|
-
exports.IsNullable = IsNullable;
|
|
25
|
-
exports.IsHttpUrl = IsHttpUrl;
|
|
26
|
-
exports.AtLeastOneField = AtLeastOneField;
|
|
27
|
-
exports.CustomValidation = CustomValidation;
|
|
28
|
-
exports.CustomValidationMethod = CustomValidationMethod;
|
|
29
|
-
const class_validator_1 = require("class-validator");
|
|
30
|
-
const lodash_1 = require("lodash");
|
|
31
|
-
const nestjs_i18n_1 = require("nestjs-i18n");
|
|
32
|
-
function IsPassword(validationOptions) {
|
|
33
|
-
return (object, propertyName) => {
|
|
34
|
-
(0, class_validator_1.registerDecorator)({
|
|
35
|
-
propertyName,
|
|
36
|
-
name: 'isPassword',
|
|
37
|
-
target: object.constructor,
|
|
38
|
-
constraints: [],
|
|
39
|
-
options: validationOptions,
|
|
40
|
-
validator: {
|
|
41
|
-
validate(value) {
|
|
42
|
-
return /^[\d!#$%&*@A-Z^a-z]*$/.test(value);
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
function IsPhoneNumber(validationOptions) {
|
|
49
|
-
return (0, class_validator_1.IsPhoneNumber)(validationOptions === null || validationOptions === void 0 ? void 0 : validationOptions.region, Object.assign({ message: 'error.phoneNumber' }, validationOptions));
|
|
50
|
-
}
|
|
51
|
-
function IsTmpKey(validationOptions) {
|
|
52
|
-
return (object, propertyName) => {
|
|
53
|
-
(0, class_validator_1.registerDecorator)({
|
|
54
|
-
propertyName,
|
|
55
|
-
name: 'tmpKey',
|
|
56
|
-
target: object.constructor,
|
|
57
|
-
options: validationOptions,
|
|
58
|
-
validator: {
|
|
59
|
-
validate(value) {
|
|
60
|
-
return (0, lodash_1.isString)(value) && /^tmp\//.test(value);
|
|
61
|
-
},
|
|
62
|
-
defaultMessage() {
|
|
63
|
-
return 'error.invalidTmpKey';
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
|
-
});
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
function IsUndefinable(options) {
|
|
70
|
-
return (0, class_validator_1.ValidateIf)((obj, value) => value !== undefined, options);
|
|
71
|
-
}
|
|
72
|
-
function IsEmptyable(options) {
|
|
73
|
-
return (0, class_validator_1.ValidateIf)((obj, value) => !(value === null ||
|
|
74
|
-
value === undefined ||
|
|
75
|
-
((0, lodash_1.isString)(value) && value.trim() === '')), options);
|
|
76
|
-
}
|
|
77
|
-
function IsNullable(options) {
|
|
78
|
-
return (0, class_validator_1.ValidateIf)((obj, value) => value !== null, options);
|
|
79
|
-
}
|
|
80
|
-
function IsHttpUrl(validationOptions) {
|
|
81
|
-
return function (object, propertyName) {
|
|
82
|
-
(0, class_validator_1.registerDecorator)({
|
|
83
|
-
name: 'isHttpUrl',
|
|
84
|
-
target: object.constructor,
|
|
85
|
-
propertyName: propertyName,
|
|
86
|
-
options: validationOptions,
|
|
87
|
-
validator: {
|
|
88
|
-
validate(value) {
|
|
89
|
-
const httpUrlPattern = /^(https?:\/\/)/i;
|
|
90
|
-
return typeof value === 'string' && httpUrlPattern.test(value);
|
|
91
|
-
},
|
|
92
|
-
defaultMessage() {
|
|
93
|
-
return 'URL must start with http:// or https://';
|
|
94
|
-
},
|
|
95
|
-
},
|
|
96
|
-
});
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
let AtLeastOneFieldConstraint = class AtLeastOneFieldConstraint {
|
|
100
|
-
validate(value, args) {
|
|
101
|
-
const object = args.object;
|
|
102
|
-
const [requiredProperties] = args.constraints;
|
|
103
|
-
return requiredProperties.some((property) => {
|
|
104
|
-
const propValue = object[property];
|
|
105
|
-
return (propValue !== null &&
|
|
106
|
-
propValue !== undefined &&
|
|
107
|
-
propValue !== '' &&
|
|
108
|
-
!(Array.isArray(propValue) && propValue.length === 0));
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
defaultMessage(args) {
|
|
112
|
-
const [requiredProperties] = args.constraints;
|
|
113
|
-
return `At least one of the following fields must be provided: ${requiredProperties.join(', ')}`;
|
|
2
|
+
/**
|
|
3
|
+
* Validator decorators
|
|
4
|
+
*
|
|
5
|
+
* 所有验证装饰器已迁移到 validators 目录
|
|
6
|
+
* 此文件仅用于重新导出,保持导入路径的一致性
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
114
13
|
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
20
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
115
21
|
};
|
|
116
|
-
exports
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
function AtLeastOneField(properties, validationOptions) {
|
|
121
|
-
return function (object, propertyName) {
|
|
122
|
-
(0, class_validator_1.registerDecorator)({
|
|
123
|
-
target: object.constructor,
|
|
124
|
-
propertyName: propertyName,
|
|
125
|
-
options: Object.assign({ message: (0, nestjs_i18n_1.i18nValidationMessage)('validation.AT_LEAST_ONE_FIELD', {
|
|
126
|
-
properties: properties.join(', '),
|
|
127
|
-
}) }, validationOptions),
|
|
128
|
-
constraints: [properties],
|
|
129
|
-
validator: AtLeastOneFieldConstraint,
|
|
130
|
-
});
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
function CustomValidation(validationCallback, validationOptions) {
|
|
134
|
-
return function (object, propertyName) {
|
|
135
|
-
(0, class_validator_1.registerDecorator)({
|
|
136
|
-
name: 'customValidation',
|
|
137
|
-
target: object.constructor,
|
|
138
|
-
propertyName,
|
|
139
|
-
options: Object.assign({ message: (0, nestjs_i18n_1.i18nValidationMessage)('validation.CUSTOM_VALIDATION') }, validationOptions),
|
|
140
|
-
validator: {
|
|
141
|
-
validate(value, args) {
|
|
142
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
143
|
-
try {
|
|
144
|
-
return yield validationCallback(value, args);
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
console.error('CustomValidation error:', error);
|
|
148
|
-
return false;
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
},
|
|
152
|
-
defaultMessage(args) {
|
|
153
|
-
return `Validation failed for ${args.property}`;
|
|
154
|
-
},
|
|
155
|
-
},
|
|
156
|
-
});
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
function CustomValidationMethod(methodName, validationOptions) {
|
|
160
|
-
return function (object, propertyName) {
|
|
161
|
-
(0, class_validator_1.registerDecorator)({
|
|
162
|
-
name: 'customValidationMethod',
|
|
163
|
-
target: object.constructor,
|
|
164
|
-
propertyName,
|
|
165
|
-
constraints: [methodName],
|
|
166
|
-
options: Object.assign({ message: (0, nestjs_i18n_1.i18nValidationMessage)('validation.CUSTOM_VALIDATION_METHOD') }, validationOptions),
|
|
167
|
-
validator: {
|
|
168
|
-
validate(value, args) {
|
|
169
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
170
|
-
const [method] = args.constraints;
|
|
171
|
-
const object = args.object;
|
|
172
|
-
if (typeof object[method] !== 'function') {
|
|
173
|
-
console.error(`CustomValidationMethod: Method '${method}' not found on object`);
|
|
174
|
-
return false;
|
|
175
|
-
}
|
|
176
|
-
try {
|
|
177
|
-
const result = yield object[method](value, args);
|
|
178
|
-
return Boolean(result);
|
|
179
|
-
}
|
|
180
|
-
catch (error) {
|
|
181
|
-
console.error(`CustomValidationMethod error in '${method}':`, error);
|
|
182
|
-
return false;
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
},
|
|
186
|
-
defaultMessage(args) {
|
|
187
|
-
const [method] = args.constraints;
|
|
188
|
-
return `Validation failed for ${args.property} using method ${method}`;
|
|
189
|
-
},
|
|
190
|
-
},
|
|
191
|
-
});
|
|
192
|
-
};
|
|
193
|
-
}
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
// 重新导出所有验证装饰器
|
|
24
|
+
__exportStar(require("../validators/common-validators"), exports);
|
|
25
|
+
__exportStar(require("../validators/custom-validate.validator"), exports);
|