@nest-omni/core 4.1.3-3 → 4.1.3-31
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 +1 -0
- package/audit/audit.module.js +51 -2
- package/audit/controllers/audit.controller.d.ts +57 -1
- package/audit/controllers/audit.controller.js +43 -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 +1 -1
- package/audit/decorators/audit-controller.decorator.js +2 -2
- package/audit/decorators/audit-operation.decorator.d.ts +0 -7
- package/audit/decorators/audit-operation.decorator.js +0 -7
- package/audit/decorators/entity-audit.decorator.d.ts +78 -2
- package/audit/decorators/entity-audit.decorator.js +145 -4
- 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/index.d.ts +1 -0
- package/audit/dto/index.js +1 -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 +7 -2
- package/audit/entities/entity-audit-log.entity.js +45 -9
- package/audit/entities/entity-transaction.entity.d.ts +8 -2
- package/audit/entities/entity-transaction.entity.js +39 -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 +0 -2
- package/audit/entities/manual-operation-log.entity.js +8 -9
- package/audit/enums/audit.enums.d.ts +14 -6
- package/audit/enums/audit.enums.js +18 -9
- 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 +29 -2
- package/audit/interceptors/audit-action.interceptor.d.ts +39 -0
- package/audit/interceptors/audit-action.interceptor.js +217 -0
- package/audit/interceptors/audit.interceptor.d.ts +1 -0
- package/audit/interceptors/audit.interceptor.js +19 -11
- package/audit/interceptors/index.d.ts +1 -0
- package/audit/interceptors/index.js +1 -0
- package/audit/interfaces/audit.interfaces.d.ts +132 -4
- package/audit/services/audit-action.service.d.ts +142 -0
- package/audit/services/audit-action.service.js +246 -0
- package/audit/services/audit-context.service.d.ts +91 -0
- package/audit/services/audit-context.service.js +170 -0
- package/audit/services/entity-audit.service.d.ts +220 -9
- package/audit/services/entity-audit.service.js +761 -72
- package/audit/services/index.d.ts +3 -0
- package/audit/services/index.js +3 -0
- package/audit/services/manual-audit-log.service.d.ts +23 -23
- package/audit/services/manual-audit-log.service.js +34 -57
- package/audit/services/multi-database.service.d.ts +0 -5
- package/audit/services/multi-database.service.js +0 -24
- package/audit/services/operation-description.service.d.ts +14 -3
- package/audit/services/operation-description.service.js +165 -26
- package/audit/services/transaction-audit.service.d.ts +1 -0
- package/audit/services/transaction-audit.service.js +12 -9
- package/audit/subscribers/entity-audit.subscriber.d.ts +5 -0
- package/audit/subscribers/entity-audit.subscriber.js +69 -5
- package/cache/cache.module.d.ts +7 -8
- package/cache/cache.module.js +15 -13
- package/cache/cache.service.d.ts +6 -4
- package/cache/cache.service.js +24 -12
- package/cache/decorators/cache-put.decorator.js +5 -4
- package/cache/dependencies/callback.dependency.js +9 -0
- package/cache/dependencies/db.dependency.d.ts +43 -12
- package/cache/dependencies/db.dependency.js +46 -18
- package/cache/dependencies/tag.dependency.d.ts +31 -4
- package/cache/dependencies/tag.dependency.js +100 -11
- 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/index.d.ts +2 -1
- package/cache/index.js +19 -2
- package/cache/interfaces/cache-options.interface.d.ts +8 -0
- package/cache/providers/index.d.ts +2 -1
- package/cache/providers/index.js +2 -1
- package/cache/providers/lrucache.provider.d.ts +77 -0
- package/cache/providers/lrucache.provider.js +228 -0
- package/cache/providers/redis-cache.provider.d.ts +1 -0
- package/cache/providers/redis-cache.provider.js +8 -6
- package/cache/providers/typeorm-cache.provider.d.ts +211 -0
- package/cache/providers/typeorm-cache.provider.js +483 -0
- package/common/boilerplate.polyfill.d.ts +1 -0
- package/common/boilerplate.polyfill.js +18 -1
- package/common/helpers/validation-metadata-helper.d.ts +112 -0
- package/common/helpers/validation-metadata-helper.js +164 -0
- package/common/index.d.ts +1 -0
- package/common/index.js +4 -0
- package/decorators/examples/field-i18n.example.d.ts +294 -0
- package/decorators/examples/field-i18n.example.js +478 -0
- package/decorators/field.decorators.d.ts +95 -3
- package/decorators/field.decorators.js +152 -18
- package/decorators/transform.decorators.d.ts +0 -2
- package/decorators/transform.decorators.js +0 -23
- package/decorators/translate.decorator.d.ts +26 -0
- package/decorators/translate.decorator.js +26 -1
- package/email-log/email-log.constants.d.ts +8 -0
- package/email-log/email-log.constants.js +11 -0
- package/email-log/email-log.module.d.ts +47 -0
- package/email-log/email-log.module.js +140 -0
- package/email-log/index.d.ts +11 -0
- package/email-log/index.js +48 -0
- package/email-log/interfaces/email-log-options.interface.d.ts +61 -0
- package/email-log/interfaces/email-log-options.interface.js +134 -0
- package/email-log/interfaces/email-log-transport.interface.d.ts +20 -0
- package/email-log/interfaces/email-log-transport.interface.js +2 -0
- package/email-log/interfaces/index.d.ts +2 -0
- package/email-log/interfaces/index.js +18 -0
- package/email-log/providers/email-provider.d.ts +42 -0
- package/email-log/providers/email-provider.js +127 -0
- package/email-log/providers/index.d.ts +1 -0
- package/email-log/providers/index.js +17 -0
- package/email-log/services/email-log-alert.service.d.ts +46 -0
- package/email-log/services/email-log-alert.service.js +162 -0
- package/email-log/services/email-log-formatter.service.d.ts +78 -0
- package/email-log/services/email-log-formatter.service.js +442 -0
- package/email-log/services/email-log-logger.service.d.ts +85 -0
- package/email-log/services/email-log-logger.service.js +168 -0
- package/email-log/services/email-log-rate-limiter.service.d.ts +42 -0
- package/email-log/services/email-log-rate-limiter.service.js +110 -0
- package/email-log/services/email-log-transport.service.d.ts +80 -0
- package/email-log/services/email-log-transport.service.js +271 -0
- package/email-log/services/index.d.ts +5 -0
- package/email-log/services/index.js +21 -0
- package/email-log/transports/index.d.ts +1 -0
- package/email-log/transports/index.js +17 -0
- package/email-log/transports/pino-email.transport.d.ts +56 -0
- package/email-log/transports/pino-email.transport.js +188 -0
- package/email-log/utils/index.d.ts +2 -0
- package/email-log/utils/index.js +18 -0
- package/email-log/utils/log-level.helper.d.ts +46 -0
- package/email-log/utils/log-level.helper.js +74 -0
- package/email-log/utils/pino-transport.utils.d.ts +135 -0
- package/email-log/utils/pino-transport.utils.js +238 -0
- 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.d.ts +9 -0
- package/filters/bad-request.filter.js +57 -16
- package/http-client/config/http-client.config.d.ts +5 -0
- package/http-client/config/http-client.config.js +27 -14
- package/http-client/decorators/http-client.decorators.d.ts +7 -28
- package/http-client/decorators/http-client.decorators.js +124 -99
- package/http-client/entities/http-log.entity.d.ts +0 -20
- package/http-client/entities/http-log.entity.js +1 -21
- package/http-client/examples/advanced-usage.example.d.ts +4 -5
- package/http-client/examples/advanced-usage.example.js +7 -59
- package/http-client/examples/axios-config-extended.example.d.ts +17 -0
- package/http-client/examples/axios-config-extended.example.js +311 -0
- package/http-client/examples/flexible-response-example.d.ts +28 -0
- package/http-client/examples/flexible-response-example.js +120 -0
- package/http-client/examples/index.d.ts +2 -0
- package/http-client/examples/index.js +2 -0
- 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/examples/ssl-certificate.example.d.ts +47 -0
- package/http-client/examples/ssl-certificate.example.js +432 -0
- package/http-client/http-client.module.d.ts +43 -2
- package/http-client/http-client.module.js +150 -90
- package/http-client/index.d.ts +1 -1
- package/http-client/interfaces/api-client-config.interface.d.ts +24 -103
- package/http-client/interfaces/http-client-config.interface.d.ts +137 -62
- package/http-client/services/api-client-registry.service.d.ts +8 -21
- package/http-client/services/api-client-registry.service.js +31 -282
- package/http-client/services/circuit-breaker.service.d.ts +69 -2
- package/http-client/services/circuit-breaker.service.js +185 -7
- package/http-client/services/http-client.service.d.ts +85 -23
- package/http-client/services/http-client.service.js +512 -168
- package/http-client/services/http-log-query.service.js +0 -13
- package/http-client/services/index.d.ts +0 -1
- package/http-client/services/index.js +0 -1
- package/http-client/services/logging.service.d.ts +69 -16
- package/http-client/services/logging.service.js +290 -170
- package/http-client/utils/call-stack-extractor.util.d.ts +26 -0
- package/http-client/utils/call-stack-extractor.util.js +35 -0
- package/http-client/utils/context-extractor.util.d.ts +2 -0
- package/http-client/utils/context-extractor.util.js +17 -3
- package/http-client/utils/curl-generator.util.js +2 -5
- package/http-client/utils/index.d.ts +2 -0
- package/http-client/utils/index.js +2 -0
- package/http-client/utils/proxy-environment.util.d.ts +42 -0
- package/http-client/utils/proxy-environment.util.js +154 -0
- package/http-client/utils/retry-recorder.util.d.ts +0 -4
- package/http-client/utils/retry-recorder.util.js +2 -27
- package/http-client/utils/sanitize.util.d.ts +58 -0
- package/http-client/utils/sanitize.util.js +188 -0
- package/http-client/utils/security-validator.util.d.ts +118 -0
- package/http-client/utils/security-validator.util.js +354 -0
- package/index.d.ts +4 -1
- package/index.js +6 -1
- package/interceptors/translation-interceptor.service.d.ts +7 -0
- package/interceptors/translation-interceptor.service.js +40 -8
- 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 +34 -29
- package/providers/context.provider.d.ts +9 -0
- package/providers/context.provider.js +13 -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/index.d.ts +2 -0
- package/redis-lock/index.js +5 -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.module.d.ts +6 -0
- package/redis-lock/redis-lock.module.js +136 -77
- package/redis-lock/redis-lock.service.d.ts +31 -0
- package/redis-lock/redis-lock.service.js +124 -17
- package/setup/bootstrap.setup.d.ts +2 -1
- package/setup/bootstrap.setup.js +3 -2
- package/setup/index.d.ts +1 -0
- package/setup/index.js +1 -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 +1 -0
- package/setup/schedule.decorator.js +28 -13
- package/setup/worker.decorator.js +10 -1
- package/shared/index.d.ts +1 -1
- package/shared/index.js +1 -1
- package/shared/{serviceRegistryModule.js → service-registry.module.js} +28 -17
- package/shared/services/api-config.service.d.ts +41 -0
- package/shared/services/api-config.service.js +175 -8
- package/shared/services/index.d.ts +0 -1
- package/shared/services/index.js +0 -1
- package/validators/custom-validate.validator.d.ts +1 -0
- package/validators/custom-validate.validator.js +1 -0
- package/validators/file-mimetype.validator.d.ts +0 -2
- package/validators/file-mimetype.validator.js +4 -6
- package/validators/is-exists.validator.d.ts +15 -6
- package/validators/is-exists.validator.js +8 -7
- package/validators/is-unique.validator.d.ts +22 -7
- package/validators/is-unique.validator.js +41 -17
- package/vault/vault-config.service.js +1 -1
- package/cache/providers/memory-cache.provider.d.ts +0 -49
- package/cache/providers/memory-cache.provider.js +0 -197
- package/http-client/services/cache.service.d.ts +0 -76
- package/http-client/services/cache.service.js +0 -333
- 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
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeORM Cache Entity
|
|
3
|
+
*
|
|
4
|
+
* Stores cached data in the database with automatic expiration support.
|
|
5
|
+
* Used by TypeormCacheProvider for persistent caching.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Namespace isolation for different cache segments
|
|
9
|
+
* - Automatic expiration handling
|
|
10
|
+
* - TTL tracking
|
|
11
|
+
* - Value JSON serialization
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // In your TypeORM configuration:
|
|
16
|
+
* {
|
|
17
|
+
* entities: [TypeormCacheEntity],
|
|
18
|
+
* // ... other options
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare class TypeormCacheEntity {
|
|
23
|
+
/**
|
|
24
|
+
* Composite key: namespace + key
|
|
25
|
+
* Allows same key in different namespaces
|
|
26
|
+
*/
|
|
27
|
+
key: string;
|
|
28
|
+
/**
|
|
29
|
+
* Namespace for cache isolation
|
|
30
|
+
* Multiple applications can share the same table
|
|
31
|
+
*/
|
|
32
|
+
namespace: string;
|
|
33
|
+
/**
|
|
34
|
+
* Cached value (JSON serialized)
|
|
35
|
+
*/
|
|
36
|
+
value: string;
|
|
37
|
+
/**
|
|
38
|
+
* Expiration timestamp
|
|
39
|
+
* NULL means no expiration
|
|
40
|
+
*/
|
|
41
|
+
expires_at: Date | null;
|
|
42
|
+
/**
|
|
43
|
+
* Time to live in seconds
|
|
44
|
+
* Stored for reference and debugging
|
|
45
|
+
*/
|
|
46
|
+
ttl: number | null;
|
|
47
|
+
/**
|
|
48
|
+
* Creation timestamp
|
|
49
|
+
*/
|
|
50
|
+
created_at: Date;
|
|
51
|
+
/**
|
|
52
|
+
* Last update timestamp
|
|
53
|
+
*/
|
|
54
|
+
updated_at: Date;
|
|
55
|
+
/**
|
|
56
|
+
* Check if entry is expired
|
|
57
|
+
*/
|
|
58
|
+
isExpired(): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Check if entry is valid (not expired)
|
|
61
|
+
*/
|
|
62
|
+
isValid(): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Update value and expiration
|
|
65
|
+
*/
|
|
66
|
+
updateValue(newValue: string, ttl?: number): void;
|
|
67
|
+
/**
|
|
68
|
+
* Get remaining time to live in milliseconds
|
|
69
|
+
*/
|
|
70
|
+
getRemainingTTL(): number;
|
|
71
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.TypeormCacheEntity = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
/**
|
|
15
|
+
* TypeORM Cache Entity
|
|
16
|
+
*
|
|
17
|
+
* Stores cached data in the database with automatic expiration support.
|
|
18
|
+
* Used by TypeormCacheProvider for persistent caching.
|
|
19
|
+
*
|
|
20
|
+
* Features:
|
|
21
|
+
* - Namespace isolation for different cache segments
|
|
22
|
+
* - Automatic expiration handling
|
|
23
|
+
* - TTL tracking
|
|
24
|
+
* - Value JSON serialization
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // In your TypeORM configuration:
|
|
29
|
+
* {
|
|
30
|
+
* entities: [TypeormCacheEntity],
|
|
31
|
+
* // ... other options
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
let TypeormCacheEntity = class TypeormCacheEntity {
|
|
36
|
+
/**
|
|
37
|
+
* Check if entry is expired
|
|
38
|
+
*/
|
|
39
|
+
isExpired() {
|
|
40
|
+
if (!this.expires_at) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
return new Date() > this.expires_at;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Check if entry is valid (not expired)
|
|
47
|
+
*/
|
|
48
|
+
isValid() {
|
|
49
|
+
return !this.isExpired();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Update value and expiration
|
|
53
|
+
*/
|
|
54
|
+
updateValue(newValue, ttl) {
|
|
55
|
+
this.value = newValue;
|
|
56
|
+
if (ttl && ttl > 0) {
|
|
57
|
+
this.ttl = Math.floor(ttl / 1000);
|
|
58
|
+
this.expires_at = new Date(Date.now() + ttl);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.ttl = null;
|
|
62
|
+
this.expires_at = null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get remaining time to live in milliseconds
|
|
67
|
+
*/
|
|
68
|
+
getRemainingTTL() {
|
|
69
|
+
if (!this.expires_at) {
|
|
70
|
+
return -1; // No expiration
|
|
71
|
+
}
|
|
72
|
+
const remaining = this.expires_at.getTime() - Date.now();
|
|
73
|
+
return Math.max(0, remaining);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
exports.TypeormCacheEntity = TypeormCacheEntity;
|
|
77
|
+
__decorate([
|
|
78
|
+
(0, typeorm_1.PrimaryColumn)({ type: 'varchar', length: 255 }),
|
|
79
|
+
(0, typeorm_1.Index)(),
|
|
80
|
+
__metadata("design:type", String)
|
|
81
|
+
], TypeormCacheEntity.prototype, "key", void 0);
|
|
82
|
+
__decorate([
|
|
83
|
+
(0, typeorm_1.PrimaryColumn)({ type: 'varchar', length: 255 }),
|
|
84
|
+
(0, typeorm_1.Index)(),
|
|
85
|
+
__metadata("design:type", String)
|
|
86
|
+
], TypeormCacheEntity.prototype, "namespace", void 0);
|
|
87
|
+
__decorate([
|
|
88
|
+
(0, typeorm_1.Column)({ type: 'text' }),
|
|
89
|
+
__metadata("design:type", String)
|
|
90
|
+
], TypeormCacheEntity.prototype, "value", void 0);
|
|
91
|
+
__decorate([
|
|
92
|
+
(0, typeorm_1.Column)({ type: 'datetime', nullable: true }),
|
|
93
|
+
(0, typeorm_1.Index)(),
|
|
94
|
+
__metadata("design:type", Date)
|
|
95
|
+
], TypeormCacheEntity.prototype, "expires_at", void 0);
|
|
96
|
+
__decorate([
|
|
97
|
+
(0, typeorm_1.Column)({ type: 'int', nullable: true }),
|
|
98
|
+
__metadata("design:type", Number)
|
|
99
|
+
], TypeormCacheEntity.prototype, "ttl", void 0);
|
|
100
|
+
__decorate([
|
|
101
|
+
(0, typeorm_1.CreateDateColumn)({ type: 'datetime', name: 'created_at' }),
|
|
102
|
+
__metadata("design:type", Date)
|
|
103
|
+
], TypeormCacheEntity.prototype, "created_at", void 0);
|
|
104
|
+
__decorate([
|
|
105
|
+
(0, typeorm_1.UpdateDateColumn)({ type: 'datetime', name: 'updated_at' }),
|
|
106
|
+
__metadata("design:type", Date)
|
|
107
|
+
], TypeormCacheEntity.prototype, "updated_at", void 0);
|
|
108
|
+
exports.TypeormCacheEntity = TypeormCacheEntity = __decorate([
|
|
109
|
+
(0, typeorm_1.Entity)('typeorm_cache')
|
|
110
|
+
], TypeormCacheEntity);
|
package/cache/index.d.ts
CHANGED
|
@@ -6,9 +6,10 @@ export { CacheWarmupService, type CacheWarmupConfig, type CacheWarmupResult, } f
|
|
|
6
6
|
export { CacheMetricsService, type CacheMetrics, type CacheOperationRecord, } from './cache-metrics.service';
|
|
7
7
|
export { CacheSerializationService, type CacheSerializationOptions, type SerializationResult, type DeserializationResult, } from './cache-serialization.service';
|
|
8
8
|
export { Cacheable, CacheEvict, CachePut, getCacheService, setCacheService, } from './decorators';
|
|
9
|
-
export { ClsCacheProvider,
|
|
9
|
+
export { ClsCacheProvider, LRUCacheProvider, TypeormCacheProvider, RedisCacheProvider, BaseCacheProvider, } from './providers';
|
|
10
10
|
export { REDIS_CLIENT } from './providers/redis-cache.provider';
|
|
11
11
|
export type { CacheProvider } from './interfaces/cache-provider.interface';
|
|
12
|
+
export * from './entities';
|
|
12
13
|
export { CallbackDependency, ChainDependency, DbDependency, FileDependency, TagDependency, TimeDependency, } from './dependencies';
|
|
13
14
|
export { CacheLayer, type CacheDependency, type CacheEvictOptions, type CacheOptions, type CachePutOptions, type CacheableOptions, type CacheStats, type DependencyData, } from './interfaces';
|
|
14
15
|
export { DependencyManager, KeyGenerator, type CachedValueWithDependencies, } from './utils';
|
package/cache/index.js
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
2
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.KeyGenerator = exports.DependencyManager = exports.CacheLayer = exports.TimeDependency = exports.TagDependency = exports.FileDependency = exports.DbDependency = exports.ChainDependency = exports.CallbackDependency = exports.REDIS_CLIENT = exports.BaseCacheProvider = exports.RedisCacheProvider = exports.
|
|
17
|
+
exports.KeyGenerator = exports.DependencyManager = exports.CacheLayer = exports.TimeDependency = exports.TagDependency = exports.FileDependency = exports.DbDependency = exports.ChainDependency = exports.CallbackDependency = exports.REDIS_CLIENT = exports.BaseCacheProvider = exports.RedisCacheProvider = exports.TypeormCacheProvider = exports.LRUCacheProvider = exports.ClsCacheProvider = exports.setCacheService = exports.getCacheService = exports.CachePut = exports.CacheEvict = exports.Cacheable = exports.CacheSerializationService = exports.CacheMetricsService = exports.CacheWarmupService = exports.CacheHealthChecker = exports.CacheService = exports.CACHE_COMPRESSION_THRESHOLD = exports.CACHE_COMPRESSION_ENABLED = exports.CACHE_SERVICE = exports.CacheModule = void 0;
|
|
4
18
|
// Module
|
|
5
19
|
var cache_module_1 = require("./cache.module");
|
|
6
20
|
Object.defineProperty(exports, "CacheModule", { enumerable: true, get: function () { return cache_module_1.CacheModule; } });
|
|
@@ -31,11 +45,14 @@ Object.defineProperty(exports, "setCacheService", { enumerable: true, get: funct
|
|
|
31
45
|
// Providers
|
|
32
46
|
var providers_1 = require("./providers");
|
|
33
47
|
Object.defineProperty(exports, "ClsCacheProvider", { enumerable: true, get: function () { return providers_1.ClsCacheProvider; } });
|
|
34
|
-
Object.defineProperty(exports, "
|
|
48
|
+
Object.defineProperty(exports, "LRUCacheProvider", { enumerable: true, get: function () { return providers_1.LRUCacheProvider; } });
|
|
49
|
+
Object.defineProperty(exports, "TypeormCacheProvider", { enumerable: true, get: function () { return providers_1.TypeormCacheProvider; } });
|
|
35
50
|
Object.defineProperty(exports, "RedisCacheProvider", { enumerable: true, get: function () { return providers_1.RedisCacheProvider; } });
|
|
36
51
|
Object.defineProperty(exports, "BaseCacheProvider", { enumerable: true, get: function () { return providers_1.BaseCacheProvider; } });
|
|
37
52
|
var redis_cache_provider_1 = require("./providers/redis-cache.provider");
|
|
38
53
|
Object.defineProperty(exports, "REDIS_CLIENT", { enumerable: true, get: function () { return redis_cache_provider_1.REDIS_CLIENT; } });
|
|
54
|
+
// Entities
|
|
55
|
+
__exportStar(require("./entities"), exports);
|
|
39
56
|
// Dependencies
|
|
40
57
|
var dependencies_1 = require("./dependencies");
|
|
41
58
|
Object.defineProperty(exports, "CallbackDependency", { enumerable: true, get: function () { return dependencies_1.CallbackDependency; } });
|
|
@@ -35,6 +35,14 @@ export interface CacheOptions {
|
|
|
35
35
|
* @returns true to cache, false to skip
|
|
36
36
|
*/
|
|
37
37
|
condition?: (...args: any[]) => boolean | Promise<boolean>;
|
|
38
|
+
/**
|
|
39
|
+
* Unless condition - skip caching when this condition is true
|
|
40
|
+
* Can be a function (safe) or a string expression (use with caution)
|
|
41
|
+
* @param result - Method return value
|
|
42
|
+
* @param args - Method arguments
|
|
43
|
+
* @returns true to skip caching, false to cache normally
|
|
44
|
+
*/
|
|
45
|
+
unless?: ((result: any, args: any[]) => boolean) | string;
|
|
38
46
|
/**
|
|
39
47
|
* Cache dependencies - cache will be invalidated when dependencies change
|
|
40
48
|
* Similar to Yii2 cache dependency system
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './base-cache.provider';
|
|
2
2
|
export * from './cls-cache.provider';
|
|
3
|
-
export * from './
|
|
3
|
+
export * from './lrucache.provider';
|
|
4
|
+
export * from './typeorm-cache.provider';
|
|
4
5
|
export { REDIS_CLIENT, RedisCacheProvider } from './redis-cache.provider';
|
package/cache/providers/index.js
CHANGED
|
@@ -17,7 +17,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
exports.RedisCacheProvider = exports.REDIS_CLIENT = void 0;
|
|
18
18
|
__exportStar(require("./base-cache.provider"), exports);
|
|
19
19
|
__exportStar(require("./cls-cache.provider"), exports);
|
|
20
|
-
__exportStar(require("./
|
|
20
|
+
__exportStar(require("./lrucache.provider"), exports);
|
|
21
|
+
__exportStar(require("./typeorm-cache.provider"), exports);
|
|
21
22
|
var redis_cache_provider_1 = require("./redis-cache.provider");
|
|
22
23
|
Object.defineProperty(exports, "REDIS_CLIENT", { enumerable: true, get: function () { return redis_cache_provider_1.REDIS_CLIENT; } });
|
|
23
24
|
Object.defineProperty(exports, "RedisCacheProvider", { enumerable: true, get: function () { return redis_cache_provider_1.RedisCacheProvider; } });
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { OnModuleDestroy } from '@nestjs/common';
|
|
2
|
+
import { BaseCacheProvider } from './base-cache.provider';
|
|
3
|
+
/**
|
|
4
|
+
* LRU Memory Cache Provider
|
|
5
|
+
*
|
|
6
|
+
* High-performance in-memory LRU (Least Recently Used) cache provider.
|
|
7
|
+
* This is an L2 cache layer with fast access and automatic eviction.
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - O(1) get/set operations
|
|
11
|
+
* - Automatic LRU eviction when cache is full
|
|
12
|
+
* - Optional TTL (Time To Live) support
|
|
13
|
+
* - Namespace isolation
|
|
14
|
+
* - Cache statistics (size, hit rate, usage percentage)
|
|
15
|
+
*
|
|
16
|
+
* Use Cases:
|
|
17
|
+
* - Session data caching
|
|
18
|
+
* - Frequently accessed configuration
|
|
19
|
+
* - API response caching
|
|
20
|
+
* - Temporary data storage
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const provider = new LRUCacheProvider({
|
|
25
|
+
* maxSize: 1000,
|
|
26
|
+
* ttl: 60000, // optional TTL
|
|
27
|
+
* namespace: 'my-cache',
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare class LRUCacheProvider extends BaseCacheProvider implements OnModuleDestroy {
|
|
32
|
+
private readonly logger;
|
|
33
|
+
private cache;
|
|
34
|
+
private namespace;
|
|
35
|
+
private defaultTtl?;
|
|
36
|
+
constructor(options?: {
|
|
37
|
+
maxSize?: number;
|
|
38
|
+
ttl?: number;
|
|
39
|
+
namespace?: string;
|
|
40
|
+
});
|
|
41
|
+
getName(): string;
|
|
42
|
+
get<T>(key: string): Promise<T | null>;
|
|
43
|
+
set<T>(key: string, value: T, ttl?: number): Promise<void>;
|
|
44
|
+
delete(key: string | string[]): Promise<void>;
|
|
45
|
+
deletePattern(pattern: string): Promise<number>;
|
|
46
|
+
clear(): Promise<void>;
|
|
47
|
+
has(key: string): Promise<boolean>;
|
|
48
|
+
mget<T>(keys: string[]): Promise<(T | null)[]>;
|
|
49
|
+
mset(items: Array<{
|
|
50
|
+
key: string;
|
|
51
|
+
value: any;
|
|
52
|
+
}>, ttl?: number): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Get cache size
|
|
55
|
+
*/
|
|
56
|
+
getSize(): number;
|
|
57
|
+
/**
|
|
58
|
+
* Get cache statistics
|
|
59
|
+
*/
|
|
60
|
+
getStats(): {
|
|
61
|
+
provider: string;
|
|
62
|
+
namespace: string;
|
|
63
|
+
size: any;
|
|
64
|
+
maxSize: any;
|
|
65
|
+
calculatedSize: any;
|
|
66
|
+
usagePercentage: number;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Clean up expired items
|
|
70
|
+
*/
|
|
71
|
+
cleanup(): number;
|
|
72
|
+
/**
|
|
73
|
+
* Destroy the provider
|
|
74
|
+
*/
|
|
75
|
+
onModuleDestroy(): void;
|
|
76
|
+
private getFullKey;
|
|
77
|
+
}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
12
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
13
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
14
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
15
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
16
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
17
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
var LRUCacheProvider_1;
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.LRUCacheProvider = void 0;
|
|
23
|
+
const common_1 = require("@nestjs/common");
|
|
24
|
+
const base_cache_provider_1 = require("./base-cache.provider");
|
|
25
|
+
// Dynamic import to handle ESM/CommonJS interop
|
|
26
|
+
const LRUCacheClass = require('lru-cache').LRUCache;
|
|
27
|
+
/**
|
|
28
|
+
* LRU Memory Cache Provider
|
|
29
|
+
*
|
|
30
|
+
* High-performance in-memory LRU (Least Recently Used) cache provider.
|
|
31
|
+
* This is an L2 cache layer with fast access and automatic eviction.
|
|
32
|
+
*
|
|
33
|
+
* Features:
|
|
34
|
+
* - O(1) get/set operations
|
|
35
|
+
* - Automatic LRU eviction when cache is full
|
|
36
|
+
* - Optional TTL (Time To Live) support
|
|
37
|
+
* - Namespace isolation
|
|
38
|
+
* - Cache statistics (size, hit rate, usage percentage)
|
|
39
|
+
*
|
|
40
|
+
* Use Cases:
|
|
41
|
+
* - Session data caching
|
|
42
|
+
* - Frequently accessed configuration
|
|
43
|
+
* - API response caching
|
|
44
|
+
* - Temporary data storage
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const provider = new LRUCacheProvider({
|
|
49
|
+
* maxSize: 1000,
|
|
50
|
+
* ttl: 60000, // optional TTL
|
|
51
|
+
* namespace: 'my-cache',
|
|
52
|
+
* });
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
let LRUCacheProvider = LRUCacheProvider_1 = class LRUCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
56
|
+
constructor(options) {
|
|
57
|
+
super();
|
|
58
|
+
this.logger = new common_1.Logger(LRUCacheProvider_1.name);
|
|
59
|
+
const { maxSize = 500, ttl, namespace = 'cache:lru' } = options || {};
|
|
60
|
+
this.namespace = namespace;
|
|
61
|
+
this.defaultTtl = ttl;
|
|
62
|
+
this.cache = new LRUCacheClass({
|
|
63
|
+
max: maxSize,
|
|
64
|
+
ttl: ttl,
|
|
65
|
+
updateAgeOnGet: true,
|
|
66
|
+
updateAgeOnHas: true,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
getName() {
|
|
70
|
+
return 'LRUMemory';
|
|
71
|
+
}
|
|
72
|
+
get(key) {
|
|
73
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
74
|
+
try {
|
|
75
|
+
const fullKey = this.getFullKey(key);
|
|
76
|
+
const value = this.cache.get(fullKey);
|
|
77
|
+
return value !== undefined ? value : null;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
this.logger.warn(`Failed to get key ${key}: ${error instanceof Error ? error.message : String(error)}`);
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
set(key, value, ttl) {
|
|
86
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
87
|
+
try {
|
|
88
|
+
const fullKey = this.getFullKey(key);
|
|
89
|
+
const effectiveTtl = ttl !== null && ttl !== void 0 ? ttl : this.defaultTtl;
|
|
90
|
+
this.cache.set(fullKey, value, { ttl: effectiveTtl });
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
throw new Error(`LRUCacheProvider: Failed to set key ${key}: ${error}`);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
delete(key) {
|
|
98
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
99
|
+
try {
|
|
100
|
+
if (Array.isArray(key)) {
|
|
101
|
+
key.forEach((k) => {
|
|
102
|
+
const fullKey = this.getFullKey(k);
|
|
103
|
+
this.cache.delete(fullKey);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
const fullKey = this.getFullKey(key);
|
|
108
|
+
this.cache.delete(fullKey);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
throw new Error(`LRUCacheProvider: Failed to delete keys: ${error}`);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
deletePattern(pattern) {
|
|
117
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
118
|
+
try {
|
|
119
|
+
const regex = this.patternToRegex(pattern);
|
|
120
|
+
const keys = Array.from(this.cache.keys());
|
|
121
|
+
let deleted = 0;
|
|
122
|
+
for (const key of keys) {
|
|
123
|
+
if (regex.test(String(key))) {
|
|
124
|
+
this.cache.delete(key);
|
|
125
|
+
deleted++;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return deleted;
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
throw new Error(`LRUCacheProvider: Failed to delete pattern ${pattern}: ${error}`);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
clear() {
|
|
136
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
+
try {
|
|
138
|
+
this.cache.clear();
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
throw new Error(`LRUCacheProvider: Failed to clear cache: ${error}`);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
has(key) {
|
|
146
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
+
try {
|
|
148
|
+
const fullKey = this.getFullKey(key);
|
|
149
|
+
return this.cache.has(fullKey);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
mget(keys) {
|
|
157
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
158
|
+
try {
|
|
159
|
+
return keys.map((key) => {
|
|
160
|
+
const fullKey = this.getFullKey(key);
|
|
161
|
+
const value = this.cache.get(fullKey);
|
|
162
|
+
return value !== undefined ? value : null;
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
this.logger.warn(`Failed to mget: ${error instanceof Error ? error.message : String(error)}`);
|
|
167
|
+
return keys.map(() => null);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
mset(items, ttl) {
|
|
172
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
173
|
+
try {
|
|
174
|
+
const effectiveTtl = ttl !== null && ttl !== void 0 ? ttl : this.defaultTtl;
|
|
175
|
+
items.forEach((item) => {
|
|
176
|
+
const fullKey = this.getFullKey(item.key);
|
|
177
|
+
this.cache.set(fullKey, item.value, { ttl: effectiveTtl });
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
throw new Error(`LRUCacheProvider: Failed to mset: ${error}`);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Get cache size
|
|
187
|
+
*/
|
|
188
|
+
getSize() {
|
|
189
|
+
return this.cache.size;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get cache statistics
|
|
193
|
+
*/
|
|
194
|
+
getStats() {
|
|
195
|
+
return {
|
|
196
|
+
provider: 'LRUMemory',
|
|
197
|
+
namespace: this.namespace,
|
|
198
|
+
size: this.cache.size,
|
|
199
|
+
maxSize: this.cache.max,
|
|
200
|
+
calculatedSize: this.cache.calculatedSize,
|
|
201
|
+
usagePercentage: this.cache.max
|
|
202
|
+
? (this.cache.size / this.cache.max) * 100
|
|
203
|
+
: 0,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Clean up expired items
|
|
208
|
+
*/
|
|
209
|
+
cleanup() {
|
|
210
|
+
const beforeSize = this.cache.size;
|
|
211
|
+
this.cache.purgeStale();
|
|
212
|
+
return beforeSize - this.cache.size;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Destroy the provider
|
|
216
|
+
*/
|
|
217
|
+
onModuleDestroy() {
|
|
218
|
+
this.cache.clear();
|
|
219
|
+
}
|
|
220
|
+
getFullKey(key) {
|
|
221
|
+
return `${this.namespace}:${key}`;
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
exports.LRUCacheProvider = LRUCacheProvider;
|
|
225
|
+
exports.LRUCacheProvider = LRUCacheProvider = LRUCacheProvider_1 = __decorate([
|
|
226
|
+
(0, common_1.Injectable)(),
|
|
227
|
+
__metadata("design:paramtypes", [Object])
|
|
228
|
+
], LRUCacheProvider);
|
|
@@ -14,6 +14,7 @@ export declare const REDIS_CLIENT: unique symbol;
|
|
|
14
14
|
*/
|
|
15
15
|
export declare class RedisCacheProvider extends BaseCacheProvider {
|
|
16
16
|
private readonly redis?;
|
|
17
|
+
private readonly logger;
|
|
17
18
|
private readonly keyPrefix;
|
|
18
19
|
constructor(redis?: Redis);
|
|
19
20
|
getName(): string;
|
|
@@ -20,6 +20,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
20
20
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
21
|
});
|
|
22
22
|
};
|
|
23
|
+
var RedisCacheProvider_1;
|
|
23
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
25
|
exports.RedisCacheProvider = exports.REDIS_CLIENT = void 0;
|
|
25
26
|
const common_1 = require("@nestjs/common");
|
|
@@ -36,13 +37,14 @@ exports.REDIS_CLIENT = Symbol('REDIS_CLIENT');
|
|
|
36
37
|
*
|
|
37
38
|
* Slowest but most persistent and widely shared cache layer.
|
|
38
39
|
*/
|
|
39
|
-
let RedisCacheProvider = class RedisCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
40
|
+
let RedisCacheProvider = RedisCacheProvider_1 = class RedisCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
40
41
|
constructor(redis) {
|
|
41
42
|
super();
|
|
42
43
|
this.redis = redis;
|
|
44
|
+
this.logger = new common_1.Logger(RedisCacheProvider_1.name);
|
|
43
45
|
this.keyPrefix = 'cache:';
|
|
44
46
|
if (!redis) {
|
|
45
|
-
|
|
47
|
+
this.logger.warn('Redis client not injected. Redis caching will be disabled.');
|
|
46
48
|
}
|
|
47
49
|
}
|
|
48
50
|
getName() {
|
|
@@ -62,7 +64,7 @@ let RedisCacheProvider = class RedisCacheProvider extends base_cache_provider_1.
|
|
|
62
64
|
return JSON.parse(value);
|
|
63
65
|
}
|
|
64
66
|
catch (error) {
|
|
65
|
-
|
|
67
|
+
this.logger.warn(`Failed to get key ${key}: ${error instanceof Error ? error.message : String(error)}`);
|
|
66
68
|
return null;
|
|
67
69
|
}
|
|
68
70
|
});
|
|
@@ -126,7 +128,7 @@ let RedisCacheProvider = class RedisCacheProvider extends base_cache_provider_1.
|
|
|
126
128
|
return deletedCount;
|
|
127
129
|
}
|
|
128
130
|
catch (error) {
|
|
129
|
-
|
|
131
|
+
this.logger.warn(`deletePattern failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
130
132
|
return 0;
|
|
131
133
|
}
|
|
132
134
|
});
|
|
@@ -184,7 +186,7 @@ let RedisCacheProvider = class RedisCacheProvider extends base_cache_provider_1.
|
|
|
184
186
|
});
|
|
185
187
|
}
|
|
186
188
|
catch (error) {
|
|
187
|
-
|
|
189
|
+
this.logger.warn(`mget failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
188
190
|
return keys.map(() => null);
|
|
189
191
|
}
|
|
190
192
|
});
|
|
@@ -236,7 +238,7 @@ let RedisCacheProvider = class RedisCacheProvider extends base_cache_provider_1.
|
|
|
236
238
|
}
|
|
237
239
|
};
|
|
238
240
|
exports.RedisCacheProvider = RedisCacheProvider;
|
|
239
|
-
exports.RedisCacheProvider = RedisCacheProvider = __decorate([
|
|
241
|
+
exports.RedisCacheProvider = RedisCacheProvider = RedisCacheProvider_1 = __decorate([
|
|
240
242
|
(0, common_1.Injectable)(),
|
|
241
243
|
__param(0, (0, common_1.Optional)()),
|
|
242
244
|
__param(0, (0, common_1.Inject)(exports.REDIS_CLIENT)),
|