@nest-omni/core 4.1.3-2 → 4.1.3-20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/audit/audit.module.d.ts +10 -0
- package/audit/audit.module.js +63 -1
- package/audit/controllers/audit.controller.d.ts +88 -0
- package/audit/controllers/audit.controller.js +74 -0
- package/audit/decorators/audit-action.decorator.d.ts +74 -0
- package/audit/decorators/audit-action.decorator.js +42 -0
- package/audit/decorators/audit-controller.decorator.d.ts +9 -1
- package/audit/decorators/audit-controller.decorator.js +11 -2
- package/audit/decorators/audit-operation.decorator.d.ts +45 -0
- package/audit/decorators/audit-operation.decorator.js +49 -0
- package/audit/decorators/entity-audit.decorator.d.ts +85 -1
- package/audit/decorators/entity-audit.decorator.js +153 -3
- package/audit/decorators/index.d.ts +2 -0
- package/audit/decorators/index.js +2 -0
- package/audit/dto/audit-log-query.dto.d.ts +3 -0
- package/audit/dto/audit-log-query.dto.js +3 -0
- package/audit/dto/begin-transaction.dto.d.ts +3 -0
- package/audit/dto/begin-transaction.dto.js +3 -0
- package/audit/dto/compare-entities.dto.d.ts +3 -0
- package/audit/dto/compare-entities.dto.js +3 -0
- package/audit/dto/pre-check-restore.dto.d.ts +3 -0
- package/audit/dto/pre-check-restore.dto.js +3 -0
- package/audit/dto/restore-entity.dto.d.ts +3 -0
- package/audit/dto/restore-entity.dto.js +3 -0
- package/audit/entities/audit-action-summary.entity.d.ts +23 -0
- package/audit/entities/audit-action-summary.entity.js +101 -0
- package/audit/entities/entity-audit-log.entity.d.ts +11 -0
- package/audit/entities/entity-audit-log.entity.js +57 -2
- package/audit/entities/entity-transaction.entity.d.ts +11 -2
- package/audit/entities/entity-transaction.entity.js +42 -3
- package/audit/entities/index.d.ts +3 -0
- package/audit/entities/index.js +3 -0
- package/audit/entities/manual-operation-log.entity.d.ts +4 -0
- package/audit/entities/manual-operation-log.entity.js +12 -1
- package/audit/entities/operation-template.entity.d.ts +4 -0
- package/audit/entities/operation-template.entity.js +4 -0
- package/audit/enums/audit.enums.d.ts +37 -6
- package/audit/enums/audit.enums.js +40 -7
- package/audit/index.d.ts +4 -1
- package/audit/index.js +34 -1
- package/audit/interceptors/audit-action.interceptor.d.ts +38 -0
- package/audit/interceptors/audit-action.interceptor.js +215 -0
- package/audit/interceptors/audit.interceptor.d.ts +15 -0
- package/audit/interceptors/audit.interceptor.js +23 -1
- package/audit/interceptors/index.d.ts +1 -0
- package/audit/interceptors/index.js +1 -0
- package/audit/interfaces/audit.interfaces.d.ts +187 -2
- package/audit/services/audit-action.service.d.ts +141 -0
- package/audit/services/audit-action.service.js +244 -0
- package/audit/services/audit-context.service.d.ts +97 -0
- package/audit/services/audit-context.service.js +185 -0
- package/audit/services/audit-strategy.service.d.ts +6 -0
- package/audit/services/audit-strategy.service.js +13 -0
- package/audit/services/entity-audit.service.d.ts +230 -3
- package/audit/services/entity-audit.service.js +607 -14
- package/audit/services/index.d.ts +3 -0
- package/audit/services/index.js +3 -0
- package/audit/services/manual-audit-log.service.d.ts +134 -9
- package/audit/services/manual-audit-log.service.js +157 -40
- package/audit/services/multi-database.service.d.ts +9 -2
- package/audit/services/multi-database.service.js +9 -21
- package/audit/services/operation-description.service.d.ts +71 -2
- package/audit/services/operation-description.service.js +231 -20
- package/audit/services/transaction-audit.service.d.ts +30 -0
- package/audit/services/transaction-audit.service.js +53 -5
- package/audit/subscribers/entity-audit.subscriber.d.ts +19 -0
- package/audit/subscribers/entity-audit.subscriber.js +76 -1
- package/cache/cache-metrics.service.d.ts +67 -0
- package/cache/cache-metrics.service.js +68 -4
- package/cache/cache-serialization.service.d.ts +31 -0
- package/cache/cache-serialization.service.js +25 -0
- package/cache/cache.constants.d.ts +9 -0
- package/cache/cache.constants.js +9 -0
- package/cache/cache.health.d.ts +26 -0
- package/cache/cache.health.js +30 -0
- package/cache/cache.module.d.ts +82 -2
- package/cache/cache.module.js +76 -5
- package/cache/cache.service.d.ts +140 -0
- package/cache/cache.service.js +169 -0
- package/cache/cache.warmup.service.d.ts +39 -0
- package/cache/cache.warmup.service.js +32 -0
- package/cache/decorators/cache-evict.decorator.d.ts +47 -0
- package/cache/decorators/cache-evict.decorator.js +56 -0
- package/cache/decorators/cache-put.decorator.d.ts +34 -0
- package/cache/decorators/cache-put.decorator.js +39 -0
- package/cache/decorators/cacheable.decorator.d.ts +40 -0
- package/cache/decorators/cacheable.decorator.js +55 -0
- package/cache/dependencies/callback.dependency.d.ts +33 -0
- package/cache/dependencies/callback.dependency.js +39 -1
- package/cache/dependencies/chain.dependency.d.ts +28 -0
- package/cache/dependencies/chain.dependency.js +34 -0
- package/cache/dependencies/db.dependency.d.ts +83 -7
- package/cache/dependencies/db.dependency.js +89 -14
- package/cache/dependencies/file.dependency.d.ts +32 -0
- package/cache/dependencies/file.dependency.js +34 -0
- package/cache/dependencies/tag.dependency.d.ts +75 -4
- package/cache/dependencies/tag.dependency.js +145 -11
- package/cache/dependencies/time.dependency.d.ts +43 -0
- package/cache/dependencies/time.dependency.js +43 -0
- package/cache/examples/basic-usage.d.ts +15 -0
- package/cache/examples/basic-usage.js +62 -8
- package/cache/index.js +9 -0
- package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
- package/cache/interfaces/cache-options.interface.d.ts +89 -0
- package/cache/interfaces/cache-options.interface.js +6 -0
- package/cache/interfaces/cache-provider.interface.d.ts +78 -0
- package/cache/providers/base-cache.provider.d.ts +14 -0
- package/cache/providers/base-cache.provider.js +16 -0
- package/cache/providers/cls-cache.provider.d.ts +20 -0
- package/cache/providers/cls-cache.provider.js +28 -0
- package/cache/providers/memory-cache.provider.d.ts +43 -0
- package/cache/providers/memory-cache.provider.js +66 -0
- package/cache/providers/redis-cache.provider.d.ts +26 -0
- package/cache/providers/redis-cache.provider.js +29 -0
- package/cache/utils/dependency-manager.util.d.ts +52 -0
- package/cache/utils/dependency-manager.util.js +59 -0
- package/cache/utils/key-generator.util.d.ts +42 -0
- package/cache/utils/key-generator.util.js +53 -1
- package/common/abstract.entity.d.ts +14 -0
- package/common/abstract.entity.js +14 -0
- package/common/boilerplate.polyfill.d.ts +142 -0
- package/common/boilerplate.polyfill.js +18 -1
- package/common/dto/dto-container.d.ts +16 -0
- package/common/dto/dto-container.js +20 -0
- package/common/dto/dto-decorators.d.ts +18 -0
- package/common/dto/dto-decorators.js +14 -0
- package/common/dto/dto-extensions.d.ts +11 -0
- package/common/dto/dto-extensions.js +9 -0
- package/common/dto/dto-service-accessor.d.ts +17 -0
- package/common/dto/dto-service-accessor.js +18 -0
- package/common/dto/dto-transformer.d.ts +12 -0
- package/common/dto/dto-transformer.js +9 -0
- package/common/dto/index.js +2 -0
- package/common/examples/paginate-and-map.example.d.ts +6 -0
- package/common/examples/paginate-and-map.example.js +26 -0
- package/common/utils.d.ts +15 -0
- package/common/utils.js +15 -0
- package/constants/language-code.js +1 -0
- package/decorators/field.decorators.d.ts +1 -1
- package/decorators/field.decorators.js +8 -1
- package/decorators/property.decorators.js +1 -0
- package/decorators/public-route.decorator.js +1 -0
- package/decorators/transform.decorators.d.ts +27 -0
- package/decorators/transform.decorators.js +29 -0
- package/decorators/translate.decorator.js +1 -0
- package/decorators/user.decorator.js +1 -0
- package/decorators/validator.decorators.d.ts +8 -18
- package/decorators/validator.decorators.js +22 -190
- package/file-upload/controllers/file-access.controller.d.ts +23 -0
- package/file-upload/controllers/file-access.controller.js +128 -0
- package/file-upload/decorators/column.decorator.d.ts +151 -0
- package/file-upload/decorators/column.decorator.js +273 -0
- package/file-upload/decorators/csv-data.decorator.d.ts +30 -0
- package/file-upload/decorators/csv-data.decorator.js +85 -0
- package/file-upload/decorators/csv-import.decorator.d.ts +34 -0
- package/file-upload/decorators/csv-import.decorator.js +24 -0
- package/file-upload/decorators/examples/column-mapping.example.d.ts +76 -0
- package/file-upload/decorators/examples/column-mapping.example.js +122 -0
- package/file-upload/decorators/excel-data.decorator.d.ts +30 -0
- package/file-upload/decorators/excel-data.decorator.js +85 -0
- package/file-upload/decorators/file-upload.decorator.d.ts +83 -0
- package/file-upload/decorators/file-upload.decorator.js +172 -0
- package/file-upload/decorators/index.d.ts +5 -0
- package/file-upload/decorators/index.js +38 -0
- package/file-upload/decorators/process.decorator.d.ts +40 -0
- package/file-upload/decorators/process.decorator.js +52 -0
- package/file-upload/decorators/validate-data.decorator.d.ts +91 -0
- package/file-upload/decorators/validate-data.decorator.js +39 -0
- package/file-upload/dto/create-file.dto.d.ts +24 -0
- package/file-upload/dto/create-file.dto.js +112 -0
- package/file-upload/dto/find-files.dto.d.ts +15 -0
- package/file-upload/dto/find-files.dto.js +76 -0
- package/file-upload/dto/index.d.ts +4 -0
- package/file-upload/dto/index.js +20 -0
- package/file-upload/dto/pagination.dto.d.ts +7 -0
- package/file-upload/dto/pagination.dto.js +39 -0
- package/file-upload/dto/update-file.dto.d.ts +15 -0
- package/file-upload/dto/update-file.dto.js +67 -0
- package/file-upload/entities/file-metadata.entity.d.ts +25 -0
- package/file-upload/entities/file-metadata.entity.js +76 -0
- package/file-upload/entities/file.entity.d.ts +114 -0
- package/file-upload/entities/file.entity.js +350 -0
- package/file-upload/entities/index.d.ts +2 -0
- package/file-upload/entities/index.js +18 -0
- package/file-upload/enums/file-type.enum.d.ts +72 -0
- package/file-upload/enums/file-type.enum.js +212 -0
- package/file-upload/exceptions/file-upload.exception.d.ts +57 -0
- package/file-upload/exceptions/file-upload.exception.js +120 -0
- package/file-upload/exceptions/index.d.ts +1 -0
- package/file-upload/exceptions/index.js +17 -0
- package/file-upload/file-upload.module.d.ts +89 -0
- package/file-upload/file-upload.module.js +292 -0
- package/file-upload/index.d.ts +37 -0
- package/file-upload/index.js +77 -0
- package/file-upload/interceptors/file-upload.interceptor.d.ts +101 -0
- package/file-upload/interceptors/file-upload.interceptor.js +594 -0
- package/file-upload/interceptors/index.d.ts +1 -0
- package/file-upload/interceptors/index.js +17 -0
- package/file-upload/interfaces/custom-file-type.interface.d.ts +72 -0
- package/file-upload/interfaces/custom-file-type.interface.js +2 -0
- package/file-upload/interfaces/file-buffer.interface.d.ts +72 -0
- package/file-upload/interfaces/file-buffer.interface.js +2 -0
- package/file-upload/interfaces/file-entity.interface.d.ts +142 -0
- package/file-upload/interfaces/file-entity.interface.js +28 -0
- package/file-upload/interfaces/file-metadata.interface.d.ts +21 -0
- package/file-upload/interfaces/file-metadata.interface.js +2 -0
- package/file-upload/interfaces/file-processor.interface.d.ts +93 -0
- package/file-upload/interfaces/file-processor.interface.js +2 -0
- package/file-upload/interfaces/file-upload-options.interface.d.ts +74 -0
- package/file-upload/interfaces/file-upload-options.interface.js +5 -0
- package/file-upload/interfaces/index.d.ts +7 -0
- package/file-upload/interfaces/index.js +24 -0
- package/file-upload/interfaces/processor-options.interface.d.ts +102 -0
- package/file-upload/interfaces/processor-options.interface.js +2 -0
- package/file-upload/interfaces/storage-provider.interface.d.ts +239 -0
- package/file-upload/interfaces/storage-provider.interface.js +2 -0
- package/file-upload/interfaces/upload-options.interface.d.ts +19 -0
- package/file-upload/interfaces/upload-options.interface.js +2 -0
- package/file-upload/processors/csv.processor.d.ts +98 -0
- package/file-upload/processors/csv.processor.js +391 -0
- package/file-upload/processors/excel.processor.d.ts +130 -0
- package/file-upload/processors/excel.processor.js +547 -0
- package/file-upload/processors/image.processor.d.ts +199 -0
- package/file-upload/processors/image.processor.js +377 -0
- package/file-upload/providers/index.d.ts +2 -0
- package/file-upload/providers/index.js +18 -0
- package/file-upload/providers/local-storage.provider.d.ts +98 -0
- package/file-upload/providers/local-storage.provider.js +484 -0
- package/file-upload/providers/s3-storage.provider.d.ts +87 -0
- package/file-upload/providers/s3-storage.provider.js +455 -0
- package/file-upload/services/file-signature-validator.service.d.ts +118 -0
- package/file-upload/services/file-signature-validator.service.js +376 -0
- package/file-upload/services/file.service.d.ts +193 -0
- package/file-upload/services/file.service.js +638 -0
- package/file-upload/services/index.d.ts +4 -0
- package/file-upload/services/index.js +20 -0
- package/file-upload/services/malicious-file-detector.service.d.ts +300 -0
- package/file-upload/services/malicious-file-detector.service.js +1234 -0
- package/file-upload/services/mime-registry.service.d.ts +47 -0
- package/file-upload/services/mime-registry.service.js +167 -0
- package/file-upload/utils/checksum.util.d.ts +28 -0
- package/file-upload/utils/checksum.util.js +65 -0
- package/file-upload/utils/dynamic-import.util.d.ts +54 -0
- package/file-upload/utils/dynamic-import.util.js +156 -0
- package/file-upload/utils/filename.util.d.ts +59 -0
- package/file-upload/utils/filename.util.js +184 -0
- package/file-upload/utils/filepath.util.d.ts +70 -0
- package/file-upload/utils/filepath.util.js +152 -0
- package/file-upload/utils/index.d.ts +4 -0
- package/file-upload/utils/index.js +20 -0
- package/filters/constraint-errors.js +1 -0
- package/helpers/common.helper.d.ts +13 -0
- package/helpers/common.helper.js +13 -0
- package/http-client/config/http-client.config.d.ts +20 -0
- package/http-client/config/http-client.config.js +48 -21
- package/http-client/decorators/http-client.decorators.d.ts +55 -14
- package/http-client/decorators/http-client.decorators.js +154 -78
- package/http-client/entities/http-log.entity.d.ts +217 -8
- package/http-client/entities/http-log.entity.js +7 -22
- package/http-client/errors/http-client.errors.d.ts +57 -0
- package/http-client/errors/http-client.errors.js +58 -0
- package/http-client/examples/advanced-usage.example.d.ts +40 -0
- package/http-client/examples/advanced-usage.example.js +53 -61
- package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
- package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
- package/http-client/examples/basic-usage.example.d.ts +60 -0
- package/http-client/examples/basic-usage.example.js +60 -0
- package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
- package/http-client/examples/multi-api-configuration.example.js +76 -5
- package/http-client/examples/proxy-from-environment.example.d.ts +133 -0
- package/http-client/examples/proxy-from-environment.example.js +409 -0
- package/http-client/http-client.module.d.ts +48 -2
- package/http-client/http-client.module.js +147 -68
- package/http-client/index.d.ts +1 -1
- package/http-client/index.js +8 -0
- package/http-client/interfaces/api-client-config.interface.d.ts +80 -45
- package/http-client/interfaces/api-client-config.interface.js +3 -0
- package/http-client/interfaces/http-client-config.interface.d.ts +109 -52
- package/http-client/services/api-client-registry.service.d.ts +50 -11
- package/http-client/services/api-client-registry.service.js +90 -250
- package/http-client/services/circuit-breaker.service.d.ts +115 -2
- package/http-client/services/circuit-breaker.service.js +237 -7
- package/http-client/services/http-client.service.d.ts +124 -14
- package/http-client/services/http-client.service.js +437 -148
- package/http-client/services/http-log-query.service.d.ts +83 -0
- package/http-client/services/http-log-query.service.js +121 -13
- package/http-client/services/http-replay.service.d.ts +101 -0
- package/http-client/services/http-replay.service.js +86 -0
- package/http-client/services/index.d.ts +0 -1
- package/http-client/services/index.js +0 -1
- package/http-client/services/log-cleanup.service.d.ts +63 -0
- package/http-client/services/log-cleanup.service.js +54 -2
- package/http-client/services/logging.service.d.ts +116 -7
- package/http-client/services/logging.service.js +349 -86
- package/http-client/utils/call-stack-extractor.util.d.ts +63 -0
- package/http-client/utils/call-stack-extractor.util.js +83 -0
- package/http-client/utils/context-extractor.util.d.ts +49 -0
- package/http-client/utils/context-extractor.util.js +52 -0
- package/http-client/utils/curl-generator.util.d.ts +21 -0
- package/http-client/utils/curl-generator.util.js +44 -3
- package/http-client/utils/index.d.ts +1 -0
- package/http-client/utils/index.js +1 -0
- package/http-client/utils/proxy-environment.util.d.ts +42 -0
- package/http-client/utils/proxy-environment.util.js +148 -0
- package/http-client/utils/request-id.util.d.ts +18 -0
- package/http-client/utils/request-id.util.js +20 -0
- package/http-client/utils/retry-recorder.util.d.ts +42 -0
- package/http-client/utils/retry-recorder.util.js +44 -0
- package/http-client/utils/security-validator.util.d.ts +118 -0
- package/http-client/utils/security-validator.util.js +352 -0
- package/index.d.ts +3 -1
- package/index.js +12 -1
- package/interceptors/translation-interceptor.service.js +5 -0
- package/package.json +11 -7
- package/providers/context.provider.js +2 -0
- package/providers/generator.provider.d.ts +4 -0
- package/providers/generator.provider.js +4 -0
- package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
- package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
- package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
- package/redis-lock/examples/lock-strategy.examples.js +130 -15
- package/redis-lock/index.d.ts +2 -0
- package/redis-lock/index.js +8 -1
- package/redis-lock/lock-heartbeat.service.d.ts +80 -0
- package/redis-lock/lock-heartbeat.service.js +232 -0
- package/redis-lock/redis-lock.decorator.d.ts +101 -0
- package/redis-lock/redis-lock.decorator.js +120 -0
- package/redis-lock/redis-lock.module.d.ts +66 -0
- package/redis-lock/redis-lock.module.js +175 -70
- package/redis-lock/redis-lock.service.d.ts +282 -0
- package/redis-lock/redis-lock.service.js +343 -20
- package/setup/bootstrap.setup.d.ts +1 -0
- package/setup/bootstrap.setup.js +21 -0
- package/setup/index.d.ts +1 -0
- package/setup/index.js +1 -0
- package/setup/mode.setup.d.ts +44 -0
- package/setup/mode.setup.js +44 -0
- package/setup/run-in-mode.decorator.d.ts +56 -0
- package/setup/run-in-mode.decorator.js +92 -0
- package/setup/schedule.decorator.d.ts +227 -0
- package/setup/schedule.decorator.js +240 -12
- package/setup/worker.decorator.d.ts +86 -0
- package/setup/worker.decorator.js +97 -0
- package/shared/index.d.ts +1 -1
- package/shared/index.js +1 -1
- package/shared/{serviceRegistryModule.js → service-registry.module.js} +19 -17
- package/shared/services/api-config.service.d.ts +3 -0
- package/shared/services/api-config.service.js +21 -9
- package/shared/services/index.d.ts +0 -1
- package/shared/services/index.js +0 -1
- package/validator-json/decorators.d.ts +17 -0
- package/validator-json/decorators.js +17 -2
- package/validator-json/default.d.ts +6 -0
- package/validator-json/default.js +30 -2
- package/validator-json/defaultConverters.js +1 -0
- package/validator-json/options.d.ts +23 -0
- package/validators/common-validators.d.ts +143 -0
- package/validators/common-validators.js +249 -0
- package/validators/custom-validate.examples.d.ts +23 -0
- package/validators/custom-validate.examples.js +78 -6
- package/validators/custom-validate.validator.d.ts +108 -0
- package/validators/custom-validate.validator.js +85 -0
- package/validators/file-mimetype.validator.d.ts +0 -2
- package/validators/file-mimetype.validator.js +4 -6
- package/validators/index.d.ts +1 -0
- package/validators/index.js +1 -0
- package/validators/is-exists.validator.d.ts +26 -6
- package/validators/is-exists.validator.js +30 -7
- package/validators/is-unique.validator.d.ts +33 -7
- package/validators/is-unique.validator.js +59 -17
- package/validators/skip-empty.validator.d.ts +5 -0
- package/validators/skip-empty.validator.js +5 -0
- package/vault/interfaces/vault-options.interface.d.ts +9 -0
- package/vault/vault-config.loader.d.ts +30 -0
- package/vault/vault-config.loader.js +48 -1
- package/vault/vault-config.service.d.ts +53 -0
- package/vault/vault-config.service.js +57 -0
- package/vault/vault.module.d.ts +4 -0
- package/vault/vault.module.js +4 -0
- package/decorators/examples/validation-decorators.example.d.ts +0 -69
- package/decorators/examples/validation-decorators.example.js +0 -331
- package/http-client/services/cache.service.d.ts +0 -24
- package/http-client/services/cache.service.js +0 -264
- package/shared/services/validator.service.d.ts +0 -3
- package/shared/services/validator.service.js +0 -20
- /package/shared/{serviceRegistryModule.d.ts → service-registry.module.d.ts} +0 -0
|
@@ -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);
|
|
@@ -1,10 +1,52 @@
|
|
|
1
1
|
import type { CacheKeyOptions } from '../interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* Utility class for generating cache keys
|
|
4
|
+
*/
|
|
2
5
|
export declare class KeyGenerator {
|
|
6
|
+
/**
|
|
7
|
+
* Generate cache key from options and method arguments
|
|
8
|
+
*
|
|
9
|
+
* @param options - Cache key options
|
|
10
|
+
* @param args - Method arguments
|
|
11
|
+
* @returns Generated cache key
|
|
12
|
+
*/
|
|
3
13
|
static generate(options: CacheKeyOptions, args: any[]): string;
|
|
14
|
+
/**
|
|
15
|
+
* Generate key from method arguments
|
|
16
|
+
*
|
|
17
|
+
* @param args - Method arguments
|
|
18
|
+
* @returns Serialized key
|
|
19
|
+
*/
|
|
4
20
|
static generateFromArgs(args: any[]): string;
|
|
21
|
+
/**
|
|
22
|
+
* Normalize key (remove invalid characters, enforce length limits)
|
|
23
|
+
*
|
|
24
|
+
* @param key - Raw key
|
|
25
|
+
* @param maxLength - Maximum key length (default 250)
|
|
26
|
+
* @returns Normalized key
|
|
27
|
+
*/
|
|
5
28
|
static normalize(key: string, maxLength?: number): string;
|
|
29
|
+
/**
|
|
30
|
+
* Add namespace to key
|
|
31
|
+
*
|
|
32
|
+
* @param key - Original key
|
|
33
|
+
* @param namespace - Namespace
|
|
34
|
+
* @returns Namespaced key
|
|
35
|
+
*/
|
|
6
36
|
static addNamespace(key: string, namespace?: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Generate hash code for a string
|
|
39
|
+
*
|
|
40
|
+
* @param str - Input string
|
|
41
|
+
* @returns Hash code as string
|
|
42
|
+
*/
|
|
7
43
|
static hashCode(str: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Parse pattern into segments for matching
|
|
46
|
+
*
|
|
47
|
+
* @param pattern - Pattern with wildcards
|
|
48
|
+
* @returns Pattern segments
|
|
49
|
+
*/
|
|
8
50
|
static parsePattern(pattern: string): {
|
|
9
51
|
prefix: string;
|
|
10
52
|
suffix: string;
|
|
@@ -1,60 +1,112 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.KeyGenerator = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Utility class for generating cache keys
|
|
6
|
+
*/
|
|
4
7
|
class KeyGenerator {
|
|
8
|
+
/**
|
|
9
|
+
* Generate cache key from options and method arguments
|
|
10
|
+
*
|
|
11
|
+
* @param options - Cache key options
|
|
12
|
+
* @param args - Method arguments
|
|
13
|
+
* @returns Generated cache key
|
|
14
|
+
*/
|
|
5
15
|
static generate(options, args) {
|
|
6
16
|
let key;
|
|
7
17
|
if (typeof options.key === 'function') {
|
|
18
|
+
// Dynamic key generation using function
|
|
8
19
|
key = options.key(...args);
|
|
9
20
|
}
|
|
10
21
|
else if (typeof options.key === 'string') {
|
|
22
|
+
// Static key
|
|
11
23
|
key = options.key;
|
|
12
24
|
}
|
|
13
25
|
else if (options.includeAllArgs) {
|
|
26
|
+
// Auto-generate key from all arguments
|
|
14
27
|
key = this.generateFromArgs(args);
|
|
15
28
|
}
|
|
16
29
|
else {
|
|
30
|
+
// Default: use first argument as key
|
|
17
31
|
key = args.length > 0 ? String(args[0]) : 'default';
|
|
18
32
|
}
|
|
33
|
+
// Add prefix if specified
|
|
19
34
|
if (options.prefix) {
|
|
20
35
|
key = `${options.prefix}${key}`;
|
|
21
36
|
}
|
|
22
37
|
return key;
|
|
23
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Generate key from method arguments
|
|
41
|
+
*
|
|
42
|
+
* @param args - Method arguments
|
|
43
|
+
* @returns Serialized key
|
|
44
|
+
*/
|
|
24
45
|
static generateFromArgs(args) {
|
|
25
46
|
if (args.length === 0) {
|
|
26
47
|
return 'default';
|
|
27
48
|
}
|
|
28
49
|
try {
|
|
50
|
+
// Serialize arguments to JSON
|
|
29
51
|
return JSON.stringify(args);
|
|
30
52
|
}
|
|
31
53
|
catch (_a) {
|
|
54
|
+
// Fallback to string concatenation
|
|
32
55
|
return args.map((arg) => String(arg)).join(':');
|
|
33
56
|
}
|
|
34
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Normalize key (remove invalid characters, enforce length limits)
|
|
60
|
+
*
|
|
61
|
+
* @param key - Raw key
|
|
62
|
+
* @param maxLength - Maximum key length (default 250)
|
|
63
|
+
* @returns Normalized key
|
|
64
|
+
*/
|
|
35
65
|
static normalize(key, maxLength = 250) {
|
|
66
|
+
// Remove or replace invalid characters
|
|
36
67
|
let normalized = key.replace(/[\s\n\r\t]/g, '_');
|
|
68
|
+
// Enforce length limit
|
|
37
69
|
if (normalized.length > maxLength) {
|
|
70
|
+
// Use hash for long keys
|
|
38
71
|
const hash = this.hashCode(normalized);
|
|
39
72
|
normalized = normalized.substring(0, maxLength - 10) + '_' + hash;
|
|
40
73
|
}
|
|
41
74
|
return normalized;
|
|
42
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Add namespace to key
|
|
78
|
+
*
|
|
79
|
+
* @param key - Original key
|
|
80
|
+
* @param namespace - Namespace
|
|
81
|
+
* @returns Namespaced key
|
|
82
|
+
*/
|
|
43
83
|
static addNamespace(key, namespace) {
|
|
44
84
|
if (!namespace) {
|
|
45
85
|
return key;
|
|
46
86
|
}
|
|
47
87
|
return `${namespace}:${key}`;
|
|
48
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Generate hash code for a string
|
|
91
|
+
*
|
|
92
|
+
* @param str - Input string
|
|
93
|
+
* @returns Hash code as string
|
|
94
|
+
*/
|
|
49
95
|
static hashCode(str) {
|
|
50
96
|
let hash = 0;
|
|
51
97
|
for (let i = 0; i < str.length; i++) {
|
|
52
98
|
const char = str.charCodeAt(i);
|
|
53
99
|
hash = (hash << 5) - hash + char;
|
|
54
|
-
hash = hash & hash;
|
|
100
|
+
hash = hash & hash; // Convert to 32bit integer
|
|
55
101
|
}
|
|
56
102
|
return Math.abs(hash).toString(36);
|
|
57
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Parse pattern into segments for matching
|
|
106
|
+
*
|
|
107
|
+
* @param pattern - Pattern with wildcards
|
|
108
|
+
* @returns Pattern segments
|
|
109
|
+
*/
|
|
58
110
|
static parsePattern(pattern) {
|
|
59
111
|
const wildcardIndex = pattern.indexOf('*');
|
|
60
112
|
if (wildcardIndex === -1) {
|
|
@@ -1,9 +1,23 @@
|
|
|
1
1
|
import type { AbstractDto, AbstractTranslationDto } from './dto/abstract.dto';
|
|
2
2
|
import { LanguageCode } from '../constants';
|
|
3
|
+
/**
|
|
4
|
+
* Abstract DTO-able Entity
|
|
5
|
+
*
|
|
6
|
+
* @description Base class that provides toDto functionality without any database fields.
|
|
7
|
+
* Use this for view entities or other entities that don't need createdAt/updatedAt fields.
|
|
8
|
+
*/
|
|
3
9
|
export declare abstract class AbstractDtoEntity<DTO, O = never> {
|
|
4
10
|
translations?: AbstractTranslationEntity[];
|
|
5
11
|
toDto(options?: O): DTO;
|
|
6
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Abstract Entity
|
|
15
|
+
*
|
|
16
|
+
* @description This class is an abstract class for all entities.
|
|
17
|
+
* It's experimental and recommended using it only in microservice architecture,
|
|
18
|
+
* otherwise just delete and use your own entity.
|
|
19
|
+
* Extends AbstractDtoEntity and adds createdAt/updatedAt timestamp fields.
|
|
20
|
+
*/
|
|
7
21
|
export declare abstract class AbstractBaseEntity<DTO, O> extends AbstractDtoEntity<DTO, O> {
|
|
8
22
|
createdAt: Date;
|
|
9
23
|
updatedAt: Date;
|
|
@@ -14,6 +14,12 @@ const typeorm_1 = require("typeorm");
|
|
|
14
14
|
const decorators_1 = require("../decorators");
|
|
15
15
|
const constants_1 = require("../constants");
|
|
16
16
|
const uuid_1 = require("uuid");
|
|
17
|
+
/**
|
|
18
|
+
* Abstract DTO-able Entity
|
|
19
|
+
*
|
|
20
|
+
* @description Base class that provides toDto functionality without any database fields.
|
|
21
|
+
* Use this for view entities or other entities that don't need createdAt/updatedAt fields.
|
|
22
|
+
*/
|
|
17
23
|
class AbstractDtoEntity {
|
|
18
24
|
toDto(options) {
|
|
19
25
|
const dtoClass = Object.getPrototypeOf(this).dtoClass;
|
|
@@ -24,6 +30,14 @@ class AbstractDtoEntity {
|
|
|
24
30
|
}
|
|
25
31
|
}
|
|
26
32
|
exports.AbstractDtoEntity = AbstractDtoEntity;
|
|
33
|
+
/**
|
|
34
|
+
* Abstract Entity
|
|
35
|
+
*
|
|
36
|
+
* @description This class is an abstract class for all entities.
|
|
37
|
+
* It's experimental and recommended using it only in microservice architecture,
|
|
38
|
+
* otherwise just delete and use your own entity.
|
|
39
|
+
* Extends AbstractDtoEntity and adds createdAt/updatedAt timestamp fields.
|
|
40
|
+
*/
|
|
27
41
|
class AbstractBaseEntity extends AbstractDtoEntity {
|
|
28
42
|
}
|
|
29
43
|
exports.AbstractBaseEntity = AbstractBaseEntity;
|
|
@@ -25,6 +25,91 @@ declare module 'typeorm' {
|
|
|
25
25
|
takeAll: boolean;
|
|
26
26
|
skipCount: boolean;
|
|
27
27
|
}>): Promise<[Entity[], PageMetaDto]>;
|
|
28
|
+
/**
|
|
29
|
+
* Paginate and automatically map entities to DTOs in a single call.
|
|
30
|
+
* This method combines paginate() and toPageDto() into one convenient method.
|
|
31
|
+
*
|
|
32
|
+
* @param pageOptionsDto Pagination options (page, pageSize, order, etc.)
|
|
33
|
+
* @param options Configuration options
|
|
34
|
+
* @param options.dtoOptions Options to pass to the toDto() method of each entity
|
|
35
|
+
* @param options.skipCount Skip counting total items (improves performance)
|
|
36
|
+
* @param options.takeAll Fetch all items without limit (ignores pageSize)
|
|
37
|
+
* @param options.transform Optional callback to transform items before mapping to DTOs (supports both sync and async)
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* Basic usage - automatically maps entities to DTOs:
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const queryBuilder = userRepository.createQueryBuilder('user');
|
|
43
|
+
* const pageDto = await queryBuilder.paginateAndMap(pageOptionsDto);
|
|
44
|
+
* return pageDto; // Returns PageDto<UserDto>
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* With toDto options:
|
|
49
|
+
* ```typescript
|
|
50
|
+
* const queryBuilder = userRepository.createQueryBuilder('user');
|
|
51
|
+
* const pageDto = await queryBuilder.paginateAndMap(pageOptionsDto, {
|
|
52
|
+
* dtoOptions: { includeRelations: true }
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* With synchronous transform callback:
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const queryBuilder = orderRepository.createQueryBuilder('order');
|
|
60
|
+
* const pageDto = await queryBuilder.paginateAndMap(pageOptionsDto, {
|
|
61
|
+
* transform: (items) => items.filter(order => order.status === 'active')
|
|
62
|
+
* });
|
|
63
|
+
* ```
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* With async transform callback for complex operations:
|
|
67
|
+
* ```typescript
|
|
68
|
+
* const queryBuilder = orderRepository.createQueryBuilder('order');
|
|
69
|
+
* const pageDto = await queryBuilder.paginateAndMap(pageOptionsDto, {
|
|
70
|
+
* transform: async (items) => {
|
|
71
|
+
* // Perform async operations on items
|
|
72
|
+
* const enrichedItems = await Promise.all(
|
|
73
|
+
* items.map(async (order) => {
|
|
74
|
+
* order.additionalData = await externalService.getData(order.id);
|
|
75
|
+
* return order;
|
|
76
|
+
* })
|
|
77
|
+
* );
|
|
78
|
+
* return enrichedItems.filter(order => order.isValid);
|
|
79
|
+
* }
|
|
80
|
+
* });
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* Complete example with all options:
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const queryBuilder = productRepository
|
|
87
|
+
* .createQueryBuilder('product')
|
|
88
|
+
* .leftJoinAndSelect('product.category', 'category')
|
|
89
|
+
* .where('product.isActive = :isActive', { isActive: true });
|
|
90
|
+
*
|
|
91
|
+
* const pageDto = await queryBuilder.paginateAndMap(pageOptionsDto, {
|
|
92
|
+
* dtoOptions: { includeCategory: true },
|
|
93
|
+
* skipCount: false,
|
|
94
|
+
* transform: async (items) => {
|
|
95
|
+
* // Enrich products with external data
|
|
96
|
+
* const enrichedProducts = await Promise.all(
|
|
97
|
+
* items.map(async (product) => {
|
|
98
|
+
* product.reviews = await reviewService.getReviews(product.id);
|
|
99
|
+
* return product;
|
|
100
|
+
* })
|
|
101
|
+
* );
|
|
102
|
+
* // Filter out products with no stock
|
|
103
|
+
* return enrichedProducts.filter(product => product.stock > 0);
|
|
104
|
+
* }
|
|
105
|
+
* });
|
|
106
|
+
*
|
|
107
|
+
* // Returns PageDto<ProductDto> with enriched and filtered data
|
|
108
|
+
* return pageDto;
|
|
109
|
+
* ```
|
|
110
|
+
*
|
|
111
|
+
* @returns Promise resolving to PageDto with mapped DTOs
|
|
112
|
+
*/
|
|
28
113
|
paginateAndMap<Dto extends AbstractDto, DtoOptions = unknown>(this: SelectQueryBuilder<Entity>, pageOptionsDto: PageOptionsDto, options?: Partial<{
|
|
29
114
|
dtoOptions: DtoOptions;
|
|
30
115
|
skipCount: boolean;
|
|
@@ -35,9 +120,66 @@ declare module 'typeorm' {
|
|
|
35
120
|
leftJoin<AliasEntity extends AbstractEntity, A extends string>(this: SelectQueryBuilder<Entity>, property: `${A}.${Exclude<KeyOfType<AliasEntity, AbstractEntity>, symbol>}`, alias: string, condition?: string, parameters?: ObjectLiteral): this;
|
|
36
121
|
innerJoinAndSelect<AliasEntity extends AbstractEntity, A extends string>(this: SelectQueryBuilder<Entity>, property: `${A}.${Exclude<KeyOfType<AliasEntity, AbstractEntity>, symbol>}`, alias: string, condition?: string, parameters?: ObjectLiteral): this;
|
|
37
122
|
innerJoin<AliasEntity extends AbstractEntity, A extends string>(this: SelectQueryBuilder<Entity>, property: `${A}.${Exclude<KeyOfType<AliasEntity, AbstractEntity>, symbol>}`, alias: string, condition?: string, parameters?: ObjectLiteral): this;
|
|
123
|
+
/**
|
|
124
|
+
* Iterate over entity results in batches using async iteration.
|
|
125
|
+
*
|
|
126
|
+
* @param options.batchSize Number of entities to retrieve per batch (default: 1000)
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```typescript
|
|
130
|
+
* const queryBuilder = repository.createQueryBuilder('entity');
|
|
131
|
+
*
|
|
132
|
+
* for await (const batch of queryBuilder.iterate({ batchSize: 500 })) {
|
|
133
|
+
* console.log(`Processing batch of ${batch.length} entities`);
|
|
134
|
+
* // Process each batch of entities
|
|
135
|
+
* await processEntities(batch);
|
|
136
|
+
* }
|
|
137
|
+
* ```
|
|
138
|
+
*
|
|
139
|
+
* @returns An async iterator that yields arrays of entities
|
|
140
|
+
*/
|
|
38
141
|
iterate(this: SelectQueryBuilder<Entity>, options?: {
|
|
39
142
|
batchSize?: number;
|
|
40
143
|
}): AsyncIterableIterator<Entity[]>;
|
|
144
|
+
/**
|
|
145
|
+
* Process entity results in batches by calling a callback function.
|
|
146
|
+
* The callback can accept either individual entities or batches of entities.
|
|
147
|
+
*
|
|
148
|
+
* @param callback Function to process each entity or batch of entities
|
|
149
|
+
* @param options
|
|
150
|
+
* @param options.batchSize Number of entities to retrieve per batch (default: 1000)
|
|
151
|
+
* @param options.mode Whether to pass entities individually or as batches to the callback (default: 'batch')
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* Processing individual entities:
|
|
155
|
+
* ```typescript
|
|
156
|
+
* const queryBuilder = repository.createQueryBuilder('entity');
|
|
157
|
+
*
|
|
158
|
+
* await queryBuilder.eachBatch(
|
|
159
|
+
* async (entity) => {
|
|
160
|
+
* // Process each individual entity
|
|
161
|
+
* console.log(`Processing entity: ${entity.id}`);
|
|
162
|
+
* await processEntity(entity);
|
|
163
|
+
* },
|
|
164
|
+
* { batchSize: 100, mode: 'single' }
|
|
165
|
+
* );
|
|
166
|
+
* ```
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* Processing batches of entities:
|
|
170
|
+
* ```typescript
|
|
171
|
+
* const queryBuilder = repository.createQueryBuilder('entity');
|
|
172
|
+
*
|
|
173
|
+
* await queryBuilder.eachBatch(
|
|
174
|
+
* async (batch) => {
|
|
175
|
+
* // Process each batch of entities
|
|
176
|
+
* console.log(`Processing batch of ${batch.length} entities`);
|
|
177
|
+
* await processEntities(batch);
|
|
178
|
+
* },
|
|
179
|
+
* { batchSize: 500, mode: 'batch' }
|
|
180
|
+
* );
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
41
183
|
eachBatch(this: SelectQueryBuilder<Entity>, callback: (item: Entity) => Promise<void> | void, options?: {
|
|
42
184
|
batchSize?: number;
|
|
43
185
|
mode?: 'single';
|
|
@@ -30,13 +30,16 @@ const page_meta_dto_1 = require("./dto/page-meta.dto");
|
|
|
30
30
|
const providers_1 = require("../providers");
|
|
31
31
|
Array.prototype.toDtos = function (options) {
|
|
32
32
|
return (0, lodash_1.compact)((0, lodash_1.map)(this, (item) => {
|
|
33
|
+
// Check if item exists and has toDto method
|
|
33
34
|
if (item && typeof item.toDto === 'function') {
|
|
34
35
|
return item.toDto(options);
|
|
35
36
|
}
|
|
37
|
+
// Skip items that don't have toDto method
|
|
36
38
|
return undefined;
|
|
37
39
|
}));
|
|
38
40
|
};
|
|
39
41
|
Array.prototype.getByLanguage = function (languageCode) {
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
40
43
|
return this.find((translation) => languageCode === translation.languageCode)
|
|
41
44
|
.text;
|
|
42
45
|
};
|
|
@@ -49,7 +52,7 @@ typeorm_1.SelectQueryBuilder.prototype.searchByString = function (q, columnNames
|
|
|
49
52
|
}
|
|
50
53
|
this.andWhere(new typeorm_1.Brackets((qb) => {
|
|
51
54
|
for (const item of columnNames) {
|
|
52
|
-
qb.orWhere(`${item}
|
|
55
|
+
qb.orWhere(`${item} LIKE :q`);
|
|
53
56
|
}
|
|
54
57
|
}));
|
|
55
58
|
if (options === null || options === void 0 ? void 0 : options.formStart) {
|
|
@@ -77,16 +80,22 @@ typeorm_1.SelectQueryBuilder.prototype.paginate = function (pageOptionsDto, opti
|
|
|
77
80
|
return [entities, pageMetaDto];
|
|
78
81
|
});
|
|
79
82
|
};
|
|
83
|
+
/**
|
|
84
|
+
* Implementation of paginateAndMap
|
|
85
|
+
*/
|
|
80
86
|
typeorm_1.SelectQueryBuilder.prototype.paginateAndMap = function (pageOptionsDto, options) {
|
|
81
87
|
return __awaiter(this, void 0, void 0, function* () {
|
|
88
|
+
// Call paginate to get entities and meta
|
|
82
89
|
const [entities, pageMetaDto] = yield this.paginate(pageOptionsDto, {
|
|
83
90
|
skipCount: options === null || options === void 0 ? void 0 : options.skipCount,
|
|
84
91
|
takeAll: options === null || options === void 0 ? void 0 : options.takeAll,
|
|
85
92
|
});
|
|
93
|
+
// Apply transform if provided (support both sync and async)
|
|
86
94
|
let transformedEntities = entities;
|
|
87
95
|
if (options === null || options === void 0 ? void 0 : options.transform) {
|
|
88
96
|
transformedEntities = yield options.transform(entities);
|
|
89
97
|
}
|
|
98
|
+
// Convert to DTOs and return PageDto
|
|
90
99
|
return transformedEntities.toPageDto(pageMetaDto, options === null || options === void 0 ? void 0 : options.dtoOptions);
|
|
91
100
|
});
|
|
92
101
|
};
|
|
@@ -106,6 +115,9 @@ typeorm_1.SelectQueryBuilder.prototype.withTenant = function (tenantId, tenantFi
|
|
|
106
115
|
}
|
|
107
116
|
return this;
|
|
108
117
|
};
|
|
118
|
+
/**
|
|
119
|
+
* Implementation for the async iterator method
|
|
120
|
+
*/
|
|
109
121
|
typeorm_1.SelectQueryBuilder.prototype.iterate = function (options) {
|
|
110
122
|
return __asyncGenerator(this, arguments, function* () {
|
|
111
123
|
const batchSize = (options === null || options === void 0 ? void 0 : options.batchSize) || 100;
|
|
@@ -124,6 +136,9 @@ typeorm_1.SelectQueryBuilder.prototype.iterate = function (options) {
|
|
|
124
136
|
}
|
|
125
137
|
});
|
|
126
138
|
};
|
|
139
|
+
/**
|
|
140
|
+
* Implementation for the callback-based iteration method
|
|
141
|
+
*/
|
|
127
142
|
typeorm_1.SelectQueryBuilder.prototype.eachBatch = function (callback, options) {
|
|
128
143
|
return __awaiter(this, void 0, void 0, function* () {
|
|
129
144
|
const batchSize = (options === null || options === void 0 ? void 0 : options.batchSize) || 100;
|
|
@@ -134,11 +149,13 @@ typeorm_1.SelectQueryBuilder.prototype.eachBatch = function (callback, options)
|
|
|
134
149
|
const batch = yield this.clone().skip(offset).take(batchSize).getMany();
|
|
135
150
|
if (batch.length > 0) {
|
|
136
151
|
if (mode === 'single') {
|
|
152
|
+
// Process each entity individually
|
|
137
153
|
for (const item of batch) {
|
|
138
154
|
yield callback(item);
|
|
139
155
|
}
|
|
140
156
|
}
|
|
141
157
|
else {
|
|
158
|
+
// Process the entire batch
|
|
142
159
|
yield callback(batch);
|
|
143
160
|
}
|
|
144
161
|
offset += batchSize;
|
|
@@ -1,9 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DTO容器 - 类似class-validator的useContainer机制
|
|
3
|
+
* 全局存储服务容器,供DTO转换时使用
|
|
4
|
+
*/
|
|
1
5
|
export declare class DtoContainer {
|
|
2
6
|
private static instance;
|
|
3
7
|
private container;
|
|
4
8
|
static getInstance(): DtoContainer;
|
|
9
|
+
/**
|
|
10
|
+
* 设置容器 - 类似useContainer
|
|
11
|
+
*/
|
|
5
12
|
static useContainer(container: any): void;
|
|
13
|
+
/**
|
|
14
|
+
* 获取服务实例
|
|
15
|
+
*/
|
|
6
16
|
static get<T = any>(serviceToken: string | symbol | any): Promise<T | null>;
|
|
17
|
+
/**
|
|
18
|
+
* 检查容器是否已初始化
|
|
19
|
+
*/
|
|
7
20
|
static isInitialized(): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* 重置容器 (主要用于测试)
|
|
23
|
+
*/
|
|
8
24
|
static reset(): void;
|
|
9
25
|
}
|
|
@@ -10,6 +10,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.DtoContainer = void 0;
|
|
13
|
+
/**
|
|
14
|
+
* DTO容器 - 类似class-validator的useContainer机制
|
|
15
|
+
* 全局存储服务容器,供DTO转换时使用
|
|
16
|
+
*/
|
|
13
17
|
class DtoContainer {
|
|
14
18
|
constructor() {
|
|
15
19
|
this.container = null;
|
|
@@ -20,9 +24,15 @@ class DtoContainer {
|
|
|
20
24
|
}
|
|
21
25
|
return DtoContainer.instance;
|
|
22
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* 设置容器 - 类似useContainer
|
|
29
|
+
*/
|
|
23
30
|
static useContainer(container) {
|
|
24
31
|
DtoContainer.getInstance().container = container;
|
|
25
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* 获取服务实例
|
|
35
|
+
*/
|
|
26
36
|
static get(serviceToken) {
|
|
27
37
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28
38
|
const instance = DtoContainer.getInstance();
|
|
@@ -31,13 +41,17 @@ class DtoContainer {
|
|
|
31
41
|
return null;
|
|
32
42
|
}
|
|
33
43
|
try {
|
|
44
|
+
// 支持多种容器类型
|
|
34
45
|
if (typeof instance.container.get === 'function') {
|
|
46
|
+
// NestJS容器
|
|
35
47
|
return yield instance.container.get(serviceToken);
|
|
36
48
|
}
|
|
37
49
|
else if (typeof instance.container.resolve === 'function') {
|
|
50
|
+
// ModuleRef
|
|
38
51
|
return yield instance.container.resolve(serviceToken);
|
|
39
52
|
}
|
|
40
53
|
else if (typeof instance.container[serviceToken] === 'function') {
|
|
54
|
+
// 直接的服务实例
|
|
41
55
|
return instance.container[serviceToken];
|
|
42
56
|
}
|
|
43
57
|
console.warn(`Unable to resolve service: ${String(serviceToken)}`);
|
|
@@ -49,9 +63,15 @@ class DtoContainer {
|
|
|
49
63
|
}
|
|
50
64
|
});
|
|
51
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* 检查容器是否已初始化
|
|
68
|
+
*/
|
|
52
69
|
static isInitialized() {
|
|
53
70
|
return DtoContainer.getInstance().container !== null;
|
|
54
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* 重置容器 (主要用于测试)
|
|
74
|
+
*/
|
|
55
75
|
static reset() {
|
|
56
76
|
DtoContainer.getInstance().container = null;
|
|
57
77
|
}
|