@nest-omni/core 4.1.3-2 → 4.1.3-20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/audit/audit.module.d.ts +10 -0
- package/audit/audit.module.js +63 -1
- package/audit/controllers/audit.controller.d.ts +88 -0
- package/audit/controllers/audit.controller.js +74 -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 +45 -0
- package/audit/decorators/audit-operation.decorator.js +49 -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-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/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 +11 -0
- package/audit/entities/entity-audit-log.entity.js +57 -2
- 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 -0
- package/audit/entities/manual-operation-log.entity.js +12 -1
- 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 +37 -6
- package/audit/enums/audit.enums.js +40 -7
- package/audit/index.d.ts +4 -1
- package/audit/index.js +34 -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 +15 -0
- package/audit/interceptors/audit.interceptor.js +23 -1
- package/audit/interceptors/index.d.ts +1 -0
- package/audit/interceptors/index.js +1 -0
- package/audit/interfaces/audit.interfaces.d.ts +187 -2
- 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 +97 -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 +230 -3
- package/audit/services/entity-audit.service.js +607 -14
- package/audit/services/index.d.ts +3 -0
- package/audit/services/index.js +3 -0
- package/audit/services/manual-audit-log.service.d.ts +134 -9
- package/audit/services/manual-audit-log.service.js +157 -40
- 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 +19 -0
- package/audit/subscribers/entity-audit.subscriber.js +76 -1
- 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 +82 -2
- package/cache/cache.module.js +76 -5
- package/cache/cache.service.d.ts +140 -0
- package/cache/cache.service.js +169 -0
- 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/examples/basic-usage.d.ts +15 -0
- package/cache/examples/basic-usage.js +62 -8
- package/cache/index.js +9 -0
- 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/memory-cache.provider.d.ts +43 -0
- package/cache/providers/memory-cache.provider.js +66 -0
- package/cache/providers/redis-cache.provider.d.ts +26 -0
- package/cache/providers/redis-cache.provider.js +29 -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 +142 -0
- package/common/boilerplate.polyfill.js +18 -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/utils.d.ts +15 -0
- package/common/utils.js +15 -0
- package/constants/language-code.js +1 -0
- package/decorators/field.decorators.d.ts +1 -1
- package/decorators/field.decorators.js +8 -1
- package/decorators/property.decorators.js +1 -0
- package/decorators/public-route.decorator.js +1 -0
- package/decorators/transform.decorators.d.ts +27 -0
- package/decorators/transform.decorators.js +29 -0
- 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/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 +52 -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/package.json +11 -7
- package/providers/context.provider.js +2 -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 +1 -0
- package/setup/bootstrap.setup.js +21 -0
- 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 -17
- 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/decorators/examples/validation-decorators.example.d.ts +0 -69
- package/decorators/examples/validation-decorators.example.js +0 -331
- package/http-client/services/cache.service.d.ts +0 -24
- package/http-client/services/cache.service.js +0 -264
- package/shared/services/validator.service.d.ts +0 -3
- package/shared/services/validator.service.js +0 -20
- /package/shared/{serviceRegistryModule.d.ts → service-registry.module.d.ts} +0 -0
package/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,101 @@
|
|
|
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 memory cache in milliseconds
|
|
24
|
+
*/
|
|
10
25
|
memoryTtl?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Namespace for memory cache
|
|
28
|
+
*/
|
|
11
29
|
memoryNamespace?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Enable compression for cache values
|
|
32
|
+
* @default false
|
|
33
|
+
*/
|
|
12
34
|
enableCompression?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Compression threshold in bytes
|
|
37
|
+
* @default 1024
|
|
38
|
+
*/
|
|
13
39
|
compressionThreshold?: number;
|
|
14
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Unified cache module with three-tier architecture
|
|
43
|
+
*
|
|
44
|
+
* Provides CacheService and cache decorators (@Cacheable, @CacheEvict, @CachePut)
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* // Basic usage (without Redis)
|
|
49
|
+
* @Module({
|
|
50
|
+
* imports: [
|
|
51
|
+
* CacheModule.forRoot()
|
|
52
|
+
* ]
|
|
53
|
+
* })
|
|
54
|
+
* export class AppModule {}
|
|
55
|
+
*
|
|
56
|
+
* // With Redis
|
|
57
|
+
* import { RedisModule } from '@songkeys/nestjs-redis';
|
|
58
|
+
*
|
|
59
|
+
* @Module({
|
|
60
|
+
* imports: [
|
|
61
|
+
* RedisModule.forRoot({ ... }),
|
|
62
|
+
* CacheModule.forRootAsync({
|
|
63
|
+
* imports: [RedisModule],
|
|
64
|
+
* inject: [RedisService],
|
|
65
|
+
* useFactory: (redisService: RedisService) => ({
|
|
66
|
+
* redisClient: redisService.getClient()
|
|
67
|
+
* })
|
|
68
|
+
* })
|
|
69
|
+
* ]
|
|
70
|
+
* })
|
|
71
|
+
* export class AppModule {}
|
|
72
|
+
*
|
|
73
|
+
* // With TypeORM DataSource for DbDependency
|
|
74
|
+
* @Module({
|
|
75
|
+
* imports: [
|
|
76
|
+
* TypeOrmModule.forRoot({ ... }),
|
|
77
|
+
* CacheModule.forRootAsync({
|
|
78
|
+
* imports: [TypeOrmModule],
|
|
79
|
+
* inject: [DataSource],
|
|
80
|
+
* useFactory: (dataSource: DataSource) => ({
|
|
81
|
+
* dataSource
|
|
82
|
+
* })
|
|
83
|
+
* })
|
|
84
|
+
* ]
|
|
85
|
+
* })
|
|
86
|
+
* export class AppModule {}
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
15
89
|
export declare class CacheModule implements OnModuleInit {
|
|
16
90
|
private readonly cacheService;
|
|
17
91
|
constructor(cacheService: CacheService);
|
|
92
|
+
/**
|
|
93
|
+
* Register cache module with options
|
|
94
|
+
*/
|
|
18
95
|
static forRoot(options?: CacheModuleOptions): DynamicModule;
|
|
96
|
+
/**
|
|
97
|
+
* Register cache module asynchronously
|
|
98
|
+
*/
|
|
19
99
|
static forRootAsync(options: {
|
|
20
100
|
imports?: any[];
|
|
21
101
|
inject?: any[];
|
package/cache/cache.module.js
CHANGED
|
@@ -20,20 +20,76 @@ 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, 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
95
|
provide: providers_1.MemoryCacheProvider,
|
|
@@ -42,6 +98,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
42
98
|
namespace: memoryNamespace,
|
|
43
99
|
}),
|
|
44
100
|
},
|
|
101
|
+
// Redis client provider (optional)
|
|
45
102
|
...(redisClient
|
|
46
103
|
? [
|
|
47
104
|
{
|
|
@@ -51,6 +108,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
51
108
|
]
|
|
52
109
|
: []),
|
|
53
110
|
providers_1.RedisCacheProvider,
|
|
111
|
+
// Compression configuration providers
|
|
54
112
|
{
|
|
55
113
|
provide: cache_constants_1.CACHE_COMPRESSION_ENABLED,
|
|
56
114
|
useValue: enableCompression,
|
|
@@ -59,12 +117,14 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
59
117
|
provide: cache_constants_1.CACHE_COMPRESSION_THRESHOLD,
|
|
60
118
|
useValue: compressionThreshold,
|
|
61
119
|
},
|
|
120
|
+
// Additional services
|
|
62
121
|
cache_warmup_service_1.CacheWarmupService,
|
|
63
122
|
cache_metrics_service_1.CacheMetricsService,
|
|
64
123
|
{
|
|
65
124
|
provide: cache_serialization_service_1.CacheSerializationService,
|
|
66
125
|
useFactory: () => new cache_serialization_service_1.CacheSerializationService(),
|
|
67
126
|
},
|
|
127
|
+
// CacheService
|
|
68
128
|
{
|
|
69
129
|
provide: exports.CACHE_SERVICE,
|
|
70
130
|
useClass: cache_service_1.CacheService,
|
|
@@ -80,6 +140,9 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
80
140
|
],
|
|
81
141
|
};
|
|
82
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Register cache module asynchronously
|
|
145
|
+
*/
|
|
83
146
|
static forRootAsync(options) {
|
|
84
147
|
var _a;
|
|
85
148
|
return {
|
|
@@ -87,17 +150,20 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
87
150
|
global: (_a = options.isGlobal) !== null && _a !== void 0 ? _a : true,
|
|
88
151
|
imports: options.imports || [],
|
|
89
152
|
providers: [
|
|
153
|
+
// Async options provider
|
|
90
154
|
{
|
|
91
155
|
provide: 'CACHE_MODULE_OPTIONS',
|
|
92
156
|
useFactory: options.useFactory,
|
|
93
157
|
inject: options.inject || [],
|
|
94
158
|
},
|
|
159
|
+
// Providers
|
|
95
160
|
providers_1.ClsCacheProvider,
|
|
96
161
|
{
|
|
97
162
|
provide: providers_1.MemoryCacheProvider,
|
|
98
163
|
useFactory: (moduleOptions) => {
|
|
99
|
-
|
|
100
|
-
|
|
164
|
+
// Set Redis client for TagDependency for distributed tag support
|
|
165
|
+
if (moduleOptions.redisClient) {
|
|
166
|
+
dependencies_1.TagDependency.setRedisClient(moduleOptions.redisClient);
|
|
101
167
|
}
|
|
102
168
|
return new providers_1.MemoryCacheProvider({
|
|
103
169
|
ttl: moduleOptions.memoryTtl,
|
|
@@ -106,18 +172,21 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
106
172
|
},
|
|
107
173
|
inject: ['CACHE_MODULE_OPTIONS'],
|
|
108
174
|
},
|
|
175
|
+
// Redis client provider (optional)
|
|
109
176
|
{
|
|
110
177
|
provide: providers_1.REDIS_CLIENT,
|
|
111
178
|
useFactory: (moduleOptions) => moduleOptions.redisClient,
|
|
112
179
|
inject: ['CACHE_MODULE_OPTIONS'],
|
|
113
180
|
},
|
|
114
181
|
providers_1.RedisCacheProvider,
|
|
182
|
+
// Additional services
|
|
115
183
|
cache_warmup_service_1.CacheWarmupService,
|
|
116
184
|
cache_metrics_service_1.CacheMetricsService,
|
|
117
185
|
{
|
|
118
186
|
provide: cache_serialization_service_1.CacheSerializationService,
|
|
119
187
|
useFactory: () => new cache_serialization_service_1.CacheSerializationService(),
|
|
120
188
|
},
|
|
189
|
+
// Compression configuration providers
|
|
121
190
|
{
|
|
122
191
|
provide: cache_constants_1.CACHE_COMPRESSION_ENABLED,
|
|
123
192
|
useFactory: (moduleOptions) => moduleOptions.enableCompression || false,
|
|
@@ -128,6 +197,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
128
197
|
useFactory: (moduleOptions) => moduleOptions.compressionThreshold || 1024,
|
|
129
198
|
inject: ['CACHE_MODULE_OPTIONS'],
|
|
130
199
|
},
|
|
200
|
+
// CacheService
|
|
131
201
|
{
|
|
132
202
|
provide: exports.CACHE_SERVICE,
|
|
133
203
|
useClass: cache_service_1.CacheService,
|
|
@@ -144,6 +214,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
|
|
|
144
214
|
};
|
|
145
215
|
}
|
|
146
216
|
onModuleInit() {
|
|
217
|
+
// Set global cache service for decorators
|
|
147
218
|
(0, decorators_1.setCacheService)(this.cacheService);
|
|
148
219
|
}
|
|
149
220
|
};
|
package/cache/cache.service.d.ts
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import type { CacheOptions, CacheStats } from './interfaces';
|
|
2
2
|
import { CacheLayer } from './interfaces';
|
|
3
3
|
import { ClsCacheProvider, MemoryCacheProvider, RedisCacheProvider } from './providers';
|
|
4
|
+
/**
|
|
5
|
+
* Unified cache service with three-tier architecture
|
|
6
|
+
*
|
|
7
|
+
* L1: CLS (request-level)
|
|
8
|
+
* L2: Memory (process-level)
|
|
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
15
|
private readonly memoryProvider;
|
|
@@ -11,27 +20,158 @@ export declare class CacheService {
|
|
|
11
20
|
private readonly providers;
|
|
12
21
|
private readonly stats;
|
|
13
22
|
constructor(clsProvider: ClsCacheProvider, memoryProvider: MemoryCacheProvider, 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
|
}
|