@strapi/upload 5.12.1 → 5.12.2

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 (866) hide show
  1. package/dist/admin/components/AssetCard/AssetCard.js +59 -0
  2. package/dist/admin/components/AssetCard/AssetCard.js.map +1 -0
  3. package/dist/admin/components/AssetCard/AssetCard.mjs +57 -0
  4. package/dist/admin/components/AssetCard/AssetCard.mjs.map +1 -0
  5. package/dist/admin/components/AssetCard/AssetCardBase.js +130 -0
  6. package/dist/admin/components/AssetCard/AssetCardBase.js.map +1 -0
  7. package/dist/admin/components/AssetCard/AssetCardBase.mjs +128 -0
  8. package/dist/admin/components/AssetCard/AssetCardBase.mjs.map +1 -0
  9. package/dist/admin/components/AssetCard/AudioAssetCard.js +40 -0
  10. package/dist/admin/components/AssetCard/AudioAssetCard.js.map +1 -0
  11. package/dist/admin/components/AssetCard/AudioAssetCard.mjs +38 -0
  12. package/dist/admin/components/AssetCard/AudioAssetCard.mjs.map +1 -0
  13. package/dist/admin/components/AssetCard/AudioPreview.js +17 -0
  14. package/dist/admin/components/AssetCard/AudioPreview.js.map +1 -0
  15. package/dist/admin/components/AssetCard/AudioPreview.mjs +15 -0
  16. package/dist/admin/components/AssetCard/AudioPreview.mjs.map +1 -0
  17. package/dist/admin/components/AssetCard/DocAssetCard.js +61 -0
  18. package/dist/admin/components/AssetCard/DocAssetCard.js.map +1 -0
  19. package/dist/admin/components/AssetCard/DocAssetCard.mjs +59 -0
  20. package/dist/admin/components/AssetCard/DocAssetCard.mjs.map +1 -0
  21. package/dist/admin/components/AssetCard/ImageAssetCard.js +37 -0
  22. package/dist/admin/components/AssetCard/ImageAssetCard.js.map +1 -0
  23. package/dist/admin/components/AssetCard/ImageAssetCard.mjs +35 -0
  24. package/dist/admin/components/AssetCard/ImageAssetCard.mjs.map +1 -0
  25. package/dist/admin/components/AssetCard/UploadingAssetCard.js +152 -0
  26. package/dist/admin/components/AssetCard/UploadingAssetCard.js.map +1 -0
  27. package/dist/admin/components/AssetCard/UploadingAssetCard.mjs +131 -0
  28. package/dist/admin/components/AssetCard/UploadingAssetCard.mjs.map +1 -0
  29. package/dist/admin/components/AssetCard/VideoAssetCard.js +72 -0
  30. package/dist/admin/components/AssetCard/VideoAssetCard.js.map +1 -0
  31. package/dist/admin/components/AssetCard/VideoAssetCard.mjs +51 -0
  32. package/dist/admin/components/AssetCard/VideoAssetCard.mjs.map +1 -0
  33. package/dist/admin/components/AssetCard/VideoPreview.js +50 -0
  34. package/dist/admin/components/AssetCard/VideoPreview.js.map +1 -0
  35. package/dist/admin/components/AssetCard/VideoPreview.mjs +48 -0
  36. package/dist/admin/components/AssetCard/VideoPreview.mjs.map +1 -0
  37. package/dist/admin/components/AssetDialog/AssetDialog.js +321 -0
  38. package/dist/admin/components/AssetDialog/AssetDialog.js.map +1 -0
  39. package/dist/admin/components/AssetDialog/AssetDialog.mjs +299 -0
  40. package/dist/admin/components/AssetDialog/AssetDialog.mjs.map +1 -0
  41. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js +313 -0
  42. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js.map +1 -0
  43. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs +311 -0
  44. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs.map +1 -0
  45. package/dist/admin/components/AssetDialog/BrowseStep/Filters.js +70 -0
  46. package/dist/admin/components/AssetDialog/BrowseStep/Filters.js.map +1 -0
  47. package/dist/admin/components/AssetDialog/BrowseStep/Filters.mjs +49 -0
  48. package/dist/admin/components/AssetDialog/BrowseStep/Filters.mjs.map +1 -0
  49. package/dist/admin/components/AssetDialog/BrowseStep/PageSize.js +58 -0
  50. package/dist/admin/components/AssetDialog/BrowseStep/PageSize.js.map +1 -0
  51. package/dist/admin/components/AssetDialog/BrowseStep/PageSize.mjs +56 -0
  52. package/dist/admin/components/AssetDialog/BrowseStep/PageSize.mjs.map +1 -0
  53. package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.js +55 -0
  54. package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.js.map +1 -0
  55. package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.mjs +33 -0
  56. package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.mjs.map +1 -0
  57. package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.js +378 -0
  58. package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.js.map +1 -0
  59. package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.mjs +376 -0
  60. package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.mjs.map +1 -0
  61. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js +102 -0
  62. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js.map +1 -0
  63. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs +81 -0
  64. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs.map +1 -0
  65. package/dist/admin/components/AssetDialog/BrowseStep/utils/isSelectable.js +14 -0
  66. package/dist/admin/components/AssetDialog/BrowseStep/utils/isSelectable.js.map +1 -0
  67. package/dist/admin/components/AssetDialog/BrowseStep/utils/isSelectable.mjs +12 -0
  68. package/dist/admin/components/AssetDialog/BrowseStep/utils/isSelectable.mjs.map +1 -0
  69. package/dist/admin/components/AssetDialog/DialogFooter.js +31 -0
  70. package/dist/admin/components/AssetDialog/DialogFooter.js.map +1 -0
  71. package/dist/admin/components/AssetDialog/DialogFooter.mjs +29 -0
  72. package/dist/admin/components/AssetDialog/DialogFooter.mjs.map +1 -0
  73. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.js +60 -0
  74. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.js.map +1 -0
  75. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.mjs +58 -0
  76. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.mjs.map +1 -0
  77. package/dist/admin/components/AssetGridList/AssetGridList.js +72 -0
  78. package/dist/admin/components/AssetGridList/AssetGridList.js.map +1 -0
  79. package/dist/admin/components/AssetGridList/AssetGridList.mjs +70 -0
  80. package/dist/admin/components/AssetGridList/AssetGridList.mjs.map +1 -0
  81. package/dist/admin/components/AssetGridList/Draggable.js +65 -0
  82. package/dist/admin/components/AssetGridList/Draggable.js.map +1 -0
  83. package/dist/admin/components/AssetGridList/Draggable.mjs +44 -0
  84. package/dist/admin/components/AssetGridList/Draggable.mjs.map +1 -0
  85. package/dist/admin/components/Breadcrumbs/Breadcrumbs.js +49 -0
  86. package/dist/admin/components/Breadcrumbs/Breadcrumbs.js.map +1 -0
  87. package/dist/admin/components/Breadcrumbs/Breadcrumbs.mjs +47 -0
  88. package/dist/admin/components/Breadcrumbs/Breadcrumbs.mjs.map +1 -0
  89. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js +89 -0
  90. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js.map +1 -0
  91. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs +68 -0
  92. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs.map +1 -0
  93. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js +154 -0
  94. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js.map +1 -0
  95. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs +152 -0
  96. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs.map +1 -0
  97. package/dist/admin/components/ContextInfo/ContextInfo.js +44 -0
  98. package/dist/admin/components/ContextInfo/ContextInfo.js.map +1 -0
  99. package/dist/admin/components/ContextInfo/ContextInfo.mjs +42 -0
  100. package/dist/admin/components/ContextInfo/ContextInfo.mjs.map +1 -0
  101. package/dist/admin/components/CopyLinkButton/CopyLinkButton.js +43 -0
  102. package/dist/admin/components/CopyLinkButton/CopyLinkButton.js.map +1 -0
  103. package/dist/admin/components/CopyLinkButton/CopyLinkButton.mjs +41 -0
  104. package/dist/admin/components/CopyLinkButton/CopyLinkButton.mjs.map +1 -0
  105. package/dist/admin/components/EditAssetDialog/DialogHeader.js +20 -0
  106. package/dist/admin/components/EditAssetDialog/DialogHeader.js.map +1 -0
  107. package/dist/admin/components/EditAssetDialog/DialogHeader.mjs +18 -0
  108. package/dist/admin/components/EditAssetDialog/DialogHeader.mjs.map +1 -0
  109. package/dist/admin/components/EditAssetDialog/EditAssetContent.js +403 -0
  110. package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -0
  111. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +380 -0
  112. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -0
  113. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js +127 -0
  114. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +1 -0
  115. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs +106 -0
  116. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs.map +1 -0
  117. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.js +111 -0
  118. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.js.map +1 -0
  119. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.mjs +109 -0
  120. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.mjs.map +1 -0
  121. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js +260 -0
  122. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +1 -0
  123. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs +239 -0
  124. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs.map +1 -0
  125. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.js +75 -0
  126. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.js.map +1 -0
  127. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.mjs +68 -0
  128. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.mjs.map +1 -0
  129. package/dist/admin/components/EditAssetDialog/RemoveAssetDialog.js +27 -0
  130. package/dist/admin/components/EditAssetDialog/RemoveAssetDialog.js.map +1 -0
  131. package/dist/admin/components/EditAssetDialog/RemoveAssetDialog.mjs +25 -0
  132. package/dist/admin/components/EditAssetDialog/RemoveAssetDialog.mjs.map +1 -0
  133. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js +79 -0
  134. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js.map +1 -0
  135. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs +58 -0
  136. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs.map +1 -0
  137. package/dist/admin/components/EditFolderDialog/EditFolderDialog.js +336 -0
  138. package/dist/admin/components/EditFolderDialog/EditFolderDialog.js.map +1 -0
  139. package/dist/admin/components/EditFolderDialog/EditFolderDialog.mjs +313 -0
  140. package/dist/admin/components/EditFolderDialog/EditFolderDialog.mjs.map +1 -0
  141. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.js +29 -0
  142. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.js.map +1 -0
  143. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.mjs +27 -0
  144. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.mjs.map +1 -0
  145. package/dist/admin/components/EditFolderDialog/RemoveFolderDialog.js +18 -0
  146. package/dist/admin/components/EditFolderDialog/RemoveFolderDialog.js.map +1 -0
  147. package/dist/admin/components/EditFolderDialog/RemoveFolderDialog.mjs +16 -0
  148. package/dist/admin/components/EditFolderDialog/RemoveFolderDialog.mjs.map +1 -0
  149. package/dist/admin/components/EmptyAssets/EmptyAssetGrid.js +31 -0
  150. package/dist/admin/components/EmptyAssets/EmptyAssetGrid.js.map +1 -0
  151. package/dist/admin/components/EmptyAssets/EmptyAssetGrid.mjs +29 -0
  152. package/dist/admin/components/EmptyAssets/EmptyAssetGrid.mjs.map +1 -0
  153. package/dist/admin/components/EmptyAssets/EmptyAssets.js +53 -0
  154. package/dist/admin/components/EmptyAssets/EmptyAssets.js.map +1 -0
  155. package/dist/admin/components/EmptyAssets/EmptyAssets.mjs +51 -0
  156. package/dist/admin/components/EmptyAssets/EmptyAssets.mjs.map +1 -0
  157. package/dist/admin/components/FilterList/FilterList.js +74 -0
  158. package/dist/admin/components/FilterList/FilterList.js.map +1 -0
  159. package/dist/admin/components/FilterList/FilterList.mjs +72 -0
  160. package/dist/admin/components/FilterList/FilterList.mjs.map +1 -0
  161. package/dist/admin/components/FilterList/FilterTag.js +50 -0
  162. package/dist/admin/components/FilterList/FilterTag.js.map +1 -0
  163. package/dist/admin/components/FilterList/FilterTag.mjs +48 -0
  164. package/dist/admin/components/FilterList/FilterTag.mjs.map +1 -0
  165. package/dist/admin/components/FilterPopover/FilterPopover.js +275 -0
  166. package/dist/admin/components/FilterPopover/FilterPopover.js.map +1 -0
  167. package/dist/admin/components/FilterPopover/FilterPopover.mjs +254 -0
  168. package/dist/admin/components/FilterPopover/FilterPopover.mjs.map +1 -0
  169. package/dist/admin/components/FilterPopover/FilterValueInput.js +39 -0
  170. package/dist/admin/components/FilterPopover/FilterValueInput.js.map +1 -0
  171. package/dist/admin/components/FilterPopover/FilterValueInput.mjs +37 -0
  172. package/dist/admin/components/FilterPopover/FilterValueInput.mjs.map +1 -0
  173. package/dist/admin/components/FilterPopover/utils/getFilterList.js +114 -0
  174. package/dist/admin/components/FilterPopover/utils/getFilterList.js.map +1 -0
  175. package/dist/admin/components/FilterPopover/utils/getFilterList.mjs +112 -0
  176. package/dist/admin/components/FilterPopover/utils/getFilterList.mjs.map +1 -0
  177. package/dist/admin/components/FolderCard/FolderCard/FolderCard.js +125 -0
  178. package/dist/admin/components/FolderCard/FolderCard/FolderCard.js.map +1 -0
  179. package/dist/admin/components/FolderCard/FolderCard/FolderCard.mjs +104 -0
  180. package/dist/admin/components/FolderCard/FolderCard/FolderCard.mjs.map +1 -0
  181. package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.js +26 -0
  182. package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.js.map +1 -0
  183. package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.mjs +24 -0
  184. package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.mjs.map +1 -0
  185. package/dist/admin/components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.js +40 -0
  186. package/dist/admin/components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.js.map +1 -0
  187. package/dist/admin/components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.mjs +38 -0
  188. package/dist/admin/components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.mjs.map +1 -0
  189. package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js +20 -0
  190. package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js.map +1 -0
  191. package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.mjs +18 -0
  192. package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.mjs.map +1 -0
  193. package/dist/admin/components/FolderCard/contexts/FolderCard.js +12 -0
  194. package/dist/admin/components/FolderCard/contexts/FolderCard.js.map +1 -0
  195. package/dist/admin/components/FolderCard/contexts/FolderCard.mjs +9 -0
  196. package/dist/admin/components/FolderCard/contexts/FolderCard.mjs.map +1 -0
  197. package/dist/admin/components/FolderGridList/FolderGridList.js +29 -0
  198. package/dist/admin/components/FolderGridList/FolderGridList.js.map +1 -0
  199. package/dist/admin/components/FolderGridList/FolderGridList.mjs +27 -0
  200. package/dist/admin/components/FolderGridList/FolderGridList.mjs.map +1 -0
  201. package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.js +71 -0
  202. package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.js.map +1 -0
  203. package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.mjs +50 -0
  204. package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.mjs.map +1 -0
  205. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js +78 -0
  206. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js.map +1 -0
  207. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs +76 -0
  208. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs.map +1 -0
  209. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.js +52 -0
  210. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.js.map +1 -0
  211. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs +50 -0
  212. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs.map +1 -0
  213. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js +112 -0
  214. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js.map +1 -0
  215. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs +91 -0
  216. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs.map +1 -0
  217. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js +116 -0
  218. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js.map +1 -0
  219. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs +95 -0
  220. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs.map +1 -0
  221. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js +216 -0
  222. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -0
  223. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +195 -0
  224. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -0
  225. package/dist/admin/components/SelectTree/Option.js +70 -0
  226. package/dist/admin/components/SelectTree/Option.js.map +1 -0
  227. package/dist/admin/components/SelectTree/Option.mjs +68 -0
  228. package/dist/admin/components/SelectTree/Option.mjs.map +1 -0
  229. package/dist/admin/components/SelectTree/SelectTree.js +276 -0
  230. package/dist/admin/components/SelectTree/SelectTree.js.map +1 -0
  231. package/dist/admin/components/SelectTree/SelectTree.mjs +255 -0
  232. package/dist/admin/components/SelectTree/SelectTree.mjs.map +1 -0
  233. package/dist/admin/components/SelectTree/utils/flattenTree.js +19 -0
  234. package/dist/admin/components/SelectTree/utils/flattenTree.js.map +1 -0
  235. package/dist/admin/components/SelectTree/utils/flattenTree.mjs +17 -0
  236. package/dist/admin/components/SelectTree/utils/flattenTree.mjs.map +1 -0
  237. package/dist/admin/components/SelectTree/utils/getOpenValues.js +24 -0
  238. package/dist/admin/components/SelectTree/utils/getOpenValues.js.map +1 -0
  239. package/dist/admin/components/SelectTree/utils/getOpenValues.mjs +22 -0
  240. package/dist/admin/components/SelectTree/utils/getOpenValues.mjs.map +1 -0
  241. package/dist/admin/components/SelectTree/utils/getValuesToClose.js +12 -0
  242. package/dist/admin/components/SelectTree/utils/getValuesToClose.js.map +1 -0
  243. package/dist/admin/components/SelectTree/utils/getValuesToClose.mjs +10 -0
  244. package/dist/admin/components/SelectTree/utils/getValuesToClose.mjs.map +1 -0
  245. package/dist/admin/components/SortPicker/SortPicker.js +39 -0
  246. package/dist/admin/components/SortPicker/SortPicker.js.map +1 -0
  247. package/dist/admin/components/SortPicker/SortPicker.mjs +37 -0
  248. package/dist/admin/components/SortPicker/SortPicker.mjs.map +1 -0
  249. package/dist/admin/components/TableList/CellContent.js +76 -0
  250. package/dist/admin/components/TableList/CellContent.js.map +1 -0
  251. package/dist/admin/components/TableList/CellContent.mjs +74 -0
  252. package/dist/admin/components/TableList/CellContent.mjs.map +1 -0
  253. package/dist/admin/components/TableList/PreviewCell.js +82 -0
  254. package/dist/admin/components/TableList/PreviewCell.js.map +1 -0
  255. package/dist/admin/components/TableList/PreviewCell.mjs +80 -0
  256. package/dist/admin/components/TableList/PreviewCell.mjs.map +1 -0
  257. package/dist/admin/components/TableList/TableList.js +99 -0
  258. package/dist/admin/components/TableList/TableList.js.map +1 -0
  259. package/dist/admin/components/TableList/TableList.mjs +97 -0
  260. package/dist/admin/components/TableList/TableList.mjs.map +1 -0
  261. package/dist/admin/components/TableList/TableRows.js +101 -0
  262. package/dist/admin/components/TableList/TableRows.js.map +1 -0
  263. package/dist/admin/components/TableList/TableRows.mjs +99 -0
  264. package/dist/admin/components/TableList/TableRows.mjs.map +1 -0
  265. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js +84 -0
  266. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js.map +1 -0
  267. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs +82 -0
  268. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs.map +1 -0
  269. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js +203 -0
  270. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js.map +1 -0
  271. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs +182 -0
  272. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs.map +1 -0
  273. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js +127 -0
  274. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js.map +1 -0
  275. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs +106 -0
  276. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs.map +1 -0
  277. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js +206 -0
  278. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js.map +1 -0
  279. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs +185 -0
  280. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs.map +1 -0
  281. package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.js +129 -0
  282. package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.js.map +1 -0
  283. package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.mjs +108 -0
  284. package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.mjs.map +1 -0
  285. package/dist/admin/components/UploadProgress/UploadProgress.js +88 -0
  286. package/dist/admin/components/UploadProgress/UploadProgress.js.map +1 -0
  287. package/dist/admin/components/UploadProgress/UploadProgress.mjs +86 -0
  288. package/dist/admin/components/UploadProgress/UploadProgress.mjs.map +1 -0
  289. package/dist/admin/constants.js +205 -0
  290. package/dist/admin/constants.js.map +1 -0
  291. package/dist/admin/constants.mjs +198 -0
  292. package/dist/admin/constants.mjs.map +1 -0
  293. package/dist/admin/hooks/useAssets.js +124 -0
  294. package/dist/admin/hooks/useAssets.js.map +1 -0
  295. package/dist/admin/hooks/useAssets.mjs +103 -0
  296. package/dist/admin/hooks/useAssets.mjs.map +1 -0
  297. package/dist/admin/hooks/useBulkMove.js +79 -0
  298. package/dist/admin/hooks/useBulkMove.js.map +1 -0
  299. package/dist/admin/hooks/useBulkMove.mjs +77 -0
  300. package/dist/admin/hooks/useBulkMove.mjs.map +1 -0
  301. package/dist/admin/hooks/useBulkRemove.js +79 -0
  302. package/dist/admin/hooks/useBulkRemove.js.map +1 -0
  303. package/dist/admin/hooks/useBulkRemove.mjs +77 -0
  304. package/dist/admin/hooks/useBulkRemove.mjs.map +1 -0
  305. package/dist/admin/hooks/useConfig.js +57 -0
  306. package/dist/admin/hooks/useConfig.js.map +1 -0
  307. package/dist/admin/hooks/useConfig.mjs +55 -0
  308. package/dist/admin/hooks/useConfig.mjs.map +1 -0
  309. package/dist/admin/hooks/useCropImg.js +96 -0
  310. package/dist/admin/hooks/useCropImg.js.map +1 -0
  311. package/dist/admin/hooks/useCropImg.mjs +75 -0
  312. package/dist/admin/hooks/useCropImg.mjs.map +1 -0
  313. package/dist/admin/hooks/useEditAsset.js +114 -0
  314. package/dist/admin/hooks/useEditAsset.js.map +1 -0
  315. package/dist/admin/hooks/useEditAsset.mjs +93 -0
  316. package/dist/admin/hooks/useEditAsset.mjs.map +1 -0
  317. package/dist/admin/hooks/useEditFolder.js +44 -0
  318. package/dist/admin/hooks/useEditFolder.js.map +1 -0
  319. package/dist/admin/hooks/useEditFolder.mjs +42 -0
  320. package/dist/admin/hooks/useEditFolder.mjs.map +1 -0
  321. package/dist/admin/hooks/useFolder.js +58 -0
  322. package/dist/admin/hooks/useFolder.js.map +1 -0
  323. package/dist/admin/hooks/useFolder.mjs +56 -0
  324. package/dist/admin/hooks/useFolder.mjs.map +1 -0
  325. package/dist/admin/hooks/useFolderStructure.js +53 -0
  326. package/dist/admin/hooks/useFolderStructure.js.map +1 -0
  327. package/dist/admin/hooks/useFolderStructure.mjs +51 -0
  328. package/dist/admin/hooks/useFolderStructure.mjs.map +1 -0
  329. package/dist/admin/hooks/useFolders.js +107 -0
  330. package/dist/admin/hooks/useFolders.js.map +1 -0
  331. package/dist/admin/hooks/useFolders.mjs +86 -0
  332. package/dist/admin/hooks/useFolders.mjs.map +1 -0
  333. package/dist/admin/hooks/useMediaLibraryPermissions.js +16 -0
  334. package/dist/admin/hooks/useMediaLibraryPermissions.js.map +1 -0
  335. package/dist/admin/hooks/useMediaLibraryPermissions.mjs +14 -0
  336. package/dist/admin/hooks/useMediaLibraryPermissions.mjs.map +1 -0
  337. package/dist/admin/hooks/useModalQueryParams.js +138 -0
  338. package/dist/admin/hooks/useModalQueryParams.js.map +1 -0
  339. package/dist/admin/hooks/useModalQueryParams.mjs +117 -0
  340. package/dist/admin/hooks/useModalQueryParams.mjs.map +1 -0
  341. package/dist/admin/hooks/usePersistentState.js +31 -0
  342. package/dist/admin/hooks/usePersistentState.js.map +1 -0
  343. package/dist/admin/hooks/usePersistentState.mjs +29 -0
  344. package/dist/admin/hooks/usePersistentState.mjs.map +1 -0
  345. package/dist/admin/hooks/useRemoveAsset.js +53 -0
  346. package/dist/admin/hooks/useRemoveAsset.js.map +1 -0
  347. package/dist/admin/hooks/useRemoveAsset.mjs +51 -0
  348. package/dist/admin/hooks/useRemoveAsset.mjs.map +1 -0
  349. package/dist/admin/hooks/useSelectionState.js +85 -0
  350. package/dist/admin/hooks/useSelectionState.js.map +1 -0
  351. package/dist/admin/hooks/useSelectionState.mjs +64 -0
  352. package/dist/admin/hooks/useSelectionState.mjs.map +1 -0
  353. package/dist/admin/hooks/useUpload.js +86 -0
  354. package/dist/admin/hooks/useUpload.js.map +1 -0
  355. package/dist/admin/hooks/useUpload.mjs +65 -0
  356. package/dist/admin/hooks/useUpload.mjs.map +1 -0
  357. package/dist/admin/hooks/utils/renameKeys.js +12 -0
  358. package/dist/admin/hooks/utils/renameKeys.js.map +1 -0
  359. package/dist/admin/hooks/utils/renameKeys.mjs +10 -0
  360. package/dist/admin/hooks/utils/renameKeys.mjs.map +1 -0
  361. package/dist/admin/index.js +104 -22
  362. package/dist/admin/index.js.map +1 -1
  363. package/dist/admin/index.mjs +105 -21
  364. package/dist/admin/index.mjs.map +1 -1
  365. package/dist/admin/package.json.js +161 -0
  366. package/dist/admin/package.json.js.map +1 -0
  367. package/dist/admin/package.json.mjs +143 -0
  368. package/dist/admin/package.json.mjs.map +1 -0
  369. package/dist/admin/pages/App/App.js +94 -0
  370. package/dist/admin/pages/App/App.js.map +1 -0
  371. package/dist/admin/pages/App/App.mjs +73 -0
  372. package/dist/admin/pages/App/App.mjs.map +1 -0
  373. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js +142 -0
  374. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -0
  375. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs +121 -0
  376. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -0
  377. package/dist/admin/pages/App/ConfigureTheView/components/Settings.js +108 -0
  378. package/dist/admin/pages/App/ConfigureTheView/components/Settings.js.map +1 -0
  379. package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs +106 -0
  380. package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs.map +1 -0
  381. package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.js +10 -0
  382. package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.js.map +1 -0
  383. package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.mjs +7 -0
  384. package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.mjs.map +1 -0
  385. package/dist/admin/pages/App/ConfigureTheView/state/actions.js +16 -0
  386. package/dist/admin/pages/App/ConfigureTheView/state/actions.js.map +1 -0
  387. package/dist/admin/pages/App/ConfigureTheView/state/actions.mjs +13 -0
  388. package/dist/admin/pages/App/ConfigureTheView/state/actions.mjs.map +1 -0
  389. package/dist/admin/pages/App/ConfigureTheView/state/init.js +17 -0
  390. package/dist/admin/pages/App/ConfigureTheView/state/init.js.map +1 -0
  391. package/dist/admin/pages/App/ConfigureTheView/state/init.mjs +14 -0
  392. package/dist/admin/pages/App/ConfigureTheView/state/init.mjs.map +1 -0
  393. package/dist/admin/pages/App/ConfigureTheView/state/reducer.js +40 -0
  394. package/dist/admin/pages/App/ConfigureTheView/state/reducer.js.map +1 -0
  395. package/dist/admin/pages/App/ConfigureTheView/state/reducer.mjs +38 -0
  396. package/dist/admin/pages/App/ConfigureTheView/state/reducer.mjs.map +1 -0
  397. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js +453 -0
  398. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js.map +1 -0
  399. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs +432 -0
  400. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs.map +1 -0
  401. package/dist/admin/pages/App/MediaLibrary/components/BulkActions.js +49 -0
  402. package/dist/admin/pages/App/MediaLibrary/components/BulkActions.js.map +1 -0
  403. package/dist/admin/pages/App/MediaLibrary/components/BulkActions.mjs +47 -0
  404. package/dist/admin/pages/App/MediaLibrary/components/BulkActions.mjs.map +1 -0
  405. package/dist/admin/pages/App/MediaLibrary/components/BulkDeleteButton.js +38 -0
  406. package/dist/admin/pages/App/MediaLibrary/components/BulkDeleteButton.js.map +1 -0
  407. package/dist/admin/pages/App/MediaLibrary/components/BulkDeleteButton.mjs +36 -0
  408. package/dist/admin/pages/App/MediaLibrary/components/BulkDeleteButton.mjs.map +1 -0
  409. package/dist/admin/pages/App/MediaLibrary/components/BulkMoveButton.js +61 -0
  410. package/dist/admin/pages/App/MediaLibrary/components/BulkMoveButton.js.map +1 -0
  411. package/dist/admin/pages/App/MediaLibrary/components/BulkMoveButton.mjs +40 -0
  412. package/dist/admin/pages/App/MediaLibrary/components/BulkMoveButton.mjs.map +1 -0
  413. package/dist/admin/pages/App/MediaLibrary/components/EmptyOrNoPermissions.js +66 -0
  414. package/dist/admin/pages/App/MediaLibrary/components/EmptyOrNoPermissions.js.map +1 -0
  415. package/dist/admin/pages/App/MediaLibrary/components/EmptyOrNoPermissions.mjs +64 -0
  416. package/dist/admin/pages/App/MediaLibrary/components/EmptyOrNoPermissions.mjs.map +1 -0
  417. package/dist/admin/pages/App/MediaLibrary/components/Filters.js +94 -0
  418. package/dist/admin/pages/App/MediaLibrary/components/Filters.js.map +1 -0
  419. package/dist/admin/pages/App/MediaLibrary/components/Filters.mjs +73 -0
  420. package/dist/admin/pages/App/MediaLibrary/components/Filters.mjs.map +1 -0
  421. package/dist/admin/pages/App/MediaLibrary/components/Header.js +76 -0
  422. package/dist/admin/pages/App/MediaLibrary/components/Header.js.map +1 -0
  423. package/dist/admin/pages/App/MediaLibrary/components/Header.mjs +74 -0
  424. package/dist/admin/pages/App/MediaLibrary/components/Header.mjs.map +1 -0
  425. package/dist/admin/{chunks/SettingsPage-DcdF16oj.js → pages/SettingsPage/SettingsPage.js} +18 -67
  426. package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -0
  427. package/dist/admin/{chunks/SettingsPage-kY2dZHnP.mjs → pages/SettingsPage/SettingsPage.mjs} +6 -55
  428. package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -0
  429. package/dist/admin/pages/SettingsPage/init.js +8 -0
  430. package/dist/admin/pages/SettingsPage/init.js.map +1 -0
  431. package/dist/admin/pages/SettingsPage/init.mjs +6 -0
  432. package/dist/admin/pages/SettingsPage/init.mjs.map +1 -0
  433. package/dist/admin/pages/SettingsPage/reducer.js +43 -0
  434. package/dist/admin/pages/SettingsPage/reducer.js.map +1 -0
  435. package/dist/admin/pages/SettingsPage/reducer.mjs +40 -0
  436. package/dist/admin/pages/SettingsPage/reducer.mjs.map +1 -0
  437. package/dist/admin/pluginId.js +8 -0
  438. package/dist/admin/pluginId.js.map +1 -0
  439. package/dist/admin/pluginId.mjs +6 -0
  440. package/dist/admin/pluginId.mjs.map +1 -0
  441. package/dist/admin/{chunks/ca-pCOhKIn8.js → translations/ca.json.js} +2 -2
  442. package/dist/admin/translations/ca.json.js.map +1 -0
  443. package/dist/admin/{chunks/ca-Bi4qskZD.mjs → translations/ca.json.mjs} +1 -1
  444. package/dist/admin/translations/ca.json.mjs.map +1 -0
  445. package/dist/admin/{chunks/de-DUjKLmOP.js → translations/de.json.js} +2 -2
  446. package/dist/admin/translations/de.json.js.map +1 -0
  447. package/dist/admin/{chunks/de-BlbX8Dl_.mjs → translations/de.json.mjs} +1 -1
  448. package/dist/admin/translations/de.json.mjs.map +1 -0
  449. package/dist/admin/{chunks/dk-DSsspA0e.js → translations/dk.json.js} +2 -2
  450. package/dist/admin/translations/dk.json.js.map +1 -0
  451. package/dist/admin/{chunks/dk-C2ydE6A7.mjs → translations/dk.json.mjs} +1 -1
  452. package/dist/admin/translations/dk.json.mjs.map +1 -0
  453. package/dist/admin/{chunks/en-UjETkewz.js → translations/en.json.js} +2 -2
  454. package/dist/admin/translations/en.json.js.map +1 -0
  455. package/dist/admin/{chunks/en-Bw_Cb2IV.mjs → translations/en.json.mjs} +1 -1
  456. package/dist/admin/translations/en.json.mjs.map +1 -0
  457. package/dist/admin/{chunks/es-qAL8YcZz.js → translations/es.json.js} +2 -2
  458. package/dist/admin/translations/es.json.js.map +1 -0
  459. package/dist/admin/{chunks/es-CiEgbw0k.mjs → translations/es.json.mjs} +1 -1
  460. package/dist/admin/translations/es.json.mjs.map +1 -0
  461. package/dist/admin/{chunks/fr-BL0Uyj6j.js → translations/fr.json.js} +2 -2
  462. package/dist/admin/translations/fr.json.js.map +1 -0
  463. package/dist/admin/{chunks/fr-CwRt2FJu.mjs → translations/fr.json.mjs} +1 -1
  464. package/dist/admin/translations/fr.json.mjs.map +1 -0
  465. package/dist/admin/{chunks/he-BAmhVpfZ.js → translations/he.json.js} +2 -2
  466. package/dist/admin/translations/he.json.js.map +1 -0
  467. package/dist/admin/{chunks/he-DdpYNQdt.mjs → translations/he.json.mjs} +1 -1
  468. package/dist/admin/translations/he.json.mjs.map +1 -0
  469. package/dist/admin/{chunks/it-_NQZYepl.js → translations/it.json.js} +2 -2
  470. package/dist/admin/translations/it.json.js.map +1 -0
  471. package/dist/admin/{chunks/it-Be4kgSNB.mjs → translations/it.json.mjs} +1 -1
  472. package/dist/admin/translations/it.json.mjs.map +1 -0
  473. package/dist/admin/{chunks/ja-B75QiyXf.js → translations/ja.json.js} +2 -2
  474. package/dist/admin/translations/ja.json.js.map +1 -0
  475. package/dist/admin/{chunks/ja-U1NhT0bU.mjs → translations/ja.json.mjs} +1 -1
  476. package/dist/admin/translations/ja.json.mjs.map +1 -0
  477. package/dist/admin/{chunks/ko-BOvUcJqv.js → translations/ko.json.js} +2 -2
  478. package/dist/admin/translations/ko.json.js.map +1 -0
  479. package/dist/admin/{chunks/ko-BciqXefq.mjs → translations/ko.json.mjs} +1 -1
  480. package/dist/admin/translations/ko.json.mjs.map +1 -0
  481. package/dist/admin/{chunks/ms-B7Zl6Lm9.js → translations/ms.json.js} +2 -2
  482. package/dist/admin/translations/ms.json.js.map +1 -0
  483. package/dist/admin/{chunks/ms-D-8McNeg.mjs → translations/ms.json.mjs} +1 -1
  484. package/dist/admin/translations/ms.json.mjs.map +1 -0
  485. package/dist/admin/{chunks/pl-cYDYHOEf.js → translations/pl.json.js} +2 -2
  486. package/dist/admin/translations/pl.json.js.map +1 -0
  487. package/dist/admin/{chunks/pl-DdUYocl5.mjs → translations/pl.json.mjs} +1 -1
  488. package/dist/admin/translations/pl.json.mjs.map +1 -0
  489. package/dist/admin/{chunks/pt-BR-D1u_azCM.js → translations/pt-BR.json.js} +2 -2
  490. package/dist/admin/translations/pt-BR.json.js.map +1 -0
  491. package/dist/admin/{chunks/pt-BR-Demjoq41.mjs → translations/pt-BR.json.mjs} +1 -1
  492. package/dist/admin/translations/pt-BR.json.mjs.map +1 -0
  493. package/dist/admin/{chunks/pt-L2DZeTPL.js → translations/pt.json.js} +2 -2
  494. package/dist/admin/translations/pt.json.js.map +1 -0
  495. package/dist/admin/{chunks/pt-D8is2LpS.mjs → translations/pt.json.mjs} +1 -1
  496. package/dist/admin/translations/pt.json.mjs.map +1 -0
  497. package/dist/admin/{chunks/ru-Uxbk_WWv.js → translations/ru.json.js} +2 -2
  498. package/dist/admin/translations/ru.json.js.map +1 -0
  499. package/dist/admin/{chunks/ru-CGgHRTey.mjs → translations/ru.json.mjs} +1 -1
  500. package/dist/admin/translations/ru.json.mjs.map +1 -0
  501. package/dist/admin/{chunks/sk-BlLP5HAX.js → translations/sk.json.js} +2 -2
  502. package/dist/admin/translations/sk.json.js.map +1 -0
  503. package/dist/admin/{chunks/sk-xtSwaPXq.mjs → translations/sk.json.mjs} +1 -1
  504. package/dist/admin/translations/sk.json.mjs.map +1 -0
  505. package/dist/admin/{chunks/th-DNxPLegS.js → translations/th.json.js} +2 -2
  506. package/dist/admin/translations/th.json.js.map +1 -0
  507. package/dist/admin/{chunks/th-BOpLVfmg.mjs → translations/th.json.mjs} +1 -1
  508. package/dist/admin/translations/th.json.mjs.map +1 -0
  509. package/dist/admin/{chunks/tr-DWgXG75k.js → translations/tr.json.js} +2 -2
  510. package/dist/admin/translations/tr.json.js.map +1 -0
  511. package/dist/admin/{chunks/tr-BmAPh-f1.mjs → translations/tr.json.mjs} +1 -1
  512. package/dist/admin/translations/tr.json.mjs.map +1 -0
  513. package/dist/admin/{chunks/uk-Cfm1dM3v.js → translations/uk.json.js} +2 -2
  514. package/dist/admin/translations/uk.json.js.map +1 -0
  515. package/dist/admin/{chunks/uk-DPZD6U8g.mjs → translations/uk.json.mjs} +1 -1
  516. package/dist/admin/translations/uk.json.mjs.map +1 -0
  517. package/dist/admin/{chunks/zh-Hans-B8qxMQIl.js → translations/zh-Hans.json.js} +2 -2
  518. package/dist/admin/{chunks/ca-Bi4qskZD.mjs.map → translations/zh-Hans.json.js.map} +1 -1
  519. package/dist/admin/{chunks/zh-Hans-B1GabBRx.mjs → translations/zh-Hans.json.mjs} +1 -1
  520. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  521. package/dist/admin/{chunks/zh-MemsyMV6.js → translations/zh.json.js} +2 -2
  522. package/dist/admin/translations/zh.json.js.map +1 -0
  523. package/dist/admin/{chunks/zh-BIl0qgBy.mjs → translations/zh.json.mjs} +1 -1
  524. package/dist/admin/translations/zh.json.mjs.map +1 -0
  525. package/dist/admin/utils/appendSearchParamsToUrl.js +17 -0
  526. package/dist/admin/utils/appendSearchParamsToUrl.js.map +1 -0
  527. package/dist/admin/utils/appendSearchParamsToUrl.mjs +15 -0
  528. package/dist/admin/utils/appendSearchParamsToUrl.mjs.map +1 -0
  529. package/dist/admin/utils/containsAssetFilter.js +18 -0
  530. package/dist/admin/utils/containsAssetFilter.js.map +1 -0
  531. package/dist/admin/utils/containsAssetFilter.mjs +16 -0
  532. package/dist/admin/utils/containsAssetFilter.mjs.map +1 -0
  533. package/dist/admin/utils/createAssetUrl.js +14 -0
  534. package/dist/admin/utils/createAssetUrl.js.map +1 -0
  535. package/dist/admin/utils/createAssetUrl.mjs +12 -0
  536. package/dist/admin/utils/createAssetUrl.mjs.map +1 -0
  537. package/dist/admin/utils/displayedFilters.js +52 -0
  538. package/dist/admin/utils/displayedFilters.js.map +1 -0
  539. package/dist/admin/utils/displayedFilters.mjs +50 -0
  540. package/dist/admin/utils/displayedFilters.mjs.map +1 -0
  541. package/dist/admin/utils/downloadFile.js +13 -0
  542. package/dist/admin/utils/downloadFile.js.map +1 -0
  543. package/dist/admin/utils/downloadFile.mjs +11 -0
  544. package/dist/admin/utils/downloadFile.mjs.map +1 -0
  545. package/dist/admin/utils/findRecursiveFolderByValue.js +17 -0
  546. package/dist/admin/utils/findRecursiveFolderByValue.js.map +1 -0
  547. package/dist/admin/utils/findRecursiveFolderByValue.mjs +15 -0
  548. package/dist/admin/utils/findRecursiveFolderByValue.mjs.map +1 -0
  549. package/dist/admin/utils/formatBytes.js +17 -0
  550. package/dist/admin/utils/formatBytes.js.map +1 -0
  551. package/dist/admin/utils/formatBytes.mjs +15 -0
  552. package/dist/admin/utils/formatBytes.mjs.map +1 -0
  553. package/dist/admin/utils/formatDuration.js +15 -0
  554. package/dist/admin/utils/formatDuration.js.map +1 -0
  555. package/dist/admin/utils/formatDuration.mjs +13 -0
  556. package/dist/admin/utils/formatDuration.mjs.map +1 -0
  557. package/dist/admin/utils/getAPIInnerErrors.js +26 -0
  558. package/dist/admin/utils/getAPIInnerErrors.js.map +1 -0
  559. package/dist/admin/utils/getAPIInnerErrors.mjs +24 -0
  560. package/dist/admin/utils/getAPIInnerErrors.mjs.map +1 -0
  561. package/dist/admin/utils/getAllowedFiles.js +25 -0
  562. package/dist/admin/utils/getAllowedFiles.js.map +1 -0
  563. package/dist/admin/utils/getAllowedFiles.mjs +23 -0
  564. package/dist/admin/utils/getAllowedFiles.mjs.map +1 -0
  565. package/dist/admin/utils/getBreadcrumbDataCM.js +36 -0
  566. package/dist/admin/utils/getBreadcrumbDataCM.js.map +1 -0
  567. package/dist/admin/utils/getBreadcrumbDataCM.mjs +34 -0
  568. package/dist/admin/utils/getBreadcrumbDataCM.mjs.map +1 -0
  569. package/dist/admin/utils/getBreadcrumbDataML.js +40 -0
  570. package/dist/admin/utils/getBreadcrumbDataML.js.map +1 -0
  571. package/dist/admin/utils/getBreadcrumbDataML.mjs +38 -0
  572. package/dist/admin/utils/getBreadcrumbDataML.mjs.map +1 -0
  573. package/dist/admin/utils/getFileExtension.js +6 -0
  574. package/dist/admin/utils/getFileExtension.js.map +1 -0
  575. package/dist/admin/utils/getFileExtension.mjs +4 -0
  576. package/dist/admin/utils/getFileExtension.mjs.map +1 -0
  577. package/dist/admin/utils/getFolderParents.js +26 -0
  578. package/dist/admin/utils/getFolderParents.js.map +1 -0
  579. package/dist/admin/utils/getFolderParents.mjs +24 -0
  580. package/dist/admin/utils/getFolderParents.mjs.map +1 -0
  581. package/dist/admin/utils/getFolderURL.js +20 -0
  582. package/dist/admin/utils/getFolderURL.js.map +1 -0
  583. package/dist/admin/utils/getFolderURL.mjs +18 -0
  584. package/dist/admin/utils/getFolderURL.mjs.map +1 -0
  585. package/dist/admin/utils/getTrad.js +8 -0
  586. package/dist/admin/utils/getTrad.js.map +1 -0
  587. package/dist/admin/utils/getTrad.mjs +6 -0
  588. package/dist/admin/utils/getTrad.mjs.map +1 -0
  589. package/dist/admin/utils/moveElement.js +16 -0
  590. package/dist/admin/utils/moveElement.js.map +1 -0
  591. package/dist/admin/utils/moveElement.mjs +14 -0
  592. package/dist/admin/utils/moveElement.mjs.map +1 -0
  593. package/dist/admin/utils/normalizeAPIError.js +55 -0
  594. package/dist/admin/utils/normalizeAPIError.js.map +1 -0
  595. package/dist/admin/utils/normalizeAPIError.mjs +53 -0
  596. package/dist/admin/utils/normalizeAPIError.mjs.map +1 -0
  597. package/dist/admin/utils/prefixFileUrlWithBackendUrl.js +8 -0
  598. package/dist/admin/utils/prefixFileUrlWithBackendUrl.js.map +1 -0
  599. package/dist/admin/utils/prefixFileUrlWithBackendUrl.mjs +6 -0
  600. package/dist/admin/utils/prefixFileUrlWithBackendUrl.mjs.map +1 -0
  601. package/dist/admin/utils/prefixPluginTranslations.js +14 -0
  602. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  603. package/dist/admin/utils/prefixPluginTranslations.mjs +12 -0
  604. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  605. package/dist/admin/utils/rawFileToAsset.js +21 -0
  606. package/dist/admin/utils/rawFileToAsset.js.map +1 -0
  607. package/dist/admin/utils/rawFileToAsset.mjs +19 -0
  608. package/dist/admin/utils/rawFileToAsset.mjs.map +1 -0
  609. package/dist/admin/utils/toSingularTypes.js +11 -0
  610. package/dist/admin/utils/toSingularTypes.js.map +1 -0
  611. package/dist/admin/utils/toSingularTypes.mjs +9 -0
  612. package/dist/admin/utils/toSingularTypes.mjs.map +1 -0
  613. package/dist/admin/utils/typeFromMime.js +19 -0
  614. package/dist/admin/utils/typeFromMime.js.map +1 -0
  615. package/dist/admin/utils/typeFromMime.mjs +17 -0
  616. package/dist/admin/utils/typeFromMime.mjs.map +1 -0
  617. package/dist/admin/utils/urlYupSchema.js +72 -0
  618. package/dist/admin/utils/urlYupSchema.js.map +1 -0
  619. package/dist/admin/utils/urlYupSchema.mjs +51 -0
  620. package/dist/admin/utils/urlYupSchema.mjs.map +1 -0
  621. package/dist/admin/utils/urlsToAssets.js +39 -0
  622. package/dist/admin/utils/urlsToAssets.js.map +1 -0
  623. package/dist/admin/utils/urlsToAssets.mjs +37 -0
  624. package/dist/admin/utils/urlsToAssets.mjs.map +1 -0
  625. package/dist/server/bootstrap.js +98 -0
  626. package/dist/server/bootstrap.js.map +1 -0
  627. package/dist/server/bootstrap.mjs +96 -0
  628. package/dist/server/bootstrap.mjs.map +1 -0
  629. package/dist/server/config.js +14 -0
  630. package/dist/server/config.js.map +1 -0
  631. package/dist/server/config.mjs +12 -0
  632. package/dist/server/config.mjs.map +1 -0
  633. package/dist/server/constants.js +35 -0
  634. package/dist/server/constants.js.map +1 -0
  635. package/dist/server/constants.mjs +28 -0
  636. package/dist/server/constants.mjs.map +1 -0
  637. package/dist/server/content-types/file.js +155 -0
  638. package/dist/server/content-types/file.js.map +1 -0
  639. package/dist/server/content-types/file.mjs +153 -0
  640. package/dist/server/content-types/file.mjs.map +1 -0
  641. package/dist/server/content-types/folder.js +78 -0
  642. package/dist/server/content-types/folder.js.map +1 -0
  643. package/dist/server/content-types/folder.mjs +76 -0
  644. package/dist/server/content-types/folder.mjs.map +1 -0
  645. package/dist/server/content-types/index.js +12 -0
  646. package/dist/server/content-types/index.js.map +1 -0
  647. package/dist/server/content-types/index.mjs +10 -0
  648. package/dist/server/content-types/index.mjs.map +1 -0
  649. package/dist/server/controllers/admin-file.js +61 -0
  650. package/dist/server/controllers/admin-file.js.map +1 -0
  651. package/dist/server/controllers/admin-file.mjs +59 -0
  652. package/dist/server/controllers/admin-file.mjs.map +1 -0
  653. package/dist/server/controllers/admin-folder-file.js +189 -0
  654. package/dist/server/controllers/admin-folder-file.js.map +1 -0
  655. package/dist/server/controllers/admin-folder-file.mjs +187 -0
  656. package/dist/server/controllers/admin-folder-file.mjs.map +1 -0
  657. package/dist/server/controllers/admin-folder.js +104 -0
  658. package/dist/server/controllers/admin-folder.js.map +1 -0
  659. package/dist/server/controllers/admin-folder.mjs +102 -0
  660. package/dist/server/controllers/admin-folder.mjs.map +1 -0
  661. package/dist/server/controllers/admin-settings.js +32 -0
  662. package/dist/server/controllers/admin-settings.js.map +1 -0
  663. package/dist/server/controllers/admin-settings.mjs +30 -0
  664. package/dist/server/controllers/admin-settings.mjs.map +1 -0
  665. package/dist/server/controllers/admin-upload.js +88 -0
  666. package/dist/server/controllers/admin-upload.js.map +1 -0
  667. package/dist/server/controllers/admin-upload.mjs +86 -0
  668. package/dist/server/controllers/admin-upload.mjs.map +1 -0
  669. package/dist/server/controllers/content-api.js +122 -0
  670. package/dist/server/controllers/content-api.js.map +1 -0
  671. package/dist/server/controllers/content-api.mjs +120 -0
  672. package/dist/server/controllers/content-api.mjs.map +1 -0
  673. package/dist/server/controllers/index.js +22 -0
  674. package/dist/server/controllers/index.js.map +1 -0
  675. package/dist/server/controllers/index.mjs +20 -0
  676. package/dist/server/controllers/index.mjs.map +1 -0
  677. package/dist/server/controllers/utils/find-entity-and-check-permissions.js +38 -0
  678. package/dist/server/controllers/utils/find-entity-and-check-permissions.js.map +1 -0
  679. package/dist/server/controllers/utils/find-entity-and-check-permissions.mjs +36 -0
  680. package/dist/server/controllers/utils/find-entity-and-check-permissions.mjs.map +1 -0
  681. package/dist/server/controllers/utils/folders.js +6 -0
  682. package/dist/server/controllers/utils/folders.js.map +1 -0
  683. package/dist/server/controllers/utils/folders.mjs +4 -0
  684. package/dist/server/controllers/utils/folders.mjs.map +1 -0
  685. package/dist/server/controllers/validation/admin/configureView.js +13 -0
  686. package/dist/server/controllers/validation/admin/configureView.js.map +1 -0
  687. package/dist/server/controllers/validation/admin/configureView.mjs +11 -0
  688. package/dist/server/controllers/validation/admin/configureView.mjs.map +1 -0
  689. package/dist/server/controllers/validation/admin/folder-file.js +88 -0
  690. package/dist/server/controllers/validation/admin/folder-file.js.map +1 -0
  691. package/dist/server/controllers/validation/admin/folder-file.mjs +85 -0
  692. package/dist/server/controllers/validation/admin/folder-file.mjs.map +1 -0
  693. package/dist/server/controllers/validation/admin/folder.js +69 -0
  694. package/dist/server/controllers/validation/admin/folder.js.map +1 -0
  695. package/dist/server/controllers/validation/admin/folder.mjs +66 -0
  696. package/dist/server/controllers/validation/admin/folder.mjs.map +1 -0
  697. package/dist/server/controllers/validation/admin/settings.js +13 -0
  698. package/dist/server/controllers/validation/admin/settings.js.map +1 -0
  699. package/dist/server/controllers/validation/admin/settings.mjs +11 -0
  700. package/dist/server/controllers/validation/admin/settings.mjs.map +1 -0
  701. package/dist/server/controllers/validation/admin/upload.js +35 -0
  702. package/dist/server/controllers/validation/admin/upload.js.map +1 -0
  703. package/dist/server/controllers/validation/admin/upload.mjs +33 -0
  704. package/dist/server/controllers/validation/admin/upload.mjs.map +1 -0
  705. package/dist/server/controllers/validation/admin/utils.js +17 -0
  706. package/dist/server/controllers/validation/admin/utils.js.map +1 -0
  707. package/dist/server/controllers/validation/admin/utils.mjs +15 -0
  708. package/dist/server/controllers/validation/admin/utils.mjs.map +1 -0
  709. package/dist/server/controllers/validation/content-api/upload.js +24 -0
  710. package/dist/server/controllers/validation/content-api/upload.js.map +1 -0
  711. package/dist/server/controllers/validation/content-api/upload.mjs +22 -0
  712. package/dist/server/controllers/validation/content-api/upload.mjs.map +1 -0
  713. package/dist/server/controllers/view-configuration.js +28 -0
  714. package/dist/server/controllers/view-configuration.js.map +1 -0
  715. package/dist/server/controllers/view-configuration.mjs +26 -0
  716. package/dist/server/controllers/view-configuration.mjs.map +1 -0
  717. package/dist/server/documentation/content-api.json.js +290 -0
  718. package/dist/server/documentation/content-api.json.js.map +1 -0
  719. package/dist/server/documentation/content-api.json.mjs +284 -0
  720. package/dist/server/documentation/content-api.json.mjs.map +1 -0
  721. package/dist/server/{chunks/graphql-CwNPX8zo.js → graphql.js} +3 -16
  722. package/dist/server/graphql.js.map +1 -0
  723. package/dist/server/{chunks/graphql-K9HaGS9d.mjs → graphql.mjs} +2 -15
  724. package/dist/server/graphql.mjs.map +1 -0
  725. package/dist/server/index.js +17 -16
  726. package/dist/server/index.js.map +1 -1
  727. package/dist/server/index.mjs +19 -14
  728. package/dist/server/index.mjs.map +1 -1
  729. package/dist/server/middlewares/upload.js +38 -0
  730. package/dist/server/middlewares/upload.js.map +1 -0
  731. package/dist/server/middlewares/upload.mjs +36 -0
  732. package/dist/server/middlewares/upload.mjs.map +1 -0
  733. package/dist/server/register.js +88 -0
  734. package/dist/server/register.js.map +1 -0
  735. package/dist/server/register.mjs +86 -0
  736. package/dist/server/register.mjs.map +1 -0
  737. package/dist/server/routes/admin.js +236 -0
  738. package/dist/server/routes/admin.js.map +1 -0
  739. package/dist/server/routes/admin.mjs +234 -0
  740. package/dist/server/routes/admin.mjs.map +1 -0
  741. package/dist/server/routes/content-api.js +30 -0
  742. package/dist/server/routes/content-api.js.map +1 -0
  743. package/dist/server/routes/content-api.mjs +28 -0
  744. package/dist/server/routes/content-api.mjs.map +1 -0
  745. package/dist/server/routes/index.js +14 -0
  746. package/dist/server/routes/index.js.map +1 -0
  747. package/dist/server/routes/index.mjs +12 -0
  748. package/dist/server/routes/index.mjs.map +1 -0
  749. package/dist/server/routes/view-configuration.js +40 -0
  750. package/dist/server/routes/view-configuration.js.map +1 -0
  751. package/dist/server/routes/view-configuration.mjs +38 -0
  752. package/dist/server/routes/view-configuration.mjs.map +1 -0
  753. package/dist/server/services/api-upload-folder.js +52 -0
  754. package/dist/server/services/api-upload-folder.js.map +1 -0
  755. package/dist/server/services/api-upload-folder.mjs +50 -0
  756. package/dist/server/services/api-upload-folder.mjs.map +1 -0
  757. package/dist/server/services/extensions/index.js +40 -0
  758. package/dist/server/services/extensions/index.js.map +1 -0
  759. package/dist/server/services/extensions/index.mjs +38 -0
  760. package/dist/server/services/extensions/index.mjs.map +1 -0
  761. package/dist/server/services/extensions/utils.js +53 -0
  762. package/dist/server/services/extensions/utils.js.map +1 -0
  763. package/dist/server/services/extensions/utils.mjs +51 -0
  764. package/dist/server/services/extensions/utils.mjs.map +1 -0
  765. package/dist/server/services/file.js +57 -0
  766. package/dist/server/services/file.js.map +1 -0
  767. package/dist/server/services/file.mjs +55 -0
  768. package/dist/server/services/file.mjs.map +1 -0
  769. package/dist/server/services/folder.js +275 -0
  770. package/dist/server/services/folder.js.map +1 -0
  771. package/dist/server/services/folder.mjs +273 -0
  772. package/dist/server/services/folder.mjs.map +1 -0
  773. package/dist/server/services/image-manipulation.js +255 -0
  774. package/dist/server/services/image-manipulation.js.map +1 -0
  775. package/dist/server/services/image-manipulation.mjs +253 -0
  776. package/dist/server/services/image-manipulation.mjs.map +1 -0
  777. package/dist/server/services/index.js +26 -0
  778. package/dist/server/services/index.js.map +1 -0
  779. package/dist/server/services/index.mjs +24 -0
  780. package/dist/server/services/index.mjs.map +1 -0
  781. package/dist/server/services/metrics.js +19 -0
  782. package/dist/server/services/metrics.js.map +1 -0
  783. package/dist/server/services/metrics.mjs +17 -0
  784. package/dist/server/services/metrics.mjs.map +1 -0
  785. package/dist/server/services/provider.js +33 -0
  786. package/dist/server/services/provider.js.map +1 -0
  787. package/dist/server/services/provider.mjs +31 -0
  788. package/dist/server/services/provider.mjs.map +1 -0
  789. package/dist/server/services/upload.js +445 -0
  790. package/dist/server/services/upload.js.map +1 -0
  791. package/dist/server/services/upload.mjs +443 -0
  792. package/dist/server/services/upload.mjs.map +1 -0
  793. package/dist/server/services/weekly-metrics.js +127 -0
  794. package/dist/server/services/weekly-metrics.js.map +1 -0
  795. package/dist/server/services/weekly-metrics.mjs +125 -0
  796. package/dist/server/services/weekly-metrics.mjs.map +1 -0
  797. package/dist/server/utils/cron.js +6 -0
  798. package/dist/server/utils/cron.js.map +1 -0
  799. package/dist/server/utils/cron.mjs +4 -0
  800. package/dist/server/utils/cron.mjs.map +1 -0
  801. package/dist/server/utils/index.js +8 -0
  802. package/dist/server/utils/index.js.map +1 -0
  803. package/dist/server/utils/index.mjs +6 -0
  804. package/dist/server/utils/index.mjs.map +1 -0
  805. package/package.json +5 -5
  806. package/dist/admin/chunks/App-G8sLZSN0.js +0 -993
  807. package/dist/admin/chunks/App-G8sLZSN0.js.map +0 -1
  808. package/dist/admin/chunks/App-h5xGw9X8.mjs +0 -972
  809. package/dist/admin/chunks/App-h5xGw9X8.mjs.map +0 -1
  810. package/dist/admin/chunks/ConfigureTheView-CO72K73d.mjs +0 -276
  811. package/dist/admin/chunks/ConfigureTheView-CO72K73d.mjs.map +0 -1
  812. package/dist/admin/chunks/ConfigureTheView-D9XLMDtA.js +0 -297
  813. package/dist/admin/chunks/ConfigureTheView-D9XLMDtA.js.map +0 -1
  814. package/dist/admin/chunks/SettingsPage-DcdF16oj.js.map +0 -1
  815. package/dist/admin/chunks/SettingsPage-kY2dZHnP.mjs.map +0 -1
  816. package/dist/admin/chunks/ca-pCOhKIn8.js.map +0 -1
  817. package/dist/admin/chunks/de-BlbX8Dl_.mjs.map +0 -1
  818. package/dist/admin/chunks/de-DUjKLmOP.js.map +0 -1
  819. package/dist/admin/chunks/dk-C2ydE6A7.mjs.map +0 -1
  820. package/dist/admin/chunks/dk-DSsspA0e.js.map +0 -1
  821. package/dist/admin/chunks/en-Bw_Cb2IV.mjs.map +0 -1
  822. package/dist/admin/chunks/en-UjETkewz.js.map +0 -1
  823. package/dist/admin/chunks/es-CiEgbw0k.mjs.map +0 -1
  824. package/dist/admin/chunks/es-qAL8YcZz.js.map +0 -1
  825. package/dist/admin/chunks/fr-BL0Uyj6j.js.map +0 -1
  826. package/dist/admin/chunks/fr-CwRt2FJu.mjs.map +0 -1
  827. package/dist/admin/chunks/he-BAmhVpfZ.js.map +0 -1
  828. package/dist/admin/chunks/he-DdpYNQdt.mjs.map +0 -1
  829. package/dist/admin/chunks/index-BUqiOq3Y.mjs +0 -7349
  830. package/dist/admin/chunks/index-BUqiOq3Y.mjs.map +0 -1
  831. package/dist/admin/chunks/index-DDQjAhM2.js +0 -7406
  832. package/dist/admin/chunks/index-DDQjAhM2.js.map +0 -1
  833. package/dist/admin/chunks/it-Be4kgSNB.mjs.map +0 -1
  834. package/dist/admin/chunks/it-_NQZYepl.js.map +0 -1
  835. package/dist/admin/chunks/ja-B75QiyXf.js.map +0 -1
  836. package/dist/admin/chunks/ja-U1NhT0bU.mjs.map +0 -1
  837. package/dist/admin/chunks/ko-BOvUcJqv.js.map +0 -1
  838. package/dist/admin/chunks/ko-BciqXefq.mjs.map +0 -1
  839. package/dist/admin/chunks/ms-B7Zl6Lm9.js.map +0 -1
  840. package/dist/admin/chunks/ms-D-8McNeg.mjs.map +0 -1
  841. package/dist/admin/chunks/pl-DdUYocl5.mjs.map +0 -1
  842. package/dist/admin/chunks/pl-cYDYHOEf.js.map +0 -1
  843. package/dist/admin/chunks/pt-BR-D1u_azCM.js.map +0 -1
  844. package/dist/admin/chunks/pt-BR-Demjoq41.mjs.map +0 -1
  845. package/dist/admin/chunks/pt-D8is2LpS.mjs.map +0 -1
  846. package/dist/admin/chunks/pt-L2DZeTPL.js.map +0 -1
  847. package/dist/admin/chunks/ru-CGgHRTey.mjs.map +0 -1
  848. package/dist/admin/chunks/ru-Uxbk_WWv.js.map +0 -1
  849. package/dist/admin/chunks/sk-BlLP5HAX.js.map +0 -1
  850. package/dist/admin/chunks/sk-xtSwaPXq.mjs.map +0 -1
  851. package/dist/admin/chunks/th-BOpLVfmg.mjs.map +0 -1
  852. package/dist/admin/chunks/th-DNxPLegS.js.map +0 -1
  853. package/dist/admin/chunks/tr-BmAPh-f1.mjs.map +0 -1
  854. package/dist/admin/chunks/tr-DWgXG75k.js.map +0 -1
  855. package/dist/admin/chunks/uk-Cfm1dM3v.js.map +0 -1
  856. package/dist/admin/chunks/uk-DPZD6U8g.mjs.map +0 -1
  857. package/dist/admin/chunks/zh-BIl0qgBy.mjs.map +0 -1
  858. package/dist/admin/chunks/zh-Hans-B1GabBRx.mjs.map +0 -1
  859. package/dist/admin/chunks/zh-Hans-B8qxMQIl.js.map +0 -1
  860. package/dist/admin/chunks/zh-MemsyMV6.js.map +0 -1
  861. package/dist/server/chunks/graphql-CwNPX8zo.js.map +0 -1
  862. package/dist/server/chunks/graphql-K9HaGS9d.mjs.map +0 -1
  863. package/dist/server/chunks/index-BzVus140.mjs +0 -3161
  864. package/dist/server/chunks/index-BzVus140.mjs.map +0 -1
  865. package/dist/server/chunks/index-D2QOphAI.js +0 -3164
  866. package/dist/server/chunks/index-D2QOphAI.js.map +0 -1
