@webiny/api-file-manager 0.0.0-unstable.b14eaecf38 → 0.0.0-unstable.b6d7105cee

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 (627) hide show
  1. package/README.md +7 -13
  2. package/constants.d.ts +1 -0
  3. package/constants.js +4 -0
  4. package/constants.js.map +1 -0
  5. package/delivery/AssetDelivery/Asset.d.ts +29 -0
  6. package/delivery/AssetDelivery/Asset.js +56 -0
  7. package/delivery/AssetDelivery/Asset.js.map +1 -0
  8. package/delivery/AssetDelivery/AssetRequest.d.ts +26 -0
  9. package/delivery/AssetDelivery/AssetRequest.js +26 -0
  10. package/delivery/AssetDelivery/AssetRequest.js.map +1 -0
  11. package/delivery/AssetDelivery/abstractions/AssetReply.d.ts +26 -0
  12. package/delivery/AssetDelivery/abstractions/AssetReply.js +37 -0
  13. package/delivery/AssetDelivery/abstractions/AssetReply.js.map +1 -0
  14. package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.d.ts +2 -0
  15. package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.js +7 -0
  16. package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.js.map +1 -0
  17. package/delivery/index.d.ts +7 -0
  18. package/delivery/index.js +4 -0
  19. package/delivery/setupAssetDelivery.d.ts +1 -0
  20. package/delivery/setupAssetDelivery.js +72 -0
  21. package/delivery/setupAssetDelivery.js.map +1 -0
  22. package/domain/file/abstractions.d.ts +9 -0
  23. package/domain/file/abstractions.js +5 -0
  24. package/domain/file/abstractions.js.map +1 -0
  25. package/domain/file/errors.d.ts +59 -0
  26. package/domain/file/errors.js +80 -0
  27. package/domain/file/errors.js.map +1 -0
  28. package/domain/file/file.model.d.ts +12 -0
  29. package/domain/file/file.model.js +69 -0
  30. package/domain/file/file.model.js.map +1 -0
  31. package/domain/file/types.d.ts +53 -0
  32. package/domain/identity/Identity.d.ts +9 -0
  33. package/domain/identity/Identity.js +12 -0
  34. package/domain/identity/Identity.js.map +1 -0
  35. package/domain/permissionsSchema.d.ts +16 -0
  36. package/domain/permissionsSchema.js +30 -0
  37. package/domain/permissionsSchema.js.map +1 -0
  38. package/domain/settings/constants.d.ts +1 -0
  39. package/domain/settings/constants.js +4 -0
  40. package/domain/settings/constants.js.map +1 -0
  41. package/domain/settings/errors.d.ts +18 -0
  42. package/domain/settings/errors.js +28 -0
  43. package/domain/settings/errors.js.map +1 -0
  44. package/domain/settings/types.d.ts +10 -0
  45. package/domain/settings/types.js +0 -0
  46. package/domain/settings/validation.d.ts +6 -0
  47. package/domain/settings/validation.js +27 -0
  48. package/domain/settings/validation.js.map +1 -0
  49. package/exports/api/file-manager/assetDelivery.d.ts +18 -0
  50. package/exports/api/file-manager/assetDelivery.js +15 -0
  51. package/exports/api/file-manager/file.d.ts +13 -0
  52. package/exports/api/file-manager/file.js +13 -0
  53. package/exports/api/file-manager/permissions.d.ts +1 -0
  54. package/exports/api/file-manager/permissions.js +1 -0
  55. package/exports/api/file-manager/settings.d.ts +3 -0
  56. package/exports/api/file-manager/settings.js +3 -0
  57. package/features/FileManagerFeature.d.ts +4 -0
  58. package/features/FileManagerFeature.js +43 -0
  59. package/features/FileManagerFeature.js.map +1 -0
  60. package/features/assetDelivery/Asset/Asset.d.ts +8 -0
  61. package/features/assetDelivery/Asset/Asset.js +14 -0
  62. package/features/assetDelivery/Asset/Asset.js.map +1 -0
  63. package/features/assetDelivery/Asset/abstractions.d.ts +10 -0
  64. package/features/assetDelivery/Asset/abstractions.js +5 -0
  65. package/features/assetDelivery/Asset/abstractions.js.map +1 -0
  66. package/features/assetDelivery/Asset/index.d.ts +1 -0
  67. package/features/assetDelivery/Asset/index.js +1 -0
  68. package/features/assetDelivery/AssetRequest/AssetRequest.d.ts +8 -0
  69. package/features/assetDelivery/AssetRequest/AssetRequest.js +14 -0
  70. package/features/assetDelivery/AssetRequest/AssetRequest.js.map +1 -0
  71. package/features/assetDelivery/AssetRequest/abstractions.d.ts +11 -0
  72. package/features/assetDelivery/AssetRequest/abstractions.js +5 -0
  73. package/features/assetDelivery/AssetRequest/abstractions.js.map +1 -0
  74. package/features/assetDelivery/AssetRequest/index.d.ts +1 -0
  75. package/features/assetDelivery/AssetRequest/index.js +1 -0
  76. package/features/assetDelivery/FilesAssetRequestResolver.d.ts +11 -0
  77. package/features/assetDelivery/FilesAssetRequestResolver.js +33 -0
  78. package/features/assetDelivery/FilesAssetRequestResolver.js.map +1 -0
  79. package/features/assetDelivery/NullAssetOutputStrategy.d.ts +8 -0
  80. package/features/assetDelivery/NullAssetOutputStrategy.js +14 -0
  81. package/features/assetDelivery/NullAssetOutputStrategy.js.map +1 -0
  82. package/features/assetDelivery/NullAssetReply.d.ts +5 -0
  83. package/features/assetDelivery/NullAssetReply.js +17 -0
  84. package/features/assetDelivery/NullAssetReply.js.map +1 -0
  85. package/features/assetDelivery/NullAssetResolver.d.ts +8 -0
  86. package/features/assetDelivery/NullAssetResolver.js +13 -0
  87. package/features/assetDelivery/NullAssetResolver.js.map +1 -0
  88. package/features/assetDelivery/ObjectKey/ObjectKey.d.ts +8 -0
  89. package/features/assetDelivery/ObjectKey/ObjectKey.js +28 -0
  90. package/features/assetDelivery/ObjectKey/ObjectKey.js.map +1 -0
  91. package/features/assetDelivery/ObjectKey/abstractions.d.ts +12 -0
  92. package/features/assetDelivery/ObjectKey/abstractions.js +5 -0
  93. package/features/assetDelivery/ObjectKey/abstractions.js.map +1 -0
  94. package/features/assetDelivery/ObjectKey/index.d.ts +1 -0
  95. package/features/assetDelivery/ObjectKey/index.js +1 -0
  96. package/features/assetDelivery/StreamAssetReply/StreamAssetReply.d.ts +8 -0
  97. package/features/assetDelivery/StreamAssetReply/StreamAssetReply.js +22 -0
  98. package/features/assetDelivery/StreamAssetReply/StreamAssetReply.js.map +1 -0
  99. package/features/assetDelivery/StreamAssetReply/abstractions.d.ts +11 -0
  100. package/features/assetDelivery/StreamAssetReply/abstractions.js +5 -0
  101. package/features/assetDelivery/StreamAssetReply/abstractions.js.map +1 -0
  102. package/features/assetDelivery/StreamAssetReply/index.d.ts +1 -0
  103. package/features/assetDelivery/StreamAssetReply/index.js +1 -0
  104. package/features/assetDelivery/abstractions/AssetAuthorizer.d.ts +9 -0
  105. package/features/assetDelivery/abstractions/AssetAuthorizer.js +5 -0
  106. package/features/assetDelivery/abstractions/AssetAuthorizer.js.map +1 -0
  107. package/features/assetDelivery/abstractions/AssetContentsReader.d.ts +9 -0
  108. package/features/assetDelivery/abstractions/AssetContentsReader.js +5 -0
  109. package/features/assetDelivery/abstractions/AssetContentsReader.js.map +1 -0
  110. package/features/assetDelivery/abstractions/AssetOutputStrategy.d.ts +11 -0
  111. package/features/assetDelivery/abstractions/AssetOutputStrategy.js +5 -0
  112. package/features/assetDelivery/abstractions/AssetOutputStrategy.js.map +1 -0
  113. package/features/assetDelivery/abstractions/AssetProcessor.d.ts +11 -0
  114. package/features/assetDelivery/abstractions/AssetProcessor.js +5 -0
  115. package/features/assetDelivery/abstractions/AssetProcessor.js.map +1 -0
  116. package/features/assetDelivery/abstractions/AssetRequestResolver.d.ts +11 -0
  117. package/features/assetDelivery/abstractions/AssetRequestResolver.js +5 -0
  118. package/features/assetDelivery/abstractions/AssetRequestResolver.js.map +1 -0
  119. package/features/assetDelivery/abstractions/AssetResolver.d.ts +11 -0
  120. package/features/assetDelivery/abstractions/AssetResolver.js +5 -0
  121. package/features/assetDelivery/abstractions/AssetResolver.js.map +1 -0
  122. package/features/assetDelivery/abstractions/AssetTransformationStrategy.d.ts +11 -0
  123. package/features/assetDelivery/abstractions/AssetTransformationStrategy.js +5 -0
  124. package/features/assetDelivery/abstractions/AssetTransformationStrategy.js.map +1 -0
  125. package/features/assetDelivery/abstractions/AssetType.d.ts +17 -0
  126. package/features/assetDelivery/abstractions/AssetType.js +5 -0
  127. package/features/assetDelivery/abstractions/AssetType.js.map +1 -0
  128. package/features/assetDelivery/assetTypes/image/AssetKeyGenerator.d.ts +12 -0
  129. package/features/assetDelivery/assetTypes/image/AssetKeyGenerator.js +30 -0
  130. package/features/assetDelivery/assetTypes/image/AssetKeyGenerator.js.map +1 -0
  131. package/features/assetDelivery/assetTypes/image/ImageAssetType.d.ts +9 -0
  132. package/features/assetDelivery/assetTypes/image/ImageAssetType.js +18 -0
  133. package/features/assetDelivery/assetTypes/image/ImageAssetType.js.map +1 -0
  134. package/features/assetDelivery/assetTypes/image/ImageAssetTypeHandler.d.ts +5 -0
  135. package/features/assetDelivery/assetTypes/image/ImageAssetTypeHandler.js +5 -0
  136. package/features/assetDelivery/assetTypes/image/ImageAssetTypeHandler.js.map +1 -0
  137. package/features/assetDelivery/assetTypes/image/WidthCollection.d.ts +8 -0
  138. package/features/assetDelivery/assetTypes/image/WidthCollection.js +22 -0
  139. package/features/assetDelivery/assetTypes/image/WidthCollection.js.map +1 -0
  140. package/features/assetDelivery/assetTypes/image/imageFormat.d.ts +26 -0
  141. package/features/assetDelivery/assetTypes/image/imageFormat.js +51 -0
  142. package/features/assetDelivery/assetTypes/image/imageFormat.js.map +1 -0
  143. package/features/assetDelivery/assetTypes/image/imageTypes.d.ts +39 -0
  144. package/features/assetDelivery/assetTypes/image/imageTypes.js +0 -0
  145. package/features/assetDelivery/assetTypes/image/index.d.ts +5 -0
  146. package/features/assetDelivery/assetTypes/image/index.js +4 -0
  147. package/features/assetDelivery/assetTypes/image/normalizeImageOptions.d.ts +6 -0
  148. package/features/assetDelivery/assetTypes/image/normalizeImageOptions.js +56 -0
  149. package/features/assetDelivery/assetTypes/image/normalizeImageOptions.js.map +1 -0
  150. package/features/assetDelivery/assetTypes/image/transformImage.d.ts +59 -0
  151. package/features/assetDelivery/assetTypes/image/transformImage.js +146 -0
  152. package/features/assetDelivery/assetTypes/image/transformImage.js.map +1 -0
  153. package/features/assetDelivery/assetTypes/image/utils.d.ts +26 -0
  154. package/features/assetDelivery/assetTypes/image/utils.js +47 -0
  155. package/features/assetDelivery/assetTypes/image/utils.js.map +1 -0
  156. package/features/assetDelivery/feature.d.ts +4 -0
  157. package/features/assetDelivery/feature.js +38 -0
  158. package/features/assetDelivery/feature.js.map +1 -0
  159. package/features/assetDelivery/privateFiles/NotAuthorizedAssetReply.d.ts +4 -0
  160. package/features/assetDelivery/privateFiles/NotAuthorizedAssetReply.js +20 -0
  161. package/features/assetDelivery/privateFiles/NotAuthorizedAssetReply.js.map +1 -0
  162. package/features/assetDelivery/privateFiles/NotAuthorizedOutputStrategy.d.ts +5 -0
  163. package/features/assetDelivery/privateFiles/NotAuthorizedOutputStrategy.js +9 -0
  164. package/features/assetDelivery/privateFiles/NotAuthorizedOutputStrategy.js.map +1 -0
  165. package/features/assetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.d.ts +11 -0
  166. package/features/assetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js +26 -0
  167. package/features/assetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js.map +1 -0
  168. package/features/assetDelivery/privateFiles/PrivateCache.d.ts +8 -0
  169. package/features/assetDelivery/privateFiles/PrivateCache.js +22 -0
  170. package/features/assetDelivery/privateFiles/PrivateCache.js.map +1 -0
  171. package/features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.d.ts +12 -0
  172. package/features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.js +34 -0
  173. package/features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.js.map +1 -0
  174. package/features/assetDelivery/privateFiles/PrivateFilesAssetProcessor.d.ts +19 -0
  175. package/features/assetDelivery/privateFiles/PrivateFilesAssetProcessor.js +66 -0
  176. package/features/assetDelivery/privateFiles/PrivateFilesAssetProcessor.js.map +1 -0
  177. package/features/assetDelivery/privateFiles/PublicCache.d.ts +8 -0
  178. package/features/assetDelivery/privateFiles/PublicCache.js +22 -0
  179. package/features/assetDelivery/privateFiles/PublicCache.js.map +1 -0
  180. package/features/assetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.d.ts +10 -0
  181. package/features/assetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js +24 -0
  182. package/features/assetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js.map +1 -0
  183. package/features/assetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.d.ts +10 -0
  184. package/features/assetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js +24 -0
  185. package/features/assetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js.map +1 -0
  186. package/features/assetDelivery/transformation/CallableContentsReader.d.ts +11 -0
  187. package/features/assetDelivery/transformation/CallableContentsReader.js +14 -0
  188. package/features/assetDelivery/transformation/CallableContentsReader.js.map +1 -0
  189. package/features/assetDelivery/transformation/TransformationAssetProcessor.d.ts +7 -0
  190. package/features/assetDelivery/transformation/TransformationAssetProcessor.js +25 -0
  191. package/features/assetDelivery/transformation/TransformationAssetProcessor.js.map +1 -0
  192. package/features/assetDelivery/transformation/index.d.ts +5 -0
  193. package/features/assetDelivery/transformation/index.js +4 -0
  194. package/features/extractMetadata/ExtractMetadataHandler.d.ts +11 -0
  195. package/features/extractMetadata/ExtractMetadataHandler.js +25 -0
  196. package/features/extractMetadata/ExtractMetadataHandler.js.map +1 -0
  197. package/features/extractMetadata/ExtractMetadataInput.d.ts +3 -0
  198. package/features/extractMetadata/ExtractMetadataInput.js +0 -0
  199. package/features/file/CreateFile/CreateFileRepository.d.ts +15 -0
  200. package/features/file/CreateFile/CreateFileRepository.js +32 -0
  201. package/features/file/CreateFile/CreateFileRepository.js.map +1 -0
  202. package/features/file/CreateFile/CreateFileUseCase.d.ts +21 -0
  203. package/features/file/CreateFile/CreateFileUseCase.js +83 -0
  204. package/features/file/CreateFile/CreateFileUseCase.js.map +1 -0
  205. package/features/file/CreateFile/abstractions.d.ts +60 -0
  206. package/features/file/CreateFile/abstractions.js +6 -0
  207. package/features/file/CreateFile/abstractions.js.map +1 -0
  208. package/features/file/CreateFile/events.d.ts +31 -0
  209. package/features/file/CreateFile/events.js +23 -0
  210. package/features/file/CreateFile/events.js.map +1 -0
  211. package/features/file/CreateFile/feature.d.ts +4 -0
  212. package/features/file/CreateFile/feature.js +13 -0
  213. package/features/file/CreateFile/feature.js.map +1 -0
  214. package/features/file/CreateFile/index.d.ts +2 -0
  215. package/features/file/CreateFile/index.js +2 -0
  216. package/features/file/CreateFilesInBatch/CreateFilesInBatchRepository.d.ts +13 -0
  217. package/features/file/CreateFilesInBatch/CreateFilesInBatchRepository.js +22 -0
  218. package/features/file/CreateFilesInBatch/CreateFilesInBatchRepository.js.map +1 -0
  219. package/features/file/CreateFilesInBatch/CreateFilesInBatchUseCase.d.ts +19 -0
  220. package/features/file/CreateFilesInBatch/CreateFilesInBatchUseCase.js +73 -0
  221. package/features/file/CreateFilesInBatch/CreateFilesInBatchUseCase.js.map +1 -0
  222. package/features/file/CreateFilesInBatch/abstractions.d.ts +42 -0
  223. package/features/file/CreateFilesInBatch/abstractions.js +6 -0
  224. package/features/file/CreateFilesInBatch/abstractions.js.map +1 -0
  225. package/features/file/CreateFilesInBatch/events.d.ts +31 -0
  226. package/features/file/CreateFilesInBatch/events.js +23 -0
  227. package/features/file/CreateFilesInBatch/events.js.map +1 -0
  228. package/features/file/CreateFilesInBatch/feature.d.ts +4 -0
  229. package/features/file/CreateFilesInBatch/feature.js +13 -0
  230. package/features/file/CreateFilesInBatch/feature.js.map +1 -0
  231. package/features/file/CreateFilesInBatch/index.d.ts +1 -0
  232. package/features/file/CreateFilesInBatch/index.js +1 -0
  233. package/features/file/DeleteFile/DeleteFileRepository.d.ts +15 -0
  234. package/features/file/DeleteFile/DeleteFileRepository.js +31 -0
  235. package/features/file/DeleteFile/DeleteFileRepository.js.map +1 -0
  236. package/features/file/DeleteFile/DeleteFileUseCase.d.ts +17 -0
  237. package/features/file/DeleteFile/DeleteFileUseCase.js +43 -0
  238. package/features/file/DeleteFile/DeleteFileUseCase.js.map +1 -0
  239. package/features/file/DeleteFile/abstractions.d.ts +39 -0
  240. package/features/file/DeleteFile/abstractions.js +6 -0
  241. package/features/file/DeleteFile/abstractions.js.map +1 -0
  242. package/features/file/DeleteFile/events.d.ts +29 -0
  243. package/features/file/DeleteFile/events.js +23 -0
  244. package/features/file/DeleteFile/events.js.map +1 -0
  245. package/features/file/DeleteFile/feature.d.ts +4 -0
  246. package/features/file/DeleteFile/feature.js +13 -0
  247. package/features/file/DeleteFile/feature.js.map +1 -0
  248. package/features/file/DeleteFile/index.d.ts +2 -0
  249. package/features/file/DeleteFile/index.js +2 -0
  250. package/features/file/FileUrlGenerator/FileUrlGenerator.d.ts +15 -0
  251. package/features/file/FileUrlGenerator/FileUrlGenerator.js +33 -0
  252. package/features/file/FileUrlGenerator/FileUrlGenerator.js.map +1 -0
  253. package/features/file/FileUrlGenerator/abstractions.d.ts +8 -0
  254. package/features/file/FileUrlGenerator/abstractions.js +5 -0
  255. package/features/file/FileUrlGenerator/abstractions.js.map +1 -0
  256. package/features/file/FileUrlGenerator/feature.d.ts +4 -0
  257. package/features/file/FileUrlGenerator/feature.js +11 -0
  258. package/features/file/FileUrlGenerator/feature.js.map +1 -0
  259. package/features/file/FileUrlGenerator/index.d.ts +1 -0
  260. package/features/file/FileUrlGenerator/index.js +1 -0
  261. package/features/file/GetFile/GetFileRepository.d.ts +15 -0
  262. package/features/file/GetFile/GetFileRepository.js +33 -0
  263. package/features/file/GetFile/GetFileRepository.js.map +1 -0
  264. package/features/file/GetFile/GetFileUseCase.d.ts +14 -0
  265. package/features/file/GetFile/GetFileUseCase.js +29 -0
  266. package/features/file/GetFile/GetFileUseCase.js.map +1 -0
  267. package/features/file/GetFile/abstractions.d.ts +40 -0
  268. package/features/file/GetFile/abstractions.js +6 -0
  269. package/features/file/GetFile/abstractions.js.map +1 -0
  270. package/features/file/GetFile/feature.d.ts +4 -0
  271. package/features/file/GetFile/feature.js +13 -0
  272. package/features/file/GetFile/feature.js.map +1 -0
  273. package/features/file/GetFile/index.d.ts +1 -0
  274. package/features/file/GetFile/index.js +1 -0
  275. package/features/file/GetFileByUrl/GetFileByUrlUseCase.d.ts +15 -0
  276. package/features/file/GetFileByUrl/GetFileByUrlUseCase.js +37 -0
  277. package/features/file/GetFileByUrl/GetFileByUrlUseCase.js.map +1 -0
  278. package/features/file/GetFileByUrl/abstractions.d.ts +18 -0
  279. package/features/file/GetFileByUrl/abstractions.js +5 -0
  280. package/features/file/GetFileByUrl/abstractions.js.map +1 -0
  281. package/features/file/GetFileByUrl/feature.d.ts +4 -0
  282. package/features/file/GetFileByUrl/feature.js +11 -0
  283. package/features/file/GetFileByUrl/feature.js.map +1 -0
  284. package/features/file/GetFileByUrl/index.d.ts +1 -0
  285. package/features/file/GetFileByUrl/index.js +1 -0
  286. package/features/file/GetFileContentsById/abstractions.d.ts +20 -0
  287. package/features/file/GetFileContentsById/abstractions.js +5 -0
  288. package/features/file/GetFileContentsById/abstractions.js.map +1 -0
  289. package/features/file/GetFileContentsById/index.d.ts +1 -0
  290. package/features/file/GetFileContentsById/index.js +1 -0
  291. package/features/file/GetFileContentsByKey/abstractions.d.ts +17 -0
  292. package/features/file/GetFileContentsByKey/abstractions.js +5 -0
  293. package/features/file/GetFileContentsByKey/abstractions.js.map +1 -0
  294. package/features/file/GetFileContentsByKey/index.d.ts +1 -0
  295. package/features/file/GetFileContentsByKey/index.js +1 -0
  296. package/features/file/ListFiles/ListFilesRepository.d.ts +18 -0
  297. package/features/file/ListFiles/ListFilesRepository.js +53 -0
  298. package/features/file/ListFiles/ListFilesRepository.js.map +1 -0
  299. package/features/file/ListFiles/ListFilesUseCase.d.ts +15 -0
  300. package/features/file/ListFiles/ListFilesUseCase.js +44 -0
  301. package/features/file/ListFiles/ListFilesUseCase.js.map +1 -0
  302. package/features/file/ListFiles/abstractions.d.ts +49 -0
  303. package/features/file/ListFiles/abstractions.js +6 -0
  304. package/features/file/ListFiles/abstractions.js.map +1 -0
  305. package/features/file/ListFiles/feature.d.ts +4 -0
  306. package/features/file/ListFiles/feature.js +13 -0
  307. package/features/file/ListFiles/feature.js.map +1 -0
  308. package/features/file/ListFiles/index.d.ts +1 -0
  309. package/features/file/ListFiles/index.js +1 -0
  310. package/features/file/ListImagesByTagTool/ListImagesByTagTool.d.ts +27 -0
  311. package/features/file/ListImagesByTagTool/ListImagesByTagTool.js +42 -0
  312. package/features/file/ListImagesByTagTool/ListImagesByTagTool.js.map +1 -0
  313. package/features/file/ListImagesByTagTool/feature.d.ts +4 -0
  314. package/features/file/ListImagesByTagTool/feature.js +11 -0
  315. package/features/file/ListImagesByTagTool/feature.js.map +1 -0
  316. package/features/file/ListTags/ListTagsRepository.d.ts +16 -0
  317. package/features/file/ListTags/ListTagsRepository.js +42 -0
  318. package/features/file/ListTags/ListTagsRepository.js.map +1 -0
  319. package/features/file/ListTags/ListTagsUseCase.d.ts +13 -0
  320. package/features/file/ListTags/ListTagsUseCase.js +31 -0
  321. package/features/file/ListTags/ListTagsUseCase.js.map +1 -0
  322. package/features/file/ListTags/abstractions.d.ts +45 -0
  323. package/features/file/ListTags/abstractions.js +6 -0
  324. package/features/file/ListTags/abstractions.js.map +1 -0
  325. package/features/file/ListTags/feature.d.ts +4 -0
  326. package/features/file/ListTags/feature.js +13 -0
  327. package/features/file/ListTags/feature.js.map +1 -0
  328. package/features/file/ListTags/index.d.ts +1 -0
  329. package/features/file/ListTags/index.js +1 -0
  330. package/features/file/UpdateFile/UpdateFileRepository.d.ts +15 -0
  331. package/features/file/UpdateFile/UpdateFileRepository.js +37 -0
  332. package/features/file/UpdateFile/UpdateFileRepository.js.map +1 -0
  333. package/features/file/UpdateFile/UpdateFileUseCase.d.ts +20 -0
  334. package/features/file/UpdateFile/UpdateFileUseCase.js +71 -0
  335. package/features/file/UpdateFile/UpdateFileUseCase.js.map +1 -0
  336. package/features/file/UpdateFile/abstractions.d.ts +56 -0
  337. package/features/file/UpdateFile/abstractions.js +6 -0
  338. package/features/file/UpdateFile/abstractions.js.map +1 -0
  339. package/features/file/UpdateFile/events.d.ts +34 -0
  340. package/features/file/UpdateFile/events.js +23 -0
  341. package/features/file/UpdateFile/events.js.map +1 -0
  342. package/features/file/UpdateFile/feature.d.ts +4 -0
  343. package/features/file/UpdateFile/feature.js +13 -0
  344. package/features/file/UpdateFile/feature.js.map +1 -0
  345. package/features/file/UpdateFile/index.d.ts +2 -0
  346. package/features/file/UpdateFile/index.js +2 -0
  347. package/features/file/shared/EntryToFileMapper.d.ts +5 -0
  348. package/features/file/shared/EntryToFileMapper.js +28 -0
  349. package/features/file/shared/EntryToFileMapper.js.map +1 -0
  350. package/features/file/shared/FileInputToEntryInputMapper.d.ts +5 -0
  351. package/features/file/shared/FileInputToEntryInputMapper.js +32 -0
  352. package/features/file/shared/FileInputToEntryInputMapper.js.map +1 -0
  353. package/features/file/shared/FileToEntryMapper.d.ts +5 -0
  354. package/features/file/shared/FileToEntryMapper.js +31 -0
  355. package/features/file/shared/FileToEntryMapper.js.map +1 -0
  356. package/features/permissions/abstractions.d.ts +21 -0
  357. package/features/permissions/abstractions.js +6 -0
  358. package/features/permissions/abstractions.js.map +1 -0
  359. package/features/permissions/feature.d.ts +4 -0
  360. package/features/permissions/feature.js +7 -0
  361. package/features/permissions/feature.js.map +1 -0
  362. package/features/settings/GetSettings/GetSettingsUseCase.d.ts +13 -0
  363. package/features/settings/GetSettings/GetSettingsUseCase.js +28 -0
  364. package/features/settings/GetSettings/GetSettingsUseCase.js.map +1 -0
  365. package/features/settings/GetSettings/abstractions.d.ts +18 -0
  366. package/features/settings/GetSettings/abstractions.js +5 -0
  367. package/features/settings/GetSettings/abstractions.js.map +1 -0
  368. package/features/settings/GetSettings/feature.d.ts +4 -0
  369. package/features/settings/GetSettings/feature.js +11 -0
  370. package/features/settings/GetSettings/feature.js.map +1 -0
  371. package/features/settings/SettingsInstaller/SettingsInstaller.d.ts +15 -0
  372. package/features/settings/SettingsInstaller/SettingsInstaller.js +36 -0
  373. package/features/settings/SettingsInstaller/SettingsInstaller.js.map +1 -0
  374. package/features/settings/SettingsInstaller/feature.d.ts +4 -0
  375. package/features/settings/SettingsInstaller/feature.js +11 -0
  376. package/features/settings/SettingsInstaller/feature.js.map +1 -0
  377. package/features/settings/UpdateSettings/UpdateSettingsUseCase.d.ts +18 -0
  378. package/features/settings/UpdateSettings/UpdateSettingsUseCase.js +55 -0
  379. package/features/settings/UpdateSettings/UpdateSettingsUseCase.js.map +1 -0
  380. package/features/settings/UpdateSettings/abstractions.d.ts +23 -0
  381. package/features/settings/UpdateSettings/abstractions.js +5 -0
  382. package/features/settings/UpdateSettings/abstractions.js.map +1 -0
  383. package/features/settings/UpdateSettings/events.d.ts +34 -0
  384. package/features/settings/UpdateSettings/events.js +23 -0
  385. package/features/settings/UpdateSettings/events.js.map +1 -0
  386. package/features/settings/UpdateSettings/feature.d.ts +4 -0
  387. package/features/settings/UpdateSettings/feature.js +11 -0
  388. package/features/settings/UpdateSettings/feature.js.map +1 -0
  389. package/features/settings/UpdateSettings/index.d.ts +2 -0
  390. package/features/settings/UpdateSettings/index.js +2 -0
  391. package/features/shared/abstractions.d.ts +1 -0
  392. package/features/shared/abstractions.js +1 -0
  393. package/features/upload/CompleteMultiPartUpload/abstractions.d.ts +12 -0
  394. package/features/upload/CompleteMultiPartUpload/abstractions.js +5 -0
  395. package/features/upload/CompleteMultiPartUpload/abstractions.js.map +1 -0
  396. package/features/upload/CompleteMultiPartUpload/index.d.ts +1 -0
  397. package/features/upload/CompleteMultiPartUpload/index.js +1 -0
  398. package/features/upload/CreateMultiPartUpload/abstractions.d.ts +14 -0
  399. package/features/upload/CreateMultiPartUpload/abstractions.js +5 -0
  400. package/features/upload/CreateMultiPartUpload/abstractions.js.map +1 -0
  401. package/features/upload/CreateMultiPartUpload/index.d.ts +1 -0
  402. package/features/upload/CreateMultiPartUpload/index.js +1 -0
  403. package/features/upload/GetUploadPayload/abstractions.d.ts +10 -0
  404. package/features/upload/GetUploadPayload/abstractions.js +5 -0
  405. package/features/upload/GetUploadPayload/abstractions.js.map +1 -0
  406. package/features/upload/GetUploadPayload/index.d.ts +1 -0
  407. package/features/upload/GetUploadPayload/index.js +1 -0
  408. package/features/upload/ReadFileMetadata/MetadataReader.d.ts +11 -0
  409. package/features/upload/ReadFileMetadata/MetadataReader.js +21 -0
  410. package/features/upload/ReadFileMetadata/MetadataReader.js.map +1 -0
  411. package/features/upload/ReadFileMetadata/abstractions.d.ts +15 -0
  412. package/features/upload/ReadFileMetadata/abstractions.js +5 -0
  413. package/features/upload/ReadFileMetadata/abstractions.js.map +1 -0
  414. package/features/upload/ReadFileMetadata/feature.d.ts +4 -0
  415. package/features/upload/ReadFileMetadata/feature.js +11 -0
  416. package/features/upload/ReadFileMetadata/feature.js.map +1 -0
  417. package/features/upload/ReadFileMetadata/index.d.ts +1 -0
  418. package/features/upload/ReadFileMetadata/index.js +1 -0
  419. package/features/upload/WriteFileMetadata/MetadataWriter.d.ts +14 -0
  420. package/features/upload/WriteFileMetadata/MetadataWriter.js +36 -0
  421. package/features/upload/WriteFileMetadata/MetadataWriter.js.map +1 -0
  422. package/features/upload/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.d.ts +11 -0
  423. package/features/upload/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js +20 -0
  424. package/features/upload/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +1 -0
  425. package/features/upload/WriteFileMetadata/WriteMetadataAfterCreateHandler.d.ts +11 -0
  426. package/features/upload/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +22 -0
  427. package/features/upload/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +1 -0
  428. package/features/upload/WriteFileMetadata/WriteMetadataAfterUpdateHandler.d.ts +11 -0
  429. package/features/upload/WriteFileMetadata/WriteMetadataAfterUpdateHandler.js +22 -0
  430. package/features/upload/WriteFileMetadata/WriteMetadataAfterUpdateHandler.js.map +1 -0
  431. package/features/upload/WriteFileMetadata/abstractions.d.ts +9 -0
  432. package/features/upload/WriteFileMetadata/abstractions.js +5 -0
  433. package/features/upload/WriteFileMetadata/abstractions.js.map +1 -0
  434. package/features/upload/WriteFileMetadata/feature.d.ts +4 -0
  435. package/features/upload/WriteFileMetadata/feature.js +17 -0
  436. package/features/upload/WriteFileMetadata/feature.js.map +1 -0
  437. package/features/upload/index.d.ts +17 -0
  438. package/features/upload/index.js +10 -0
  439. package/features/upload/types.d.ts +28 -0
  440. package/features/upload/types.js +0 -0
  441. package/features/upload/utils/FileExtension.d.ts +6 -0
  442. package/features/upload/utils/FileExtension.js +16 -0
  443. package/features/upload/utils/FileExtension.js.map +1 -0
  444. package/features/upload/utils/FileKey.d.ts +11 -0
  445. package/features/upload/utils/FileKey.js +33 -0
  446. package/features/upload/utils/FileKey.js.map +1 -0
  447. package/features/upload/utils/FileNormalizer.d.ts +13 -0
  448. package/features/upload/utils/FileNormalizer.js +41 -0
  449. package/features/upload/utils/FileNormalizer.js.map +1 -0
  450. package/features/upload/utils/FileUploadModifier.d.ts +30 -0
  451. package/features/upload/utils/FileUploadModifier.js +39 -0
  452. package/features/upload/utils/FileUploadModifier.js.map +1 -0
  453. package/features/upload/utils/checkPermissions.d.ts +5 -0
  454. package/features/upload/utils/checkPermissions.js +22 -0
  455. package/features/upload/utils/checkPermissions.js.map +1 -0
  456. package/features/upload/utils/createFileNormalizerFromContext.d.ts +3 -0
  457. package/features/upload/utils/createFileNormalizerFromContext.js +9 -0
  458. package/features/upload/utils/createFileNormalizerFromContext.js.map +1 -0
  459. package/features/upload/utils/mimeTypes.d.ts +1 -0
  460. package/features/upload/utils/mimeTypes.js +9 -0
  461. package/features/upload/utils/mimeTypes.js.map +1 -0
  462. package/graphql/FmGraphQLSchema.d.ts +25 -0
  463. package/graphql/FmGraphQLSchema.js +450 -0
  464. package/graphql/FmGraphQLSchema.js.map +1 -0
  465. package/graphql/FmUploadGraphQLSchema.d.ts +11 -0
  466. package/graphql/FmUploadGraphQLSchema.js +229 -0
  467. package/graphql/FmUploadGraphQLSchema.js.map +1 -0
  468. package/index.d.ts +3 -5
  469. package/index.js +41 -66
  470. package/index.js.map +1 -1
  471. package/package.json +40 -40
  472. package/types.d.ts +2 -355
  473. package/types.js +1 -27
  474. package/createFileManager/checkBasePermissions.d.ts +0 -5
  475. package/createFileManager/checkBasePermissions.js +0 -24
  476. package/createFileManager/checkBasePermissions.js.map +0 -1
  477. package/createFileManager/files.crud.d.ts +0 -3
  478. package/createFileManager/files.crud.js +0 -318
  479. package/createFileManager/files.crud.js.map +0 -1
  480. package/createFileManager/filevalidation.disabled.js +0 -55
  481. package/createFileManager/filevalidation.disabled.js.map +0 -1
  482. package/createFileManager/index.d.ts +0 -13
  483. package/createFileManager/index.js +0 -20
  484. package/createFileManager/index.js.map +0 -1
  485. package/createFileManager/settings.crud.d.ts +0 -3
  486. package/createFileManager/settings.crud.js +0 -91
  487. package/createFileManager/settings.crud.js.map +0 -1
  488. package/createFileManager/system.crud.d.ts +0 -3
  489. package/createFileManager/system.crud.js +0 -86
  490. package/createFileManager/system.crud.js.map +0 -1
  491. package/graphql/index.d.ts +0 -3
  492. package/graphql/index.js +0 -288
  493. package/graphql/index.js.map +0 -1
  494. package/handlers/download/byAlias.d.ts +0 -6
  495. package/handlers/download/byAlias.js +0 -89
  496. package/handlers/download/byAlias.js.map +0 -1
  497. package/handlers/download/byExactKey.d.ts +0 -2
  498. package/handlers/download/byExactKey.js +0 -57
  499. package/handlers/download/byExactKey.js.map +0 -1
  500. package/handlers/download/extractFileInformation.d.ts +0 -9
  501. package/handlers/download/extractFileInformation.js +0 -20
  502. package/handlers/download/extractFileInformation.js.map +0 -1
  503. package/handlers/download/getS3Object.d.ts +0 -10
  504. package/handlers/download/getS3Object.js +0 -57
  505. package/handlers/download/getS3Object.js.map +0 -1
  506. package/handlers/download/index.d.ts +0 -2
  507. package/handlers/download/index.js +0 -27
  508. package/handlers/download/index.js.map +0 -1
  509. package/handlers/manage/index.d.ts +0 -5
  510. package/handlers/manage/index.js +0 -55
  511. package/handlers/manage/index.js.map +0 -1
  512. package/handlers/transform/index.d.ts +0 -2
  513. package/handlers/transform/index.js +0 -89
  514. package/handlers/transform/index.js.map +0 -1
  515. package/handlers/transform/legacyUtils.d.ts +0 -17
  516. package/handlers/transform/legacyUtils.js +0 -42
  517. package/handlers/transform/legacyUtils.js.map +0 -1
  518. package/handlers/transform/loaders/imageLoader.d.ts +0 -30
  519. package/handlers/transform/loaders/imageLoader.js +0 -94
  520. package/handlers/transform/loaders/imageLoader.js.map +0 -1
  521. package/handlers/transform/loaders/index.d.ts +0 -8
  522. package/handlers/transform/loaders/index.js +0 -10
  523. package/handlers/transform/loaders/index.js.map +0 -1
  524. package/handlers/transform/loaders/sanitizeImageTransformations.d.ts +0 -11
  525. package/handlers/transform/loaders/sanitizeImageTransformations.js +0 -45
  526. package/handlers/transform/loaders/sanitizeImageTransformations.js.map +0 -1
  527. package/handlers/transform/managers/imageManager.d.ts +0 -15
  528. package/handlers/transform/managers/imageManager.js +0 -74
  529. package/handlers/transform/managers/imageManager.js.map +0 -1
  530. package/handlers/transform/managers/index.d.ts +0 -5
  531. package/handlers/transform/managers/index.js +0 -10
  532. package/handlers/transform/managers/index.js.map +0 -1
  533. package/handlers/transform/optimizeImage.d.ts +0 -3
  534. package/handlers/transform/optimizeImage.js +0 -42
  535. package/handlers/transform/optimizeImage.js.map +0 -1
  536. package/handlers/transform/transformImage.d.ts +0 -10
  537. package/handlers/transform/transformImage.js +0 -25
  538. package/handlers/transform/transformImage.js.map +0 -1
  539. package/handlers/transform/utils.d.ts +0 -12
  540. package/handlers/transform/utils.js +0 -36
  541. package/handlers/transform/utils.js.map +0 -1
  542. package/handlers/types.d.ts +0 -8
  543. package/handlers/types.js +0 -5
  544. package/handlers/types.js.map +0 -1
  545. package/handlers/utils/getEnvironment.d.ts +0 -5
  546. package/handlers/utils/getEnvironment.js +0 -11
  547. package/handlers/utils/getEnvironment.js.map +0 -1
  548. package/handlers/utils/getObjectParams.d.ts +0 -9
  549. package/handlers/utils/getObjectParams.js +0 -21
  550. package/handlers/utils/getObjectParams.js.map +0 -1
  551. package/handlers/utils/index.d.ts +0 -2
  552. package/handlers/utils/index.js +0 -20
  553. package/handlers/utils/index.js.map +0 -1
  554. package/plugins/FilePhysicalStoragePlugin.d.ts +0 -21
  555. package/plugins/FilePhysicalStoragePlugin.js +0 -31
  556. package/plugins/FilePhysicalStoragePlugin.js.map +0 -1
  557. package/plugins/FileStorageTransformPlugin.d.ts +0 -34
  558. package/plugins/FileStorageTransformPlugin.js +0 -40
  559. package/plugins/FileStorageTransformPlugin.js.map +0 -1
  560. package/plugins/crud/files/validation.d.ts +0 -3
  561. package/plugins/crud/files/validation.js +0 -41
  562. package/plugins/crud/files/validation.js.map +0 -1
  563. package/plugins/crud/files.crud.d.ts +0 -4
  564. package/plugins/crud/files.crud.js +0 -431
  565. package/plugins/crud/files.crud.js.map +0 -1
  566. package/plugins/crud/settings.crud.d.ts +0 -5
  567. package/plugins/crud/settings.crud.js +0 -116
  568. package/plugins/crud/settings.crud.js.map +0 -1
  569. package/plugins/crud/system.crud.d.ts +0 -4
  570. package/plugins/crud/system.crud.js +0 -153
  571. package/plugins/crud/system.crud.js.map +0 -1
  572. package/plugins/crud/utils/checkBasePermissions.d.ts +0 -5
  573. package/plugins/crud/utils/checkBasePermissions.js +0 -33
  574. package/plugins/crud/utils/checkBasePermissions.js.map +0 -1
  575. package/plugins/crud/utils/createFileModel.d.ts +0 -5
  576. package/plugins/crud/utils/createFileModel.js +0 -77
  577. package/plugins/crud/utils/createFileModel.js.map +0 -1
  578. package/plugins/crud/utils/lifecycleEvents.d.ts +0 -6
  579. package/plugins/crud/utils/lifecycleEvents.js +0 -38
  580. package/plugins/crud/utils/lifecycleEvents.js.map +0 -1
  581. package/plugins/definitions/FilePhysicalStoragePlugin.d.ts +0 -21
  582. package/plugins/definitions/FilePhysicalStoragePlugin.js +0 -42
  583. package/plugins/definitions/FilePhysicalStoragePlugin.js.map +0 -1
  584. package/plugins/definitions/FilePlugin.d.ts +0 -136
  585. package/plugins/definitions/FilePlugin.js +0 -70
  586. package/plugins/definitions/FilePlugin.js.map +0 -1
  587. package/plugins/definitions/FileStorageTransformPlugin.d.ts +0 -34
  588. package/plugins/definitions/FileStorageTransformPlugin.js +0 -51
  589. package/plugins/definitions/FileStorageTransformPlugin.js.map +0 -1
  590. package/plugins/definitions/FilesStorageOperationsProviderPlugin.d.ts +0 -9
  591. package/plugins/definitions/FilesStorageOperationsProviderPlugin.js +0 -17
  592. package/plugins/definitions/FilesStorageOperationsProviderPlugin.js.map +0 -1
  593. package/plugins/definitions/InstallationPlugin.d.ts +0 -19
  594. package/plugins/definitions/InstallationPlugin.js +0 -42
  595. package/plugins/definitions/InstallationPlugin.js.map +0 -1
  596. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.d.ts +0 -9
  597. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.js +0 -17
  598. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.js.map +0 -1
  599. package/plugins/definitions/SystemStorageOperationsProviderPlugin.d.ts +0 -9
  600. package/plugins/definitions/SystemStorageOperationsProviderPlugin.js +0 -17
  601. package/plugins/definitions/SystemStorageOperationsProviderPlugin.js.map +0 -1
  602. package/plugins/graphql.d.ts +0 -4
  603. package/plugins/graphql.js +0 -290
  604. package/plugins/graphql.js.map +0 -1
  605. package/plugins/index.d.ts +0 -2
  606. package/plugins/index.js +0 -27
  607. package/plugins/index.js.map +0 -1
  608. package/plugins/storage/FileStorage.d.ts +0 -30
  609. package/plugins/storage/FileStorage.js +0 -103
  610. package/plugins/storage/FileStorage.js.map +0 -1
  611. package/plugins/storage/index.d.ts +0 -4
  612. package/plugins/storage/index.js +0 -26
  613. package/plugins/storage/index.js.map +0 -1
  614. package/storage/FileStorage.d.ts +0 -32
  615. package/storage/FileStorage.js +0 -86
  616. package/storage/FileStorage.js.map +0 -1
  617. package/types/file.d.ts +0 -33
  618. package/types/file.js +0 -5
  619. package/types/file.js.map +0 -1
  620. package/types/file.lifecycle.d.ts +0 -40
  621. package/types/file.lifecycle.js +0 -5
  622. package/types/file.lifecycle.js.map +0 -1
  623. package/types.js.map +0 -1
  624. package/utils.d.ts +0 -4
  625. package/utils.js +0 -16
  626. package/utils.js.map +0 -1
  627. /package/{createFileManager/filevalidation.disabled.d.ts → domain/file/types.js} +0 -0
