canopycms 0.0.68-int.98 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2131 -0
- package/README.md +47 -63
- package/dist/ai/generate.d.ts +5 -0
- package/dist/ai/generate.js +244 -115
- package/dist/ai/index.d.ts +1 -1
- package/dist/ai/json-to-markdown.d.ts +21 -1
- package/dist/ai/json-to-markdown.js +120 -57
- package/dist/ai/references.d.ts +72 -0
- package/dist/ai/references.js +223 -0
- package/dist/ai/resolve-branch.js +9 -2
- package/dist/ai/to-plain-text.d.ts +17 -8
- package/dist/ai/to-plain-text.js +18 -15
- package/dist/ai/types.d.ts +84 -3
- package/dist/api/admin-branch-health.d.ts +24 -1
- package/dist/api/admin-branch-health.js +52 -20
- package/dist/api/admin.d.ts +23 -5
- package/dist/api/admin.js +36 -1
- package/dist/api/assets.js +88 -78
- package/dist/api/branch-create-window.d.ts +12 -0
- package/dist/api/branch-create-window.js +13 -0
- package/dist/api/branch-merge.d.ts +1 -1
- package/dist/api/branch-merge.js +1 -1
- package/dist/api/branch-review.d.ts +3 -3
- package/dist/api/branch-review.js +16 -7
- package/dist/api/branch-status.d.ts +16 -6
- package/dist/api/branch-status.js +57 -12
- package/dist/api/branch-withdraw.d.ts +2 -2
- package/dist/api/branch-withdraw.js +8 -3
- package/dist/api/branch.d.ts +25 -12
- package/dist/api/branch.js +164 -103
- package/dist/api/client.d.ts +78 -58
- package/dist/api/client.js +150 -117
- package/dist/api/comments.d.ts +12 -3
- package/dist/api/comments.js +118 -9
- package/dist/api/content.d.ts +9 -9
- package/dist/api/content.js +131 -22
- package/dist/api/entries-constants.d.ts +14 -3
- package/dist/api/entries-constants.js +14 -3
- package/dist/api/entries.d.ts +40 -2
- package/dist/api/entries.js +102 -6
- package/dist/api/github-sync.d.ts +19 -0
- package/dist/api/github-sync.js +50 -3
- package/dist/api/groups.d.ts +4 -4
- package/dist/api/groups.js +2 -1
- package/dist/api/guards.js +23 -3
- package/dist/api/index.d.ts +3 -1
- package/dist/api/index.js +1 -0
- package/dist/api/permissions.d.ts +21 -2
- package/dist/api/permissions.js +50 -3
- package/dist/api/request-deadline.d.ts +59 -0
- package/dist/api/request-deadline.js +73 -0
- package/dist/api/resolve-references.js +8 -7
- package/dist/api/route-builder.d.ts +14 -0
- package/dist/api/route-builder.js +14 -1
- package/dist/api/schema.d.ts +11 -9
- package/dist/api/schema.js +2 -0
- package/dist/api/settings-helpers.d.ts +5 -1
- package/dist/api/settings-helpers.js +10 -2
- package/dist/api/types.d.ts +18 -0
- package/dist/api/users-constants.d.ts +6 -0
- package/dist/api/users-constants.js +6 -0
- package/dist/assets/asset-url.d.ts +28 -16
- package/dist/assets/asset-url.js +51 -25
- package/dist/assets/finalize.js +3 -0
- package/dist/assets/index.d.ts +1 -1
- package/dist/assets/materialize.d.ts +153 -0
- package/dist/assets/materialize.js +402 -0
- package/dist/assets/store-local.d.ts +19 -5
- package/dist/assets/store-local.js +69 -10
- package/dist/assets/store-s3.d.ts +38 -7
- package/dist/assets/store-s3.js +128 -22
- package/dist/assets/transform-directives.d.ts +52 -13
- package/dist/assets/transform-directives.js +87 -27
- package/dist/assets/transform.d.ts +3 -3
- package/dist/assets/transform.js +13 -8
- package/dist/assets/types.d.ts +31 -4
- package/dist/auth/cache.d.ts +1 -1
- package/dist/auth/cache.js +1 -1
- package/dist/auth/caching-auth-plugin.d.ts +2 -0
- package/dist/auth/caching-auth-plugin.js +12 -2
- package/dist/auth/file-based-auth-cache.d.ts +8 -0
- package/dist/auth/file-based-auth-cache.js +18 -8
- package/dist/auth/person-name.d.ts +5 -0
- package/dist/auth/person-name.js +8 -0
- package/dist/auth/plugin.d.ts +10 -1
- package/dist/auth/types.d.ts +2 -0
- package/dist/auth/user-metadata-lookup.d.ts +21 -0
- package/dist/auth/user-metadata-lookup.js +116 -0
- package/dist/authorization/branch.d.ts +1 -1
- package/dist/authorization/branch.js +12 -13
- package/dist/authorization/groups/schema.d.ts +4 -4
- package/dist/authorization/helpers.d.ts +8 -0
- package/dist/authorization/helpers.js +8 -0
- package/dist/authorization/index.d.ts +1 -1
- package/dist/authorization/index.js +1 -1
- package/dist/authorization/protected-branch.d.ts +5 -4
- package/dist/authorization/protected-branch.js +7 -5
- package/dist/branch-health.d.ts +35 -8
- package/dist/branch-health.js +54 -18
- package/dist/branch-metadata-error.d.ts +27 -0
- package/dist/branch-metadata-error.js +23 -0
- package/dist/branch-metadata-file.d.ts +205 -24
- package/dist/branch-metadata-file.js +126 -25
- package/dist/branch-metadata.d.ts +45 -6
- package/dist/branch-metadata.js +142 -50
- package/dist/branch-provisioning.d.ts +167 -0
- package/dist/branch-provisioning.js +501 -0
- package/dist/branch-registry.d.ts +8 -0
- package/dist/branch-registry.js +61 -9
- package/dist/branch-schema-cache.d.ts +29 -12
- package/dist/branch-schema-cache.js +64 -21
- package/dist/branch-sparse.d.ts +23 -0
- package/dist/branch-sparse.js +118 -0
- package/dist/branch-workspace.d.ts +42 -3
- package/dist/branch-workspace.js +239 -100
- package/dist/build/asset-refs.d.ts +94 -0
- package/dist/build/asset-refs.js +267 -0
- package/dist/build/generate-ai-content.js +5 -0
- package/dist/build/inline-flight.d.ts +37 -0
- package/dist/build/inline-flight.js +142 -0
- package/dist/cli/asset-refs.d.ts +52 -0
- package/dist/cli/asset-refs.js +194 -0
- package/dist/cli/cli.d.ts +15 -1
- package/dist/cli/cli.js +8543 -3193
- package/dist/cli/configured-asset-store.d.ts +12 -0
- package/dist/cli/configured-asset-store.js +46 -0
- package/dist/cli/generate-ai-content.js +4244 -1072
- package/dist/cli/init.js +217 -126
- package/dist/cli/project-detect.d.ts +2 -0
- package/dist/cli/project-detect.js +2 -0
- package/dist/cli/template-files/Dockerfile.cms.template +13 -5
- package/dist/cli/template-files/cms-stack.ts.template +16 -13
- package/dist/client.d.ts +1 -2
- package/dist/client.js +1 -2
- package/dist/comment-store.d.ts +25 -0
- package/dist/comment-store.js +43 -8
- package/dist/config/flatten.js +2 -0
- package/dist/config/helpers.js +2 -2
- package/dist/config/index.d.ts +1 -1
- package/dist/config/schemas/config.d.ts +12 -29
- package/dist/config/schemas/config.js +9 -12
- package/dist/config/schemas/field.d.ts +3 -0
- package/dist/config/schemas/field.js +58 -4
- package/dist/config/schemas/media.d.ts +4 -13
- package/dist/config/schemas/media.js +5 -8
- package/dist/config/schemas/url.d.ts +2 -20
- package/dist/config/schemas/url.js +2 -25
- package/dist/config/types.d.ts +116 -22
- package/dist/config/types.js +3 -9
- package/dist/config/validation.d.ts +25 -4
- package/dist/config/validation.js +116 -3
- package/dist/content-id-index.js +2 -2
- package/dist/content-index-generation.d.ts +1 -1
- package/dist/content-index-generation.js +1 -1
- package/dist/content-listing.d.ts +10 -1
- package/dist/content-listing.js +22 -5
- package/dist/content-reader.d.ts +9 -0
- package/dist/content-reader.js +16 -11
- package/dist/content-store.d.ts +75 -12
- package/dist/content-store.js +249 -86
- package/dist/content-tree.js +2 -2
- package/dist/context.js +5 -2
- package/dist/dangling-reference-log.d.ts +17 -0
- package/dist/dangling-reference-log.js +29 -0
- package/dist/dev-content-watcher.d.ts +1 -1
- package/dist/dev-content-watcher.js +1 -1
- package/dist/editor/BranchManager.d.ts +23 -7
- package/dist/editor/BranchManager.js +119 -54
- package/dist/editor/CanopyEditor.d.ts +1 -1
- package/dist/editor/CanopyEditor.js +1 -2
- package/dist/editor/CommentsPanel.d.ts +14 -0
- package/dist/editor/CommentsPanel.js +68 -43
- package/dist/editor/Editor.d.ts +11 -5
- package/dist/editor/Editor.js +891 -218
- package/dist/editor/EditorAuthGate.d.ts +7 -1
- package/dist/editor/EditorAuthGate.js +41 -9
- package/dist/editor/EntryNavigator.d.ts +22 -0
- package/dist/editor/EntryNavigator.js +353 -105
- package/dist/editor/FormHeader.d.ts +25 -0
- package/dist/editor/FormHeader.js +82 -0
- package/dist/editor/FormRenderer.d.ts +27 -3
- package/dist/editor/FormRenderer.js +171 -76
- package/dist/editor/PreviewFrame.d.ts +40 -0
- package/dist/editor/PreviewFrame.js +215 -0
- package/dist/editor/PreviewPane.d.ts +47 -0
- package/dist/editor/PreviewPane.js +147 -0
- package/dist/editor/PreviewToolbarTools.d.ts +22 -0
- package/dist/editor/PreviewToolbarTools.js +73 -0
- package/dist/editor/admin/SystemHealthPanel.d.ts +2 -1
- package/dist/editor/admin/SystemHealthPanel.js +163 -33
- package/dist/editor/admin/useSystemHealth.d.ts +18 -0
- package/dist/editor/admin/useSystemHealth.js +70 -1
- package/dist/editor/branch-status.d.ts +17 -0
- package/dist/editor/branch-status.js +29 -0
- package/dist/editor/canopy-path.d.ts +9 -6
- package/dist/editor/canopy-path.js +8 -11
- package/dist/editor/client-reference-resolver.d.ts +43 -16
- package/dist/editor/client-reference-resolver.js +155 -64
- package/dist/editor/comments/BranchComments.d.ts +1 -1
- package/dist/editor/comments/BranchComments.js +2 -2
- package/dist/editor/comments/CloseRefusedNotice.d.ts +4 -0
- package/dist/editor/comments/CloseRefusedNotice.js +7 -0
- package/dist/editor/comments/CommentThreadsPopover.d.ts +47 -0
- package/dist/editor/comments/CommentThreadsPopover.js +274 -0
- package/dist/editor/comments/CommentWriteAlert.d.ts +11 -0
- package/dist/editor/comments/CommentWriteAlert.js +13 -0
- package/dist/editor/comments/EntryComments.d.ts +10 -4
- package/dist/editor/comments/EntryComments.js +14 -17
- package/dist/editor/comments/FieldWrapper.d.ts +18 -4
- package/dist/editor/comments/FieldWrapper.js +62 -28
- package/dist/editor/comments/InlineCommentThread.d.ts +9 -2
- package/dist/editor/comments/InlineCommentThread.js +11 -47
- package/dist/editor/comments/ThreadCarousel.d.ts +1 -1
- package/dist/editor/comments/ThreadCarousel.js +18 -21
- package/dist/editor/comments/ThreadReplyControls.d.ts +28 -0
- package/dist/editor/comments/ThreadReplyControls.js +92 -0
- package/dist/editor/comments/field-comment-context.d.ts +14 -0
- package/dist/editor/comments/field-comment-context.js +14 -0
- package/dist/editor/comments/form-comments.d.ts +48 -0
- package/dist/editor/comments/form-comments.js +178 -0
- package/dist/editor/comments/item-anchor-copy.d.ts +6 -0
- package/dist/editor/comments/item-anchor-copy.js +6 -0
- package/dist/editor/comments/move-focus-if-unmoved.d.ts +6 -0
- package/dist/editor/comments/move-focus-if-unmoved.js +11 -0
- package/dist/editor/comments/popover-placement.d.ts +18 -0
- package/dist/editor/comments/popover-placement.js +58 -0
- package/dist/editor/comments/use-tracked-writes.d.ts +16 -0
- package/dist/editor/comments/use-tracked-writes.js +53 -0
- package/dist/editor/components/BranchAccessList.d.ts +15 -0
- package/dist/editor/components/BranchAccessList.js +52 -0
- package/dist/editor/components/BranchLockBanner.d.ts +22 -0
- package/dist/editor/components/BranchLockBanner.js +39 -0
- package/dist/editor/components/BranchPill.d.ts +32 -0
- package/dist/editor/components/BranchPill.js +33 -0
- package/dist/editor/components/BranchesDrawer.d.ts +11 -0
- package/dist/editor/components/BranchesDrawer.js +5 -0
- package/dist/editor/components/ConfirmDeleteModal.d.ts +6 -1
- package/dist/editor/components/ConfirmDeleteModal.js +3 -2
- package/dist/editor/components/DestructiveMenuItem.d.ts +7 -0
- package/dist/editor/components/DestructiveMenuItem.js +8 -0
- package/dist/editor/components/EditorCrashScreen.d.ts +17 -0
- package/dist/editor/components/EditorCrashScreen.js +22 -0
- package/dist/editor/components/EditorErrorBoundary.d.ts +38 -0
- package/dist/editor/components/EditorErrorBoundary.js +40 -0
- package/dist/editor/components/EditorHeader.d.ts +56 -106
- package/dist/editor/components/EditorHeader.js +130 -131
- package/dist/editor/components/EditorRail.d.ts +49 -0
- package/dist/editor/components/EditorRail.js +65 -0
- package/dist/editor/components/EntryBreadcrumb.d.ts +33 -0
- package/dist/editor/components/EntryBreadcrumb.js +56 -0
- package/dist/editor/components/EntryCreateModal.d.ts +12 -7
- package/dist/editor/components/EntryCreateModal.js +51 -57
- package/dist/editor/components/NoEditPermissionNotice.d.ts +6 -5
- package/dist/editor/components/NoEditPermissionNotice.js +5 -4
- package/dist/editor/components/QuickOpenPalette.d.ts +22 -0
- package/dist/editor/components/QuickOpenPalette.js +66 -0
- package/dist/editor/components/ReadOnlyDraftNotice.d.ts +11 -0
- package/dist/editor/components/ReadOnlyDraftNotice.js +12 -0
- package/dist/editor/components/ReasonedMenuItem.d.ts +15 -0
- package/dist/editor/components/ReasonedMenuItem.js +15 -0
- package/dist/editor/components/ReferencedByList.d.ts +11 -0
- package/dist/editor/components/ReferencedByList.js +28 -0
- package/dist/editor/components/RelativeTime.d.ts +10 -0
- package/dist/editor/components/RelativeTime.js +10 -0
- package/dist/editor/components/RenameEntryModal.d.ts +9 -1
- package/dist/editor/components/RenameEntryModal.js +19 -31
- package/dist/editor/components/RetryToastMessage.d.ts +9 -0
- package/dist/editor/components/RetryToastMessage.js +6 -0
- package/dist/editor/components/SaveAllResult.d.ts +25 -0
- package/dist/editor/components/SaveAllResult.js +86 -0
- package/dist/editor/components/SaveSplitButton.d.ts +30 -0
- package/dist/editor/components/SaveSplitButton.js +108 -0
- package/dist/editor/components/StagedChangesDrawer.d.ts +39 -0
- package/dist/editor/components/StagedChangesDrawer.js +92 -0
- package/dist/editor/components/UnavailableEntryNotice.d.ts +6 -0
- package/dist/editor/components/UnavailableEntryNotice.js +9 -0
- package/dist/editor/components/UnavailableTypeMessage.d.ts +6 -0
- package/dist/editor/components/UnavailableTypeMessage.js +9 -0
- package/dist/editor/components/UndoToastMessage.d.ts +18 -0
- package/dist/editor/components/UndoToastMessage.js +10 -0
- package/dist/editor/components/UserBadge.d.ts +2 -5
- package/dist/editor/components/UserBadge.js +62 -33
- package/dist/editor/components/ValidationSummary.d.ts +14 -0
- package/dist/editor/components/ValidationSummary.js +24 -0
- package/dist/editor/components/index.d.ts +2 -2
- package/dist/editor/components/index.js +2 -2
- package/dist/editor/context/ApiClientContext.d.ts +8 -2
- package/dist/editor/context/ApiClientContext.js +19 -8
- package/dist/editor/context/AssetContext.d.ts +13 -35
- package/dist/editor/context/AssetContext.js +12 -31
- package/dist/editor/context/EditorStateContext.d.ts +4 -4
- package/dist/editor/context/EditorStateContext.js +4 -4
- package/dist/editor/context/SWRProvider.d.ts +3 -3
- package/dist/editor/context/SiteMdxAllowContext.d.ts +4 -0
- package/dist/editor/context/SiteMdxAllowContext.js +7 -0
- package/dist/editor/context/index.d.ts +2 -1
- package/dist/editor/context/index.js +2 -1
- package/dist/editor/contrast.d.ts +19 -0
- package/dist/editor/contrast.js +41 -0
- package/dist/editor/copy.d.ts +18 -0
- package/dist/editor/copy.js +18 -0
- package/dist/editor/editor-config.js +16 -0
- package/dist/editor/editor-utils.d.ts +34 -8
- package/dist/editor/editor-utils.js +42 -20
- package/dist/editor/entry-search.d.ts +20 -0
- package/dist/editor/entry-search.js +34 -0
- package/dist/editor/field-breadcrumb.d.ts +12 -0
- package/dist/editor/field-breadcrumb.js +85 -0
- package/dist/editor/field-props.d.ts +86 -0
- package/dist/editor/field-props.js +27 -0
- package/dist/editor/field-target.d.ts +30 -0
- package/dist/editor/field-target.js +77 -0
- package/dist/editor/fields/BlockField.d.ts +12 -0
- package/dist/editor/fields/BlockField.js +89 -73
- package/dist/editor/fields/CodeField.d.ts +2 -0
- package/dist/editor/fields/CodeField.js +6 -2
- package/dist/editor/fields/DateTimeField.d.ts +4 -29
- package/dist/editor/fields/DateTimeField.js +79 -41
- package/dist/editor/fields/ExpandAllButton.d.ts +6 -0
- package/dist/editor/fields/ExpandAllButton.js +4 -0
- package/dist/editor/fields/FieldCrashFallback.d.ts +17 -0
- package/dist/editor/fields/FieldCrashFallback.js +30 -0
- package/dist/editor/fields/FieldLabel.d.ts +37 -0
- package/dist/editor/fields/FieldLabel.js +19 -0
- package/dist/editor/fields/ImageField.d.ts +4 -0
- package/dist/editor/fields/ImageField.js +29 -14
- package/dist/editor/fields/InlineGroupField.js +4 -3
- package/dist/editor/fields/ItemList.d.ts +42 -0
- package/dist/editor/fields/ItemList.js +130 -0
- package/dist/editor/fields/MarkdownField.d.ts +32 -0
- package/dist/editor/fields/MarkdownField.js +223 -46
- package/dist/editor/fields/MdxImageDialog.js +1 -1
- package/dist/editor/fields/NumberField.d.ts +2 -0
- package/dist/editor/fields/NumberField.js +8 -5
- package/dist/editor/fields/NumberListField.d.ts +2 -0
- package/dist/editor/fields/NumberListField.js +19 -16
- package/dist/editor/fields/ObjectField.d.ts +2 -7
- package/dist/editor/fields/ObjectField.js +15 -5
- package/dist/editor/fields/ObjectListField.d.ts +29 -0
- package/dist/editor/fields/ObjectListField.js +57 -0
- package/dist/editor/fields/ReferenceField.d.ts +2 -0
- package/dist/editor/fields/ReferenceField.js +34 -9
- package/dist/editor/fields/SelectField.d.ts +2 -0
- package/dist/editor/fields/SelectField.js +11 -2
- package/dist/editor/fields/StringListField.d.ts +4 -1
- package/dist/editor/fields/StringListField.js +22 -8
- package/dist/editor/fields/TextField.d.ts +2 -0
- package/dist/editor/fields/TextField.js +6 -2
- package/dist/editor/fields/ToggleField.d.ts +2 -0
- package/dist/editor/fields/ToggleField.js +8 -3
- package/dist/editor/fields/entry-link/InsertEntryLink.d.ts +1 -1
- package/dist/editor/fields/entry-link/InsertEntryLink.js +1 -1
- package/dist/editor/fields/form-expansion.d.ts +9 -0
- package/dist/editor/fields/form-expansion.js +2 -0
- package/dist/editor/fields/item-expansion.d.ts +15 -0
- package/dist/editor/fields/item-expansion.js +60 -0
- package/dist/editor/fields/list-item-keys.d.ts +8 -0
- package/dist/editor/fields/list-item-keys.js +50 -0
- package/dist/editor/fields/list-item-title.d.ts +20 -0
- package/dist/editor/fields/list-item-title.js +85 -0
- package/dist/editor/fields/markdown-export-options.d.ts +2 -0
- package/dist/editor/fields/markdown-export-options.js +8 -0
- package/dist/editor/fields/markdown-fidelity-visitors.d.ts +11 -0
- package/dist/editor/fields/markdown-fidelity-visitors.js +160 -0
- package/dist/editor/fields/mdx-jsx-support.d.ts +5 -1
- package/dist/editor/fields/mdx-jsx-support.js +157 -69
- package/dist/editor/fields/rich-text-failures.d.ts +5 -0
- package/dist/editor/fields/rich-text-failures.js +26 -0
- package/dist/editor/fields/toolbar-wrap.d.ts +7 -0
- package/dist/editor/fields/toolbar-wrap.js +35 -0
- package/dist/editor/form-outline.d.ts +13 -0
- package/dist/editor/form-outline.js +70 -0
- package/dist/editor/group-manager/GroupCard.d.ts +4 -1
- package/dist/editor/group-manager/GroupCard.js +12 -3
- package/dist/editor/group-manager/GroupForm.js +1 -1
- package/dist/editor/group-manager/InternalGroupsTab.d.ts +2 -1
- package/dist/editor/group-manager/InternalGroupsTab.js +4 -4
- package/dist/editor/group-manager/MemberList.d.ts +2 -1
- package/dist/editor/group-manager/MemberList.js +15 -4
- package/dist/editor/group-manager/hooks/useGroupState.d.ts +5 -0
- package/dist/editor/group-manager/hooks/useGroupState.js +30 -7
- package/dist/editor/group-manager/index.js +34 -5
- package/dist/editor/group-manager/types.d.ts +5 -2
- package/dist/editor/hooks/create-branch-request.d.ts +20 -0
- package/dist/editor/hooks/create-branch-request.js +54 -0
- package/dist/editor/hooks/save-all.d.ts +68 -0
- package/dist/editor/hooks/save-all.js +61 -0
- package/dist/editor/hooks/useBranchActions.d.ts +11 -1
- package/dist/editor/hooks/useBranchActions.js +42 -19
- package/dist/editor/hooks/useBranchManager.d.ts +21 -0
- package/dist/editor/hooks/useBranchManager.js +321 -125
- package/dist/editor/hooks/useBranchesData.d.ts +8 -4
- package/dist/editor/hooks/useBranchesData.js +9 -5
- package/dist/editor/hooks/useCommentSystem.d.ts +14 -2
- package/dist/editor/hooks/useCommentSystem.js +79 -55
- package/dist/editor/hooks/useCommentsData.d.ts +11 -7
- package/dist/editor/hooks/useCommentsData.js +20 -19
- package/dist/editor/hooks/useDraftManager.d.ts +77 -3
- package/dist/editor/hooks/useDraftManager.js +887 -94
- package/dist/editor/hooks/useEditorLayout.d.ts +53 -7
- package/dist/editor/hooks/useEditorLayout.js +98 -20
- package/dist/editor/hooks/useEntriesData.d.ts +2 -1
- package/dist/editor/hooks/useEntriesData.js +18 -4
- package/dist/editor/hooks/useEntryManager.d.ts +41 -2
- package/dist/editor/hooks/useEntryManager.js +227 -41
- package/dist/editor/hooks/useGroupManager.js +13 -16
- package/dist/editor/hooks/usePermissionManager.js +14 -6
- package/dist/editor/hooks/usePreviewMarks.d.ts +21 -0
- package/dist/editor/hooks/usePreviewMarks.js +33 -0
- package/dist/editor/hooks/useReferenceResolution.d.ts +10 -3
- package/dist/editor/hooks/useReferenceResolution.js +34 -177
- package/dist/editor/hooks/useSchemaManager.d.ts +25 -6
- package/dist/editor/hooks/useSchemaManager.js +97 -39
- package/dist/editor/hooks/useUserMetadata.d.ts +14 -4
- package/dist/editor/hooks/useUserMetadata.js +76 -47
- package/dist/editor/hooks/user-metadata-batcher.d.ts +8 -0
- package/dist/editor/hooks/user-metadata-batcher.js +33 -0
- package/dist/editor/media/AssetCard.d.ts +6 -7
- package/dist/editor/media/AssetCard.js +24 -31
- package/dist/editor/media/AssetListRow.d.ts +16 -0
- package/dist/editor/media/AssetListRow.js +41 -0
- package/dist/editor/media/CropStep.js +6 -1
- package/dist/editor/media/MediaLibrary.d.ts +4 -3
- package/dist/editor/media/MediaLibrary.js +11 -4
- package/dist/editor/media/MediaLibraryBody.d.ts +3 -3
- package/dist/editor/media/MediaLibraryBody.js +195 -80
- package/dist/editor/media/MediaLibrarySkeleton.d.ts +6 -0
- package/dist/editor/media/MediaLibrarySkeleton.js +14 -0
- package/dist/editor/media/crop-math.d.ts +3 -4
- package/dist/editor/media/crop-math.js +11 -22
- package/dist/editor/media/editor-image-src.d.ts +8 -0
- package/dist/editor/media/editor-image-src.js +10 -0
- package/dist/editor/media/format-bytes.d.ts +2 -0
- package/dist/editor/media/format-bytes.js +23 -0
- package/dist/editor/media/media-library-prefs.d.ts +23 -0
- package/dist/editor/media/media-library-prefs.js +49 -0
- package/dist/editor/media/media-library-view.d.ts +34 -0
- package/dist/editor/media/media-library-view.js +40 -0
- package/dist/editor/media/useAssetLibrary.d.ts +30 -0
- package/dist/editor/media/useAssetLibrary.js +126 -0
- package/dist/editor/media/useStableAssetOrder.d.ts +11 -0
- package/dist/editor/media/useStableAssetOrder.js +37 -0
- package/dist/editor/media/useThumbnailFailure.d.ts +6 -0
- package/dist/editor/media/useThumbnailFailure.js +16 -0
- package/dist/editor/permission-manager/GroupSelector.js +2 -2
- package/dist/editor/permission-manager/PermissionEditor.d.ts +1 -1
- package/dist/editor/permission-manager/PermissionEditor.js +15 -4
- package/dist/editor/permission-manager/PermissionLevelBadge.js +1 -1
- package/dist/editor/permission-manager/PermissionTree.d.ts +1 -1
- package/dist/editor/permission-manager/UserSelector.d.ts +1 -1
- package/dist/editor/permission-manager/UserSelector.js +3 -3
- package/dist/editor/permission-manager/index.js +12 -3
- package/dist/editor/permission-manager/types.d.ts +5 -2
- package/dist/editor/platform.d.ts +3 -0
- package/dist/editor/platform.js +9 -0
- package/dist/editor/preview-asset-base.d.ts +9 -0
- package/dist/editor/preview-asset-base.js +17 -0
- package/dist/editor/preview-bridge.d.ts +51 -27
- package/dist/editor/preview-bridge.js +103 -144
- package/dist/editor/preview-marks.d.ts +15 -0
- package/dist/editor/preview-marks.js +74 -0
- package/dist/editor/preview-path.d.ts +12 -0
- package/dist/editor/preview-path.js +45 -1
- package/dist/editor/preview-scale.d.ts +27 -0
- package/dist/editor/preview-scale.js +34 -0
- package/dist/editor/raw-asset-base.d.ts +5 -0
- package/dist/editor/raw-asset-base.js +14 -0
- package/dist/editor/relative-time.d.ts +4 -4
- package/dist/editor/relative-time.js +16 -8
- package/dist/editor/schema-editor/CollectionEditor.d.ts +20 -3
- package/dist/editor/schema-editor/CollectionEditor.js +361 -62
- package/dist/editor/schema-editor/EntryTypeEditor.d.ts +5 -1
- package/dist/editor/schema-editor/EntryTypeEditor.js +11 -6
- package/dist/editor/schema-editor/collection-draft.d.ts +22 -0
- package/dist/editor/schema-editor/collection-draft.js +40 -0
- package/dist/editor/schema-editor/index.d.ts +1 -1
- package/dist/editor/schema-label.d.ts +10 -0
- package/dist/editor/schema-label.js +17 -0
- package/dist/editor/settings-conflict.d.ts +5 -0
- package/dist/editor/settings-conflict.js +8 -0
- package/dist/editor/shell/ActivityRail.d.ts +37 -0
- package/dist/editor/shell/ActivityRail.js +91 -0
- package/dist/editor/shell/EditorShell.d.ts +17 -0
- package/dist/editor/shell/EditorShell.js +31 -0
- package/dist/editor/shell/PaneLayout.d.ts +28 -0
- package/dist/editor/shell/PaneLayout.js +116 -0
- package/dist/editor/shell/SidePanelHost.d.ts +35 -0
- package/dist/editor/shell/SidePanelHost.js +184 -0
- package/dist/editor/shell/TopBar.d.ts +12 -0
- package/dist/editor/shell/TopBar.js +14 -0
- package/dist/editor/shell/host-chrome.d.ts +16 -0
- package/dist/editor/shell/host-chrome.js +69 -0
- package/dist/editor/slug.d.ts +16 -0
- package/dist/editor/slug.js +43 -0
- package/dist/editor/theme.d.ts +2 -1
- package/dist/editor/theme.js +314 -13
- package/dist/editor/unanswered.d.ts +17 -0
- package/dist/editor/unanswered.js +26 -0
- package/dist/editor/unavailable-entry-type.d.ts +20 -0
- package/dist/editor/unavailable-entry-type.js +28 -0
- package/dist/editor/undo-removal.d.ts +57 -0
- package/dist/editor/undo-removal.js +163 -0
- package/dist/editor/user-display.d.ts +4 -0
- package/dist/editor/user-display.js +5 -0
- package/dist/editor/utils/confirm-modal.d.ts +8 -0
- package/dist/editor/utils/confirm-modal.js +12 -0
- package/dist/editor/utils/editor-errors.d.ts +19 -0
- package/dist/editor/utils/editor-errors.js +32 -0
- package/dist/editor/utils/focus-return.d.ts +56 -0
- package/dist/editor/utils/focus-return.js +106 -0
- package/dist/entry-link-resolver.d.ts +11 -1
- package/dist/entry-link-resolver.js +65 -5
- package/dist/entry-schema-registry.d.ts +3 -3
- package/dist/entry-schema-registry.js +7 -4
- package/dist/entry-schema.d.ts +49 -3
- package/dist/entry-schema.js +18 -0
- package/dist/git-manager.d.ts +172 -10
- package/dist/git-manager.js +449 -107
- package/dist/github-service.d.ts +39 -2
- package/dist/github-service.js +101 -7
- package/dist/http/handler.js +74 -9
- package/dist/http/types.d.ts +2 -0
- package/dist/http/worker-not-ready.d.ts +9 -4
- package/dist/http/worker-not-ready.js +59 -6
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/item-keys.d.ts +46 -0
- package/dist/item-keys.js +235 -0
- package/dist/operating-mode/editor-mode-check.d.ts +15 -0
- package/dist/operating-mode/editor-mode-check.js +24 -0
- package/dist/operating-mode/mode-env.d.ts +13 -14
- package/dist/operating-mode/mode-env.js +13 -14
- package/dist/operating-mode/types.d.ts +2 -2
- package/dist/paths/branch.d.ts +0 -1
- package/dist/paths/branch.js +1 -8
- package/dist/paths/index.d.ts +1 -1
- package/dist/paths/index.js +1 -1
- package/dist/paths/validation.js +0 -2
- package/dist/preview.d.ts +8 -0
- package/dist/preview.js +7 -0
- package/dist/reference-resolver.js +1 -0
- package/dist/resolve-canopy-user.d.ts +1 -1
- package/dist/resolve-canopy-user.js +1 -1
- package/dist/schema/meta-loader.d.ts +18 -8
- package/dist/schema/meta-loader.js +42 -9
- package/dist/schema/registry-fingerprint.d.ts +14 -0
- package/dist/schema/registry-fingerprint.js +63 -0
- package/dist/schema/resolver.d.ts +7 -4
- package/dist/schema/resolver.js +7 -6
- package/dist/schema/schema-store.d.ts +7 -10
- package/dist/schema/schema-store.js +13 -11
- package/dist/schema/schema-unavailable-error.d.ts +11 -0
- package/dist/schema/schema-unavailable-error.js +15 -0
- package/dist/schema/types.d.ts +22 -0
- package/dist/schema-registry-record.d.ts +35 -0
- package/dist/schema-registry-record.js +134 -0
- package/dist/server.d.ts +79 -9
- package/dist/server.js +62 -8
- package/dist/services.d.ts +33 -5
- package/dist/services.js +155 -37
- package/dist/settings-workspace.d.ts +23 -3
- package/dist/settings-workspace.js +159 -45
- package/dist/stamp-on-publish.d.ts +36 -0
- package/dist/stamp-on-publish.js +71 -0
- package/dist/static/index.d.ts +58 -5
- package/dist/static/index.js +133 -3
- package/dist/static/seo.d.ts +5 -5
- package/dist/static/seo.js +5 -5
- package/dist/submission-attribution.d.ts +8 -0
- package/dist/submission-attribution.js +22 -0
- package/dist/system-users.d.ts +12 -0
- package/dist/system-users.js +12 -0
- package/dist/task-queue/cms-task-queue.d.ts +1 -1
- package/dist/task-queue/cms-task-queue.js +1 -1
- package/dist/task-queue/index.d.ts +1 -1
- package/dist/task-queue/index.js +1 -1
- package/dist/task-queue/task-queue.d.ts +6 -0
- package/dist/task-queue/task-queue.js +29 -0
- package/dist/task-queue/worker-status.d.ts +35 -9
- package/dist/task-queue/worker-status.js +84 -17
- package/dist/types.d.ts +90 -9
- package/dist/url-collision.js +3 -3
- package/dist/url-exclusivity-fixtures.d.ts +8 -1
- package/dist/url-exclusivity-fixtures.js +11 -1
- package/dist/user.js +2 -1
- package/dist/utils/atomic-write.js +2 -1
- package/dist/utils/base-branch.d.ts +13 -0
- package/dist/utils/base-branch.js +23 -0
- package/dist/utils/content-serialize.d.ts +15 -7
- package/dist/utils/content-serialize.js +353 -51
- package/dist/utils/content-write-lock.d.ts +6 -1
- package/dist/utils/content-write-lock.js +21 -6
- package/dist/utils/debug.d.ts +1 -1
- package/dist/utils/debug.js +5 -3
- package/dist/utils/error.js +13 -2
- package/dist/utils/escape-text.d.ts +7 -0
- package/dist/utils/escape-text.js +27 -0
- package/dist/utils/fs.d.ts +12 -4
- package/dist/utils/fs.js +18 -5
- package/dist/utils/git.d.ts +21 -1
- package/dist/utils/git.js +63 -8
- package/dist/utils/json-source-splice.d.ts +14 -0
- package/dist/utils/json-source-splice.js +120 -0
- package/dist/utils/markdown-body-splice.d.ts +39 -0
- package/dist/utils/markdown-body-splice.js +421 -0
- package/dist/utils/occ-json-write.js +18 -12
- package/dist/utils/provision-log.d.ts +25 -0
- package/dist/utils/provision-log.js +49 -0
- package/dist/utils/provisioning-lock.d.ts +32 -1
- package/dist/utils/provisioning-lock.js +78 -32
- package/dist/utils/sanitize-href.d.ts +9 -23
- package/dist/utils/sanitize-href.js +14 -28
- package/dist/utils/title-field.d.ts +10 -0
- package/dist/utils/title-field.js +47 -0
- package/dist/utils/yaml-source-splice.d.ts +58 -0
- package/dist/utils/yaml-source-splice.js +515 -0
- package/dist/validation/block-structural-keys.d.ts +1 -1
- package/dist/validation/block-structural-keys.js +1 -1
- package/dist/validation/deletion-checker.d.ts +21 -29
- package/dist/validation/deletion-checker.js +41 -117
- package/dist/validation/entry-validator.d.ts +6 -10
- package/dist/validation/entry-validator.js +19 -26
- package/dist/validation/field-traversal.d.ts +22 -0
- package/dist/validation/field-traversal.js +39 -8
- package/dist/validation/markdown-safety.d.ts +68 -0
- package/dist/validation/markdown-safety.js +596 -0
- package/dist/validation/mdx-allowlist.d.ts +55 -0
- package/dist/validation/mdx-allowlist.js +183 -0
- package/dist/validation/reference-validator.d.ts +2 -0
- package/dist/validation/reference-validator.js +3 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker/branch-policy.d.ts +124 -0
- package/dist/worker/branch-policy.js +243 -0
- package/dist/worker/bundle-header.d.ts +117 -0
- package/dist/worker/bundle-header.js +253 -0
- package/dist/worker/cms-worker.d.ts +236 -142
- package/dist/worker/cms-worker.js +772 -285
- package/dist/worker/gateway-egress.d.ts +43 -0
- package/dist/worker/gateway-egress.js +209 -0
- package/dist/worker/gateway-instance.d.ts +42 -0
- package/dist/worker/gateway-instance.js +129 -0
- package/dist/worker/git-process.d.ts +81 -0
- package/dist/worker/git-process.js +234 -0
- package/dist/worker/git-sync.d.ts +34 -17
- package/dist/worker/git-sync.js +394 -131
- package/dist/worker/github-auth.d.ts +9 -9
- package/dist/worker/github-auth.js +13 -15
- package/dist/worker/github-gateway-http.d.ts +62 -0
- package/dist/worker/github-gateway-http.js +977 -0
- package/dist/worker/github-gateway-wire.d.ts +590 -0
- package/dist/worker/github-gateway-wire.js +488 -0
- package/dist/worker/github-gateway.d.ts +238 -0
- package/dist/worker/github-gateway.js +726 -0
- package/dist/worker/github-mirror-upkeep.d.ts +75 -0
- package/dist/worker/github-mirror-upkeep.js +266 -0
- package/dist/worker/github-mirror.d.ts +364 -0
- package/dist/worker/github-mirror.js +1030 -0
- package/dist/worker/github-transfer.d.ts +56 -0
- package/dist/worker/github-transfer.js +444 -0
- package/dist/worker/history-rewrite.d.ts +4 -5
- package/dist/worker/history-rewrite.js +12 -17
- package/dist/worker/provisioned-workspace.d.ts +5 -5
- package/dist/worker/provisioned-workspace.js +5 -5
- package/dist/worker/rebase.d.ts +1 -1
- package/dist/worker/rebase.js +58 -54
- package/dist/worker/remote-git-maintenance.d.ts +3 -0
- package/dist/worker/remote-git-maintenance.js +12 -0
- package/dist/worker/schema-gate.d.ts +49 -0
- package/dist/worker/schema-gate.js +226 -0
- package/dist/worker/self-checks.d.ts +107 -0
- package/dist/worker/self-checks.js +358 -0
- package/dist/worker/shared-repo-git.d.ts +96 -0
- package/dist/worker/shared-repo-git.js +459 -0
- package/dist/worker/sparse-cone.d.ts +20 -0
- package/dist/worker/sparse-cone.js +136 -0
- package/dist/worker/stale-mirror.d.ts +82 -0
- package/dist/worker/stale-mirror.js +130 -0
- package/dist/worker/task-runner.d.ts +5 -3
- package/dist/worker/task-runner.js +287 -186
- package/dist/worker/worker-context.d.ts +36 -37
- package/package.json +35 -7
- package/dist/editor/EditorPanes.d.ts +0 -10
- package/dist/editor/EditorPanes.js +0 -98
- package/dist/editor/components/EditorFooter.d.ts +0 -11
- package/dist/editor/components/EditorFooter.js +0 -9
- package/dist/editor/components/EditorSidebar.d.ts +0 -67
- package/dist/editor/components/EditorSidebar.js +0 -22
|
@@ -4,22 +4,18 @@
|
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
export declare const mediaSchema: z.ZodDiscriminatedUnion<"adapter", [z.ZodObject<{
|
|
6
6
|
adapter: z.ZodLiteral<"local">;
|
|
7
|
-
publicBaseUrl: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
8
7
|
/** Root directory for local asset storage. Defaults to the caller's dev-assets dir. */
|
|
9
8
|
directory: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
|
|
10
9
|
}, "strict", z.ZodTypeAny, {
|
|
11
10
|
adapter: "local";
|
|
12
|
-
publicBaseUrl?: string | undefined;
|
|
13
11
|
directory?: string | undefined;
|
|
14
12
|
}, {
|
|
15
13
|
adapter: "local";
|
|
16
|
-
publicBaseUrl?: string | undefined;
|
|
17
14
|
directory?: string | undefined;
|
|
18
15
|
}>, z.ZodObject<{
|
|
19
16
|
adapter: z.ZodLiteral<"s3">;
|
|
20
17
|
bucket: z.ZodString;
|
|
21
18
|
region: z.ZodString;
|
|
22
|
-
publicBaseUrl: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
23
19
|
/**
|
|
24
20
|
* Where the browser POSTs a presigned direct upload. Absolute http(s) URL or a
|
|
25
21
|
* site-relative path; defaults to the S3 REST endpoint the AWS SDK returns.
|
|
@@ -29,10 +25,10 @@ export declare const mediaSchema: z.ZodDiscriminatedUnion<"adapter", [z.ZodObjec
|
|
|
29
25
|
* signature is unaffected — a presigned POST's string-to-sign is the base64 policy
|
|
30
26
|
* alone, so the host never enters it (pinned by store-s3.test.ts).
|
|
31
27
|
*
|
|
32
|
-
* NOT a prefix
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
28
|
+
* NOT a prefix: nothing is joined onto this value; it replaces the POST target outright
|
|
29
|
+
* and is passed through byte-for-byte. Do not route it through `joinUrlPrefix` "for
|
|
30
|
+
* consistency" — that would strip the trailing slash and silently stop a CDN path
|
|
31
|
+
* pattern like `/asset-upload/*` from matching.
|
|
36
32
|
*/
|
|
37
33
|
uploadUrl: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
38
34
|
/** Max upload size in bytes for presigned direct uploads. Defaults to 50 MiB. */
|
|
@@ -41,23 +37,18 @@ export declare const mediaSchema: z.ZodDiscriminatedUnion<"adapter", [z.ZodObjec
|
|
|
41
37
|
adapter: "s3";
|
|
42
38
|
bucket: string;
|
|
43
39
|
region: string;
|
|
44
|
-
publicBaseUrl?: string | undefined;
|
|
45
40
|
uploadUrl?: string | undefined;
|
|
46
41
|
maxUploadBytes?: number | undefined;
|
|
47
42
|
}, {
|
|
48
43
|
adapter: "s3";
|
|
49
44
|
bucket: string;
|
|
50
45
|
region: string;
|
|
51
|
-
publicBaseUrl?: string | undefined;
|
|
52
46
|
uploadUrl?: string | undefined;
|
|
53
47
|
maxUploadBytes?: number | undefined;
|
|
54
48
|
}>, z.ZodObject<{
|
|
55
49
|
adapter: z.ZodLiteral<"lfs">;
|
|
56
|
-
publicBaseUrl: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
57
50
|
}, "strict", z.ZodTypeAny, {
|
|
58
51
|
adapter: "lfs";
|
|
59
|
-
publicBaseUrl?: string | undefined;
|
|
60
52
|
}, {
|
|
61
53
|
adapter: "lfs";
|
|
62
|
-
publicBaseUrl?: string | undefined;
|
|
63
54
|
}>]>;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { relativePathSchema } from './collection.js';
|
|
6
|
-
import {
|
|
6
|
+
import { uploadTargetUrlSchema } from './url.js';
|
|
7
7
|
// Media adapter configuration schema.
|
|
8
8
|
// Keyed as a discriminated union on `adapter` so each adapter's required fields are
|
|
9
9
|
// enforced at parse time. With a plain z.union, a malformed s3 config (e.g. missing
|
|
@@ -26,7 +26,6 @@ export const mediaSchema = z.discriminatedUnion('adapter', [
|
|
|
26
26
|
z
|
|
27
27
|
.object({
|
|
28
28
|
adapter: z.literal('local'),
|
|
29
|
-
publicBaseUrl: assetMountUrlSchema.optional(),
|
|
30
29
|
/** Root directory for local asset storage. Defaults to the caller's dev-assets dir. */
|
|
31
30
|
directory: relativePathSchema.optional(),
|
|
32
31
|
})
|
|
@@ -36,7 +35,6 @@ export const mediaSchema = z.discriminatedUnion('adapter', [
|
|
|
36
35
|
adapter: z.literal('s3'),
|
|
37
36
|
bucket: z.string().min(1),
|
|
38
37
|
region: z.string().min(1),
|
|
39
|
-
publicBaseUrl: assetMountUrlSchema.optional(),
|
|
40
38
|
/**
|
|
41
39
|
* Where the browser POSTs a presigned direct upload. Absolute http(s) URL or a
|
|
42
40
|
* site-relative path; defaults to the S3 REST endpoint the AWS SDK returns.
|
|
@@ -46,10 +44,10 @@ export const mediaSchema = z.discriminatedUnion('adapter', [
|
|
|
46
44
|
* signature is unaffected — a presigned POST's string-to-sign is the base64 policy
|
|
47
45
|
* alone, so the host never enters it (pinned by store-s3.test.ts).
|
|
48
46
|
*
|
|
49
|
-
* NOT a prefix
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
47
|
+
* NOT a prefix: nothing is joined onto this value; it replaces the POST target outright
|
|
48
|
+
* and is passed through byte-for-byte. Do not route it through `joinUrlPrefix` "for
|
|
49
|
+
* consistency" — that would strip the trailing slash and silently stop a CDN path
|
|
50
|
+
* pattern like `/asset-upload/*` from matching.
|
|
53
51
|
*/
|
|
54
52
|
uploadUrl: uploadTargetUrlSchema.optional(),
|
|
55
53
|
/** Max upload size in bytes for presigned direct uploads. Defaults to 50 MiB. */
|
|
@@ -59,7 +57,6 @@ export const mediaSchema = z.discriminatedUnion('adapter', [
|
|
|
59
57
|
z
|
|
60
58
|
.object({
|
|
61
59
|
adapter: z.literal('lfs'),
|
|
62
|
-
publicBaseUrl: assetMountUrlSchema.optional(),
|
|
63
60
|
})
|
|
64
61
|
.strict(),
|
|
65
62
|
]);
|
|
@@ -13,27 +13,9 @@ import { z } from 'zod';
|
|
|
13
13
|
/**
|
|
14
14
|
* Where the browser POSTs a presigned direct upload (`media.uploadUrl`).
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* depending on the editor page issuing the upload, so the config would not determine where a
|
|
19
|
-
* live credential is sent. `isHttpUrlOrSameOriginPath`'s doc carries the full reasoning,
|
|
20
|
-
* including why bare `http://` is nonetheless accepted.
|
|
21
|
-
*
|
|
22
|
-
* "Exactly one case" is measured, not asserted: a census over every 4-character string
|
|
23
|
-
* drawn from an 11-symbol alphabet (slash, backslash, dot, colon, %2e, ?, #, tab, and three
|
|
24
|
-
* letters), plus hand-written shapes, found 39 values the two schemas treat differently — and
|
|
25
|
-
* every one is a literal `//host` (three only after `.trim()` strips a leading tab).
|
|
16
|
+
* `isHttpUrlOrSameOriginPath`'s doc carries the reasoning, including why a protocol-relative
|
|
17
|
+
* `//host` is refused while bare `http://` is accepted.
|
|
26
18
|
*/
|
|
27
19
|
export declare const uploadTargetUrlSchema: z.ZodEffects<z.ZodString, string, string>;
|
|
28
|
-
/**
|
|
29
|
-
* Where `/assets/…` is mounted for the editor's own previews (`media.publicBaseUrl`).
|
|
30
|
-
*
|
|
31
|
-
* Accepts an absolute http(s) URL, a protocol-relative `//host` URL, or a site-relative path
|
|
32
|
-
* (see `.claude/future-tasks/editor-asset-mount-topology.md` option 1 — the `basePath` fallback
|
|
33
|
-
* in `editor/context/AssetContext.tsx` exists for sites that need one and can't set an absolute
|
|
34
|
-
* value). Rejects non-http(s) schemes: a plain `z.string().url()` check would accept
|
|
35
|
-
* `publicBaseUrl: 'mailto:a@b.c'` and produce `/mailto:a@b.c/assets/…` at render time.
|
|
36
|
-
*/
|
|
37
|
-
export declare const assetMountUrlSchema: z.ZodEffects<z.ZodString, string, string>;
|
|
38
20
|
/** `editor.previewPrefix`, by `uploadTargetUrlSchema`'s rule: `//host` leaves the scheme open. */
|
|
39
21
|
export declare const previewPrefixSchema: z.ZodEffects<z.ZodString, string, string>;
|
|
@@ -14,16 +14,8 @@ import { isHttpUrlOrSameOriginPath } from '../../utils/sanitize-href.js';
|
|
|
14
14
|
/**
|
|
15
15
|
* Where the browser POSTs a presigned direct upload (`media.uploadUrl`).
|
|
16
16
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* depending on the editor page issuing the upload, so the config would not determine where a
|
|
20
|
-
* live credential is sent. `isHttpUrlOrSameOriginPath`'s doc carries the full reasoning,
|
|
21
|
-
* including why bare `http://` is nonetheless accepted.
|
|
22
|
-
*
|
|
23
|
-
* "Exactly one case" is measured, not asserted: a census over every 4-character string
|
|
24
|
-
* drawn from an 11-symbol alphabet (slash, backslash, dot, colon, %2e, ?, #, tab, and three
|
|
25
|
-
* letters), plus hand-written shapes, found 39 values the two schemas treat differently — and
|
|
26
|
-
* every one is a literal `//host` (three only after `.trim()` strips a leading tab).
|
|
17
|
+
* `isHttpUrlOrSameOriginPath`'s doc carries the reasoning, including why a protocol-relative
|
|
18
|
+
* `//host` is refused while bare `http://` is accepted.
|
|
27
19
|
*/
|
|
28
20
|
export const uploadTargetUrlSchema = z
|
|
29
21
|
.string()
|
|
@@ -31,21 +23,6 @@ export const uploadTargetUrlSchema = z
|
|
|
31
23
|
.refine((value) => isHttpUrlOrSameOriginPath(value), {
|
|
32
24
|
message: 'must be an absolute http(s) URL or a site-relative path beginning with a single "/", with no query or fragment',
|
|
33
25
|
});
|
|
34
|
-
/**
|
|
35
|
-
* Where `/assets/…` is mounted for the editor's own previews (`media.publicBaseUrl`).
|
|
36
|
-
*
|
|
37
|
-
* Accepts an absolute http(s) URL, a protocol-relative `//host` URL, or a site-relative path
|
|
38
|
-
* (see `.claude/future-tasks/editor-asset-mount-topology.md` option 1 — the `basePath` fallback
|
|
39
|
-
* in `editor/context/AssetContext.tsx` exists for sites that need one and can't set an absolute
|
|
40
|
-
* value). Rejects non-http(s) schemes: a plain `z.string().url()` check would accept
|
|
41
|
-
* `publicBaseUrl: 'mailto:a@b.c'` and produce `/mailto:a@b.c/assets/…` at render time.
|
|
42
|
-
*/
|
|
43
|
-
export const assetMountUrlSchema = z
|
|
44
|
-
.string()
|
|
45
|
-
.trim()
|
|
46
|
-
.refine((value) => isHttpUrlOrSameOriginPath(value, { allowProtocolRelative: true }), {
|
|
47
|
-
message: 'must be an absolute http(s) URL, a protocol-relative "//host" URL, or a site-relative path beginning with a single "/", with no query or fragment',
|
|
48
|
-
});
|
|
49
26
|
/** `editor.previewPrefix`, by `uploadTargetUrlSchema`'s rule: `//host` leaves the scheme open. */
|
|
50
27
|
export const previewPrefixSchema = z
|
|
51
28
|
.string()
|
package/dist/config/types.d.ts
CHANGED
|
@@ -9,8 +9,10 @@ import type { LogicalPath, ContentId } from '../paths/types.js';
|
|
|
9
9
|
import type { PermissionPath } from '../authorization/types.js';
|
|
10
10
|
import type { EntryLinkUrlResolver } from '../entry-link-resolver.js';
|
|
11
11
|
import type { CropRect } from '../assets/transform-directives.js';
|
|
12
|
-
|
|
13
|
-
export declare const
|
|
12
|
+
declare const scalarFieldTypes: readonly ["string", "number", "boolean", "datetime", "code"];
|
|
13
|
+
export declare const markdownFieldTypes: readonly ["markdown", "mdx"];
|
|
14
|
+
export declare const primitiveFieldTypes: readonly ["string", "number", "boolean", "datetime", "code", "markdown", "mdx"];
|
|
15
|
+
export declare const fieldTypes: readonly ["string", "number", "boolean", "datetime", "code", "markdown", "mdx", "image", "select", "reference", "object", "block", "group"];
|
|
14
16
|
export type PrimitiveFieldType = (typeof primitiveFieldTypes)[number];
|
|
15
17
|
export type FieldType = (typeof fieldTypes)[number];
|
|
16
18
|
export type ContentFormat = 'md' | 'mdx' | 'json' | 'yaml';
|
|
@@ -51,7 +53,52 @@ interface BaseFieldConfig {
|
|
|
51
53
|
isBody?: boolean;
|
|
52
54
|
}
|
|
53
55
|
interface PrimitiveFieldConfig extends BaseFieldConfig {
|
|
54
|
-
type:
|
|
56
|
+
type: (typeof scalarFieldTypes)[number];
|
|
57
|
+
/**
|
|
58
|
+
* On a top-level, optional, single `datetime` field: Canopy's first submit of an entry new to
|
|
59
|
+
* the base branch sets the field, while it is empty, to the submit's time
|
|
60
|
+
* (`stamp-on-publish.ts`). `ensureStampOnPublishPlacement` (`validation.ts`) refuses it
|
|
61
|
+
* anywhere else.
|
|
62
|
+
*/
|
|
63
|
+
stampOnPublish?: boolean;
|
|
64
|
+
}
|
|
65
|
+
/** Content that would run code as it renders is refused at save; see `validation/markdown-safety.ts`. */
|
|
66
|
+
export interface MarkdownFieldConfig extends BaseFieldConfig {
|
|
67
|
+
type: (typeof markdownFieldTypes)[number];
|
|
68
|
+
/** Accept code, making every editor of this field a code author for whoever renders it. */
|
|
69
|
+
executable?: boolean;
|
|
70
|
+
/** On a `markdown` field the site compiles as MDX: check it as MDX. */
|
|
71
|
+
renderAs?: 'mdx';
|
|
72
|
+
/** Narrow what this field accepts as MDX, key by key over the site's `mdxAllow`. */
|
|
73
|
+
mdxAllow?: MdxAllowlist;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* A prop's allowed values. `true`: any value the base policy accepts, a bare attribute (`<X open>`,
|
|
77
|
+
* the value `true`) and `{…}` values included. `'string'`: only a quoted string, `title="…"`; a
|
|
78
|
+
* bare attribute and every `{…}` refused. The object form adds `maxLength`, in characters (code
|
|
79
|
+
* points). A list: those values only; `[true, false]` is a boolean (bare, `{true}`, `{false}`).
|
|
80
|
+
*/
|
|
81
|
+
export type MdxPropAllow = true | 'string' | {
|
|
82
|
+
type: 'string';
|
|
83
|
+
maxLength?: number;
|
|
84
|
+
} | Array<string | number | boolean>;
|
|
85
|
+
export interface MdxComponentAllow {
|
|
86
|
+
/** Allowed props by name. Omitted: any prop. `{}`: none. */
|
|
87
|
+
props?: Record<string, MdxPropAllow>;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* What an MDX body may hold, narrowing the base policy (`validation/mdx-allowlist.ts`). An omitted
|
|
91
|
+
* key keeps the base policy's choice.
|
|
92
|
+
*/
|
|
93
|
+
export interface MdxAllowlist {
|
|
94
|
+
/** Allowed components by name. Omitted: any plainly named component. `{}`: none. */
|
|
95
|
+
components?: Record<string, MdxComponentAllow>;
|
|
96
|
+
/** Allowed HTML tags, from the base policy's safe set. Omitted: that whole set. `[]`: none. */
|
|
97
|
+
htmlTags?: string[];
|
|
98
|
+
/** `false` refuses every `{…}`, comments and plain values included. Default `true`. */
|
|
99
|
+
expressions?: boolean;
|
|
100
|
+
/** `false` refuses `<>…</>`. Default `true`. */
|
|
101
|
+
fragments?: boolean;
|
|
55
102
|
}
|
|
56
103
|
export interface SelectFieldConfig extends BaseFieldConfig {
|
|
57
104
|
type: 'select';
|
|
@@ -134,9 +181,16 @@ export interface ObjectFieldConfig extends BaseFieldConfig {
|
|
|
134
181
|
fields: FieldConfig[];
|
|
135
182
|
/**
|
|
136
183
|
* On a `list: true` object, a direct `string` or `number` child whose value titles each
|
|
137
|
-
* item's card; a blank or non-finite value falls back to
|
|
184
|
+
* item's card; a blank or non-finite value falls back to the item's first non-blank `string`
|
|
185
|
+
* field, then "Item N".
|
|
138
186
|
*/
|
|
139
187
|
itemTitleField?: string;
|
|
188
|
+
/**
|
|
189
|
+
* On a `list: true` object, what one item is called, as it reads mid-sentence ("team member"):
|
|
190
|
+
* the add button reads "Add team member" and an untitled item "Team member 3". Without it,
|
|
191
|
+
* "Add item" and "Item 3". `ensureItemTitleFieldsExist` (`validation.ts`) checks it.
|
|
192
|
+
*/
|
|
193
|
+
itemLabel?: string;
|
|
140
194
|
}
|
|
141
195
|
/**
|
|
142
196
|
* Inline group field config: visually groups fields in the editor without creating
|
|
@@ -159,22 +213,19 @@ export interface InlineGroupFieldConfig {
|
|
|
159
213
|
export type CustomFieldConfig = BaseFieldConfig & {
|
|
160
214
|
type: Exclude<string, FieldType>;
|
|
161
215
|
};
|
|
162
|
-
export type FieldConfig = PrimitiveFieldConfig | SelectFieldConfig | ReferenceFieldConfig | ImageFieldConfig | BlockFieldConfig | ObjectFieldConfig | InlineGroupFieldConfig | CustomFieldConfig;
|
|
216
|
+
export type FieldConfig = PrimitiveFieldConfig | MarkdownFieldConfig | SelectFieldConfig | ReferenceFieldConfig | ImageFieldConfig | BlockFieldConfig | ObjectFieldConfig | InlineGroupFieldConfig | CustomFieldConfig;
|
|
163
217
|
export type MediaConfig = {
|
|
164
218
|
adapter: 'local';
|
|
165
|
-
publicBaseUrl?: string;
|
|
166
219
|
directory?: string;
|
|
167
220
|
} | {
|
|
168
221
|
adapter: 's3';
|
|
169
222
|
bucket: string;
|
|
170
223
|
region: string;
|
|
171
|
-
publicBaseUrl?: string;
|
|
172
224
|
/** POST target for presigned direct uploads; see mediaSchema's s3 branch. */
|
|
173
225
|
uploadUrl?: string;
|
|
174
226
|
maxUploadBytes?: number;
|
|
175
227
|
} | {
|
|
176
228
|
adapter: 'lfs';
|
|
177
|
-
publicBaseUrl?: string;
|
|
178
229
|
};
|
|
179
230
|
/**
|
|
180
231
|
* Field definitions for one entry type — the array of FieldConfig that
|
|
@@ -201,6 +252,23 @@ export type EntryTypeConfig = {
|
|
|
201
252
|
readonly description?: string;
|
|
202
253
|
readonly default?: boolean;
|
|
203
254
|
readonly maxItems?: number;
|
|
255
|
+
/**
|
|
256
|
+
* Set when this entry type could not be resolved, and `schema` is then empty. Only a
|
|
257
|
+
* branch workspace's schema carries it (see `BranchSchemaCache`); reading, writing,
|
|
258
|
+
* creating, renaming or deleting an entry of this type is refused.
|
|
259
|
+
*/
|
|
260
|
+
readonly unavailable?: EntryTypeUnavailable;
|
|
261
|
+
};
|
|
262
|
+
/**
|
|
263
|
+
* Why an entry type has no schema: its `.collection.json` names an entry schema the running
|
|
264
|
+
* code's registry does not define, as when content synced ahead of the image that adds it.
|
|
265
|
+
*/
|
|
266
|
+
export type EntryTypeUnavailable = {
|
|
267
|
+
readonly reason: 'unknown-schema';
|
|
268
|
+
/** The registry key the meta file names. */
|
|
269
|
+
readonly schemaRef: string;
|
|
270
|
+
/** The meta file naming it, relative to the content root. */
|
|
271
|
+
readonly metaFile: string;
|
|
204
272
|
};
|
|
205
273
|
/**
|
|
206
274
|
* Collection: contains nested collections and typed entries.
|
|
@@ -224,7 +292,7 @@ export type CollectionConfig = {
|
|
|
224
292
|
* Contains top-level collections and entries (typed content at the root level).
|
|
225
293
|
*/
|
|
226
294
|
export type RootCollectionConfig = {
|
|
227
|
-
/** Optional label for the root collection (e.g., "All
|
|
295
|
+
/** Optional label for the root collection (e.g., "All content", "Content") */
|
|
228
296
|
readonly label?: string;
|
|
229
297
|
/** Entry types at the root level */
|
|
230
298
|
readonly entries?: readonly EntryTypeConfig[];
|
|
@@ -254,7 +322,6 @@ export interface EditorSignInProps {
|
|
|
254
322
|
}
|
|
255
323
|
export interface CanopyEditorConfig {
|
|
256
324
|
title?: string;
|
|
257
|
-
subtitle?: string;
|
|
258
325
|
theme?: unknown;
|
|
259
326
|
/**
|
|
260
327
|
* Preview-pane routes for sites whose routes don't mirror their content tree; otherwise an entry
|
|
@@ -331,12 +398,15 @@ export interface EntryValidationIssue {
|
|
|
331
398
|
/** Path of the offending field (e.g. 'body'), when known. */
|
|
332
399
|
fieldPath?: string;
|
|
333
400
|
}
|
|
334
|
-
/** Input passed to the `validateEntry` hook on every editor
|
|
401
|
+
/** Input passed to the `validateEntry` hook on every content save, from the editor or not. */
|
|
335
402
|
export interface ValidateEntryInput {
|
|
336
403
|
/** Logical entry path including the content root (e.g. 'content/posts/hello-world'). */
|
|
337
404
|
entryPath: string;
|
|
338
405
|
branch: string;
|
|
339
|
-
/**
|
|
406
|
+
/**
|
|
407
|
+
* The entry type the save is validated and written as: an existing entry's on-disk type, else
|
|
408
|
+
* the requested one, else the collection's default. Absent only when the collection has none.
|
|
409
|
+
*/
|
|
340
410
|
entryType?: string;
|
|
341
411
|
format: 'md' | 'mdx' | 'json' | 'yaml';
|
|
342
412
|
data: Record<string, unknown>;
|
|
@@ -377,12 +447,18 @@ export interface CanopyConfig {
|
|
|
377
447
|
sourceRoot?: SourceRoot;
|
|
378
448
|
/** Deployment prefix the host app is served under — see {@link CanopyConfigInput.basePath}. */
|
|
379
449
|
basePath?: string;
|
|
450
|
+
/** HTTP status of an unauthenticated API response — see {@link CanopyConfigInput.unauthenticatedStatus}. */
|
|
451
|
+
unauthenticatedStatus?: 401 | 419;
|
|
452
|
+
/** What a production build does on a dangling reference — see {@link CanopyConfigInput.danglingReferences}. */
|
|
453
|
+
danglingReferences?: 'error' | 'warn';
|
|
380
454
|
editor?: CanopyEditorConfig;
|
|
381
455
|
authPlugin?: AuthPlugin;
|
|
382
456
|
/** Custom URL resolver for entry links — see {@link CanopyConfigInput.entryLinkUrl}. */
|
|
383
457
|
entryLinkUrl?: EntryLinkUrlResolver;
|
|
384
458
|
/** Save-time validation hook — see {@link CanopyConfigInput.validateEntry}. */
|
|
385
459
|
validateEntry?: ValidateEntryHook;
|
|
460
|
+
/** Site default for every field checked as MDX — see {@link CanopyConfigInput.mdxAllow}. */
|
|
461
|
+
mdxAllow?: MdxAllowlist;
|
|
386
462
|
/** Dev-mode-only behavior — see {@link CanopyConfigInput.dev}. */
|
|
387
463
|
dev?: DevConfig;
|
|
388
464
|
}
|
|
@@ -400,7 +476,10 @@ export interface CanopyConfigInput {
|
|
|
400
476
|
defaultRemoteUrl?: string;
|
|
401
477
|
gitBotAuthorName: string;
|
|
402
478
|
gitBotAuthorEmail: string;
|
|
403
|
-
/**
|
|
479
|
+
/**
|
|
480
|
+
* Add `Edited-by: Name (user id)` to submit commits, for the submitter and each user who saved
|
|
481
|
+
* since the last submit commit, and to settings commits for the user making the change. Default true.
|
|
482
|
+
*/
|
|
404
483
|
gitEditedByTrailers?: boolean;
|
|
405
484
|
/** Also add `Co-authored-by: Name <email>`. Default false: emails in public history are public. */
|
|
406
485
|
gitCoAuthoredByTrailers?: boolean;
|
|
@@ -442,12 +521,33 @@ export interface CanopyConfigInput {
|
|
|
442
521
|
* silently filter out every entry (zero static params, a build that goes green with no pages).
|
|
443
522
|
*/
|
|
444
523
|
basePath?: string;
|
|
524
|
+
/**
|
|
525
|
+
* HTTP status of an API response to a request with no accepted session. Default 401.
|
|
526
|
+
*
|
|
527
|
+
* Set 419 when the site's own pages sit behind HTTP Basic auth on the same origin as the
|
|
528
|
+
* editor. Chrome, holding a Basic credential entered at the site root, sends it with the
|
|
529
|
+
* editor's API requests and drops it when one answers 401; the next gated request, such as a
|
|
530
|
+
* preview image, then waits on a Basic prompt. 419 rather than 403
|
|
531
|
+
* because a CloudFront custom error response cannot match 419, and one mapping 403 to an error
|
|
532
|
+
* page would replace the body below.
|
|
533
|
+
*
|
|
534
|
+
* The body says `status: 401` either way, and that is what the editor detects sign-out from.
|
|
535
|
+
*/
|
|
536
|
+
unauthenticatedStatus?: 401 | 419;
|
|
537
|
+
/**
|
|
538
|
+
* What a production build does when a reference names no entry. Default `'error'`: the build
|
|
539
|
+
* fails, listing each entry, field path and missing id, since the page would otherwise ship
|
|
540
|
+
* without what the reference supplied. `'warn'` prints the list, capped at 20, and lets the build pass.
|
|
541
|
+
*/
|
|
542
|
+
danglingReferences?: 'error' | 'warn';
|
|
445
543
|
editor?: CanopyEditorConfig;
|
|
446
544
|
authPlugin?: AuthPlugin;
|
|
447
545
|
/** Custom URL resolver for entry links. Overrides the default URL computation. */
|
|
448
546
|
entryLinkUrl?: EntryLinkUrlResolver;
|
|
449
547
|
/** Save-time validation hook. 'error' issues reject the save; 'warning' issues are returned with it. */
|
|
450
548
|
validateEntry?: ValidateEntryHook;
|
|
549
|
+
/** What every field checked as MDX accepts; a field's own `mdxAllow` replaces it key by key. */
|
|
550
|
+
mdxAllow?: MdxAllowlist;
|
|
451
551
|
/** Dev-mode-only behavior (content-sync divergence detection). Ignored when mode !== 'dev'. */
|
|
452
552
|
dev?: DevConfig;
|
|
453
553
|
}
|
|
@@ -487,22 +587,16 @@ export type FlatSchemaItem = {
|
|
|
487
587
|
schemaRef?: string;
|
|
488
588
|
default?: boolean;
|
|
489
589
|
maxItems?: number;
|
|
590
|
+
/** See {@link EntryTypeConfig.unavailable}. */
|
|
591
|
+
unavailable?: EntryTypeUnavailable;
|
|
490
592
|
};
|
|
491
593
|
/**
|
|
492
594
|
* Client config - subset safe for browser (DRY - derived from CanopyConfig)
|
|
493
595
|
* Use flatSchema for O(1) cached access to the flattened schema structure.
|
|
494
596
|
* Schema is loaded from .collection.json files on the server and provided as flatSchema.
|
|
495
597
|
*/
|
|
496
|
-
export type CanopyClientConfig = Pick<CanopyConfig, 'defaultBaseBranch' | 'defaultActiveBranch' | 'contentRoot' | 'editor' | 'mode' | 'entryLinkUrl' | 'basePath'> & {
|
|
598
|
+
export type CanopyClientConfig = Pick<CanopyConfig, 'defaultBaseBranch' | 'defaultActiveBranch' | 'contentRoot' | 'editor' | 'mode' | 'entryLinkUrl' | 'basePath' | 'mdxAllow'> & {
|
|
497
599
|
flatSchema: FlatSchemaItem[];
|
|
498
|
-
/**
|
|
499
|
-
* `media.publicBaseUrl`, when configured - the only part of `media` safe/
|
|
500
|
-
* useful to expose client-side (the editor may be served from a different
|
|
501
|
-
* origin than the site; the rest of `MediaConfig` - bucket, region, etc -
|
|
502
|
-
* has no business in a browser bundle). Threaded through to `Editor`'s
|
|
503
|
-
* `assetBaseUrl` prop. Undefined means root-relative asset URLs.
|
|
504
|
-
*/
|
|
505
|
-
assetBaseUrl?: string;
|
|
506
600
|
};
|
|
507
601
|
export interface ClientOnlyFields {
|
|
508
602
|
editor?: {
|
package/dist/config/types.js
CHANGED
|
@@ -2,15 +2,9 @@
|
|
|
2
2
|
* Type definitions for CanopyCMS configuration.
|
|
3
3
|
* These are pure TypeScript types - Zod schemas are in ./schemas/
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
'boolean',
|
|
9
|
-
'datetime',
|
|
10
|
-
'markdown',
|
|
11
|
-
'mdx',
|
|
12
|
-
'code',
|
|
13
|
-
];
|
|
5
|
+
const scalarFieldTypes = ['string', 'number', 'boolean', 'datetime', 'code'];
|
|
6
|
+
export const markdownFieldTypes = ['markdown', 'mdx'];
|
|
7
|
+
export const primitiveFieldTypes = [...scalarFieldTypes, ...markdownFieldTypes];
|
|
14
8
|
// 'image' is not a primitive: it has a structured value (ImageFieldValue) and
|
|
15
9
|
// its own per-type config (ImageFieldConfig, below), so it gets a dedicated
|
|
16
10
|
// entry rather than sharing PrimitiveFieldConfig's flat shape.
|
|
@@ -5,12 +5,19 @@
|
|
|
5
5
|
* from `createEntrySchemaRegistry` so the canonical schema-authoring path runs
|
|
6
6
|
* the same checks. Exported so the test suite can exercise them directly.
|
|
7
7
|
*/
|
|
8
|
-
import type { CanopyConfig } from './types.js';
|
|
8
|
+
import type { CanopyConfig, FieldConfig } from './types.js';
|
|
9
9
|
/**
|
|
10
10
|
* Recursively check that all select fields have options defined.
|
|
11
11
|
* Throws an error if a select field is missing options.
|
|
12
12
|
*/
|
|
13
13
|
export declare const ensureSelectFieldsHaveOptions: (fields: unknown) => void;
|
|
14
|
+
/**
|
|
15
|
+
* Check that every data field's name can be spelled as a field path segment (`isPathFieldName`):
|
|
16
|
+
* the form, the preview's marks, validation errors and comment threads all name a field by its
|
|
17
|
+
* path. An inline group's own name is not part of any path, so only its children are checked.
|
|
18
|
+
* `ITEM_KEY` is reserved too, since every list item and block carries it.
|
|
19
|
+
*/
|
|
20
|
+
export declare const ensureFieldNamesSpellInPaths: (fields: unknown) => void;
|
|
14
21
|
/**
|
|
15
22
|
* Recursively check that all reference fields have at least one of `collections` or `entryTypes`.
|
|
16
23
|
* Throws an error if a reference field has neither.
|
|
@@ -26,9 +33,11 @@ export declare const ensureReferenceFieldsHaveScope: (fields: unknown) => void;
|
|
|
26
33
|
*/
|
|
27
34
|
export declare const forEachReferenceField: (fields: unknown, visit: (field: Record<string, unknown>) => void) => void;
|
|
28
35
|
/**
|
|
29
|
-
* Check that every `
|
|
30
|
-
*
|
|
31
|
-
*
|
|
36
|
+
* Check that every `itemLabel` is non-blank text and, like every `itemTitleField`, sits on a
|
|
37
|
+
* `list: true` object, and that every `itemTitleField` names a direct child of type `string` or
|
|
38
|
+
* `number`, the only values the card heading shows as typed (a reference would show its raw id, a
|
|
39
|
+
* select its stored value). Throws an error when it does not. Entry schemas reach the editor
|
|
40
|
+
* through these checks, not the zod field schema.
|
|
32
41
|
*/
|
|
33
42
|
export declare const ensureItemTitleFieldsExist: (fields: unknown) => void;
|
|
34
43
|
/**
|
|
@@ -46,6 +55,18 @@ export declare const ensureNoFlattenedFieldNameCollisions: (fields: unknown, sco
|
|
|
46
55
|
* correct TypeScript types but broken editor rendering.
|
|
47
56
|
*/
|
|
48
57
|
export declare const ensureNoGroupsInsideComplexFields: (fields: unknown) => void;
|
|
58
|
+
/**
|
|
59
|
+
* Check that `stampOnPublish` sits only on an entry's own top-level `datetime` field (an inline
|
|
60
|
+
* group's members count, since groups carry no data) that is neither `list: true` nor
|
|
61
|
+
* `required: true`. The submit that stamps sets one top-level value, and a required field can
|
|
62
|
+
* never be saved empty, so it would never be stamped. Throws on the first problem.
|
|
63
|
+
*/
|
|
64
|
+
export declare const ensureStampOnPublishPlacement: (fields: unknown, scopeLabel?: string) => void;
|
|
65
|
+
/**
|
|
66
|
+
* Check every markdown and mdx field's `mdxAllow` against its schema and its `renderAs`,
|
|
67
|
+
* `mdxAllow` and `executable` against each other. Throws on the first problem.
|
|
68
|
+
*/
|
|
69
|
+
export declare const ensureMarkdownFieldOptions: (fields: readonly FieldConfig[]) => void;
|
|
49
70
|
/**
|
|
50
71
|
* Validate and normalize a CanopyConfig object.
|
|
51
72
|
* Performs Zod validation and normalizes paths. Field-shape validation for
|