octocms 0.4.1 → 0.4.3
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 +16 -13
- package/dist/admin/AdminApp.d.ts.map +1 -1
- package/dist/admin/AdminApp.js +35 -18
- package/dist/admin/AdminApp.js.map +1 -1
- package/dist/admin/actions/build.d.ts.map +1 -1
- package/dist/admin/actions/build.js +20 -5
- package/dist/admin/actions/build.js.map +1 -1
- package/dist/admin/actions/diff.d.ts.map +1 -1
- package/dist/admin/actions/diff.js +3 -2
- package/dist/admin/actions/diff.js.map +1 -1
- package/dist/admin/actions/entries.d.ts.map +1 -1
- package/dist/admin/actions/entries.js +36 -14
- package/dist/admin/actions/entries.js.map +1 -1
- package/dist/admin/actions/files.d.ts +8 -0
- package/dist/admin/actions/files.d.ts.map +1 -1
- package/dist/admin/actions/files.js +67 -10
- package/dist/admin/actions/files.js.map +1 -1
- package/dist/admin/actions/media.d.ts +4 -3
- package/dist/admin/actions/media.d.ts.map +1 -1
- package/dist/admin/actions/media.js +69 -15
- package/dist/admin/actions/media.js.map +1 -1
- package/dist/admin/actions/schema.d.ts.map +1 -1
- package/dist/admin/actions/schema.js +2 -4
- package/dist/admin/actions/schema.js.map +1 -1
- package/dist/admin/actions/search.js +15 -4
- package/dist/admin/actions/search.js.map +1 -1
- package/dist/admin/index.d.ts +13 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +12 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/pages/AdminErrorView.d.ts +32 -0
- package/dist/admin/pages/AdminErrorView.d.ts.map +1 -0
- package/dist/admin/pages/AdminErrorView.js +40 -0
- package/dist/admin/pages/AdminErrorView.js.map +1 -0
- package/dist/admin/pages/AdminLayout.d.ts.map +1 -1
- package/dist/admin/pages/AdminLayout.js +3 -3
- package/dist/admin/pages/AdminLayout.js.map +1 -1
- package/dist/admin/pages/CollectionPage.d.ts +1 -1
- package/dist/admin/pages/CollectionPage.d.ts.map +1 -1
- package/dist/admin/pages/CollectionPage.js +22 -16
- package/dist/admin/pages/CollectionPage.js.map +1 -1
- package/dist/admin/pages/ContentModelPage.d.ts +1 -1
- package/dist/admin/pages/ContentModelPage.d.ts.map +1 -1
- package/dist/admin/pages/ContentModelPage.js +1 -5
- package/dist/admin/pages/ContentModelPage.js.map +1 -1
- package/dist/admin/pages/ContentPage.d.ts +2 -0
- package/dist/admin/pages/ContentPage.d.ts.map +1 -0
- package/dist/admin/pages/ContentPage.js +21 -0
- package/dist/admin/pages/ContentPage.js.map +1 -0
- package/dist/admin/pages/ContentTypePage.d.ts +1 -1
- package/dist/admin/pages/ContentTypePage.d.ts.map +1 -1
- package/dist/admin/pages/ContentTypePage.js +3 -6
- package/dist/admin/pages/ContentTypePage.js.map +1 -1
- package/dist/admin/pages/DashboardPage.d.ts +1 -1
- package/dist/admin/pages/DashboardPage.d.ts.map +1 -1
- package/dist/admin/pages/DashboardPage.js +5 -15
- package/dist/admin/pages/DashboardPage.js.map +1 -1
- package/dist/admin/pages/EntryPage.d.ts +1 -1
- package/dist/admin/pages/EntryPage.d.ts.map +1 -1
- package/dist/admin/pages/EntryPage.js +12 -16
- package/dist/admin/pages/EntryPage.js.map +1 -1
- package/dist/admin/pages/MediaAssetPage.d.ts +4 -0
- package/dist/admin/pages/MediaAssetPage.d.ts.map +1 -0
- package/dist/admin/pages/MediaAssetPage.js +21 -0
- package/dist/admin/pages/MediaAssetPage.js.map +1 -0
- package/dist/admin/pages/MediaPage.d.ts +1 -3
- package/dist/admin/pages/MediaPage.d.ts.map +1 -1
- package/dist/admin/pages/MediaPage.js +3 -6
- package/dist/admin/pages/MediaPage.js.map +1 -1
- package/dist/admin/provider.d.ts +1 -3
- package/dist/admin/provider.d.ts.map +1 -1
- package/dist/admin/provider.js +1 -3
- package/dist/admin/provider.js.map +1 -1
- package/dist/admin/store/contentStore.d.ts +3 -0
- package/dist/admin/store/contentStore.d.ts.map +1 -1
- package/dist/admin/store/contentStore.js +31 -28
- package/dist/admin/store/contentStore.js.map +1 -1
- package/dist/admin/store/contentStoreFetch.d.ts.map +1 -1
- package/dist/admin/store/contentStoreFetch.js +10 -4
- package/dist/admin/store/contentStoreFetch.js.map +1 -1
- package/dist/admin/theme/cookie.d.ts +7 -0
- package/dist/admin/theme/cookie.d.ts.map +1 -0
- package/dist/admin/{actions/getThemeCookie.js → theme/cookie.js} +3 -3
- package/dist/admin/theme/cookie.js.map +1 -0
- package/dist/admin/theme/index.d.ts +4 -0
- package/dist/admin/theme/index.d.ts.map +1 -0
- package/dist/admin/theme/index.js +9 -0
- package/dist/admin/theme/index.js.map +1 -0
- package/dist/admin/theme/toggle.d.ts +5 -0
- package/dist/admin/theme/toggle.d.ts.map +1 -0
- package/dist/admin/theme/toggle.js +38 -0
- package/dist/admin/theme/toggle.js.map +1 -0
- package/dist/admin/theme/types.d.ts +10 -0
- package/dist/admin/theme/types.d.ts.map +1 -0
- package/dist/admin/theme/types.js +8 -0
- package/dist/admin/theme/types.js.map +1 -0
- package/dist/agent/embeddings.d.ts.map +1 -1
- package/dist/agent/embeddings.js +5 -3
- package/dist/agent/embeddings.js.map +1 -1
- package/dist/agent/embeddingsHook.js +1 -1
- package/dist/agent/embeddingsHook.js.map +1 -1
- package/dist/agent/index.cjs +216 -85
- package/dist/agent/index.cjs.map +1 -1
- package/dist/agent/search.d.ts +1 -1
- package/dist/agent/search.js +1 -1
- package/dist/agent/search.js.map +1 -1
- package/dist/{agentDocs-YTR2WM5C.js → agentDocs-UXZMZNZK.js} +2 -2
- package/dist/{chunk-VTZ2KGUU.js → chunk-236PKCTR.js} +25 -3
- package/dist/chunk-236PKCTR.js.map +1 -0
- package/dist/cli/index.js +5 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/components/Chat/ChatPage.d.ts.map +1 -1
- package/dist/components/Chat/ChatPage.js +6 -6
- package/dist/components/Chat/ChatPage.js.map +1 -1
- package/dist/components/Chat/ChatPage.skeleton.d.ts +3 -0
- package/dist/components/Chat/ChatPage.skeleton.d.ts.map +1 -0
- package/dist/components/Chat/ChatPage.skeleton.js +22 -0
- package/dist/components/Chat/ChatPage.skeleton.js.map +1 -0
- package/dist/components/Chat/ProposalCard.js +3 -3
- package/dist/components/Chat/ProposalCard.js.map +1 -1
- package/dist/components/CommandK/CommandK.d.ts +12 -0
- package/dist/components/CommandK/CommandK.d.ts.map +1 -0
- package/dist/components/CommandK/CommandK.js +229 -0
- package/dist/components/CommandK/CommandK.js.map +1 -0
- package/dist/components/CommandK/parts.d.ts +20 -0
- package/dist/components/CommandK/parts.d.ts.map +1 -0
- package/dist/components/CommandK/parts.js +34 -0
- package/dist/components/CommandK/parts.js.map +1 -0
- package/dist/components/ContentModel/ContentModelList.d.ts.map +1 -1
- package/dist/components/ContentModel/ContentModelList.js +69 -51
- package/dist/components/ContentModel/ContentModelList.js.map +1 -1
- package/dist/components/ContentModel/ContentModelList.skeleton.d.ts +5 -0
- package/dist/components/ContentModel/ContentModelList.skeleton.d.ts.map +1 -0
- package/dist/components/ContentModel/ContentModelList.skeleton.js +16 -0
- package/dist/components/ContentModel/ContentModelList.skeleton.js.map +1 -0
- package/dist/components/ContentModel/ContentTypeDetail.js +72 -86
- package/dist/components/ContentModel/ContentTypeDetail.js.map +1 -1
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.d.ts +5 -0
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.d.ts.map +1 -0
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.js +22 -0
- package/dist/components/ContentModel/ContentTypeDetail.skeleton.js.map +1 -0
- package/dist/components/ContentModel/CreateContentTypeDialog.js +1 -1
- package/dist/components/ContentModel/CreateContentTypeDialog.js.map +1 -1
- package/dist/components/ContentModel/DeleteContentTypeDialog.js +1 -1
- package/dist/components/ContentModel/DeleteContentTypeDialog.js.map +1 -1
- package/dist/components/ContentModel/EditContentTypeDialog.js +2 -2
- package/dist/components/ContentModel/EditContentTypeDialog.js.map +1 -1
- package/dist/components/ContentModel/FieldDialog.js +2 -2
- package/dist/components/ContentModel/FieldDialog.js.map +1 -1
- package/dist/components/ContentModel/SchemaImpactList.js +3 -3
- package/dist/components/ContentModel/SchemaImpactList.js.map +1 -1
- package/dist/components/ContentTypes.js +2 -2
- package/dist/components/ContentTypes.js.map +1 -1
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.d.ts +3 -0
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.d.ts.map +1 -0
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.js +10 -0
- package/dist/components/Dashboard/DashboardContent.collection.skeleton.js.map +1 -0
- package/dist/components/Dashboard/DashboardContent.d.ts +3 -1
- package/dist/components/Dashboard/DashboardContent.d.ts.map +1 -1
- package/dist/components/Dashboard/DashboardContent.js +275 -110
- package/dist/components/Dashboard/DashboardContent.js.map +1 -1
- package/dist/components/Dashboard/DashboardContent.list.skeleton.d.ts +7 -0
- package/dist/components/Dashboard/DashboardContent.list.skeleton.d.ts.map +1 -0
- package/dist/components/Dashboard/DashboardContent.list.skeleton.js +22 -0
- package/dist/components/Dashboard/DashboardContent.list.skeleton.js.map +1 -0
- package/dist/components/Dashboard/DashboardContent.skeleton.d.ts +2 -0
- package/dist/components/Dashboard/DashboardContent.skeleton.d.ts.map +1 -0
- package/dist/components/Dashboard/DashboardContent.skeleton.js +13 -0
- package/dist/components/Dashboard/DashboardContent.skeleton.js.map +1 -0
- package/dist/components/DiffView/DiffHunk.js +2 -2
- package/dist/components/DiffView/DiffHunk.js.map +1 -1
- package/dist/components/DiffView/DiffView.js +2 -2
- 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 +122 -128
- package/dist/components/EditPost/EditPost.js.map +1 -1
- package/dist/components/EditPost/EditPost.skeleton.d.ts +5 -0
- package/dist/components/EditPost/EditPost.skeleton.d.ts.map +1 -0
- package/dist/components/EditPost/EditPost.skeleton.js +34 -0
- package/dist/components/EditPost/EditPost.skeleton.js.map +1 -0
- package/dist/components/ErrorBoundary.d.ts +30 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.js +73 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/FieldLabel.d.ts +11 -0
- package/dist/components/FieldLabel.d.ts.map +1 -0
- package/dist/components/FieldLabel.js +17 -0
- package/dist/components/FieldLabel.js.map +1 -0
- package/dist/components/FieldShell.d.ts +15 -0
- package/dist/components/FieldShell.d.ts.map +1 -0
- package/dist/components/FieldShell.js +29 -0
- package/dist/components/FieldShell.js.map +1 -0
- package/dist/components/FileExplorer/FileExplorer.d.ts.map +1 -1
- package/dist/components/FileExplorer/FileExplorer.js +2 -1
- package/dist/components/FileExplorer/FileExplorer.js.map +1 -1
- package/dist/components/FormBooleanField.d.ts.map +1 -1
- package/dist/components/FormBooleanField.js +25 -12
- package/dist/components/FormBooleanField.js.map +1 -1
- package/dist/components/FormColorField.d.ts.map +1 -1
- package/dist/components/FormColorField.js +8 -12
- package/dist/components/FormColorField.js.map +1 -1
- package/dist/components/FormDatetimeField.d.ts.map +1 -1
- package/dist/components/FormDatetimeField.js +8 -12
- package/dist/components/FormDatetimeField.js.map +1 -1
- package/dist/components/FormFields.d.ts.map +1 -1
- package/dist/components/FormFields.js +4 -4
- package/dist/components/FormFields.js.map +1 -1
- package/dist/components/FormImageField.d.ts.map +1 -1
- package/dist/components/FormImageField.js +75 -186
- package/dist/components/FormImageField.js.map +1 -1
- package/dist/components/FormJsonField.d.ts.map +1 -1
- package/dist/components/FormJsonField.js +7 -10
- package/dist/components/FormJsonField.js.map +1 -1
- package/dist/components/FormMarkdownField.d.ts.map +1 -1
- package/dist/components/FormMarkdownField.js +3 -2
- package/dist/components/FormMarkdownField.js.map +1 -1
- package/dist/components/FormNumberField.d.ts.map +1 -1
- package/dist/components/FormNumberField.js +8 -12
- package/dist/components/FormNumberField.js.map +1 -1
- package/dist/components/FormReferenceField.d.ts.map +1 -1
- package/dist/components/FormReferenceField.js +37 -39
- package/dist/components/FormReferenceField.js.map +1 -1
- package/dist/components/FormSelectField.d.ts.map +1 -1
- package/dist/components/FormSelectField.js +13 -11
- package/dist/components/FormSelectField.js.map +1 -1
- package/dist/components/FormSlugField.d.ts.map +1 -1
- package/dist/components/FormSlugField.js +9 -13
- package/dist/components/FormSlugField.js.map +1 -1
- package/dist/components/FormStringField.d.ts.map +1 -1
- package/dist/components/FormStringField.js +8 -12
- package/dist/components/FormStringField.js.map +1 -1
- package/dist/components/FormTextField.d.ts.map +1 -1
- package/dist/components/FormTextField.js +6 -9
- package/dist/components/FormTextField.js.map +1 -1
- package/dist/components/FormUrlField.d.ts.map +1 -1
- package/dist/components/FormUrlField.js +8 -12
- package/dist/components/FormUrlField.js.map +1 -1
- package/dist/components/HistorySection/HistorySection.d.ts +2 -1
- package/dist/components/HistorySection/HistorySection.d.ts.map +1 -1
- package/dist/components/HistorySection/HistorySection.js +56 -55
- 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 +34 -13
- package/dist/components/InlineEntryEditor/InlineEntryEditor.js.map +1 -1
- package/dist/components/Layout/Layout.d.ts +3 -1
- package/dist/components/Layout/Layout.d.ts.map +1 -1
- package/dist/components/Layout/Layout.js +34 -29
- package/dist/components/Layout/Layout.js.map +1 -1
- package/dist/components/Layout/LeftNavItem.d.ts +20 -0
- package/dist/components/Layout/LeftNavItem.d.ts.map +1 -0
- package/dist/components/Layout/LeftNavItem.js +24 -0
- package/dist/components/Layout/LeftNavItem.js.map +1 -0
- package/dist/components/Layout/PageBar.d.ts +10 -0
- package/dist/components/Layout/PageBar.d.ts.map +1 -0
- package/dist/components/Layout/PageBar.js +43 -0
- package/dist/components/Layout/PageBar.js.map +1 -0
- package/dist/components/Layout/PageShell.d.ts +30 -0
- package/dist/components/Layout/PageShell.d.ts.map +1 -0
- package/dist/components/Layout/PageShell.js +33 -0
- package/dist/components/Layout/PageShell.js.map +1 -0
- package/dist/components/Layout/TopHeader.d.ts +8 -0
- package/dist/components/Layout/TopHeader.d.ts.map +1 -0
- package/dist/components/Layout/TopHeader.js +276 -0
- package/dist/components/Layout/TopHeader.js.map +1 -0
- package/dist/components/LinkedBySection/LinkedBySection.d.ts.map +1 -1
- package/dist/components/LinkedBySection/LinkedBySection.js +12 -27
- package/dist/components/LinkedBySection/LinkedBySection.js.map +1 -1
- package/dist/components/MediaAsset/MediaAsset.d.ts +7 -0
- package/dist/components/MediaAsset/MediaAsset.d.ts.map +1 -0
- package/dist/components/MediaAsset/MediaAsset.js +236 -0
- package/dist/components/MediaAsset/MediaAsset.js.map +1 -0
- package/dist/components/MediaAsset/MediaAsset.skeleton.d.ts +3 -0
- package/dist/components/MediaAsset/MediaAsset.skeleton.d.ts.map +1 -0
- package/dist/components/MediaAsset/MediaAsset.skeleton.js +42 -0
- package/dist/components/MediaAsset/MediaAsset.skeleton.js.map +1 -0
- package/dist/components/MediaAsset/findMediaFileByRequestedId.d.ts +4 -0
- package/dist/components/MediaAsset/findMediaFileByRequestedId.d.ts.map +1 -0
- package/dist/components/MediaAsset/findMediaFileByRequestedId.js +15 -0
- package/dist/components/MediaAsset/findMediaFileByRequestedId.js.map +1 -0
- package/dist/components/MediaManager/CreateFolderDialog.d.ts +9 -0
- package/dist/components/MediaManager/CreateFolderDialog.d.ts.map +1 -0
- package/dist/components/MediaManager/CreateFolderDialog.js +68 -0
- package/dist/components/MediaManager/CreateFolderDialog.js.map +1 -0
- package/dist/components/MediaManager/DeleteFolderDialog.d.ts +8 -0
- package/dist/components/MediaManager/DeleteFolderDialog.d.ts.map +1 -0
- package/dist/components/MediaManager/DeleteFolderDialog.js +42 -0
- package/dist/components/MediaManager/DeleteFolderDialog.js.map +1 -0
- package/dist/components/MediaManager/MediaLeftPanel.d.ts +13 -0
- package/dist/components/MediaManager/MediaLeftPanel.d.ts.map +1 -0
- package/dist/components/MediaManager/MediaLeftPanel.js +93 -0
- package/dist/components/MediaManager/MediaLeftPanel.js.map +1 -0
- package/dist/components/MediaManager/MediaListTable.d.ts +11 -0
- package/dist/components/MediaManager/MediaListTable.d.ts.map +1 -0
- package/dist/components/MediaManager/MediaListTable.js +59 -0
- package/dist/components/MediaManager/MediaListTable.js.map +1 -0
- package/dist/components/MediaManager/MediaManager.d.ts +1 -3
- package/dist/components/MediaManager/MediaManager.d.ts.map +1 -1
- package/dist/components/MediaManager/MediaManager.js +255 -546
- package/dist/components/MediaManager/MediaManager.js.map +1 -1
- package/dist/components/MediaManager/MediaManager.skeleton.d.ts +3 -0
- package/dist/components/MediaManager/MediaManager.skeleton.d.ts.map +1 -0
- package/dist/components/MediaManager/MediaManager.skeleton.js +30 -0
- package/dist/components/MediaManager/MediaManager.skeleton.js.map +1 -0
- package/dist/components/MediaManager/MediaSelectDialog.d.ts +12 -0
- package/dist/components/MediaManager/MediaSelectDialog.d.ts.map +1 -0
- package/dist/components/MediaManager/MediaSelectDialog.js +190 -0
- package/dist/components/MediaManager/MediaSelectDialog.js.map +1 -0
- package/dist/components/MediaManager/MediaUploadBar.d.ts +7 -0
- package/dist/components/MediaManager/MediaUploadBar.d.ts.map +1 -0
- package/dist/components/MediaManager/MediaUploadBar.js +75 -0
- package/dist/components/MediaManager/MediaUploadBar.js.map +1 -0
- package/dist/components/MediaManager/MediaUploadDialog.d.ts +13 -0
- package/dist/components/MediaManager/MediaUploadDialog.d.ts.map +1 -0
- package/dist/components/MediaManager/MediaUploadDialog.js +99 -0
- package/dist/components/MediaManager/MediaUploadDialog.js.map +1 -0
- package/dist/components/StatusBadge.d.ts +1 -8
- package/dist/components/StatusBadge.d.ts.map +1 -1
- package/dist/components/StatusBadge.js +2 -49
- package/dist/components/StatusBadge.js.map +1 -1
- package/dist/components/richtext/ComponentEmbedEditor.js +4 -4
- package/dist/components/richtext/ComponentEmbedEditor.js.map +1 -1
- package/dist/components/richtext/ConditionEmbedEditor.js +2 -2
- package/dist/components/richtext/ConditionEmbedEditor.js.map +1 -1
- package/dist/components/richtext/VariableEmbedEditor.js +3 -3
- package/dist/components/richtext/VariableEmbedEditor.js.map +1 -1
- package/dist/components/skeletons/AdminGenericSkeleton.d.ts +7 -0
- package/dist/components/skeletons/AdminGenericSkeleton.d.ts.map +1 -0
- package/dist/components/skeletons/AdminGenericSkeleton.js +14 -0
- package/dist/components/skeletons/AdminGenericSkeleton.js.map +1 -0
- package/dist/components/skeletons/SectionSkeleton.d.ts +11 -0
- package/dist/components/skeletons/SectionSkeleton.d.ts.map +1 -0
- package/dist/components/skeletons/SectionSkeleton.js +26 -0
- package/dist/components/skeletons/SectionSkeleton.js.map +1 -0
- package/dist/components/skeletons/index.d.ts +11 -0
- package/dist/components/skeletons/index.d.ts.map +1 -0
- package/dist/components/skeletons/index.js +12 -0
- package/dist/components/skeletons/index.js.map +1 -0
- package/dist/components/skeletons/primitives.d.ts +17 -0
- package/dist/components/skeletons/primitives.d.ts.map +1 -0
- package/dist/components/skeletons/primitives.js +34 -0
- package/dist/components/skeletons/primitives.js.map +1 -0
- package/dist/components/ui/avatar-stack.d.ts +13 -0
- package/dist/components/ui/avatar-stack.d.ts.map +1 -0
- package/dist/components/ui/avatar-stack.js +27 -0
- package/dist/components/ui/avatar-stack.js.map +1 -0
- package/dist/components/ui/banner.d.ts +13 -0
- package/dist/components/ui/banner.d.ts.map +1 -0
- package/dist/components/ui/banner.js +24 -0
- package/dist/components/ui/banner.js.map +1 -0
- package/dist/components/ui/branch-chip.d.ts +7 -0
- package/dist/components/ui/branch-chip.d.ts.map +1 -0
- package/dist/components/ui/branch-chip.js +58 -0
- package/dist/components/ui/branch-chip.js.map +1 -0
- package/dist/components/ui/button.d.ts +4 -2
- package/dist/components/ui/button.d.ts.map +1 -1
- package/dist/components/ui/button.js +30 -12
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/chip.d.ts +7 -0
- package/dist/components/ui/chip.d.ts.map +1 -0
- package/dist/components/ui/chip.js +44 -0
- package/dist/components/ui/chip.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/components/ui/dropdown-menu.js +14 -8
- package/dist/components/ui/dropdown-menu.js.map +1 -1
- package/dist/components/ui/empty.d.ts +11 -0
- package/dist/components/ui/empty.d.ts.map +1 -0
- package/dist/components/ui/empty.js +24 -0
- package/dist/components/ui/empty.js.map +1 -0
- package/dist/components/ui/field.d.ts +17 -0
- package/dist/components/ui/field.d.ts.map +1 -0
- package/dist/components/ui/field.js +52 -0
- package/dist/components/ui/field.js.map +1 -0
- package/dist/components/ui/index.d.ts +16 -0
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +25 -0
- package/dist/components/ui/index.js.map +1 -1
- package/dist/components/ui/input.d.ts +5 -1
- package/dist/components/ui/input.d.ts.map +1 -1
- package/dist/components/ui/input.js +26 -3
- package/dist/components/ui/input.js.map +1 -1
- package/dist/components/ui/kbd.d.ts +3 -0
- package/dist/components/ui/kbd.d.ts.map +1 -0
- package/dist/components/ui/kbd.js +30 -0
- package/dist/components/ui/kbd.js.map +1 -0
- package/dist/components/ui/publish-button.d.ts +7 -0
- package/dist/components/ui/publish-button.d.ts.map +1 -0
- package/dist/components/ui/publish-button.js +50 -0
- package/dist/components/ui/publish-button.js.map +1 -0
- package/dist/components/ui/select.js +4 -4
- package/dist/components/ui/select.js.map +1 -1
- package/dist/components/ui/status-badge.d.ts +15 -0
- package/dist/components/ui/status-badge.d.ts.map +1 -0
- package/dist/components/ui/status-badge.js +60 -0
- package/dist/components/ui/status-badge.js.map +1 -0
- package/dist/components/ui/tabs-pill.d.ts +17 -0
- package/dist/components/ui/tabs-pill.d.ts.map +1 -0
- package/dist/components/ui/tabs-pill.js +67 -0
- package/dist/components/ui/tabs-pill.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +6 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.js +25 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/toast-card.d.ts +15 -0
- package/dist/components/ui/toast-card.d.ts.map +1 -0
- package/dist/components/ui/toast-card.js +90 -0
- package/dist/components/ui/toast-card.js.map +1 -0
- package/dist/components/ui/toast.js +1 -1
- package/dist/components/ui/toast.js.map +1 -1
- package/dist/config.cjs +2 -4
- package/dist/config.cjs.map +1 -1
- package/dist/{embeddingsGen-FWXI55MC.js → embeddingsGen-775PXWJY.js} +14 -6
- package/dist/embeddingsGen-775PXWJY.js.map +1 -0
- package/dist/{github-Q7ABLNZF.js → github-WDLK3J4R.js} +55 -30
- package/dist/{github-Q7ABLNZF.js.map → github-WDLK3J4R.js.map} +1 -1
- package/dist/github-public.d.ts +4 -0
- package/dist/github-public.d.ts.map +1 -1
- package/dist/github-public.js +52 -25
- package/dist/github-public.js.map +1 -1
- package/dist/globals.css +433 -136
- package/dist/hooks/useEntryStack.d.ts +7 -3
- package/dist/hooks/useEntryStack.d.ts.map +1 -1
- package/dist/hooks/useEntryStack.js +54 -52
- package/dist/hooks/useEntryStack.js.map +1 -1
- package/dist/hooks/useMediaCustomFolders.d.ts +13 -0
- package/dist/hooks/useMediaCustomFolders.d.ts.map +1 -0
- package/dist/hooks/useMediaCustomFolders.js +53 -0
- package/dist/hooks/useMediaCustomFolders.js.map +1 -0
- package/dist/index.cjs +54 -29
- package/dist/index.cjs.map +1 -1
- package/dist/{init-PSAF5XNZ.js → init-SCYKMP2V.js} +5 -2
- package/dist/init-SCYKMP2V.js.map +1 -0
- package/dist/lib/entryEditUrl.d.ts +10 -0
- package/dist/lib/entryEditUrl.d.ts.map +1 -0
- package/dist/lib/entryEditUrl.js +9 -0
- package/dist/lib/entryEditUrl.js.map +1 -0
- package/dist/lib/extractImageMetadata.d.ts +10 -3
- package/dist/lib/extractImageMetadata.d.ts.map +1 -1
- package/dist/lib/extractImageMetadata.js +8 -5
- package/dist/lib/extractImageMetadata.js.map +1 -1
- package/dist/lib/githubContentMode.d.ts +23 -2
- package/dist/lib/githubContentMode.d.ts.map +1 -1
- package/dist/lib/githubContentMode.js +2 -4
- package/dist/lib/githubContentMode.js.map +1 -1
- package/dist/lib/mediaPath.d.ts +14 -0
- package/dist/lib/mediaPath.d.ts.map +1 -0
- package/dist/lib/mediaPath.js +20 -0
- package/dist/lib/mediaPath.js.map +1 -0
- package/dist/lib/resolveEntryTitle.d.ts +2 -1
- package/dist/lib/resolveEntryTitle.d.ts.map +1 -1
- package/dist/lib/resolveEntryTitle.js +4 -2
- package/dist/lib/resolveEntryTitle.js.map +1 -1
- package/dist/lib/searchIndex.d.ts +13 -0
- package/dist/lib/searchIndex.d.ts.map +1 -1
- package/dist/lib/searchIndex.js +7 -2
- package/dist/lib/searchIndex.js.map +1 -1
- package/dist/query.cjs +54 -29
- package/dist/query.cjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/{update-B37MPMDP.js → update-XUXSHODB.js} +72 -31
- package/dist/update-XUXSHODB.js.map +1 -0
- package/dist/utils/formatUpdatedAt.d.ts +3 -0
- package/dist/utils/formatUpdatedAt.d.ts.map +1 -0
- package/dist/utils/formatUpdatedAt.js +24 -0
- package/dist/utils/formatUpdatedAt.js.map +1 -0
- package/dist/withOctoCMS.cjs +2 -4
- package/dist/withOctoCMS.cjs.map +1 -1
- package/docs/editing-schema.md +4 -4
- package/docs/overview.md +1 -1
- package/globals.css +433 -136
- package/package.json +6 -1
- package/dist/admin/ThemeProvider.d.ts +0 -37
- package/dist/admin/ThemeProvider.d.ts.map +0 -1
- package/dist/admin/ThemeProvider.js +0 -42
- package/dist/admin/ThemeProvider.js.map +0 -1
- package/dist/admin/actions/getThemeCookie.d.ts +0 -9
- package/dist/admin/actions/getThemeCookie.d.ts.map +0 -1
- package/dist/admin/actions/getThemeCookie.js.map +0 -1
- package/dist/admin/pages/SearchPage.d.ts +0 -2
- package/dist/admin/pages/SearchPage.d.ts.map +0 -1
- package/dist/admin/pages/SearchPage.js +0 -20
- package/dist/admin/pages/SearchPage.js.map +0 -1
- package/dist/admin/theme.d.ts +0 -10
- package/dist/admin/theme.d.ts.map +0 -1
- package/dist/admin/theme.js +0 -8
- package/dist/admin/theme.js.map +0 -1
- package/dist/chunk-VTZ2KGUU.js.map +0 -1
- package/dist/components/CMSSidebar/CMSSidebar.d.ts +0 -2
- package/dist/components/CMSSidebar/CMSSidebar.d.ts.map +0 -1
- package/dist/components/CMSSidebar/CMSSidebar.js +0 -104
- package/dist/components/CMSSidebar/CMSSidebar.js.map +0 -1
- package/dist/components/Header/Header.d.ts +0 -6
- package/dist/components/Header/Header.d.ts.map +0 -1
- package/dist/components/Header/Header.js +0 -318
- package/dist/components/Header/Header.js.map +0 -1
- package/dist/components/Header/ThemeToggle.d.ts +0 -7
- package/dist/components/Header/ThemeToggle.d.ts.map +0 -1
- package/dist/components/Header/ThemeToggle.js +0 -31
- package/dist/components/Header/ThemeToggle.js.map +0 -1
- package/dist/components/Loading.d.ts +0 -6
- package/dist/components/Loading.d.ts.map +0 -1
- package/dist/components/Loading.js +0 -14
- package/dist/components/Loading.js.map +0 -1
- package/dist/components/SearchPage.d.ts +0 -2
- package/dist/components/SearchPage.d.ts.map +0 -1
- package/dist/components/SearchPage.js +0 -97
- package/dist/components/SearchPage.js.map +0 -1
- package/dist/embeddingsGen-FWXI55MC.js.map +0 -1
- package/dist/init-PSAF5XNZ.js.map +0 -1
- package/dist/update-B37MPMDP.js.map +0 -1
- /package/dist/{agentDocs-YTR2WM5C.js.map → agentDocs-UXZMZNZK.js.map} +0 -0
package/dist/admin/AdminApp.d.ts
CHANGED
|
@@ -4,21 +4,24 @@ type AdminAppProps = {
|
|
|
4
4
|
}>;
|
|
5
5
|
};
|
|
6
6
|
/**
|
|
7
|
-
* Catch-all admin router
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* export { AdminApp as default } from 'octocms/admin/AdminApp';
|
|
7
|
+
* Catch-all admin router. Mounted via a single `src/app/cms/[[...path]]/page.tsx`
|
|
8
|
+
* file in the user app that re-exports this component as the default.
|
|
11
9
|
*
|
|
12
10
|
* Route segments map to admin pages:
|
|
13
|
-
* /cms
|
|
14
|
-
* /cms/
|
|
15
|
-
* /cms/
|
|
16
|
-
* /cms/
|
|
17
|
-
* /cms/
|
|
18
|
-
* /cms/
|
|
19
|
-
* /cms/
|
|
20
|
-
* /cms
|
|
21
|
-
* /cms/<type
|
|
11
|
+
* /cms → DashboardPage (empty home)
|
|
12
|
+
* /cms/content → ContentPage (all entries)
|
|
13
|
+
* /cms/content/<type> → CollectionPage
|
|
14
|
+
* /cms/content/<type>/<id> → EntryPage
|
|
15
|
+
* /cms/chat → ChatPage (gated on `isAgentEnabled(agentConfig)`)
|
|
16
|
+
* /cms/media → MediaPage (library — grid + folders)
|
|
17
|
+
* /cms/media/<id> → MediaAssetPage (full-page asset editor)
|
|
18
|
+
* /cms/model → ContentModelPage
|
|
19
|
+
* /cms/model/<type> → ContentTypePage
|
|
20
|
+
*
|
|
21
|
+
* Streaming model: `params` is awaited inside `<AdminAppDispatcher>`, which is
|
|
22
|
+
* wrapped in an outer `<Suspense>` so Next.js can start streaming the shell
|
|
23
|
+
* immediately. Each dispatched branch adds its own inner `<Suspense>` with the
|
|
24
|
+
* matching per-page skeleton.
|
|
22
25
|
*/
|
|
23
26
|
export declare function AdminApp({ params }: AdminAppProps): import("react/jsx-runtime").JSX.Element;
|
|
24
27
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminApp.d.ts","sourceRoot":"","sources":["../../admin/AdminApp.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdminApp.d.ts","sourceRoot":"","sources":["../../admin/AdminApp.tsx"],"names":[],"mappings":"AAuBA,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACtC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,aAAa,2CAMjD"}
|
package/dist/admin/AdminApp.js
CHANGED
|
@@ -1,46 +1,63 @@
|
|
|
1
1
|
import "../chunk-B5LE2OEC.js";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
import { Suspense } from "react";
|
|
4
|
+
import { ChatPageSkeleton } from "../components/Chat/ChatPage.skeleton";
|
|
5
|
+
import { ContentModelListSkeleton } from "../components/ContentModel/ContentModelList.skeleton";
|
|
6
|
+
import { ContentTypeDetailSkeleton } from "../components/ContentModel/ContentTypeDetail.skeleton";
|
|
7
|
+
import { DashboardCollectionSkeleton } from "../components/Dashboard/DashboardContent.collection.skeleton";
|
|
8
|
+
import { DashboardContentSkeleton } from "../components/Dashboard/DashboardContent.skeleton";
|
|
9
|
+
import { DashboardListSkeleton } from "../components/Dashboard/DashboardContent.list.skeleton";
|
|
10
|
+
import { EditPostSkeleton } from "../components/EditPost/EditPost.skeleton";
|
|
11
|
+
import { MediaAssetSkeleton } from "../components/MediaAsset/MediaAsset.skeleton";
|
|
12
|
+
import { MediaManagerSkeleton } from "../components/MediaManager/MediaManager.skeleton";
|
|
13
|
+
import { AdminGenericSkeleton } from "../components/skeletons/AdminGenericSkeleton";
|
|
4
14
|
import { ChatPage } from "./pages/ChatPage";
|
|
5
15
|
import { CollectionPage } from "./pages/CollectionPage";
|
|
6
16
|
import { ContentModelPage } from "./pages/ContentModelPage";
|
|
17
|
+
import { ContentPage } from "./pages/ContentPage";
|
|
7
18
|
import { ContentTypePage } from "./pages/ContentTypePage";
|
|
8
19
|
import { DashboardPage } from "./pages/DashboardPage";
|
|
9
20
|
import { EntryPage } from "./pages/EntryPage";
|
|
21
|
+
import { MediaAssetPage } from "./pages/MediaAssetPage";
|
|
10
22
|
import { MediaPage } from "./pages/MediaPage";
|
|
11
|
-
import { SearchPage } from "./pages/SearchPage";
|
|
12
23
|
function AdminApp({ params }) {
|
|
13
|
-
return /* @__PURE__ */ jsx(Suspense, { fallback:
|
|
24
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(AdminGenericSkeleton, {}), children: /* @__PURE__ */ jsx(AdminAppDispatcher, { params }) });
|
|
14
25
|
}
|
|
15
|
-
async function
|
|
26
|
+
async function AdminAppDispatcher({ params }) {
|
|
16
27
|
const { path } = await params;
|
|
17
28
|
const segments = path != null ? path : [];
|
|
18
29
|
if (segments.length === 0) {
|
|
19
30
|
return /* @__PURE__ */ jsx(DashboardPage, {});
|
|
20
31
|
}
|
|
21
|
-
if (segments[0] === "search") {
|
|
22
|
-
return /* @__PURE__ */ jsx(SearchPage, {});
|
|
23
|
-
}
|
|
24
32
|
if (segments[0] === "chat") {
|
|
25
|
-
return /* @__PURE__ */ jsx(ChatPage, {});
|
|
33
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(ChatPageSkeleton, {}), children: /* @__PURE__ */ jsx(ChatPage, {}) });
|
|
26
34
|
}
|
|
27
35
|
if (segments[0] === "media") {
|
|
28
|
-
|
|
29
|
-
|
|
36
|
+
if (segments.length === 1) {
|
|
37
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(MediaManagerSkeleton, {}), children: /* @__PURE__ */ jsx(MediaPage, {}) });
|
|
38
|
+
}
|
|
39
|
+
const id = segments[1];
|
|
40
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(MediaAssetSkeleton, {}), children: /* @__PURE__ */ jsx(MediaAssetPage, { id }) }, id);
|
|
30
41
|
}
|
|
31
|
-
if (segments[0] === "
|
|
42
|
+
if (segments[0] === "model") {
|
|
32
43
|
if (segments.length === 1) {
|
|
33
|
-
return /* @__PURE__ */ jsx(ContentModelPage, {});
|
|
44
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(ContentModelListSkeleton, {}), children: /* @__PURE__ */ jsx(ContentModelPage, {}) });
|
|
34
45
|
}
|
|
35
|
-
const [,
|
|
36
|
-
return /* @__PURE__ */ jsx(ContentTypePage, { type
|
|
46
|
+
const [, type] = segments;
|
|
47
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(ContentTypeDetailSkeleton, {}), children: /* @__PURE__ */ jsx(ContentTypePage, { type }) }, type);
|
|
37
48
|
}
|
|
38
|
-
if (segments
|
|
39
|
-
|
|
40
|
-
|
|
49
|
+
if (segments[0] === "content") {
|
|
50
|
+
if (segments.length === 1) {
|
|
51
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(DashboardListSkeleton, {}), children: /* @__PURE__ */ jsx(ContentPage, {}) });
|
|
52
|
+
}
|
|
53
|
+
if (segments.length === 2) {
|
|
54
|
+
const [, type2] = segments;
|
|
55
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(DashboardCollectionSkeleton, {}), children: /* @__PURE__ */ jsx(CollectionPage, { params: Promise.resolve({ type: type2 }) }) }, type2);
|
|
56
|
+
}
|
|
57
|
+
const [, type, id] = segments;
|
|
58
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(EditPostSkeleton, {}), children: /* @__PURE__ */ jsx(EntryPage, { params: Promise.resolve({ type, id }) }) }, `${type}/${id}`);
|
|
41
59
|
}
|
|
42
|
-
|
|
43
|
-
return /* @__PURE__ */ jsx(EntryPage, { params: Promise.resolve({ type, id }) });
|
|
60
|
+
return /* @__PURE__ */ jsx(DashboardContentSkeleton, {});
|
|
44
61
|
}
|
|
45
62
|
export {
|
|
46
63
|
AdminApp
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../admin/AdminApp.tsx"],"sourcesContent":["import React, { Suspense } from 'react';\n\nimport { ChatPage } from './pages/ChatPage';\nimport { CollectionPage } from './pages/CollectionPage';\nimport { ContentModelPage } from './pages/ContentModelPage';\nimport { ContentTypePage } from './pages/ContentTypePage';\nimport { DashboardPage } from './pages/DashboardPage';\nimport { EntryPage } from './pages/EntryPage';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../admin/AdminApp.tsx"],"sourcesContent":["import React, { Suspense } from 'react';\n\nimport { ChatPageSkeleton } from '../components/Chat/ChatPage.skeleton';\nimport { ContentModelListSkeleton } from '../components/ContentModel/ContentModelList.skeleton';\nimport { ContentTypeDetailSkeleton } from '../components/ContentModel/ContentTypeDetail.skeleton';\nimport { DashboardCollectionSkeleton } from '../components/Dashboard/DashboardContent.collection.skeleton';\nimport { DashboardContentSkeleton } from '../components/Dashboard/DashboardContent.skeleton';\nimport { DashboardListSkeleton } from '../components/Dashboard/DashboardContent.list.skeleton';\nimport { EditPostSkeleton } from '../components/EditPost/EditPost.skeleton';\nimport { MediaAssetSkeleton } from '../components/MediaAsset/MediaAsset.skeleton';\nimport { MediaManagerSkeleton } from '../components/MediaManager/MediaManager.skeleton';\nimport { AdminGenericSkeleton } from '../components/skeletons/AdminGenericSkeleton';\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 { DashboardPage } from './pages/DashboardPage';\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 → DashboardPage (empty home)\n * /cms/content → ContentPage (all entries)\n * /cms/content/<type> → CollectionPage\n * /cms/content/<type>/<id> → EntryPage\n * /cms/chat → ChatPage (gated on `isAgentEnabled(agentConfig)`)\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 * Streaming model: `params` is awaited inside `<AdminAppDispatcher>`, which is\n * wrapped in an outer `<Suspense>` so Next.js can start streaming the shell\n * immediately. Each dispatched branch adds its own inner `<Suspense>` with the\n * matching per-page skeleton.\n */\nexport function AdminApp({ params }: AdminAppProps) {\n return (\n <Suspense fallback={<AdminGenericSkeleton />}>\n <AdminAppDispatcher params={params} />\n </Suspense>\n );\n}\n\nasync function AdminAppDispatcher({ params }: AdminAppProps) {\n const { path } = await params;\n const segments = path ?? [];\n\n if (segments.length === 0) {\n return <DashboardPage />;\n }\n\n if (segments[0] === 'chat') {\n return (\n <Suspense fallback={<ChatPageSkeleton />}>\n <ChatPage />\n </Suspense>\n );\n }\n\n if (segments[0] === 'media') {\n if (segments.length === 1) {\n return (\n <Suspense fallback={<MediaManagerSkeleton />}>\n <MediaPage />\n </Suspense>\n );\n }\n const id = segments[1];\n return (\n <Suspense fallback={<MediaAssetSkeleton />} key={id}>\n <MediaAssetPage id={id} />\n </Suspense>\n );\n }\n\n if (segments[0] === 'model') {\n if (segments.length === 1) {\n return (\n <Suspense fallback={<ContentModelListSkeleton />}>\n <ContentModelPage />\n </Suspense>\n );\n }\n const [, type] = segments;\n return (\n <Suspense fallback={<ContentTypeDetailSkeleton />} key={type}>\n <ContentTypePage type={type} />\n </Suspense>\n );\n }\n\n if (segments[0] === 'content') {\n if (segments.length === 1) {\n return (\n <Suspense fallback={<DashboardListSkeleton />}>\n <ContentPage />\n </Suspense>\n );\n }\n if (segments.length === 2) {\n const [, type] = segments;\n return (\n <Suspense fallback={<DashboardCollectionSkeleton />} key={type}>\n <CollectionPage params={Promise.resolve({ type })} />\n </Suspense>\n );\n }\n const [, type, id] = segments;\n return (\n <Suspense fallback={<EditPostSkeleton />} key={`${type}/${id}`}>\n <EntryPage params={Promise.resolve({ type, id })} />\n </Suspense>\n );\n }\n\n return <DashboardContentSkeleton />;\n}\n"],"mappings":";AAiDwB;AAjDxB,SAAgB,gBAAgB;AAEhC,SAAS,wBAAwB;AACjC,SAAS,gCAAgC;AACzC,SAAS,iCAAiC;AAC1C,SAAS,mCAAmC;AAC5C,SAAS,gCAAgC;AACzC,SAAS,6BAA6B;AACtC,SAAS,wBAAwB;AACjC,SAAS,0BAA0B;AACnC,SAAS,4BAA4B;AACrC,SAAS,4BAA4B;AAErC,SAAS,gBAAgB;AACzB,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,uBAAuB;AAChC,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AAC1B,SAAS,sBAAsB;AAC/B,SAAS,iBAAiB;AA0BnB,SAAS,SAAS,EAAE,OAAO,GAAkB;AAClD,SACE,oBAAC,YAAS,UAAU,oBAAC,wBAAqB,GACxC,8BAAC,sBAAmB,QAAgB,GACtC;AAEJ;AAEA,eAAe,mBAAmB,EAAE,OAAO,GAAkB;AAC3D,QAAM,EAAE,KAAK,IAAI,MAAM;AACvB,QAAM,WAAW,sBAAQ,CAAC;AAE1B,MAAI,SAAS,WAAW,GAAG;AACzB,WAAO,oBAAC,iBAAc;AAAA,EACxB;AAEA,MAAI,SAAS,CAAC,MAAM,QAAQ;AAC1B,WACE,oBAAC,YAAS,UAAU,oBAAC,oBAAiB,GACpC,8BAAC,YAAS,GACZ;AAAA,EAEJ;AAEA,MAAI,SAAS,CAAC,MAAM,SAAS;AAC3B,QAAI,SAAS,WAAW,GAAG;AACzB,aACE,oBAAC,YAAS,UAAU,oBAAC,wBAAqB,GACxC,8BAAC,aAAU,GACb;AAAA,IAEJ;AACA,UAAM,KAAK,SAAS,CAAC;AACrB,WACE,oBAAC,YAAS,UAAU,oBAAC,sBAAmB,GACtC,8BAAC,kBAAe,IAAQ,KADuB,EAEjD;AAAA,EAEJ;AAEA,MAAI,SAAS,CAAC,MAAM,SAAS;AAC3B,QAAI,SAAS,WAAW,GAAG;AACzB,aACE,oBAAC,YAAS,UAAU,oBAAC,4BAAyB,GAC5C,8BAAC,oBAAiB,GACpB;AAAA,IAEJ;AACA,UAAM,CAAC,EAAE,IAAI,IAAI;AACjB,WACE,oBAAC,YAAS,UAAU,oBAAC,6BAA0B,GAC7C,8BAAC,mBAAgB,MAAY,KADyB,IAExD;AAAA,EAEJ;AAEA,MAAI,SAAS,CAAC,MAAM,WAAW;AAC7B,QAAI,SAAS,WAAW,GAAG;AACzB,aACE,oBAAC,YAAS,UAAU,oBAAC,yBAAsB,GACzC,8BAAC,eAAY,GACf;AAAA,IAEJ;AACA,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,CAAC,EAAEA,KAAI,IAAI;AACjB,aACE,oBAAC,YAAS,UAAU,oBAAC,+BAA4B,GAC/C,8BAAC,kBAAe,QAAQ,QAAQ,QAAQ,EAAE,MAAAA,MAAK,CAAC,GAAG,KADKA,KAE1D;AAAA,IAEJ;AACA,UAAM,CAAC,EAAE,MAAM,EAAE,IAAI;AACrB,WACE,oBAAC,YAAS,UAAU,oBAAC,oBAAiB,GACpC,8BAAC,aAAU,QAAQ,QAAQ,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,KADL,GAAG,IAAI,IAAI,EAAE,EAE5D;AAAA,EAEJ;AAEA,SAAO,oBAAC,4BAAyB;AACnC;","names":["type"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../admin/actions/build.ts"],"names":[],"mappings":"AAaA,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAOjE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../admin/actions/build.ts"],"names":[],"mappings":"AAaA,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAOjE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAuFF,eAAO,MAAM,UAAU,GAAU,kBAAkB,MAAM,EAAE,UAAU,iBAAiB,KAAG,OAAO,CAAC,YAAY,CAmC5G,CAAC"}
|
|
@@ -22,9 +22,12 @@ async function getEntriesForPublicSearch() {
|
|
|
22
22
|
const entries = [];
|
|
23
23
|
for (const file of files) {
|
|
24
24
|
const normalized = file.replace(/\\/g, "/");
|
|
25
|
-
if (normalized.includes("/media/")) continue;
|
|
26
25
|
try {
|
|
27
|
-
const filePath = path.join(
|
|
26
|
+
const filePath = path.join(
|
|
27
|
+
/*turbopackIgnore: true*/
|
|
28
|
+
process.cwd(),
|
|
29
|
+
normalized
|
|
30
|
+
);
|
|
28
31
|
const data = await fsPromises.readFile(filePath, { encoding: "utf8" });
|
|
29
32
|
const content = JSON.parse(data);
|
|
30
33
|
const sys = content.sys;
|
|
@@ -35,7 +38,11 @@ async function getEntriesForPublicSearch() {
|
|
|
35
38
|
const mdPaths = companionMarkdownPathsForEntry(normalized, type, config.collections);
|
|
36
39
|
for (const [fieldName, mdPath] of Object.entries(mdPaths)) {
|
|
37
40
|
try {
|
|
38
|
-
const mdFilePath = path.join(
|
|
41
|
+
const mdFilePath = path.join(
|
|
42
|
+
/*turbopackIgnore: true*/
|
|
43
|
+
process.cwd(),
|
|
44
|
+
mdPath
|
|
45
|
+
);
|
|
39
46
|
companions[fieldName] = await fsPromises.readFile(mdFilePath, { encoding: "utf8" });
|
|
40
47
|
} catch (e) {
|
|
41
48
|
companions[fieldName] = "";
|
|
@@ -44,7 +51,11 @@ async function getEntriesForPublicSearch() {
|
|
|
44
51
|
const rtPaths = companionRichTextPathsForEntry(normalized, type, config.collections);
|
|
45
52
|
for (const [fieldName, rtPath] of Object.entries(rtPaths)) {
|
|
46
53
|
try {
|
|
47
|
-
const rtFilePath = path.join(
|
|
54
|
+
const rtFilePath = path.join(
|
|
55
|
+
/*turbopackIgnore: true*/
|
|
56
|
+
process.cwd(),
|
|
57
|
+
rtPath
|
|
58
|
+
);
|
|
48
59
|
companions[fieldName] = await fsPromises.readFile(rtFilePath, { encoding: "utf8" });
|
|
49
60
|
} catch (e) {
|
|
50
61
|
companions[fieldName] = "";
|
|
@@ -74,7 +85,11 @@ async function buildAndWriteSearchIndex() {
|
|
|
74
85
|
if (isProductionMode()) {
|
|
75
86
|
await saveGitHubFile(SEARCH_INDEX_FILE_PATH, indexJson, "CMS: update search index");
|
|
76
87
|
} else {
|
|
77
|
-
const filePath = path.join(
|
|
88
|
+
const filePath = path.join(
|
|
89
|
+
/*turbopackIgnore: true*/
|
|
90
|
+
process.cwd(),
|
|
91
|
+
SEARCH_INDEX_FILE_PATH
|
|
92
|
+
);
|
|
78
93
|
await fsPromises.mkdir(path.dirname(filePath), { recursive: true });
|
|
79
94
|
await fsPromises.writeFile(filePath, indexJson, "utf8");
|
|
80
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../admin/actions/build.ts"],"sourcesContent":["'use server';\n\nimport fsPromises from 'fs/promises';\nimport path from 'path';\n\nimport { glob } from 'glob';\nimport { revalidatePath, revalidateTag, updateTag } from 'next/cache';\n\nimport { getConfig } from '../../lib/configStore';\nimport { companionMarkdownPathsForEntry, companionRichTextPathsForEntry } from '../../lib/companionMarkdown';\nimport { buildSearchIndex, type EntryForSearch } from '../../lib/searchIndex';\n\nimport { isProductionMode, saveGitHubFile } from '../github';\nimport { actionErr, actionOk, type ActionResult } from './utils';\n\n/** Cache tags used by `getHomePage` / `getBlog` / `getPublishedPosts` in `src/app/cms/ssr/getPageContent.ts`. */\nconst PUBLIC_CACHE_TAGS = ['homePage', 'blog'] as const;\n\nconst SEARCH_INDEX_FILE_PATH = 'cms/__generated__/search-index.json';\n\nexport type BuildJsonsOptions = {\n /** Slug-based `/blog/...` paths to revalidate in addition to the dynamic route segment. */\n blogPaths?: string[];\n};\n\n/** Helper: gather all searchable entries from the filesystem. */\nasync function getEntriesForPublicSearch(): Promise<EntryForSearch[]> {\n const config = getConfig();\n const publicCollections = config.search?.publicCollections;\n if (!publicCollections || Object.keys(publicCollections).length === 0) {\n return [];\n }\n\n const files = await glob(`${config.contentFolder}/**/*.json`);\n const entries: EntryForSearch[] = [];\n\n for (const file of files) {\n const normalized = file.replace(/\\\\/g, '/');\n
|
|
1
|
+
{"version":3,"sources":["../../../admin/actions/build.ts"],"sourcesContent":["'use server';\n\nimport fsPromises from 'fs/promises';\nimport path from 'path';\n\nimport { glob } from 'glob';\nimport { revalidatePath, revalidateTag, updateTag } from 'next/cache';\n\nimport { getConfig } from '../../lib/configStore';\nimport { companionMarkdownPathsForEntry, companionRichTextPathsForEntry } from '../../lib/companionMarkdown';\nimport { buildSearchIndex, type EntryForSearch } from '../../lib/searchIndex';\n\nimport { isProductionMode, saveGitHubFile } from '../github';\nimport { actionErr, actionOk, type ActionResult } from './utils';\n\n/** Cache tags used by `getHomePage` / `getBlog` / `getPublishedPosts` in `src/app/cms/ssr/getPageContent.ts`. */\nconst PUBLIC_CACHE_TAGS = ['homePage', 'blog'] as const;\n\nconst SEARCH_INDEX_FILE_PATH = 'cms/__generated__/search-index.json';\n\nexport type BuildJsonsOptions = {\n /** Slug-based `/blog/...` paths to revalidate in addition to the dynamic route segment. */\n blogPaths?: string[];\n};\n\n/** Helper: gather all searchable entries from the filesystem. */\nasync function getEntriesForPublicSearch(): Promise<EntryForSearch[]> {\n const config = getConfig();\n const publicCollections = config.search?.publicCollections;\n if (!publicCollections || Object.keys(publicCollections).length === 0) {\n return [];\n }\n\n const files = await glob(`${config.contentFolder}/**/*.json`);\n const entries: EntryForSearch[] = [];\n\n for (const file of files) {\n const normalized = file.replace(/\\\\/g, '/');\n try {\n const filePath = path.join(/*turbopackIgnore: true*/ process.cwd(), normalized);\n const data = await fsPromises.readFile(filePath, { encoding: 'utf8' });\n const content = JSON.parse(data) as Record<string, unknown>;\n const sys = content.sys as { type?: string } | undefined;\n const type = sys?.type;\n\n // Only include entries from publicCollections\n if (!type || !(type in publicCollections)) continue;\n\n // Read companion markdown/richtext files\n const companions: Record<string, string> = {};\n if (type) {\n const mdPaths = companionMarkdownPathsForEntry(normalized, type, config.collections);\n for (const [fieldName, mdPath] of Object.entries(mdPaths)) {\n try {\n const mdFilePath = path.join(/*turbopackIgnore: true*/ process.cwd(), mdPath);\n companions[fieldName] = await fsPromises.readFile(mdFilePath, { encoding: 'utf8' });\n } catch {\n companions[fieldName] = '';\n }\n }\n const rtPaths = companionRichTextPathsForEntry(normalized, type, config.collections);\n for (const [fieldName, rtPath] of Object.entries(rtPaths)) {\n try {\n const rtFilePath = path.join(/*turbopackIgnore: true*/ process.cwd(), rtPath);\n companions[fieldName] = await fsPromises.readFile(rtFilePath, { encoding: 'utf8' });\n } catch {\n companions[fieldName] = '';\n }\n }\n }\n\n entries.push({\n path: normalized.replace(`${config.contentFolder}/`, ''),\n content,\n companionContent: companions,\n });\n } catch {\n // Skip unreadable files\n }\n }\n\n return entries;\n}\n\n/** Build and write the public search index. */\nasync function buildAndWriteSearchIndex(): Promise<void> {\n const config = getConfig();\n const publicCollections = config.search?.publicCollections;\n if (!publicCollections || Object.keys(publicCollections).length === 0) {\n return;\n }\n\n try {\n const entries = await getEntriesForPublicSearch();\n const indexJson = buildSearchIndex(entries, config, Object.keys(publicCollections));\n\n if (isProductionMode()) {\n // Write to GitHub\n await saveGitHubFile(SEARCH_INDEX_FILE_PATH, indexJson, 'CMS: update search index');\n } else {\n // Write to local filesystem\n const filePath = path.join(/*turbopackIgnore: true*/ process.cwd(), SEARCH_INDEX_FILE_PATH);\n await fsPromises.mkdir(path.dirname(filePath), { recursive: true });\n await fsPromises.writeFile(filePath, indexJson, 'utf8');\n }\n } catch {\n // Silently fail search index generation to not block the build\n }\n}\n\nexport const buildJsons = async (_editedFileName?: string, options?: BuildJsonsOptions): Promise<ActionResult> => {\n try {\n for (const tag of PUBLIC_CACHE_TAGS) {\n // `updateTag` gives read-your-own-writes inside a Server Action (the\n // editor save path). When called from a Route Handler — e.g. the\n // proposal accept endpoint at `/api/agent/proposals/accept` — the\n // runtime throws (\"updateTag can only be called from within a Server\n // Action\"); fall back to `revalidateTag` with immediate expiry, which\n // is allowed everywhere and produces the same fresh-data outcome.\n try {\n updateTag(tag);\n } catch {\n revalidateTag(tag, { expire: 0 });\n }\n }\n\n revalidatePath('/', 'layout');\n revalidatePath('/blog', 'page');\n revalidatePath('/blog/[slug]', 'page');\n\n const seen = new Set<string>();\n for (const p of options?.blogPaths ?? []) {\n if (typeof p === 'string' && p.startsWith('/blog/') && !seen.has(p)) {\n seen.add(p);\n revalidatePath(p);\n }\n }\n\n // Build and write the public search index\n await buildAndWriteSearchIndex();\n\n return actionOk();\n } catch (e) {\n return actionErr(e);\n }\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../admin/actions/diff.ts"],"names":[],"mappings":"AAOA,OAAO,EAAmC,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../admin/actions/diff.ts"],"names":[],"mappings":"AAOA,OAAO,EAAmC,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAQtF,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClC,wFAAwF;IACxF,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC5E,gGAAgG;IAChG,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,CAAC;AA8CF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,SAAS,CA0GtE,CAAC"}
|
|
@@ -6,6 +6,7 @@ import { getConfig } from "../../lib/configStore";
|
|
|
6
6
|
import { companionFilePathsForEntry } from "../../lib/companionMarkdown";
|
|
7
7
|
import { diffEntryFields, safeParseEntry } from "../../lib/entryDiff";
|
|
8
8
|
import { logCmsServerError } from "../../lib/cmsServerLog";
|
|
9
|
+
import { mediaContentFolder, mediaEntryPath } from "../../lib/mediaPath";
|
|
9
10
|
import { parseFileName } from "../../utils/parseFileName";
|
|
10
11
|
import { getGitHubFile, isProductionMode } from "../github";
|
|
11
12
|
import { getBranch } from "./git";
|
|
@@ -94,12 +95,12 @@ const getEntryDiff = async (filePath) => {
|
|
|
94
95
|
}
|
|
95
96
|
const imageUrls = {};
|
|
96
97
|
if (imageUuids.size > 0) {
|
|
97
|
-
const mediaDir =
|
|
98
|
+
const mediaDir = mediaContentFolder();
|
|
98
99
|
const resolvePairs = await Promise.all(
|
|
99
100
|
Array.from(imageUuids).map(async (uuid) => {
|
|
100
101
|
var _a, _b, _c;
|
|
101
102
|
if (!uuid || uuid.startsWith("/")) return [uuid, uuid];
|
|
102
|
-
let raw = (_a = await readFileAtRef(
|
|
103
|
+
let raw = (_a = await readFileAtRef(mediaEntryPath(uuid), activeBranch, isProd)) != null ? _a : await readFileAtRef(mediaEntryPath(uuid), baseBranch, isProd);
|
|
103
104
|
if (!raw) {
|
|
104
105
|
raw = (_b = await readFileAtRef(`${mediaDir}/${uuid}.json`, activeBranch, isProd)) != null ? _b : await readFileAtRef(`${mediaDir}/${uuid}.json`, baseBranch, isProd);
|
|
105
106
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../admin/actions/diff.ts"],"sourcesContent":["'use server';\n\nimport { execFile } from 'node:child_process';\nimport fsPromises from 'node:fs/promises';\n\nimport { getConfig } from '../../lib/configStore';\nimport { companionFilePathsForEntry } from '../../lib/companionMarkdown';\nimport { diffEntryFields, safeParseEntry, type FieldDiff } from '../../lib/entryDiff';\nimport { logCmsServerError } from '../../lib/cmsServerLog';\nimport { parseFileName } from '../../utils/parseFileName';\nimport { getGitHubFile, isProductionMode } from '../github';\nimport { getBranch } from './git';\nimport { getErrorMessage } from './utils';\n\nexport type EntryDiff = {\n changed: boolean;\n activeBranch: string;\n baseBranch: string;\n /** Per-field diffs derived from the entry JSON `fields` object. */\n fields: Record<string, FieldDiff>;\n /** Raw before/after text for companion markdown/richtext files, keyed by field name. */\n companions: Record<string, { before: string | null; after: string | null }>;\n /** Resolved `/media/<uuid>.<ext>` URLs for image UUIDs appearing on either side of the diff. */\n imageUrls: Record<string, string>;\n};\n\nconst emptyDiff = (activeBranch = '', baseBranch = ''): EntryDiff => ({\n changed: false,\n activeBranch,\n baseBranch,\n fields: {},\n companions: {},\n imageUrls: {},\n});\n\n/**\n * Read a file at a specific git ref. Returns `null` if the file doesn't exist on that ref.\n * - Production: GitHub API via {@link getGitHubFile}.\n * - Dev: `git show <ref>:<path>` for committed content, or the working-tree file when the ref\n * matches the currently checked-out branch.\n */\nasync function readFileAtRef(filePath: string, ref: string, isProd: boolean): Promise<string | null> {\n if (isProd) {\n const result = await getGitHubFile(filePath, ref);\n return result ? result.content : null;\n }\n return await readFileAtGitRef(filePath, ref);\n}\n\nfunction readFileAtGitRef(filePath: string, ref: string): Promise<string | null> {\n return new Promise((resolve) => {\n execFile('git', ['show', `${ref}:${filePath}`], { maxBuffer: 10 * 1024 * 1024 }, (error, stdout) => {\n if (error) {\n // `git show` exits non-zero if the path doesn't exist on that ref.\n resolve(null);\n return;\n }\n resolve(stdout.toString());\n });\n });\n}\n\nasync function readWorkingTreeFile(filePath: string): Promise<string | null> {\n try {\n return await fsPromises.readFile(filePath, 'utf-8');\n } catch {\n return null;\n }\n}\n\n/**\n * Compute the diff between the currently active feature branch and the base branch for a\n * single entry's files (JSON + companion `.md` / `.mdx`). Read-only, best-effort: any failure\n * resolves to an empty diff so the UI never throws.\n */\nexport const getEntryDiff = async (filePath: string): Promise<EntryDiff> => {\n if (!filePath) return emptyDiff();\n\n try {\n const config = getConfig();\n const baseBranch = config.git.baseBranch;\n const activeBranch = await getBranch();\n const isProd = isProductionMode();\n\n // Same branch on both sides → no unmerged changes.\n if (!activeBranch || activeBranch === baseBranch) {\n return emptyDiff(activeBranch, baseBranch);\n }\n\n const { type: collectionType } = parseFileName(filePath);\n\n // --- Entry JSON ---------------------------------------------------------\n const [afterJson, beforeJson] = await Promise.all([\n isProd ? readFileAtRef(filePath, activeBranch, true) : readWorkingTreeFile(filePath),\n readFileAtRef(filePath, baseBranch, isProd),\n ]);\n\n const fields = diffEntryFields(safeParseEntry(beforeJson), safeParseEntry(afterJson));\n\n // --- Companion files ----------------------------------------------------\n const companionPaths = companionFilePathsForEntry(filePath, collectionType, config.collections);\n const companionEntries = Object.entries(companionPaths);\n\n const companionResults = await Promise.all(\n companionEntries.map(async ([fieldName, compPath]) => {\n const [after, before] = await Promise.all([\n isProd ? readFileAtRef(compPath, activeBranch, true) : readWorkingTreeFile(compPath),\n readFileAtRef(compPath, baseBranch, isProd),\n ]);\n return [fieldName, { before, after }] as const;\n }),\n );\n\n const companions: EntryDiff['companions'] = {};\n for (const [fieldName, payload] of companionResults) {\n companions[fieldName] = payload;\n }\n\n const hasFieldChange = Object.values(fields).some((d) => d.kind !== 'unchanged');\n const hasCompanionChange = Object.values(companions).some((c) => (c.before ?? '') !== (c.after ?? ''));\n\n // Resolve image UUIDs that changed on either side to `/media/<uuid>.<ext>` URLs.\n const collectionDef = (config.collections as Record<string, { fields: Record<string, { format?: string }> }>)[\n collectionType\n ];\n const imageFieldNames = collectionDef\n ? Object.entries(collectionDef.fields)\n .filter(([, f]) => f.format === 'image')\n .map(([name]) => name)\n : [];\n\n const imageUuids = new Set<string>();\n for (const name of imageFieldNames) {\n const d = fields[name];\n if (!d) continue;\n if (d.kind === 'added' && typeof d.after === 'string') imageUuids.add(d.after);\n else if (d.kind === 'removed' && typeof d.before === 'string') imageUuids.add(d.before);\n else if (d.kind === 'changed') {\n if (typeof d.before === 'string') imageUuids.add(d.before);\n if (typeof d.after === 'string') imageUuids.add(d.after);\n }\n }\n\n const imageUrls: Record<string, string> = {};\n if (imageUuids.size > 0) {\n const mediaDir = `${config.contentFolder}/media`;\n const resolvePairs = await Promise.all(\n Array.from(imageUuids).map(async (uuid) => {\n if (!uuid || uuid.startsWith('/')) return [uuid, uuid] as const;\n // Prefer the active-branch media entry; fall back to base branch.\n let raw =\n (await readFileAtRef(`${mediaDir}/media-${uuid}.json`, activeBranch, isProd)) ??\n (await readFileAtRef(`${mediaDir}/media-${uuid}.json`, baseBranch, isProd));\n if (!raw) {\n // Legacy path: {uuid}.json\n raw =\n (await readFileAtRef(`${mediaDir}/${uuid}.json`, activeBranch, isProd)) ??\n (await readFileAtRef(`${mediaDir}/${uuid}.json`, baseBranch, isProd));\n }\n const parsed = safeParseEntry(raw);\n const ext = parsed && typeof parsed.fields?.extension === 'string' ? (parsed.fields.extension as string) : '';\n return [uuid, ext ? `/media/${uuid}.${ext}` : ''] as const;\n }),\n );\n for (const [uuid, url] of resolvePairs) {\n if (url) imageUrls[uuid] = url;\n }\n }\n\n return {\n changed: hasFieldChange || hasCompanionChange,\n activeBranch,\n baseBranch,\n fields,\n companions,\n imageUrls,\n };\n } catch (e) {\n logCmsServerError({ operation: 'getEntryDiff', message: getErrorMessage(e) });\n return emptyDiff();\n }\n};\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../admin/actions/diff.ts"],"sourcesContent":["'use server';\n\nimport { execFile } from 'node:child_process';\nimport fsPromises from 'node:fs/promises';\n\nimport { getConfig } from '../../lib/configStore';\nimport { companionFilePathsForEntry } from '../../lib/companionMarkdown';\nimport { diffEntryFields, safeParseEntry, type FieldDiff } from '../../lib/entryDiff';\nimport { logCmsServerError } from '../../lib/cmsServerLog';\nimport { mediaContentFolder, mediaEntryPath } from '../../lib/mediaPath';\nimport { parseFileName } from '../../utils/parseFileName';\nimport { getGitHubFile, isProductionMode } from '../github';\nimport { getBranch } from './git';\nimport { getErrorMessage } from './utils';\n\nexport type EntryDiff = {\n changed: boolean;\n activeBranch: string;\n baseBranch: string;\n /** Per-field diffs derived from the entry JSON `fields` object. */\n fields: Record<string, FieldDiff>;\n /** Raw before/after text for companion markdown/richtext files, keyed by field name. */\n companions: Record<string, { before: string | null; after: string | null }>;\n /** Resolved `/media/<uuid>.<ext>` URLs for image UUIDs appearing on either side of the diff. */\n imageUrls: Record<string, string>;\n};\n\nconst emptyDiff = (activeBranch = '', baseBranch = ''): EntryDiff => ({\n changed: false,\n activeBranch,\n baseBranch,\n fields: {},\n companions: {},\n imageUrls: {},\n});\n\n/**\n * Read a file at a specific git ref. Returns `null` if the file doesn't exist on that ref.\n * - Production: GitHub API via {@link getGitHubFile}.\n * - Dev: `git show <ref>:<path>` for committed content, or the working-tree file when the ref\n * matches the currently checked-out branch.\n */\nasync function readFileAtRef(filePath: string, ref: string, isProd: boolean): Promise<string | null> {\n if (isProd) {\n const result = await getGitHubFile(filePath, ref);\n return result ? result.content : null;\n }\n return await readFileAtGitRef(filePath, ref);\n}\n\nfunction readFileAtGitRef(filePath: string, ref: string): Promise<string | null> {\n return new Promise((resolve) => {\n execFile('git', ['show', `${ref}:${filePath}`], { maxBuffer: 10 * 1024 * 1024 }, (error, stdout) => {\n if (error) {\n // `git show` exits non-zero if the path doesn't exist on that ref.\n resolve(null);\n return;\n }\n resolve(stdout.toString());\n });\n });\n}\n\nasync function readWorkingTreeFile(filePath: string): Promise<string | null> {\n try {\n return await fsPromises.readFile(filePath, 'utf-8');\n } catch {\n return null;\n }\n}\n\n/**\n * Compute the diff between the currently active feature branch and the base branch for a\n * single entry's files (JSON + companion `.md` / `.mdx`). Read-only, best-effort: any failure\n * resolves to an empty diff so the UI never throws.\n */\nexport const getEntryDiff = async (filePath: string): Promise<EntryDiff> => {\n if (!filePath) return emptyDiff();\n\n try {\n const config = getConfig();\n const baseBranch = config.git.baseBranch;\n const activeBranch = await getBranch();\n const isProd = isProductionMode();\n\n // Same branch on both sides → no unmerged changes.\n if (!activeBranch || activeBranch === baseBranch) {\n return emptyDiff(activeBranch, baseBranch);\n }\n\n const { type: collectionType } = parseFileName(filePath);\n\n // --- Entry JSON ---------------------------------------------------------\n const [afterJson, beforeJson] = await Promise.all([\n isProd ? readFileAtRef(filePath, activeBranch, true) : readWorkingTreeFile(filePath),\n readFileAtRef(filePath, baseBranch, isProd),\n ]);\n\n const fields = diffEntryFields(safeParseEntry(beforeJson), safeParseEntry(afterJson));\n\n // --- Companion files ----------------------------------------------------\n const companionPaths = companionFilePathsForEntry(filePath, collectionType, config.collections);\n const companionEntries = Object.entries(companionPaths);\n\n const companionResults = await Promise.all(\n companionEntries.map(async ([fieldName, compPath]) => {\n const [after, before] = await Promise.all([\n isProd ? readFileAtRef(compPath, activeBranch, true) : readWorkingTreeFile(compPath),\n readFileAtRef(compPath, baseBranch, isProd),\n ]);\n return [fieldName, { before, after }] as const;\n }),\n );\n\n const companions: EntryDiff['companions'] = {};\n for (const [fieldName, payload] of companionResults) {\n companions[fieldName] = payload;\n }\n\n const hasFieldChange = Object.values(fields).some((d) => d.kind !== 'unchanged');\n const hasCompanionChange = Object.values(companions).some((c) => (c.before ?? '') !== (c.after ?? ''));\n\n // Resolve image UUIDs that changed on either side to `/media/<uuid>.<ext>` URLs.\n const collectionDef = (config.collections as Record<string, { fields: Record<string, { format?: string }> }>)[\n collectionType\n ];\n const imageFieldNames = collectionDef\n ? Object.entries(collectionDef.fields)\n .filter(([, f]) => f.format === 'image')\n .map(([name]) => name)\n : [];\n\n const imageUuids = new Set<string>();\n for (const name of imageFieldNames) {\n const d = fields[name];\n if (!d) continue;\n if (d.kind === 'added' && typeof d.after === 'string') imageUuids.add(d.after);\n else if (d.kind === 'removed' && typeof d.before === 'string') imageUuids.add(d.before);\n else if (d.kind === 'changed') {\n if (typeof d.before === 'string') imageUuids.add(d.before);\n if (typeof d.after === 'string') imageUuids.add(d.after);\n }\n }\n\n const imageUrls: Record<string, string> = {};\n if (imageUuids.size > 0) {\n const mediaDir = mediaContentFolder();\n const resolvePairs = await Promise.all(\n Array.from(imageUuids).map(async (uuid) => {\n if (!uuid || uuid.startsWith('/')) return [uuid, uuid] as const;\n // Prefer the active-branch media entry; fall back to base branch.\n let raw =\n (await readFileAtRef(mediaEntryPath(uuid), activeBranch, isProd)) ??\n (await readFileAtRef(mediaEntryPath(uuid), baseBranch, isProd));\n if (!raw) {\n // Legacy path: {uuid}.json (pre-`media-` prefix)\n raw =\n (await readFileAtRef(`${mediaDir}/${uuid}.json`, activeBranch, isProd)) ??\n (await readFileAtRef(`${mediaDir}/${uuid}.json`, baseBranch, isProd));\n }\n const parsed = safeParseEntry(raw);\n const ext = parsed && typeof parsed.fields?.extension === 'string' ? (parsed.fields.extension as string) : '';\n return [uuid, ext ? `/media/${uuid}.${ext}` : ''] as const;\n }),\n );\n for (const [uuid, url] of resolvePairs) {\n if (url) imageUrls[uuid] = url;\n }\n }\n\n return {\n changed: hasFieldChange || hasCompanionChange,\n activeBranch,\n baseBranch,\n fields,\n companions,\n imageUrls,\n };\n } catch (e) {\n logCmsServerError({ operation: 'getEntryDiff', message: getErrorMessage(e) });\n return emptyDiff();\n }\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../../admin/actions/entries.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../../admin/actions/entries.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AAO9D,eAAO,MAAM,YAAY,GAAU,aAAY,MAAa,KAAG,OAAO,CAAC,aAAa,EAAE,CAyErF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,oBAAoB,MAAM,KAAG,OAAO,CAAC,aAAa,EAAE,CA6D3F,CAAC"}
|
|
@@ -5,35 +5,54 @@ import path from "path";
|
|
|
5
5
|
import { getConfig } from "../../lib/configStore";
|
|
6
6
|
import { getContentFiles, getFile } from "./files";
|
|
7
7
|
import { isProductionMode } from "../github";
|
|
8
|
+
import { getMediaEntries } from "./media";
|
|
8
9
|
import { getEntryTitleField } from "./utils";
|
|
9
10
|
const getEntryList = async (collection = "**") => {
|
|
10
11
|
var _a, _b, _c;
|
|
11
12
|
const config = getConfig();
|
|
12
13
|
const files = await getContentFiles(collection);
|
|
13
14
|
const entries = [];
|
|
15
|
+
const mediaList = await getMediaEntries().catch(() => []);
|
|
16
|
+
const mediaById = /* @__PURE__ */ new Map();
|
|
17
|
+
for (const m of mediaList) {
|
|
18
|
+
mediaById.set(m.id, { ext: m.extension, publicUrl: m.publicUrl });
|
|
19
|
+
}
|
|
20
|
+
const imageFieldKeyByType = /* @__PURE__ */ new Map();
|
|
21
|
+
function firstImageFieldKey(type) {
|
|
22
|
+
var _a2, _b2;
|
|
23
|
+
if (imageFieldKeyByType.has(type)) return (_a2 = imageFieldKeyByType.get(type)) != null ? _a2 : null;
|
|
24
|
+
const collection2 = config.collections[type];
|
|
25
|
+
if (!collection2) {
|
|
26
|
+
imageFieldKeyByType.set(type, null);
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const key = (_b2 = Object.keys(collection2.fields).find((k) => collection2.fields[k].format === "image")) != null ? _b2 : null;
|
|
30
|
+
imageFieldKeyByType.set(type, key);
|
|
31
|
+
return key;
|
|
32
|
+
}
|
|
14
33
|
for (const file of files) {
|
|
15
34
|
const nameWithoutFolder = file.replace(`${config.contentFolder}/`, "").replace(".json", "");
|
|
16
35
|
const parts = nameWithoutFolder.split("/");
|
|
17
36
|
const type = parts[0];
|
|
18
|
-
|
|
37
|
+
const id = parts[parts.length - 1];
|
|
19
38
|
const titleField = getEntryTitleField(type);
|
|
20
39
|
let title = id;
|
|
21
40
|
let status = "merged";
|
|
22
41
|
let updatedAt;
|
|
42
|
+
let thumbnailUrl;
|
|
23
43
|
try {
|
|
24
44
|
const content = await getFile(file);
|
|
25
|
-
if (
|
|
26
|
-
const sysId = (content == null ? void 0 : content.sys) && typeof content.sys === "object" && "id" in content.sys ? content.sys.id : null;
|
|
27
|
-
if (typeof sysId === "string" && sysId !== "") {
|
|
28
|
-
id = sysId;
|
|
29
|
-
}
|
|
30
|
-
const mediaTitle = (_a = content == null ? void 0 : content.fields) == null ? void 0 : _a.title;
|
|
31
|
-
if (typeof mediaTitle === "string" && mediaTitle.trim() !== "") {
|
|
32
|
-
title = mediaTitle.trim();
|
|
33
|
-
}
|
|
34
|
-
} else if (titleField && ((_b = content == null ? void 0 : content.fields) == null ? void 0 : _b[titleField])) {
|
|
45
|
+
if (titleField && ((_a = content == null ? void 0 : content.fields) == null ? void 0 : _a[titleField])) {
|
|
35
46
|
title = content.fields[titleField];
|
|
36
47
|
}
|
|
48
|
+
const imgKey = firstImageFieldKey(type);
|
|
49
|
+
if (imgKey) {
|
|
50
|
+
const value = (_b = content == null ? void 0 : content.fields) == null ? void 0 : _b[imgKey];
|
|
51
|
+
if (typeof value === "string" && value.trim()) {
|
|
52
|
+
const hit = mediaById.get(value.trim());
|
|
53
|
+
if (hit) thumbnailUrl = hit.publicUrl;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
37
56
|
if ((_c = content == null ? void 0 : content.sys) == null ? void 0 : _c.status) {
|
|
38
57
|
status = content.sys.status;
|
|
39
58
|
}
|
|
@@ -41,12 +60,16 @@ const getEntryList = async (collection = "**") => {
|
|
|
41
60
|
}
|
|
42
61
|
if (!isProductionMode()) {
|
|
43
62
|
try {
|
|
44
|
-
const stat = await fsPromises.stat(path.join(
|
|
63
|
+
const stat = await fsPromises.stat(path.join(
|
|
64
|
+
/*turbopackIgnore: true*/
|
|
65
|
+
process.cwd(),
|
|
66
|
+
file
|
|
67
|
+
));
|
|
45
68
|
updatedAt = stat.mtime.toISOString();
|
|
46
69
|
} catch (e) {
|
|
47
70
|
}
|
|
48
71
|
}
|
|
49
|
-
entries.push({ type, id, path: file, title, status, updatedAt });
|
|
72
|
+
entries.push({ type, id, path: file, title, status, updatedAt, thumbnailUrl });
|
|
50
73
|
}
|
|
51
74
|
entries.sort((a, b) => a.title.localeCompare(b.title));
|
|
52
75
|
return entries;
|
|
@@ -57,7 +80,6 @@ const getEntryBacklinks = async (targetReferenceKey) => {
|
|
|
57
80
|
const allFiles = await getContentFiles("**");
|
|
58
81
|
const backlinks = [];
|
|
59
82
|
for (const file of allFiles) {
|
|
60
|
-
if (file.includes("/media/")) continue;
|
|
61
83
|
try {
|
|
62
84
|
const content = await getFile(file);
|
|
63
85
|
const type = (_a = content == null ? void 0 : content.sys) == null ? void 0 : _a.type;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../admin/actions/entries.ts"],"sourcesContent":["'use server';\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 { getEntryTitleField } from './utils';\n\nexport const getEntryList = async (collection: string = '**'): Promise<EntryListItem[]> => {\n const config = getConfig();\n const files = await getContentFiles(collection);\n const entries: EntryListItem[] = [];\n\n for (const file of files) {\n const nameWithoutFolder = file.replace(`${config.contentFolder}/`, '').replace('.json', '');\n const parts = nameWithoutFolder.split('/');\n const type = parts[0];\n
|
|
1
|
+
{"version":3,"sources":["../../../admin/actions/entries.ts"],"sourcesContent":["'use server';\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 const entries: EntryListItem[] = [];\n\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 for (const file of files) {\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 try {\n const content = await getFile(file);\n\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 } catch (_e) {\n // Fall back to id as title\n }\n\n if (!isProductionMode()) {\n try {\n const stat = await fsPromises.stat(path.join(/*turbopackIgnore: true*/ process.cwd(), file));\n updatedAt = stat.mtime.toISOString();\n } catch {\n // ignore\n }\n }\n\n entries.push({ type, id, path: file, title, status, updatedAt, thumbnailUrl });\n }\n\n entries.sort((a, b) => a.title.localeCompare(b.title));\n return entries;\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":";;AAEA,OAAO,gBAAgB;AACvB,OAAO,UAAU;AAEjB,SAAS,iBAAiB;AAI1B,SAAS,iBAAiB,eAAe;AACzC,SAAS,wBAAwB;AACjC,SAAS,uBAAuB;AAChC,SAAS,0BAA0B;AAE5B,MAAM,eAAe,OAAO,aAAqB,SAAmC;AAd3F;AAeE,QAAM,SAAS,UAAU;AACzB,QAAM,QAAQ,MAAM,gBAAgB,UAAU;AAC9C,QAAM,UAA2B,CAAC;AAIlC,QAAM,YAAY,MAAM,gBAAgB,EAAE,MAAM,MAAM,CAAC,CAAC;AACxD,QAAM,YAAY,oBAAI,IAAgD;AACtE,aAAW,KAAK,WAAW;AACzB,cAAU,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,WAAW,EAAE,UAAU,CAAC;AAAA,EAClE;AAEA,QAAM,sBAAsB,oBAAI,IAA2B;AAC3D,WAAS,mBAAmB,MAA6B;AA5B3D,QAAAA,KAAAC;AA6BI,QAAI,oBAAoB,IAAI,IAAI,EAAG,SAAOD,MAAA,oBAAoB,IAAI,IAAI,MAA5B,OAAAA,MAAiC;AAC3E,UAAME,cAAc,OAAkB,YAAY,IAAmC;AACrF,QAAI,CAACA,aAAY;AACf,0BAAoB,IAAI,MAAM,IAAI;AAClC,aAAO;AAAA,IACT;AACA,UAAM,OAAMD,MAAA,OAAO,KAAKC,YAAW,MAAM,EAAE,KAAK,CAAC,MAAMA,YAAW,OAAO,CAAC,EAAE,WAAW,OAAO,MAAlF,OAAAD,MAAuF;AACnG,wBAAoB,IAAI,MAAM,GAAG;AACjC,WAAO;AAAA,EACT;AAEA,aAAW,QAAQ,OAAO;AACxB,UAAM,oBAAoB,KAAK,QAAQ,GAAG,OAAO,aAAa,KAAK,EAAE,EAAE,QAAQ,SAAS,EAAE;AAC1F,UAAM,QAAQ,kBAAkB,MAAM,GAAG;AACzC,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,KAAK,MAAM,MAAM,SAAS,CAAC;AACjC,UAAM,aAAa,mBAAmB,IAAI;AAE1C,QAAI,QAAQ;AACZ,QAAI,SAAsB;AAC1B,QAAI;AACJ,QAAI;AAEJ,QAAI;AACF,YAAM,UAAU,MAAM,QAAQ,IAAI;AAElC,UAAI,gBAAc,wCAAS,WAAT,mBAAkB,cAAa;AAC/C,gBAAQ,QAAQ,OAAO,UAAU;AAAA,MACnC;AACA,YAAM,SAAS,mBAAmB,IAAI;AACtC,UAAI,QAAQ;AACV,cAAM,SAAQ,wCAAS,WAAT,mBAAkB;AAChC,YAAI,OAAO,UAAU,YAAY,MAAM,KAAK,GAAG;AAC7C,gBAAM,MAAM,UAAU,IAAI,MAAM,KAAK,CAAC;AACtC,cAAI,IAAK,gBAAe,IAAI;AAAA,QAC9B;AAAA,MACF;AACA,WAAI,wCAAS,QAAT,mBAAc,QAAQ;AACxB,iBAAS,QAAQ,IAAI;AAAA,MACvB;AAAA,IACF,SAAS,IAAI;AAAA,IAEb;AAEA,QAAI,CAAC,iBAAiB,GAAG;AACvB,UAAI;AACF,cAAM,OAAO,MAAM,WAAW,KAAK,KAAK;AAAA;AAAA,UAA+B,QAAQ,IAAI;AAAA,UAAG;AAAA,QAAI,CAAC;AAC3F,oBAAY,KAAK,MAAM,YAAY;AAAA,MACrC,SAAQ;AAAA,MAER;AAAA,IACF;AAEA,YAAQ,KAAK,EAAE,MAAM,IAAI,MAAM,MAAM,OAAO,QAAQ,WAAW,aAAa,CAAC;AAAA,EAC/E;AAEA,UAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,cAAc,EAAE,KAAK,CAAC;AACrD,SAAO;AACT;AAMO,MAAM,oBAAoB,OAAO,uBAAyD;AA7FjG;AA8FE,QAAM,SAAS,UAAU;AACzB,QAAM,WAAW,MAAM,gBAAgB,IAAI;AAC3C,QAAM,YAA6B,CAAC;AAEpC,aAAW,QAAQ,UAAU;AAC3B,QAAI;AACF,YAAM,UAAU,MAAM,QAAQ,IAAI;AAClC,YAAM,QAAO,wCAAS,QAAT,mBAAc;AAC3B,UAAI,CAAC,KAAM;AAEX,YAAM,aAAa,OAAO,YAAY,IAAmC;AACzE,UAAI,CAAC,WAAY;AAEjB,YAAM,qBAAqB,OAAO,KAAK,WAAW,MAAM,EAAE;AAAA,QACxD,CAAC,MAAM,WAAW,OAAO,CAAC,EAAE,WAAW;AAAA,MACzC;AACA,UAAI,mBAAmB,WAAW,EAAG;AAErC,UAAI,QAAQ;AACZ,iBAAW,YAAY,oBAAoB;AACzC,cAAM,cAAa,wCAAS,WAAT,mBAAkB;AACrC,YAAI,CAAC,WAAY;AAGjB,YAAI,OAAiB,CAAC;AACtB,YAAI,OAAO,eAAe,UAAU;AAClC,cAAI;AACF,kBAAM,SAAS,KAAK,MAAM,UAAU;AACpC,mBAAO,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,UAAU;AAAA,UACrD,SAAQ;AACN,mBAAO,CAAC,UAAU;AAAA,UACpB;AAAA,QACF,WAAW,MAAM,QAAQ,UAAU,GAAG;AACpC,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,SAAS,kBAAkB,GAAG;AACrC,kBAAQ;AACR;AAAA,QACF;AAAA,MACF;AAEA,UAAI,OAAO;AACT,cAAM,oBAAoB,KAAK,QAAQ,GAAG,OAAO,aAAa,KAAK,EAAE,EAAE,QAAQ,SAAS,EAAE;AAC1F,cAAM,QAAQ,kBAAkB,MAAM,GAAG;AACzC,cAAM,KAAK,MAAM,MAAM,SAAS,CAAC;AACjC,cAAM,aAAa,mBAAmB,IAAI;AAC1C,YAAI,QAAQ;AACZ,YAAI,gBAAc,wCAAS,WAAT,mBAAkB,cAAa;AAC/C,kBAAQ,QAAQ,OAAO,UAAU;AAAA,QACnC;AACA,cAAM,WAAsB,wCAAS,QAAT,mBAAc,WAAU;AACpD,kBAAU,KAAK,EAAE,MAAM,IAAI,MAAM,MAAM,OAAO,OAAO,CAAC;AAAA,MACxD;AAAA,IACF,SAAS,IAAI;AAAA,IAEb;AAAA,EACF;AAEA,SAAO;AACT;","names":["_a","_b","collection"]}
|
|
@@ -6,6 +6,14 @@ export type { SaveFileResult } from './utils';
|
|
|
6
6
|
export declare const assertFeatureBranchForWritesIfRequired: () => Promise<void>;
|
|
7
7
|
export declare const waitForPublicReadConsistency: (fileName: string, expectedContent: string, readRef?: string) => Promise<void>;
|
|
8
8
|
export declare const getContentFiles: (collection?: string) => Promise<string[]>;
|
|
9
|
+
/**
|
|
10
|
+
* List media-entry JSON files (e.g. `cms/media/media-<uuid>.json`).
|
|
11
|
+
*
|
|
12
|
+
* Distinct from `getContentFiles`, which lists editorial content under
|
|
13
|
+
* `config.contentFolder`, and from `getMediaFiles`, which lists physical image
|
|
14
|
+
* binaries under `config.mediaFolder`. This is the JSON-entry layer.
|
|
15
|
+
*/
|
|
16
|
+
export declare const getMediaContentFiles: () => Promise<string[]>;
|
|
9
17
|
export declare const getMediaFiles: (folder?: string) => Promise<string[]>;
|
|
10
18
|
export declare const getFile: (fileName: string) => Promise<any>;
|
|
11
19
|
export declare const saveFile: (formData: any, fileName: string, options?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../admin/actions/files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../admin/actions/files.ts"],"names":[],"mappings":"AAgCA,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA6L9C;;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,sBA8B9D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,QAAa,OAAO,CAAC,MAAM,EAAE,CAkB7D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAU,SAAQ,MAAa,sBAqBxD,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,UAAU,MAAM,iBAgE7C,CAAC;AAuBF,eAAO,MAAM,QAAQ,GACnB,UAAU,GAAG,EACb,UAAU,MAAM,EAChB,UAAU;IAAE,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAAE,KAC3C,OAAO,CAAC,cAAc,CA4JxB,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,aAAa,CAmDjE,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,YAAY,CAgEvE,CAAC"}
|