octocms 0.4.12 → 0.4.16
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/AdminApp.d.ts +1 -1
- package/dist/admin/AdminApp.js +2 -2
- package/dist/admin/AdminApp.js.map +1 -1
- package/dist/admin/actions/agent.d.ts +3 -3
- package/dist/admin/actions/agent.js.map +1 -1
- package/dist/admin/actions/entries.js +46 -45
- package/dist/admin/actions/entries.js.map +1 -1
- package/dist/admin/actions/files.d.ts +5 -0
- package/dist/admin/actions/files.d.ts.map +1 -1
- package/dist/admin/actions/files.js +48 -9
- package/dist/admin/actions/files.js.map +1 -1
- package/dist/admin/actions/media.d.ts.map +1 -1
- package/dist/admin/actions/media.js +3 -1
- package/dist/admin/actions/media.js.map +1 -1
- package/dist/admin/actions/search.js +2 -2
- package/dist/admin/actions/search.js.map +1 -1
- package/dist/admin/pages/AdminErrorView.d.ts.map +1 -1
- package/dist/admin/pages/AdminErrorView.js +9 -9
- package/dist/admin/pages/AdminErrorView.js.map +1 -1
- package/dist/admin/pages/AdminLayout.d.ts +1 -1
- package/dist/admin/pages/AdminLayout.d.ts.map +1 -1
- package/dist/admin/pages/AdminLayout.js +2 -2
- package/dist/admin/pages/AdminLayout.js.map +1 -1
- package/dist/admin/pages/ChatPage.d.ts +3 -3
- package/dist/admin/pages/ChatPage.d.ts.map +1 -1
- package/dist/admin/pages/ChatPage.js +8 -5
- package/dist/admin/pages/ChatPage.js.map +1 -1
- package/dist/admin/pages/CollectionPage.d.ts.map +1 -1
- package/dist/admin/pages/CollectionPage.js +5 -1
- package/dist/admin/pages/CollectionPage.js.map +1 -1
- package/dist/admin/pages/ContentModelPage.d.ts.map +1 -1
- package/dist/admin/pages/ContentModelPage.js +5 -1
- package/dist/admin/pages/ContentModelPage.js.map +1 -1
- package/dist/admin/pages/ContentPage.d.ts.map +1 -1
- package/dist/admin/pages/ContentPage.js +5 -1
- package/dist/admin/pages/ContentPage.js.map +1 -1
- package/dist/admin/pages/ContentTypePage.d.ts.map +1 -1
- package/dist/admin/pages/ContentTypePage.js +6 -2
- package/dist/admin/pages/ContentTypePage.js.map +1 -1
- package/dist/admin/pages/EntryPage.d.ts.map +1 -1
- package/dist/admin/pages/EntryPage.js +5 -1
- package/dist/admin/pages/EntryPage.js.map +1 -1
- package/dist/admin/pages/MediaAssetPage.d.ts.map +1 -1
- package/dist/admin/pages/MediaAssetPage.js +6 -2
- package/dist/admin/pages/MediaAssetPage.js.map +1 -1
- package/dist/admin/pages/MediaPage.d.ts.map +1 -1
- package/dist/admin/pages/MediaPage.js +6 -2
- package/dist/admin/pages/MediaPage.js.map +1 -1
- package/dist/admin/theme/toggle.d.ts.map +1 -1
- package/dist/admin/theme/toggle.js +27 -27
- package/dist/admin/theme/toggle.js.map +1 -1
- package/dist/agent/chatSetup.d.ts +19 -0
- package/dist/agent/chatSetup.d.ts.map +1 -0
- package/dist/agent/chatSetup.js +119 -0
- package/dist/agent/chatSetup.js.map +1 -0
- package/dist/agent/embedder.js +1 -1
- package/dist/agent/embedder.js.map +1 -1
- package/dist/agent/featureFlag.d.ts +3 -3
- package/dist/agent/featureFlag.js.map +1 -1
- package/dist/agent/index.cjs +75 -5232
- package/dist/agent/index.cjs.map +1 -1
- package/dist/agent/tools/index.js +1 -1
- package/dist/agent/tools/index.js.map +1 -1
- package/dist/{agentDocs-M3R2CPUQ.js → agentDocs-QZ4NOQVH.js} +2 -2
- package/dist/{chunk-DCDFWNC6.js → chunk-I7VNI2IG.js} +4 -7
- package/dist/{chunk-DCDFWNC6.js.map → chunk-I7VNI2IG.js.map} +1 -1
- package/dist/chunk-TOUAHFDW.js +7 -0
- package/dist/{chunk-L27J3XWV.js.map → chunk-TOUAHFDW.js.map} +1 -1
- package/dist/{chunk-TG624CCO.js → chunk-ZYUK2J5L.js} +4 -43
- package/dist/chunk-ZYUK2J5L.js.map +1 -0
- package/dist/cli/index.js +8 -8
- package/dist/cli/lib/codegen.d.ts +2 -8
- package/dist/cli/lib/codegen.d.ts.map +1 -1
- package/dist/cli/lib/codegen.js +11 -18
- package/dist/cli/lib/codegen.js.map +1 -1
- package/dist/cli/lib/project.js +2 -41
- package/dist/cli/lib/project.js.map +1 -1
- package/dist/cli/lib/templates.js +3 -6
- package/dist/cli/lib/templates.js.map +1 -1
- package/dist/components/Chat/ChatAgentSetup.d.ts +7 -0
- package/dist/components/Chat/ChatAgentSetup.d.ts.map +1 -0
- package/dist/components/Chat/ChatAgentSetup.js +37 -0
- package/dist/components/Chat/ChatAgentSetup.js.map +1 -0
- package/dist/components/Chat/ChatPage.d.ts +6 -1
- package/dist/components/Chat/ChatPage.d.ts.map +1 -1
- package/dist/components/Chat/ChatPage.js +123 -128
- package/dist/components/Chat/ChatPage.js.map +1 -1
- package/dist/components/Chat/ChatSidebar.d.ts +10 -0
- package/dist/components/Chat/ChatSidebar.d.ts.map +1 -0
- package/dist/components/Chat/ChatSidebar.js +45 -0
- package/dist/components/Chat/ChatSidebar.js.map +1 -0
- package/dist/components/Chat/Composer.d.ts.map +1 -1
- package/dist/components/Chat/Composer.js +28 -45
- package/dist/components/Chat/Composer.js.map +1 -1
- package/dist/components/Chat/Message.d.ts.map +1 -1
- package/dist/components/Chat/Message.js +40 -39
- package/dist/components/Chat/Message.js.map +1 -1
- package/dist/components/Chat/ProposalCard.d.ts.map +1 -1
- package/dist/components/Chat/ProposalCard.js +56 -67
- package/dist/components/Chat/ProposalCard.js.map +1 -1
- package/dist/components/Chat/ToolCallCard.d.ts.map +1 -1
- package/dist/components/Chat/ToolCallCard.js +29 -38
- package/dist/components/Chat/ToolCallCard.js.map +1 -1
- package/dist/components/Chat/chatStorage.d.ts +64 -0
- package/dist/components/Chat/chatStorage.d.ts.map +1 -0
- package/dist/components/Chat/chatStorage.js +154 -0
- package/dist/components/Chat/chatStorage.js.map +1 -0
- package/dist/components/Chat/useChatHistory.d.ts +12 -0
- package/dist/components/Chat/useChatHistory.d.ts.map +1 -0
- package/dist/components/Chat/useChatHistory.js +196 -0
- package/dist/components/Chat/useChatHistory.js.map +1 -0
- package/dist/components/Chat/useChatStream.d.ts +6 -0
- package/dist/components/Chat/useChatStream.d.ts.map +1 -1
- package/dist/components/Chat/useChatStream.js +31 -2
- package/dist/components/Chat/useChatStream.js.map +1 -1
- package/dist/components/CommandK/CommandK.d.ts +1 -1
- package/dist/components/CommandK/CommandK.d.ts.map +1 -1
- package/dist/components/CommandK/CommandK.js +100 -116
- package/dist/components/CommandK/CommandK.js.map +1 -1
- package/dist/components/CommandK/parts.d.ts.map +1 -1
- package/dist/components/CommandK/parts.js +9 -11
- package/dist/components/CommandK/parts.js.map +1 -1
- package/dist/components/ContentModel/ConditionalBranchesEditor.d.ts.map +1 -1
- package/dist/components/ContentModel/ConditionalBranchesEditor.js +40 -45
- package/dist/components/ContentModel/ConditionalBranchesEditor.js.map +1 -1
- package/dist/components/ContentModel/ContentModelList.d.ts.map +1 -1
- package/dist/components/ContentModel/ContentModelList.js +65 -80
- package/dist/components/ContentModel/ContentModelList.js.map +1 -1
- package/dist/components/ContentModel/ContentTypeDetail.d.ts.map +1 -1
- package/dist/components/ContentModel/ContentTypeDetail.js +253 -280
- package/dist/components/ContentModel/ContentTypeDetail.js.map +1 -1
- package/dist/components/ContentModel/CreateContentTypeDialog.d.ts.map +1 -1
- package/dist/components/ContentModel/CreateContentTypeDialog.js +42 -30
- package/dist/components/ContentModel/CreateContentTypeDialog.js.map +1 -1
- package/dist/components/ContentModel/DeleteContentTypeDialog.d.ts.map +1 -1
- package/dist/components/ContentModel/DeleteContentTypeDialog.js +14 -15
- package/dist/components/ContentModel/DeleteContentTypeDialog.js.map +1 -1
- package/dist/components/ContentModel/DeleteFieldDialog.d.ts.map +1 -1
- package/dist/components/ContentModel/DeleteFieldDialog.js +27 -20
- package/dist/components/ContentModel/DeleteFieldDialog.js.map +1 -1
- package/dist/components/ContentModel/EditContentTypeDialog.d.ts.map +1 -1
- package/dist/components/ContentModel/EditContentTypeDialog.js +46 -34
- package/dist/components/ContentModel/EditContentTypeDialog.js.map +1 -1
- package/dist/components/ContentModel/FieldDialog.d.ts.map +1 -1
- package/dist/components/ContentModel/FieldDialog.js +95 -84
- package/dist/components/ContentModel/FieldDialog.js.map +1 -1
- package/dist/components/ContentModel/RichTextOptionsEditor.d.ts.map +1 -1
- package/dist/components/ContentModel/RichTextOptionsEditor.js +90 -81
- package/dist/components/ContentModel/RichTextOptionsEditor.js.map +1 -1
- package/dist/components/ContentModel/SchemaImpactList.d.ts.map +1 -1
- package/dist/components/ContentModel/SchemaImpactList.js +19 -36
- package/dist/components/ContentModel/SchemaImpactList.js.map +1 -1
- package/dist/components/ContentModel/SchemaOptionFieldInput.d.ts.map +1 -1
- package/dist/components/ContentModel/SchemaOptionFieldInput.js +63 -84
- package/dist/components/ContentModel/SchemaOptionFieldInput.js.map +1 -1
- package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.d.ts +3 -0
- package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.d.ts.map +1 -0
- package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.js +15 -0
- package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.js.map +1 -0
- package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.d.ts +3 -0
- package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.d.ts.map +1 -0
- package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.js +11 -0
- package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.js.map +1 -0
- package/dist/components/ContentModel/skeletons/FieldTableSkeleton.js +3 -3
- package/dist/components/ContentModel/skeletons/FieldTableSkeleton.js.map +1 -1
- package/dist/components/ContentModel/skeletons/SchemaTableSkeleton.d.ts.map +1 -1
- package/dist/components/ContentModel/skeletons/SchemaTableSkeleton.js +4 -12
- package/dist/components/ContentModel/skeletons/SchemaTableSkeleton.js.map +1 -1
- package/dist/components/Dashboard/DashboardContent.d.ts.map +1 -1
- package/dist/components/Dashboard/DashboardContent.js +87 -114
- package/dist/components/Dashboard/DashboardContent.js.map +1 -1
- package/dist/components/Dashboard/RecentPullRequests.d.ts.map +1 -1
- package/dist/components/Dashboard/RecentPullRequests.js +33 -45
- package/dist/components/Dashboard/RecentPullRequests.js.map +1 -1
- package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.d.ts +2 -7
- package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.d.ts.map +1 -1
- package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.js +5 -20
- package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.js.map +1 -1
- package/dist/components/Dashboard/skeletons/ContentTableSkeleton.js +9 -9
- package/dist/components/Dashboard/skeletons/ContentTableSkeleton.js.map +1 -1
- package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.d.ts +3 -0
- package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.d.ts.map +1 -0
- package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.js +10 -0
- package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.js.map +1 -0
- package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.d.ts +9 -0
- package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.d.ts.map +1 -0
- package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.js +16 -0
- package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.js.map +1 -0
- package/dist/components/Dashboard/skeletons/LeftPanelSkeleton.d.ts.map +1 -1
- package/dist/components/Dashboard/skeletons/LeftPanelSkeleton.js +7 -18
- package/dist/components/Dashboard/skeletons/LeftPanelSkeleton.js.map +1 -1
- package/dist/components/DiffView/DiffHunk.d.ts.map +1 -1
- package/dist/components/DiffView/DiffHunk.js +12 -40
- package/dist/components/DiffView/DiffHunk.js.map +1 -1
- package/dist/components/DiffView/DiffView.d.ts.map +1 -1
- package/dist/components/DiffView/DiffView.js +33 -52
- package/dist/components/DiffView/DiffView.js.map +1 -1
- package/dist/components/EditPost/EditPost.d.ts.map +1 -1
- package/dist/components/EditPost/EditPost.js +139 -200
- package/dist/components/EditPost/EditPost.js.map +1 -1
- package/dist/components/EditPost/skeletons/EditPostPageSkeleton.d.ts +3 -0
- package/dist/components/EditPost/skeletons/EditPostPageSkeleton.d.ts.map +1 -0
- package/dist/components/EditPost/skeletons/EditPostPageSkeleton.js +21 -0
- package/dist/components/EditPost/skeletons/EditPostPageSkeleton.js.map +1 -0
- package/dist/components/EditPost/skeletons/EntryFormSkeleton.d.ts.map +1 -1
- package/dist/components/EditPost/skeletons/EntryFormSkeleton.js +1 -9
- package/dist/components/EditPost/skeletons/EntryFormSkeleton.js.map +1 -1
- package/dist/components/EditPost/skeletons/EntrySidebarSkeleton.d.ts.map +1 -1
- package/dist/components/EditPost/skeletons/EntrySidebarSkeleton.js +12 -20
- package/dist/components/EditPost/skeletons/EntrySidebarSkeleton.js.map +1 -1
- package/dist/components/ErrorBoundary/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/{ErrorBoundary.js → ErrorBoundary/ErrorBoundary.js} +15 -21
- package/dist/components/ErrorBoundary/ErrorBoundary.js.map +1 -0
- package/dist/components/HistorySection/HistorySection.d.ts.map +1 -1
- package/dist/components/HistorySection/HistorySection.js +23 -42
- package/dist/components/HistorySection/HistorySection.js.map +1 -1
- package/dist/components/InlineEntryEditor/InlineEntryEditor.d.ts.map +1 -1
- package/dist/components/InlineEntryEditor/InlineEntryEditor.js +120 -123
- package/dist/components/InlineEntryEditor/InlineEntryEditor.js.map +1 -1
- package/dist/components/Layout/BranchSelectorDialog.d.ts +9 -0
- package/dist/components/Layout/BranchSelectorDialog.d.ts.map +1 -0
- package/dist/components/Layout/BranchSelectorDialog.js +130 -0
- package/dist/components/Layout/BranchSelectorDialog.js.map +1 -0
- package/dist/components/Layout/CreateBranchDialog.d.ts.map +1 -0
- package/dist/components/{CreateBranchDialog.js → Layout/CreateBranchDialog.js} +16 -16
- package/dist/components/Layout/CreateBranchDialog.js.map +1 -0
- package/dist/components/Layout/Layout.d.ts.map +1 -1
- package/dist/components/Layout/Layout.js +18 -26
- package/dist/components/Layout/Layout.js.map +1 -1
- package/dist/components/Layout/LeftNavItem.d.ts.map +1 -1
- package/dist/components/Layout/LeftNavItem.js +7 -7
- package/dist/components/Layout/LeftNavItem.js.map +1 -1
- package/dist/components/Layout/Page.d.ts +16 -0
- package/dist/components/Layout/Page.d.ts.map +1 -0
- package/dist/components/Layout/Page.js +47 -0
- package/dist/components/Layout/Page.js.map +1 -0
- package/dist/components/Layout/TopHeader.d.ts +1 -1
- package/dist/components/Layout/TopHeader.d.ts.map +1 -1
- package/dist/components/Layout/TopHeader.js +70 -165
- package/dist/components/Layout/TopHeader.js.map +1 -1
- package/dist/components/Layout/UserAccountDialog.d.ts +12 -0
- package/dist/components/Layout/UserAccountDialog.d.ts.map +1 -0
- package/dist/components/Layout/UserAccountDialog.js +48 -0
- package/dist/components/Layout/UserAccountDialog.js.map +1 -0
- package/dist/components/Layout/skeletons/AgentNavSkeleton.js +1 -1
- package/dist/components/Layout/skeletons/AgentNavSkeleton.js.map +1 -1
- package/dist/components/Layout/skeletons/BranchChipSkeleton.d.ts.map +1 -1
- package/dist/components/Layout/skeletons/BranchChipSkeleton.js +1 -8
- package/dist/components/Layout/skeletons/BranchChipSkeleton.js.map +1 -1
- package/dist/components/Layout/skeletons/NeutralPageSkeleton.d.ts +3 -0
- package/dist/components/Layout/skeletons/NeutralPageSkeleton.d.ts.map +1 -0
- package/dist/components/Layout/skeletons/NeutralPageSkeleton.js +11 -0
- package/dist/components/Layout/skeletons/NeutralPageSkeleton.js.map +1 -0
- package/dist/components/Layout/skeletons/PageChromeSkeleton.d.ts +19 -0
- package/dist/components/Layout/skeletons/PageChromeSkeleton.d.ts.map +1 -0
- package/dist/components/Layout/skeletons/PageChromeSkeleton.js +31 -0
- package/dist/components/Layout/skeletons/PageChromeSkeleton.js.map +1 -0
- package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.d.ts +9 -0
- package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.d.ts.map +1 -0
- package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.js +15 -0
- package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.js.map +1 -0
- package/dist/components/Layout/skeletons/TopHeaderSkeleton.d.ts.map +1 -1
- package/dist/components/Layout/skeletons/TopHeaderSkeleton.js +10 -17
- package/dist/components/Layout/skeletons/TopHeaderSkeleton.js.map +1 -1
- package/dist/components/Layout/skeletons/routeSkeletons.d.ts +16 -0
- package/dist/components/Layout/skeletons/routeSkeletons.d.ts.map +1 -0
- package/dist/components/Layout/skeletons/routeSkeletons.js +48 -0
- package/dist/components/Layout/skeletons/routeSkeletons.js.map +1 -0
- package/dist/components/LinkedBySection/LinkedBySection.js +13 -13
- package/dist/components/LinkedBySection/LinkedBySection.js.map +1 -1
- package/dist/components/MediaAsset/MediaAsset.d.ts +1 -1
- package/dist/components/MediaAsset/MediaAsset.d.ts.map +1 -1
- package/dist/components/MediaAsset/MediaAsset.js +126 -136
- package/dist/components/MediaAsset/MediaAsset.js.map +1 -1
- package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.d.ts +3 -0
- package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.d.ts.map +1 -0
- package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.js +21 -0
- package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.js.map +1 -0
- package/dist/components/MediaAsset/skeletons/MediaMetadataFormSkeleton.d.ts.map +1 -1
- package/dist/components/MediaAsset/skeletons/MediaMetadataFormSkeleton.js +26 -22
- package/dist/components/MediaAsset/skeletons/MediaMetadataFormSkeleton.js.map +1 -1
- package/dist/components/MediaAsset/skeletons/MediaPreviewSkeleton.d.ts.map +1 -1
- package/dist/components/MediaAsset/skeletons/MediaPreviewSkeleton.js +1 -9
- package/dist/components/MediaAsset/skeletons/MediaPreviewSkeleton.js.map +1 -1
- package/dist/components/MediaManager/CreateFolderDialog.d.ts.map +1 -1
- package/dist/components/MediaManager/CreateFolderDialog.js +15 -8
- package/dist/components/MediaManager/CreateFolderDialog.js.map +1 -1
- package/dist/components/MediaManager/DeleteFolderDialog.d.ts.map +1 -1
- package/dist/components/MediaManager/DeleteFolderDialog.js +1 -2
- package/dist/components/MediaManager/DeleteFolderDialog.js.map +1 -1
- package/dist/components/MediaManager/MarkdownImageEditToolbar.d.ts.map +1 -1
- package/dist/components/MediaManager/MarkdownImageEditToolbar.js +7 -9
- package/dist/components/MediaManager/MarkdownImageEditToolbar.js.map +1 -1
- package/dist/components/MediaManager/MarkdownInsertImageDialog.d.ts.map +1 -1
- package/dist/components/MediaManager/MarkdownInsertImageDialog.js +6 -9
- package/dist/components/MediaManager/MarkdownInsertImageDialog.js.map +1 -1
- package/dist/components/MediaManager/MediaLeftPanel.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaLeftPanel.js +21 -23
- package/dist/components/MediaManager/MediaLeftPanel.js.map +1 -1
- package/dist/components/MediaManager/MediaListTable.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaListTable.js +15 -21
- package/dist/components/MediaManager/MediaListTable.js.map +1 -1
- package/dist/components/MediaManager/MediaManager.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaManager.js +101 -151
- package/dist/components/MediaManager/MediaManager.js.map +1 -1
- package/dist/components/MediaManager/MediaSelectDialog.js +22 -64
- package/dist/components/MediaManager/MediaSelectDialog.js.map +1 -1
- package/dist/components/MediaManager/MediaUploadBar.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaUploadBar.js +9 -10
- package/dist/components/MediaManager/MediaUploadBar.js.map +1 -1
- package/dist/components/MediaManager/MediaUploadDialog.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaUploadDialog.js +18 -11
- package/dist/components/MediaManager/MediaUploadDialog.js.map +1 -1
- package/dist/components/MediaManager/MediaViewModeSwitcher.d.ts +8 -0
- package/dist/components/MediaManager/MediaViewModeSwitcher.d.ts.map +1 -0
- package/dist/components/MediaManager/MediaViewModeSwitcher.js +14 -0
- package/dist/components/MediaManager/MediaViewModeSwitcher.js.map +1 -0
- package/dist/components/MediaManager/skeletons/MediaGridSkeleton.d.ts.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaGridSkeleton.js +4 -12
- package/dist/components/MediaManager/skeletons/MediaGridSkeleton.js.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaLeftPanelSkeleton.d.ts.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaLeftPanelSkeleton.js +5 -13
- package/dist/components/MediaManager/skeletons/MediaLeftPanelSkeleton.js.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaListTableSkeleton.d.ts.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaListTableSkeleton.js +7 -15
- package/dist/components/MediaManager/skeletons/MediaListTableSkeleton.js.map +1 -1
- package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.d.ts +3 -0
- package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.d.ts.map +1 -0
- package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.js +15 -0
- package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.js.map +1 -0
- package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.d.ts +3 -0
- package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.d.ts.map +1 -0
- package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.js +21 -0
- package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.js.map +1 -0
- package/dist/components/public/MarkdownContent.d.ts.map +1 -1
- package/dist/components/public/MarkdownContent.js +1 -2
- package/dist/components/public/MarkdownContent.js.map +1 -1
- package/dist/components/public/RichTextContent.d.ts.map +1 -1
- package/dist/components/public/RichTextContent.js +19 -8
- package/dist/components/public/RichTextContent.js.map +1 -1
- package/dist/components/public/SearchBox.d.ts.map +1 -1
- package/dist/components/public/SearchBox.js +32 -60
- package/dist/components/public/SearchBox.js.map +1 -1
- package/dist/components/public/index.cjs +6 -413
- package/dist/components/public/index.cjs.map +1 -1
- package/dist/components/skeletons/MainSlotSkeleton.d.ts +0 -7
- package/dist/components/skeletons/MainSlotSkeleton.d.ts.map +1 -1
- package/dist/components/skeletons/MainSlotSkeleton.js +4 -17
- package/dist/components/skeletons/MainSlotSkeleton.js.map +1 -1
- package/dist/components/skeletons/blocks.d.ts.map +1 -1
- package/dist/components/skeletons/blocks.js +15 -7
- package/dist/components/skeletons/blocks.js.map +1 -1
- package/dist/components/skeletons/index.d.ts +4 -4
- package/dist/components/skeletons/index.d.ts.map +1 -1
- package/dist/components/skeletons/index.js +1 -2
- package/dist/components/skeletons/index.js.map +1 -1
- package/dist/components/skeletons/primitives.d.ts +2 -2
- package/dist/components/skeletons/primitives.d.ts.map +1 -1
- package/dist/components/skeletons/primitives.js +3 -3
- package/dist/components/skeletons/primitives.js.map +1 -1
- package/dist/components/test/dndTestUtils.d.ts +7 -0
- package/dist/components/test/dndTestUtils.d.ts.map +1 -0
- package/dist/components/test/dndTestUtils.js +15 -0
- package/dist/components/test/dndTestUtils.js.map +1 -0
- package/dist/components/ui/Avatar/Avatar.d.ts +5 -0
- package/dist/components/ui/Avatar/Avatar.d.ts.map +1 -0
- package/dist/components/ui/Avatar/Avatar.js +63 -0
- package/dist/components/ui/Avatar/Avatar.js.map +1 -0
- package/dist/components/ui/{branch-chip.d.ts → BranchChip/BranchChip.d.ts} +2 -5
- package/dist/components/ui/BranchChip/BranchChip.d.ts.map +1 -0
- package/dist/components/ui/BranchChip/BranchChip.js +47 -0
- package/dist/components/ui/BranchChip/BranchChip.js.map +1 -0
- package/dist/components/ui/Button/Button.d.ts +15 -0
- package/dist/components/ui/Button/Button.d.ts.map +1 -0
- package/dist/components/ui/Button/Button.js +49 -0
- package/dist/components/ui/Button/Button.js.map +1 -0
- package/dist/components/ui/Card/Card.d.ts +6 -0
- package/dist/components/ui/Card/Card.d.ts.map +1 -0
- package/dist/components/ui/{card.js → Card/Card.js} +12 -22
- package/dist/components/ui/Card/Card.js.map +1 -0
- package/dist/components/ui/{chip.d.ts → Chip/Chip.d.ts} +1 -1
- package/dist/components/ui/Chip/Chip.d.ts.map +1 -0
- package/dist/components/ui/Chip/Chip.js +24 -0
- package/dist/components/ui/Chip/Chip.js.map +1 -0
- package/dist/components/ui/Dialog/Dialog.d.ts +32 -0
- package/dist/components/ui/Dialog/Dialog.d.ts.map +1 -0
- package/dist/components/ui/Dialog/Dialog.js +194 -0
- package/dist/components/ui/Dialog/Dialog.js.map +1 -0
- package/dist/components/ui/DropdownMenu/DropdownMenu.d.ts +66 -0
- package/dist/components/ui/DropdownMenu/DropdownMenu.d.ts.map +1 -0
- package/dist/components/ui/DropdownMenu/DropdownMenu.js +308 -0
- package/dist/components/ui/DropdownMenu/DropdownMenu.js.map +1 -0
- package/dist/components/ui/{field.d.ts → FormField/Field.d.ts} +1 -1
- package/dist/components/ui/FormField/Field.d.ts.map +1 -0
- package/dist/components/ui/FormField/Field.js +41 -0
- package/dist/components/ui/FormField/Field.js.map +1 -0
- package/dist/components/{FieldShell.d.ts → ui/FormField/FieldShell.d.ts} +2 -2
- package/dist/components/ui/FormField/FieldShell.d.ts.map +1 -0
- package/dist/components/ui/FormField/FieldShell.js +29 -0
- package/dist/components/ui/FormField/FieldShell.js.map +1 -0
- package/dist/components/ui/FormField/FormBooleanField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormBooleanField.js +56 -0
- package/dist/components/ui/FormField/FormBooleanField.js.map +1 -0
- package/dist/components/ui/FormField/FormColorField.d.ts.map +1 -0
- package/dist/components/{FormColorField.js → ui/FormField/FormColorField.js} +10 -13
- package/dist/components/ui/FormField/FormColorField.js.map +1 -0
- package/dist/components/{FormConditionalField.d.ts → ui/FormField/FormConditionalField.d.ts} +1 -1
- package/dist/components/ui/FormField/FormConditionalField.d.ts.map +1 -0
- package/dist/components/{FormConditionalField.js → ui/FormField/FormConditionalField.js} +61 -58
- package/dist/components/ui/FormField/FormConditionalField.js.map +1 -0
- package/dist/components/ui/FormField/FormDatetimeField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormDatetimeField.js +48 -0
- package/dist/components/ui/FormField/FormDatetimeField.js.map +1 -0
- package/dist/components/{FormFields.d.ts → ui/FormField/FormFields.d.ts} +1 -1
- package/dist/components/ui/FormField/FormFields.d.ts.map +1 -0
- package/dist/components/{FormFields.js → ui/FormField/FormFields.js} +6 -6
- package/dist/components/ui/FormField/FormFields.js.map +1 -0
- package/dist/components/{FormImageField.d.ts → ui/FormField/FormImageField.d.ts} +1 -1
- package/dist/components/ui/FormField/FormImageField.d.ts.map +1 -0
- package/dist/components/{FormImageField.js → ui/FormField/FormImageField.js} +25 -30
- package/dist/components/ui/FormField/FormImageField.js.map +1 -0
- package/dist/components/ui/FormField/FormJsonField.d.ts.map +1 -0
- package/dist/components/{FormJsonField.js → ui/FormField/FormJsonField.js} +7 -10
- package/dist/components/ui/FormField/FormJsonField.js.map +1 -0
- package/dist/components/ui/FormField/FormMarkdownField.d.ts.map +1 -0
- package/dist/components/{FormMarkdownField.js → ui/FormField/FormMarkdownField.js} +11 -20
- package/dist/components/ui/FormField/FormMarkdownField.js.map +1 -0
- package/dist/components/ui/FormField/FormNumberField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormNumberField.js +38 -0
- package/dist/components/ui/FormField/FormNumberField.js.map +1 -0
- package/dist/components/{FormReferenceField.d.ts → ui/FormField/FormReferenceField.d.ts} +1 -1
- package/dist/components/ui/FormField/FormReferenceField.d.ts.map +1 -0
- package/dist/components/{FormReferenceField.js → ui/FormField/FormReferenceField.js} +110 -119
- package/dist/components/ui/FormField/FormReferenceField.js.map +1 -0
- package/dist/components/{FormRichTextField.d.ts → ui/FormField/FormRichTextField.d.ts} +1 -1
- package/dist/components/ui/FormField/FormRichTextField.d.ts.map +1 -0
- package/dist/components/{FormRichTextField.js → ui/FormField/FormRichTextField.js} +28 -33
- package/dist/components/ui/FormField/FormRichTextField.js.map +1 -0
- package/dist/components/{FormSelectField.d.ts → ui/FormField/FormSelectField.d.ts} +1 -1
- package/dist/components/ui/FormField/FormSelectField.d.ts.map +1 -0
- package/dist/components/{FormSelectField.js → ui/FormField/FormSelectField.js} +11 -23
- package/dist/components/ui/FormField/FormSelectField.js.map +1 -0
- package/dist/components/ui/FormField/FormSlugField.d.ts.map +1 -0
- package/dist/components/{FormSlugField.js → ui/FormField/FormSlugField.js} +21 -26
- package/dist/components/ui/FormField/FormSlugField.js.map +1 -0
- package/dist/components/ui/FormField/FormStringField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormStringField.js +23 -0
- package/dist/components/ui/FormField/FormStringField.js.map +1 -0
- package/dist/components/ui/FormField/FormStringListField.d.ts.map +1 -0
- package/dist/components/{FormStringListField.js → ui/FormField/FormStringListField.js} +14 -25
- package/dist/components/ui/FormField/FormStringListField.js.map +1 -0
- package/dist/components/ui/FormField/FormTextField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormTextField.js +35 -0
- package/dist/components/ui/FormField/FormTextField.js.map +1 -0
- package/dist/components/ui/FormField/FormUrlField.d.ts.map +1 -0
- package/dist/components/ui/FormField/FormUrlField.js +26 -0
- package/dist/components/ui/FormField/FormUrlField.js.map +1 -0
- package/dist/components/{richtext → ui/FormField/richtext}/ComponentEmbedEditor.d.ts +1 -1
- package/dist/components/ui/FormField/richtext/ComponentEmbedEditor.d.ts.map +1 -0
- package/dist/components/ui/FormField/richtext/ComponentEmbedEditor.js +165 -0
- package/dist/components/ui/FormField/richtext/ComponentEmbedEditor.js.map +1 -0
- package/dist/components/ui/FormField/richtext/ConditionEmbedEditor.d.ts.map +1 -0
- package/dist/components/{richtext → ui/FormField/richtext}/ConditionEmbedEditor.js +25 -39
- package/dist/components/ui/FormField/richtext/ConditionEmbedEditor.js.map +1 -0
- package/dist/components/ui/FormField/richtext/ImageEmbedEditor.d.ts.map +1 -0
- package/dist/components/{richtext → ui/FormField/richtext}/ImageEmbedEditor.js +77 -56
- package/dist/components/ui/FormField/richtext/ImageEmbedEditor.js.map +1 -0
- package/dist/components/ui/FormField/richtext/ReferenceEmbedEditor.d.ts.map +1 -0
- package/dist/components/{richtext → ui/FormField/richtext}/ReferenceEmbedEditor.js +55 -43
- package/dist/components/ui/FormField/richtext/ReferenceEmbedEditor.js.map +1 -0
- package/dist/components/ui/FormField/richtext/SlashCommandMenu.d.ts.map +1 -0
- package/dist/components/{richtext → ui/FormField/richtext}/SlashCommandMenu.js +21 -33
- package/dist/components/ui/FormField/richtext/SlashCommandMenu.js.map +1 -0
- package/dist/components/ui/FormField/richtext/VariableEmbedEditor.d.ts.map +1 -0
- package/dist/components/ui/FormField/richtext/VariableEmbedEditor.js +61 -0
- package/dist/components/ui/FormField/richtext/VariableEmbedEditor.js.map +1 -0
- package/dist/components/ui/Icon/Icon.d.ts +77 -0
- package/dist/components/ui/Icon/Icon.d.ts.map +1 -0
- package/dist/components/ui/Icon/Icon.js +618 -0
- package/dist/components/ui/Icon/Icon.js.map +1 -0
- package/dist/components/ui/{input.d.ts → Input/Input.d.ts} +1 -1
- package/dist/components/ui/Input/Input.d.ts.map +1 -0
- package/dist/components/ui/Input/Input.js +25 -0
- package/dist/components/ui/Input/Input.js.map +1 -0
- package/dist/components/ui/{kbd.d.ts → Kbd/Kbd.d.ts} +1 -1
- package/dist/components/ui/Kbd/Kbd.d.ts.map +1 -0
- package/dist/components/ui/Kbd/Kbd.js +19 -0
- package/dist/components/ui/Kbd/Kbd.js.map +1 -0
- package/dist/components/ui/Label/Label.d.ts +3 -0
- package/dist/components/ui/Label/Label.d.ts.map +1 -0
- package/dist/components/ui/Label/Label.js +20 -0
- package/dist/components/ui/Label/Label.js.map +1 -0
- package/dist/components/ui/Portal/Portal.d.ts +8 -0
- package/dist/components/ui/Portal/Portal.d.ts.map +1 -0
- package/dist/components/ui/Portal/Portal.js +14 -0
- package/dist/components/ui/Portal/Portal.js.map +1 -0
- package/dist/components/ui/Select/Select.d.ts +33 -0
- package/dist/components/ui/Select/Select.d.ts.map +1 -0
- package/dist/components/ui/Select/Select.js +280 -0
- package/dist/components/ui/Select/Select.js.map +1 -0
- package/dist/components/ui/Slot/Slot.d.ts +6 -0
- package/dist/components/ui/Slot/Slot.d.ts.map +1 -0
- package/dist/components/ui/Slot/Slot.js +39 -0
- package/dist/components/ui/Slot/Slot.js.map +1 -0
- package/dist/components/ui/{status-badge.d.ts → StatusBadge/StatusBadge.d.ts} +2 -2
- package/dist/components/ui/StatusBadge/StatusBadge.d.ts.map +1 -0
- package/dist/components/ui/{status-badge.js → StatusBadge/StatusBadge.js} +8 -9
- package/dist/components/ui/StatusBadge/StatusBadge.js.map +1 -0
- package/dist/components/ui/Switcher/Switcher.d.ts +9 -0
- package/dist/components/ui/Switcher/Switcher.d.ts.map +1 -0
- package/dist/components/ui/Switcher/Switcher.js +75 -0
- package/dist/components/ui/Switcher/Switcher.js.map +1 -0
- package/dist/components/ui/{table.d.ts → Table/Table.d.ts} +1 -1
- package/dist/components/ui/Table/Table.d.ts.map +1 -0
- package/dist/components/ui/{table.js → Table/Table.js} +11 -29
- package/dist/components/ui/Table/Table.js.map +1 -0
- package/dist/components/ui/Tabs/Tabs.d.ts +16 -0
- package/dist/components/ui/Tabs/Tabs.d.ts.map +1 -0
- package/dist/components/ui/Tabs/Tabs.js +96 -0
- package/dist/components/ui/Tabs/Tabs.js.map +1 -0
- package/dist/components/ui/{textarea.d.ts → Textarea/Textarea.d.ts} +1 -1
- package/dist/components/ui/Textarea/Textarea.d.ts.map +1 -0
- package/dist/components/ui/Textarea/Textarea.js +16 -0
- package/dist/components/ui/Textarea/Textarea.js.map +1 -0
- package/dist/components/ui/Toast/Toast.d.ts +21 -0
- package/dist/components/ui/Toast/Toast.d.ts.map +1 -0
- package/dist/components/ui/Toast/Toast.js +98 -0
- package/dist/components/ui/Toast/Toast.js.map +1 -0
- package/dist/components/ui/{toaster.d.ts → Toaster/Toaster.d.ts} +1 -1
- package/dist/components/ui/Toaster/Toaster.d.ts.map +1 -0
- package/dist/components/ui/Toaster/Toaster.js +27 -0
- package/dist/components/ui/Toaster/Toaster.js.map +1 -0
- package/dist/components/ui/index.d.ts +45 -31
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +76 -36
- package/dist/components/ui/index.js.map +1 -1
- package/dist/config.cjs +4 -99
- package/dist/config.cjs.map +1 -1
- package/dist/defineConfig.cjs +0 -2
- package/dist/defineConfig.cjs.map +1 -1
- package/dist/{embeddingsGen-7MXSZQ43.js → embeddingsGen-FXWCPGB7.js} +39 -8
- package/dist/embeddingsGen-FXWCPGB7.js.map +1 -0
- package/dist/globals.css +9648 -430
- package/dist/hooks/useComposedRefs.d.ts +5 -0
- package/dist/hooks/useComposedRefs.d.ts.map +1 -0
- package/dist/hooks/useComposedRefs.js +23 -0
- package/dist/hooks/useComposedRefs.js.map +1 -0
- package/dist/hooks/useControllableState.d.ts +8 -0
- package/dist/hooks/useControllableState.d.ts.map +1 -0
- package/dist/hooks/useControllableState.js +28 -0
- package/dist/hooks/useControllableState.js.map +1 -0
- package/dist/hooks/usePopoverContent.d.ts +26 -0
- package/dist/hooks/usePopoverContent.d.ts.map +1 -0
- package/dist/hooks/usePopoverContent.js +44 -0
- package/dist/hooks/usePopoverContent.js.map +1 -0
- package/dist/hooks/useToast.d.ts +4 -4
- package/dist/hooks/useToast.d.ts.map +1 -1
- package/dist/hooks/useToast.js +1 -3
- package/dist/hooks/useToast.js.map +1 -1
- package/dist/index.cjs +11 -9486
- package/dist/index.cjs.map +1 -1
- package/dist/{init-N6K464EZ.js → init-KNIWQGJL.js} +3 -18
- package/dist/init-KNIWQGJL.js.map +1 -0
- package/dist/lib/configStore.cjs +1 -3
- package/dist/lib/configStore.cjs.map +1 -1
- package/dist/lib/localReader.d.ts +13 -0
- package/dist/lib/localReader.d.ts.map +1 -1
- package/dist/lib/localReader.js +20 -0
- package/dist/lib/localReader.js.map +1 -1
- package/dist/lib/publicSearchIndex.d.ts.map +1 -1
- package/dist/lib/publicSearchIndex.js +2 -2
- package/dist/lib/publicSearchIndex.js.map +1 -1
- package/dist/lib/slugField.d.ts.map +1 -1
- package/dist/lib/slugField.js +3 -3
- package/dist/lib/slugField.js.map +1 -1
- package/dist/lib/slugify.d.ts +13 -0
- package/dist/lib/slugify.d.ts.map +1 -0
- package/dist/lib/slugify.js +8 -0
- package/dist/lib/slugify.js.map +1 -0
- package/dist/lib/utils.d.ts +5 -9
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +29 -3
- package/dist/lib/utils.js.map +1 -1
- package/dist/query.cjs +58 -8991
- package/dist/query.cjs.map +1 -1
- package/dist/types.cjs +0 -2
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/{typesGen-EYRZAA56.js → typesGen-MFAL3B4V.js} +32 -6
- package/dist/typesGen-MFAL3B4V.js.map +1 -0
- package/dist/{update-QNJRYPMC.js → update-QALIQG76.js} +2 -2
- package/dist/{validate-6AFW6U2X.js → validate-AAW4IGWD.js} +2 -2
- package/dist/withOctoCMS.cjs +2 -36
- package/dist/withOctoCMS.cjs.map +1 -1
- package/globals.css +9648 -430
- package/package.json +1 -16
- package/dist/admin/consts.d.ts +0 -3
- package/dist/admin/consts.d.ts.map +0 -1
- package/dist/admin/consts.js +0 -24
- package/dist/admin/consts.js.map +0 -1
- package/dist/chunk-L27J3XWV.js +0 -7
- package/dist/chunk-TG624CCO.js.map +0 -1
- package/dist/components/ContentModel/ContentModelList.skeleton.d.ts +0 -5
- package/dist/components/ContentModel/ContentModelList.skeleton.d.ts.map +0 -1
- package/dist/components/ContentModel/ContentModelList.skeleton.js +0 -16
- package/dist/components/ContentModel/ContentModelList.skeleton.js.map +0 -1
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.d.ts +0 -5
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.d.ts.map +0 -1
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.js +0 -22
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.js.map +0 -1
- package/dist/components/ContentTypes.d.ts +0 -7
- package/dist/components/ContentTypes.d.ts.map +0 -1
- package/dist/components/ContentTypes.js +0 -132
- package/dist/components/ContentTypes.js.map +0 -1
- package/dist/components/CreateBranchDialog.d.ts.map +0 -1
- package/dist/components/CreateBranchDialog.js.map +0 -1
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.d.ts +0 -3
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.d.ts.map +0 -1
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.js +0 -10
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.js.map +0 -1
- package/dist/components/Dashboard/DashboardContent.list.skeleton.d.ts +0 -7
- package/dist/components/Dashboard/DashboardContent.list.skeleton.d.ts.map +0 -1
- package/dist/components/Dashboard/DashboardContent.list.skeleton.js +0 -22
- package/dist/components/Dashboard/DashboardContent.list.skeleton.js.map +0 -1
- package/dist/components/Dashboard/DashboardContent.skeleton.d.ts +0 -2
- package/dist/components/Dashboard/DashboardContent.skeleton.d.ts.map +0 -1
- package/dist/components/Dashboard/DashboardContent.skeleton.js +0 -13
- package/dist/components/Dashboard/DashboardContent.skeleton.js.map +0 -1
- package/dist/components/EditPost/EditPost.skeleton.d.ts +0 -5
- package/dist/components/EditPost/EditPost.skeleton.d.ts.map +0 -1
- package/dist/components/EditPost/EditPost.skeleton.js +0 -34
- package/dist/components/EditPost/EditPost.skeleton.js.map +0 -1
- package/dist/components/ErrorBoundary.d.ts.map +0 -1
- package/dist/components/ErrorBoundary.js.map +0 -1
- package/dist/components/FieldHintAndError.d.ts +0 -8
- package/dist/components/FieldHintAndError.d.ts.map +0 -1
- package/dist/components/FieldHintAndError.js +0 -14
- package/dist/components/FieldHintAndError.js.map +0 -1
- package/dist/components/FieldLabel.d.ts +0 -11
- package/dist/components/FieldLabel.d.ts.map +0 -1
- package/dist/components/FieldLabel.js +0 -17
- package/dist/components/FieldLabel.js.map +0 -1
- package/dist/components/FieldShell.d.ts.map +0 -1
- package/dist/components/FieldShell.js +0 -29
- package/dist/components/FieldShell.js.map +0 -1
- package/dist/components/FileExplorer/FileExplorer.d.ts +0 -8
- package/dist/components/FileExplorer/FileExplorer.d.ts.map +0 -1
- package/dist/components/FileExplorer/FileExplorer.js +0 -68
- package/dist/components/FileExplorer/FileExplorer.js.map +0 -1
- package/dist/components/FormBooleanField.d.ts.map +0 -1
- package/dist/components/FormBooleanField.js +0 -52
- package/dist/components/FormBooleanField.js.map +0 -1
- package/dist/components/FormColorField.d.ts.map +0 -1
- package/dist/components/FormColorField.js.map +0 -1
- package/dist/components/FormConditionalField.d.ts.map +0 -1
- package/dist/components/FormConditionalField.js.map +0 -1
- package/dist/components/FormDatetimeField.d.ts.map +0 -1
- package/dist/components/FormDatetimeField.js +0 -42
- package/dist/components/FormDatetimeField.js.map +0 -1
- package/dist/components/FormFields.d.ts.map +0 -1
- package/dist/components/FormFields.js.map +0 -1
- package/dist/components/FormImageField.d.ts.map +0 -1
- package/dist/components/FormImageField.js.map +0 -1
- package/dist/components/FormJsonField.d.ts.map +0 -1
- package/dist/components/FormJsonField.js.map +0 -1
- package/dist/components/FormMarkdownField.d.ts.map +0 -1
- package/dist/components/FormMarkdownField.js.map +0 -1
- package/dist/components/FormNumberField.d.ts.map +0 -1
- package/dist/components/FormNumberField.js +0 -43
- package/dist/components/FormNumberField.js.map +0 -1
- package/dist/components/FormReferenceField.d.ts.map +0 -1
- package/dist/components/FormReferenceField.js.map +0 -1
- package/dist/components/FormRichTextField.d.ts.map +0 -1
- package/dist/components/FormRichTextField.js.map +0 -1
- package/dist/components/FormSelectField.d.ts.map +0 -1
- package/dist/components/FormSelectField.js.map +0 -1
- package/dist/components/FormSlugField.d.ts.map +0 -1
- package/dist/components/FormSlugField.js.map +0 -1
- package/dist/components/FormStringField.d.ts.map +0 -1
- package/dist/components/FormStringField.js +0 -28
- package/dist/components/FormStringField.js.map +0 -1
- package/dist/components/FormStringListField.d.ts.map +0 -1
- package/dist/components/FormStringListField.js.map +0 -1
- package/dist/components/FormTextField.d.ts.map +0 -1
- package/dist/components/FormTextField.js +0 -40
- package/dist/components/FormTextField.js.map +0 -1
- package/dist/components/FormUrlField.d.ts.map +0 -1
- package/dist/components/FormUrlField.js +0 -31
- package/dist/components/FormUrlField.js.map +0 -1
- package/dist/components/Layout/PageBar.d.ts +0 -10
- package/dist/components/Layout/PageBar.d.ts.map +0 -1
- package/dist/components/Layout/PageBar.js +0 -43
- package/dist/components/Layout/PageBar.js.map +0 -1
- package/dist/components/Layout/PageShell.d.ts +0 -30
- package/dist/components/Layout/PageShell.d.ts.map +0 -1
- package/dist/components/Layout/PageShell.js +0 -33
- package/dist/components/Layout/PageShell.js.map +0 -1
- package/dist/components/MediaAsset/MediaAsset.skeleton.d.ts +0 -3
- package/dist/components/MediaAsset/MediaAsset.skeleton.d.ts.map +0 -1
- package/dist/components/MediaAsset/MediaAsset.skeleton.js +0 -42
- package/dist/components/MediaAsset/MediaAsset.skeleton.js.map +0 -1
- package/dist/components/MediaManager/MediaManager.skeleton.d.ts +0 -3
- package/dist/components/MediaManager/MediaManager.skeleton.d.ts.map +0 -1
- package/dist/components/MediaManager/MediaManager.skeleton.js +0 -30
- package/dist/components/MediaManager/MediaManager.skeleton.js.map +0 -1
- package/dist/components/StatusBadge.d.ts +0 -2
- package/dist/components/StatusBadge.d.ts.map +0 -1
- package/dist/components/StatusBadge.js +0 -7
- package/dist/components/StatusBadge.js.map +0 -1
- package/dist/components/richtext/ComponentEmbedEditor.d.ts.map +0 -1
- package/dist/components/richtext/ComponentEmbedEditor.js +0 -153
- package/dist/components/richtext/ComponentEmbedEditor.js.map +0 -1
- package/dist/components/richtext/ConditionEmbedEditor.d.ts.map +0 -1
- package/dist/components/richtext/ConditionEmbedEditor.js.map +0 -1
- package/dist/components/richtext/ImageEmbedEditor.d.ts.map +0 -1
- package/dist/components/richtext/ImageEmbedEditor.js.map +0 -1
- package/dist/components/richtext/ReferenceEmbedEditor.d.ts.map +0 -1
- package/dist/components/richtext/ReferenceEmbedEditor.js.map +0 -1
- package/dist/components/richtext/SlashCommandMenu.d.ts.map +0 -1
- package/dist/components/richtext/SlashCommandMenu.js.map +0 -1
- package/dist/components/richtext/VariableEmbedEditor.d.ts.map +0 -1
- package/dist/components/richtext/VariableEmbedEditor.js +0 -58
- package/dist/components/richtext/VariableEmbedEditor.js.map +0 -1
- package/dist/components/ui/avatar-stack.d.ts +0 -13
- package/dist/components/ui/avatar-stack.d.ts.map +0 -1
- package/dist/components/ui/avatar-stack.js +0 -27
- package/dist/components/ui/avatar-stack.js.map +0 -1
- package/dist/components/ui/avatar.d.ts +0 -7
- package/dist/components/ui/avatar.d.ts.map +0 -1
- package/dist/components/ui/avatar.js +0 -45
- package/dist/components/ui/avatar.js.map +0 -1
- package/dist/components/ui/banner.d.ts +0 -13
- package/dist/components/ui/banner.d.ts.map +0 -1
- package/dist/components/ui/banner.js +0 -24
- package/dist/components/ui/banner.js.map +0 -1
- package/dist/components/ui/branch-chip.d.ts.map +0 -1
- package/dist/components/ui/branch-chip.js +0 -58
- package/dist/components/ui/branch-chip.js.map +0 -1
- package/dist/components/ui/button.d.ts +0 -14
- package/dist/components/ui/button.d.ts.map +0 -1
- package/dist/components/ui/button.js +0 -65
- package/dist/components/ui/button.js.map +0 -1
- package/dist/components/ui/card.d.ts +0 -7
- package/dist/components/ui/card.d.ts.map +0 -1
- package/dist/components/ui/card.js.map +0 -1
- package/dist/components/ui/chip.d.ts.map +0 -1
- package/dist/components/ui/chip.js +0 -44
- package/dist/components/ui/chip.js.map +0 -1
- package/dist/components/ui/dialog.d.ts +0 -20
- package/dist/components/ui/dialog.d.ts.map +0 -1
- package/dist/components/ui/dialog.js +0 -93
- package/dist/components/ui/dialog.js.map +0 -1
- package/dist/components/ui/dropdown-menu.d.ts +0 -28
- package/dist/components/ui/dropdown-menu.d.ts.map +0 -1
- package/dist/components/ui/dropdown-menu.js +0 -165
- package/dist/components/ui/dropdown-menu.js.map +0 -1
- package/dist/components/ui/empty.d.ts +0 -11
- package/dist/components/ui/empty.d.ts.map +0 -1
- package/dist/components/ui/empty.js +0 -24
- package/dist/components/ui/empty.js.map +0 -1
- package/dist/components/ui/field.d.ts.map +0 -1
- package/dist/components/ui/field.js +0 -52
- package/dist/components/ui/field.js.map +0 -1
- package/dist/components/ui/input.d.ts.map +0 -1
- package/dist/components/ui/input.js +0 -51
- package/dist/components/ui/input.js.map +0 -1
- package/dist/components/ui/kbd.d.ts.map +0 -1
- package/dist/components/ui/kbd.js +0 -30
- package/dist/components/ui/kbd.js.map +0 -1
- package/dist/components/ui/label.d.ts +0 -6
- package/dist/components/ui/label.d.ts.map +0 -1
- package/dist/components/ui/label.js +0 -20
- package/dist/components/ui/label.js.map +0 -1
- package/dist/components/ui/publish-button.d.ts +0 -7
- package/dist/components/ui/publish-button.d.ts.map +0 -1
- package/dist/components/ui/publish-button.js +0 -50
- package/dist/components/ui/publish-button.js.map +0 -1
- package/dist/components/ui/select.d.ts +0 -14
- package/dist/components/ui/select.d.ts.map +0 -1
- package/dist/components/ui/select.js +0 -132
- package/dist/components/ui/select.js.map +0 -1
- package/dist/components/ui/sonner.d.ts +0 -6
- package/dist/components/ui/sonner.d.ts.map +0 -1
- package/dist/components/ui/sonner.js +0 -37
- package/dist/components/ui/sonner.js.map +0 -1
- package/dist/components/ui/status-badge.d.ts.map +0 -1
- package/dist/components/ui/status-badge.js.map +0 -1
- package/dist/components/ui/table.d.ts.map +0 -1
- package/dist/components/ui/table.js.map +0 -1
- package/dist/components/ui/tabs-pill.d.ts +0 -17
- package/dist/components/ui/tabs-pill.d.ts.map +0 -1
- package/dist/components/ui/tabs-pill.js +0 -67
- package/dist/components/ui/tabs-pill.js.map +0 -1
- package/dist/components/ui/tabs.d.ts +0 -8
- package/dist/components/ui/tabs.d.ts.map +0 -1
- package/dist/components/ui/tabs.js +0 -59
- package/dist/components/ui/tabs.js.map +0 -1
- package/dist/components/ui/textarea.d.ts.map +0 -1
- package/dist/components/ui/textarea.js +0 -25
- package/dist/components/ui/textarea.js.map +0 -1
- package/dist/components/ui/toast-card.d.ts +0 -15
- package/dist/components/ui/toast-card.d.ts.map +0 -1
- package/dist/components/ui/toast-card.js +0 -90
- package/dist/components/ui/toast-card.js.map +0 -1
- package/dist/components/ui/toast.d.ts +0 -16
- package/dist/components/ui/toast.d.ts.map +0 -1
- package/dist/components/ui/toast.js +0 -95
- package/dist/components/ui/toast.js.map +0 -1
- package/dist/components/ui/toaster.d.ts.map +0 -1
- package/dist/components/ui/toaster.js +0 -30
- package/dist/components/ui/toaster.js.map +0 -1
- package/dist/embeddingsGen-7MXSZQ43.js.map +0 -1
- package/dist/init-N6K464EZ.js.map +0 -1
- package/dist/typesGen-EYRZAA56.js.map +0 -1
- /package/dist/{agentDocs-M3R2CPUQ.js.map → agentDocs-QZ4NOQVH.js.map} +0 -0
- /package/dist/components/{ErrorBoundary.d.ts → ErrorBoundary/ErrorBoundary.d.ts} +0 -0
- /package/dist/components/{CreateBranchDialog.d.ts → Layout/CreateBranchDialog.d.ts} +0 -0
- /package/dist/components/{FormBooleanField.d.ts → ui/FormField/FormBooleanField.d.ts} +0 -0
- /package/dist/components/{FormColorField.d.ts → ui/FormField/FormColorField.d.ts} +0 -0
- /package/dist/components/{FormDatetimeField.d.ts → ui/FormField/FormDatetimeField.d.ts} +0 -0
- /package/dist/components/{FormJsonField.d.ts → ui/FormField/FormJsonField.d.ts} +0 -0
- /package/dist/components/{FormMarkdownField.d.ts → ui/FormField/FormMarkdownField.d.ts} +0 -0
- /package/dist/components/{FormNumberField.d.ts → ui/FormField/FormNumberField.d.ts} +0 -0
- /package/dist/components/{FormSlugField.d.ts → ui/FormField/FormSlugField.d.ts} +0 -0
- /package/dist/components/{FormStringField.d.ts → ui/FormField/FormStringField.d.ts} +0 -0
- /package/dist/components/{FormStringListField.d.ts → ui/FormField/FormStringListField.d.ts} +0 -0
- /package/dist/components/{FormTextField.d.ts → ui/FormField/FormTextField.d.ts} +0 -0
- /package/dist/components/{FormUrlField.d.ts → ui/FormField/FormUrlField.d.ts} +0 -0
- /package/dist/components/{richtext → ui/FormField/richtext}/ConditionEmbedEditor.d.ts +0 -0
- /package/dist/components/{richtext → ui/FormField/richtext}/ImageEmbedEditor.d.ts +0 -0
- /package/dist/components/{richtext → ui/FormField/richtext}/ReferenceEmbedEditor.d.ts +0 -0
- /package/dist/components/{richtext → ui/FormField/richtext}/SlashCommandMenu.d.ts +0 -0
- /package/dist/components/{richtext → ui/FormField/richtext}/VariableEmbedEditor.d.ts +0 -0
- /package/dist/{update-QNJRYPMC.js.map → update-QALIQG76.js.map} +0 -0
- /package/dist/{validate-6AFW6U2X.js.map → validate-AAW4IGWD.js.map} +0 -0
package/dist/admin/AdminApp.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ type AdminAppProps = {
|
|
|
12
12
|
* /cms/content → ContentPage (alias for /cms — kept for legacy links)
|
|
13
13
|
* /cms/content/<type> → CollectionPage
|
|
14
14
|
* /cms/content/<type>/<id> → EntryPage
|
|
15
|
-
* /cms/chat → ChatPage (
|
|
15
|
+
* /cms/chat → ChatPage (setup guide when agent not enabled)
|
|
16
16
|
* /cms/media → MediaPage (library — grid + folders)
|
|
17
17
|
* /cms/media/<id> → MediaAssetPage (full-page asset editor)
|
|
18
18
|
* /cms/model → ContentModelPage
|
package/dist/admin/AdminApp.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "../chunk-B5LE2OEC.js";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
3
|
+
import { NeutralPageSkeleton } from "../components/Layout/skeletons/NeutralPageSkeleton";
|
|
4
4
|
import { ChatPage } from "./pages/ChatPage";
|
|
5
5
|
import { CollectionPage } from "./pages/CollectionPage";
|
|
6
6
|
import { ContentModelPage } from "./pages/ContentModelPage";
|
|
@@ -43,7 +43,7 @@ async function AdminApp({ params }) {
|
|
|
43
43
|
const [, type, id] = segments;
|
|
44
44
|
return /* @__PURE__ */ jsx(EntryPage, { params: Promise.resolve({ type, id }) }, `${type}/${id}`);
|
|
45
45
|
}
|
|
46
|
-
return /* @__PURE__ */ jsx(
|
|
46
|
+
return /* @__PURE__ */ jsx(NeutralPageSkeleton, {});
|
|
47
47
|
}
|
|
48
48
|
export {
|
|
49
49
|
AdminApp
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../admin/AdminApp.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../admin/AdminApp.tsx"],"sourcesContent":["import { NeutralPageSkeleton } from '../components/Layout/skeletons/NeutralPageSkeleton';\n\nimport { ChatPage } from './pages/ChatPage';\nimport { CollectionPage } from './pages/CollectionPage';\nimport { ContentModelPage } from './pages/ContentModelPage';\nimport { ContentPage } from './pages/ContentPage';\nimport { ContentTypePage } from './pages/ContentTypePage';\nimport { EntryPage } from './pages/EntryPage';\nimport { MediaAssetPage } from './pages/MediaAssetPage';\nimport { MediaPage } from './pages/MediaPage';\n\ntype AdminAppProps = {\n params: Promise<{ path?: string[] }>;\n};\n\n/**\n * Catch-all admin router. Mounted via a single `src/app/cms/[[...path]]/page.tsx`\n * file in the user app that re-exports this component as the default.\n *\n * Route segments map to admin pages:\n * /cms → ContentPage (admin home — content list)\n * /cms/content → ContentPage (alias for /cms — kept for legacy links)\n * /cms/content/<type> → CollectionPage\n * /cms/content/<type>/<id> → EntryPage\n * /cms/chat → ChatPage (setup guide when agent not enabled)\n * /cms/media → MediaPage (library — grid + folders)\n * /cms/media/<id> → MediaAssetPage (full-page asset editor)\n * /cms/model → ContentModelPage\n * /cms/model/<type> → ContentTypePage\n *\n * **No `Suspense` in the dispatcher** — `await params` runs in this async RSC; Next.js\n * keeps the previous segment visible during navigation. Thin server shells (`*Page`)\n * hand off to client components that load via TanStack Query and render their own\n * block-level skeletons (`LeftPanelSkeleton`, `ContentTableSkeleton`, etc.).\n */\nexport async function AdminApp({ params }: AdminAppProps) {\n const { path } = await params;\n const segments = path ?? [];\n\n if (segments.length === 0) {\n return <ContentPage />;\n }\n\n if (segments[0] === 'chat') {\n return <ChatPage />;\n }\n\n if (segments[0] === 'media') {\n if (segments.length === 1) {\n return <MediaPage />;\n }\n const id = segments[1];\n return <MediaAssetPage id={id} key={id} />;\n }\n\n if (segments[0] === 'model') {\n if (segments.length === 1) {\n return <ContentModelPage />;\n }\n const [, type] = segments;\n return <ContentTypePage type={type} key={type} />;\n }\n\n if (segments[0] === 'content') {\n if (segments.length === 1) {\n return <ContentPage />;\n }\n if (segments.length === 2) {\n const [, type] = segments;\n return <CollectionPage params={Promise.resolve({ type })} key={type} />;\n }\n const [, type, id] = segments;\n return <EntryPage params={Promise.resolve({ type, id })} key={`${type}/${id}`} />;\n }\n\n return <NeutralPageSkeleton />;\n}\n"],"mappings":";AAwCW;AAxCX,SAAS,2BAA2B;AAEpC,SAAS,gBAAgB;AACzB,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,uBAAuB;AAChC,SAAS,iBAAiB;AAC1B,SAAS,sBAAsB;AAC/B,SAAS,iBAAiB;AA0B1B,eAAsB,SAAS,EAAE,OAAO,GAAkB;AACxD,QAAM,EAAE,KAAK,IAAI,MAAM;AACvB,QAAM,WAAW,sBAAQ,CAAC;AAE1B,MAAI,SAAS,WAAW,GAAG;AACzB,WAAO,oBAAC,eAAY;AAAA,EACtB;AAEA,MAAI,SAAS,CAAC,MAAM,QAAQ;AAC1B,WAAO,oBAAC,YAAS;AAAA,EACnB;AAEA,MAAI,SAAS,CAAC,MAAM,SAAS;AAC3B,QAAI,SAAS,WAAW,GAAG;AACzB,aAAO,oBAAC,aAAU;AAAA,IACpB;AACA,UAAM,KAAK,SAAS,CAAC;AACrB,WAAO,oBAAC,kBAAe,MAAa,EAAI;AAAA,EAC1C;AAEA,MAAI,SAAS,CAAC,MAAM,SAAS;AAC3B,QAAI,SAAS,WAAW,GAAG;AACzB,aAAO,oBAAC,oBAAiB;AAAA,IAC3B;AACA,UAAM,CAAC,EAAE,IAAI,IAAI;AACjB,WAAO,oBAAC,mBAAgB,QAAiB,IAAM;AAAA,EACjD;AAEA,MAAI,SAAS,CAAC,MAAM,WAAW;AAC7B,QAAI,SAAS,WAAW,GAAG;AACzB,aAAO,oBAAC,eAAY;AAAA,IACtB;AACA,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,CAAC,EAAEA,KAAI,IAAI;AACjB,aAAO,oBAAC,kBAAe,QAAQ,QAAQ,QAAQ,EAAE,MAAAA,MAAK,CAAC,KAAQA,KAAM;AAAA,IACvE;AACA,UAAM,CAAC,EAAE,MAAM,EAAE,IAAI;AACrB,WAAO,oBAAC,aAAU,QAAQ,QAAQ,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAQ,GAAG,IAAI,IAAI,EAAE,EAAI;AAAA,EACjF;AAEA,SAAO,oBAAC,uBAAoB;AAC9B;","names":["type"]}
|
|
@@ -9,9 +9,9 @@ export type AgentClientStatus = {
|
|
|
9
9
|
/**
|
|
10
10
|
* Server-side check exposed to the admin client (Header nav link).
|
|
11
11
|
*
|
|
12
|
-
* Never returns the API key. Returns `{ enabled: false }` when the chat is
|
|
13
|
-
* disabled
|
|
14
|
-
*
|
|
12
|
+
* Never returns the API key. Returns `{ enabled: false }` when the chat API is
|
|
13
|
+
* disabled (missing config, key, or budget). The `/cms/chat` page still renders
|
|
14
|
+
* a setup guide; this action is for optional client UI that needs a boolean gate.
|
|
15
15
|
*/
|
|
16
16
|
export declare function getAgentClientStatus(): Promise<AgentClientStatus>;
|
|
17
17
|
export type AcceptProposalActionResult = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../admin/actions/agent.ts"],"sourcesContent":["'use server';\n\nimport './registerConfig';\n\nimport { getServerSession } from 'next-auth/next';\n\nimport { getAgentConfig } from '../../agent/configStore';\nimport { getAgentStatus, isAgentEnabled } from '../../agent/featureFlag';\nimport { acceptProposal, isProposal, type AcceptResult } from '../../agent/proposals';\nimport { authOptions } from '../auth';\n\nexport type AgentClientStatus =\n | { enabled: false }\n | {\n enabled: true;\n provider: 'anthropic' | 'openai' | 'local';\n model: string;\n };\n\n/**\n * Server-side check exposed to the admin client (Header nav link).\n *\n * Never returns the API key. Returns `{ enabled: false }` when the chat is\n * disabled
|
|
1
|
+
{"version":3,"sources":["../../../admin/actions/agent.ts"],"sourcesContent":["'use server';\n\nimport './registerConfig';\n\nimport { getServerSession } from 'next-auth/next';\n\nimport { getAgentConfig } from '../../agent/configStore';\nimport { getAgentStatus, isAgentEnabled } from '../../agent/featureFlag';\nimport { acceptProposal, isProposal, type AcceptResult } from '../../agent/proposals';\nimport { authOptions } from '../auth';\n\nexport type AgentClientStatus =\n | { enabled: false }\n | {\n enabled: true;\n provider: 'anthropic' | 'openai' | 'local';\n model: string;\n };\n\n/**\n * Server-side check exposed to the admin client (Header nav link).\n *\n * Never returns the API key. Returns `{ enabled: false }` when the chat API is\n * disabled (missing config, key, or budget). The `/cms/chat` page still renders\n * a setup guide; this action is for optional client UI that needs a boolean gate.\n */\nexport async function getAgentClientStatus(): Promise<AgentClientStatus> {\n const cfg = getAgentConfig();\n if (!cfg || !isAgentEnabled(cfg)) return { enabled: false };\n // Recompute via getAgentStatus so we exercise the same code path the route uses.\n const status = getAgentStatus(cfg);\n if (!status.enabled) return { enabled: false };\n return { enabled: true, provider: cfg.provider.type, model: cfg.provider.model };\n}\n\nexport type AcceptProposalActionResult =\n | { ok: true; entryPath: string }\n | { ok: false; error: string; fieldErrors?: Record<string, string> };\n\n/**\n * Server action — apply a chat-agent edit/create proposal.\n *\n * Replaces the previous `POST /api/agent/proposals/accept` Route Handler. The\n * client (`useChatStream`) calls this directly via the Server Action transport\n * — no public endpoint, no thin re-export file.\n *\n * Stateless by design: the entire proposal payload arrives over the wire and\n * is re-validated here (and again inside `acceptProposal` via the schema\n * validator + `saveFile`).\n *\n * Returns `{ ok: false, error }` on validation / write failures so the client\n * can render an inline error without try/catch around the action call.\n * Throws only when the agent is disabled or the caller is unauthenticated —\n * those are caller-bug shapes, not user-facing flow.\n */\nexport async function acceptProposalAction(proposal: unknown): Promise<AcceptProposalActionResult> {\n const cfg = getAgentConfig();\n if (!cfg || !isAgentEnabled(cfg)) {\n throw new Error('Chat agent is disabled.');\n }\n\n const session = await getServerSession(authOptions);\n if (!session) {\n throw new Error('Unauthorized.');\n }\n\n if (!isProposal(proposal)) {\n return { ok: false, error: 'Invalid proposal payload.' };\n }\n\n const result: AcceptResult = await acceptProposal(proposal);\n if (!result.ok) {\n return result.fieldErrors\n ? { ok: false, error: result.error, fieldErrors: result.fieldErrors }\n : { ok: false, error: result.error };\n }\n return { ok: true, entryPath: result.entryPath };\n}\n\n/**\n * Server action — record that the user dismissed a proposal.\n *\n * Replaces the previous `POST /api/agent/proposals/reject` Route Handler.\n * There's no server-side proposal record to mark rejected; this just\n * acknowledges the click. The client reflects rejection in its own state and\n * feeds the rejection back to the model on the next chat turn as a synthetic\n * system note. The `reason` argument is currently ignored — kept for forward\n * compatibility (e.g. analytics / per-rejection telemetry).\n *\n * Auth-gated to keep the surface consistent with `acceptProposalAction`.\n */\nexport async function rejectProposalAction(_reason?: string | null): Promise<{ ok: true }> {\n const cfg = getAgentConfig();\n if (!cfg || !isAgentEnabled(cfg)) {\n throw new Error('Chat agent is disabled.');\n }\n\n const session = await getServerSession(authOptions);\n if (!session) {\n throw new Error('Unauthorized.');\n }\n\n return { ok: true };\n}\n"],"mappings":";;AAEA,OAAO;AAEP,SAAS,wBAAwB;AAEjC,SAAS,sBAAsB;AAC/B,SAAS,gBAAgB,sBAAsB;AAC/C,SAAS,gBAAgB,kBAAqC;AAC9D,SAAS,mBAAmB;AAiB5B,eAAsB,uBAAmD;AACvE,QAAM,MAAM,eAAe;AAC3B,MAAI,CAAC,OAAO,CAAC,eAAe,GAAG,EAAG,QAAO,EAAE,SAAS,MAAM;AAE1D,QAAM,SAAS,eAAe,GAAG;AACjC,MAAI,CAAC,OAAO,QAAS,QAAO,EAAE,SAAS,MAAM;AAC7C,SAAO,EAAE,SAAS,MAAM,UAAU,IAAI,SAAS,MAAM,OAAO,IAAI,SAAS,MAAM;AACjF;AAsBA,eAAsB,qBAAqB,UAAwD;AACjG,QAAM,MAAM,eAAe;AAC3B,MAAI,CAAC,OAAO,CAAC,eAAe,GAAG,GAAG;AAChC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAEA,QAAM,UAAU,MAAM,iBAAiB,WAAW;AAClD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,eAAe;AAAA,EACjC;AAEA,MAAI,CAAC,WAAW,QAAQ,GAAG;AACzB,WAAO,EAAE,IAAI,OAAO,OAAO,4BAA4B;AAAA,EACzD;AAEA,QAAM,SAAuB,MAAM,eAAe,QAAQ;AAC1D,MAAI,CAAC,OAAO,IAAI;AACd,WAAO,OAAO,cACV,EAAE,IAAI,OAAO,OAAO,OAAO,OAAO,aAAa,OAAO,YAAY,IAClE,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM;AAAA,EACvC;AACA,SAAO,EAAE,IAAI,MAAM,WAAW,OAAO,UAAU;AACjD;AAcA,eAAsB,qBAAqB,SAAgD;AACzF,QAAM,MAAM,eAAe;AAC3B,MAAI,CAAC,OAAO,CAAC,eAAe,GAAG,GAAG;AAChC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAEA,QAAM,UAAU,MAAM,iBAAiB,WAAW;AAClD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,eAAe;AAAA,EACjC;AAEA,SAAO,EAAE,IAAI,KAAK;AACpB;","names":[]}
|
|
@@ -4,15 +4,13 @@ import "./registerConfig";
|
|
|
4
4
|
import fsPromises from "fs/promises";
|
|
5
5
|
import path from "path";
|
|
6
6
|
import { getConfig } from "../../lib/configStore";
|
|
7
|
-
import { getContentFiles, getFile } from "./files";
|
|
7
|
+
import { getContentFiles, getFile, getFileJson } from "./files";
|
|
8
8
|
import { isProductionMode } from "../github";
|
|
9
9
|
import { getMediaEntries } from "./media";
|
|
10
10
|
import { getEntryTitleField } from "./utils";
|
|
11
11
|
const getEntryList = async (collection = "**") => {
|
|
12
|
-
var _a, _b, _c;
|
|
13
12
|
const config = getConfig();
|
|
14
13
|
const files = await getContentFiles(collection);
|
|
15
|
-
const entries = [];
|
|
16
14
|
const mediaList = await getMediaEntries().catch(() => []);
|
|
17
15
|
const mediaById = /* @__PURE__ */ new Map();
|
|
18
16
|
for (const m of mediaList) {
|
|
@@ -20,60 +18,63 @@ const getEntryList = async (collection = "**") => {
|
|
|
20
18
|
}
|
|
21
19
|
const imageFieldKeyByType = /* @__PURE__ */ new Map();
|
|
22
20
|
function firstImageFieldKey(type) {
|
|
23
|
-
var
|
|
24
|
-
if (imageFieldKeyByType.has(type)) return (
|
|
21
|
+
var _a, _b;
|
|
22
|
+
if (imageFieldKeyByType.has(type)) return (_a = imageFieldKeyByType.get(type)) != null ? _a : null;
|
|
25
23
|
const collection2 = config.collections[type];
|
|
26
24
|
if (!collection2) {
|
|
27
25
|
imageFieldKeyByType.set(type, null);
|
|
28
26
|
return null;
|
|
29
27
|
}
|
|
30
|
-
const key = (
|
|
28
|
+
const key = (_b = Object.keys(collection2.fields).find((k) => collection2.fields[k].format === "image")) != null ? _b : null;
|
|
31
29
|
imageFieldKeyByType.set(type, key);
|
|
32
30
|
return key;
|
|
33
31
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (imgKey) {
|
|
51
|
-
const value = (_b = content == null ? void 0 : content.fields) == null ? void 0 : _b[imgKey];
|
|
52
|
-
if (typeof value === "string" && value.trim()) {
|
|
53
|
-
const hit = mediaById.get(value.trim());
|
|
54
|
-
if (hit) thumbnailUrl = hit.publicUrl;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
if ((_c = content == null ? void 0 : content.sys) == null ? void 0 : _c.status) {
|
|
58
|
-
status = content.sys.status;
|
|
59
|
-
}
|
|
60
|
-
} catch (_e) {
|
|
61
|
-
}
|
|
62
|
-
if (!isProductionMode()) {
|
|
63
|
-
try {
|
|
64
|
-
const stat = await fsPromises.stat(path.join(
|
|
32
|
+
const isProd = isProductionMode();
|
|
33
|
+
const items = await Promise.all(
|
|
34
|
+
files.map(async (file) => {
|
|
35
|
+
var _a, _b, _c;
|
|
36
|
+
const nameWithoutFolder = file.replace(`${config.contentFolder}/`, "").replace(".json", "");
|
|
37
|
+
const parts = nameWithoutFolder.split("/");
|
|
38
|
+
const type = parts[0];
|
|
39
|
+
const id = parts[parts.length - 1];
|
|
40
|
+
const titleField = getEntryTitleField(type);
|
|
41
|
+
let title = id;
|
|
42
|
+
let status = "merged";
|
|
43
|
+
let updatedAt;
|
|
44
|
+
let thumbnailUrl;
|
|
45
|
+
const [contentResult, statResult] = await Promise.allSettled([
|
|
46
|
+
getFileJson(file),
|
|
47
|
+
isProd ? Promise.resolve(null) : fsPromises.stat(path.join(
|
|
65
48
|
/*turbopackIgnore: true*/
|
|
66
49
|
process.cwd(),
|
|
67
50
|
file
|
|
68
|
-
))
|
|
69
|
-
|
|
70
|
-
|
|
51
|
+
))
|
|
52
|
+
]);
|
|
53
|
+
if (contentResult.status === "fulfilled" && contentResult.value) {
|
|
54
|
+
const content = contentResult.value;
|
|
55
|
+
if (titleField && ((_a = content == null ? void 0 : content.fields) == null ? void 0 : _a[titleField])) {
|
|
56
|
+
title = content.fields[titleField];
|
|
57
|
+
}
|
|
58
|
+
const imgKey = firstImageFieldKey(type);
|
|
59
|
+
if (imgKey) {
|
|
60
|
+
const value = (_b = content == null ? void 0 : content.fields) == null ? void 0 : _b[imgKey];
|
|
61
|
+
if (typeof value === "string" && value.trim()) {
|
|
62
|
+
const hit = mediaById.get(value.trim());
|
|
63
|
+
if (hit) thumbnailUrl = hit.publicUrl;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if ((_c = content == null ? void 0 : content.sys) == null ? void 0 : _c.status) {
|
|
67
|
+
status = content.sys.status;
|
|
68
|
+
}
|
|
71
69
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
70
|
+
if (!isProd && statResult.status === "fulfilled" && statResult.value) {
|
|
71
|
+
updatedAt = statResult.value.mtime.toISOString();
|
|
72
|
+
}
|
|
73
|
+
return { type, id, path: file, title, status, updatedAt, thumbnailUrl };
|
|
74
|
+
})
|
|
75
|
+
);
|
|
76
|
+
items.sort((a, b) => a.title.localeCompare(b.title));
|
|
77
|
+
return items;
|
|
77
78
|
};
|
|
78
79
|
const getEntryBacklinks = async (targetReferenceKey) => {
|
|
79
80
|
var _a, _b, _c, _d;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../admin/actions/entries.ts"],"sourcesContent":["'use server';\n\nimport './registerConfig';\n\nimport fsPromises from 'fs/promises';\nimport path from 'path';\n\nimport { getConfig } from '../../lib/configStore';\nimport type { Config } from '../types';\nimport type { EntryListItem, EntryStatus } from '../../types';\n\nimport { getContentFiles, getFile } from './files';\nimport { isProductionMode } from '../github';\nimport { getMediaEntries } from './media';\nimport { getEntryTitleField } from './utils';\n\nexport const getEntryList = async (collection: string = '**'): Promise<EntryListItem[]> => {\n const config = getConfig();\n const files = await getContentFiles(collection);\n
|
|
1
|
+
{"version":3,"sources":["../../../admin/actions/entries.ts"],"sourcesContent":["'use server';\n\nimport './registerConfig';\n\nimport fsPromises from 'fs/promises';\nimport path from 'path';\n\nimport { getConfig } from '../../lib/configStore';\nimport type { Config } from '../types';\nimport type { EntryListItem, EntryStatus } from '../../types';\n\nimport { getContentFiles, getFile, getFileJson } from './files';\nimport { isProductionMode } from '../github';\nimport { getMediaEntries } from './media';\nimport { getEntryTitleField } from './utils';\n\nexport const getEntryList = async (collection: string = '**'): Promise<EntryListItem[]> => {\n const config = getConfig();\n const files = await getContentFiles(collection);\n // Build a media lookup so we can resolve thumbnail URLs for any entry that\n // has an `image` field. One batched call regardless of entry count.\n const mediaList = await getMediaEntries().catch(() => []);\n const mediaById = new Map<string, { ext: string; publicUrl: string }>();\n for (const m of mediaList) {\n mediaById.set(m.id, { ext: m.extension, publicUrl: m.publicUrl });\n }\n\n const imageFieldKeyByType = new Map<string, string | null>();\n function firstImageFieldKey(type: string): string | null {\n if (imageFieldKeyByType.has(type)) return imageFieldKeyByType.get(type) ?? null;\n const collection = (config as Config).collections[type as keyof Config['collections']];\n if (!collection) {\n imageFieldKeyByType.set(type, null);\n return null;\n }\n const key = Object.keys(collection.fields).find((k) => collection.fields[k].format === 'image') ?? null;\n imageFieldKeyByType.set(type, key);\n return key;\n }\n\n const isProd = isProductionMode();\n\n const items = await Promise.all(\n files.map(async (file) => {\n const nameWithoutFolder = file.replace(`${config.contentFolder}/`, '').replace('.json', '');\n const parts = nameWithoutFolder.split('/');\n const type = parts[0];\n const id = parts[parts.length - 1];\n const titleField = getEntryTitleField(type);\n\n let title = id;\n let status: EntryStatus = 'merged';\n let updatedAt: string | undefined;\n let thumbnailUrl: string | undefined;\n\n const [contentResult, statResult] = await Promise.allSettled([\n getFileJson(file),\n isProd ? Promise.resolve(null) : fsPromises.stat(path.join(/*turbopackIgnore: true*/ process.cwd(), file)),\n ]);\n\n if (contentResult.status === 'fulfilled' && contentResult.value) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const content = contentResult.value as any;\n if (titleField && content?.fields?.[titleField]) {\n title = content.fields[titleField];\n }\n const imgKey = firstImageFieldKey(type);\n if (imgKey) {\n const value = content?.fields?.[imgKey];\n if (typeof value === 'string' && value.trim()) {\n const hit = mediaById.get(value.trim());\n if (hit) thumbnailUrl = hit.publicUrl;\n }\n }\n if (content?.sys?.status) {\n status = content.sys.status;\n }\n }\n\n if (!isProd && statResult.status === 'fulfilled' && statResult.value) {\n updatedAt = (statResult.value as { mtime: Date }).mtime.toISOString();\n }\n\n return { type, id, path: file, title, status, updatedAt, thumbnailUrl };\n }),\n );\n\n items.sort((a, b) => a.title.localeCompare(b.title));\n return items;\n};\n\n/**\n * Find all content entries that reference the given entry via reference fields.\n * Returns entries that contain `targetReferenceKey` in any reference field value.\n */\nexport const getEntryBacklinks = async (targetReferenceKey: string): Promise<EntryListItem[]> => {\n const config = getConfig();\n const allFiles = await getContentFiles('**');\n const backlinks: EntryListItem[] = [];\n\n for (const file of allFiles) {\n try {\n const content = await getFile(file);\n const type = content?.sys?.type;\n if (!type) continue;\n\n const collection = config.collections[type as keyof Config['collections']];\n if (!collection) continue;\n\n const referenceFieldKeys = Object.keys(collection.fields).filter(\n (k) => collection.fields[k].format === 'reference',\n );\n if (referenceFieldKeys.length === 0) continue;\n\n let found = false;\n for (const fieldKey of referenceFieldKeys) {\n const fieldValue = content?.fields?.[fieldKey];\n if (!fieldValue) continue;\n\n // Reference values can be a single string (cardinality 'one') or a JSON array string (cardinality 'many')\n let keys: string[] = [];\n if (typeof fieldValue === 'string') {\n try {\n const parsed = JSON.parse(fieldValue);\n keys = Array.isArray(parsed) ? parsed : [fieldValue];\n } catch {\n keys = [fieldValue];\n }\n } else if (Array.isArray(fieldValue)) {\n keys = fieldValue;\n }\n\n if (keys.includes(targetReferenceKey)) {\n found = true;\n break;\n }\n }\n\n if (found) {\n const nameWithoutFolder = file.replace(`${config.contentFolder}/`, '').replace('.json', '');\n const parts = nameWithoutFolder.split('/');\n const id = parts[parts.length - 1];\n const titleField = getEntryTitleField(type);\n let title = id;\n if (titleField && content?.fields?.[titleField]) {\n title = content.fields[titleField];\n }\n const status: EntryStatus = content?.sys?.status || 'merged';\n backlinks.push({ type, id, path: file, title, status });\n }\n } catch (_e) {\n // Skip files that can't be read\n }\n }\n\n return backlinks;\n};\n"],"mappings":"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","names":["collection"]}
|
|
@@ -16,6 +16,11 @@ export declare const getContentFiles: (collection?: string) => Promise<string[]>
|
|
|
16
16
|
*/
|
|
17
17
|
export declare const getMediaContentFiles: () => Promise<string[]>;
|
|
18
18
|
export declare const getMediaFiles: (folder?: string) => Promise<string[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Read only the raw entry JSON — no companion markdown/richtext merging.
|
|
21
|
+
* Use for list views where companion content is never needed.
|
|
22
|
+
*/
|
|
23
|
+
export declare const getFileJson: (fileName: string) => Promise<Record<string, unknown> | null>;
|
|
19
24
|
export declare const getFile: (fileName: string) => Promise<any>;
|
|
20
25
|
export declare const saveFile: (formData: any, fileName: string, options?: {
|
|
21
26
|
skipStatusTransition?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../admin/actions/files.ts"],"names":[],"mappings":"AAEA,OAAO,kBAAkB,CAAC;AA+B1B,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAgM9C;;GAEG;AACH,eAAO,MAAM,sCAAsC,QAAa,OAAO,CAAC,IAAI,CAQ3E,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAU,UAAU,MAAM,EAAE,iBAAiB,MAAM,EAAE,UAAU,MAAM,kBAyB7G,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,aAAY,MAAa,
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../admin/actions/files.ts"],"names":[],"mappings":"AAEA,OAAO,kBAAkB,CAAC;AA+B1B,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAgM9C;;GAEG;AACH,eAAO,MAAM,sCAAsC,QAAa,OAAO,CAAC,IAAI,CAQ3E,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAU,UAAU,MAAM,EAAE,iBAAiB,MAAM,EAAE,UAAU,MAAM,kBAyB7G,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,aAAY,MAAa,sBAkC9D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,QAAa,OAAO,CAAC,MAAM,EAAE,CAiB7D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAU,SAAQ,MAAa,sBAqBxD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAgC1F,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,UAAU,MAAM,iBAkF7C,CAAC;AAuBF,eAAO,MAAM,QAAQ,GACnB,UAAU,GAAG,EACb,UAAU,MAAM,EAChB,UAAU;IAAE,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAAE,KAC3C,OAAO,CAAC,cAAc,CAoJxB,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,aAAa,CAoDjE,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,YAAY,CA2DvE,CAAC"}
|
|
@@ -6,9 +6,9 @@ import {
|
|
|
6
6
|
import "./registerConfig";
|
|
7
7
|
import fsPromises from "fs/promises";
|
|
8
8
|
import path from "path";
|
|
9
|
-
import { glob } from "glob";
|
|
10
9
|
import { cookies } from "next/headers";
|
|
11
10
|
import { getConfig } from "../../lib/configStore";
|
|
11
|
+
import { listLocalCollectionFiles, listLocalFilesRecursive, listLocalFilesWithExtensions } from "../../lib/localReader";
|
|
12
12
|
import { getAgentConfig } from "../../agent/configStore";
|
|
13
13
|
import { syncEmbeddingsAfterRemove, syncEmbeddingsAfterUpsert } from "../../agent/embeddingsHook";
|
|
14
14
|
import { BRANCH_HISTORY_FILE_PATH, mergeHistoryContentWithAppendedEntry } from "../../lib/branchHistory";
|
|
@@ -236,8 +236,10 @@ const getContentFiles = async (collection = "**") => {
|
|
|
236
236
|
} catch (e) {
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
|
-
|
|
240
|
-
|
|
239
|
+
if (collection === "**") {
|
|
240
|
+
return await listLocalFilesRecursive(config.contentFolder, ".json");
|
|
241
|
+
}
|
|
242
|
+
return await listLocalCollectionFiles(`${config.contentFolder}/${collection}`);
|
|
241
243
|
} catch (e) {
|
|
242
244
|
return [];
|
|
243
245
|
}
|
|
@@ -253,8 +255,7 @@ const getMediaContentFiles = async () => {
|
|
|
253
255
|
} catch (_e) {
|
|
254
256
|
}
|
|
255
257
|
}
|
|
256
|
-
|
|
257
|
-
return files || [];
|
|
258
|
+
return await listLocalCollectionFiles(folder);
|
|
258
259
|
} catch (_e) {
|
|
259
260
|
return [];
|
|
260
261
|
}
|
|
@@ -266,19 +267,56 @@ const getMediaFiles = async (folder = "**") => {
|
|
|
266
267
|
if (isProductionMode()) {
|
|
267
268
|
const activeBranch = (_a = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)) == null ? void 0 : _a.value;
|
|
268
269
|
try {
|
|
269
|
-
const
|
|
270
|
-
const allFiles = await listGitHubFilesRecursive(
|
|
270
|
+
const dir2 = folder === "**" ? config.mediaFolder : `${config.mediaFolder}/${folder}`;
|
|
271
|
+
const allFiles = await listGitHubFilesRecursive(dir2, void 0, activeBranch);
|
|
271
272
|
const extensions = config.mediaAllowedFormats;
|
|
272
273
|
return allFiles.filter((f) => extensions.some((ext) => f.endsWith(`.${ext}`)));
|
|
273
274
|
} catch (e) {
|
|
274
275
|
}
|
|
275
276
|
}
|
|
276
|
-
const
|
|
277
|
-
return
|
|
277
|
+
const dir = folder === "**" ? config.mediaFolder : `${config.mediaFolder}/${folder}`;
|
|
278
|
+
return await listLocalFilesWithExtensions(dir, config.mediaAllowedFormats, folder === "**");
|
|
278
279
|
} catch (e) {
|
|
279
280
|
return [];
|
|
280
281
|
}
|
|
281
282
|
};
|
|
283
|
+
const getFileJson = async (fileName) => {
|
|
284
|
+
var _a;
|
|
285
|
+
if (isProductionMode()) {
|
|
286
|
+
let activeBranch;
|
|
287
|
+
try {
|
|
288
|
+
activeBranch = (_a = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)) == null ? void 0 : _a.value;
|
|
289
|
+
} catch (e) {
|
|
290
|
+
}
|
|
291
|
+
try {
|
|
292
|
+
const stored = await getStoredFile(fileName, activeBranch);
|
|
293
|
+
if (stored) return structuredClone(stored.content);
|
|
294
|
+
} catch (e) {
|
|
295
|
+
}
|
|
296
|
+
try {
|
|
297
|
+
const result = await getGitHubFile(fileName, activeBranch);
|
|
298
|
+
if (result) return JSON.parse(result.content);
|
|
299
|
+
} catch (e) {
|
|
300
|
+
}
|
|
301
|
+
try {
|
|
302
|
+
const raw = await readGitHubFilePublic(fileName, activeBranch);
|
|
303
|
+
if (raw) return JSON.parse(raw);
|
|
304
|
+
} catch (e) {
|
|
305
|
+
}
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
308
|
+
try {
|
|
309
|
+
const filePath = path.join(
|
|
310
|
+
/*turbopackIgnore: true*/
|
|
311
|
+
process.cwd(),
|
|
312
|
+
fileName
|
|
313
|
+
);
|
|
314
|
+
const data = await fsPromises.readFile(filePath, { encoding: "utf8" });
|
|
315
|
+
return JSON.parse(data);
|
|
316
|
+
} catch (e) {
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
};
|
|
282
320
|
const getFile = async (fileName) => {
|
|
283
321
|
var _a, _b, _c, _d;
|
|
284
322
|
const config = getConfig();
|
|
@@ -619,6 +657,7 @@ export {
|
|
|
619
657
|
assertFeatureBranchForWritesIfRequired,
|
|
620
658
|
getContentFiles,
|
|
621
659
|
getFile,
|
|
660
|
+
getFileJson,
|
|
622
661
|
getMediaContentFiles,
|
|
623
662
|
getMediaFiles,
|
|
624
663
|
newFile,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../admin/actions/files.ts"],"sourcesContent":["'use server';\n\nimport './registerConfig';\n\nimport fsPromises from 'fs/promises';\nimport path from 'path';\n\nimport { glob } from 'glob';\nimport { cookies } from 'next/headers';\n\nimport { getConfig } from '../../lib/configStore';\nimport { getAgentConfig } from '../../agent/configStore';\nimport { syncEmbeddingsAfterRemove, syncEmbeddingsAfterUpsert } from '../../agent/embeddingsHook';\nimport { BRANCH_HISTORY_FILE_PATH, mergeHistoryContentWithAppendedEntry } from '../../lib/branchHistory';\nimport { companionMarkdownPathsForEntry, companionRichTextPathsForEntry } from '../../lib/companionMarkdown';\nimport { initialFieldsForNewEntry } from '../../lib/initialEntryFields';\nimport { persistedFieldsFromFormStrings } from '../../lib/persistedFormFields';\nimport { normalizeStoredSlug } from '../../lib/slugField';\nimport { validateEntryFields } from '../../lib/validateEntryFields';\nimport type { Config } from '../types';\n\nimport {\n deleteGitHubFile,\n getGitHubFile,\n isProductionMode,\n listGitHubFiles,\n listGitHubFilesRecursive,\n readGitHubFilePublic,\n saveGitHubFile,\n} from '../github';\nimport { applyMutation, getStoredContentFiles, getStoredFile, getStoredFileSha } from '../store/contentStore';\nimport { mediaContentFolder, mediaEntryPath } from '../../lib/mediaPath';\nimport { buildJsons } from './build';\nimport {\n actionErr,\n actionOk,\n getErrorMessage,\n type ActionResult,\n type NewFileResult,\n type SaveFileResult,\n} from './utils';\n\nexport type { SaveFileResult } from './utils';\n\nconst CMS_ACTIVE_BRANCH_COOKIE = 'cms-active-branch';\n\nfunction normalizeContentPath(p: string): string {\n return p.replace(/\\\\/g, '/');\n}\n\n/** Best-effort embedding store sync after content writes. No-op when the agent isn't configured. */\nasync function syncEmbeddingsForUpsertIfEnabled(\n entryPath: string,\n payload: { sys?: { type?: string }; fields?: Record<string, unknown> },\n companions: Record<string, string>,\n branch: string | undefined,\n isProduction: boolean,\n): Promise<void> {\n const agentConfig = getAgentConfig();\n if (!agentConfig) return;\n const config = getConfig();\n await syncEmbeddingsAfterUpsert({ agentConfig, config, entryPath, payload, companions, branch, isProduction });\n}\n\nasync function syncEmbeddingsForRemoveIfEnabled(\n entryPath: string,\n branch: string | undefined,\n isProduction: boolean,\n): Promise<void> {\n const agentConfig = getAgentConfig();\n if (!agentConfig) return;\n await syncEmbeddingsAfterRemove({ agentConfig, entryPath, branch, isProduction });\n}\n\n/** Records the entry path under the active branch in `cms/branch-history.json` (GitHub or local). Best-effort. */\nasync function persistBranchHistoryEntryIfNeeded(activeBranch: string | undefined, entryPath: string): Promise<void> {\n if (!activeBranch) {\n return;\n }\n\n const normalized = normalizeContentPath(entryPath);\n\n if (isProductionMode()) {\n try {\n const historyFile = await getGitHubFile(BRANCH_HISTORY_FILE_PATH, activeBranch);\n const next = mergeHistoryContentWithAppendedEntry(historyFile?.content ?? '', activeBranch, normalized);\n if (next == null) {\n return;\n }\n\n await saveGitHubFile(BRANCH_HISTORY_FILE_PATH, next, 'CMS: track entry in branch history', activeBranch);\n } catch {\n /* best-effort sidecar — primary save must still succeed */\n }\n\n return;\n }\n\n try {\n const abs = path.join(/*turbopackIgnore: true*/ process.cwd(), BRANCH_HISTORY_FILE_PATH);\n let raw = '';\n try {\n raw = await fsPromises.readFile(abs, { encoding: 'utf8' });\n } catch {\n raw = '';\n }\n\n const next = mergeHistoryContentWithAppendedEntry(raw, activeBranch, normalized);\n if (next == null) {\n return;\n }\n\n await fsPromises.mkdir(path.dirname(abs), { recursive: true });\n await fsPromises.writeFile(abs, next, 'utf8');\n } catch {\n /* best-effort sidecar */\n }\n}\n\nasync function assertSlugFieldsUnique(\n entryType: string,\n fileName: string,\n persistedFields: Record<string, unknown>,\n): Promise<{ ok: true } | { ok: false; fieldKey: string; message: string }> {\n const config = getConfig();\n const col = config.collections[entryType as keyof Config['collections']];\n if (!col) {\n return { ok: true };\n }\n\n const slugFieldEntries = Object.entries(col.fields).filter(([, def]) => def.format === 'slug');\n if (slugFieldEntries.length === 0) {\n return { ok: true };\n }\n\n const selfPath = normalizeContentPath(fileName);\n const siblings = await getContentFiles(entryType);\n if (!Array.isArray(siblings)) {\n return { ok: true };\n }\n\n for (const [slugKey] of slugFieldEntries) {\n const candidate = persistedFields[slugKey];\n if (typeof candidate !== 'string' || !candidate.trim()) {\n continue;\n }\n const normCandidate = normalizeStoredSlug(candidate);\n if (!normCandidate) {\n continue;\n }\n\n for (const siblingPath of siblings) {\n if (normalizeContentPath(siblingPath) === selfPath) {\n continue;\n }\n let data: unknown;\n try {\n data = await getFile(siblingPath);\n } catch {\n continue;\n }\n if (!data || typeof data !== 'object') {\n continue;\n }\n const fields = (data as { fields?: Record<string, unknown> }).fields;\n if (!fields) {\n continue;\n }\n const other = fields[slugKey];\n if (typeof other !== 'string' || !other.trim()) {\n continue;\n }\n if (normalizeStoredSlug(other) === normCandidate) {\n return {\n ok: false,\n fieldKey: slugKey,\n message: `Another ${col.label} already uses this slug. Choose a different value.`,\n };\n }\n }\n }\n\n return { ok: true };\n}\n\nconst MEDIA_UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\nasync function assertImageFieldsReferenceMediaWithTitle(\n entryType: string,\n strFields: Record<string, string>,\n): Promise<{ ok: true } | { ok: false; fieldKey: string; message: string }> {\n const config = getConfig();\n const col = config.collections[entryType as keyof Config['collections']];\n if (!col) {\n return { ok: true };\n }\n\n for (const [key, def] of Object.entries(col.fields)) {\n if (def.format !== 'image') {\n continue;\n }\n const raw = (strFields[key] ?? '').trim();\n if (!raw || raw.startsWith('/')) {\n continue;\n }\n if (!MEDIA_UUID_RE.test(raw)) {\n continue;\n }\n\n const mediaPath = mediaEntryPath(raw);\n let media: unknown;\n try {\n media = await getFile(mediaPath);\n } catch {\n return {\n ok: false,\n fieldKey: key,\n message: `Media not found for ${def.label}. Choose a valid image in the Media library.`,\n };\n }\n\n const title = (media as { fields?: { title?: unknown } })?.fields?.title;\n if (typeof title !== 'string' || !title.trim()) {\n return {\n ok: false,\n fieldKey: key,\n message: `Selected image is missing a required Title; fix it in the Media library.`,\n };\n }\n }\n\n return { ok: true };\n}\n\n/**\n * In production, reject writes that would target `config.git.baseBranch` (no feature branch cookie).\n */\nexport const assertFeatureBranchForWritesIfRequired = async (): Promise<void> => {\n if (!isProductionMode()) {\n return;\n }\n\n if (!(await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value) {\n throw new Error('Create or select a branch before editing.');\n }\n};\n\nexport const waitForPublicReadConsistency = async (fileName: string, expectedContent: string, readRef?: string) => {\n if (!isProductionMode()) {\n return;\n }\n\n const parsedAttempts = Number.parseInt(process.env.CMS_GITHUB_CONSISTENCY_ATTEMPTS || '8', 10);\n const parsedDelayMs = Number.parseInt(process.env.CMS_GITHUB_CONSISTENCY_DELAY_MS || '250', 10);\n const maxAttempts = Number.isFinite(parsedAttempts) && parsedAttempts > 0 ? parsedAttempts : 1;\n const delayMs = Number.isFinite(parsedDelayMs) && parsedDelayMs >= 0 ? parsedDelayMs : 250;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const visibleContent = await readGitHubFilePublic(fileName, readRef);\n\n if (visibleContent === expectedContent) {\n return;\n }\n } catch (_e) {\n // Ignore transient read failures and retry within the same save request.\n }\n\n if (attempt < maxAttempts && delayMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n};\n\nexport const getContentFiles = async (collection: string = '**') => {\n const config = getConfig();\n try {\n if (isProductionMode()) {\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n\n // Try in-memory store first (instant)\n try {\n const stored = await getStoredContentFiles(collection, activeBranch);\n if (stored) return stored;\n } catch {\n // Store unavailable — fall through to direct GitHub API\n }\n\n try {\n if (collection === '**') {\n const listed = await listGitHubFilesRecursive(config.contentFolder, '.json', activeBranch);\n return Array.isArray(listed) ? listed : [];\n }\n\n const listed = await listGitHubFiles(`${config.contentFolder}/${collection}`, '.json', activeBranch);\n return Array.isArray(listed) ? listed : [];\n } catch (e) {\n // Fall back to local files if GitHub API access is not available.\n }\n }\n\n const files = await glob(`${config.contentFolder}/${collection}/*.json`);\n return files || [];\n } catch (e) {\n return [];\n }\n};\n\n/**\n * List media-entry JSON files (e.g. `cms/media/media-<uuid>.json`).\n *\n * Distinct from `getContentFiles`, which lists editorial content under\n * `config.contentFolder`, and from `getMediaFiles`, which lists physical image\n * binaries under `config.mediaFolder`. This is the JSON-entry layer.\n */\nexport const getMediaContentFiles = async (): Promise<string[]> => {\n const folder = mediaContentFolder();\n try {\n if (isProductionMode()) {\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n\n try {\n return await listGitHubFiles(folder, '.json', activeBranch);\n } catch (_e) {\n // Fall back to local files if GitHub API access is not available.\n }\n }\n\n const files = await glob(`${folder}/*.json`);\n return files || [];\n } catch (_e) {\n return [];\n }\n};\n\nexport const getMediaFiles = async (folder: string = '**') => {\n const config = getConfig();\n try {\n if (isProductionMode()) {\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n\n try {\n const dir = folder === '**' ? config.mediaFolder : `${config.mediaFolder}/${folder}`;\n const allFiles = await listGitHubFilesRecursive(dir, undefined, activeBranch);\n const extensions = config.mediaAllowedFormats;\n return allFiles.filter((f) => extensions.some((ext) => f.endsWith(`.${ext}`)));\n } catch (e) {\n // Fall back to local files if GitHub API access is not available.\n }\n }\n\n const files = await glob(`${config.mediaFolder}/${folder}/*.{${config.mediaAllowedFormats.join(',')}}`);\n return files || [];\n } catch (e) {\n return [];\n }\n};\n\nexport const getFile = async (fileName: string) => {\n const config = getConfig();\n try {\n let entry: any;\n\n if (isProductionMode()) {\n // Try in-memory store first (instant, includes pre-merged companions)\n try {\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n const stored = await getStoredFile(fileName, activeBranch);\n\n if (stored) {\n entry = structuredClone(stored.content);\n // Merge pre-cached companion markdown into fields\n if (entry.fields) {\n for (const [fieldName, mdContent] of Object.entries(stored.companionMarkdown)) {\n entry.fields[fieldName] = mdContent;\n }\n }\n return entry;\n }\n } catch {\n // Store unavailable — fall through to direct GitHub API\n }\n\n try {\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n const result = await getGitHubFile(fileName, activeBranch);\n\n if (result) {\n entry = JSON.parse(result.content);\n }\n } catch (e) {\n // Fall back to local file if GitHub API access is not available.\n }\n\n // Cold serverless instance: content store is empty. `getGitHubFile` may return null\n // (404 race) or throw before `readGitHubFilePublic`'s multi-client retry path runs.\n // Never fall through to `fs.readFile` on deploy — the repo is not on disk (ENOENT → 500).\n if (!entry) {\n try {\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n const raw = await readGitHubFilePublic(fileName, activeBranch);\n if (raw) {\n entry = JSON.parse(raw);\n }\n } catch {\n /* best-effort */\n }\n }\n }\n\n if (!entry) {\n if (isProductionMode()) {\n return {};\n }\n const filePath = path.join(/*turbopackIgnore: true*/ process.cwd(), fileName);\n const data = await fsPromises.readFile(filePath, { encoding: 'utf8' });\n entry = JSON.parse(data);\n }\n\n if (!entry) {\n return {};\n }\n\n // Merge companion markdown and richtext files into fields\n const collectionType = entry?.sys?.type;\n if (typeof collectionType === 'string' && entry.fields) {\n const companionPaths = companionMarkdownPathsForEntry(fileName, collectionType, config.collections);\n for (const [fieldName, mdPath] of Object.entries(companionPaths)) {\n entry.fields[fieldName] = await readCompanionMarkdownContent(mdPath);\n }\n const richTextPaths = companionRichTextPathsForEntry(fileName, collectionType, config.collections);\n for (const [fieldName, mdxPath] of Object.entries(richTextPaths)) {\n entry.fields[fieldName] = await readCompanionMarkdownContent(mdxPath);\n }\n }\n\n return entry;\n } catch (e) {\n throw new Error('Failed to get file');\n }\n};\n\n/** Read a companion markdown file as a string. Returns `\"\"` if the file does not exist. */\nasync function readCompanionMarkdownContent(filePath: string): Promise<string> {\n if (isProductionMode()) {\n try {\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n const result = await getGitHubFile(filePath, activeBranch);\n return result?.content ?? '';\n } catch {\n return '';\n }\n }\n\n try {\n return await fsPromises.readFile(path.join(/*turbopackIgnore: true*/ process.cwd(), filePath), {\n encoding: 'utf8',\n });\n } catch {\n return '';\n }\n}\n\nexport const saveFile = async (\n formData: any,\n fileName: string,\n options?: { skipStatusTransition?: boolean },\n): Promise<SaveFileResult> => {\n const config = getConfig();\n try {\n let payload = formData;\n const entryType = payload?.sys?.type;\n const rawFields = payload?.fields;\n if (typeof entryType === 'string' && rawFields && typeof rawFields === 'object' && !Array.isArray(rawFields)) {\n const strFields: Record<string, string> = {};\n for (const [k, v] of Object.entries(rawFields)) {\n if (v == null) {\n strFields[k] = '';\n } else if (typeof v === 'object') {\n strFields[k] = JSON.stringify(v);\n } else {\n strFields[k] = String(v);\n }\n }\n const validated = validateEntryFields(entryType, strFields);\n if (!validated.ok) {\n const first = Object.values(validated.fieldErrors)[0];\n return {\n success: false,\n error: first || 'Validation failed',\n fieldErrors: validated.fieldErrors,\n };\n }\n\n const mediaTitles = await assertImageFieldsReferenceMediaWithTitle(entryType, strFields);\n if (!mediaTitles.ok) {\n return {\n success: false,\n error: mediaTitles.message,\n fieldErrors: { [mediaTitles.fieldKey]: mediaTitles.message },\n };\n }\n\n payload = {\n ...payload,\n fields: persistedFieldsFromFormStrings(entryType, strFields),\n };\n\n const slugUnique = await assertSlugFieldsUnique(entryType, fileName, payload.fields);\n if (!slugUnique.ok) {\n return {\n success: false,\n error: slugUnique.message,\n fieldErrors: { [slugUnique.fieldKey]: slugUnique.message },\n };\n }\n }\n\n // New entries start as draft (hidden from `query()`). First successful save promotes to `changed`\n // so they become eligible for public pages once the workspace branch is published from the header.\n if (!options?.skipStatusTransition && payload?.sys?.status === 'draft') {\n payload = { ...payload, sys: { ...payload.sys, status: 'changed' } };\n }\n\n // Auto-transition published/merged → changed on regular save (not on explicit publish)\n if (!options?.skipStatusTransition && (payload?.sys?.status === 'published' || payload?.sys?.status === 'merged')) {\n payload = { ...payload, sys: { ...payload.sys, status: 'changed' } };\n }\n\n // Extract markdown and richtext fields into companion files, remove from JSON payload\n const markdownContents: Record<string, string> = {};\n if (typeof entryType === 'string' && payload.fields) {\n const companionPaths = companionMarkdownPathsForEntry(fileName, entryType, config.collections);\n for (const [fieldName] of Object.entries(companionPaths)) {\n markdownContents[fieldName] = payload.fields[fieldName] ?? '';\n delete payload.fields[fieldName];\n }\n const richTextPaths = companionRichTextPathsForEntry(fileName, entryType, config.collections);\n for (const [fieldName] of Object.entries(richTextPaths)) {\n markdownContents[fieldName] = payload.fields[fieldName] ?? '';\n delete payload.fields[fieldName];\n }\n }\n\n const data = JSON.stringify(payload, null, 2);\n const normalizedData = `${data}\\n`;\n\n if (isProductionMode()) {\n await assertFeatureBranchForWritesIfRequired();\n const entryTypeLabel = payload?.sys?.type || 'content';\n const entryId = payload?.sys?.id || '';\n const message = `Update ${entryTypeLabel} ${entryId}`;\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n\n // Use cached SHA from the store to skip the pre-read API call\n const cachedSha = (await getStoredFileSha(fileName, activeBranch)) || undefined;\n await saveGitHubFile(fileName, normalizedData, message, activeBranch, cachedSha);\n // Write companion markdown and richtext files\n const mdPaths =\n typeof entryType === 'string' ? companionMarkdownPathsForEntry(fileName, entryType, config.collections) : {};\n for (const [fieldName, mdPath] of Object.entries(mdPaths)) {\n const mdContent = markdownContents[fieldName] ?? '';\n await saveGitHubFile(mdPath, mdContent, `Update ${fieldName} for ${entryType} ${entryId}`, activeBranch);\n }\n const rtPaths =\n typeof entryType === 'string' ? companionRichTextPathsForEntry(fileName, entryType, config.collections) : {};\n for (const [fieldName, rtPath] of Object.entries(rtPaths)) {\n const rtContent = markdownContents[fieldName] ?? '';\n await saveGitHubFile(rtPath, rtContent, `Update ${fieldName} for ${entryType} ${entryId}`, activeBranch);\n }\n await waitForPublicReadConsistency(fileName, normalizedData);\n\n // Write-through: update in-memory store so subsequent reads are instant\n if (activeBranch) {\n applyMutation(activeBranch, {\n type: 'upsert',\n path: fileName,\n content: payload,\n sha: '', // SHA unknown after single-file commit; next tree fetch will correct it\n companions: markdownContents,\n });\n }\n\n await persistBranchHistoryEntryIfNeeded(activeBranch, fileName);\n await syncEmbeddingsForUpsertIfEnabled(fileName, payload, markdownContents, activeBranch, true);\n const built = await buildJsons(fileName);\n\n return built.success ? actionOk() : built;\n }\n\n const cookieStore = await cookies();\n const activeBranchDev = cookieStore.get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n const filePath = path.join(/*turbopackIgnore: true*/ process.cwd(), fileName);\n await fsPromises.writeFile(filePath, normalizedData, 'utf8');\n // Write companion markdown and richtext files\n const mdPaths =\n typeof entryType === 'string' ? companionMarkdownPathsForEntry(fileName, entryType, config.collections) : {};\n for (const [fieldName, mdPath] of Object.entries(mdPaths)) {\n const mdContent = markdownContents[fieldName] ?? '';\n await fsPromises.writeFile(path.join(/*turbopackIgnore: true*/ process.cwd(), mdPath), mdContent, 'utf8');\n }\n const rtPathsDev =\n typeof entryType === 'string' ? companionRichTextPathsForEntry(fileName, entryType, config.collections) : {};\n for (const [fieldName, rtPath] of Object.entries(rtPathsDev)) {\n const rtContent = markdownContents[fieldName] ?? '';\n await fsPromises.writeFile(path.join(/*turbopackIgnore: true*/ process.cwd(), rtPath), rtContent, 'utf8');\n }\n await persistBranchHistoryEntryIfNeeded(activeBranchDev, fileName);\n await syncEmbeddingsForUpsertIfEnabled(fileName, payload, markdownContents, activeBranchDev, false);\n const built = await buildJsons(fileName);\n\n return built.success ? actionOk() : built;\n } catch (e) {\n return actionErr(new Error(`Failed to save file: ${getErrorMessage(e)}`));\n }\n};\n\nexport const newFile = async (type: string): Promise<NewFileResult> => {\n const config = getConfig();\n try {\n const id = crypto.randomUUID();\n const values = {\n sys: {\n id,\n type,\n status: 'draft' as const,\n },\n fields: initialFieldsForNewEntry(type),\n };\n const data = JSON.stringify(values, null, 2);\n const file = `${config.contentFolder}/${type}/${type}-${id}.json`;\n const normalizedData = `${data}\\n`;\n\n if (isProductionMode()) {\n await assertFeatureBranchForWritesIfRequired();\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n await saveGitHubFile(file, normalizedData, `Create new ${type} ${id}`, activeBranch);\n await waitForPublicReadConsistency(file, normalizedData);\n\n // Write-through: add new entry to in-memory store\n if (activeBranch) {\n applyMutation(activeBranch, {\n type: 'upsert',\n path: file,\n content: values,\n sha: '',\n });\n }\n\n await persistBranchHistoryEntryIfNeeded(activeBranch, file);\n await syncEmbeddingsForUpsertIfEnabled(file, values, {}, activeBranch, true);\n const built = await buildJsons(file);\n\n return built.success ? { success: true, path: file } : { success: false, error: built.error };\n }\n\n const cookieStore = await cookies();\n const activeBranchDev = cookieStore.get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n const filePath = path.join(/*turbopackIgnore: true*/ process.cwd(), file);\n await fsPromises.mkdir(path.dirname(filePath), { recursive: true });\n await fsPromises.writeFile(filePath, normalizedData, 'utf8');\n await persistBranchHistoryEntryIfNeeded(activeBranchDev, file);\n await syncEmbeddingsForUpsertIfEnabled(file, values, {}, activeBranchDev, false);\n const built = await buildJsons(file);\n\n return built.success ? { success: true, path: file } : { success: false, error: built.error };\n } catch (e) {\n return { success: false, error: getErrorMessage(e) } satisfies NewFileResult;\n }\n};\n\nexport const removeFile = async (fileName: string): Promise<ActionResult> => {\n const config = getConfig();\n try {\n let collectionType: string | undefined;\n try {\n const existing = await getFile(fileName);\n collectionType = existing?.sys?.type;\n } catch {\n /* best-effort */\n }\n\n // Determine companion markdown and richtext files to delete\n const companionPaths =\n typeof collectionType === 'string'\n ? [\n ...Object.values(companionMarkdownPathsForEntry(fileName, collectionType, config.collections)),\n ...Object.values(companionRichTextPathsForEntry(fileName, collectionType, config.collections)),\n ]\n : [];\n\n if (isProductionMode()) {\n await assertFeatureBranchForWritesIfRequired();\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n await deleteGitHubFile(fileName, `Remove ${fileName}`, activeBranch);\n for (const mdPath of companionPaths) {\n try {\n await deleteGitHubFile(mdPath, `Remove companion ${mdPath}`, activeBranch);\n } catch {\n /* best-effort — companion may not exist */\n }\n }\n\n // Write-through: remove entry from in-memory store\n if (activeBranch) {\n applyMutation(activeBranch, { type: 'delete', path: fileName });\n }\n\n await syncEmbeddingsForRemoveIfEnabled(fileName, activeBranch, true);\n const built = await buildJsons(fileName);\n\n return built.success ? actionOk() : built;\n }\n\n const filePath = path.join(/*turbopackIgnore: true*/ process.cwd(), fileName);\n await fsPromises.unlink(filePath);\n for (const mdPath of companionPaths) {\n try {\n await fsPromises.unlink(path.join(/*turbopackIgnore: true*/ process.cwd(), mdPath));\n } catch {\n /* best-effort — companion may not exist */\n }\n }\n await syncEmbeddingsForRemoveIfEnabled(fileName, undefined, false);\n const built = await buildJsons(fileName);\n\n return built.success ? actionOk() : built;\n } catch (e) {\n return actionErr(e);\n }\n};\n"],"mappings":"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","names":["listed","mdPaths","built"]}
|
|
1
|
+
{"version":3,"sources":["../../../admin/actions/files.ts"],"sourcesContent":["'use server';\n\nimport './registerConfig';\n\nimport fsPromises from 'fs/promises';\nimport path from 'path';\n\nimport { cookies } from 'next/headers';\n\nimport { getConfig } from '../../lib/configStore';\nimport { listLocalCollectionFiles, listLocalFilesRecursive, listLocalFilesWithExtensions } from '../../lib/localReader';\nimport { getAgentConfig } from '../../agent/configStore';\nimport { syncEmbeddingsAfterRemove, syncEmbeddingsAfterUpsert } from '../../agent/embeddingsHook';\nimport { BRANCH_HISTORY_FILE_PATH, mergeHistoryContentWithAppendedEntry } from '../../lib/branchHistory';\nimport { companionMarkdownPathsForEntry, companionRichTextPathsForEntry } from '../../lib/companionMarkdown';\nimport { initialFieldsForNewEntry } from '../../lib/initialEntryFields';\nimport { persistedFieldsFromFormStrings } from '../../lib/persistedFormFields';\nimport { normalizeStoredSlug } from '../../lib/slugField';\nimport { validateEntryFields } from '../../lib/validateEntryFields';\nimport type { Config } from '../types';\n\nimport {\n deleteGitHubFile,\n getGitHubFile,\n isProductionMode,\n listGitHubFiles,\n listGitHubFilesRecursive,\n readGitHubFilePublic,\n saveGitHubFile,\n} from '../github';\nimport { applyMutation, getStoredContentFiles, getStoredFile, getStoredFileSha } from '../store/contentStore';\nimport { mediaContentFolder, mediaEntryPath } from '../../lib/mediaPath';\nimport { buildJsons } from './build';\nimport {\n actionErr,\n actionOk,\n getErrorMessage,\n type ActionResult,\n type NewFileResult,\n type SaveFileResult,\n} from './utils';\n\nexport type { SaveFileResult } from './utils';\n\nconst CMS_ACTIVE_BRANCH_COOKIE = 'cms-active-branch';\n\nfunction normalizeContentPath(p: string): string {\n return p.replace(/\\\\/g, '/');\n}\n\n/** Best-effort embedding store sync after content writes. No-op when the agent isn't configured. */\nasync function syncEmbeddingsForUpsertIfEnabled(\n entryPath: string,\n payload: { sys?: { type?: string }; fields?: Record<string, unknown> },\n companions: Record<string, string>,\n branch: string | undefined,\n isProduction: boolean,\n): Promise<void> {\n const agentConfig = getAgentConfig();\n if (!agentConfig) return;\n const config = getConfig();\n await syncEmbeddingsAfterUpsert({ agentConfig, config, entryPath, payload, companions, branch, isProduction });\n}\n\nasync function syncEmbeddingsForRemoveIfEnabled(\n entryPath: string,\n branch: string | undefined,\n isProduction: boolean,\n): Promise<void> {\n const agentConfig = getAgentConfig();\n if (!agentConfig) return;\n await syncEmbeddingsAfterRemove({ agentConfig, entryPath, branch, isProduction });\n}\n\n/** Records the entry path under the active branch in `cms/branch-history.json` (GitHub or local). Best-effort. */\nasync function persistBranchHistoryEntryIfNeeded(activeBranch: string | undefined, entryPath: string): Promise<void> {\n if (!activeBranch) {\n return;\n }\n\n const normalized = normalizeContentPath(entryPath);\n\n if (isProductionMode()) {\n try {\n const historyFile = await getGitHubFile(BRANCH_HISTORY_FILE_PATH, activeBranch);\n const next = mergeHistoryContentWithAppendedEntry(historyFile?.content ?? '', activeBranch, normalized);\n if (next == null) {\n return;\n }\n\n await saveGitHubFile(BRANCH_HISTORY_FILE_PATH, next, 'CMS: track entry in branch history', activeBranch);\n } catch {\n /* best-effort sidecar — primary save must still succeed */\n }\n\n return;\n }\n\n try {\n const abs = path.join(/*turbopackIgnore: true*/ process.cwd(), BRANCH_HISTORY_FILE_PATH);\n let raw = '';\n try {\n raw = await fsPromises.readFile(abs, { encoding: 'utf8' });\n } catch {\n raw = '';\n }\n\n const next = mergeHistoryContentWithAppendedEntry(raw, activeBranch, normalized);\n if (next == null) {\n return;\n }\n\n await fsPromises.mkdir(path.dirname(abs), { recursive: true });\n await fsPromises.writeFile(abs, next, 'utf8');\n } catch {\n /* best-effort sidecar */\n }\n}\n\nasync function assertSlugFieldsUnique(\n entryType: string,\n fileName: string,\n persistedFields: Record<string, unknown>,\n): Promise<{ ok: true } | { ok: false; fieldKey: string; message: string }> {\n const config = getConfig();\n const col = config.collections[entryType as keyof Config['collections']];\n if (!col) {\n return { ok: true };\n }\n\n const slugFieldEntries = Object.entries(col.fields).filter(([, def]) => def.format === 'slug');\n if (slugFieldEntries.length === 0) {\n return { ok: true };\n }\n\n const selfPath = normalizeContentPath(fileName);\n const siblings = await getContentFiles(entryType);\n if (!Array.isArray(siblings)) {\n return { ok: true };\n }\n\n for (const [slugKey] of slugFieldEntries) {\n const candidate = persistedFields[slugKey];\n if (typeof candidate !== 'string' || !candidate.trim()) {\n continue;\n }\n const normCandidate = normalizeStoredSlug(candidate);\n if (!normCandidate) {\n continue;\n }\n\n for (const siblingPath of siblings) {\n if (normalizeContentPath(siblingPath) === selfPath) {\n continue;\n }\n let data: unknown;\n try {\n data = await getFile(siblingPath);\n } catch {\n continue;\n }\n if (!data || typeof data !== 'object') {\n continue;\n }\n const fields = (data as { fields?: Record<string, unknown> }).fields;\n if (!fields) {\n continue;\n }\n const other = fields[slugKey];\n if (typeof other !== 'string' || !other.trim()) {\n continue;\n }\n if (normalizeStoredSlug(other) === normCandidate) {\n return {\n ok: false,\n fieldKey: slugKey,\n message: `Another ${col.label} already uses this slug. Choose a different value.`,\n };\n }\n }\n }\n\n return { ok: true };\n}\n\nconst MEDIA_UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\nasync function assertImageFieldsReferenceMediaWithTitle(\n entryType: string,\n strFields: Record<string, string>,\n): Promise<{ ok: true } | { ok: false; fieldKey: string; message: string }> {\n const config = getConfig();\n const col = config.collections[entryType as keyof Config['collections']];\n if (!col) {\n return { ok: true };\n }\n\n for (const [key, def] of Object.entries(col.fields)) {\n if (def.format !== 'image') {\n continue;\n }\n const raw = (strFields[key] ?? '').trim();\n if (!raw || raw.startsWith('/')) {\n continue;\n }\n if (!MEDIA_UUID_RE.test(raw)) {\n continue;\n }\n\n const mediaPath = mediaEntryPath(raw);\n let media: unknown;\n try {\n media = await getFile(mediaPath);\n } catch {\n return {\n ok: false,\n fieldKey: key,\n message: `Media not found for ${def.label}. Choose a valid image in the Media library.`,\n };\n }\n\n const title = (media as { fields?: { title?: unknown } })?.fields?.title;\n if (typeof title !== 'string' || !title.trim()) {\n return {\n ok: false,\n fieldKey: key,\n message: `Selected image is missing a required Title; fix it in the Media library.`,\n };\n }\n }\n\n return { ok: true };\n}\n\n/**\n * In production, reject writes that would target `config.git.baseBranch` (no feature branch cookie).\n */\nexport const assertFeatureBranchForWritesIfRequired = async (): Promise<void> => {\n if (!isProductionMode()) {\n return;\n }\n\n if (!(await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value) {\n throw new Error('Create or select a branch before editing.');\n }\n};\n\nexport const waitForPublicReadConsistency = async (fileName: string, expectedContent: string, readRef?: string) => {\n if (!isProductionMode()) {\n return;\n }\n\n const parsedAttempts = Number.parseInt(process.env.CMS_GITHUB_CONSISTENCY_ATTEMPTS || '8', 10);\n const parsedDelayMs = Number.parseInt(process.env.CMS_GITHUB_CONSISTENCY_DELAY_MS || '250', 10);\n const maxAttempts = Number.isFinite(parsedAttempts) && parsedAttempts > 0 ? parsedAttempts : 1;\n const delayMs = Number.isFinite(parsedDelayMs) && parsedDelayMs >= 0 ? parsedDelayMs : 250;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const visibleContent = await readGitHubFilePublic(fileName, readRef);\n\n if (visibleContent === expectedContent) {\n return;\n }\n } catch (_e) {\n // Ignore transient read failures and retry within the same save request.\n }\n\n if (attempt < maxAttempts && delayMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n};\n\nexport const getContentFiles = async (collection: string = '**') => {\n const config = getConfig();\n try {\n if (isProductionMode()) {\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n\n // Try in-memory store first (instant)\n try {\n const stored = await getStoredContentFiles(collection, activeBranch);\n if (stored) return stored;\n } catch {\n // Store unavailable — fall through to direct GitHub API\n }\n\n try {\n if (collection === '**') {\n const listed = await listGitHubFilesRecursive(config.contentFolder, '.json', activeBranch);\n return Array.isArray(listed) ? listed : [];\n }\n\n const listed = await listGitHubFiles(`${config.contentFolder}/${collection}`, '.json', activeBranch);\n return Array.isArray(listed) ? listed : [];\n } catch (e) {\n // Fall back to local files if GitHub API access is not available.\n }\n }\n\n if (collection === '**') {\n return await listLocalFilesRecursive(config.contentFolder, '.json');\n }\n return await listLocalCollectionFiles(`${config.contentFolder}/${collection}`);\n } catch (e) {\n return [];\n }\n};\n\n/**\n * List media-entry JSON files (e.g. `cms/media/media-<uuid>.json`).\n *\n * Distinct from `getContentFiles`, which lists editorial content under\n * `config.contentFolder`, and from `getMediaFiles`, which lists physical image\n * binaries under `config.mediaFolder`. This is the JSON-entry layer.\n */\nexport const getMediaContentFiles = async (): Promise<string[]> => {\n const folder = mediaContentFolder();\n try {\n if (isProductionMode()) {\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n\n try {\n return await listGitHubFiles(folder, '.json', activeBranch);\n } catch (_e) {\n // Fall back to local files if GitHub API access is not available.\n }\n }\n\n return await listLocalCollectionFiles(folder);\n } catch (_e) {\n return [];\n }\n};\n\nexport const getMediaFiles = async (folder: string = '**') => {\n const config = getConfig();\n try {\n if (isProductionMode()) {\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n\n try {\n const dir = folder === '**' ? config.mediaFolder : `${config.mediaFolder}/${folder}`;\n const allFiles = await listGitHubFilesRecursive(dir, undefined, activeBranch);\n const extensions = config.mediaAllowedFormats;\n return allFiles.filter((f) => extensions.some((ext) => f.endsWith(`.${ext}`)));\n } catch (e) {\n // Fall back to local files if GitHub API access is not available.\n }\n }\n\n const dir = folder === '**' ? config.mediaFolder : `${config.mediaFolder}/${folder}`;\n return await listLocalFilesWithExtensions(dir, config.mediaAllowedFormats, folder === '**');\n } catch (e) {\n return [];\n }\n};\n\n/**\n * Read only the raw entry JSON — no companion markdown/richtext merging.\n * Use for list views where companion content is never needed.\n */\nexport const getFileJson = async (fileName: string): Promise<Record<string, unknown> | null> => {\n if (isProductionMode()) {\n let activeBranch: string | undefined;\n try {\n activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n } catch {}\n\n try {\n const stored = await getStoredFile(fileName, activeBranch);\n if (stored) return structuredClone(stored.content);\n } catch {}\n\n try {\n const result = await getGitHubFile(fileName, activeBranch);\n if (result) return JSON.parse(result.content) as Record<string, unknown>;\n } catch {}\n\n try {\n const raw = await readGitHubFilePublic(fileName, activeBranch);\n if (raw) return JSON.parse(raw) as Record<string, unknown>;\n } catch {}\n\n return null;\n }\n\n try {\n const filePath = path.join(/*turbopackIgnore: true*/ process.cwd(), fileName);\n const data = await fsPromises.readFile(filePath, { encoding: 'utf8' });\n return JSON.parse(data) as Record<string, unknown>;\n } catch {\n return null;\n }\n};\n\nexport const getFile = async (fileName: string) => {\n const config = getConfig();\n try {\n let entry: any;\n\n if (isProductionMode()) {\n // Try in-memory store first (instant, includes pre-merged companions)\n try {\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n const stored = await getStoredFile(fileName, activeBranch);\n\n if (stored) {\n entry = structuredClone(stored.content);\n // Merge pre-cached companion markdown into fields\n if (entry.fields) {\n for (const [fieldName, mdContent] of Object.entries(stored.companionMarkdown)) {\n entry.fields[fieldName] = mdContent;\n }\n }\n return entry;\n }\n } catch {\n // Store unavailable — fall through to direct GitHub API\n }\n\n try {\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n const result = await getGitHubFile(fileName, activeBranch);\n\n if (result) {\n entry = JSON.parse(result.content);\n }\n } catch (e) {\n // Fall back to local file if GitHub API access is not available.\n }\n\n // Cold serverless instance: content store is empty. `getGitHubFile` may return null\n // (404 race) or throw before `readGitHubFilePublic`'s multi-client retry path runs.\n // Never fall through to `fs.readFile` on deploy — the repo is not on disk (ENOENT → 500).\n if (!entry) {\n try {\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n const raw = await readGitHubFilePublic(fileName, activeBranch);\n if (raw) {\n entry = JSON.parse(raw);\n }\n } catch {\n /* best-effort */\n }\n }\n }\n\n if (!entry) {\n if (isProductionMode()) {\n return {};\n }\n const filePath = path.join(/*turbopackIgnore: true*/ process.cwd(), fileName);\n const data = await fsPromises.readFile(filePath, { encoding: 'utf8' });\n entry = JSON.parse(data);\n }\n\n if (!entry) {\n return {};\n }\n\n // Merge companion markdown and richtext files into fields\n const collectionType = entry?.sys?.type;\n if (typeof collectionType === 'string' && entry.fields) {\n const companionPaths = companionMarkdownPathsForEntry(fileName, collectionType, config.collections);\n for (const [fieldName, mdPath] of Object.entries(companionPaths)) {\n entry.fields[fieldName] = await readCompanionMarkdownContent(mdPath);\n }\n const richTextPaths = companionRichTextPathsForEntry(fileName, collectionType, config.collections);\n for (const [fieldName, mdxPath] of Object.entries(richTextPaths)) {\n entry.fields[fieldName] = await readCompanionMarkdownContent(mdxPath);\n }\n }\n\n return entry;\n } catch (e) {\n throw new Error('Failed to get file');\n }\n};\n\n/** Read a companion markdown file as a string. Returns `\"\"` if the file does not exist. */\nasync function readCompanionMarkdownContent(filePath: string): Promise<string> {\n if (isProductionMode()) {\n try {\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n const result = await getGitHubFile(filePath, activeBranch);\n return result?.content ?? '';\n } catch {\n return '';\n }\n }\n\n try {\n return await fsPromises.readFile(path.join(/*turbopackIgnore: true*/ process.cwd(), filePath), {\n encoding: 'utf8',\n });\n } catch {\n return '';\n }\n}\n\nexport const saveFile = async (\n formData: any,\n fileName: string,\n options?: { skipStatusTransition?: boolean },\n): Promise<SaveFileResult> => {\n const config = getConfig();\n try {\n let payload = formData;\n const entryType = payload?.sys?.type;\n const rawFields = payload?.fields;\n if (typeof entryType === 'string' && rawFields && typeof rawFields === 'object' && !Array.isArray(rawFields)) {\n const strFields: Record<string, string> = {};\n for (const [k, v] of Object.entries(rawFields)) {\n if (v == null) {\n strFields[k] = '';\n } else if (typeof v === 'object') {\n strFields[k] = JSON.stringify(v);\n } else {\n strFields[k] = String(v);\n }\n }\n const validated = validateEntryFields(entryType, strFields);\n if (!validated.ok) {\n const first = Object.values(validated.fieldErrors)[0];\n return {\n success: false,\n error: first || 'Validation failed',\n fieldErrors: validated.fieldErrors,\n };\n }\n\n const mediaTitles = await assertImageFieldsReferenceMediaWithTitle(entryType, strFields);\n if (!mediaTitles.ok) {\n return {\n success: false,\n error: mediaTitles.message,\n fieldErrors: { [mediaTitles.fieldKey]: mediaTitles.message },\n };\n }\n\n payload = {\n ...payload,\n fields: persistedFieldsFromFormStrings(entryType, strFields),\n };\n\n const slugUnique = await assertSlugFieldsUnique(entryType, fileName, payload.fields);\n if (!slugUnique.ok) {\n return {\n success: false,\n error: slugUnique.message,\n fieldErrors: { [slugUnique.fieldKey]: slugUnique.message },\n };\n }\n }\n\n // New entries start as draft (hidden from `query()`). First successful save promotes to `changed`\n // so they become eligible for public pages once the workspace branch is published from the header.\n if (!options?.skipStatusTransition && payload?.sys?.status === 'draft') {\n payload = { ...payload, sys: { ...payload.sys, status: 'changed' } };\n }\n\n // Auto-transition published/merged → changed on regular save (not on explicit publish)\n if (!options?.skipStatusTransition && (payload?.sys?.status === 'published' || payload?.sys?.status === 'merged')) {\n payload = { ...payload, sys: { ...payload.sys, status: 'changed' } };\n }\n\n // Extract markdown and richtext fields into companion files, remove from JSON payload\n const markdownContents: Record<string, string> = {};\n if (typeof entryType === 'string' && payload.fields) {\n const companionPaths = companionMarkdownPathsForEntry(fileName, entryType, config.collections);\n for (const [fieldName] of Object.entries(companionPaths)) {\n markdownContents[fieldName] = payload.fields[fieldName] ?? '';\n delete payload.fields[fieldName];\n }\n const richTextPaths = companionRichTextPathsForEntry(fileName, entryType, config.collections);\n for (const [fieldName] of Object.entries(richTextPaths)) {\n markdownContents[fieldName] = payload.fields[fieldName] ?? '';\n delete payload.fields[fieldName];\n }\n }\n\n const data = JSON.stringify(payload, null, 2);\n const normalizedData = `${data}\\n`;\n\n if (isProductionMode()) {\n await assertFeatureBranchForWritesIfRequired();\n const entryTypeLabel = payload?.sys?.type || 'content';\n const entryId = payload?.sys?.id || '';\n const message = `Update ${entryTypeLabel} ${entryId}`;\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n\n // Use cached SHA from the store to skip the pre-read API call\n const cachedSha = (await getStoredFileSha(fileName, activeBranch)) || undefined;\n await saveGitHubFile(fileName, normalizedData, message, activeBranch, cachedSha);\n // Write companion markdown and richtext files\n const mdPaths =\n typeof entryType === 'string' ? companionMarkdownPathsForEntry(fileName, entryType, config.collections) : {};\n for (const [fieldName, mdPath] of Object.entries(mdPaths)) {\n const mdContent = markdownContents[fieldName] ?? '';\n await saveGitHubFile(mdPath, mdContent, `Update ${fieldName} for ${entryType} ${entryId}`, activeBranch);\n }\n const rtPaths =\n typeof entryType === 'string' ? companionRichTextPathsForEntry(fileName, entryType, config.collections) : {};\n for (const [fieldName, rtPath] of Object.entries(rtPaths)) {\n const rtContent = markdownContents[fieldName] ?? '';\n await saveGitHubFile(rtPath, rtContent, `Update ${fieldName} for ${entryType} ${entryId}`, activeBranch);\n }\n await waitForPublicReadConsistency(fileName, normalizedData);\n\n // Write-through: update in-memory store so subsequent reads are instant\n if (activeBranch) {\n applyMutation(activeBranch, {\n type: 'upsert',\n path: fileName,\n content: payload,\n sha: '', // SHA unknown after single-file commit; next tree fetch will correct it\n companions: markdownContents,\n });\n }\n\n await persistBranchHistoryEntryIfNeeded(activeBranch, fileName);\n await syncEmbeddingsForUpsertIfEnabled(fileName, payload, markdownContents, activeBranch, true);\n const built = await buildJsons(fileName);\n\n return built.success ? actionOk() : built;\n }\n\n const cookieStore = await cookies();\n const activeBranchDev = cookieStore.get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n const filePath = path.join(/*turbopackIgnore: true*/ process.cwd(), fileName);\n await fsPromises.writeFile(filePath, normalizedData, 'utf8');\n // Write companion markdown and richtext files\n const mdPaths =\n typeof entryType === 'string' ? companionMarkdownPathsForEntry(fileName, entryType, config.collections) : {};\n for (const [fieldName, mdPath] of Object.entries(mdPaths)) {\n const mdContent = markdownContents[fieldName] ?? '';\n await fsPromises.writeFile(path.join(/*turbopackIgnore: true*/ process.cwd(), mdPath), mdContent, 'utf8');\n }\n const rtPathsDev =\n typeof entryType === 'string' ? companionRichTextPathsForEntry(fileName, entryType, config.collections) : {};\n for (const [fieldName, rtPath] of Object.entries(rtPathsDev)) {\n const rtContent = markdownContents[fieldName] ?? '';\n await fsPromises.writeFile(path.join(/*turbopackIgnore: true*/ process.cwd(), rtPath), rtContent, 'utf8');\n }\n await persistBranchHistoryEntryIfNeeded(activeBranchDev, fileName);\n await syncEmbeddingsForUpsertIfEnabled(fileName, payload, markdownContents, activeBranchDev, false);\n const built = await buildJsons(fileName);\n\n return built.success ? actionOk() : built;\n } catch (e) {\n return actionErr(new Error(`Failed to save file: ${getErrorMessage(e)}`));\n }\n};\n\nexport const newFile = async (type: string): Promise<NewFileResult> => {\n const config = getConfig();\n try {\n const id = crypto.randomUUID();\n const values = {\n sys: {\n id,\n type,\n status: 'draft' as const,\n },\n fields: initialFieldsForNewEntry(type),\n };\n const data = JSON.stringify(values, null, 2);\n const file = `${config.contentFolder}/${type}/${type}-${id}.json`;\n const normalizedData = `${data}\\n`;\n\n if (isProductionMode()) {\n await assertFeatureBranchForWritesIfRequired();\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n await saveGitHubFile(file, normalizedData, `Create new ${type} ${id}`, activeBranch);\n await waitForPublicReadConsistency(file, normalizedData);\n\n // Write-through: add new entry to in-memory store\n if (activeBranch) {\n applyMutation(activeBranch, {\n type: 'upsert',\n path: file,\n content: values,\n sha: '',\n });\n }\n\n await persistBranchHistoryEntryIfNeeded(activeBranch, file);\n await syncEmbeddingsForUpsertIfEnabled(file, values, {}, activeBranch, true);\n const built = await buildJsons(file);\n\n return built.success ? { success: true, path: file } : { success: false, error: built.error };\n }\n\n const cookieStore = await cookies();\n const activeBranchDev = cookieStore.get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n const filePath = path.join(/*turbopackIgnore: true*/ process.cwd(), file);\n await fsPromises.mkdir(path.dirname(filePath), { recursive: true });\n await fsPromises.writeFile(filePath, normalizedData, 'utf8');\n await persistBranchHistoryEntryIfNeeded(activeBranchDev, file);\n await syncEmbeddingsForUpsertIfEnabled(file, values, {}, activeBranchDev, false);\n const built = await buildJsons(file);\n\n return built.success ? { success: true, path: file } : { success: false, error: built.error };\n } catch (e) {\n return { success: false, error: getErrorMessage(e) } satisfies NewFileResult;\n }\n};\n\nexport const removeFile = async (fileName: string): Promise<ActionResult> => {\n const config = getConfig();\n try {\n let collectionType: string | undefined;\n try {\n const existing = await getFile(fileName);\n collectionType = existing?.sys?.type;\n } catch {\n /* best-effort */\n }\n\n // Determine companion markdown and richtext files to delete\n const companionPaths =\n typeof collectionType === 'string'\n ? [\n ...Object.values(companionMarkdownPathsForEntry(fileName, collectionType, config.collections)),\n ...Object.values(companionRichTextPathsForEntry(fileName, collectionType, config.collections)),\n ]\n : [];\n\n if (isProductionMode()) {\n await assertFeatureBranchForWritesIfRequired();\n const activeBranch = (await cookies()).get(CMS_ACTIVE_BRANCH_COOKIE)?.value;\n await deleteGitHubFile(fileName, `Remove ${fileName}`, activeBranch);\n for (const mdPath of companionPaths) {\n try {\n await deleteGitHubFile(mdPath, `Remove companion ${mdPath}`, activeBranch);\n } catch {\n /* best-effort — companion may not exist */\n }\n }\n\n // Write-through: remove entry from in-memory store\n if (activeBranch) {\n applyMutation(activeBranch, { type: 'delete', path: fileName });\n }\n\n await syncEmbeddingsForRemoveIfEnabled(fileName, activeBranch, true);\n const built = await buildJsons(fileName);\n\n return built.success ? actionOk() : built;\n }\n\n const filePath = path.join(/*turbopackIgnore: true*/ process.cwd(), fileName);\n await fsPromises.unlink(filePath);\n for (const mdPath of companionPaths) {\n try {\n await fsPromises.unlink(path.join(/*turbopackIgnore: true*/ process.cwd(), mdPath));\n } catch {\n /* best-effort — companion may not exist */\n }\n }\n await syncEmbeddingsForRemoveIfEnabled(fileName, undefined, false);\n const built = await buildJsons(fileName);\n\n return built.success ? actionOk() : built;\n } catch (e) {\n return actionErr(e);\n }\n};\n"],"mappings":"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","names":["listed","dir","mdPaths","built"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../admin/actions/media.ts"],"names":[],"mappings":"AAEA,OAAO,kBAAkB,CAAC;AAU1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,OAAO,EAAwC,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../admin/actions/media.ts"],"names":[],"mappings":"AAEA,OAAO,kBAAkB,CAAC;AAU1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,OAAO,EAAwC,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAmE1G;;;GAGG;AACH,eAAO,MAAM,eAAe,QAAa,OAAO,CAAC,SAAS,EAAE,CA2D3D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAU,UAAU,QAAQ,KAAG,OAAO,CAAC,iBAAiB,CAsF/E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,YAAY,CA8CvE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAU,SAAS,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,YAAY,CA2BxF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAU,SAAS,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,YAAY,CAmC9F,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CA8B5E,CAAC"}
|