@strapi/upload 5.12.0 → 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.
- package/dist/admin/components/AssetCard/AssetCard.js +59 -0
- package/dist/admin/components/AssetCard/AssetCard.js.map +1 -0
- package/dist/admin/components/AssetCard/AssetCard.mjs +57 -0
- package/dist/admin/components/AssetCard/AssetCard.mjs.map +1 -0
- package/dist/admin/components/AssetCard/AssetCardBase.js +130 -0
- package/dist/admin/components/AssetCard/AssetCardBase.js.map +1 -0
- package/dist/admin/components/AssetCard/AssetCardBase.mjs +128 -0
- package/dist/admin/components/AssetCard/AssetCardBase.mjs.map +1 -0
- package/dist/admin/components/AssetCard/AudioAssetCard.js +40 -0
- package/dist/admin/components/AssetCard/AudioAssetCard.js.map +1 -0
- package/dist/admin/components/AssetCard/AudioAssetCard.mjs +38 -0
- package/dist/admin/components/AssetCard/AudioAssetCard.mjs.map +1 -0
- package/dist/admin/components/AssetCard/AudioPreview.js +17 -0
- package/dist/admin/components/AssetCard/AudioPreview.js.map +1 -0
- package/dist/admin/components/AssetCard/AudioPreview.mjs +15 -0
- package/dist/admin/components/AssetCard/AudioPreview.mjs.map +1 -0
- package/dist/admin/components/AssetCard/DocAssetCard.js +61 -0
- package/dist/admin/components/AssetCard/DocAssetCard.js.map +1 -0
- package/dist/admin/components/AssetCard/DocAssetCard.mjs +59 -0
- package/dist/admin/components/AssetCard/DocAssetCard.mjs.map +1 -0
- package/dist/admin/components/AssetCard/ImageAssetCard.js +37 -0
- package/dist/admin/components/AssetCard/ImageAssetCard.js.map +1 -0
- package/dist/admin/components/AssetCard/ImageAssetCard.mjs +35 -0
- package/dist/admin/components/AssetCard/ImageAssetCard.mjs.map +1 -0
- package/dist/admin/components/AssetCard/UploadingAssetCard.js +152 -0
- package/dist/admin/components/AssetCard/UploadingAssetCard.js.map +1 -0
- package/dist/admin/components/AssetCard/UploadingAssetCard.mjs +131 -0
- package/dist/admin/components/AssetCard/UploadingAssetCard.mjs.map +1 -0
- package/dist/admin/components/AssetCard/VideoAssetCard.js +72 -0
- package/dist/admin/components/AssetCard/VideoAssetCard.js.map +1 -0
- package/dist/admin/components/AssetCard/VideoAssetCard.mjs +51 -0
- package/dist/admin/components/AssetCard/VideoAssetCard.mjs.map +1 -0
- package/dist/admin/components/AssetCard/VideoPreview.js +50 -0
- package/dist/admin/components/AssetCard/VideoPreview.js.map +1 -0
- package/dist/admin/components/AssetCard/VideoPreview.mjs +48 -0
- package/dist/admin/components/AssetCard/VideoPreview.mjs.map +1 -0
- package/dist/admin/components/AssetDialog/AssetDialog.js +321 -0
- package/dist/admin/components/AssetDialog/AssetDialog.js.map +1 -0
- package/dist/admin/components/AssetDialog/AssetDialog.mjs +299 -0
- package/dist/admin/components/AssetDialog/AssetDialog.mjs.map +1 -0
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js +313 -0
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js.map +1 -0
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs +311 -0
- package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs.map +1 -0
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.js +70 -0
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.js.map +1 -0
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.mjs +49 -0
- package/dist/admin/components/AssetDialog/BrowseStep/Filters.mjs.map +1 -0
- package/dist/admin/components/AssetDialog/BrowseStep/PageSize.js +58 -0
- package/dist/admin/components/AssetDialog/BrowseStep/PageSize.js.map +1 -0
- package/dist/admin/components/AssetDialog/BrowseStep/PageSize.mjs +56 -0
- package/dist/admin/components/AssetDialog/BrowseStep/PageSize.mjs.map +1 -0
- package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.js +55 -0
- package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.js.map +1 -0
- package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.mjs +33 -0
- package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.mjs.map +1 -0
- package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.js +378 -0
- package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.js.map +1 -0
- package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.mjs +376 -0
- package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.mjs.map +1 -0
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js +102 -0
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js.map +1 -0
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs +81 -0
- package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs.map +1 -0
- package/dist/admin/components/AssetDialog/BrowseStep/utils/isSelectable.js +14 -0
- package/dist/admin/components/AssetDialog/BrowseStep/utils/isSelectable.js.map +1 -0
- package/dist/admin/components/AssetDialog/BrowseStep/utils/isSelectable.mjs +12 -0
- package/dist/admin/components/AssetDialog/BrowseStep/utils/isSelectable.mjs.map +1 -0
- package/dist/admin/components/AssetDialog/DialogFooter.js +31 -0
- package/dist/admin/components/AssetDialog/DialogFooter.js.map +1 -0
- package/dist/admin/components/AssetDialog/DialogFooter.mjs +29 -0
- package/dist/admin/components/AssetDialog/DialogFooter.mjs.map +1 -0
- package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.js +60 -0
- package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.js.map +1 -0
- package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.mjs +58 -0
- package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.mjs.map +1 -0
- package/dist/admin/components/AssetGridList/AssetGridList.js +72 -0
- package/dist/admin/components/AssetGridList/AssetGridList.js.map +1 -0
- package/dist/admin/components/AssetGridList/AssetGridList.mjs +70 -0
- package/dist/admin/components/AssetGridList/AssetGridList.mjs.map +1 -0
- package/dist/admin/components/AssetGridList/Draggable.js +65 -0
- package/dist/admin/components/AssetGridList/Draggable.js.map +1 -0
- package/dist/admin/components/AssetGridList/Draggable.mjs +44 -0
- package/dist/admin/components/AssetGridList/Draggable.mjs.map +1 -0
- package/dist/admin/components/Breadcrumbs/Breadcrumbs.js +49 -0
- package/dist/admin/components/Breadcrumbs/Breadcrumbs.js.map +1 -0
- package/dist/admin/components/Breadcrumbs/Breadcrumbs.mjs +47 -0
- package/dist/admin/components/Breadcrumbs/Breadcrumbs.mjs.map +1 -0
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js +89 -0
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js.map +1 -0
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs +68 -0
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs.map +1 -0
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js +154 -0
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js.map +1 -0
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs +152 -0
- package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs.map +1 -0
- package/dist/admin/components/ContextInfo/ContextInfo.js +44 -0
- package/dist/admin/components/ContextInfo/ContextInfo.js.map +1 -0
- package/dist/admin/components/ContextInfo/ContextInfo.mjs +42 -0
- package/dist/admin/components/ContextInfo/ContextInfo.mjs.map +1 -0
- package/dist/admin/components/CopyLinkButton/CopyLinkButton.js +43 -0
- package/dist/admin/components/CopyLinkButton/CopyLinkButton.js.map +1 -0
- package/dist/admin/components/CopyLinkButton/CopyLinkButton.mjs +41 -0
- package/dist/admin/components/CopyLinkButton/CopyLinkButton.mjs.map +1 -0
- package/dist/admin/components/EditAssetDialog/DialogHeader.js +20 -0
- package/dist/admin/components/EditAssetDialog/DialogHeader.js.map +1 -0
- package/dist/admin/components/EditAssetDialog/DialogHeader.mjs +18 -0
- package/dist/admin/components/EditAssetDialog/DialogHeader.mjs.map +1 -0
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js +403 -0
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -0
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +380 -0
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js +127 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +1 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs +106 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs.map +1 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.js +111 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.js.map +1 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.mjs +109 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.mjs.map +1 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js +260 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +1 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs +239 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs.map +1 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.js +75 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.js.map +1 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.mjs +68 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.mjs.map +1 -0
- package/dist/admin/components/EditAssetDialog/RemoveAssetDialog.js +27 -0
- package/dist/admin/components/EditAssetDialog/RemoveAssetDialog.js.map +1 -0
- package/dist/admin/components/EditAssetDialog/RemoveAssetDialog.mjs +25 -0
- package/dist/admin/components/EditAssetDialog/RemoveAssetDialog.mjs.map +1 -0
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js +79 -0
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js.map +1 -0
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs +58 -0
- package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs.map +1 -0
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.js +336 -0
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.js.map +1 -0
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.mjs +313 -0
- package/dist/admin/components/EditFolderDialog/EditFolderDialog.mjs.map +1 -0
- package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.js +29 -0
- package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.js.map +1 -0
- package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.mjs +27 -0
- package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.mjs.map +1 -0
- package/dist/admin/components/EditFolderDialog/RemoveFolderDialog.js +18 -0
- package/dist/admin/components/EditFolderDialog/RemoveFolderDialog.js.map +1 -0
- package/dist/admin/components/EditFolderDialog/RemoveFolderDialog.mjs +16 -0
- package/dist/admin/components/EditFolderDialog/RemoveFolderDialog.mjs.map +1 -0
- package/dist/admin/components/EmptyAssets/EmptyAssetGrid.js +31 -0
- package/dist/admin/components/EmptyAssets/EmptyAssetGrid.js.map +1 -0
- package/dist/admin/components/EmptyAssets/EmptyAssetGrid.mjs +29 -0
- package/dist/admin/components/EmptyAssets/EmptyAssetGrid.mjs.map +1 -0
- package/dist/admin/components/EmptyAssets/EmptyAssets.js +53 -0
- package/dist/admin/components/EmptyAssets/EmptyAssets.js.map +1 -0
- package/dist/admin/components/EmptyAssets/EmptyAssets.mjs +51 -0
- package/dist/admin/components/EmptyAssets/EmptyAssets.mjs.map +1 -0
- package/dist/admin/components/FilterList/FilterList.js +74 -0
- package/dist/admin/components/FilterList/FilterList.js.map +1 -0
- package/dist/admin/components/FilterList/FilterList.mjs +72 -0
- package/dist/admin/components/FilterList/FilterList.mjs.map +1 -0
- package/dist/admin/components/FilterList/FilterTag.js +50 -0
- package/dist/admin/components/FilterList/FilterTag.js.map +1 -0
- package/dist/admin/components/FilterList/FilterTag.mjs +48 -0
- package/dist/admin/components/FilterList/FilterTag.mjs.map +1 -0
- package/dist/admin/components/FilterPopover/FilterPopover.js +275 -0
- package/dist/admin/components/FilterPopover/FilterPopover.js.map +1 -0
- package/dist/admin/components/FilterPopover/FilterPopover.mjs +254 -0
- package/dist/admin/components/FilterPopover/FilterPopover.mjs.map +1 -0
- package/dist/admin/components/FilterPopover/FilterValueInput.js +39 -0
- package/dist/admin/components/FilterPopover/FilterValueInput.js.map +1 -0
- package/dist/admin/components/FilterPopover/FilterValueInput.mjs +37 -0
- package/dist/admin/components/FilterPopover/FilterValueInput.mjs.map +1 -0
- package/dist/admin/components/FilterPopover/utils/getFilterList.js +114 -0
- package/dist/admin/components/FilterPopover/utils/getFilterList.js.map +1 -0
- package/dist/admin/components/FilterPopover/utils/getFilterList.mjs +112 -0
- package/dist/admin/components/FilterPopover/utils/getFilterList.mjs.map +1 -0
- package/dist/admin/components/FolderCard/FolderCard/FolderCard.js +125 -0
- package/dist/admin/components/FolderCard/FolderCard/FolderCard.js.map +1 -0
- package/dist/admin/components/FolderCard/FolderCard/FolderCard.mjs +104 -0
- package/dist/admin/components/FolderCard/FolderCard/FolderCard.mjs.map +1 -0
- package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.js +26 -0
- package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.js.map +1 -0
- package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.mjs +24 -0
- package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.mjs.map +1 -0
- package/dist/admin/components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.js +40 -0
- package/dist/admin/components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.js.map +1 -0
- package/dist/admin/components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.mjs +38 -0
- package/dist/admin/components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.mjs.map +1 -0
- package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js +20 -0
- package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js.map +1 -0
- package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.mjs +18 -0
- package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.mjs.map +1 -0
- package/dist/admin/components/FolderCard/contexts/FolderCard.js +12 -0
- package/dist/admin/components/FolderCard/contexts/FolderCard.js.map +1 -0
- package/dist/admin/components/FolderCard/contexts/FolderCard.mjs +9 -0
- package/dist/admin/components/FolderCard/contexts/FolderCard.mjs.map +1 -0
- package/dist/admin/components/FolderGridList/FolderGridList.js +29 -0
- package/dist/admin/components/FolderGridList/FolderGridList.js.map +1 -0
- package/dist/admin/components/FolderGridList/FolderGridList.mjs +27 -0
- package/dist/admin/components/FolderGridList/FolderGridList.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.js +71 -0
- package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.js.map +1 -0
- package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.mjs +50 -0
- package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js +78 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs +76 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.js +52 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs +50 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js +112 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs +91 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js +116 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs +95 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs.map +1 -0
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js +216 -0
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -0
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +195 -0
- package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -0
- package/dist/admin/components/SelectTree/Option.js +70 -0
- package/dist/admin/components/SelectTree/Option.js.map +1 -0
- package/dist/admin/components/SelectTree/Option.mjs +68 -0
- package/dist/admin/components/SelectTree/Option.mjs.map +1 -0
- package/dist/admin/components/SelectTree/SelectTree.js +276 -0
- package/dist/admin/components/SelectTree/SelectTree.js.map +1 -0
- package/dist/admin/components/SelectTree/SelectTree.mjs +255 -0
- package/dist/admin/components/SelectTree/SelectTree.mjs.map +1 -0
- package/dist/admin/components/SelectTree/utils/flattenTree.js +19 -0
- package/dist/admin/components/SelectTree/utils/flattenTree.js.map +1 -0
- package/dist/admin/components/SelectTree/utils/flattenTree.mjs +17 -0
- package/dist/admin/components/SelectTree/utils/flattenTree.mjs.map +1 -0
- package/dist/admin/components/SelectTree/utils/getOpenValues.js +24 -0
- package/dist/admin/components/SelectTree/utils/getOpenValues.js.map +1 -0
- package/dist/admin/components/SelectTree/utils/getOpenValues.mjs +22 -0
- package/dist/admin/components/SelectTree/utils/getOpenValues.mjs.map +1 -0
- package/dist/admin/components/SelectTree/utils/getValuesToClose.js +12 -0
- package/dist/admin/components/SelectTree/utils/getValuesToClose.js.map +1 -0
- package/dist/admin/components/SelectTree/utils/getValuesToClose.mjs +10 -0
- package/dist/admin/components/SelectTree/utils/getValuesToClose.mjs.map +1 -0
- package/dist/admin/components/SortPicker/SortPicker.js +39 -0
- package/dist/admin/components/SortPicker/SortPicker.js.map +1 -0
- package/dist/admin/components/SortPicker/SortPicker.mjs +37 -0
- package/dist/admin/components/SortPicker/SortPicker.mjs.map +1 -0
- package/dist/admin/components/TableList/CellContent.js +76 -0
- package/dist/admin/components/TableList/CellContent.js.map +1 -0
- package/dist/admin/components/TableList/CellContent.mjs +74 -0
- package/dist/admin/components/TableList/CellContent.mjs.map +1 -0
- package/dist/admin/components/TableList/PreviewCell.js +82 -0
- package/dist/admin/components/TableList/PreviewCell.js.map +1 -0
- package/dist/admin/components/TableList/PreviewCell.mjs +80 -0
- package/dist/admin/components/TableList/PreviewCell.mjs.map +1 -0
- package/dist/admin/components/TableList/TableList.js +99 -0
- package/dist/admin/components/TableList/TableList.js.map +1 -0
- package/dist/admin/components/TableList/TableList.mjs +97 -0
- package/dist/admin/components/TableList/TableList.mjs.map +1 -0
- package/dist/admin/components/TableList/TableRows.js +101 -0
- package/dist/admin/components/TableList/TableRows.js.map +1 -0
- package/dist/admin/components/TableList/TableRows.mjs +99 -0
- package/dist/admin/components/TableList/TableRows.mjs.map +1 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js +84 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js.map +1 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs +82 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs.map +1 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js +203 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js.map +1 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs +182 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs.map +1 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js +127 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js.map +1 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs +106 -0
- package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs.map +1 -0
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js +206 -0
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js.map +1 -0
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs +185 -0
- package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs.map +1 -0
- package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.js +129 -0
- package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.js.map +1 -0
- package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.mjs +108 -0
- package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.mjs.map +1 -0
- package/dist/admin/components/UploadProgress/UploadProgress.js +88 -0
- package/dist/admin/components/UploadProgress/UploadProgress.js.map +1 -0
- package/dist/admin/components/UploadProgress/UploadProgress.mjs +86 -0
- package/dist/admin/components/UploadProgress/UploadProgress.mjs.map +1 -0
- package/dist/admin/constants.js +205 -0
- package/dist/admin/constants.js.map +1 -0
- package/dist/admin/constants.mjs +198 -0
- package/dist/admin/constants.mjs.map +1 -0
- package/dist/admin/hooks/useAssets.js +124 -0
- package/dist/admin/hooks/useAssets.js.map +1 -0
- package/dist/admin/hooks/useAssets.mjs +103 -0
- package/dist/admin/hooks/useAssets.mjs.map +1 -0
- package/dist/admin/hooks/useBulkMove.js +79 -0
- package/dist/admin/hooks/useBulkMove.js.map +1 -0
- package/dist/admin/hooks/useBulkMove.mjs +77 -0
- package/dist/admin/hooks/useBulkMove.mjs.map +1 -0
- package/dist/admin/hooks/useBulkRemove.js +79 -0
- package/dist/admin/hooks/useBulkRemove.js.map +1 -0
- package/dist/admin/hooks/useBulkRemove.mjs +77 -0
- package/dist/admin/hooks/useBulkRemove.mjs.map +1 -0
- package/dist/admin/hooks/useConfig.js +57 -0
- package/dist/admin/hooks/useConfig.js.map +1 -0
- package/dist/admin/hooks/useConfig.mjs +55 -0
- package/dist/admin/hooks/useConfig.mjs.map +1 -0
- package/dist/admin/hooks/useCropImg.js +96 -0
- package/dist/admin/hooks/useCropImg.js.map +1 -0
- package/dist/admin/hooks/useCropImg.mjs +75 -0
- package/dist/admin/hooks/useCropImg.mjs.map +1 -0
- package/dist/admin/hooks/useEditAsset.js +114 -0
- package/dist/admin/hooks/useEditAsset.js.map +1 -0
- package/dist/admin/hooks/useEditAsset.mjs +93 -0
- package/dist/admin/hooks/useEditAsset.mjs.map +1 -0
- package/dist/admin/hooks/useEditFolder.js +44 -0
- package/dist/admin/hooks/useEditFolder.js.map +1 -0
- package/dist/admin/hooks/useEditFolder.mjs +42 -0
- package/dist/admin/hooks/useEditFolder.mjs.map +1 -0
- package/dist/admin/hooks/useFolder.js +58 -0
- package/dist/admin/hooks/useFolder.js.map +1 -0
- package/dist/admin/hooks/useFolder.mjs +56 -0
- package/dist/admin/hooks/useFolder.mjs.map +1 -0
- package/dist/admin/hooks/useFolderStructure.js +53 -0
- package/dist/admin/hooks/useFolderStructure.js.map +1 -0
- package/dist/admin/hooks/useFolderStructure.mjs +51 -0
- package/dist/admin/hooks/useFolderStructure.mjs.map +1 -0
- package/dist/admin/hooks/useFolders.js +107 -0
- package/dist/admin/hooks/useFolders.js.map +1 -0
- package/dist/admin/hooks/useFolders.mjs +86 -0
- package/dist/admin/hooks/useFolders.mjs.map +1 -0
- package/dist/admin/hooks/useMediaLibraryPermissions.js +16 -0
- package/dist/admin/hooks/useMediaLibraryPermissions.js.map +1 -0
- package/dist/admin/hooks/useMediaLibraryPermissions.mjs +14 -0
- package/dist/admin/hooks/useMediaLibraryPermissions.mjs.map +1 -0
- package/dist/admin/hooks/useModalQueryParams.js +138 -0
- package/dist/admin/hooks/useModalQueryParams.js.map +1 -0
- package/dist/admin/hooks/useModalQueryParams.mjs +117 -0
- package/dist/admin/hooks/useModalQueryParams.mjs.map +1 -0
- package/dist/admin/hooks/usePersistentState.js +31 -0
- package/dist/admin/hooks/usePersistentState.js.map +1 -0
- package/dist/admin/hooks/usePersistentState.mjs +29 -0
- package/dist/admin/hooks/usePersistentState.mjs.map +1 -0
- package/dist/admin/hooks/useRemoveAsset.js +53 -0
- package/dist/admin/hooks/useRemoveAsset.js.map +1 -0
- package/dist/admin/hooks/useRemoveAsset.mjs +51 -0
- package/dist/admin/hooks/useRemoveAsset.mjs.map +1 -0
- package/dist/admin/hooks/useSelectionState.js +85 -0
- package/dist/admin/hooks/useSelectionState.js.map +1 -0
- package/dist/admin/hooks/useSelectionState.mjs +64 -0
- package/dist/admin/hooks/useSelectionState.mjs.map +1 -0
- package/dist/admin/hooks/useUpload.js +86 -0
- package/dist/admin/hooks/useUpload.js.map +1 -0
- package/dist/admin/hooks/useUpload.mjs +65 -0
- package/dist/admin/hooks/useUpload.mjs.map +1 -0
- package/dist/admin/hooks/utils/renameKeys.js +12 -0
- package/dist/admin/hooks/utils/renameKeys.js.map +1 -0
- package/dist/admin/hooks/utils/renameKeys.mjs +10 -0
- package/dist/admin/hooks/utils/renameKeys.mjs.map +1 -0
- package/dist/admin/index.js +104 -22
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +105 -21
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/package.json.js +161 -0
- package/dist/admin/package.json.js.map +1 -0
- package/dist/admin/package.json.mjs +143 -0
- package/dist/admin/package.json.mjs.map +1 -0
- package/dist/admin/pages/App/App.js +94 -0
- package/dist/admin/pages/App/App.js.map +1 -0
- package/dist/admin/pages/App/App.mjs +73 -0
- package/dist/admin/pages/App/App.mjs.map +1 -0
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js +142 -0
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -0
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs +121 -0
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -0
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.js +108 -0
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.js.map +1 -0
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs +106 -0
- package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs.map +1 -0
- package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.js +10 -0
- package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.js.map +1 -0
- package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.mjs +7 -0
- package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.mjs.map +1 -0
- package/dist/admin/pages/App/ConfigureTheView/state/actions.js +16 -0
- package/dist/admin/pages/App/ConfigureTheView/state/actions.js.map +1 -0
- package/dist/admin/pages/App/ConfigureTheView/state/actions.mjs +13 -0
- package/dist/admin/pages/App/ConfigureTheView/state/actions.mjs.map +1 -0
- package/dist/admin/pages/App/ConfigureTheView/state/init.js +17 -0
- package/dist/admin/pages/App/ConfigureTheView/state/init.js.map +1 -0
- package/dist/admin/pages/App/ConfigureTheView/state/init.mjs +14 -0
- package/dist/admin/pages/App/ConfigureTheView/state/init.mjs.map +1 -0
- package/dist/admin/pages/App/ConfigureTheView/state/reducer.js +40 -0
- package/dist/admin/pages/App/ConfigureTheView/state/reducer.js.map +1 -0
- package/dist/admin/pages/App/ConfigureTheView/state/reducer.mjs +38 -0
- package/dist/admin/pages/App/ConfigureTheView/state/reducer.mjs.map +1 -0
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js +453 -0
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js.map +1 -0
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs +432 -0
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs.map +1 -0
- package/dist/admin/pages/App/MediaLibrary/components/BulkActions.js +49 -0
- package/dist/admin/pages/App/MediaLibrary/components/BulkActions.js.map +1 -0
- package/dist/admin/pages/App/MediaLibrary/components/BulkActions.mjs +47 -0
- package/dist/admin/pages/App/MediaLibrary/components/BulkActions.mjs.map +1 -0
- package/dist/admin/pages/App/MediaLibrary/components/BulkDeleteButton.js +38 -0
- package/dist/admin/pages/App/MediaLibrary/components/BulkDeleteButton.js.map +1 -0
- package/dist/admin/pages/App/MediaLibrary/components/BulkDeleteButton.mjs +36 -0
- package/dist/admin/pages/App/MediaLibrary/components/BulkDeleteButton.mjs.map +1 -0
- package/dist/admin/pages/App/MediaLibrary/components/BulkMoveButton.js +61 -0
- package/dist/admin/pages/App/MediaLibrary/components/BulkMoveButton.js.map +1 -0
- package/dist/admin/pages/App/MediaLibrary/components/BulkMoveButton.mjs +40 -0
- package/dist/admin/pages/App/MediaLibrary/components/BulkMoveButton.mjs.map +1 -0
- package/dist/admin/pages/App/MediaLibrary/components/EmptyOrNoPermissions.js +66 -0
- package/dist/admin/pages/App/MediaLibrary/components/EmptyOrNoPermissions.js.map +1 -0
- package/dist/admin/pages/App/MediaLibrary/components/EmptyOrNoPermissions.mjs +64 -0
- package/dist/admin/pages/App/MediaLibrary/components/EmptyOrNoPermissions.mjs.map +1 -0
- package/dist/admin/pages/App/MediaLibrary/components/Filters.js +94 -0
- package/dist/admin/pages/App/MediaLibrary/components/Filters.js.map +1 -0
- package/dist/admin/pages/App/MediaLibrary/components/Filters.mjs +73 -0
- package/dist/admin/pages/App/MediaLibrary/components/Filters.mjs.map +1 -0
- package/dist/admin/pages/App/MediaLibrary/components/Header.js +76 -0
- package/dist/admin/pages/App/MediaLibrary/components/Header.js.map +1 -0
- package/dist/admin/pages/App/MediaLibrary/components/Header.mjs +74 -0
- package/dist/admin/pages/App/MediaLibrary/components/Header.mjs.map +1 -0
- package/dist/admin/{chunks/SettingsPage-5TS6R8ax.js → pages/SettingsPage/SettingsPage.js} +18 -67
- package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -0
- package/dist/admin/{chunks/SettingsPage-B7xS0X0V.mjs → pages/SettingsPage/SettingsPage.mjs} +6 -55
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -0
- package/dist/admin/pages/SettingsPage/init.js +8 -0
- package/dist/admin/pages/SettingsPage/init.js.map +1 -0
- package/dist/admin/pages/SettingsPage/init.mjs +6 -0
- package/dist/admin/pages/SettingsPage/init.mjs.map +1 -0
- package/dist/admin/pages/SettingsPage/reducer.js +43 -0
- package/dist/admin/pages/SettingsPage/reducer.js.map +1 -0
- package/dist/admin/pages/SettingsPage/reducer.mjs +40 -0
- package/dist/admin/pages/SettingsPage/reducer.mjs.map +1 -0
- package/dist/admin/pluginId.js +8 -0
- package/dist/admin/pluginId.js.map +1 -0
- package/dist/admin/pluginId.mjs +6 -0
- package/dist/admin/pluginId.mjs.map +1 -0
- package/dist/admin/{chunks/ca-pCOhKIn8.js → translations/ca.json.js} +2 -2
- package/dist/admin/translations/ca.json.js.map +1 -0
- package/dist/admin/{chunks/ca-Bi4qskZD.mjs → translations/ca.json.mjs} +1 -1
- package/dist/admin/translations/ca.json.mjs.map +1 -0
- package/dist/admin/{chunks/de-DUjKLmOP.js → translations/de.json.js} +2 -2
- package/dist/admin/translations/de.json.js.map +1 -0
- package/dist/admin/{chunks/de-BlbX8Dl_.mjs → translations/de.json.mjs} +1 -1
- package/dist/admin/translations/de.json.mjs.map +1 -0
- package/dist/admin/{chunks/dk-DSsspA0e.js → translations/dk.json.js} +2 -2
- package/dist/admin/translations/dk.json.js.map +1 -0
- package/dist/admin/{chunks/dk-C2ydE6A7.mjs → translations/dk.json.mjs} +1 -1
- package/dist/admin/translations/dk.json.mjs.map +1 -0
- package/dist/admin/{chunks/en-UjETkewz.js → translations/en.json.js} +2 -2
- package/dist/admin/translations/en.json.js.map +1 -0
- package/dist/admin/{chunks/en-Bw_Cb2IV.mjs → translations/en.json.mjs} +1 -1
- package/dist/admin/translations/en.json.mjs.map +1 -0
- package/dist/admin/{chunks/es-qAL8YcZz.js → translations/es.json.js} +2 -2
- package/dist/admin/translations/es.json.js.map +1 -0
- package/dist/admin/{chunks/es-CiEgbw0k.mjs → translations/es.json.mjs} +1 -1
- package/dist/admin/translations/es.json.mjs.map +1 -0
- package/dist/admin/{chunks/fr-BL0Uyj6j.js → translations/fr.json.js} +2 -2
- package/dist/admin/translations/fr.json.js.map +1 -0
- package/dist/admin/{chunks/fr-CwRt2FJu.mjs → translations/fr.json.mjs} +1 -1
- package/dist/admin/translations/fr.json.mjs.map +1 -0
- package/dist/admin/{chunks/he-BAmhVpfZ.js → translations/he.json.js} +2 -2
- package/dist/admin/translations/he.json.js.map +1 -0
- package/dist/admin/{chunks/he-DdpYNQdt.mjs → translations/he.json.mjs} +1 -1
- package/dist/admin/translations/he.json.mjs.map +1 -0
- package/dist/admin/{chunks/it-_NQZYepl.js → translations/it.json.js} +2 -2
- package/dist/admin/translations/it.json.js.map +1 -0
- package/dist/admin/{chunks/it-Be4kgSNB.mjs → translations/it.json.mjs} +1 -1
- package/dist/admin/translations/it.json.mjs.map +1 -0
- package/dist/admin/{chunks/ja-B75QiyXf.js → translations/ja.json.js} +2 -2
- package/dist/admin/translations/ja.json.js.map +1 -0
- package/dist/admin/{chunks/ja-U1NhT0bU.mjs → translations/ja.json.mjs} +1 -1
- package/dist/admin/translations/ja.json.mjs.map +1 -0
- package/dist/admin/{chunks/ko-BOvUcJqv.js → translations/ko.json.js} +2 -2
- package/dist/admin/translations/ko.json.js.map +1 -0
- package/dist/admin/{chunks/ko-BciqXefq.mjs → translations/ko.json.mjs} +1 -1
- package/dist/admin/translations/ko.json.mjs.map +1 -0
- package/dist/admin/{chunks/ms-B7Zl6Lm9.js → translations/ms.json.js} +2 -2
- package/dist/admin/translations/ms.json.js.map +1 -0
- package/dist/admin/{chunks/ms-D-8McNeg.mjs → translations/ms.json.mjs} +1 -1
- package/dist/admin/translations/ms.json.mjs.map +1 -0
- package/dist/admin/{chunks/pl-cYDYHOEf.js → translations/pl.json.js} +2 -2
- package/dist/admin/translations/pl.json.js.map +1 -0
- package/dist/admin/{chunks/pl-DdUYocl5.mjs → translations/pl.json.mjs} +1 -1
- package/dist/admin/translations/pl.json.mjs.map +1 -0
- package/dist/admin/{chunks/pt-BR-D1u_azCM.js → translations/pt-BR.json.js} +2 -2
- package/dist/admin/translations/pt-BR.json.js.map +1 -0
- package/dist/admin/{chunks/pt-BR-Demjoq41.mjs → translations/pt-BR.json.mjs} +1 -1
- package/dist/admin/translations/pt-BR.json.mjs.map +1 -0
- package/dist/admin/{chunks/pt-L2DZeTPL.js → translations/pt.json.js} +2 -2
- package/dist/admin/translations/pt.json.js.map +1 -0
- package/dist/admin/{chunks/pt-D8is2LpS.mjs → translations/pt.json.mjs} +1 -1
- package/dist/admin/translations/pt.json.mjs.map +1 -0
- package/dist/admin/{chunks/ru-Uxbk_WWv.js → translations/ru.json.js} +2 -2
- package/dist/admin/translations/ru.json.js.map +1 -0
- package/dist/admin/{chunks/ru-CGgHRTey.mjs → translations/ru.json.mjs} +1 -1
- package/dist/admin/translations/ru.json.mjs.map +1 -0
- package/dist/admin/{chunks/sk-BlLP5HAX.js → translations/sk.json.js} +2 -2
- package/dist/admin/translations/sk.json.js.map +1 -0
- package/dist/admin/{chunks/sk-xtSwaPXq.mjs → translations/sk.json.mjs} +1 -1
- package/dist/admin/translations/sk.json.mjs.map +1 -0
- package/dist/admin/{chunks/th-DNxPLegS.js → translations/th.json.js} +2 -2
- package/dist/admin/translations/th.json.js.map +1 -0
- package/dist/admin/{chunks/th-BOpLVfmg.mjs → translations/th.json.mjs} +1 -1
- package/dist/admin/translations/th.json.mjs.map +1 -0
- package/dist/admin/{chunks/tr-DWgXG75k.js → translations/tr.json.js} +2 -2
- package/dist/admin/translations/tr.json.js.map +1 -0
- package/dist/admin/{chunks/tr-BmAPh-f1.mjs → translations/tr.json.mjs} +1 -1
- package/dist/admin/translations/tr.json.mjs.map +1 -0
- package/dist/admin/{chunks/uk-Cfm1dM3v.js → translations/uk.json.js} +2 -2
- package/dist/admin/translations/uk.json.js.map +1 -0
- package/dist/admin/{chunks/uk-DPZD6U8g.mjs → translations/uk.json.mjs} +1 -1
- package/dist/admin/translations/uk.json.mjs.map +1 -0
- package/dist/admin/{chunks/zh-Hans-B8qxMQIl.js → translations/zh-Hans.json.js} +2 -2
- package/dist/admin/{chunks/ca-Bi4qskZD.mjs.map → translations/zh-Hans.json.js.map} +1 -1
- package/dist/admin/{chunks/zh-Hans-B1GabBRx.mjs → translations/zh-Hans.json.mjs} +1 -1
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
- package/dist/admin/{chunks/zh-MemsyMV6.js → translations/zh.json.js} +2 -2
- package/dist/admin/translations/zh.json.js.map +1 -0
- package/dist/admin/{chunks/zh-BIl0qgBy.mjs → translations/zh.json.mjs} +1 -1
- package/dist/admin/translations/zh.json.mjs.map +1 -0
- package/dist/admin/utils/appendSearchParamsToUrl.js +17 -0
- package/dist/admin/utils/appendSearchParamsToUrl.js.map +1 -0
- package/dist/admin/utils/appendSearchParamsToUrl.mjs +15 -0
- package/dist/admin/utils/appendSearchParamsToUrl.mjs.map +1 -0
- package/dist/admin/utils/containsAssetFilter.js +18 -0
- package/dist/admin/utils/containsAssetFilter.js.map +1 -0
- package/dist/admin/utils/containsAssetFilter.mjs +16 -0
- package/dist/admin/utils/containsAssetFilter.mjs.map +1 -0
- package/dist/admin/utils/createAssetUrl.js +14 -0
- package/dist/admin/utils/createAssetUrl.js.map +1 -0
- package/dist/admin/utils/createAssetUrl.mjs +12 -0
- package/dist/admin/utils/createAssetUrl.mjs.map +1 -0
- package/dist/admin/utils/displayedFilters.js +52 -0
- package/dist/admin/utils/displayedFilters.js.map +1 -0
- package/dist/admin/utils/displayedFilters.mjs +50 -0
- package/dist/admin/utils/displayedFilters.mjs.map +1 -0
- package/dist/admin/utils/downloadFile.js +13 -0
- package/dist/admin/utils/downloadFile.js.map +1 -0
- package/dist/admin/utils/downloadFile.mjs +11 -0
- package/dist/admin/utils/downloadFile.mjs.map +1 -0
- package/dist/admin/utils/findRecursiveFolderByValue.js +17 -0
- package/dist/admin/utils/findRecursiveFolderByValue.js.map +1 -0
- package/dist/admin/utils/findRecursiveFolderByValue.mjs +15 -0
- package/dist/admin/utils/findRecursiveFolderByValue.mjs.map +1 -0
- package/dist/admin/utils/formatBytes.js +17 -0
- package/dist/admin/utils/formatBytes.js.map +1 -0
- package/dist/admin/utils/formatBytes.mjs +15 -0
- package/dist/admin/utils/formatBytes.mjs.map +1 -0
- package/dist/admin/utils/formatDuration.js +15 -0
- package/dist/admin/utils/formatDuration.js.map +1 -0
- package/dist/admin/utils/formatDuration.mjs +13 -0
- package/dist/admin/utils/formatDuration.mjs.map +1 -0
- package/dist/admin/utils/getAPIInnerErrors.js +26 -0
- package/dist/admin/utils/getAPIInnerErrors.js.map +1 -0
- package/dist/admin/utils/getAPIInnerErrors.mjs +24 -0
- package/dist/admin/utils/getAPIInnerErrors.mjs.map +1 -0
- package/dist/admin/utils/getAllowedFiles.js +25 -0
- package/dist/admin/utils/getAllowedFiles.js.map +1 -0
- package/dist/admin/utils/getAllowedFiles.mjs +23 -0
- package/dist/admin/utils/getAllowedFiles.mjs.map +1 -0
- package/dist/admin/utils/getBreadcrumbDataCM.js +36 -0
- package/dist/admin/utils/getBreadcrumbDataCM.js.map +1 -0
- package/dist/admin/utils/getBreadcrumbDataCM.mjs +34 -0
- package/dist/admin/utils/getBreadcrumbDataCM.mjs.map +1 -0
- package/dist/admin/utils/getBreadcrumbDataML.js +40 -0
- package/dist/admin/utils/getBreadcrumbDataML.js.map +1 -0
- package/dist/admin/utils/getBreadcrumbDataML.mjs +38 -0
- package/dist/admin/utils/getBreadcrumbDataML.mjs.map +1 -0
- package/dist/admin/utils/getFileExtension.js +6 -0
- package/dist/admin/utils/getFileExtension.js.map +1 -0
- package/dist/admin/utils/getFileExtension.mjs +4 -0
- package/dist/admin/utils/getFileExtension.mjs.map +1 -0
- package/dist/admin/utils/getFolderParents.js +26 -0
- package/dist/admin/utils/getFolderParents.js.map +1 -0
- package/dist/admin/utils/getFolderParents.mjs +24 -0
- package/dist/admin/utils/getFolderParents.mjs.map +1 -0
- package/dist/admin/utils/getFolderURL.js +20 -0
- package/dist/admin/utils/getFolderURL.js.map +1 -0
- package/dist/admin/utils/getFolderURL.mjs +18 -0
- package/dist/admin/utils/getFolderURL.mjs.map +1 -0
- package/dist/admin/utils/getTrad.js +8 -0
- package/dist/admin/utils/getTrad.js.map +1 -0
- package/dist/admin/utils/getTrad.mjs +6 -0
- package/dist/admin/utils/getTrad.mjs.map +1 -0
- package/dist/admin/utils/moveElement.js +16 -0
- package/dist/admin/utils/moveElement.js.map +1 -0
- package/dist/admin/utils/moveElement.mjs +14 -0
- package/dist/admin/utils/moveElement.mjs.map +1 -0
- package/dist/admin/utils/normalizeAPIError.js +55 -0
- package/dist/admin/utils/normalizeAPIError.js.map +1 -0
- package/dist/admin/utils/normalizeAPIError.mjs +53 -0
- package/dist/admin/utils/normalizeAPIError.mjs.map +1 -0
- package/dist/admin/utils/prefixFileUrlWithBackendUrl.js +8 -0
- package/dist/admin/utils/prefixFileUrlWithBackendUrl.js.map +1 -0
- package/dist/admin/utils/prefixFileUrlWithBackendUrl.mjs +6 -0
- package/dist/admin/utils/prefixFileUrlWithBackendUrl.mjs.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.js +14 -0
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs +12 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
- package/dist/admin/utils/rawFileToAsset.js +21 -0
- package/dist/admin/utils/rawFileToAsset.js.map +1 -0
- package/dist/admin/utils/rawFileToAsset.mjs +19 -0
- package/dist/admin/utils/rawFileToAsset.mjs.map +1 -0
- package/dist/admin/utils/toSingularTypes.js +11 -0
- package/dist/admin/utils/toSingularTypes.js.map +1 -0
- package/dist/admin/utils/toSingularTypes.mjs +9 -0
- package/dist/admin/utils/toSingularTypes.mjs.map +1 -0
- package/dist/admin/utils/typeFromMime.js +19 -0
- package/dist/admin/utils/typeFromMime.js.map +1 -0
- package/dist/admin/utils/typeFromMime.mjs +17 -0
- package/dist/admin/utils/typeFromMime.mjs.map +1 -0
- package/dist/admin/utils/urlYupSchema.js +72 -0
- package/dist/admin/utils/urlYupSchema.js.map +1 -0
- package/dist/admin/utils/urlYupSchema.mjs +51 -0
- package/dist/admin/utils/urlYupSchema.mjs.map +1 -0
- package/dist/admin/utils/urlsToAssets.js +39 -0
- package/dist/admin/utils/urlsToAssets.js.map +1 -0
- package/dist/admin/utils/urlsToAssets.mjs +37 -0
- package/dist/admin/utils/urlsToAssets.mjs.map +1 -0
- package/dist/server/bootstrap.js +98 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/bootstrap.mjs +96 -0
- package/dist/server/bootstrap.mjs.map +1 -0
- package/dist/server/config.js +14 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/config.mjs +12 -0
- package/dist/server/config.mjs.map +1 -0
- package/dist/server/constants.js +35 -0
- package/dist/server/constants.js.map +1 -0
- package/dist/server/constants.mjs +28 -0
- package/dist/server/constants.mjs.map +1 -0
- package/dist/server/content-types/file.js +155 -0
- package/dist/server/content-types/file.js.map +1 -0
- package/dist/server/content-types/file.mjs +153 -0
- package/dist/server/content-types/file.mjs.map +1 -0
- package/dist/server/content-types/folder.js +78 -0
- package/dist/server/content-types/folder.js.map +1 -0
- package/dist/server/content-types/folder.mjs +76 -0
- package/dist/server/content-types/folder.mjs.map +1 -0
- package/dist/server/content-types/index.js +12 -0
- package/dist/server/content-types/index.js.map +1 -0
- package/dist/server/content-types/index.mjs +10 -0
- package/dist/server/content-types/index.mjs.map +1 -0
- package/dist/server/controllers/admin-file.js +61 -0
- package/dist/server/controllers/admin-file.js.map +1 -0
- package/dist/server/controllers/admin-file.mjs +59 -0
- package/dist/server/controllers/admin-file.mjs.map +1 -0
- package/dist/server/controllers/admin-folder-file.js +189 -0
- package/dist/server/controllers/admin-folder-file.js.map +1 -0
- package/dist/server/controllers/admin-folder-file.mjs +187 -0
- package/dist/server/controllers/admin-folder-file.mjs.map +1 -0
- package/dist/server/controllers/admin-folder.js +104 -0
- package/dist/server/controllers/admin-folder.js.map +1 -0
- package/dist/server/controllers/admin-folder.mjs +102 -0
- package/dist/server/controllers/admin-folder.mjs.map +1 -0
- package/dist/server/controllers/admin-settings.js +32 -0
- package/dist/server/controllers/admin-settings.js.map +1 -0
- package/dist/server/controllers/admin-settings.mjs +30 -0
- package/dist/server/controllers/admin-settings.mjs.map +1 -0
- package/dist/server/controllers/admin-upload.js +88 -0
- package/dist/server/controllers/admin-upload.js.map +1 -0
- package/dist/server/controllers/admin-upload.mjs +86 -0
- package/dist/server/controllers/admin-upload.mjs.map +1 -0
- package/dist/server/controllers/content-api.js +122 -0
- package/dist/server/controllers/content-api.js.map +1 -0
- package/dist/server/controllers/content-api.mjs +120 -0
- package/dist/server/controllers/content-api.mjs.map +1 -0
- package/dist/server/controllers/index.js +22 -0
- package/dist/server/controllers/index.js.map +1 -0
- package/dist/server/controllers/index.mjs +20 -0
- package/dist/server/controllers/index.mjs.map +1 -0
- package/dist/server/controllers/utils/find-entity-and-check-permissions.js +38 -0
- package/dist/server/controllers/utils/find-entity-and-check-permissions.js.map +1 -0
- package/dist/server/controllers/utils/find-entity-and-check-permissions.mjs +36 -0
- package/dist/server/controllers/utils/find-entity-and-check-permissions.mjs.map +1 -0
- package/dist/server/controllers/utils/folders.js +6 -0
- package/dist/server/controllers/utils/folders.js.map +1 -0
- package/dist/server/controllers/utils/folders.mjs +4 -0
- package/dist/server/controllers/utils/folders.mjs.map +1 -0
- package/dist/server/controllers/validation/admin/configureView.js +13 -0
- package/dist/server/controllers/validation/admin/configureView.js.map +1 -0
- package/dist/server/controllers/validation/admin/configureView.mjs +11 -0
- package/dist/server/controllers/validation/admin/configureView.mjs.map +1 -0
- package/dist/server/controllers/validation/admin/folder-file.js +88 -0
- package/dist/server/controllers/validation/admin/folder-file.js.map +1 -0
- package/dist/server/controllers/validation/admin/folder-file.mjs +85 -0
- package/dist/server/controllers/validation/admin/folder-file.mjs.map +1 -0
- package/dist/server/controllers/validation/admin/folder.js +69 -0
- package/dist/server/controllers/validation/admin/folder.js.map +1 -0
- package/dist/server/controllers/validation/admin/folder.mjs +66 -0
- package/dist/server/controllers/validation/admin/folder.mjs.map +1 -0
- package/dist/server/controllers/validation/admin/settings.js +13 -0
- package/dist/server/controllers/validation/admin/settings.js.map +1 -0
- package/dist/server/controllers/validation/admin/settings.mjs +11 -0
- package/dist/server/controllers/validation/admin/settings.mjs.map +1 -0
- package/dist/server/controllers/validation/admin/upload.js +35 -0
- package/dist/server/controllers/validation/admin/upload.js.map +1 -0
- package/dist/server/controllers/validation/admin/upload.mjs +33 -0
- package/dist/server/controllers/validation/admin/upload.mjs.map +1 -0
- package/dist/server/controllers/validation/admin/utils.js +17 -0
- package/dist/server/controllers/validation/admin/utils.js.map +1 -0
- package/dist/server/controllers/validation/admin/utils.mjs +15 -0
- package/dist/server/controllers/validation/admin/utils.mjs.map +1 -0
- package/dist/server/controllers/validation/content-api/upload.js +24 -0
- package/dist/server/controllers/validation/content-api/upload.js.map +1 -0
- package/dist/server/controllers/validation/content-api/upload.mjs +22 -0
- package/dist/server/controllers/validation/content-api/upload.mjs.map +1 -0
- package/dist/server/controllers/view-configuration.js +28 -0
- package/dist/server/controllers/view-configuration.js.map +1 -0
- package/dist/server/controllers/view-configuration.mjs +26 -0
- package/dist/server/controllers/view-configuration.mjs.map +1 -0
- package/dist/server/documentation/content-api.json.js +290 -0
- package/dist/server/documentation/content-api.json.js.map +1 -0
- package/dist/server/documentation/content-api.json.mjs +284 -0
- package/dist/server/documentation/content-api.json.mjs.map +1 -0
- package/dist/server/{chunks/graphql-CwNPX8zo.js → graphql.js} +3 -16
- package/dist/server/graphql.js.map +1 -0
- package/dist/server/{chunks/graphql-K9HaGS9d.mjs → graphql.mjs} +2 -15
- package/dist/server/graphql.mjs.map +1 -0
- package/dist/server/index.js +17 -16
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +19 -14
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/middlewares/upload.js +38 -0
- package/dist/server/middlewares/upload.js.map +1 -0
- package/dist/server/middlewares/upload.mjs +36 -0
- package/dist/server/middlewares/upload.mjs.map +1 -0
- package/dist/server/register.js +88 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/register.mjs +86 -0
- package/dist/server/register.mjs.map +1 -0
- package/dist/server/routes/admin.js +236 -0
- package/dist/server/routes/admin.js.map +1 -0
- package/dist/server/routes/admin.mjs +234 -0
- package/dist/server/routes/admin.mjs.map +1 -0
- package/dist/server/routes/content-api.js +30 -0
- package/dist/server/routes/content-api.js.map +1 -0
- package/dist/server/routes/content-api.mjs +28 -0
- package/dist/server/routes/content-api.mjs.map +1 -0
- package/dist/server/routes/index.js +14 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/index.mjs +12 -0
- package/dist/server/routes/index.mjs.map +1 -0
- package/dist/server/routes/view-configuration.js +40 -0
- package/dist/server/routes/view-configuration.js.map +1 -0
- package/dist/server/routes/view-configuration.mjs +38 -0
- package/dist/server/routes/view-configuration.mjs.map +1 -0
- package/dist/server/services/api-upload-folder.js +52 -0
- package/dist/server/services/api-upload-folder.js.map +1 -0
- package/dist/server/services/api-upload-folder.mjs +50 -0
- package/dist/server/services/api-upload-folder.mjs.map +1 -0
- package/dist/server/services/extensions/index.js +40 -0
- package/dist/server/services/extensions/index.js.map +1 -0
- package/dist/server/services/extensions/index.mjs +38 -0
- package/dist/server/services/extensions/index.mjs.map +1 -0
- package/dist/server/services/extensions/utils.js +53 -0
- package/dist/server/services/extensions/utils.js.map +1 -0
- package/dist/server/services/extensions/utils.mjs +51 -0
- package/dist/server/services/extensions/utils.mjs.map +1 -0
- package/dist/server/services/file.js +57 -0
- package/dist/server/services/file.js.map +1 -0
- package/dist/server/services/file.mjs +55 -0
- package/dist/server/services/file.mjs.map +1 -0
- package/dist/server/services/folder.js +275 -0
- package/dist/server/services/folder.js.map +1 -0
- package/dist/server/services/folder.mjs +273 -0
- package/dist/server/services/folder.mjs.map +1 -0
- package/dist/server/services/image-manipulation.js +255 -0
- package/dist/server/services/image-manipulation.js.map +1 -0
- package/dist/server/services/image-manipulation.mjs +253 -0
- package/dist/server/services/image-manipulation.mjs.map +1 -0
- package/dist/server/services/index.js +26 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/index.mjs +24 -0
- package/dist/server/services/index.mjs.map +1 -0
- package/dist/server/services/metrics.js +19 -0
- package/dist/server/services/metrics.js.map +1 -0
- package/dist/server/services/metrics.mjs +17 -0
- package/dist/server/services/metrics.mjs.map +1 -0
- package/dist/server/services/provider.js +33 -0
- package/dist/server/services/provider.js.map +1 -0
- package/dist/server/services/provider.mjs +31 -0
- package/dist/server/services/provider.mjs.map +1 -0
- package/dist/server/services/upload.js +445 -0
- package/dist/server/services/upload.js.map +1 -0
- package/dist/server/services/upload.mjs +443 -0
- package/dist/server/services/upload.mjs.map +1 -0
- package/dist/server/services/weekly-metrics.js +127 -0
- package/dist/server/services/weekly-metrics.js.map +1 -0
- package/dist/server/services/weekly-metrics.mjs +125 -0
- package/dist/server/services/weekly-metrics.mjs.map +1 -0
- package/dist/server/utils/cron.js +6 -0
- package/dist/server/utils/cron.js.map +1 -0
- package/dist/server/utils/cron.mjs +4 -0
- package/dist/server/utils/cron.mjs.map +1 -0
- package/dist/server/utils/index.js +8 -0
- package/dist/server/utils/index.js.map +1 -0
- package/dist/server/utils/index.mjs +6 -0
- package/dist/server/utils/index.mjs.map +1 -0
- package/package.json +5 -5
- package/dist/admin/chunks/App-BBHvDTKY.js +0 -993
- package/dist/admin/chunks/App-BBHvDTKY.js.map +0 -1
- package/dist/admin/chunks/App-DOvEuP1h.mjs +0 -972
- package/dist/admin/chunks/App-DOvEuP1h.mjs.map +0 -1
- package/dist/admin/chunks/ConfigureTheView-BZq26A26.js +0 -297
- package/dist/admin/chunks/ConfigureTheView-BZq26A26.js.map +0 -1
- package/dist/admin/chunks/ConfigureTheView-CzngS3_9.mjs +0 -276
- package/dist/admin/chunks/ConfigureTheView-CzngS3_9.mjs.map +0 -1
- package/dist/admin/chunks/SettingsPage-5TS6R8ax.js.map +0 -1
- package/dist/admin/chunks/SettingsPage-B7xS0X0V.mjs.map +0 -1
- package/dist/admin/chunks/ca-pCOhKIn8.js.map +0 -1
- package/dist/admin/chunks/de-BlbX8Dl_.mjs.map +0 -1
- package/dist/admin/chunks/de-DUjKLmOP.js.map +0 -1
- package/dist/admin/chunks/dk-C2ydE6A7.mjs.map +0 -1
- package/dist/admin/chunks/dk-DSsspA0e.js.map +0 -1
- package/dist/admin/chunks/en-Bw_Cb2IV.mjs.map +0 -1
- package/dist/admin/chunks/en-UjETkewz.js.map +0 -1
- package/dist/admin/chunks/es-CiEgbw0k.mjs.map +0 -1
- package/dist/admin/chunks/es-qAL8YcZz.js.map +0 -1
- package/dist/admin/chunks/fr-BL0Uyj6j.js.map +0 -1
- package/dist/admin/chunks/fr-CwRt2FJu.mjs.map +0 -1
- package/dist/admin/chunks/he-BAmhVpfZ.js.map +0 -1
- package/dist/admin/chunks/he-DdpYNQdt.mjs.map +0 -1
- package/dist/admin/chunks/index-mrIASzro.js +0 -7406
- package/dist/admin/chunks/index-mrIASzro.js.map +0 -1
- package/dist/admin/chunks/index-zOCLhXyV.mjs +0 -7349
- package/dist/admin/chunks/index-zOCLhXyV.mjs.map +0 -1
- package/dist/admin/chunks/it-Be4kgSNB.mjs.map +0 -1
- package/dist/admin/chunks/it-_NQZYepl.js.map +0 -1
- package/dist/admin/chunks/ja-B75QiyXf.js.map +0 -1
- package/dist/admin/chunks/ja-U1NhT0bU.mjs.map +0 -1
- package/dist/admin/chunks/ko-BOvUcJqv.js.map +0 -1
- package/dist/admin/chunks/ko-BciqXefq.mjs.map +0 -1
- package/dist/admin/chunks/ms-B7Zl6Lm9.js.map +0 -1
- package/dist/admin/chunks/ms-D-8McNeg.mjs.map +0 -1
- package/dist/admin/chunks/pl-DdUYocl5.mjs.map +0 -1
- package/dist/admin/chunks/pl-cYDYHOEf.js.map +0 -1
- package/dist/admin/chunks/pt-BR-D1u_azCM.js.map +0 -1
- package/dist/admin/chunks/pt-BR-Demjoq41.mjs.map +0 -1
- package/dist/admin/chunks/pt-D8is2LpS.mjs.map +0 -1
- package/dist/admin/chunks/pt-L2DZeTPL.js.map +0 -1
- package/dist/admin/chunks/ru-CGgHRTey.mjs.map +0 -1
- package/dist/admin/chunks/ru-Uxbk_WWv.js.map +0 -1
- package/dist/admin/chunks/sk-BlLP5HAX.js.map +0 -1
- package/dist/admin/chunks/sk-xtSwaPXq.mjs.map +0 -1
- package/dist/admin/chunks/th-BOpLVfmg.mjs.map +0 -1
- package/dist/admin/chunks/th-DNxPLegS.js.map +0 -1
- package/dist/admin/chunks/tr-BmAPh-f1.mjs.map +0 -1
- package/dist/admin/chunks/tr-DWgXG75k.js.map +0 -1
- package/dist/admin/chunks/uk-Cfm1dM3v.js.map +0 -1
- package/dist/admin/chunks/uk-DPZD6U8g.mjs.map +0 -1
- package/dist/admin/chunks/zh-BIl0qgBy.mjs.map +0 -1
- package/dist/admin/chunks/zh-Hans-B1GabBRx.mjs.map +0 -1
- package/dist/admin/chunks/zh-Hans-B8qxMQIl.js.map +0 -1
- package/dist/admin/chunks/zh-MemsyMV6.js.map +0 -1
- package/dist/server/chunks/graphql-CwNPX8zo.js.map +0 -1
- package/dist/server/chunks/graphql-K9HaGS9d.mjs.map +0 -1
- package/dist/server/chunks/index-BzVus140.mjs +0 -3161
- package/dist/server/chunks/index-BzVus140.mjs.map +0 -1
- package/dist/server/chunks/index-D2QOphAI.js +0 -3164
- 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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"}
|