@strapi/content-manager 0.0.0-next.3116274aabb83ba9f858814329ead55ccaea244d → 0.0.0-next.32e19446d7ac2d8eaffa53da59f933ca5716d727
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/ComponentIcon.js +3 -0
- package/dist/admin/components/ComponentIcon.js.map +1 -1
- package/dist/admin/components/ComponentIcon.mjs +3 -0
- package/dist/admin/components/ComponentIcon.mjs.map +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.js +3 -2
- package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs +3 -2
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.js +4 -1
- package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.mjs +5 -2
- package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
- package/dist/admin/components/ConfigurationForm/Form.js +1 -1
- package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Form.mjs +3 -3
- package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -1
- package/dist/admin/components/DragPreviews/CardDragPreview.js +3 -1
- package/dist/admin/components/DragPreviews/CardDragPreview.js.map +1 -1
- package/dist/admin/components/DragPreviews/CardDragPreview.mjs +3 -1
- package/dist/admin/components/DragPreviews/CardDragPreview.mjs.map +1 -1
- package/dist/admin/components/DragPreviews/ComponentDragPreview.js +3 -1
- package/dist/admin/components/DragPreviews/ComponentDragPreview.js.map +1 -1
- package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs +3 -1
- package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs.map +1 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.js +3 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +3 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
- package/dist/admin/components/LeftMenu.js +91 -51
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +93 -53
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/components/RelativeTime.js.map +1 -1
- package/dist/admin/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/components/Widgets.js +34 -10
- package/dist/admin/components/Widgets.js.map +1 -1
- package/dist/admin/components/Widgets.mjs +34 -10
- package/dist/admin/components/Widgets.mjs.map +1 -1
- package/dist/admin/content-manager.js.map +1 -1
- package/dist/admin/content-manager.mjs.map +1 -1
- package/dist/admin/history/components/HistoryAction.js.map +1 -1
- package/dist/admin/history/components/HistoryAction.mjs.map +1 -1
- package/dist/admin/history/components/VersionHeader.js +1 -0
- package/dist/admin/history/components/VersionHeader.js.map +1 -1
- package/dist/admin/history/components/VersionHeader.mjs +1 -0
- package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
- package/dist/admin/history/components/VersionsList.js +1 -1
- package/dist/admin/history/components/VersionsList.js.map +1 -1
- package/dist/admin/history/components/VersionsList.mjs +1 -1
- package/dist/admin/history/components/VersionsList.mjs.map +1 -1
- package/dist/admin/history/pages/History.js +7 -7
- package/dist/admin/history/pages/History.js.map +1 -1
- package/dist/admin/history/pages/History.mjs +7 -7
- package/dist/admin/history/pages/History.mjs.map +1 -1
- package/dist/admin/history/services/historyVersion.js.map +1 -1
- package/dist/admin/history/services/historyVersion.mjs.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js +24 -5
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +24 -5
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/layout.js +27 -6
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/layout.mjs +28 -7
- package/dist/admin/layout.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +19 -22
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +20 -23
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Blocker.js +18 -0
- package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
- package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
- package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js +27 -4
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +28 -5
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +66 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +66 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js +7 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs +7 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +1 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +1 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +4 -3
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +5 -4
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +13 -8
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +14 -8
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Header.js +92 -27
- package/dist/admin/pages/EditView/components/Header.js.map +1 -1
- package/dist/admin/pages/EditView/components/Header.mjs +94 -29
- package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +39 -24
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +39 -24
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +34 -9
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +34 -9
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +1 -0
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +1 -0
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Header.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Header.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +8 -10
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +8 -10
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js.map +1 -1
- package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js +6 -16
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +6 -16
- package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +18 -31
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +19 -32
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +4 -1
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.mjs +4 -1
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.js +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js +8 -4
- package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +8 -4
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.js +5 -2
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -1
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs +5 -2
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -1
- package/dist/admin/preview/components/InputPopover.js +189 -0
- package/dist/admin/preview/components/InputPopover.js.map +1 -0
- package/dist/admin/preview/components/InputPopover.mjs +167 -0
- package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
- package/dist/admin/preview/components/PreviewHeader.js +0 -1
- package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.mjs +0 -1
- package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.js +77 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs +56 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
- package/dist/admin/preview/pages/Preview.js +144 -106
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +145 -107
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/services/preview.js.map +1 -1
- package/dist/admin/preview/services/preview.mjs.map +1 -1
- package/dist/admin/preview/utils/constants.js +56 -0
- package/dist/admin/preview/utils/constants.js.map +1 -0
- package/dist/admin/preview/utils/constants.mjs +52 -0
- package/dist/admin/preview/utils/constants.mjs.map +1 -0
- package/dist/admin/preview/utils/fieldUtils.js +107 -0
- package/dist/admin/preview/utils/fieldUtils.js.map +1 -0
- package/dist/admin/preview/utils/fieldUtils.mjs +102 -0
- package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -0
- package/dist/admin/preview/utils/getSendMessage.js +22 -0
- package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
- package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
- package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
- package/dist/admin/preview/utils/previewScript.js +534 -0
- package/dist/admin/preview/utils/previewScript.js.map +1 -0
- package/dist/admin/preview/utils/previewScript.mjs +532 -0
- package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
- package/dist/admin/router.js.map +1 -1
- package/dist/admin/router.mjs.map +1 -1
- package/dist/admin/services/api.js +2 -1
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs +2 -1
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/services/documents.js +19 -4
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +19 -4
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/services/homepage.js.map +1 -1
- package/dist/admin/services/homepage.mjs.map +1 -1
- package/dist/admin/services/relations.js.map +1 -1
- package/dist/admin/services/relations.mjs.map +1 -1
- package/dist/admin/src/components/LeftMenu.d.ts +3 -1
- package/dist/admin/src/components/Widgets.d.ts +6 -2
- package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/links.d.ts +2 -0
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +0 -3
- package/dist/admin/src/pages/EditView/components/Header.d.ts +15 -0
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
- package/dist/admin/src/pages/ListView/components/TableCells/Relations.d.ts +0 -3
- package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
- package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +5 -0
- package/dist/admin/src/preview/pages/Preview.d.ts +12 -0
- package/dist/admin/src/preview/services/preview.d.ts +1 -1
- package/dist/admin/src/preview/utils/constants.d.ts +55 -0
- package/dist/admin/src/preview/utils/fieldUtils.d.ts +22 -0
- package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
- package/dist/admin/src/preview/utils/previewScript.d.ts +24 -0
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/components.d.ts +2 -2
- package/dist/admin/src/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/services/documents.d.ts +16 -16
- package/dist/admin/src/services/homepage.d.ts +1 -1
- package/dist/admin/src/services/init.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +2 -2
- package/dist/admin/src/services/uid.d.ts +3 -3
- package/dist/admin/translations/en.json.js +6 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +6 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +1 -0
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +1 -0
- package/dist/admin/translations/es.json.mjs.map +1 -1
- package/dist/admin/translations/fr.json.js +2 -1
- package/dist/admin/translations/fr.json.js.map +1 -1
- package/dist/admin/translations/fr.json.mjs +2 -1
- package/dist/admin/translations/fr.json.mjs.map +1 -1
- package/dist/admin/utils/translations.js.map +1 -1
- package/dist/admin/utils/translations.mjs.map +1 -1
- package/dist/admin/utils/urls.js.map +1 -1
- package/dist/admin/utils/urls.mjs.map +1 -1
- package/dist/admin/utils/users.js.map +1 -1
- package/dist/admin/utils/users.mjs.map +1 -1
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/admin/utils/validation.mjs.map +1 -1
- package/dist/server/controllers/collection-types.js +2 -1
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +2 -1
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/relations.js +6 -4
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +6 -4
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/controllers/single-types.js +3 -1
- package/dist/server/controllers/single-types.js.map +1 -1
- package/dist/server/controllers/single-types.mjs +3 -1
- package/dist/server/controllers/single-types.mjs.map +1 -1
- package/dist/server/controllers/validation/dimensions.js.map +1 -1
- package/dist/server/controllers/validation/dimensions.mjs.map +1 -1
- package/dist/server/controllers/validation/index.js.map +1 -1
- package/dist/server/controllers/validation/index.mjs.map +1 -1
- package/dist/server/controllers/validation/model-configuration.js +2 -2
- package/dist/server/controllers/validation/model-configuration.js.map +1 -1
- package/dist/server/controllers/validation/model-configuration.mjs +2 -2
- package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
- package/dist/server/history/utils.js.map +1 -1
- package/dist/server/history/utils.mjs.map +1 -1
- package/dist/server/homepage/services/homepage.js +4 -3
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +4 -3
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/middlewares/routing.js.map +1 -1
- package/dist/server/middlewares/routing.mjs.map +1 -1
- package/dist/server/preview/services/preview-config.js +8 -33
- package/dist/server/preview/services/preview-config.js.map +1 -1
- package/dist/server/preview/services/preview-config.mjs +9 -34
- package/dist/server/preview/services/preview-config.mjs.map +1 -1
- package/dist/server/preview/services/preview.js.map +1 -1
- package/dist/server/preview/services/preview.mjs.map +1 -1
- package/dist/server/preview/utils.js.map +1 -1
- package/dist/server/preview/utils.mjs.map +1 -1
- package/dist/server/services/configuration.js.map +1 -1
- package/dist/server/services/configuration.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +23 -1
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +23 -1
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/field-sizes.js.map +1 -1
- package/dist/server/services/field-sizes.mjs.map +1 -1
- package/dist/server/services/uid.js.map +1 -1
- package/dist/server/services/uid.mjs.map +1 -1
- package/dist/server/services/utils/store.js.map +1 -1
- package/dist/server/services/utils/store.mjs.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/single-types.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-configuration.js","sources":["../../../../server/src/controllers/validation/model-configuration.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { isListable, hasEditableAttribute } from '../../services/utils/configuration/attributes';\nimport { isValidDefaultSort } from '../../services/utils/configuration/settings';\n\n/**\n * Creates the validation schema for content-type configurations\n */\nexport default (schema: any, opts = {}) =>\n yup\n .object()\n .shape({\n settings: createSettingsSchema(schema).default(null).nullable(),\n metadatas: createMetadasSchema(schema).default(null).nullable(),\n layouts: createLayoutsSchema(schema, opts).default(null).nullable(),\n options: yup.object().optional(),\n })\n .noUnknown();\n\nconst createSettingsSchema = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n return yup\n .object()\n .shape({\n bulkable: yup.boolean().required(),\n filterable: yup.boolean().required(),\n pageSize: yup.number().integer().min(10).max(100).required(),\n searchable: yup.boolean().required(),\n // should be reset when the type changes\n mainField: yup.string().oneOf(validAttributes.concat('id')).default('id'),\n // should be reset when the type changes\n defaultSortBy: yup\n .string()\n .test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value) =>\n isValidDefaultSort(schema, value)\n )\n .default('id'),\n defaultSortOrder: yup.string().oneOf(['ASC', 'DESC']).default('ASC'),\n })\n .noUnknown();\n};\n\nconst createMetadasSchema = (schema: any) => {\n return yup.object().shape(\n Object.keys(schema.attributes).reduce((acc: any, key) => {\n acc[key] = yup\n .object()\n .shape({\n edit: yup\n .object()\n .shape({\n label: yup.string(),\n description: yup.string(),\n placeholder: yup.string(),\n editable: yup.boolean(),\n visible: yup.boolean(),\n mainField: yup.lazy((value) => {\n if (!value) {\n return yup.string();\n }\n\n const targetSchema = getService('content-types').findContentType(\n schema.attributes[key].targetModel\n );\n\n if (!targetSchema) {\n return yup.string();\n }\n\n const validAttributes = Object.keys(targetSchema.attributes).filter((key) =>\n isListable(targetSchema, key)\n );\n\n return yup.string().oneOf(validAttributes.concat('id')).default('id');\n }),\n })\n .noUnknown()\n .required(),\n list: yup\n .object()\n .shape({\n label: yup.string(),\n searchable: yup.boolean(),\n sortable: yup.boolean(),\n })\n .noUnknown()\n .required(),\n })\n .noUnknown();\n\n return acc;\n }, {})\n );\n};\n\nconst createArrayTest = ({ allowUndefined = false } = {}) => ({\n name: 'isArray',\n message: '${path} is required and must be an array',\n test: (val: any) => (allowUndefined === true && val === undefined ? true : Array.isArray(val)),\n});\n\nconst createLayoutsSchema = (schema: any, opts = {}) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const editAttributes = Object.keys(schema.attributes).filter((key) =>\n hasEditableAttribute(schema, key)\n );\n\n return yup.object().shape({\n edit: yup\n .array()\n .of(\n yup.array().of(\n yup\n .object()\n .shape({\n name: yup.string().oneOf(editAttributes).required(),\n size: yup.number().integer().positive().required(),\n })\n .noUnknown()\n )\n )\n .test(createArrayTest(opts)),\n list: yup.array().of(yup.string().oneOf(validAttributes)).test(createArrayTest(opts)),\n });\n};\n"],"names":["schema","opts","yup","object","shape","settings","createSettingsSchema","default","nullable","metadatas","createMetadasSchema","layouts","createLayoutsSchema","options","optional","noUnknown","validAttributes","Object","keys","attributes","filter","key","isListable","bulkable","boolean","required","filterable","pageSize","number","integer","min","max","searchable","mainField","string","oneOf","concat","defaultSortBy","test","value","isValidDefaultSort","defaultSortOrder","reduce","acc","edit","label","description","placeholder","editable","visible","lazy","targetSchema","getService","findContentType","targetModel","list","sortable","createArrayTest","allowUndefined","name","message","val","undefined","Array","isArray","editAttributes","hasEditableAttribute","array","of","size","positive"],"mappings":";;;;;;;AAKA;;AAEC,IACD,qCAAe,CAAA,CAACA,MAAAA,EAAaC,IAAO,GAAA,EAAE,GACpCC,eACGC,CAAAA,MAAM,EACNC,CAAAA,KAAK,CAAC;AACLC,QAAAA,QAAAA,EAAUC,oBAAqBN,CAAAA,MAAAA,CAAAA,CAAQO,OAAO,CAAC,MAAMC,QAAQ,EAAA;AAC7DC,QAAAA,SAAAA,EAAWC,mBAAoBV,CAAAA,MAAAA,CAAAA,CAAQO,OAAO,CAAC,MAAMC,QAAQ,EAAA;AAC7DG,QAAAA,OAAAA,EAASC,oBAAoBZ,MAAQC,EAAAA,IAAAA,CAAAA,CAAMM,OAAO,CAAC,MAAMC,QAAQ,EAAA;QACjEK,OAASX,EAAAA,eAAAA,CAAIC,MAAM,EAAA,CAAGW,QAAQ;KAE/BC,CAAAA,CAAAA,SAAS,EAAC;AAEf,MAAMT,uBAAuB,CAACN,MAAAA,GAAAA;AAC5B,IAAA,MAAMgB,eAAkBC,GAAAA,MAAAA,CAAOC,IAAI,CAAClB,MAAOmB,CAAAA,UAAU,CAAEC,CAAAA,MAAM,CAAC,CAACC,GAAQC,GAAAA,qBAAAA,CAAWtB,MAAQqB,EAAAA,GAAAA,CAAAA,CAAAA;AAE1F,IAAA,OAAOnB,eACJC,CAAAA,MAAM,EACNC,CAAAA,KAAK,CAAC;QACLmB,QAAUrB,EAAAA,eAAAA,CAAIsB,OAAO,EAAA,CAAGC,QAAQ,EAAA;QAChCC,UAAYxB,EAAAA,eAAAA,CAAIsB,OAAO,EAAA,CAAGC,QAAQ,EAAA;QAClCE,QAAUzB,EAAAA,eAAAA,CAAI0B,MAAM,EAAA,CAAGC,OAAO,EAAA,CAAGC,GAAG,CAAC,EAAIC,CAAAA,CAAAA,GAAG,CAAC,GAAA,CAAA,CAAKN,QAAQ,EAAA;QAC1DO,UAAY9B,EAAAA,eAAAA,CAAIsB,OAAO,EAAA,CAAGC,QAAQ,EAAA;;QAElCQ,SAAW/B,EAAAA,eAAAA,CAAIgC,MAAM,EAAA,CAAGC,KAAK,CAACnB,gBAAgBoB,MAAM,CAAC,IAAO7B,CAAAA,CAAAA,CAAAA,OAAO,CAAC,IAAA,CAAA;;AAEpE8B,QAAAA,aAAAA,EAAenC,eACZgC,CAAAA,MAAM,EACNI,CAAAA,IAAI,CAAC,yBAAA,EAA2B,uCAAyC,EAAA,OAAOC,KAC/EC,GAAAA,2BAAAA,CAAmBxC,MAAQuC,EAAAA,KAAAA,CAAAA,CAAAA,CAE5BhC,OAAO,CAAC,IAAA,CAAA;AACXkC,QAAAA,gBAAAA,EAAkBvC,eAAIgC,CAAAA,MAAM,EAAGC,CAAAA,KAAK,CAAC;AAAC,YAAA,KAAA;AAAO,YAAA;AAAO,SAAA,CAAA,CAAE5B,OAAO,CAAC,KAAA;AAChE,KAAA,CAAA,CACCQ,SAAS,EAAA;AACd,CAAA;AAEA,MAAML,sBAAsB,CAACV,MAAAA,GAAAA;AAC3B,IAAA,OAAOE,eAAIC,CAAAA,MAAM,EAAGC,CAAAA,KAAK,CACvBa,MAAOC,CAAAA,IAAI,CAAClB,MAAAA,CAAOmB,UAAU,CAAA,CAAEuB,MAAM,CAAC,CAACC,GAAUtB,EAAAA,GAAAA,GAAAA;AAC/CsB,QAAAA,GAAG,CAACtB,GAAI,CAAA,GAAGnB,gBACRC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLwC,YAAAA,IAAAA,EAAM1C,eACHC,CAAAA,MAAM,EACNC,CAAAA,KAAK,CAAC;AACLyC,gBAAAA,KAAAA,EAAO3C,gBAAIgC,MAAM,EAAA;
|
|
1
|
+
{"version":3,"file":"model-configuration.js","sources":["../../../../server/src/controllers/validation/model-configuration.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { isListable, hasEditableAttribute } from '../../services/utils/configuration/attributes';\nimport { isValidDefaultSort } from '../../services/utils/configuration/settings';\n\n/**\n * Creates the validation schema for content-type configurations\n */\nexport default (schema: any, opts = {}) =>\n yup\n .object()\n .shape({\n settings: createSettingsSchema(schema).default(null).nullable(),\n metadatas: createMetadasSchema(schema).default(null).nullable(),\n layouts: createLayoutsSchema(schema, opts).default(null).nullable(),\n options: yup.object().optional(),\n })\n .noUnknown();\n\nconst createSettingsSchema = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n return yup\n .object()\n .shape({\n bulkable: yup.boolean().required(),\n filterable: yup.boolean().required(),\n pageSize: yup.number().integer().min(10).max(100).required(),\n searchable: yup.boolean().required(),\n // should be reset when the type changes\n mainField: yup.string().oneOf(validAttributes.concat('id')).default('id'),\n // should be reset when the type changes\n defaultSortBy: yup\n .string()\n .test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value) =>\n isValidDefaultSort(schema, value)\n )\n .default('id'),\n defaultSortOrder: yup.string().oneOf(['ASC', 'DESC']).default('ASC'),\n })\n .noUnknown();\n};\n\nconst createMetadasSchema = (schema: any) => {\n return yup.object().shape(\n Object.keys(schema.attributes).reduce((acc: any, key) => {\n acc[key] = yup\n .object()\n .shape({\n edit: yup\n .object()\n .shape({\n label: yup.string(),\n description: yup.string().nullable(),\n placeholder: yup.string().nullable(),\n editable: yup.boolean(),\n visible: yup.boolean(),\n mainField: yup.lazy((value) => {\n if (!value) {\n return yup.string();\n }\n\n const targetSchema = getService('content-types').findContentType(\n schema.attributes[key].targetModel\n );\n\n if (!targetSchema) {\n return yup.string();\n }\n\n const validAttributes = Object.keys(targetSchema.attributes).filter((key) =>\n isListable(targetSchema, key)\n );\n\n return yup.string().oneOf(validAttributes.concat('id')).default('id');\n }),\n })\n .noUnknown()\n .required(),\n list: yup\n .object()\n .shape({\n label: yup.string(),\n searchable: yup.boolean(),\n sortable: yup.boolean(),\n })\n .noUnknown()\n .required(),\n })\n .noUnknown();\n\n return acc;\n }, {})\n );\n};\n\nconst createArrayTest = ({ allowUndefined = false } = {}) => ({\n name: 'isArray',\n message: '${path} is required and must be an array',\n test: (val: any) => (allowUndefined === true && val === undefined ? true : Array.isArray(val)),\n});\n\nconst createLayoutsSchema = (schema: any, opts = {}) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const editAttributes = Object.keys(schema.attributes).filter((key) =>\n hasEditableAttribute(schema, key)\n );\n\n return yup.object().shape({\n edit: yup\n .array()\n .of(\n yup.array().of(\n yup\n .object()\n .shape({\n name: yup.string().oneOf(editAttributes).required(),\n size: yup.number().integer().positive().required(),\n })\n .noUnknown()\n )\n )\n .test(createArrayTest(opts)),\n list: yup.array().of(yup.string().oneOf(validAttributes)).test(createArrayTest(opts)),\n });\n};\n"],"names":["schema","opts","yup","object","shape","settings","createSettingsSchema","default","nullable","metadatas","createMetadasSchema","layouts","createLayoutsSchema","options","optional","noUnknown","validAttributes","Object","keys","attributes","filter","key","isListable","bulkable","boolean","required","filterable","pageSize","number","integer","min","max","searchable","mainField","string","oneOf","concat","defaultSortBy","test","value","isValidDefaultSort","defaultSortOrder","reduce","acc","edit","label","description","placeholder","editable","visible","lazy","targetSchema","getService","findContentType","targetModel","list","sortable","createArrayTest","allowUndefined","name","message","val","undefined","Array","isArray","editAttributes","hasEditableAttribute","array","of","size","positive"],"mappings":"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"}
|
|
@@ -33,8 +33,8 @@ const createMetadasSchema = (schema)=>{
|
|
|
33
33
|
acc[key] = yup.object().shape({
|
|
34
34
|
edit: yup.object().shape({
|
|
35
35
|
label: yup.string(),
|
|
36
|
-
description: yup.string(),
|
|
37
|
-
placeholder: yup.string(),
|
|
36
|
+
description: yup.string().nullable(),
|
|
37
|
+
placeholder: yup.string().nullable(),
|
|
38
38
|
editable: yup.boolean(),
|
|
39
39
|
visible: yup.boolean(),
|
|
40
40
|
mainField: yup.lazy((value)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-configuration.mjs","sources":["../../../../server/src/controllers/validation/model-configuration.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { isListable, hasEditableAttribute } from '../../services/utils/configuration/attributes';\nimport { isValidDefaultSort } from '../../services/utils/configuration/settings';\n\n/**\n * Creates the validation schema for content-type configurations\n */\nexport default (schema: any, opts = {}) =>\n yup\n .object()\n .shape({\n settings: createSettingsSchema(schema).default(null).nullable(),\n metadatas: createMetadasSchema(schema).default(null).nullable(),\n layouts: createLayoutsSchema(schema, opts).default(null).nullable(),\n options: yup.object().optional(),\n })\n .noUnknown();\n\nconst createSettingsSchema = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n return yup\n .object()\n .shape({\n bulkable: yup.boolean().required(),\n filterable: yup.boolean().required(),\n pageSize: yup.number().integer().min(10).max(100).required(),\n searchable: yup.boolean().required(),\n // should be reset when the type changes\n mainField: yup.string().oneOf(validAttributes.concat('id')).default('id'),\n // should be reset when the type changes\n defaultSortBy: yup\n .string()\n .test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value) =>\n isValidDefaultSort(schema, value)\n )\n .default('id'),\n defaultSortOrder: yup.string().oneOf(['ASC', 'DESC']).default('ASC'),\n })\n .noUnknown();\n};\n\nconst createMetadasSchema = (schema: any) => {\n return yup.object().shape(\n Object.keys(schema.attributes).reduce((acc: any, key) => {\n acc[key] = yup\n .object()\n .shape({\n edit: yup\n .object()\n .shape({\n label: yup.string(),\n description: yup.string(),\n placeholder: yup.string(),\n editable: yup.boolean(),\n visible: yup.boolean(),\n mainField: yup.lazy((value) => {\n if (!value) {\n return yup.string();\n }\n\n const targetSchema = getService('content-types').findContentType(\n schema.attributes[key].targetModel\n );\n\n if (!targetSchema) {\n return yup.string();\n }\n\n const validAttributes = Object.keys(targetSchema.attributes).filter((key) =>\n isListable(targetSchema, key)\n );\n\n return yup.string().oneOf(validAttributes.concat('id')).default('id');\n }),\n })\n .noUnknown()\n .required(),\n list: yup\n .object()\n .shape({\n label: yup.string(),\n searchable: yup.boolean(),\n sortable: yup.boolean(),\n })\n .noUnknown()\n .required(),\n })\n .noUnknown();\n\n return acc;\n }, {})\n );\n};\n\nconst createArrayTest = ({ allowUndefined = false } = {}) => ({\n name: 'isArray',\n message: '${path} is required and must be an array',\n test: (val: any) => (allowUndefined === true && val === undefined ? true : Array.isArray(val)),\n});\n\nconst createLayoutsSchema = (schema: any, opts = {}) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const editAttributes = Object.keys(schema.attributes).filter((key) =>\n hasEditableAttribute(schema, key)\n );\n\n return yup.object().shape({\n edit: yup\n .array()\n .of(\n yup.array().of(\n yup\n .object()\n .shape({\n name: yup.string().oneOf(editAttributes).required(),\n size: yup.number().integer().positive().required(),\n })\n .noUnknown()\n )\n )\n .test(createArrayTest(opts)),\n list: yup.array().of(yup.string().oneOf(validAttributes)).test(createArrayTest(opts)),\n });\n};\n"],"names":["schema","opts","yup","object","shape","settings","createSettingsSchema","default","nullable","metadatas","createMetadasSchema","layouts","createLayoutsSchema","options","optional","noUnknown","validAttributes","Object","keys","attributes","filter","key","isListable","bulkable","boolean","required","filterable","pageSize","number","integer","min","max","searchable","mainField","string","oneOf","concat","defaultSortBy","test","value","isValidDefaultSort","defaultSortOrder","reduce","acc","edit","label","description","placeholder","editable","visible","lazy","targetSchema","getService","findContentType","targetModel","list","sortable","createArrayTest","allowUndefined","name","message","val","undefined","Array","isArray","editAttributes","hasEditableAttribute","array","of","size","positive"],"mappings":";;;;;AAKA;;AAEC,IACD,qCAAe,CAAA,CAACA,MAAAA,EAAaC,IAAO,GAAA,EAAE,GACpCC,GACGC,CAAAA,MAAM,EACNC,CAAAA,KAAK,CAAC;AACLC,QAAAA,QAAAA,EAAUC,oBAAqBN,CAAAA,MAAAA,CAAAA,CAAQO,OAAO,CAAC,MAAMC,QAAQ,EAAA;AAC7DC,QAAAA,SAAAA,EAAWC,mBAAoBV,CAAAA,MAAAA,CAAAA,CAAQO,OAAO,CAAC,MAAMC,QAAQ,EAAA;AAC7DG,QAAAA,OAAAA,EAASC,oBAAoBZ,MAAQC,EAAAA,IAAAA,CAAAA,CAAMM,OAAO,CAAC,MAAMC,QAAQ,EAAA;QACjEK,OAASX,EAAAA,GAAAA,CAAIC,MAAM,EAAA,CAAGW,QAAQ;KAE/BC,CAAAA,CAAAA,SAAS,EAAC;AAEf,MAAMT,uBAAuB,CAACN,MAAAA,GAAAA;AAC5B,IAAA,MAAMgB,eAAkBC,GAAAA,MAAAA,CAAOC,IAAI,CAAClB,MAAOmB,CAAAA,UAAU,CAAEC,CAAAA,MAAM,CAAC,CAACC,GAAQC,GAAAA,UAAAA,CAAWtB,MAAQqB,EAAAA,GAAAA,CAAAA,CAAAA;AAE1F,IAAA,OAAOnB,GACJC,CAAAA,MAAM,EACNC,CAAAA,KAAK,CAAC;QACLmB,QAAUrB,EAAAA,GAAAA,CAAIsB,OAAO,EAAA,CAAGC,QAAQ,EAAA;QAChCC,UAAYxB,EAAAA,GAAAA,CAAIsB,OAAO,EAAA,CAAGC,QAAQ,EAAA;QAClCE,QAAUzB,EAAAA,GAAAA,CAAI0B,MAAM,EAAA,CAAGC,OAAO,EAAA,CAAGC,GAAG,CAAC,EAAIC,CAAAA,CAAAA,GAAG,CAAC,GAAA,CAAA,CAAKN,QAAQ,EAAA;QAC1DO,UAAY9B,EAAAA,GAAAA,CAAIsB,OAAO,EAAA,CAAGC,QAAQ,EAAA;;QAElCQ,SAAW/B,EAAAA,GAAAA,CAAIgC,MAAM,EAAA,CAAGC,KAAK,CAACnB,gBAAgBoB,MAAM,CAAC,IAAO7B,CAAAA,CAAAA,CAAAA,OAAO,CAAC,IAAA,CAAA;;AAEpE8B,QAAAA,aAAAA,EAAenC,GACZgC,CAAAA,MAAM,EACNI,CAAAA,IAAI,CAAC,yBAAA,EAA2B,uCAAyC,EAAA,OAAOC,KAC/EC,GAAAA,kBAAAA,CAAmBxC,MAAQuC,EAAAA,KAAAA,CAAAA,CAAAA,CAE5BhC,OAAO,CAAC,IAAA,CAAA;AACXkC,QAAAA,gBAAAA,EAAkBvC,GAAIgC,CAAAA,MAAM,EAAGC,CAAAA,KAAK,CAAC;AAAC,YAAA,KAAA;AAAO,YAAA;AAAO,SAAA,CAAA,CAAE5B,OAAO,CAAC,KAAA;AAChE,KAAA,CAAA,CACCQ,SAAS,EAAA;AACd,CAAA;AAEA,MAAML,sBAAsB,CAACV,MAAAA,GAAAA;AAC3B,IAAA,OAAOE,GAAIC,CAAAA,MAAM,EAAGC,CAAAA,KAAK,CACvBa,MAAOC,CAAAA,IAAI,CAAClB,MAAAA,CAAOmB,UAAU,CAAA,CAAEuB,MAAM,CAAC,CAACC,GAAUtB,EAAAA,GAAAA,GAAAA;AAC/CsB,QAAAA,GAAG,CAACtB,GAAI,CAAA,GAAGnB,IACRC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLwC,YAAAA,IAAAA,EAAM1C,GACHC,CAAAA,MAAM,EACNC,CAAAA,KAAK,CAAC;AACLyC,gBAAAA,KAAAA,EAAO3C,IAAIgC,MAAM,EAAA;
|
|
1
|
+
{"version":3,"file":"model-configuration.mjs","sources":["../../../../server/src/controllers/validation/model-configuration.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { isListable, hasEditableAttribute } from '../../services/utils/configuration/attributes';\nimport { isValidDefaultSort } from '../../services/utils/configuration/settings';\n\n/**\n * Creates the validation schema for content-type configurations\n */\nexport default (schema: any, opts = {}) =>\n yup\n .object()\n .shape({\n settings: createSettingsSchema(schema).default(null).nullable(),\n metadatas: createMetadasSchema(schema).default(null).nullable(),\n layouts: createLayoutsSchema(schema, opts).default(null).nullable(),\n options: yup.object().optional(),\n })\n .noUnknown();\n\nconst createSettingsSchema = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n return yup\n .object()\n .shape({\n bulkable: yup.boolean().required(),\n filterable: yup.boolean().required(),\n pageSize: yup.number().integer().min(10).max(100).required(),\n searchable: yup.boolean().required(),\n // should be reset when the type changes\n mainField: yup.string().oneOf(validAttributes.concat('id')).default('id'),\n // should be reset when the type changes\n defaultSortBy: yup\n .string()\n .test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value) =>\n isValidDefaultSort(schema, value)\n )\n .default('id'),\n defaultSortOrder: yup.string().oneOf(['ASC', 'DESC']).default('ASC'),\n })\n .noUnknown();\n};\n\nconst createMetadasSchema = (schema: any) => {\n return yup.object().shape(\n Object.keys(schema.attributes).reduce((acc: any, key) => {\n acc[key] = yup\n .object()\n .shape({\n edit: yup\n .object()\n .shape({\n label: yup.string(),\n description: yup.string().nullable(),\n placeholder: yup.string().nullable(),\n editable: yup.boolean(),\n visible: yup.boolean(),\n mainField: yup.lazy((value) => {\n if (!value) {\n return yup.string();\n }\n\n const targetSchema = getService('content-types').findContentType(\n schema.attributes[key].targetModel\n );\n\n if (!targetSchema) {\n return yup.string();\n }\n\n const validAttributes = Object.keys(targetSchema.attributes).filter((key) =>\n isListable(targetSchema, key)\n );\n\n return yup.string().oneOf(validAttributes.concat('id')).default('id');\n }),\n })\n .noUnknown()\n .required(),\n list: yup\n .object()\n .shape({\n label: yup.string(),\n searchable: yup.boolean(),\n sortable: yup.boolean(),\n })\n .noUnknown()\n .required(),\n })\n .noUnknown();\n\n return acc;\n }, {})\n );\n};\n\nconst createArrayTest = ({ allowUndefined = false } = {}) => ({\n name: 'isArray',\n message: '${path} is required and must be an array',\n test: (val: any) => (allowUndefined === true && val === undefined ? true : Array.isArray(val)),\n});\n\nconst createLayoutsSchema = (schema: any, opts = {}) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const editAttributes = Object.keys(schema.attributes).filter((key) =>\n hasEditableAttribute(schema, key)\n );\n\n return yup.object().shape({\n edit: yup\n .array()\n .of(\n yup.array().of(\n yup\n .object()\n .shape({\n name: yup.string().oneOf(editAttributes).required(),\n size: yup.number().integer().positive().required(),\n })\n .noUnknown()\n )\n )\n .test(createArrayTest(opts)),\n list: yup.array().of(yup.string().oneOf(validAttributes)).test(createArrayTest(opts)),\n });\n};\n"],"names":["schema","opts","yup","object","shape","settings","createSettingsSchema","default","nullable","metadatas","createMetadasSchema","layouts","createLayoutsSchema","options","optional","noUnknown","validAttributes","Object","keys","attributes","filter","key","isListable","bulkable","boolean","required","filterable","pageSize","number","integer","min","max","searchable","mainField","string","oneOf","concat","defaultSortBy","test","value","isValidDefaultSort","defaultSortOrder","reduce","acc","edit","label","description","placeholder","editable","visible","lazy","targetSchema","getService","findContentType","targetModel","list","sortable","createArrayTest","allowUndefined","name","message","val","undefined","Array","isArray","editAttributes","hasEditableAttribute","array","of","size","positive"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../server/src/history/utils.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\ntype HistoryServices = typeof import('./services').services;\n\nfunction getService<T extends keyof HistoryServices>(strapi: Core.Strapi, name: T) {\n // Cast is needed because the return type of strapi.service is too vague\n return strapi.service(`plugin::content-manager.${name}`) as ReturnType<HistoryServices[T]>;\n}\n\nexport { getService };\n"],"names":["getService","strapi","name","service"],"mappings":";;AAIA,SAASA,UAAAA,CAA4CC,MAAmB,EAAEC,IAAO,EAAA;;AAE/E,IAAA,OAAOD,OAAOE,OAAO,CAAC,CAAC,wBAAwB,EAAED,
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../server/src/history/utils.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\ntype HistoryServices = typeof import('./services').services;\n\nfunction getService<T extends keyof HistoryServices>(strapi: Core.Strapi, name: T) {\n // Cast is needed because the return type of strapi.service is too vague\n return strapi.service(`plugin::content-manager.${name}`) as ReturnType<HistoryServices[T]>;\n}\n\nexport { getService };\n"],"names":["getService","strapi","name","service"],"mappings":";;AAIA,SAASA,UAAAA,CAA4CC,MAAmB,EAAEC,IAAO,EAAA;;AAE/E,IAAA,OAAOD,OAAOE,OAAO,CAAC,CAAC,wBAAwB,EAAED,IAAM,CAAA,CAAA,CAAA;AACzD;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.mjs","sources":["../../../server/src/history/utils.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\ntype HistoryServices = typeof import('./services').services;\n\nfunction getService<T extends keyof HistoryServices>(strapi: Core.Strapi, name: T) {\n // Cast is needed because the return type of strapi.service is too vague\n return strapi.service(`plugin::content-manager.${name}`) as ReturnType<HistoryServices[T]>;\n}\n\nexport { getService };\n"],"names":["getService","strapi","name","service"],"mappings":"AAIA,SAASA,UAAAA,CAA4CC,MAAmB,EAAEC,IAAO,EAAA;;AAE/E,IAAA,OAAOD,OAAOE,OAAO,CAAC,CAAC,wBAAwB,EAAED,
|
|
1
|
+
{"version":3,"file":"utils.mjs","sources":["../../../server/src/history/utils.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\ntype HistoryServices = typeof import('./services').services;\n\nfunction getService<T extends keyof HistoryServices>(strapi: Core.Strapi, name: T) {\n // Cast is needed because the return type of strapi.service is too vague\n return strapi.service(`plugin::content-manager.${name}`) as ReturnType<HistoryServices[T]>;\n}\n\nexport { getService };\n"],"names":["getService","strapi","name","service"],"mappings":"AAIA,SAASA,UAAAA,CAA4CC,MAAmB,EAAEC,IAAO,EAAA;;AAE/E,IAAA,OAAOD,OAAOE,OAAO,CAAC,CAAC,wBAAwB,EAAED,IAAM,CAAA,CAAA,CAAA;AACzD;;;;"}
|
|
@@ -121,7 +121,8 @@ const createHomepageService = ({ strapi })=>{
|
|
|
121
121
|
const permissionQuery = await getPermissionChecker(meta.uid).sanitizedQuery.read({
|
|
122
122
|
limit: MAX_DOCUMENTS,
|
|
123
123
|
fields: meta.fields,
|
|
124
|
-
...additionalQueryParams
|
|
124
|
+
...additionalQueryParams,
|
|
125
|
+
locale: '*'
|
|
125
126
|
});
|
|
126
127
|
const docs = await strapi.documents(meta.uid).findMany(permissionQuery);
|
|
127
128
|
const populate = additionalQueryParams?.populate;
|
|
@@ -178,9 +179,9 @@ const createHomepageService = ({ strapi })=>{
|
|
|
178
179
|
this.select('document_id').from(tableName).groupBy('document_id').havingRaw('COUNT(*) = 1');
|
|
179
180
|
}).count('* as count').first();
|
|
180
181
|
countDocuments.draft += Number(draftDocuments?.count) || 0;
|
|
181
|
-
const publishedDocuments = meta.hasDraftAndPublish ? await strapiDBConnection(tableName).
|
|
182
|
+
const publishedDocuments = meta.hasDraftAndPublish ? await strapiDBConnection(tableName).countDistinct('draft.document_id as count').from(`${tableName} as draft`).join(`${tableName} as published`, function() {
|
|
182
183
|
this.on('draft.document_id', '=', 'published.document_id').andOn('draft.updated_at', '=', 'published.updated_at').andOnNull('draft.published_at').andOnNotNull('published.published_at');
|
|
183
|
-
}).
|
|
184
|
+
}).first() : await strapiDBConnection(tableName).countDistinct('document_id as count').from(`${tableName}`).first();
|
|
184
185
|
countDocuments.published += Number(publishedDocuments?.count) || 0;
|
|
185
186
|
const modifiedDocuments = await strapiDBConnection(tableName).select('draft.document_id').from(`${tableName} as draft`).join(`${tableName} as published`, function() {
|
|
186
187
|
this.on('draft.document_id', '=', 'published.document_id').andOn('draft.updated_at', '!=', 'published.updated_at').andOnNull('draft.published_at').andOnNotNull('published.published_at');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"homepage.js","sources":["../../../../server/src/homepage/services/homepage.ts"],"sourcesContent":["import type { Core, Modules, Schema } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\nimport type {\n GetCountDocuments,\n GetRecentDocuments,\n RecentDocument,\n} from '../../../../shared/contracts/homepage';\n\nconst createHomepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const MAX_DOCUMENTS = 4;\n\n const metadataService = strapi.plugin('content-manager').service('document-metadata');\n const permissionService = strapi.admin.services.permission;\n\n type ContentTypeConfiguration = {\n uid: RecentDocument['contentTypeUid'];\n settings: { mainField: string };\n };\n const getConfiguration = async (\n contentTypeUids: RecentDocument['contentTypeUid'][]\n ): Promise<ContentTypeConfiguration[]> => {\n /**\n * Don't use the strapi.store util because we need to make\n * more precise queries than exact key matches, in order to make as few queries as possible.\n */\n const coreStore = strapi.db.query('strapi::core-store');\n const rawConfigurations = await coreStore.findMany({\n where: {\n key: {\n $in: contentTypeUids.map(\n (contentType) => `plugin_content_manager_configuration_content_types::${contentType}`\n ),\n },\n },\n });\n\n return rawConfigurations.map((rawConfiguration) => {\n return JSON.parse(rawConfiguration.value);\n });\n };\n\n const getPermittedContentTypes = async () => {\n const readPermissions: Modules.Permissions.PermissionRule[] = await permissionService.findMany({\n where: {\n role: { users: { id: strapi.requestContext.get()?.state?.user.id } },\n action: 'plugin::content-manager.explorer.read',\n },\n });\n\n return readPermissions\n .map((permission) => permission.subject)\n .filter(Boolean) as RecentDocument['contentTypeUid'][];\n };\n\n type ContentTypeMeta = {\n fields: string[];\n mainField: string;\n contentType: Schema.ContentType;\n hasDraftAndPublish: boolean;\n uid: RecentDocument['contentTypeUid'];\n };\n\n const getContentTypesMeta = (\n allowedContentTypeUids: RecentDocument['contentTypeUid'][],\n configurations: ContentTypeConfiguration[]\n ): ContentTypeMeta[] => {\n return allowedContentTypeUids.map((uid) => {\n const configuration = configurations.find((config) => config.uid === uid);\n const contentType = strapi.contentType(uid);\n const fields = ['documentId', 'updatedAt'];\n\n // Add fields required to get the status if D&P is enabled\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(contentType);\n if (hasDraftAndPublish) {\n fields.push('publishedAt');\n }\n\n // Only add the main field if it's defined\n if (configuration?.settings.mainField) {\n fields.push(configuration.settings.mainField);\n }\n\n // Only add locale if it's localized\n const isLocalized = (contentType.pluginOptions?.i18n as any)?.localized;\n if (isLocalized) {\n fields.push('locale');\n }\n\n return {\n fields,\n mainField: configuration!.settings.mainField,\n contentType,\n hasDraftAndPublish,\n uid,\n };\n });\n };\n\n const formatDocuments = (\n documents: Modules.Documents.AnyDocument[],\n meta: ContentTypeMeta,\n populate?: string[]\n ) => {\n return documents.map((document) => {\n const additionalFields =\n populate?.reduce(\n (acc, key) => {\n acc[key] = document[key];\n return acc;\n },\n {} as Record<string, any>\n ) || {};\n return {\n documentId: document.documentId,\n locale: document.locale ?? null,\n updatedAt: new Date(document.updatedAt),\n title: document[meta.mainField ?? 'documentId'],\n publishedAt:\n meta.hasDraftAndPublish && document.publishedAt ? new Date(document.publishedAt) : null,\n contentTypeUid: meta.uid,\n contentTypeDisplayName: meta.contentType.info.displayName,\n kind: meta.contentType.kind,\n ...additionalFields,\n };\n });\n };\n\n const permissionCheckerService = strapi.plugin('content-manager').service('permission-checker');\n const getPermissionChecker = (uid: string) =>\n permissionCheckerService.create({\n userAbility: strapi.requestContext.get()?.state.userAbility,\n model: uid,\n });\n\n return {\n async addStatusToDocuments(documents: RecentDocument[]): Promise<RecentDocument[]> {\n return Promise.all(\n documents.map(async (recentDocument) => {\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(\n strapi.contentType(recentDocument.contentTypeUid)\n );\n /**\n * Tries to query the other version of the document if draft and publish is enabled,\n * so that we know when to give the \"modified\" status.\n */\n const { availableStatus } = await metadataService.getMetadata(\n recentDocument.contentTypeUid,\n recentDocument,\n {\n availableStatus: hasDraftAndPublish,\n availableLocales: false,\n }\n );\n const status: RecentDocument['status'] = metadataService.getStatus(\n recentDocument,\n availableStatus\n );\n\n return {\n ...recentDocument,\n status: hasDraftAndPublish ? status : undefined,\n };\n })\n );\n },\n\n async queryLastDocuments(\n additionalQueryParams?: Record<string, unknown>,\n draftAndPublishOnly?: boolean\n ): Promise<RecentDocument[]> {\n const permittedContentTypes = await getPermittedContentTypes();\n const allowedContentTypeUids = draftAndPublishOnly\n ? permittedContentTypes.filter((uid) => {\n return contentTypes.hasDraftAndPublish(strapi.contentType(uid));\n })\n : permittedContentTypes;\n // Fetch the configuration for each content type in a single query\n const configurations = await getConfiguration(allowedContentTypeUids);\n // Get the necessary metadata for the documents\n const contentTypesMeta = getContentTypesMeta(allowedContentTypeUids, configurations);\n\n const recentDocuments = await Promise.all(\n contentTypesMeta.map(async (meta) => {\n const permissionQuery = await getPermissionChecker(meta.uid).sanitizedQuery.read({\n limit: MAX_DOCUMENTS,\n fields: meta.fields,\n ...additionalQueryParams,\n });\n\n const docs = await strapi.documents(meta.uid).findMany(permissionQuery);\n const populate = additionalQueryParams?.populate as string[];\n\n return formatDocuments(docs, meta, populate);\n })\n );\n\n return recentDocuments\n .flat()\n .sort((a, b) => {\n switch (additionalQueryParams?.sort) {\n case 'publishedAt:desc':\n if (!a.publishedAt || !b.publishedAt) return 0;\n return b.publishedAt.valueOf() - a.publishedAt.valueOf();\n case 'publishedAt:asc':\n if (!a.publishedAt || !b.publishedAt) return 0;\n return a.publishedAt.valueOf() - b.publishedAt.valueOf();\n case 'updatedAt:desc':\n if (!a.updatedAt || !b.updatedAt) return 0;\n return b.updatedAt.valueOf() - a.updatedAt.valueOf();\n case 'updatedAt:asc':\n if (!a.updatedAt || !b.updatedAt) return 0;\n return a.updatedAt.valueOf() - b.updatedAt.valueOf();\n default:\n return 0;\n }\n })\n .slice(0, MAX_DOCUMENTS);\n },\n\n async getRecentlyPublishedDocuments(): Promise<GetRecentDocuments.Response['data']> {\n const recentlyPublishedDocuments = await this.queryLastDocuments(\n {\n sort: 'publishedAt:desc',\n status: 'published',\n },\n true\n );\n\n return this.addStatusToDocuments(recentlyPublishedDocuments);\n },\n\n async getRecentlyUpdatedDocuments(): Promise<GetRecentDocuments.Response['data']> {\n const recentlyUpdatedDocuments = await this.queryLastDocuments({\n sort: 'updatedAt:desc',\n });\n\n return this.addStatusToDocuments(recentlyUpdatedDocuments);\n },\n\n async getCountDocuments(): Promise<GetCountDocuments.Response['data']> {\n const permittedContentTypes = await getPermittedContentTypes();\n // Fetch the configuration for each content type in a single query\n const configurations = await getConfiguration(permittedContentTypes);\n // Get the necessary metadata for the documents\n const contentTypesMeta = getContentTypesMeta(permittedContentTypes, configurations);\n\n const countDocuments = {\n draft: 0,\n published: 0,\n modified: 0,\n };\n\n await Promise.all(\n contentTypesMeta.map(async (meta) => {\n const strapiDBConnection = strapi.db.connection;\n const tableName = strapi.contentType(meta.uid).collectionName;\n if (tableName) {\n const draftDocuments = await strapiDBConnection(tableName)\n .whereNull('published_at')\n .whereIn('document_id', function () {\n this.select('document_id')\n .from(tableName)\n .groupBy('document_id')\n .havingRaw('COUNT(*) = 1');\n })\n .count('* as count')\n .first();\n countDocuments.draft += Number(draftDocuments?.count) || 0;\n\n const publishedDocuments = meta.hasDraftAndPublish\n ? await strapiDBConnection(tableName)\n .select('draft.document_id')\n .from(`${tableName} as draft`)\n .join(`${tableName} as published`, function () {\n this.on('draft.document_id', '=', 'published.document_id')\n .andOn('draft.updated_at', '=', 'published.updated_at')\n .andOnNull('draft.published_at')\n .andOnNotNull('published.published_at');\n })\n .countDistinct('draft.document_id as count')\n .groupBy('draft.document_id')\n .first()\n : await strapiDBConnection(tableName)\n .select('document_id')\n .from(`${tableName}`)\n .countDistinct('document_id as count')\n .groupBy('document_id')\n .first();\n countDocuments.published += Number(publishedDocuments?.count) || 0;\n\n const modifiedDocuments = await strapiDBConnection(tableName)\n .select('draft.document_id')\n .from(`${tableName} as draft`)\n .join(`${tableName} as published`, function () {\n this.on('draft.document_id', '=', 'published.document_id')\n .andOn('draft.updated_at', '!=', 'published.updated_at')\n .andOnNull('draft.published_at')\n .andOnNotNull('published.published_at');\n })\n .countDistinct('draft.document_id as count')\n .groupBy('draft.document_id')\n .first();\n countDocuments.modified += Number(modifiedDocuments?.count) || 0;\n }\n })\n );\n\n return countDocuments;\n },\n };\n};\n\nexport { createHomepageService };\n"],"names":["createHomepageService","strapi","MAX_DOCUMENTS","metadataService","plugin","service","permissionService","admin","services","permission","getConfiguration","contentTypeUids","coreStore","db","query","rawConfigurations","findMany","where","key","$in","map","contentType","rawConfiguration","JSON","parse","value","getPermittedContentTypes","readPermissions","role","users","id","requestContext","get","state","user","action","subject","filter","Boolean","getContentTypesMeta","allowedContentTypeUids","configurations","uid","configuration","find","config","fields","hasDraftAndPublish","contentTypes","push","settings","mainField","isLocalized","pluginOptions","i18n","localized","formatDocuments","documents","meta","populate","document","additionalFields","reduce","acc","documentId","locale","updatedAt","Date","title","publishedAt","contentTypeUid","contentTypeDisplayName","info","displayName","kind","permissionCheckerService","getPermissionChecker","create","userAbility","model","addStatusToDocuments","Promise","all","recentDocument","availableStatus","getMetadata","availableLocales","status","getStatus","undefined","queryLastDocuments","additionalQueryParams","draftAndPublishOnly","permittedContentTypes","contentTypesMeta","recentDocuments","permissionQuery","sanitizedQuery","read","limit","docs","flat","sort","a","b","valueOf","slice","getRecentlyPublishedDocuments","recentlyPublishedDocuments","getRecentlyUpdatedDocuments","recentlyUpdatedDocuments","getCountDocuments","countDocuments","draft","published","modified","strapiDBConnection","connection","tableName","collectionName","draftDocuments","whereNull","whereIn","select","from","groupBy","havingRaw","count","first","Number","publishedDocuments","join","on","andOn","andOnNull","andOnNotNull","countDistinct","modifiedDocuments"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"homepage.js","sources":["../../../../server/src/homepage/services/homepage.ts"],"sourcesContent":["/* eslint-disable func-names */\nimport type { Core, Modules, Schema } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\nimport type {\n GetCountDocuments,\n GetRecentDocuments,\n RecentDocument,\n} from '../../../../shared/contracts/homepage';\n\nconst createHomepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const MAX_DOCUMENTS = 4;\n\n const metadataService = strapi.plugin('content-manager').service('document-metadata');\n const permissionService = strapi.admin.services.permission;\n\n type ContentTypeConfiguration = {\n uid: RecentDocument['contentTypeUid'];\n settings: { mainField: string };\n };\n const getConfiguration = async (\n contentTypeUids: RecentDocument['contentTypeUid'][]\n ): Promise<ContentTypeConfiguration[]> => {\n /**\n * Don't use the strapi.store util because we need to make\n * more precise queries than exact key matches, in order to make as few queries as possible.\n */\n const coreStore = strapi.db.query('strapi::core-store');\n const rawConfigurations = await coreStore.findMany({\n where: {\n key: {\n $in: contentTypeUids.map(\n (contentType) => `plugin_content_manager_configuration_content_types::${contentType}`\n ),\n },\n },\n });\n\n return rawConfigurations.map((rawConfiguration) => {\n return JSON.parse(rawConfiguration.value);\n });\n };\n\n const getPermittedContentTypes = async () => {\n const readPermissions: Modules.Permissions.PermissionRule[] = await permissionService.findMany({\n where: {\n role: { users: { id: strapi.requestContext.get()?.state?.user.id } },\n action: 'plugin::content-manager.explorer.read',\n },\n });\n\n return readPermissions\n .map((permission) => permission.subject)\n .filter(Boolean) as RecentDocument['contentTypeUid'][];\n };\n\n type ContentTypeMeta = {\n fields: string[];\n mainField: string;\n contentType: Schema.ContentType;\n hasDraftAndPublish: boolean;\n uid: RecentDocument['contentTypeUid'];\n };\n\n const getContentTypesMeta = (\n allowedContentTypeUids: RecentDocument['contentTypeUid'][],\n configurations: ContentTypeConfiguration[]\n ): ContentTypeMeta[] => {\n return allowedContentTypeUids.map((uid) => {\n const configuration = configurations.find((config) => config.uid === uid);\n const contentType = strapi.contentType(uid);\n const fields = ['documentId', 'updatedAt'];\n\n // Add fields required to get the status if D&P is enabled\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(contentType);\n if (hasDraftAndPublish) {\n fields.push('publishedAt');\n }\n\n // Only add the main field if it's defined\n if (configuration?.settings.mainField) {\n fields.push(configuration.settings.mainField);\n }\n\n // Only add locale if it's localized\n const isLocalized = (contentType.pluginOptions?.i18n as any)?.localized;\n if (isLocalized) {\n fields.push('locale');\n }\n\n return {\n fields,\n mainField: configuration!.settings.mainField,\n contentType,\n hasDraftAndPublish,\n uid,\n };\n });\n };\n\n const formatDocuments = (\n documents: Modules.Documents.AnyDocument[],\n meta: ContentTypeMeta,\n populate?: string[]\n ) => {\n return documents.map((document) => {\n const additionalFields =\n populate?.reduce(\n (acc, key) => {\n acc[key] = document[key];\n return acc;\n },\n {} as Record<string, any>\n ) || {};\n return {\n documentId: document.documentId,\n locale: document.locale ?? null,\n updatedAt: new Date(document.updatedAt),\n title: document[meta.mainField ?? 'documentId'],\n publishedAt:\n meta.hasDraftAndPublish && document.publishedAt ? new Date(document.publishedAt) : null,\n contentTypeUid: meta.uid,\n contentTypeDisplayName: meta.contentType.info.displayName,\n kind: meta.contentType.kind,\n ...additionalFields,\n };\n });\n };\n\n const permissionCheckerService = strapi.plugin('content-manager').service('permission-checker');\n const getPermissionChecker = (uid: string) =>\n permissionCheckerService.create({\n userAbility: strapi.requestContext.get()?.state.userAbility,\n model: uid,\n });\n\n return {\n async addStatusToDocuments(documents: RecentDocument[]): Promise<RecentDocument[]> {\n return Promise.all(\n documents.map(async (recentDocument) => {\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(\n strapi.contentType(recentDocument.contentTypeUid)\n );\n /**\n * Tries to query the other version of the document if draft and publish is enabled,\n * so that we know when to give the \"modified\" status.\n */\n const { availableStatus } = await metadataService.getMetadata(\n recentDocument.contentTypeUid,\n recentDocument,\n {\n availableStatus: hasDraftAndPublish,\n availableLocales: false,\n }\n );\n const status: RecentDocument['status'] = metadataService.getStatus(\n recentDocument,\n availableStatus\n );\n\n return {\n ...recentDocument,\n status: hasDraftAndPublish ? status : undefined,\n };\n })\n );\n },\n\n async queryLastDocuments(\n additionalQueryParams?: Record<string, unknown>,\n draftAndPublishOnly?: boolean\n ): Promise<RecentDocument[]> {\n const permittedContentTypes = await getPermittedContentTypes();\n const allowedContentTypeUids = draftAndPublishOnly\n ? permittedContentTypes.filter((uid) => {\n return contentTypes.hasDraftAndPublish(strapi.contentType(uid));\n })\n : permittedContentTypes;\n // Fetch the configuration for each content type in a single query\n const configurations = await getConfiguration(allowedContentTypeUids);\n // Get the necessary metadata for the documents\n const contentTypesMeta = getContentTypesMeta(allowedContentTypeUids, configurations);\n\n const recentDocuments = await Promise.all(\n contentTypesMeta.map(async (meta) => {\n const permissionQuery = await getPermissionChecker(meta.uid).sanitizedQuery.read({\n limit: MAX_DOCUMENTS,\n fields: meta.fields,\n ...additionalQueryParams,\n locale: '*',\n });\n\n const docs = await strapi.documents(meta.uid).findMany(permissionQuery);\n const populate = additionalQueryParams?.populate as string[];\n\n return formatDocuments(docs, meta, populate);\n })\n );\n\n return recentDocuments\n .flat()\n .sort((a, b) => {\n switch (additionalQueryParams?.sort) {\n case 'publishedAt:desc':\n if (!a.publishedAt || !b.publishedAt) return 0;\n return b.publishedAt.valueOf() - a.publishedAt.valueOf();\n case 'publishedAt:asc':\n if (!a.publishedAt || !b.publishedAt) return 0;\n return a.publishedAt.valueOf() - b.publishedAt.valueOf();\n case 'updatedAt:desc':\n if (!a.updatedAt || !b.updatedAt) return 0;\n return b.updatedAt.valueOf() - a.updatedAt.valueOf();\n case 'updatedAt:asc':\n if (!a.updatedAt || !b.updatedAt) return 0;\n return a.updatedAt.valueOf() - b.updatedAt.valueOf();\n default:\n return 0;\n }\n })\n .slice(0, MAX_DOCUMENTS);\n },\n\n async getRecentlyPublishedDocuments(): Promise<GetRecentDocuments.Response['data']> {\n const recentlyPublishedDocuments = await this.queryLastDocuments(\n {\n sort: 'publishedAt:desc',\n status: 'published',\n },\n true\n );\n\n return this.addStatusToDocuments(recentlyPublishedDocuments);\n },\n\n async getRecentlyUpdatedDocuments(): Promise<GetRecentDocuments.Response['data']> {\n const recentlyUpdatedDocuments = await this.queryLastDocuments({\n sort: 'updatedAt:desc',\n });\n\n return this.addStatusToDocuments(recentlyUpdatedDocuments);\n },\n\n async getCountDocuments(): Promise<GetCountDocuments.Response['data']> {\n const permittedContentTypes = await getPermittedContentTypes();\n // Fetch the configuration for each content type in a single query\n const configurations = await getConfiguration(permittedContentTypes);\n // Get the necessary metadata for the documents\n const contentTypesMeta = getContentTypesMeta(permittedContentTypes, configurations);\n\n const countDocuments = {\n draft: 0,\n published: 0,\n modified: 0,\n };\n\n await Promise.all(\n contentTypesMeta.map(async (meta) => {\n const strapiDBConnection = strapi.db.connection;\n const tableName = strapi.contentType(meta.uid).collectionName;\n if (tableName) {\n const draftDocuments = await strapiDBConnection(tableName)\n .whereNull('published_at')\n .whereIn('document_id', function () {\n this.select('document_id')\n .from(tableName)\n .groupBy('document_id')\n .havingRaw('COUNT(*) = 1');\n })\n .count('* as count')\n .first();\n countDocuments.draft += Number(draftDocuments?.count) || 0;\n\n const publishedDocuments = meta.hasDraftAndPublish\n ? await strapiDBConnection(tableName)\n .countDistinct('draft.document_id as count')\n .from(`${tableName} as draft`)\n .join(`${tableName} as published`, function () {\n this.on('draft.document_id', '=', 'published.document_id')\n .andOn('draft.updated_at', '=', 'published.updated_at')\n .andOnNull('draft.published_at')\n .andOnNotNull('published.published_at');\n })\n .first()\n : await strapiDBConnection(tableName)\n .countDistinct('document_id as count')\n .from(`${tableName}`)\n .first();\n countDocuments.published += Number(publishedDocuments?.count) || 0;\n\n const modifiedDocuments = await strapiDBConnection(tableName)\n .select('draft.document_id')\n .from(`${tableName} as draft`)\n .join(`${tableName} as published`, function () {\n this.on('draft.document_id', '=', 'published.document_id')\n .andOn('draft.updated_at', '!=', 'published.updated_at')\n .andOnNull('draft.published_at')\n .andOnNotNull('published.published_at');\n })\n .countDistinct('draft.document_id as count')\n .groupBy('draft.document_id')\n .first();\n countDocuments.modified += Number(modifiedDocuments?.count) || 0;\n }\n })\n );\n\n return countDocuments;\n },\n };\n};\n\nexport { createHomepageService };\n"],"names":["createHomepageService","strapi","MAX_DOCUMENTS","metadataService","plugin","service","permissionService","admin","services","permission","getConfiguration","contentTypeUids","coreStore","db","query","rawConfigurations","findMany","where","key","$in","map","contentType","rawConfiguration","JSON","parse","value","getPermittedContentTypes","readPermissions","role","users","id","requestContext","get","state","user","action","subject","filter","Boolean","getContentTypesMeta","allowedContentTypeUids","configurations","uid","configuration","find","config","fields","hasDraftAndPublish","contentTypes","push","settings","mainField","isLocalized","pluginOptions","i18n","localized","formatDocuments","documents","meta","populate","document","additionalFields","reduce","acc","documentId","locale","updatedAt","Date","title","publishedAt","contentTypeUid","contentTypeDisplayName","info","displayName","kind","permissionCheckerService","getPermissionChecker","create","userAbility","model","addStatusToDocuments","Promise","all","recentDocument","availableStatus","getMetadata","availableLocales","status","getStatus","undefined","queryLastDocuments","additionalQueryParams","draftAndPublishOnly","permittedContentTypes","contentTypesMeta","recentDocuments","permissionQuery","sanitizedQuery","read","limit","docs","flat","sort","a","b","valueOf","slice","getRecentlyPublishedDocuments","recentlyPublishedDocuments","getRecentlyUpdatedDocuments","recentlyUpdatedDocuments","getCountDocuments","countDocuments","draft","published","modified","strapiDBConnection","connection","tableName","collectionName","draftDocuments","whereNull","whereIn","select","from","groupBy","havingRaw","count","first","Number","publishedDocuments","countDistinct","join","on","andOn","andOnNull","andOnNotNull","modifiedDocuments"],"mappings":"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"}
|
|
@@ -119,7 +119,8 @@ const createHomepageService = ({ strapi })=>{
|
|
|
119
119
|
const permissionQuery = await getPermissionChecker(meta.uid).sanitizedQuery.read({
|
|
120
120
|
limit: MAX_DOCUMENTS,
|
|
121
121
|
fields: meta.fields,
|
|
122
|
-
...additionalQueryParams
|
|
122
|
+
...additionalQueryParams,
|
|
123
|
+
locale: '*'
|
|
123
124
|
});
|
|
124
125
|
const docs = await strapi.documents(meta.uid).findMany(permissionQuery);
|
|
125
126
|
const populate = additionalQueryParams?.populate;
|
|
@@ -176,9 +177,9 @@ const createHomepageService = ({ strapi })=>{
|
|
|
176
177
|
this.select('document_id').from(tableName).groupBy('document_id').havingRaw('COUNT(*) = 1');
|
|
177
178
|
}).count('* as count').first();
|
|
178
179
|
countDocuments.draft += Number(draftDocuments?.count) || 0;
|
|
179
|
-
const publishedDocuments = meta.hasDraftAndPublish ? await strapiDBConnection(tableName).
|
|
180
|
+
const publishedDocuments = meta.hasDraftAndPublish ? await strapiDBConnection(tableName).countDistinct('draft.document_id as count').from(`${tableName} as draft`).join(`${tableName} as published`, function() {
|
|
180
181
|
this.on('draft.document_id', '=', 'published.document_id').andOn('draft.updated_at', '=', 'published.updated_at').andOnNull('draft.published_at').andOnNotNull('published.published_at');
|
|
181
|
-
}).
|
|
182
|
+
}).first() : await strapiDBConnection(tableName).countDistinct('document_id as count').from(`${tableName}`).first();
|
|
182
183
|
countDocuments.published += Number(publishedDocuments?.count) || 0;
|
|
183
184
|
const modifiedDocuments = await strapiDBConnection(tableName).select('draft.document_id').from(`${tableName} as draft`).join(`${tableName} as published`, function() {
|
|
184
185
|
this.on('draft.document_id', '=', 'published.document_id').andOn('draft.updated_at', '!=', 'published.updated_at').andOnNull('draft.published_at').andOnNotNull('published.published_at');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"homepage.mjs","sources":["../../../../server/src/homepage/services/homepage.ts"],"sourcesContent":["import type { Core, Modules, Schema } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\nimport type {\n GetCountDocuments,\n GetRecentDocuments,\n RecentDocument,\n} from '../../../../shared/contracts/homepage';\n\nconst createHomepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const MAX_DOCUMENTS = 4;\n\n const metadataService = strapi.plugin('content-manager').service('document-metadata');\n const permissionService = strapi.admin.services.permission;\n\n type ContentTypeConfiguration = {\n uid: RecentDocument['contentTypeUid'];\n settings: { mainField: string };\n };\n const getConfiguration = async (\n contentTypeUids: RecentDocument['contentTypeUid'][]\n ): Promise<ContentTypeConfiguration[]> => {\n /**\n * Don't use the strapi.store util because we need to make\n * more precise queries than exact key matches, in order to make as few queries as possible.\n */\n const coreStore = strapi.db.query('strapi::core-store');\n const rawConfigurations = await coreStore.findMany({\n where: {\n key: {\n $in: contentTypeUids.map(\n (contentType) => `plugin_content_manager_configuration_content_types::${contentType}`\n ),\n },\n },\n });\n\n return rawConfigurations.map((rawConfiguration) => {\n return JSON.parse(rawConfiguration.value);\n });\n };\n\n const getPermittedContentTypes = async () => {\n const readPermissions: Modules.Permissions.PermissionRule[] = await permissionService.findMany({\n where: {\n role: { users: { id: strapi.requestContext.get()?.state?.user.id } },\n action: 'plugin::content-manager.explorer.read',\n },\n });\n\n return readPermissions\n .map((permission) => permission.subject)\n .filter(Boolean) as RecentDocument['contentTypeUid'][];\n };\n\n type ContentTypeMeta = {\n fields: string[];\n mainField: string;\n contentType: Schema.ContentType;\n hasDraftAndPublish: boolean;\n uid: RecentDocument['contentTypeUid'];\n };\n\n const getContentTypesMeta = (\n allowedContentTypeUids: RecentDocument['contentTypeUid'][],\n configurations: ContentTypeConfiguration[]\n ): ContentTypeMeta[] => {\n return allowedContentTypeUids.map((uid) => {\n const configuration = configurations.find((config) => config.uid === uid);\n const contentType = strapi.contentType(uid);\n const fields = ['documentId', 'updatedAt'];\n\n // Add fields required to get the status if D&P is enabled\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(contentType);\n if (hasDraftAndPublish) {\n fields.push('publishedAt');\n }\n\n // Only add the main field if it's defined\n if (configuration?.settings.mainField) {\n fields.push(configuration.settings.mainField);\n }\n\n // Only add locale if it's localized\n const isLocalized = (contentType.pluginOptions?.i18n as any)?.localized;\n if (isLocalized) {\n fields.push('locale');\n }\n\n return {\n fields,\n mainField: configuration!.settings.mainField,\n contentType,\n hasDraftAndPublish,\n uid,\n };\n });\n };\n\n const formatDocuments = (\n documents: Modules.Documents.AnyDocument[],\n meta: ContentTypeMeta,\n populate?: string[]\n ) => {\n return documents.map((document) => {\n const additionalFields =\n populate?.reduce(\n (acc, key) => {\n acc[key] = document[key];\n return acc;\n },\n {} as Record<string, any>\n ) || {};\n return {\n documentId: document.documentId,\n locale: document.locale ?? null,\n updatedAt: new Date(document.updatedAt),\n title: document[meta.mainField ?? 'documentId'],\n publishedAt:\n meta.hasDraftAndPublish && document.publishedAt ? new Date(document.publishedAt) : null,\n contentTypeUid: meta.uid,\n contentTypeDisplayName: meta.contentType.info.displayName,\n kind: meta.contentType.kind,\n ...additionalFields,\n };\n });\n };\n\n const permissionCheckerService = strapi.plugin('content-manager').service('permission-checker');\n const getPermissionChecker = (uid: string) =>\n permissionCheckerService.create({\n userAbility: strapi.requestContext.get()?.state.userAbility,\n model: uid,\n });\n\n return {\n async addStatusToDocuments(documents: RecentDocument[]): Promise<RecentDocument[]> {\n return Promise.all(\n documents.map(async (recentDocument) => {\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(\n strapi.contentType(recentDocument.contentTypeUid)\n );\n /**\n * Tries to query the other version of the document if draft and publish is enabled,\n * so that we know when to give the \"modified\" status.\n */\n const { availableStatus } = await metadataService.getMetadata(\n recentDocument.contentTypeUid,\n recentDocument,\n {\n availableStatus: hasDraftAndPublish,\n availableLocales: false,\n }\n );\n const status: RecentDocument['status'] = metadataService.getStatus(\n recentDocument,\n availableStatus\n );\n\n return {\n ...recentDocument,\n status: hasDraftAndPublish ? status : undefined,\n };\n })\n );\n },\n\n async queryLastDocuments(\n additionalQueryParams?: Record<string, unknown>,\n draftAndPublishOnly?: boolean\n ): Promise<RecentDocument[]> {\n const permittedContentTypes = await getPermittedContentTypes();\n const allowedContentTypeUids = draftAndPublishOnly\n ? permittedContentTypes.filter((uid) => {\n return contentTypes.hasDraftAndPublish(strapi.contentType(uid));\n })\n : permittedContentTypes;\n // Fetch the configuration for each content type in a single query\n const configurations = await getConfiguration(allowedContentTypeUids);\n // Get the necessary metadata for the documents\n const contentTypesMeta = getContentTypesMeta(allowedContentTypeUids, configurations);\n\n const recentDocuments = await Promise.all(\n contentTypesMeta.map(async (meta) => {\n const permissionQuery = await getPermissionChecker(meta.uid).sanitizedQuery.read({\n limit: MAX_DOCUMENTS,\n fields: meta.fields,\n ...additionalQueryParams,\n });\n\n const docs = await strapi.documents(meta.uid).findMany(permissionQuery);\n const populate = additionalQueryParams?.populate as string[];\n\n return formatDocuments(docs, meta, populate);\n })\n );\n\n return recentDocuments\n .flat()\n .sort((a, b) => {\n switch (additionalQueryParams?.sort) {\n case 'publishedAt:desc':\n if (!a.publishedAt || !b.publishedAt) return 0;\n return b.publishedAt.valueOf() - a.publishedAt.valueOf();\n case 'publishedAt:asc':\n if (!a.publishedAt || !b.publishedAt) return 0;\n return a.publishedAt.valueOf() - b.publishedAt.valueOf();\n case 'updatedAt:desc':\n if (!a.updatedAt || !b.updatedAt) return 0;\n return b.updatedAt.valueOf() - a.updatedAt.valueOf();\n case 'updatedAt:asc':\n if (!a.updatedAt || !b.updatedAt) return 0;\n return a.updatedAt.valueOf() - b.updatedAt.valueOf();\n default:\n return 0;\n }\n })\n .slice(0, MAX_DOCUMENTS);\n },\n\n async getRecentlyPublishedDocuments(): Promise<GetRecentDocuments.Response['data']> {\n const recentlyPublishedDocuments = await this.queryLastDocuments(\n {\n sort: 'publishedAt:desc',\n status: 'published',\n },\n true\n );\n\n return this.addStatusToDocuments(recentlyPublishedDocuments);\n },\n\n async getRecentlyUpdatedDocuments(): Promise<GetRecentDocuments.Response['data']> {\n const recentlyUpdatedDocuments = await this.queryLastDocuments({\n sort: 'updatedAt:desc',\n });\n\n return this.addStatusToDocuments(recentlyUpdatedDocuments);\n },\n\n async getCountDocuments(): Promise<GetCountDocuments.Response['data']> {\n const permittedContentTypes = await getPermittedContentTypes();\n // Fetch the configuration for each content type in a single query\n const configurations = await getConfiguration(permittedContentTypes);\n // Get the necessary metadata for the documents\n const contentTypesMeta = getContentTypesMeta(permittedContentTypes, configurations);\n\n const countDocuments = {\n draft: 0,\n published: 0,\n modified: 0,\n };\n\n await Promise.all(\n contentTypesMeta.map(async (meta) => {\n const strapiDBConnection = strapi.db.connection;\n const tableName = strapi.contentType(meta.uid).collectionName;\n if (tableName) {\n const draftDocuments = await strapiDBConnection(tableName)\n .whereNull('published_at')\n .whereIn('document_id', function () {\n this.select('document_id')\n .from(tableName)\n .groupBy('document_id')\n .havingRaw('COUNT(*) = 1');\n })\n .count('* as count')\n .first();\n countDocuments.draft += Number(draftDocuments?.count) || 0;\n\n const publishedDocuments = meta.hasDraftAndPublish\n ? await strapiDBConnection(tableName)\n .select('draft.document_id')\n .from(`${tableName} as draft`)\n .join(`${tableName} as published`, function () {\n this.on('draft.document_id', '=', 'published.document_id')\n .andOn('draft.updated_at', '=', 'published.updated_at')\n .andOnNull('draft.published_at')\n .andOnNotNull('published.published_at');\n })\n .countDistinct('draft.document_id as count')\n .groupBy('draft.document_id')\n .first()\n : await strapiDBConnection(tableName)\n .select('document_id')\n .from(`${tableName}`)\n .countDistinct('document_id as count')\n .groupBy('document_id')\n .first();\n countDocuments.published += Number(publishedDocuments?.count) || 0;\n\n const modifiedDocuments = await strapiDBConnection(tableName)\n .select('draft.document_id')\n .from(`${tableName} as draft`)\n .join(`${tableName} as published`, function () {\n this.on('draft.document_id', '=', 'published.document_id')\n .andOn('draft.updated_at', '!=', 'published.updated_at')\n .andOnNull('draft.published_at')\n .andOnNotNull('published.published_at');\n })\n .countDistinct('draft.document_id as count')\n .groupBy('draft.document_id')\n .first();\n countDocuments.modified += Number(modifiedDocuments?.count) || 0;\n }\n })\n );\n\n return countDocuments;\n },\n };\n};\n\nexport { createHomepageService };\n"],"names":["createHomepageService","strapi","MAX_DOCUMENTS","metadataService","plugin","service","permissionService","admin","services","permission","getConfiguration","contentTypeUids","coreStore","db","query","rawConfigurations","findMany","where","key","$in","map","contentType","rawConfiguration","JSON","parse","value","getPermittedContentTypes","readPermissions","role","users","id","requestContext","get","state","user","action","subject","filter","Boolean","getContentTypesMeta","allowedContentTypeUids","configurations","uid","configuration","find","config","fields","hasDraftAndPublish","contentTypes","push","settings","mainField","isLocalized","pluginOptions","i18n","localized","formatDocuments","documents","meta","populate","document","additionalFields","reduce","acc","documentId","locale","updatedAt","Date","title","publishedAt","contentTypeUid","contentTypeDisplayName","info","displayName","kind","permissionCheckerService","getPermissionChecker","create","userAbility","model","addStatusToDocuments","Promise","all","recentDocument","availableStatus","getMetadata","availableLocales","status","getStatus","undefined","queryLastDocuments","additionalQueryParams","draftAndPublishOnly","permittedContentTypes","contentTypesMeta","recentDocuments","permissionQuery","sanitizedQuery","read","limit","docs","flat","sort","a","b","valueOf","slice","getRecentlyPublishedDocuments","recentlyPublishedDocuments","getRecentlyUpdatedDocuments","recentlyUpdatedDocuments","getCountDocuments","countDocuments","draft","published","modified","strapiDBConnection","connection","tableName","collectionName","draftDocuments","whereNull","whereIn","select","from","groupBy","havingRaw","count","first","Number","publishedDocuments","join","on","andOn","andOnNull","andOnNotNull","countDistinct","modifiedDocuments"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"homepage.mjs","sources":["../../../../server/src/homepage/services/homepage.ts"],"sourcesContent":["/* eslint-disable func-names */\nimport type { Core, Modules, Schema } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\nimport type {\n GetCountDocuments,\n GetRecentDocuments,\n RecentDocument,\n} from '../../../../shared/contracts/homepage';\n\nconst createHomepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const MAX_DOCUMENTS = 4;\n\n const metadataService = strapi.plugin('content-manager').service('document-metadata');\n const permissionService = strapi.admin.services.permission;\n\n type ContentTypeConfiguration = {\n uid: RecentDocument['contentTypeUid'];\n settings: { mainField: string };\n };\n const getConfiguration = async (\n contentTypeUids: RecentDocument['contentTypeUid'][]\n ): Promise<ContentTypeConfiguration[]> => {\n /**\n * Don't use the strapi.store util because we need to make\n * more precise queries than exact key matches, in order to make as few queries as possible.\n */\n const coreStore = strapi.db.query('strapi::core-store');\n const rawConfigurations = await coreStore.findMany({\n where: {\n key: {\n $in: contentTypeUids.map(\n (contentType) => `plugin_content_manager_configuration_content_types::${contentType}`\n ),\n },\n },\n });\n\n return rawConfigurations.map((rawConfiguration) => {\n return JSON.parse(rawConfiguration.value);\n });\n };\n\n const getPermittedContentTypes = async () => {\n const readPermissions: Modules.Permissions.PermissionRule[] = await permissionService.findMany({\n where: {\n role: { users: { id: strapi.requestContext.get()?.state?.user.id } },\n action: 'plugin::content-manager.explorer.read',\n },\n });\n\n return readPermissions\n .map((permission) => permission.subject)\n .filter(Boolean) as RecentDocument['contentTypeUid'][];\n };\n\n type ContentTypeMeta = {\n fields: string[];\n mainField: string;\n contentType: Schema.ContentType;\n hasDraftAndPublish: boolean;\n uid: RecentDocument['contentTypeUid'];\n };\n\n const getContentTypesMeta = (\n allowedContentTypeUids: RecentDocument['contentTypeUid'][],\n configurations: ContentTypeConfiguration[]\n ): ContentTypeMeta[] => {\n return allowedContentTypeUids.map((uid) => {\n const configuration = configurations.find((config) => config.uid === uid);\n const contentType = strapi.contentType(uid);\n const fields = ['documentId', 'updatedAt'];\n\n // Add fields required to get the status if D&P is enabled\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(contentType);\n if (hasDraftAndPublish) {\n fields.push('publishedAt');\n }\n\n // Only add the main field if it's defined\n if (configuration?.settings.mainField) {\n fields.push(configuration.settings.mainField);\n }\n\n // Only add locale if it's localized\n const isLocalized = (contentType.pluginOptions?.i18n as any)?.localized;\n if (isLocalized) {\n fields.push('locale');\n }\n\n return {\n fields,\n mainField: configuration!.settings.mainField,\n contentType,\n hasDraftAndPublish,\n uid,\n };\n });\n };\n\n const formatDocuments = (\n documents: Modules.Documents.AnyDocument[],\n meta: ContentTypeMeta,\n populate?: string[]\n ) => {\n return documents.map((document) => {\n const additionalFields =\n populate?.reduce(\n (acc, key) => {\n acc[key] = document[key];\n return acc;\n },\n {} as Record<string, any>\n ) || {};\n return {\n documentId: document.documentId,\n locale: document.locale ?? null,\n updatedAt: new Date(document.updatedAt),\n title: document[meta.mainField ?? 'documentId'],\n publishedAt:\n meta.hasDraftAndPublish && document.publishedAt ? new Date(document.publishedAt) : null,\n contentTypeUid: meta.uid,\n contentTypeDisplayName: meta.contentType.info.displayName,\n kind: meta.contentType.kind,\n ...additionalFields,\n };\n });\n };\n\n const permissionCheckerService = strapi.plugin('content-manager').service('permission-checker');\n const getPermissionChecker = (uid: string) =>\n permissionCheckerService.create({\n userAbility: strapi.requestContext.get()?.state.userAbility,\n model: uid,\n });\n\n return {\n async addStatusToDocuments(documents: RecentDocument[]): Promise<RecentDocument[]> {\n return Promise.all(\n documents.map(async (recentDocument) => {\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(\n strapi.contentType(recentDocument.contentTypeUid)\n );\n /**\n * Tries to query the other version of the document if draft and publish is enabled,\n * so that we know when to give the \"modified\" status.\n */\n const { availableStatus } = await metadataService.getMetadata(\n recentDocument.contentTypeUid,\n recentDocument,\n {\n availableStatus: hasDraftAndPublish,\n availableLocales: false,\n }\n );\n const status: RecentDocument['status'] = metadataService.getStatus(\n recentDocument,\n availableStatus\n );\n\n return {\n ...recentDocument,\n status: hasDraftAndPublish ? status : undefined,\n };\n })\n );\n },\n\n async queryLastDocuments(\n additionalQueryParams?: Record<string, unknown>,\n draftAndPublishOnly?: boolean\n ): Promise<RecentDocument[]> {\n const permittedContentTypes = await getPermittedContentTypes();\n const allowedContentTypeUids = draftAndPublishOnly\n ? permittedContentTypes.filter((uid) => {\n return contentTypes.hasDraftAndPublish(strapi.contentType(uid));\n })\n : permittedContentTypes;\n // Fetch the configuration for each content type in a single query\n const configurations = await getConfiguration(allowedContentTypeUids);\n // Get the necessary metadata for the documents\n const contentTypesMeta = getContentTypesMeta(allowedContentTypeUids, configurations);\n\n const recentDocuments = await Promise.all(\n contentTypesMeta.map(async (meta) => {\n const permissionQuery = await getPermissionChecker(meta.uid).sanitizedQuery.read({\n limit: MAX_DOCUMENTS,\n fields: meta.fields,\n ...additionalQueryParams,\n locale: '*',\n });\n\n const docs = await strapi.documents(meta.uid).findMany(permissionQuery);\n const populate = additionalQueryParams?.populate as string[];\n\n return formatDocuments(docs, meta, populate);\n })\n );\n\n return recentDocuments\n .flat()\n .sort((a, b) => {\n switch (additionalQueryParams?.sort) {\n case 'publishedAt:desc':\n if (!a.publishedAt || !b.publishedAt) return 0;\n return b.publishedAt.valueOf() - a.publishedAt.valueOf();\n case 'publishedAt:asc':\n if (!a.publishedAt || !b.publishedAt) return 0;\n return a.publishedAt.valueOf() - b.publishedAt.valueOf();\n case 'updatedAt:desc':\n if (!a.updatedAt || !b.updatedAt) return 0;\n return b.updatedAt.valueOf() - a.updatedAt.valueOf();\n case 'updatedAt:asc':\n if (!a.updatedAt || !b.updatedAt) return 0;\n return a.updatedAt.valueOf() - b.updatedAt.valueOf();\n default:\n return 0;\n }\n })\n .slice(0, MAX_DOCUMENTS);\n },\n\n async getRecentlyPublishedDocuments(): Promise<GetRecentDocuments.Response['data']> {\n const recentlyPublishedDocuments = await this.queryLastDocuments(\n {\n sort: 'publishedAt:desc',\n status: 'published',\n },\n true\n );\n\n return this.addStatusToDocuments(recentlyPublishedDocuments);\n },\n\n async getRecentlyUpdatedDocuments(): Promise<GetRecentDocuments.Response['data']> {\n const recentlyUpdatedDocuments = await this.queryLastDocuments({\n sort: 'updatedAt:desc',\n });\n\n return this.addStatusToDocuments(recentlyUpdatedDocuments);\n },\n\n async getCountDocuments(): Promise<GetCountDocuments.Response['data']> {\n const permittedContentTypes = await getPermittedContentTypes();\n // Fetch the configuration for each content type in a single query\n const configurations = await getConfiguration(permittedContentTypes);\n // Get the necessary metadata for the documents\n const contentTypesMeta = getContentTypesMeta(permittedContentTypes, configurations);\n\n const countDocuments = {\n draft: 0,\n published: 0,\n modified: 0,\n };\n\n await Promise.all(\n contentTypesMeta.map(async (meta) => {\n const strapiDBConnection = strapi.db.connection;\n const tableName = strapi.contentType(meta.uid).collectionName;\n if (tableName) {\n const draftDocuments = await strapiDBConnection(tableName)\n .whereNull('published_at')\n .whereIn('document_id', function () {\n this.select('document_id')\n .from(tableName)\n .groupBy('document_id')\n .havingRaw('COUNT(*) = 1');\n })\n .count('* as count')\n .first();\n countDocuments.draft += Number(draftDocuments?.count) || 0;\n\n const publishedDocuments = meta.hasDraftAndPublish\n ? await strapiDBConnection(tableName)\n .countDistinct('draft.document_id as count')\n .from(`${tableName} as draft`)\n .join(`${tableName} as published`, function () {\n this.on('draft.document_id', '=', 'published.document_id')\n .andOn('draft.updated_at', '=', 'published.updated_at')\n .andOnNull('draft.published_at')\n .andOnNotNull('published.published_at');\n })\n .first()\n : await strapiDBConnection(tableName)\n .countDistinct('document_id as count')\n .from(`${tableName}`)\n .first();\n countDocuments.published += Number(publishedDocuments?.count) || 0;\n\n const modifiedDocuments = await strapiDBConnection(tableName)\n .select('draft.document_id')\n .from(`${tableName} as draft`)\n .join(`${tableName} as published`, function () {\n this.on('draft.document_id', '=', 'published.document_id')\n .andOn('draft.updated_at', '!=', 'published.updated_at')\n .andOnNull('draft.published_at')\n .andOnNotNull('published.published_at');\n })\n .countDistinct('draft.document_id as count')\n .groupBy('draft.document_id')\n .first();\n countDocuments.modified += Number(modifiedDocuments?.count) || 0;\n }\n })\n );\n\n return countDocuments;\n },\n };\n};\n\nexport { createHomepageService };\n"],"names":["createHomepageService","strapi","MAX_DOCUMENTS","metadataService","plugin","service","permissionService","admin","services","permission","getConfiguration","contentTypeUids","coreStore","db","query","rawConfigurations","findMany","where","key","$in","map","contentType","rawConfiguration","JSON","parse","value","getPermittedContentTypes","readPermissions","role","users","id","requestContext","get","state","user","action","subject","filter","Boolean","getContentTypesMeta","allowedContentTypeUids","configurations","uid","configuration","find","config","fields","hasDraftAndPublish","contentTypes","push","settings","mainField","isLocalized","pluginOptions","i18n","localized","formatDocuments","documents","meta","populate","document","additionalFields","reduce","acc","documentId","locale","updatedAt","Date","title","publishedAt","contentTypeUid","contentTypeDisplayName","info","displayName","kind","permissionCheckerService","getPermissionChecker","create","userAbility","model","addStatusToDocuments","Promise","all","recentDocument","availableStatus","getMetadata","availableLocales","status","getStatus","undefined","queryLastDocuments","additionalQueryParams","draftAndPublishOnly","permittedContentTypes","contentTypesMeta","recentDocuments","permissionQuery","sanitizedQuery","read","limit","docs","flat","sort","a","b","valueOf","slice","getRecentlyPublishedDocuments","recentlyPublishedDocuments","getRecentlyUpdatedDocuments","recentlyUpdatedDocuments","getCountDocuments","countDocuments","draft","published","modified","strapiDBConnection","connection","tableName","collectionName","draftDocuments","whereNull","whereIn","select","from","groupBy","havingRaw","count","first","Number","publishedDocuments","countDistinct","join","on","andOn","andOnNull","andOnNotNull","modifiedDocuments"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.js","sources":["../../../server/src/middlewares/routing.ts"],"sourcesContent":["import type { UID, Core, Struct } from '@strapi/types';\nimport type { Context, Next } from 'koa';\nimport isNil from 'lodash/isNil';\n\ninterface ContentType extends Struct.ContentTypeSchema {\n plugin?: string;\n}\n\nexport default async (ctx: Context, next: Next) => {\n const { model }: { model: UID.ContentType } = ctx.params;\n\n const ct: ContentType = strapi.contentTypes[model];\n\n if (!ct) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n let controllers;\n if (!ct.plugin || ct.plugin === 'admin') {\n controllers = strapi.admin.controllers;\n } else {\n controllers = strapi.plugin(ct.plugin).controllers;\n }\n\n const { route }: { route: Core.Route } = ctx.state;\n\n if (typeof route.handler !== 'string') {\n return next();\n }\n\n const [, action] = route.handler.split('.');\n\n let actionConfig: any;\n if (!ct.plugin || ct.plugin === 'admin') {\n actionConfig = strapi.config.get(`admin.layout.${ct.modelName}.actions.${action}`);\n } else {\n actionConfig = strapi.plugin(ct.plugin).config(`layout.${ct.modelName}.actions.${action}`);\n }\n\n if (!isNil(actionConfig)) {\n const [controller, action] = actionConfig.split('.');\n\n if (controller && action) {\n return controllers[controller.toLowerCase()][action](ctx, next);\n }\n }\n\n await next();\n};\n"],"names":["ctx","next","model","params","ct","strapi","contentTypes","send","error","controllers","plugin","admin","route","state","handler","action","split","actionConfig","config","get","modelName","isNil","controller","toLowerCase"],"mappings":";;;;AAQA,cAAe,CAAA,OAAOA,GAAcC,EAAAA,IAAAA,GAAAA;AAClC,IAAA,MAAM,EAAEC,KAAK,EAAE,GAA+BF,IAAIG,MAAM;AAExD,IAAA,MAAMC,EAAkBC,GAAAA,MAAAA,CAAOC,YAAY,CAACJ,KAAM,CAAA;AAElD,IAAA,IAAI,CAACE,EAAI,EAAA;QACP,OAAOJ,GAAAA,CAAIO,IAAI,CAAC;YAAEC,KAAO,EAAA;SAA0B,EAAA,GAAA,CAAA;AACrD;IAEA,IAAIC,WAAAA;AACJ,IAAA,IAAI,CAACL,EAAGM,CAAAA,MAAM,IAAIN,EAAGM,CAAAA,MAAM,KAAK,OAAS,EAAA;QACvCD,WAAcJ,GAAAA,MAAAA,CAAOM,KAAK,CAACF,WAAW;KACjC,MAAA;AACLA,QAAAA,WAAAA,GAAcJ,OAAOK,MAAM,CAACN,EAAGM,CAAAA,MAAM,EAAED,WAAW;AACpD;AAEA,IAAA,MAAM,EAAEG,KAAK,EAAE,GAA0BZ,IAAIa,KAAK;AAElD,IAAA,IAAI,OAAOD,KAAAA,CAAME,OAAO,KAAK,QAAU,EAAA;QACrC,OAAOb,IAAAA,EAAAA;AACT;AAEA,IAAA,MAAM,GAAGc,MAAO,CAAA,GAAGH,MAAME,OAAO,CAACE,KAAK,CAAC,GAAA,CAAA;IAEvC,IAAIC,YAAAA;AACJ,IAAA,IAAI,CAACb,EAAGM,CAAAA,MAAM,IAAIN,EAAGM,CAAAA,MAAM,KAAK,OAAS,EAAA;AACvCO,QAAAA,YAAAA,GAAeZ,MAAOa,CAAAA,MAAM,CAACC,GAAG,CAAC,CAAC,aAAa,EAAEf,
|
|
1
|
+
{"version":3,"file":"routing.js","sources":["../../../server/src/middlewares/routing.ts"],"sourcesContent":["import type { UID, Core, Struct } from '@strapi/types';\nimport type { Context, Next } from 'koa';\nimport isNil from 'lodash/isNil';\n\ninterface ContentType extends Struct.ContentTypeSchema {\n plugin?: string;\n}\n\nexport default async (ctx: Context, next: Next) => {\n const { model }: { model: UID.ContentType } = ctx.params;\n\n const ct: ContentType = strapi.contentTypes[model];\n\n if (!ct) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n let controllers;\n if (!ct.plugin || ct.plugin === 'admin') {\n controllers = strapi.admin.controllers;\n } else {\n controllers = strapi.plugin(ct.plugin).controllers;\n }\n\n const { route }: { route: Core.Route } = ctx.state;\n\n if (typeof route.handler !== 'string') {\n return next();\n }\n\n const [, action] = route.handler.split('.');\n\n let actionConfig: any;\n if (!ct.plugin || ct.plugin === 'admin') {\n actionConfig = strapi.config.get(`admin.layout.${ct.modelName}.actions.${action}`);\n } else {\n actionConfig = strapi.plugin(ct.plugin).config(`layout.${ct.modelName}.actions.${action}`);\n }\n\n if (!isNil(actionConfig)) {\n const [controller, action] = actionConfig.split('.');\n\n if (controller && action) {\n return controllers[controller.toLowerCase()][action](ctx, next);\n }\n }\n\n await next();\n};\n"],"names":["ctx","next","model","params","ct","strapi","contentTypes","send","error","controllers","plugin","admin","route","state","handler","action","split","actionConfig","config","get","modelName","isNil","controller","toLowerCase"],"mappings":";;;;AAQA,cAAe,CAAA,OAAOA,GAAcC,EAAAA,IAAAA,GAAAA;AAClC,IAAA,MAAM,EAAEC,KAAK,EAAE,GAA+BF,IAAIG,MAAM;AAExD,IAAA,MAAMC,EAAkBC,GAAAA,MAAAA,CAAOC,YAAY,CAACJ,KAAM,CAAA;AAElD,IAAA,IAAI,CAACE,EAAI,EAAA;QACP,OAAOJ,GAAAA,CAAIO,IAAI,CAAC;YAAEC,KAAO,EAAA;SAA0B,EAAA,GAAA,CAAA;AACrD;IAEA,IAAIC,WAAAA;AACJ,IAAA,IAAI,CAACL,EAAGM,CAAAA,MAAM,IAAIN,EAAGM,CAAAA,MAAM,KAAK,OAAS,EAAA;QACvCD,WAAcJ,GAAAA,MAAAA,CAAOM,KAAK,CAACF,WAAW;KACjC,MAAA;AACLA,QAAAA,WAAAA,GAAcJ,OAAOK,MAAM,CAACN,EAAGM,CAAAA,MAAM,EAAED,WAAW;AACpD;AAEA,IAAA,MAAM,EAAEG,KAAK,EAAE,GAA0BZ,IAAIa,KAAK;AAElD,IAAA,IAAI,OAAOD,KAAAA,CAAME,OAAO,KAAK,QAAU,EAAA;QACrC,OAAOb,IAAAA,EAAAA;AACT;AAEA,IAAA,MAAM,GAAGc,MAAO,CAAA,GAAGH,MAAME,OAAO,CAACE,KAAK,CAAC,GAAA,CAAA;IAEvC,IAAIC,YAAAA;AACJ,IAAA,IAAI,CAACb,EAAGM,CAAAA,MAAM,IAAIN,EAAGM,CAAAA,MAAM,KAAK,OAAS,EAAA;AACvCO,QAAAA,YAAAA,GAAeZ,MAAOa,CAAAA,MAAM,CAACC,GAAG,CAAC,CAAC,aAAa,EAAEf,EAAGgB,CAAAA,SAAS,CAAC,SAAS,EAAEL,MAAQ,CAAA,CAAA,CAAA;KAC5E,MAAA;AACLE,QAAAA,YAAAA,GAAeZ,OAAOK,MAAM,CAACN,EAAGM,CAAAA,MAAM,EAAEQ,MAAM,CAAC,CAAC,OAAO,EAAEd,EAAGgB,CAAAA,SAAS,CAAC,SAAS,EAAEL,MAAQ,CAAA,CAAA,CAAA;AAC3F;IAEA,IAAI,CAACM,MAAMJ,YAAe,CAAA,EAAA;AACxB,QAAA,MAAM,CAACK,UAAYP,EAAAA,MAAAA,CAAO,GAAGE,YAAAA,CAAaD,KAAK,CAAC,GAAA,CAAA;AAEhD,QAAA,IAAIM,cAAcP,MAAQ,EAAA;YACxB,OAAON,WAAW,CAACa,UAAWC,CAAAA,WAAW,GAAG,CAACR,MAAAA,CAAO,CAACf,GAAKC,EAAAA,IAAAA,CAAAA;AAC5D;AACF;IAEA,MAAMA,IAAAA,EAAAA;AACR,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.mjs","sources":["../../../server/src/middlewares/routing.ts"],"sourcesContent":["import type { UID, Core, Struct } from '@strapi/types';\nimport type { Context, Next } from 'koa';\nimport isNil from 'lodash/isNil';\n\ninterface ContentType extends Struct.ContentTypeSchema {\n plugin?: string;\n}\n\nexport default async (ctx: Context, next: Next) => {\n const { model }: { model: UID.ContentType } = ctx.params;\n\n const ct: ContentType = strapi.contentTypes[model];\n\n if (!ct) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n let controllers;\n if (!ct.plugin || ct.plugin === 'admin') {\n controllers = strapi.admin.controllers;\n } else {\n controllers = strapi.plugin(ct.plugin).controllers;\n }\n\n const { route }: { route: Core.Route } = ctx.state;\n\n if (typeof route.handler !== 'string') {\n return next();\n }\n\n const [, action] = route.handler.split('.');\n\n let actionConfig: any;\n if (!ct.plugin || ct.plugin === 'admin') {\n actionConfig = strapi.config.get(`admin.layout.${ct.modelName}.actions.${action}`);\n } else {\n actionConfig = strapi.plugin(ct.plugin).config(`layout.${ct.modelName}.actions.${action}`);\n }\n\n if (!isNil(actionConfig)) {\n const [controller, action] = actionConfig.split('.');\n\n if (controller && action) {\n return controllers[controller.toLowerCase()][action](ctx, next);\n }\n }\n\n await next();\n};\n"],"names":["ctx","next","model","params","ct","strapi","contentTypes","send","error","controllers","plugin","admin","route","state","handler","action","split","actionConfig","config","get","modelName","isNil","controller","toLowerCase"],"mappings":";;AAQA,cAAe,CAAA,OAAOA,GAAcC,EAAAA,IAAAA,GAAAA;AAClC,IAAA,MAAM,EAAEC,KAAK,EAAE,GAA+BF,IAAIG,MAAM;AAExD,IAAA,MAAMC,EAAkBC,GAAAA,MAAAA,CAAOC,YAAY,CAACJ,KAAM,CAAA;AAElD,IAAA,IAAI,CAACE,EAAI,EAAA;QACP,OAAOJ,GAAAA,CAAIO,IAAI,CAAC;YAAEC,KAAO,EAAA;SAA0B,EAAA,GAAA,CAAA;AACrD;IAEA,IAAIC,WAAAA;AACJ,IAAA,IAAI,CAACL,EAAGM,CAAAA,MAAM,IAAIN,EAAGM,CAAAA,MAAM,KAAK,OAAS,EAAA;QACvCD,WAAcJ,GAAAA,MAAAA,CAAOM,KAAK,CAACF,WAAW;KACjC,MAAA;AACLA,QAAAA,WAAAA,GAAcJ,OAAOK,MAAM,CAACN,EAAGM,CAAAA,MAAM,EAAED,WAAW;AACpD;AAEA,IAAA,MAAM,EAAEG,KAAK,EAAE,GAA0BZ,IAAIa,KAAK;AAElD,IAAA,IAAI,OAAOD,KAAAA,CAAME,OAAO,KAAK,QAAU,EAAA;QACrC,OAAOb,IAAAA,EAAAA;AACT;AAEA,IAAA,MAAM,GAAGc,MAAO,CAAA,GAAGH,MAAME,OAAO,CAACE,KAAK,CAAC,GAAA,CAAA;IAEvC,IAAIC,YAAAA;AACJ,IAAA,IAAI,CAACb,EAAGM,CAAAA,MAAM,IAAIN,EAAGM,CAAAA,MAAM,KAAK,OAAS,EAAA;AACvCO,QAAAA,YAAAA,GAAeZ,MAAOa,CAAAA,MAAM,CAACC,GAAG,CAAC,CAAC,aAAa,EAAEf,
|
|
1
|
+
{"version":3,"file":"routing.mjs","sources":["../../../server/src/middlewares/routing.ts"],"sourcesContent":["import type { UID, Core, Struct } from '@strapi/types';\nimport type { Context, Next } from 'koa';\nimport isNil from 'lodash/isNil';\n\ninterface ContentType extends Struct.ContentTypeSchema {\n plugin?: string;\n}\n\nexport default async (ctx: Context, next: Next) => {\n const { model }: { model: UID.ContentType } = ctx.params;\n\n const ct: ContentType = strapi.contentTypes[model];\n\n if (!ct) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n let controllers;\n if (!ct.plugin || ct.plugin === 'admin') {\n controllers = strapi.admin.controllers;\n } else {\n controllers = strapi.plugin(ct.plugin).controllers;\n }\n\n const { route }: { route: Core.Route } = ctx.state;\n\n if (typeof route.handler !== 'string') {\n return next();\n }\n\n const [, action] = route.handler.split('.');\n\n let actionConfig: any;\n if (!ct.plugin || ct.plugin === 'admin') {\n actionConfig = strapi.config.get(`admin.layout.${ct.modelName}.actions.${action}`);\n } else {\n actionConfig = strapi.plugin(ct.plugin).config(`layout.${ct.modelName}.actions.${action}`);\n }\n\n if (!isNil(actionConfig)) {\n const [controller, action] = actionConfig.split('.');\n\n if (controller && action) {\n return controllers[controller.toLowerCase()][action](ctx, next);\n }\n }\n\n await next();\n};\n"],"names":["ctx","next","model","params","ct","strapi","contentTypes","send","error","controllers","plugin","admin","route","state","handler","action","split","actionConfig","config","get","modelName","isNil","controller","toLowerCase"],"mappings":";;AAQA,cAAe,CAAA,OAAOA,GAAcC,EAAAA,IAAAA,GAAAA;AAClC,IAAA,MAAM,EAAEC,KAAK,EAAE,GAA+BF,IAAIG,MAAM;AAExD,IAAA,MAAMC,EAAkBC,GAAAA,MAAAA,CAAOC,YAAY,CAACJ,KAAM,CAAA;AAElD,IAAA,IAAI,CAACE,EAAI,EAAA;QACP,OAAOJ,GAAAA,CAAIO,IAAI,CAAC;YAAEC,KAAO,EAAA;SAA0B,EAAA,GAAA,CAAA;AACrD;IAEA,IAAIC,WAAAA;AACJ,IAAA,IAAI,CAACL,EAAGM,CAAAA,MAAM,IAAIN,EAAGM,CAAAA,MAAM,KAAK,OAAS,EAAA;QACvCD,WAAcJ,GAAAA,MAAAA,CAAOM,KAAK,CAACF,WAAW;KACjC,MAAA;AACLA,QAAAA,WAAAA,GAAcJ,OAAOK,MAAM,CAACN,EAAGM,CAAAA,MAAM,EAAED,WAAW;AACpD;AAEA,IAAA,MAAM,EAAEG,KAAK,EAAE,GAA0BZ,IAAIa,KAAK;AAElD,IAAA,IAAI,OAAOD,KAAAA,CAAME,OAAO,KAAK,QAAU,EAAA;QACrC,OAAOb,IAAAA,EAAAA;AACT;AAEA,IAAA,MAAM,GAAGc,MAAO,CAAA,GAAGH,MAAME,OAAO,CAACE,KAAK,CAAC,GAAA,CAAA;IAEvC,IAAIC,YAAAA;AACJ,IAAA,IAAI,CAACb,EAAGM,CAAAA,MAAM,IAAIN,EAAGM,CAAAA,MAAM,KAAK,OAAS,EAAA;AACvCO,QAAAA,YAAAA,GAAeZ,MAAOa,CAAAA,MAAM,CAACC,GAAG,CAAC,CAAC,aAAa,EAAEf,EAAGgB,CAAAA,SAAS,CAAC,SAAS,EAAEL,MAAQ,CAAA,CAAA,CAAA;KAC5E,MAAA;AACLE,QAAAA,YAAAA,GAAeZ,OAAOK,MAAM,CAACN,EAAGM,CAAAA,MAAM,EAAEQ,MAAM,CAAC,CAAC,OAAO,EAAEd,EAAGgB,CAAAA,SAAS,CAAC,SAAS,EAAEL,MAAQ,CAAA,CAAA,CAAA;AAC3F;IAEA,IAAI,CAACM,MAAMJ,YAAe,CAAA,EAAA;AACxB,QAAA,MAAM,CAACK,UAAYP,EAAAA,MAAAA,CAAO,GAAGE,YAAAA,CAAaD,KAAK,CAAC,GAAA,CAAA;AAEhD,QAAA,IAAIM,cAAcP,MAAQ,EAAA;YACxB,OAAON,WAAW,CAACa,UAAWC,CAAAA,WAAW,GAAG,CAACR,MAAAA,CAAO,CAACf,GAAKC,EAAAA,IAAAA,CAAAA;AAC5D;AACF;IAEA,MAAMA,IAAAA,EAAAA;AACR,CAAA;;;;"}
|
|
@@ -1,47 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var fp = require('lodash/fp');
|
|
4
3
|
var strapiUtils = require('@strapi/utils');
|
|
5
4
|
|
|
6
|
-
/**
|
|
7
|
-
* Utility to extend Strapi configuration middlewares. Mainly used to extend the CSP directives from the security middleware.
|
|
8
|
-
*/ const extendMiddlewareConfiguration = (middleware = {
|
|
9
|
-
name: '',
|
|
10
|
-
config: {}
|
|
11
|
-
})=>{
|
|
12
|
-
const middlewares = strapi.config.get('middlewares');
|
|
13
|
-
const configuredMiddlewares = middlewares.map((currentMiddleware)=>{
|
|
14
|
-
if (currentMiddleware === middleware.name) {
|
|
15
|
-
// Use the new config object if the middleware has no config property yet
|
|
16
|
-
return middleware;
|
|
17
|
-
}
|
|
18
|
-
// @ts-expect-error - currentMiddleware is not a string
|
|
19
|
-
if (currentMiddleware.name === middleware.name) {
|
|
20
|
-
// Deep merge (+ concat arrays) the new config with the current middleware config
|
|
21
|
-
return fp.mergeWith((objValue, srcValue)=>{
|
|
22
|
-
if (Array.isArray(objValue)) {
|
|
23
|
-
return objValue.concat(srcValue);
|
|
24
|
-
}
|
|
25
|
-
return undefined;
|
|
26
|
-
}, currentMiddleware, middleware);
|
|
27
|
-
}
|
|
28
|
-
return currentMiddleware;
|
|
29
|
-
});
|
|
30
|
-
strapi.config.set('middlewares', configuredMiddlewares);
|
|
31
|
-
};
|
|
32
5
|
/**
|
|
33
6
|
* Read configuration for static preview
|
|
34
|
-
*/ const createPreviewConfigService = ({ strapi
|
|
7
|
+
*/ const createPreviewConfigService = ({ strapi })=>{
|
|
35
8
|
return {
|
|
36
9
|
register () {
|
|
37
10
|
if (!this.isEnabled()) {
|
|
38
11
|
return;
|
|
39
12
|
}
|
|
40
|
-
const config =
|
|
13
|
+
const config = strapi.config.get('admin.preview');
|
|
41
14
|
/**
|
|
42
15
|
* Register the allowed origins for CSP, so the preview URL can be displayed
|
|
43
16
|
*/ if (config.config?.allowedOrigins) {
|
|
44
|
-
|
|
17
|
+
const middlewares = strapi.config.get('middlewares');
|
|
18
|
+
const configuredMiddlewares = strapiUtils.extendMiddlewareConfiguration(middlewares, {
|
|
45
19
|
name: 'strapi::security',
|
|
46
20
|
config: {
|
|
47
21
|
contentSecurityPolicy: {
|
|
@@ -51,14 +25,15 @@ var strapiUtils = require('@strapi/utils');
|
|
|
51
25
|
}
|
|
52
26
|
}
|
|
53
27
|
});
|
|
28
|
+
strapi.config.set('middlewares', configuredMiddlewares);
|
|
54
29
|
}
|
|
55
30
|
},
|
|
56
31
|
isConfigured () {
|
|
57
|
-
const config =
|
|
32
|
+
const config = strapi.config.get('admin.preview');
|
|
58
33
|
return config?.enabled === false || config?.config?.handler != null;
|
|
59
34
|
},
|
|
60
35
|
isEnabled () {
|
|
61
|
-
const config =
|
|
36
|
+
const config = strapi.config.get('admin.preview');
|
|
62
37
|
if (!config) {
|
|
63
38
|
return false;
|
|
64
39
|
}
|
|
@@ -85,7 +60,7 @@ var strapiUtils = require('@strapi/utils');
|
|
|
85
60
|
if (!this.isEnabled()) {
|
|
86
61
|
return emptyHandler;
|
|
87
62
|
}
|
|
88
|
-
const config =
|
|
63
|
+
const config = strapi.config.get('admin.preview');
|
|
89
64
|
return config?.config?.handler || emptyHandler;
|
|
90
65
|
}
|
|
91
66
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview-config.js","sources":["../../../../server/src/preview/services/preview-config.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"preview-config.js","sources":["../../../../server/src/preview/services/preview-config.ts"],"sourcesContent":["import type { Core, UID } from '@strapi/types';\nimport { errors, extendMiddlewareConfiguration } from '@strapi/utils';\n\nexport type HandlerParams = {\n documentId: string;\n locale: string;\n status: 'published' | 'draft';\n};\n\nexport interface PreviewConfig {\n enabled: boolean;\n config: {\n // List of CSP allowed origins. This is a shortcut to setting it up inside `config/middlewares.js`\n allowedOrigins: string[];\n handler: (uid: UID.Schema, params: HandlerParams) => string | undefined;\n };\n}\n\n/**\n * Read configuration for static preview\n */\nconst createPreviewConfigService = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n register() {\n if (!this.isEnabled()) {\n return;\n }\n\n const config = strapi.config.get('admin.preview') as PreviewConfig;\n\n /**\n * Register the allowed origins for CSP, so the preview URL can be displayed\n */\n if (config.config?.allowedOrigins) {\n const middlewares = strapi.config.get('middlewares') as (\n | string\n | { name?: string; config?: any }\n )[];\n\n const configuredMiddlewares = extendMiddlewareConfiguration(middlewares, {\n name: 'strapi::security',\n config: {\n contentSecurityPolicy: {\n directives: {\n 'frame-src': config.config.allowedOrigins,\n },\n },\n },\n });\n\n strapi.config.set('middlewares', configuredMiddlewares);\n }\n },\n\n isConfigured() {\n const config = strapi.config.get('admin.preview') as PreviewConfig;\n return config?.enabled === false || config?.config?.handler != null;\n },\n\n isEnabled() {\n const config = strapi.config.get('admin.preview') as PreviewConfig;\n\n if (!config) {\n return false;\n }\n\n return config?.enabled ?? true;\n },\n\n /**\n * Validate if the configuration is valid\n */\n validate() {\n if (!this.isEnabled()) {\n return;\n }\n\n const handler = this.getPreviewHandler();\n\n // Handler must be a function\n if (typeof handler !== 'function') {\n throw new errors.ValidationError(\n 'Preview configuration is invalid. Handler must be a function'\n );\n }\n },\n\n /**\n * Utility to get the preview handler from the configuration\n */\n getPreviewHandler(): PreviewConfig['config']['handler'] {\n const emptyHandler = () => {\n return undefined;\n };\n\n if (!this.isEnabled()) {\n return emptyHandler;\n }\n\n const config = strapi.config.get('admin.preview') as PreviewConfig;\n\n return config?.config?.handler || emptyHandler;\n },\n };\n};\n\nexport { createPreviewConfigService };\n"],"names":["createPreviewConfigService","strapi","register","isEnabled","config","get","allowedOrigins","middlewares","configuredMiddlewares","extendMiddlewareConfiguration","name","contentSecurityPolicy","directives","set","isConfigured","enabled","handler","validate","getPreviewHandler","errors","ValidationError","emptyHandler","undefined"],"mappings":";;;;AAkBA;;AAEC,IACKA,MAAAA,0BAAAA,GAA6B,CAAC,EAAEC,MAAM,EAA2B,GAAA;IACrE,OAAO;AACLC,QAAAA,QAAAA,CAAAA,GAAAA;AACE,YAAA,IAAI,CAAC,IAAI,CAACC,SAAS,EAAI,EAAA;AACrB,gBAAA;AACF;AAEA,YAAA,MAAMC,MAASH,GAAAA,MAAAA,CAAOG,MAAM,CAACC,GAAG,CAAC,eAAA,CAAA;AAEjC;;AAEC,UACD,IAAID,MAAAA,CAAOA,MAAM,EAAEE,cAAgB,EAAA;AACjC,gBAAA,MAAMC,WAAcN,GAAAA,MAAAA,CAAOG,MAAM,CAACC,GAAG,CAAC,aAAA,CAAA;gBAKtC,MAAMG,qBAAAA,GAAwBC,0CAA8BF,WAAa,EAAA;oBACvEG,IAAM,EAAA,kBAAA;oBACNN,MAAQ,EAAA;wBACNO,qBAAuB,EAAA;4BACrBC,UAAY,EAAA;gCACV,WAAaR,EAAAA,MAAAA,CAAOA,MAAM,CAACE;AAC7B;AACF;AACF;AACF,iBAAA,CAAA;AAEAL,gBAAAA,MAAAA,CAAOG,MAAM,CAACS,GAAG,CAAC,aAAeL,EAAAA,qBAAAA,CAAAA;AACnC;AACF,SAAA;AAEAM,QAAAA,YAAAA,CAAAA,GAAAA;AACE,YAAA,MAAMV,MAASH,GAAAA,MAAAA,CAAOG,MAAM,CAACC,GAAG,CAAC,eAAA,CAAA;AACjC,YAAA,OAAOD,MAAQW,EAAAA,OAAAA,KAAY,KAASX,IAAAA,MAAAA,EAAQA,QAAQY,OAAW,IAAA,IAAA;AACjE,SAAA;AAEAb,QAAAA,SAAAA,CAAAA,GAAAA;AACE,YAAA,MAAMC,MAASH,GAAAA,MAAAA,CAAOG,MAAM,CAACC,GAAG,CAAC,eAAA,CAAA;AAEjC,YAAA,IAAI,CAACD,MAAQ,EAAA;gBACX,OAAO,KAAA;AACT;AAEA,YAAA,OAAOA,QAAQW,OAAW,IAAA,IAAA;AAC5B,SAAA;AAEA;;QAGAE,QAAAA,CAAAA,GAAAA;AACE,YAAA,IAAI,CAAC,IAAI,CAACd,SAAS,EAAI,EAAA;AACrB,gBAAA;AACF;YAEA,MAAMa,OAAAA,GAAU,IAAI,CAACE,iBAAiB,EAAA;;YAGtC,IAAI,OAAOF,YAAY,UAAY,EAAA;gBACjC,MAAM,IAAIG,kBAAOC,CAAAA,eAAe,CAC9B,8DAAA,CAAA;AAEJ;AACF,SAAA;AAEA;;QAGAF,iBAAAA,CAAAA,GAAAA;AACE,YAAA,MAAMG,YAAe,GAAA,IAAA;gBACnB,OAAOC,SAAAA;AACT,aAAA;AAEA,YAAA,IAAI,CAAC,IAAI,CAACnB,SAAS,EAAI,EAAA;gBACrB,OAAOkB,YAAAA;AACT;AAEA,YAAA,MAAMjB,MAASH,GAAAA,MAAAA,CAAOG,MAAM,CAACC,GAAG,CAAC,eAAA,CAAA;YAEjC,OAAOD,MAAAA,EAAQA,QAAQY,OAAWK,IAAAA,YAAAA;AACpC;AACF,KAAA;AACF;;;;"}
|