canopycms 0.0.62 → 0.0.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -19
- package/dist/ai/generate.d.ts +4 -5
- package/dist/ai/generate.js +0 -1
- package/dist/ai/handler.d.ts +3 -4
- package/dist/ai/handler.js +0 -1
- package/dist/ai/index.d.ts +15 -7
- package/dist/ai/index.js +9 -1
- package/dist/ai/json-to-markdown.d.ts +1 -2
- package/dist/ai/json-to-markdown.js +11 -2
- package/dist/ai/resolve-branch.d.ts +1 -2
- package/dist/ai/resolve-branch.js +0 -1
- package/dist/ai/strip-mdx.d.ts +0 -1
- package/dist/ai/strip-mdx.js +0 -1
- package/dist/ai/to-plain-text.d.ts +60 -0
- package/dist/ai/to-plain-text.js +301 -0
- package/dist/ai/transform-components.d.ts +1 -2
- package/dist/ai/transform-components.js +70 -6
- package/dist/ai/types.d.ts +1 -2
- package/dist/ai/types.js +0 -1
- package/dist/api/admin-branch-health.d.ts +7 -8
- package/dist/api/admin-branch-health.js +0 -1
- package/dist/api/admin.d.ts +16 -17
- package/dist/api/admin.js +0 -1
- package/dist/api/assets.d.ts +8 -9
- package/dist/api/assets.js +0 -1
- package/dist/api/branch-merge.d.ts +3 -4
- package/dist/api/branch-merge.js +0 -1
- package/dist/api/branch-review.d.ts +5 -6
- package/dist/api/branch-review.js +0 -1
- package/dist/api/branch-status.d.ts +15 -16
- package/dist/api/branch-status.js +0 -1
- package/dist/api/branch-withdraw.d.ts +3 -4
- package/dist/api/branch-withdraw.js +0 -1
- package/dist/api/branch.d.ts +13 -14
- package/dist/api/branch.js +0 -1
- package/dist/api/client.d.ts +14 -15
- package/dist/api/client.js +0 -1
- package/dist/api/comments.d.ts +11 -12
- package/dist/api/comments.js +0 -1
- package/dist/api/content.d.ts +22 -24
- package/dist/api/content.js +132 -18
- package/dist/api/entries-constants.d.ts +0 -1
- package/dist/api/entries-constants.js +0 -1
- package/dist/api/entries.d.ts +12 -13
- package/dist/api/entries.js +12 -2
- package/dist/api/github-sync.d.ts +2 -3
- package/dist/api/github-sync.js +0 -1
- package/dist/api/groups.d.ts +6 -7
- package/dist/api/groups.js +0 -1
- package/dist/api/guards.d.ts +2 -3
- package/dist/api/guards.js +0 -1
- package/dist/api/index.d.ts +18 -19
- package/dist/api/index.js +0 -1
- package/dist/api/permissions.d.ts +10 -11
- package/dist/api/permissions.js +0 -1
- package/dist/api/reference-options.d.ts +3 -4
- package/dist/api/reference-options.js +0 -1
- package/dist/api/request-body-hash.d.ts +0 -1
- package/dist/api/request-body-hash.js +0 -1
- package/dist/api/resolve-references.d.ts +6 -7
- package/dist/api/resolve-references.js +24 -6
- package/dist/api/route-builder.d.ts +2 -3
- package/dist/api/route-builder.js +0 -1
- package/dist/api/schema.d.ts +43 -44
- package/dist/api/schema.js +0 -1
- package/dist/api/settings-helpers.d.ts +2 -3
- package/dist/api/settings-helpers.js +0 -1
- package/dist/api/types.d.ts +6 -7
- package/dist/api/types.js +0 -1
- package/dist/api/user.d.ts +2 -3
- package/dist/api/user.js +0 -1
- package/dist/api/validators.d.ts +3 -4
- package/dist/api/validators.js +0 -1
- package/dist/assets/asset-prefixes.d.ts +1 -2
- package/dist/assets/asset-prefixes.js +0 -1
- package/dist/assets/asset-src.d.ts +17 -5
- package/dist/assets/asset-src.js +15 -3
- package/dist/assets/asset-url.d.ts +28 -7
- package/dist/assets/asset-url.js +20 -15
- package/dist/assets/factory.d.ts +2 -3
- package/dist/assets/factory.js +0 -2
- package/dist/assets/finalize.d.ts +2 -3
- package/dist/assets/finalize.js +0 -1
- package/dist/assets/index.d.ts +12 -13
- package/dist/assets/index.js +0 -1
- package/dist/assets/keys.d.ts +1 -2
- package/dist/assets/keys.js +0 -1
- package/dist/assets/pipeline.d.ts +1 -2
- package/dist/assets/pipeline.js +0 -1
- package/dist/assets/store-local.d.ts +1 -2
- package/dist/assets/store-local.js +0 -1
- package/dist/assets/store-s3.d.ts +2 -4
- package/dist/assets/store-s3.js +0 -1
- package/dist/assets/svg-sanitizer.d.ts +0 -1
- package/dist/assets/svg-sanitizer.js +0 -1
- package/dist/assets/transform-directives.d.ts +0 -1
- package/dist/assets/transform-directives.js +0 -1
- package/dist/assets/transform.d.ts +1 -2
- package/dist/assets/transform.js +0 -1
- package/dist/assets/types.d.ts +0 -1
- package/dist/assets/types.js +0 -1
- package/dist/auth/cache.d.ts +2 -3
- package/dist/auth/cache.js +0 -1
- package/dist/auth/caching-auth-plugin.d.ts +3 -4
- package/dist/auth/caching-auth-plugin.js +0 -1
- package/dist/auth/context-helpers.d.ts +1 -2
- package/dist/auth/context-helpers.js +0 -1
- package/dist/auth/file-based-auth-cache.d.ts +3 -4
- package/dist/auth/file-based-auth-cache.js +0 -1
- package/dist/auth/index.d.ts +6 -7
- package/dist/auth/index.js +0 -1
- package/dist/auth/plugin.d.ts +3 -4
- package/dist/auth/plugin.js +0 -1
- package/dist/auth/types.d.ts +1 -2
- package/dist/auth/types.js +0 -1
- package/dist/authorization/branch.d.ts +58 -7
- package/dist/authorization/branch.js +55 -10
- package/dist/authorization/content.d.ts +6 -7
- package/dist/authorization/content.js +0 -1
- package/dist/authorization/groups/index.d.ts +2 -3
- package/dist/authorization/groups/index.js +0 -1
- package/dist/authorization/groups/loader.d.ts +3 -4
- package/dist/authorization/groups/loader.js +0 -1
- package/dist/authorization/groups/schema.d.ts +1 -2
- package/dist/authorization/groups/schema.js +0 -1
- package/dist/authorization/helpers.d.ts +0 -1
- package/dist/authorization/helpers.js +0 -1
- package/dist/authorization/index.d.ts +11 -12
- package/dist/authorization/index.js +0 -1
- package/dist/authorization/path.d.ts +4 -5
- package/dist/authorization/path.js +0 -1
- package/dist/authorization/permissions/index.d.ts +2 -3
- package/dist/authorization/permissions/index.js +0 -1
- package/dist/authorization/permissions/loader.d.ts +4 -5
- package/dist/authorization/permissions/loader.js +0 -1
- package/dist/authorization/permissions/schema.d.ts +2 -3
- package/dist/authorization/permissions/schema.js +0 -1
- package/dist/authorization/protected-branch.d.ts +2 -3
- package/dist/authorization/protected-branch.js +0 -1
- package/dist/authorization/settings-file-store.d.ts +1 -2
- package/dist/authorization/settings-file-store.js +0 -1
- package/dist/authorization/types.d.ts +7 -8
- package/dist/authorization/types.js +0 -1
- package/dist/authorization/validation.d.ts +1 -2
- package/dist/authorization/validation.js +0 -1
- package/dist/branch-health.d.ts +2 -3
- package/dist/branch-health.js +0 -1
- package/dist/branch-metadata.d.ts +2 -3
- package/dist/branch-metadata.js +0 -1
- package/dist/branch-registry.d.ts +1 -2
- package/dist/branch-registry.js +0 -1
- package/dist/branch-schema-cache.d.ts +4 -5
- package/dist/branch-schema-cache.js +0 -1
- package/dist/branch-workspace.d.ts +4 -5
- package/dist/branch-workspace.js +0 -1
- package/dist/build/generate-ai-content.d.ts +21 -5
- package/dist/build/generate-ai-content.js +98 -6
- package/dist/build/index.d.ts +2 -3
- package/dist/build/index.js +0 -1
- package/dist/build-canopy.d.ts +48 -0
- package/dist/build-canopy.js +50 -0
- package/dist/build-mode.d.ts +1 -2
- package/dist/build-mode.js +0 -1
- package/dist/cli/cli.d.ts +1 -2
- package/dist/cli/cli.js +1192 -495
- package/dist/cli/generate-ai-content.d.ts +0 -1
- package/dist/cli/generate-ai-content.js +1062 -370
- package/dist/cli/init.d.ts +1 -2
- package/dist/cli/init.js +12 -2
- package/dist/cli/migrate.d.ts +5 -3
- package/dist/cli/migrate.js +5 -3
- package/dist/cli/project-detect.d.ts +5 -2
- package/dist/cli/project-detect.js +5 -1
- package/dist/cli/project-root.d.ts +0 -1
- package/dist/cli/project-root.js +0 -1
- package/dist/cli/sync.d.ts +0 -1
- package/dist/cli/sync.js +0 -1
- package/dist/cli/template-files/canopycms.config.ts.template +18 -1
- package/dist/cli/template-files/deploy-cms.yml.template +8 -6
- package/dist/cli/templates.d.ts +0 -1
- package/dist/cli/templates.js +0 -1
- package/dist/client.d.ts +13 -14
- package/dist/client.js +0 -1
- package/dist/comment-store.d.ts +0 -1
- package/dist/comment-store.js +0 -1
- package/dist/config/flatten.d.ts +1 -2
- package/dist/config/flatten.js +0 -1
- package/dist/config/helpers.d.ts +3 -4
- package/dist/config/helpers.js +2 -2
- package/dist/config/index.d.ts +10 -11
- package/dist/config/index.js +0 -1
- package/dist/config/schemas/collection.d.ts +0 -1
- package/dist/config/schemas/collection.js +0 -1
- package/dist/config/schemas/config.d.ts +7 -4
- package/dist/config/schemas/config.js +12 -1
- package/dist/config/schemas/field.d.ts +3 -1
- package/dist/config/schemas/field.js +5 -1
- package/dist/config/schemas/media.d.ts +0 -1
- package/dist/config/schemas/media.js +0 -1
- package/dist/config/schemas/permissions.d.ts +0 -1
- package/dist/config/schemas/permissions.js +0 -1
- package/dist/config/types.d.ts +55 -9
- package/dist/config/types.js +0 -1
- package/dist/config/validation.d.ts +1 -2
- package/dist/config/validation.js +0 -1
- package/dist/config.d.ts +2 -3
- package/dist/config.js +0 -1
- package/dist/content-id-index.d.ts +1 -2
- package/dist/content-id-index.js +0 -1
- package/dist/content-index-generation.d.ts +0 -1
- package/dist/content-index-generation.js +0 -1
- package/dist/content-index-registry.d.ts +0 -1
- package/dist/content-index-registry.js +0 -1
- package/dist/content-listing.d.ts +137 -16
- package/dist/content-listing.js +175 -41
- package/dist/content-reader.d.ts +44 -8
- package/dist/content-reader.js +39 -7
- package/dist/content-store.d.ts +147 -7
- package/dist/content-store.js +294 -22
- package/dist/content-tree.d.ts +44 -5
- package/dist/content-tree.js +47 -11
- package/dist/context.d.ts +38 -15
- package/dist/context.js +55 -5
- package/dist/dev-content-watcher.d.ts +2 -3
- package/dist/dev-content-watcher.js +0 -1
- package/dist/editor/BranchManager.d.ts +4 -5
- package/dist/editor/BranchManager.js +0 -1
- package/dist/editor/CanopyEditor.d.ts +2 -3
- package/dist/editor/CanopyEditor.js +1 -2
- package/dist/editor/CanopyEditorPage.d.ts +2 -3
- package/dist/editor/CanopyEditorPage.js +0 -1
- package/dist/editor/CommentsPanel.d.ts +2 -3
- package/dist/editor/CommentsPanel.js +0 -1
- package/dist/editor/Editor.d.ts +13 -8
- package/dist/editor/Editor.js +4 -5
- package/dist/editor/EditorPanes.d.ts +0 -1
- package/dist/editor/EditorPanes.js +0 -1
- package/dist/editor/EntryNavigator.d.ts +1 -2
- package/dist/editor/EntryNavigator.js +0 -1
- package/dist/editor/FormRenderer.d.ts +2 -3
- package/dist/editor/FormRenderer.js +22 -3
- package/dist/editor/GroupManager.d.ts +2 -3
- package/dist/editor/GroupManager.js +0 -1
- package/dist/editor/PermissionManager.d.ts +2 -3
- package/dist/editor/PermissionManager.js +0 -1
- package/dist/editor/admin/SystemHealthPanel.d.ts +0 -1
- package/dist/editor/admin/SystemHealthPanel.js +0 -1
- package/dist/editor/admin/useSystemHealth.d.ts +2 -3
- package/dist/editor/admin/useSystemHealth.js +0 -1
- package/dist/editor/canopy-path.d.ts +0 -1
- package/dist/editor/canopy-path.js +0 -1
- package/dist/editor/client-reference-resolver.d.ts +13 -4
- package/dist/editor/client-reference-resolver.js +18 -8
- package/dist/editor/comments/BranchComments.d.ts +2 -3
- package/dist/editor/comments/BranchComments.js +0 -1
- package/dist/editor/comments/EntryComments.d.ts +1 -2
- package/dist/editor/comments/EntryComments.js +0 -1
- package/dist/editor/comments/FieldWrapper.d.ts +1 -2
- package/dist/editor/comments/FieldWrapper.js +0 -1
- package/dist/editor/comments/InlineCommentThread.d.ts +2 -3
- package/dist/editor/comments/InlineCommentThread.js +0 -1
- package/dist/editor/comments/ThreadCarousel.d.ts +2 -3
- package/dist/editor/comments/ThreadCarousel.js +0 -1
- package/dist/editor/components/ConfirmDeleteModal.d.ts +0 -1
- package/dist/editor/components/ConfirmDeleteModal.js +0 -1
- package/dist/editor/components/EditorFooter.d.ts +0 -1
- package/dist/editor/components/EditorFooter.js +0 -1
- package/dist/editor/components/EditorHeader.d.ts +4 -5
- package/dist/editor/components/EditorHeader.js +0 -1
- package/dist/editor/components/EditorSidebar.d.ts +1 -2
- package/dist/editor/components/EditorSidebar.js +0 -1
- package/dist/editor/components/EntryCreateModal.d.ts +0 -1
- package/dist/editor/components/EntryCreateModal.js +21 -10
- package/dist/editor/components/RenameEntryModal.d.ts +0 -1
- package/dist/editor/components/RenameEntryModal.js +0 -1
- package/dist/editor/components/UserBadge.d.ts +2 -3
- package/dist/editor/components/UserBadge.js +0 -1
- package/dist/editor/components/index.d.ts +3 -4
- package/dist/editor/components/index.js +0 -1
- package/dist/editor/context/ApiClientContext.d.ts +9 -3
- package/dist/editor/context/ApiClientContext.js +8 -4
- package/dist/editor/context/AssetContext.d.ts +26 -2
- package/dist/editor/context/AssetContext.js +23 -3
- package/dist/editor/context/EditorStateContext.d.ts +1 -2
- package/dist/editor/context/EditorStateContext.js +0 -1
- package/dist/editor/context/SWRProvider.d.ts +0 -1
- package/dist/editor/context/SWRProvider.js +0 -1
- package/dist/editor/context/index.d.ts +4 -5
- package/dist/editor/context/index.js +0 -1
- package/dist/editor/editor-config.d.ts +2 -3
- package/dist/editor/editor-config.js +0 -1
- package/dist/editor/editor-utils.d.ts +22 -10
- package/dist/editor/editor-utils.js +41 -10
- package/dist/editor/fields/BlockField.d.ts +1 -2
- package/dist/editor/fields/BlockField.js +0 -1
- package/dist/editor/fields/CodeField.d.ts +0 -1
- package/dist/editor/fields/CodeField.js +0 -1
- package/dist/editor/fields/DateTimeField.d.ts +0 -1
- package/dist/editor/fields/DateTimeField.js +0 -1
- package/dist/editor/fields/ImageField.d.ts +1 -2
- package/dist/editor/fields/ImageField.js +0 -1
- package/dist/editor/fields/InlineGroupField.d.ts +2 -3
- package/dist/editor/fields/InlineGroupField.js +0 -1
- package/dist/editor/fields/MarkdownField.d.ts +0 -1
- package/dist/editor/fields/MarkdownField.js +0 -1
- package/dist/editor/fields/MdxImageDialog.d.ts +0 -1
- package/dist/editor/fields/MdxImageDialog.js +0 -1
- package/dist/editor/fields/NumberField.d.ts +0 -1
- package/dist/editor/fields/NumberField.js +0 -1
- package/dist/editor/fields/NumberListField.d.ts +0 -1
- package/dist/editor/fields/NumberListField.js +0 -1
- package/dist/editor/fields/ObjectField.d.ts +11 -2
- package/dist/editor/fields/ObjectField.js +3 -4
- package/dist/editor/fields/ReferenceField.d.ts +0 -1
- package/dist/editor/fields/ReferenceField.js +8 -3
- package/dist/editor/fields/SelectField.d.ts +0 -1
- package/dist/editor/fields/SelectField.js +0 -1
- package/dist/editor/fields/StringListField.d.ts +0 -1
- package/dist/editor/fields/StringListField.js +0 -1
- package/dist/editor/fields/TextField.d.ts +0 -1
- package/dist/editor/fields/TextField.js +0 -1
- package/dist/editor/fields/ToggleField.d.ts +0 -1
- package/dist/editor/fields/ToggleField.js +0 -1
- package/dist/editor/fields/entry-link/EntryLinkContext.d.ts +1 -2
- package/dist/editor/fields/entry-link/EntryLinkContext.js +0 -1
- package/dist/editor/fields/entry-link/InsertEntryLink.d.ts +0 -1
- package/dist/editor/fields/entry-link/InsertEntryLink.js +0 -1
- package/dist/editor/fields/entry-link/index.d.ts +2 -3
- package/dist/editor/fields/entry-link/index.js +0 -1
- package/dist/editor/group-manager/ExternalGroupsTab.d.ts +1 -2
- package/dist/editor/group-manager/ExternalGroupsTab.js +0 -1
- package/dist/editor/group-manager/GroupCard.d.ts +1 -2
- package/dist/editor/group-manager/GroupCard.js +0 -1
- package/dist/editor/group-manager/GroupForm.d.ts +1 -2
- package/dist/editor/group-manager/GroupForm.js +0 -1
- package/dist/editor/group-manager/InternalGroupsTab.d.ts +1 -2
- package/dist/editor/group-manager/InternalGroupsTab.js +0 -1
- package/dist/editor/group-manager/MemberList.d.ts +1 -2
- package/dist/editor/group-manager/MemberList.js +0 -1
- package/dist/editor/group-manager/hooks/useExternalGroupSearch.d.ts +1 -2
- package/dist/editor/group-manager/hooks/useExternalGroupSearch.js +0 -1
- package/dist/editor/group-manager/hooks/useGroupState.d.ts +1 -2
- package/dist/editor/group-manager/hooks/useGroupState.js +0 -1
- package/dist/editor/group-manager/hooks/useUserSearch.d.ts +1 -2
- package/dist/editor/group-manager/hooks/useUserSearch.js +0 -1
- package/dist/editor/group-manager/index.d.ts +5 -6
- package/dist/editor/group-manager/index.js +0 -1
- package/dist/editor/group-manager/types.d.ts +4 -5
- package/dist/editor/group-manager/types.js +0 -1
- package/dist/editor/hooks/index.d.ts +14 -15
- package/dist/editor/hooks/index.js +0 -1
- package/dist/editor/hooks/useBranchActions.d.ts +0 -1
- package/dist/editor/hooks/useBranchActions.js +0 -1
- package/dist/editor/hooks/useBranchManager.d.ts +4 -5
- package/dist/editor/hooks/useBranchManager.js +0 -1
- package/dist/editor/hooks/useBranchesData.d.ts +2 -3
- package/dist/editor/hooks/useBranchesData.js +0 -1
- package/dist/editor/hooks/useCommentSystem.d.ts +2 -3
- package/dist/editor/hooks/useCommentSystem.js +0 -1
- package/dist/editor/hooks/useCommentsData.d.ts +2 -3
- package/dist/editor/hooks/useCommentsData.js +0 -1
- package/dist/editor/hooks/useDraftManager.d.ts +3 -4
- package/dist/editor/hooks/useDraftManager.js +0 -1
- package/dist/editor/hooks/useEditorLayout.d.ts +1 -2
- package/dist/editor/hooks/useEditorLayout.js +0 -1
- package/dist/editor/hooks/useEntriesData.d.ts +3 -5
- package/dist/editor/hooks/useEntriesData.js +0 -3
- package/dist/editor/hooks/useEntryLinkResolution.d.ts +2 -3
- package/dist/editor/hooks/useEntryLinkResolution.js +0 -1
- package/dist/editor/hooks/useEntryManager.d.ts +5 -7
- package/dist/editor/hooks/useEntryManager.js +8 -3
- package/dist/editor/hooks/useGroupManager.d.ts +2 -3
- package/dist/editor/hooks/useGroupManager.js +0 -1
- package/dist/editor/hooks/usePermissionManager.d.ts +2 -3
- package/dist/editor/hooks/usePermissionManager.js +0 -1
- package/dist/editor/hooks/useReferenceResolution.d.ts +1 -2
- package/dist/editor/hooks/useReferenceResolution.js +8 -3
- package/dist/editor/hooks/useSchemaManager.d.ts +2 -3
- package/dist/editor/hooks/useSchemaManager.js +0 -1
- package/dist/editor/hooks/useUserContext.d.ts +1 -2
- package/dist/editor/hooks/useUserContext.js +8 -3
- package/dist/editor/hooks/useUserMetadata.d.ts +2 -3
- package/dist/editor/hooks/useUserMetadata.js +0 -1
- package/dist/editor/media/AssetCard.d.ts +1 -2
- package/dist/editor/media/AssetCard.js +0 -1
- package/dist/editor/media/CropStep.d.ts +1 -2
- package/dist/editor/media/CropStep.js +0 -1
- package/dist/editor/media/MediaLibrary.d.ts +1 -2
- package/dist/editor/media/MediaLibrary.js +0 -1
- package/dist/editor/media/MediaLibraryBody.d.ts +1 -2
- package/dist/editor/media/MediaLibraryBody.js +0 -1
- package/dist/editor/media/crop-math.d.ts +1 -2
- package/dist/editor/media/crop-math.js +0 -1
- package/dist/editor/media/upload-asset.d.ts +2 -3
- package/dist/editor/media/upload-asset.js +0 -1
- package/dist/editor/media/upload-constants.d.ts +0 -1
- package/dist/editor/media/upload-constants.js +0 -1
- package/dist/editor/media/useAssetUpload.d.ts +1 -2
- package/dist/editor/media/useAssetUpload.js +0 -1
- package/dist/editor/media/xhr-upload.d.ts +0 -1
- package/dist/editor/media/xhr-upload.js +0 -1
- package/dist/editor/permission-manager/GroupSelector.d.ts +1 -2
- package/dist/editor/permission-manager/GroupSelector.js +0 -1
- package/dist/editor/permission-manager/PermissionEditor.d.ts +1 -2
- package/dist/editor/permission-manager/PermissionEditor.js +0 -1
- package/dist/editor/permission-manager/PermissionLevelBadge.d.ts +1 -2
- package/dist/editor/permission-manager/PermissionLevelBadge.js +0 -1
- package/dist/editor/permission-manager/PermissionTree.d.ts +1 -2
- package/dist/editor/permission-manager/PermissionTree.js +0 -1
- package/dist/editor/permission-manager/UserSelector.d.ts +1 -2
- package/dist/editor/permission-manager/UserSelector.js +0 -1
- package/dist/editor/permission-manager/constants.d.ts +1 -2
- package/dist/editor/permission-manager/constants.js +0 -1
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts +1 -2
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js +0 -1
- package/dist/editor/permission-manager/hooks/usePermissionTree.d.ts +2 -3
- package/dist/editor/permission-manager/hooks/usePermissionTree.js +0 -1
- package/dist/editor/permission-manager/index.d.ts +4 -5
- package/dist/editor/permission-manager/index.js +0 -1
- package/dist/editor/permission-manager/types.d.ts +3 -4
- package/dist/editor/permission-manager/types.js +0 -1
- package/dist/editor/permission-manager/utils.d.ts +2 -3
- package/dist/editor/permission-manager/utils.js +0 -1
- package/dist/editor/preview-bridge.d.ts +1 -2
- package/dist/editor/preview-bridge.js +0 -1
- package/dist/editor/relative-time.d.ts +0 -1
- package/dist/editor/relative-time.js +0 -1
- package/dist/editor/schema-editor/CollectionEditor.d.ts +4 -5
- package/dist/editor/schema-editor/CollectionEditor.js +0 -1
- package/dist/editor/schema-editor/EntryTypeEditor.d.ts +2 -3
- package/dist/editor/schema-editor/EntryTypeEditor.js +0 -1
- package/dist/editor/schema-editor/index.d.ts +2 -3
- package/dist/editor/schema-editor/index.js +0 -1
- package/dist/editor/theme.d.ts +0 -1
- package/dist/editor/theme.js +0 -1
- package/dist/editor/utils/env.d.ts +0 -1
- package/dist/editor/utils/env.js +0 -1
- package/dist/entry-link-resolver.d.ts +1 -2
- package/dist/entry-link-resolver.js +0 -1
- package/dist/entry-schema-registry.d.ts +3 -4
- package/dist/entry-schema-registry.js +6 -2
- package/dist/entry-schema.d.ts +342 -11
- package/dist/entry-schema.js +170 -1
- package/dist/git-manager.d.ts +1 -2
- package/dist/git-manager.js +0 -1
- package/dist/github-service.d.ts +1 -2
- package/dist/github-service.js +0 -1
- package/dist/http/handler.d.ts +6 -7
- package/dist/http/handler.js +0 -1
- package/dist/http/index.d.ts +6 -7
- package/dist/http/index.js +0 -1
- package/dist/http/router.d.ts +2 -3
- package/dist/http/router.js +0 -1
- package/dist/http/types.d.ts +0 -1
- package/dist/http/types.js +0 -1
- package/dist/id.d.ts +2 -3
- package/dist/id.js +0 -1
- package/dist/index.d.ts +17 -17
- package/dist/index.js +7 -1
- package/dist/operating-mode/client-safe-strategy.d.ts +1 -2
- package/dist/operating-mode/client-safe-strategy.js +0 -1
- package/dist/operating-mode/client-unsafe-strategy.d.ts +1 -2
- package/dist/operating-mode/client-unsafe-strategy.js +0 -1
- package/dist/operating-mode/client.d.ts +3 -4
- package/dist/operating-mode/client.js +0 -1
- package/dist/operating-mode/deployment-name-fixtures.d.ts +0 -1
- package/dist/operating-mode/deployment-name-fixtures.js +0 -1
- package/dist/operating-mode/deployment-name.d.ts +0 -1
- package/dist/operating-mode/deployment-name.js +0 -1
- package/dist/operating-mode/index.d.ts +5 -6
- package/dist/operating-mode/index.js +0 -1
- package/dist/operating-mode/mode-env.d.ts +1 -2
- package/dist/operating-mode/mode-env.js +0 -1
- package/dist/operating-mode/types.d.ts +2 -3
- package/dist/operating-mode/types.js +0 -1
- package/dist/paths/branch-name.d.ts +1 -2
- package/dist/paths/branch-name.js +0 -1
- package/dist/paths/branch.d.ts +3 -4
- package/dist/paths/branch.js +0 -1
- package/dist/paths/index.d.ts +8 -9
- package/dist/paths/index.js +0 -1
- package/dist/paths/normalize-server.d.ts +1 -2
- package/dist/paths/normalize-server.js +0 -1
- package/dist/paths/normalize.d.ts +1 -2
- package/dist/paths/normalize.js +0 -1
- package/dist/paths/resolve.d.ts +2 -3
- package/dist/paths/resolve.js +0 -1
- package/dist/paths/types.d.ts +0 -1
- package/dist/paths/types.js +0 -1
- package/dist/paths/validation.d.ts +1 -2
- package/dist/paths/validation.js +0 -1
- package/dist/reference-resolver.d.ts +3 -4
- package/dist/reference-resolver.js +0 -1
- package/dist/resolve-canopy-user.d.ts +3 -4
- package/dist/resolve-canopy-user.js +0 -1
- package/dist/resource-generation.d.ts +0 -1
- package/dist/resource-generation.js +0 -1
- package/dist/schema/index.d.ts +3 -4
- package/dist/schema/index.js +0 -1
- package/dist/schema/meta-loader.d.ts +3 -4
- package/dist/schema/meta-loader.js +3 -3
- package/dist/schema/resolver.d.ts +2 -3
- package/dist/schema/resolver.js +0 -1
- package/dist/schema/schema-store-types.d.ts +2 -3
- package/dist/schema/schema-store-types.js +0 -1
- package/dist/schema/schema-store.d.ts +6 -7
- package/dist/schema/schema-store.js +33 -1
- package/dist/schema/types.d.ts +1 -2
- package/dist/schema/types.js +0 -1
- package/dist/server.d.ts +97 -37
- package/dist/server.js +60 -3
- package/dist/services.d.ts +10 -12
- package/dist/services.js +2 -7
- package/dist/settings-workspace.d.ts +12 -15
- package/dist/settings-workspace.js +10 -13
- package/dist/static/index.d.ts +227 -9
- package/dist/static/index.js +302 -14
- package/dist/static/seo.d.ts +128 -0
- package/dist/static/seo.js +162 -0
- package/dist/sync-core.d.ts +0 -1
- package/dist/sync-core.js +0 -1
- package/dist/task-queue/index.d.ts +2 -3
- package/dist/task-queue/index.js +0 -1
- package/dist/task-queue/task-queue.d.ts +1 -2
- package/dist/task-queue/task-queue.js +0 -1
- package/dist/task-queue/types.d.ts +0 -1
- package/dist/task-queue/types.js +0 -1
- package/dist/types.d.ts +3 -4
- package/dist/types.js +0 -1
- package/dist/url-collision.d.ts +86 -0
- package/dist/url-collision.js +186 -0
- package/dist/url-path-resolver.d.ts +11 -2
- package/dist/url-path-resolver.js +37 -5
- package/dist/user.d.ts +3 -4
- package/dist/user.js +0 -1
- package/dist/utils/async-mutex.d.ts +0 -1
- package/dist/utils/async-mutex.js +0 -1
- package/dist/utils/atomic-write.d.ts +0 -1
- package/dist/utils/atomic-write.js +0 -1
- package/dist/utils/body-field.d.ts +12 -2
- package/dist/utils/body-field.js +17 -1
- package/dist/utils/content-serialize.d.ts +37 -0
- package/dist/utils/content-serialize.js +429 -0
- package/dist/utils/content-write-lock.d.ts +12 -16
- package/dist/utils/content-write-lock.js +38 -22
- package/dist/utils/debug.d.ts +0 -1
- package/dist/utils/debug.js +0 -1
- package/dist/utils/entry-url.d.ts +17 -1
- package/dist/utils/entry-url.js +21 -3
- package/dist/utils/error.d.ts +0 -1
- package/dist/utils/error.js +0 -1
- package/dist/utils/flatten-group-fields.d.ts +1 -2
- package/dist/utils/flatten-group-fields.js +0 -1
- package/dist/utils/format.d.ts +1 -2
- package/dist/utils/format.js +0 -1
- package/dist/utils/fs.d.ts +7 -1
- package/dist/utils/fs.js +16 -1
- package/dist/utils/git.d.ts +1 -2
- package/dist/utils/git.js +0 -1
- package/dist/utils/logger.d.ts +0 -1
- package/dist/utils/logger.js +0 -1
- package/dist/utils/occ-json-write.d.ts +0 -1
- package/dist/utils/occ-json-write.js +0 -1
- package/dist/utils/provisioning-lock.d.ts +17 -4
- package/dist/utils/provisioning-lock.js +94 -14
- package/dist/utils/sanitize-href.d.ts +46 -1
- package/dist/utils/sanitize-href.js +63 -3
- package/dist/utils/title-field.d.ts +1 -2
- package/dist/utils/title-field.js +0 -1
- package/dist/utils/typed-filename.d.ts +61 -0
- package/dist/utils/typed-filename.js +92 -0
- package/dist/utils/url-prefix.d.ts +121 -0
- package/dist/utils/url-prefix.js +158 -0
- package/dist/validation/block-structural-keys.d.ts +42 -0
- package/dist/validation/block-structural-keys.js +44 -0
- package/dist/validation/deletion-checker.d.ts +4 -5
- package/dist/validation/deletion-checker.js +0 -1
- package/dist/validation/entry-link-validator.d.ts +2 -3
- package/dist/validation/entry-link-validator.js +0 -1
- package/dist/validation/entry-type-reference-validator.d.ts +1 -2
- package/dist/validation/entry-type-reference-validator.js +0 -1
- package/dist/validation/entry-validator.d.ts +23 -2
- package/dist/validation/entry-validator.js +34 -2
- package/dist/validation/field-traversal.d.ts +28 -4
- package/dist/validation/field-traversal.js +24 -7
- package/dist/validation/reference-validator.d.ts +2 -3
- package/dist/validation/reference-validator.js +0 -1
- package/dist/worker/cms-worker.d.ts +9 -2
- package/dist/worker/cms-worker.js +59 -2
- package/dist/worker/log.d.ts +0 -1
- package/dist/worker/log.js +0 -1
- package/dist/worker/task-queue-config.d.ts +1 -2
- package/dist/worker/task-queue-config.js +0 -1
- package/dist/worker/task-queue.d.ts +3 -4
- package/dist/worker/task-queue.js +0 -1
- package/dist/worker/worker-status.d.ts +1 -2
- package/dist/worker/worker-status.js +0 -1
- package/package.json +2 -6
- package/dist/ai/generate.d.ts.map +0 -1
- package/dist/ai/generate.js.map +0 -1
- package/dist/ai/handler.d.ts.map +0 -1
- package/dist/ai/handler.js.map +0 -1
- package/dist/ai/index.d.ts.map +0 -1
- package/dist/ai/index.js.map +0 -1
- package/dist/ai/json-to-markdown.d.ts.map +0 -1
- package/dist/ai/json-to-markdown.js.map +0 -1
- package/dist/ai/resolve-branch.d.ts.map +0 -1
- package/dist/ai/resolve-branch.js.map +0 -1
- package/dist/ai/strip-mdx.d.ts.map +0 -1
- package/dist/ai/strip-mdx.js.map +0 -1
- package/dist/ai/transform-components.d.ts.map +0 -1
- package/dist/ai/transform-components.js.map +0 -1
- package/dist/ai/types.d.ts.map +0 -1
- package/dist/ai/types.js.map +0 -1
- package/dist/api/__test__/mock-client.d.ts +0 -231
- package/dist/api/__test__/mock-client.d.ts.map +0 -1
- package/dist/api/__test__/mock-client.js +0 -388
- package/dist/api/__test__/mock-client.js.map +0 -1
- package/dist/api/admin-branch-health.d.ts.map +0 -1
- package/dist/api/admin-branch-health.js.map +0 -1
- package/dist/api/admin.d.ts.map +0 -1
- package/dist/api/admin.js.map +0 -1
- package/dist/api/assets.d.ts.map +0 -1
- package/dist/api/assets.js.map +0 -1
- package/dist/api/branch-merge.d.ts.map +0 -1
- package/dist/api/branch-merge.js.map +0 -1
- package/dist/api/branch-review.d.ts.map +0 -1
- package/dist/api/branch-review.js.map +0 -1
- package/dist/api/branch-status.d.ts.map +0 -1
- package/dist/api/branch-status.js.map +0 -1
- package/dist/api/branch-withdraw.d.ts.map +0 -1
- package/dist/api/branch-withdraw.js.map +0 -1
- package/dist/api/branch.d.ts.map +0 -1
- package/dist/api/branch.js.map +0 -1
- package/dist/api/client.d.ts.map +0 -1
- package/dist/api/client.js.map +0 -1
- package/dist/api/comments.d.ts.map +0 -1
- package/dist/api/comments.js.map +0 -1
- package/dist/api/content.d.ts.map +0 -1
- package/dist/api/content.js.map +0 -1
- package/dist/api/entries-constants.d.ts.map +0 -1
- package/dist/api/entries-constants.js.map +0 -1
- package/dist/api/entries.d.ts.map +0 -1
- package/dist/api/entries.js.map +0 -1
- package/dist/api/github-sync.d.ts.map +0 -1
- package/dist/api/github-sync.js.map +0 -1
- package/dist/api/groups.d.ts.map +0 -1
- package/dist/api/groups.js.map +0 -1
- package/dist/api/guards.d.ts.map +0 -1
- package/dist/api/guards.js.map +0 -1
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js.map +0 -1
- package/dist/api/permissions.d.ts.map +0 -1
- package/dist/api/permissions.js.map +0 -1
- package/dist/api/reference-options.d.ts.map +0 -1
- package/dist/api/reference-options.js.map +0 -1
- package/dist/api/request-body-hash.d.ts.map +0 -1
- package/dist/api/request-body-hash.js.map +0 -1
- package/dist/api/resolve-references.d.ts.map +0 -1
- package/dist/api/resolve-references.js.map +0 -1
- package/dist/api/route-builder.d.ts.map +0 -1
- package/dist/api/route-builder.js.map +0 -1
- package/dist/api/schema.d.ts.map +0 -1
- package/dist/api/schema.js.map +0 -1
- package/dist/api/settings-helpers.d.ts.map +0 -1
- package/dist/api/settings-helpers.js.map +0 -1
- package/dist/api/types.d.ts.map +0 -1
- package/dist/api/types.js.map +0 -1
- package/dist/api/user.d.ts.map +0 -1
- package/dist/api/user.js.map +0 -1
- package/dist/api/validators.d.ts.map +0 -1
- package/dist/api/validators.js.map +0 -1
- package/dist/assets/asset-prefixes.d.ts.map +0 -1
- package/dist/assets/asset-prefixes.js.map +0 -1
- package/dist/assets/asset-src.d.ts.map +0 -1
- package/dist/assets/asset-src.js.map +0 -1
- package/dist/assets/asset-url.d.ts.map +0 -1
- package/dist/assets/asset-url.js.map +0 -1
- package/dist/assets/factory.d.ts.map +0 -1
- package/dist/assets/factory.js.map +0 -1
- package/dist/assets/finalize.d.ts.map +0 -1
- package/dist/assets/finalize.js.map +0 -1
- package/dist/assets/index.d.ts.map +0 -1
- package/dist/assets/index.js.map +0 -1
- package/dist/assets/keys.d.ts.map +0 -1
- package/dist/assets/keys.js.map +0 -1
- package/dist/assets/pipeline.d.ts.map +0 -1
- package/dist/assets/pipeline.js.map +0 -1
- package/dist/assets/store-local.d.ts.map +0 -1
- package/dist/assets/store-local.js.map +0 -1
- package/dist/assets/store-s3.d.ts.map +0 -1
- package/dist/assets/store-s3.js.map +0 -1
- package/dist/assets/svg-sanitizer.d.ts.map +0 -1
- package/dist/assets/svg-sanitizer.js.map +0 -1
- package/dist/assets/transform-directives.d.ts.map +0 -1
- package/dist/assets/transform-directives.js.map +0 -1
- package/dist/assets/transform.d.ts.map +0 -1
- package/dist/assets/transform.js.map +0 -1
- package/dist/assets/types.d.ts.map +0 -1
- package/dist/assets/types.js.map +0 -1
- package/dist/auth/cache.d.ts.map +0 -1
- package/dist/auth/cache.js.map +0 -1
- package/dist/auth/caching-auth-plugin.d.ts.map +0 -1
- package/dist/auth/caching-auth-plugin.js.map +0 -1
- package/dist/auth/context-helpers.d.ts.map +0 -1
- package/dist/auth/context-helpers.js.map +0 -1
- package/dist/auth/file-based-auth-cache.d.ts.map +0 -1
- package/dist/auth/file-based-auth-cache.js.map +0 -1
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/plugin.d.ts.map +0 -1
- package/dist/auth/plugin.js.map +0 -1
- package/dist/auth/types.d.ts.map +0 -1
- package/dist/auth/types.js.map +0 -1
- package/dist/authorization/branch.d.ts.map +0 -1
- package/dist/authorization/branch.js.map +0 -1
- package/dist/authorization/content.d.ts.map +0 -1
- package/dist/authorization/content.js.map +0 -1
- package/dist/authorization/groups/index.d.ts.map +0 -1
- package/dist/authorization/groups/index.js.map +0 -1
- package/dist/authorization/groups/loader.d.ts.map +0 -1
- package/dist/authorization/groups/loader.js.map +0 -1
- package/dist/authorization/groups/schema.d.ts.map +0 -1
- package/dist/authorization/groups/schema.js.map +0 -1
- package/dist/authorization/helpers.d.ts.map +0 -1
- package/dist/authorization/helpers.js.map +0 -1
- package/dist/authorization/index.d.ts.map +0 -1
- package/dist/authorization/index.js.map +0 -1
- package/dist/authorization/path.d.ts.map +0 -1
- package/dist/authorization/path.js.map +0 -1
- package/dist/authorization/permissions/index.d.ts.map +0 -1
- package/dist/authorization/permissions/index.js.map +0 -1
- package/dist/authorization/permissions/loader.d.ts.map +0 -1
- package/dist/authorization/permissions/loader.js.map +0 -1
- package/dist/authorization/permissions/schema.d.ts.map +0 -1
- package/dist/authorization/permissions/schema.js.map +0 -1
- package/dist/authorization/protected-branch.d.ts.map +0 -1
- package/dist/authorization/protected-branch.js.map +0 -1
- package/dist/authorization/settings-file-store.d.ts.map +0 -1
- package/dist/authorization/settings-file-store.js.map +0 -1
- package/dist/authorization/test-utils.d.ts +0 -26
- package/dist/authorization/test-utils.d.ts.map +0 -1
- package/dist/authorization/test-utils.js +0 -23
- package/dist/authorization/test-utils.js.map +0 -1
- package/dist/authorization/types.d.ts.map +0 -1
- package/dist/authorization/types.js.map +0 -1
- package/dist/authorization/validation.d.ts.map +0 -1
- package/dist/authorization/validation.js.map +0 -1
- package/dist/branch-health.d.ts.map +0 -1
- package/dist/branch-health.js.map +0 -1
- package/dist/branch-metadata.d.ts.map +0 -1
- package/dist/branch-metadata.js.map +0 -1
- package/dist/branch-registry.d.ts.map +0 -1
- package/dist/branch-registry.js.map +0 -1
- package/dist/branch-schema-cache.d.ts.map +0 -1
- package/dist/branch-schema-cache.js.map +0 -1
- package/dist/branch-workspace.d.ts.map +0 -1
- package/dist/branch-workspace.js.map +0 -1
- package/dist/build/generate-ai-content.d.ts.map +0 -1
- package/dist/build/generate-ai-content.js.map +0 -1
- package/dist/build/index.d.ts.map +0 -1
- package/dist/build/index.js.map +0 -1
- package/dist/build-mode.d.ts.map +0 -1
- package/dist/build-mode.js.map +0 -1
- package/dist/cli/cli.d.ts.map +0 -1
- package/dist/cli/cli.js.map +0 -1
- package/dist/cli/generate-ai-content.d.ts.map +0 -1
- package/dist/cli/generate-ai-content.js.map +0 -1
- package/dist/cli/init.d.ts.map +0 -1
- package/dist/cli/init.js.map +0 -1
- package/dist/cli/migrate.d.ts.map +0 -1
- package/dist/cli/migrate.js.map +0 -1
- package/dist/cli/project-detect.d.ts.map +0 -1
- package/dist/cli/project-detect.js.map +0 -1
- package/dist/cli/project-root.d.ts.map +0 -1
- package/dist/cli/project-root.js.map +0 -1
- package/dist/cli/sync.d.ts.map +0 -1
- package/dist/cli/sync.js.map +0 -1
- package/dist/cli/templates.d.ts.map +0 -1
- package/dist/cli/templates.js.map +0 -1
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js.map +0 -1
- package/dist/comment-store.d.ts.map +0 -1
- package/dist/comment-store.js.map +0 -1
- package/dist/config/flatten.d.ts.map +0 -1
- package/dist/config/flatten.js.map +0 -1
- package/dist/config/helpers.d.ts.map +0 -1
- package/dist/config/helpers.js.map +0 -1
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js.map +0 -1
- package/dist/config/schemas/collection.d.ts.map +0 -1
- package/dist/config/schemas/collection.js.map +0 -1
- package/dist/config/schemas/config.d.ts.map +0 -1
- package/dist/config/schemas/config.js.map +0 -1
- package/dist/config/schemas/field.d.ts.map +0 -1
- package/dist/config/schemas/field.js.map +0 -1
- package/dist/config/schemas/media.d.ts.map +0 -1
- package/dist/config/schemas/media.js.map +0 -1
- package/dist/config/schemas/permissions.d.ts.map +0 -1
- package/dist/config/schemas/permissions.js.map +0 -1
- package/dist/config/types.d.ts.map +0 -1
- package/dist/config/types.js.map +0 -1
- package/dist/config/validation.d.ts.map +0 -1
- package/dist/config/validation.js.map +0 -1
- package/dist/config-test.d.ts +0 -20
- package/dist/config-test.d.ts.map +0 -1
- package/dist/config-test.js +0 -49
- package/dist/config-test.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/content-id-index.d.ts.map +0 -1
- package/dist/content-id-index.js.map +0 -1
- package/dist/content-index-generation.d.ts.map +0 -1
- package/dist/content-index-generation.js.map +0 -1
- package/dist/content-index-registry.d.ts.map +0 -1
- package/dist/content-index-registry.js.map +0 -1
- package/dist/content-listing.d.ts.map +0 -1
- package/dist/content-listing.js.map +0 -1
- package/dist/content-reader.d.ts.map +0 -1
- package/dist/content-reader.js.map +0 -1
- package/dist/content-store.d.ts.map +0 -1
- package/dist/content-store.js.map +0 -1
- package/dist/content-tree.d.ts.map +0 -1
- package/dist/content-tree.js.map +0 -1
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js.map +0 -1
- package/dist/dev-content-watcher.d.ts.map +0 -1
- package/dist/dev-content-watcher.js.map +0 -1
- package/dist/editor/BranchManager.d.ts.map +0 -1
- package/dist/editor/BranchManager.js.map +0 -1
- package/dist/editor/CanopyEditor.d.ts.map +0 -1
- package/dist/editor/CanopyEditor.js.map +0 -1
- package/dist/editor/CanopyEditorPage.d.ts.map +0 -1
- package/dist/editor/CanopyEditorPage.js.map +0 -1
- package/dist/editor/CommentsPanel.d.ts.map +0 -1
- package/dist/editor/CommentsPanel.js.map +0 -1
- package/dist/editor/Editor.d.ts.map +0 -1
- package/dist/editor/Editor.js.map +0 -1
- package/dist/editor/EditorPanes.d.ts.map +0 -1
- package/dist/editor/EditorPanes.js.map +0 -1
- package/dist/editor/EntryNavigator.d.ts.map +0 -1
- package/dist/editor/EntryNavigator.js.map +0 -1
- package/dist/editor/FormRenderer.d.ts.map +0 -1
- package/dist/editor/FormRenderer.js.map +0 -1
- package/dist/editor/GroupManager.d.ts.map +0 -1
- package/dist/editor/GroupManager.js.map +0 -1
- package/dist/editor/PermissionManager.d.ts.map +0 -1
- package/dist/editor/PermissionManager.js.map +0 -1
- package/dist/editor/admin/SystemHealthPanel.d.ts.map +0 -1
- package/dist/editor/admin/SystemHealthPanel.js.map +0 -1
- package/dist/editor/admin/useSystemHealth.d.ts.map +0 -1
- package/dist/editor/admin/useSystemHealth.js.map +0 -1
- package/dist/editor/canopy-path.d.ts.map +0 -1
- package/dist/editor/canopy-path.js.map +0 -1
- package/dist/editor/client-reference-resolver.d.ts.map +0 -1
- package/dist/editor/client-reference-resolver.js.map +0 -1
- package/dist/editor/comments/BranchComments.d.ts.map +0 -1
- package/dist/editor/comments/BranchComments.js.map +0 -1
- package/dist/editor/comments/EntryComments.d.ts.map +0 -1
- package/dist/editor/comments/EntryComments.js.map +0 -1
- package/dist/editor/comments/FieldWrapper.d.ts.map +0 -1
- package/dist/editor/comments/FieldWrapper.js.map +0 -1
- package/dist/editor/comments/InlineCommentThread.d.ts.map +0 -1
- package/dist/editor/comments/InlineCommentThread.js.map +0 -1
- package/dist/editor/comments/ThreadCarousel.d.ts.map +0 -1
- package/dist/editor/comments/ThreadCarousel.js.map +0 -1
- package/dist/editor/components/ConfirmDeleteModal.d.ts.map +0 -1
- package/dist/editor/components/ConfirmDeleteModal.js.map +0 -1
- package/dist/editor/components/EditorFooter.d.ts.map +0 -1
- package/dist/editor/components/EditorFooter.js.map +0 -1
- package/dist/editor/components/EditorHeader.d.ts.map +0 -1
- package/dist/editor/components/EditorHeader.js.map +0 -1
- package/dist/editor/components/EditorSidebar.d.ts.map +0 -1
- package/dist/editor/components/EditorSidebar.js.map +0 -1
- package/dist/editor/components/EntryCreateModal.d.ts.map +0 -1
- package/dist/editor/components/EntryCreateModal.js.map +0 -1
- package/dist/editor/components/RenameEntryModal.d.ts.map +0 -1
- package/dist/editor/components/RenameEntryModal.js.map +0 -1
- package/dist/editor/components/UserBadge.d.ts.map +0 -1
- package/dist/editor/components/UserBadge.js.map +0 -1
- package/dist/editor/components/index.d.ts.map +0 -1
- package/dist/editor/components/index.js.map +0 -1
- package/dist/editor/context/ApiClientContext.d.ts.map +0 -1
- package/dist/editor/context/ApiClientContext.js.map +0 -1
- package/dist/editor/context/AssetContext.d.ts.map +0 -1
- package/dist/editor/context/AssetContext.js.map +0 -1
- package/dist/editor/context/EditorStateContext.d.ts.map +0 -1
- package/dist/editor/context/EditorStateContext.js.map +0 -1
- package/dist/editor/context/SWRProvider.d.ts.map +0 -1
- package/dist/editor/context/SWRProvider.js.map +0 -1
- package/dist/editor/context/index.d.ts.map +0 -1
- package/dist/editor/context/index.js.map +0 -1
- package/dist/editor/editor-config.d.ts.map +0 -1
- package/dist/editor/editor-config.js.map +0 -1
- package/dist/editor/editor-utils.d.ts.map +0 -1
- package/dist/editor/editor-utils.js.map +0 -1
- package/dist/editor/fields/BlockField.d.ts.map +0 -1
- package/dist/editor/fields/BlockField.js.map +0 -1
- package/dist/editor/fields/CodeField.d.ts.map +0 -1
- package/dist/editor/fields/CodeField.js.map +0 -1
- package/dist/editor/fields/DateTimeField.d.ts.map +0 -1
- package/dist/editor/fields/DateTimeField.js.map +0 -1
- package/dist/editor/fields/ImageField.d.ts.map +0 -1
- package/dist/editor/fields/ImageField.js.map +0 -1
- package/dist/editor/fields/InlineGroupField.d.ts.map +0 -1
- package/dist/editor/fields/InlineGroupField.js.map +0 -1
- package/dist/editor/fields/MarkdownField.d.ts.map +0 -1
- package/dist/editor/fields/MarkdownField.js.map +0 -1
- package/dist/editor/fields/MdxImageDialog.d.ts.map +0 -1
- package/dist/editor/fields/MdxImageDialog.js.map +0 -1
- package/dist/editor/fields/NumberField.d.ts.map +0 -1
- package/dist/editor/fields/NumberField.js.map +0 -1
- package/dist/editor/fields/NumberListField.d.ts.map +0 -1
- package/dist/editor/fields/NumberListField.js.map +0 -1
- package/dist/editor/fields/ObjectField.d.ts.map +0 -1
- package/dist/editor/fields/ObjectField.js.map +0 -1
- package/dist/editor/fields/ReferenceField.d.ts.map +0 -1
- package/dist/editor/fields/ReferenceField.js.map +0 -1
- package/dist/editor/fields/SelectField.d.ts.map +0 -1
- package/dist/editor/fields/SelectField.js.map +0 -1
- package/dist/editor/fields/StringListField.d.ts.map +0 -1
- package/dist/editor/fields/StringListField.js.map +0 -1
- package/dist/editor/fields/TextField.d.ts.map +0 -1
- package/dist/editor/fields/TextField.js.map +0 -1
- package/dist/editor/fields/ToggleField.d.ts.map +0 -1
- package/dist/editor/fields/ToggleField.js.map +0 -1
- package/dist/editor/fields/entry-link/EntryLinkContext.d.ts.map +0 -1
- package/dist/editor/fields/entry-link/EntryLinkContext.js.map +0 -1
- package/dist/editor/fields/entry-link/InsertEntryLink.d.ts.map +0 -1
- package/dist/editor/fields/entry-link/InsertEntryLink.js.map +0 -1
- package/dist/editor/fields/entry-link/index.d.ts.map +0 -1
- package/dist/editor/fields/entry-link/index.js.map +0 -1
- package/dist/editor/group-manager/ExternalGroupsTab.d.ts.map +0 -1
- package/dist/editor/group-manager/ExternalGroupsTab.js.map +0 -1
- package/dist/editor/group-manager/GroupCard.d.ts.map +0 -1
- package/dist/editor/group-manager/GroupCard.js.map +0 -1
- package/dist/editor/group-manager/GroupForm.d.ts.map +0 -1
- package/dist/editor/group-manager/GroupForm.js.map +0 -1
- package/dist/editor/group-manager/InternalGroupsTab.d.ts.map +0 -1
- package/dist/editor/group-manager/InternalGroupsTab.js.map +0 -1
- package/dist/editor/group-manager/MemberList.d.ts.map +0 -1
- package/dist/editor/group-manager/MemberList.js.map +0 -1
- package/dist/editor/group-manager/hooks/useExternalGroupSearch.d.ts.map +0 -1
- package/dist/editor/group-manager/hooks/useExternalGroupSearch.js.map +0 -1
- package/dist/editor/group-manager/hooks/useGroupState.d.ts.map +0 -1
- package/dist/editor/group-manager/hooks/useGroupState.js.map +0 -1
- package/dist/editor/group-manager/hooks/useUserSearch.d.ts.map +0 -1
- package/dist/editor/group-manager/hooks/useUserSearch.js.map +0 -1
- package/dist/editor/group-manager/index.d.ts.map +0 -1
- package/dist/editor/group-manager/index.js.map +0 -1
- package/dist/editor/group-manager/types.d.ts.map +0 -1
- package/dist/editor/group-manager/types.js.map +0 -1
- package/dist/editor/hooks/__test__/test-utils.d.ts +0 -164
- package/dist/editor/hooks/__test__/test-utils.d.ts.map +0 -1
- package/dist/editor/hooks/__test__/test-utils.js +0 -203
- package/dist/editor/hooks/__test__/test-utils.js.map +0 -1
- package/dist/editor/hooks/index.d.ts.map +0 -1
- package/dist/editor/hooks/index.js.map +0 -1
- package/dist/editor/hooks/useBranchActions.d.ts.map +0 -1
- package/dist/editor/hooks/useBranchActions.js.map +0 -1
- package/dist/editor/hooks/useBranchManager.d.ts.map +0 -1
- package/dist/editor/hooks/useBranchManager.js.map +0 -1
- package/dist/editor/hooks/useBranchesData.d.ts.map +0 -1
- package/dist/editor/hooks/useBranchesData.js.map +0 -1
- package/dist/editor/hooks/useCommentSystem.d.ts.map +0 -1
- package/dist/editor/hooks/useCommentSystem.js.map +0 -1
- package/dist/editor/hooks/useCommentsData.d.ts.map +0 -1
- package/dist/editor/hooks/useCommentsData.js.map +0 -1
- package/dist/editor/hooks/useDraftManager.d.ts.map +0 -1
- package/dist/editor/hooks/useDraftManager.js.map +0 -1
- package/dist/editor/hooks/useEditorLayout.d.ts.map +0 -1
- package/dist/editor/hooks/useEditorLayout.js.map +0 -1
- package/dist/editor/hooks/useEntriesData.d.ts.map +0 -1
- package/dist/editor/hooks/useEntriesData.js.map +0 -1
- package/dist/editor/hooks/useEntryLinkResolution.d.ts.map +0 -1
- package/dist/editor/hooks/useEntryLinkResolution.js.map +0 -1
- package/dist/editor/hooks/useEntryManager.d.ts.map +0 -1
- package/dist/editor/hooks/useEntryManager.js.map +0 -1
- package/dist/editor/hooks/useGroupManager.d.ts.map +0 -1
- package/dist/editor/hooks/useGroupManager.js.map +0 -1
- package/dist/editor/hooks/usePermissionManager.d.ts.map +0 -1
- package/dist/editor/hooks/usePermissionManager.js.map +0 -1
- package/dist/editor/hooks/useReferenceResolution.d.ts.map +0 -1
- package/dist/editor/hooks/useReferenceResolution.js.map +0 -1
- package/dist/editor/hooks/useSchemaManager.d.ts.map +0 -1
- package/dist/editor/hooks/useSchemaManager.js.map +0 -1
- package/dist/editor/hooks/useUserContext.d.ts.map +0 -1
- package/dist/editor/hooks/useUserContext.js.map +0 -1
- package/dist/editor/hooks/useUserMetadata.d.ts.map +0 -1
- package/dist/editor/hooks/useUserMetadata.js.map +0 -1
- package/dist/editor/media/AssetCard.d.ts.map +0 -1
- package/dist/editor/media/AssetCard.js.map +0 -1
- package/dist/editor/media/CropStep.d.ts.map +0 -1
- package/dist/editor/media/CropStep.js.map +0 -1
- package/dist/editor/media/MediaLibrary.d.ts.map +0 -1
- package/dist/editor/media/MediaLibrary.js.map +0 -1
- package/dist/editor/media/MediaLibraryBody.d.ts.map +0 -1
- package/dist/editor/media/MediaLibraryBody.js.map +0 -1
- package/dist/editor/media/crop-math.d.ts.map +0 -1
- package/dist/editor/media/crop-math.js.map +0 -1
- package/dist/editor/media/upload-asset.d.ts.map +0 -1
- package/dist/editor/media/upload-asset.js.map +0 -1
- package/dist/editor/media/upload-constants.d.ts.map +0 -1
- package/dist/editor/media/upload-constants.js.map +0 -1
- package/dist/editor/media/useAssetUpload.d.ts.map +0 -1
- package/dist/editor/media/useAssetUpload.js.map +0 -1
- package/dist/editor/media/xhr-upload.d.ts.map +0 -1
- package/dist/editor/media/xhr-upload.js.map +0 -1
- package/dist/editor/permission-manager/GroupSelector.d.ts.map +0 -1
- package/dist/editor/permission-manager/GroupSelector.js.map +0 -1
- package/dist/editor/permission-manager/PermissionEditor.d.ts.map +0 -1
- package/dist/editor/permission-manager/PermissionEditor.js.map +0 -1
- package/dist/editor/permission-manager/PermissionLevelBadge.d.ts.map +0 -1
- package/dist/editor/permission-manager/PermissionLevelBadge.js.map +0 -1
- package/dist/editor/permission-manager/PermissionTree.d.ts.map +0 -1
- package/dist/editor/permission-manager/PermissionTree.js.map +0 -1
- package/dist/editor/permission-manager/UserSelector.d.ts.map +0 -1
- package/dist/editor/permission-manager/UserSelector.js.map +0 -1
- package/dist/editor/permission-manager/constants.d.ts.map +0 -1
- package/dist/editor/permission-manager/constants.js.map +0 -1
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts.map +0 -1
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js.map +0 -1
- package/dist/editor/permission-manager/hooks/usePermissionTree.d.ts.map +0 -1
- package/dist/editor/permission-manager/hooks/usePermissionTree.js.map +0 -1
- package/dist/editor/permission-manager/index.d.ts.map +0 -1
- package/dist/editor/permission-manager/index.js.map +0 -1
- package/dist/editor/permission-manager/types.d.ts.map +0 -1
- package/dist/editor/permission-manager/types.js.map +0 -1
- package/dist/editor/permission-manager/utils.d.ts.map +0 -1
- package/dist/editor/permission-manager/utils.js.map +0 -1
- package/dist/editor/preview-bridge.d.ts.map +0 -1
- package/dist/editor/preview-bridge.js.map +0 -1
- package/dist/editor/relative-time.d.ts.map +0 -1
- package/dist/editor/relative-time.js.map +0 -1
- package/dist/editor/schema-editor/CollectionEditor.d.ts.map +0 -1
- package/dist/editor/schema-editor/CollectionEditor.js.map +0 -1
- package/dist/editor/schema-editor/EntryTypeEditor.d.ts.map +0 -1
- package/dist/editor/schema-editor/EntryTypeEditor.js.map +0 -1
- package/dist/editor/schema-editor/index.d.ts.map +0 -1
- package/dist/editor/schema-editor/index.js.map +0 -1
- package/dist/editor/setup-test-dom.d.ts +0 -1
- package/dist/editor/setup-test-dom.d.ts.map +0 -1
- package/dist/editor/setup-test-dom.js +0 -12
- package/dist/editor/setup-test-dom.js.map +0 -1
- package/dist/editor/test-setup.d.ts +0 -6
- package/dist/editor/test-setup.d.ts.map +0 -1
- package/dist/editor/test-setup.js +0 -42
- package/dist/editor/test-setup.js.map +0 -1
- package/dist/editor/theme.d.ts.map +0 -1
- package/dist/editor/theme.js.map +0 -1
- package/dist/editor/utils/env.d.ts.map +0 -1
- package/dist/editor/utils/env.js.map +0 -1
- package/dist/entry-link-resolver.d.ts.map +0 -1
- package/dist/entry-link-resolver.js.map +0 -1
- package/dist/entry-schema-registry.d.ts.map +0 -1
- package/dist/entry-schema-registry.js.map +0 -1
- package/dist/entry-schema.d.ts.map +0 -1
- package/dist/entry-schema.js.map +0 -1
- package/dist/git-manager.d.ts.map +0 -1
- package/dist/git-manager.js.map +0 -1
- package/dist/github-service.d.ts.map +0 -1
- package/dist/github-service.js.map +0 -1
- package/dist/http/handler.d.ts.map +0 -1
- package/dist/http/handler.js.map +0 -1
- package/dist/http/index.d.ts.map +0 -1
- package/dist/http/index.js.map +0 -1
- package/dist/http/router.d.ts.map +0 -1
- package/dist/http/router.js.map +0 -1
- package/dist/http/types.d.ts.map +0 -1
- package/dist/http/types.js.map +0 -1
- package/dist/id.d.ts.map +0 -1
- package/dist/id.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/operating-mode/client-safe-strategy.d.ts.map +0 -1
- package/dist/operating-mode/client-safe-strategy.js.map +0 -1
- package/dist/operating-mode/client-unsafe-strategy.d.ts.map +0 -1
- package/dist/operating-mode/client-unsafe-strategy.js.map +0 -1
- package/dist/operating-mode/client.d.ts.map +0 -1
- package/dist/operating-mode/client.js.map +0 -1
- package/dist/operating-mode/deployment-name-fixtures.d.ts.map +0 -1
- package/dist/operating-mode/deployment-name-fixtures.js.map +0 -1
- package/dist/operating-mode/deployment-name.d.ts.map +0 -1
- package/dist/operating-mode/deployment-name.js.map +0 -1
- package/dist/operating-mode/index.d.ts.map +0 -1
- package/dist/operating-mode/index.js.map +0 -1
- package/dist/operating-mode/mode-env.d.ts.map +0 -1
- package/dist/operating-mode/mode-env.js.map +0 -1
- package/dist/operating-mode/types.d.ts.map +0 -1
- package/dist/operating-mode/types.js.map +0 -1
- package/dist/paths/branch-name.d.ts.map +0 -1
- package/dist/paths/branch-name.js.map +0 -1
- package/dist/paths/branch.d.ts.map +0 -1
- package/dist/paths/branch.js.map +0 -1
- package/dist/paths/index.d.ts.map +0 -1
- package/dist/paths/index.js.map +0 -1
- package/dist/paths/normalize-server.d.ts.map +0 -1
- package/dist/paths/normalize-server.js.map +0 -1
- package/dist/paths/normalize.d.ts.map +0 -1
- package/dist/paths/normalize.js.map +0 -1
- package/dist/paths/resolve.d.ts.map +0 -1
- package/dist/paths/resolve.js.map +0 -1
- package/dist/paths/test-utils.d.ts +0 -22
- package/dist/paths/test-utils.d.ts.map +0 -1
- package/dist/paths/test-utils.js +0 -21
- package/dist/paths/test-utils.js.map +0 -1
- package/dist/paths/types.d.ts.map +0 -1
- package/dist/paths/types.js.map +0 -1
- package/dist/paths/validation.d.ts.map +0 -1
- package/dist/paths/validation.js.map +0 -1
- package/dist/reference-resolver.d.ts.map +0 -1
- package/dist/reference-resolver.js.map +0 -1
- package/dist/resolve-canopy-user.d.ts.map +0 -1
- package/dist/resolve-canopy-user.js.map +0 -1
- package/dist/resource-generation.d.ts.map +0 -1
- package/dist/resource-generation.js.map +0 -1
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/meta-loader.d.ts.map +0 -1
- package/dist/schema/meta-loader.js.map +0 -1
- package/dist/schema/resolver.d.ts.map +0 -1
- package/dist/schema/resolver.js.map +0 -1
- package/dist/schema/schema-store-types.d.ts.map +0 -1
- package/dist/schema/schema-store-types.js.map +0 -1
- package/dist/schema/schema-store.d.ts.map +0 -1
- package/dist/schema/schema-store.js.map +0 -1
- package/dist/schema/types.d.ts.map +0 -1
- package/dist/schema/types.js.map +0 -1
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/services.d.ts.map +0 -1
- package/dist/services.js.map +0 -1
- package/dist/settings-workspace.d.ts.map +0 -1
- package/dist/settings-workspace.js.map +0 -1
- package/dist/static/index.d.ts.map +0 -1
- package/dist/static/index.js.map +0 -1
- package/dist/sync-core.d.ts.map +0 -1
- package/dist/sync-core.js.map +0 -1
- package/dist/task-queue/index.d.ts.map +0 -1
- package/dist/task-queue/index.js.map +0 -1
- package/dist/task-queue/task-queue.d.ts.map +0 -1
- package/dist/task-queue/task-queue.js.map +0 -1
- package/dist/task-queue/types.d.ts.map +0 -1
- package/dist/task-queue/types.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/url-path-resolver.d.ts.map +0 -1
- package/dist/url-path-resolver.js.map +0 -1
- package/dist/user.d.ts.map +0 -1
- package/dist/user.js.map +0 -1
- package/dist/utils/async-mutex.d.ts.map +0 -1
- package/dist/utils/async-mutex.js.map +0 -1
- package/dist/utils/atomic-write.d.ts.map +0 -1
- package/dist/utils/atomic-write.js.map +0 -1
- package/dist/utils/body-field.d.ts.map +0 -1
- package/dist/utils/body-field.js.map +0 -1
- package/dist/utils/content-write-lock.d.ts.map +0 -1
- package/dist/utils/content-write-lock.js.map +0 -1
- package/dist/utils/debug.d.ts.map +0 -1
- package/dist/utils/debug.js.map +0 -1
- package/dist/utils/entry-url.d.ts.map +0 -1
- package/dist/utils/entry-url.js.map +0 -1
- package/dist/utils/error.d.ts.map +0 -1
- package/dist/utils/error.js.map +0 -1
- package/dist/utils/flatten-group-fields.d.ts.map +0 -1
- package/dist/utils/flatten-group-fields.js.map +0 -1
- package/dist/utils/format.d.ts.map +0 -1
- package/dist/utils/format.js.map +0 -1
- package/dist/utils/fs.d.ts.map +0 -1
- package/dist/utils/fs.js.map +0 -1
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/occ-json-write.d.ts.map +0 -1
- package/dist/utils/occ-json-write.js.map +0 -1
- package/dist/utils/provisioning-lock.d.ts.map +0 -1
- package/dist/utils/provisioning-lock.js.map +0 -1
- package/dist/utils/sanitize-href.d.ts.map +0 -1
- package/dist/utils/sanitize-href.js.map +0 -1
- package/dist/utils/title-field.d.ts.map +0 -1
- package/dist/utils/title-field.js.map +0 -1
- package/dist/validation/deletion-checker.d.ts.map +0 -1
- package/dist/validation/deletion-checker.js.map +0 -1
- package/dist/validation/entry-link-validator.d.ts.map +0 -1
- package/dist/validation/entry-link-validator.js.map +0 -1
- package/dist/validation/entry-type-reference-validator.d.ts.map +0 -1
- package/dist/validation/entry-type-reference-validator.js.map +0 -1
- package/dist/validation/entry-validator.d.ts.map +0 -1
- package/dist/validation/entry-validator.js.map +0 -1
- package/dist/validation/field-traversal.d.ts.map +0 -1
- package/dist/validation/field-traversal.js.map +0 -1
- package/dist/validation/reference-validator.d.ts.map +0 -1
- package/dist/validation/reference-validator.js.map +0 -1
- package/dist/worker/cms-worker.d.ts.map +0 -1
- package/dist/worker/cms-worker.js.map +0 -1
- package/dist/worker/log.d.ts.map +0 -1
- package/dist/worker/log.js.map +0 -1
- package/dist/worker/task-queue-config.d.ts.map +0 -1
- package/dist/worker/task-queue-config.js.map +0 -1
- package/dist/worker/task-queue.d.ts.map +0 -1
- package/dist/worker/task-queue.js.map +0 -1
- package/dist/worker/worker-status.d.ts.map +0 -1
- package/dist/worker/worker-status.js.map +0 -1
package/dist/content-tree.js
CHANGED
|
@@ -8,7 +8,11 @@
|
|
|
8
8
|
* metadata, entry metadata). Display concerns like labels are left to the
|
|
9
9
|
* adopter via the `extract` callback.
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
11
|
+
import { isIndexSlug } from './utils/entry-url.js';
|
|
12
|
+
import { createReferenceResolver, listCollectionEntries, resolveCollectionItemReferences, sortByOrder, } from './content-listing.js';
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Internal helpers
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
12
16
|
/** Group flat schema items by parentPath for O(1) child lookup. */
|
|
13
17
|
const groupByParent = (flat) => {
|
|
14
18
|
const map = new Map();
|
|
@@ -27,19 +31,31 @@ const groupByParent = (flat) => {
|
|
|
27
31
|
* All URL paths are lowercased unconditionally for consistency with slug normalization.
|
|
28
32
|
* Adopters with case-sensitive slugs (e.g., "API-Reference") will get lowercased URLs.
|
|
29
33
|
*
|
|
30
|
-
* Index entries (slug 'index') are collapsed to their parent collection path,
|
|
34
|
+
* Index entries (slug 'index', any case) are collapsed to their parent collection path,
|
|
31
35
|
* matching the URL convention used by readByUrlPath and listEntries.
|
|
36
|
+
*
|
|
37
|
+
* Exported (also re-exported from `canopycms/server`) so adopters who want to
|
|
38
|
+
* EXTEND this behavior rather than replace it can call it from inside their own
|
|
39
|
+
* `buildPath` and post-process the result, instead of reimplementing the
|
|
40
|
+
* content-root-strip / index-collapse / lowercase logic verbatim.
|
|
32
41
|
*/
|
|
33
|
-
const defaultBuildPath = (logicalPath, contentRootName, kind) => {
|
|
42
|
+
export const defaultBuildPath = (logicalPath, contentRootName, kind) => {
|
|
34
43
|
const prefix = contentRootName ? `${contentRootName}/` : '';
|
|
35
44
|
const stripped = prefix && logicalPath.startsWith(prefix) ? logicalPath.slice(prefix.length) : logicalPath;
|
|
36
45
|
// Collapse index entries: content/guides/index → /guides (not /guides/index)
|
|
37
46
|
// Only for entries — a collection named "index" should keep its path.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
47
|
+
//
|
|
48
|
+
// The index test runs on the LAST SEGMENT through the shared `isIndexSlug`, so it is
|
|
49
|
+
// case-insensitive and agrees with `computeEntryUrl`. A string `endsWith('/index')` test
|
|
50
|
+
// did not: for an adopter-supplied `content/docs/Index` this said `/docs/index` while
|
|
51
|
+
// `computeEntryUrl` said `/docs`, and `/docs/index` is the one that does NOT round-trip.
|
|
52
|
+
const lastSlash = stripped.lastIndexOf('/');
|
|
53
|
+
const lastSegment = lastSlash === -1 ? stripped : stripped.slice(lastSlash + 1);
|
|
54
|
+
const collapsed = kind === 'entry' && isIndexSlug(lastSegment)
|
|
55
|
+
? lastSlash === -1
|
|
41
56
|
? ''
|
|
42
|
-
: stripped
|
|
57
|
+
: stripped.slice(0, lastSlash)
|
|
58
|
+
: stripped;
|
|
43
59
|
const urlPath = collapsed ? `/${collapsed}` : '/';
|
|
44
60
|
return urlPath.toLowerCase();
|
|
45
61
|
};
|
|
@@ -53,14 +69,35 @@ const defaultBuildPath = (logicalPath, contentRootName, kind) => {
|
|
|
53
69
|
* @param flatSchema - Flattened schema items (from flattenSchema)
|
|
54
70
|
* @param contentRootName - The content root name (e.g. "content")
|
|
55
71
|
* @param options - Tree-building options
|
|
72
|
+
* @param visibility - Internal path-ACL predicate; see `ContentVisibilityOptions`
|
|
56
73
|
*/
|
|
57
|
-
export async function buildContentTree(branchRoot, flatSchema, contentRootName, options) {
|
|
74
|
+
export async function buildContentTree(branchRoot, flatSchema, contentRootName, options, visibility) {
|
|
58
75
|
const childrenByParent = groupByParent(flatSchema);
|
|
59
76
|
const extract = options?.extract;
|
|
60
77
|
const filter = options?.filter;
|
|
61
78
|
const buildPath = options?.buildPath ?? ((lp, kind) => defaultBuildPath(lp, contentRootName, kind));
|
|
62
79
|
const customSort = options?.sort;
|
|
63
80
|
const maxDepth = options?.maxDepth;
|
|
81
|
+
/**
|
|
82
|
+
* Every entry read in this tree goes through here, so a denied entry is invisible to
|
|
83
|
+
* BOTH the entry nodes and the `indexEntry` surfaced to a collection's `extract` —
|
|
84
|
+
* the latter would otherwise hand a denied index entry's full `data` to the caller
|
|
85
|
+
* even though no node for it is ever emitted.
|
|
86
|
+
*/
|
|
87
|
+
const shouldInclude = visibility?.shouldInclude;
|
|
88
|
+
// One store + cache for the whole recursive walk, so a block shared across collections is
|
|
89
|
+
// read once for the entire tree rather than once per collection. Null unless opted in —
|
|
90
|
+
// see the `resolveReferences` option above.
|
|
91
|
+
const resolver = options?.resolveReferences
|
|
92
|
+
? createReferenceResolver(branchRoot, flatSchema, contentRootName)
|
|
93
|
+
: null;
|
|
94
|
+
const listVisibleEntries = async (collection) => {
|
|
95
|
+
const entries = await listCollectionEntries(branchRoot, collection);
|
|
96
|
+
const visible = shouldInclude ? entries.filter((e) => shouldInclude(e.physicalPath)) : entries;
|
|
97
|
+
// Resolved here rather than at the two node-building sites so BOTH inherit it — the same
|
|
98
|
+
// reason the ACL filter lives here. A denied entry is filtered above and never resolved.
|
|
99
|
+
return resolver ? resolveCollectionItemReferences(visible, collection, resolver) : visible;
|
|
100
|
+
};
|
|
64
101
|
// Find the starting collection(s)
|
|
65
102
|
const rootPath = options?.rootPath ?? contentRootName;
|
|
66
103
|
const rootCollection = flatSchema.find((item) => item.type === 'collection' && item.logicalPath === rootPath);
|
|
@@ -99,7 +136,7 @@ export async function buildContentTree(branchRoot, flatSchema, contentRootName,
|
|
|
99
136
|
// if `filter` rejects this collection, returning early short-circuits all
|
|
100
137
|
// descendant I/O — preserving the pre-existing "filter prunes whole subtree"
|
|
101
138
|
// optimization that the directory-as-page reorder would otherwise lose.
|
|
102
|
-
const entries = await
|
|
139
|
+
const entries = await listVisibleEntries(collection);
|
|
103
140
|
// Surface the 'index' entry (when present) to extract via meta.
|
|
104
141
|
// 'index' is the same magic slug Canopy uses in defaultBuildPath to collapse
|
|
105
142
|
// /foo/index URLs to /foo/, keeping conventions consistent. If a collection
|
|
@@ -143,7 +180,7 @@ export async function buildContentTree(branchRoot, flatSchema, contentRootName,
|
|
|
143
180
|
// Also get entries directly in the root collection
|
|
144
181
|
const [collectionNodes, rootEntries] = await Promise.all([
|
|
145
182
|
Promise.all(topLevelCollections.map((child) => buildNode(child, 1))),
|
|
146
|
-
|
|
183
|
+
listVisibleEntries(rootCollection),
|
|
147
184
|
]);
|
|
148
185
|
const rootEntryNodes = [];
|
|
149
186
|
for (const entry of rootEntries) {
|
|
@@ -192,4 +229,3 @@ function interleaveChildren(collectionNodes, entryNodes, order, customSort) {
|
|
|
192
229
|
}
|
|
193
230
|
return sortByOrder(all, order, (item) => item.kind === 'collection' ? (item.collection?.name ?? '') : (item.entry?.slug ?? ''));
|
|
194
231
|
}
|
|
195
|
-
//# sourceMappingURL=content-tree.js.map
|
package/dist/context.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { CanopyUser } from './user';
|
|
2
|
-
import type { CanopyServices } from './services';
|
|
3
|
-
import {
|
|
4
|
-
import { type BuildContentTreeOptions, type ContentTreeNode, type DefaultEntryTypes } from './content-tree';
|
|
5
|
-
import { type ListEntriesOptions, type ListEntriesItem } from './content-listing';
|
|
1
|
+
import type { CanopyUser } from './user.js';
|
|
2
|
+
import type { CanopyServices } from './services.js';
|
|
3
|
+
import type { ContentReadMeta } from './content-reader.js';
|
|
4
|
+
import { type BuildContentTreeOptions, type ContentTreeNode, type DefaultEntryTypes } from './content-tree.js';
|
|
5
|
+
import { type ListEntriesOptions, type ListEntriesItem } from './content-listing.js';
|
|
6
6
|
export interface CanopyContextOptions {
|
|
7
7
|
services: CanopyServices;
|
|
8
8
|
/**
|
|
@@ -33,9 +33,25 @@ export interface CanopyBuildContext {
|
|
|
33
33
|
* Supply TEntryTypes (a map of entry type name → data shape, typically
|
|
34
34
|
* derived via `TypeFromEntrySchema<typeof yourSchema>`) to get narrowed
|
|
35
35
|
* access to `meta.indexEntry.data` inside the `extract` callback.
|
|
36
|
+
*
|
|
37
|
+
* Path ACLs: on the request-scoped context (`getCanopy()`), entries the current user
|
|
38
|
+
* cannot `read` are omitted — from the emitted nodes AND from the `meta.indexEntry`
|
|
39
|
+
* handed to `extract`. Collections whose children are all filtered out are pruned.
|
|
40
|
+
* On the build context, and on static deployments, nothing is filtered (synthetic admin).
|
|
36
41
|
*/
|
|
37
42
|
buildContentTree: <T = unknown, TEntryTypes = DefaultEntryTypes>(options?: BuildContentTreeOptions<T, TEntryTypes>) => Promise<ContentTreeNode<T>[]>;
|
|
38
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* List all content entries as a flat array.
|
|
45
|
+
*
|
|
46
|
+
* Path ACLs: on the request-scoped context (`getCanopy()`), entries the current user
|
|
47
|
+
* cannot `read` are omitted before `extract` runs. On the build context, and on static
|
|
48
|
+
* deployments, nothing is filtered (synthetic admin).
|
|
49
|
+
*
|
|
50
|
+
* Branch: unlike `read`/`readByUrlPath`, this takes no `branch` option — it always lists
|
|
51
|
+
* `defaultActiveBranch ?? defaultBaseBranch ?? 'main'`. In `dev` that tracks the git HEAD
|
|
52
|
+
* via `refreshActiveBranch()`; in `prod` that refresh is a no-op, so this always reads the
|
|
53
|
+
* base branch. See `.claude/future-tasks/context-listing-branch-pinning.md`.
|
|
54
|
+
*/
|
|
39
55
|
listEntries: <T = Record<string, unknown>>(options?: ListEntriesOptions<T>) => Promise<ListEntriesItem<T>[]>;
|
|
40
56
|
/**
|
|
41
57
|
* Content reader (auth context applied automatically — admin at build time).
|
|
@@ -54,9 +70,7 @@ export interface CanopyBuildContext {
|
|
|
54
70
|
}) => Promise<{
|
|
55
71
|
data: T;
|
|
56
72
|
path: string;
|
|
57
|
-
meta:
|
|
58
|
-
physicalPath: PhysicalPath;
|
|
59
|
-
};
|
|
73
|
+
meta: ContentReadMeta;
|
|
60
74
|
}>;
|
|
61
75
|
/**
|
|
62
76
|
* Read content by URL path, resolving the collection/entry split automatically.
|
|
@@ -64,6 +78,10 @@ export interface CanopyBuildContext {
|
|
|
64
78
|
* Tries direct entry match first (last segment = slug, rest = collection path),
|
|
65
79
|
* then falls back to index entry (full path = collection, slug = 'index').
|
|
66
80
|
* Root path '/' resolves to the content root's index entry.
|
|
81
|
+
*
|
|
82
|
+
* The direct-entry attempt is SKIPPED when the last segment is an index slug (any case), so
|
|
83
|
+
* `/x/index` returns null rather than a second URL for the entry that already answers at `/x`.
|
|
84
|
+
* A collection literally named `index` is unaffected — the fallback resolves it.
|
|
67
85
|
* Returns null if no content matches the path — including collection URLs that have no
|
|
68
86
|
* index entry (use buildContentTree for those) and non-entry/invalid paths such as
|
|
69
87
|
* `/favicon.ico` or Next internals (the slug validator rejects them, treated as a miss).
|
|
@@ -76,6 +94,12 @@ export interface CanopyBuildContext {
|
|
|
76
94
|
* in public output, as it reveals the deployment's filesystem layout (home dir / EFS
|
|
77
95
|
* mount / branch name). Intended for build-time reads of colocated artifacts.
|
|
78
96
|
*
|
|
97
|
+
* `meta.entryType` and `meta.entryId` are also resolved for free (path resolution
|
|
98
|
+
* already derives them) — useful for entry-type-based dispatch in a single
|
|
99
|
+
* catch-all route without a separate `listEntries` lookup or filename parse. See
|
|
100
|
+
* `ContentReadMeta` (content-reader.ts) before branching on `entryType` for a legacy
|
|
101
|
+
* file: `entryId === undefined` signals that `entryType` is a fallback, not a read.
|
|
102
|
+
*
|
|
79
103
|
* @example
|
|
80
104
|
* ```ts
|
|
81
105
|
* // URL /docs/guides/getting-started → reads content/docs/guides + slug "getting-started"
|
|
@@ -84,8 +108,10 @@ export interface CanopyBuildContext {
|
|
|
84
108
|
* const result = await canopy.readByUrlPath<DocContent>('/docs/guides/getting-started')
|
|
85
109
|
* if (result) {
|
|
86
110
|
* const { data, path } = result
|
|
87
|
-
*
|
|
88
|
-
*
|
|
111
|
+
* switch (result.meta.entryType) {
|
|
112
|
+
* case 'home': return <HomePage data={data} />
|
|
113
|
+
* default: return <DocView data={data} />
|
|
114
|
+
* }
|
|
89
115
|
* }
|
|
90
116
|
* ```
|
|
91
117
|
*/
|
|
@@ -95,9 +121,7 @@ export interface CanopyBuildContext {
|
|
|
95
121
|
}) => Promise<{
|
|
96
122
|
data: T;
|
|
97
123
|
path: string;
|
|
98
|
-
meta:
|
|
99
|
-
physicalPath: PhysicalPath;
|
|
100
|
-
};
|
|
124
|
+
meta: ContentReadMeta;
|
|
101
125
|
} | null>;
|
|
102
126
|
/** Underlying services */
|
|
103
127
|
services: CanopyServices;
|
|
@@ -121,4 +145,3 @@ export declare function createCanopyContext(options: CanopyContextOptions): {
|
|
|
121
145
|
getContext: () => Promise<CanopyContext>;
|
|
122
146
|
services: CanopyServices;
|
|
123
147
|
};
|
|
124
|
-
//# sourceMappingURL=context.d.ts.map
|
package/dist/context.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isDeployedStatic, isBuildMode, STATIC_DEPLOY_USER } from './build-mode.js';
|
|
2
2
|
import { createContentReader } from './content-reader.js';
|
|
3
3
|
import { ContentStoreError } from './content-store.js';
|
|
4
|
-
import { createLogicalPath, parseSlug, resolveBranchPaths
|
|
4
|
+
import { createLogicalPath, parseSlug, resolveBranchPaths } from './paths/index.js';
|
|
5
5
|
import { resolveUrlPathCandidates } from './url-path-resolver.js';
|
|
6
6
|
import { loadOrCreateBranchContext } from './branch-workspace.js';
|
|
7
7
|
import { buildContentTree as buildContentTreeImpl, } from './content-tree.js';
|
|
@@ -135,7 +135,7 @@ export function createCanopyContext(options) {
|
|
|
135
135
|
const { branchRoot } = resolveBranchPaths(branchContext, operatingMode);
|
|
136
136
|
const contentRootName = services.config.contentRoot || 'content';
|
|
137
137
|
const { flatSchema } = await services.branchSchemaCache.getSchema(branchRoot, services.entrySchemaRegistry, contentRootName);
|
|
138
|
-
return { branchRoot, flatSchema, contentRootName };
|
|
138
|
+
return { branchContext, branchRoot, flatSchema, contentRootName };
|
|
139
139
|
};
|
|
140
140
|
const resolveSchemaContext = () => {
|
|
141
141
|
if (!schemaContextPromise) {
|
|
@@ -143,13 +143,64 @@ export function createCanopyContext(options) {
|
|
|
143
143
|
}
|
|
144
144
|
return schemaContextPromise;
|
|
145
145
|
};
|
|
146
|
+
/**
|
|
147
|
+
* Path-ACL predicate for the batch reads (listEntries / buildContentTree). Memoized
|
|
148
|
+
* per getContext call, like the schema context above.
|
|
149
|
+
*
|
|
150
|
+
* These two are the only content reads on this context that did NOT enforce path
|
|
151
|
+
* permissions: `read`/`readByUrlPath` go through the content reader, which checks per
|
|
152
|
+
* entry, while the listing primitives took no user at all. Since `CanopyContext` is the
|
|
153
|
+
* request-scoped, ACL-enforcing context that page code is told to use, an unfiltered
|
|
154
|
+
* listing there disclosed full entry `data` for paths the user cannot `read()` directly.
|
|
155
|
+
*
|
|
156
|
+
* `services.createContentAccessChecker` is the existing batch primitive (api/entries.ts
|
|
157
|
+
* uses the same one): it resolves the request-constant work — branch access, the
|
|
158
|
+
* settings/permissions root, and the rule set — exactly once, and returns a synchronous
|
|
159
|
+
* per-path check. So the per-entry cost here is an admin short-circuit or a minimatch
|
|
160
|
+
* per configured rule, with no additional I/O.
|
|
161
|
+
*
|
|
162
|
+
* Returns an empty object (no predicate → unfiltered, today's behavior) at build time,
|
|
163
|
+
* on static deployments, and for the synthetic admin user. All three short-circuits are
|
|
164
|
+
* load-bearing, not just an optimization: `createContentAccessChecker` grants that user
|
|
165
|
+
* unconditional access (path checks bypass entirely for an Admins-group user, see
|
|
166
|
+
* authorization/path.ts), so the predicate would always be a no-op — but building it
|
|
167
|
+
* still costs a getSettingsBranchRoot() call, which in modes with a separate settings
|
|
168
|
+
* branch (prod and dev) means provisioning/cloning that branch's git workspace. That is
|
|
169
|
+
* an EFS round trip in prod, and it is exactly the unwanted cost for `createBuildCanopy`
|
|
170
|
+
* (see build-canopy.ts): a standalone script's whole point is running outside a request
|
|
171
|
+
* or Next.js build phase, so neither of the other two guards fires for it, and without
|
|
172
|
+
* this one every such script paid for a settings-workspace clone it never needed and,
|
|
173
|
+
* in an environment where that workspace cannot be provisioned, would hard-fail on.
|
|
174
|
+
*
|
|
175
|
+
* Compared by reference to the exported STATIC_DEPLOY_USER singleton (not by group
|
|
176
|
+
* membership) so this stays scoped to the synthetic build/admin identity specifically —
|
|
177
|
+
* a real authenticated admin hitting `getCanopy()` at request time still goes through
|
|
178
|
+
* the real check, same as any other user.
|
|
179
|
+
*
|
|
180
|
+
* Deliberately NOT wrapped in a try/catch: createContentAccessChecker is fail-loud by
|
|
181
|
+
* contract, and swallowing here would silently serve an unfiltered listing.
|
|
182
|
+
*/
|
|
183
|
+
let visibilityPromise = null;
|
|
184
|
+
const resolveVisibilityImpl = async () => {
|
|
185
|
+
if (isDeployedStatic(services.config) || isBuildMode() || user === STATIC_DEPLOY_USER)
|
|
186
|
+
return {};
|
|
187
|
+
const { branchContext, branchRoot } = await resolveSchemaContext();
|
|
188
|
+
const checkAccess = await services.createContentAccessChecker(branchContext, branchRoot, user);
|
|
189
|
+
return { shouldInclude: (physicalPath) => checkAccess(physicalPath, 'read').allowed };
|
|
190
|
+
};
|
|
191
|
+
const resolveVisibility = () => {
|
|
192
|
+
if (!visibilityPromise) {
|
|
193
|
+
visibilityPromise = resolveVisibilityImpl();
|
|
194
|
+
}
|
|
195
|
+
return visibilityPromise;
|
|
196
|
+
};
|
|
146
197
|
const buildContentTree = async (options) => {
|
|
147
198
|
const { branchRoot, flatSchema, contentRootName } = await resolveSchemaContext();
|
|
148
|
-
return buildContentTreeImpl(branchRoot, flatSchema, contentRootName, options);
|
|
199
|
+
return buildContentTreeImpl(branchRoot, flatSchema, contentRootName, options, await resolveVisibility());
|
|
149
200
|
};
|
|
150
201
|
const listEntries = async (options) => {
|
|
151
202
|
const { branchRoot, flatSchema, contentRootName } = await resolveSchemaContext();
|
|
152
|
-
return listEntriesImpl(branchRoot, flatSchema, contentRootName, options);
|
|
203
|
+
return listEntriesImpl(branchRoot, flatSchema, contentRootName, options, await resolveVisibility());
|
|
153
204
|
};
|
|
154
205
|
return {
|
|
155
206
|
read,
|
|
@@ -165,4 +216,3 @@ export function createCanopyContext(options) {
|
|
|
165
216
|
services,
|
|
166
217
|
};
|
|
167
218
|
}
|
|
168
|
-
//# sourceMappingURL=context.js.map
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
* All logic lives here in the core package; framework adapters just call startDevContentWatcher() once
|
|
17
17
|
* at dev startup. See packages/canopycms-next/src/context-wrapper.ts for the Next wiring.
|
|
18
18
|
*/
|
|
19
|
-
import type { CanopyServices } from './services';
|
|
20
|
-
import type { DevContentSyncMode } from './config/types';
|
|
19
|
+
import type { CanopyServices } from './services.js';
|
|
20
|
+
import type { DevContentSyncMode } from './config/types.js';
|
|
21
21
|
export interface StartDevContentWatcherOptions {
|
|
22
22
|
/** 'warn' (default) | 'off'. */
|
|
23
23
|
mode?: DevContentSyncMode;
|
|
@@ -34,4 +34,3 @@ export interface StartDevContentWatcherOptions {
|
|
|
34
34
|
* not in dev mode, or when the working-tree content directory does not exist.
|
|
35
35
|
*/
|
|
36
36
|
export declare function startDevContentWatcher(services: CanopyServices, options?: StartDevContentWatcherOptions): () => void;
|
|
37
|
-
//# sourceMappingURL=dev-content-watcher.d.ts.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { OperatingMode } from '../operating-mode';
|
|
3
|
-
import type { ConflictStatus, PullRequestState, SyncStatus } from '../types';
|
|
4
|
-
import type { CommentThread } from '../comment-store';
|
|
5
|
-
import type { UserSearchResult } from '../auth/types';
|
|
2
|
+
import type { OperatingMode } from '../operating-mode/index.js';
|
|
3
|
+
import type { ConflictStatus, PullRequestState, SyncStatus } from '../types.js';
|
|
4
|
+
import type { CommentThread } from '../comment-store.js';
|
|
5
|
+
import type { UserSearchResult } from '../auth/types.js';
|
|
6
6
|
export interface BranchSummary {
|
|
7
7
|
name: string;
|
|
8
8
|
status: string;
|
|
@@ -85,4 +85,3 @@ export interface BranchManagerProps {
|
|
|
85
85
|
onGetUserMetadata?: (userId: string) => Promise<UserSearchResult | null>;
|
|
86
86
|
}
|
|
87
87
|
export declare const BranchManager: React.FC<BranchManagerProps>;
|
|
88
|
-
//# sourceMappingURL=BranchManager.d.ts.map
|
|
@@ -152,4 +152,3 @@ export const BranchManager = ({ branches, mode, user, onSelect, onCreate, onDele
|
|
|
152
152
|
: 'Only Admin or branch creator can delete', disabled: perms.canDelete, children: _jsx(Button, { size: "xs", variant: "outline", color: "red", onClick: () => onDelete?.(b.name), disabled: !perms.canDelete, "data-testid": `delete-branch-button-${b.name}`, children: "Delete" }) })] })] }) }, b.name));
|
|
153
153
|
}) })) })] }));
|
|
154
154
|
};
|
|
155
|
-
//# sourceMappingURL=BranchManager.js.map
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { CanopyClientConfig } from '../config';
|
|
3
|
-
import type { EditorProps } from './Editor';
|
|
2
|
+
import type { CanopyClientConfig } from '../config/index.js';
|
|
3
|
+
import type { EditorProps } from './Editor.js';
|
|
4
4
|
export interface CanopyEditorProps extends Omit<EditorProps, 'collections' | 'previewBaseByCollection' | 'title' | 'subtitle' | 'themeOptions' | 'entries' | 'contentRoot' | 'operatingMode'> {
|
|
5
5
|
config: CanopyClientConfig;
|
|
6
6
|
entries?: EditorProps['entries'];
|
|
7
7
|
}
|
|
8
8
|
export declare const CanopyEditor: React.FC<CanopyEditorProps>;
|
|
9
9
|
export default CanopyEditor;
|
|
10
|
-
//# sourceMappingURL=CanopyEditor.d.ts.map
|
|
@@ -16,7 +16,6 @@ export const CanopyEditor = ({ config, entries = [], initialSelectedId, initialV
|
|
|
16
16
|
const resolvedTitle = config.editor?.title ?? 'CanopyCMS Editor';
|
|
17
17
|
const resolvedSubtitle = config.editor?.subtitle;
|
|
18
18
|
const resolvedTheme = config.editor?.theme ?? undefined;
|
|
19
|
-
return (_jsx(SWRProvider, { children: _jsx(ApiClientProvider, { children: _jsx(Editor, { entries: entries, title: resolvedTitle, subtitle: resolvedSubtitle, branchName: resolvedBranchName, operatingMode: config.mode, initialSelectedId: initialSelectedId, initialValues: initialValues, renderPreview: renderPreview, onCreateEntry: onCreateEntry, customRenderers: customRenderers, collections: collections, contentRoot: config.contentRoot, entryLinkUrl: config.entryLinkUrl, previewBaseByCollection: previewBase, assetBaseUrl: config.assetBaseUrl, themeOptions: resolvedTheme, AccountComponent: config.editor?.AccountComponent, onAccountClick: config.editor?.onAccountClick, onLogoutClick: config.editor?.onLogoutClick }) }) }));
|
|
19
|
+
return (_jsx(SWRProvider, { children: _jsx(ApiClientProvider, { basePath: config.basePath, children: _jsx(Editor, { entries: entries, title: resolvedTitle, subtitle: resolvedSubtitle, branchName: resolvedBranchName, operatingMode: config.mode, initialSelectedId: initialSelectedId, initialValues: initialValues, renderPreview: renderPreview, onCreateEntry: onCreateEntry, customRenderers: customRenderers, collections: collections, contentRoot: config.contentRoot, entryLinkUrl: config.entryLinkUrl, previewBaseByCollection: previewBase, assetBaseUrl: config.assetBaseUrl, basePath: config.basePath, themeOptions: resolvedTheme, AccountComponent: config.editor?.AccountComponent, onAccountClick: config.editor?.onAccountClick, onLogoutClick: config.editor?.onLogoutClick }) }) }));
|
|
20
20
|
};
|
|
21
21
|
export default CanopyEditor;
|
|
22
|
-
//# sourceMappingURL=CanopyEditor.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { CanopyClientConfig } from '../config';
|
|
2
|
-
import type { CustomFieldRenderers } from './FormRenderer';
|
|
1
|
+
import type { CanopyClientConfig } from '../config/index.js';
|
|
2
|
+
import type { CustomFieldRenderers } from './FormRenderer.js';
|
|
3
3
|
/**
|
|
4
4
|
* @param customRenderers Optional adopter overrides for how specific field
|
|
5
5
|
* types render (see `FormRenderer`'s `customRenderers` prop). Threaded
|
|
@@ -17,4 +17,3 @@ export declare const CanopyEditorPage: (config: CanopyClientConfig, customRender
|
|
|
17
17
|
displayName: string;
|
|
18
18
|
};
|
|
19
19
|
export default CanopyEditorPage;
|
|
20
|
-
//# sourceMappingURL=CanopyEditorPage.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { CommentThread } from '../comment-store';
|
|
3
|
-
import type { UserSearchResult } from '../auth/types';
|
|
2
|
+
import type { CommentThread } from '../comment-store.js';
|
|
3
|
+
import type { UserSearchResult } from '../auth/types.js';
|
|
4
4
|
export interface CommentsPanelProps {
|
|
5
5
|
branchName: string;
|
|
6
6
|
comments: CommentThread[];
|
|
@@ -18,4 +18,3 @@ export interface CommentsPanelProps {
|
|
|
18
18
|
onGetUserMetadata?: (userId: string) => Promise<UserSearchResult | null>;
|
|
19
19
|
}
|
|
20
20
|
export declare const CommentsPanel: React.FC<CommentsPanelProps>;
|
|
21
|
-
//# sourceMappingURL=CommentsPanel.d.ts.map
|
package/dist/editor/Editor.d.ts
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { ContentFormat, EntrySchema } from '../config';
|
|
3
|
-
import type { CustomFieldRenderers, FormValue } from './FormRenderer';
|
|
4
|
-
import type { OperatingMode } from '../operating-mode';
|
|
5
|
-
import { type CanopyThemeOptions } from './theme';
|
|
6
|
-
import type { LogicalPath, ContentId } from '../paths/types';
|
|
2
|
+
import type { ContentFormat, EntrySchema } from '../config/index.js';
|
|
3
|
+
import type { CustomFieldRenderers, FormValue } from './FormRenderer.js';
|
|
4
|
+
import type { OperatingMode } from '../operating-mode/index.js';
|
|
5
|
+
import { type CanopyThemeOptions } from './theme.js';
|
|
6
|
+
import type { LogicalPath, ContentId } from '../paths/types.js';
|
|
7
7
|
export interface EditorEntry {
|
|
8
8
|
path: LogicalPath;
|
|
9
9
|
contentId: ContentId;
|
|
10
10
|
label: string;
|
|
11
11
|
status?: string;
|
|
12
12
|
schema: EntrySchema;
|
|
13
|
-
apiPath: string;
|
|
14
13
|
previewSrc?: string;
|
|
15
14
|
collectionPath?: LogicalPath;
|
|
16
15
|
collectionName?: string;
|
|
@@ -52,7 +51,7 @@ export interface EditorProps {
|
|
|
52
51
|
operatingMode: OperatingMode;
|
|
53
52
|
collections?: EditorCollection[];
|
|
54
53
|
contentRoot?: string;
|
|
55
|
-
entryLinkUrl?: import('../entry-link-resolver').EntryLinkUrlResolver;
|
|
54
|
+
entryLinkUrl?: import('../entry-link-resolver.js').EntryLinkUrlResolver;
|
|
56
55
|
initialSelectedId?: string;
|
|
57
56
|
initialValues?: Record<string, FormValue>;
|
|
58
57
|
renderPreview?: (entry: EditorEntry, value: FormValue | undefined) => React.ReactNode;
|
|
@@ -63,6 +62,13 @@ export interface EditorProps {
|
|
|
63
62
|
canResolveComments?: boolean;
|
|
64
63
|
/** `media.publicBaseUrl` from config - prefixed onto asset URLs the editor builds (MediaLibrary/ImageField/MDX image dialog). Undefined means root-relative (editor and site share an origin). */
|
|
65
64
|
assetBaseUrl?: string;
|
|
65
|
+
/**
|
|
66
|
+
* `CanopyClientConfig.basePath` - the deployment prefix the host Next.js app is served under
|
|
67
|
+
* (e.g. `/preview-123`). Prefixed onto every preview iframe `src` this component builds via
|
|
68
|
+
* `buildPreviewSrc`, so the iframe navigates to the entry's real served URL instead of the
|
|
69
|
+
* un-prefixed root. Undefined means the app is served at its origin's root (no-op).
|
|
70
|
+
*/
|
|
71
|
+
basePath?: string;
|
|
66
72
|
/**
|
|
67
73
|
* Adopter-supplied overrides for how specific field types render, keyed by
|
|
68
74
|
* field `type` (see `FormRenderer`'s `customRenderers` prop). Threaded
|
|
@@ -81,4 +87,3 @@ export interface EditorProps {
|
|
|
81
87
|
*/
|
|
82
88
|
export declare const Editor: React.FC<EditorProps>;
|
|
83
89
|
export default Editor;
|
|
84
|
-
//# sourceMappingURL=Editor.d.ts.map
|
package/dist/editor/Editor.js
CHANGED
|
@@ -33,7 +33,7 @@ import { MediaLibrary } from './media/MediaLibrary.js';
|
|
|
33
33
|
* High-level editor wrapper that wires entry navigation, form rendering,
|
|
34
34
|
* saving/loading, and preview rendering using entry definitions.
|
|
35
35
|
*/
|
|
36
|
-
export const Editor = ({ entries, title, subtitle, siteTitle = title, siteSubtitle = subtitle, branchName = '', collections, contentRoot, entryLinkUrl, initialSelectedId, initialValues, renderPreview, onCreateEntry, themeOptions, operatingMode, previewBaseByCollection, currentUser = 'current-user', canResolveComments = true, assetBaseUrl, AccountComponent, onAccountClick, onLogoutClick, customRenderers, }) => {
|
|
36
|
+
export const Editor = ({ entries, title, subtitle, siteTitle = title, siteSubtitle = subtitle, branchName = '', collections, contentRoot, entryLinkUrl, initialSelectedId, initialValues, renderPreview, onCreateEntry, themeOptions, operatingMode, previewBaseByCollection, currentUser = 'current-user', canResolveComments = true, assetBaseUrl, basePath, AccountComponent, onAccountClick, onLogoutClick, customRenderers, }) => {
|
|
37
37
|
// Per-resource loading states
|
|
38
38
|
const [branchesLoading, setBranchesLoading] = useState(false);
|
|
39
39
|
const [entriesLoading, setEntriesLoading] = useState(false);
|
|
@@ -117,9 +117,9 @@ export const Editor = ({ entries, title, subtitle, siteTitle = title, siteSubtit
|
|
|
117
117
|
branchName: branchNameState,
|
|
118
118
|
previewBaseByCollection,
|
|
119
119
|
contentRoot,
|
|
120
|
+
basePath,
|
|
120
121
|
}),
|
|
121
122
|
setBusy: setEntriesLoading,
|
|
122
|
-
contentRoot,
|
|
123
123
|
});
|
|
124
124
|
// Keep the entry-type list referentially stable for as long as the create
|
|
125
125
|
// modal is showing the same collection. Building it inline in the JSX handed
|
|
@@ -492,7 +492,7 @@ export const Editor = ({ entries, title, subtitle, siteTitle = title, siteSubtit
|
|
|
492
492
|
// such collection" the same (correct) not-found outcome, so the guard
|
|
493
493
|
// below is reachable again. See the correction to PR #196's "unreachable
|
|
494
494
|
// with entries empty" claim in
|
|
495
|
-
// .claude/future-tasks/program-b-final-review-followups.md for the write
|
|
495
|
+
// .claude/future-tasks/resolved/program-b-final-review-followups.md for the write
|
|
496
496
|
// hazard this closes -- found by the 2026-08-12 adversarial review.
|
|
497
497
|
const collection = findCollection(collectionsFromApi, collectionPath);
|
|
498
498
|
if (!collection) {
|
|
@@ -663,7 +663,7 @@ export const Editor = ({ entries, title, subtitle, siteTitle = title, siteSubtit
|
|
|
663
663
|
const footerHeight = 40;
|
|
664
664
|
const headerTitle = currentEntry?.label ?? currentEntry?.slug ?? title;
|
|
665
665
|
const breadcrumbSegments = useMemo(() => buildBreadcrumbSegments(currentEntry, collectionLabels), [collectionLabels, currentEntry]);
|
|
666
|
-
return (_jsx(CanopyCMSProvider, { ...(themeOptions ?? {}), children: _jsx(AssetContextProvider, { baseUrl: assetBaseUrl, children: _jsxs(Box, { bg: "gray.0", style: { minHeight: '100vh', width: '100%' }, children: [_jsx(EditorHeader, { ref: headerRef, siteTitle: siteTitle, siteSubtitle: siteSubtitle, headerTitle: headerTitle, currentEntry: currentEntry, branchName: branchNameState, operatingMode: operatingMode, branchStatus: currentBranch?.status, busy: busy, breadcrumbSegments: breadcrumbSegments, editedFiles: editedFiles, modifiedCount: modifiedCount, unresolvedCommentCount: comments.filter((t) => !t.resolved).length, comments: comments, hasUnsavedChanges: isSelectedDirty(), userContext: userContext, branchCreatedBy: currentBranch?.createdBy, branchAccess: currentBranch?.access,
|
|
666
|
+
return (_jsx(CanopyCMSProvider, { ...(themeOptions ?? {}), children: _jsx(AssetContextProvider, { baseUrl: assetBaseUrl, basePath: basePath, children: _jsxs(Box, { bg: "gray.0", style: { minHeight: '100vh', width: '100%' }, children: [_jsx(EditorHeader, { ref: headerRef, siteTitle: siteTitle, siteSubtitle: siteSubtitle, headerTitle: headerTitle, currentEntry: currentEntry, branchName: branchNameState, operatingMode: operatingMode, branchStatus: currentBranch?.status, busy: busy, breadcrumbSegments: breadcrumbSegments, editedFiles: editedFiles, modifiedCount: modifiedCount, unresolvedCommentCount: comments.filter((t) => !t.resolved).length, comments: comments, hasUnsavedChanges: isSelectedDirty(), userContext: userContext, branchCreatedBy: currentBranch?.createdBy, branchAccess: currentBranch?.access,
|
|
667
667
|
// Fail-closed for the same reason branchContentLocked above is:
|
|
668
668
|
// isProtected/writeBlocked gate real actions in EditorHeader (hiding
|
|
669
669
|
// Submit, disabling Save), so a missing wire value must read as
|
|
@@ -753,4 +753,3 @@ export const Editor = ({ entries, title, subtitle, siteTitle = title, siteSubtit
|
|
|
753
753
|
}, loading: deleteInProgress })] }) }) }));
|
|
754
754
|
};
|
|
755
755
|
export default Editor;
|
|
756
|
-
//# sourceMappingURL=Editor.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { ContentId, LogicalPath } from '../paths/types';
|
|
2
|
+
import type { ContentId, LogicalPath } from '../paths/types.js';
|
|
3
3
|
import { useTree } from '@mantine/core';
|
|
4
4
|
type TreeController = ReturnType<typeof useTree>;
|
|
5
5
|
export interface EntryNavItem {
|
|
@@ -54,4 +54,3 @@ export interface EntryNavigatorProps {
|
|
|
54
54
|
}
|
|
55
55
|
export declare const EntryNavigator: React.FC<EntryNavigatorProps>;
|
|
56
56
|
export default EntryNavigator;
|
|
57
|
-
//# sourceMappingURL=EntryNavigator.d.ts.map
|
|
@@ -340,4 +340,3 @@ export const EntryNavigator = ({ items, collections, selectedPath, onSelect, onT
|
|
|
340
340
|
return (_jsx(Stack, { h: "100%", style: { display: 'flex', flexDirection: 'column' }, gap: 0, "data-testid": "entry-navigator", children: _jsx(ScrollArea, { type: "auto", offsetScrollbars: true, style: { flex: 1 }, children: treeData.length === 0 ? (loading ? (_jsxs(Group, { gap: "xs", py: "sm", children: [_jsx(Loader, { size: "xs" }), _jsx(Text, { size: "xs", c: "dimmed", children: "Loading content\u2026" })] })) : (_jsx(Text, { size: "xs", c: "dimmed", py: "sm", children: "No content" }))) : (_jsx(Box, { py: "sm", children: _jsx(Tree, { data: treeData, tree: tree, renderNode: renderNode, selectOnClick: false, levelOffset: "sm" }) })) }) }));
|
|
341
341
|
};
|
|
342
342
|
export default EntryNavigator;
|
|
343
|
-
//# sourceMappingURL=EntryNavigator.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { EntrySchema, FieldConfig } from '../config';
|
|
3
|
-
import type { CommentThread } from '../comment-store';
|
|
2
|
+
import type { EntrySchema, FieldConfig } from '../config/index.js';
|
|
3
|
+
import type { CommentThread } from '../comment-store.js';
|
|
4
4
|
export type FormValue = Record<string, unknown>;
|
|
5
5
|
export interface CustomFieldRenderProps {
|
|
6
6
|
field: FieldConfig;
|
|
@@ -38,4 +38,3 @@ export interface FormRendererProps {
|
|
|
38
38
|
}
|
|
39
39
|
export declare const FormRenderer: React.FC<FormRendererProps>;
|
|
40
40
|
export default FormRenderer;
|
|
41
|
-
//# sourceMappingURL=FormRenderer.d.ts.map
|
|
@@ -139,13 +139,33 @@ export const FormRenderer = ({ fields, value, onChange, customRenderers, branch
|
|
|
139
139
|
const items = Array.isArray(currentValue)
|
|
140
140
|
? currentValue
|
|
141
141
|
: [];
|
|
142
|
-
return (_jsx(Paper, { withBorder: true, radius: "md", p: "md", shadow: "xs", children: _jsxs(Stack, { gap: "sm", children: [_jsxs(Group, { justify: "space-between", children: [_jsx(Text, { size: "sm", fw: 600, children: label }), _jsx(Button, { size: "xs", variant: "light", onClick: () => update([...items, {}]), children: "Add item" })] }), _jsxs(Stack, { gap: "sm", children: [items.map((item, idx) => (_jsx(Paper, { withBorder: true, radius: "md", p: "sm", shadow: "xs", children: _jsxs(Stack, { gap: "xs", children: [_jsxs(Group, { justify: "space-between", children: [_jsxs(Text, { size: "xs", fw: 700, children: [label, " #", idx + 1] }), _jsx(Button, { size: "xs", variant: "subtle", color: "red", onClick: () => update(items.filter((_, i) => i !== idx)), children: "Remove" })] }), _jsx(ObjectField, { label: objectField.label, fields: objectField.fields, value: item, onChange: (next) => {
|
|
142
|
+
return wrapWithComments(_jsx(Paper, { withBorder: true, radius: "md", p: "md", shadow: "xs", children: _jsxs(Stack, { gap: "sm", children: [_jsxs(Group, { justify: "space-between", children: [_jsx(Text, { size: "sm", fw: 600, children: label }), _jsx(Button, { size: "xs", variant: "light", onClick: () => update([...items, {}]), children: "Add item" })] }), _jsxs(Stack, { gap: "sm", children: [items.map((item, idx) => (_jsx(Paper, { withBorder: true, radius: "md", p: "sm", shadow: "xs", children: _jsxs(Stack, { gap: "xs", children: [_jsxs(Group, { justify: "space-between", children: [_jsxs(Text, { size: "xs", fw: 700, children: [label, " #", idx + 1] }), _jsx(Button, { size: "xs", variant: "subtle", color: "red", onClick: () => update(items.filter((_, i) => i !== idx)), children: "Remove" })] }), _jsx(ObjectField, { label: objectField.label, fields: objectField.fields, value: item, onChange: (next) => {
|
|
143
143
|
const nextItems = [...items];
|
|
144
144
|
nextItems[idx] = next;
|
|
145
145
|
update(nextItems);
|
|
146
146
|
}, renderField: renderField, path: [...path, idx], dataCanopyField: normalizeCanopyPath([...path, idx]) })] }) }, fieldKey([...path, idx])))), items.length === 0 && (_jsx(Text, { size: "xs", c: "dimmed", children: "No items yet. Add one to get started." }))] })] }) }, fieldKey(path)));
|
|
147
147
|
}
|
|
148
|
-
|
|
148
|
+
// Non-list object: unlike the list branch above (where each item has
|
|
149
|
+
// its own Remove button), this field had no way to return to
|
|
150
|
+
// `undefined` once given a value. That mattered because a required
|
|
151
|
+
// child field inside it can be filled and then cleared back to `''`,
|
|
152
|
+
// which `isEmptyForRequired` treats as empty (entry-validator.ts) --
|
|
153
|
+
// but the object as a whole only reads as "absent" when it is
|
|
154
|
+
// `undefined`/`null`, not when its children are individually empty.
|
|
155
|
+
// Without a way to unset the object, that state was permanently
|
|
156
|
+
// invalid. The Clear button (wired through ObjectField's onRemove)
|
|
157
|
+
// fixes that by resetting to `undefined`, never `{}` (which would
|
|
158
|
+
// still carry a required-but-empty child into validation).
|
|
159
|
+
//
|
|
160
|
+
// Shown only when the field is optional (a required object should
|
|
161
|
+
// not be clearable back to a missing state) and only once it
|
|
162
|
+
// actually has a value (nothing to clear otherwise). Labeled
|
|
163
|
+
// "Clear" rather than "Remove" so it doesn't read as deleting the
|
|
164
|
+
// field from the schema, the way "Remove" correctly does for a list
|
|
165
|
+
// item above.
|
|
166
|
+
const hasValue = currentValue !== undefined && currentValue !== null;
|
|
167
|
+
const canClear = objectField.required !== true && hasValue;
|
|
168
|
+
return wrapWithComments(_jsx(ObjectField, { label: label, fields: objectField.fields, value: currentValue, onChange: (next) => update(next), onRemove: canClear ? () => update(undefined) : undefined, renderField: renderField, path: path, dataCanopyField: normalizeCanopyPath(path) }, fieldKey(path)));
|
|
149
169
|
}
|
|
150
170
|
case 'code':
|
|
151
171
|
return wrapWithComments(_jsx(CodeField, { id: fieldId, label: label, value: typeof currentValue === 'string' ? currentValue : '', onChange: (v) => update(v), dataCanopyField: normalizeCanopyPath(path) }, fieldKey(path)));
|
|
@@ -165,4 +185,3 @@ export const FormRenderer = ({ fields, value, onChange, customRenderers, branch
|
|
|
165
185
|
})] }));
|
|
166
186
|
};
|
|
167
187
|
export default FormRenderer;
|
|
168
|
-
//# sourceMappingURL=FormRenderer.js.map
|
|
@@ -2,6 +2,5 @@
|
|
|
2
2
|
* GroupManager - Re-exports from the group-manager module.
|
|
3
3
|
* This file maintains backward compatibility with existing imports.
|
|
4
4
|
*/
|
|
5
|
-
export { GroupManager, useGroupState, useUserSearch, useExternalGroupSearch } from './group-manager';
|
|
6
|
-
export type { GroupManagerProps, InternalGroup } from './group-manager';
|
|
7
|
-
//# sourceMappingURL=GroupManager.d.ts.map
|
|
5
|
+
export { GroupManager, useGroupState, useUserSearch, useExternalGroupSearch } from './group-manager/index.js';
|
|
6
|
+
export type { GroupManagerProps, InternalGroup } from './group-manager/index.js';
|