@comet/cms-api 9.0.0-beta.1 → 9.0.0-beta.3
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/lib/access-log/access-log.interceptor.d.ts.map +1 -1
- package/lib/access-log/access-log.interceptor.js +6 -6
- package/lib/access-log/access-log.interceptor.js.map +1 -1
- package/lib/auth/guards/comet.guard.d.ts.map +1 -1
- package/lib/auth/guards/comet.guard.js +48 -58
- package/lib/auth/guards/comet.guard.js.map +1 -1
- package/lib/auth/resolver/auth.resolver.js +16 -31
- package/lib/auth/resolver/auth.resolver.js.map +1 -1
- package/lib/auth/services/basic.auth-service.d.ts.map +1 -1
- package/lib/auth/services/basic.auth-service.js +11 -7
- package/lib/auth/services/basic.auth-service.js.map +1 -1
- package/lib/auth/services/jwt.auth-service.d.ts.map +1 -1
- package/lib/auth/services/jwt.auth-service.js +51 -73
- package/lib/auth/services/jwt.auth-service.js.map +1 -1
- package/lib/auth/services/site-preview.auth-service.d.ts.map +1 -1
- package/lib/auth/services/site-preview.auth-service.js +23 -33
- package/lib/auth/services/site-preview.auth-service.js.map +1 -1
- package/lib/auth/util/auth-guard.providers.d.ts +2 -2
- package/lib/auth/util/auth-guard.providers.d.ts.map +1 -1
- package/lib/auth/util/auth-service.interface.d.ts +2 -2
- package/lib/auth/util/auth-service.interface.d.ts.map +1 -1
- package/lib/blob-storage/backends/azure/blob-storage-azure.storage.d.ts +3 -2
- package/lib/blob-storage/backends/azure/blob-storage-azure.storage.d.ts.map +1 -1
- package/lib/blob-storage/backends/azure/blob-storage-azure.storage.js +73 -94
- package/lib/blob-storage/backends/azure/blob-storage-azure.storage.js.map +1 -1
- package/lib/blob-storage/backends/blob-storage-backend.interface.d.ts +2 -1
- package/lib/blob-storage/backends/blob-storage-backend.interface.d.ts.map +1 -1
- package/lib/blob-storage/backends/blob-storage-backend.service.d.ts +5 -2
- package/lib/blob-storage/backends/blob-storage-backend.service.d.ts.map +1 -1
- package/lib/blob-storage/backends/blob-storage-backend.service.js +79 -79
- package/lib/blob-storage/backends/blob-storage-backend.service.js.map +1 -1
- package/lib/blob-storage/backends/file/blob-storage-file.storage.d.ts +3 -2
- package/lib/blob-storage/backends/file/blob-storage-file.storage.d.ts.map +1 -1
- package/lib/blob-storage/backends/file/blob-storage-file.storage.js +77 -95
- package/lib/blob-storage/backends/file/blob-storage-file.storage.js.map +1 -1
- package/lib/blob-storage/backends/s3/blob-storage-s3.config.d.ts +1 -1
- package/lib/blob-storage/backends/s3/blob-storage-s3.config.d.ts.map +1 -1
- package/lib/blob-storage/backends/s3/blob-storage-s3.storage.d.ts +3 -2
- package/lib/blob-storage/backends/s3/blob-storage-s3.storage.d.ts.map +1 -1
- package/lib/blob-storage/backends/s3/blob-storage-s3.storage.js +112 -116
- package/lib/blob-storage/backends/s3/blob-storage-s3.storage.js.map +1 -1
- package/lib/blob-storage/blob-storage.config.d.ts +3 -3
- package/lib/blob-storage/blob-storage.config.d.ts.map +1 -1
- package/lib/blob-storage/cache/dto/file-cache.interface.d.ts +1 -1
- package/lib/blob-storage/cache/dto/file-cache.interface.d.ts.map +1 -1
- package/lib/blob-storage/cache/scaled-images-cache.service.js +38 -53
- package/lib/blob-storage/cache/scaled-images-cache.service.js.map +1 -1
- package/lib/blocks/SpaceBlock/migrations/MigrationTo1.d.ts +1 -1
- package/lib/blocks/SpaceBlock/migrations/MigrationTo1.d.ts.map +1 -1
- package/lib/blocks/SpaceBlock/migrations/MigrationTo1.js +4 -1
- package/lib/blocks/SpaceBlock/migrations/MigrationTo1.js.map +1 -1
- package/lib/blocks/SpaceBlock/migrations/MigrationTo2.d.ts +1 -1
- package/lib/blocks/SpaceBlock/migrations/MigrationTo2.d.ts.map +1 -1
- package/lib/blocks/SpaceBlock/migrations/MigrationTo2.js +1 -12
- package/lib/blocks/SpaceBlock/migrations/MigrationTo2.js.map +1 -1
- package/lib/blocks/YouTubeVideoBlock/migrations/1-remove-aspect-ratio.migration.d.ts +1 -1
- package/lib/blocks/YouTubeVideoBlock/migrations/1-remove-aspect-ratio.migration.d.ts.map +1 -1
- package/lib/blocks/YouTubeVideoBlock/migrations/1-remove-aspect-ratio.migration.js +2 -14
- package/lib/blocks/YouTubeVideoBlock/migrations/1-remove-aspect-ratio.migration.js.map +1 -1
- package/lib/blocks/YouTubeVideoBlock/migrations/2-add-preview-image.migration.d.ts +1 -1
- package/lib/blocks/YouTubeVideoBlock/migrations/2-add-preview-image.migration.d.ts.map +1 -1
- package/lib/blocks/YouTubeVideoBlock/migrations/2-add-preview-image.migration.js +1 -1
- package/lib/blocks/YouTubeVideoBlock/migrations/2-add-preview-image.migration.js.map +1 -1
- package/lib/blocks/block-migrate.service.d.ts.map +1 -1
- package/lib/blocks/block-migrate.service.js +64 -73
- package/lib/blocks/block-migrate.service.js.map +1 -1
- package/lib/blocks/block.d.ts +4 -4
- package/lib/blocks/block.d.ts.map +1 -1
- package/lib/blocks/block.js +5 -18
- package/lib/blocks/block.js.map +1 -1
- package/lib/blocks/blocks-meta.service.js +14 -25
- package/lib/blocks/blocks-meta.service.js.map +1 -1
- package/lib/blocks/blocks-transformer-middleware.factory.d.ts +1 -1
- package/lib/blocks/blocks-transformer-middleware.factory.d.ts.map +1 -1
- package/lib/blocks/blocks-transformer-middleware.factory.js +3 -12
- package/lib/blocks/blocks-transformer-middleware.factory.js.map +1 -1
- package/lib/blocks/blocks-transformer.d.ts +1 -1
- package/lib/blocks/blocks-transformer.d.ts.map +1 -1
- package/lib/blocks/blocks-transformer.js +30 -43
- package/lib/blocks/blocks-transformer.js.map +1 -1
- package/lib/blocks/blocks-transformer.service.js +3 -14
- package/lib/blocks/blocks-transformer.service.js.map +1 -1
- package/lib/blocks/create-block-index-views.command.js +2 -13
- package/lib/blocks/create-block-index-views.command.js.map +1 -1
- package/lib/blocks/decorators/child-block-input.js +2 -2
- package/lib/blocks/decorators/child-block-input.js.map +1 -1
- package/lib/blocks/decorators/child-block.js +1 -1
- package/lib/blocks/decorators/child-block.js.map +1 -1
- package/lib/blocks/decorators/field.js +1 -2
- package/lib/blocks/decorators/field.js.map +1 -1
- package/lib/blocks/decorators/root-block-entity.d.ts +1 -1
- package/lib/blocks/decorators/root-block-entity.d.ts.map +1 -1
- package/lib/blocks/decorators/root-block.d.ts +1 -1
- package/lib/blocks/decorators/root-block.d.ts.map +1 -1
- package/lib/blocks/factories/columns-block.factory.js +13 -18
- package/lib/blocks/factories/columns-block.factory.js.map +1 -1
- package/lib/blocks/factories/createBlocksBlock.js +14 -35
- package/lib/blocks/factories/createBlocksBlock.js.map +1 -1
- package/lib/blocks/factories/createListBlock.js +16 -33
- package/lib/blocks/factories/createListBlock.js.map +1 -1
- package/lib/blocks/factories/createOneOfBlock.js +20 -35
- package/lib/blocks/factories/createOneOfBlock.js.map +1 -1
- package/lib/blocks/factories/createOptionalBlock.js +5 -16
- package/lib/blocks/factories/createOptionalBlock.js.map +1 -1
- package/lib/blocks/factories/createRichTextBlock.js +33 -31
- package/lib/blocks/factories/createRichTextBlock.js.map +1 -1
- package/lib/blocks/factories/createSeoBlock.js +14 -25
- package/lib/blocks/factories/createSeoBlock.js.map +1 -1
- package/lib/blocks/factories/createTableBlock.js +5 -1
- package/lib/blocks/factories/createTableBlock.js.map +1 -1
- package/lib/blocks/factories/types.d.ts +1 -1
- package/lib/blocks/factories/types.d.ts.map +1 -1
- package/lib/blocks/flat-blocks/flat-blocks.d.ts +1 -1
- package/lib/blocks/flat-blocks/flat-blocks.d.ts.map +1 -1
- package/lib/blocks/flat-blocks/visit-blocks-breadth-first.d.ts +1 -1
- package/lib/blocks/flat-blocks/visit-blocks-breadth-first.d.ts.map +1 -1
- package/lib/blocks/flat-blocks/visit-blocks-breadth-first.js +3 -3
- package/lib/blocks/flat-blocks/visit-blocks-breadth-first.js.map +1 -1
- package/lib/blocks/flat-blocks/visit-blocks-depth-first.d.ts +2 -2
- package/lib/blocks/flat-blocks/visit-blocks-depth-first.d.ts.map +1 -1
- package/lib/blocks/flat-blocks/visit-blocks-depth-first.js +3 -3
- package/lib/blocks/flat-blocks/visit-blocks-depth-first.js.map +1 -1
- package/lib/blocks/get-preview-image-url-templates.d.ts +1 -1
- package/lib/blocks/get-preview-image-url-templates.d.ts.map +1 -1
- package/lib/blocks/get-preview-image-url-templates.js +13 -26
- package/lib/blocks/get-preview-image-url-templates.js.map +1 -1
- package/lib/blocks/helpers/composeBlocks.js +10 -17
- package/lib/blocks/helpers/composeBlocks.js.map +1 -1
- package/lib/blocks/migrate-blocks.command.d.ts +5 -1
- package/lib/blocks/migrate-blocks.command.d.ts.map +1 -1
- package/lib/blocks/migrate-blocks.command.js +17 -13
- package/lib/blocks/migrate-blocks.command.js.map +1 -1
- package/lib/blocks/migrations/BlockMigration.d.ts +1 -1
- package/lib/blocks/migrations/BlockMigration.d.ts.map +1 -1
- package/lib/blocks/migrations/BlockMigration.js +5 -13
- package/lib/blocks/migrations/BlockMigration.js.map +1 -1
- package/lib/blocks/migrations/applyMigrations.d.ts +1 -1
- package/lib/blocks/migrations/applyMigrations.d.ts.map +1 -1
- package/lib/blocks/migrations/createAppliedMigrationsBlockDataFactoryDecorator.d.ts +2 -2
- package/lib/blocks/migrations/createAppliedMigrationsBlockDataFactoryDecorator.d.ts.map +1 -1
- package/lib/blocks/migrations/decorators/BlockDataMigrationVersion.d.ts +1 -1
- package/lib/blocks/migrations/decorators/BlockDataMigrationVersion.d.ts.map +1 -1
- package/lib/blocks/migrations/decorators/BlockDataMigrationVersion.js +11 -19
- package/lib/blocks/migrations/decorators/BlockDataMigrationVersion.js.map +1 -1
- package/lib/blocks/migrations/typeSafeBlockMigrationPipe.d.ts +1 -1
- package/lib/blocks/migrations/typeSafeBlockMigrationPipe.d.ts.map +1 -1
- package/lib/blocks/refresh-block-index-views.command.js +2 -13
- package/lib/blocks/refresh-block-index-views.command.js.map +1 -1
- package/lib/blocks/rootBlocks/root-block-data.scalar.d.ts +1 -1
- package/lib/blocks/rootBlocks/root-block-data.scalar.d.ts.map +1 -1
- package/lib/blocks/rootBlocks/root-block-data.scalar.js +5 -1
- package/lib/blocks/rootBlocks/root-block-data.scalar.js.map +1 -1
- package/lib/blocks/rootBlocks/root-block-input.scalar.d.ts +1 -1
- package/lib/blocks/rootBlocks/root-block-input.scalar.d.ts.map +1 -1
- package/lib/blocks/rootBlocks/root-block-input.scalar.js +5 -1
- package/lib/blocks/rootBlocks/root-block-input.scalar.js.map +1 -1
- package/lib/blocks/search/get-search-text.d.ts +3 -1
- package/lib/blocks/search/get-search-text.d.ts.map +1 -1
- package/lib/blocks/search/get-search-text.js +26 -0
- package/lib/blocks/search/get-search-text.js.map +1 -1
- package/lib/blocks/transformToBlockSaveIndex/transformToBlockSaveIndex.d.ts +1 -1
- package/lib/blocks/transformToBlockSaveIndex/transformToBlockSaveIndex.d.ts.map +1 -1
- package/lib/blocks/transformToBlockSaveIndex/transformToBlockSaveIndex.js +1 -1
- package/lib/blocks/transformToBlockSaveIndex/transformToBlockSaveIndex.js.map +1 -1
- package/lib/builds/build-templates.resolver.js +7 -21
- package/lib/builds/build-templates.resolver.js.map +1 -1
- package/lib/builds/build-templates.service.js +6 -20
- package/lib/builds/build-templates.service.js.map +1 -1
- package/lib/builds/builds.resolver.js +16 -32
- package/lib/builds/builds.resolver.js.map +1 -1
- package/lib/builds/builds.service.js +106 -142
- package/lib/builds/builds.service.js.map +1 -1
- package/lib/builds/changes-checker.command.js +17 -28
- package/lib/builds/changes-checker.command.js.map +1 -1
- package/lib/builds/changes-checker.interceptor.js +34 -45
- package/lib/builds/changes-checker.interceptor.js.map +1 -1
- package/lib/common/decorators/crud-generator.decorator.d.ts +4 -4
- package/lib/common/decorators/crud-generator.decorator.d.ts.map +1 -1
- package/lib/common/decorators/request-context.decorator.d.ts +1 -1
- package/lib/common/decorators/request-context.decorator.d.ts.map +1 -1
- package/lib/common/decorators/utils.d.ts +1 -1
- package/lib/common/decorators/utils.d.ts.map +1 -1
- package/lib/common/errors/validation.exception-factory.d.ts +1 -1
- package/lib/common/errors/validation.exception-factory.d.ts.map +1 -1
- package/lib/common/errors/validation.exception.d.ts +1 -1
- package/lib/common/errors/validation.exception.d.ts.map +1 -1
- package/lib/common/filter/mikro-orm.d.ts +1 -1
- package/lib/common/filter/mikro-orm.d.ts.map +1 -1
- package/lib/common/filter/mikro-orm.js +5 -7
- package/lib/common/filter/mikro-orm.js.map +1 -1
- package/lib/common/graphql/extract-graphql-fields.d.ts +1 -1
- package/lib/common/graphql/extract-graphql-fields.d.ts.map +1 -1
- package/lib/common/graphql/extract-graphql-fields.js +2 -1
- package/lib/common/graphql/extract-graphql-fields.js.map +1 -1
- package/lib/common/helper/crud-generator.helper.d.ts +1 -1
- package/lib/common/helper/crud-generator.helper.d.ts.map +1 -1
- package/lib/common/helper/crud-generator.helper.js +2 -3
- package/lib/common/helper/crud-generator.helper.js.map +1 -1
- package/lib/common/helper/is-injectable-service.helper.d.ts +1 -1
- package/lib/common/helper/is-injectable-service.helper.d.ts.map +1 -1
- package/lib/common/helper/partial-type.helper.d.ts +2 -2
- package/lib/common/helper/partial-type.helper.d.ts.map +1 -1
- package/lib/common/helper/partial-type.helper.js +8 -8
- package/lib/common/helper/partial-type.helper.js.map +1 -1
- package/lib/common/test/get-error.js +3 -12
- package/lib/common/test/get-error.js.map +1 -1
- package/lib/common/validators/is-slug.js +3 -14
- package/lib/common/validators/is-slug.js.map +1 -1
- package/lib/content-generation/azure-open-ai/azure-open-ai-content-generation.service.js +94 -113
- package/lib/content-generation/azure-open-ai/azure-open-ai-content-generation.service.js.map +1 -1
- package/lib/content-generation/generate-alt-text.resolver.d.ts.map +1 -1
- package/lib/content-generation/generate-alt-text.resolver.js +6 -17
- package/lib/content-generation/generate-alt-text.resolver.js.map +1 -1
- package/lib/content-generation/generate-image-title.resolver.d.ts.map +1 -1
- package/lib/content-generation/generate-image-title.resolver.js +6 -17
- package/lib/content-generation/generate-image-title.resolver.js.map +1 -1
- package/lib/content-generation/generate-seo-tags.resolver.d.ts.map +1 -1
- package/lib/content-generation/generate-seo-tags.resolver.js +6 -17
- package/lib/content-generation/generate-seo-tags.resolver.js.map +1 -1
- package/lib/cron-jobs/cron-jobs.resolver.js +37 -54
- package/lib/cron-jobs/cron-jobs.resolver.js.map +1 -1
- package/lib/cron-jobs/cron-jobs.service.js +6 -7
- package/lib/cron-jobs/cron-jobs.service.js.map +1 -1
- package/lib/cron-jobs/jobs.resolver.js +22 -37
- package/lib/cron-jobs/jobs.resolver.js.map +1 -1
- package/lib/cron-jobs/jobs.service.js +5 -6
- package/lib/cron-jobs/jobs.service.js.map +1 -1
- package/lib/dam/blocks/dam-file-download-link-block-transformer.service.js +28 -33
- package/lib/dam/blocks/dam-file-download-link-block-transformer.service.js.map +1 -1
- package/lib/dam/blocks/dam-file-download-link.block.js +2 -13
- package/lib/dam/blocks/dam-file-download-link.block.js.map +1 -1
- package/lib/dam/blocks/pixel-image-block-transformer.service.js +35 -46
- package/lib/dam/blocks/pixel-image-block-transformer.service.js.map +1 -1
- package/lib/dam/blocks/pixel-image.block.js +11 -24
- package/lib/dam/blocks/pixel-image.block.js.map +1 -1
- package/lib/dam/blocks/svg-image-block-transformer.service.js +23 -34
- package/lib/dam/blocks/svg-image-block-transformer.service.js.map +1 -1
- package/lib/dam/blocks/svg-image.block.js +2 -13
- package/lib/dam/blocks/svg-image.block.js.map +1 -1
- package/lib/dam/blocks/video/dam-video-block-transformer.service.js +34 -45
- package/lib/dam/blocks/video/dam-video-block-transformer.service.js.map +1 -1
- package/lib/dam/blocks/video/dam-video.block.js +2 -13
- package/lib/dam/blocks/video/dam-video.block.js.map +1 -1
- package/lib/dam/blocks/video/migrations/1-add-preview-image.migration.d.ts +1 -1
- package/lib/dam/blocks/video/migrations/1-add-preview-image.migration.d.ts.map +1 -1
- package/lib/dam/blocks/video/migrations/1-add-preview-image.migration.js +1 -1
- package/lib/dam/blocks/video/migrations/1-add-preview-image.migration.js.map +1 -1
- package/lib/dam/common/decorators/has-valid-filename.decorator.js +23 -35
- package/lib/dam/common/decorators/has-valid-filename.decorator.js.map +1 -1
- package/lib/dam/dam.module.js +8 -18
- package/lib/dam/dam.module.js.map +1 -1
- package/lib/dam/files/dam-items.resolver.js +7 -20
- package/lib/dam/files/dam-items.resolver.js.map +1 -1
- package/lib/dam/files/dam-items.service.js +50 -76
- package/lib/dam/files/dam-items.service.js.map +1 -1
- package/lib/dam/files/dam-media-alternatives/dam-media-alternative.resolver.js +74 -102
- package/lib/dam/files/dam-media-alternatives/dam-media-alternative.resolver.js.map +1 -1
- package/lib/dam/files/dam-media-alternatives/entities/dam-media-alternative.entity.js +3 -13
- package/lib/dam/files/dam-media-alternatives/entities/dam-media-alternative.entity.js.map +1 -1
- package/lib/dam/files/dam-upload-file.interceptor.js +10 -21
- package/lib/dam/files/dam-upload-file.interceptor.js.map +1 -1
- package/lib/dam/files/file-image.resolver.js +8 -19
- package/lib/dam/files/file-image.resolver.js.map +1 -1
- package/lib/dam/files/file-warning.service.d.ts.map +1 -1
- package/lib/dam/files/file-warning.service.js +64 -90
- package/lib/dam/files/file-warning.service.js.map +1 -1
- package/lib/dam/files/files.controller.d.ts.map +1 -1
- package/lib/dam/files/files.controller.js +182 -210
- package/lib/dam/files/files.controller.js.map +1 -1
- package/lib/dam/files/files.resolver.d.ts.map +1 -1
- package/lib/dam/files/files.resolver.js +84 -168
- package/lib/dam/files/files.resolver.js.map +1 -1
- package/lib/dam/files/files.service.d.ts +1 -0
- package/lib/dam/files/files.service.d.ts.map +1 -1
- package/lib/dam/files/files.service.js +429 -437
- package/lib/dam/files/files.service.js.map +1 -1
- package/lib/dam/files/folders.controller.js +13 -24
- package/lib/dam/files/folders.controller.js.map +1 -1
- package/lib/dam/files/folders.resolver.js +25 -52
- package/lib/dam/files/folders.resolver.js.map +1 -1
- package/lib/dam/files/folders.service.d.ts.map +1 -1
- package/lib/dam/files/folders.service.js +201 -240
- package/lib/dam/files/folders.service.js.map +1 -1
- package/lib/dam/images/calculateDominantImageColor.command.js +14 -45
- package/lib/dam/images/calculateDominantImageColor.command.js.map +1 -1
- package/lib/dam/images/dto/image.interface.d.ts +2 -2
- package/lib/dam/images/dto/image.interface.d.ts.map +1 -1
- package/lib/dam/images/images.controller.js +134 -165
- package/lib/dam/images/images.controller.js.map +1 -1
- package/lib/dam/images/images.util.d.ts +2 -3
- package/lib/dam/images/images.util.d.ts.map +1 -1
- package/lib/dam/images/images.util.js +0 -4
- package/lib/dam/images/images.util.js.map +1 -1
- package/lib/dam/images/validators/is-valid-aspect-ratio.validator.js +16 -28
- package/lib/dam/images/validators/is-valid-aspect-ratio.validator.js.map +1 -1
- package/lib/dependencies/dependencies.resolver.factory.js +2 -13
- package/lib/dependencies/dependencies.resolver.factory.js.map +1 -1
- package/lib/dependencies/dependencies.service.d.ts +3 -1
- package/lib/dependencies/dependencies.service.d.ts.map +1 -1
- package/lib/dependencies/dependencies.service.js +189 -211
- package/lib/dependencies/dependencies.service.js.map +1 -1
- package/lib/dependencies/dependents.resolver.factory.js +2 -13
- package/lib/dependencies/dependents.resolver.factory.js.map +1 -1
- package/lib/dependencies/discover.service.d.ts +1 -1
- package/lib/dependencies/discover.service.d.ts.map +1 -1
- package/lib/dependencies/discover.service.js +2 -4
- package/lib/dependencies/discover.service.js.map +1 -1
- package/lib/document/dto/save-document.d.ts +1 -1
- package/lib/document/dto/save-document.d.ts.map +1 -1
- package/lib/document/validateNotModified.d.ts +1 -1
- package/lib/document/validateNotModified.d.ts.map +1 -1
- package/lib/document/validateNotModified.js +1 -1
- package/lib/document/validateNotModified.js.map +1 -1
- package/lib/entity-info/entity-info.decorator.d.ts +1 -1
- package/lib/entity-info/entity-info.decorator.d.ts.map +1 -1
- package/lib/entity-info/entity-info.service.js +48 -64
- package/lib/entity-info/entity-info.service.js.map +1 -1
- package/lib/file-uploads/file-upload-expiration.subscriber.js +5 -16
- package/lib/file-uploads/file-upload-expiration.subscriber.js.map +1 -1
- package/lib/file-uploads/file-uploads-download.controller.js +122 -150
- package/lib/file-uploads/file-uploads-download.controller.js.map +1 -1
- package/lib/file-uploads/file-uploads-file.interceptor.js +10 -21
- package/lib/file-uploads/file-uploads-file.interceptor.js.map +1 -1
- package/lib/file-uploads/file-uploads-upload.controller.js +17 -25
- package/lib/file-uploads/file-uploads-upload.controller.js.map +1 -1
- package/lib/file-uploads/file-uploads.module.js +3 -4
- package/lib/file-uploads/file-uploads.module.js.map +1 -1
- package/lib/file-uploads/file-uploads.resolver.js +1 -2
- package/lib/file-uploads/file-uploads.resolver.js.map +1 -1
- package/lib/file-uploads/file-uploads.service.js +53 -90
- package/lib/file-uploads/file-uploads.service.js.map +1 -1
- package/lib/file-utils/file-validation.service.d.ts +1 -1
- package/lib/file-utils/file-validation.service.d.ts.map +1 -1
- package/lib/file-utils/file-validation.service.js +14 -28
- package/lib/file-utils/file-validation.service.js.map +1 -1
- package/lib/file-utils/files.utils.d.ts +1 -1
- package/lib/file-utils/files.utils.d.ts.map +1 -1
- package/lib/file-utils/files.utils.js +33 -45
- package/lib/file-utils/files.utils.js.map +1 -1
- package/lib/file-utils/images.util.d.ts.map +1 -1
- package/lib/file-utils/images.util.js +10 -6
- package/lib/file-utils/images.util.js.map +1 -1
- package/lib/imgproxy/imgproxy.builder.d.ts.map +1 -1
- package/lib/imgproxy/imgproxy.builder.js +2 -1
- package/lib/imgproxy/imgproxy.builder.js.map +1 -1
- package/lib/importer/data-streams/file-data-stream.d.ts +3 -3
- package/lib/importer/data-streams/file-data-stream.d.ts.map +1 -1
- package/lib/importer/data-streams/local-file-data-stream.js +28 -76
- package/lib/importer/data-streams/local-file-data-stream.js.map +1 -1
- package/lib/importer/decorators/csv-column.decorator.d.ts +1 -1
- package/lib/importer/decorators/csv-column.decorator.d.ts.map +1 -1
- package/lib/importer/pipes/end.pipe.d.ts +1 -1
- package/lib/importer/pipes/end.pipe.d.ts.map +1 -1
- package/lib/importer/pipes/importer-pipe.type.d.ts +3 -3
- package/lib/importer/pipes/importer-pipe.type.d.ts.map +1 -1
- package/lib/importer/pipes/parsers/csv-parser-and-transform.composite-pipe.d.ts +5 -5
- package/lib/importer/pipes/parsers/csv-parser-and-transform.composite-pipe.d.ts.map +1 -1
- package/lib/importer/pipes/parsers/csv-parser.pipe.d.ts +3 -3
- package/lib/importer/pipes/parsers/csv-parser.pipe.d.ts.map +1 -1
- package/lib/importer/pipes/parsers/csv-parser.pipe.js +10 -5
- package/lib/importer/pipes/parsers/csv-parser.pipe.js.map +1 -1
- package/lib/importer/pipes/parsers/data-transformer.pipe.d.ts +3 -3
- package/lib/importer/pipes/parsers/data-transformer.pipe.d.ts.map +1 -1
- package/lib/importer/pipes/parsers/data-transformer.pipe.js +13 -24
- package/lib/importer/pipes/parsers/data-transformer.pipe.js.map +1 -1
- package/lib/importer/pipes/parsers/data-validator.pipe.d.ts +2 -2
- package/lib/importer/pipes/parsers/data-validator.pipe.d.ts.map +1 -1
- package/lib/importer/pipes/parsers/data-validator.pipe.js +26 -37
- package/lib/importer/pipes/parsers/data-validator.pipe.js.map +1 -1
- package/lib/index.d.ts +3 -6
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +9 -10
- package/lib/index.js.map +1 -1
- package/lib/kubernetes/kubernetes.service.js +70 -109
- package/lib/kubernetes/kubernetes.service.js.map +1 -1
- package/lib/mail-templates/mail-template.command.js +5 -16
- package/lib/mail-templates/mail-template.command.js.map +1 -1
- package/lib/mail-templates/mail-template.decorator.d.ts +1 -1
- package/lib/mail-templates/mail-template.decorator.d.ts.map +1 -1
- package/lib/mail-templates/mail-template.service.d.ts.map +1 -1
- package/lib/mail-templates/mail-template.service.js +20 -30
- package/lib/mail-templates/mail-template.service.js.map +1 -1
- package/lib/mailer/mailer.module.js +1 -13
- package/lib/mailer/mailer.module.js.map +1 -1
- package/lib/mailer/mailer.service.d.ts.map +1 -1
- package/lib/mailer/mailer.service.js +48 -62
- package/lib/mailer/mailer.service.js.map +1 -1
- package/lib/mailer/send-test-mail.command.js +15 -26
- package/lib/mailer/send-test-mail.command.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20220127085859.js +3 -14
- package/lib/mikro-orm/migrations/Migration20220127085859.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20220127085946.js +3 -14
- package/lib/mikro-orm/migrations/Migration20220127085946.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20220127091538.js +3 -14
- package/lib/mikro-orm/migrations/Migration20220127091538.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20220127091751.js +6 -17
- package/lib/mikro-orm/migrations/Migration20220127091751.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20220127111301.js +15 -26
- package/lib/mikro-orm/migrations/Migration20220127111301.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20220127142112.js +4 -15
- package/lib/mikro-orm/migrations/Migration20220127142112.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20220620124134.js +19 -32
- package/lib/mikro-orm/migrations/Migration20220620124134.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20220905145606.js +8 -21
- package/lib/mikro-orm/migrations/Migration20220905145606.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20230209111818.js +3 -14
- package/lib/mikro-orm/migrations/Migration20230209111818.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20230302145445.js +6 -19
- package/lib/mikro-orm/migrations/Migration20230302145445.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20230613150332.js +3 -14
- package/lib/mikro-orm/migrations/Migration20230613150332.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20230802124224.js +5 -18
- package/lib/mikro-orm/migrations/Migration20230802124224.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20230808085034.js +2 -13
- package/lib/mikro-orm/migrations/Migration20230808085034.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20230821090303.js +8 -21
- package/lib/mikro-orm/migrations/Migration20230821090303.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20231204140305.js +8 -21
- package/lib/mikro-orm/migrations/Migration20231204140305.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20231206123505.js +7 -20
- package/lib/mikro-orm/migrations/Migration20231206123505.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20231215103630.js +6 -19
- package/lib/mikro-orm/migrations/Migration20231215103630.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20231218092313.js +7 -20
- package/lib/mikro-orm/migrations/Migration20231218092313.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20231222090009.js +7 -20
- package/lib/mikro-orm/migrations/Migration20231222090009.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20240702123233.js +28 -40
- package/lib/mikro-orm/migrations/Migration20240702123233.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20240725071750.js +2 -13
- package/lib/mikro-orm/migrations/Migration20240725071750.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20240814090503.js +7 -18
- package/lib/mikro-orm/migrations/Migration20240814090503.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20240814090541.js +3 -14
- package/lib/mikro-orm/migrations/Migration20240814090541.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20240814090653.js +3 -14
- package/lib/mikro-orm/migrations/Migration20240814090653.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20250403134629.js +2 -13
- package/lib/mikro-orm/migrations/Migration20250403134629.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20250531565156.js +2 -13
- package/lib/mikro-orm/migrations/Migration20250531565156.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20250531565157.js +2 -13
- package/lib/mikro-orm/migrations/Migration20250531565157.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20250612134629.js +3 -14
- package/lib/mikro-orm/migrations/Migration20250612134629.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20250623085054.js +2 -13
- package/lib/mikro-orm/migrations/Migration20250623085054.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20250623113026.js +4 -15
- package/lib/mikro-orm/migrations/Migration20250623113026.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20251013081751.js +2 -13
- package/lib/mikro-orm/migrations/Migration20251013081751.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20251118143418.js +3 -14
- package/lib/mikro-orm/migrations/Migration20251118143418.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20251126093305.js +4 -17
- package/lib/mikro-orm/migrations/Migration20251126093305.js.map +1 -1
- package/lib/mikro-orm/migrations/Migration20260413072931.d.ts +6 -0
- package/lib/mikro-orm/migrations/Migration20260413072931.d.ts.map +1 -0
- package/lib/mikro-orm/migrations/Migration20260413072931.js +16 -0
- package/lib/mikro-orm/migrations/Migration20260413072931.js.map +1 -0
- package/lib/mikro-orm/mikro-orm.module.d.ts.map +1 -1
- package/lib/mikro-orm/mikro-orm.module.js +18 -19
- package/lib/mikro-orm/mikro-orm.module.js.map +1 -1
- package/lib/page-tree/attached-document-loader.service.d.ts.map +1 -1
- package/lib/page-tree/attached-document-loader.service.js +9 -17
- package/lib/page-tree/attached-document-loader.service.js.map +1 -1
- package/lib/page-tree/blocks/internal-link-block-transformer.service.js +18 -29
- package/lib/page-tree/blocks/internal-link-block-transformer.service.js.map +1 -1
- package/lib/page-tree/blocks/internal-link-block-warnings.service.js +14 -25
- package/lib/page-tree/blocks/internal-link-block-warnings.service.js.map +1 -1
- package/lib/page-tree/blocks/internal-link.block.js +2 -13
- package/lib/page-tree/blocks/internal-link.block.js.map +1 -1
- package/lib/page-tree/createPageTreeResolver.d.ts +2 -1
- package/lib/page-tree/createPageTreeResolver.d.ts.map +1 -1
- package/lib/page-tree/createPageTreeResolver.js +195 -247
- package/lib/page-tree/createPageTreeResolver.js.map +1 -1
- package/lib/page-tree/document-subscriber.js +19 -30
- package/lib/page-tree/document-subscriber.js.map +1 -1
- package/lib/page-tree/dto/paginated-page-tree-nodes.factory.d.ts +8 -0
- package/lib/page-tree/dto/paginated-page-tree-nodes.factory.d.ts.map +1 -0
- package/lib/page-tree/dto/paginated-page-tree-nodes.factory.js +23 -0
- package/lib/page-tree/dto/paginated-page-tree-nodes.factory.js.map +1 -0
- package/lib/page-tree/entities/page-tree-node-base.entity.d.ts +1 -0
- package/lib/page-tree/entities/page-tree-node-base.entity.d.ts.map +1 -1
- package/lib/page-tree/entities/page-tree-node-base.entity.js +15 -1
- package/lib/page-tree/entities/page-tree-node-base.entity.js.map +1 -1
- package/lib/page-tree/fullText/createFullTextResolver.d.ts +8 -0
- package/lib/page-tree/fullText/createFullTextResolver.d.ts.map +1 -0
- package/lib/page-tree/fullText/createFullTextResolver.js +74 -0
- package/lib/page-tree/fullText/createFullTextResolver.js.map +1 -0
- package/lib/page-tree/fullText/entities/page-tree-node-full-text.object.d.ts +7 -0
- package/lib/page-tree/fullText/entities/page-tree-node-full-text.object.d.ts.map +1 -0
- package/lib/page-tree/fullText/entities/page-tree-node-full-text.object.js +36 -0
- package/lib/page-tree/fullText/entities/page-tree-node-full-text.object.js.map +1 -0
- package/lib/page-tree/fullText/page-tree-full-text.service.d.ts +17 -0
- package/lib/page-tree/fullText/page-tree-full-text.service.d.ts.map +1 -0
- package/lib/page-tree/fullText/page-tree-full-text.service.js +135 -0
- package/lib/page-tree/fullText/page-tree-full-text.service.js.map +1 -0
- package/lib/page-tree/page-tree-node-document-entity-scope.service.js +7 -19
- package/lib/page-tree/page-tree-node-document-entity-scope.service.js.map +1 -1
- package/lib/page-tree/page-tree-read-api.d.ts +2 -1
- package/lib/page-tree/page-tree-read-api.d.ts.map +1 -1
- package/lib/page-tree/page-tree-read-api.js +195 -196
- package/lib/page-tree/page-tree-read-api.js.map +1 -1
- package/lib/page-tree/page-tree-read-api.service.d.ts +1 -0
- package/lib/page-tree/page-tree-read-api.service.d.ts.map +1 -1
- package/lib/page-tree/page-tree-read-api.service.js +31 -65
- package/lib/page-tree/page-tree-read-api.service.js.map +1 -1
- package/lib/page-tree/page-tree.constants.d.ts +1 -0
- package/lib/page-tree/page-tree.constants.d.ts.map +1 -1
- package/lib/page-tree/page-tree.constants.js +2 -1
- package/lib/page-tree/page-tree.constants.js.map +1 -1
- package/lib/page-tree/page-tree.module.d.ts +1 -0
- package/lib/page-tree/page-tree.module.d.ts.map +1 -1
- package/lib/page-tree/page-tree.module.js +23 -13
- package/lib/page-tree/page-tree.module.js.map +1 -1
- package/lib/page-tree/page-tree.service.d.ts.map +1 -1
- package/lib/page-tree/page-tree.service.js +273 -312
- package/lib/page-tree/page-tree.service.js.map +1 -1
- package/lib/page-tree/site-preview.resolver.js +25 -38
- package/lib/page-tree/site-preview.resolver.js.map +1 -1
- package/lib/page-tree/types.d.ts +2 -2
- package/lib/page-tree/types.d.ts.map +1 -1
- package/lib/page-tree/validators/page-exists.validator.js +3 -14
- package/lib/page-tree/validators/page-exists.validator.js.map +1 -1
- package/lib/redirects/dto/redirect-input.factory.d.ts +2 -2
- package/lib/redirects/dto/redirect-input.factory.d.ts.map +1 -1
- package/lib/redirects/dto/redirect-input.factory.js +2 -2
- package/lib/redirects/dto/redirect-input.factory.js.map +1 -1
- package/lib/redirects/dto/redirects.filter.d.ts.map +1 -1
- package/lib/redirects/dto/redirects.filter.js +1 -1
- package/lib/redirects/dto/redirects.filter.js.map +1 -1
- package/lib/redirects/entities/redirect-entity.factory.d.ts +2 -2
- package/lib/redirects/entities/redirect-entity.factory.d.ts.map +1 -1
- package/lib/redirects/entities/redirect-entity.factory.js +2 -2
- package/lib/redirects/entities/redirect-entity.factory.js.map +1 -1
- package/lib/redirects/import-redirects.command.js +109 -121
- package/lib/redirects/import-redirects.command.js.map +1 -1
- package/lib/redirects/redirect-target-url.service.js +17 -28
- package/lib/redirects/redirect-target-url.service.js.map +1 -1
- package/lib/redirects/redirects.enum.d.ts +1 -1
- package/lib/redirects/redirects.enum.d.ts.map +1 -1
- package/lib/redirects/redirects.enum.js +7 -7
- package/lib/redirects/redirects.enum.js.map +1 -1
- package/lib/redirects/redirects.module.js +2 -2
- package/lib/redirects/redirects.module.js.map +1 -1
- package/lib/redirects/redirects.resolver.js +114 -137
- package/lib/redirects/redirects.resolver.js.map +1 -1
- package/lib/redirects/redirects.service.d.ts.map +1 -1
- package/lib/redirects/redirects.service.js +40 -47
- package/lib/redirects/redirects.service.js.map +1 -1
- package/lib/redirects/redirects.util.d.ts +2 -2
- package/lib/redirects/redirects.util.d.ts.map +1 -1
- package/lib/redirects/redirects.util.js +2 -3
- package/lib/redirects/redirects.util.js.map +1 -1
- package/lib/redirects/validators/isValidRedirectSource.js +8 -19
- package/lib/redirects/validators/isValidRedirectSource.js.map +1 -1
- package/lib/sentry/sentry.interceptor.js +30 -42
- package/lib/sentry/sentry.interceptor.js.map +1 -1
- package/lib/sentry/sentry.module.js +15 -36
- package/lib/sentry/sentry.module.js.map +1 -1
- package/lib/translation/azure-ai-translator.resolver.js +19 -30
- package/lib/translation/azure-ai-translator.resolver.js.map +1 -1
- package/lib/tsconfig.build.tsbuildinfo +1 -1
- package/lib/user-permissions/access-control.service.d.ts.map +1 -1
- package/lib/user-permissions/access-control.service.js +6 -3
- package/lib/user-permissions/access-control.service.js.map +1 -1
- package/lib/user-permissions/auth/user-permissions.guard.d.ts.map +1 -1
- package/lib/user-permissions/auth/user-permissions.guard.js +56 -61
- package/lib/user-permissions/auth/user-permissions.guard.js.map +1 -1
- package/lib/user-permissions/content-scope.service.d.ts.map +1 -1
- package/lib/user-permissions/content-scope.service.js +86 -97
- package/lib/user-permissions/content-scope.service.js.map +1 -1
- package/lib/user-permissions/decorators/affected-entity.decorator.d.ts +1 -1
- package/lib/user-permissions/decorators/affected-entity.decorator.d.ts.map +1 -1
- package/lib/user-permissions/decorators/affected-scope.decorator.d.ts +1 -1
- package/lib/user-permissions/decorators/affected-scope.decorator.d.ts.map +1 -1
- package/lib/user-permissions/decorators/required-permission.decorator.d.ts +1 -1
- package/lib/user-permissions/decorators/required-permission.decorator.d.ts.map +1 -1
- package/lib/user-permissions/decorators/scoped-entity.decorator.d.ts +2 -2
- package/lib/user-permissions/decorators/scoped-entity.decorator.d.ts.map +1 -1
- package/lib/user-permissions/user-content-scopes.resolver.js +18 -33
- package/lib/user-permissions/user-content-scopes.resolver.js.map +1 -1
- package/lib/user-permissions/user-permission.resolver.d.ts.map +1 -1
- package/lib/user-permissions/user-permission.resolver.js +42 -66
- package/lib/user-permissions/user-permission.resolver.js.map +1 -1
- package/lib/user-permissions/user-permissions.module.js +6 -27
- package/lib/user-permissions/user-permissions.module.js.map +1 -1
- package/lib/user-permissions/user-permissions.public.service.js +6 -21
- package/lib/user-permissions/user-permissions.public.service.js.map +1 -1
- package/lib/user-permissions/user-permissions.service.d.ts.map +1 -1
- package/lib/user-permissions/user-permissions.service.js +168 -191
- package/lib/user-permissions/user-permissions.service.js.map +1 -1
- package/lib/user-permissions/user-permissions.types.d.ts +6 -6
- package/lib/user-permissions/user-permissions.types.d.ts.map +1 -1
- package/lib/user-permissions/user-permissions.types.js +3 -1
- package/lib/user-permissions/user-permissions.types.js.map +1 -1
- package/lib/user-permissions/user.resolver.js +71 -95
- package/lib/user-permissions/user.resolver.js.map +1 -1
- package/lib/warnings/decorators/create-warnings.decorator.d.ts +3 -3
- package/lib/warnings/decorators/create-warnings.decorator.d.ts.map +1 -1
- package/lib/warnings/dto/warning-data.d.ts +1 -1
- package/lib/warnings/dto/warning-data.d.ts.map +1 -1
- package/lib/warnings/warning-checker.command.js +123 -156
- package/lib/warnings/warning-checker.command.js.map +1 -1
- package/lib/warnings/warning-event-subscriber.js +92 -107
- package/lib/warnings/warning-event-subscriber.js.map +1 -1
- package/lib/warnings/warning.resolver.js +56 -72
- package/lib/warnings/warning.resolver.js.map +1 -1
- package/lib/warnings/warning.service.js +19 -32
- package/lib/warnings/warning.service.js.map +1 -1
- package/package.json +19 -17
|
@@ -44,33 +44,6 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
44
44
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
45
45
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
46
46
|
};
|
|
47
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
48
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
49
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
50
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
51
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
52
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
53
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
54
|
-
});
|
|
55
|
-
};
|
|
56
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
57
|
-
var t = {};
|
|
58
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
59
|
-
t[p] = s[p];
|
|
60
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
61
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
62
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
63
|
-
t[p[i]] = s[p[i]];
|
|
64
|
-
}
|
|
65
|
-
return t;
|
|
66
|
-
};
|
|
67
|
-
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
68
|
-
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
69
|
-
var m = o[Symbol.asyncIterator], i;
|
|
70
|
-
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
71
|
-
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
72
|
-
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
73
|
-
};
|
|
74
47
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
75
48
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
76
49
|
};
|
|
@@ -87,7 +60,9 @@ const hasha = __importStar(require("hasha"));
|
|
|
87
60
|
const path_1 = require("path");
|
|
88
61
|
const probe_image_size_1 = __importDefault(require("probe-image-size"));
|
|
89
62
|
const rimraf = __importStar(require("rimraf"));
|
|
90
|
-
const
|
|
63
|
+
const util_1 = require("util");
|
|
64
|
+
const zlib_1 = require("zlib");
|
|
65
|
+
const inflate = (0, util_1.promisify)(zlib_1.inflate);
|
|
91
66
|
const blob_storage_backend_service_1 = require("../../blob-storage/backends/blob-storage-backend.service");
|
|
92
67
|
const create_hashed_path_util_1 = require("../../blob-storage/utils/create-hashed-path.util");
|
|
93
68
|
const entity_not_found_exception_1 = require("../../common/errors/entity-not-found.exception");
|
|
@@ -98,7 +73,6 @@ const imgproxy_service_1 = require("../../imgproxy/imgproxy.service");
|
|
|
98
73
|
const content_scope_service_1 = require("../../user-permissions/content-scope.service");
|
|
99
74
|
const image_resolution_exception_1 = require("../common/errors/image-resolution.exception");
|
|
100
75
|
const dam_constants_1 = require("../dam.constants");
|
|
101
|
-
const images_util_1 = require("../images/images.util");
|
|
102
76
|
const dam_media_alternative_entity_1 = require("./dam-media-alternatives/entities/dam-media-alternative.entity");
|
|
103
77
|
const file_entity_1 = require("./entities/file.entity");
|
|
104
78
|
const file_image_entity_1 = require("./entities/file-image.entity");
|
|
@@ -108,16 +82,21 @@ const withFilesSelect = (qb, args) => {
|
|
|
108
82
|
if (args.query) {
|
|
109
83
|
qb.andWhere("file.name ILIKE ANY (ARRAY[?])", [args.query.split(" ").map((term) => `%${term}%`)]);
|
|
110
84
|
}
|
|
111
|
-
if (args.id)
|
|
85
|
+
if (args.id) {
|
|
112
86
|
qb.andWhere({ id: args.id });
|
|
113
|
-
|
|
87
|
+
}
|
|
88
|
+
if (args.copyOfId) {
|
|
114
89
|
qb.andWhere({ copyOf: { id: args.copyOfId } });
|
|
115
|
-
|
|
90
|
+
}
|
|
91
|
+
if (args.filename) {
|
|
116
92
|
qb.andWhere({ name: args.filename });
|
|
117
|
-
|
|
93
|
+
}
|
|
94
|
+
if (args.contentHash) {
|
|
118
95
|
qb.andWhere({ contentHash: args.contentHash });
|
|
119
|
-
|
|
96
|
+
}
|
|
97
|
+
if (args.archived !== undefined) {
|
|
120
98
|
qb.andWhere({ archived: args.archived });
|
|
99
|
+
}
|
|
121
100
|
if (args.folderId !== undefined) {
|
|
122
101
|
if (args.folderId) {
|
|
123
102
|
qb.andWhere({ folder: { id: args.folderId } });
|
|
@@ -132,8 +111,9 @@ const withFilesSelect = (qb, args) => {
|
|
|
132
111
|
if (args.mimetypes !== undefined) {
|
|
133
112
|
qb.andWhere({ mimetype: { $in: args.mimetypes } });
|
|
134
113
|
}
|
|
135
|
-
if (args.imageId)
|
|
114
|
+
if (args.imageId) {
|
|
136
115
|
qb.andWhere({ image: { id: args.imageId } });
|
|
116
|
+
}
|
|
137
117
|
if (args.imageCropArea) {
|
|
138
118
|
qb.andWhere({ image: { cropArea: args.imageCropArea } });
|
|
139
119
|
}
|
|
@@ -168,443 +148,455 @@ let FilesService = FilesService_1 = class FilesService {
|
|
|
168
148
|
.leftJoinAndSelect("file.image", "image")
|
|
169
149
|
.leftJoinAndSelect("file.folder", "folder");
|
|
170
150
|
}
|
|
171
|
-
findAll(
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
return
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
const folder = folderId ? yield this.foldersService.findOneById(folderId) : undefined;
|
|
265
|
-
return this.save(this.filesRepository.create(Object.assign(Object.assign({}, data), { license: Object.assign({}, data.license), folder: folder === null || folder === void 0 ? void 0 : folder.id, importSourceId: data.importSourceId, importSourceType: data.importSourceType })));
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
replace(fileToReplace, uploadedFile, assignData) {
|
|
269
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
270
|
-
let result = undefined;
|
|
271
|
-
try {
|
|
272
|
-
if (uploadedFile.mimetype !== fileToReplace.mimetype) {
|
|
273
|
-
throw new Error(`File cannot be replaced by a file with a different mimetype. Existing mimetype: ${fileToReplace.mimetype}, new mimetype: ${uploadedFile.mimetype}`);
|
|
274
|
-
}
|
|
275
|
-
const uploadedFileMetadata = yield this.getFileMetadataForUpload(uploadedFile);
|
|
276
|
-
const oldAndNewFileAreIdentical = fileToReplace.contentHash === uploadedFileMetadata.contentHash;
|
|
277
|
-
if (!oldAndNewFileAreIdentical) {
|
|
278
|
-
// Don't upload the file if it is identical to the existing one
|
|
279
|
-
yield this.blobStorageBackendService.upload(uploadedFile, uploadedFileMetadata.contentHash, this.config.filesDirectory);
|
|
280
|
-
// Check if the current file is the only one using the contentHash before deleting from blob storage
|
|
281
|
-
if ((yield withFilesSelect(this.filesRepository.createQueryBuilder("file"), { contentHash: fileToReplace.contentHash }).getResult())
|
|
282
|
-
.length === 1) {
|
|
283
|
-
yield this.blobStorageBackendService.removeFile(this.config.filesDirectory, (0, create_hashed_path_util_1.createHashedPath)(fileToReplace.contentHash));
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
if (uploadedFileMetadata.image && uploadedFileMetadata.image.width && uploadedFileMetadata.image.height && fileToReplace.image) {
|
|
287
|
-
fileToReplace.image.width = uploadedFileMetadata.image.width;
|
|
288
|
-
fileToReplace.image.height = uploadedFileMetadata.image.height;
|
|
289
|
-
fileToReplace.image.exif = uploadedFileMetadata.exifData;
|
|
151
|
+
async findAll({ folderId, includeArchived, filter, sortColumnName, sortDirection }, scope) {
|
|
152
|
+
const isSearching = filter?.searchText !== undefined && filter.searchText.length > 0;
|
|
153
|
+
return withFilesSelect(this.selectQueryBuilder(), {
|
|
154
|
+
archived: !includeArchived ? false : undefined,
|
|
155
|
+
folderId: !isSearching ? folderId || null : undefined,
|
|
156
|
+
mimetypes: filter?.mimetypes,
|
|
157
|
+
query: filter?.searchText,
|
|
158
|
+
sortColumnName,
|
|
159
|
+
sortDirection,
|
|
160
|
+
scope,
|
|
161
|
+
}).getResult();
|
|
162
|
+
}
|
|
163
|
+
async findAndCount({ folderId, includeArchived, filter, sortColumnName, sortDirection, offset, limit }, scope) {
|
|
164
|
+
const isSearching = filter?.searchText !== undefined && filter.searchText.length > 0;
|
|
165
|
+
const files = await withFilesSelect(this.selectQueryBuilder(), {
|
|
166
|
+
archived: !includeArchived ? false : undefined,
|
|
167
|
+
folderId: !isSearching ? folderId || null : undefined,
|
|
168
|
+
mimetypes: filter?.mimetypes,
|
|
169
|
+
query: filter?.searchText,
|
|
170
|
+
sortColumnName,
|
|
171
|
+
sortDirection,
|
|
172
|
+
offset,
|
|
173
|
+
limit,
|
|
174
|
+
scope,
|
|
175
|
+
}).getResult();
|
|
176
|
+
const totalCount = await withFilesSelect(this.selectQueryBuilder(), {
|
|
177
|
+
archived: !includeArchived ? false : undefined,
|
|
178
|
+
folderId: !isSearching ? folderId || null : undefined,
|
|
179
|
+
mimetypes: filter?.mimetypes,
|
|
180
|
+
query: filter?.searchText,
|
|
181
|
+
sortColumnName,
|
|
182
|
+
sortDirection,
|
|
183
|
+
offset,
|
|
184
|
+
limit,
|
|
185
|
+
scope,
|
|
186
|
+
}).getCount();
|
|
187
|
+
return [files, totalCount];
|
|
188
|
+
}
|
|
189
|
+
async findAllByHash(contentHash, options) {
|
|
190
|
+
return withFilesSelect(this.selectQueryBuilder(), { contentHash, scope: options?.scope }).getResult();
|
|
191
|
+
}
|
|
192
|
+
async findMultipleByIds(ids) {
|
|
193
|
+
return withFilesSelect(this.selectQueryBuilder(), {})
|
|
194
|
+
.where({ id: { $in: ids } })
|
|
195
|
+
.getResult();
|
|
196
|
+
}
|
|
197
|
+
async findCopiesOfFileInScope(fileId, imageCropArea, scope) {
|
|
198
|
+
return withFilesSelect(this.selectQueryBuilder(), { copyOfId: fileId, imageCropArea, scope }).getResult();
|
|
199
|
+
}
|
|
200
|
+
async findOneById(id) {
|
|
201
|
+
return withFilesSelect(this.selectQueryBuilder(), { id }).getSingleResult();
|
|
202
|
+
}
|
|
203
|
+
async getDamPath(file) {
|
|
204
|
+
const folderNames = file.folder ? (await this.foldersService.findAncestorsByParentId(file.folder.id)).map((folder) => folder.name) : [];
|
|
205
|
+
return `/${folderNames.join("/")}`;
|
|
206
|
+
}
|
|
207
|
+
async findOneByHash(contentHash) {
|
|
208
|
+
return withFilesSelect(this.selectQueryBuilder(), { contentHash }).getSingleResult();
|
|
209
|
+
}
|
|
210
|
+
async calculateHashForFile(filePath) {
|
|
211
|
+
return hasha.fromFile(filePath, { algorithm: "md5" });
|
|
212
|
+
}
|
|
213
|
+
async findOneByFilenameAndFolder({ filename, folderId = null, }, scope) {
|
|
214
|
+
return withFilesSelect(this.selectQueryBuilder(), { folderId, filename, scope }).getSingleResult();
|
|
215
|
+
}
|
|
216
|
+
async findOneByImageId(imageId) {
|
|
217
|
+
return withFilesSelect(this.selectQueryBuilder(), { imageId }).getSingleResult();
|
|
218
|
+
}
|
|
219
|
+
async create({ folderId, ...data }) {
|
|
220
|
+
const folder = folderId ? await this.foldersService.findOneById(folderId) : undefined;
|
|
221
|
+
return this.save(this.filesRepository.create({
|
|
222
|
+
...data,
|
|
223
|
+
license: { ...data.license },
|
|
224
|
+
folder: folder?.id,
|
|
225
|
+
importSourceId: data.importSourceId,
|
|
226
|
+
importSourceType: data.importSourceType,
|
|
227
|
+
}));
|
|
228
|
+
}
|
|
229
|
+
async replace(fileToReplace, uploadedFile, assignData) {
|
|
230
|
+
let result = undefined;
|
|
231
|
+
try {
|
|
232
|
+
if (uploadedFile.mimetype !== fileToReplace.mimetype) {
|
|
233
|
+
throw new Error(`File cannot be replaced by a file with a different mimetype. Existing mimetype: ${fileToReplace.mimetype}, new mimetype: ${uploadedFile.mimetype}`);
|
|
234
|
+
}
|
|
235
|
+
const uploadedFileMetadata = await this.getFileMetadataForUpload(uploadedFile);
|
|
236
|
+
const oldAndNewFileAreIdentical = fileToReplace.contentHash === uploadedFileMetadata.contentHash;
|
|
237
|
+
if (!oldAndNewFileAreIdentical) {
|
|
238
|
+
// Don't upload the file if it is identical to the existing one
|
|
239
|
+
await this.blobStorageBackendService.upload(uploadedFile, uploadedFileMetadata.contentHash, this.config.filesDirectory);
|
|
240
|
+
// Check if the current file is the only one using the contentHash before deleting from blob storage
|
|
241
|
+
if ((await withFilesSelect(this.filesRepository.createQueryBuilder("file"), { contentHash: fileToReplace.contentHash }).getResult())
|
|
242
|
+
.length === 1) {
|
|
243
|
+
await this.blobStorageBackendService.removeFile(this.config.filesDirectory, (0, create_hashed_path_util_1.createHashedPath)(fileToReplace.contentHash));
|
|
290
244
|
}
|
|
291
|
-
Object.assign(fileToReplace, Object.assign({ size: uploadedFile.size, mimetype: uploadedFile.mimetype, contentHash: uploadedFileMetadata.contentHash }, assignData));
|
|
292
|
-
result = yield this.save(fileToReplace);
|
|
293
|
-
rimraf.sync(uploadedFile.path);
|
|
294
245
|
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
246
|
+
if (uploadedFileMetadata.image && uploadedFileMetadata.image.width && uploadedFileMetadata.image.height && fileToReplace.image) {
|
|
247
|
+
fileToReplace.image.width = uploadedFileMetadata.image.width;
|
|
248
|
+
fileToReplace.image.height = uploadedFileMetadata.image.height;
|
|
249
|
+
fileToReplace.image.exif = uploadedFileMetadata.exifData;
|
|
298
250
|
}
|
|
299
|
-
|
|
300
|
-
|
|
251
|
+
Object.assign(fileToReplace, {
|
|
252
|
+
size: uploadedFile.size,
|
|
253
|
+
mimetype: uploadedFile.mimetype,
|
|
254
|
+
contentHash: uploadedFileMetadata.contentHash,
|
|
255
|
+
...assignData,
|
|
256
|
+
});
|
|
257
|
+
result = await this.save(fileToReplace);
|
|
258
|
+
rimraf.sync(uploadedFile.path);
|
|
259
|
+
}
|
|
260
|
+
catch (e) {
|
|
261
|
+
rimraf.sync(uploadedFile.path);
|
|
262
|
+
throw e;
|
|
263
|
+
}
|
|
264
|
+
return result;
|
|
301
265
|
}
|
|
302
|
-
updateById(id, data) {
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
});
|
|
266
|
+
async updateById(id, data) {
|
|
267
|
+
const file = await this.findOneById(id);
|
|
268
|
+
if (!file) {
|
|
269
|
+
throw new entity_not_found_exception_1.CometEntityNotFoundException();
|
|
270
|
+
}
|
|
271
|
+
return this.updateByEntity(file, data);
|
|
309
272
|
}
|
|
310
|
-
updateByEntity(entity,
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
const entityWithSameName = yield this.findOneByFilenameAndFolder({ filename: input.name, folderId }, entity.scope);
|
|
321
|
-
if (entityWithSameName !== null && entityWithSameName.id !== entity.id) {
|
|
322
|
-
throw new Error(`Entity with name '${input.name}' already exists in ${folder ? `folder '${folder.name}'` : "root folder"}`);
|
|
323
|
-
}
|
|
273
|
+
async updateByEntity(entity, { image, ...input }) {
|
|
274
|
+
const folderId = input.folderId !== undefined ? input.folderId : entity.folder?.id;
|
|
275
|
+
const folder = folderId ? await this.foldersService.findOneById(folderId) : null;
|
|
276
|
+
if (entity.image && image?.cropArea) {
|
|
277
|
+
entity.image.cropArea = image.cropArea;
|
|
278
|
+
}
|
|
279
|
+
if (input.name) {
|
|
280
|
+
const entityWithSameName = await this.findOneByFilenameAndFolder({ filename: input.name, folderId }, entity.scope);
|
|
281
|
+
if (entityWithSameName !== null && entityWithSameName.id !== entity.id) {
|
|
282
|
+
throw new Error(`Entity with name '${input.name}' already exists in ${folder ? `folder '${folder.name}'` : "root folder"}`);
|
|
324
283
|
}
|
|
325
|
-
|
|
326
|
-
|
|
284
|
+
}
|
|
285
|
+
const file = Object.assign(entity, {
|
|
286
|
+
...input,
|
|
287
|
+
folder: folderId !== undefined ? folder : entity.folder,
|
|
327
288
|
});
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
throw new Error("Target folder scope doesn't match file scope");
|
|
337
|
-
}
|
|
338
|
-
updatedFiles.push(yield this.updateByEntity(file, { folderId: (_a = targetFolder === null || targetFolder === void 0 ? void 0 : targetFolder.id) !== null && _a !== void 0 ? _a : null }));
|
|
289
|
+
return this.save(file);
|
|
290
|
+
}
|
|
291
|
+
async moveBatch(files, targetFolder) {
|
|
292
|
+
const updatedFiles = [];
|
|
293
|
+
for (const file of files) {
|
|
294
|
+
// Convert to JS object because deep-comparing classes and objects doesn't work
|
|
295
|
+
if (targetFolder?.scope !== undefined && !this.contentScopeService.scopesAreEqual(file.scope, targetFolder.scope)) {
|
|
296
|
+
throw new Error("Target folder scope doesn't match file scope");
|
|
339
297
|
}
|
|
340
|
-
|
|
341
|
-
}
|
|
298
|
+
updatedFiles.push(await this.updateByEntity(file, { folderId: targetFolder?.id ?? null }));
|
|
299
|
+
}
|
|
300
|
+
return updatedFiles;
|
|
342
301
|
}
|
|
343
|
-
delete(id) {
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
302
|
+
async delete(id) {
|
|
303
|
+
const file = await this.findOneById(id);
|
|
304
|
+
if (!file) {
|
|
305
|
+
throw new entity_not_found_exception_1.CometEntityNotFoundException();
|
|
306
|
+
}
|
|
307
|
+
const result = await this.filesRepository.nativeDelete(id);
|
|
308
|
+
const deleted = result === 1;
|
|
309
|
+
if (deleted &&
|
|
310
|
+
(await withFilesSelect(this.filesRepository.createQueryBuilder("file"), { contentHash: file.contentHash }).getResult()).length === 0) {
|
|
311
|
+
await this.blobStorageBackendService.removeFile(this.config.filesDirectory, (0, create_hashed_path_util_1.createHashedPath)(file.contentHash));
|
|
312
|
+
}
|
|
313
|
+
return deleted;
|
|
314
|
+
}
|
|
315
|
+
async save(entity) {
|
|
316
|
+
await this.entityManager.persistAndFlush(entity);
|
|
317
|
+
return entity;
|
|
318
|
+
}
|
|
319
|
+
async upload(file, { folderId, scope, ...assignData }) {
|
|
320
|
+
let result = undefined;
|
|
321
|
+
try {
|
|
322
|
+
const { exifData, contentHash, image } = await this.getFileMetadataForUpload(file);
|
|
323
|
+
await this.blobStorageBackendService.upload(file, contentHash, this.config.filesDirectory);
|
|
324
|
+
const name = await this.findNextAvailableFilename({ filePath: file.originalname, folderId, scope });
|
|
325
|
+
result = await this.create({
|
|
326
|
+
name,
|
|
327
|
+
folderId: folderId,
|
|
328
|
+
size: file.size,
|
|
329
|
+
mimetype: file.mimetype,
|
|
330
|
+
image: image !== undefined
|
|
331
|
+
? {
|
|
332
|
+
width: image.width,
|
|
333
|
+
height: image.height,
|
|
334
|
+
exif: exifData,
|
|
335
|
+
cropArea: {
|
|
336
|
+
focalPoint: focal_point_enum_1.FocalPoint.SMART,
|
|
337
|
+
},
|
|
338
|
+
}
|
|
339
|
+
: undefined,
|
|
340
|
+
contentHash,
|
|
341
|
+
scope,
|
|
342
|
+
...assignData,
|
|
343
|
+
});
|
|
344
|
+
if (result.image) {
|
|
345
|
+
// We do not want for our users to await the dominant color calculation. To prevent concurrency issues we must use a separate Unit of
|
|
346
|
+
// Work. This can be achieved by forking the EntityManager instance.
|
|
347
|
+
// See https://mikro-orm.io/docs/faq#you-cannot-call-emflush-from-inside-lifecycle-hook-handlers and
|
|
348
|
+
// https://mikro-orm.io/docs/unit-of-work for more information.
|
|
349
|
+
const entityManager = this.orm.em.fork();
|
|
350
|
+
const image = await entityManager.findOneOrFail(file_image_entity_1.DamFileImage, result.image.id);
|
|
351
|
+
this.calculateDominantColor(contentHash).then((dominantColor) => {
|
|
352
|
+
image.dominantColor = dominantColor;
|
|
353
|
+
return entityManager.flush();
|
|
354
|
+
});
|
|
353
355
|
}
|
|
354
|
-
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
});
|
|
356
|
+
rimraf.sync(file.path);
|
|
357
|
+
}
|
|
358
|
+
catch (e) {
|
|
359
|
+
rimraf.sync(file.path);
|
|
360
|
+
throw e;
|
|
361
|
+
}
|
|
362
|
+
return result;
|
|
362
363
|
}
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
cropArea: {
|
|
377
|
-
focalPoint: focal_point_enum_1.FocalPoint.SMART,
|
|
378
|
-
},
|
|
379
|
-
}
|
|
380
|
-
: undefined, contentHash,
|
|
381
|
-
scope }, assignData));
|
|
382
|
-
if (result.image) {
|
|
383
|
-
// We do not want for our users to await the dominant color calculation. To prevent concurrency issues we must use a separate Unit of
|
|
384
|
-
// Work. This can be achieved by forking the EntityManager instance.
|
|
385
|
-
// See https://mikro-orm.io/docs/faq#you-cannot-call-emflush-from-inside-lifecycle-hook-handlers and
|
|
386
|
-
// https://mikro-orm.io/docs/unit-of-work for more information.
|
|
387
|
-
const entityManager = this.orm.em.fork();
|
|
388
|
-
const image = yield entityManager.findOneOrFail(file_image_entity_1.DamFileImage, result.image.id);
|
|
389
|
-
this.calculateDominantColor(contentHash).then((dominantColor) => {
|
|
390
|
-
image.dominantColor = dominantColor;
|
|
391
|
-
return entityManager.flush();
|
|
392
|
-
});
|
|
393
|
-
}
|
|
394
|
-
rimraf.sync(file.path);
|
|
395
|
-
}
|
|
396
|
-
catch (e) {
|
|
397
|
-
rimraf.sync(file.path);
|
|
398
|
-
throw e;
|
|
399
|
-
}
|
|
400
|
-
return result;
|
|
364
|
+
async getFilePosition(fileId, args, scope) {
|
|
365
|
+
const isSearching = args.filter?.searchText !== undefined && args.filter.searchText.length > 0;
|
|
366
|
+
const subQb = withFilesSelect(this.filesRepository
|
|
367
|
+
.createQueryBuilder("file")
|
|
368
|
+
.select(["file.id", (0, postgresql_1.raw)(`ROW_NUMBER() OVER( ORDER BY file."${args.sortColumnName}" ${args.sortDirection} ) AS row_number`)])
|
|
369
|
+
.leftJoinAndSelect("file.folder", "folder"), {
|
|
370
|
+
archived: !args.includeArchived ? false : undefined,
|
|
371
|
+
folderId: !isSearching ? args.folderId || null : undefined,
|
|
372
|
+
mimetypes: args.filter?.mimetypes,
|
|
373
|
+
query: args.filter?.searchText,
|
|
374
|
+
sortColumnName: args.sortColumnName,
|
|
375
|
+
sortDirection: args.sortDirection,
|
|
376
|
+
scope,
|
|
401
377
|
});
|
|
402
|
-
|
|
403
|
-
getFilePosition(fileId, args, scope) {
|
|
404
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
405
|
-
var _a, _b, _c;
|
|
406
|
-
const isSearching = ((_a = args.filter) === null || _a === void 0 ? void 0 : _a.searchText) !== undefined && args.filter.searchText.length > 0;
|
|
407
|
-
const subQb = withFilesSelect(this.filesRepository
|
|
408
|
-
.createQueryBuilder("file")
|
|
409
|
-
.select(["file.id", (0, postgresql_1.raw)(`ROW_NUMBER() OVER( ORDER BY file."${args.sortColumnName}" ${args.sortDirection} ) AS row_number`)])
|
|
410
|
-
.leftJoinAndSelect("file.folder", "folder"), {
|
|
411
|
-
archived: !args.includeArchived ? false : undefined,
|
|
412
|
-
folderId: !isSearching ? args.folderId || null : undefined,
|
|
413
|
-
mimetypes: (_b = args.filter) === null || _b === void 0 ? void 0 : _b.mimetypes,
|
|
414
|
-
query: (_c = args.filter) === null || _c === void 0 ? void 0 : _c.searchText,
|
|
415
|
-
sortColumnName: args.sortColumnName,
|
|
416
|
-
sortDirection: args.sortDirection,
|
|
417
|
-
scope,
|
|
418
|
-
});
|
|
419
|
-
const result = yield this.filesRepository.getKnex().raw(`select "file_with_row_number".row_number
|
|
378
|
+
const result = await this.filesRepository.getKnex().raw(`select "file_with_row_number".row_number
|
|
420
379
|
from "${file_entity_1.FILE_TABLE_NAME}" as "file"
|
|
421
380
|
join (${subQb.getFormattedQuery()}) as "file_with_row_number" ON file_with_row_number.id = file.id
|
|
422
381
|
where "file"."id" = ?
|
|
423
382
|
`, [fileId]);
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
copiedAlternatives.push(copiedDamMediaAlternative);
|
|
383
|
+
if (result.rows.length === 0) {
|
|
384
|
+
throw new Error("File ID does not exist.");
|
|
385
|
+
}
|
|
386
|
+
// make the positions start with 0
|
|
387
|
+
return Number(result.rows[0].row_number) - 1;
|
|
388
|
+
}
|
|
389
|
+
async createCopyOfFile(file, { inboxFolder }) {
|
|
390
|
+
let fileImageInput;
|
|
391
|
+
if (file.image) {
|
|
392
|
+
const { id: ignoreId, file: ignoreFile, ...imageProps } = file.image;
|
|
393
|
+
fileImageInput = { ...postgresql_1.Utils.copy(imageProps) };
|
|
394
|
+
}
|
|
395
|
+
const { id: ignoreId, createdAt: ignoreCreatedAt, updatedAt: ignoreUpdatedAt, folder: ignoreFolder, image: ignoreImage, scope: ignoreScope, copies: ignoreCopies, alternativesForThisFile: ignoreAlternativesForThisFile, thisFileIsAlternativeFor: ignoreThisFileIsAlternativeFor, ...fileProps } = file;
|
|
396
|
+
const fileInput = {
|
|
397
|
+
...postgresql_1.Utils.copy(fileProps),
|
|
398
|
+
image: fileImageInput,
|
|
399
|
+
folderId: inboxFolder.id,
|
|
400
|
+
copyOf: file,
|
|
401
|
+
scope: inboxFolder.scope,
|
|
402
|
+
};
|
|
403
|
+
const copiedFile = await this.create(fileInput);
|
|
404
|
+
// handled DAM alternatives
|
|
405
|
+
const copiedAlternatives = [];
|
|
406
|
+
if ((await file.alternativesForThisFile.loadItems()).length > 0) {
|
|
407
|
+
for (const alternative of file.alternativesForThisFile) {
|
|
408
|
+
const alternativeFile = await alternative.alternative.load();
|
|
409
|
+
if (alternativeFile === null) {
|
|
410
|
+
continue;
|
|
453
411
|
}
|
|
412
|
+
const copiedAlternativeFile = await this.createCopyOfFile(alternativeFile, { inboxFolder });
|
|
413
|
+
const { id: ignoreId, for: ignoreFor, alternative: ignoreAlternative, ...alternativeProps } = alternative;
|
|
414
|
+
const copiedDamMediaAlternative = this.damMediaAlternativesRepository.create({
|
|
415
|
+
...alternativeProps,
|
|
416
|
+
for: copiedFile,
|
|
417
|
+
alternative: copiedAlternativeFile,
|
|
418
|
+
});
|
|
419
|
+
copiedAlternatives.push(copiedDamMediaAlternative);
|
|
454
420
|
}
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
}
|
|
459
|
-
copyFilesToScope(_a) {
|
|
460
|
-
return __awaiter(this, arguments, void 0, function* ({ fileIds, inboxFolderId }) {
|
|
461
|
-
const inboxFolder = yield this.foldersService.findOneById(inboxFolderId);
|
|
462
|
-
if (!inboxFolder) {
|
|
463
|
-
throw new Error("Specified inbox folder doesn't exist.");
|
|
464
|
-
}
|
|
465
|
-
const files = yield this.findMultipleByIds(fileIds);
|
|
466
|
-
if (files.length === 0) {
|
|
467
|
-
throw new Error("No valid file ids provided");
|
|
468
|
-
}
|
|
469
|
-
const mappedFiles = [];
|
|
470
|
-
for (const file of files) {
|
|
471
|
-
const copiedFile = yield this.createCopyOfFile(file, { inboxFolder });
|
|
472
|
-
mappedFiles.push({ rootFile: file, copy: copiedFile });
|
|
473
|
-
}
|
|
474
|
-
return { mappedFiles };
|
|
475
|
-
});
|
|
476
|
-
}
|
|
477
|
-
findNextAvailableFilename(_a) {
|
|
478
|
-
return __awaiter(this, arguments, void 0, function* ({ filePath, folderId = null, scope, }) {
|
|
479
|
-
const extension = (0, path_1.extname)(filePath);
|
|
480
|
-
const filename = (0, path_1.basename)(filePath, extension);
|
|
481
|
-
let i = 1;
|
|
482
|
-
let name = (0, files_utils_1.slugifyFilename)(filename, extension);
|
|
483
|
-
while ((yield this.findOneByFilenameAndFolder({ filename: name, folderId }, scope)) !== null) {
|
|
484
|
-
name = (0, files_utils_1.slugifyFilename)(`${filename}-copy${i}`, extension);
|
|
485
|
-
i++;
|
|
486
|
-
}
|
|
487
|
-
return name;
|
|
488
|
-
});
|
|
421
|
+
}
|
|
422
|
+
copiedFile.alternativesForThisFile.set(copiedAlternatives);
|
|
423
|
+
return copiedFile;
|
|
489
424
|
}
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
425
|
+
async copyFilesToScope({ fileIds, inboxFolderId }) {
|
|
426
|
+
const inboxFolder = await this.foldersService.findOneById(inboxFolderId);
|
|
427
|
+
if (!inboxFolder) {
|
|
428
|
+
throw new Error("Specified inbox folder doesn't exist.");
|
|
429
|
+
}
|
|
430
|
+
const files = await this.findMultipleByIds(fileIds);
|
|
431
|
+
if (files.length === 0) {
|
|
432
|
+
throw new Error("No valid file ids provided");
|
|
433
|
+
}
|
|
434
|
+
const mappedFiles = [];
|
|
435
|
+
for (const file of files) {
|
|
436
|
+
const copiedFile = await this.createCopyOfFile(file, { inboxFolder });
|
|
437
|
+
mappedFiles.push({ rootFile: file, copy: copiedFile });
|
|
438
|
+
}
|
|
439
|
+
return { mappedFiles };
|
|
440
|
+
}
|
|
441
|
+
async findNextAvailableFilename({ filePath, folderId = null, scope, }) {
|
|
442
|
+
const extension = (0, path_1.extname)(filePath);
|
|
443
|
+
const filename = (0, path_1.basename)(filePath, extension);
|
|
444
|
+
let i = 1;
|
|
445
|
+
let name = (0, files_utils_1.slugifyFilename)(filename, extension);
|
|
446
|
+
while ((await this.findOneByFilenameAndFolder({ filename: name, folderId }, scope)) !== null) {
|
|
447
|
+
name = (0, files_utils_1.slugifyFilename)(`${filename}-copy${i}`, extension);
|
|
448
|
+
i++;
|
|
449
|
+
}
|
|
450
|
+
return name;
|
|
451
|
+
}
|
|
452
|
+
async calculateDominantColor(contentHash) {
|
|
453
|
+
const path = this.imgproxyService
|
|
454
|
+
.builder()
|
|
455
|
+
.resize(imgproxy_enum_1.ResizingType.AUTO, 1)
|
|
456
|
+
.format(imgproxy_enum_1.Extension.PNG)
|
|
457
|
+
.generateUrl(`${this.blobStorageBackendService.getBackendFilePathPrefix()}${this.config.filesDirectory}/${(0, create_hashed_path_util_1.createHashedPath)(contentHash)}`);
|
|
458
|
+
const imgUrl = this.imgproxyService.getSignedUrl(path);
|
|
459
|
+
let imageResponse;
|
|
460
|
+
try {
|
|
461
|
+
imageResponse = await fetch(imgUrl);
|
|
462
|
+
}
|
|
463
|
+
catch (error) {
|
|
464
|
+
this.logger.error("Failed to calculate dominant color: imgproxy is not available", error);
|
|
465
|
+
return undefined;
|
|
466
|
+
}
|
|
467
|
+
if (!imageResponse.ok) {
|
|
468
|
+
this.logger.error(`Failed to calculate dominant color: imgproxy returned ${imageResponse.status} ${imageResponse.statusText}`);
|
|
469
|
+
return undefined;
|
|
470
|
+
}
|
|
471
|
+
try {
|
|
472
|
+
const arrayBuffer = await imageResponse.arrayBuffer();
|
|
473
|
+
const pngBuffer = Buffer.from(arrayBuffer);
|
|
474
|
+
// Parse the dominant color from the 1x1 PNG produced by imgproxy
|
|
475
|
+
return await this.parsePngPixelColor(pngBuffer);
|
|
476
|
+
}
|
|
477
|
+
catch (error) {
|
|
478
|
+
this.logger.error("Failed to calculate dominant color: could not parse imgproxy response", error);
|
|
479
|
+
return undefined;
|
|
480
|
+
}
|
|
513
481
|
}
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
482
|
+
async parsePngPixelColor(pngBuffer) {
|
|
483
|
+
// PNG: 8-byte signature, then chunks (4-byte length + 4-byte type + data + 4-byte CRC)
|
|
484
|
+
let offset = 8;
|
|
485
|
+
let colorType = -1;
|
|
486
|
+
let palette;
|
|
487
|
+
while (offset < pngBuffer.length) {
|
|
488
|
+
const length = pngBuffer.readUInt32BE(offset);
|
|
489
|
+
const type = pngBuffer.toString("ascii", offset + 4, offset + 8);
|
|
490
|
+
const data = pngBuffer.subarray(offset + 8, offset + 8 + length);
|
|
491
|
+
if (type === "IHDR") {
|
|
492
|
+
colorType = data[9];
|
|
520
493
|
}
|
|
521
|
-
else {
|
|
522
|
-
|
|
523
|
-
fileId: file.id,
|
|
524
|
-
filename,
|
|
525
|
-
});
|
|
526
|
-
baseUrl.push(hash);
|
|
494
|
+
else if (type === "PLTE") {
|
|
495
|
+
palette = data;
|
|
527
496
|
}
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
try {
|
|
537
|
-
for (var _d = true, fileStream_1 = __asyncValues(fileStream), fileStream_1_1; fileStream_1_1 = yield fileStream_1.next(), _a = fileStream_1_1.done, !_a; _d = true) {
|
|
538
|
-
_c = fileStream_1_1.value;
|
|
539
|
-
_d = false;
|
|
540
|
-
const chunk = _c;
|
|
541
|
-
chunks.push(chunk);
|
|
497
|
+
else if (type === "IDAT") {
|
|
498
|
+
const decompressed = await inflate(data);
|
|
499
|
+
// Decompressed scanline: [filter_byte, pixel_data...]
|
|
500
|
+
let r, g, b;
|
|
501
|
+
if (colorType === 3 && palette) {
|
|
502
|
+
// Indexed color: pixel value is a palette index
|
|
503
|
+
const index = decompressed[1] * 3;
|
|
504
|
+
[r, g, b] = [palette[index], palette[index + 1], palette[index + 2]];
|
|
542
505
|
}
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
if (!_d && !_a && (_b = fileStream_1.return)) yield _b.call(fileStream_1);
|
|
506
|
+
else if (colorType === 0) {
|
|
507
|
+
// Grayscale
|
|
508
|
+
const gray = decompressed[1];
|
|
509
|
+
[r, g, b] = [gray, gray, gray];
|
|
548
510
|
}
|
|
549
|
-
|
|
511
|
+
else {
|
|
512
|
+
// RGB (type 2) or RGBA (type 6): R, G, B are at bytes 1-3
|
|
513
|
+
[r, g, b] = [decompressed[1], decompressed[2], decompressed[3]];
|
|
514
|
+
}
|
|
515
|
+
return `#${[r, g, b].map((v) => v.toString(16).padStart(2, "0")).join("")}`;
|
|
550
516
|
}
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
517
|
+
offset += 12 + length;
|
|
518
|
+
}
|
|
519
|
+
this.logger.warn("Failed to calculate dominant color: no IDAT chunk found in PNG");
|
|
520
|
+
return undefined;
|
|
521
|
+
}
|
|
522
|
+
async createFileUrl(file, { previewDamUrls = false }) {
|
|
523
|
+
const filename = (0, path_1.parse)(file.name).name;
|
|
524
|
+
const baseUrl = [`/${this.config.basePath}/files`];
|
|
525
|
+
if (previewDamUrls) {
|
|
526
|
+
baseUrl.push("preview");
|
|
527
|
+
}
|
|
528
|
+
else {
|
|
529
|
+
const hash = this.createHash({
|
|
530
|
+
fileId: file.id,
|
|
531
|
+
filename,
|
|
532
|
+
});
|
|
533
|
+
baseUrl.push(hash);
|
|
534
|
+
}
|
|
535
|
+
return [...baseUrl, file.contentHash, file.id, filename].join("/");
|
|
554
536
|
}
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
537
|
+
async getFileAsBase64String(file) {
|
|
538
|
+
const fileStream = await this.blobStorageBackendService.getFile(this.config.filesDirectory, (0, create_hashed_path_util_1.createHashedPath)(file.contentHash));
|
|
539
|
+
const chunks = [];
|
|
540
|
+
for await (const chunk of fileStream) {
|
|
541
|
+
chunks.push(chunk);
|
|
542
|
+
}
|
|
543
|
+
const base64String = Buffer.concat(chunks).toString("base64");
|
|
544
|
+
return `data:${file.mimetype};base64,${base64String}`;
|
|
545
|
+
}
|
|
546
|
+
async createFileDownloadUrl(file, { previewDamUrls = false }) {
|
|
547
|
+
const filename = (0, path_1.parse)(file.name).name;
|
|
548
|
+
const baseUrl = [`/dam/files/download`];
|
|
549
|
+
if (previewDamUrls) {
|
|
550
|
+
baseUrl.push("preview");
|
|
551
|
+
}
|
|
552
|
+
else {
|
|
553
|
+
const hash = this.createHash({
|
|
554
|
+
fileId: file.id,
|
|
555
|
+
filename,
|
|
556
|
+
});
|
|
557
|
+
baseUrl.push(hash);
|
|
558
|
+
}
|
|
559
|
+
return [...baseUrl, file.contentHash, file.id, filename].join("/");
|
|
571
560
|
}
|
|
572
561
|
createHash(params) {
|
|
573
562
|
const fileHash = `file:${params.fileId}:${params.filename}`;
|
|
574
563
|
return (0, crypto_1.createHmac)("sha1", this.config.secret).update(fileHash).digest("hex");
|
|
575
564
|
}
|
|
576
|
-
getFileMetadataForUpload(file) {
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
image = undefined;
|
|
584
|
-
if (image !== undefined && image.orientation !== undefined && [6, 8].includes(image.orientation)) {
|
|
585
|
-
image = Object.assign(Object.assign({}, image), { width: image.height, height: image.width });
|
|
586
|
-
}
|
|
565
|
+
async getFileMetadataForUpload(file) {
|
|
566
|
+
const contentHash = await this.calculateHashForFile(file.path);
|
|
567
|
+
let image;
|
|
568
|
+
try {
|
|
569
|
+
image = await (0, probe_image_size_1.default)((0, fs_1.createReadStream)(file.path));
|
|
570
|
+
if (image.type == "svg") {
|
|
571
|
+
image = undefined;
|
|
587
572
|
}
|
|
588
|
-
|
|
589
|
-
|
|
573
|
+
if (image !== undefined && image.orientation !== undefined && [6, 8].includes(image.orientation)) {
|
|
574
|
+
image = {
|
|
575
|
+
...image,
|
|
576
|
+
width: image.height,
|
|
577
|
+
height: image.width,
|
|
578
|
+
};
|
|
590
579
|
}
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
580
|
+
}
|
|
581
|
+
catch {
|
|
582
|
+
// empty
|
|
583
|
+
}
|
|
584
|
+
if (image !== undefined &&
|
|
585
|
+
image.width &&
|
|
586
|
+
image.height &&
|
|
587
|
+
Math.round(((image.width * image.height) / 1000000) * 10) / 10 >= this.config.maxSrcResolution) {
|
|
588
|
+
throw new image_resolution_exception_1.CometImageResolutionException(`Maximal image resolution exceeded`);
|
|
589
|
+
}
|
|
590
|
+
let exifData;
|
|
591
|
+
if (exifrSupportedMimetypes.includes(file.mimetype)) {
|
|
592
|
+
try {
|
|
593
|
+
exifData = await exifr_1.default.parse(file.path);
|
|
596
594
|
}
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
try {
|
|
600
|
-
exifData = yield exifr_1.default.parse(file.path);
|
|
601
|
-
}
|
|
602
|
-
catch (_b) {
|
|
603
|
-
// empty
|
|
604
|
-
}
|
|
595
|
+
catch {
|
|
596
|
+
// empty
|
|
605
597
|
}
|
|
606
|
-
|
|
607
|
-
}
|
|
598
|
+
}
|
|
599
|
+
return { exifData, contentHash, image };
|
|
608
600
|
}
|
|
609
601
|
};
|
|
610
602
|
exports.FilesService = FilesService;
|