@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
|
@@ -1,2 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache constants and injection tokens
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Injection token for cache compression enabled flag
|
|
6
|
+
*/
|
|
1
7
|
export declare const CACHE_COMPRESSION_ENABLED: unique symbol;
|
|
8
|
+
/**
|
|
9
|
+
* Injection token for cache compression threshold
|
|
10
|
+
*/
|
|
2
11
|
export declare const CACHE_COMPRESSION_THRESHOLD: unique symbol;
|
package/cache/cache.constants.js
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Cache constants and injection tokens
|
|
4
|
+
*/
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.CACHE_COMPRESSION_THRESHOLD = exports.CACHE_COMPRESSION_ENABLED = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Injection token for cache compression enabled flag
|
|
9
|
+
*/
|
|
4
10
|
exports.CACHE_COMPRESSION_ENABLED = Symbol('CACHE_COMPRESSION_ENABLED');
|
|
11
|
+
/**
|
|
12
|
+
* Injection token for cache compression threshold
|
|
13
|
+
*/
|
|
5
14
|
exports.CACHE_COMPRESSION_THRESHOLD = Symbol('CACHE_COMPRESSION_THRESHOLD');
|
package/cache/cache.health.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { CacheService } from './cache.service';
|
|
2
|
+
/**
|
|
3
|
+
* Cache health check result
|
|
4
|
+
*/
|
|
2
5
|
export interface CacheHealthResult {
|
|
3
6
|
status: 'healthy' | 'degraded' | 'unhealthy';
|
|
4
7
|
layers: {
|
|
@@ -22,14 +25,37 @@ export interface CacheHealthResult {
|
|
|
22
25
|
timestamp: Date;
|
|
23
26
|
overallLatency: number;
|
|
24
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Cache health checker
|
|
30
|
+
*
|
|
31
|
+
* Provides health monitoring for all cache layers
|
|
32
|
+
*/
|
|
25
33
|
export declare class CacheHealthChecker {
|
|
26
34
|
private readonly cacheService;
|
|
27
35
|
private readonly logger;
|
|
28
36
|
constructor(cacheService: CacheService);
|
|
37
|
+
/**
|
|
38
|
+
* Check health of all cache layers
|
|
39
|
+
*/
|
|
29
40
|
checkHealth(): Promise<CacheHealthResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Get detailed cache statistics
|
|
43
|
+
*/
|
|
30
44
|
getDetailedStats(): Promise<any>;
|
|
45
|
+
/**
|
|
46
|
+
* Check CLS cache health
|
|
47
|
+
*/
|
|
31
48
|
private checkClsHealth;
|
|
49
|
+
/**
|
|
50
|
+
* Check Memory cache health
|
|
51
|
+
*/
|
|
32
52
|
private checkMemoryHealth;
|
|
53
|
+
/**
|
|
54
|
+
* Check Redis cache health
|
|
55
|
+
*/
|
|
33
56
|
private checkRedisHealth;
|
|
57
|
+
/**
|
|
58
|
+
* Generate recommendations based on health and stats
|
|
59
|
+
*/
|
|
34
60
|
private generateRecommendations;
|
|
35
61
|
}
|
package/cache/cache.health.js
CHANGED
|
@@ -23,11 +23,19 @@ exports.CacheHealthChecker = void 0;
|
|
|
23
23
|
const common_1 = require("@nestjs/common");
|
|
24
24
|
const cache_service_1 = require("./cache.service");
|
|
25
25
|
const cache_options_interface_1 = require("./interfaces/cache-options.interface");
|
|
26
|
+
/**
|
|
27
|
+
* Cache health checker
|
|
28
|
+
*
|
|
29
|
+
* Provides health monitoring for all cache layers
|
|
30
|
+
*/
|
|
26
31
|
let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
|
|
27
32
|
constructor(cacheService) {
|
|
28
33
|
this.cacheService = cacheService;
|
|
29
34
|
this.logger = new common_1.Logger(CacheHealthChecker_1.name);
|
|
30
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Check health of all cache layers
|
|
38
|
+
*/
|
|
31
39
|
checkHealth() {
|
|
32
40
|
return __awaiter(this, void 0, void 0, function* () {
|
|
33
41
|
const startTime = Date.now();
|
|
@@ -37,6 +45,7 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
|
|
|
37
45
|
redis: yield this.checkRedisHealth(),
|
|
38
46
|
};
|
|
39
47
|
const overallLatency = Date.now() - startTime;
|
|
48
|
+
// Determine overall status
|
|
40
49
|
const layerStatuses = Object.values(results);
|
|
41
50
|
const healthyCount = layerStatuses.filter((layer) => layer.available).length;
|
|
42
51
|
const totalCount = layerStatuses.length;
|
|
@@ -58,6 +67,9 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
|
|
|
58
67
|
};
|
|
59
68
|
});
|
|
60
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Get detailed cache statistics
|
|
72
|
+
*/
|
|
61
73
|
getDetailedStats() {
|
|
62
74
|
return __awaiter(this, void 0, void 0, function* () {
|
|
63
75
|
const stats = this.cacheService.getStats();
|
|
@@ -69,10 +81,14 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
|
|
|
69
81
|
};
|
|
70
82
|
});
|
|
71
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Check CLS cache health
|
|
86
|
+
*/
|
|
72
87
|
checkClsHealth() {
|
|
73
88
|
return __awaiter(this, void 0, void 0, function* () {
|
|
74
89
|
const startTime = Date.now();
|
|
75
90
|
try {
|
|
91
|
+
// Try to write and read a test value
|
|
76
92
|
yield this.cacheService.set('health:cls:test', 'test-value', {
|
|
77
93
|
layers: [cache_options_interface_1.CacheLayer.CLS],
|
|
78
94
|
});
|
|
@@ -101,10 +117,14 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
|
|
|
101
117
|
}
|
|
102
118
|
});
|
|
103
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Check Memory cache health
|
|
122
|
+
*/
|
|
104
123
|
checkMemoryHealth() {
|
|
105
124
|
return __awaiter(this, void 0, void 0, function* () {
|
|
106
125
|
const startTime = Date.now();
|
|
107
126
|
try {
|
|
127
|
+
// Try to write and read a test value
|
|
108
128
|
yield this.cacheService.set('health:memory:test', 'test-value', {
|
|
109
129
|
layers: [cache_options_interface_1.CacheLayer.MEMORY],
|
|
110
130
|
});
|
|
@@ -113,6 +133,7 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
|
|
|
113
133
|
});
|
|
114
134
|
const latency = Date.now() - startTime;
|
|
115
135
|
if (result === 'test-value') {
|
|
136
|
+
// Get memory cache size (if available)
|
|
116
137
|
const stats = this.cacheService.getStats();
|
|
117
138
|
return { available: true, latency, size: stats.totalSets };
|
|
118
139
|
}
|
|
@@ -134,10 +155,14 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
|
|
|
134
155
|
}
|
|
135
156
|
});
|
|
136
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Check Redis cache health
|
|
160
|
+
*/
|
|
137
161
|
checkRedisHealth() {
|
|
138
162
|
return __awaiter(this, void 0, void 0, function* () {
|
|
139
163
|
const startTime = Date.now();
|
|
140
164
|
try {
|
|
165
|
+
// Try to write and read a test value
|
|
141
166
|
yield this.cacheService.set('health:redis:test', 'test-value', {
|
|
142
167
|
layers: [cache_options_interface_1.CacheLayer.REDIS],
|
|
143
168
|
});
|
|
@@ -166,8 +191,12 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
|
|
|
166
191
|
}
|
|
167
192
|
});
|
|
168
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Generate recommendations based on health and stats
|
|
196
|
+
*/
|
|
169
197
|
generateRecommendations(health, stats) {
|
|
170
198
|
const recommendations = [];
|
|
199
|
+
// Health-based recommendations
|
|
171
200
|
if (!health.layers.redis.available) {
|
|
172
201
|
recommendations.push('Redis is unavailable. Check Redis connection and configuration.');
|
|
173
202
|
}
|
|
@@ -177,6 +206,7 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
|
|
|
177
206
|
if (health.overallLatency > 100) {
|
|
178
207
|
recommendations.push('Cache latency is high. Consider optimizing cache operations or increasing resources.');
|
|
179
208
|
}
|
|
209
|
+
// Statistics-based recommendations
|
|
180
210
|
if (stats.hitRate < 0.5) {
|
|
181
211
|
recommendations.push('Cache hit rate is low. Review cache TTL and key patterns.');
|
|
182
212
|
}
|
package/cache/cache.module.d.ts
CHANGED
|
@@ -1,21 +1,106 @@
|
|
|
1
1
|
import { DynamicModule, OnModuleInit } from '@nestjs/common';
|
|
2
|
-
import type { DataSource } from 'typeorm';
|
|
3
2
|
import type { Redis } from 'ioredis';
|
|
4
3
|
import { CacheService } from './cache.service';
|
|
4
|
+
/**
|
|
5
|
+
* Injection token for CacheService
|
|
6
|
+
*/
|
|
5
7
|
export declare const CACHE_SERVICE: unique symbol;
|
|
8
|
+
/**
|
|
9
|
+
* Cache module configuration options
|
|
10
|
+
*/
|
|
6
11
|
export interface CacheModuleOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Whether to make the module global
|
|
14
|
+
* @default true
|
|
15
|
+
*/
|
|
7
16
|
isGlobal?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Redis client instance (optional)
|
|
19
|
+
* If not provided, Redis caching will be disabled
|
|
20
|
+
*/
|
|
8
21
|
redisClient?: Redis;
|
|
9
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Default TTL for LRU cache in milliseconds
|
|
24
|
+
*/
|
|
10
25
|
memoryTtl?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Namespace for LRU cache
|
|
28
|
+
*/
|
|
11
29
|
memoryNamespace?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Max size for LRU cache
|
|
32
|
+
* @default 500
|
|
33
|
+
*/
|
|
34
|
+
lruMaxSize?: number;
|
|
35
|
+
/**
|
|
36
|
+
* Enable compression for cache values
|
|
37
|
+
* @default false
|
|
38
|
+
*/
|
|
12
39
|
enableCompression?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Compression threshold in bytes
|
|
42
|
+
* @default 1024
|
|
43
|
+
*/
|
|
13
44
|
compressionThreshold?: number;
|
|
14
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Unified cache module with three-tier architecture
|
|
48
|
+
*
|
|
49
|
+
* Provides CacheService and cache decorators (@Cacheable, @CacheEvict, @CachePut)
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* // Basic usage (without Redis)
|
|
54
|
+
* @Module({
|
|
55
|
+
* imports: [
|
|
56
|
+
* CacheModule.forRoot()
|
|
57
|
+
* ]
|
|
58
|
+
* })
|
|
59
|
+
* export class AppModule {}
|
|
60
|
+
*
|
|
61
|
+
* // With Redis
|
|
62
|
+
* import { RedisModule } from '@songkeys/nestjs-redis';
|
|
63
|
+
*
|
|
64
|
+
* @Module({
|
|
65
|
+
* imports: [
|
|
66
|
+
* RedisModule.forRoot({ ... }),
|
|
67
|
+
* CacheModule.forRootAsync({
|
|
68
|
+
* imports: [RedisModule],
|
|
69
|
+
* inject: [RedisService],
|
|
70
|
+
* useFactory: (redisService: RedisService) => ({
|
|
71
|
+
* redisClient: redisService.getClient()
|
|
72
|
+
* })
|
|
73
|
+
* })
|
|
74
|
+
* ]
|
|
75
|
+
* })
|
|
76
|
+
* export class AppModule {}
|
|
77
|
+
*
|
|
78
|
+
* // With TypeORM DataSource for DbDependency
|
|
79
|
+
* @Module({
|
|
80
|
+
* imports: [
|
|
81
|
+
* TypeOrmModule.forRoot({ ... }),
|
|
82
|
+
* CacheModule.forRootAsync({
|
|
83
|
+
* imports: [TypeOrmModule],
|
|
84
|
+
* inject: [DataSource],
|
|
85
|
+
* useFactory: (dataSource: DataSource) => ({
|
|
86
|
+
* dataSource
|
|
87
|
+
* })
|
|
88
|
+
* })
|
|
89
|
+
* ]
|
|
90
|
+
* })
|
|
91
|
+
* export class AppModule {}
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
15
94
|
export declare class CacheModule implements OnModuleInit {
|
|
16
95
|
private readonly cacheService;
|
|
17
96
|
constructor(cacheService: CacheService);
|
|
97
|
+
/**
|
|
98
|
+
* Register cache module with options
|
|
99
|
+
*/
|
|
18
100
|
static forRoot(options?: CacheModuleOptions): DynamicModule;
|
|
101
|
+
/**
|
|
102
|
+
* Register cache module asynchronously
|
|
103
|
+
*/
|
|
19
104
|
static forRootAsync(options: {
|
|
20
105
|
imports?: any[];
|
|
21
106
|
inject?: any[];
|
package/cache/cache.module.js
CHANGED
|
@@ -20,28 +20,86 @@ const dependencies_1 = require("./dependencies");
|
|
|
20
20
|
const decorators_1 = require("./decorators");
|
|
21
21
|
const providers_1 = require("./providers");
|
|
22
22
|
const cache_constants_1 = require("./cache.constants");
|
|
23
|
+
/**
|
|
24
|
+
* Injection token for CacheService
|
|
25
|
+
*/
|
|
23
26
|
exports.CACHE_SERVICE = Symbol('CACHE_SERVICE');
|
|
27
|
+
/**
|
|
28
|
+
* Unified cache module with three-tier architecture
|
|
29
|
+
*
|
|
30
|
+
* Provides CacheService and cache decorators (@Cacheable, @CacheEvict, @CachePut)
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* // Basic usage (without Redis)
|
|
35
|
+
* @Module({
|
|
36
|
+
* imports: [
|
|
37
|
+
* CacheModule.forRoot()
|
|
38
|
+
* ]
|
|
39
|
+
* })
|
|
40
|
+
* export class AppModule {}
|
|
41
|
+
*
|
|
42
|
+
* // With Redis
|
|
43
|
+
* import { RedisModule } from '@songkeys/nestjs-redis';
|
|
44
|
+
*
|
|
45
|
+
* @Module({
|
|
46
|
+
* imports: [
|
|
47
|
+
* RedisModule.forRoot({ ... }),
|
|
48
|
+
* CacheModule.forRootAsync({
|
|
49
|
+
* imports: [RedisModule],
|
|
50
|
+
* inject: [RedisService],
|
|
51
|
+
* useFactory: (redisService: RedisService) => ({
|
|
52
|
+
* redisClient: redisService.getClient()
|
|
53
|
+
* })
|
|
54
|
+
* })
|
|
55
|
+
* ]
|
|
56
|
+
* })
|
|
57
|
+
* export class AppModule {}
|
|
58
|
+
*
|
|
59
|
+
* // With TypeORM DataSource for DbDependency
|
|
60
|
+
* @Module({
|
|
61
|
+
* imports: [
|
|
62
|
+
* TypeOrmModule.forRoot({ ... }),
|
|
63
|
+
* CacheModule.forRootAsync({
|
|
64
|
+
* imports: [TypeOrmModule],
|
|
65
|
+
* inject: [DataSource],
|
|
66
|
+
* useFactory: (dataSource: DataSource) => ({
|
|
67
|
+
* dataSource
|
|
68
|
+
* })
|
|
69
|
+
* })
|
|
70
|
+
* ]
|
|
71
|
+
* })
|
|
72
|
+
* export class AppModule {}
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
24
75
|
let CacheModule = CacheModule_1 = class CacheModule {
|
|
25
76
|
constructor(cacheService) {
|
|
26
77
|
this.cacheService = cacheService;
|
|
27
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Register cache module with options
|
|
81
|
+
*/
|
|
28
82
|
static forRoot(options = {}) {
|
|
29
|
-
const { isGlobal = true, redisClient,
|
|
30
|
-
|
|
31
|
-
|
|
83
|
+
const { isGlobal = true, redisClient, memoryTtl, memoryNamespace, lruMaxSize = 500, enableCompression = false, compressionThreshold = 1024, } = options;
|
|
84
|
+
// Set Redis client for TagDependency for distributed tag support
|
|
85
|
+
if (redisClient) {
|
|
86
|
+
dependencies_1.TagDependency.setRedisClient(redisClient);
|
|
32
87
|
}
|
|
33
88
|
return {
|
|
34
89
|
module: CacheModule_1,
|
|
35
90
|
global: isGlobal,
|
|
36
91
|
providers: [
|
|
92
|
+
// Providers
|
|
37
93
|
providers_1.ClsCacheProvider,
|
|
38
94
|
{
|
|
39
|
-
provide: providers_1.
|
|
40
|
-
useValue: new providers_1.
|
|
95
|
+
provide: providers_1.LRUCacheProvider,
|
|
96
|
+
useValue: new providers_1.LRUCacheProvider({
|
|
97
|
+
maxSize: lruMaxSize,
|
|
41
98
|
ttl: memoryTtl,
|
|
42
|
-
namespace: memoryNamespace,
|
|
99
|
+
namespace: memoryNamespace || 'cache:lru',
|
|
43
100
|
}),
|
|
44
101
|
},
|
|
102
|
+
// Redis client provider (optional)
|
|
45
103
|
...(redisClient
|
|
46
104
|
? [
|
|
47
105
|
{
|
|
@@ -51,6 +109,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
51
109
|
]
|
|
52
110
|
: []),
|
|
53
111
|
providers_1.RedisCacheProvider,
|
|
112
|
+
// Compression configuration providers
|
|
54
113
|
{
|
|
55
114
|
provide: cache_constants_1.CACHE_COMPRESSION_ENABLED,
|
|
56
115
|
useValue: enableCompression,
|
|
@@ -59,12 +118,14 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
59
118
|
provide: cache_constants_1.CACHE_COMPRESSION_THRESHOLD,
|
|
60
119
|
useValue: compressionThreshold,
|
|
61
120
|
},
|
|
121
|
+
// Additional services
|
|
62
122
|
cache_warmup_service_1.CacheWarmupService,
|
|
63
123
|
cache_metrics_service_1.CacheMetricsService,
|
|
64
124
|
{
|
|
65
125
|
provide: cache_serialization_service_1.CacheSerializationService,
|
|
66
126
|
useFactory: () => new cache_serialization_service_1.CacheSerializationService(),
|
|
67
127
|
},
|
|
128
|
+
// CacheService
|
|
68
129
|
{
|
|
69
130
|
provide: exports.CACHE_SERVICE,
|
|
70
131
|
useClass: cache_service_1.CacheService,
|
|
@@ -80,6 +141,9 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
80
141
|
],
|
|
81
142
|
};
|
|
82
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Register cache module asynchronously
|
|
146
|
+
*/
|
|
83
147
|
static forRootAsync(options) {
|
|
84
148
|
var _a;
|
|
85
149
|
return {
|
|
@@ -87,37 +151,44 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
87
151
|
global: (_a = options.isGlobal) !== null && _a !== void 0 ? _a : true,
|
|
88
152
|
imports: options.imports || [],
|
|
89
153
|
providers: [
|
|
154
|
+
// Async options provider
|
|
90
155
|
{
|
|
91
156
|
provide: 'CACHE_MODULE_OPTIONS',
|
|
92
157
|
useFactory: options.useFactory,
|
|
93
158
|
inject: options.inject || [],
|
|
94
159
|
},
|
|
160
|
+
// Providers
|
|
95
161
|
providers_1.ClsCacheProvider,
|
|
96
162
|
{
|
|
97
|
-
provide: providers_1.
|
|
163
|
+
provide: providers_1.LRUCacheProvider,
|
|
98
164
|
useFactory: (moduleOptions) => {
|
|
99
|
-
|
|
100
|
-
|
|
165
|
+
// Set Redis client for TagDependency for distributed tag support
|
|
166
|
+
if (moduleOptions.redisClient) {
|
|
167
|
+
dependencies_1.TagDependency.setRedisClient(moduleOptions.redisClient);
|
|
101
168
|
}
|
|
102
|
-
return new providers_1.
|
|
169
|
+
return new providers_1.LRUCacheProvider({
|
|
170
|
+
maxSize: moduleOptions.lruMaxSize || 500,
|
|
103
171
|
ttl: moduleOptions.memoryTtl,
|
|
104
|
-
namespace: moduleOptions.memoryNamespace,
|
|
172
|
+
namespace: moduleOptions.memoryNamespace || 'cache:lru',
|
|
105
173
|
});
|
|
106
174
|
},
|
|
107
175
|
inject: ['CACHE_MODULE_OPTIONS'],
|
|
108
176
|
},
|
|
177
|
+
// Redis client provider (optional)
|
|
109
178
|
{
|
|
110
179
|
provide: providers_1.REDIS_CLIENT,
|
|
111
180
|
useFactory: (moduleOptions) => moduleOptions.redisClient,
|
|
112
181
|
inject: ['CACHE_MODULE_OPTIONS'],
|
|
113
182
|
},
|
|
114
183
|
providers_1.RedisCacheProvider,
|
|
184
|
+
// Additional services
|
|
115
185
|
cache_warmup_service_1.CacheWarmupService,
|
|
116
186
|
cache_metrics_service_1.CacheMetricsService,
|
|
117
187
|
{
|
|
118
188
|
provide: cache_serialization_service_1.CacheSerializationService,
|
|
119
189
|
useFactory: () => new cache_serialization_service_1.CacheSerializationService(),
|
|
120
190
|
},
|
|
191
|
+
// Compression configuration providers
|
|
121
192
|
{
|
|
122
193
|
provide: cache_constants_1.CACHE_COMPRESSION_ENABLED,
|
|
123
194
|
useFactory: (moduleOptions) => moduleOptions.enableCompression || false,
|
|
@@ -128,6 +199,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
128
199
|
useFactory: (moduleOptions) => moduleOptions.compressionThreshold || 1024,
|
|
129
200
|
inject: ['CACHE_MODULE_OPTIONS'],
|
|
130
201
|
},
|
|
202
|
+
// CacheService
|
|
131
203
|
{
|
|
132
204
|
provide: exports.CACHE_SERVICE,
|
|
133
205
|
useClass: cache_service_1.CacheService,
|
|
@@ -144,6 +216,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
144
216
|
};
|
|
145
217
|
}
|
|
146
218
|
onModuleInit() {
|
|
219
|
+
// Set global cache service for decorators
|
|
147
220
|
(0, decorators_1.setCacheService)(this.cacheService);
|
|
148
221
|
}
|
|
149
222
|
};
|
package/cache/cache.service.d.ts
CHANGED
|
@@ -1,37 +1,177 @@
|
|
|
1
1
|
import type { CacheOptions, CacheStats } from './interfaces';
|
|
2
2
|
import { CacheLayer } from './interfaces';
|
|
3
|
-
import { ClsCacheProvider,
|
|
3
|
+
import { ClsCacheProvider, LRUCacheProvider, RedisCacheProvider } from './providers';
|
|
4
|
+
/**
|
|
5
|
+
* Unified cache service with three-tier architecture
|
|
6
|
+
*
|
|
7
|
+
* L1: CLS (request-level)
|
|
8
|
+
* L2: LRU (process-level with automatic eviction)
|
|
9
|
+
* L3: Redis (distributed)
|
|
10
|
+
*
|
|
11
|
+
* Supports automatic fallback, backfill, and dependency-based invalidation.
|
|
12
|
+
*/
|
|
4
13
|
export declare class CacheService {
|
|
5
14
|
private readonly clsProvider;
|
|
6
|
-
private readonly
|
|
15
|
+
private readonly lruProvider;
|
|
7
16
|
private readonly redisProvider;
|
|
8
17
|
private readonly enableCompression;
|
|
9
18
|
private readonly compressionThreshold;
|
|
10
19
|
private readonly logger;
|
|
11
20
|
private readonly providers;
|
|
12
21
|
private readonly stats;
|
|
13
|
-
constructor(clsProvider: ClsCacheProvider,
|
|
22
|
+
constructor(clsProvider: ClsCacheProvider, lruProvider: LRUCacheProvider, redisProvider: RedisCacheProvider, enableCompression?: boolean, compressionThreshold?: number);
|
|
23
|
+
/**
|
|
24
|
+
* Get or set cache value with factory function
|
|
25
|
+
*
|
|
26
|
+
* @param key - Cache key
|
|
27
|
+
* @param factory - Function to generate value if not cached
|
|
28
|
+
* @param options - Cache options
|
|
29
|
+
* @returns Cached or generated value
|
|
30
|
+
*/
|
|
14
31
|
getOrSet<T>(key: string, factory: () => Promise<T>, options?: CacheOptions): Promise<T>;
|
|
32
|
+
/**
|
|
33
|
+
* Get value from cache with optional layer specification
|
|
34
|
+
*
|
|
35
|
+
* @param key - Cache key
|
|
36
|
+
* @param options - Cache options including layer preference
|
|
37
|
+
* @returns Cached value or null
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* // Try memory only
|
|
42
|
+
* const data = await this.cacheService.get('user:123', {
|
|
43
|
+
* layers: [CacheLayer.MEMORY]
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* // Try all layers in order (CLS -> MEMORY -> REDIS)
|
|
47
|
+
* const data = await this.cacheService.get('config:app', {
|
|
48
|
+
* layers: [CacheLayer.CLS, CacheLayer.MEMORY, CacheLayer.REDIS]
|
|
49
|
+
* });
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
15
52
|
get<T>(key: string, options?: CacheOptions): Promise<T | null>;
|
|
53
|
+
/**
|
|
54
|
+
* Set value in cache with optional layer specification
|
|
55
|
+
*
|
|
56
|
+
* Supports both new API (CacheOptions) and legacy API (TTL number) for backward compatibility.
|
|
57
|
+
*
|
|
58
|
+
* @param key - Cache key
|
|
59
|
+
* @param value - Value to cache
|
|
60
|
+
* @param options - Cache options including layer selection OR TTL (number) for legacy compatibility
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* // New API - Cache in memory only
|
|
65
|
+
* await this.cacheService.set('user:123', userData, {
|
|
66
|
+
* layers: [CacheLayer.MEMORY],
|
|
67
|
+
* ttl: 300000
|
|
68
|
+
* });
|
|
69
|
+
*
|
|
70
|
+
* // Legacy API - TTL as third parameter (still works for backward compatibility)
|
|
71
|
+
* await this.cacheService.set('user:123', userData, 300000);
|
|
72
|
+
*
|
|
73
|
+
* // Cache in all layers (default behavior)
|
|
74
|
+
* await this.cacheService.set('config:app', configData, {
|
|
75
|
+
* layers: [CacheLayer.CLS, CacheLayer.MEMORY, CacheLayer.REDIS],
|
|
76
|
+
* ttl: 3600000
|
|
77
|
+
* });
|
|
78
|
+
*
|
|
79
|
+
* // Cache in Redis only (distributed)
|
|
80
|
+
* await this.cacheService.set('global:settings', settings, {
|
|
81
|
+
* layers: [CacheLayer.REDIS],
|
|
82
|
+
* ttl: 86400000
|
|
83
|
+
* });
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
16
86
|
set<T>(key: string, value: T, options?: CacheOptions | number): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Delete value from cache
|
|
89
|
+
*
|
|
90
|
+
* @param key - Cache key or array of keys
|
|
91
|
+
* @param layers - Specific layers to delete from (default: all)
|
|
92
|
+
*/
|
|
17
93
|
del(key: string | string[], layers?: CacheLayer[]): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Delete keys matching pattern
|
|
96
|
+
*
|
|
97
|
+
* @param pattern - Pattern to match (e.g., 'user:*')
|
|
98
|
+
* @param layers - Specific layers to delete from (default: Memory and Redis only)
|
|
99
|
+
*/
|
|
18
100
|
deletePattern(pattern: string, layers?: CacheLayer[]): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Clear all cache
|
|
103
|
+
*
|
|
104
|
+
* @param layers - Specific layers to clear (default: all)
|
|
105
|
+
*/
|
|
19
106
|
clear(layers?: CacheLayer[]): Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Invalidate tags (for TagDependency)
|
|
109
|
+
*
|
|
110
|
+
* @param tags - Tags to invalidate
|
|
111
|
+
*/
|
|
20
112
|
invalidateTags(tags: string[]): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* Get multiple values
|
|
115
|
+
*
|
|
116
|
+
* @param keys - Array of cache keys
|
|
117
|
+
* @param options - Cache options
|
|
118
|
+
* @returns Array of values (null for missing keys)
|
|
119
|
+
*/
|
|
21
120
|
mget<T>(keys: string[], options?: CacheOptions): Promise<(T | null)[]>;
|
|
121
|
+
/**
|
|
122
|
+
* Set multiple values
|
|
123
|
+
*
|
|
124
|
+
* @param items - Array of key-value pairs
|
|
125
|
+
* @param options - Cache options
|
|
126
|
+
*/
|
|
22
127
|
mset(items: Array<{
|
|
23
128
|
key: string;
|
|
24
129
|
value: any;
|
|
25
130
|
}>, options?: CacheOptions): Promise<void>;
|
|
131
|
+
/**
|
|
132
|
+
* Get cache statistics
|
|
133
|
+
*
|
|
134
|
+
* @returns Cache statistics
|
|
135
|
+
*/
|
|
26
136
|
getStats(): CacheStats;
|
|
137
|
+
/**
|
|
138
|
+
* Reset statistics
|
|
139
|
+
*/
|
|
27
140
|
resetStats(): void;
|
|
141
|
+
/**
|
|
142
|
+
* Internal method to set cache value with options
|
|
143
|
+
*/
|
|
28
144
|
private setWithOptions;
|
|
145
|
+
/**
|
|
146
|
+
* Resolve cache layers from options
|
|
147
|
+
*/
|
|
29
148
|
private resolveLayers;
|
|
149
|
+
/**
|
|
150
|
+
* Get default cache layers
|
|
151
|
+
*/
|
|
30
152
|
private getDefaultLayers;
|
|
153
|
+
/**
|
|
154
|
+
* Build full cache key with namespace
|
|
155
|
+
*/
|
|
31
156
|
private buildKey;
|
|
157
|
+
/**
|
|
158
|
+
* Backfill upper cache layers
|
|
159
|
+
*/
|
|
32
160
|
private backfillUpperLayers;
|
|
161
|
+
/**
|
|
162
|
+
* Record cache hit
|
|
163
|
+
*/
|
|
33
164
|
private recordHit;
|
|
165
|
+
/**
|
|
166
|
+
* Record cache miss
|
|
167
|
+
*/
|
|
34
168
|
private recordMiss;
|
|
169
|
+
/**
|
|
170
|
+
* Update hit rate for a layer
|
|
171
|
+
*/
|
|
35
172
|
private updateLayerHitRate;
|
|
173
|
+
/**
|
|
174
|
+
* Initialize statistics for all layers
|
|
175
|
+
*/
|
|
36
176
|
private initializeStats;
|
|
37
177
|
}
|