@@ -0,0 +1,8 @@
1
+ export declare class WidthCollection {
2
+ private readonly values;
3
+ static create(values: number[]): WidthCollection;
4
+ private constructor();
5
+ max(): number;
6
+ min(): number;
7
+ getClosestOrMax(value: number | undefined): number;
8
+ }
@@ -0,0 +1,22 @@
1
+ class WidthCollection {
2
+ static create(values) {
3
+ return new WidthCollection(values);
4
+ }
5
+ constructor(values){
6
+ this.values = values.sort((a, b)=>a - b);
7
+ }
8
+ max() {
9
+ return Math.max(...this.values);
10
+ }
11
+ min() {
12
+ return Math.min(...this.values);
13
+ }
14
+ getClosestOrMax(value) {
15
+ if (!value) return this.max();
16
+ const gteGivenValue = this.values.filter((w)=>w >= value);
17
+ return gteGivenValue.length > 0 ? gteGivenValue[0] : this.max();
18
+ }
19
+ }
20
+ export { WidthCollection };
21
+
22
+ //# sourceMappingURL=WidthCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/assetTypes/image/WidthCollection.js","sources":["../../../../../src/features/assetDelivery/assetTypes/image/WidthCollection.ts"],"sourcesContent":["export class WidthCollection {\n private readonly values: number[];\n\n public static create(values: number[]) {\n return new WidthCollection(values);\n }\n\n private constructor(values: number[]) {\n this.values = values.sort((a, b) => a - b);\n }\n\n public max() {\n return Math.max(...this.values);\n }\n\n public min() {\n return Math.min(...this.values);\n }\n\n public getClosestOrMax(value: number | undefined): number {\n if (!value) {\n return this.max();\n }\n const gteGivenValue = this.values.filter(w => w >= value);\n return gteGivenValue.length > 0 ? gteGivenValue[0] : this.max();\n }\n}\n"],"names":["WidthCollection","values","a","b","Math","value","gteGivenValue","w"],"mappings":"AAAO,MAAMA;IAGT,OAAc,OAAOC,MAAgB,EAAE;QACnC,OAAO,IAAID,gBAAgBC;IAC/B;IAEA,YAAoBA,MAAgB,CAAE;QAClC,IAAI,CAAC,MAAM,GAAGA,OAAO,IAAI,CAAC,CAACC,GAAGC,IAAMD,IAAIC;IAC5C;IAEO,MAAM;QACT,OAAOC,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM;IAClC;IAEO,MAAM;QACT,OAAOA,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM;IAClC;IAEO,gBAAgBC,KAAyB,EAAU;QACtD,IAAI,CAACA,OACD,OAAO,IAAI,CAAC,GAAG;QAEnB,MAAMC,gBAAgB,IAAI,CAAC,MAAM,CAAC,MAAM,CAACC,CAAAA,IAAKA,KAAKF;QACnD,OAAOC,cAAc,MAAM,GAAG,IAAIA,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG;IACjE;AACJ"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Pure image-format helpers. IMPORTANT: this module must NOT import `sharp` (a
3
+ * native module). It is reachable from the GraphQL API handler via the asset
4
+ * request resolvers, and loading `sharp` there would crash that Lambda. The
5
+ * actual sharp pipeline lives in `transformImage.ts`, which only the transform
6
+ * strategies (the image Lambda) import.
7
+ */
8
+ export type ImageFormat = "jpeg" | "png" | "webp" | "avif";
9
+ export declare const SUPPORTED_OUTPUT_FORMATS: ImageFormat[];
10
+ /**
11
+ * Default encoder quality per output format. AVIF reaches a comparable visual
12
+ * quality at a lower number than JPEG/WebP, hence the lower default.
13
+ */
14
+ export declare const DEFAULT_IMAGE_QUALITY: Record<ImageFormat, number>;
15
+ export declare const contentTypeForFormat: (format: ImageFormat) => string;
16
+ export declare const formatFromContentType: (contentType: string) => ImageFormat | undefined;
17
+ /**
18
+ * Resolve a requested format string into a concrete output format.
19
+ *
20
+ * `"auto"` negotiates from the `Accept` header (AVIF ▸ WebP ▸ keep original), which
21
+ * is how we approach `next/image`'s automatic modern-format delivery. Returns
22
+ * `undefined` when the original format should be kept.
23
+ */
24
+ export declare const resolveRequestedFormat: (requested: string | undefined, acceptHeader: string | undefined) => ImageFormat | undefined;
25
+ /** Clamp a requested quality into the valid 1–100 range; `undefined` when absent/invalid. */
26
+ export declare const clampQuality: (value: number | undefined) => number | undefined;
@@ -0,0 +1,51 @@
1
+ const SUPPORTED_OUTPUT_FORMATS = [
2
+ "jpeg",
3
+ "png",
4
+ "webp",
5
+ "avif"
6
+ ];
7
+ const DEFAULT_IMAGE_QUALITY = {
8
+ jpeg: 75,
9
+ png: 80,
10
+ webp: 75,
11
+ avif: 55
12
+ };
13
+ const CONTENT_TYPE_BY_FORMAT = {
14
+ jpeg: "image/jpeg",
15
+ png: "image/png",
16
+ webp: "image/webp",
17
+ avif: "image/avif"
18
+ };
19
+ const contentTypeForFormat = (format)=>CONTENT_TYPE_BY_FORMAT[format];
20
+ const formatFromContentType = (contentType)=>{
21
+ switch(contentType){
22
+ case "image/jpeg":
23
+ case "image/jpg":
24
+ return "jpeg";
25
+ case "image/png":
26
+ return "png";
27
+ case "image/webp":
28
+ return "webp";
29
+ case "image/avif":
30
+ return "avif";
31
+ default:
32
+ return;
33
+ }
34
+ };
35
+ const resolveRequestedFormat = (requested, acceptHeader)=>{
36
+ if (!requested) return;
37
+ if ("auto" === requested) {
38
+ const accept = acceptHeader ?? "";
39
+ if (accept.includes("image/avif")) return "avif";
40
+ if (accept.includes("image/webp")) return "webp";
41
+ return;
42
+ }
43
+ return SUPPORTED_OUTPUT_FORMATS.includes(requested) ? requested : void 0;
44
+ };
45
+ const clampQuality = (value)=>{
46
+ if (void 0 === value || Number.isNaN(value)) return;
47
+ return Math.min(100, Math.max(1, Math.round(value)));
48
+ };
49
+ export { DEFAULT_IMAGE_QUALITY, SUPPORTED_OUTPUT_FORMATS, clampQuality, contentTypeForFormat, formatFromContentType, resolveRequestedFormat };
50
+
51
+ //# sourceMappingURL=imageFormat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/assetTypes/image/imageFormat.js","sources":["../../../../../src/features/assetDelivery/assetTypes/image/imageFormat.ts"],"sourcesContent":["/**\n * Pure image-format helpers. IMPORTANT: this module must NOT import `sharp` (a\n * native module). It is reachable from the GraphQL API handler via the asset\n * request resolvers, and loading `sharp` there would crash that Lambda. The\n * actual sharp pipeline lives in `transformImage.ts`, which only the transform\n * strategies (the image Lambda) import.\n */\n\nexport type ImageFormat = \"jpeg\" | \"png\" | \"webp\" | \"avif\";\n\nexport const SUPPORTED_OUTPUT_FORMATS: ImageFormat[] = [\"jpeg\", \"png\", \"webp\", \"avif\"];\n\n/**\n * Default encoder quality per output format. AVIF reaches a comparable visual\n * quality at a lower number than JPEG/WebP, hence the lower default.\n */\nexport const DEFAULT_IMAGE_QUALITY: Record<ImageFormat, number> = {\n jpeg: 75,\n png: 80,\n webp: 75,\n avif: 55\n};\n\nconst CONTENT_TYPE_BY_FORMAT: Record<ImageFormat, string> = {\n jpeg: \"image/jpeg\",\n png: \"image/png\",\n webp: \"image/webp\",\n avif: \"image/avif\"\n};\n\nexport const contentTypeForFormat = (format: ImageFormat): string => CONTENT_TYPE_BY_FORMAT[format];\n\nexport const formatFromContentType = (contentType: string): ImageFormat | undefined => {\n switch (contentType) {\n case \"image/jpeg\":\n case \"image/jpg\":\n return \"jpeg\";\n case \"image/png\":\n return \"png\";\n case \"image/webp\":\n return \"webp\";\n case \"image/avif\":\n return \"avif\";\n default:\n return undefined;\n }\n};\n\n/**\n * Resolve a requested format string into a concrete output format.\n *\n * `\"auto\"` negotiates from the `Accept` header (AVIF ▸ WebP ▸ keep original), which\n * is how we approach `next/image`'s automatic modern-format delivery. Returns\n * `undefined` when the original format should be kept.\n */\nexport const resolveRequestedFormat = (\n requested: string | undefined,\n acceptHeader: string | undefined\n): ImageFormat | undefined => {\n if (!requested) {\n return undefined;\n }\n\n if (requested === \"auto\") {\n const accept = acceptHeader ?? \"\";\n if (accept.includes(\"image/avif\")) {\n return \"avif\";\n }\n if (accept.includes(\"image/webp\")) {\n return \"webp\";\n }\n return undefined;\n }\n\n return SUPPORTED_OUTPUT_FORMATS.includes(requested as ImageFormat)\n ? (requested as ImageFormat)\n : undefined;\n};\n\n/** Clamp a requested quality into the valid 1–100 range; `undefined` when absent/invalid. */\nexport const clampQuality = (value: number | undefined): number | undefined => {\n if (value === undefined || Number.isNaN(value)) {\n return undefined;\n }\n return Math.min(100, Math.max(1, Math.round(value)));\n};\n"],"names":["SUPPORTED_OUTPUT_FORMATS","DEFAULT_IMAGE_QUALITY","CONTENT_TYPE_BY_FORMAT","contentTypeForFormat","format","formatFromContentType","contentType","resolveRequestedFormat","requested","acceptHeader","accept","undefined","clampQuality","value","Number","Math"],"mappings":"AAUO,MAAMA,2BAA0C;IAAC;IAAQ;IAAO;IAAQ;CAAO;AAM/E,MAAMC,wBAAqD;IAC9D,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;AACV;AAEA,MAAMC,yBAAsD;IACxD,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;AACV;AAEO,MAAMC,uBAAuB,CAACC,SAAgCF,sBAAsB,CAACE,OAAO;AAE5F,MAAMC,wBAAwB,CAACC;IAClC,OAAQA;QACJ,KAAK;QACL,KAAK;YACD,OAAO;QACX,KAAK;YACD,OAAO;QACX,KAAK;YACD,OAAO;QACX,KAAK;YACD,OAAO;QACX;YACI;IACR;AACJ;AASO,MAAMC,yBAAyB,CAClCC,WACAC;IAEA,IAAI,CAACD,WACD;IAGJ,IAAIA,AAAc,WAAdA,WAAsB;QACtB,MAAME,SAASD,gBAAgB;QAC/B,IAAIC,OAAO,QAAQ,CAAC,eAChB,OAAO;QAEX,IAAIA,OAAO,QAAQ,CAAC,eAChB,OAAO;QAEX;IACJ;IAEA,OAAOV,yBAAyB,QAAQ,CAACQ,aAClCA,YACDG;AACV;AAGO,MAAMC,eAAe,CAACC;IACzB,IAAIA,AAAUF,WAAVE,SAAuBC,OAAO,KAAK,CAACD,QACpC;IAEJ,OAAOE,KAAK,GAAG,CAAC,KAAKA,KAAK,GAAG,CAAC,GAAGA,KAAK,KAAK,CAACF;AAChD"}
@@ -0,0 +1,39 @@
1
+ import type { ImageFormat } from "./imageFormat.js";
2
+ /** Crop expressed as the fraction (0..1) cut off from each edge of the original. */
3
+ export interface AssetCrop {
4
+ top: number;
5
+ left: number;
6
+ bottom: number;
7
+ right: number;
8
+ }
9
+ /** Asset-level, non-destructive image edit applied at delivery time. */
10
+ export interface AssetImageEdit {
11
+ crop?: AssetCrop;
12
+ }
13
+ /** Image-specific request options parsed from query parameters. */
14
+ export interface ImageRequestOptions {
15
+ original?: boolean;
16
+ width?: number;
17
+ /** Encoder quality (1–100). */
18
+ quality?: number;
19
+ /** Concrete output format (already resolved from any "auto" request). */
20
+ format?: ImageFormat;
21
+ /** Per-request crop (normalized 0–1 edge insets). Supersedes asset-level crop. */
22
+ crop?: AssetCrop;
23
+ /** Target aspect ratio (width / height). */
24
+ aspectRatio?: number;
25
+ /** Normalized 0–1 focal point kept in frame when aspectRatio forces extra cutting. */
26
+ focal?: {
27
+ x: number;
28
+ y: number;
29
+ };
30
+ }
31
+ /** Combined crop + focal + aspect ratio for cache key generation and pixel extraction. */
32
+ export interface Framing {
33
+ crop?: AssetCrop;
34
+ focal?: {
35
+ x: number;
36
+ y: number;
37
+ };
38
+ aspectRatio?: number;
39
+ }
@@ -0,0 +1,5 @@
1
+ export { ImageAssetType } from "./ImageAssetType.js";
2
+ export { ImageAssetTypeHandler } from "./ImageAssetTypeHandler.js";
3
+ export { AssetKeyGenerator } from "./AssetKeyGenerator.js";
4
+ export { SUPPORTED_TRANSFORMABLE_IMAGES, getImageKey, getCropSignature, getFramingSignature, getOptimizedImageKeyPrefix, getOptimizedTransformedImageKeyPrefix } from "./utils.js";
5
+ export type { AssetCrop, AssetImageEdit, ImageRequestOptions, Framing } from "./imageTypes.js";
@@ -0,0 +1,4 @@
1
+ export { ImageAssetType } from "./ImageAssetType.js";
2
+ export { ImageAssetTypeHandler } from "./ImageAssetTypeHandler.js";
3
+ export { AssetKeyGenerator } from "./AssetKeyGenerator.js";
4
+ export { SUPPORTED_TRANSFORMABLE_IMAGES, getCropSignature, getFramingSignature, getImageKey, getOptimizedImageKeyPrefix, getOptimizedTransformedImageKeyPrefix } from "./utils.js";
@@ -0,0 +1,6 @@
1
+ import type { ImageRequestOptions } from "./imageTypes.js";
2
+ /**
3
+ * Parse raw query params into typed image request options.
4
+ * Returns a new `ImageRequestOptions` object; does not mutate the input.
5
+ */
6
+ export declare const normalizeImageOptions: (query: Record<string, any>, acceptHeader: string | undefined) => ImageRequestOptions;
@@ -0,0 +1,56 @@
1
+ import { clampQuality, resolveRequestedFormat } from "./imageFormat.js";
2
+ const normalizeImageOptions = (query, acceptHeader)=>{
3
+ const result = {
4
+ original: "original" in query
5
+ };
6
+ const width = query.width ? parseInt(query.width, 10) : NaN;
7
+ if (!Number.isNaN(width) && width > 0) result.width = width;
8
+ const quality = void 0 !== query.quality ? clampQuality(parseInt(query.quality, 10)) : void 0;
9
+ if (void 0 !== quality) result.quality = quality;
10
+ const format = resolveRequestedFormat(query.format, acceptHeader);
11
+ if (format) result.format = format;
12
+ const crop = parseCrop(query.crop);
13
+ if (crop) result.crop = crop;
14
+ const aspectRatio = parseAspectRatio(query.aspectRatio);
15
+ if (aspectRatio) result.aspectRatio = aspectRatio;
16
+ const focal = parseFocal(query.focal);
17
+ if (focal) result.focal = focal;
18
+ return result;
19
+ };
20
+ const parseAspectRatio = (raw)=>{
21
+ if ("string" != typeof raw) return;
22
+ if (raw.includes(":")) {
23
+ const [w, h] = raw.split(":").map((v)=>parseFloat(v));
24
+ return w > 0 && h > 0 ? w / h : void 0;
25
+ }
26
+ const value = parseFloat(raw);
27
+ return !Number.isNaN(value) && value > 0 ? value : void 0;
28
+ };
29
+ const parseFocal = (raw)=>{
30
+ if ("string" != typeof raw) return;
31
+ const parts = raw.split(",").map((v)=>parseFloat(v));
32
+ if (2 !== parts.length || parts.some((n)=>Number.isNaN(n))) return;
33
+ const clamp01 = (n)=>Math.min(1, Math.max(0, n));
34
+ return {
35
+ x: clamp01(parts[0]),
36
+ y: clamp01(parts[1])
37
+ };
38
+ };
39
+ const parseCrop = (raw)=>{
40
+ if ("string" != typeof raw) return;
41
+ const parts = raw.split(",").map((v)=>parseFloat(v));
42
+ if (4 !== parts.length || parts.some((n)=>Number.isNaN(n))) return;
43
+ const clamp01 = (n)=>Math.min(1, Math.max(0, n));
44
+ const [top, left, bottom, right] = parts.map(clamp01);
45
+ if (0 === top && 0 === left && 0 === bottom && 0 === right) return;
46
+ if (top + bottom >= 1 || left + right >= 1) return;
47
+ return {
48
+ top,
49
+ left,
50
+ bottom,
51
+ right
52
+ };
53
+ };
54
+ export { normalizeImageOptions };
55
+
56
+ //# sourceMappingURL=normalizeImageOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/assetTypes/image/normalizeImageOptions.js","sources":["../../../../../src/features/assetDelivery/assetTypes/image/normalizeImageOptions.ts"],"sourcesContent":["import type { ImageRequestOptions } from \"./imageTypes.js\";\nimport { clampQuality, resolveRequestedFormat } from \"./imageFormat.js\";\n\n/**\n * Parse raw query params into typed image request options.\n * Returns a new `ImageRequestOptions` object; does not mutate the input.\n */\nexport const normalizeImageOptions = (\n query: Record<string, any>,\n acceptHeader: string | undefined\n): ImageRequestOptions => {\n const result: ImageRequestOptions = {\n original: \"original\" in query\n };\n\n const width = query.width ? parseInt(query.width, 10) : NaN;\n if (!Number.isNaN(width) && width > 0) {\n result.width = width;\n }\n\n const quality =\n query.quality !== undefined ? clampQuality(parseInt(query.quality, 10)) : undefined;\n if (quality !== undefined) {\n result.quality = quality;\n }\n\n const format = resolveRequestedFormat(query.format, acceptHeader);\n if (format) {\n result.format = format;\n }\n\n const crop = parseCrop(query.crop);\n if (crop) {\n result.crop = crop;\n }\n\n const aspectRatio = parseAspectRatio(query.aspectRatio);\n if (aspectRatio) {\n result.aspectRatio = aspectRatio;\n }\n\n const focal = parseFocal(query.focal);\n if (focal) {\n result.focal = focal;\n }\n\n return result;\n};\n\nconst parseAspectRatio = (raw: unknown): number | undefined => {\n if (typeof raw !== \"string\") {\n return undefined;\n }\n if (raw.includes(\":\")) {\n const [w, h] = raw.split(\":\").map(v => parseFloat(v));\n return w > 0 && h > 0 ? w / h : undefined;\n }\n const value = parseFloat(raw);\n return !Number.isNaN(value) && value > 0 ? value : undefined;\n};\n\nconst parseFocal = (raw: unknown): { x: number; y: number } | undefined => {\n if (typeof raw !== \"string\") {\n return undefined;\n }\n const parts = raw.split(\",\").map(v => parseFloat(v));\n if (parts.length !== 2 || parts.some(n => Number.isNaN(n))) {\n return undefined;\n }\n const clamp01 = (n: number) => Math.min(1, Math.max(0, n));\n return { x: clamp01(parts[0]), y: clamp01(parts[1]) };\n};\n\nconst parseCrop = (\n raw: unknown\n): { top: number; left: number; bottom: number; right: number } | undefined => {\n if (typeof raw !== \"string\") {\n return undefined;\n }\n const parts = raw.split(\",\").map(v => parseFloat(v));\n if (parts.length !== 4 || parts.some(n => Number.isNaN(n))) {\n return undefined;\n }\n const clamp01 = (n: number) => Math.min(1, Math.max(0, n));\n const [top, left, bottom, right] = parts.map(clamp01);\n if (top === 0 && left === 0 && bottom === 0 && right === 0) {\n return undefined;\n }\n if (top + bottom >= 1 || left + right >= 1) {\n return undefined;\n }\n return { top, left, bottom, right };\n};\n"],"names":["normalizeImageOptions","query","acceptHeader","result","width","parseInt","NaN","Number","quality","undefined","clampQuality","format","resolveRequestedFormat","crop","parseCrop","aspectRatio","parseAspectRatio","focal","parseFocal","raw","w","h","v","parseFloat","value","parts","n","clamp01","Math","top","left","bottom","right"],"mappings":";AAOO,MAAMA,wBAAwB,CACjCC,OACAC;IAEA,MAAMC,SAA8B;QAChC,UAAU,cAAcF;IAC5B;IAEA,MAAMG,QAAQH,MAAM,KAAK,GAAGI,SAASJ,MAAM,KAAK,EAAE,MAAMK;IACxD,IAAI,CAACC,OAAO,KAAK,CAACH,UAAUA,QAAQ,GAChCD,OAAO,KAAK,GAAGC;IAGnB,MAAMI,UACFP,AAAkBQ,WAAlBR,MAAM,OAAO,GAAiBS,aAAaL,SAASJ,MAAM,OAAO,EAAE,OAAOQ;IAC9E,IAAID,AAAYC,WAAZD,SACAL,OAAO,OAAO,GAAGK;IAGrB,MAAMG,SAASC,uBAAuBX,MAAM,MAAM,EAAEC;IACpD,IAAIS,QACAR,OAAO,MAAM,GAAGQ;IAGpB,MAAME,OAAOC,UAAUb,MAAM,IAAI;IACjC,IAAIY,MACAV,OAAO,IAAI,GAAGU;IAGlB,MAAME,cAAcC,iBAAiBf,MAAM,WAAW;IACtD,IAAIc,aACAZ,OAAO,WAAW,GAAGY;IAGzB,MAAME,QAAQC,WAAWjB,MAAM,KAAK;IACpC,IAAIgB,OACAd,OAAO,KAAK,GAAGc;IAGnB,OAAOd;AACX;AAEA,MAAMa,mBAAmB,CAACG;IACtB,IAAI,AAAe,YAAf,OAAOA,KACP;IAEJ,IAAIA,IAAI,QAAQ,CAAC,MAAM;QACnB,MAAM,CAACC,GAAGC,EAAE,GAAGF,IAAI,KAAK,CAAC,KAAK,GAAG,CAACG,CAAAA,IAAKC,WAAWD;QAClD,OAAOF,IAAI,KAAKC,IAAI,IAAID,IAAIC,IAAIZ;IACpC;IACA,MAAMe,QAAQD,WAAWJ;IACzB,OAAO,CAACZ,OAAO,KAAK,CAACiB,UAAUA,QAAQ,IAAIA,QAAQf;AACvD;AAEA,MAAMS,aAAa,CAACC;IAChB,IAAI,AAAe,YAAf,OAAOA,KACP;IAEJ,MAAMM,QAAQN,IAAI,KAAK,CAAC,KAAK,GAAG,CAACG,CAAAA,IAAKC,WAAWD;IACjD,IAAIG,AAAiB,MAAjBA,MAAM,MAAM,IAAUA,MAAM,IAAI,CAACC,CAAAA,IAAKnB,OAAO,KAAK,CAACmB,KACnD;IAEJ,MAAMC,UAAU,CAACD,IAAcE,KAAK,GAAG,CAAC,GAAGA,KAAK,GAAG,CAAC,GAAGF;IACvD,OAAO;QAAE,GAAGC,QAAQF,KAAK,CAAC,EAAE;QAAG,GAAGE,QAAQF,KAAK,CAAC,EAAE;IAAE;AACxD;AAEA,MAAMX,YAAY,CACdK;IAEA,IAAI,AAAe,YAAf,OAAOA,KACP;IAEJ,MAAMM,QAAQN,IAAI,KAAK,CAAC,KAAK,GAAG,CAACG,CAAAA,IAAKC,WAAWD;IACjD,IAAIG,AAAiB,MAAjBA,MAAM,MAAM,IAAUA,MAAM,IAAI,CAACC,CAAAA,IAAKnB,OAAO,KAAK,CAACmB,KACnD;IAEJ,MAAMC,UAAU,CAACD,IAAcE,KAAK,GAAG,CAAC,GAAGA,KAAK,GAAG,CAAC,GAAGF;IACvD,MAAM,CAACG,KAAKC,MAAMC,QAAQC,MAAM,GAAGP,MAAM,GAAG,CAACE;IAC7C,IAAIE,AAAQ,MAARA,OAAaC,AAAS,MAATA,QAAcC,AAAW,MAAXA,UAAgBC,AAAU,MAAVA,OAC3C;IAEJ,IAAIH,MAAME,UAAU,KAAKD,OAAOE,SAAS,GACrC;IAEJ,OAAO;QAAEH;QAAKC;QAAMC;QAAQC;IAAM;AACtC"}
@@ -0,0 +1,59 @@
1
+ import { type ImageFormat } from "./imageFormat.js";
2
+ export interface TransformImageParams {
3
+ buffer: Buffer;
4
+ animated: boolean;
5
+ sourceContentType: string;
6
+ widths: number[];
7
+ options: {
8
+ width?: number;
9
+ format?: ImageFormat;
10
+ quality?: number;
11
+ };
12
+ qualityDefaults?: Record<ImageFormat, number>;
13
+ }
14
+ export interface TransformImageResult {
15
+ buffer: Buffer;
16
+ contentType: string;
17
+ }
18
+ /**
19
+ * Single sharp pipeline shared by the S3 and local transform strategies: optional
20
+ * resize (snapped to the configured width ladder) → optional format conversion +
21
+ * quality. Returns the resulting buffer and its content type.
22
+ */
23
+ interface CropInsets {
24
+ top: number;
25
+ left: number;
26
+ bottom: number;
27
+ right: number;
28
+ }
29
+ /**
30
+ * Extract the crop region (edge insets, 0..1) from an image buffer. Returns the
31
+ * original buffer unchanged if the crop is empty/full or the dimensions are unknown.
32
+ */
33
+ export declare const cropImageBuffer: (buffer: Buffer, crop: CropInsets) => Promise<Buffer>;
34
+ interface NormalizedRect {
35
+ x: number;
36
+ y: number;
37
+ width: number;
38
+ height: number;
39
+ }
40
+ /**
41
+ * The visible region (normalized 0–1) for the given framing. The largest rectangle
42
+ * of `aspectRatio` that fits inside the crop, centered on the focal point.
43
+ */
44
+ export declare const getVisibleRect: (imageWidth: number, imageHeight: number, crop?: CropInsets, focal?: {
45
+ x: number;
46
+ y: number;
47
+ }, aspectRatio?: number) => NormalizedRect;
48
+ export interface Framing {
49
+ crop?: CropInsets;
50
+ focal?: {
51
+ x: number;
52
+ y: number;
53
+ };
54
+ aspectRatio?: number;
55
+ }
56
+ export declare const hasFraming: (framing: Framing) => boolean;
57
+ export declare const extractFramedRegion: (buffer: Buffer, framing: Framing) => Promise<Buffer>;
58
+ export declare const transformImageBuffer: (params: TransformImageParams) => Promise<TransformImageResult>;
59
+ export {};
@@ -0,0 +1,146 @@
1
+ import sharp from "sharp";
2
+ import { WidthCollection } from "./WidthCollection.js";
3
+ import { DEFAULT_IMAGE_QUALITY, contentTypeForFormat, formatFromContentType } from "./imageFormat.js";
4
+ const applyOutputFormat = (pipeline, sourceContentType, options, qualityDefaults)=>{
5
+ const targetFormat = options.format ?? formatFromContentType(sourceContentType);
6
+ if (!targetFormat || !options.format && void 0 === options.quality) return {
7
+ pipeline,
8
+ contentType: sourceContentType
9
+ };
10
+ const quality = options.quality ?? qualityDefaults[targetFormat];
11
+ switch(targetFormat){
12
+ case "jpeg":
13
+ return {
14
+ pipeline: pipeline.jpeg({
15
+ quality
16
+ }),
17
+ contentType: contentTypeForFormat("jpeg")
18
+ };
19
+ case "webp":
20
+ return {
21
+ pipeline: pipeline.webp({
22
+ quality
23
+ }),
24
+ contentType: contentTypeForFormat("webp")
25
+ };
26
+ case "avif":
27
+ return {
28
+ pipeline: pipeline.avif({
29
+ quality
30
+ }),
31
+ contentType: contentTypeForFormat("avif")
32
+ };
33
+ case "png":
34
+ return {
35
+ pipeline: pipeline.png({
36
+ quality,
37
+ compressionLevel: 9,
38
+ adaptiveFiltering: true
39
+ }),
40
+ contentType: contentTypeForFormat("png")
41
+ };
42
+ }
43
+ };
44
+ const clamp01 = (n)=>Math.min(1, Math.max(0, n));
45
+ const cropImageBuffer = async (buffer, crop)=>{
46
+ const image = sharp(buffer);
47
+ const meta = await image.metadata();
48
+ const w = meta.width ?? 0;
49
+ const h = meta.height ?? 0;
50
+ if (!w || !h) return buffer;
51
+ const left = Math.max(0, Math.min(w - 1, Math.round(clamp01(crop.left) * w)));
52
+ const top = Math.max(0, Math.min(h - 1, Math.round(clamp01(crop.top) * h)));
53
+ const width = Math.max(1, Math.min(w - left, Math.round((1 - clamp01(crop.left) - clamp01(crop.right)) * w)));
54
+ const height = Math.max(1, Math.min(h - top, Math.round((1 - clamp01(crop.top) - clamp01(crop.bottom)) * h)));
55
+ if (0 === left && 0 === top && width === w && height === h) return buffer;
56
+ return image.extract({
57
+ left,
58
+ top,
59
+ width,
60
+ height
61
+ }).toBuffer();
62
+ };
63
+ const cropToRect = (crop)=>{
64
+ const left = clamp01(crop?.left ?? 0);
65
+ const top = clamp01(crop?.top ?? 0);
66
+ return {
67
+ x: left,
68
+ y: top,
69
+ width: Math.max(0, 1 - left - clamp01(crop?.right ?? 0)),
70
+ height: Math.max(0, 1 - top - clamp01(crop?.bottom ?? 0))
71
+ };
72
+ };
73
+ const getVisibleRect = (imageWidth, imageHeight, crop, focal, aspectRatio)=>{
74
+ const cr = cropToRect(crop);
75
+ if (void 0 === aspectRatio || aspectRatio <= 0 || cr.width <= 0 || cr.height <= 0) return cr;
76
+ const iw = imageWidth > 0 ? imageWidth : 1;
77
+ const ih = imageHeight > 0 ? imageHeight : 1;
78
+ const cropAR = cr.width * iw / (cr.height * ih);
79
+ let w;
80
+ let h;
81
+ if (aspectRatio > cropAR) {
82
+ w = cr.width;
83
+ h = cr.width * iw / aspectRatio / ih;
84
+ } else {
85
+ h = cr.height;
86
+ w = cr.height * ih * aspectRatio / iw;
87
+ }
88
+ const fx = clamp01(focal?.x ?? 0.5);
89
+ const fy = clamp01(focal?.y ?? 0.5);
90
+ const maxX = cr.x + cr.width - w;
91
+ const maxY = cr.y + cr.height - h;
92
+ const x = Math.min(Math.max(fx - w / 2, cr.x), Math.max(cr.x, maxX));
93
+ const y = Math.min(Math.max(fy - h / 2, cr.y), Math.max(cr.y, maxY));
94
+ return {
95
+ x,
96
+ y,
97
+ width: w,
98
+ height: h
99
+ };
100
+ };
101
+ const hasFraming = (framing)=>{
102
+ const c = framing.crop;
103
+ const cropped = !!c && !(0 === c.top && 0 === c.left && 0 === c.bottom && 0 === c.right);
104
+ return cropped || void 0 !== framing.aspectRatio;
105
+ };
106
+ const extractFramedRegion = async (buffer, framing)=>{
107
+ if (!hasFraming(framing)) return buffer;
108
+ const image = sharp(buffer);
109
+ const meta = await image.metadata();
110
+ const w = meta.width ?? 0;
111
+ const h = meta.height ?? 0;
112
+ if (!w || !h) return buffer;
113
+ const rect = getVisibleRect(w, h, framing.crop, framing.focal, framing.aspectRatio);
114
+ const left = Math.max(0, Math.min(w - 1, Math.round(rect.x * w)));
115
+ const top = Math.max(0, Math.min(h - 1, Math.round(rect.y * h)));
116
+ const width = Math.max(1, Math.min(w - left, Math.round(rect.width * w)));
117
+ const height = Math.max(1, Math.min(h - top, Math.round(rect.height * h)));
118
+ if (0 === left && 0 === top && width === w && height === h) return buffer;
119
+ return image.extract({
120
+ left,
121
+ top,
122
+ width,
123
+ height
124
+ }).toBuffer();
125
+ };
126
+ const transformImageBuffer = async (params)=>{
127
+ let pipeline = sharp(params.buffer, {
128
+ animated: params.animated
129
+ }).withMetadata();
130
+ if (params.options.width) {
131
+ const width = WidthCollection.create(params.widths).getClosestOrMax(params.options.width);
132
+ pipeline = pipeline.resize({
133
+ width,
134
+ withoutEnlargement: true
135
+ });
136
+ }
137
+ const { pipeline: encoded, contentType } = applyOutputFormat(pipeline, params.sourceContentType, params.options, params.qualityDefaults ?? DEFAULT_IMAGE_QUALITY);
138
+ const buffer = await encoded.toBuffer();
139
+ return {
140
+ buffer,
141
+ contentType
142
+ };
143
+ };
144
+ export { cropImageBuffer, extractFramedRegion, getVisibleRect, hasFraming, transformImageBuffer };
145
+
146
+ //# sourceMappingURL=transformImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/assetTypes/image/transformImage.js","sources":["../../../../../src/features/assetDelivery/assetTypes/image/transformImage.ts"],"sourcesContent":["/**\n * The sharp-backed image pipeline. This module imports `sharp` (a native module),\n * so it must ONLY be imported by the transform strategies (the image Lambda) —\n * never from the barrel (`index.ts`) or from anything the GraphQL API handler\n * loads. See `imageFormat.ts` for the reasoning.\n */\nimport sharp from \"sharp\";\nimport type { Sharp } from \"sharp\";\nimport { WidthCollection } from \"./WidthCollection.js\";\nimport {\n contentTypeForFormat,\n DEFAULT_IMAGE_QUALITY,\n formatFromContentType,\n type ImageFormat\n} from \"./imageFormat.js\";\n\ninterface ApplyOutputFormatResult {\n pipeline: Sharp;\n contentType: string;\n}\n\n/**\n * Apply the target format + quality to a sharp pipeline. When no `format` is given,\n * re-encodes in the source format only if a `quality` was requested; otherwise the\n * pipeline is left untouched.\n */\nconst applyOutputFormat = (\n pipeline: Sharp,\n sourceContentType: string,\n options: { format?: ImageFormat; quality?: number },\n qualityDefaults: Record<ImageFormat, number>\n): ApplyOutputFormatResult => {\n const targetFormat = options.format ?? formatFromContentType(sourceContentType);\n\n // Nothing to change: unknown source format, or neither a conversion nor a quality.\n if (!targetFormat || (!options.format && options.quality === undefined)) {\n return { pipeline, contentType: sourceContentType };\n }\n\n const quality = options.quality ?? qualityDefaults[targetFormat];\n\n switch (targetFormat) {\n case \"jpeg\":\n return {\n pipeline: pipeline.jpeg({ quality }),\n contentType: contentTypeForFormat(\"jpeg\")\n };\n case \"webp\":\n return {\n pipeline: pipeline.webp({ quality }),\n contentType: contentTypeForFormat(\"webp\")\n };\n case \"avif\":\n return {\n pipeline: pipeline.avif({ quality }),\n contentType: contentTypeForFormat(\"avif\")\n };\n case \"png\":\n return {\n pipeline: pipeline.png({ quality, compressionLevel: 9, adaptiveFiltering: true }),\n contentType: contentTypeForFormat(\"png\")\n };\n }\n};\n\nexport interface TransformImageParams {\n buffer: Buffer;\n animated: boolean;\n sourceContentType: string;\n widths: number[];\n options: { width?: number; format?: ImageFormat; quality?: number };\n qualityDefaults?: Record<ImageFormat, number>;\n}\n\nexport interface TransformImageResult {\n buffer: Buffer;\n contentType: string;\n}\n\n/**\n * Single sharp pipeline shared by the S3 and local transform strategies: optional\n * resize (snapped to the configured width ladder) → optional format conversion +\n * quality. Returns the resulting buffer and its content type.\n */\ninterface CropInsets {\n top: number;\n left: number;\n bottom: number;\n right: number;\n}\n\nconst clamp01 = (n: number) => Math.min(1, Math.max(0, n));\n\n/**\n * Extract the crop region (edge insets, 0..1) from an image buffer. Returns the\n * original buffer unchanged if the crop is empty/full or the dimensions are unknown.\n */\nexport const cropImageBuffer = async (buffer: Buffer, crop: CropInsets): Promise<Buffer> => {\n const image = sharp(buffer);\n const meta = await image.metadata();\n const w = meta.width ?? 0;\n const h = meta.height ?? 0;\n if (!w || !h) {\n return buffer;\n }\n\n const left = Math.max(0, Math.min(w - 1, Math.round(clamp01(crop.left) * w)));\n const top = Math.max(0, Math.min(h - 1, Math.round(clamp01(crop.top) * h)));\n const width = Math.max(\n 1,\n Math.min(w - left, Math.round((1 - clamp01(crop.left) - clamp01(crop.right)) * w))\n );\n const height = Math.max(\n 1,\n Math.min(h - top, Math.round((1 - clamp01(crop.top) - clamp01(crop.bottom)) * h))\n );\n\n if (left === 0 && top === 0 && width === w && height === h) {\n return buffer;\n }\n\n return image.extract({ left, top, width, height }).toBuffer();\n};\n\ninterface NormalizedRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nconst cropToRect = (crop?: CropInsets): NormalizedRect => {\n const left = clamp01(crop?.left ?? 0);\n const top = clamp01(crop?.top ?? 0);\n return {\n x: left,\n y: top,\n width: Math.max(0, 1 - left - clamp01(crop?.right ?? 0)),\n height: Math.max(0, 1 - top - clamp01(crop?.bottom ?? 0))\n };\n};\n\n/**\n * The visible region (normalized 0–1) for the given framing. The largest rectangle\n * of `aspectRatio` that fits inside the crop, centered on the focal point.\n */\nexport const getVisibleRect = (\n imageWidth: number,\n imageHeight: number,\n crop?: CropInsets,\n focal?: { x: number; y: number },\n aspectRatio?: number\n): NormalizedRect => {\n const cr = cropToRect(crop);\n if (aspectRatio === undefined || aspectRatio <= 0 || cr.width <= 0 || cr.height <= 0) {\n return cr;\n }\n const iw = imageWidth > 0 ? imageWidth : 1;\n const ih = imageHeight > 0 ? imageHeight : 1;\n const cropAR = (cr.width * iw) / (cr.height * ih);\n\n let w: number;\n let h: number;\n if (aspectRatio > cropAR) {\n w = cr.width;\n h = (cr.width * iw) / aspectRatio / ih;\n } else {\n h = cr.height;\n w = (cr.height * ih * aspectRatio) / iw;\n }\n\n const fx = clamp01(focal?.x ?? 0.5);\n const fy = clamp01(focal?.y ?? 0.5);\n const maxX = cr.x + cr.width - w;\n const maxY = cr.y + cr.height - h;\n const x = Math.min(Math.max(fx - w / 2, cr.x), Math.max(cr.x, maxX));\n const y = Math.min(Math.max(fy - h / 2, cr.y), Math.max(cr.y, maxY));\n return { x, y, width: w, height: h };\n};\n\nexport interface Framing {\n crop?: CropInsets;\n focal?: { x: number; y: number };\n aspectRatio?: number;\n}\n\nexport const hasFraming = (framing: Framing): boolean => {\n const c = framing.crop;\n const cropped = !!c && !(c.top === 0 && c.left === 0 && c.bottom === 0 && c.right === 0);\n return cropped || framing.aspectRatio !== undefined;\n};\n\nexport const extractFramedRegion = async (buffer: Buffer, framing: Framing): Promise<Buffer> => {\n if (!hasFraming(framing)) {\n return buffer;\n }\n const image = sharp(buffer);\n const meta = await image.metadata();\n const w = meta.width ?? 0;\n const h = meta.height ?? 0;\n if (!w || !h) {\n return buffer;\n }\n\n const rect = getVisibleRect(w, h, framing.crop, framing.focal, framing.aspectRatio);\n const left = Math.max(0, Math.min(w - 1, Math.round(rect.x * w)));\n const top = Math.max(0, Math.min(h - 1, Math.round(rect.y * h)));\n const width = Math.max(1, Math.min(w - left, Math.round(rect.width * w)));\n const height = Math.max(1, Math.min(h - top, Math.round(rect.height * h)));\n\n if (left === 0 && top === 0 && width === w && height === h) {\n return buffer;\n }\n return image.extract({ left, top, width, height }).toBuffer();\n};\n\nexport const transformImageBuffer = async (\n params: TransformImageParams\n): Promise<TransformImageResult> => {\n let pipeline = sharp(params.buffer, { animated: params.animated }).withMetadata();\n\n if (params.options.width) {\n const width = WidthCollection.create(params.widths).getClosestOrMax(params.options.width);\n pipeline = pipeline.resize({ width, withoutEnlargement: true });\n }\n\n const { pipeline: encoded, contentType } = applyOutputFormat(\n pipeline,\n params.sourceContentType,\n params.options,\n params.qualityDefaults ?? DEFAULT_IMAGE_QUALITY\n );\n\n const buffer = await encoded.toBuffer();\n\n return { buffer, contentType };\n};\n"],"names":["applyOutputFormat","pipeline","sourceContentType","options","qualityDefaults","targetFormat","formatFromContentType","undefined","quality","contentTypeForFormat","clamp01","n","Math","cropImageBuffer","buffer","crop","image","sharp","meta","w","h","left","top","width","height","cropToRect","getVisibleRect","imageWidth","imageHeight","focal","aspectRatio","cr","iw","ih","cropAR","fx","fy","maxX","maxY","x","y","hasFraming","framing","c","cropped","extractFramedRegion","rect","transformImageBuffer","params","WidthCollection","encoded","contentType","DEFAULT_IMAGE_QUALITY"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Framing } from "./imageTypes.js";
2
+ declare const SUPPORTED_TRANSFORMABLE_IMAGES: string[];
3
+ declare const getOptimizedImageKeyPrefix: (key: string, cropSignature?: string) => string;
4
+ declare const getOptimizedTransformedImageKeyPrefix: (key: string, transformationsHash: string, cropSignature?: string) => string;
5
+ interface Crop {
6
+ top: number;
7
+ left: number;
8
+ bottom: number;
9
+ right: number;
10
+ }
11
+ /** Short, stable signature of a crop; `undefined` for no/empty crop (so keys are unchanged). */
12
+ declare const getCropSignature: (crop?: Crop) => string | undefined;
13
+ interface GetImageKeyParams {
14
+ key: string;
15
+ transformations?: any;
16
+ cropSignature?: string;
17
+ }
18
+ declare const getImageKey: ({ key, transformations, cropSignature }: GetImageKeyParams) => string;
19
+ /**
20
+ * Signature for a full framing (crop + focal + aspect ratio) used to namespace
21
+ * cached derivatives. `undefined` when the framing is a no-op. A crop-only framing
22
+ * intentionally hashes to the same value as `getCropSignature`, so existing
23
+ * asset-level-crop derivatives keep their cache keys (backward compatible).
24
+ */
25
+ declare const getFramingSignature: (framing: Framing) => string | undefined;
26
+ export { SUPPORTED_TRANSFORMABLE_IMAGES, getImageKey, getCropSignature, getFramingSignature, getOptimizedImageKeyPrefix, getOptimizedTransformedImageKeyPrefix };
@@ -0,0 +1,47 @@
1
+ import object_hash from "object-hash";
2
+ import node_path from "node:path";
3
+ const SUPPORTED_TRANSFORMABLE_IMAGES = [
4
+ "jpg",
5
+ "jpeg",
6
+ "png",
7
+ "webp"
8
+ ];
9
+ const parseKey = (key)=>{
10
+ const filename = node_path.basename(key);
11
+ const dirname = node_path.dirname(key);
12
+ return {
13
+ filename,
14
+ dirname
15
+ };
16
+ };
17
+ const cropSegment = (cropSignature)=>cropSignature ? `${cropSignature}/` : "";
18
+ const getOptimizedImageKeyPrefix = (key, cropSignature)=>{
19
+ const { filename, dirname } = parseKey(key);
20
+ return `${dirname}/optimized/${cropSegment(cropSignature)}${filename}`;
21
+ };
22
+ const getOptimizedTransformedImageKeyPrefix = (key, transformationsHash, cropSignature)=>{
23
+ const { filename, dirname } = parseKey(key);
24
+ return `${dirname}/optimized/${cropSegment(cropSignature)}${transformationsHash}-${filename}`;
25
+ };
26
+ const getCropSignature = (crop)=>{
27
+ if (!crop || 0 === crop.top && 0 === crop.left && 0 === crop.bottom && 0 === crop.right) return;
28
+ return object_hash(crop).slice(0, 16);
29
+ };
30
+ const getImageKey = ({ key, transformations, cropSignature })=>{
31
+ if (!transformations) return getOptimizedImageKeyPrefix(key, cropSignature);
32
+ return getOptimizedTransformedImageKeyPrefix(key, object_hash(transformations), cropSignature);
33
+ };
34
+ const getFramingSignature = (framing)=>{
35
+ const { crop, focal, aspectRatio } = framing;
36
+ const cropped = !!crop && !(0 === crop.top && 0 === crop.left && 0 === crop.bottom && 0 === crop.right);
37
+ if (!cropped && void 0 === aspectRatio) return;
38
+ if (cropped && void 0 === focal && void 0 === aspectRatio) return object_hash(crop).slice(0, 16);
39
+ return object_hash({
40
+ crop: cropped ? crop : void 0,
41
+ focal,
42
+ aspectRatio
43
+ }).slice(0, 16);
44
+ };
45
+ export { SUPPORTED_TRANSFORMABLE_IMAGES, getCropSignature, getFramingSignature, getImageKey, getOptimizedImageKeyPrefix, getOptimizedTransformedImageKeyPrefix };
46
+
47
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/assetTypes/image/utils.js","sources":["../../../../../src/features/assetDelivery/assetTypes/image/utils.ts"],"sourcesContent":["import objectHash from \"object-hash\";\nimport path from \"node:path\";\nimport type { Framing } from \"./imageTypes.js\";\n\nconst SUPPORTED_TRANSFORMABLE_IMAGES = [\"jpg\", \"jpeg\", \"png\", \"webp\"];\n\nconst parseKey = (key: string) => {\n const filename = path.basename(key);\n const dirname = path.dirname(key);\n\n return { filename, dirname };\n};\n\n// An optional per-file crop signature segment. Keeps un-cropped keys unchanged\n// (backward compatible) while giving cropped files their own cache namespace, so\n// changing a file's crop invalidates its derivatives.\nconst cropSegment = (cropSignature?: string): string => {\n return cropSignature ? `${cropSignature}/` : \"\";\n};\n\nconst getOptimizedImageKeyPrefix = (key: string, cropSignature?: string): string => {\n const { filename, dirname } = parseKey(key);\n\n return `${dirname}/optimized/${cropSegment(cropSignature)}${filename}`;\n};\n\nconst getOptimizedTransformedImageKeyPrefix = (\n key: string,\n transformationsHash: string,\n cropSignature?: string\n): string => {\n const { filename, dirname } = parseKey(key);\n\n return `${dirname}/optimized/${cropSegment(cropSignature)}${transformationsHash}-${filename}`;\n};\n\ninterface Crop {\n top: number;\n left: number;\n bottom: number;\n right: number;\n}\n\n/** Short, stable signature of a crop; `undefined` for no/empty crop (so keys are unchanged). */\nconst getCropSignature = (crop?: Crop): string | undefined => {\n if (!crop || (crop.top === 0 && crop.left === 0 && crop.bottom === 0 && crop.right === 0)) {\n return undefined;\n }\n return objectHash(crop).slice(0, 16);\n};\n\ninterface GetImageKeyParams {\n key: string;\n transformations?: any;\n cropSignature?: string;\n}\n\nconst getImageKey = ({ key, transformations, cropSignature }: GetImageKeyParams): string => {\n if (!transformations) {\n return getOptimizedImageKeyPrefix(key, cropSignature);\n }\n\n return getOptimizedTransformedImageKeyPrefix(key, objectHash(transformations), cropSignature);\n};\n\n/**\n * Signature for a full framing (crop + focal + aspect ratio) used to namespace\n * cached derivatives. `undefined` when the framing is a no-op. A crop-only framing\n * intentionally hashes to the same value as `getCropSignature`, so existing\n * asset-level-crop derivatives keep their cache keys (backward compatible).\n */\nconst getFramingSignature = (framing: Framing): string | undefined => {\n const { crop, focal, aspectRatio } = framing;\n const cropped =\n !!crop && !(crop.top === 0 && crop.left === 0 && crop.bottom === 0 && crop.right === 0);\n\n if (!cropped && aspectRatio === undefined) {\n return undefined;\n }\n if (cropped && focal === undefined && aspectRatio === undefined) {\n return objectHash(crop).slice(0, 16);\n }\n return objectHash({ crop: cropped ? crop : undefined, focal, aspectRatio }).slice(0, 16);\n};\n\nexport {\n SUPPORTED_TRANSFORMABLE_IMAGES,\n getImageKey,\n getCropSignature,\n getFramingSignature,\n getOptimizedImageKeyPrefix,\n getOptimizedTransformedImageKeyPrefix\n};\n"],"names":["SUPPORTED_TRANSFORMABLE_IMAGES","parseKey","key","filename","path","dirname","cropSegment","cropSignature","getOptimizedImageKeyPrefix","getOptimizedTransformedImageKeyPrefix","transformationsHash","getCropSignature","crop","objectHash","getImageKey","transformations","getFramingSignature","framing","focal","aspectRatio","cropped","undefined"],"mappings":";;AAIA,MAAMA,iCAAiC;IAAC;IAAO;IAAQ;IAAO;CAAO;AAErE,MAAMC,WAAW,CAACC;IACd,MAAMC,WAAWC,UAAAA,QAAa,CAACF;IAC/B,MAAMG,UAAUD,UAAAA,OAAY,CAACF;IAE7B,OAAO;QAAEC;QAAUE;IAAQ;AAC/B;AAKA,MAAMC,cAAc,CAACC,gBACVA,gBAAgB,GAAGA,cAAc,CAAC,CAAC,GAAG;AAGjD,MAAMC,6BAA6B,CAACN,KAAaK;IAC7C,MAAM,EAAEJ,QAAQ,EAAEE,OAAO,EAAE,GAAGJ,SAASC;IAEvC,OAAO,GAAGG,QAAQ,WAAW,EAAEC,YAAYC,iBAAiBJ,UAAU;AAC1E;AAEA,MAAMM,wCAAwC,CAC1CP,KACAQ,qBACAH;IAEA,MAAM,EAAEJ,QAAQ,EAAEE,OAAO,EAAE,GAAGJ,SAASC;IAEvC,OAAO,GAAGG,QAAQ,WAAW,EAAEC,YAAYC,iBAAiBG,oBAAoB,CAAC,EAAEP,UAAU;AACjG;AAUA,MAAMQ,mBAAmB,CAACC;IACtB,IAAI,CAACA,QAASA,AAAa,MAAbA,KAAK,GAAG,IAAUA,AAAc,MAAdA,KAAK,IAAI,IAAUA,AAAgB,MAAhBA,KAAK,MAAM,IAAUA,AAAe,MAAfA,KAAK,KAAK,EAC9E;IAEJ,OAAOC,YAAWD,MAAM,KAAK,CAAC,GAAG;AACrC;AAQA,MAAME,cAAc,CAAC,EAAEZ,GAAG,EAAEa,eAAe,EAAER,aAAa,EAAqB;IAC3E,IAAI,CAACQ,iBACD,OAAOP,2BAA2BN,KAAKK;IAG3C,OAAOE,sCAAsCP,KAAKW,YAAWE,kBAAkBR;AACnF;AAQA,MAAMS,sBAAsB,CAACC;IACzB,MAAM,EAAEL,IAAI,EAAEM,KAAK,EAAEC,WAAW,EAAE,GAAGF;IACrC,MAAMG,UACF,CAAC,CAACR,QAAQ,CAAEA,CAAAA,AAAa,MAAbA,KAAK,GAAG,IAAUA,AAAc,MAAdA,KAAK,IAAI,IAAUA,AAAgB,MAAhBA,KAAK,MAAM,IAAUA,AAAe,MAAfA,KAAK,KAAK,AAAK;IAEzF,IAAI,CAACQ,WAAWD,AAAgBE,WAAhBF,aACZ;IAEJ,IAAIC,WAAWF,AAAUG,WAAVH,SAAuBC,AAAgBE,WAAhBF,aAClC,OAAON,YAAWD,MAAM,KAAK,CAAC,GAAG;IAErC,OAAOC,YAAW;QAAE,MAAMO,UAAUR,OAAOS;QAAWH;QAAOC;IAAY,GAAG,KAAK,CAAC,GAAG;AACzF"}
@@ -0,0 +1,4 @@
1
+ export declare const AssetDeliveryFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,38 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { WcpContext } from "@webiny/api-core/features/wcp/WcpContext/index.js";
3
+ import { AssetFactory } from "./Asset/Asset.js";
4
+ import { AssetRequestFactory } from "./AssetRequest/AssetRequest.js";
5
+ import { FilesAssetRequestResolver } from "./FilesAssetRequestResolver.js";
6
+ import { NullAssetResolver } from "./NullAssetResolver.js";
7
+ import { NullAssetOutputStrategy } from "./NullAssetOutputStrategy.js";
8
+ import { StreamAssetReply } from "./StreamAssetReply/StreamAssetReply.js";
9
+ import { ObjectKey } from "./ObjectKey/ObjectKey.js";
10
+ import { AssetProcessor } from "./abstractions/AssetProcessor.js";
11
+ import { TransformationAssetProcessor } from "./transformation/TransformationAssetProcessor.js";
12
+ import { ImageAssetType } from "./assetTypes/image/ImageAssetType.js";
13
+ import { PrivateFileAssetRequestResolver } from "./privateFiles/PrivateFileAssetRequestResolver.js";
14
+ import { PrivateAuthenticatedAuthorizer } from "./privateFiles/PrivateAuthenticatedAuthorizer.js";
15
+ import { PrivateFilesAssetProcessor } from "./privateFiles/PrivateFilesAssetProcessor.js";
16
+ const AssetDeliveryFeature = createFeature({
17
+ name: "AssetDelivery",
18
+ register (container) {
19
+ container.register(AssetFactory).inSingletonScope();
20
+ container.register(AssetRequestFactory).inSingletonScope();
21
+ container.register(FilesAssetRequestResolver).inSingletonScope();
22
+ container.register(NullAssetResolver).inSingletonScope();
23
+ container.register(NullAssetOutputStrategy).inSingletonScope();
24
+ container.register(StreamAssetReply).inSingletonScope();
25
+ container.register(ObjectKey).inSingletonScope();
26
+ container.register(ImageAssetType);
27
+ container.registerInstance(AssetProcessor, new TransformationAssetProcessor(container));
28
+ container.registerDecorator(PrivateFileAssetRequestResolver);
29
+ const wcp = container.resolve(WcpContext);
30
+ if (wcp.canUsePrivateFiles()) {
31
+ container.register(PrivateAuthenticatedAuthorizer);
32
+ container.registerDecorator(PrivateFilesAssetProcessor);
33
+ }
34
+ }
35
+ });
36
+ export { AssetDeliveryFeature };
37
+
38
+ //# sourceMappingURL=feature.js.map