@nest-omni/core 4.1.3-2 → 4.1.3-22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/audit/audit.module.d.ts +11 -0
- package/audit/audit.module.js +65 -1
- package/audit/controllers/audit.controller.d.ts +81 -1
- package/audit/controllers/audit.controller.js +67 -0
- package/audit/decorators/audit-action.decorator.d.ts +74 -0
- package/audit/decorators/audit-action.decorator.js +42 -0
- package/audit/decorators/audit-controller.decorator.d.ts +9 -1
- package/audit/decorators/audit-controller.decorator.js +11 -2
- package/audit/decorators/audit-operation.decorator.d.ts +38 -0
- package/audit/decorators/audit-operation.decorator.js +42 -0
- package/audit/decorators/entity-audit.decorator.d.ts +85 -1
- package/audit/decorators/entity-audit.decorator.js +153 -3
- package/audit/decorators/index.d.ts +2 -0
- package/audit/decorators/index.js +2 -0
- package/audit/dto/audit-action-query.dto.d.ts +13 -0
- package/audit/dto/audit-action-query.dto.js +77 -0
- package/audit/dto/audit-log-query.dto.d.ts +3 -0
- package/audit/dto/audit-log-query.dto.js +3 -0
- package/audit/dto/begin-transaction.dto.d.ts +3 -0
- package/audit/dto/begin-transaction.dto.js +3 -0
- package/audit/dto/compare-entities.dto.d.ts +3 -0
- package/audit/dto/compare-entities.dto.js +3 -0
- package/audit/dto/index.d.ts +1 -0
- package/audit/dto/index.js +1 -0
- package/audit/dto/pre-check-restore.dto.d.ts +3 -0
- package/audit/dto/pre-check-restore.dto.js +3 -0
- package/audit/dto/restore-entity.dto.d.ts +3 -0
- package/audit/dto/restore-entity.dto.js +3 -0
- package/audit/entities/audit-action-summary.entity.d.ts +23 -0
- package/audit/entities/audit-action-summary.entity.js +101 -0
- package/audit/entities/entity-audit-log.entity.d.ts +10 -2
- package/audit/entities/entity-audit-log.entity.js +48 -9
- package/audit/entities/entity-transaction.entity.d.ts +11 -2
- package/audit/entities/entity-transaction.entity.js +42 -3
- package/audit/entities/index.d.ts +3 -0
- package/audit/entities/index.js +3 -0
- package/audit/entities/manual-operation-log.entity.d.ts +4 -2
- package/audit/entities/manual-operation-log.entity.js +12 -9
- package/audit/entities/operation-template.entity.d.ts +4 -0
- package/audit/entities/operation-template.entity.js +4 -0
- package/audit/enums/audit.enums.d.ts +29 -6
- package/audit/enums/audit.enums.js +31 -7
- package/audit/examples/decorator-value-mapping.example.d.ts +70 -0
- package/audit/examples/decorator-value-mapping.example.js +414 -0
- package/audit/index.d.ts +5 -1
- package/audit/index.js +38 -1
- package/audit/interceptors/audit-action.interceptor.d.ts +38 -0
- package/audit/interceptors/audit-action.interceptor.js +215 -0
- package/audit/interceptors/audit.interceptor.d.ts +16 -0
- package/audit/interceptors/audit.interceptor.js +41 -11
- package/audit/interceptors/index.d.ts +1 -0
- package/audit/interceptors/index.js +1 -0
- package/audit/interfaces/audit.interfaces.d.ts +174 -4
- package/audit/services/audit-action.service.d.ts +141 -0
- package/audit/services/audit-action.service.js +244 -0
- package/audit/services/audit-context.service.d.ts +106 -0
- package/audit/services/audit-context.service.js +185 -0
- package/audit/services/audit-strategy.service.d.ts +6 -0
- package/audit/services/audit-strategy.service.js +13 -0
- package/audit/services/entity-audit.service.d.ts +273 -5
- package/audit/services/entity-audit.service.js +840 -60
- package/audit/services/index.d.ts +3 -0
- package/audit/services/index.js +3 -0
- package/audit/services/manual-audit-log.service.d.ts +133 -9
- package/audit/services/manual-audit-log.service.js +157 -42
- package/audit/services/multi-database.service.d.ts +9 -2
- package/audit/services/multi-database.service.js +9 -21
- package/audit/services/operation-description.service.d.ts +71 -2
- package/audit/services/operation-description.service.js +231 -20
- package/audit/services/transaction-audit.service.d.ts +30 -0
- package/audit/services/transaction-audit.service.js +53 -5
- package/audit/subscribers/entity-audit.subscriber.d.ts +20 -0
- package/audit/subscribers/entity-audit.subscriber.js +98 -6
- package/cache/cache-metrics.service.d.ts +67 -0
- package/cache/cache-metrics.service.js +68 -4
- package/cache/cache-serialization.service.d.ts +31 -0
- package/cache/cache-serialization.service.js +25 -0
- package/cache/cache.constants.d.ts +9 -0
- package/cache/cache.constants.js +9 -0
- package/cache/cache.health.d.ts +26 -0
- package/cache/cache.health.js +30 -0
- package/cache/cache.module.d.ts +87 -2
- package/cache/cache.module.js +84 -11
- package/cache/cache.service.d.ts +143 -3
- package/cache/cache.service.js +173 -4
- package/cache/cache.warmup.service.d.ts +39 -0
- package/cache/cache.warmup.service.js +32 -0
- package/cache/decorators/cache-evict.decorator.d.ts +47 -0
- package/cache/decorators/cache-evict.decorator.js +56 -0
- package/cache/decorators/cache-put.decorator.d.ts +34 -0
- package/cache/decorators/cache-put.decorator.js +39 -0
- package/cache/decorators/cacheable.decorator.d.ts +40 -0
- package/cache/decorators/cacheable.decorator.js +55 -0
- package/cache/dependencies/callback.dependency.d.ts +33 -0
- package/cache/dependencies/callback.dependency.js +39 -1
- package/cache/dependencies/chain.dependency.d.ts +28 -0
- package/cache/dependencies/chain.dependency.js +34 -0
- package/cache/dependencies/db.dependency.d.ts +83 -7
- package/cache/dependencies/db.dependency.js +89 -14
- package/cache/dependencies/file.dependency.d.ts +32 -0
- package/cache/dependencies/file.dependency.js +34 -0
- package/cache/dependencies/tag.dependency.d.ts +75 -4
- package/cache/dependencies/tag.dependency.js +145 -11
- package/cache/dependencies/time.dependency.d.ts +43 -0
- package/cache/dependencies/time.dependency.js +43 -0
- package/cache/entities/index.d.ts +1 -0
- package/cache/entities/index.js +17 -0
- package/cache/entities/typeorm-cache.entity.d.ts +71 -0
- package/cache/entities/typeorm-cache.entity.js +110 -0
- package/cache/examples/basic-usage.d.ts +15 -0
- package/cache/examples/basic-usage.js +62 -8
- package/cache/index.d.ts +2 -1
- package/cache/index.js +28 -2
- package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
- package/cache/interfaces/cache-options.interface.d.ts +89 -0
- package/cache/interfaces/cache-options.interface.js +6 -0
- package/cache/interfaces/cache-provider.interface.d.ts +78 -0
- package/cache/providers/base-cache.provider.d.ts +14 -0
- package/cache/providers/base-cache.provider.js +16 -0
- package/cache/providers/cls-cache.provider.d.ts +20 -0
- package/cache/providers/cls-cache.provider.js +28 -0
- package/cache/providers/index.d.ts +2 -1
- package/cache/providers/index.js +2 -1
- package/cache/providers/lrucache.provider.d.ts +76 -0
- package/cache/providers/lrucache.provider.js +226 -0
- package/cache/providers/redis-cache.provider.d.ts +26 -0
- package/cache/providers/redis-cache.provider.js +29 -0
- package/cache/providers/typeorm-cache.provider.d.ts +211 -0
- package/cache/providers/typeorm-cache.provider.js +483 -0
- package/cache/utils/dependency-manager.util.d.ts +52 -0
- package/cache/utils/dependency-manager.util.js +59 -0
- package/cache/utils/key-generator.util.d.ts +42 -0
- package/cache/utils/key-generator.util.js +53 -1
- package/common/abstract.entity.d.ts +14 -0
- package/common/abstract.entity.js +14 -0
- package/common/boilerplate.polyfill.d.ts +143 -0
- package/common/boilerplate.polyfill.js +35 -1
- package/common/dto/dto-container.d.ts +16 -0
- package/common/dto/dto-container.js +20 -0
- package/common/dto/dto-decorators.d.ts +18 -0
- package/common/dto/dto-decorators.js +14 -0
- package/common/dto/dto-extensions.d.ts +11 -0
- package/common/dto/dto-extensions.js +9 -0
- package/common/dto/dto-service-accessor.d.ts +17 -0
- package/common/dto/dto-service-accessor.js +18 -0
- package/common/dto/dto-transformer.d.ts +12 -0
- package/common/dto/dto-transformer.js +9 -0
- package/common/dto/index.js +2 -0
- package/common/examples/paginate-and-map.example.d.ts +6 -0
- package/common/examples/paginate-and-map.example.js +26 -0
- package/common/helpers/validation-metadata-helper.d.ts +55 -0
- package/common/helpers/validation-metadata-helper.js +60 -0
- package/common/index.d.ts +1 -0
- package/common/index.js +4 -0
- package/common/utils.d.ts +15 -0
- package/common/utils.js +15 -0
- package/constants/language-code.js +1 -0
- package/decorators/field.decorators.d.ts +72 -3
- package/decorators/field.decorators.js +155 -19
- package/decorators/property.decorators.js +1 -0
- package/decorators/public-route.decorator.js +1 -0
- package/decorators/transform.decorators.d.ts +27 -2
- package/decorators/transform.decorators.js +29 -23
- package/decorators/translate.decorator.js +1 -0
- package/decorators/user.decorator.js +1 -0
- package/decorators/validator.decorators.d.ts +8 -18
- package/decorators/validator.decorators.js +22 -190
- package/file-upload/controllers/file-access.controller.d.ts +23 -0
- package/file-upload/controllers/file-access.controller.js +128 -0
- package/file-upload/decorators/column.decorator.d.ts +151 -0
- package/file-upload/decorators/column.decorator.js +273 -0
- package/file-upload/decorators/csv-data.decorator.d.ts +30 -0
- package/file-upload/decorators/csv-data.decorator.js +85 -0
- package/file-upload/decorators/csv-import.decorator.d.ts +34 -0
- package/file-upload/decorators/csv-import.decorator.js +24 -0
- package/file-upload/decorators/examples/column-mapping.example.d.ts +76 -0
- package/file-upload/decorators/examples/column-mapping.example.js +122 -0
- package/file-upload/decorators/excel-data.decorator.d.ts +30 -0
- package/file-upload/decorators/excel-data.decorator.js +85 -0
- package/file-upload/decorators/file-upload.decorator.d.ts +83 -0
- package/file-upload/decorators/file-upload.decorator.js +172 -0
- package/file-upload/decorators/index.d.ts +5 -0
- package/file-upload/decorators/index.js +38 -0
- package/file-upload/decorators/process.decorator.d.ts +40 -0
- package/file-upload/decorators/process.decorator.js +52 -0
- package/file-upload/decorators/validate-data.decorator.d.ts +91 -0
- package/file-upload/decorators/validate-data.decorator.js +39 -0
- package/file-upload/dto/create-file.dto.d.ts +24 -0
- package/file-upload/dto/create-file.dto.js +112 -0
- package/file-upload/dto/find-files.dto.d.ts +15 -0
- package/file-upload/dto/find-files.dto.js +76 -0
- package/file-upload/dto/index.d.ts +4 -0
- package/file-upload/dto/index.js +20 -0
- package/file-upload/dto/pagination.dto.d.ts +7 -0
- package/file-upload/dto/pagination.dto.js +39 -0
- package/file-upload/dto/update-file.dto.d.ts +15 -0
- package/file-upload/dto/update-file.dto.js +67 -0
- package/file-upload/entities/file-metadata.entity.d.ts +25 -0
- package/file-upload/entities/file-metadata.entity.js +76 -0
- package/file-upload/entities/file.entity.d.ts +114 -0
- package/file-upload/entities/file.entity.js +350 -0
- package/file-upload/entities/index.d.ts +2 -0
- package/file-upload/entities/index.js +18 -0
- package/file-upload/enums/file-type.enum.d.ts +72 -0
- package/file-upload/enums/file-type.enum.js +212 -0
- package/file-upload/exceptions/file-upload.exception.d.ts +57 -0
- package/file-upload/exceptions/file-upload.exception.js +120 -0
- package/file-upload/exceptions/index.d.ts +1 -0
- package/file-upload/exceptions/index.js +17 -0
- package/file-upload/file-upload.module.d.ts +89 -0
- package/file-upload/file-upload.module.js +292 -0
- package/file-upload/index.d.ts +37 -0
- package/file-upload/index.js +77 -0
- package/file-upload/interceptors/file-upload.interceptor.d.ts +101 -0
- package/file-upload/interceptors/file-upload.interceptor.js +594 -0
- package/file-upload/interceptors/index.d.ts +1 -0
- package/file-upload/interceptors/index.js +17 -0
- package/file-upload/interfaces/custom-file-type.interface.d.ts +72 -0
- package/file-upload/interfaces/custom-file-type.interface.js +2 -0
- package/file-upload/interfaces/file-buffer.interface.d.ts +72 -0
- package/file-upload/interfaces/file-buffer.interface.js +2 -0
- package/file-upload/interfaces/file-entity.interface.d.ts +142 -0
- package/file-upload/interfaces/file-entity.interface.js +28 -0
- package/file-upload/interfaces/file-metadata.interface.d.ts +21 -0
- package/file-upload/interfaces/file-metadata.interface.js +2 -0
- package/file-upload/interfaces/file-processor.interface.d.ts +93 -0
- package/file-upload/interfaces/file-processor.interface.js +2 -0
- package/file-upload/interfaces/file-upload-options.interface.d.ts +74 -0
- package/file-upload/interfaces/file-upload-options.interface.js +5 -0
- package/file-upload/interfaces/index.d.ts +7 -0
- package/file-upload/interfaces/index.js +24 -0
- package/file-upload/interfaces/processor-options.interface.d.ts +102 -0
- package/file-upload/interfaces/processor-options.interface.js +2 -0
- package/file-upload/interfaces/storage-provider.interface.d.ts +239 -0
- package/file-upload/interfaces/storage-provider.interface.js +2 -0
- package/file-upload/interfaces/upload-options.interface.d.ts +19 -0
- package/file-upload/interfaces/upload-options.interface.js +2 -0
- package/file-upload/processors/csv.processor.d.ts +98 -0
- package/file-upload/processors/csv.processor.js +391 -0
- package/file-upload/processors/excel.processor.d.ts +130 -0
- package/file-upload/processors/excel.processor.js +547 -0
- package/file-upload/processors/image.processor.d.ts +199 -0
- package/file-upload/processors/image.processor.js +377 -0
- package/file-upload/providers/index.d.ts +2 -0
- package/file-upload/providers/index.js +18 -0
- package/file-upload/providers/local-storage.provider.d.ts +98 -0
- package/file-upload/providers/local-storage.provider.js +484 -0
- package/file-upload/providers/s3-storage.provider.d.ts +87 -0
- package/file-upload/providers/s3-storage.provider.js +455 -0
- package/file-upload/services/file-signature-validator.service.d.ts +118 -0
- package/file-upload/services/file-signature-validator.service.js +376 -0
- package/file-upload/services/file.service.d.ts +193 -0
- package/file-upload/services/file.service.js +638 -0
- package/file-upload/services/index.d.ts +4 -0
- package/file-upload/services/index.js +20 -0
- package/file-upload/services/malicious-file-detector.service.d.ts +300 -0
- package/file-upload/services/malicious-file-detector.service.js +1234 -0
- package/file-upload/services/mime-registry.service.d.ts +47 -0
- package/file-upload/services/mime-registry.service.js +167 -0
- package/file-upload/utils/checksum.util.d.ts +28 -0
- package/file-upload/utils/checksum.util.js +65 -0
- package/file-upload/utils/dynamic-import.util.d.ts +54 -0
- package/file-upload/utils/dynamic-import.util.js +156 -0
- package/file-upload/utils/filename.util.d.ts +59 -0
- package/file-upload/utils/filename.util.js +184 -0
- package/file-upload/utils/filepath.util.d.ts +70 -0
- package/file-upload/utils/filepath.util.js +152 -0
- package/file-upload/utils/index.d.ts +4 -0
- package/file-upload/utils/index.js +20 -0
- package/filters/bad-request.filter.js +19 -4
- package/filters/constraint-errors.js +1 -0
- package/helpers/common.helper.d.ts +13 -0
- package/helpers/common.helper.js +13 -0
- package/http-client/config/http-client.config.d.ts +20 -0
- package/http-client/config/http-client.config.js +48 -21
- package/http-client/decorators/http-client.decorators.d.ts +55 -14
- package/http-client/decorators/http-client.decorators.js +154 -78
- package/http-client/entities/http-log.entity.d.ts +217 -8
- package/http-client/entities/http-log.entity.js +7 -22
- package/http-client/errors/http-client.errors.d.ts +57 -0
- package/http-client/errors/http-client.errors.js +58 -0
- package/http-client/examples/advanced-usage.example.d.ts +40 -0
- package/http-client/examples/advanced-usage.example.js +53 -61
- package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
- package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
- package/http-client/examples/basic-usage.example.d.ts +60 -0
- package/http-client/examples/basic-usage.example.js +60 -0
- package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
- package/http-client/examples/multi-api-configuration.example.js +76 -5
- package/http-client/examples/proxy-from-environment.example.d.ts +133 -0
- package/http-client/examples/proxy-from-environment.example.js +409 -0
- package/http-client/http-client.module.d.ts +48 -2
- package/http-client/http-client.module.js +147 -68
- package/http-client/index.d.ts +1 -1
- package/http-client/index.js +8 -0
- package/http-client/interfaces/api-client-config.interface.d.ts +80 -45
- package/http-client/interfaces/api-client-config.interface.js +3 -0
- package/http-client/interfaces/http-client-config.interface.d.ts +109 -52
- package/http-client/services/api-client-registry.service.d.ts +50 -11
- package/http-client/services/api-client-registry.service.js +90 -250
- package/http-client/services/circuit-breaker.service.d.ts +115 -2
- package/http-client/services/circuit-breaker.service.js +237 -7
- package/http-client/services/http-client.service.d.ts +124 -14
- package/http-client/services/http-client.service.js +437 -148
- package/http-client/services/http-log-query.service.d.ts +83 -0
- package/http-client/services/http-log-query.service.js +121 -13
- package/http-client/services/http-replay.service.d.ts +101 -0
- package/http-client/services/http-replay.service.js +86 -0
- package/http-client/services/index.d.ts +0 -1
- package/http-client/services/index.js +0 -1
- package/http-client/services/log-cleanup.service.d.ts +63 -0
- package/http-client/services/log-cleanup.service.js +54 -2
- package/http-client/services/logging.service.d.ts +116 -7
- package/http-client/services/logging.service.js +349 -86
- package/http-client/utils/call-stack-extractor.util.d.ts +63 -0
- package/http-client/utils/call-stack-extractor.util.js +83 -0
- package/http-client/utils/context-extractor.util.d.ts +49 -0
- package/http-client/utils/context-extractor.util.js +54 -0
- package/http-client/utils/curl-generator.util.d.ts +21 -0
- package/http-client/utils/curl-generator.util.js +44 -3
- package/http-client/utils/index.d.ts +1 -0
- package/http-client/utils/index.js +1 -0
- package/http-client/utils/proxy-environment.util.d.ts +42 -0
- package/http-client/utils/proxy-environment.util.js +148 -0
- package/http-client/utils/request-id.util.d.ts +18 -0
- package/http-client/utils/request-id.util.js +20 -0
- package/http-client/utils/retry-recorder.util.d.ts +42 -0
- package/http-client/utils/retry-recorder.util.js +44 -0
- package/http-client/utils/security-validator.util.d.ts +118 -0
- package/http-client/utils/security-validator.util.js +352 -0
- package/index.d.ts +3 -1
- package/index.js +12 -1
- package/interceptors/translation-interceptor.service.js +5 -0
- package/ip-filter/constants.d.ts +21 -0
- package/ip-filter/constants.js +24 -0
- package/ip-filter/decorators/index.d.ts +1 -0
- package/ip-filter/decorators/index.js +17 -0
- package/ip-filter/decorators/ip-filter.decorator.d.ts +58 -0
- package/ip-filter/decorators/ip-filter.decorator.js +79 -0
- package/ip-filter/guards/index.d.ts +1 -0
- package/ip-filter/guards/index.js +17 -0
- package/ip-filter/guards/ip-filter.guard.d.ts +62 -0
- package/ip-filter/guards/ip-filter.guard.js +174 -0
- package/ip-filter/index.d.ts +7 -0
- package/ip-filter/index.js +23 -0
- package/ip-filter/interfaces/index.d.ts +4 -0
- package/ip-filter/interfaces/index.js +20 -0
- package/ip-filter/interfaces/ip-filter-async-options.interface.d.ts +15 -0
- package/ip-filter/interfaces/ip-filter-async-options.interface.js +2 -0
- package/ip-filter/interfaces/ip-filter-metadata.interface.d.ts +26 -0
- package/ip-filter/interfaces/ip-filter-metadata.interface.js +2 -0
- package/ip-filter/interfaces/ip-filter-options.interface.d.ts +34 -0
- package/ip-filter/interfaces/ip-filter-options.interface.js +2 -0
- package/ip-filter/interfaces/ip-rule.interface.d.ts +36 -0
- package/ip-filter/interfaces/ip-rule.interface.js +2 -0
- package/ip-filter/ip-filter.module.d.ts +55 -0
- package/ip-filter/ip-filter.module.js +105 -0
- package/ip-filter/services/index.d.ts +1 -0
- package/ip-filter/services/index.js +17 -0
- package/ip-filter/services/ip-filter.service.d.ts +92 -0
- package/ip-filter/services/ip-filter.service.js +238 -0
- package/ip-filter/utils/index.d.ts +1 -0
- package/ip-filter/utils/index.js +17 -0
- package/ip-filter/utils/ip-utils.d.ts +61 -0
- package/ip-filter/utils/ip-utils.js +162 -0
- package/package.json +32 -29
- package/providers/context.provider.d.ts +9 -0
- package/providers/context.provider.js +15 -0
- package/providers/generator.provider.d.ts +4 -0
- package/providers/generator.provider.js +4 -0
- package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
- package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
- package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
- package/redis-lock/examples/lock-strategy.examples.js +130 -15
- package/redis-lock/index.d.ts +2 -0
- package/redis-lock/index.js +8 -1
- package/redis-lock/lock-heartbeat.service.d.ts +80 -0
- package/redis-lock/lock-heartbeat.service.js +232 -0
- package/redis-lock/redis-lock.decorator.d.ts +101 -0
- package/redis-lock/redis-lock.decorator.js +120 -0
- package/redis-lock/redis-lock.module.d.ts +66 -0
- package/redis-lock/redis-lock.module.js +175 -70
- package/redis-lock/redis-lock.service.d.ts +282 -0
- package/redis-lock/redis-lock.service.js +343 -20
- package/setup/bootstrap.setup.d.ts +2 -1
- package/setup/bootstrap.setup.js +22 -1
- package/setup/index.d.ts +1 -0
- package/setup/index.js +1 -0
- package/setup/mode.setup.d.ts +44 -0
- package/setup/mode.setup.js +44 -0
- package/setup/run-in-mode.decorator.d.ts +56 -0
- package/setup/run-in-mode.decorator.js +92 -0
- package/setup/schedule.decorator.d.ts +227 -0
- package/setup/schedule.decorator.js +240 -12
- package/setup/worker.decorator.d.ts +86 -0
- package/setup/worker.decorator.js +97 -0
- package/shared/index.d.ts +1 -1
- package/shared/index.js +1 -1
- package/shared/{serviceRegistryModule.js → service-registry.module.js} +19 -18
- package/shared/services/api-config.service.d.ts +3 -0
- package/shared/services/api-config.service.js +21 -9
- package/shared/services/index.d.ts +0 -1
- package/shared/services/index.js +0 -1
- package/validator-json/decorators.d.ts +17 -0
- package/validator-json/decorators.js +17 -2
- package/validator-json/default.d.ts +6 -0
- package/validator-json/default.js +30 -2
- package/validator-json/defaultConverters.js +1 -0
- package/validator-json/options.d.ts +23 -0
- package/validators/common-validators.d.ts +143 -0
- package/validators/common-validators.js +249 -0
- package/validators/custom-validate.examples.d.ts +23 -0
- package/validators/custom-validate.examples.js +78 -6
- package/validators/custom-validate.validator.d.ts +108 -0
- package/validators/custom-validate.validator.js +85 -0
- package/validators/file-mimetype.validator.d.ts +0 -2
- package/validators/file-mimetype.validator.js +4 -6
- package/validators/index.d.ts +1 -0
- package/validators/index.js +1 -0
- package/validators/is-exists.validator.d.ts +26 -6
- package/validators/is-exists.validator.js +30 -7
- package/validators/is-unique.validator.d.ts +33 -7
- package/validators/is-unique.validator.js +59 -17
- package/validators/skip-empty.validator.d.ts +5 -0
- package/validators/skip-empty.validator.js +5 -0
- package/vault/interfaces/vault-options.interface.d.ts +9 -0
- package/vault/vault-config.loader.d.ts +30 -0
- package/vault/vault-config.loader.js +48 -1
- package/vault/vault-config.service.d.ts +53 -0
- package/vault/vault-config.service.js +57 -0
- package/vault/vault.module.d.ts +4 -0
- package/vault/vault.module.js +4 -0
- package/cache/providers/memory-cache.provider.d.ts +0 -26
- package/cache/providers/memory-cache.provider.js +0 -171
- package/decorators/examples/validation-decorators.example.d.ts +0 -69
- package/decorators/examples/validation-decorators.example.js +0 -331
- package/http-client/services/cache.service.d.ts +0 -24
- package/http-client/services/cache.service.js +0 -264
- package/shared/services/validator.service.d.ts +0 -3
- package/shared/services/validator.service.js +0 -20
- /package/shared/{serviceRegistryModule.d.ts → service-registry.module.d.ts} +0 -0
|
@@ -0,0 +1,483 @@
|
|
|
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 __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
17
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
18
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
19
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
20
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.TypeormCacheProvider = void 0;
|
|
25
|
+
const common_1 = require("@nestjs/common");
|
|
26
|
+
const typeorm_1 = require("typeorm");
|
|
27
|
+
const base_cache_provider_1 = require("./base-cache.provider");
|
|
28
|
+
const entities_1 = require("../entities");
|
|
29
|
+
/**
|
|
30
|
+
* TypeORM Cache Provider
|
|
31
|
+
*
|
|
32
|
+
* Database-backed cache provider using TypeORM for persistent caching.
|
|
33
|
+
* This is an L3 cache layer that provides:
|
|
34
|
+
* - Persistent cache storage in database
|
|
35
|
+
* - Cross-instance cache sharing
|
|
36
|
+
* - Automatic expiration handling
|
|
37
|
+
* - Namespace isolation
|
|
38
|
+
*
|
|
39
|
+
* Unlike in-memory caches, this provider survives application restarts
|
|
40
|
+
* and can be shared across multiple application instances.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* // In your module:
|
|
45
|
+
* @Module({
|
|
46
|
+
* providers: [
|
|
47
|
+
* {
|
|
48
|
+
* provide: 'TYPEORM_CACHE',
|
|
49
|
+
* useFactory: (dataSource: DataSource) => {
|
|
50
|
+
* return new TypeormCacheProvider({
|
|
51
|
+
* duration: 60000,
|
|
52
|
+
* namespace: 'app:cache',
|
|
53
|
+
* dataSourceName: 'default',
|
|
54
|
+
* });
|
|
55
|
+
* },
|
|
56
|
+
* inject: [DataSource],
|
|
57
|
+
* },
|
|
58
|
+
* ],
|
|
59
|
+
* })
|
|
60
|
+
* export class AppModule {}
|
|
61
|
+
*
|
|
62
|
+
* // In your service:
|
|
63
|
+
* @Injectable()
|
|
64
|
+
* export class UserService {
|
|
65
|
+
* constructor(@Inject('TYPEORM_CACHE') private cache: TypeormCacheProvider) {}
|
|
66
|
+
*
|
|
67
|
+
* async getUser(id: string) {
|
|
68
|
+
* // Try cache first
|
|
69
|
+
* const cached = await this.cache.get(`user:${id}`);
|
|
70
|
+
* if (cached) return cached;
|
|
71
|
+
*
|
|
72
|
+
* // Cache miss - fetch from database
|
|
73
|
+
* const user = await this.userRepository.findOne(id);
|
|
74
|
+
*
|
|
75
|
+
* // Store in cache
|
|
76
|
+
* await this.cache.set(`user:${id}`, user, 60000);
|
|
77
|
+
*
|
|
78
|
+
* return user;
|
|
79
|
+
* }
|
|
80
|
+
* }
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* @see https://typeorm.io/#caching
|
|
84
|
+
*/
|
|
85
|
+
let TypeormCacheProvider = class TypeormCacheProvider extends base_cache_provider_1.BaseCacheProvider {
|
|
86
|
+
constructor(injectedDataSource, options) {
|
|
87
|
+
super();
|
|
88
|
+
this.injectedDataSource = injectedDataSource;
|
|
89
|
+
const { duration = 60000, enabled = true, dataSourceName = 'default', namespace = 'cache', autoCleanup = true, cleanupInterval = 300000, // 5 minutes
|
|
90
|
+
} = options || {};
|
|
91
|
+
this.defaultDuration = duration;
|
|
92
|
+
this.enabled = enabled;
|
|
93
|
+
this.namespace = namespace;
|
|
94
|
+
this.dataSourceName = dataSourceName;
|
|
95
|
+
this.autoCleanup = autoCleanup;
|
|
96
|
+
this.cleanupInterval = cleanupInterval;
|
|
97
|
+
if (this.injectedDataSource) {
|
|
98
|
+
this.dataSource = this.injectedDataSource;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get DataSource for cache operations
|
|
103
|
+
* Uses @nest-omni/transaction's getDataSource utility
|
|
104
|
+
*/
|
|
105
|
+
getDataSource() {
|
|
106
|
+
if (this.dataSource) {
|
|
107
|
+
return this.dataSource;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
// Try to use getDataSource from @nest-omni/transaction
|
|
111
|
+
const { getDataSource } = require('@nest-omni/transaction');
|
|
112
|
+
this.dataSource = getDataSource(this.dataSourceName);
|
|
113
|
+
if (!this.dataSource) {
|
|
114
|
+
throw new Error(`DataSource '${this.dataSourceName}' not found`);
|
|
115
|
+
}
|
|
116
|
+
return this.dataSource;
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
throw new Error(`TypeormCacheProvider requires DataSource '${this.dataSourceName}' to be registered. ` +
|
|
120
|
+
`Use DataSourceUtil.registerDataSource('${this.dataSourceName}', dataSource) or inject it directly.`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get repository for cache operations
|
|
125
|
+
*/
|
|
126
|
+
getRepository() {
|
|
127
|
+
const dataSource = this.getDataSource();
|
|
128
|
+
return dataSource.getRepository(entities_1.TypeormCacheEntity);
|
|
129
|
+
}
|
|
130
|
+
getName() {
|
|
131
|
+
return 'TypeORM';
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get cached value by key
|
|
135
|
+
*/
|
|
136
|
+
get(key) {
|
|
137
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
138
|
+
if (!this.enabled)
|
|
139
|
+
return null;
|
|
140
|
+
try {
|
|
141
|
+
const repository = this.getRepository();
|
|
142
|
+
const fullKey = this.getFullKey(key);
|
|
143
|
+
const cacheEntry = yield repository.findOne({
|
|
144
|
+
where: { key: fullKey, namespace: this.namespace },
|
|
145
|
+
});
|
|
146
|
+
if (!cacheEntry) {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
// Check if expired
|
|
150
|
+
if (cacheEntry.isExpired()) {
|
|
151
|
+
// Clean up expired entry
|
|
152
|
+
yield repository.remove(cacheEntry);
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
// Parse and return cached value
|
|
156
|
+
return JSON.parse(cacheEntry.value);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
console.error(`TypeormCacheProvider.get() failed for key '${key}':`, error);
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Set cache value with optional TTL
|
|
166
|
+
*/
|
|
167
|
+
set(key, value, ttl) {
|
|
168
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
169
|
+
if (!this.enabled)
|
|
170
|
+
return;
|
|
171
|
+
try {
|
|
172
|
+
const repository = this.getRepository();
|
|
173
|
+
const fullKey = this.getFullKey(key);
|
|
174
|
+
const duration = ttl || this.defaultDuration;
|
|
175
|
+
const expiresAt = duration > 0 ? new Date(Date.now() + duration) : null;
|
|
176
|
+
// Check if entry already exists
|
|
177
|
+
const existing = yield repository.findOne({
|
|
178
|
+
where: { key: fullKey, namespace: this.namespace },
|
|
179
|
+
});
|
|
180
|
+
if (existing) {
|
|
181
|
+
// Update existing entry
|
|
182
|
+
existing.updateValue(JSON.stringify(value), duration);
|
|
183
|
+
yield repository.save(existing);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
// Create new entry
|
|
187
|
+
const cacheEntry = repository.create({
|
|
188
|
+
key: fullKey,
|
|
189
|
+
namespace: this.namespace,
|
|
190
|
+
value: JSON.stringify(value),
|
|
191
|
+
expires_at: expiresAt,
|
|
192
|
+
ttl: duration > 0 ? Math.floor(duration / 1000) : null,
|
|
193
|
+
});
|
|
194
|
+
yield repository.save(cacheEntry);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
console.error(`TypeormCacheProvider.set() failed for key '${key}':`, error);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Delete cache entry by key
|
|
204
|
+
*/
|
|
205
|
+
delete(key) {
|
|
206
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
207
|
+
if (!this.enabled)
|
|
208
|
+
return;
|
|
209
|
+
try {
|
|
210
|
+
const repository = this.getRepository();
|
|
211
|
+
const keys = Array.isArray(key) ? key : [key];
|
|
212
|
+
const fullKeys = keys.map((k) => this.getFullKey(k));
|
|
213
|
+
yield repository.delete({
|
|
214
|
+
key: (0, typeorm_1.In)(fullKeys),
|
|
215
|
+
namespace: this.namespace,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
console.error('TypeormCacheProvider.delete() failed:', error);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Delete cache entries matching a pattern
|
|
225
|
+
* Uses SQL LIKE for pattern matching
|
|
226
|
+
*/
|
|
227
|
+
deletePattern(pattern) {
|
|
228
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
229
|
+
if (!this.enabled)
|
|
230
|
+
return 0;
|
|
231
|
+
try {
|
|
232
|
+
const repository = this.getRepository();
|
|
233
|
+
const fullPattern = this.getFullKey(pattern);
|
|
234
|
+
// Use LIKE for pattern matching
|
|
235
|
+
const result = yield repository
|
|
236
|
+
.createQueryBuilder()
|
|
237
|
+
.delete()
|
|
238
|
+
.where('namespace = :namespace', { namespace: this.namespace })
|
|
239
|
+
.andWhere('key LIKE :pattern', { pattern: fullPattern })
|
|
240
|
+
.execute();
|
|
241
|
+
return result.affected || 0;
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
console.error('TypeormCacheProvider.deletePattern() failed:', error);
|
|
245
|
+
return 0;
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Clear all cache entries in namespace
|
|
251
|
+
*/
|
|
252
|
+
clear() {
|
|
253
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
254
|
+
if (!this.enabled)
|
|
255
|
+
return;
|
|
256
|
+
try {
|
|
257
|
+
const repository = this.getRepository();
|
|
258
|
+
yield repository.delete({
|
|
259
|
+
namespace: this.namespace,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
console.error('TypeormCacheProvider.clear() failed:', error);
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Check if key exists and is not expired
|
|
269
|
+
*/
|
|
270
|
+
has(key) {
|
|
271
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
272
|
+
if (!this.enabled)
|
|
273
|
+
return false;
|
|
274
|
+
try {
|
|
275
|
+
const value = yield this.get(key);
|
|
276
|
+
return value !== null;
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Get multiple values by keys
|
|
285
|
+
*/
|
|
286
|
+
mget(keys) {
|
|
287
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
288
|
+
if (!this.enabled || keys.length === 0) {
|
|
289
|
+
return keys.map(() => null);
|
|
290
|
+
}
|
|
291
|
+
try {
|
|
292
|
+
const repository = this.getRepository();
|
|
293
|
+
const fullKeys = keys.map((k) => this.getFullKey(k));
|
|
294
|
+
const cacheEntries = yield repository.find({
|
|
295
|
+
where: {
|
|
296
|
+
key: (0, typeorm_1.In)(fullKeys),
|
|
297
|
+
namespace: this.namespace,
|
|
298
|
+
},
|
|
299
|
+
});
|
|
300
|
+
// Create map for quick lookup
|
|
301
|
+
const entryMap = new Map();
|
|
302
|
+
for (const entry of cacheEntries) {
|
|
303
|
+
if (entry.isValid()) {
|
|
304
|
+
entryMap.set(entry.key, JSON.parse(entry.value));
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
// Clean up expired entry
|
|
308
|
+
yield repository.remove(entry);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// Return values in same order as input keys
|
|
312
|
+
return keys.map((key) => entryMap.get(this.getFullKey(key)) || null);
|
|
313
|
+
}
|
|
314
|
+
catch (error) {
|
|
315
|
+
console.error('TypeormCacheProvider.mget() failed:', error);
|
|
316
|
+
return keys.map(() => null);
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Set multiple cache entries
|
|
322
|
+
*/
|
|
323
|
+
mset(items, ttl) {
|
|
324
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
325
|
+
if (!this.enabled || items.length === 0)
|
|
326
|
+
return;
|
|
327
|
+
try {
|
|
328
|
+
const repository = this.getRepository();
|
|
329
|
+
const duration = ttl || this.defaultDuration;
|
|
330
|
+
const expiresAt = duration > 0 ? new Date(Date.now() + duration) : null;
|
|
331
|
+
for (const item of items) {
|
|
332
|
+
const fullKey = this.getFullKey(item.key);
|
|
333
|
+
const existing = yield repository.findOne({
|
|
334
|
+
where: { key: fullKey, namespace: this.namespace },
|
|
335
|
+
});
|
|
336
|
+
if (existing) {
|
|
337
|
+
existing.updateValue(JSON.stringify(item.value), duration);
|
|
338
|
+
yield repository.save(existing);
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
const cacheEntry = repository.create({
|
|
342
|
+
key: fullKey,
|
|
343
|
+
namespace: this.namespace,
|
|
344
|
+
value: JSON.stringify(item.value),
|
|
345
|
+
expires_at: expiresAt,
|
|
346
|
+
ttl: duration > 0 ? Math.floor(duration / 1000) : null,
|
|
347
|
+
});
|
|
348
|
+
yield repository.save(cacheEntry);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
catch (error) {
|
|
353
|
+
console.error('TypeormCacheProvider.mset() failed:', error);
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Get cache configuration
|
|
359
|
+
*/
|
|
360
|
+
getCacheConfig() {
|
|
361
|
+
return {
|
|
362
|
+
duration: this.defaultDuration,
|
|
363
|
+
type: 'database',
|
|
364
|
+
enabled: this.enabled,
|
|
365
|
+
namespace: this.namespace,
|
|
366
|
+
dataSourceName: this.dataSourceName,
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Get statistics about cache entries
|
|
371
|
+
*/
|
|
372
|
+
getStats() {
|
|
373
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
374
|
+
try {
|
|
375
|
+
const repository = this.getRepository();
|
|
376
|
+
const [total, expired] = yield Promise.all([
|
|
377
|
+
repository.count({
|
|
378
|
+
where: { namespace: this.namespace },
|
|
379
|
+
}),
|
|
380
|
+
repository
|
|
381
|
+
.createQueryBuilder('cache')
|
|
382
|
+
.where('cache.namespace = :namespace', { namespace: this.namespace })
|
|
383
|
+
.andWhere('cache.expires_at < :now', { now: new Date() })
|
|
384
|
+
.getCount(),
|
|
385
|
+
]);
|
|
386
|
+
return {
|
|
387
|
+
totalEntries: total,
|
|
388
|
+
expiredEntries: expired,
|
|
389
|
+
validEntries: total - expired,
|
|
390
|
+
enabled: this.enabled,
|
|
391
|
+
defaultDuration: this.defaultDuration,
|
|
392
|
+
type: 'database',
|
|
393
|
+
namespace: this.namespace,
|
|
394
|
+
dataSourceName: this.dataSourceName,
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
catch (error) {
|
|
398
|
+
return {
|
|
399
|
+
totalEntries: 0,
|
|
400
|
+
expiredEntries: 0,
|
|
401
|
+
validEntries: 0,
|
|
402
|
+
enabled: this.enabled,
|
|
403
|
+
defaultDuration: this.defaultDuration,
|
|
404
|
+
type: 'database',
|
|
405
|
+
namespace: this.namespace,
|
|
406
|
+
dataSourceName: this.dataSourceName,
|
|
407
|
+
error: error instanceof Error ? error.message : String(error),
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Clean up expired entries
|
|
414
|
+
*/
|
|
415
|
+
cleanupExpired() {
|
|
416
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
417
|
+
try {
|
|
418
|
+
const repository = this.getRepository();
|
|
419
|
+
const result = yield repository
|
|
420
|
+
.createQueryBuilder()
|
|
421
|
+
.delete()
|
|
422
|
+
.where('namespace = :namespace', { namespace: this.namespace })
|
|
423
|
+
.andWhere('expires_at < :now', { now: new Date() })
|
|
424
|
+
.execute();
|
|
425
|
+
return result.affected || 0;
|
|
426
|
+
}
|
|
427
|
+
catch (error) {
|
|
428
|
+
console.error('TypeormCacheProvider.cleanupExpired() failed:', error);
|
|
429
|
+
return 0;
|
|
430
|
+
}
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Enable or disable caching
|
|
435
|
+
*/
|
|
436
|
+
setEnabled(enabled) {
|
|
437
|
+
this.enabled = enabled;
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Set namespace
|
|
441
|
+
*/
|
|
442
|
+
setNamespace(namespace) {
|
|
443
|
+
this.namespace = namespace;
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Get full key with namespace
|
|
447
|
+
*/
|
|
448
|
+
getFullKey(key) {
|
|
449
|
+
return key;
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Start automatic cleanup of expired entries
|
|
453
|
+
*/
|
|
454
|
+
startAutoCleanup() {
|
|
455
|
+
if (!this.autoCleanup || this.cleanupTimer) {
|
|
456
|
+
return;
|
|
457
|
+
}
|
|
458
|
+
this.cleanupTimer = setInterval(() => __awaiter(this, void 0, void 0, function* () {
|
|
459
|
+
yield this.cleanupExpired();
|
|
460
|
+
}), this.cleanupInterval);
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Stop automatic cleanup
|
|
464
|
+
*/
|
|
465
|
+
stopAutoCleanup() {
|
|
466
|
+
if (this.cleanupTimer) {
|
|
467
|
+
clearInterval(this.cleanupTimer);
|
|
468
|
+
this.cleanupTimer = undefined;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
onModuleDestroy() {
|
|
472
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
473
|
+
this.stopAutoCleanup();
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
};
|
|
477
|
+
exports.TypeormCacheProvider = TypeormCacheProvider;
|
|
478
|
+
exports.TypeormCacheProvider = TypeormCacheProvider = __decorate([
|
|
479
|
+
(0, common_1.Injectable)(),
|
|
480
|
+
__param(0, (0, common_1.Optional)()),
|
|
481
|
+
__param(0, (0, common_1.Inject)('TYPEORM_CACHE_DATASOURCE')),
|
|
482
|
+
__metadata("design:paramtypes", [typeorm_1.DataSource, Object])
|
|
483
|
+
], TypeormCacheProvider);
|
|
@@ -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
|
}
|
|
@@ -10,7 +10,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.DependencyManager = void 0;
|
|
13
|
+
/**
|
|
14
|
+
* Utility class for managing cache dependencies
|
|
15
|
+
*/
|
|
13
16
|
class DependencyManager {
|
|
17
|
+
/**
|
|
18
|
+
* Wrap a value with its dependencies
|
|
19
|
+
*
|
|
20
|
+
* @param value - The value to cache
|
|
21
|
+
* @param dependencies - Array of dependencies
|
|
22
|
+
* @returns Wrapped value with dependency data
|
|
23
|
+
*/
|
|
14
24
|
static wrapWithDependencies(value, dependencies) {
|
|
15
25
|
return __awaiter(this, void 0, void 0, function* () {
|
|
16
26
|
const wrapped = {
|
|
@@ -23,6 +33,12 @@ class DependencyManager {
|
|
|
23
33
|
return wrapped;
|
|
24
34
|
});
|
|
25
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Capture current state of all dependencies
|
|
38
|
+
*
|
|
39
|
+
* @param dependencies - Array of dependencies
|
|
40
|
+
* @returns Array of dependency data snapshots
|
|
41
|
+
*/
|
|
26
42
|
static captureDependencies(dependencies) {
|
|
27
43
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28
44
|
const results = [];
|
|
@@ -36,6 +52,7 @@ class DependencyManager {
|
|
|
36
52
|
});
|
|
37
53
|
}
|
|
38
54
|
catch (error) {
|
|
55
|
+
// Store error state
|
|
39
56
|
results.push({
|
|
40
57
|
key: dep.getKey(),
|
|
41
58
|
data: {
|
|
@@ -48,44 +65,67 @@ class DependencyManager {
|
|
|
48
65
|
return results;
|
|
49
66
|
});
|
|
50
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if any dependencies have changed
|
|
70
|
+
*
|
|
71
|
+
* @param dependencies - Current dependencies
|
|
72
|
+
* @param cachedDependencies - Previously captured dependency data
|
|
73
|
+
* @returns true if any dependency has changed
|
|
74
|
+
*/
|
|
51
75
|
static areDependenciesChanged(dependencies, cachedDependencies) {
|
|
52
76
|
return __awaiter(this, void 0, void 0, function* () {
|
|
77
|
+
// No dependencies means never changed
|
|
53
78
|
if (!dependencies || dependencies.length === 0) {
|
|
54
79
|
return false;
|
|
55
80
|
}
|
|
81
|
+
// No cached dependency data means changed (first time)
|
|
56
82
|
if (!cachedDependencies || cachedDependencies.length === 0) {
|
|
57
83
|
return true;
|
|
58
84
|
}
|
|
85
|
+
// Different number of dependencies means changed
|
|
59
86
|
if (dependencies.length !== cachedDependencies.length) {
|
|
60
87
|
return true;
|
|
61
88
|
}
|
|
89
|
+
// Check each dependency
|
|
62
90
|
for (let i = 0; i < dependencies.length; i++) {
|
|
63
91
|
const dep = dependencies[i];
|
|
64
92
|
const cached = cachedDependencies[i];
|
|
93
|
+
// Key mismatch means dependencies changed
|
|
65
94
|
if (dep.getKey() !== cached.key) {
|
|
66
95
|
return true;
|
|
67
96
|
}
|
|
68
97
|
try {
|
|
98
|
+
// Check if this dependency has changed
|
|
69
99
|
const changed = yield dep.isChanged(cached.data);
|
|
70
100
|
if (changed) {
|
|
71
101
|
return true;
|
|
72
102
|
}
|
|
73
103
|
}
|
|
74
104
|
catch (_a) {
|
|
105
|
+
// If check fails, consider it changed to be safe
|
|
75
106
|
return true;
|
|
76
107
|
}
|
|
77
108
|
}
|
|
78
109
|
return false;
|
|
79
110
|
});
|
|
80
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Unwrap cached value and validate dependencies
|
|
114
|
+
*
|
|
115
|
+
* @param wrapped - Wrapped cached value
|
|
116
|
+
* @param dependencies - Current dependencies to check
|
|
117
|
+
* @returns Unwrapped value if valid, null if dependencies changed
|
|
118
|
+
*/
|
|
81
119
|
static unwrapAndValidate(wrapped, dependencies) {
|
|
82
120
|
return __awaiter(this, void 0, void 0, function* () {
|
|
83
121
|
if (!wrapped) {
|
|
84
122
|
return null;
|
|
85
123
|
}
|
|
124
|
+
// No dependencies to check, return value
|
|
86
125
|
if (!dependencies || dependencies.length === 0) {
|
|
87
126
|
return wrapped.value;
|
|
88
127
|
}
|
|
128
|
+
// Check if dependencies have changed
|
|
89
129
|
const changed = yield this.areDependenciesChanged(dependencies, wrapped.dependencies);
|
|
90
130
|
if (changed) {
|
|
91
131
|
return null;
|
|
@@ -93,6 +133,13 @@ class DependencyManager {
|
|
|
93
133
|
return wrapped.value;
|
|
94
134
|
});
|
|
95
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Get which dependencies have changed
|
|
138
|
+
*
|
|
139
|
+
* @param dependencies - Current dependencies
|
|
140
|
+
* @param cachedDependencies - Previously captured dependency data
|
|
141
|
+
* @returns Array of changed dependency keys
|
|
142
|
+
*/
|
|
96
143
|
static getChangedDependencies(dependencies, cachedDependencies) {
|
|
97
144
|
return __awaiter(this, void 0, void 0, function* () {
|
|
98
145
|
if (!dependencies || dependencies.length === 0) {
|
|
@@ -121,6 +168,12 @@ class DependencyManager {
|
|
|
121
168
|
return changed;
|
|
122
169
|
});
|
|
123
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Serialize dependencies for storage
|
|
173
|
+
*
|
|
174
|
+
* @param dependencies - Dependency data
|
|
175
|
+
* @returns Serialized string
|
|
176
|
+
*/
|
|
124
177
|
static serializeDependencies(dependencies) {
|
|
125
178
|
try {
|
|
126
179
|
return JSON.stringify(dependencies);
|
|
@@ -129,6 +182,12 @@ class DependencyManager {
|
|
|
129
182
|
return '[]';
|
|
130
183
|
}
|
|
131
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Deserialize dependencies from storage
|
|
187
|
+
*
|
|
188
|
+
* @param serialized - Serialized string
|
|
189
|
+
* @returns Dependency data array
|
|
190
|
+
*/
|
|
132
191
|
static deserializeDependencies(serialized) {
|
|
133
192
|
try {
|
|
134
193
|
return JSON.parse(serialized);
|