@delmaredigital/payload-puck 0.6.10 → 0.6.13
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/README.md +79 -1
- package/dist/admin/EditWithPuckButton.d.ts +1 -1
- package/dist/admin/EditWithPuckButton.d.ts.map +1 -1
- package/dist/admin/EditWithPuckButton.js +65 -25
- package/dist/admin/EditWithPuckButton.js.map +1 -1
- package/dist/admin/EditWithPuckCell.js +43 -13
- package/dist/admin/EditWithPuckCell.js.map +1 -1
- package/dist/admin/PuckEditorView.d.ts +1 -1
- package/dist/admin/PuckEditorView.d.ts.map +1 -1
- package/dist/admin/PuckEditorView.js +118 -32
- package/dist/admin/PuckEditorView.js.map +1 -1
- package/dist/admin/client.d.ts +2 -2
- package/dist/admin/client.d.ts.map +1 -1
- package/dist/admin/client.js +4 -4
- package/dist/admin/client.js.map +1 -1
- package/dist/admin/generateAdminComponents.js +7 -7
- package/dist/admin/generateAdminComponents.js.map +1 -1
- package/dist/admin/index.d.ts +5 -5
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +3 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/ai/collections/AiContext.js +56 -29
- package/dist/ai/collections/AiContext.js.map +1 -1
- package/dist/ai/collections/AiPrompts.js +24 -19
- package/dist/ai/collections/AiPrompts.js.map +1 -1
- package/dist/ai/createAiApiRoutes.js +28 -19
- package/dist/ai/createAiApiRoutes.js.map +1 -1
- package/dist/ai/createAiGenerate.js +7 -8
- package/dist/ai/createAiGenerate.js.map +1 -1
- package/dist/ai/createAiPlugin.js +7 -9
- package/dist/ai/createAiPlugin.js.map +1 -1
- package/dist/ai/hooks/useAiContext.js +50 -39
- package/dist/ai/hooks/useAiContext.js.map +1 -1
- package/dist/ai/hooks/useAiPrompts.js +33 -25
- package/dist/ai/hooks/useAiPrompts.js.map +1 -1
- package/dist/ai/index.js +9 -10
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/plugins/ContextEditorPanel.d.ts +1 -1
- package/dist/ai/plugins/ContextEditorPanel.d.ts.map +1 -1
- package/dist/ai/plugins/ContextEditorPanel.js +399 -107
- package/dist/ai/plugins/ContextEditorPanel.js.map +1 -1
- package/dist/ai/plugins/PromptEditorPanel.d.ts +1 -1
- package/dist/ai/plugins/PromptEditorPanel.d.ts.map +1 -1
- package/dist/ai/plugins/PromptEditorPanel.js +237 -51
- package/dist/ai/plugins/PromptEditorPanel.js.map +1 -1
- package/dist/ai/plugins/contextEditorPlugin.js +12 -5
- package/dist/ai/plugins/contextEditorPlugin.js.map +1 -1
- package/dist/ai/plugins/promptApiRoutes.js +119 -50
- package/dist/ai/plugins/promptApiRoutes.js.map +1 -1
- package/dist/ai/plugins/promptEditorPlugin.js +12 -5
- package/dist/ai/plugins/promptEditorPlugin.js.map +1 -1
- package/dist/ai/presets/componentAiDefaults.js +108 -83
- package/dist/ai/presets/componentAiDefaults.js.map +1 -1
- package/dist/ai/presets/index.js +12 -18
- package/dist/ai/presets/index.js.map +1 -1
- package/dist/ai/presets/instructions/interactive.js +85 -75
- package/dist/ai/presets/instructions/interactive.js.map +1 -1
- package/dist/ai/presets/instructions/layout.js +122 -117
- package/dist/ai/presets/instructions/layout.js.map +1 -1
- package/dist/ai/presets/instructions/media.js +31 -29
- package/dist/ai/presets/instructions/media.js.map +1 -1
- package/dist/ai/presets/instructions/pagePatterns.js +4 -6
- package/dist/ai/presets/instructions/pagePatterns.js.map +1 -1
- package/dist/ai/presets/instructions/schemas.js +495 -137
- package/dist/ai/presets/instructions/schemas.js.map +1 -1
- package/dist/ai/presets/instructions/typography.js +38 -33
- package/dist/ai/presets/instructions/typography.js.map +1 -1
- package/dist/ai/tools/index.js +92 -55
- package/dist/ai/tools/index.js.map +1 -1
- package/dist/ai/types.js +7 -1
- package/dist/ai/types.js.map +1 -1
- package/dist/ai/utils/injectAiConfig.js +33 -40
- package/dist/ai/utils/injectAiConfig.js.map +1 -1
- package/dist/api/createPuckApiRoutes.d.ts +1 -1
- package/dist/api/createPuckApiRoutes.d.ts.map +1 -1
- package/dist/api/createPuckApiRoutes.js +123 -65
- package/dist/api/createPuckApiRoutes.js.map +1 -1
- package/dist/api/createPuckApiRoutesVersions.d.ts +1 -1
- package/dist/api/createPuckApiRoutesVersions.d.ts.map +1 -1
- package/dist/api/createPuckApiRoutesVersions.js +88 -37
- package/dist/api/createPuckApiRoutesVersions.js.map +1 -1
- package/dist/api/createPuckApiRoutesWithId.d.ts +1 -1
- package/dist/api/createPuckApiRoutesWithId.d.ts.map +1 -1
- package/dist/api/createPuckApiRoutesWithId.js +166 -72
- package/dist/api/createPuckApiRoutesWithId.js.map +1 -1
- package/dist/api/index.d.ts +5 -5
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +6 -6
- package/dist/api/index.js.map +1 -1
- package/dist/api/payload-config.d.js +15 -0
- package/dist/api/payload-config.d.js.map +1 -0
- package/dist/api/types.js +4 -1
- package/dist/api/types.js.map +1 -1
- package/dist/api/utils/mapRootProps.d.ts +1 -1
- package/dist/api/utils/mapRootProps.d.ts.map +1 -1
- package/dist/api/utils/mapRootProps.js +77 -44
- package/dist/api/utils/mapRootProps.js.map +1 -1
- package/dist/collections/Templates.js +24 -20
- package/dist/collections/Templates.js.map +1 -1
- package/dist/components/AccordionClient.d.ts +2 -2
- package/dist/components/AccordionClient.d.ts.map +1 -1
- package/dist/components/AccordionClient.js +81 -22
- package/dist/components/AccordionClient.js.map +1 -1
- package/dist/components/AnimatedWrapper.d.ts +2 -2
- package/dist/components/AnimatedWrapper.d.ts.map +1 -1
- package/dist/components/AnimatedWrapper.js +31 -16
- package/dist/components/AnimatedWrapper.js.map +1 -1
- package/dist/components/exports.js +2 -2
- package/dist/components/exports.js.map +1 -1
- package/dist/components/index.d.ts +5 -5
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +7 -7
- package/dist/components/index.js.map +1 -1
- package/dist/components/interactive/Accordion.d.ts +1 -1
- package/dist/components/interactive/Accordion.d.ts.map +1 -1
- package/dist/components/interactive/Accordion.js +149 -55
- package/dist/components/interactive/Accordion.js.map +1 -1
- package/dist/components/interactive/Accordion.server.d.ts +1 -1
- package/dist/components/interactive/Accordion.server.d.ts.map +1 -1
- package/dist/components/interactive/Accordion.server.js +25 -7
- package/dist/components/interactive/Accordion.server.js.map +1 -1
- package/dist/components/interactive/Button.d.ts +3 -3
- package/dist/components/interactive/Button.d.ts.map +1 -1
- package/dist/components/interactive/Button.js +89 -43
- package/dist/components/interactive/Button.js.map +1 -1
- package/dist/components/interactive/Button.server.d.ts +2 -2
- package/dist/components/interactive/Button.server.d.ts.map +1 -1
- package/dist/components/interactive/Button.server.js +40 -20
- package/dist/components/interactive/Button.server.js.map +1 -1
- package/dist/components/interactive/Card.d.ts +3 -3
- package/dist/components/interactive/Card.d.ts.map +1 -1
- package/dist/components/interactive/Card.js +131 -39
- package/dist/components/interactive/Card.js.map +1 -1
- package/dist/components/interactive/Card.server.d.ts +3 -3
- package/dist/components/interactive/Card.server.d.ts.map +1 -1
- package/dist/components/interactive/Card.server.js +72 -11
- package/dist/components/interactive/Card.server.js.map +1 -1
- package/dist/components/interactive/Divider.d.ts +1 -1
- package/dist/components/interactive/Divider.d.ts.map +1 -1
- package/dist/components/interactive/Divider.js +54 -26
- package/dist/components/interactive/Divider.js.map +1 -1
- package/dist/components/interactive/Divider.server.d.ts +1 -1
- package/dist/components/interactive/Divider.server.d.ts.map +1 -1
- package/dist/components/interactive/Divider.server.js +28 -12
- package/dist/components/interactive/Divider.server.js.map +1 -1
- package/dist/components/interactive/index.d.ts +4 -4
- package/dist/components/interactive/index.d.ts.map +1 -1
- package/dist/components/interactive/index.js +5 -5
- package/dist/components/interactive/index.js.map +1 -1
- package/dist/components/layout/Container.d.ts +1 -1
- package/dist/components/layout/Container.d.ts.map +1 -1
- package/dist/components/layout/Container.js +101 -47
- package/dist/components/layout/Container.js.map +1 -1
- package/dist/components/layout/Container.server.d.ts +1 -1
- package/dist/components/layout/Container.server.d.ts.map +1 -1
- package/dist/components/layout/Container.server.js +67 -19
- package/dist/components/layout/Container.server.js.map +1 -1
- package/dist/components/layout/Flex.d.ts +2 -2
- package/dist/components/layout/Flex.d.ts.map +1 -1
- package/dist/components/layout/Flex.js +124 -55
- package/dist/components/layout/Flex.js.map +1 -1
- package/dist/components/layout/Flex.server.d.ts +1 -1
- package/dist/components/layout/Flex.server.d.ts.map +1 -1
- package/dist/components/layout/Flex.server.js +50 -14
- package/dist/components/layout/Flex.server.js.map +1 -1
- package/dist/components/layout/Grid.d.ts +1 -1
- package/dist/components/layout/Grid.d.ts.map +1 -1
- package/dist/components/layout/Grid.js +93 -44
- package/dist/components/layout/Grid.js.map +1 -1
- package/dist/components/layout/Grid.server.d.ts +1 -1
- package/dist/components/layout/Grid.server.d.ts.map +1 -1
- package/dist/components/layout/Grid.server.js +56 -14
- package/dist/components/layout/Grid.server.js.map +1 -1
- package/dist/components/layout/Section.d.ts +1 -1
- package/dist/components/layout/Section.d.ts.map +1 -1
- package/dist/components/layout/Section.js +147 -64
- package/dist/components/layout/Section.js.map +1 -1
- package/dist/components/layout/Section.server.d.ts +1 -1
- package/dist/components/layout/Section.server.d.ts.map +1 -1
- package/dist/components/layout/Section.server.js +92 -28
- package/dist/components/layout/Section.server.js.map +1 -1
- package/dist/components/layout/Spacer.d.ts +1 -1
- package/dist/components/layout/Spacer.d.ts.map +1 -1
- package/dist/components/layout/Spacer.js +80 -30
- package/dist/components/layout/Spacer.js.map +1 -1
- package/dist/components/layout/Spacer.server.d.ts +1 -1
- package/dist/components/layout/Spacer.server.d.ts.map +1 -1
- package/dist/components/layout/Spacer.server.js +31 -9
- package/dist/components/layout/Spacer.server.js.map +1 -1
- package/dist/components/layout/Template.d.ts +1 -1
- package/dist/components/layout/Template.d.ts.map +1 -1
- package/dist/components/layout/Template.js +58 -30
- package/dist/components/layout/Template.js.map +1 -1
- package/dist/components/layout/Template.server.d.ts +1 -1
- package/dist/components/layout/Template.server.d.ts.map +1 -1
- package/dist/components/layout/Template.server.js +43 -11
- package/dist/components/layout/Template.server.js.map +1 -1
- package/dist/components/layout/index.d.ts +8 -8
- package/dist/components/layout/index.d.ts.map +1 -1
- package/dist/components/layout/index.js +8 -8
- package/dist/components/layout/index.js.map +1 -1
- package/dist/components/media/Image.d.ts +3 -3
- package/dist/components/media/Image.d.ts.map +1 -1
- package/dist/components/media/Image.js +122 -39
- package/dist/components/media/Image.js.map +1 -1
- package/dist/components/media/Image.server.d.ts +3 -3
- package/dist/components/media/Image.server.d.ts.map +1 -1
- package/dist/components/media/Image.server.js +76 -13
- package/dist/components/media/Image.server.js.map +1 -1
- package/dist/components/media/index.d.ts +1 -1
- package/dist/components/media/index.d.ts.map +1 -1
- package/dist/components/media/index.js +2 -2
- package/dist/components/media/index.js.map +1 -1
- package/dist/components/typography/Heading.d.ts +2 -2
- package/dist/components/typography/Heading.d.ts.map +1 -1
- package/dist/components/typography/Heading.js +45 -25
- package/dist/components/typography/Heading.js.map +1 -1
- package/dist/components/typography/Heading.server.d.ts +2 -2
- package/dist/components/typography/Heading.server.d.ts.map +1 -1
- package/dist/components/typography/Heading.server.js +16 -10
- package/dist/components/typography/Heading.server.js.map +1 -1
- package/dist/components/typography/RichText.editor.d.ts +1 -1
- package/dist/components/typography/RichText.editor.d.ts.map +1 -1
- package/dist/components/typography/RichText.editor.js +44 -19
- package/dist/components/typography/RichText.editor.js.map +1 -1
- package/dist/components/typography/RichText.server.d.ts +2 -2
- package/dist/components/typography/RichText.server.d.ts.map +1 -1
- package/dist/components/typography/RichText.server.js +33 -14
- package/dist/components/typography/RichText.server.js.map +1 -1
- package/dist/components/typography/Text.d.ts +2 -2
- package/dist/components/typography/Text.d.ts.map +1 -1
- package/dist/components/typography/Text.js +49 -23
- package/dist/components/typography/Text.js.map +1 -1
- package/dist/components/typography/Text.server.d.ts +2 -2
- package/dist/components/typography/Text.server.d.ts.map +1 -1
- package/dist/components/typography/Text.server.js +21 -8
- package/dist/components/typography/Text.server.js.map +1 -1
- package/dist/components/typography/index.d.ts +4 -4
- package/dist/components/typography/index.d.ts.map +1 -1
- package/dist/components/typography/index.js +5 -5
- package/dist/components/typography/index.js.map +1 -1
- package/dist/config/config.editor.d.ts +3 -3
- package/dist/config/config.editor.d.ts.map +1 -1
- package/dist/config/config.editor.js +119 -54
- package/dist/config/config.editor.js.map +1 -1
- package/dist/config/index.d.ts +4 -4
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +62 -35
- package/dist/config/index.js.map +1 -1
- package/dist/config/merge.d.ts +1 -1
- package/dist/config/merge.d.ts.map +1 -1
- package/dist/config/merge.js +23 -26
- package/dist/config/merge.js.map +1 -1
- package/dist/config/presets.d.ts +4 -4
- package/dist/config/presets.js +195 -75
- package/dist/config/presets.js.map +1 -1
- package/dist/config/types.js +6 -2
- package/dist/config/types.js.map +1 -1
- package/dist/editor/PuckEditor.d.ts +12 -4
- package/dist/editor/PuckEditor.d.ts.map +1 -1
- package/dist/editor/PuckEditor.js +168 -67
- package/dist/editor/PuckEditor.js.map +1 -1
- package/dist/editor/PuckEditorImpl.client.d.ts +4 -4
- package/dist/editor/PuckEditorImpl.client.d.ts.map +1 -1
- package/dist/editor/PuckEditorImpl.client.js +304 -152
- package/dist/editor/PuckEditorImpl.client.js.map +1 -1
- package/dist/editor/components/DarkModeStyles.js +11 -12
- package/dist/editor/components/DarkModeStyles.js.map +1 -1
- package/dist/editor/components/HeaderActions.js +308 -64
- package/dist/editor/components/HeaderActions.js.map +1 -1
- package/dist/editor/components/IframeWrapper.d.ts +1 -1
- package/dist/editor/components/IframeWrapper.d.ts.map +1 -1
- package/dist/editor/components/IframeWrapper.js +82 -58
- package/dist/editor/components/IframeWrapper.js.map +1 -1
- package/dist/editor/components/LoadingState.d.ts +1 -1
- package/dist/editor/components/LoadingState.d.ts.map +1 -1
- package/dist/editor/components/LoadingState.js +17 -3
- package/dist/editor/components/LoadingState.js.map +1 -1
- package/dist/editor/components/PreviewModal.js +234 -78
- package/dist/editor/components/PreviewModal.js.map +1 -1
- package/dist/editor/components/PreviewModeToggle.js +43 -15
- package/dist/editor/components/PreviewModeToggle.js.map +1 -1
- package/dist/editor/components/VersionHistory.js +219 -71
- package/dist/editor/components/VersionHistory.js.map +1 -1
- package/dist/editor/hooks/useDarkMode.js +36 -23
- package/dist/editor/hooks/useDarkMode.js.map +1 -1
- package/dist/editor/hooks/useUnsavedChanges.js +8 -8
- package/dist/editor/hooks/useUnsavedChanges.js.map +1 -1
- package/dist/editor/index.js +5 -6
- package/dist/editor/index.js.map +1 -1
- package/dist/editor/plugins/VersionHistoryPanel.js +236 -75
- package/dist/editor/plugins/VersionHistoryPanel.js.map +1 -1
- package/dist/editor/plugins/index.js +4 -4
- package/dist/editor/plugins/index.js.map +1 -1
- package/dist/editor/plugins/versionHistoryPlugin.js +10 -8
- package/dist/editor/plugins/versionHistoryPlugin.js.map +1 -1
- package/dist/editor/utils/detectPageTree.js +5 -5
- package/dist/editor/utils/detectPageTree.js.map +1 -1
- package/dist/editor/utils/index.js +1 -0
- package/dist/editor/utils/index.js.map +1 -1
- package/dist/editor/utils/injectPageTreeFields.js +13 -9
- package/dist/editor/utils/injectPageTreeFields.js.map +1 -1
- package/dist/endpoints/ai.js +58 -34
- package/dist/endpoints/ai.js.map +1 -1
- package/dist/endpoints/context.js +86 -40
- package/dist/endpoints/context.js.map +1 -1
- package/dist/endpoints/index.js +153 -76
- package/dist/endpoints/index.js.map +1 -1
- package/dist/endpoints/postcss.d.js +5 -0
- package/dist/endpoints/postcss.d.js.map +1 -0
- package/dist/endpoints/prompts.js +81 -39
- package/dist/endpoints/prompts.js.map +1 -1
- package/dist/endpoints/styles.js +34 -36
- package/dist/endpoints/styles.js.map +1 -1
- package/dist/exports/client.js +2 -2
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/rsc.js +2 -2
- package/dist/exports/rsc.js.map +1 -1
- package/dist/fields/AlignmentField.d.ts +1 -1
- package/dist/fields/AlignmentField.d.ts.map +1 -1
- package/dist/fields/AlignmentField.js +93 -30
- package/dist/fields/AlignmentField.js.map +1 -1
- package/dist/fields/AnimationField.d.ts +2 -2
- package/dist/fields/AnimationField.d.ts.map +1 -1
- package/dist/fields/AnimationField.js +558 -84
- package/dist/fields/AnimationField.js.map +1 -1
- package/dist/fields/BackgroundField.d.ts +2 -2
- package/dist/fields/BackgroundField.d.ts.map +1 -1
- package/dist/fields/BackgroundField.js +754 -120
- package/dist/fields/BackgroundField.js.map +1 -1
- package/dist/fields/BorderField.d.ts +2 -2
- package/dist/fields/BorderField.d.ts.map +1 -1
- package/dist/fields/BorderField.js +275 -73
- package/dist/fields/BorderField.js.map +1 -1
- package/dist/fields/ColorPickerField.d.ts +2 -2
- package/dist/fields/ColorPickerField.d.ts.map +1 -1
- package/dist/fields/ColorPickerField.js +210 -68
- package/dist/fields/ColorPickerField.js.map +1 -1
- package/dist/fields/ContentAlignmentField.d.ts +1 -1
- package/dist/fields/ContentAlignmentField.d.ts.map +1 -1
- package/dist/fields/ContentAlignmentField.js +161 -75
- package/dist/fields/ContentAlignmentField.js.map +1 -1
- package/dist/fields/DimensionsField.d.ts +2 -2
- package/dist/fields/DimensionsField.d.ts.map +1 -1
- package/dist/fields/DimensionsField.js +575 -146
- package/dist/fields/DimensionsField.js.map +1 -1
- package/dist/fields/FlexAlignmentField.d.ts +2 -2
- package/dist/fields/FlexAlignmentField.d.ts.map +1 -1
- package/dist/fields/FlexAlignmentField.js +189 -51
- package/dist/fields/FlexAlignmentField.js.map +1 -1
- package/dist/fields/FolderPickerField.d.ts +8 -1
- package/dist/fields/FolderPickerField.d.ts.map +1 -1
- package/dist/fields/FolderPickerField.js +288 -75
- package/dist/fields/FolderPickerField.js.map +1 -1
- package/dist/fields/GradientEditor.d.ts +2 -2
- package/dist/fields/GradientEditor.d.ts.map +1 -1
- package/dist/fields/GradientEditor.js +462 -86
- package/dist/fields/GradientEditor.js.map +1 -1
- package/dist/fields/LockedField.d.ts +15 -2
- package/dist/fields/LockedField.d.ts.map +1 -1
- package/dist/fields/LockedField.js +180 -49
- package/dist/fields/LockedField.js.map +1 -1
- package/dist/fields/MarginField.d.ts +2 -2
- package/dist/fields/MarginField.d.ts.map +1 -1
- package/dist/fields/MarginField.js +144 -46
- package/dist/fields/MarginField.js.map +1 -1
- package/dist/fields/MediaField.d.ts +1 -1
- package/dist/fields/MediaField.d.ts.map +1 -1
- package/dist/fields/MediaField.js +688 -186
- package/dist/fields/MediaField.js.map +1 -1
- package/dist/fields/PaddingField.d.ts +2 -2
- package/dist/fields/PaddingField.d.ts.map +1 -1
- package/dist/fields/PaddingField.js +144 -46
- package/dist/fields/PaddingField.js.map +1 -1
- package/dist/fields/PageSegmentField.d.ts +15 -2
- package/dist/fields/PageSegmentField.d.ts.map +1 -1
- package/dist/fields/PageSegmentField.js +156 -54
- package/dist/fields/PageSegmentField.js.map +1 -1
- package/dist/fields/ResetField.d.ts +1 -1
- package/dist/fields/ResetField.d.ts.map +1 -1
- package/dist/fields/ResetField.js +59 -31
- package/dist/fields/ResetField.js.map +1 -1
- package/dist/fields/ResponsiveField.d.ts +1 -1
- package/dist/fields/ResponsiveField.d.ts.map +1 -1
- package/dist/fields/ResponsiveField.js +233 -90
- package/dist/fields/ResponsiveField.js.map +1 -1
- package/dist/fields/ResponsiveVisibilityField.d.ts +2 -2
- package/dist/fields/ResponsiveVisibilityField.d.ts.map +1 -1
- package/dist/fields/ResponsiveVisibilityField.js +119 -36
- package/dist/fields/ResponsiveVisibilityField.js.map +1 -1
- package/dist/fields/SizeField.d.ts +3 -3
- package/dist/fields/SizeField.d.ts.map +1 -1
- package/dist/fields/SizeField.js +226 -52
- package/dist/fields/SizeField.js.map +1 -1
- package/dist/fields/SlugPreviewField.d.ts +8 -1
- package/dist/fields/SlugPreviewField.d.ts.map +1 -1
- package/dist/fields/SlugPreviewField.js +65 -16
- package/dist/fields/SlugPreviewField.js.map +1 -1
- package/dist/fields/TemplateField.d.ts +1 -1
- package/dist/fields/TemplateField.d.ts.map +1 -1
- package/dist/fields/TemplateField.js +362 -120
- package/dist/fields/TemplateField.js.map +1 -1
- package/dist/fields/TransformField.d.ts +2 -2
- package/dist/fields/TransformField.d.ts.map +1 -1
- package/dist/fields/TransformField.js +517 -81
- package/dist/fields/TransformField.js.map +1 -1
- package/dist/fields/VerticalAlignmentField.d.ts +1 -1
- package/dist/fields/VerticalAlignmentField.d.ts.map +1 -1
- package/dist/fields/VerticalAlignmentField.js +93 -30
- package/dist/fields/VerticalAlignmentField.js.map +1 -1
- package/dist/fields/WidthField.d.ts +2 -2
- package/dist/fields/WidthField.d.ts.map +1 -1
- package/dist/fields/WidthField.js +278 -81
- package/dist/fields/WidthField.js.map +1 -1
- package/dist/fields/index.d.ts +41 -41
- package/dist/fields/index.d.ts.map +1 -1
- package/dist/fields/index.js +37 -43
- package/dist/fields/index.js.map +1 -1
- package/dist/fields/richtext/controls/ColorPickerControl.d.ts +13 -2
- package/dist/fields/richtext/controls/ColorPickerControl.d.ts.map +1 -1
- package/dist/fields/richtext/controls/ColorPickerControl.js +212 -47
- package/dist/fields/richtext/controls/ColorPickerControl.js.map +1 -1
- package/dist/fields/richtext/controls/DropdownPortal.d.ts +2 -2
- package/dist/fields/richtext/controls/DropdownPortal.d.ts.map +1 -1
- package/dist/fields/richtext/controls/DropdownPortal.js +36 -4
- package/dist/fields/richtext/controls/DropdownPortal.js.map +1 -1
- package/dist/fields/richtext/controls/FontSizeControl.d.ts +9 -1
- package/dist/fields/richtext/controls/FontSizeControl.d.ts.map +1 -1
- package/dist/fields/richtext/controls/FontSizeControl.js +109 -24
- package/dist/fields/richtext/controls/FontSizeControl.js.map +1 -1
- package/dist/fields/richtext/controls/HighlightControl.d.ts +12 -1
- package/dist/fields/richtext/controls/HighlightControl.d.ts.map +1 -1
- package/dist/fields/richtext/controls/HighlightControl.js +54 -17
- package/dist/fields/richtext/controls/HighlightControl.js.map +1 -1
- package/dist/fields/richtext/controls/index.d.ts +5 -5
- package/dist/fields/richtext/controls/index.d.ts.map +1 -1
- package/dist/fields/richtext/controls/index.js +8 -11
- package/dist/fields/richtext/controls/index.js.map +1 -1
- package/dist/fields/richtext/controls/shared.js +108 -63
- package/dist/fields/richtext/controls/shared.js.map +1 -1
- package/dist/fields/richtext/createRichTextField.d.ts +18 -4
- package/dist/fields/richtext/createRichTextField.d.ts.map +1 -1
- package/dist/fields/richtext/createRichTextField.js +113 -26
- package/dist/fields/richtext/createRichTextField.js.map +1 -1
- package/dist/fields/richtext/extensions/FontSize.js +26 -20
- package/dist/fields/richtext/extensions/FontSize.js.map +1 -1
- package/dist/fields/richtext/extensions/index.d.ts +1 -1
- package/dist/fields/richtext/extensions/index.d.ts.map +1 -1
- package/dist/fields/richtext/extensions/index.js +2 -2
- package/dist/fields/richtext/extensions/index.js.map +1 -1
- package/dist/fields/richtext/index.d.ts +6 -6
- package/dist/fields/richtext/index.d.ts.map +1 -1
- package/dist/fields/richtext/index.js +8 -8
- package/dist/fields/richtext/index.js.map +1 -1
- package/dist/fields/shared.d.ts +1 -1
- package/dist/fields/shared.d.ts.map +1 -1
- package/dist/fields/shared.js +915 -478
- package/dist/fields/shared.js.map +1 -1
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +3 -3
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useResponsiveStyles.d.ts +1 -1
- package/dist/hooks/useResponsiveStyles.d.ts.map +1 -1
- package/dist/hooks/useResponsiveStyles.js +36 -32
- package/dist/hooks/useResponsiveStyles.js.map +1 -1
- package/dist/hooks/useScrollAnimation.js +26 -24
- package/dist/hooks/useScrollAnimation.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/layouts/LayoutWrapper.d.ts +3 -3
- package/dist/layouts/LayoutWrapper.d.ts.map +1 -1
- package/dist/layouts/LayoutWrapper.js +115 -51
- package/dist/layouts/LayoutWrapper.js.map +1 -1
- package/dist/layouts/defaults.d.ts +1 -1
- package/dist/layouts/defaults.d.ts.map +1 -1
- package/dist/layouts/defaults.js +23 -31
- package/dist/layouts/defaults.js.map +1 -1
- package/dist/layouts/index.d.ts +4 -4
- package/dist/layouts/index.d.ts.map +1 -1
- package/dist/layouts/index.js +5 -4
- package/dist/layouts/index.js.map +1 -1
- package/dist/layouts/types.js +4 -2
- package/dist/layouts/types.js.map +1 -1
- package/dist/layouts/utils.d.ts +1 -1
- package/dist/layouts/utils.d.ts.map +1 -1
- package/dist/layouts/utils.js +32 -40
- package/dist/layouts/utils.js.map +1 -1
- package/dist/next/index.js +31 -34
- package/dist/next/index.js.map +1 -1
- package/dist/plugin/collections/Pages.d.ts +2 -2
- package/dist/plugin/collections/Pages.d.ts.map +1 -1
- package/dist/plugin/collections/Pages.js +46 -43
- package/dist/plugin/collections/Pages.js.map +1 -1
- package/dist/plugin/fields/index.d.ts +3 -3
- package/dist/plugin/fields/index.d.ts.map +1 -1
- package/dist/plugin/fields/index.js +100 -78
- package/dist/plugin/fields/index.js.map +1 -1
- package/dist/plugin/fields/types.d.ts +1 -1
- package/dist/plugin/fields/types.d.ts.map +1 -1
- package/dist/plugin/fields/types.js +26 -2
- package/dist/plugin/fields/types.js.map +1 -1
- package/dist/plugin/hooks/index.d.ts +1 -1
- package/dist/plugin/hooks/index.d.ts.map +1 -1
- package/dist/plugin/hooks/index.js +2 -2
- package/dist/plugin/hooks/index.js.map +1 -1
- package/dist/plugin/hooks/isHomepageUnique.js +28 -19
- package/dist/plugin/hooks/isHomepageUnique.js.map +1 -1
- package/dist/plugin/index.d.ts +8 -8
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +192 -188
- package/dist/plugin/index.js.map +1 -1
- package/dist/render/HybridPageRenderer.d.ts +2 -2
- package/dist/render/HybridPageRenderer.d.ts.map +1 -1
- package/dist/render/HybridPageRenderer.js +58 -10
- package/dist/render/HybridPageRenderer.js.map +1 -1
- package/dist/render/PageRenderer.d.ts +2 -2
- package/dist/render/PageRenderer.d.ts.map +1 -1
- package/dist/render/PageRenderer.js +31 -14
- package/dist/render/PageRenderer.js.map +1 -1
- package/dist/render/PuckEditor.client.d.ts +1 -1
- package/dist/render/PuckEditor.client.d.ts.map +1 -1
- package/dist/render/PuckEditor.client.js +33 -16
- package/dist/render/PuckEditor.client.js.map +1 -1
- package/dist/render/index.d.ts +5 -5
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +5 -6
- package/dist/render/index.js.map +1 -1
- package/dist/styles/puck-dark-mode.css +101 -0
- package/dist/theme/context.d.ts +2 -2
- package/dist/theme/context.d.ts.map +1 -1
- package/dist/theme/context.js +21 -18
- package/dist/theme/context.js.map +1 -1
- package/dist/theme/defaults.d.ts +1 -1
- package/dist/theme/defaults.d.ts.map +1 -1
- package/dist/theme/defaults.js +83 -37
- package/dist/theme/defaults.js.map +1 -1
- package/dist/theme/example.d.ts +1 -1
- package/dist/theme/example.d.ts.map +1 -1
- package/dist/theme/example.js +68 -30
- package/dist/theme/example.js.map +1 -1
- package/dist/theme/index.d.ts +5 -5
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +6 -5
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/types.js +6 -2
- package/dist/theme/types.js.map +1 -1
- package/dist/theme/utils.d.ts +1 -1
- package/dist/theme/utils.d.ts.map +1 -1
- package/dist/theme/utils.js +24 -25
- package/dist/theme/utils.js.map +1 -1
- package/dist/types/index.d.ts +42 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +13 -22
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/migration.d.ts +1 -1
- package/dist/utils/migration.d.ts.map +1 -1
- package/dist/utils/migration.js +43 -49
- package/dist/utils/migration.js.map +1 -1
- package/dist/utils/validation.d.ts +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +36 -43
- package/dist/utils/validation.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -1
- package/dist/version.js.map +1 -1
- package/dist/views/PuckConfigContext.d.ts +1 -1
- package/dist/views/PuckConfigContext.d.ts.map +1 -1
- package/dist/views/PuckConfigContext.js +25 -10
- package/dist/views/PuckConfigContext.js.map +1 -1
- package/dist/views/PuckEditorView.d.ts +1 -1
- package/dist/views/PuckEditorView.d.ts.map +1 -1
- package/dist/views/PuckEditorView.js +137 -41
- package/dist/views/PuckEditorView.js.map +1 -1
- package/dist/views/index.js +2 -2
- package/dist/views/index.js.map +1 -1
- package/package.json +62 -42
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NextResponse } from 'next/server';
|
|
2
2
|
import { getPayload } from 'payload';
|
|
3
|
-
import { mapRootPropsToPayloadFields, deepMerge } from './utils/mapRootProps';
|
|
3
|
+
import { mapRootPropsToPayloadFields, deepMerge } from './utils/mapRootProps.js';
|
|
4
4
|
/**
|
|
5
5
|
* Create API route handlers for /api/puck/pages/[id]
|
|
6
6
|
*
|
|
@@ -31,36 +31,48 @@ import { mapRootPropsToPayloadFields, deepMerge } from './utils/mapRootProps';
|
|
|
31
31
|
* ],
|
|
32
32
|
* })
|
|
33
33
|
* ```
|
|
34
|
-
*/
|
|
35
|
-
|
|
36
|
-
const { collection = 'pages', payloadConfig, auth, rootPropsMapping, onError, } = routeConfig;
|
|
34
|
+
*/ export function createPuckApiRoutesWithId(routeConfig) {
|
|
35
|
+
const { collection = 'pages', payloadConfig, auth, rootPropsMapping, onError } = routeConfig;
|
|
37
36
|
/**
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
async function GET(request, context) {
|
|
37
|
+
* GET /api/puck/pages/[id]
|
|
38
|
+
* Fetch a single page by ID
|
|
39
|
+
*/ async function GET(request, context) {
|
|
42
40
|
try {
|
|
43
41
|
// Get page ID from params
|
|
44
42
|
const params = await context.params;
|
|
45
43
|
const id = params.id;
|
|
46
44
|
if (!id) {
|
|
47
|
-
return NextResponse.json({
|
|
45
|
+
return NextResponse.json({
|
|
46
|
+
error: 'Page ID is required'
|
|
47
|
+
}, {
|
|
48
|
+
status: 400
|
|
49
|
+
});
|
|
48
50
|
}
|
|
49
51
|
// Authenticate
|
|
50
52
|
const authResult = await auth.authenticate(request);
|
|
51
53
|
if (!authResult.authenticated || !authResult.user) {
|
|
52
|
-
return NextResponse.json({
|
|
54
|
+
return NextResponse.json({
|
|
55
|
+
error: authResult.error || 'Unauthorized'
|
|
56
|
+
}, {
|
|
57
|
+
status: 401
|
|
58
|
+
});
|
|
53
59
|
}
|
|
54
60
|
// Check view permission
|
|
55
61
|
if (auth.canView) {
|
|
56
62
|
const permission = await auth.canView(authResult.user, id);
|
|
57
63
|
if (!permission.allowed) {
|
|
58
|
-
return NextResponse.json({
|
|
64
|
+
return NextResponse.json({
|
|
65
|
+
error: permission.error || 'Forbidden'
|
|
66
|
+
}, {
|
|
67
|
+
status: 403
|
|
68
|
+
});
|
|
59
69
|
}
|
|
60
70
|
}
|
|
61
71
|
// Get Payload instance with provided config
|
|
62
72
|
const config = await payloadConfig;
|
|
63
|
-
const payload = await getPayload({
|
|
73
|
+
const payload = await getPayload({
|
|
74
|
+
config
|
|
75
|
+
});
|
|
64
76
|
// Check if caller wants draft or published version
|
|
65
77
|
// Default to draft=true for editor use (load latest draft)
|
|
66
78
|
const url = new URL(request.url);
|
|
@@ -68,57 +80,81 @@ export function createPuckApiRoutesWithId(routeConfig) {
|
|
|
68
80
|
const page = await payload.findByID({
|
|
69
81
|
collection,
|
|
70
82
|
id,
|
|
71
|
-
draft: wantsDraft
|
|
83
|
+
draft: wantsDraft
|
|
72
84
|
});
|
|
73
85
|
if (!page) {
|
|
74
|
-
return NextResponse.json({
|
|
86
|
+
return NextResponse.json({
|
|
87
|
+
error: 'Page not found'
|
|
88
|
+
}, {
|
|
89
|
+
status: 404
|
|
90
|
+
});
|
|
75
91
|
}
|
|
76
|
-
return NextResponse.json({
|
|
77
|
-
|
|
78
|
-
|
|
92
|
+
return NextResponse.json({
|
|
93
|
+
doc: page
|
|
94
|
+
});
|
|
95
|
+
} catch (error) {
|
|
79
96
|
const params = await context.params;
|
|
80
97
|
if (onError) {
|
|
81
|
-
onError(error, {
|
|
98
|
+
onError(error, {
|
|
99
|
+
operation: 'read',
|
|
100
|
+
request,
|
|
101
|
+
pageId: params.id
|
|
102
|
+
});
|
|
82
103
|
}
|
|
83
104
|
console.error('Error fetching page:', error);
|
|
84
|
-
return NextResponse.json({
|
|
105
|
+
return NextResponse.json({
|
|
106
|
+
error: 'Failed to fetch page'
|
|
107
|
+
}, {
|
|
108
|
+
status: 500
|
|
109
|
+
});
|
|
85
110
|
}
|
|
86
111
|
}
|
|
87
112
|
/**
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
async function PATCH(request, context) {
|
|
113
|
+
* PATCH /api/puck/pages/[id]
|
|
114
|
+
* Update a page with Puck data
|
|
115
|
+
*
|
|
116
|
+
* Request Body:
|
|
117
|
+
* - puckData?: PuckData - Full Puck editor data
|
|
118
|
+
* - title?: string - Override title (also synced from root.props)
|
|
119
|
+
* - slug?: string - Override slug (also synced from root.props)
|
|
120
|
+
* - status?: 'draft' | 'published' - Publishing status
|
|
121
|
+
*
|
|
122
|
+
* Root props from puckData are automatically synced to Payload fields
|
|
123
|
+
* based on the configured mappings.
|
|
124
|
+
*/ async function PATCH(request, context) {
|
|
101
125
|
try {
|
|
102
126
|
// Get page ID from params
|
|
103
127
|
const params = await context.params;
|
|
104
128
|
const id = params.id;
|
|
105
129
|
if (!id) {
|
|
106
|
-
return NextResponse.json({
|
|
130
|
+
return NextResponse.json({
|
|
131
|
+
error: 'Page ID is required'
|
|
132
|
+
}, {
|
|
133
|
+
status: 400
|
|
134
|
+
});
|
|
107
135
|
}
|
|
108
136
|
// Authenticate
|
|
109
137
|
const authResult = await auth.authenticate(request);
|
|
110
138
|
if (!authResult.authenticated || !authResult.user) {
|
|
111
|
-
return NextResponse.json({
|
|
139
|
+
return NextResponse.json({
|
|
140
|
+
error: authResult.error || 'Unauthorized'
|
|
141
|
+
}, {
|
|
142
|
+
status: 401
|
|
143
|
+
});
|
|
112
144
|
}
|
|
113
145
|
// Check edit permission
|
|
114
146
|
if (auth.canEdit) {
|
|
115
147
|
const permission = await auth.canEdit(authResult.user, id);
|
|
116
148
|
if (!permission.allowed) {
|
|
117
|
-
return NextResponse.json({
|
|
149
|
+
return NextResponse.json({
|
|
150
|
+
error: permission.error || 'Forbidden'
|
|
151
|
+
}, {
|
|
152
|
+
status: 403
|
|
153
|
+
});
|
|
118
154
|
}
|
|
119
155
|
}
|
|
120
156
|
// Parse request body
|
|
121
|
-
const body =
|
|
157
|
+
const body = await request.json();
|
|
122
158
|
const { puckData, title, slug, status, draft, isHomepage, swapHomepage, folder, pageSegment } = body;
|
|
123
159
|
// Check publish permission only if explicitly publishing
|
|
124
160
|
if (status === 'published') {
|
|
@@ -126,13 +162,19 @@ export function createPuckApiRoutesWithId(routeConfig) {
|
|
|
126
162
|
if (canPublish) {
|
|
127
163
|
const permission = await canPublish(authResult.user, id);
|
|
128
164
|
if (!permission.allowed) {
|
|
129
|
-
return NextResponse.json({
|
|
165
|
+
return NextResponse.json({
|
|
166
|
+
error: permission.error || 'Not authorized to publish pages'
|
|
167
|
+
}, {
|
|
168
|
+
status: 403
|
|
169
|
+
});
|
|
130
170
|
}
|
|
131
171
|
}
|
|
132
172
|
}
|
|
133
173
|
// Get Payload instance with provided config
|
|
134
174
|
const config = await payloadConfig;
|
|
135
|
-
const payload = await getPayload({
|
|
175
|
+
const payload = await getPayload({
|
|
176
|
+
config
|
|
177
|
+
});
|
|
136
178
|
// Handle homepage swap - if swapHomepage is true and isHomepage is being set,
|
|
137
179
|
// unset the existing homepage first
|
|
138
180
|
if (swapHomepage && isHomepage === true) {
|
|
@@ -140,20 +182,32 @@ export function createPuckApiRoutesWithId(routeConfig) {
|
|
|
140
182
|
collection,
|
|
141
183
|
where: {
|
|
142
184
|
and: [
|
|
143
|
-
{
|
|
144
|
-
|
|
145
|
-
|
|
185
|
+
{
|
|
186
|
+
isHomepage: {
|
|
187
|
+
equals: true
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
id: {
|
|
192
|
+
not_equals: id
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
]
|
|
146
196
|
},
|
|
147
197
|
limit: 1,
|
|
148
|
-
depth: 0
|
|
198
|
+
depth: 0
|
|
149
199
|
});
|
|
150
200
|
if (existingHomepage.docs.length > 0) {
|
|
151
201
|
await payload.update({
|
|
152
202
|
collection,
|
|
153
203
|
id: existingHomepage.docs[0].id,
|
|
154
|
-
data: {
|
|
204
|
+
data: {
|
|
205
|
+
isHomepage: false
|
|
206
|
+
},
|
|
155
207
|
// Pass context to skip the uniqueness hook on this update
|
|
156
|
-
context: {
|
|
208
|
+
context: {
|
|
209
|
+
skipIsHomepageHook: true
|
|
210
|
+
}
|
|
157
211
|
});
|
|
158
212
|
}
|
|
159
213
|
}
|
|
@@ -161,7 +215,7 @@ export function createPuckApiRoutesWithId(routeConfig) {
|
|
|
161
215
|
const rootProps = puckData?.root?.props || {};
|
|
162
216
|
// Build update data starting with editorVersion
|
|
163
217
|
const updateData = {
|
|
164
|
-
editorVersion: 'puck'
|
|
218
|
+
editorVersion: 'puck'
|
|
165
219
|
};
|
|
166
220
|
// Add puckData if provided
|
|
167
221
|
if (puckData) {
|
|
@@ -200,7 +254,7 @@ export function createPuckApiRoutesWithId(routeConfig) {
|
|
|
200
254
|
const updateOptions = {
|
|
201
255
|
collection,
|
|
202
256
|
id,
|
|
203
|
-
data: updateData
|
|
257
|
+
data: updateData
|
|
204
258
|
};
|
|
205
259
|
// Only pass draft: true when explicitly saving as draft (not publishing)
|
|
206
260
|
// When publishing (_status: 'published'), we omit the draft option entirely
|
|
@@ -209,12 +263,17 @@ export function createPuckApiRoutesWithId(routeConfig) {
|
|
|
209
263
|
updateOptions.draft = true;
|
|
210
264
|
}
|
|
211
265
|
const updatedPage = await payload.update(updateOptions);
|
|
212
|
-
return NextResponse.json({
|
|
213
|
-
|
|
214
|
-
|
|
266
|
+
return NextResponse.json({
|
|
267
|
+
doc: updatedPage
|
|
268
|
+
});
|
|
269
|
+
} catch (error) {
|
|
215
270
|
const params = await context.params;
|
|
216
271
|
if (onError) {
|
|
217
|
-
onError(error, {
|
|
272
|
+
onError(error, {
|
|
273
|
+
operation: 'update',
|
|
274
|
+
request,
|
|
275
|
+
pageId: params.id
|
|
276
|
+
});
|
|
218
277
|
}
|
|
219
278
|
console.error('Error updating page:', error);
|
|
220
279
|
// Handle Payload validation errors gracefully
|
|
@@ -222,65 +281,100 @@ export function createPuckApiRoutesWithId(routeConfig) {
|
|
|
222
281
|
const validationError = error;
|
|
223
282
|
const fieldErrors = validationError.data?.errors || [];
|
|
224
283
|
// Check for common validation issues and provide friendly messages
|
|
225
|
-
const slugError = fieldErrors.find((e)
|
|
284
|
+
const slugError = fieldErrors.find((e)=>e.field === 'slug');
|
|
226
285
|
if (slugError) {
|
|
227
286
|
return NextResponse.json({
|
|
228
287
|
error: 'A page with this slug already exists. Please choose a different slug.',
|
|
229
288
|
field: 'slug',
|
|
230
|
-
details: fieldErrors
|
|
231
|
-
}, {
|
|
289
|
+
details: fieldErrors
|
|
290
|
+
}, {
|
|
291
|
+
status: 400
|
|
292
|
+
});
|
|
232
293
|
}
|
|
233
294
|
// Generic validation error
|
|
234
295
|
return NextResponse.json({
|
|
235
|
-
error: `Validation failed: ${fieldErrors.map((e)
|
|
236
|
-
details: fieldErrors
|
|
237
|
-
}, {
|
|
296
|
+
error: `Validation failed: ${fieldErrors.map((e)=>e.message || e.field).join(', ')}`,
|
|
297
|
+
details: fieldErrors
|
|
298
|
+
}, {
|
|
299
|
+
status: 400
|
|
300
|
+
});
|
|
238
301
|
}
|
|
239
|
-
return NextResponse.json({
|
|
302
|
+
return NextResponse.json({
|
|
303
|
+
error: 'Failed to update page'
|
|
304
|
+
}, {
|
|
305
|
+
status: 500
|
|
306
|
+
});
|
|
240
307
|
}
|
|
241
308
|
}
|
|
242
309
|
/**
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
async function DELETE(request, context) {
|
|
310
|
+
* DELETE /api/puck/pages/[id]
|
|
311
|
+
* Delete a page by ID
|
|
312
|
+
*/ async function DELETE(request, context) {
|
|
247
313
|
try {
|
|
248
314
|
// Get page ID from params
|
|
249
315
|
const params = await context.params;
|
|
250
316
|
const id = params.id;
|
|
251
317
|
if (!id) {
|
|
252
|
-
return NextResponse.json({
|
|
318
|
+
return NextResponse.json({
|
|
319
|
+
error: 'Page ID is required'
|
|
320
|
+
}, {
|
|
321
|
+
status: 400
|
|
322
|
+
});
|
|
253
323
|
}
|
|
254
324
|
// Authenticate
|
|
255
325
|
const authResult = await auth.authenticate(request);
|
|
256
326
|
if (!authResult.authenticated || !authResult.user) {
|
|
257
|
-
return NextResponse.json({
|
|
327
|
+
return NextResponse.json({
|
|
328
|
+
error: authResult.error || 'Unauthorized'
|
|
329
|
+
}, {
|
|
330
|
+
status: 401
|
|
331
|
+
});
|
|
258
332
|
}
|
|
259
333
|
// Check delete permission
|
|
260
334
|
if (auth.canDelete) {
|
|
261
335
|
const permission = await auth.canDelete(authResult.user, id);
|
|
262
336
|
if (!permission.allowed) {
|
|
263
|
-
return NextResponse.json({
|
|
337
|
+
return NextResponse.json({
|
|
338
|
+
error: permission.error || 'Forbidden'
|
|
339
|
+
}, {
|
|
340
|
+
status: 403
|
|
341
|
+
});
|
|
264
342
|
}
|
|
265
343
|
}
|
|
266
344
|
// Get Payload instance with provided config
|
|
267
345
|
const config = await payloadConfig;
|
|
268
|
-
const payload = await getPayload({
|
|
346
|
+
const payload = await getPayload({
|
|
347
|
+
config
|
|
348
|
+
});
|
|
269
349
|
await payload.delete({
|
|
270
350
|
collection,
|
|
271
|
-
id
|
|
351
|
+
id
|
|
272
352
|
});
|
|
273
|
-
return NextResponse.json({
|
|
274
|
-
|
|
275
|
-
|
|
353
|
+
return NextResponse.json({
|
|
354
|
+
success: true
|
|
355
|
+
});
|
|
356
|
+
} catch (error) {
|
|
276
357
|
const params = await context.params;
|
|
277
358
|
if (onError) {
|
|
278
|
-
onError(error, {
|
|
359
|
+
onError(error, {
|
|
360
|
+
operation: 'delete',
|
|
361
|
+
request,
|
|
362
|
+
pageId: params.id
|
|
363
|
+
});
|
|
279
364
|
}
|
|
280
365
|
console.error('Error deleting page:', error);
|
|
281
|
-
return NextResponse.json({
|
|
366
|
+
return NextResponse.json({
|
|
367
|
+
error: 'Failed to delete page'
|
|
368
|
+
}, {
|
|
369
|
+
status: 500
|
|
370
|
+
});
|
|
282
371
|
}
|
|
283
372
|
}
|
|
284
|
-
return {
|
|
373
|
+
return {
|
|
374
|
+
GET,
|
|
375
|
+
PATCH,
|
|
376
|
+
DELETE
|
|
377
|
+
};
|
|
285
378
|
}
|
|
379
|
+
|
|
286
380
|
//# sourceMappingURL=createPuckApiRoutesWithId.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPuckApiRoutesWithId.js","sourceRoot":"","sources":["../../src/api/createPuckApiRoutesWithId.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/api/createPuckApiRoutesWithId.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server'\nimport { getPayload } from 'payload'\nimport type {\n PuckApiRoutesConfig,\n PuckApiRouteWithIdHandlers,\n UpdatePageBody,\n RouteHandlerWithIdContext,\n} from './types.js'\nimport { mapRootPropsToPayloadFields, deepMerge } from './utils/mapRootProps.js'\n\n/**\n * Create API route handlers for /api/puck/pages/[id]\n *\n * Provides GET (fetch page), PATCH (update page), and DELETE (delete page)\n * handlers with configurable authentication and authorization.\n *\n * @example\n * ```typescript\n * // src/app/api/puck/pages/[id]/route.ts\n * import { createPuckApiRoutesWithId } from '@delmaredigital/payload-puck/api'\n * import config from '@payload-config'\n *\n * export const { GET, PATCH, DELETE } = createPuckApiRoutesWithId({\n * collection: 'pages',\n * payloadConfig: config,\n * auth: {\n * authenticate: async (request) => {\n * const session = await getSession(request)\n * if (!session?.user) return { authenticated: false }\n * return { authenticated: true, user: session.user }\n * },\n * canPublish: async (user) => {\n * return { allowed: user.role === 'admin' }\n * },\n * },\n * rootPropsMapping: [\n * { from: 'customField', to: 'customPayloadField' },\n * ],\n * })\n * ```\n */\nexport function createPuckApiRoutesWithId(\n routeConfig: PuckApiRoutesConfig\n): PuckApiRouteWithIdHandlers {\n const {\n collection = 'pages',\n payloadConfig,\n auth,\n rootPropsMapping,\n onError,\n } = routeConfig\n\n /**\n * GET /api/puck/pages/[id]\n * Fetch a single page by ID\n */\n async function GET(\n request: NextRequest,\n context: RouteHandlerWithIdContext\n ): Promise<Response> {\n try {\n // Get page ID from params\n const params = await context.params\n const id = params.id\n\n if (!id) {\n return NextResponse.json(\n { error: 'Page ID is required' },\n { status: 400 }\n )\n }\n\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated || !authResult.user) {\n return NextResponse.json(\n { error: authResult.error || 'Unauthorized' },\n { status: 401 }\n )\n }\n\n // Check view permission\n if (auth.canView) {\n const permission = await auth.canView(authResult.user, id)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n // Check if caller wants draft or published version\n // Default to draft=true for editor use (load latest draft)\n const url = new URL(request.url)\n const wantsDraft = url.searchParams.get('draft') !== 'false'\n\n const page = await payload.findByID({\n collection,\n id,\n draft: wantsDraft, // Load draft version by default for editing\n })\n\n if (!page) {\n return NextResponse.json({ error: 'Page not found' }, { status: 404 })\n }\n\n return NextResponse.json({ doc: page })\n } catch (error) {\n const params = await context.params\n if (onError) {\n onError(error, { operation: 'read', request, pageId: params.id })\n }\n console.error('Error fetching page:', error)\n return NextResponse.json(\n { error: 'Failed to fetch page' },\n { status: 500 }\n )\n }\n }\n\n /**\n * PATCH /api/puck/pages/[id]\n * Update a page with Puck data\n *\n * Request Body:\n * - puckData?: PuckData - Full Puck editor data\n * - title?: string - Override title (also synced from root.props)\n * - slug?: string - Override slug (also synced from root.props)\n * - status?: 'draft' | 'published' - Publishing status\n *\n * Root props from puckData are automatically synced to Payload fields\n * based on the configured mappings.\n */\n async function PATCH(\n request: NextRequest,\n context: RouteHandlerWithIdContext\n ): Promise<Response> {\n try {\n // Get page ID from params\n const params = await context.params\n const id = params.id\n\n if (!id) {\n return NextResponse.json(\n { error: 'Page ID is required' },\n { status: 400 }\n )\n }\n\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated || !authResult.user) {\n return NextResponse.json(\n { error: authResult.error || 'Unauthorized' },\n { status: 401 }\n )\n }\n\n // Check edit permission\n if (auth.canEdit) {\n const permission = await auth.canEdit(authResult.user, id)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Parse request body\n const body = (await request.json()) as UpdatePageBody\n const { puckData, title, slug, status, draft, isHomepage, swapHomepage, folder, pageSegment } = body\n\n // Check publish permission only if explicitly publishing\n if (status === 'published') {\n const canPublish = auth.canPublish || auth.canEdit\n if (canPublish) {\n const permission = await canPublish(authResult.user, id)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Not authorized to publish pages' },\n { status: 403 }\n )\n }\n }\n }\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n // Handle homepage swap - if swapHomepage is true and isHomepage is being set,\n // unset the existing homepage first\n if (swapHomepage && isHomepage === true) {\n const existingHomepage = await payload.find({\n collection,\n where: {\n and: [\n { isHomepage: { equals: true } },\n { id: { not_equals: id } },\n ],\n },\n limit: 1,\n depth: 0,\n })\n\n if (existingHomepage.docs.length > 0) {\n await payload.update({\n collection,\n id: existingHomepage.docs[0].id as string,\n data: { isHomepage: false },\n // Pass context to skip the uniqueness hook on this update\n context: { skipIsHomepageHook: true },\n })\n }\n }\n\n // Extract root props from puckData for syncing to Payload fields\n const rootProps =\n (puckData?.root as { props?: Record<string, unknown> })?.props || {}\n\n // Build update data starting with editorVersion\n const updateData: Record<string, unknown> = {\n editorVersion: 'puck',\n }\n\n // Add puckData if provided\n if (puckData) {\n updateData.puckData = puckData\n }\n\n // Map root.props to Payload fields\n const mappedFields = mapRootPropsToPayloadFields(rootProps, rootPropsMapping)\n\n // Merge mapped fields into update data (deep merge for nested objects)\n deepMerge(updateData, mappedFields)\n\n // Explicit title/slug override the mapped values\n if (title !== undefined) {\n updateData.title = title\n }\n if (slug !== undefined) {\n updateData.slug = slug\n }\n\n // Homepage flag: explicit isHomepage overrides the mapped value\n if (isHomepage !== undefined) {\n updateData.isHomepage = isHomepage\n }\n\n // Page-tree integration: explicit folder/pageSegment override the mapped values\n if (folder !== undefined) {\n updateData.folder = folder\n }\n if (pageSegment !== undefined) {\n updateData.pageSegment = pageSegment\n }\n\n // Set status if provided (for explicit publish)\n if (status) {\n updateData._status = status\n }\n\n // Call payload.update with draft parameter for Payload's versions.drafts system\n // When _status is set to 'published', the document is published regardless of draft param\n // When draft=true and no _status set, saves without publishing\n // When draft=false or omitted, updates the main collection\n const updateOptions: {\n collection: string\n id: string\n data: Record<string, unknown>\n draft?: boolean\n } = {\n collection,\n id,\n data: updateData,\n }\n\n // Only pass draft: true when explicitly saving as draft (not publishing)\n // When publishing (_status: 'published'), we omit the draft option entirely\n // to let Payload handle it correctly\n if (draft === true && status !== 'published') {\n updateOptions.draft = true\n }\n\n const updatedPage = await payload.update(updateOptions)\n\n return NextResponse.json({ doc: updatedPage })\n } catch (error) {\n const params = await context.params\n if (onError) {\n onError(error, { operation: 'update', request, pageId: params.id })\n }\n console.error('Error updating page:', error)\n\n // Handle Payload validation errors gracefully\n if (error instanceof Error && error.name === 'ValidationError') {\n const validationError = error as Error & {\n data?: { errors?: Array<{ field: string; message: string }> }\n }\n const fieldErrors = validationError.data?.errors || []\n\n // Check for common validation issues and provide friendly messages\n const slugError = fieldErrors.find((e) => e.field === 'slug')\n if (slugError) {\n return NextResponse.json(\n {\n error: 'A page with this slug already exists. Please choose a different slug.',\n field: 'slug',\n details: fieldErrors,\n },\n { status: 400 }\n )\n }\n\n // Generic validation error\n return NextResponse.json(\n {\n error: `Validation failed: ${fieldErrors.map((e) => e.message || e.field).join(', ')}`,\n details: fieldErrors,\n },\n { status: 400 }\n )\n }\n\n return NextResponse.json(\n { error: 'Failed to update page' },\n { status: 500 }\n )\n }\n }\n\n /**\n * DELETE /api/puck/pages/[id]\n * Delete a page by ID\n */\n async function DELETE(\n request: NextRequest,\n context: RouteHandlerWithIdContext\n ): Promise<Response> {\n try {\n // Get page ID from params\n const params = await context.params\n const id = params.id\n\n if (!id) {\n return NextResponse.json(\n { error: 'Page ID is required' },\n { status: 400 }\n )\n }\n\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated || !authResult.user) {\n return NextResponse.json(\n { error: authResult.error || 'Unauthorized' },\n { status: 401 }\n )\n }\n\n // Check delete permission\n if (auth.canDelete) {\n const permission = await auth.canDelete(authResult.user, id)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n await payload.delete({\n collection,\n id,\n })\n\n return NextResponse.json({ success: true })\n } catch (error) {\n const params = await context.params\n if (onError) {\n onError(error, { operation: 'delete', request, pageId: params.id })\n }\n console.error('Error deleting page:', error)\n return NextResponse.json(\n { error: 'Failed to delete page' },\n { status: 500 }\n )\n }\n }\n\n return { GET, PATCH, DELETE }\n}\n"],"names":["NextResponse","getPayload","mapRootPropsToPayloadFields","deepMerge","createPuckApiRoutesWithId","routeConfig","collection","payloadConfig","auth","rootPropsMapping","onError","GET","request","context","params","id","json","error","status","authResult","authenticate","authenticated","user","canView","permission","allowed","config","payload","url","URL","wantsDraft","searchParams","get","page","findByID","draft","doc","operation","pageId","console","PATCH","canEdit","body","puckData","title","slug","isHomepage","swapHomepage","folder","pageSegment","canPublish","existingHomepage","find","where","and","equals","not_equals","limit","depth","docs","length","update","data","skipIsHomepageHook","rootProps","root","props","updateData","editorVersion","mappedFields","undefined","_status","updateOptions","updatedPage","Error","name","validationError","fieldErrors","errors","slugError","e","field","details","map","message","join","DELETE","canDelete","delete","success"],"mappings":"AAAA,SAAsBA,YAAY,QAAQ,cAAa;AACvD,SAASC,UAAU,QAAQ,UAAS;AAOpC,SAASC,2BAA2B,EAAEC,SAAS,QAAQ,0BAAyB;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BC,GACD,OAAO,SAASC,0BACdC,WAAgC;IAEhC,MAAM,EACJC,aAAa,OAAO,EACpBC,aAAa,EACbC,IAAI,EACJC,gBAAgB,EAChBC,OAAO,EACR,GAAGL;IAEJ;;;GAGC,GACD,eAAeM,IACbC,OAAoB,EACpBC,OAAkC;QAElC,IAAI;YACF,0BAA0B;YAC1B,MAAMC,SAAS,MAAMD,QAAQC,MAAM;YACnC,MAAMC,KAAKD,OAAOC,EAAE;YAEpB,IAAI,CAACA,IAAI;gBACP,OAAOf,aAAagB,IAAI,CACtB;oBAAEC,OAAO;gBAAsB,GAC/B;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,eAAe;YACf,MAAMC,aAAa,MAAMX,KAAKY,YAAY,CAACR;YAC3C,IAAI,CAACO,WAAWE,aAAa,IAAI,CAACF,WAAWG,IAAI,EAAE;gBACjD,OAAOtB,aAAagB,IAAI,CACtB;oBAAEC,OAAOE,WAAWF,KAAK,IAAI;gBAAe,GAC5C;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,wBAAwB;YACxB,IAAIV,KAAKe,OAAO,EAAE;gBAChB,MAAMC,aAAa,MAAMhB,KAAKe,OAAO,CAACJ,WAAWG,IAAI,EAAEP;gBACvD,IAAI,CAACS,WAAWC,OAAO,EAAE;oBACvB,OAAOzB,aAAagB,IAAI,CACtB;wBAAEC,OAAOO,WAAWP,KAAK,IAAI;oBAAY,GACzC;wBAAEC,QAAQ;oBAAI;gBAElB;YACF;YAEA,4CAA4C;YAC5C,MAAMQ,SAAS,MAAMnB;YACrB,MAAMoB,UAAU,MAAM1B,WAAW;gBAAEyB;YAAO;YAE1C,mDAAmD;YACnD,2DAA2D;YAC3D,MAAME,MAAM,IAAIC,IAAIjB,QAAQgB,GAAG;YAC/B,MAAME,aAAaF,IAAIG,YAAY,CAACC,GAAG,CAAC,aAAa;YAErD,MAAMC,OAAO,MAAMN,QAAQO,QAAQ,CAAC;gBAClC5B;gBACAS;gBACAoB,OAAOL;YACT;YAEA,IAAI,CAACG,MAAM;gBACT,OAAOjC,aAAagB,IAAI,CAAC;oBAAEC,OAAO;gBAAiB,GAAG;oBAAEC,QAAQ;gBAAI;YACtE;YAEA,OAAOlB,aAAagB,IAAI,CAAC;gBAAEoB,KAAKH;YAAK;QACvC,EAAE,OAAOhB,OAAO;YACd,MAAMH,SAAS,MAAMD,QAAQC,MAAM;YACnC,IAAIJ,SAAS;gBACXA,QAAQO,OAAO;oBAAEoB,WAAW;oBAAQzB;oBAAS0B,QAAQxB,OAAOC,EAAE;gBAAC;YACjE;YACAwB,QAAQtB,KAAK,CAAC,wBAAwBA;YACtC,OAAOjB,aAAagB,IAAI,CACtB;gBAAEC,OAAO;YAAuB,GAChC;gBAAEC,QAAQ;YAAI;QAElB;IACF;IAEA;;;;;;;;;;;;GAYC,GACD,eAAesB,MACb5B,OAAoB,EACpBC,OAAkC;QAElC,IAAI;YACF,0BAA0B;YAC1B,MAAMC,SAAS,MAAMD,QAAQC,MAAM;YACnC,MAAMC,KAAKD,OAAOC,EAAE;YAEpB,IAAI,CAACA,IAAI;gBACP,OAAOf,aAAagB,IAAI,CACtB;oBAAEC,OAAO;gBAAsB,GAC/B;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,eAAe;YACf,MAAMC,aAAa,MAAMX,KAAKY,YAAY,CAACR;YAC3C,IAAI,CAACO,WAAWE,aAAa,IAAI,CAACF,WAAWG,IAAI,EAAE;gBACjD,OAAOtB,aAAagB,IAAI,CACtB;oBAAEC,OAAOE,WAAWF,KAAK,IAAI;gBAAe,GAC5C;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,wBAAwB;YACxB,IAAIV,KAAKiC,OAAO,EAAE;gBAChB,MAAMjB,aAAa,MAAMhB,KAAKiC,OAAO,CAACtB,WAAWG,IAAI,EAAEP;gBACvD,IAAI,CAACS,WAAWC,OAAO,EAAE;oBACvB,OAAOzB,aAAagB,IAAI,CACtB;wBAAEC,OAAOO,WAAWP,KAAK,IAAI;oBAAY,GACzC;wBAAEC,QAAQ;oBAAI;gBAElB;YACF;YAEA,qBAAqB;YACrB,MAAMwB,OAAQ,MAAM9B,QAAQI,IAAI;YAChC,MAAM,EAAE2B,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE3B,MAAM,EAAEiB,KAAK,EAAEW,UAAU,EAAEC,YAAY,EAAEC,MAAM,EAAEC,WAAW,EAAE,GAAGP;YAEhG,yDAAyD;YACzD,IAAIxB,WAAW,aAAa;gBAC1B,MAAMgC,aAAa1C,KAAK0C,UAAU,IAAI1C,KAAKiC,OAAO;gBAClD,IAAIS,YAAY;oBACd,MAAM1B,aAAa,MAAM0B,WAAW/B,WAAWG,IAAI,EAAEP;oBACrD,IAAI,CAACS,WAAWC,OAAO,EAAE;wBACvB,OAAOzB,aAAagB,IAAI,CACtB;4BAAEC,OAAOO,WAAWP,KAAK,IAAI;wBAAkC,GAC/D;4BAAEC,QAAQ;wBAAI;oBAElB;gBACF;YACF;YAEA,4CAA4C;YAC5C,MAAMQ,SAAS,MAAMnB;YACrB,MAAMoB,UAAU,MAAM1B,WAAW;gBAAEyB;YAAO;YAE1C,8EAA8E;YAC9E,oCAAoC;YACpC,IAAIqB,gBAAgBD,eAAe,MAAM;gBACvC,MAAMK,mBAAmB,MAAMxB,QAAQyB,IAAI,CAAC;oBAC1C9C;oBACA+C,OAAO;wBACLC,KAAK;4BACH;gCAAER,YAAY;oCAAES,QAAQ;gCAAK;4BAAE;4BAC/B;gCAAExC,IAAI;oCAAEyC,YAAYzC;gCAAG;4BAAE;yBAC1B;oBACH;oBACA0C,OAAO;oBACPC,OAAO;gBACT;gBAEA,IAAIP,iBAAiBQ,IAAI,CAACC,MAAM,GAAG,GAAG;oBACpC,MAAMjC,QAAQkC,MAAM,CAAC;wBACnBvD;wBACAS,IAAIoC,iBAAiBQ,IAAI,CAAC,EAAE,CAAC5C,EAAE;wBAC/B+C,MAAM;4BAAEhB,YAAY;wBAAM;wBAC1B,0DAA0D;wBAC1DjC,SAAS;4BAAEkD,oBAAoB;wBAAK;oBACtC;gBACF;YACF;YAEA,iEAAiE;YACjE,MAAMC,YACJ,AAACrB,UAAUsB,MAA8CC,SAAS,CAAC;YAErE,gDAAgD;YAChD,MAAMC,aAAsC;gBAC1CC,eAAe;YACjB;YAEA,2BAA2B;YAC3B,IAAIzB,UAAU;gBACZwB,WAAWxB,QAAQ,GAAGA;YACxB;YAEA,mCAAmC;YACnC,MAAM0B,eAAenE,4BAA4B8D,WAAWvD;YAE5D,uEAAuE;YACvEN,UAAUgE,YAAYE;YAEtB,iDAAiD;YACjD,IAAIzB,UAAU0B,WAAW;gBACvBH,WAAWvB,KAAK,GAAGA;YACrB;YACA,IAAIC,SAASyB,WAAW;gBACtBH,WAAWtB,IAAI,GAAGA;YACpB;YAEA,gEAAgE;YAChE,IAAIC,eAAewB,WAAW;gBAC5BH,WAAWrB,UAAU,GAAGA;YAC1B;YAEA,gFAAgF;YAChF,IAAIE,WAAWsB,WAAW;gBACxBH,WAAWnB,MAAM,GAAGA;YACtB;YACA,IAAIC,gBAAgBqB,WAAW;gBAC7BH,WAAWlB,WAAW,GAAGA;YAC3B;YAEA,gDAAgD;YAChD,IAAI/B,QAAQ;gBACViD,WAAWI,OAAO,GAAGrD;YACvB;YAEA,gFAAgF;YAChF,0FAA0F;YAC1F,+DAA+D;YAC/D,2DAA2D;YAC3D,MAAMsD,gBAKF;gBACFlE;gBACAS;gBACA+C,MAAMK;YACR;YAEA,yEAAyE;YACzE,4EAA4E;YAC5E,qCAAqC;YACrC,IAAIhC,UAAU,QAAQjB,WAAW,aAAa;gBAC5CsD,cAAcrC,KAAK,GAAG;YACxB;YAEA,MAAMsC,cAAc,MAAM9C,QAAQkC,MAAM,CAACW;YAEzC,OAAOxE,aAAagB,IAAI,CAAC;gBAAEoB,KAAKqC;YAAY;QAC9C,EAAE,OAAOxD,OAAO;YACd,MAAMH,SAAS,MAAMD,QAAQC,MAAM;YACnC,IAAIJ,SAAS;gBACXA,QAAQO,OAAO;oBAAEoB,WAAW;oBAAUzB;oBAAS0B,QAAQxB,OAAOC,EAAE;gBAAC;YACnE;YACAwB,QAAQtB,KAAK,CAAC,wBAAwBA;YAEtC,8CAA8C;YAC9C,IAAIA,iBAAiByD,SAASzD,MAAM0D,IAAI,KAAK,mBAAmB;gBAC9D,MAAMC,kBAAkB3D;gBAGxB,MAAM4D,cAAcD,gBAAgBd,IAAI,EAAEgB,UAAU,EAAE;gBAEtD,mEAAmE;gBACnE,MAAMC,YAAYF,YAAYzB,IAAI,CAAC,CAAC4B,IAAMA,EAAEC,KAAK,KAAK;gBACtD,IAAIF,WAAW;oBACb,OAAO/E,aAAagB,IAAI,CACtB;wBACEC,OAAO;wBACPgE,OAAO;wBACPC,SAASL;oBACX,GACA;wBAAE3D,QAAQ;oBAAI;gBAElB;gBAEA,2BAA2B;gBAC3B,OAAOlB,aAAagB,IAAI,CACtB;oBACEC,OAAO,CAAC,mBAAmB,EAAE4D,YAAYM,GAAG,CAAC,CAACH,IAAMA,EAAEI,OAAO,IAAIJ,EAAEC,KAAK,EAAEI,IAAI,CAAC,OAAO;oBACtFH,SAASL;gBACX,GACA;oBAAE3D,QAAQ;gBAAI;YAElB;YAEA,OAAOlB,aAAagB,IAAI,CACtB;gBAAEC,OAAO;YAAwB,GACjC;gBAAEC,QAAQ;YAAI;QAElB;IACF;IAEA;;;GAGC,GACD,eAAeoE,OACb1E,OAAoB,EACpBC,OAAkC;QAElC,IAAI;YACF,0BAA0B;YAC1B,MAAMC,SAAS,MAAMD,QAAQC,MAAM;YACnC,MAAMC,KAAKD,OAAOC,EAAE;YAEpB,IAAI,CAACA,IAAI;gBACP,OAAOf,aAAagB,IAAI,CACtB;oBAAEC,OAAO;gBAAsB,GAC/B;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,eAAe;YACf,MAAMC,aAAa,MAAMX,KAAKY,YAAY,CAACR;YAC3C,IAAI,CAACO,WAAWE,aAAa,IAAI,CAACF,WAAWG,IAAI,EAAE;gBACjD,OAAOtB,aAAagB,IAAI,CACtB;oBAAEC,OAAOE,WAAWF,KAAK,IAAI;gBAAe,GAC5C;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,0BAA0B;YAC1B,IAAIV,KAAK+E,SAAS,EAAE;gBAClB,MAAM/D,aAAa,MAAMhB,KAAK+E,SAAS,CAACpE,WAAWG,IAAI,EAAEP;gBACzD,IAAI,CAACS,WAAWC,OAAO,EAAE;oBACvB,OAAOzB,aAAagB,IAAI,CACtB;wBAAEC,OAAOO,WAAWP,KAAK,IAAI;oBAAY,GACzC;wBAAEC,QAAQ;oBAAI;gBAElB;YACF;YAEA,4CAA4C;YAC5C,MAAMQ,SAAS,MAAMnB;YACrB,MAAMoB,UAAU,MAAM1B,WAAW;gBAAEyB;YAAO;YAE1C,MAAMC,QAAQ6D,MAAM,CAAC;gBACnBlF;gBACAS;YACF;YAEA,OAAOf,aAAagB,IAAI,CAAC;gBAAEyE,SAAS;YAAK;QAC3C,EAAE,OAAOxE,OAAO;YACd,MAAMH,SAAS,MAAMD,QAAQC,MAAM;YACnC,IAAIJ,SAAS;gBACXA,QAAQO,OAAO;oBAAEoB,WAAW;oBAAUzB;oBAAS0B,QAAQxB,OAAOC,EAAE;gBAAC;YACnE;YACAwB,QAAQtB,KAAK,CAAC,wBAAwBA;YACtC,OAAOjB,aAAagB,IAAI,CACtB;gBAAEC,OAAO;YAAwB,GACjC;gBAAEC,QAAQ;YAAI;QAElB;IACF;IAEA,OAAO;QAAEP;QAAK6B;QAAO8C;IAAO;AAC9B"}
|
package/dist/api/index.d.ts
CHANGED
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
* })
|
|
33
33
|
* ```
|
|
34
34
|
*/
|
|
35
|
-
export { createPuckApiRoutes } from './createPuckApiRoutes';
|
|
36
|
-
export { createPuckApiRoutesWithId } from './createPuckApiRoutesWithId';
|
|
37
|
-
export { createPuckApiRoutesVersions } from './createPuckApiRoutesVersions';
|
|
38
|
-
export { mapRootPropsToPayloadFields, mapPayloadFieldsToRootProps, DEFAULT_ROOT_PROPS_MAPPINGS, setNestedValue, getNestedValue, mergeMappings, deepMerge, } from './utils/mapRootProps';
|
|
39
|
-
export type { AuthenticatedUser, AuthResult, PermissionResult, PuckApiAuthHooks, RootPropsMapping, PuckApiRoutesConfig, ErrorContext, RouteHandler, RouteHandlerWithId, RouteHandlerContext, RouteHandlerWithIdContext, PuckApiRouteHandlers, PuckApiRouteWithIdHandlers, CreatePageBody, UpdatePageBody, ApiResponse, PageVersion, PuckApiVersionsRouteHandlers, } from './types';
|
|
35
|
+
export { createPuckApiRoutes } from './createPuckApiRoutes.js';
|
|
36
|
+
export { createPuckApiRoutesWithId } from './createPuckApiRoutesWithId.js';
|
|
37
|
+
export { createPuckApiRoutesVersions } from './createPuckApiRoutesVersions.js';
|
|
38
|
+
export { mapRootPropsToPayloadFields, mapPayloadFieldsToRootProps, DEFAULT_ROOT_PROPS_MAPPINGS, setNestedValue, getNestedValue, mergeMappings, deepMerge, } from './utils/mapRootProps.js';
|
|
39
|
+
export type { AuthenticatedUser, AuthResult, PermissionResult, PuckApiAuthHooks, RootPropsMapping, PuckApiRoutesConfig, ErrorContext, RouteHandler, RouteHandlerWithId, RouteHandlerContext, RouteHandlerWithIdContext, PuckApiRouteHandlers, PuckApiRouteWithIdHandlers, CreatePageBody, UpdatePageBody, ApiResponse, PageVersion, PuckApiVersionsRouteHandlers, } from './types.js';
|
|
40
40
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAA;AAG9E,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,cAAc,EACd,cAAc,EACd,aAAa,EACb,SAAS,GACV,MAAM,yBAAyB,CAAA;AAGhC,YAAY,EAEV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAGhB,gBAAgB,EAGhB,mBAAmB,EACnB,YAAY,EAGZ,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAG1B,cAAc,EACd,cAAc,EACd,WAAW,EAGX,WAAW,EACX,4BAA4B,GAC7B,MAAM,YAAY,CAAA"}
|
package/dist/api/index.js
CHANGED
|
@@ -31,11 +31,11 @@
|
|
|
31
31
|
* },
|
|
32
32
|
* })
|
|
33
33
|
* ```
|
|
34
|
-
*/
|
|
35
|
-
|
|
36
|
-
export {
|
|
37
|
-
export {
|
|
38
|
-
export { createPuckApiRoutesVersions } from './createPuckApiRoutesVersions';
|
|
34
|
+
*/ // Route factories
|
|
35
|
+
export { createPuckApiRoutes } from './createPuckApiRoutes.js';
|
|
36
|
+
export { createPuckApiRoutesWithId } from './createPuckApiRoutesWithId.js';
|
|
37
|
+
export { createPuckApiRoutesVersions } from './createPuckApiRoutesVersions.js';
|
|
39
38
|
// Utilities
|
|
40
|
-
export { mapRootPropsToPayloadFields, mapPayloadFieldsToRootProps, DEFAULT_ROOT_PROPS_MAPPINGS, setNestedValue, getNestedValue, mergeMappings, deepMerge
|
|
39
|
+
export { mapRootPropsToPayloadFields, mapPayloadFieldsToRootProps, DEFAULT_ROOT_PROPS_MAPPINGS, setNestedValue, getNestedValue, mergeMappings, deepMerge } from './utils/mapRootProps.js';
|
|
40
|
+
|
|
41
41
|
//# sourceMappingURL=index.js.map
|
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/api/index.ts"],"sourcesContent":["/**\n * Puck API Routes\n *\n * Factory functions for creating Next.js App Router API route handlers\n * that integrate with PayloadCMS for Puck visual editor data management.\n *\n * @example\n * ```typescript\n * // src/app/api/puck/pages/route.ts\n * import { createPuckApiRoutes } from '@delmaredigital/payload-puck/api'\n *\n * export const { GET, POST } = createPuckApiRoutes({\n * auth: {\n * authenticate: async (request) => {\n * // Your auth implementation\n * },\n * },\n * })\n * ```\n *\n * @example\n * ```typescript\n * // src/app/api/puck/pages/[id]/route.ts\n * import { createPuckApiRoutesWithId } from '@delmaredigital/payload-puck/api'\n *\n * export const { GET, PATCH, DELETE } = createPuckApiRoutesWithId({\n * auth: {\n * authenticate: async (request) => {\n * // Your auth implementation\n * },\n * },\n * })\n * ```\n */\n\n// Route factories\nexport { createPuckApiRoutes } from './createPuckApiRoutes.js'\nexport { createPuckApiRoutesWithId } from './createPuckApiRoutesWithId.js'\nexport { createPuckApiRoutesVersions } from './createPuckApiRoutesVersions.js'\n\n// Utilities\nexport {\n mapRootPropsToPayloadFields,\n mapPayloadFieldsToRootProps,\n DEFAULT_ROOT_PROPS_MAPPINGS,\n setNestedValue,\n getNestedValue,\n mergeMappings,\n deepMerge,\n} from './utils/mapRootProps.js'\n\n// Types\nexport type {\n // Auth types\n AuthenticatedUser,\n AuthResult,\n PermissionResult,\n PuckApiAuthHooks,\n\n // Mapping types\n RootPropsMapping,\n\n // Config types\n PuckApiRoutesConfig,\n ErrorContext,\n\n // Handler types\n RouteHandler,\n RouteHandlerWithId,\n RouteHandlerContext,\n RouteHandlerWithIdContext,\n PuckApiRouteHandlers,\n PuckApiRouteWithIdHandlers,\n\n // Request/Response types\n CreatePageBody,\n UpdatePageBody,\n ApiResponse,\n\n // Version types\n PageVersion,\n PuckApiVersionsRouteHandlers,\n} from './types.js'\n"],"names":["createPuckApiRoutes","createPuckApiRoutesWithId","createPuckApiRoutesVersions","mapRootPropsToPayloadFields","mapPayloadFieldsToRootProps","DEFAULT_ROOT_PROPS_MAPPINGS","setNestedValue","getNestedValue","mergeMappings","deepMerge"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCC,GAED,kBAAkB;AAClB,SAASA,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,yBAAyB,QAAQ,iCAAgC;AAC1E,SAASC,2BAA2B,QAAQ,mCAAkC;AAE9E,YAAY;AACZ,SACEC,2BAA2B,EAC3BC,2BAA2B,EAC3BC,2BAA2B,EAC3BC,cAAc,EACdC,cAAc,EACdC,aAAa,EACbC,SAAS,QACJ,0BAAyB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ambient type declaration for @payload-config
|
|
3
|
+
*
|
|
4
|
+
* This module is provided by the consuming project and resolves to their Payload config.
|
|
5
|
+
* The consuming project should have this alias configured in their tsconfig.json:
|
|
6
|
+
*
|
|
7
|
+
* {
|
|
8
|
+
* "compilerOptions": {
|
|
9
|
+
* "paths": {
|
|
10
|
+
* "@payload-config": ["./src/payload.config.ts"]
|
|
11
|
+
* }
|
|
12
|
+
* }
|
|
13
|
+
* }
|
|
14
|
+
*/
|
|
15
|
+
//# sourceMappingURL=payload-config.d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/api/payload-config.d.ts"],"sourcesContent":["/**\n * Ambient type declaration for @payload-config\n *\n * This module is provided by the consuming project and resolves to their Payload config.\n * The consuming project should have this alias configured in their tsconfig.json:\n *\n * {\n * \"compilerOptions\": {\n * \"paths\": {\n * \"@payload-config\": [\"./src/payload.config.ts\"]\n * }\n * }\n * }\n */\ndeclare module '@payload-config' {\n import type { SanitizedConfig } from 'payload'\n\n const config: Promise<SanitizedConfig>\n export default config\n}\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;CAaC,GACD"}
|
package/dist/api/types.js
CHANGED
package/dist/api/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/api/types.ts"],"sourcesContent":["import type { NextRequest } from 'next/server'\nimport type { Data as PuckData } from '@puckeditor/core'\n\n// =============================================================================\n// Authentication Types\n// =============================================================================\n\n/**\n * Authenticated user from the auth system\n */\nexport interface AuthenticatedUser {\n id: string\n [key: string]: unknown\n}\n\n/**\n * Result of an authentication check\n */\nexport interface AuthResult {\n authenticated: boolean\n user?: AuthenticatedUser\n error?: string\n}\n\n/**\n * Result of a permission check\n */\nexport interface PermissionResult {\n allowed: boolean\n error?: string\n}\n\n// =============================================================================\n// Auth Hooks Interface\n// =============================================================================\n\n/**\n * Authentication and authorization hooks for Puck API routes\n *\n * These hooks allow you to integrate with any authentication system\n * (Better Auth, NextAuth, Payload auth, custom JWT, etc.)\n *\n * @example\n * ```typescript\n * // Example with Better Auth\n * const authHooks: PuckApiAuthHooks = {\n * authenticate: async (request) => {\n * const session = await auth.api.getSession({ headers: await headers() })\n * if (!session?.user) return { authenticated: false }\n * return { authenticated: true, user: session.user }\n * },\n * canEdit: async (user, pageId) => {\n * return { allowed: hasRole(user, 'editor') }\n * },\n * }\n * ```\n */\nexport interface PuckApiAuthHooks {\n /**\n * Authenticate the incoming request\n * Should return the authenticated user or authentication failure\n */\n authenticate: (request: NextRequest) => Promise<AuthResult>\n\n /**\n * Check if user can list pages\n * @default Always allowed for authenticated users\n */\n canList?: (\n user: AuthenticatedUser\n ) => Promise<PermissionResult> | PermissionResult\n\n /**\n * Check if user can view a specific page\n * @default Always allowed for authenticated users\n */\n canView?: (\n user: AuthenticatedUser,\n pageId: string\n ) => Promise<PermissionResult> | PermissionResult\n\n /**\n * Check if user can create new pages\n * @default Always allowed for authenticated users\n */\n canCreate?: (\n user: AuthenticatedUser\n ) => Promise<PermissionResult> | PermissionResult\n\n /**\n * Check if user can edit a specific page\n * @default Always allowed for authenticated users\n */\n canEdit?: (\n user: AuthenticatedUser,\n pageId: string\n ) => Promise<PermissionResult> | PermissionResult\n\n /**\n * Check if user can publish a specific page (change status to published)\n * @default Same as canEdit\n */\n canPublish?: (\n user: AuthenticatedUser,\n pageId: string\n ) => Promise<PermissionResult> | PermissionResult\n\n /**\n * Check if user can delete a specific page\n * @default Always allowed for authenticated users\n */\n canDelete?: (\n user: AuthenticatedUser,\n pageId: string\n ) => Promise<PermissionResult> | PermissionResult\n}\n\n// =============================================================================\n// Root Props Mapping Types\n// =============================================================================\n\n/**\n * Mapping configuration for syncing Puck root.props to Payload fields\n *\n * @example\n * ```typescript\n * // Simple mapping\n * { from: 'pageLayout', to: 'pageLayout' }\n *\n * // Nested field mapping (uses official @payloadcms/plugin-seo convention)\n * { from: 'title', to: 'meta.title' }\n *\n * // With transformation\n * {\n * from: 'publishDate',\n * to: 'publishedAt',\n * transform: (value) => value ? new Date(value as string).toISOString() : null\n * }\n * ```\n */\nexport interface RootPropsMapping {\n /**\n * Property name in Puck root.props\n */\n from: string\n\n /**\n * Field path in Payload document (supports dot notation for nested fields)\n */\n to: string\n\n /**\n * Optional transformation function\n */\n transform?: (value: unknown) => unknown\n}\n\n// =============================================================================\n// API Routes Configuration\n// =============================================================================\n\n/**\n * Error context passed to onError callback\n */\nexport interface ErrorContext {\n operation: string\n request: NextRequest\n pageId?: string\n}\n\n/**\n * Configuration for Puck API routes\n *\n * @example\n * ```typescript\n * const config: PuckApiRoutesConfig = {\n * collection: 'pages',\n * auth: {\n * authenticate: async (request) => {\n * // Your auth logic here\n * },\n * canPublish: async (user) => {\n * return { allowed: user.role === 'admin' }\n * },\n * },\n * rootPropsMapping: [\n * { from: 'title', to: 'meta.title' },\n * { from: 'description', to: 'meta.description' },\n * ],\n * enableDrafts: true,\n * }\n * ```\n */\nexport interface PuckApiRoutesConfig {\n /**\n * Payload collection slug for pages\n * @default 'pages'\n */\n collection?: string\n\n /**\n * Payload configuration - import from @payload-config\n * Required for Turbopack/Next.js 16+ compatibility\n *\n * @example\n * ```typescript\n * import config from '@payload-config'\n *\n * createPuckApiRoutesWithId({\n * payloadConfig: config,\n * // ...\n * })\n * ```\n */\n payloadConfig: Promise<import('payload').SanitizedConfig>\n\n /**\n * Authentication and authorization hooks\n */\n auth: PuckApiAuthHooks\n\n /**\n * Custom mappings from Puck root.props to Payload fields\n * These are merged with the default mappings\n */\n rootPropsMapping?: RootPropsMapping[]\n\n /**\n * Default Puck data for new pages\n */\n defaultPuckData?: PuckData\n\n /**\n * Enable draft mode for page creation/updates\n * @default true\n */\n enableDrafts?: boolean\n\n /**\n * Custom error handler for logging/monitoring\n */\n onError?: (error: unknown, context: ErrorContext) => void\n}\n\n// =============================================================================\n// Route Handler Types\n// =============================================================================\n\n/**\n * Context passed to Next.js App Router route handlers\n */\nexport interface RouteHandlerContext {\n params: Promise<Record<string, string>>\n}\n\n/**\n * Context for route handlers that require an id parameter\n */\nexport interface RouteHandlerWithIdContext {\n params: Promise<{ id: string }>\n}\n\n/**\n * Next.js App Router route handler type\n */\nexport type RouteHandler = (\n request: NextRequest,\n context: RouteHandlerContext\n) => Promise<Response>\n\n/**\n * Next.js App Router route handler type for [id] routes\n */\nexport type RouteHandlerWithId = (\n request: NextRequest,\n context: RouteHandlerWithIdContext\n) => Promise<Response>\n\n/**\n * Route handlers returned by createPuckApiRoutes\n */\nexport interface PuckApiRouteHandlers {\n GET: RouteHandler\n POST: RouteHandler\n}\n\n/**\n * Route handlers returned by createPuckApiRoutesWithId\n */\nexport interface PuckApiRouteWithIdHandlers {\n GET: RouteHandlerWithId\n PATCH: RouteHandlerWithId\n DELETE: RouteHandlerWithId\n}\n\n// =============================================================================\n// Request/Response Types\n// =============================================================================\n\n/**\n * Request body for creating a new page\n */\nexport interface CreatePageBody {\n title: string\n slug: string\n puckData?: PuckData\n status?: 'draft' | 'published'\n}\n\n/**\n * Request body for updating a page\n */\nexport interface UpdatePageBody {\n puckData?: PuckData\n title?: string\n slug?: string\n status?: 'draft' | 'published'\n /**\n * When true, save as draft without publishing.\n * Used by Payload's versions.drafts system.\n */\n draft?: boolean\n /**\n * Mark this page as the homepage.\n * Consumers should check this flag first, then fall back to slug convention.\n */\n isHomepage?: boolean\n /**\n * When true and isHomepage is true, automatically unsets the existing homepage.\n * Used when the user confirms they want to swap homepages.\n */\n swapHomepage?: boolean\n /**\n * Folder ID for page-tree integration.\n * When page-tree plugin is active, this determines the page's parent folder.\n */\n folder?: string | null\n /**\n * Page segment for page-tree integration.\n * Combined with folder path to generate the full slug.\n */\n pageSegment?: string\n}\n\n/**\n * Standard API response wrapper\n */\nexport interface ApiResponse<T = unknown> {\n doc?: T\n docs?: T[]\n error?: string\n success?: boolean\n totalDocs?: number\n totalPages?: number\n page?: number\n limit?: number\n hasPrevPage?: boolean\n hasNextPage?: boolean\n}\n\n// =============================================================================\n// Version Types\n// =============================================================================\n\n/**\n * A version entry from Payload's versions system\n */\nexport interface PageVersion {\n id: string\n parent: string\n version: {\n title?: string\n slug?: string\n puckData?: PuckData\n _status?: 'draft' | 'published'\n updatedAt: string\n createdAt: string\n }\n createdAt: string\n updatedAt: string\n autosave?: boolean\n latest?: boolean\n}\n\n/**\n * Route handlers returned by createPuckApiRoutesVersions\n */\nexport interface PuckApiVersionsRouteHandlers {\n GET: RouteHandlerWithId\n POST: RouteHandlerWithId\n}\n"],"names":[],"mappings":"AAgYA;;CAEC,GACD,WAGC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapRootProps.d.ts","sourceRoot":"","sources":["../../../src/api/utils/mapRootProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mapRootProps.d.ts","sourceRoot":"","sources":["../../../src/api/utils/mapRootProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,EAAE,gBAAgB,EAuBzD,CAAA;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,GACb,IAAI,CAcN;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,EAAE,MAAM,GACX,OAAO,CAeT;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,cAAc,CAAC,EAAE,gBAAgB,EAAE,GAClC,gBAAgB,EAAE,CAmBpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,cAAc,CAAC,EAAE,gBAAgB,EAAE,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBzB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyBzB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,cAAc,CAAC,EAAE,gBAAgB,EAAE,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBzB"}
|