@@ -0,0 +1,443 @@
1
+ import os from 'os';
2
+ import path from 'path';
3
+ import crypto from 'crypto';
4
+ import fs from 'fs';
5
+ import fse from 'fs-extra';
6
+ import _ from 'lodash';
7
+ import { extension } from 'mime-types';
8
+ import { contentTypes, errors, file, strings, sanitize } from '@strapi/utils';
9
+ import { FILE_MODEL_UID, ALLOWED_WEBHOOK_EVENTS } from '../constants.mjs';
10
+ import { getService } from '../utils/index.mjs';
11
+
12
+ const { UPDATED_BY_ATTRIBUTE, CREATED_BY_ATTRIBUTE } = contentTypes.constants;
13
+ const { MEDIA_CREATE, MEDIA_UPDATE, MEDIA_DELETE } = ALLOWED_WEBHOOK_EVENTS;
14
+ const { ApplicationError, NotFoundError } = errors;
15
+ const { bytesToKbytes } = file;
16
+ var upload = (({ strapi })=>{
17
+ const randomSuffix = ()=>crypto.randomBytes(5).toString('hex');
18
+ const generateFileName = (name)=>{
19
+ const baseName = strings.nameToSlug(name, {
20
+ separator: '_',
21
+ lowercase: false
22
+ });
23
+ return `${baseName}_${randomSuffix()}`;
24
+ };
25
+ const sendMediaMetrics = (data)=>{
26
+ if (_.has(data, 'caption') && !_.isEmpty(data.caption)) {
27
+ strapi.telemetry.send('didSaveMediaWithCaption');
28
+ }
29
+ if (_.has(data, 'alternativeText') && !_.isEmpty(data.alternativeText)) {
30
+ strapi.telemetry.send('didSaveMediaWithAlternativeText');
31
+ }
32
+ };
33
+ const createAndAssignTmpWorkingDirectoryToFiles = async (files)=>{
34
+ const tmpWorkingDirectory = await fse.mkdtemp(path.join(os.tmpdir(), 'strapi-upload-'));
35
+ if (Array.isArray(files)) {
36
+ files.forEach((file)=>{
37
+ file.tmpWorkingDirectory = tmpWorkingDirectory;
38
+ });
39
+ } else {
40
+ files.tmpWorkingDirectory = tmpWorkingDirectory;
41
+ }
42
+ return tmpWorkingDirectory;
43
+ };
44
+ function filenameReservedRegex() {
45
+ // eslint-disable-next-line no-control-regex
46
+ return /[<>:"/\\|?*\u0000-\u001F]/g;
47
+ }
48
+ function windowsReservedNameRegex() {
49
+ return /^(con|prn|aux|nul|com\d|lpt\d)$/i;
50
+ }
51
+ /**
52
+ * Copied from https://github.com/sindresorhus/valid-filename package
53
+ */ function isValidFilename(string) {
54
+ if (!string || string.length > 255) {
55
+ return false;
56
+ }
57
+ if (filenameReservedRegex().test(string) || windowsReservedNameRegex().test(string)) {
58
+ return false;
59
+ }
60
+ if (string === '.' || string === '..') {
61
+ return false;
62
+ }
63
+ return true;
64
+ }
65
+ async function emitEvent(event, data) {
66
+ const modelDef = strapi.getModel(FILE_MODEL_UID);
67
+ const sanitizedData = await sanitize.sanitizers.defaultSanitizeOutput({
68
+ schema: modelDef,
69
+ getModel (uid) {
70
+ return strapi.getModel(uid);
71
+ }
72
+ }, data);
73
+ strapi.eventHub.emit(event, {
74
+ media: sanitizedData
75
+ });
76
+ }
77
+ async function formatFileInfo({ filename, type, size }, fileInfo = {}, metas = {}) {
78
+ const fileService = getService('file');
79
+ if (!isValidFilename(filename)) {
80
+ throw new ApplicationError('File name contains invalid characters');
81
+ }
82
+ let ext = path.extname(filename);
83
+ if (!ext) {
84
+ ext = `.${extension(type)}`;
85
+ }
86
+ const usedName = (fileInfo.name || filename).normalize();
87
+ const basename = path.basename(usedName, ext);
88
+ // Prevent null characters in file name
89
+ if (!isValidFilename(filename)) {
90
+ throw new ApplicationError('File name contains invalid characters');
91
+ }
92
+ const entity = {
93
+ name: usedName,
94
+ alternativeText: fileInfo.alternativeText,
95
+ caption: fileInfo.caption,
96
+ folder: fileInfo.folder,
97
+ folderPath: await fileService.getFolderPath(fileInfo.folder),
98
+ hash: generateFileName(basename),
99
+ ext,
100
+ mime: type,
101
+ size: bytesToKbytes(size),
102
+ sizeInBytes: size
103
+ };
104
+ const { refId, ref, field } = metas;
105
+ if (refId && ref && field) {
106
+ entity.related = [
107
+ {
108
+ id: refId,
109
+ __type: ref,
110
+ __pivot: {
111
+ field
112
+ }
113
+ }
114
+ ];
115
+ }
116
+ if (metas.path) {
117
+ entity.path = metas.path;
118
+ }
119
+ if (metas.tmpWorkingDirectory) {
120
+ entity.tmpWorkingDirectory = metas.tmpWorkingDirectory;
121
+ }
122
+ return entity;
123
+ }
124
+ async function enhanceAndValidateFile(file, fileInfo, metas) {
125
+ const currentFile = await formatFileInfo({
126
+ filename: file.originalFilename ?? 'unamed',
127
+ type: file.mimetype ?? 'application/octet-stream',
128
+ size: file.size
129
+ }, fileInfo, {
130
+ ...metas,
131
+ tmpWorkingDirectory: file.tmpWorkingDirectory
132
+ });
133
+ currentFile.filepath = file.filepath;
134
+ currentFile.getStream = ()=>fs.createReadStream(file.filepath);
135
+ const { optimize, isImage, isFaultyImage, isOptimizableImage } = strapi.plugin('upload').service('image-manipulation');
136
+ if (await isImage(currentFile)) {
137
+ if (await isFaultyImage(currentFile)) {
138
+ throw new ApplicationError('File is not a valid image');
139
+ }
140
+ if (await isOptimizableImage(currentFile)) {
141
+ return optimize(currentFile);
142
+ }
143
+ }
144
+ return currentFile;
145
+ }
146
+ async function upload({ data, files }, opts) {
147
+ const { user } = opts ?? {};
148
+ // create temporary folder to store files for stream manipulation
149
+ const tmpWorkingDirectory = await createAndAssignTmpWorkingDirectoryToFiles(files);
150
+ let uploadedFiles = [];
151
+ try {
152
+ const { fileInfo, ...metas } = data;
153
+ const fileArray = Array.isArray(files) ? files : [
154
+ files
155
+ ];
156
+ const fileInfoArray = Array.isArray(fileInfo) ? fileInfo : [
157
+ fileInfo
158
+ ];
159
+ const doUpload = async (file, fileInfo)=>{
160
+ const fileData = await enhanceAndValidateFile(file, fileInfo, metas);
161
+ return uploadFileAndPersist(fileData, {
162
+ user
163
+ });
164
+ };
165
+ uploadedFiles = await Promise.all(fileArray.map((file, idx)=>doUpload(file, fileInfoArray[idx] || {})));
166
+ } finally{
167
+ // delete temporary folder
168
+ await fse.remove(tmpWorkingDirectory);
169
+ }
170
+ return uploadedFiles;
171
+ }
172
+ /**
173
+ * When uploading an image, an additional thumbnail is generated.
174
+ * Also, if there are responsive formats defined, another set of images will be generated too.
175
+ *
176
+ * @param {*} fileData
177
+ */ async function uploadImage(fileData) {
178
+ const { getDimensions, generateThumbnail, generateResponsiveFormats, isResizableImage } = getService('image-manipulation');
179
+ // Store width and height of the original image
180
+ const { width, height } = await getDimensions(fileData);
181
+ // Make sure this is assigned before calling any upload
182
+ // That way it can mutate the width and height
183
+ _.assign(fileData, {
184
+ width,
185
+ height
186
+ });
187
+ // For performance reasons, all uploads are wrapped in a single Promise.all
188
+ const uploadThumbnail = async (thumbnailFile)=>{
189
+ await getService('provider').upload(thumbnailFile);
190
+ _.set(fileData, 'formats.thumbnail', thumbnailFile);
191
+ };
192
+ // Generate thumbnail and responsive formats
193
+ const uploadResponsiveFormat = async (format)=>{
194
+ const { key, file } = format;
195
+ await getService('provider').upload(file);
196
+ _.set(fileData, [
197
+ 'formats',
198
+ key
199
+ ], file);
200
+ };
201
+ const uploadPromises = [];
202
+ // Upload image
203
+ uploadPromises.push(getService('provider').upload(fileData));
204
+ // Generate & Upload thumbnail and responsive formats
205
+ if (await isResizableImage(fileData)) {
206
+ const thumbnailFile = await generateThumbnail(fileData);
207
+ if (thumbnailFile) {
208
+ uploadPromises.push(uploadThumbnail(thumbnailFile));
209
+ }
210
+ const formats = await generateResponsiveFormats(fileData);
211
+ if (Array.isArray(formats) && formats.length > 0) {
212
+ for (const format of formats){
213
+ // eslint-disable-next-line no-continue
214
+ if (!format) continue;
215
+ uploadPromises.push(uploadResponsiveFormat(format));
216
+ }
217
+ }
218
+ }
219
+ // Wait for all uploads to finish
220
+ await Promise.all(uploadPromises);
221
+ }
222
+ /**
223
+ * Upload a file. If it is an image it will generate a thumbnail
224
+ * and responsive formats (if enabled).
225
+ */ async function uploadFileAndPersist(fileData, opts) {
226
+ const { user } = opts ?? {};
227
+ const config = strapi.config.get('plugin::upload');
228
+ const { isImage } = getService('image-manipulation');
229
+ await getService('provider').checkFileSize(fileData);
230
+ if (await isImage(fileData)) {
231
+ await uploadImage(fileData);
232
+ } else {
233
+ await getService('provider').upload(fileData);
234
+ }
235
+ _.set(fileData, 'provider', config.provider);
236
+ // Persist file(s)
237
+ return add(fileData, {
238
+ user
239
+ });
240
+ }
241
+ async function updateFileInfo(id, { name, alternativeText, caption, folder }, opts) {
242
+ const { user } = opts ?? {};
243
+ const dbFile = await findOne(id);
244
+ if (!dbFile) {
245
+ throw new NotFoundError();
246
+ }
247
+ const fileService = getService('file');
248
+ const newName = _.isNil(name) ? dbFile.name : name;
249
+ const newInfos = {
250
+ name: newName,
251
+ alternativeText: _.isNil(alternativeText) ? dbFile.alternativeText : alternativeText,
252
+ caption: _.isNil(caption) ? dbFile.caption : caption,
253
+ folder: _.isUndefined(folder) ? dbFile.folder : folder,
254
+ folderPath: _.isUndefined(folder) ? dbFile.path : await fileService.getFolderPath(folder)
255
+ };
256
+ return update(id, newInfos, {
257
+ user
258
+ });
259
+ }
260
+ async function replace(id, { data, file }, opts) {
261
+ const { user } = opts ?? {};
262
+ const config = strapi.config.get('plugin::upload');
263
+ const { isImage } = getService('image-manipulation');
264
+ const dbFile = await findOne(id);
265
+ if (!dbFile) {
266
+ throw new NotFoundError();
267
+ }
268
+ // create temporary folder to store files for stream manipulation
269
+ const tmpWorkingDirectory = await createAndAssignTmpWorkingDirectoryToFiles(file);
270
+ let fileData;
271
+ try {
272
+ const { fileInfo } = data;
273
+ fileData = await enhanceAndValidateFile(file, fileInfo);
274
+ // keep a constant hash and extension so the file url doesn't change when the file is replaced
275
+ _.assign(fileData, {
276
+ hash: dbFile.hash,
277
+ ext: dbFile.ext
278
+ });
279
+ // execute delete function of the provider
280
+ if (dbFile.provider === config.provider) {
281
+ await strapi.plugin('upload').provider.delete(dbFile);
282
+ if (dbFile.formats) {
283
+ await Promise.all(Object.keys(dbFile.formats).map((key)=>{
284
+ return strapi.plugin('upload').provider.delete(dbFile.formats[key]);
285
+ }));
286
+ }
287
+ }
288
+ // clear old formats
289
+ _.set(fileData, 'formats', {});
290
+ if (await isImage(fileData)) {
291
+ await uploadImage(fileData);
292
+ } else {
293
+ await getService('provider').upload(fileData);
294
+ }
295
+ _.set(fileData, 'provider', config.provider);
296
+ } finally{
297
+ // delete temporary folder
298
+ await fse.remove(tmpWorkingDirectory);
299
+ }
300
+ return update(id, fileData, {
301
+ user
302
+ });
303
+ }
304
+ async function update(id, values, opts) {
305
+ const { user } = opts ?? {};
306
+ const fileValues = {
307
+ ...values
308
+ };
309
+ if (user) {
310
+ Object.assign(fileValues, {
311
+ [UPDATED_BY_ATTRIBUTE]: user.id
312
+ });
313
+ }
314
+ sendMediaMetrics(fileValues);
315
+ const res = await strapi.db.query(FILE_MODEL_UID).update({
316
+ where: {
317
+ id
318
+ },
319
+ data: fileValues
320
+ });
321
+ await emitEvent(MEDIA_UPDATE, res);
322
+ return res;
323
+ }
324
+ async function add(values, opts) {
325
+ const { user } = opts ?? {};
326
+ const fileValues = {
327
+ ...values
328
+ };
329
+ if (user) {
330
+ Object.assign(fileValues, {
331
+ [UPDATED_BY_ATTRIBUTE]: user.id,
332
+ [CREATED_BY_ATTRIBUTE]: user.id
333
+ });
334
+ }
335
+ sendMediaMetrics(fileValues);
336
+ const res = await strapi.db.query(FILE_MODEL_UID).create({
337
+ data: fileValues
338
+ });
339
+ await emitEvent(MEDIA_CREATE, res);
340
+ return res;
341
+ }
342
+ function findOne(id, populate = {}) {
343
+ const query = strapi.get('query-params').transform(FILE_MODEL_UID, {
344
+ populate
345
+ });
346
+ return strapi.db.query(FILE_MODEL_UID).findOne({
347
+ where: {
348
+ id
349
+ },
350
+ ...query
351
+ });
352
+ }
353
+ function findMany(query = {}) {
354
+ return strapi.db.query(FILE_MODEL_UID).findMany(strapi.get('query-params').transform(FILE_MODEL_UID, query));
355
+ }
356
+ function findPage(query = {}) {
357
+ return strapi.db.query(FILE_MODEL_UID).findPage(strapi.get('query-params').transform(FILE_MODEL_UID, query));
358
+ }
359
+ async function remove(file) {
360
+ const config = strapi.config.get('plugin::upload');
361
+ // execute delete function of the provider
362
+ if (file.provider === config.provider) {
363
+ await strapi.plugin('upload').provider.delete(file);
364
+ if (file.formats) {
365
+ const keys = Object.keys(file.formats);
366
+ await Promise.all(keys.map((key)=>{
367
+ return strapi.plugin('upload').provider.delete(file.formats[key]);
368
+ }));
369
+ }
370
+ }
371
+ const media = await strapi.db.query(FILE_MODEL_UID).findOne({
372
+ where: {
373
+ id: file.id
374
+ }
375
+ });
376
+ await emitEvent(MEDIA_DELETE, media);
377
+ return strapi.db.query(FILE_MODEL_UID).delete({
378
+ where: {
379
+ id: file.id
380
+ }
381
+ });
382
+ }
383
+ async function getSettings() {
384
+ const res = await strapi.store({
385
+ type: 'plugin',
386
+ name: 'upload',
387
+ key: 'settings'
388
+ }).get({});
389
+ return res;
390
+ }
391
+ function setSettings(value) {
392
+ if (value.responsiveDimensions === true) {
393
+ strapi.telemetry.send('didEnableResponsiveDimensions');
394
+ } else {
395
+ strapi.telemetry.send('didDisableResponsiveDimensions');
396
+ }
397
+ return strapi.store({
398
+ type: 'plugin',
399
+ name: 'upload',
400
+ key: 'settings'
401
+ }).set({
402
+ value
403
+ });
404
+ }
405
+ async function getConfiguration() {
406
+ const res = await strapi.store({
407
+ type: 'plugin',
408
+ name: 'upload',
409
+ key: 'view_configuration'
410
+ }).get({});
411
+ return res;
412
+ }
413
+ function setConfiguration(value) {
414
+ return strapi.store({
415
+ type: 'plugin',
416
+ name: 'upload',
417
+ key: 'view_configuration'
418
+ }).set({
419
+ value
420
+ });
421
+ }
422
+ return {
423
+ formatFileInfo,
424
+ upload,
425
+ updateFileInfo,
426
+ replace,
427
+ findOne,
428
+ findMany,
429
+ findPage,
430
+ remove,
431
+ getSettings,
432
+ setSettings,
433
+ getConfiguration,
434
+ setConfiguration,
435
+ /**
436
+ * exposed for testing only
437
+ * @internal
438
+ */ _uploadImage: uploadImage
439
+ };
440
+ });
441
+
442
+ export { upload as default };
443
+ //# sourceMappingURL=upload.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.mjs","sources":["../../../server/src/services/upload.ts"],"sourcesContent":["import os from 'os';\nimport path from 'path';\nimport crypto from 'crypto';\nimport fs from 'fs';\nimport fse from 'fs-extra';\nimport _ from 'lodash';\nimport { extension } from 'mime-types';\nimport {\n sanitize,\n strings,\n contentTypes as contentTypesUtils,\n errors,\n file as fileUtils,\n} from '@strapi/utils';\n\nimport type { Core, UID } from '@strapi/types';\n\nimport { FILE_MODEL_UID, ALLOWED_WEBHOOK_EVENTS } from '../constants';\nimport { getService } from '../utils';\n\nimport type { Config, File, InputFile, UploadableFile, FileInfo } from '../types';\nimport type { ViewConfiguration } from '../controllers/validation/admin/configureView';\nimport type { Settings } from '../controllers/validation/admin/settings';\n\ntype User = {\n id: string | number;\n};\n\ntype ID = string | number;\n\ntype CommonOptions = {\n user?: User;\n};\n\ntype Metas = {\n refId?: ID;\n ref?: string;\n field?: string;\n path?: string;\n tmpWorkingDirectory?: string;\n};\n\nconst { UPDATED_BY_ATTRIBUTE, CREATED_BY_ATTRIBUTE } = contentTypesUtils.constants;\nconst { MEDIA_CREATE, MEDIA_UPDATE, MEDIA_DELETE } = ALLOWED_WEBHOOK_EVENTS;\n\nconst { ApplicationError, NotFoundError } = errors;\nconst { bytesToKbytes } = fileUtils;\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const randomSuffix = () => crypto.randomBytes(5).toString('hex');\n\n const generateFileName = (name: string) => {\n const baseName = strings.nameToSlug(name, { separator: '_', lowercase: false });\n\n return `${baseName}_${randomSuffix()}`;\n };\n\n const sendMediaMetrics = (data: Pick<File, 'caption' | 'alternativeText'>) => {\n if (_.has(data, 'caption') && !_.isEmpty(data.caption)) {\n strapi.telemetry.send('didSaveMediaWithCaption');\n }\n\n if (_.has(data, 'alternativeText') && !_.isEmpty(data.alternativeText)) {\n strapi.telemetry.send('didSaveMediaWithAlternativeText');\n }\n };\n\n const createAndAssignTmpWorkingDirectoryToFiles = async (\n files: InputFile | InputFile[]\n ): Promise<string> => {\n const tmpWorkingDirectory = await fse.mkdtemp(path.join(os.tmpdir(), 'strapi-upload-'));\n\n if (Array.isArray(files)) {\n files.forEach((file) => {\n file.tmpWorkingDirectory = tmpWorkingDirectory;\n });\n } else {\n files.tmpWorkingDirectory = tmpWorkingDirectory;\n }\n\n return tmpWorkingDirectory;\n };\n\n function filenameReservedRegex() {\n // eslint-disable-next-line no-control-regex\n return /[<>:\"/\\\\|?*\\u0000-\\u001F]/g;\n }\n\n function windowsReservedNameRegex() {\n return /^(con|prn|aux|nul|com\\d|lpt\\d)$/i;\n }\n\n /**\n * Copied from https://github.com/sindresorhus/valid-filename package\n */\n function isValidFilename(string: string) {\n if (!string || string.length > 255) {\n return false;\n }\n if (filenameReservedRegex().test(string) || windowsReservedNameRegex().test(string)) {\n return false;\n }\n if (string === '.' || string === '..') {\n return false;\n }\n return true;\n }\n\n async function emitEvent(event: string, data: Record<string, any>) {\n const modelDef = strapi.getModel(FILE_MODEL_UID);\n const sanitizedData = await sanitize.sanitizers.defaultSanitizeOutput(\n {\n schema: modelDef,\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n },\n data\n );\n\n strapi.eventHub.emit(event, { media: sanitizedData });\n }\n\n async function formatFileInfo(\n { filename, type, size }: { filename: string; type: string; size: number },\n fileInfo: Partial<FileInfo> = {},\n metas: {\n refId?: ID;\n ref?: string;\n field?: string;\n path?: string;\n tmpWorkingDirectory?: string;\n } = {}\n ): Promise<Omit<UploadableFile, 'getStream'>> {\n const fileService = getService('file');\n\n if (!isValidFilename(filename)) {\n throw new ApplicationError('File name contains invalid characters');\n }\n\n let ext = path.extname(filename);\n if (!ext) {\n ext = `.${extension(type)}`;\n }\n const usedName = (fileInfo.name || filename).normalize();\n const basename = path.basename(usedName, ext);\n\n // Prevent null characters in file name\n if (!isValidFilename(filename)) {\n throw new ApplicationError('File name contains invalid characters');\n }\n\n const entity: Omit<UploadableFile, 'getStream'> = {\n name: usedName,\n alternativeText: fileInfo.alternativeText,\n caption: fileInfo.caption,\n folder: fileInfo.folder,\n folderPath: await fileService.getFolderPath(fileInfo.folder),\n hash: generateFileName(basename),\n ext,\n mime: type,\n size: bytesToKbytes(size),\n sizeInBytes: size,\n };\n\n const { refId, ref, field } = metas;\n\n if (refId && ref && field) {\n entity.related = [\n {\n id: refId,\n __type: ref,\n __pivot: { field },\n },\n ];\n }\n\n if (metas.path) {\n entity.path = metas.path;\n }\n\n if (metas.tmpWorkingDirectory) {\n entity.tmpWorkingDirectory = metas.tmpWorkingDirectory;\n }\n\n return entity;\n }\n\n async function enhanceAndValidateFile(\n file: InputFile,\n fileInfo: FileInfo,\n metas?: Metas\n ): Promise<UploadableFile> {\n const currentFile = (await formatFileInfo(\n {\n filename: file.originalFilename ?? 'unamed',\n type: file.mimetype ?? 'application/octet-stream',\n size: file.size,\n },\n fileInfo,\n {\n ...metas,\n tmpWorkingDirectory: file.tmpWorkingDirectory,\n }\n )) as UploadableFile;\n\n currentFile.filepath = file.filepath;\n currentFile.getStream = () => fs.createReadStream(file.filepath);\n\n const { optimize, isImage, isFaultyImage, isOptimizableImage } = strapi\n .plugin('upload')\n .service('image-manipulation');\n\n if (await isImage(currentFile)) {\n if (await isFaultyImage(currentFile)) {\n throw new ApplicationError('File is not a valid image');\n }\n if (await isOptimizableImage(currentFile)) {\n return optimize(currentFile);\n }\n }\n\n return currentFile;\n }\n\n async function upload(\n {\n data,\n files,\n }: {\n data: Record<string, unknown>;\n files: InputFile | InputFile[];\n },\n opts?: CommonOptions\n ) {\n const { user } = opts ?? {};\n // create temporary folder to store files for stream manipulation\n const tmpWorkingDirectory = await createAndAssignTmpWorkingDirectoryToFiles(files);\n\n let uploadedFiles: any[] = [];\n\n try {\n const { fileInfo, ...metas } = data;\n\n const fileArray = Array.isArray(files) ? files : [files];\n const fileInfoArray = Array.isArray(fileInfo) ? fileInfo : [fileInfo];\n\n const doUpload = async (file: InputFile, fileInfo: FileInfo) => {\n const fileData = await enhanceAndValidateFile(file, fileInfo, metas);\n return uploadFileAndPersist(fileData, { user });\n };\n\n uploadedFiles = await Promise.all(\n fileArray.map((file, idx) => doUpload(file, fileInfoArray[idx] || {}))\n );\n } finally {\n // delete temporary folder\n await fse.remove(tmpWorkingDirectory);\n }\n\n return uploadedFiles;\n }\n\n /**\n * When uploading an image, an additional thumbnail is generated.\n * Also, if there are responsive formats defined, another set of images will be generated too.\n *\n * @param {*} fileData\n */\n async function uploadImage(fileData: UploadableFile) {\n const { getDimensions, generateThumbnail, generateResponsiveFormats, isResizableImage } =\n getService('image-manipulation');\n\n // Store width and height of the original image\n const { width, height } = await getDimensions(fileData);\n\n // Make sure this is assigned before calling any upload\n // That way it can mutate the width and height\n _.assign(fileData, {\n width,\n height,\n });\n\n // For performance reasons, all uploads are wrapped in a single Promise.all\n const uploadThumbnail = async (thumbnailFile: UploadableFile) => {\n await getService('provider').upload(thumbnailFile);\n _.set(fileData, 'formats.thumbnail', thumbnailFile);\n };\n\n // Generate thumbnail and responsive formats\n const uploadResponsiveFormat = async (format: { key: string; file: UploadableFile }) => {\n const { key, file } = format;\n await getService('provider').upload(file);\n _.set(fileData, ['formats', key], file);\n };\n\n const uploadPromises: Promise<void>[] = [];\n\n // Upload image\n uploadPromises.push(getService('provider').upload(fileData));\n\n // Generate & Upload thumbnail and responsive formats\n if (await isResizableImage(fileData)) {\n const thumbnailFile = await generateThumbnail(fileData);\n if (thumbnailFile) {\n uploadPromises.push(uploadThumbnail(thumbnailFile));\n }\n\n const formats = await generateResponsiveFormats(fileData);\n if (Array.isArray(formats) && formats.length > 0) {\n for (const format of formats) {\n // eslint-disable-next-line no-continue\n if (!format) continue;\n uploadPromises.push(uploadResponsiveFormat(format));\n }\n }\n }\n // Wait for all uploads to finish\n await Promise.all(uploadPromises);\n }\n\n /**\n * Upload a file. If it is an image it will generate a thumbnail\n * and responsive formats (if enabled).\n */\n async function uploadFileAndPersist(fileData: UploadableFile, opts?: CommonOptions) {\n const { user } = opts ?? {};\n\n const config = strapi.config.get<Config>('plugin::upload');\n const { isImage } = getService('image-manipulation');\n\n await getService('provider').checkFileSize(fileData);\n\n if (await isImage(fileData)) {\n await uploadImage(fileData);\n } else {\n await getService('provider').upload(fileData);\n }\n\n _.set(fileData, 'provider', config.provider);\n\n // Persist file(s)\n return add(fileData, { user });\n }\n\n async function updateFileInfo(\n id: ID,\n { name, alternativeText, caption, folder }: FileInfo,\n opts?: CommonOptions\n ) {\n const { user } = opts ?? {};\n\n const dbFile = await findOne(id);\n\n if (!dbFile) {\n throw new NotFoundError();\n }\n\n const fileService = getService('file');\n\n const newName = _.isNil(name) ? dbFile.name : name;\n const newInfos = {\n name: newName,\n alternativeText: _.isNil(alternativeText) ? dbFile.alternativeText : alternativeText,\n caption: _.isNil(caption) ? dbFile.caption : caption,\n folder: _.isUndefined(folder) ? dbFile.folder : folder,\n folderPath: _.isUndefined(folder) ? dbFile.path : await fileService.getFolderPath(folder),\n };\n\n return update(id, newInfos, { user });\n }\n\n async function replace(\n id: ID,\n { data, file }: { data: { fileInfo: FileInfo }; file: InputFile },\n opts?: CommonOptions\n ) {\n const { user } = opts ?? {};\n\n const config = strapi.config.get<Config>('plugin::upload');\n\n const { isImage } = getService('image-manipulation');\n\n const dbFile = await findOne(id);\n if (!dbFile) {\n throw new NotFoundError();\n }\n\n // create temporary folder to store files for stream manipulation\n const tmpWorkingDirectory = await createAndAssignTmpWorkingDirectoryToFiles(file);\n\n let fileData: UploadableFile;\n\n try {\n const { fileInfo } = data;\n fileData = await enhanceAndValidateFile(file, fileInfo);\n\n // keep a constant hash and extension so the file url doesn't change when the file is replaced\n _.assign(fileData, {\n hash: dbFile.hash,\n ext: dbFile.ext,\n });\n\n // execute delete function of the provider\n if (dbFile.provider === config.provider) {\n await strapi.plugin('upload').provider.delete(dbFile);\n\n if (dbFile.formats) {\n await Promise.all(\n Object.keys(dbFile.formats).map((key) => {\n return strapi.plugin('upload').provider.delete(dbFile.formats[key]);\n })\n );\n }\n }\n\n // clear old formats\n _.set(fileData, 'formats', {});\n\n if (await isImage(fileData)) {\n await uploadImage(fileData);\n } else {\n await getService('provider').upload(fileData);\n }\n\n _.set(fileData, 'provider', config.provider);\n } finally {\n // delete temporary folder\n await fse.remove(tmpWorkingDirectory);\n }\n\n return update(id, fileData, { user });\n }\n\n async function update(id: ID, values: Partial<File>, opts?: CommonOptions) {\n const { user } = opts ?? {};\n\n const fileValues = { ...values };\n if (user) {\n Object.assign(fileValues, {\n [UPDATED_BY_ATTRIBUTE]: user.id,\n });\n }\n\n sendMediaMetrics(fileValues);\n\n const res = await strapi.db.query(FILE_MODEL_UID).update({ where: { id }, data: fileValues });\n\n await emitEvent(MEDIA_UPDATE, res);\n\n return res;\n }\n\n async function add(values: any, opts?: CommonOptions) {\n const { user } = opts ?? {};\n\n const fileValues = { ...values };\n if (user) {\n Object.assign(fileValues, {\n [UPDATED_BY_ATTRIBUTE]: user.id,\n [CREATED_BY_ATTRIBUTE]: user.id,\n });\n }\n\n sendMediaMetrics(fileValues);\n\n const res = await strapi.db.query(FILE_MODEL_UID).create({ data: fileValues });\n\n await emitEvent(MEDIA_CREATE, res);\n\n return res;\n }\n\n function findOne(id: ID, populate = {}) {\n const query = strapi.get('query-params').transform(FILE_MODEL_UID, {\n populate,\n });\n\n return strapi.db.query(FILE_MODEL_UID).findOne({\n where: { id },\n ...query,\n });\n }\n\n function findMany(query: any = {}): Promise<File[]> {\n return strapi.db\n .query(FILE_MODEL_UID)\n .findMany(strapi.get('query-params').transform(FILE_MODEL_UID, query));\n }\n\n function findPage(query: any = {}) {\n return strapi.db\n .query(FILE_MODEL_UID)\n .findPage(strapi.get('query-params').transform(FILE_MODEL_UID, query));\n }\n\n async function remove(file: File) {\n const config = strapi.config.get<Config>('plugin::upload');\n\n // execute delete function of the provider\n if (file.provider === config.provider) {\n await strapi.plugin('upload').provider.delete(file);\n\n if (file.formats) {\n const keys = Object.keys(file.formats);\n\n await Promise.all(\n keys.map((key) => {\n return strapi.plugin('upload').provider.delete(file.formats![key]);\n })\n );\n }\n }\n\n const media = await strapi.db.query(FILE_MODEL_UID).findOne({\n where: { id: file.id },\n });\n\n await emitEvent(MEDIA_DELETE, media);\n\n return strapi.db.query(FILE_MODEL_UID).delete({ where: { id: file.id } });\n }\n\n async function getSettings() {\n const res = await strapi.store!({ type: 'plugin', name: 'upload', key: 'settings' }).get({});\n\n return res as Settings | null;\n }\n\n function setSettings(value: Settings) {\n if (value.responsiveDimensions === true) {\n strapi.telemetry.send('didEnableResponsiveDimensions');\n } else {\n strapi.telemetry.send('didDisableResponsiveDimensions');\n }\n\n return strapi.store!({ type: 'plugin', name: 'upload', key: 'settings' }).set({ value });\n }\n\n async function getConfiguration() {\n const res = await strapi.store!({\n type: 'plugin',\n name: 'upload',\n key: 'view_configuration',\n }).get({});\n\n return res as ViewConfiguration | null;\n }\n\n function setConfiguration(value: ViewConfiguration) {\n return strapi.store!({ type: 'plugin', name: 'upload', key: 'view_configuration' }).set({\n value,\n });\n }\n\n return {\n formatFileInfo,\n upload,\n updateFileInfo,\n replace,\n findOne,\n findMany,\n findPage,\n remove,\n getSettings,\n setSettings,\n getConfiguration,\n setConfiguration,\n\n /**\n * exposed for testing only\n * @internal\n */\n _uploadImage: uploadImage,\n };\n};\n"],"names":["UPDATED_BY_ATTRIBUTE","CREATED_BY_ATTRIBUTE","contentTypesUtils","constants","MEDIA_CREATE","MEDIA_UPDATE","MEDIA_DELETE","ALLOWED_WEBHOOK_EVENTS","ApplicationError","NotFoundError","errors","bytesToKbytes","fileUtils","strapi","randomSuffix","crypto","randomBytes","toString","generateFileName","name","baseName","strings","nameToSlug","separator","lowercase","sendMediaMetrics","data","_","has","isEmpty","caption","telemetry","send","alternativeText","createAndAssignTmpWorkingDirectoryToFiles","files","tmpWorkingDirectory","fse","mkdtemp","path","join","os","tmpdir","Array","isArray","forEach","file","filenameReservedRegex","windowsReservedNameRegex","isValidFilename","string","length","test","emitEvent","event","modelDef","getModel","FILE_MODEL_UID","sanitizedData","sanitize","sanitizers","defaultSanitizeOutput","schema","uid","eventHub","emit","media","formatFileInfo","filename","type","size","fileInfo","metas","fileService","getService","ext","extname","extension","usedName","normalize","basename","entity","folder","folderPath","getFolderPath","hash","mime","sizeInBytes","refId","ref","field","related","id","__type","__pivot","enhanceAndValidateFile","currentFile","originalFilename","mimetype","filepath","getStream","fs","createReadStream","optimize","isImage","isFaultyImage","isOptimizableImage","plugin","service","upload","opts","user","uploadedFiles","fileArray","fileInfoArray","doUpload","fileData","uploadFileAndPersist","Promise","all","map","idx","remove","uploadImage","getDimensions","generateThumbnail","generateResponsiveFormats","isResizableImage","width","height","assign","uploadThumbnail","thumbnailFile","set","uploadResponsiveFormat","format","key","uploadPromises","push","formats","config","get","checkFileSize","provider","add","updateFileInfo","dbFile","findOne","newName","isNil","newInfos","isUndefined","update","replace","delete","Object","keys","values","fileValues","res","db","query","where","create","populate","transform","findMany","findPage","getSettings","store","setSettings","value","responsiveDimensions","getConfiguration","setConfiguration","_uploadImage"],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ 'use strict';
2
+
3
+ var fp = require('lodash/fp');
4
+ var dateFns = require('date-fns');
5
+ var cron = require('../utils/cron.js');
6
+ var constants = require('../constants.js');
7
+
8
+ const ONE_WEEK = 7 * 24 * 60 * 60 * 1000;
9
+ const getMetricsStoreValue = async ()=>{
10
+ const value = await strapi.store.get({
11
+ type: 'plugin',
12
+ name: 'upload',
13
+ key: 'metrics'
14
+ });
15
+ return fp.defaultTo({}, value);
16
+ };
17
+ const setMetricsStoreValue = (value)=>strapi.store.set({
18
+ type: 'plugin',
19
+ name: 'upload',
20
+ key: 'metrics',
21
+ value
22
+ });
23
+ var weeklyMetrics = (({ strapi: strapi1 })=>({
24
+ async computeMetrics () {
25
+ // Folder metrics
26
+ // @ts-expect-error - no dynamic types for the metadata
27
+ const pathColName = strapi1.db.metadata.get(constants.FOLDER_MODEL_UID).attributes.path.columnName;
28
+ const folderTable = strapi1.getModel(constants.FOLDER_MODEL_UID).collectionName;
29
+ let keepOnlySlashesSQLString = '??';
30
+ const queryParams = [
31
+ pathColName
32
+ ];
33
+ for(let i = 0; i < 10; i += 1){
34
+ keepOnlySlashesSQLString = `REPLACE(${keepOnlySlashesSQLString}, ?, ?)`;
35
+ queryParams.push(String(i), '');
36
+ }
37
+ /*
38
+ The following query goal is to count the number of folders with depth 1, depth 2 etc.
39
+ The query returns :
40
+ [
41
+ { depth: 1, occurence: 4 },
42
+ { depth: 2, occurence: 2 },
43
+ { depth: 3, occurence: 5 },
44
+ ]
45
+
46
+ The query is built as follow:
47
+ 1. In order to get the depth level of a folder:
48
+ - we take their path
49
+ - remove all numbers (by replacing 0123456789 by '', thus the 10 REPLACE in the query)
50
+ - count the remaining `/`, which correspond to their depth (by using LENGTH)
51
+ We now have, for each folder, its depth.
52
+ 2. In order to get the number of folders for each depth:
53
+ - we group them by their depth and use COUNT(*)
54
+ */ const res = await strapi1.db.getConnection(folderTable).select(strapi1.db.connection.raw(`LENGTH(${keepOnlySlashesSQLString}) AS depth, COUNT(*) AS occurence`, queryParams)).groupBy('depth');
55
+ const folderLevelsArray = res.map((map)=>({
56
+ depth: Number(map.depth),
57
+ occurence: Number(map.occurence)
58
+ })); // values can be strings depending on the database
59
+ let product = 0;
60
+ let folderNumber = 0;
61
+ let maxDepth = 0;
62
+ for (const folderLevel of folderLevelsArray){
63
+ product += folderLevel.depth * folderLevel.occurence;
64
+ folderNumber += folderLevel.occurence;
65
+ if (folderLevel.depth > maxDepth) {
66
+ maxDepth = folderLevel.depth;
67
+ }
68
+ }
69
+ const averageDepth = folderNumber !== 0 ? product / folderNumber : 0;
70
+ let sumOfDeviation = 0;
71
+ for (const folderLevel of folderLevelsArray){
72
+ sumOfDeviation += Math.abs(folderLevel.depth - averageDepth) * folderLevel.occurence;
73
+ }
74
+ const averageDeviationDepth = folderNumber !== 0 ? sumOfDeviation / folderNumber : 0;
75
+ // File metrics
76
+ const assetNumber = await strapi1.db.query(constants.FILE_MODEL_UID).count();
77
+ return {
78
+ assetNumber,
79
+ folderNumber,
80
+ averageDepth,
81
+ maxDepth,
82
+ averageDeviationDepth
83
+ };
84
+ },
85
+ async sendMetrics () {
86
+ const metrics = await this.computeMetrics();
87
+ strapi1.telemetry.send('didSendUploadPropertiesOnceAWeek', {
88
+ groupProperties: {
89
+ metrics
90
+ }
91
+ });
92
+ const metricsInfoStored = await getMetricsStoreValue();
93
+ await setMetricsStoreValue({
94
+ ...metricsInfoStored,
95
+ lastWeeklyUpdate: new Date().getTime()
96
+ });
97
+ },
98
+ async ensureWeeklyStoredCronSchedule () {
99
+ const metricsInfoStored = await getMetricsStoreValue();
100
+ const { weeklySchedule: currentSchedule, lastWeeklyUpdate } = metricsInfoStored;
101
+ const now = new Date();
102
+ let weeklySchedule = currentSchedule;
103
+ if (!weeklySchedule || !lastWeeklyUpdate || lastWeeklyUpdate + ONE_WEEK < now.getTime()) {
104
+ weeklySchedule = cron.getWeeklyCronScheduleAt(dateFns.add(now, {
105
+ seconds: 15
106
+ }));
107
+ await setMetricsStoreValue({
108
+ ...metricsInfoStored,
109
+ weeklySchedule
110
+ });
111
+ return weeklySchedule;
112
+ }
113
+ return weeklySchedule;
114
+ },
115
+ async registerCron () {
116
+ const weeklySchedule = await this.ensureWeeklyStoredCronSchedule();
117
+ strapi1.cron.add({
118
+ uploadWeekly: {
119
+ task: this.sendMetrics.bind(this),
120
+ options: weeklySchedule
121
+ }
122
+ });
123
+ }
124
+ }));
125
+
126
+ module.exports = weeklyMetrics;
127
+ //# sourceMappingURL=weekly-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weekly-metrics.js","sources":["../../../server/src/services/weekly-metrics.ts"],"sourcesContent":["import { defaultTo } from 'lodash/fp';\nimport { add } from 'date-fns';\n\nimport type { Core } from '@strapi/types';\n\nimport { getWeeklyCronScheduleAt } from '../utils/cron';\nimport { FOLDER_MODEL_UID, FILE_MODEL_UID } from '../constants';\n\ntype MetricStoreValue = {\n lastWeeklyUpdate?: number;\n weeklySchedule?: string;\n};\n\nconst ONE_WEEK = 7 * 24 * 60 * 60 * 1000;\n\nconst getMetricsStoreValue = async (): Promise<MetricStoreValue> => {\n const value = await strapi.store.get({ type: 'plugin', name: 'upload', key: 'metrics' });\n return defaultTo({}, value) as MetricStoreValue;\n};\nconst setMetricsStoreValue = (value: MetricStoreValue) =>\n strapi.store.set({ type: 'plugin', name: 'upload', key: 'metrics', value });\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n async computeMetrics() {\n // Folder metrics\n // @ts-expect-error - no dynamic types for the metadata\n const pathColName = strapi.db.metadata.get(FOLDER_MODEL_UID).attributes.path.columnName;\n const folderTable = strapi.getModel(FOLDER_MODEL_UID).collectionName;\n\n let keepOnlySlashesSQLString = '??';\n const queryParams = [pathColName];\n for (let i = 0; i < 10; i += 1) {\n keepOnlySlashesSQLString = `REPLACE(${keepOnlySlashesSQLString}, ?, ?)`;\n queryParams.push(String(i), '');\n }\n\n /*\n The following query goal is to count the number of folders with depth 1, depth 2 etc.\n The query returns :\n [\n { depth: 1, occurence: 4 },\n { depth: 2, occurence: 2 },\n { depth: 3, occurence: 5 },\n ]\n\n The query is built as follow:\n 1. In order to get the depth level of a folder:\n - we take their path\n - remove all numbers (by replacing 0123456789 by '', thus the 10 REPLACE in the query)\n - count the remaining `/`, which correspond to their depth (by using LENGTH)\n We now have, for each folder, its depth.\n 2. In order to get the number of folders for each depth:\n - we group them by their depth and use COUNT(*)\n */\n\n const res = (await strapi.db\n .getConnection(folderTable)\n .select(\n strapi.db.connection.raw(\n `LENGTH(${keepOnlySlashesSQLString}) AS depth, COUNT(*) AS occurence`,\n queryParams\n )\n )\n .groupBy('depth')) as Array<{ depth: string; occurence: string }>;\n\n const folderLevelsArray = res.map((map) => ({\n depth: Number(map.depth),\n occurence: Number(map.occurence),\n })); // values can be strings depending on the database\n\n let product = 0;\n let folderNumber = 0;\n let maxDepth = 0;\n for (const folderLevel of folderLevelsArray) {\n product += folderLevel.depth * folderLevel.occurence;\n folderNumber += folderLevel.occurence;\n if (folderLevel.depth > maxDepth) {\n maxDepth = folderLevel.depth;\n }\n }\n const averageDepth = folderNumber !== 0 ? product / folderNumber : 0;\n\n let sumOfDeviation = 0;\n for (const folderLevel of folderLevelsArray) {\n sumOfDeviation += Math.abs(folderLevel.depth - averageDepth) * folderLevel.occurence;\n }\n\n const averageDeviationDepth = folderNumber !== 0 ? sumOfDeviation / folderNumber : 0;\n\n // File metrics\n const assetNumber = await strapi.db.query(FILE_MODEL_UID).count();\n\n return {\n assetNumber,\n folderNumber,\n averageDepth,\n maxDepth,\n averageDeviationDepth,\n };\n },\n\n async sendMetrics() {\n const metrics = await this.computeMetrics();\n strapi.telemetry.send('didSendUploadPropertiesOnceAWeek', {\n groupProperties: { metrics },\n });\n\n const metricsInfoStored = await getMetricsStoreValue();\n await setMetricsStoreValue({ ...metricsInfoStored, lastWeeklyUpdate: new Date().getTime() });\n },\n\n async ensureWeeklyStoredCronSchedule(): Promise<string> {\n const metricsInfoStored = await getMetricsStoreValue();\n const { weeklySchedule: currentSchedule, lastWeeklyUpdate } = metricsInfoStored;\n\n const now = new Date();\n let weeklySchedule = currentSchedule;\n\n if (!weeklySchedule || !lastWeeklyUpdate || lastWeeklyUpdate + ONE_WEEK < now.getTime()) {\n weeklySchedule = getWeeklyCronScheduleAt(add(now, { seconds: 15 }));\n await setMetricsStoreValue({ ...metricsInfoStored, weeklySchedule });\n\n return weeklySchedule;\n }\n\n return weeklySchedule;\n },\n\n async registerCron() {\n const weeklySchedule = await this.ensureWeeklyStoredCronSchedule();\n\n strapi.cron.add({\n uploadWeekly: {\n task: this.sendMetrics.bind(this),\n options: weeklySchedule,\n },\n });\n },\n});\n"],"names":["ONE_WEEK","getMetricsStoreValue","value","strapi","store","get","type","name","key","defaultTo","setMetricsStoreValue","set","computeMetrics","pathColName","db","metadata","FOLDER_MODEL_UID","attributes","path","columnName","folderTable","getModel","collectionName","keepOnlySlashesSQLString","queryParams","i","push","String","res","getConnection","select","connection","raw","groupBy","folderLevelsArray","map","depth","Number","occurence","product","folderNumber","maxDepth","folderLevel","averageDepth","sumOfDeviation","Math","abs","averageDeviationDepth","assetNumber","query","FILE_MODEL_UID","count","sendMetrics","metrics","telemetry","send","groupProperties","metricsInfoStored","lastWeeklyUpdate","Date","getTime","ensureWeeklyStoredCronSchedule","weeklySchedule","currentSchedule","now","getWeeklyCronScheduleAt","add","seconds","registerCron","cron","uploadWeekly","task","bind","options"],"mappings":"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"}