@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
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { CacheProvider } from '../interfaces/cache-provider.interface';
|
|
2
|
+
/**
|
|
3
|
+
* Base cache provider with common utility methods
|
|
4
|
+
*/
|
|
2
5
|
export declare abstract class BaseCacheProvider implements CacheProvider {
|
|
3
6
|
abstract get<T>(key: string): Promise<T | null>;
|
|
4
7
|
abstract set<T>(key: string, value: T, ttl?: number): Promise<void>;
|
|
@@ -7,10 +10,21 @@ export declare abstract class BaseCacheProvider implements CacheProvider {
|
|
|
7
10
|
abstract clear(): Promise<void>;
|
|
8
11
|
abstract has(key: string): Promise<boolean>;
|
|
9
12
|
abstract getName(): string;
|
|
13
|
+
/**
|
|
14
|
+
* Get multiple values at once
|
|
15
|
+
* Default implementation - can be overridden for better performance
|
|
16
|
+
*/
|
|
10
17
|
mget<T>(keys: string[]): Promise<(T | null)[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Set multiple values at once
|
|
20
|
+
* Default implementation - can be overridden for better performance
|
|
21
|
+
*/
|
|
11
22
|
mset(items: Array<{
|
|
12
23
|
key: string;
|
|
13
24
|
value: any;
|
|
14
25
|
}>, ttl?: number): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Convert wildcard pattern to RegExp
|
|
28
|
+
*/
|
|
15
29
|
protected patternToRegex(pattern: string): RegExp;
|
|
16
30
|
}
|
|
@@ -10,21 +10,37 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.BaseCacheProvider = void 0;
|
|
13
|
+
/**
|
|
14
|
+
* Base cache provider with common utility methods
|
|
15
|
+
*/
|
|
13
16
|
class BaseCacheProvider {
|
|
17
|
+
/**
|
|
18
|
+
* Get multiple values at once
|
|
19
|
+
* Default implementation - can be overridden for better performance
|
|
20
|
+
*/
|
|
14
21
|
mget(keys) {
|
|
15
22
|
return __awaiter(this, void 0, void 0, function* () {
|
|
16
23
|
const promises = keys.map((key) => this.get(key));
|
|
17
24
|
return Promise.all(promises);
|
|
18
25
|
});
|
|
19
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Set multiple values at once
|
|
29
|
+
* Default implementation - can be overridden for better performance
|
|
30
|
+
*/
|
|
20
31
|
mset(items, ttl) {
|
|
21
32
|
return __awaiter(this, void 0, void 0, function* () {
|
|
22
33
|
const promises = items.map((item) => this.set(item.key, item.value, ttl));
|
|
23
34
|
yield Promise.all(promises);
|
|
24
35
|
});
|
|
25
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Convert wildcard pattern to RegExp
|
|
39
|
+
*/
|
|
26
40
|
patternToRegex(pattern) {
|
|
41
|
+
// Escape special regex characters except *
|
|
27
42
|
const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
|
|
43
|
+
// Convert * to .*
|
|
28
44
|
const regexPattern = escaped.replace(/\*/g, '.*');
|
|
29
45
|
return new RegExp(`^${regexPattern}$`);
|
|
30
46
|
}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { BaseCacheProvider } from './base-cache.provider';
|
|
2
|
+
/**
|
|
3
|
+
* CLS (Continuation Local Storage) cache provider
|
|
4
|
+
*
|
|
5
|
+
* This is the L1 cache layer - request-scoped caching using nestjs-cls.
|
|
6
|
+
* Data stored here is only available within the same request context.
|
|
7
|
+
*
|
|
8
|
+
* Fastest cache layer but limited to single request lifecycle.
|
|
9
|
+
*/
|
|
2
10
|
export declare class ClsCacheProvider extends BaseCacheProvider {
|
|
3
11
|
private static readonly CACHE_PREFIX;
|
|
4
12
|
private static readonly KEYS_SET;
|
|
@@ -9,8 +17,20 @@ export declare class ClsCacheProvider extends BaseCacheProvider {
|
|
|
9
17
|
deletePattern(pattern: string): Promise<number>;
|
|
10
18
|
clear(): Promise<void>;
|
|
11
19
|
has(key: string): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Get full key with prefix
|
|
22
|
+
*/
|
|
12
23
|
private getFullKey;
|
|
24
|
+
/**
|
|
25
|
+
* Add key to tracked keys set
|
|
26
|
+
*/
|
|
13
27
|
private addKeyToSet;
|
|
28
|
+
/**
|
|
29
|
+
* Remove key from tracked keys set
|
|
30
|
+
*/
|
|
14
31
|
private removeKeyFromSet;
|
|
32
|
+
/**
|
|
33
|
+
* Get all tracked keys
|
|
34
|
+
*/
|
|
15
35
|
private getAllKeys;
|
|
16
36
|
}
|
|
@@ -12,6 +12,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.ClsCacheProvider = void 0;
|
|
13
13
|
const nestjs_cls_1 = require("nestjs-cls");
|
|
14
14
|
const base_cache_provider_1 = require("./base-cache.provider");
|
|
15
|
+
/**
|
|
16
|
+
* CLS (Continuation Local Storage) cache provider
|
|
17
|
+
*
|
|
18
|
+
* This is the L1 cache layer - request-scoped caching using nestjs-cls.
|
|
19
|
+
* Data stored here is only available within the same request context.
|
|
20
|
+
*
|
|
21
|
+
* Fastest cache layer but limited to single request lifecycle.
|
|
22
|
+
*/
|
|
15
23
|
class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
16
24
|
getName() {
|
|
17
25
|
return 'CLS';
|
|
@@ -25,6 +33,7 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
|
25
33
|
if (!cached) {
|
|
26
34
|
return null;
|
|
27
35
|
}
|
|
36
|
+
// Check TTL
|
|
28
37
|
if (cached.expiresAt && Date.now() > cached.expiresAt) {
|
|
29
38
|
yield this.delete(key);
|
|
30
39
|
return null;
|
|
@@ -32,6 +41,7 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
|
32
41
|
return cached.value;
|
|
33
42
|
}
|
|
34
43
|
catch (_a) {
|
|
44
|
+
// CLS might not be available (e.g., outside request context)
|
|
35
45
|
return null;
|
|
36
46
|
}
|
|
37
47
|
});
|
|
@@ -46,9 +56,11 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
|
46
56
|
cached.expiresAt = Date.now() + ttl;
|
|
47
57
|
}
|
|
48
58
|
store.set(fullKey, cached);
|
|
59
|
+
// Track this key for cleanup
|
|
49
60
|
this.addKeyToSet(key);
|
|
50
61
|
}
|
|
51
62
|
catch (_a) {
|
|
63
|
+
// CLS might not be available, silently fail
|
|
52
64
|
}
|
|
53
65
|
});
|
|
54
66
|
}
|
|
@@ -64,6 +76,7 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
|
64
76
|
}
|
|
65
77
|
}
|
|
66
78
|
catch (_a) {
|
|
79
|
+
// CLS might not be available, silently fail
|
|
67
80
|
}
|
|
68
81
|
});
|
|
69
82
|
}
|
|
@@ -90,6 +103,7 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
|
90
103
|
yield this.delete(allKeys);
|
|
91
104
|
}
|
|
92
105
|
catch (_a) {
|
|
106
|
+
// CLS might not be available, silently fail
|
|
93
107
|
}
|
|
94
108
|
});
|
|
95
109
|
}
|
|
@@ -99,9 +113,15 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
|
99
113
|
return value !== null;
|
|
100
114
|
});
|
|
101
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Get full key with prefix
|
|
118
|
+
*/
|
|
102
119
|
getFullKey(key) {
|
|
103
120
|
return `${ClsCacheProvider.CACHE_PREFIX}${key}`;
|
|
104
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Add key to tracked keys set
|
|
124
|
+
*/
|
|
105
125
|
addKeyToSet(key) {
|
|
106
126
|
try {
|
|
107
127
|
const store = nestjs_cls_1.ClsServiceManager.getClsService();
|
|
@@ -110,8 +130,12 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
|
110
130
|
store.set(ClsCacheProvider.KEYS_SET, keys);
|
|
111
131
|
}
|
|
112
132
|
catch (_a) {
|
|
133
|
+
// Ignore
|
|
113
134
|
}
|
|
114
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Remove key from tracked keys set
|
|
138
|
+
*/
|
|
115
139
|
removeKeyFromSet(key) {
|
|
116
140
|
try {
|
|
117
141
|
const store = nestjs_cls_1.ClsServiceManager.getClsService();
|
|
@@ -122,8 +146,12 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
|
122
146
|
}
|
|
123
147
|
}
|
|
124
148
|
catch (_a) {
|
|
149
|
+
// Ignore
|
|
125
150
|
}
|
|
126
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Get all tracked keys
|
|
154
|
+
*/
|
|
127
155
|
getAllKeys() {
|
|
128
156
|
try {
|
|
129
157
|
const store = nestjs_cls_1.ClsServiceManager.getClsService();
|
|
@@ -1,13 +1,41 @@
|
|
|
1
1
|
import { BaseCacheProvider } from './base-cache.provider';
|
|
2
|
+
/**
|
|
3
|
+
* Memory cache provider using native Map with TTL support
|
|
4
|
+
*
|
|
5
|
+
* This is the L2 cache layer - process-level caching.
|
|
6
|
+
* Data is stored in memory and shared across all requests in the same process.
|
|
7
|
+
*
|
|
8
|
+
* Faster than Redis but not shared across multiple processes/servers.
|
|
9
|
+
*
|
|
10
|
+
* **Automatic Cleanup**: Includes periodic cleanup of expired items to prevent memory leaks.
|
|
11
|
+
*/
|
|
2
12
|
export declare class MemoryCacheProvider extends BaseCacheProvider {
|
|
3
13
|
private cache;
|
|
4
14
|
private keys;
|
|
5
15
|
private defaultTtl?;
|
|
6
16
|
private namespace;
|
|
17
|
+
private cleanupTimer?;
|
|
18
|
+
/**
|
|
19
|
+
* Cleanup interval in milliseconds
|
|
20
|
+
* @default 300000 (5 minutes)
|
|
21
|
+
*/
|
|
22
|
+
private readonly CLEANUP_INTERVAL;
|
|
7
23
|
constructor(options?: {
|
|
8
24
|
ttl?: number;
|
|
9
25
|
namespace?: string;
|
|
10
26
|
});
|
|
27
|
+
/**
|
|
28
|
+
* Start periodic cleanup of expired items
|
|
29
|
+
*/
|
|
30
|
+
private startCleanupTimer;
|
|
31
|
+
/**
|
|
32
|
+
* Stop automatic cleanup timer
|
|
33
|
+
*/
|
|
34
|
+
private stopCleanupTimer;
|
|
35
|
+
/**
|
|
36
|
+
* Destroy the provider and cleanup resources
|
|
37
|
+
*/
|
|
38
|
+
destroy(): void;
|
|
11
39
|
getName(): string;
|
|
12
40
|
get<T>(key: string): Promise<T | null>;
|
|
13
41
|
set<T>(key: string, value: T, ttl?: number): Promise<void>;
|
|
@@ -15,10 +43,25 @@ export declare class MemoryCacheProvider extends BaseCacheProvider {
|
|
|
15
43
|
deletePattern(pattern: string): Promise<number>;
|
|
16
44
|
clear(): Promise<void>;
|
|
17
45
|
has(key: string): Promise<boolean>;
|
|
46
|
+
/**
|
|
47
|
+
* Get all keys (for debugging/testing)
|
|
48
|
+
*/
|
|
18
49
|
getAllKeys(): string[];
|
|
50
|
+
/**
|
|
51
|
+
* Get cache size
|
|
52
|
+
*/
|
|
19
53
|
getSize(): number;
|
|
54
|
+
/**
|
|
55
|
+
* Clean up expired items (optional maintenance method)
|
|
56
|
+
*/
|
|
20
57
|
cleanup(): number;
|
|
58
|
+
/**
|
|
59
|
+
* Optimized mget with batch cleanup
|
|
60
|
+
*/
|
|
21
61
|
mget<T>(keys: string[]): Promise<(T | null)[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Optimized mset
|
|
64
|
+
*/
|
|
22
65
|
mset(items: Array<{
|
|
23
66
|
key: string;
|
|
24
67
|
value: any;
|
|
@@ -11,13 +11,61 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.MemoryCacheProvider = void 0;
|
|
13
13
|
const base_cache_provider_1 = require("./base-cache.provider");
|
|
14
|
+
/**
|
|
15
|
+
* Memory cache provider using native Map with TTL support
|
|
16
|
+
*
|
|
17
|
+
* This is the L2 cache layer - process-level caching.
|
|
18
|
+
* Data is stored in memory and shared across all requests in the same process.
|
|
19
|
+
*
|
|
20
|
+
* Faster than Redis but not shared across multiple processes/servers.
|
|
21
|
+
*
|
|
22
|
+
* **Automatic Cleanup**: Includes periodic cleanup of expired items to prevent memory leaks.
|
|
23
|
+
*/
|
|
14
24
|
class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
15
25
|
constructor(options) {
|
|
16
26
|
super();
|
|
17
27
|
this.cache = new Map();
|
|
18
28
|
this.keys = new Set();
|
|
29
|
+
/**
|
|
30
|
+
* Cleanup interval in milliseconds
|
|
31
|
+
* @default 300000 (5 minutes)
|
|
32
|
+
*/
|
|
33
|
+
this.CLEANUP_INTERVAL = 5 * 60 * 1000;
|
|
19
34
|
this.defaultTtl = options === null || options === void 0 ? void 0 : options.ttl;
|
|
20
35
|
this.namespace = (options === null || options === void 0 ? void 0 : options.namespace) || 'cache:memory';
|
|
36
|
+
// Start automatic cleanup timer
|
|
37
|
+
this.startCleanupTimer();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Start periodic cleanup of expired items
|
|
41
|
+
*/
|
|
42
|
+
startCleanupTimer() {
|
|
43
|
+
this.cleanupTimer = setInterval(() => {
|
|
44
|
+
const cleaned = this.cleanup();
|
|
45
|
+
if (cleaned > 0) {
|
|
46
|
+
console.debug(`[MemoryCache] Cleaned up ${cleaned} expired items from namespace: ${this.namespace}`);
|
|
47
|
+
}
|
|
48
|
+
}, this.CLEANUP_INTERVAL);
|
|
49
|
+
// Allow Node.js to exit if this is the only active timer
|
|
50
|
+
if (this.cleanupTimer.unref) {
|
|
51
|
+
this.cleanupTimer.unref();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Stop automatic cleanup timer
|
|
56
|
+
*/
|
|
57
|
+
stopCleanupTimer() {
|
|
58
|
+
if (this.cleanupTimer) {
|
|
59
|
+
clearInterval(this.cleanupTimer);
|
|
60
|
+
this.cleanupTimer = undefined;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Destroy the provider and cleanup resources
|
|
65
|
+
*/
|
|
66
|
+
destroy() {
|
|
67
|
+
this.stopCleanupTimer();
|
|
68
|
+
this.clear();
|
|
21
69
|
}
|
|
22
70
|
getName() {
|
|
23
71
|
return 'Memory';
|
|
@@ -29,6 +77,7 @@ class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
|
29
77
|
if (!item) {
|
|
30
78
|
return null;
|
|
31
79
|
}
|
|
80
|
+
// Check if item has expired
|
|
32
81
|
if (item.expiresAt && Date.now() > item.expiresAt) {
|
|
33
82
|
this.cache.delete(key);
|
|
34
83
|
this.keys.delete(key);
|
|
@@ -110,6 +159,7 @@ class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
|
110
159
|
if (!item) {
|
|
111
160
|
return false;
|
|
112
161
|
}
|
|
162
|
+
// Check if item has expired
|
|
113
163
|
if (item.expiresAt && Date.now() > item.expiresAt) {
|
|
114
164
|
this.cache.delete(key);
|
|
115
165
|
this.keys.delete(key);
|
|
@@ -122,12 +172,21 @@ class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
|
122
172
|
}
|
|
123
173
|
});
|
|
124
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Get all keys (for debugging/testing)
|
|
177
|
+
*/
|
|
125
178
|
getAllKeys() {
|
|
126
179
|
return Array.from(this.keys);
|
|
127
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* Get cache size
|
|
183
|
+
*/
|
|
128
184
|
getSize() {
|
|
129
185
|
return this.keys.size;
|
|
130
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Clean up expired items (optional maintenance method)
|
|
189
|
+
*/
|
|
131
190
|
cleanup() {
|
|
132
191
|
let cleaned = 0;
|
|
133
192
|
const now = Date.now();
|
|
@@ -140,6 +199,9 @@ class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
|
140
199
|
}
|
|
141
200
|
return cleaned;
|
|
142
201
|
}
|
|
202
|
+
/**
|
|
203
|
+
* Optimized mget with batch cleanup
|
|
204
|
+
*/
|
|
143
205
|
mget(keys) {
|
|
144
206
|
return __awaiter(this, void 0, void 0, function* () {
|
|
145
207
|
const results = [];
|
|
@@ -150,6 +212,7 @@ class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
|
150
212
|
results.push(null);
|
|
151
213
|
continue;
|
|
152
214
|
}
|
|
215
|
+
// Check if item has expired
|
|
153
216
|
if (item.expiresAt && now > item.expiresAt) {
|
|
154
217
|
this.cache.delete(key);
|
|
155
218
|
this.keys.delete(key);
|
|
@@ -161,6 +224,9 @@ class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
|
161
224
|
return results;
|
|
162
225
|
});
|
|
163
226
|
}
|
|
227
|
+
/**
|
|
228
|
+
* Optimized mset
|
|
229
|
+
*/
|
|
164
230
|
mset(items, ttl) {
|
|
165
231
|
return __awaiter(this, void 0, void 0, function* () {
|
|
166
232
|
const promises = items.map((item) => this.set(item.key, item.value, ttl));
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import type Redis from 'ioredis';
|
|
2
2
|
import { BaseCacheProvider } from './base-cache.provider';
|
|
3
|
+
/**
|
|
4
|
+
* Token for injecting Redis client
|
|
5
|
+
*/
|
|
3
6
|
export declare const REDIS_CLIENT: unique symbol;
|
|
7
|
+
/**
|
|
8
|
+
* Redis cache provider using ioredis
|
|
9
|
+
*
|
|
10
|
+
* This is the L3 cache layer - distributed caching using Redis.
|
|
11
|
+
* Data is persisted in Redis and shared across all processes/servers.
|
|
12
|
+
*
|
|
13
|
+
* Slowest but most persistent and widely shared cache layer.
|
|
14
|
+
*/
|
|
4
15
|
export declare class RedisCacheProvider extends BaseCacheProvider {
|
|
5
16
|
private readonly redis?;
|
|
6
17
|
private readonly keyPrefix;
|
|
@@ -12,12 +23,27 @@ export declare class RedisCacheProvider extends BaseCacheProvider {
|
|
|
12
23
|
deletePattern(pattern: string): Promise<number>;
|
|
13
24
|
clear(): Promise<void>;
|
|
14
25
|
has(key: string): Promise<boolean>;
|
|
26
|
+
/**
|
|
27
|
+
* Batch get using Redis MGET
|
|
28
|
+
*/
|
|
15
29
|
mget<T>(keys: string[]): Promise<(T | null)[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Batch set using Redis pipeline
|
|
32
|
+
*/
|
|
16
33
|
mset(items: Array<{
|
|
17
34
|
key: string;
|
|
18
35
|
value: any;
|
|
19
36
|
}>, ttl?: number): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Check if Redis client is available
|
|
39
|
+
*/
|
|
20
40
|
isAvailable(): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Get Redis client (for advanced usage)
|
|
43
|
+
*/
|
|
21
44
|
getClient(): Redis | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Get full key with prefix
|
|
47
|
+
*/
|
|
22
48
|
private getFullKey;
|
|
23
49
|
}
|
|
@@ -24,7 +24,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
24
24
|
exports.RedisCacheProvider = exports.REDIS_CLIENT = void 0;
|
|
25
25
|
const common_1 = require("@nestjs/common");
|
|
26
26
|
const base_cache_provider_1 = require("./base-cache.provider");
|
|
27
|
+
/**
|
|
28
|
+
* Token for injecting Redis client
|
|
29
|
+
*/
|
|
27
30
|
exports.REDIS_CLIENT = Symbol('REDIS_CLIENT');
|
|
31
|
+
/**
|
|
32
|
+
* Redis cache provider using ioredis
|
|
33
|
+
*
|
|
34
|
+
* This is the L3 cache layer - distributed caching using Redis.
|
|
35
|
+
* Data is persisted in Redis and shared across all processes/servers.
|
|
36
|
+
*
|
|
37
|
+
* Slowest but most persistent and widely shared cache layer.
|
|
38
|
+
*/
|
|
28
39
|
let RedisCacheProvider = class RedisCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
29
40
|
constructor(redis) {
|
|
30
41
|
super();
|
|
@@ -65,6 +76,7 @@ let RedisCacheProvider = class RedisCacheProvider extends base_cache_provider_1.
|
|
|
65
76
|
const fullKey = this.getFullKey(key);
|
|
66
77
|
const serialized = JSON.stringify(value);
|
|
67
78
|
if (ttl && ttl > 0) {
|
|
79
|
+
// TTL in milliseconds, Redis expects seconds
|
|
68
80
|
yield this.redis.setex(fullKey, Math.ceil(ttl / 1000), serialized);
|
|
69
81
|
}
|
|
70
82
|
else {
|
|
@@ -102,6 +114,7 @@ let RedisCacheProvider = class RedisCacheProvider extends base_cache_provider_1.
|
|
|
102
114
|
const fullPattern = this.getFullKey(pattern);
|
|
103
115
|
let cursor = '0';
|
|
104
116
|
let deletedCount = 0;
|
|
117
|
+
// Use SCAN to find matching keys (more efficient than KEYS)
|
|
105
118
|
do {
|
|
106
119
|
const [nextCursor, keys] = yield this.redis.scan(cursor, 'MATCH', fullPattern, 'COUNT', 100);
|
|
107
120
|
cursor = nextCursor;
|
|
@@ -124,6 +137,7 @@ let RedisCacheProvider = class RedisCacheProvider extends base_cache_provider_1.
|
|
|
124
137
|
return;
|
|
125
138
|
}
|
|
126
139
|
try {
|
|
140
|
+
// Clear all keys with our prefix
|
|
127
141
|
yield this.deletePattern('*');
|
|
128
142
|
}
|
|
129
143
|
catch (error) {
|
|
@@ -146,6 +160,9 @@ let RedisCacheProvider = class RedisCacheProvider extends base_cache_provider_1.
|
|
|
146
160
|
}
|
|
147
161
|
});
|
|
148
162
|
}
|
|
163
|
+
/**
|
|
164
|
+
* Batch get using Redis MGET
|
|
165
|
+
*/
|
|
149
166
|
mget(keys) {
|
|
150
167
|
return __awaiter(this, void 0, void 0, function* () {
|
|
151
168
|
if (!this.redis || keys.length === 0) {
|
|
@@ -172,6 +189,9 @@ let RedisCacheProvider = class RedisCacheProvider extends base_cache_provider_1.
|
|
|
172
189
|
}
|
|
173
190
|
});
|
|
174
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* Batch set using Redis pipeline
|
|
194
|
+
*/
|
|
175
195
|
mset(items, ttl) {
|
|
176
196
|
return __awaiter(this, void 0, void 0, function* () {
|
|
177
197
|
if (!this.redis || items.length === 0) {
|
|
@@ -196,12 +216,21 @@ let RedisCacheProvider = class RedisCacheProvider extends base_cache_provider_1.
|
|
|
196
216
|
}
|
|
197
217
|
});
|
|
198
218
|
}
|
|
219
|
+
/**
|
|
220
|
+
* Check if Redis client is available
|
|
221
|
+
*/
|
|
199
222
|
isAvailable() {
|
|
200
223
|
return !!this.redis && this.redis.status === 'ready';
|
|
201
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* Get Redis client (for advanced usage)
|
|
227
|
+
*/
|
|
202
228
|
getClient() {
|
|
203
229
|
return this.redis;
|
|
204
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* Get full key with prefix
|
|
233
|
+
*/
|
|
205
234
|
getFullKey(key) {
|
|
206
235
|
return `${this.keyPrefix}${key}`;
|
|
207
236
|
}
|
|
@@ -1,15 +1,67 @@
|
|
|
1
1
|
import type { CacheDependency, DependencyData } from '../interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* Wrapper for cached value with dependency data
|
|
4
|
+
*/
|
|
2
5
|
export interface CachedValueWithDependencies<T> {
|
|
3
6
|
value: T;
|
|
4
7
|
dependencies?: DependencyData[];
|
|
5
8
|
cachedAt: number;
|
|
6
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Utility class for managing cache dependencies
|
|
12
|
+
*/
|
|
7
13
|
export declare class DependencyManager {
|
|
14
|
+
/**
|
|
15
|
+
* Wrap a value with its dependencies
|
|
16
|
+
*
|
|
17
|
+
* @param value - The value to cache
|
|
18
|
+
* @param dependencies - Array of dependencies
|
|
19
|
+
* @returns Wrapped value with dependency data
|
|
20
|
+
*/
|
|
8
21
|
static wrapWithDependencies<T>(value: T, dependencies?: CacheDependency[]): Promise<CachedValueWithDependencies<T>>;
|
|
22
|
+
/**
|
|
23
|
+
* Capture current state of all dependencies
|
|
24
|
+
*
|
|
25
|
+
* @param dependencies - Array of dependencies
|
|
26
|
+
* @returns Array of dependency data snapshots
|
|
27
|
+
*/
|
|
9
28
|
static captureDependencies(dependencies: CacheDependency[]): Promise<DependencyData[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Check if any dependencies have changed
|
|
31
|
+
*
|
|
32
|
+
* @param dependencies - Current dependencies
|
|
33
|
+
* @param cachedDependencies - Previously captured dependency data
|
|
34
|
+
* @returns true if any dependency has changed
|
|
35
|
+
*/
|
|
10
36
|
static areDependenciesChanged(dependencies: CacheDependency[], cachedDependencies?: DependencyData[]): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* Unwrap cached value and validate dependencies
|
|
39
|
+
*
|
|
40
|
+
* @param wrapped - Wrapped cached value
|
|
41
|
+
* @param dependencies - Current dependencies to check
|
|
42
|
+
* @returns Unwrapped value if valid, null if dependencies changed
|
|
43
|
+
*/
|
|
11
44
|
static unwrapAndValidate<T>(wrapped: CachedValueWithDependencies<T> | null, dependencies?: CacheDependency[]): Promise<T | null>;
|
|
45
|
+
/**
|
|
46
|
+
* Get which dependencies have changed
|
|
47
|
+
*
|
|
48
|
+
* @param dependencies - Current dependencies
|
|
49
|
+
* @param cachedDependencies - Previously captured dependency data
|
|
50
|
+
* @returns Array of changed dependency keys
|
|
51
|
+
*/
|
|
12
52
|
static getChangedDependencies(dependencies: CacheDependency[], cachedDependencies?: DependencyData[]): Promise<string[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Serialize dependencies for storage
|
|
55
|
+
*
|
|
56
|
+
* @param dependencies - Dependency data
|
|
57
|
+
* @returns Serialized string
|
|
58
|
+
*/
|
|
13
59
|
static serializeDependencies(dependencies: DependencyData[]): string;
|
|
60
|
+
/**
|
|
61
|
+
* Deserialize dependencies from storage
|
|
62
|
+
*
|
|
63
|
+
* @param serialized - Serialized string
|
|
64
|
+
* @returns Dependency data array
|
|
65
|
+
*/
|
|
14
66
|
static deserializeDependencies(serialized: string): DependencyData[];
|
|
15
67
|
}
|