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
|
@@ -151,8 +151,9 @@ export class CmsStack extends Stack {
|
|
|
151
151
|
githubRepo: props.githubRepo,
|
|
152
152
|
deploymentName: props.deploymentName,
|
|
153
153
|
|
|
154
|
-
// Derived from canopycms.config.ts (imported above), not hardcoded
|
|
155
|
-
//
|
|
154
|
+
// Derived from canopycms.config.ts (imported above), not hardcoded, so the
|
|
155
|
+
// worker and the Lambda agree. Unset in both, the worker detects the base
|
|
156
|
+
// branch and the Lambda reads what it chose. A wrong baseBranch
|
|
156
157
|
// crash-loops the worker forever: verifyBaseBranchExists throws when the
|
|
157
158
|
// named branch doesn't exist in the cloned remote, and systemd restarts
|
|
158
159
|
// into the same failure indefinitely. See CanopyCmsServiceProps.baseBranch's
|
|
@@ -198,19 +199,15 @@ export class CmsStack extends Stack {
|
|
|
198
199
|
reservedConcurrency: 50,
|
|
199
200
|
})
|
|
200
201
|
|
|
201
|
-
// Media support (uploads
|
|
202
|
+
// Media support (uploads and image derivatives). To enable it:
|
|
202
203
|
//
|
|
203
204
|
// 1. add `AssetSupport` to the `canopycms-cdk` import at the top;
|
|
204
205
|
// 2. uncomment the block below, moving it ABOVE `cmsService` (it has to
|
|
205
206
|
// exist before you can pass its bucket);
|
|
206
207
|
// 3. pass `assetBucket: assetSupport.bucket` to CanopyCmsService;
|
|
207
208
|
// 4. pass `assetSupport` to CanopyCmsDistribution below - it attaches
|
|
208
|
-
//
|
|
209
|
-
//
|
|
210
|
-
// patterns in order, so the general pattern would otherwise
|
|
211
|
-
// swallow the transform one). `cdk synth` fails loudly if a
|
|
212
|
-
// hand-written `additionalBehaviors` ever gets that order wrong
|
|
213
|
-
// instead.
|
|
209
|
+
// `/assets/t/*` before `/assets/*`, the order CloudFront needs, and
|
|
210
|
+
// `cdk synth` fails if a hand-written `additionalBehaviors` does not.
|
|
214
211
|
//
|
|
215
212
|
// `editorOrigins` is the S3 CORS allowlist for the editor's presigned
|
|
216
213
|
// uploads, so it must list the origin the editor is served from. Include
|
|
@@ -220,11 +217,17 @@ export class CmsStack extends Stack {
|
|
|
220
217
|
// CloudFront edge instead); with neither, a construct-created bucket
|
|
221
218
|
// refuses to synth.
|
|
222
219
|
//
|
|
223
|
-
//
|
|
224
|
-
//
|
|
225
|
-
//
|
|
220
|
+
// `/assets/*` and `/assets/t/*` serve only what is in the bucket and
|
|
221
|
+
// compute nothing: an image derivative no one wrote is a 403. Write every
|
|
222
|
+
// derivative a site build references before releasing that build, with
|
|
223
|
+
// `canopycms collect-asset-refs <outDir>` after the build and then
|
|
224
|
+
// `canopycms materialize-assets --refs <outDir>/canopy-asset-refs.json`.
|
|
225
|
+
// To compute missing derivatives on request instead, pass
|
|
226
|
+
// `lazyPublicTransforms: true`; that deploys a transform Lambda, so inside
|
|
227
|
+
// this monorepo run `pnpm --filter canopycms-cdk run build:lambda` first
|
|
228
|
+
// (the published package ships it built).
|
|
226
229
|
//
|
|
227
|
-
// See the
|
|
230
|
+
// See "Media: the public image path" in docs/deploying-to-aws.md.
|
|
228
231
|
//
|
|
229
232
|
// const assetSupport = new AssetSupport(this, 'Assets', {
|
|
230
233
|
// editorOrigins: [`https://${props.domainName}`],
|
package/dist/client.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
export type { CanopyClientConfig, EditorSignInProps } from './config/index.js';
|
|
2
2
|
export type { CustomFieldRenderers, CustomFieldRenderProps } from './editor/FormRenderer.js';
|
|
3
|
-
export * from './editor/EditorPanes.js';
|
|
4
3
|
export * from './editor/EntryNavigator.js';
|
|
5
4
|
export * from './editor/Editor.js';
|
|
6
|
-
export
|
|
5
|
+
export { PreviewFrame } from './editor/PreviewFrame.js';
|
|
7
6
|
export * from './editor/canopy-path.js';
|
|
8
7
|
export * from './editor/theme.js';
|
|
9
8
|
export * from './editor/editor-config.js';
|
package/dist/client.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export * from './editor/EditorPanes.js';
|
|
3
2
|
export * from './editor/EntryNavigator.js';
|
|
4
3
|
export * from './editor/Editor.js';
|
|
5
|
-
export
|
|
4
|
+
export { PreviewFrame } from './editor/PreviewFrame.js';
|
|
6
5
|
export * from './editor/canopy-path.js';
|
|
7
6
|
export * from './editor/theme.js';
|
|
8
7
|
export * from './editor/editor-config.js';
|
package/dist/comment-store.d.ts
CHANGED
|
@@ -17,6 +17,17 @@ export interface CommentThread {
|
|
|
17
17
|
authorId: string;
|
|
18
18
|
entryPath?: string;
|
|
19
19
|
canopyPath?: string;
|
|
20
|
+
/**
|
|
21
|
+
* For a field thread inside list items or blocks: the key (`item-keys.ts`) of each item on
|
|
22
|
+
* `canopyPath`, outermost first. The thread follows those items wherever they move; the
|
|
23
|
+
* indexes in `canopyPath` are only where they were when it was made.
|
|
24
|
+
*/
|
|
25
|
+
itemKeys?: string[];
|
|
26
|
+
/**
|
|
27
|
+
* Set by the editor, never stored: an item named by `itemKeys` is gone from the value it shows,
|
|
28
|
+
* so the thread stays on the entry rather than on whichever item holds its old index.
|
|
29
|
+
*/
|
|
30
|
+
onRemovedItem?: boolean;
|
|
20
31
|
}
|
|
21
32
|
export interface CommentsFile {
|
|
22
33
|
schemaVersion: number;
|
|
@@ -82,10 +93,24 @@ export declare class CommentStore {
|
|
|
82
93
|
type: CommentType;
|
|
83
94
|
entryPath?: string;
|
|
84
95
|
canopyPath?: string;
|
|
96
|
+
itemKeys?: string[];
|
|
85
97
|
}): Promise<{
|
|
86
98
|
threadId: string;
|
|
87
99
|
commentId: string;
|
|
88
100
|
}>;
|
|
101
|
+
/**
|
|
102
|
+
* Append a comment to an existing thread, or return null when `threadId` names none at write
|
|
103
|
+
* time. Unlike {@link addComment}, a missing thread is never created, so a reply cannot plant
|
|
104
|
+
* a thread under an id or entry path nobody checked.
|
|
105
|
+
*/
|
|
106
|
+
addReply(options: {
|
|
107
|
+
userId: string;
|
|
108
|
+
text: string;
|
|
109
|
+
threadId: string;
|
|
110
|
+
}): Promise<{
|
|
111
|
+
threadId: string;
|
|
112
|
+
commentId: string;
|
|
113
|
+
} | null>;
|
|
89
114
|
resolveThread(threadId: string, userId: string): Promise<boolean>;
|
|
90
115
|
listThreads(options?: {
|
|
91
116
|
includeResolved?: boolean;
|
package/dist/comment-store.js
CHANGED
|
@@ -10,6 +10,15 @@ class CommentStoreConflictError extends Error {
|
|
|
10
10
|
this.name = 'CommentStoreConflictError';
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* A thread by id, own properties only: `threads` is a JSON-parsed plain object, so an id such
|
|
15
|
+
* as `__proto__` or `constructor` would otherwise reach `Object.prototype` or `Object`.
|
|
16
|
+
*/
|
|
17
|
+
function ownThread(data, threadId) {
|
|
18
|
+
return Object.prototype.hasOwnProperty.call(data.threads, threadId)
|
|
19
|
+
? data.threads[threadId]
|
|
20
|
+
: undefined;
|
|
21
|
+
}
|
|
13
22
|
/**
|
|
14
23
|
* Comment storage for a branch workspace, in .canopy-meta/comments.json and
|
|
15
24
|
* never committed to git.
|
|
@@ -115,7 +124,8 @@ export class CommentStore {
|
|
|
115
124
|
timestamp,
|
|
116
125
|
text: options.text,
|
|
117
126
|
};
|
|
118
|
-
|
|
127
|
+
const existing = ownThread(data, threadId);
|
|
128
|
+
if (!existing) {
|
|
119
129
|
data.threads[threadId] = {
|
|
120
130
|
id: threadId,
|
|
121
131
|
comments: [comment],
|
|
@@ -125,23 +135,48 @@ export class CommentStore {
|
|
|
125
135
|
authorId: options.userId,
|
|
126
136
|
entryPath: options.entryPath,
|
|
127
137
|
canopyPath: options.canopyPath,
|
|
138
|
+
...(options.itemKeys?.length ? { itemKeys: options.itemKeys } : {}),
|
|
128
139
|
};
|
|
129
140
|
}
|
|
130
141
|
else {
|
|
131
|
-
|
|
142
|
+
existing.comments.push(comment);
|
|
132
143
|
}
|
|
133
144
|
await this.writeData(data, version);
|
|
134
145
|
return { threadId, commentId };
|
|
135
146
|
});
|
|
136
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Append a comment to an existing thread, or return null when `threadId` names none at write
|
|
150
|
+
* time. Unlike {@link addComment}, a missing thread is never created, so a reply cannot plant
|
|
151
|
+
* a thread under an id or entry path nobody checked.
|
|
152
|
+
*/
|
|
153
|
+
async addReply(options) {
|
|
154
|
+
const commentId = randomUUID();
|
|
155
|
+
return this.withMutation(async (data, version) => {
|
|
156
|
+
const thread = ownThread(data, options.threadId);
|
|
157
|
+
if (!thread) {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
thread.comments.push({
|
|
161
|
+
id: commentId,
|
|
162
|
+
threadId: options.threadId,
|
|
163
|
+
userId: options.userId,
|
|
164
|
+
timestamp: new Date().toISOString(),
|
|
165
|
+
text: options.text,
|
|
166
|
+
});
|
|
167
|
+
await this.writeData(data, version);
|
|
168
|
+
return { threadId: options.threadId, commentId };
|
|
169
|
+
});
|
|
170
|
+
}
|
|
137
171
|
async resolveThread(threadId, userId) {
|
|
138
172
|
return this.withMutation(async (data, version) => {
|
|
139
|
-
|
|
173
|
+
const thread = ownThread(data, threadId);
|
|
174
|
+
if (!thread) {
|
|
140
175
|
return false;
|
|
141
176
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
177
|
+
thread.resolved = true;
|
|
178
|
+
thread.resolvedBy = userId;
|
|
179
|
+
thread.resolvedAt = new Date().toISOString();
|
|
145
180
|
await this.writeData(data, version);
|
|
146
181
|
return true;
|
|
147
182
|
});
|
|
@@ -156,11 +191,11 @@ export class CommentStore {
|
|
|
156
191
|
}
|
|
157
192
|
async getThread(threadId) {
|
|
158
193
|
const data = await this.load();
|
|
159
|
-
return data
|
|
194
|
+
return ownThread(data, threadId) ?? null;
|
|
160
195
|
}
|
|
161
196
|
async deleteThread(threadId) {
|
|
162
197
|
return this.withMutation(async (data, version) => {
|
|
163
|
-
if (!data
|
|
198
|
+
if (!ownThread(data, threadId)) {
|
|
164
199
|
return false;
|
|
165
200
|
}
|
|
166
201
|
delete data.threads[threadId];
|
package/dist/config/flatten.js
CHANGED
|
@@ -62,6 +62,7 @@ export const flattenSchema = (root, basePath = '') => {
|
|
|
62
62
|
schemaRef: entryType.schemaRef,
|
|
63
63
|
default: entryType.default,
|
|
64
64
|
maxItems: entryType.maxItems,
|
|
65
|
+
...(entryType.unavailable && { unavailable: entryType.unavailable }),
|
|
65
66
|
});
|
|
66
67
|
}
|
|
67
68
|
}
|
|
@@ -101,6 +102,7 @@ export const flattenSchema = (root, basePath = '') => {
|
|
|
101
102
|
schemaRef: entryType.schemaRef,
|
|
102
103
|
default: entryType.default,
|
|
103
104
|
maxItems: entryType.maxItems,
|
|
105
|
+
...(entryType.unavailable && { unavailable: entryType.unavailable }),
|
|
104
106
|
});
|
|
105
107
|
}
|
|
106
108
|
}
|
package/dist/config/helpers.js
CHANGED
|
@@ -33,7 +33,7 @@ export function defineCanopyConfig(config) {
|
|
|
33
33
|
server: validated,
|
|
34
34
|
// Client config helper - extracts safe subset and merges overrides
|
|
35
35
|
client: (clientOverrides) => {
|
|
36
|
-
const { defaultBaseBranch, defaultActiveBranch, contentRoot, editor, mode, entryLinkUrl,
|
|
36
|
+
const { defaultBaseBranch, defaultActiveBranch, contentRoot, editor, mode, entryLinkUrl, basePath, mdxAllow, } = validated;
|
|
37
37
|
// flatSchema is loaded dynamically by the editor via API (from .collection.json files)
|
|
38
38
|
const clientConfig = {
|
|
39
39
|
defaultBaseBranch,
|
|
@@ -42,8 +42,8 @@ export function defineCanopyConfig(config) {
|
|
|
42
42
|
editor,
|
|
43
43
|
mode,
|
|
44
44
|
entryLinkUrl,
|
|
45
|
-
assetBaseUrl: media?.publicBaseUrl,
|
|
46
45
|
basePath,
|
|
46
|
+
mdxAllow,
|
|
47
47
|
flatSchema: [],
|
|
48
48
|
};
|
|
49
49
|
// Merge client overrides (e.g., auth handlers from useClerkAuthConfig)
|
package/dist/config/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* import { defineCanopyConfig, type FieldConfig } from 'canopycms'
|
|
9
9
|
* ```
|
|
10
10
|
*/
|
|
11
|
-
export type { PrimitiveFieldType, FieldType, ContentFormat, MediaAdapterKind, PermissionLevel, PermissionTarget, PathPermission, SelectOption, ReferenceOption, FieldConfig, BlockConfig, BlockFieldConfig, SelectFieldConfig, ReferenceFieldConfig, ImageFieldConfig, ImageFieldValue, ObjectFieldConfig, InlineGroupFieldConfig, CustomFieldConfig, EntrySchema, BranchSchema, EntryTypeConfig, CollectionConfig, RootCollectionConfig, MediaConfig, CanopyEditorConfig, DefaultBranchAccess, DefaultPathAccess, DefaultPathAccessLevel, DefaultPathAccessLevels, DefaultBaseBranch, DefaultRemoteName, DefaultRemoteUrl, GitBotAuthorName, GitBotAuthorEmail, GithubTokenEnvVar, CanopyOperatingMode, ContentRoot, SourceRoot, CanopyConfig, CanopyConfigInput, CanopyConfigFragment, FlatSchemaItem, CanopyClientConfig, ClientOnlyFields, EditorSignInProps, EntryValidationIssue, ValidateEntryInput, ValidateEntryHook, } from './types.js';
|
|
11
|
+
export type { PrimitiveFieldType, FieldType, ContentFormat, MediaAdapterKind, PermissionLevel, PermissionTarget, PathPermission, SelectOption, ReferenceOption, FieldConfig, BlockConfig, BlockFieldConfig, SelectFieldConfig, ReferenceFieldConfig, ImageFieldConfig, MarkdownFieldConfig, MdxAllowlist, MdxComponentAllow, MdxPropAllow, ImageFieldValue, ObjectFieldConfig, InlineGroupFieldConfig, CustomFieldConfig, EntrySchema, BranchSchema, EntryTypeConfig, EntryTypeUnavailable, CollectionConfig, RootCollectionConfig, MediaConfig, CanopyEditorConfig, DefaultBranchAccess, DefaultPathAccess, DefaultPathAccessLevel, DefaultPathAccessLevels, DefaultBaseBranch, DefaultRemoteName, DefaultRemoteUrl, GitBotAuthorName, GitBotAuthorEmail, GithubTokenEnvVar, CanopyOperatingMode, ContentRoot, SourceRoot, CanopyConfig, CanopyConfigInput, CanopyConfigFragment, FlatSchemaItem, CanopyClientConfig, ClientOnlyFields, EditorSignInProps, EntryValidationIssue, ValidateEntryInput, ValidateEntryHook, } from './types.js';
|
|
12
12
|
export { primitiveFieldTypes, fieldTypes } from './types.js';
|
|
13
13
|
export { CanopyConfigSchema, getConfigDefaults, DEFAULT_PROD_WORKSPACE } from './schemas/config.js';
|
|
14
14
|
export { fieldSchema, blockSchema, selectOptionSchema, referenceOptionSchema, imageFieldSchema, } from './schemas/field.js';
|
|
@@ -8,46 +8,37 @@ import type { EditorSignInProps, ValidateEntryHook } from '../types.js';
|
|
|
8
8
|
export declare const CanopyConfigSchema: z.ZodObject<{
|
|
9
9
|
media: z.ZodOptional<z.ZodDiscriminatedUnion<"adapter", [z.ZodObject<{
|
|
10
10
|
adapter: z.ZodLiteral<"local">;
|
|
11
|
-
publicBaseUrl: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
12
11
|
directory: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
|
|
13
12
|
}, "strict", z.ZodTypeAny, {
|
|
14
13
|
adapter: "local";
|
|
15
|
-
publicBaseUrl?: string | undefined;
|
|
16
14
|
directory?: string | undefined;
|
|
17
15
|
}, {
|
|
18
16
|
adapter: "local";
|
|
19
|
-
publicBaseUrl?: string | undefined;
|
|
20
17
|
directory?: string | undefined;
|
|
21
18
|
}>, z.ZodObject<{
|
|
22
19
|
adapter: z.ZodLiteral<"s3">;
|
|
23
20
|
bucket: z.ZodString;
|
|
24
21
|
region: z.ZodString;
|
|
25
|
-
publicBaseUrl: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
26
22
|
uploadUrl: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
27
23
|
maxUploadBytes: z.ZodOptional<z.ZodNumber>;
|
|
28
24
|
}, "strict", z.ZodTypeAny, {
|
|
29
25
|
adapter: "s3";
|
|
30
26
|
bucket: string;
|
|
31
27
|
region: string;
|
|
32
|
-
publicBaseUrl?: string | undefined;
|
|
33
28
|
uploadUrl?: string | undefined;
|
|
34
29
|
maxUploadBytes?: number | undefined;
|
|
35
30
|
}, {
|
|
36
31
|
adapter: "s3";
|
|
37
32
|
bucket: string;
|
|
38
33
|
region: string;
|
|
39
|
-
publicBaseUrl?: string | undefined;
|
|
40
34
|
uploadUrl?: string | undefined;
|
|
41
35
|
maxUploadBytes?: number | undefined;
|
|
42
36
|
}>, z.ZodObject<{
|
|
43
37
|
adapter: z.ZodLiteral<"lfs">;
|
|
44
|
-
publicBaseUrl: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
45
38
|
}, "strict", z.ZodTypeAny, {
|
|
46
39
|
adapter: "lfs";
|
|
47
|
-
publicBaseUrl?: string | undefined;
|
|
48
40
|
}, {
|
|
49
41
|
adapter: "lfs";
|
|
50
|
-
publicBaseUrl?: string | undefined;
|
|
51
42
|
}>]>>;
|
|
52
43
|
defaultBranchAccess: z.ZodDefault<z.ZodEnum<["allow", "deny"]>>;
|
|
53
44
|
defaultPathAccess: z.ZodDefault<z.ZodUnion<[z.ZodEnum<["allow", "deny"]>, z.ZodObject<{
|
|
@@ -80,9 +71,10 @@ export declare const CanopyConfigSchema: z.ZodObject<{
|
|
|
80
71
|
contentRoot: z.ZodDefault<z.ZodDefault<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>>;
|
|
81
72
|
sourceRoot: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
82
73
|
basePath: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>>;
|
|
74
|
+
unauthenticatedStatus: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<401>, z.ZodLiteral<419>]>>;
|
|
75
|
+
danglingReferences: z.ZodOptional<z.ZodEnum<["error", "warn"]>>;
|
|
83
76
|
editor: z.ZodOptional<z.ZodObject<{
|
|
84
77
|
title: z.ZodOptional<z.ZodString>;
|
|
85
|
-
subtitle: z.ZodOptional<z.ZodString>;
|
|
86
78
|
theme: z.ZodOptional<z.ZodUnknown>;
|
|
87
79
|
previewBase: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodLiteral<false>]>>>;
|
|
88
80
|
previewPrefix: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
@@ -92,7 +84,6 @@ export declare const CanopyConfigSchema: z.ZodObject<{
|
|
|
92
84
|
SignInComponent: z.ZodOptional<z.ZodType<import("react").ComponentType<EditorSignInProps>, z.ZodTypeDef, import("react").ComponentType<EditorSignInProps>>>;
|
|
93
85
|
}, "strip", z.ZodTypeAny, {
|
|
94
86
|
title?: string | undefined;
|
|
95
|
-
subtitle?: string | undefined;
|
|
96
87
|
theme?: unknown;
|
|
97
88
|
previewBase?: Record<string, string | false> | undefined;
|
|
98
89
|
previewPrefix?: string | undefined;
|
|
@@ -102,7 +93,6 @@ export declare const CanopyConfigSchema: z.ZodObject<{
|
|
|
102
93
|
SignInComponent?: import("react").ComponentType<EditorSignInProps> | undefined;
|
|
103
94
|
}, {
|
|
104
95
|
title?: string | undefined;
|
|
105
|
-
subtitle?: string | undefined;
|
|
106
96
|
theme?: unknown;
|
|
107
97
|
previewBase?: Record<string, string | false> | undefined;
|
|
108
98
|
previewPrefix?: string | undefined;
|
|
@@ -114,6 +104,7 @@ export declare const CanopyConfigSchema: z.ZodObject<{
|
|
|
114
104
|
authPlugin: z.ZodOptional<z.ZodType<AuthPlugin, z.ZodTypeDef, AuthPlugin>>;
|
|
115
105
|
entryLinkUrl: z.ZodOptional<z.ZodType<EntryLinkUrlResolver, z.ZodTypeDef, EntryLinkUrlResolver>>;
|
|
116
106
|
validateEntry: z.ZodOptional<z.ZodType<ValidateEntryHook, z.ZodTypeDef, ValidateEntryHook>>;
|
|
107
|
+
mdxAllow: z.ZodOptional<z.ZodType<import("../index.js").MdxAllowlist, z.ZodTypeDef, import("../index.js").MdxAllowlist>>;
|
|
117
108
|
dev: z.ZodOptional<z.ZodObject<{
|
|
118
109
|
contentSync: z.ZodOptional<z.ZodDefault<z.ZodEnum<["off", "warn"]>>>;
|
|
119
110
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -139,18 +130,15 @@ export declare const CanopyConfigSchema: z.ZodObject<{
|
|
|
139
130
|
settingsBranch?: string | undefined;
|
|
140
131
|
media?: {
|
|
141
132
|
adapter: "local";
|
|
142
|
-
publicBaseUrl?: string | undefined;
|
|
143
133
|
directory?: string | undefined;
|
|
144
134
|
} | {
|
|
145
135
|
adapter: "s3";
|
|
146
136
|
bucket: string;
|
|
147
137
|
region: string;
|
|
148
|
-
publicBaseUrl?: string | undefined;
|
|
149
138
|
uploadUrl?: string | undefined;
|
|
150
139
|
maxUploadBytes?: number | undefined;
|
|
151
140
|
} | {
|
|
152
141
|
adapter: "lfs";
|
|
153
|
-
publicBaseUrl?: string | undefined;
|
|
154
142
|
} | undefined;
|
|
155
143
|
defaultBaseBranch?: string | undefined;
|
|
156
144
|
defaultActiveBranch?: string | undefined;
|
|
@@ -163,9 +151,10 @@ export declare const CanopyConfigSchema: z.ZodObject<{
|
|
|
163
151
|
deploymentName?: string | undefined;
|
|
164
152
|
sourceRoot?: string | undefined;
|
|
165
153
|
basePath?: string | undefined;
|
|
154
|
+
unauthenticatedStatus?: 401 | 419 | undefined;
|
|
155
|
+
danglingReferences?: "error" | "warn" | undefined;
|
|
166
156
|
editor?: {
|
|
167
157
|
title?: string | undefined;
|
|
168
|
-
subtitle?: string | undefined;
|
|
169
158
|
theme?: unknown;
|
|
170
159
|
previewBase?: Record<string, string | false> | undefined;
|
|
171
160
|
previewPrefix?: string | undefined;
|
|
@@ -177,6 +166,7 @@ export declare const CanopyConfigSchema: z.ZodObject<{
|
|
|
177
166
|
authPlugin?: AuthPlugin | undefined;
|
|
178
167
|
entryLinkUrl?: EntryLinkUrlResolver | undefined;
|
|
179
168
|
validateEntry?: ValidateEntryHook | undefined;
|
|
169
|
+
mdxAllow?: import("../index.js").MdxAllowlist | undefined;
|
|
180
170
|
}, {
|
|
181
171
|
gitBotAuthorName: string;
|
|
182
172
|
gitBotAuthorEmail: string;
|
|
@@ -187,18 +177,15 @@ export declare const CanopyConfigSchema: z.ZodObject<{
|
|
|
187
177
|
settingsBranch?: string | undefined;
|
|
188
178
|
media?: {
|
|
189
179
|
adapter: "local";
|
|
190
|
-
publicBaseUrl?: string | undefined;
|
|
191
180
|
directory?: string | undefined;
|
|
192
181
|
} | {
|
|
193
182
|
adapter: "s3";
|
|
194
183
|
bucket: string;
|
|
195
184
|
region: string;
|
|
196
|
-
publicBaseUrl?: string | undefined;
|
|
197
185
|
uploadUrl?: string | undefined;
|
|
198
186
|
maxUploadBytes?: number | undefined;
|
|
199
187
|
} | {
|
|
200
188
|
adapter: "lfs";
|
|
201
|
-
publicBaseUrl?: string | undefined;
|
|
202
189
|
} | undefined;
|
|
203
190
|
defaultBranchAccess?: "allow" | "deny" | undefined;
|
|
204
191
|
defaultPathAccess?: "allow" | "deny" | {
|
|
@@ -219,9 +206,10 @@ export declare const CanopyConfigSchema: z.ZodObject<{
|
|
|
219
206
|
contentRoot?: string | undefined;
|
|
220
207
|
sourceRoot?: string | undefined;
|
|
221
208
|
basePath?: string | undefined;
|
|
209
|
+
unauthenticatedStatus?: 401 | 419 | undefined;
|
|
210
|
+
danglingReferences?: "error" | "warn" | undefined;
|
|
222
211
|
editor?: {
|
|
223
212
|
title?: string | undefined;
|
|
224
|
-
subtitle?: string | undefined;
|
|
225
213
|
theme?: unknown;
|
|
226
214
|
previewBase?: Record<string, string | false> | undefined;
|
|
227
215
|
previewPrefix?: string | undefined;
|
|
@@ -233,18 +221,13 @@ export declare const CanopyConfigSchema: z.ZodObject<{
|
|
|
233
221
|
authPlugin?: AuthPlugin | undefined;
|
|
234
222
|
entryLinkUrl?: EntryLinkUrlResolver | undefined;
|
|
235
223
|
validateEntry?: ValidateEntryHook | undefined;
|
|
224
|
+
mdxAllow?: import("../index.js").MdxAllowlist | undefined;
|
|
236
225
|
}>;
|
|
237
226
|
/**
|
|
238
|
-
* Default workspace path for prod mode (used when CANOPYCMS_WORKSPACE_ROOT is not set)
|
|
239
|
-
*
|
|
240
|
-
* WARNING: this fallback assumes a ROOT mount of EFS at /mnt/efs. CanopyCmsService
|
|
241
|
-
* mounts EFS in both the Lambda and the worker THROUGH an access point already
|
|
242
|
-
* rooted at /workspace and therefore sets CANOPYCMS_WORKSPACE_ROOT=/mnt/efs
|
|
243
|
-
* explicitly; if that env were ever unset this default would resolve to
|
|
244
|
-
* /mnt/efs/workspace = EFS:/workspace/workspace (a wrong, nested dir). The CDK
|
|
245
|
-
* always sets the env, so this only bites a hand-rolled misconfiguration.
|
|
227
|
+
* Default workspace path for prod mode (used when CANOPYCMS_WORKSPACE_ROOT is not set): where
|
|
228
|
+
* CanopyCmsService mounts the EFS `/workspace` access point in both the Lambda and the worker.
|
|
246
229
|
*/
|
|
247
|
-
export declare const DEFAULT_PROD_WORKSPACE = "/mnt/efs
|
|
230
|
+
export declare const DEFAULT_PROD_WORKSPACE = "/mnt/efs";
|
|
248
231
|
export declare const getConfigDefaults: () => {
|
|
249
232
|
baseBranch: string;
|
|
250
233
|
remoteName: string;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { relativePathSchema } from './collection.js';
|
|
6
|
+
import { mdxAllowlistSchema } from './field.js';
|
|
6
7
|
import { mediaSchema } from './media.js';
|
|
7
8
|
import { previewPrefixSchema } from './url.js';
|
|
8
9
|
const defaultBranchAccessSchema = z.enum(['allow', 'deny']).default('deny');
|
|
@@ -49,7 +50,6 @@ const devConfigSchema = z.object({
|
|
|
49
50
|
});
|
|
50
51
|
const editorConfigSchema = z.object({
|
|
51
52
|
title: z.string().optional(),
|
|
52
|
-
subtitle: z.string().optional(),
|
|
53
53
|
theme: z.unknown().optional(),
|
|
54
54
|
previewBase: z.record(z.union([z.string(), z.literal(false)])).optional(),
|
|
55
55
|
previewPrefix: previewPrefixSchema.optional(),
|
|
@@ -73,8 +73,8 @@ export const CanopyConfigSchema = z
|
|
|
73
73
|
defaultBranchAccess: defaultBranchAccessSchema,
|
|
74
74
|
defaultPathAccess: defaultPathAccessSchema,
|
|
75
75
|
// .optional() deliberately defeats defaultBaseBranchSchema's .default('main'):
|
|
76
|
-
// unset must stay undefined after parsing so dev
|
|
77
|
-
// point
|
|
76
|
+
// unset must stay undefined after parsing so dev and prod can detect the
|
|
77
|
+
// fork point (see resolveBaseBranch in utils/git.ts).
|
|
78
78
|
defaultBaseBranch: defaultBaseBranchSchema.optional(),
|
|
79
79
|
defaultActiveBranch: z.string().min(1).optional(),
|
|
80
80
|
defaultRemoteName: defaultRemoteNameSchema.optional(),
|
|
@@ -103,24 +103,21 @@ export const CanopyConfigSchema = z
|
|
|
103
103
|
contentRoot: contentRootSchema.default('content'),
|
|
104
104
|
sourceRoot: sourceRootSchema.optional(),
|
|
105
105
|
basePath: basePathSchema,
|
|
106
|
+
unauthenticatedStatus: z.union([z.literal(401), z.literal(419)]).optional(),
|
|
107
|
+
danglingReferences: z.enum(['error', 'warn']).optional(),
|
|
106
108
|
editor: editorConfigSchema.optional(),
|
|
107
109
|
authPlugin: z.custom().optional(),
|
|
108
110
|
entryLinkUrl: z.custom().optional(),
|
|
109
111
|
validateEntry: z.custom().optional(),
|
|
112
|
+
mdxAllow: mdxAllowlistSchema.optional(),
|
|
110
113
|
dev: devConfigSchema.optional(),
|
|
111
114
|
})
|
|
112
115
|
.strict();
|
|
113
116
|
/**
|
|
114
|
-
* Default workspace path for prod mode (used when CANOPYCMS_WORKSPACE_ROOT is not set)
|
|
115
|
-
*
|
|
116
|
-
* WARNING: this fallback assumes a ROOT mount of EFS at /mnt/efs. CanopyCmsService
|
|
117
|
-
* mounts EFS in both the Lambda and the worker THROUGH an access point already
|
|
118
|
-
* rooted at /workspace and therefore sets CANOPYCMS_WORKSPACE_ROOT=/mnt/efs
|
|
119
|
-
* explicitly; if that env were ever unset this default would resolve to
|
|
120
|
-
* /mnt/efs/workspace = EFS:/workspace/workspace (a wrong, nested dir). The CDK
|
|
121
|
-
* always sets the env, so this only bites a hand-rolled misconfiguration.
|
|
117
|
+
* Default workspace path for prod mode (used when CANOPYCMS_WORKSPACE_ROOT is not set): where
|
|
118
|
+
* CanopyCmsService mounts the EFS `/workspace` access point in both the Lambda and the worker.
|
|
122
119
|
*/
|
|
123
|
-
export const DEFAULT_PROD_WORKSPACE = '/mnt/efs
|
|
120
|
+
export const DEFAULT_PROD_WORKSPACE = '/mnt/efs';
|
|
124
121
|
// Note: `mode` has no default by design (SEC-C1) and is intentionally omitted here —
|
|
125
122
|
// operatingModeSchema.parse(undefined) would throw.
|
|
126
123
|
//
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Zod schemas for field configuration validation.
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
+
import type { MdxAllowlist } from '../types.js';
|
|
5
6
|
export declare const selectOptionSchema: z.ZodUnion<[z.ZodString, z.ZodObject<{
|
|
6
7
|
label: z.ZodString;
|
|
7
8
|
value: z.ZodString;
|
|
@@ -22,6 +23,8 @@ export declare const referenceOptionSchema: z.ZodUnion<[z.ZodString, z.ZodObject
|
|
|
22
23
|
value: string;
|
|
23
24
|
label: string;
|
|
24
25
|
}>]>;
|
|
26
|
+
/** Strict, so a misspelt key is an error rather than a silently wider policy. */
|
|
27
|
+
export declare const mdxAllowlistSchema: z.ZodType<MdxAllowlist>;
|
|
25
28
|
export declare const imageFieldSchema: z.ZodObject<{
|
|
26
29
|
name: z.ZodString;
|
|
27
30
|
label: z.ZodOptional<z.ZodString>;
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Zod schemas for field configuration validation.
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import {
|
|
5
|
+
import { fieldTypes, markdownFieldTypes, primitiveFieldTypes } from '../types.js';
|
|
6
|
+
import { SAFE_HTML_TAGS, isComponentName, isRefusedComponentProp, markdownFieldOptionsError, } from '../../validation/mdx-allowlist.js';
|
|
6
7
|
const fieldBaseSchema = z.object({
|
|
7
8
|
name: z.string().min(1),
|
|
8
9
|
label: z.string().optional(),
|
|
@@ -27,7 +28,50 @@ export const referenceOptionSchema = z.union([
|
|
|
27
28
|
}),
|
|
28
29
|
]);
|
|
29
30
|
const primitiveFieldSchema = fieldBaseSchema.extend({
|
|
30
|
-
type: z.enum(primitiveFieldTypes),
|
|
31
|
+
type: z.enum(primitiveFieldTypes).exclude([...markdownFieldTypes]),
|
|
32
|
+
// Listed so a parse keeps it (zod strips unknown keys); which fields may carry it is
|
|
33
|
+
// `ensureStampOnPublishPlacement`'s call (config/validation.ts).
|
|
34
|
+
stampOnPublish: z.boolean().optional(),
|
|
35
|
+
});
|
|
36
|
+
const mdxPropAllowSchema = z.union([
|
|
37
|
+
z.literal(true),
|
|
38
|
+
z.literal('string'),
|
|
39
|
+
z.object({ type: z.literal('string'), maxLength: z.number().int().min(1).optional() }).strict(),
|
|
40
|
+
z.array(z.union([z.string(), z.number(), z.boolean()])).min(1),
|
|
41
|
+
]);
|
|
42
|
+
/** Strict, so a misspelt key is an error rather than a silently wider policy. */
|
|
43
|
+
export const mdxAllowlistSchema = z
|
|
44
|
+
.object({
|
|
45
|
+
components: z
|
|
46
|
+
.record(z.string().refine(isComponentName, {
|
|
47
|
+
message: 'must be a component name: capitalised, with no dot, and not MDXContent or MDXLayout',
|
|
48
|
+
}), z
|
|
49
|
+
.object({
|
|
50
|
+
props: z
|
|
51
|
+
.record(z
|
|
52
|
+
.string()
|
|
53
|
+
.min(1)
|
|
54
|
+
.refine((name) => !isRefusedComponentProp(name), {
|
|
55
|
+
message: 'event handlers, srcdoc and dangerouslySetInnerHTML are always refused',
|
|
56
|
+
}), mdxPropAllowSchema)
|
|
57
|
+
.optional(),
|
|
58
|
+
})
|
|
59
|
+
.strict())
|
|
60
|
+
.optional(),
|
|
61
|
+
htmlTags: z
|
|
62
|
+
.array(z.string().refine((tag) => SAFE_HTML_TAGS.has(tag), {
|
|
63
|
+
message: 'must be one of the HTML tags the base MDX policy accepts',
|
|
64
|
+
}))
|
|
65
|
+
.optional(),
|
|
66
|
+
expressions: z.boolean().optional(),
|
|
67
|
+
fragments: z.boolean().optional(),
|
|
68
|
+
})
|
|
69
|
+
.strict();
|
|
70
|
+
const markdownFieldSchema = fieldBaseSchema.extend({
|
|
71
|
+
type: z.enum(markdownFieldTypes),
|
|
72
|
+
executable: z.boolean().optional(),
|
|
73
|
+
renderAs: z.literal('mdx').optional(),
|
|
74
|
+
mdxAllow: mdxAllowlistSchema.optional(),
|
|
31
75
|
});
|
|
32
76
|
// "W:H" aspect ratio, e.g. "16:9" or "1:1" — positive integers on both sides,
|
|
33
77
|
// no leading zeros (leading zero would parse as `0` via Number(), which the
|
|
@@ -82,6 +126,7 @@ const objectFieldSchema = fieldBaseSchema.extend({
|
|
|
82
126
|
type: z.literal('object'),
|
|
83
127
|
fields: z.array(z.lazy(() => fieldHolder[0])).min(1),
|
|
84
128
|
itemTitleField: z.string().min(1).optional(),
|
|
129
|
+
itemLabel: z.string().trim().min(1).optional(),
|
|
85
130
|
});
|
|
86
131
|
// Inline group field: visual grouping only, no data nesting
|
|
87
132
|
const inlineGroupFieldSchema = z.object({
|
|
@@ -101,15 +146,24 @@ const customFieldSchema = z.lazy(() => fieldBaseSchema
|
|
|
101
146
|
}),
|
|
102
147
|
})
|
|
103
148
|
.passthrough());
|
|
104
|
-
const knownFieldSchema = z
|
|
149
|
+
const knownFieldSchema = z
|
|
150
|
+
.discriminatedUnion('type', [
|
|
105
151
|
primitiveFieldSchema,
|
|
152
|
+
markdownFieldSchema,
|
|
106
153
|
selectFieldSchema,
|
|
107
154
|
referenceFieldSchema,
|
|
108
155
|
imageFieldSchema,
|
|
109
156
|
objectFieldSchema,
|
|
110
157
|
blockFieldSchema,
|
|
111
158
|
inlineGroupFieldSchema,
|
|
112
|
-
])
|
|
159
|
+
])
|
|
160
|
+
.superRefine((field, ctx) => {
|
|
161
|
+
if (field.type !== 'markdown' && field.type !== 'mdx')
|
|
162
|
+
return;
|
|
163
|
+
const message = markdownFieldOptionsError(field);
|
|
164
|
+
if (message !== undefined)
|
|
165
|
+
ctx.addIssue({ code: z.ZodIssueCode.custom, message });
|
|
166
|
+
});
|
|
113
167
|
const fieldSchema = z.lazy(() => z.union([knownFieldSchema, customFieldSchema]));
|
|
114
168
|
fieldHolder[0] = fieldSchema;
|
|
115
169
|
export { fieldSchema };
|