@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.
Files changed (611) hide show
  1. package/lib/access-log/access-log.interceptor.d.ts.map +1 -1
  2. package/lib/access-log/access-log.interceptor.js +6 -6
  3. package/lib/access-log/access-log.interceptor.js.map +1 -1
  4. package/lib/auth/guards/comet.guard.d.ts.map +1 -1
  5. package/lib/auth/guards/comet.guard.js +48 -58
  6. package/lib/auth/guards/comet.guard.js.map +1 -1
  7. package/lib/auth/resolver/auth.resolver.js +16 -31
  8. package/lib/auth/resolver/auth.resolver.js.map +1 -1
  9. package/lib/auth/services/basic.auth-service.d.ts.map +1 -1
  10. package/lib/auth/services/basic.auth-service.js +11 -7
  11. package/lib/auth/services/basic.auth-service.js.map +1 -1
  12. package/lib/auth/services/jwt.auth-service.d.ts.map +1 -1
  13. package/lib/auth/services/jwt.auth-service.js +51 -73
  14. package/lib/auth/services/jwt.auth-service.js.map +1 -1
  15. package/lib/auth/services/site-preview.auth-service.d.ts.map +1 -1
  16. package/lib/auth/services/site-preview.auth-service.js +23 -33
  17. package/lib/auth/services/site-preview.auth-service.js.map +1 -1
  18. package/lib/auth/util/auth-guard.providers.d.ts +2 -2
  19. package/lib/auth/util/auth-guard.providers.d.ts.map +1 -1
  20. package/lib/auth/util/auth-service.interface.d.ts +2 -2
  21. package/lib/auth/util/auth-service.interface.d.ts.map +1 -1
  22. package/lib/blob-storage/backends/azure/blob-storage-azure.storage.d.ts +3 -2
  23. package/lib/blob-storage/backends/azure/blob-storage-azure.storage.d.ts.map +1 -1
  24. package/lib/blob-storage/backends/azure/blob-storage-azure.storage.js +73 -94
  25. package/lib/blob-storage/backends/azure/blob-storage-azure.storage.js.map +1 -1
  26. package/lib/blob-storage/backends/blob-storage-backend.interface.d.ts +2 -1
  27. package/lib/blob-storage/backends/blob-storage-backend.interface.d.ts.map +1 -1
  28. package/lib/blob-storage/backends/blob-storage-backend.service.d.ts +5 -2
  29. package/lib/blob-storage/backends/blob-storage-backend.service.d.ts.map +1 -1
  30. package/lib/blob-storage/backends/blob-storage-backend.service.js +79 -79
  31. package/lib/blob-storage/backends/blob-storage-backend.service.js.map +1 -1
  32. package/lib/blob-storage/backends/file/blob-storage-file.storage.d.ts +3 -2
  33. package/lib/blob-storage/backends/file/blob-storage-file.storage.d.ts.map +1 -1
  34. package/lib/blob-storage/backends/file/blob-storage-file.storage.js +77 -95
  35. package/lib/blob-storage/backends/file/blob-storage-file.storage.js.map +1 -1
  36. package/lib/blob-storage/backends/s3/blob-storage-s3.config.d.ts +1 -1
  37. package/lib/blob-storage/backends/s3/blob-storage-s3.config.d.ts.map +1 -1
  38. package/lib/blob-storage/backends/s3/blob-storage-s3.storage.d.ts +3 -2
  39. package/lib/blob-storage/backends/s3/blob-storage-s3.storage.d.ts.map +1 -1
  40. package/lib/blob-storage/backends/s3/blob-storage-s3.storage.js +112 -116
  41. package/lib/blob-storage/backends/s3/blob-storage-s3.storage.js.map +1 -1
  42. package/lib/blob-storage/blob-storage.config.d.ts +3 -3
  43. package/lib/blob-storage/blob-storage.config.d.ts.map +1 -1
  44. package/lib/blob-storage/cache/dto/file-cache.interface.d.ts +1 -1
  45. package/lib/blob-storage/cache/dto/file-cache.interface.d.ts.map +1 -1
  46. package/lib/blob-storage/cache/scaled-images-cache.service.js +38 -53
  47. package/lib/blob-storage/cache/scaled-images-cache.service.js.map +1 -1
  48. package/lib/blocks/SpaceBlock/migrations/MigrationTo1.d.ts +1 -1
  49. package/lib/blocks/SpaceBlock/migrations/MigrationTo1.d.ts.map +1 -1
  50. package/lib/blocks/SpaceBlock/migrations/MigrationTo1.js +4 -1
  51. package/lib/blocks/SpaceBlock/migrations/MigrationTo1.js.map +1 -1
  52. package/lib/blocks/SpaceBlock/migrations/MigrationTo2.d.ts +1 -1
  53. package/lib/blocks/SpaceBlock/migrations/MigrationTo2.d.ts.map +1 -1
  54. package/lib/blocks/SpaceBlock/migrations/MigrationTo2.js +1 -12
  55. package/lib/blocks/SpaceBlock/migrations/MigrationTo2.js.map +1 -1
  56. package/lib/blocks/YouTubeVideoBlock/migrations/1-remove-aspect-ratio.migration.d.ts +1 -1
  57. package/lib/blocks/YouTubeVideoBlock/migrations/1-remove-aspect-ratio.migration.d.ts.map +1 -1
  58. package/lib/blocks/YouTubeVideoBlock/migrations/1-remove-aspect-ratio.migration.js +2 -14
  59. package/lib/blocks/YouTubeVideoBlock/migrations/1-remove-aspect-ratio.migration.js.map +1 -1
  60. package/lib/blocks/YouTubeVideoBlock/migrations/2-add-preview-image.migration.d.ts +1 -1
  61. package/lib/blocks/YouTubeVideoBlock/migrations/2-add-preview-image.migration.d.ts.map +1 -1
  62. package/lib/blocks/YouTubeVideoBlock/migrations/2-add-preview-image.migration.js +1 -1
  63. package/lib/blocks/YouTubeVideoBlock/migrations/2-add-preview-image.migration.js.map +1 -1
  64. package/lib/blocks/block-migrate.service.d.ts.map +1 -1
  65. package/lib/blocks/block-migrate.service.js +64 -73
  66. package/lib/blocks/block-migrate.service.js.map +1 -1
  67. package/lib/blocks/block.d.ts +4 -4
  68. package/lib/blocks/block.d.ts.map +1 -1
  69. package/lib/blocks/block.js +5 -18
  70. package/lib/blocks/block.js.map +1 -1
  71. package/lib/blocks/blocks-meta.service.js +14 -25
  72. package/lib/blocks/blocks-meta.service.js.map +1 -1
  73. package/lib/blocks/blocks-transformer-middleware.factory.d.ts +1 -1
  74. package/lib/blocks/blocks-transformer-middleware.factory.d.ts.map +1 -1
  75. package/lib/blocks/blocks-transformer-middleware.factory.js +3 -12
  76. package/lib/blocks/blocks-transformer-middleware.factory.js.map +1 -1
  77. package/lib/blocks/blocks-transformer.d.ts +1 -1
  78. package/lib/blocks/blocks-transformer.d.ts.map +1 -1
  79. package/lib/blocks/blocks-transformer.js +30 -43
  80. package/lib/blocks/blocks-transformer.js.map +1 -1
  81. package/lib/blocks/blocks-transformer.service.js +3 -14
  82. package/lib/blocks/blocks-transformer.service.js.map +1 -1
  83. package/lib/blocks/create-block-index-views.command.js +2 -13
  84. package/lib/blocks/create-block-index-views.command.js.map +1 -1
  85. package/lib/blocks/decorators/child-block-input.js +2 -2
  86. package/lib/blocks/decorators/child-block-input.js.map +1 -1
  87. package/lib/blocks/decorators/child-block.js +1 -1
  88. package/lib/blocks/decorators/child-block.js.map +1 -1
  89. package/lib/blocks/decorators/field.js +1 -2
  90. package/lib/blocks/decorators/field.js.map +1 -1
  91. package/lib/blocks/decorators/root-block-entity.d.ts +1 -1
  92. package/lib/blocks/decorators/root-block-entity.d.ts.map +1 -1
  93. package/lib/blocks/decorators/root-block.d.ts +1 -1
  94. package/lib/blocks/decorators/root-block.d.ts.map +1 -1
  95. package/lib/blocks/factories/columns-block.factory.js +13 -18
  96. package/lib/blocks/factories/columns-block.factory.js.map +1 -1
  97. package/lib/blocks/factories/createBlocksBlock.js +14 -35
  98. package/lib/blocks/factories/createBlocksBlock.js.map +1 -1
  99. package/lib/blocks/factories/createListBlock.js +16 -33
  100. package/lib/blocks/factories/createListBlock.js.map +1 -1
  101. package/lib/blocks/factories/createOneOfBlock.js +20 -35
  102. package/lib/blocks/factories/createOneOfBlock.js.map +1 -1
  103. package/lib/blocks/factories/createOptionalBlock.js +5 -16
  104. package/lib/blocks/factories/createOptionalBlock.js.map +1 -1
  105. package/lib/blocks/factories/createRichTextBlock.js +33 -31
  106. package/lib/blocks/factories/createRichTextBlock.js.map +1 -1
  107. package/lib/blocks/factories/createSeoBlock.js +14 -25
  108. package/lib/blocks/factories/createSeoBlock.js.map +1 -1
  109. package/lib/blocks/factories/createTableBlock.js +5 -1
  110. package/lib/blocks/factories/createTableBlock.js.map +1 -1
  111. package/lib/blocks/factories/types.d.ts +1 -1
  112. package/lib/blocks/factories/types.d.ts.map +1 -1
  113. package/lib/blocks/flat-blocks/flat-blocks.d.ts +1 -1
  114. package/lib/blocks/flat-blocks/flat-blocks.d.ts.map +1 -1
  115. package/lib/blocks/flat-blocks/visit-blocks-breadth-first.d.ts +1 -1
  116. package/lib/blocks/flat-blocks/visit-blocks-breadth-first.d.ts.map +1 -1
  117. package/lib/blocks/flat-blocks/visit-blocks-breadth-first.js +3 -3
  118. package/lib/blocks/flat-blocks/visit-blocks-breadth-first.js.map +1 -1
  119. package/lib/blocks/flat-blocks/visit-blocks-depth-first.d.ts +2 -2
  120. package/lib/blocks/flat-blocks/visit-blocks-depth-first.d.ts.map +1 -1
  121. package/lib/blocks/flat-blocks/visit-blocks-depth-first.js +3 -3
  122. package/lib/blocks/flat-blocks/visit-blocks-depth-first.js.map +1 -1
  123. package/lib/blocks/get-preview-image-url-templates.d.ts +1 -1
  124. package/lib/blocks/get-preview-image-url-templates.d.ts.map +1 -1
  125. package/lib/blocks/get-preview-image-url-templates.js +13 -26
  126. package/lib/blocks/get-preview-image-url-templates.js.map +1 -1
  127. package/lib/blocks/helpers/composeBlocks.js +10 -17
  128. package/lib/blocks/helpers/composeBlocks.js.map +1 -1
  129. package/lib/blocks/migrate-blocks.command.d.ts +5 -1
  130. package/lib/blocks/migrate-blocks.command.d.ts.map +1 -1
  131. package/lib/blocks/migrate-blocks.command.js +17 -13
  132. package/lib/blocks/migrate-blocks.command.js.map +1 -1
  133. package/lib/blocks/migrations/BlockMigration.d.ts +1 -1
  134. package/lib/blocks/migrations/BlockMigration.d.ts.map +1 -1
  135. package/lib/blocks/migrations/BlockMigration.js +5 -13
  136. package/lib/blocks/migrations/BlockMigration.js.map +1 -1
  137. package/lib/blocks/migrations/applyMigrations.d.ts +1 -1
  138. package/lib/blocks/migrations/applyMigrations.d.ts.map +1 -1
  139. package/lib/blocks/migrations/createAppliedMigrationsBlockDataFactoryDecorator.d.ts +2 -2
  140. package/lib/blocks/migrations/createAppliedMigrationsBlockDataFactoryDecorator.d.ts.map +1 -1
  141. package/lib/blocks/migrations/decorators/BlockDataMigrationVersion.d.ts +1 -1
  142. package/lib/blocks/migrations/decorators/BlockDataMigrationVersion.d.ts.map +1 -1
  143. package/lib/blocks/migrations/decorators/BlockDataMigrationVersion.js +11 -19
  144. package/lib/blocks/migrations/decorators/BlockDataMigrationVersion.js.map +1 -1
  145. package/lib/blocks/migrations/typeSafeBlockMigrationPipe.d.ts +1 -1
  146. package/lib/blocks/migrations/typeSafeBlockMigrationPipe.d.ts.map +1 -1
  147. package/lib/blocks/refresh-block-index-views.command.js +2 -13
  148. package/lib/blocks/refresh-block-index-views.command.js.map +1 -1
  149. package/lib/blocks/rootBlocks/root-block-data.scalar.d.ts +1 -1
  150. package/lib/blocks/rootBlocks/root-block-data.scalar.d.ts.map +1 -1
  151. package/lib/blocks/rootBlocks/root-block-data.scalar.js +5 -1
  152. package/lib/blocks/rootBlocks/root-block-data.scalar.js.map +1 -1
  153. package/lib/blocks/rootBlocks/root-block-input.scalar.d.ts +1 -1
  154. package/lib/blocks/rootBlocks/root-block-input.scalar.d.ts.map +1 -1
  155. package/lib/blocks/rootBlocks/root-block-input.scalar.js +5 -1
  156. package/lib/blocks/rootBlocks/root-block-input.scalar.js.map +1 -1
  157. package/lib/blocks/search/get-search-text.d.ts +3 -1
  158. package/lib/blocks/search/get-search-text.d.ts.map +1 -1
  159. package/lib/blocks/search/get-search-text.js +26 -0
  160. package/lib/blocks/search/get-search-text.js.map +1 -1
  161. package/lib/blocks/transformToBlockSaveIndex/transformToBlockSaveIndex.d.ts +1 -1
  162. package/lib/blocks/transformToBlockSaveIndex/transformToBlockSaveIndex.d.ts.map +1 -1
  163. package/lib/blocks/transformToBlockSaveIndex/transformToBlockSaveIndex.js +1 -1
  164. package/lib/blocks/transformToBlockSaveIndex/transformToBlockSaveIndex.js.map +1 -1
  165. package/lib/builds/build-templates.resolver.js +7 -21
  166. package/lib/builds/build-templates.resolver.js.map +1 -1
  167. package/lib/builds/build-templates.service.js +6 -20
  168. package/lib/builds/build-templates.service.js.map +1 -1
  169. package/lib/builds/builds.resolver.js +16 -32
  170. package/lib/builds/builds.resolver.js.map +1 -1
  171. package/lib/builds/builds.service.js +106 -142
  172. package/lib/builds/builds.service.js.map +1 -1
  173. package/lib/builds/changes-checker.command.js +17 -28
  174. package/lib/builds/changes-checker.command.js.map +1 -1
  175. package/lib/builds/changes-checker.interceptor.js +34 -45
  176. package/lib/builds/changes-checker.interceptor.js.map +1 -1
  177. package/lib/common/decorators/crud-generator.decorator.d.ts +4 -4
  178. package/lib/common/decorators/crud-generator.decorator.d.ts.map +1 -1
  179. package/lib/common/decorators/request-context.decorator.d.ts +1 -1
  180. package/lib/common/decorators/request-context.decorator.d.ts.map +1 -1
  181. package/lib/common/decorators/utils.d.ts +1 -1
  182. package/lib/common/decorators/utils.d.ts.map +1 -1
  183. package/lib/common/errors/validation.exception-factory.d.ts +1 -1
  184. package/lib/common/errors/validation.exception-factory.d.ts.map +1 -1
  185. package/lib/common/errors/validation.exception.d.ts +1 -1
  186. package/lib/common/errors/validation.exception.d.ts.map +1 -1
  187. package/lib/common/filter/mikro-orm.d.ts +1 -1
  188. package/lib/common/filter/mikro-orm.d.ts.map +1 -1
  189. package/lib/common/filter/mikro-orm.js +5 -7
  190. package/lib/common/filter/mikro-orm.js.map +1 -1
  191. package/lib/common/graphql/extract-graphql-fields.d.ts +1 -1
  192. package/lib/common/graphql/extract-graphql-fields.d.ts.map +1 -1
  193. package/lib/common/graphql/extract-graphql-fields.js +2 -1
  194. package/lib/common/graphql/extract-graphql-fields.js.map +1 -1
  195. package/lib/common/helper/crud-generator.helper.d.ts +1 -1
  196. package/lib/common/helper/crud-generator.helper.d.ts.map +1 -1
  197. package/lib/common/helper/crud-generator.helper.js +2 -3
  198. package/lib/common/helper/crud-generator.helper.js.map +1 -1
  199. package/lib/common/helper/is-injectable-service.helper.d.ts +1 -1
  200. package/lib/common/helper/is-injectable-service.helper.d.ts.map +1 -1
  201. package/lib/common/helper/partial-type.helper.d.ts +2 -2
  202. package/lib/common/helper/partial-type.helper.d.ts.map +1 -1
  203. package/lib/common/helper/partial-type.helper.js +8 -8
  204. package/lib/common/helper/partial-type.helper.js.map +1 -1
  205. package/lib/common/test/get-error.js +3 -12
  206. package/lib/common/test/get-error.js.map +1 -1
  207. package/lib/common/validators/is-slug.js +3 -14
  208. package/lib/common/validators/is-slug.js.map +1 -1
  209. package/lib/content-generation/azure-open-ai/azure-open-ai-content-generation.service.js +94 -113
  210. package/lib/content-generation/azure-open-ai/azure-open-ai-content-generation.service.js.map +1 -1
  211. package/lib/content-generation/generate-alt-text.resolver.d.ts.map +1 -1
  212. package/lib/content-generation/generate-alt-text.resolver.js +6 -17
  213. package/lib/content-generation/generate-alt-text.resolver.js.map +1 -1
  214. package/lib/content-generation/generate-image-title.resolver.d.ts.map +1 -1
  215. package/lib/content-generation/generate-image-title.resolver.js +6 -17
  216. package/lib/content-generation/generate-image-title.resolver.js.map +1 -1
  217. package/lib/content-generation/generate-seo-tags.resolver.d.ts.map +1 -1
  218. package/lib/content-generation/generate-seo-tags.resolver.js +6 -17
  219. package/lib/content-generation/generate-seo-tags.resolver.js.map +1 -1
  220. package/lib/cron-jobs/cron-jobs.resolver.js +37 -54
  221. package/lib/cron-jobs/cron-jobs.resolver.js.map +1 -1
  222. package/lib/cron-jobs/cron-jobs.service.js +6 -7
  223. package/lib/cron-jobs/cron-jobs.service.js.map +1 -1
  224. package/lib/cron-jobs/jobs.resolver.js +22 -37
  225. package/lib/cron-jobs/jobs.resolver.js.map +1 -1
  226. package/lib/cron-jobs/jobs.service.js +5 -6
  227. package/lib/cron-jobs/jobs.service.js.map +1 -1
  228. package/lib/dam/blocks/dam-file-download-link-block-transformer.service.js +28 -33
  229. package/lib/dam/blocks/dam-file-download-link-block-transformer.service.js.map +1 -1
  230. package/lib/dam/blocks/dam-file-download-link.block.js +2 -13
  231. package/lib/dam/blocks/dam-file-download-link.block.js.map +1 -1
  232. package/lib/dam/blocks/pixel-image-block-transformer.service.js +35 -46
  233. package/lib/dam/blocks/pixel-image-block-transformer.service.js.map +1 -1
  234. package/lib/dam/blocks/pixel-image.block.js +11 -24
  235. package/lib/dam/blocks/pixel-image.block.js.map +1 -1
  236. package/lib/dam/blocks/svg-image-block-transformer.service.js +23 -34
  237. package/lib/dam/blocks/svg-image-block-transformer.service.js.map +1 -1
  238. package/lib/dam/blocks/svg-image.block.js +2 -13
  239. package/lib/dam/blocks/svg-image.block.js.map +1 -1
  240. package/lib/dam/blocks/video/dam-video-block-transformer.service.js +34 -45
  241. package/lib/dam/blocks/video/dam-video-block-transformer.service.js.map +1 -1
  242. package/lib/dam/blocks/video/dam-video.block.js +2 -13
  243. package/lib/dam/blocks/video/dam-video.block.js.map +1 -1
  244. package/lib/dam/blocks/video/migrations/1-add-preview-image.migration.d.ts +1 -1
  245. package/lib/dam/blocks/video/migrations/1-add-preview-image.migration.d.ts.map +1 -1
  246. package/lib/dam/blocks/video/migrations/1-add-preview-image.migration.js +1 -1
  247. package/lib/dam/blocks/video/migrations/1-add-preview-image.migration.js.map +1 -1
  248. package/lib/dam/common/decorators/has-valid-filename.decorator.js +23 -35
  249. package/lib/dam/common/decorators/has-valid-filename.decorator.js.map +1 -1
  250. package/lib/dam/dam.module.js +8 -18
  251. package/lib/dam/dam.module.js.map +1 -1
  252. package/lib/dam/files/dam-items.resolver.js +7 -20
  253. package/lib/dam/files/dam-items.resolver.js.map +1 -1
  254. package/lib/dam/files/dam-items.service.js +50 -76
  255. package/lib/dam/files/dam-items.service.js.map +1 -1
  256. package/lib/dam/files/dam-media-alternatives/dam-media-alternative.resolver.js +74 -102
  257. package/lib/dam/files/dam-media-alternatives/dam-media-alternative.resolver.js.map +1 -1
  258. package/lib/dam/files/dam-media-alternatives/entities/dam-media-alternative.entity.js +3 -13
  259. package/lib/dam/files/dam-media-alternatives/entities/dam-media-alternative.entity.js.map +1 -1
  260. package/lib/dam/files/dam-upload-file.interceptor.js +10 -21
  261. package/lib/dam/files/dam-upload-file.interceptor.js.map +1 -1
  262. package/lib/dam/files/file-image.resolver.js +8 -19
  263. package/lib/dam/files/file-image.resolver.js.map +1 -1
  264. package/lib/dam/files/file-warning.service.d.ts.map +1 -1
  265. package/lib/dam/files/file-warning.service.js +64 -90
  266. package/lib/dam/files/file-warning.service.js.map +1 -1
  267. package/lib/dam/files/files.controller.d.ts.map +1 -1
  268. package/lib/dam/files/files.controller.js +182 -210
  269. package/lib/dam/files/files.controller.js.map +1 -1
  270. package/lib/dam/files/files.resolver.d.ts.map +1 -1
  271. package/lib/dam/files/files.resolver.js +84 -168
  272. package/lib/dam/files/files.resolver.js.map +1 -1
  273. package/lib/dam/files/files.service.d.ts +1 -0
  274. package/lib/dam/files/files.service.d.ts.map +1 -1
  275. package/lib/dam/files/files.service.js +429 -437
  276. package/lib/dam/files/files.service.js.map +1 -1
  277. package/lib/dam/files/folders.controller.js +13 -24
  278. package/lib/dam/files/folders.controller.js.map +1 -1
  279. package/lib/dam/files/folders.resolver.js +25 -52
  280. package/lib/dam/files/folders.resolver.js.map +1 -1
  281. package/lib/dam/files/folders.service.d.ts.map +1 -1
  282. package/lib/dam/files/folders.service.js +201 -240
  283. package/lib/dam/files/folders.service.js.map +1 -1
  284. package/lib/dam/images/calculateDominantImageColor.command.js +14 -45
  285. package/lib/dam/images/calculateDominantImageColor.command.js.map +1 -1
  286. package/lib/dam/images/dto/image.interface.d.ts +2 -2
  287. package/lib/dam/images/dto/image.interface.d.ts.map +1 -1
  288. package/lib/dam/images/images.controller.js +134 -165
  289. package/lib/dam/images/images.controller.js.map +1 -1
  290. package/lib/dam/images/images.util.d.ts +2 -3
  291. package/lib/dam/images/images.util.d.ts.map +1 -1
  292. package/lib/dam/images/images.util.js +0 -4
  293. package/lib/dam/images/images.util.js.map +1 -1
  294. package/lib/dam/images/validators/is-valid-aspect-ratio.validator.js +16 -28
  295. package/lib/dam/images/validators/is-valid-aspect-ratio.validator.js.map +1 -1
  296. package/lib/dependencies/dependencies.resolver.factory.js +2 -13
  297. package/lib/dependencies/dependencies.resolver.factory.js.map +1 -1
  298. package/lib/dependencies/dependencies.service.d.ts +3 -1
  299. package/lib/dependencies/dependencies.service.d.ts.map +1 -1
  300. package/lib/dependencies/dependencies.service.js +189 -211
  301. package/lib/dependencies/dependencies.service.js.map +1 -1
  302. package/lib/dependencies/dependents.resolver.factory.js +2 -13
  303. package/lib/dependencies/dependents.resolver.factory.js.map +1 -1
  304. package/lib/dependencies/discover.service.d.ts +1 -1
  305. package/lib/dependencies/discover.service.d.ts.map +1 -1
  306. package/lib/dependencies/discover.service.js +2 -4
  307. package/lib/dependencies/discover.service.js.map +1 -1
  308. package/lib/document/dto/save-document.d.ts +1 -1
  309. package/lib/document/dto/save-document.d.ts.map +1 -1
  310. package/lib/document/validateNotModified.d.ts +1 -1
  311. package/lib/document/validateNotModified.d.ts.map +1 -1
  312. package/lib/document/validateNotModified.js +1 -1
  313. package/lib/document/validateNotModified.js.map +1 -1
  314. package/lib/entity-info/entity-info.decorator.d.ts +1 -1
  315. package/lib/entity-info/entity-info.decorator.d.ts.map +1 -1
  316. package/lib/entity-info/entity-info.service.js +48 -64
  317. package/lib/entity-info/entity-info.service.js.map +1 -1
  318. package/lib/file-uploads/file-upload-expiration.subscriber.js +5 -16
  319. package/lib/file-uploads/file-upload-expiration.subscriber.js.map +1 -1
  320. package/lib/file-uploads/file-uploads-download.controller.js +122 -150
  321. package/lib/file-uploads/file-uploads-download.controller.js.map +1 -1
  322. package/lib/file-uploads/file-uploads-file.interceptor.js +10 -21
  323. package/lib/file-uploads/file-uploads-file.interceptor.js.map +1 -1
  324. package/lib/file-uploads/file-uploads-upload.controller.js +17 -25
  325. package/lib/file-uploads/file-uploads-upload.controller.js.map +1 -1
  326. package/lib/file-uploads/file-uploads.module.js +3 -4
  327. package/lib/file-uploads/file-uploads.module.js.map +1 -1
  328. package/lib/file-uploads/file-uploads.resolver.js +1 -2
  329. package/lib/file-uploads/file-uploads.resolver.js.map +1 -1
  330. package/lib/file-uploads/file-uploads.service.js +53 -90
  331. package/lib/file-uploads/file-uploads.service.js.map +1 -1
  332. package/lib/file-utils/file-validation.service.d.ts +1 -1
  333. package/lib/file-utils/file-validation.service.d.ts.map +1 -1
  334. package/lib/file-utils/file-validation.service.js +14 -28
  335. package/lib/file-utils/file-validation.service.js.map +1 -1
  336. package/lib/file-utils/files.utils.d.ts +1 -1
  337. package/lib/file-utils/files.utils.d.ts.map +1 -1
  338. package/lib/file-utils/files.utils.js +33 -45
  339. package/lib/file-utils/files.utils.js.map +1 -1
  340. package/lib/file-utils/images.util.d.ts.map +1 -1
  341. package/lib/file-utils/images.util.js +10 -6
  342. package/lib/file-utils/images.util.js.map +1 -1
  343. package/lib/imgproxy/imgproxy.builder.d.ts.map +1 -1
  344. package/lib/imgproxy/imgproxy.builder.js +2 -1
  345. package/lib/imgproxy/imgproxy.builder.js.map +1 -1
  346. package/lib/importer/data-streams/file-data-stream.d.ts +3 -3
  347. package/lib/importer/data-streams/file-data-stream.d.ts.map +1 -1
  348. package/lib/importer/data-streams/local-file-data-stream.js +28 -76
  349. package/lib/importer/data-streams/local-file-data-stream.js.map +1 -1
  350. package/lib/importer/decorators/csv-column.decorator.d.ts +1 -1
  351. package/lib/importer/decorators/csv-column.decorator.d.ts.map +1 -1
  352. package/lib/importer/pipes/end.pipe.d.ts +1 -1
  353. package/lib/importer/pipes/end.pipe.d.ts.map +1 -1
  354. package/lib/importer/pipes/importer-pipe.type.d.ts +3 -3
  355. package/lib/importer/pipes/importer-pipe.type.d.ts.map +1 -1
  356. package/lib/importer/pipes/parsers/csv-parser-and-transform.composite-pipe.d.ts +5 -5
  357. package/lib/importer/pipes/parsers/csv-parser-and-transform.composite-pipe.d.ts.map +1 -1
  358. package/lib/importer/pipes/parsers/csv-parser.pipe.d.ts +3 -3
  359. package/lib/importer/pipes/parsers/csv-parser.pipe.d.ts.map +1 -1
  360. package/lib/importer/pipes/parsers/csv-parser.pipe.js +10 -5
  361. package/lib/importer/pipes/parsers/csv-parser.pipe.js.map +1 -1
  362. package/lib/importer/pipes/parsers/data-transformer.pipe.d.ts +3 -3
  363. package/lib/importer/pipes/parsers/data-transformer.pipe.d.ts.map +1 -1
  364. package/lib/importer/pipes/parsers/data-transformer.pipe.js +13 -24
  365. package/lib/importer/pipes/parsers/data-transformer.pipe.js.map +1 -1
  366. package/lib/importer/pipes/parsers/data-validator.pipe.d.ts +2 -2
  367. package/lib/importer/pipes/parsers/data-validator.pipe.d.ts.map +1 -1
  368. package/lib/importer/pipes/parsers/data-validator.pipe.js +26 -37
  369. package/lib/importer/pipes/parsers/data-validator.pipe.js.map +1 -1
  370. package/lib/index.d.ts +3 -6
  371. package/lib/index.d.ts.map +1 -1
  372. package/lib/index.js +9 -10
  373. package/lib/index.js.map +1 -1
  374. package/lib/kubernetes/kubernetes.service.js +70 -109
  375. package/lib/kubernetes/kubernetes.service.js.map +1 -1
  376. package/lib/mail-templates/mail-template.command.js +5 -16
  377. package/lib/mail-templates/mail-template.command.js.map +1 -1
  378. package/lib/mail-templates/mail-template.decorator.d.ts +1 -1
  379. package/lib/mail-templates/mail-template.decorator.d.ts.map +1 -1
  380. package/lib/mail-templates/mail-template.service.d.ts.map +1 -1
  381. package/lib/mail-templates/mail-template.service.js +20 -30
  382. package/lib/mail-templates/mail-template.service.js.map +1 -1
  383. package/lib/mailer/mailer.module.js +1 -13
  384. package/lib/mailer/mailer.module.js.map +1 -1
  385. package/lib/mailer/mailer.service.d.ts.map +1 -1
  386. package/lib/mailer/mailer.service.js +48 -62
  387. package/lib/mailer/mailer.service.js.map +1 -1
  388. package/lib/mailer/send-test-mail.command.js +15 -26
  389. package/lib/mailer/send-test-mail.command.js.map +1 -1
  390. package/lib/mikro-orm/migrations/Migration20220127085859.js +3 -14
  391. package/lib/mikro-orm/migrations/Migration20220127085859.js.map +1 -1
  392. package/lib/mikro-orm/migrations/Migration20220127085946.js +3 -14
  393. package/lib/mikro-orm/migrations/Migration20220127085946.js.map +1 -1
  394. package/lib/mikro-orm/migrations/Migration20220127091538.js +3 -14
  395. package/lib/mikro-orm/migrations/Migration20220127091538.js.map +1 -1
  396. package/lib/mikro-orm/migrations/Migration20220127091751.js +6 -17
  397. package/lib/mikro-orm/migrations/Migration20220127091751.js.map +1 -1
  398. package/lib/mikro-orm/migrations/Migration20220127111301.js +15 -26
  399. package/lib/mikro-orm/migrations/Migration20220127111301.js.map +1 -1
  400. package/lib/mikro-orm/migrations/Migration20220127142112.js +4 -15
  401. package/lib/mikro-orm/migrations/Migration20220127142112.js.map +1 -1
  402. package/lib/mikro-orm/migrations/Migration20220620124134.js +19 -32
  403. package/lib/mikro-orm/migrations/Migration20220620124134.js.map +1 -1
  404. package/lib/mikro-orm/migrations/Migration20220905145606.js +8 -21
  405. package/lib/mikro-orm/migrations/Migration20220905145606.js.map +1 -1
  406. package/lib/mikro-orm/migrations/Migration20230209111818.js +3 -14
  407. package/lib/mikro-orm/migrations/Migration20230209111818.js.map +1 -1
  408. package/lib/mikro-orm/migrations/Migration20230302145445.js +6 -19
  409. package/lib/mikro-orm/migrations/Migration20230302145445.js.map +1 -1
  410. package/lib/mikro-orm/migrations/Migration20230613150332.js +3 -14
  411. package/lib/mikro-orm/migrations/Migration20230613150332.js.map +1 -1
  412. package/lib/mikro-orm/migrations/Migration20230802124224.js +5 -18
  413. package/lib/mikro-orm/migrations/Migration20230802124224.js.map +1 -1
  414. package/lib/mikro-orm/migrations/Migration20230808085034.js +2 -13
  415. package/lib/mikro-orm/migrations/Migration20230808085034.js.map +1 -1
  416. package/lib/mikro-orm/migrations/Migration20230821090303.js +8 -21
  417. package/lib/mikro-orm/migrations/Migration20230821090303.js.map +1 -1
  418. package/lib/mikro-orm/migrations/Migration20231204140305.js +8 -21
  419. package/lib/mikro-orm/migrations/Migration20231204140305.js.map +1 -1
  420. package/lib/mikro-orm/migrations/Migration20231206123505.js +7 -20
  421. package/lib/mikro-orm/migrations/Migration20231206123505.js.map +1 -1
  422. package/lib/mikro-orm/migrations/Migration20231215103630.js +6 -19
  423. package/lib/mikro-orm/migrations/Migration20231215103630.js.map +1 -1
  424. package/lib/mikro-orm/migrations/Migration20231218092313.js +7 -20
  425. package/lib/mikro-orm/migrations/Migration20231218092313.js.map +1 -1
  426. package/lib/mikro-orm/migrations/Migration20231222090009.js +7 -20
  427. package/lib/mikro-orm/migrations/Migration20231222090009.js.map +1 -1
  428. package/lib/mikro-orm/migrations/Migration20240702123233.js +28 -40
  429. package/lib/mikro-orm/migrations/Migration20240702123233.js.map +1 -1
  430. package/lib/mikro-orm/migrations/Migration20240725071750.js +2 -13
  431. package/lib/mikro-orm/migrations/Migration20240725071750.js.map +1 -1
  432. package/lib/mikro-orm/migrations/Migration20240814090503.js +7 -18
  433. package/lib/mikro-orm/migrations/Migration20240814090503.js.map +1 -1
  434. package/lib/mikro-orm/migrations/Migration20240814090541.js +3 -14
  435. package/lib/mikro-orm/migrations/Migration20240814090541.js.map +1 -1
  436. package/lib/mikro-orm/migrations/Migration20240814090653.js +3 -14
  437. package/lib/mikro-orm/migrations/Migration20240814090653.js.map +1 -1
  438. package/lib/mikro-orm/migrations/Migration20250403134629.js +2 -13
  439. package/lib/mikro-orm/migrations/Migration20250403134629.js.map +1 -1
  440. package/lib/mikro-orm/migrations/Migration20250531565156.js +2 -13
  441. package/lib/mikro-orm/migrations/Migration20250531565156.js.map +1 -1
  442. package/lib/mikro-orm/migrations/Migration20250531565157.js +2 -13
  443. package/lib/mikro-orm/migrations/Migration20250531565157.js.map +1 -1
  444. package/lib/mikro-orm/migrations/Migration20250612134629.js +3 -14
  445. package/lib/mikro-orm/migrations/Migration20250612134629.js.map +1 -1
  446. package/lib/mikro-orm/migrations/Migration20250623085054.js +2 -13
  447. package/lib/mikro-orm/migrations/Migration20250623085054.js.map +1 -1
  448. package/lib/mikro-orm/migrations/Migration20250623113026.js +4 -15
  449. package/lib/mikro-orm/migrations/Migration20250623113026.js.map +1 -1
  450. package/lib/mikro-orm/migrations/Migration20251013081751.js +2 -13
  451. package/lib/mikro-orm/migrations/Migration20251013081751.js.map +1 -1
  452. package/lib/mikro-orm/migrations/Migration20251118143418.js +3 -14
  453. package/lib/mikro-orm/migrations/Migration20251118143418.js.map +1 -1
  454. package/lib/mikro-orm/migrations/Migration20251126093305.js +4 -17
  455. package/lib/mikro-orm/migrations/Migration20251126093305.js.map +1 -1
  456. package/lib/mikro-orm/migrations/Migration20260413072931.d.ts +6 -0
  457. package/lib/mikro-orm/migrations/Migration20260413072931.d.ts.map +1 -0
  458. package/lib/mikro-orm/migrations/Migration20260413072931.js +16 -0
  459. package/lib/mikro-orm/migrations/Migration20260413072931.js.map +1 -0
  460. package/lib/mikro-orm/mikro-orm.module.d.ts.map +1 -1
  461. package/lib/mikro-orm/mikro-orm.module.js +18 -19
  462. package/lib/mikro-orm/mikro-orm.module.js.map +1 -1
  463. package/lib/page-tree/attached-document-loader.service.d.ts.map +1 -1
  464. package/lib/page-tree/attached-document-loader.service.js +9 -17
  465. package/lib/page-tree/attached-document-loader.service.js.map +1 -1
  466. package/lib/page-tree/blocks/internal-link-block-transformer.service.js +18 -29
  467. package/lib/page-tree/blocks/internal-link-block-transformer.service.js.map +1 -1
  468. package/lib/page-tree/blocks/internal-link-block-warnings.service.js +14 -25
  469. package/lib/page-tree/blocks/internal-link-block-warnings.service.js.map +1 -1
  470. package/lib/page-tree/blocks/internal-link.block.js +2 -13
  471. package/lib/page-tree/blocks/internal-link.block.js.map +1 -1
  472. package/lib/page-tree/createPageTreeResolver.d.ts +2 -1
  473. package/lib/page-tree/createPageTreeResolver.d.ts.map +1 -1
  474. package/lib/page-tree/createPageTreeResolver.js +195 -247
  475. package/lib/page-tree/createPageTreeResolver.js.map +1 -1
  476. package/lib/page-tree/document-subscriber.js +19 -30
  477. package/lib/page-tree/document-subscriber.js.map +1 -1
  478. package/lib/page-tree/dto/paginated-page-tree-nodes.factory.d.ts +8 -0
  479. package/lib/page-tree/dto/paginated-page-tree-nodes.factory.d.ts.map +1 -0
  480. package/lib/page-tree/dto/paginated-page-tree-nodes.factory.js +23 -0
  481. package/lib/page-tree/dto/paginated-page-tree-nodes.factory.js.map +1 -0
  482. package/lib/page-tree/entities/page-tree-node-base.entity.d.ts +1 -0
  483. package/lib/page-tree/entities/page-tree-node-base.entity.d.ts.map +1 -1
  484. package/lib/page-tree/entities/page-tree-node-base.entity.js +15 -1
  485. package/lib/page-tree/entities/page-tree-node-base.entity.js.map +1 -1
  486. package/lib/page-tree/fullText/createFullTextResolver.d.ts +8 -0
  487. package/lib/page-tree/fullText/createFullTextResolver.d.ts.map +1 -0
  488. package/lib/page-tree/fullText/createFullTextResolver.js +74 -0
  489. package/lib/page-tree/fullText/createFullTextResolver.js.map +1 -0
  490. package/lib/page-tree/fullText/entities/page-tree-node-full-text.object.d.ts +7 -0
  491. package/lib/page-tree/fullText/entities/page-tree-node-full-text.object.d.ts.map +1 -0
  492. package/lib/page-tree/fullText/entities/page-tree-node-full-text.object.js +36 -0
  493. package/lib/page-tree/fullText/entities/page-tree-node-full-text.object.js.map +1 -0
  494. package/lib/page-tree/fullText/page-tree-full-text.service.d.ts +17 -0
  495. package/lib/page-tree/fullText/page-tree-full-text.service.d.ts.map +1 -0
  496. package/lib/page-tree/fullText/page-tree-full-text.service.js +135 -0
  497. package/lib/page-tree/fullText/page-tree-full-text.service.js.map +1 -0
  498. package/lib/page-tree/page-tree-node-document-entity-scope.service.js +7 -19
  499. package/lib/page-tree/page-tree-node-document-entity-scope.service.js.map +1 -1
  500. package/lib/page-tree/page-tree-read-api.d.ts +2 -1
  501. package/lib/page-tree/page-tree-read-api.d.ts.map +1 -1
  502. package/lib/page-tree/page-tree-read-api.js +195 -196
  503. package/lib/page-tree/page-tree-read-api.js.map +1 -1
  504. package/lib/page-tree/page-tree-read-api.service.d.ts +1 -0
  505. package/lib/page-tree/page-tree-read-api.service.d.ts.map +1 -1
  506. package/lib/page-tree/page-tree-read-api.service.js +31 -65
  507. package/lib/page-tree/page-tree-read-api.service.js.map +1 -1
  508. package/lib/page-tree/page-tree.constants.d.ts +1 -0
  509. package/lib/page-tree/page-tree.constants.d.ts.map +1 -1
  510. package/lib/page-tree/page-tree.constants.js +2 -1
  511. package/lib/page-tree/page-tree.constants.js.map +1 -1
  512. package/lib/page-tree/page-tree.module.d.ts +1 -0
  513. package/lib/page-tree/page-tree.module.d.ts.map +1 -1
  514. package/lib/page-tree/page-tree.module.js +23 -13
  515. package/lib/page-tree/page-tree.module.js.map +1 -1
  516. package/lib/page-tree/page-tree.service.d.ts.map +1 -1
  517. package/lib/page-tree/page-tree.service.js +273 -312
  518. package/lib/page-tree/page-tree.service.js.map +1 -1
  519. package/lib/page-tree/site-preview.resolver.js +25 -38
  520. package/lib/page-tree/site-preview.resolver.js.map +1 -1
  521. package/lib/page-tree/types.d.ts +2 -2
  522. package/lib/page-tree/types.d.ts.map +1 -1
  523. package/lib/page-tree/validators/page-exists.validator.js +3 -14
  524. package/lib/page-tree/validators/page-exists.validator.js.map +1 -1
  525. package/lib/redirects/dto/redirect-input.factory.d.ts +2 -2
  526. package/lib/redirects/dto/redirect-input.factory.d.ts.map +1 -1
  527. package/lib/redirects/dto/redirect-input.factory.js +2 -2
  528. package/lib/redirects/dto/redirect-input.factory.js.map +1 -1
  529. package/lib/redirects/dto/redirects.filter.d.ts.map +1 -1
  530. package/lib/redirects/dto/redirects.filter.js +1 -1
  531. package/lib/redirects/dto/redirects.filter.js.map +1 -1
  532. package/lib/redirects/entities/redirect-entity.factory.d.ts +2 -2
  533. package/lib/redirects/entities/redirect-entity.factory.d.ts.map +1 -1
  534. package/lib/redirects/entities/redirect-entity.factory.js +2 -2
  535. package/lib/redirects/entities/redirect-entity.factory.js.map +1 -1
  536. package/lib/redirects/import-redirects.command.js +109 -121
  537. package/lib/redirects/import-redirects.command.js.map +1 -1
  538. package/lib/redirects/redirect-target-url.service.js +17 -28
  539. package/lib/redirects/redirect-target-url.service.js.map +1 -1
  540. package/lib/redirects/redirects.enum.d.ts +1 -1
  541. package/lib/redirects/redirects.enum.d.ts.map +1 -1
  542. package/lib/redirects/redirects.enum.js +7 -7
  543. package/lib/redirects/redirects.enum.js.map +1 -1
  544. package/lib/redirects/redirects.module.js +2 -2
  545. package/lib/redirects/redirects.module.js.map +1 -1
  546. package/lib/redirects/redirects.resolver.js +114 -137
  547. package/lib/redirects/redirects.resolver.js.map +1 -1
  548. package/lib/redirects/redirects.service.d.ts.map +1 -1
  549. package/lib/redirects/redirects.service.js +40 -47
  550. package/lib/redirects/redirects.service.js.map +1 -1
  551. package/lib/redirects/redirects.util.d.ts +2 -2
  552. package/lib/redirects/redirects.util.d.ts.map +1 -1
  553. package/lib/redirects/redirects.util.js +2 -3
  554. package/lib/redirects/redirects.util.js.map +1 -1
  555. package/lib/redirects/validators/isValidRedirectSource.js +8 -19
  556. package/lib/redirects/validators/isValidRedirectSource.js.map +1 -1
  557. package/lib/sentry/sentry.interceptor.js +30 -42
  558. package/lib/sentry/sentry.interceptor.js.map +1 -1
  559. package/lib/sentry/sentry.module.js +15 -36
  560. package/lib/sentry/sentry.module.js.map +1 -1
  561. package/lib/translation/azure-ai-translator.resolver.js +19 -30
  562. package/lib/translation/azure-ai-translator.resolver.js.map +1 -1
  563. package/lib/tsconfig.build.tsbuildinfo +1 -1
  564. package/lib/user-permissions/access-control.service.d.ts.map +1 -1
  565. package/lib/user-permissions/access-control.service.js +6 -3
  566. package/lib/user-permissions/access-control.service.js.map +1 -1
  567. package/lib/user-permissions/auth/user-permissions.guard.d.ts.map +1 -1
  568. package/lib/user-permissions/auth/user-permissions.guard.js +56 -61
  569. package/lib/user-permissions/auth/user-permissions.guard.js.map +1 -1
  570. package/lib/user-permissions/content-scope.service.d.ts.map +1 -1
  571. package/lib/user-permissions/content-scope.service.js +86 -97
  572. package/lib/user-permissions/content-scope.service.js.map +1 -1
  573. package/lib/user-permissions/decorators/affected-entity.decorator.d.ts +1 -1
  574. package/lib/user-permissions/decorators/affected-entity.decorator.d.ts.map +1 -1
  575. package/lib/user-permissions/decorators/affected-scope.decorator.d.ts +1 -1
  576. package/lib/user-permissions/decorators/affected-scope.decorator.d.ts.map +1 -1
  577. package/lib/user-permissions/decorators/required-permission.decorator.d.ts +1 -1
  578. package/lib/user-permissions/decorators/required-permission.decorator.d.ts.map +1 -1
  579. package/lib/user-permissions/decorators/scoped-entity.decorator.d.ts +2 -2
  580. package/lib/user-permissions/decorators/scoped-entity.decorator.d.ts.map +1 -1
  581. package/lib/user-permissions/user-content-scopes.resolver.js +18 -33
  582. package/lib/user-permissions/user-content-scopes.resolver.js.map +1 -1
  583. package/lib/user-permissions/user-permission.resolver.d.ts.map +1 -1
  584. package/lib/user-permissions/user-permission.resolver.js +42 -66
  585. package/lib/user-permissions/user-permission.resolver.js.map +1 -1
  586. package/lib/user-permissions/user-permissions.module.js +6 -27
  587. package/lib/user-permissions/user-permissions.module.js.map +1 -1
  588. package/lib/user-permissions/user-permissions.public.service.js +6 -21
  589. package/lib/user-permissions/user-permissions.public.service.js.map +1 -1
  590. package/lib/user-permissions/user-permissions.service.d.ts.map +1 -1
  591. package/lib/user-permissions/user-permissions.service.js +168 -191
  592. package/lib/user-permissions/user-permissions.service.js.map +1 -1
  593. package/lib/user-permissions/user-permissions.types.d.ts +6 -6
  594. package/lib/user-permissions/user-permissions.types.d.ts.map +1 -1
  595. package/lib/user-permissions/user-permissions.types.js +3 -1
  596. package/lib/user-permissions/user-permissions.types.js.map +1 -1
  597. package/lib/user-permissions/user.resolver.js +71 -95
  598. package/lib/user-permissions/user.resolver.js.map +1 -1
  599. package/lib/warnings/decorators/create-warnings.decorator.d.ts +3 -3
  600. package/lib/warnings/decorators/create-warnings.decorator.d.ts.map +1 -1
  601. package/lib/warnings/dto/warning-data.d.ts +1 -1
  602. package/lib/warnings/dto/warning-data.d.ts.map +1 -1
  603. package/lib/warnings/warning-checker.command.js +123 -156
  604. package/lib/warnings/warning-checker.command.js.map +1 -1
  605. package/lib/warnings/warning-event-subscriber.js +92 -107
  606. package/lib/warnings/warning-event-subscriber.js.map +1 -1
  607. package/lib/warnings/warning.resolver.js +56 -72
  608. package/lib/warnings/warning.resolver.js.map +1 -1
  609. package/lib/warnings/warning.service.js +19 -32
  610. package/lib/warnings/warning.service.js.map +1 -1
  611. 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 sharp_1 = __importDefault(require("sharp"));
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
- if (args.copyOfId)
87
+ }
88
+ if (args.copyOfId) {
114
89
  qb.andWhere({ copyOf: { id: args.copyOfId } });
115
- if (args.filename)
90
+ }
91
+ if (args.filename) {
116
92
  qb.andWhere({ name: args.filename });
117
- if (args.contentHash)
93
+ }
94
+ if (args.contentHash) {
118
95
  qb.andWhere({ contentHash: args.contentHash });
119
- if (args.archived !== undefined)
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(_a, scope_1) {
172
- return __awaiter(this, arguments, void 0, function* ({ folderId, includeArchived, filter, sortColumnName, sortDirection }, scope) {
173
- const isSearching = (filter === null || filter === void 0 ? void 0 : filter.searchText) !== undefined && filter.searchText.length > 0;
174
- return withFilesSelect(this.selectQueryBuilder(), {
175
- archived: !includeArchived ? false : undefined,
176
- folderId: !isSearching ? folderId || null : undefined,
177
- mimetypes: filter === null || filter === void 0 ? void 0 : filter.mimetypes,
178
- query: filter === null || filter === void 0 ? void 0 : filter.searchText,
179
- sortColumnName,
180
- sortDirection,
181
- scope,
182
- }).getResult();
183
- });
184
- }
185
- findAndCount(_a, scope_1) {
186
- return __awaiter(this, arguments, void 0, function* ({ folderId, includeArchived, filter, sortColumnName, sortDirection, offset, limit }, scope) {
187
- const isSearching = (filter === null || filter === void 0 ? void 0 : filter.searchText) !== undefined && filter.searchText.length > 0;
188
- const files = yield withFilesSelect(this.selectQueryBuilder(), {
189
- archived: !includeArchived ? false : undefined,
190
- folderId: !isSearching ? folderId || null : undefined,
191
- mimetypes: filter === null || filter === void 0 ? void 0 : filter.mimetypes,
192
- query: filter === null || filter === void 0 ? void 0 : filter.searchText,
193
- sortColumnName,
194
- sortDirection,
195
- offset,
196
- limit,
197
- scope,
198
- }).getResult();
199
- const totalCount = yield withFilesSelect(this.selectQueryBuilder(), {
200
- archived: !includeArchived ? false : undefined,
201
- folderId: !isSearching ? folderId || null : undefined,
202
- mimetypes: filter === null || filter === void 0 ? void 0 : filter.mimetypes,
203
- query: filter === null || filter === void 0 ? void 0 : filter.searchText,
204
- sortColumnName,
205
- sortDirection,
206
- offset,
207
- limit,
208
- scope,
209
- }).getCount();
210
- return [files, totalCount];
211
- });
212
- }
213
- findAllByHash(contentHash, options) {
214
- return __awaiter(this, void 0, void 0, function* () {
215
- return withFilesSelect(this.selectQueryBuilder(), { contentHash, scope: options === null || options === void 0 ? void 0 : options.scope }).getResult();
216
- });
217
- }
218
- findMultipleByIds(ids) {
219
- return __awaiter(this, void 0, void 0, function* () {
220
- return withFilesSelect(this.selectQueryBuilder(), {})
221
- .where({ id: { $in: ids } })
222
- .getResult();
223
- });
224
- }
225
- findCopiesOfFileInScope(fileId, imageCropArea, scope) {
226
- return __awaiter(this, void 0, void 0, function* () {
227
- return withFilesSelect(this.selectQueryBuilder(), { copyOfId: fileId, imageCropArea, scope }).getResult();
228
- });
229
- }
230
- findOneById(id) {
231
- return __awaiter(this, void 0, void 0, function* () {
232
- return withFilesSelect(this.selectQueryBuilder(), { id }).getSingleResult();
233
- });
234
- }
235
- getDamPath(file) {
236
- return __awaiter(this, void 0, void 0, function* () {
237
- const folderNames = file.folder ? (yield this.foldersService.findAncestorsByParentId(file.folder.id)).map((folder) => folder.name) : [];
238
- return `/${folderNames.join("/")}`;
239
- });
240
- }
241
- findOneByHash(contentHash) {
242
- return __awaiter(this, void 0, void 0, function* () {
243
- return withFilesSelect(this.selectQueryBuilder(), { contentHash }).getSingleResult();
244
- });
245
- }
246
- calculateHashForFile(filePath) {
247
- return __awaiter(this, void 0, void 0, function* () {
248
- return hasha.fromFile(filePath, { algorithm: "md5" });
249
- });
250
- }
251
- findOneByFilenameAndFolder(_a, scope_1) {
252
- return __awaiter(this, arguments, void 0, function* ({ filename, folderId = null, }, scope) {
253
- return withFilesSelect(this.selectQueryBuilder(), { folderId, filename, scope }).getSingleResult();
254
- });
255
- }
256
- findOneByImageId(imageId) {
257
- return __awaiter(this, void 0, void 0, function* () {
258
- return withFilesSelect(this.selectQueryBuilder(), { imageId }).getSingleResult();
259
- });
260
- }
261
- create(_a) {
262
- return __awaiter(this, void 0, void 0, function* () {
263
- var { folderId } = _a, data = __rest(_a, ["folderId"]);
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
- catch (e) {
296
- rimraf.sync(uploadedFile.path);
297
- throw e;
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
- return result;
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
- return __awaiter(this, void 0, void 0, function* () {
304
- const file = yield this.findOneById(id);
305
- if (!file)
306
- throw new entity_not_found_exception_1.CometEntityNotFoundException();
307
- return this.updateByEntity(file, data);
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, _a) {
311
- return __awaiter(this, void 0, void 0, function* () {
312
- var _b;
313
- var { image } = _a, input = __rest(_a, ["image"]);
314
- const folderId = input.folderId !== undefined ? input.folderId : (_b = entity.folder) === null || _b === void 0 ? void 0 : _b.id;
315
- const folder = folderId ? yield this.foldersService.findOneById(folderId) : null;
316
- if (entity.image && (image === null || image === void 0 ? void 0 : image.cropArea)) {
317
- entity.image.cropArea = image.cropArea;
318
- }
319
- if (input.name) {
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
- const file = Object.assign(entity, Object.assign(Object.assign({}, input), { folder: folderId !== undefined ? folder : entity.folder }));
326
- return this.save(file);
284
+ }
285
+ const file = Object.assign(entity, {
286
+ ...input,
287
+ folder: folderId !== undefined ? folder : entity.folder,
327
288
  });
328
- }
329
- moveBatch(files, targetFolder) {
330
- return __awaiter(this, void 0, void 0, function* () {
331
- var _a;
332
- const updatedFiles = [];
333
- for (const file of files) {
334
- // Convert to JS object because deep-comparing classes and objects doesn't work
335
- if ((targetFolder === null || targetFolder === void 0 ? void 0 : targetFolder.scope) !== undefined && !this.contentScopeService.scopesAreEqual(file.scope, targetFolder.scope)) {
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
- return updatedFiles;
341
- });
298
+ updatedFiles.push(await this.updateByEntity(file, { folderId: targetFolder?.id ?? null }));
299
+ }
300
+ return updatedFiles;
342
301
  }
343
- delete(id) {
344
- return __awaiter(this, void 0, void 0, function* () {
345
- const file = yield this.findOneById(id);
346
- if (!file)
347
- throw new entity_not_found_exception_1.CometEntityNotFoundException();
348
- const result = yield this.filesRepository.nativeDelete(id);
349
- const deleted = result === 1;
350
- if (deleted &&
351
- (yield withFilesSelect(this.filesRepository.createQueryBuilder("file"), { contentHash: file.contentHash }).getResult()).length === 0) {
352
- yield this.blobStorageBackendService.removeFile(this.config.filesDirectory, (0, create_hashed_path_util_1.createHashedPath)(file.contentHash));
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
- return deleted;
355
- });
356
- }
357
- save(entity) {
358
- return __awaiter(this, void 0, void 0, function* () {
359
- yield this.entityManager.persistAndFlush(entity);
360
- return entity;
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
- upload(file, _a) {
364
- return __awaiter(this, void 0, void 0, function* () {
365
- var { folderId, scope } = _a, assignData = __rest(_a, ["folderId", "scope"]);
366
- let result = undefined;
367
- try {
368
- const { exifData, contentHash, image } = yield this.getFileMetadataForUpload(file);
369
- yield this.blobStorageBackendService.upload(file, contentHash, this.config.filesDirectory);
370
- const name = yield this.findNextAvailableFilename({ filePath: file.originalname, folderId, scope });
371
- result = yield this.create(Object.assign({ name, folderId: folderId, size: file.size, mimetype: file.mimetype, image: image !== undefined
372
- ? {
373
- width: image.width,
374
- height: image.height,
375
- exif: exifData,
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
- if (result.rows.length === 0) {
425
- throw new Error("File ID does not exist.");
426
- }
427
- // make the positions start with 0
428
- return Number(result.rows[0].row_number) - 1;
429
- });
430
- }
431
- createCopyOfFile(file_1, _a) {
432
- return __awaiter(this, arguments, void 0, function* (file, { inboxFolder }) {
433
- let fileImageInput;
434
- if (file.image) {
435
- const _b = file.image, { id: ignoreId, file: ignoreFile } = _b, imageProps = __rest(_b, ["id", "file"]);
436
- fileImageInput = Object.assign({}, postgresql_1.Utils.copy(imageProps));
437
- }
438
- const { id: ignoreId, createdAt: ignoreCreatedAt, updatedAt: ignoreUpdatedAt, folder: ignoreFolder, image: ignoreImage, scope: ignoreScope, copies: ignoreCopies, alternativesForThisFile: ignoreAlternativesForThisFile, thisFileIsAlternativeFor: ignoreThisFileIsAlternativeFor } = file, fileProps = __rest(file, ["id", "createdAt", "updatedAt", "folder", "image", "scope", "copies", "alternativesForThisFile", "thisFileIsAlternativeFor"]);
439
- const fileInput = Object.assign(Object.assign({}, postgresql_1.Utils.copy(fileProps)), { image: fileImageInput, folderId: inboxFolder.id, copyOf: file, scope: inboxFolder.scope });
440
- const copiedFile = yield this.create(fileInput);
441
- // handled DAM alternatives
442
- const copiedAlternatives = [];
443
- if ((yield file.alternativesForThisFile.loadItems()).length > 0) {
444
- for (const alternative of file.alternativesForThisFile) {
445
- const alternativeFile = yield alternative.alternative.load();
446
- if (alternativeFile === null) {
447
- continue;
448
- }
449
- const copiedAlternativeFile = yield this.createCopyOfFile(alternativeFile, { inboxFolder });
450
- const { id: ignoreId, for: ignoreFor, alternative: ignoreAlternative } = alternative, alternativeProps = __rest(alternative, ["id", "for", "alternative"]);
451
- const copiedDamMediaAlternative = this.damMediaAlternativesRepository.create(Object.assign(Object.assign({}, alternativeProps), { for: copiedFile, alternative: copiedAlternativeFile }));
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
- copiedFile.alternativesForThisFile.set(copiedAlternatives);
456
- return copiedFile;
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
- calculateDominantColor(contentHash) {
491
- return __awaiter(this, void 0, void 0, function* () {
492
- const path = this.imgproxyService
493
- .builder()
494
- .resize(imgproxy_enum_1.ResizingType.AUTO, 1)
495
- .format(imgproxy_enum_1.Extension.JPG)
496
- .generateUrl(`${this.blobStorageBackendService.getBackendFilePathPrefix()}${this.config.filesDirectory}/${(0, create_hashed_path_util_1.createHashedPath)(contentHash)}`);
497
- const imgUrl = this.imgproxyService.getSignedUrl(path);
498
- try {
499
- const imageResponse = yield fetch(imgUrl);
500
- const arrayBuffer = yield imageResponse.arrayBuffer();
501
- const imageBuffer = Buffer.from(arrayBuffer);
502
- const data = yield (0, sharp_1.default)(imageBuffer).removeAlpha().raw().toBuffer();
503
- // since we scale the image to 1px with imgproxy, data only contains the colors for this one pixel
504
- const [r, g, b] = data;
505
- return (0, images_util_1.rgbToHex)(r, g, b);
506
- }
507
- catch (e) {
508
- // When imageproxy is not available it is ok.
509
- console.error(e);
510
- return undefined;
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
- createFileUrl(file_1, _a) {
515
- return __awaiter(this, arguments, void 0, function* (file, { previewDamUrls = false }) {
516
- const filename = (0, path_1.parse)(file.name).name;
517
- const baseUrl = [`/${this.config.basePath}/files`];
518
- if (previewDamUrls) {
519
- baseUrl.push("preview");
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
- const hash = this.createHash({
523
- fileId: file.id,
524
- filename,
525
- });
526
- baseUrl.push(hash);
494
+ else if (type === "PLTE") {
495
+ palette = data;
527
496
  }
528
- return [...baseUrl, file.contentHash, file.id, filename].join("/");
529
- });
530
- }
531
- getFileAsBase64String(file) {
532
- return __awaiter(this, void 0, void 0, function* () {
533
- var _a, e_1, _b, _c;
534
- const fileStream = yield this.blobStorageBackendService.getFile(this.config.filesDirectory, (0, create_hashed_path_util_1.createHashedPath)(file.contentHash));
535
- const chunks = [];
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
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
545
- finally {
546
- try {
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
- finally { if (e_1) throw e_1.error; }
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
- const base64String = Buffer.concat(chunks).toString("base64");
552
- return `data:${file.mimetype};base64,${base64String}`;
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
- createFileDownloadUrl(file_1, _a) {
556
- return __awaiter(this, arguments, void 0, function* (file, { previewDamUrls = false }) {
557
- const filename = (0, path_1.parse)(file.name).name;
558
- const baseUrl = [`/dam/files/download`];
559
- if (previewDamUrls) {
560
- baseUrl.push("preview");
561
- }
562
- else {
563
- const hash = this.createHash({
564
- fileId: file.id,
565
- filename,
566
- });
567
- baseUrl.push(hash);
568
- }
569
- return [...baseUrl, file.contentHash, file.id, filename].join("/");
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
- return __awaiter(this, void 0, void 0, function* () {
578
- const contentHash = yield this.calculateHashForFile(file.path);
579
- let image;
580
- try {
581
- image = yield (0, probe_image_size_1.default)((0, fs_1.createReadStream)(file.path));
582
- if (image.type == "svg")
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
- catch (_a) {
589
- // empty
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
- if (image !== undefined &&
592
- image.width &&
593
- image.height &&
594
- Math.round(((image.width * image.height) / 1000000) * 10) / 10 >= this.config.maxSrcResolution) {
595
- throw new image_resolution_exception_1.CometImageResolutionException(`Maximal image resolution exceeded`);
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
- let exifData;
598
- if (exifrSupportedMimetypes.includes(file.mimetype)) {
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
- return { exifData, contentHash, image };
607
- });
598
+ }
599
+ return { exifData, contentHash, image };
608
600
  }
609
601
  };
610
602
  exports.FilesService = FilesService;