@strapi/content-manager 5.48.1 → 5.50.0
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/ActionsDrawer.js +3 -2
- package/dist/admin/components/ActionsDrawer.js.map +1 -1
- package/dist/admin/components/ComponentIcon.js +4 -3
- package/dist/admin/components/ComponentIcon.js.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/Fields.js +3 -2
- package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Form.js +7 -3
- package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
- package/dist/admin/components/LeftMenu.js +3 -2
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/RelativeTime.js +3 -2
- package/dist/admin/components/RelativeTime.js.map +1 -1
- package/dist/admin/components/Widgets.js +3 -2
- package/dist/admin/components/Widgets.js.map +1 -1
- package/dist/admin/features/DocumentRBAC.js +3 -2
- package/dist/admin/features/DocumentRBAC.js.map +1 -1
- package/dist/admin/history/components/VersionContent.js +7 -3
- package/dist/admin/history/components/VersionContent.js.map +1 -1
- package/dist/admin/history/components/VersionHeader.js +3 -2
- package/dist/admin/history/components/VersionHeader.js.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.js +3 -2
- package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
- package/dist/admin/history/pages/History.js +3 -2
- package/dist/admin/history/pages/History.js.map +1 -1
- package/dist/admin/history/routes.js +3 -2
- package/dist/admin/history/routes.js.map +1 -1
- package/dist/admin/hooks/useContentTypeSchema.js +3 -2
- package/dist/admin/hooks/useContentTypeSchema.js.map +1 -1
- package/dist/admin/hooks/useDocument.js +3 -2
- package/dist/admin/hooks/useDocument.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js +3 -2
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentContext.js +3 -2
- package/dist/admin/hooks/useDocumentContext.js.map +1 -1
- package/dist/admin/hooks/useDocumentLayout.js +3 -2
- package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
- package/dist/admin/hooks/useDragAndDrop.js +3 -2
- package/dist/admin/hooks/useDragAndDrop.js.map +1 -1
- package/dist/admin/hooks/useKeyboardDragAndDrop.js +3 -2
- package/dist/admin/hooks/useKeyboardDragAndDrop.js.map +1 -1
- package/dist/admin/hooks/useOnce.js +3 -2
- package/dist/admin/hooks/useOnce.js.map +1 -1
- package/dist/admin/hooks/usePersistentQueryParams.js +7 -2
- package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
- package/dist/admin/layout.js +3 -1
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/layout.mjs +5 -3
- package/dist/admin/layout.mjs.map +1 -1
- package/dist/admin/pages/ComponentConfigurationPage.js +3 -2
- package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
- package/dist/admin/pages/EditConfigurationPage.js +3 -2
- package/dist/admin/pages/EditConfigurationPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +3 -2
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +238 -108
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +225 -103
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +3 -2
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +4 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +4 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +6 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +9 -4
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +13 -4
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +6 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +7 -3
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +8 -4
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js +5 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js +15 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js +5 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +3 -2
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/Header.js +3 -2
- package/dist/admin/pages/EditView/components/Header.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +3 -2
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/Panels.js +3 -2
- package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +5 -1
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/draftRelationCounts.js +117 -0
- package/dist/admin/pages/EditView/utils/draftRelationCounts.js.map +1 -0
- package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs +109 -0
- package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs.map +1 -0
- package/dist/admin/pages/EditView/utils/keyboardShortcuts.js +35 -0
- package/dist/admin/pages/EditView/utils/keyboardShortcuts.js.map +1 -0
- package/dist/admin/pages/EditView/utils/keyboardShortcuts.mjs +33 -0
- package/dist/admin/pages/EditView/utils/keyboardShortcuts.mjs.map +1 -0
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +3 -2
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.js +3 -2
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js +3 -2
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Settings.js +3 -2
- package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js +3 -2
- package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +3 -2
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js +3 -2
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +4 -3
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +3 -2
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +3 -2
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.js +3 -2
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js +9 -5
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +2 -2
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellValue.js +7 -2
- package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js +4 -3
- package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
- package/dist/admin/preview/components/InputPopover.js +3 -2
- package/dist/admin/preview/components/InputPopover.js.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.js +3 -2
- package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
- package/dist/admin/preview/pages/Preview.js +41 -13
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +39 -12
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/routes.js +3 -2
- package/dist/admin/preview/routes.js.map +1 -1
- package/dist/admin/preview/utils/constants.js +9 -15
- package/dist/admin/preview/utils/constants.js.map +1 -1
- package/dist/admin/preview/utils/constants.mjs +10 -15
- package/dist/admin/preview/utils/constants.mjs.map +1 -1
- package/dist/admin/src/components/InjectionZone.d.ts +1 -2
- package/dist/admin/src/content-manager.d.ts +15 -15
- package/dist/admin/src/history/services/historyVersion.d.ts +2 -2
- package/dist/admin/src/hooks/useContentTypeSchema.d.ts +1 -1
- package/dist/admin/src/hooks/useDocument.d.ts +8 -9
- package/dist/admin/src/hooks/useDocumentLayout.d.ts +3 -3
- package/dist/admin/src/hooks/useDragAndDrop.d.ts +4 -4
- package/dist/admin/src/hooks/useKeyboardDragAndDrop.d.ts +1 -1
- package/dist/admin/src/hooks/usePersistentQueryParams.d.ts +0 -1
- package/dist/admin/src/modules/app.d.ts +5 -5
- package/dist/admin/src/pages/EditView/EditViewPage.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +12 -1
- package/dist/admin/src/pages/EditView/components/EditorToolbarObserver.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +4 -4
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +19 -20
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +12 -12
- package/dist/admin/src/pages/EditView/utils/draftRelationCounts.d.ts +26 -0
- package/dist/admin/src/pages/EditView/utils/keyboardShortcuts.d.ts +18 -0
- package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +1 -1
- package/dist/admin/src/pages/ListView/components/Filters.d.ts +1 -1
- package/dist/admin/src/pages/formatComponentConfigurationEditLayout.d.ts +1 -1
- package/dist/admin/src/preview/utils/constants.d.ts +1 -7
- package/dist/admin/src/preview/utils/getSendMessage.d.ts +0 -1
- package/dist/admin/src/services/documents.d.ts +30 -70
- package/dist/admin/src/services/relations.d.ts +6 -20
- package/dist/admin/src/services/uid.d.ts +5 -5
- package/dist/admin/src/utils/layouts/normalizeContentManagerLayout.d.ts +4 -4
- package/dist/admin/src/utils/users.d.ts +1 -1
- package/dist/admin/src/utils/validation.d.ts +1 -1
- package/dist/admin/translations/cs.json.js +2 -1
- package/dist/admin/translations/cs.json.js.map +1 -1
- package/dist/admin/translations/cs.json.mjs +2 -1
- package/dist/admin/translations/cs.json.mjs.map +1 -1
- package/dist/admin/translations/de.json.js +2 -1
- package/dist/admin/translations/de.json.js.map +1 -1
- package/dist/admin/translations/de.json.mjs +2 -1
- package/dist/admin/translations/de.json.mjs.map +1 -1
- package/dist/admin/translations/en.json.js +7 -3
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +7 -3
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +2 -1
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +2 -1
- 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/translations/ja.json.js +262 -87
- package/dist/admin/translations/ja.json.js.map +1 -1
- package/dist/admin/translations/ja.json.mjs +262 -87
- package/dist/admin/translations/ja.json.mjs.map +1 -1
- package/dist/admin/translations/nl.json.js +2 -1
- package/dist/admin/translations/nl.json.js.map +1 -1
- package/dist/admin/translations/nl.json.mjs +2 -1
- package/dist/admin/translations/nl.json.mjs.map +1 -1
- package/dist/admin/translations/pl.json.js +2 -1
- package/dist/admin/translations/pl.json.js.map +1 -1
- package/dist/admin/translations/pl.json.mjs +2 -1
- package/dist/admin/translations/pl.json.mjs.map +1 -1
- package/dist/admin/translations/sk.json.js +2 -1
- package/dist/admin/translations/sk.json.js.map +1 -1
- package/dist/admin/translations/sk.json.mjs +2 -1
- package/dist/admin/translations/sk.json.mjs.map +1 -1
- package/dist/admin/utils/objects.js +9 -4
- package/dist/admin/utils/objects.js.map +1 -1
- package/dist/admin/utils/validation.js +7 -3
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/server/controllers/collection-types.js +2 -2
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +2 -2
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/single-types.js +2 -2
- package/dist/server/controllers/single-types.js.map +1 -1
- package/dist/server/controllers/single-types.mjs +2 -2
- package/dist/server/controllers/single-types.mjs.map +1 -1
- package/dist/server/controllers/utils/clone.js +5 -1
- package/dist/server/controllers/utils/clone.js.map +1 -1
- package/dist/server/controllers/utils/clone.mjs.map +1 -1
- package/dist/server/controllers/validation/index.js +6 -2
- package/dist/server/controllers/validation/index.js.map +1 -1
- package/dist/server/homepage/services/homepage.js +6 -1
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +6 -1
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/mcp/handlers/collection-handlers.js +15 -18
- package/dist/server/mcp/handlers/collection-handlers.js.map +1 -1
- package/dist/server/mcp/handlers/collection-handlers.mjs +16 -19
- package/dist/server/mcp/handlers/collection-handlers.mjs.map +1 -1
- package/dist/server/mcp/handlers/single-type-handlers.js +12 -12
- package/dist/server/mcp/handlers/single-type-handlers.js.map +1 -1
- package/dist/server/mcp/handlers/single-type-handlers.mjs +13 -13
- package/dist/server/mcp/handlers/single-type-handlers.mjs.map +1 -1
- package/dist/server/mcp/register-content-manager-mcp-tools.js +4 -1
- package/dist/server/mcp/register-content-manager-mcp-tools.js.map +1 -1
- package/dist/server/mcp/register-content-manager-mcp-tools.mjs +4 -1
- package/dist/server/mcp/register-content-manager-mcp-tools.mjs.map +1 -1
- package/dist/server/mcp/sanitizers/shape-relations.js +108 -0
- package/dist/server/mcp/sanitizers/shape-relations.js.map +1 -0
- package/dist/server/mcp/sanitizers/shape-relations.mjs +103 -0
- package/dist/server/mcp/sanitizers/shape-relations.mjs.map +1 -0
- package/dist/server/mcp/schemas/data-schema.js +0 -3
- package/dist/server/mcp/schemas/data-schema.js.map +1 -1
- package/dist/server/mcp/schemas/data-schema.mjs +0 -3
- package/dist/server/mcp/schemas/data-schema.mjs.map +1 -1
- package/dist/server/mcp/schemas/output-schemas.js +30 -4
- package/dist/server/mcp/schemas/output-schemas.js.map +1 -1
- package/dist/server/mcp/schemas/output-schemas.mjs +30 -4
- package/dist/server/mcp/schemas/output-schemas.mjs.map +1 -1
- package/dist/server/mcp/utils.js +30 -3
- package/dist/server/mcp/utils.js.map +1 -1
- package/dist/server/mcp/utils.mjs +30 -4
- package/dist/server/mcp/utils.mjs.map +1 -1
- package/dist/server/middlewares/routing.js +5 -1
- package/dist/server/middlewares/routing.js.map +1 -1
- package/dist/server/preview/controllers/preview.js +9 -0
- package/dist/server/preview/controllers/preview.js.map +1 -1
- package/dist/server/preview/controllers/preview.mjs +9 -0
- package/dist/server/preview/controllers/preview.mjs.map +1 -1
- package/dist/server/preview/controllers/previewScript.js +1450 -0
- package/dist/server/preview/routes/preview.js +11 -0
- package/dist/server/preview/routes/preview.js.map +1 -1
- package/dist/server/preview/routes/preview.mjs +11 -0
- package/dist/server/preview/routes/preview.mjs.map +1 -1
- package/dist/server/services/document-manager.js +13 -19
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +13 -19
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/populate-builder.js.map +1 -1
- package/dist/server/services/populate-builder.mjs.map +1 -1
- package/dist/server/services/uid.js +9 -4
- package/dist/server/services/uid.js.map +1 -1
- package/dist/server/services/utils/configuration/attributes.js +14 -10
- package/dist/server/services/utils/configuration/attributes.js.map +1 -1
- package/dist/server/services/utils/configuration/layouts.js +8 -4
- package/dist/server/services/utils/configuration/layouts.js.map +1 -1
- package/dist/server/services/utils/configuration/metadatas.js +19 -15
- package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
- package/dist/server/services/utils/configuration/settings.js +5 -1
- package/dist/server/services/utils/configuration/settings.js.map +1 -1
- package/dist/server/services/utils/draft-relations.js +9 -0
- package/dist/server/services/utils/draft-relations.js.map +1 -0
- package/dist/server/services/utils/draft-relations.mjs +7 -0
- package/dist/server/services/utils/draft-relations.mjs.map +1 -0
- package/dist/server/services/utils/draft.js +123 -26
- package/dist/server/services/utils/draft.js.map +1 -1
- package/dist/server/services/utils/draft.mjs +118 -25
- package/dist/server/services/utils/draft.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +23 -5
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +15 -1
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/services/utils/store.js +9 -5
- package/dist/server/services/utils/store.js.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/clone.d.ts +1 -1
- package/dist/server/src/controllers/utils/clone.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/document-status.d.ts +1 -1
- package/dist/server/src/controllers/utils/document-status.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +5 -5
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/dimensions.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/index.d.ts +3 -3
- package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/model-configuration.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/relations.d.ts +2 -2
- package/dist/server/src/history/controllers/history-version.d.ts +1 -7
- package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
- package/dist/server/src/history/controllers/index.d.ts +2 -1
- package/dist/server/src/history/controllers/index.d.ts.map +1 -1
- package/dist/server/src/history/controllers/validation/history-version.d.ts +1 -1
- package/dist/server/src/history/services/history.d.ts +0 -2
- package/dist/server/src/history/services/history.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +3 -3
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/history/utils.d.ts +1 -18
- package/dist/server/src/history/utils.d.ts.map +1 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts +0 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/controllers/index.d.ts +2 -1
- package/dist/server/src/homepage/controllers/index.d.ts.map +1 -1
- package/dist/server/src/homepage/index.d.ts +4 -8
- package/dist/server/src/homepage/index.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage-query-utils.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts +3 -4
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/services/index.d.ts +4 -8
- package/dist/server/src/homepage/services/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +82 -86
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/derive-content-type-mcp-tools.d.ts.map +1 -1
- package/dist/server/src/mcp/handlers/collection-handlers.d.ts.map +1 -1
- package/dist/server/src/mcp/handlers/single-type-handlers.d.ts.map +1 -1
- package/dist/server/src/mcp/permissions.d.ts +1 -1
- package/dist/server/src/mcp/permissions.d.ts.map +1 -1
- package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts +2 -1
- package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts.map +1 -1
- package/dist/server/src/mcp/sanitizers/shape-relations.d.ts +38 -0
- package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -0
- package/dist/server/src/mcp/schemas/blocks-schema.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/data-schema.d.ts +0 -3
- package/dist/server/src/mcp/schemas/data-schema.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/filters-schema.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/output-schemas.d.ts +2 -2
- package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/sort-schema.d.ts.map +1 -1
- package/dist/server/src/mcp/types.d.ts +2 -2
- package/dist/server/src/mcp/types.d.ts.map +1 -1
- package/dist/server/src/mcp/utils.d.ts +19 -1
- package/dist/server/src/mcp/utils.d.ts.map +1 -1
- package/dist/server/src/middlewares/routing.d.ts.map +1 -1
- package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
- package/dist/server/src/policies/index.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/index.d.ts +2 -1
- package/dist/server/src/preview/controllers/index.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/preview.d.ts +5 -0
- package/dist/server/src/preview/controllers/preview.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/validation/preview.d.ts +1 -2
- package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -1
- package/dist/server/src/preview/routes/preview.d.ts.map +1 -1
- package/dist/server/src/preview/services/index.d.ts +1 -1
- package/dist/server/src/preview/services/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview-config.d.ts +1 -1
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview.d.ts.map +1 -1
- package/dist/server/src/preview/utils.d.ts +1 -16
- package/dist/server/src/preview/utils.d.ts.map +1 -1
- package/dist/server/src/services/components.d.ts +2 -2
- package/dist/server/src/services/components.d.ts.map +1 -1
- package/dist/server/src/services/configuration.d.ts.map +1 -1
- package/dist/server/src/services/content-types.d.ts.map +1 -1
- package/dist/server/src/services/data-mapper.d.ts +5 -5
- package/dist/server/src/services/data-mapper.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts +14 -14
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +6 -6
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/field-sizes.d.ts +2 -2
- package/dist/server/src/services/field-sizes.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +81 -85
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/metrics.d.ts.map +1 -1
- package/dist/server/src/services/permission-checker.d.ts +12 -31
- package/dist/server/src/services/permission-checker.d.ts.map +1 -1
- package/dist/server/src/services/permission.d.ts.map +1 -1
- package/dist/server/src/services/populate-builder.d.ts +7 -5
- package/dist/server/src/services/populate-builder.d.ts.map +1 -1
- package/dist/server/src/services/uid.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/attributes.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
- package/dist/server/src/services/utils/count.d.ts.map +1 -1
- package/dist/server/src/services/utils/draft-relations.d.ts +19 -0
- package/dist/server/src/services/utils/draft-relations.d.ts.map +1 -0
- package/dist/server/src/services/utils/draft.d.ts +8 -7
- package/dist/server/src/services/utils/draft.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts +3 -1
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/dist/server/src/services/utils/store.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/validation/policies/hasPermissions.d.ts +1 -1
- package/dist/server/src/validation/zod.d.ts +1 -1
- package/dist/server/src/validation/zod.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts +4 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/single-types.d.ts +4 -1
- package/dist/shared/contracts/single-types.d.ts.map +1 -1
- package/package.json +10 -10
- package/dist/admin/preview/utils/previewScript.js +0 -1068
- package/dist/admin/preview/utils/previewScript.js.map +0 -1
- package/dist/admin/preview/utils/previewScript.mjs +0 -1066
- package/dist/admin/preview/utils/previewScript.mjs.map +0 -1
- package/dist/admin/src/preview/utils/previewScript.d.ts +0 -32
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
import { z } from '@strapi/utils';
|
|
2
|
+
import { isManyRelationForMcp } from '../sanitizers/shape-relations.mjs';
|
|
2
3
|
|
|
4
|
+
const relationIdentity = z.object({
|
|
5
|
+
documentId: z.string(),
|
|
6
|
+
locale: z.string().optional(),
|
|
7
|
+
__type: z.string().optional(),
|
|
8
|
+
// Computed publish status preserved on `localizations` entries (calculate, then strip).
|
|
9
|
+
status: z.string().optional()
|
|
10
|
+
});
|
|
11
|
+
const buildAttributeSchema = (key, attributes)=>{
|
|
12
|
+
const attribute = attributes[key];
|
|
13
|
+
if (attribute?.type !== 'relation') {
|
|
14
|
+
return z.unknown().optional();
|
|
15
|
+
}
|
|
16
|
+
// admin::user relations are out of scope — left as unknown
|
|
17
|
+
if (attribute.target === 'admin::user') {
|
|
18
|
+
return z.unknown().optional();
|
|
19
|
+
}
|
|
20
|
+
// Must match the runtime shaping cardinality (shape-relations.ts) — the MCP SDK
|
|
21
|
+
// validates structuredContent against this schema, so a mismatch fails the tool call.
|
|
22
|
+
if (isManyRelationForMcp(attribute)) {
|
|
23
|
+
return z.array(relationIdentity).optional();
|
|
24
|
+
}
|
|
25
|
+
return relationIdentity.nullable().optional();
|
|
26
|
+
};
|
|
3
27
|
const buildOutputDataSchema = (attributes, permittedFields)=>{
|
|
4
28
|
const readableKeys = Object.keys(attributes).filter((key)=>permittedFields === null || permittedFields.has(key));
|
|
5
29
|
if (readableKeys.length === 0) {
|
|
@@ -7,7 +31,7 @@ const buildOutputDataSchema = (attributes, permittedFields)=>{
|
|
|
7
31
|
}
|
|
8
32
|
const shape = Object.fromEntries(readableKeys.map((key)=>[
|
|
9
33
|
key,
|
|
10
|
-
|
|
34
|
+
buildAttributeSchema(key, attributes)
|
|
11
35
|
]));
|
|
12
36
|
return z.object(shape).loose();
|
|
13
37
|
};
|
|
@@ -35,9 +59,11 @@ const buildOutputDataSchema = (attributes, permittedFields)=>{
|
|
|
35
59
|
}).loose();
|
|
36
60
|
/**
|
|
37
61
|
* Builds the MCP output schema for a delete response (`{ data }`).
|
|
38
|
-
*
|
|
39
|
-
*/ const buildDeleteOutputSchema = (
|
|
40
|
-
|
|
62
|
+
* Delete handlers return an empty data object, so do not require document relation fields.
|
|
63
|
+
*/ const buildDeleteOutputSchema = (// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
64
|
+
_attributes, // eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
65
|
+
_readFields)=>z.object({
|
|
66
|
+
data: z.object({}).loose().nullable()
|
|
41
67
|
}).loose();
|
|
42
68
|
|
|
43
69
|
export { buildDeleteOutputSchema, buildDocumentOutputSchema, buildListOutputSchema };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output-schemas.mjs","sources":["../../../../server/src/mcp/schemas/output-schemas.ts"],"sourcesContent":["import { z } from '@strapi/utils';\nimport type { Struct } from '@strapi/types';\n\nconst buildOutputDataSchema = (\n attributes: Struct.SchemaAttributes,\n permittedFields: Set<string> | null\n): z.ZodTypeAny => {\n const readableKeys = Object.keys(attributes).filter(\n (key) => permittedFields === null || permittedFields.has(key)\n );\n\n if (readableKeys.length === 0) {\n return z.record(z.string(), z.unknown());\n }\n\n const shape = Object.fromEntries(readableKeys.map((key) => [key,
|
|
1
|
+
{"version":3,"file":"output-schemas.mjs","sources":["../../../../server/src/mcp/schemas/output-schemas.ts"],"sourcesContent":["import { z } from '@strapi/utils';\nimport type { Struct } from '@strapi/types';\n\nimport { isManyRelationForMcp } from '../sanitizers/shape-relations';\n\nconst relationIdentity = z.object({\n documentId: z.string(),\n locale: z.string().optional(),\n __type: z.string().optional(),\n // Computed publish status preserved on `localizations` entries (calculate, then strip).\n status: z.string().optional(),\n});\n\nconst buildAttributeSchema = (key: string, attributes: Struct.SchemaAttributes): z.ZodTypeAny => {\n const attribute = attributes[key];\n\n if (attribute?.type !== 'relation') {\n return z.unknown().optional();\n }\n\n // admin::user relations are out of scope — left as unknown\n if ((attribute as { target?: string }).target === 'admin::user') {\n return z.unknown().optional();\n }\n\n // Must match the runtime shaping cardinality (shape-relations.ts) — the MCP SDK\n // validates structuredContent against this schema, so a mismatch fails the tool call.\n if (isManyRelationForMcp(attribute as { relation?: string })) {\n return z.array(relationIdentity).optional();\n }\n\n return relationIdentity.nullable().optional();\n};\n\nconst buildOutputDataSchema = (\n attributes: Struct.SchemaAttributes,\n permittedFields: Set<string> | null\n): z.ZodTypeAny => {\n const readableKeys = Object.keys(attributes).filter(\n (key) => permittedFields === null || permittedFields.has(key)\n );\n\n if (readableKeys.length === 0) {\n return z.record(z.string(), z.unknown());\n }\n\n const shape = Object.fromEntries(\n readableKeys.map((key) => [key, buildAttributeSchema(key, attributes)])\n );\n\n return z.object(shape).loose();\n};\n\n/**\n * Builds the MCP output schema for a single-document response (`{ data, meta }`).\n * Field shape is constrained to `readFields` when non-null (RBAC field filtering).\n */\nexport const buildDocumentOutputSchema = (\n attributes: Struct.SchemaAttributes,\n readFields: Set<string> | null\n): z.ZodObject<z.ZodRawShape> =>\n z\n .object({\n data: buildOutputDataSchema(attributes, readFields).nullable(),\n meta: z\n .object({\n availableLocales: z.array(z.record(z.string(), z.unknown())).optional(),\n availableStatus: z.array(z.record(z.string(), z.unknown())).optional(),\n })\n .optional(),\n })\n .loose();\n\n/**\n * Builds the MCP output schema for a paginated list response (`{ results, pagination }`).\n * Field shape is constrained to `readFields` when non-null (RBAC field filtering).\n */\nexport const buildListOutputSchema = (\n attributes: Struct.SchemaAttributes,\n readFields: Set<string> | null\n): z.ZodObject<z.ZodRawShape> =>\n z\n .object({\n results: z.array(buildOutputDataSchema(attributes, readFields)),\n pagination: z.object({\n page: z.number(),\n pageSize: z.number(),\n pageCount: z.number(),\n total: z.number(),\n }),\n })\n .loose();\n\n/**\n * Builds the MCP output schema for a delete response (`{ data }`).\n * Delete handlers return an empty data object, so do not require document relation fields.\n */\nexport const buildDeleteOutputSchema = (\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _attributes: Struct.SchemaAttributes,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _readFields: Set<string> | null\n): z.ZodObject<z.ZodRawShape> =>\n z\n .object({\n data: z.object({}).loose().nullable(),\n })\n .loose();\n"],"names":["relationIdentity","z","object","documentId","string","locale","optional","__type","status","buildAttributeSchema","key","attributes","attribute","type","unknown","target","isManyRelationForMcp","array","nullable","buildOutputDataSchema","permittedFields","readableKeys","Object","keys","filter","has","length","record","shape","fromEntries","map","loose","buildDocumentOutputSchema","readFields","data","meta","availableLocales","availableStatus","buildListOutputSchema","results","pagination","page","number","pageSize","pageCount","total","buildDeleteOutputSchema","_attributes","_readFields"],"mappings":";;;AAKA,MAAMA,gBAAAA,GAAmBC,CAAAA,CAAEC,MAAM,CAAC;AAChCC,IAAAA,UAAAA,EAAYF,EAAEG,MAAM,EAAA;IACpBC,MAAAA,EAAQJ,CAAAA,CAAEG,MAAM,EAAA,CAAGE,QAAQ,EAAA;IAC3BC,MAAAA,EAAQN,CAAAA,CAAEG,MAAM,EAAA,CAAGE,QAAQ,EAAA;;IAE3BE,MAAAA,EAAQP,CAAAA,CAAEG,MAAM,EAAA,CAAGE,QAAQ;AAC7B,CAAA,CAAA;AAEA,MAAMG,oBAAAA,GAAuB,CAACC,GAAAA,EAAaC,UAAAA,GAAAA;IACzC,MAAMC,SAAAA,GAAYD,UAAU,CAACD,GAAAA,CAAI;IAEjC,IAAIE,SAAAA,EAAWC,SAAS,UAAA,EAAY;QAClC,OAAOZ,CAAAA,CAAEa,OAAO,EAAA,CAAGR,QAAQ,EAAA;AAC7B,IAAA;;AAGA,IAAA,IAAI,SAACM,CAAkCG,MAAM,KAAK,aAAA,EAAe;QAC/D,OAAOd,CAAAA,CAAEa,OAAO,EAAA,CAAGR,QAAQ,EAAA;AAC7B,IAAA;;;AAIA,IAAA,IAAIU,qBAAqBJ,SAAAA,CAAAA,EAAqC;AAC5D,QAAA,OAAOX,CAAAA,CAAEgB,KAAK,CAACjB,gBAAAA,CAAAA,CAAkBM,QAAQ,EAAA;AAC3C,IAAA;IAEA,OAAON,gBAAAA,CAAiBkB,QAAQ,EAAA,CAAGZ,QAAQ,EAAA;AAC7C,CAAA;AAEA,MAAMa,qBAAAA,GAAwB,CAC5BR,UAAAA,EACAS,eAAAA,GAAAA;AAEA,IAAA,MAAMC,YAAAA,GAAeC,MAAAA,CAAOC,IAAI,CAACZ,UAAAA,CAAAA,CAAYa,MAAM,CACjD,CAACd,GAAAA,GAAQU,eAAAA,KAAoB,IAAA,IAAQA,eAAAA,CAAgBK,GAAG,CAACf,GAAAA,CAAAA,CAAAA;IAG3D,IAAIW,YAAAA,CAAaK,MAAM,KAAK,CAAA,EAAG;AAC7B,QAAA,OAAOzB,EAAE0B,MAAM,CAAC1B,EAAEG,MAAM,EAAA,EAAIH,EAAEa,OAAO,EAAA,CAAA;AACvC,IAAA;IAEA,MAAMc,KAAAA,GAAQN,OAAOO,WAAW,CAC9BR,aAAaS,GAAG,CAAC,CAACpB,GAAAA,GAAQ;AAACA,YAAAA,GAAAA;AAAKD,YAAAA,oBAAAA,CAAqBC,GAAAA,EAAKC,UAAAA;AAAY,SAAA,CAAA,CAAA;AAGxE,IAAA,OAAOV,CAAAA,CAAEC,MAAM,CAAC0B,KAAAA,CAAAA,CAAOG,KAAK,EAAA;AAC9B,CAAA;AAEA;;;UAIaC,yBAAAA,GAA4B,CACvCrB,YACAsB,UAAAA,GAEAhC,CAAAA,CACGC,MAAM,CAAC;QACNgC,IAAAA,EAAMf,qBAAAA,CAAsBR,UAAAA,EAAYsB,UAAAA,CAAAA,CAAYf,QAAQ,EAAA;QAC5DiB,IAAAA,EAAMlC,CAAAA,CACHC,MAAM,CAAC;AACNkC,YAAAA,gBAAAA,EAAkBnC,CAAAA,CAAEgB,KAAK,CAAChB,CAAAA,CAAE0B,MAAM,CAAC1B,CAAAA,CAAEG,MAAM,EAAA,EAAIH,CAAAA,CAAEa,OAAO,EAAA,CAAA,CAAA,CAAKR,QAAQ,EAAA;AACrE+B,YAAAA,eAAAA,EAAiBpC,CAAAA,CAAEgB,KAAK,CAAChB,CAAAA,CAAE0B,MAAM,CAAC1B,CAAAA,CAAEG,MAAM,EAAA,EAAIH,CAAAA,CAAEa,OAAO,EAAA,CAAA,CAAA,CAAKR,QAAQ;AACtE,SAAA,CAAA,CACCA,QAAQ;AACb,KAAA,CAAA,CACCyB,KAAK;AAEV;;;UAIaO,qBAAAA,GAAwB,CACnC3B,YACAsB,UAAAA,GAEAhC,CAAAA,CACGC,MAAM,CAAC;AACNqC,QAAAA,OAAAA,EAAStC,CAAAA,CAAEgB,KAAK,CAACE,qBAAAA,CAAsBR,UAAAA,EAAYsB,UAAAA,CAAAA,CAAAA;QACnDO,UAAAA,EAAYvC,CAAAA,CAAEC,MAAM,CAAC;AACnBuC,YAAAA,IAAAA,EAAMxC,EAAEyC,MAAM,EAAA;AACdC,YAAAA,QAAAA,EAAU1C,EAAEyC,MAAM,EAAA;AAClBE,YAAAA,SAAAA,EAAW3C,EAAEyC,MAAM,EAAA;AACnBG,YAAAA,KAAAA,EAAO5C,EAAEyC,MAAM;AACjB,SAAA;AACF,KAAA,CAAA,CACCX,KAAK;AAEV;;;AAGC,IACM,MAAMe,uBAAAA,GAA0B;AAErCC,WAAAA;AAEAC,WAAAA,GAEA/C,CAAAA,CACGC,MAAM,CAAC;AACNgC,QAAAA,IAAAA,EAAMjC,EAAEC,MAAM,CAAC,EAAC,CAAA,CAAG6B,KAAK,GAAGb,QAAQ;AACrC,KAAA,CAAA,CACCa,KAAK;;;;"}
|
package/dist/server/mcp/utils.js
CHANGED
|
@@ -1,15 +1,41 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var metadata = require('../controllers/utils/metadata.js');
|
|
4
|
+
var shapeRelations = require('./sanitizers/shape-relations.js');
|
|
5
|
+
|
|
3
6
|
/**
|
|
4
7
|
* Converts a Strapi content-type UID into a safe MCP tool-name segment.
|
|
5
8
|
* `api::article.article` → `article`; `plugin::i18n.locale` → `plugin-i18n_locale`.
|
|
6
9
|
*/ const slugifyUidForMcpToolName = (uid)=>{
|
|
7
10
|
const [namespace, modelName] = uid.split('::');
|
|
8
|
-
const
|
|
11
|
+
const parts = modelName.split('.').map((part)=>part.toLowerCase());
|
|
9
12
|
if (namespace === 'api') {
|
|
10
|
-
return
|
|
13
|
+
return parts[0];
|
|
14
|
+
}
|
|
15
|
+
return `${namespace.toLowerCase()}-${parts.join('_')}`;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Output chokepoint for MCP handlers returning `{ data, meta }`.
|
|
19
|
+
* Order matters — calculate, then strip:
|
|
20
|
+
* 1. permission-based sanitization,
|
|
21
|
+
* 2. formatDocumentWithMetadata — computes `data.status` and `localizations[].status`
|
|
22
|
+
* from `publishedAt`/`updatedAt`, which relation shaping removes,
|
|
23
|
+
* 3. relation shaping on the formatted `data` (identity-only relations; the
|
|
24
|
+
* freshly-computed `localizations[].status` survives via RelationIdentity).
|
|
25
|
+
*
|
|
26
|
+
* Handlers that do NOT attach metadata (delete, list) compose
|
|
27
|
+
* `permissionChecker.sanitizeOutput` + `shapeRelationsForMcp` directly instead.
|
|
28
|
+
*/ const sanitizeFormatShape = async (permissionChecker, uid, doc, opts)=>{
|
|
29
|
+
const sanitized = await permissionChecker.sanitizeOutput(doc);
|
|
30
|
+
const formatted = await metadata.formatDocumentWithMetadata(permissionChecker, uid, sanitized, opts);
|
|
31
|
+
if (formatted.data === null || formatted.data === undefined) {
|
|
32
|
+
return formatted;
|
|
11
33
|
}
|
|
12
|
-
|
|
34
|
+
const shapedData = await shapeRelations.shapeRelationsForMcp(uid, formatted.data);
|
|
35
|
+
return {
|
|
36
|
+
...formatted,
|
|
37
|
+
data: shapedData
|
|
38
|
+
};
|
|
13
39
|
};
|
|
14
40
|
/** Wraps a plain object into the dual-representation MCP tool return value (text + structuredContent). */ const ok = (structuredContent)=>({
|
|
15
41
|
content: [
|
|
@@ -39,5 +65,6 @@
|
|
|
39
65
|
|
|
40
66
|
exports.describeTool = describeTool;
|
|
41
67
|
exports.ok = ok;
|
|
68
|
+
exports.sanitizeFormatShape = sanitizeFormatShape;
|
|
42
69
|
exports.slugifyUidForMcpToolName = slugifyUidForMcpToolName;
|
|
43
70
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../server/src/mcp/utils.ts"],"sourcesContent":["import type { Modules } from '@strapi/types';\n\n/**\n * Converts a Strapi content-type UID into a safe MCP tool-name segment.\n * `api::article.article` → `article`; `plugin::i18n.locale` → `plugin-i18n_locale`.\n */\nexport const slugifyUidForMcpToolName = (uid: string): string => {\n const [namespace, modelName] = uid.split('::');\n const
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../server/src/mcp/utils.ts"],"sourcesContent":["import type { Modules, UID } from '@strapi/types';\n\nimport { formatDocumentWithMetadata } from '../controllers/utils/metadata';\nimport type { GetMetadataOptions } from '../services/document-metadata';\nimport { shapeRelationsForMcp } from './sanitizers/shape-relations';\n\n/**\n * Converts a Strapi content-type UID into a safe MCP tool-name segment.\n * `api::article.article` → `article`; `plugin::i18n.locale` → `plugin-i18n_locale`.\n */\nexport const slugifyUidForMcpToolName = (uid: string): string => {\n const [namespace, modelName] = uid.split('::');\n const parts = modelName.split('.').map((part) => part.toLowerCase());\n\n if (namespace === 'api') {\n return parts[0];\n }\n\n return `${namespace.toLowerCase()}-${parts.join('_')}`;\n};\n\ntype McpPermissionChecker = {\n sanitizeOutput: (doc: unknown) => Promise<Record<string, unknown>>;\n};\n\n/**\n * Output chokepoint for MCP handlers returning `{ data, meta }`.\n * Order matters — calculate, then strip:\n * 1. permission-based sanitization,\n * 2. formatDocumentWithMetadata — computes `data.status` and `localizations[].status`\n * from `publishedAt`/`updatedAt`, which relation shaping removes,\n * 3. relation shaping on the formatted `data` (identity-only relations; the\n * freshly-computed `localizations[].status` survives via RelationIdentity).\n *\n * Handlers that do NOT attach metadata (delete, list) compose\n * `permissionChecker.sanitizeOutput` + `shapeRelationsForMcp` directly instead.\n */\nexport const sanitizeFormatShape = async (\n permissionChecker: McpPermissionChecker,\n uid: UID.ContentType,\n doc: unknown,\n opts?: GetMetadataOptions\n): Promise<Record<string, unknown>> => {\n const sanitized = await permissionChecker.sanitizeOutput(doc);\n const formatted = await formatDocumentWithMetadata(\n permissionChecker,\n uid,\n sanitized as unknown as Parameters<typeof formatDocumentWithMetadata>[2],\n opts\n );\n\n if (formatted.data === null || formatted.data === undefined) {\n return formatted;\n }\n\n const shapedData = await shapeRelationsForMcp(uid, formatted.data as Record<string, unknown>);\n return { ...formatted, data: shapedData };\n};\n\n/** Wraps a plain object into the dual-representation MCP tool return value (text + structuredContent). */\nexport const ok = (\n structuredContent: Record<string, unknown>\n): Modules.MCP.McpToolHandlerReturn => ({\n content: [{ type: 'text', text: JSON.stringify(structuredContent) }],\n structuredContent,\n});\n\n/**\n * Generates the `title` and `description` metadata for a derived MCP tool.\n * Appends operation-specific notes for write/publish/unpublish/discard_draft operations.\n */\nexport const describeTool = (params: {\n apiID: string;\n uid: string;\n operation: string;\n}): { title: string; description: string } => {\n const { apiID, uid, operation } = params;\n const operationNoteByType: Partial<Record<string, string>> = {\n write:\n ' Creates or updates the single-type document. If no document exists, creates one; otherwise updates the existing draft.',\n publish:\n ' Operates on an existing document by documentId and may return a different numeric id for the published version row.',\n unpublish:\n ' Operates on an existing document by documentId and may return a different numeric id for the draft version row.',\n discard_draft:\n ' Operates on an existing document by documentId; treat documentId as the stable identity.',\n };\n\n return {\n title: `Content: ${apiID} — ${operation}`,\n description: `Content-manager ${operation} for ${uid}.${operationNoteByType[operation] ?? ''}`,\n };\n};\n"],"names":["slugifyUidForMcpToolName","uid","namespace","modelName","split","parts","map","part","toLowerCase","join","sanitizeFormatShape","permissionChecker","doc","opts","sanitized","sanitizeOutput","formatted","formatDocumentWithMetadata","data","undefined","shapedData","shapeRelationsForMcp","ok","structuredContent","content","type","text","JSON","stringify","describeTool","params","apiID","operation","operationNoteByType","write","publish","unpublish","discard_draft","title","description"],"mappings":";;;;;AAMA;;;IAIO,MAAMA,wBAAAA,GAA2B,CAACC,GAAAA,GAAAA;AACvC,IAAA,MAAM,CAACC,SAAAA,EAAWC,SAAAA,CAAU,GAAGF,GAAAA,CAAIG,KAAK,CAAC,IAAA,CAAA;IACzC,MAAMC,KAAAA,GAAQF,SAAAA,CAAUC,KAAK,CAAC,GAAA,CAAA,CAAKE,GAAG,CAAC,CAACC,IAAAA,GAASA,IAAAA,CAAKC,WAAW,EAAA,CAAA;AAEjE,IAAA,IAAIN,cAAc,KAAA,EAAO;QACvB,OAAOG,KAAK,CAAC,CAAA,CAAE;AACjB,IAAA;IAEA,OAAO,CAAA,EAAGH,UAAUM,WAAW,EAAA,CAAG,CAAC,EAAEH,KAAAA,CAAMI,IAAI,CAAC,GAAA,CAAA,CAAA,CAAM;AACxD;AAMA;;;;;;;;;;;AAWC,IACM,MAAMC,mBAAAA,GAAsB,OACjCC,iBAAAA,EACAV,KACAW,GAAAA,EACAC,IAAAA,GAAAA;AAEA,IAAA,MAAMC,SAAAA,GAAY,MAAMH,iBAAAA,CAAkBI,cAAc,CAACH,GAAAA,CAAAA;AACzD,IAAA,MAAMI,SAAAA,GAAY,MAAMC,mCAAAA,CACtBN,iBAAAA,EACAV,KACAa,SAAAA,EACAD,IAAAA,CAAAA;AAGF,IAAA,IAAIG,UAAUE,IAAI,KAAK,QAAQF,SAAAA,CAAUE,IAAI,KAAKC,SAAAA,EAAW;QAC3D,OAAOH,SAAAA;AACT,IAAA;AAEA,IAAA,MAAMI,UAAAA,GAAa,MAAMC,mCAAAA,CAAqBpB,GAAAA,EAAKe,UAAUE,IAAI,CAAA;IACjE,OAAO;AAAE,QAAA,GAAGF,SAAS;QAAEE,IAAAA,EAAME;AAAW,KAAA;AAC1C;AAEA,2GACO,MAAME,EAAAA,GAAK,CAChBC,qBACsC;QACtCC,OAAAA,EAAS;AAAC,YAAA;gBAAEC,IAAAA,EAAM,MAAA;gBAAQC,IAAAA,EAAMC,IAAAA,CAAKC,SAAS,CAACL,iBAAAA;AAAmB;AAAE,SAAA;AACpEA,QAAAA;AACF,KAAA;AAEA;;;IAIO,MAAMM,YAAAA,GAAe,CAACC,MAAAA,GAAAA;AAK3B,IAAA,MAAM,EAAEC,KAAK,EAAE9B,GAAG,EAAE+B,SAAS,EAAE,GAAGF,MAAAA;AAClC,IAAA,MAAMG,mBAAAA,GAAuD;QAC3DC,KAAAA,EACE,yHAAA;QACFC,OAAAA,EACE,sHAAA;QACFC,SAAAA,EACE,kHAAA;QACFC,aAAAA,EACE;AACJ,KAAA;IAEA,OAAO;AACLC,QAAAA,KAAAA,EAAO,CAAC,SAAS,EAAEP,KAAAA,CAAM,GAAG,EAAEC,SAAAA,CAAAA,CAAW;AACzCO,QAAAA,WAAAA,EAAa,CAAC,gBAAgB,EAAEP,SAAAA,CAAU,KAAK,EAAE/B,GAAAA,CAAI,CAAC,EAAEgC,mBAAmB,CAACD,SAAAA,CAAU,IAAI,EAAA,CAAA;AAC5F,KAAA;AACF;;;;;;;"}
|
|
@@ -1,13 +1,39 @@
|
|
|
1
|
+
import { formatDocumentWithMetadata } from '../controllers/utils/metadata.mjs';
|
|
2
|
+
import { shapeRelationsForMcp } from './sanitizers/shape-relations.mjs';
|
|
3
|
+
|
|
1
4
|
/**
|
|
2
5
|
* Converts a Strapi content-type UID into a safe MCP tool-name segment.
|
|
3
6
|
* `api::article.article` → `article`; `plugin::i18n.locale` → `plugin-i18n_locale`.
|
|
4
7
|
*/ const slugifyUidForMcpToolName = (uid)=>{
|
|
5
8
|
const [namespace, modelName] = uid.split('::');
|
|
6
|
-
const
|
|
9
|
+
const parts = modelName.split('.').map((part)=>part.toLowerCase());
|
|
7
10
|
if (namespace === 'api') {
|
|
8
|
-
return
|
|
11
|
+
return parts[0];
|
|
12
|
+
}
|
|
13
|
+
return `${namespace.toLowerCase()}-${parts.join('_')}`;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Output chokepoint for MCP handlers returning `{ data, meta }`.
|
|
17
|
+
* Order matters — calculate, then strip:
|
|
18
|
+
* 1. permission-based sanitization,
|
|
19
|
+
* 2. formatDocumentWithMetadata — computes `data.status` and `localizations[].status`
|
|
20
|
+
* from `publishedAt`/`updatedAt`, which relation shaping removes,
|
|
21
|
+
* 3. relation shaping on the formatted `data` (identity-only relations; the
|
|
22
|
+
* freshly-computed `localizations[].status` survives via RelationIdentity).
|
|
23
|
+
*
|
|
24
|
+
* Handlers that do NOT attach metadata (delete, list) compose
|
|
25
|
+
* `permissionChecker.sanitizeOutput` + `shapeRelationsForMcp` directly instead.
|
|
26
|
+
*/ const sanitizeFormatShape = async (permissionChecker, uid, doc, opts)=>{
|
|
27
|
+
const sanitized = await permissionChecker.sanitizeOutput(doc);
|
|
28
|
+
const formatted = await formatDocumentWithMetadata(permissionChecker, uid, sanitized, opts);
|
|
29
|
+
if (formatted.data === null || formatted.data === undefined) {
|
|
30
|
+
return formatted;
|
|
9
31
|
}
|
|
10
|
-
|
|
32
|
+
const shapedData = await shapeRelationsForMcp(uid, formatted.data);
|
|
33
|
+
return {
|
|
34
|
+
...formatted,
|
|
35
|
+
data: shapedData
|
|
36
|
+
};
|
|
11
37
|
};
|
|
12
38
|
/** Wraps a plain object into the dual-representation MCP tool return value (text + structuredContent). */ const ok = (structuredContent)=>({
|
|
13
39
|
content: [
|
|
@@ -35,5 +61,5 @@
|
|
|
35
61
|
};
|
|
36
62
|
};
|
|
37
63
|
|
|
38
|
-
export { describeTool, ok, slugifyUidForMcpToolName };
|
|
64
|
+
export { describeTool, ok, sanitizeFormatShape, slugifyUidForMcpToolName };
|
|
39
65
|
//# sourceMappingURL=utils.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.mjs","sources":["../../../server/src/mcp/utils.ts"],"sourcesContent":["import type { Modules } from '@strapi/types';\n\n/**\n * Converts a Strapi content-type UID into a safe MCP tool-name segment.\n * `api::article.article` → `article`; `plugin::i18n.locale` → `plugin-i18n_locale`.\n */\nexport const slugifyUidForMcpToolName = (uid: string): string => {\n const [namespace, modelName] = uid.split('::');\n const
|
|
1
|
+
{"version":3,"file":"utils.mjs","sources":["../../../server/src/mcp/utils.ts"],"sourcesContent":["import type { Modules, UID } from '@strapi/types';\n\nimport { formatDocumentWithMetadata } from '../controllers/utils/metadata';\nimport type { GetMetadataOptions } from '../services/document-metadata';\nimport { shapeRelationsForMcp } from './sanitizers/shape-relations';\n\n/**\n * Converts a Strapi content-type UID into a safe MCP tool-name segment.\n * `api::article.article` → `article`; `plugin::i18n.locale` → `plugin-i18n_locale`.\n */\nexport const slugifyUidForMcpToolName = (uid: string): string => {\n const [namespace, modelName] = uid.split('::');\n const parts = modelName.split('.').map((part) => part.toLowerCase());\n\n if (namespace === 'api') {\n return parts[0];\n }\n\n return `${namespace.toLowerCase()}-${parts.join('_')}`;\n};\n\ntype McpPermissionChecker = {\n sanitizeOutput: (doc: unknown) => Promise<Record<string, unknown>>;\n};\n\n/**\n * Output chokepoint for MCP handlers returning `{ data, meta }`.\n * Order matters — calculate, then strip:\n * 1. permission-based sanitization,\n * 2. formatDocumentWithMetadata — computes `data.status` and `localizations[].status`\n * from `publishedAt`/`updatedAt`, which relation shaping removes,\n * 3. relation shaping on the formatted `data` (identity-only relations; the\n * freshly-computed `localizations[].status` survives via RelationIdentity).\n *\n * Handlers that do NOT attach metadata (delete, list) compose\n * `permissionChecker.sanitizeOutput` + `shapeRelationsForMcp` directly instead.\n */\nexport const sanitizeFormatShape = async (\n permissionChecker: McpPermissionChecker,\n uid: UID.ContentType,\n doc: unknown,\n opts?: GetMetadataOptions\n): Promise<Record<string, unknown>> => {\n const sanitized = await permissionChecker.sanitizeOutput(doc);\n const formatted = await formatDocumentWithMetadata(\n permissionChecker,\n uid,\n sanitized as unknown as Parameters<typeof formatDocumentWithMetadata>[2],\n opts\n );\n\n if (formatted.data === null || formatted.data === undefined) {\n return formatted;\n }\n\n const shapedData = await shapeRelationsForMcp(uid, formatted.data as Record<string, unknown>);\n return { ...formatted, data: shapedData };\n};\n\n/** Wraps a plain object into the dual-representation MCP tool return value (text + structuredContent). */\nexport const ok = (\n structuredContent: Record<string, unknown>\n): Modules.MCP.McpToolHandlerReturn => ({\n content: [{ type: 'text', text: JSON.stringify(structuredContent) }],\n structuredContent,\n});\n\n/**\n * Generates the `title` and `description` metadata for a derived MCP tool.\n * Appends operation-specific notes for write/publish/unpublish/discard_draft operations.\n */\nexport const describeTool = (params: {\n apiID: string;\n uid: string;\n operation: string;\n}): { title: string; description: string } => {\n const { apiID, uid, operation } = params;\n const operationNoteByType: Partial<Record<string, string>> = {\n write:\n ' Creates or updates the single-type document. If no document exists, creates one; otherwise updates the existing draft.',\n publish:\n ' Operates on an existing document by documentId and may return a different numeric id for the published version row.',\n unpublish:\n ' Operates on an existing document by documentId and may return a different numeric id for the draft version row.',\n discard_draft:\n ' Operates on an existing document by documentId; treat documentId as the stable identity.',\n };\n\n return {\n title: `Content: ${apiID} — ${operation}`,\n description: `Content-manager ${operation} for ${uid}.${operationNoteByType[operation] ?? ''}`,\n };\n};\n"],"names":["slugifyUidForMcpToolName","uid","namespace","modelName","split","parts","map","part","toLowerCase","join","sanitizeFormatShape","permissionChecker","doc","opts","sanitized","sanitizeOutput","formatted","formatDocumentWithMetadata","data","undefined","shapedData","shapeRelationsForMcp","ok","structuredContent","content","type","text","JSON","stringify","describeTool","params","apiID","operation","operationNoteByType","write","publish","unpublish","discard_draft","title","description"],"mappings":";;;AAMA;;;IAIO,MAAMA,wBAAAA,GAA2B,CAACC,GAAAA,GAAAA;AACvC,IAAA,MAAM,CAACC,SAAAA,EAAWC,SAAAA,CAAU,GAAGF,GAAAA,CAAIG,KAAK,CAAC,IAAA,CAAA;IACzC,MAAMC,KAAAA,GAAQF,SAAAA,CAAUC,KAAK,CAAC,GAAA,CAAA,CAAKE,GAAG,CAAC,CAACC,IAAAA,GAASA,IAAAA,CAAKC,WAAW,EAAA,CAAA;AAEjE,IAAA,IAAIN,cAAc,KAAA,EAAO;QACvB,OAAOG,KAAK,CAAC,CAAA,CAAE;AACjB,IAAA;IAEA,OAAO,CAAA,EAAGH,UAAUM,WAAW,EAAA,CAAG,CAAC,EAAEH,KAAAA,CAAMI,IAAI,CAAC,GAAA,CAAA,CAAA,CAAM;AACxD;AAMA;;;;;;;;;;;AAWC,IACM,MAAMC,mBAAAA,GAAsB,OACjCC,iBAAAA,EACAV,KACAW,GAAAA,EACAC,IAAAA,GAAAA;AAEA,IAAA,MAAMC,SAAAA,GAAY,MAAMH,iBAAAA,CAAkBI,cAAc,CAACH,GAAAA,CAAAA;AACzD,IAAA,MAAMI,SAAAA,GAAY,MAAMC,0BAAAA,CACtBN,iBAAAA,EACAV,KACAa,SAAAA,EACAD,IAAAA,CAAAA;AAGF,IAAA,IAAIG,UAAUE,IAAI,KAAK,QAAQF,SAAAA,CAAUE,IAAI,KAAKC,SAAAA,EAAW;QAC3D,OAAOH,SAAAA;AACT,IAAA;AAEA,IAAA,MAAMI,UAAAA,GAAa,MAAMC,oBAAAA,CAAqBpB,GAAAA,EAAKe,UAAUE,IAAI,CAAA;IACjE,OAAO;AAAE,QAAA,GAAGF,SAAS;QAAEE,IAAAA,EAAME;AAAW,KAAA;AAC1C;AAEA,2GACO,MAAME,EAAAA,GAAK,CAChBC,qBACsC;QACtCC,OAAAA,EAAS;AAAC,YAAA;gBAAEC,IAAAA,EAAM,MAAA;gBAAQC,IAAAA,EAAMC,IAAAA,CAAKC,SAAS,CAACL,iBAAAA;AAAmB;AAAE,SAAA;AACpEA,QAAAA;AACF,KAAA;AAEA;;;IAIO,MAAMM,YAAAA,GAAe,CAACC,MAAAA,GAAAA;AAK3B,IAAA,MAAM,EAAEC,KAAK,EAAE9B,GAAG,EAAE+B,SAAS,EAAE,GAAGF,MAAAA;AAClC,IAAA,MAAMG,mBAAAA,GAAuD;QAC3DC,KAAAA,EACE,yHAAA;QACFC,OAAAA,EACE,sHAAA;QACFC,SAAAA,EACE,kHAAA;QACFC,aAAAA,EACE;AACJ,KAAA;IAEA,OAAO;AACLC,QAAAA,KAAAA,EAAO,CAAC,SAAS,EAAEP,KAAAA,CAAM,GAAG,EAAEC,SAAAA,CAAAA,CAAW;AACzCO,QAAAA,WAAAA,EAAa,CAAC,gBAAgB,EAAEP,SAAAA,CAAU,KAAK,EAAE/B,GAAAA,CAAI,CAAC,EAAEgC,mBAAmB,CAACD,SAAAA,CAAU,IAAI,EAAA,CAAA;AAC5F,KAAA;AACF;;;;"}
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
var isNil = require('lodash/isNil');
|
|
4
4
|
|
|
5
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
|
|
7
|
+
var isNil__default = /*#__PURE__*/_interopDefault(isNil);
|
|
8
|
+
|
|
5
9
|
var routing = (async (ctx, next)=>{
|
|
6
10
|
const { model } = ctx.params;
|
|
7
11
|
const ct = strapi.contentTypes[model];
|
|
@@ -27,7 +31,7 @@ var routing = (async (ctx, next)=>{
|
|
|
27
31
|
} else {
|
|
28
32
|
actionConfig = strapi.plugin(ct.plugin).config(`layout.${ct.modelName}.actions.${action}`);
|
|
29
33
|
}
|
|
30
|
-
if (!
|
|
34
|
+
if (!isNil__default.default(actionConfig)) {
|
|
31
35
|
const [controller, action] = actionConfig.split('.');
|
|
32
36
|
if (controller && action) {
|
|
33
37
|
return controllers[controller.toLowerCase()][action](ctx, next);
|
|
@@ -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":"
|
|
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,GAAAA,EAAcC,IAAAA,GAAAA;AAClC,IAAA,MAAM,EAAEC,KAAK,EAAE,GAA+BF,IAAIG,MAAM;AAExD,IAAA,MAAMC,EAAAA,GAAkBC,MAAAA,CAAOC,YAAY,CAACJ,KAAAA,CAAM;AAElD,IAAA,IAAI,CAACE,EAAAA,EAAI;QACP,OAAOJ,GAAAA,CAAIO,IAAI,CAAC;YAAEC,KAAAA,EAAO;SAAuB,EAAG,GAAA,CAAA;AACrD,IAAA;IAEA,IAAIC,WAAAA;AACJ,IAAA,IAAI,CAACL,EAAAA,CAAGM,MAAM,IAAIN,EAAAA,CAAGM,MAAM,KAAK,OAAA,EAAS;QACvCD,WAAAA,GAAcJ,MAAAA,CAAOM,KAAK,CAACF,WAAW;IACxC,CAAA,MAAO;AACLA,QAAAA,WAAAA,GAAcJ,OAAOK,MAAM,CAACN,EAAAA,CAAGM,MAAM,EAAED,WAAW;AACpD,IAAA;AAEA,IAAA,MAAM,EAAEG,KAAK,EAAE,GAA0BZ,IAAIa,KAAK;AAElD,IAAA,IAAI,OAAOD,KAAAA,CAAME,OAAO,KAAK,QAAA,EAAU;QACrC,OAAOb,IAAAA,EAAAA;AACT,IAAA;AAEA,IAAA,MAAM,GAAGc,MAAAA,CAAO,GAAGH,MAAME,OAAO,CAACE,KAAK,CAAC,GAAA,CAAA;IAEvC,IAAIC,YAAAA;AACJ,IAAA,IAAI,CAACb,EAAAA,CAAGM,MAAM,IAAIN,EAAAA,CAAGM,MAAM,KAAK,OAAA,EAAS;AACvCO,QAAAA,YAAAA,GAAeZ,MAAAA,CAAOa,MAAM,CAACC,GAAG,CAAC,CAAC,aAAa,EAAEf,EAAAA,CAAGgB,SAAS,CAAC,SAAS,EAAEL,MAAAA,CAAAA,CAAQ,CAAA;IACnF,CAAA,MAAO;AACLE,QAAAA,YAAAA,GAAeZ,OAAOK,MAAM,CAACN,EAAAA,CAAGM,MAAM,EAAEQ,MAAM,CAAC,CAAC,OAAO,EAAEd,EAAAA,CAAGgB,SAAS,CAAC,SAAS,EAAEL,MAAAA,CAAAA,CAAQ,CAAA;AAC3F,IAAA;IAEA,IAAI,CAACM,uBAAMJ,YAAAA,CAAAA,EAAe;AACxB,QAAA,MAAM,CAACK,UAAAA,EAAYP,MAAAA,CAAO,GAAGE,YAAAA,CAAaD,KAAK,CAAC,GAAA,CAAA;AAEhD,QAAA,IAAIM,cAAcP,MAAAA,EAAQ;YACxB,OAAON,WAAW,CAACa,UAAAA,CAAWC,WAAW,GAAG,CAACR,MAAAA,CAAO,CAACf,GAAAA,EAAKC,IAAAA,CAAAA;AAC5D,QAAA;AACF,IAAA;IAEA,MAAMA,IAAAA,EAAAA;AACR,CAAA;;;;"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var path = require('path');
|
|
4
|
+
var promises = require('fs/promises');
|
|
3
5
|
var utils = require('../utils.js');
|
|
4
6
|
var preview = require('./validation/preview.js');
|
|
5
7
|
|
|
@@ -26,6 +28,13 @@ const createPreviewController = ()=>{
|
|
|
26
28
|
url: url || undefined
|
|
27
29
|
}
|
|
28
30
|
};
|
|
31
|
+
},
|
|
32
|
+
/**
|
|
33
|
+
* Serves the standalone preview script verbatim as JavaScript. The admin fetches
|
|
34
|
+
* this, injects the config, and posts it to the preview iframe
|
|
35
|
+
*/ async getPreviewScript (ctx) {
|
|
36
|
+
ctx.type = 'application/javascript';
|
|
37
|
+
ctx.body = await promises.readFile(path.join(__dirname, 'previewScript.js'), 'utf8');
|
|
29
38
|
}
|
|
30
39
|
};
|
|
31
40
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.js","sources":["../../../../server/src/preview/controllers/preview.ts"],"sourcesContent":["import type { Core, UID } from '@strapi/types';\n\nimport { Preview } from '../../../../shared/contracts';\n\nimport { getService } from '../utils';\nimport { validatePreviewUrl } from './validation/preview';\n\nconst createPreviewController = () => {\n return {\n /**\n * Transforms an entry into a preview URL, so that it can be previewed\n * in the Content Manager.\n */\n async getPreviewUrl(ctx) {\n const uid = ctx.params.contentType as UID.ContentType;\n const query = ctx.request.query as Preview.GetPreviewUrl.Request['query'];\n\n // Validate the request parameters\n const params = await validatePreviewUrl(strapi, uid, query);\n\n // TODO: Permissions to preview content\n\n // Get the preview URL by using the user-defined config handler\n const previewService = getService(strapi, 'preview');\n const url = await previewService.getPreviewUrl(uid, params);\n\n // If no url is found, set status to 204\n if (!url) {\n ctx.status = 204;\n }\n\n return {\n data: { url: url || undefined },\n } satisfies Preview.GetPreviewUrl.Response;\n },\n } satisfies Core.Controller;\n};\n\nexport { createPreviewController };\n"],"names":["createPreviewController","getPreviewUrl","ctx","uid","params","contentType","query","request","validatePreviewUrl","strapi","previewService","getService","url","status","data","undefined"],"mappings":"
|
|
1
|
+
{"version":3,"file":"preview.js","sources":["../../../../server/src/preview/controllers/preview.ts"],"sourcesContent":["import { join } from 'path';\n\nimport type { Core, UID } from '@strapi/types';\n\nimport { readFile } from 'fs/promises';\nimport { Preview } from '../../../../shared/contracts';\n\nimport { getService } from '../utils';\nimport { validatePreviewUrl } from './validation/preview';\n\nconst createPreviewController = () => {\n return {\n /**\n * Transforms an entry into a preview URL, so that it can be previewed\n * in the Content Manager.\n */\n async getPreviewUrl(ctx) {\n const uid = ctx.params.contentType as UID.ContentType;\n const query = ctx.request.query as Preview.GetPreviewUrl.Request['query'];\n\n // Validate the request parameters\n const params = await validatePreviewUrl(strapi, uid, query);\n\n // TODO: Permissions to preview content\n\n // Get the preview URL by using the user-defined config handler\n const previewService = getService(strapi, 'preview');\n const url = await previewService.getPreviewUrl(uid, params);\n\n // If no url is found, set status to 204\n if (!url) {\n ctx.status = 204;\n }\n\n return {\n data: { url: url || undefined },\n } satisfies Preview.GetPreviewUrl.Response;\n },\n\n /**\n * Serves the standalone preview script verbatim as JavaScript. The admin fetches\n * this, injects the config, and posts it to the preview iframe\n */\n async getPreviewScript(ctx) {\n ctx.type = 'application/javascript';\n ctx.body = await readFile(join(__dirname, 'previewScript.js'), 'utf8');\n },\n } satisfies Core.Controller;\n};\n\nexport { createPreviewController };\n"],"names":["createPreviewController","getPreviewUrl","ctx","uid","params","contentType","query","request","validatePreviewUrl","strapi","previewService","getService","url","status","data","undefined","getPreviewScript","type","body","readFile","join","__dirname"],"mappings":";;;;;;;AAUA,MAAMA,uBAAAA,GAA0B,IAAA;IAC9B,OAAO;AACL;;;QAIA,MAAMC,eAAcC,GAAG,EAAA;AACrB,YAAA,MAAMC,GAAAA,GAAMD,GAAAA,CAAIE,MAAM,CAACC,WAAW;AAClC,YAAA,MAAMC,KAAAA,GAAQJ,GAAAA,CAAIK,OAAO,CAACD,KAAK;;AAG/B,YAAA,MAAMF,MAAAA,GAAS,MAAMI,0BAAAA,CAAmBC,MAAAA,EAAQN,GAAAA,EAAKG,KAAAA,CAAAA;;;YAKrD,MAAMI,cAAAA,GAAiBC,iBAAWF,MAAAA,EAAQ,SAAA,CAAA;AAC1C,YAAA,MAAMG,GAAAA,GAAM,MAAMF,cAAAA,CAAeT,aAAa,CAACE,GAAAA,EAAKC,MAAAA,CAAAA;;AAGpD,YAAA,IAAI,CAACQ,GAAAA,EAAK;AACRV,gBAAAA,GAAAA,CAAIW,MAAM,GAAG,GAAA;AACf,YAAA;YAEA,OAAO;gBACLC,IAAAA,EAAM;AAAEF,oBAAAA,GAAAA,EAAKA,GAAAA,IAAOG;AAAU;AAChC,aAAA;AACF,QAAA,CAAA;AAEA;;;QAIA,MAAMC,kBAAiBd,GAAG,EAAA;AACxBA,YAAAA,GAAAA,CAAIe,IAAI,GAAG,wBAAA;AACXf,YAAAA,GAAAA,CAAIgB,IAAI,GAAG,MAAMC,iBAAAA,CAASC,SAAAA,CAAKC,WAAW,kBAAA,CAAA,EAAqB,MAAA,CAAA;AACjE,QAAA;AACF,KAAA;AACF;;;;"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
import { readFile } from 'fs/promises';
|
|
1
3
|
import { getService } from '../utils.mjs';
|
|
2
4
|
import { validatePreviewUrl } from './validation/preview.mjs';
|
|
3
5
|
|
|
@@ -24,6 +26,13 @@ const createPreviewController = ()=>{
|
|
|
24
26
|
url: url || undefined
|
|
25
27
|
}
|
|
26
28
|
};
|
|
29
|
+
},
|
|
30
|
+
/**
|
|
31
|
+
* Serves the standalone preview script verbatim as JavaScript. The admin fetches
|
|
32
|
+
* this, injects the config, and posts it to the preview iframe
|
|
33
|
+
*/ async getPreviewScript (ctx) {
|
|
34
|
+
ctx.type = 'application/javascript';
|
|
35
|
+
ctx.body = await readFile(join(__dirname, 'previewScript.js'), 'utf8');
|
|
27
36
|
}
|
|
28
37
|
};
|
|
29
38
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.mjs","sources":["../../../../server/src/preview/controllers/preview.ts"],"sourcesContent":["import type { Core, UID } from '@strapi/types';\n\nimport { Preview } from '../../../../shared/contracts';\n\nimport { getService } from '../utils';\nimport { validatePreviewUrl } from './validation/preview';\n\nconst createPreviewController = () => {\n return {\n /**\n * Transforms an entry into a preview URL, so that it can be previewed\n * in the Content Manager.\n */\n async getPreviewUrl(ctx) {\n const uid = ctx.params.contentType as UID.ContentType;\n const query = ctx.request.query as Preview.GetPreviewUrl.Request['query'];\n\n // Validate the request parameters\n const params = await validatePreviewUrl(strapi, uid, query);\n\n // TODO: Permissions to preview content\n\n // Get the preview URL by using the user-defined config handler\n const previewService = getService(strapi, 'preview');\n const url = await previewService.getPreviewUrl(uid, params);\n\n // If no url is found, set status to 204\n if (!url) {\n ctx.status = 204;\n }\n\n return {\n data: { url: url || undefined },\n } satisfies Preview.GetPreviewUrl.Response;\n },\n } satisfies Core.Controller;\n};\n\nexport { createPreviewController };\n"],"names":["createPreviewController","getPreviewUrl","ctx","uid","params","contentType","query","request","validatePreviewUrl","strapi","previewService","getService","url","status","data","undefined"],"mappings":"
|
|
1
|
+
{"version":3,"file":"preview.mjs","sources":["../../../../server/src/preview/controllers/preview.ts"],"sourcesContent":["import { join } from 'path';\n\nimport type { Core, UID } from '@strapi/types';\n\nimport { readFile } from 'fs/promises';\nimport { Preview } from '../../../../shared/contracts';\n\nimport { getService } from '../utils';\nimport { validatePreviewUrl } from './validation/preview';\n\nconst createPreviewController = () => {\n return {\n /**\n * Transforms an entry into a preview URL, so that it can be previewed\n * in the Content Manager.\n */\n async getPreviewUrl(ctx) {\n const uid = ctx.params.contentType as UID.ContentType;\n const query = ctx.request.query as Preview.GetPreviewUrl.Request['query'];\n\n // Validate the request parameters\n const params = await validatePreviewUrl(strapi, uid, query);\n\n // TODO: Permissions to preview content\n\n // Get the preview URL by using the user-defined config handler\n const previewService = getService(strapi, 'preview');\n const url = await previewService.getPreviewUrl(uid, params);\n\n // If no url is found, set status to 204\n if (!url) {\n ctx.status = 204;\n }\n\n return {\n data: { url: url || undefined },\n } satisfies Preview.GetPreviewUrl.Response;\n },\n\n /**\n * Serves the standalone preview script verbatim as JavaScript. The admin fetches\n * this, injects the config, and posts it to the preview iframe\n */\n async getPreviewScript(ctx) {\n ctx.type = 'application/javascript';\n ctx.body = await readFile(join(__dirname, 'previewScript.js'), 'utf8');\n },\n } satisfies Core.Controller;\n};\n\nexport { createPreviewController };\n"],"names":["createPreviewController","getPreviewUrl","ctx","uid","params","contentType","query","request","validatePreviewUrl","strapi","previewService","getService","url","status","data","undefined","getPreviewScript","type","body","readFile","join","__dirname"],"mappings":";;;;;AAUA,MAAMA,uBAAAA,GAA0B,IAAA;IAC9B,OAAO;AACL;;;QAIA,MAAMC,eAAcC,GAAG,EAAA;AACrB,YAAA,MAAMC,GAAAA,GAAMD,GAAAA,CAAIE,MAAM,CAACC,WAAW;AAClC,YAAA,MAAMC,KAAAA,GAAQJ,GAAAA,CAAIK,OAAO,CAACD,KAAK;;AAG/B,YAAA,MAAMF,MAAAA,GAAS,MAAMI,kBAAAA,CAAmBC,MAAAA,EAAQN,GAAAA,EAAKG,KAAAA,CAAAA;;;YAKrD,MAAMI,cAAAA,GAAiBC,WAAWF,MAAAA,EAAQ,SAAA,CAAA;AAC1C,YAAA,MAAMG,GAAAA,GAAM,MAAMF,cAAAA,CAAeT,aAAa,CAACE,GAAAA,EAAKC,MAAAA,CAAAA;;AAGpD,YAAA,IAAI,CAACQ,GAAAA,EAAK;AACRV,gBAAAA,GAAAA,CAAIW,MAAM,GAAG,GAAA;AACf,YAAA;YAEA,OAAO;gBACLC,IAAAA,EAAM;AAAEF,oBAAAA,GAAAA,EAAKA,GAAAA,IAAOG;AAAU;AAChC,aAAA;AACF,QAAA,CAAA;AAEA;;;QAIA,MAAMC,kBAAiBd,GAAG,EAAA;AACxBA,YAAAA,GAAAA,CAAIe,IAAI,GAAG,wBAAA;AACXf,YAAAA,GAAAA,CAAIgB,IAAI,GAAG,MAAMC,QAAAA,CAASC,IAAAA,CAAKC,WAAW,kBAAA,CAAA,EAAqB,MAAA,CAAA;AACjE,QAAA;AACF,KAAA;AACF;;;;"}
|