@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
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { CustomFileTypes, MimeConfig, ResolvedFileTypes } from '../interfaces/custom-file-type.interface';
|
|
2
|
+
import { FileType } from '../enums/file-type.enum';
|
|
3
|
+
/**
|
|
4
|
+
* MIME 类型注册服务
|
|
5
|
+
* 负责管理内置和自定义文件类型
|
|
6
|
+
*/
|
|
7
|
+
export declare class MimeRegistryService {
|
|
8
|
+
private readonly logger;
|
|
9
|
+
private readonly typeMap;
|
|
10
|
+
constructor();
|
|
11
|
+
/**
|
|
12
|
+
* 注册自定义文件类型
|
|
13
|
+
*/
|
|
14
|
+
registerCustomFileTypes(customTypes: CustomFileTypes): void;
|
|
15
|
+
/**
|
|
16
|
+
* 获取 MIME 配置
|
|
17
|
+
*/
|
|
18
|
+
getMimeConfig(type: string): MimeConfig | null;
|
|
19
|
+
/**
|
|
20
|
+
* 解析文件类型为 MIME 类型和扩展名
|
|
21
|
+
*/
|
|
22
|
+
resolveFileTypes(types: Array<FileType | string>): ResolvedFileTypes;
|
|
23
|
+
/**
|
|
24
|
+
* 获取所有注册的类型
|
|
25
|
+
*/
|
|
26
|
+
getAllRegisteredTypes(): string[];
|
|
27
|
+
/**
|
|
28
|
+
* 检查类型是否已注册
|
|
29
|
+
*/
|
|
30
|
+
isTypeRegistered(type: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* 根据 MIME 类型查找类型名称
|
|
33
|
+
*/
|
|
34
|
+
findTypeByMime(mimeType: string): string | null;
|
|
35
|
+
/**
|
|
36
|
+
* 根据扩展名查找类型名称
|
|
37
|
+
*/
|
|
38
|
+
findTypeByExtension(extension: string): string | null;
|
|
39
|
+
/**
|
|
40
|
+
* 初始化内置类型
|
|
41
|
+
*/
|
|
42
|
+
private initializeBuiltInTypes;
|
|
43
|
+
/**
|
|
44
|
+
* 获取默认描述
|
|
45
|
+
*/
|
|
46
|
+
private getDefaultDescription;
|
|
47
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
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 MimeRegistryService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.MimeRegistryService = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const file_type_enum_1 = require("../enums/file-type.enum");
|
|
16
|
+
/**
|
|
17
|
+
* MIME 类型注册服务
|
|
18
|
+
* 负责管理内置和自定义文件类型
|
|
19
|
+
*/
|
|
20
|
+
let MimeRegistryService = MimeRegistryService_1 = class MimeRegistryService {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.logger = new common_1.Logger(MimeRegistryService_1.name);
|
|
23
|
+
this.typeMap = new Map();
|
|
24
|
+
this.initializeBuiltInTypes();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 注册自定义文件类型
|
|
28
|
+
*/
|
|
29
|
+
registerCustomFileTypes(customTypes) {
|
|
30
|
+
Object.entries(customTypes).forEach(([typeName, config]) => {
|
|
31
|
+
const mimeConfig = {
|
|
32
|
+
mimes: Array.isArray(config.mime) ? config.mime : [config.mime],
|
|
33
|
+
extensions: config.extension
|
|
34
|
+
? Array.isArray(config.extension)
|
|
35
|
+
? config.extension
|
|
36
|
+
: [config.extension]
|
|
37
|
+
: [],
|
|
38
|
+
description: config.description || this.getDefaultDescription(typeName),
|
|
39
|
+
icon: config.icon,
|
|
40
|
+
signatures: config.signature,
|
|
41
|
+
fileType: config.isImage
|
|
42
|
+
? 'image'
|
|
43
|
+
: config.isDocument
|
|
44
|
+
? 'document'
|
|
45
|
+
: config.isMedia
|
|
46
|
+
? 'media'
|
|
47
|
+
: 'other',
|
|
48
|
+
};
|
|
49
|
+
this.typeMap.set(typeName, mimeConfig);
|
|
50
|
+
this.logger.debug(`Registered custom file type: ${typeName}`);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 获取 MIME 配置
|
|
55
|
+
*/
|
|
56
|
+
getMimeConfig(type) {
|
|
57
|
+
return this.typeMap.get(type) || null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 解析文件类型为 MIME 类型和扩展名
|
|
61
|
+
*/
|
|
62
|
+
resolveFileTypes(types) {
|
|
63
|
+
const mimes = new Set();
|
|
64
|
+
const exts = new Set();
|
|
65
|
+
const signatureTypes = new Set();
|
|
66
|
+
for (const type of types) {
|
|
67
|
+
// 优先使用注册的配置
|
|
68
|
+
const mimeConfig = this.getMimeConfig(type);
|
|
69
|
+
if (mimeConfig) {
|
|
70
|
+
mimeConfig.mimes.forEach((m) => mimes.add(m));
|
|
71
|
+
mimeConfig.extensions.forEach((e) => exts.add(e));
|
|
72
|
+
if (mimeConfig.signatures) {
|
|
73
|
+
signatureTypes.add(type);
|
|
74
|
+
}
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
// 回退到内置映射
|
|
78
|
+
if (typeof type === 'string' && type in file_type_enum_1.FILE_TYPE_MAP) {
|
|
79
|
+
const mapping = file_type_enum_1.FILE_TYPE_MAP[type];
|
|
80
|
+
mapping.mimes.forEach((m) => mimes.add(m));
|
|
81
|
+
mapping.exts.forEach((e) => exts.add(e));
|
|
82
|
+
signatureTypes.add(type);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
// 直接的 MIME 类型
|
|
86
|
+
mimes.add(type);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
mimes: Array.from(mimes),
|
|
91
|
+
exts: Array.from(exts),
|
|
92
|
+
signatureTypes: Array.from(signatureTypes),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 获取所有注册的类型
|
|
97
|
+
*/
|
|
98
|
+
getAllRegisteredTypes() {
|
|
99
|
+
return Array.from(this.typeMap.keys());
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 检查类型是否已注册
|
|
103
|
+
*/
|
|
104
|
+
isTypeRegistered(type) {
|
|
105
|
+
return this.typeMap.has(type);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 根据 MIME 类型查找类型名称
|
|
109
|
+
*/
|
|
110
|
+
findTypeByMime(mimeType) {
|
|
111
|
+
for (const [typeName, config] of this.typeMap.entries()) {
|
|
112
|
+
if (config.mimes.includes(mimeType)) {
|
|
113
|
+
return typeName;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 根据扩展名查找类型名称
|
|
120
|
+
*/
|
|
121
|
+
findTypeByExtension(extension) {
|
|
122
|
+
const normalizedExt = extension.toLowerCase();
|
|
123
|
+
for (const [typeName, config] of this.typeMap.entries()) {
|
|
124
|
+
if (config.extensions.some((ext) => ext.toLowerCase() === normalizedExt)) {
|
|
125
|
+
return typeName;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* 初始化内置类型
|
|
132
|
+
*/
|
|
133
|
+
initializeBuiltInTypes() {
|
|
134
|
+
Object.entries(file_type_enum_1.FILE_TYPE_MAP).forEach(([type, config]) => {
|
|
135
|
+
if (!this.typeMap.has(type)) {
|
|
136
|
+
this.typeMap.set(type, {
|
|
137
|
+
mimes: config.mimes,
|
|
138
|
+
extensions: config.exts,
|
|
139
|
+
description: this.getDefaultDescription(type),
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
this.logger.log(`Initialized ${this.typeMap.size} built-in file types`);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* 获取默认描述
|
|
147
|
+
*/
|
|
148
|
+
getDefaultDescription(type) {
|
|
149
|
+
const descriptions = {
|
|
150
|
+
Image: 'Image files',
|
|
151
|
+
PDF: 'PDF documents',
|
|
152
|
+
Word: 'Microsoft Word documents',
|
|
153
|
+
Excel: 'Microsoft Excel spreadsheets',
|
|
154
|
+
PowerPoint: 'Microsoft PowerPoint presentations',
|
|
155
|
+
Video: 'Video files',
|
|
156
|
+
Audio: 'Audio files',
|
|
157
|
+
Archive: 'Archive files',
|
|
158
|
+
Text: 'Text files',
|
|
159
|
+
};
|
|
160
|
+
return descriptions[type] || `${type} files`;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
exports.MimeRegistryService = MimeRegistryService;
|
|
164
|
+
exports.MimeRegistryService = MimeRegistryService = MimeRegistryService_1 = __decorate([
|
|
165
|
+
(0, common_1.Injectable)(),
|
|
166
|
+
__metadata("design:paramtypes", [])
|
|
167
|
+
], MimeRegistryService);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checksum计算工具类
|
|
3
|
+
* 提供统一的文件校验和计算方法
|
|
4
|
+
*/
|
|
5
|
+
export declare class ChecksumUtil {
|
|
6
|
+
/**
|
|
7
|
+
* 计算文件checksum
|
|
8
|
+
* @param filePath 文件路径
|
|
9
|
+
* @param algorithm 算法(默认md5)
|
|
10
|
+
* @returns checksum字符串(hex格式)
|
|
11
|
+
*/
|
|
12
|
+
static calculate(filePath: string, algorithm?: 'md5' | 'sha1' | 'sha256'): Promise<string>;
|
|
13
|
+
/**
|
|
14
|
+
* 计算Buffer的checksum
|
|
15
|
+
* @param buffer Buffer数据
|
|
16
|
+
* @param algorithm 算法(默认md5)
|
|
17
|
+
* @returns checksum字符串(hex格式)
|
|
18
|
+
*/
|
|
19
|
+
static calculateFromBuffer(buffer: Buffer, algorithm?: 'md5' | 'sha1' | 'sha256'): string;
|
|
20
|
+
/**
|
|
21
|
+
* 验证文件checksum
|
|
22
|
+
* @param filePath 文件路径
|
|
23
|
+
* @param expectedChecksum 期望的checksum
|
|
24
|
+
* @param algorithm 算法(默认md5)
|
|
25
|
+
* @returns 是否匹配
|
|
26
|
+
*/
|
|
27
|
+
static verify(filePath: string, expectedChecksum: string, algorithm?: 'md5' | 'sha1' | 'sha256'): Promise<boolean>;
|
|
28
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ChecksumUtil = void 0;
|
|
13
|
+
const crypto = require("crypto");
|
|
14
|
+
const fs = require("fs-extra");
|
|
15
|
+
/**
|
|
16
|
+
* Checksum计算工具类
|
|
17
|
+
* 提供统一的文件校验和计算方法
|
|
18
|
+
*/
|
|
19
|
+
class ChecksumUtil {
|
|
20
|
+
/**
|
|
21
|
+
* 计算文件checksum
|
|
22
|
+
* @param filePath 文件路径
|
|
23
|
+
* @param algorithm 算法(默认md5)
|
|
24
|
+
* @returns checksum字符串(hex格式)
|
|
25
|
+
*/
|
|
26
|
+
static calculate(filePath_1) {
|
|
27
|
+
return __awaiter(this, arguments, void 0, function* (filePath, algorithm = 'md5') {
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
const hash = crypto.createHash(algorithm);
|
|
30
|
+
const stream = fs.createReadStream(filePath);
|
|
31
|
+
stream.on('data', (data) => hash.update(data));
|
|
32
|
+
stream.on('end', () => resolve(hash.digest('hex')));
|
|
33
|
+
stream.on('error', (err) => {
|
|
34
|
+
stream.destroy();
|
|
35
|
+
reject(err);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 计算Buffer的checksum
|
|
42
|
+
* @param buffer Buffer数据
|
|
43
|
+
* @param algorithm 算法(默认md5)
|
|
44
|
+
* @returns checksum字符串(hex格式)
|
|
45
|
+
*/
|
|
46
|
+
static calculateFromBuffer(buffer, algorithm = 'md5') {
|
|
47
|
+
const hash = crypto.createHash(algorithm);
|
|
48
|
+
hash.update(buffer);
|
|
49
|
+
return hash.digest('hex');
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 验证文件checksum
|
|
53
|
+
* @param filePath 文件路径
|
|
54
|
+
* @param expectedChecksum 期望的checksum
|
|
55
|
+
* @param algorithm 算法(默认md5)
|
|
56
|
+
* @returns 是否匹配
|
|
57
|
+
*/
|
|
58
|
+
static verify(filePath_1, expectedChecksum_1) {
|
|
59
|
+
return __awaiter(this, arguments, void 0, function* (filePath, expectedChecksum, algorithm = 'md5') {
|
|
60
|
+
const actualChecksum = yield this.calculate(filePath, algorithm);
|
|
61
|
+
return actualChecksum.toLowerCase() === expectedChecksum.toLowerCase();
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.ChecksumUtil = ChecksumUtil;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 动态导入工具类
|
|
3
|
+
* 用于在运行时按需加载可选依赖,类似 TypeORM 的做法
|
|
4
|
+
* 使用 Function 构造器来规避 webpack 的静态分析
|
|
5
|
+
*/
|
|
6
|
+
export declare class DynamicImportUtil {
|
|
7
|
+
/**
|
|
8
|
+
* 动态导入 AWS S3 SDK
|
|
9
|
+
* 只有在实际使用时才会尝试加载
|
|
10
|
+
*/
|
|
11
|
+
static importAwsS3Sdk(): Promise<{
|
|
12
|
+
S3Client: any;
|
|
13
|
+
PutObjectCommand: any;
|
|
14
|
+
GetObjectCommand: any;
|
|
15
|
+
DeleteObjectCommand: any;
|
|
16
|
+
DeleteObjectsCommand: any;
|
|
17
|
+
HeadObjectCommand: any;
|
|
18
|
+
CopyObjectCommand: any;
|
|
19
|
+
ListObjectsV2Command: any;
|
|
20
|
+
getSignedUrl: any;
|
|
21
|
+
}>;
|
|
22
|
+
/**
|
|
23
|
+
* 动态导入阿里云 OSS SDK
|
|
24
|
+
*/
|
|
25
|
+
static importAliOssSdk(): Promise<any>;
|
|
26
|
+
/**
|
|
27
|
+
* 动态导入 MinIO SDK
|
|
28
|
+
*/
|
|
29
|
+
static importMinioSdk(): Promise<any>;
|
|
30
|
+
/**
|
|
31
|
+
* 动态导入图片处理库 Sharp
|
|
32
|
+
*/
|
|
33
|
+
static importSharp(): Promise<any>;
|
|
34
|
+
/**
|
|
35
|
+
* 动态导入 Excel 处理库
|
|
36
|
+
*/
|
|
37
|
+
static importExcelJs(): Promise<any>;
|
|
38
|
+
/**
|
|
39
|
+
* 动态导入 XLSX 处理库
|
|
40
|
+
*/
|
|
41
|
+
static importXlsx(): Promise<any>;
|
|
42
|
+
/**
|
|
43
|
+
* 动态导入 fast-csv 处理库
|
|
44
|
+
*/
|
|
45
|
+
static importFastCsv(): Promise<any>;
|
|
46
|
+
/**
|
|
47
|
+
* 检查依赖是否已安装
|
|
48
|
+
*/
|
|
49
|
+
static checkDependency(modulePath: string): Promise<boolean>;
|
|
50
|
+
/**
|
|
51
|
+
* 批量检查依赖
|
|
52
|
+
*/
|
|
53
|
+
static checkDependencies(modulePaths: string[]): Promise<Record<string, boolean>>;
|
|
54
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 动态导入工具类
|
|
4
|
+
* 用于在运行时按需加载可选依赖,类似 TypeORM 的做法
|
|
5
|
+
* 使用 Function 构造器来规避 webpack 的静态分析
|
|
6
|
+
*/
|
|
7
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.DynamicImportUtil = void 0;
|
|
18
|
+
/**
|
|
19
|
+
* 使用 Function 构造器创建真正的动态导入函数
|
|
20
|
+
* 这样 webpack 就无法在编译时静态分析模块路径
|
|
21
|
+
*/
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
23
|
+
const dynamicImport = new Function('modulePath', 'return import(modulePath)');
|
|
24
|
+
/**
|
|
25
|
+
* 检查模块是否可用
|
|
26
|
+
*/
|
|
27
|
+
function tryImport(modulePath) {
|
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
try {
|
|
30
|
+
return yield dynamicImport(modulePath);
|
|
31
|
+
}
|
|
32
|
+
catch (_a) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
class DynamicImportUtil {
|
|
38
|
+
/**
|
|
39
|
+
* 动态导入 AWS S3 SDK
|
|
40
|
+
* 只有在实际使用时才会尝试加载
|
|
41
|
+
*/
|
|
42
|
+
static importAwsS3Sdk() {
|
|
43
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
44
|
+
const s3Module = yield tryImport('@aws-sdk/client-s3');
|
|
45
|
+
const signedModule = yield tryImport('@aws-sdk/s3-request-presigner');
|
|
46
|
+
if (!s3Module || !signedModule) {
|
|
47
|
+
throw new Error('AWS SDK for S3 is not installed. Please install it using: npm install @aws-sdk/client-s3 @aws-sdk/s3-request-presigner');
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
S3Client: s3Module.S3Client,
|
|
51
|
+
PutObjectCommand: s3Module.PutObjectCommand,
|
|
52
|
+
GetObjectCommand: s3Module.GetObjectCommand,
|
|
53
|
+
DeleteObjectCommand: s3Module.DeleteObjectCommand,
|
|
54
|
+
DeleteObjectsCommand: s3Module.DeleteObjectsCommand,
|
|
55
|
+
HeadObjectCommand: s3Module.HeadObjectCommand,
|
|
56
|
+
CopyObjectCommand: s3Module.CopyObjectCommand,
|
|
57
|
+
ListObjectsV2Command: s3Module.ListObjectsV2Command,
|
|
58
|
+
getSignedUrl: signedModule.getSignedUrl,
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 动态导入阿里云 OSS SDK
|
|
64
|
+
*/
|
|
65
|
+
static importAliOssSdk() {
|
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
const ossModule = yield tryImport('ali-oss');
|
|
68
|
+
if (!ossModule) {
|
|
69
|
+
throw new Error('Aliyun OSS SDK is not installed. Please install it using: npm install ali-oss');
|
|
70
|
+
}
|
|
71
|
+
return ossModule.default || ossModule;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 动态导入 MinIO SDK
|
|
76
|
+
*/
|
|
77
|
+
static importMinioSdk() {
|
|
78
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
const minioModule = yield tryImport('minio');
|
|
80
|
+
if (!minioModule) {
|
|
81
|
+
throw new Error('MinIO SDK is not installed. Please install it using: npm install minio');
|
|
82
|
+
}
|
|
83
|
+
return minioModule.Client || minioModule;
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 动态导入图片处理库 Sharp
|
|
88
|
+
*/
|
|
89
|
+
static importSharp() {
|
|
90
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
91
|
+
const sharpModule = yield tryImport('sharp');
|
|
92
|
+
if (!sharpModule) {
|
|
93
|
+
throw new Error('Sharp is not installed. Please install it using: npm install sharp');
|
|
94
|
+
}
|
|
95
|
+
return sharpModule.default || sharpModule;
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 动态导入 Excel 处理库
|
|
100
|
+
*/
|
|
101
|
+
static importExcelJs() {
|
|
102
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
103
|
+
const excelModule = yield tryImport('exceljs');
|
|
104
|
+
if (!excelModule) {
|
|
105
|
+
throw new Error('ExcelJS is not installed. Please install it using: npm install exceljs');
|
|
106
|
+
}
|
|
107
|
+
return excelModule.default || excelModule;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 动态导入 XLSX 处理库
|
|
112
|
+
*/
|
|
113
|
+
static importXlsx() {
|
|
114
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
115
|
+
const xlsxModule = yield tryImport('xlsx');
|
|
116
|
+
if (!xlsxModule) {
|
|
117
|
+
throw new Error('XLSX is not installed. Please install it using: npm install xlsx');
|
|
118
|
+
}
|
|
119
|
+
return xlsxModule.default || xlsxModule;
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* 动态导入 fast-csv 处理库
|
|
124
|
+
*/
|
|
125
|
+
static importFastCsv() {
|
|
126
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
127
|
+
const csvModule = yield tryImport('fast-csv');
|
|
128
|
+
if (!csvModule) {
|
|
129
|
+
throw new Error('fast-csv is not installed. Please install it using: npm install fast-csv');
|
|
130
|
+
}
|
|
131
|
+
return csvModule.default || csvModule;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* 检查依赖是否已安装
|
|
136
|
+
*/
|
|
137
|
+
static checkDependency(modulePath) {
|
|
138
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
139
|
+
const module = yield tryImport(modulePath);
|
|
140
|
+
return module !== null;
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* 批量检查依赖
|
|
145
|
+
*/
|
|
146
|
+
static checkDependencies(modulePaths) {
|
|
147
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
148
|
+
const results = {};
|
|
149
|
+
yield Promise.all(modulePaths.map((path) => __awaiter(this, void 0, void 0, function* () {
|
|
150
|
+
results[path] = yield this.checkDependency(path);
|
|
151
|
+
})));
|
|
152
|
+
return results;
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.DynamicImportUtil = DynamicImportUtil;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 文件名处理工具类
|
|
3
|
+
* 统一管理文件名的编码、清理、截取等操作
|
|
4
|
+
*/
|
|
5
|
+
export declare class FileNameUtil {
|
|
6
|
+
/**
|
|
7
|
+
* 解码并标准化文件名
|
|
8
|
+
* 1. Multer 默认使用 Latin1 解码,需要转换为 UTF-8
|
|
9
|
+
* 2. 移除特殊字符和控制字符
|
|
10
|
+
* 3. 截取超长文件名到指定长度
|
|
11
|
+
*
|
|
12
|
+
* @param filename 原始文件名
|
|
13
|
+
* @param maxLength 最大长度(默认 100 字符)
|
|
14
|
+
* @returns 处理后的文件名
|
|
15
|
+
*/
|
|
16
|
+
static decodeAndNormalize(filename: string, maxLength?: number): string;
|
|
17
|
+
/**
|
|
18
|
+
* 智能截取文件名(保留扩展名)
|
|
19
|
+
*
|
|
20
|
+
* @param filename 文件名
|
|
21
|
+
* @param maxLength 最大长度
|
|
22
|
+
* @returns 截取后的文件名
|
|
23
|
+
*/
|
|
24
|
+
static truncateWithExtension(filename: string, maxLength: number): string;
|
|
25
|
+
/**
|
|
26
|
+
* 清理文件名(移除危险字符)
|
|
27
|
+
* 移除路径遍历、路径分隔符、控制字符等
|
|
28
|
+
*
|
|
29
|
+
* @param filename 文件名
|
|
30
|
+
* @returns 清理后的文件名
|
|
31
|
+
*/
|
|
32
|
+
static sanitize(filename: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* 清理并保留原始文件名结构
|
|
35
|
+
* 先解码 UTF-8,再清理危险字符
|
|
36
|
+
*
|
|
37
|
+
* @param filename 文件名
|
|
38
|
+
* @returns 清理后的文件名
|
|
39
|
+
*/
|
|
40
|
+
static sanitizeOriginal(filename: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* 提取文件扩展名
|
|
43
|
+
*
|
|
44
|
+
* @param filename 文件名
|
|
45
|
+
* @returns 扩展名(包含点)或空字符串
|
|
46
|
+
*/
|
|
47
|
+
static extractExtension(filename: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* 获取不包含扩展名的文件名
|
|
50
|
+
*
|
|
51
|
+
* @param filename 文件名
|
|
52
|
+
* @returns 不包含扩展名的文件名
|
|
53
|
+
*/
|
|
54
|
+
static getBaseName(filename: string): string;
|
|
55
|
+
/**
|
|
56
|
+
* 检查字符串是否包含有效的字符
|
|
57
|
+
*/
|
|
58
|
+
private static hasValidCharacters;
|
|
59
|
+
}
|