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
package/dist/assets/asset-url.js
CHANGED
|
@@ -1,36 +1,60 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Build/adjust transform URLs for `<img>`/srcset without pulling in the
|
|
3
|
-
* server-only transform engine. Isomorphic -
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* import from client (editor) code as well as during static builds.
|
|
3
|
+
* server-only transform engine. Isomorphic - none of its imports reach a node
|
|
4
|
+
* builtin, so this is safe to import from client (editor) code as well as during
|
|
5
|
+
* static builds.
|
|
7
6
|
*/
|
|
8
7
|
import { isUnprefixablePath, joinUrlPrefix, sanitizeUnprefixedPath, stripTrailingSlashes, } from '../utils/url-prefix.js';
|
|
8
|
+
import { getPreviewAssetBase } from '../editor/preview-asset-base.js';
|
|
9
9
|
import { ASSET_PREFIXES } from './asset-prefixes.js';
|
|
10
10
|
import { formatDirectives, isAllowedTransformWidth, parseTransformPath, } from './transform-directives.js';
|
|
11
11
|
const TRANSFORM_URL_PREFIX = `/${ASSET_PREFIXES.transform}/`;
|
|
12
|
+
const ASSET_SPACE_PREFIX = `/${ASSET_PREFIXES.public}/`;
|
|
12
13
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* opts - only to override it).
|
|
14
|
+
* Whether `src` is in canopycms's own `/assets` URL space - a transform or static asset src the
|
|
15
|
+
* asset store serves. Every other src (a site's own static file, an off-site URL, a `data:` URI)
|
|
16
|
+
* is the host's, and the asset store never serves it.
|
|
17
17
|
*/
|
|
18
|
-
function
|
|
18
|
+
export function isAssetStoreSrc(src) {
|
|
19
|
+
return src.startsWith(ASSET_SPACE_PREFIX);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Test-only. A function stored on `globalThis` under this symbol is called with every URL
|
|
23
|
+
* `assetUrl` returns; the dual-build fixture installs one during a static export to prove
|
|
24
|
+
* `collect-asset-refs` finds every URL its pages emitted.
|
|
25
|
+
*/
|
|
26
|
+
const EMITTED_URL_LISTENER = Symbol.for('canopycms.assetUrl.emitted');
|
|
27
|
+
function emitted(url) {
|
|
28
|
+
const listener = globalThis[EMITTED_URL_LISTENER];
|
|
29
|
+
if (typeof listener === 'function')
|
|
30
|
+
listener(url);
|
|
31
|
+
return url;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Merge `opts` and the ref's crop over the directives already in its src. Precedence per
|
|
35
|
+
* directive: `opts`, then `ref.crop` (crop only), then the src. There is no way to clear a
|
|
36
|
+
* directive, only to override it.
|
|
37
|
+
*/
|
|
38
|
+
function mergeDirectives(current, refCrop, opts) {
|
|
19
39
|
const existing = current.identity ? undefined : current;
|
|
20
40
|
const width = opts.width ?? existing?.width;
|
|
21
41
|
const format = opts.format ?? existing?.format;
|
|
22
42
|
const quality = opts.quality ?? existing?.quality;
|
|
23
|
-
const crop = opts.crop ?? existing?.crop;
|
|
43
|
+
const crop = opts.crop ?? refCrop ?? existing?.crop;
|
|
24
44
|
if (width === undefined && format === undefined && quality === undefined && crop === undefined) {
|
|
25
45
|
return { identity: true };
|
|
26
46
|
}
|
|
27
47
|
return { identity: false, width, format, quality, crop };
|
|
28
48
|
}
|
|
29
49
|
/**
|
|
30
|
-
* Build a transform URL, merging `opts` over the directives already present
|
|
31
|
-
* in `ref.src` (
|
|
32
|
-
* or any src that isn't one of our own transform URLs) the src is
|
|
33
|
-
* unchanged and
|
|
50
|
+
* Build a transform URL, merging `opts` and `ref.crop` over the directives already present
|
|
51
|
+
* in `ref.src` (see `mergeDirectives` for precedence). For static srcs (svg/pdf under
|
|
52
|
+
* `/assets/{hash}/...`, or any src that isn't one of our own transform URLs) the src is
|
|
53
|
+
* returned unchanged and every directive is ignored - there is nothing to transform.
|
|
54
|
+
*
|
|
55
|
+
* In a live preview, a transform URL goes behind the editor's authenticated route
|
|
56
|
+
* (`editor/preview-asset-base.ts`) instead of `opts.baseUrl`: a draft's crop or width may exist
|
|
57
|
+
* nowhere a build put it. Static srcs keep `opts.baseUrl`, since finalize wrote them.
|
|
34
58
|
*/
|
|
35
59
|
export function assetUrl(ref, opts = {}) {
|
|
36
60
|
const { src } = ref;
|
|
@@ -46,35 +70,37 @@ export function assetUrl(ref, opts = {}) {
|
|
|
46
70
|
// `joinUrlPrefix`'s own contract. Plain `!opts.baseUrl` made '' and '/' disagree.
|
|
47
71
|
const mount = opts.baseUrl ? stripTrailingSlashes(opts.baseUrl) : '';
|
|
48
72
|
if (!mount || isUnprefixablePath(src))
|
|
49
|
-
return sanitizeUnprefixedPath(src);
|
|
50
|
-
return joinUrlPrefix(opts.baseUrl, src);
|
|
73
|
+
return emitted(sanitizeUnprefixedPath(src));
|
|
74
|
+
return emitted(joinUrlPrefix(opts.baseUrl, src));
|
|
51
75
|
}
|
|
76
|
+
const base = getPreviewAssetBase() ?? opts.baseUrl;
|
|
52
77
|
const rest = src.slice(TRANSFORM_URL_PREFIX.length);
|
|
53
|
-
const parsed = parseTransformPath(rest.split('/'));
|
|
78
|
+
const parsed = parseTransformPath(rest.split('/'), 'any');
|
|
54
79
|
if (!parsed.ok) {
|
|
55
80
|
// Malformed src (shouldn't happen for a src canopycms itself wrote) -
|
|
56
81
|
// nothing sensible to merge onto, so return it unchanged rather than throw.
|
|
57
|
-
return joinUrlPrefix(
|
|
82
|
+
return emitted(joinUrlPrefix(base, src));
|
|
58
83
|
}
|
|
59
|
-
const merged = mergeDirectives(parsed.directives, opts);
|
|
84
|
+
const merged = mergeDirectives(parsed.directives, ref.crop, opts);
|
|
60
85
|
// Ext follows the format: an explicit format (new or carried over) always
|
|
61
86
|
// wins; with no format at all, the ext must keep preserving the source's
|
|
62
87
|
// real extension, which is exactly what `parsed.ext` already is here.
|
|
63
88
|
const ext = !merged.identity && merged.format !== undefined ? merged.format : parsed.ext;
|
|
64
89
|
const newSrc = `${TRANSFORM_URL_PREFIX}${formatDirectives(merged)}/${parsed.hash32}/${parsed.slug}.${ext}`;
|
|
65
|
-
return joinUrlPrefix(
|
|
90
|
+
return emitted(joinUrlPrefix(base, newSrc));
|
|
66
91
|
}
|
|
67
92
|
/**
|
|
68
93
|
* Build a comma-joined `url w` srcset descriptor list. `widths` must all be
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
94
|
+
* integers in [1, 8192] (the `any` width policy) - this is developer-facing (a
|
|
95
|
+
* host app's own responsive-image markup), so an invalid width throws rather
|
|
96
|
+
* than silently dropping it. A site serving the opt-in lazy public path, which
|
|
97
|
+
* transforms only allowlisted widths, must pick widths from that allowlist.
|
|
72
98
|
*/
|
|
73
99
|
export function assetSrcSet(ref, widths, opts = {}) {
|
|
74
100
|
return widths
|
|
75
101
|
.map((width) => {
|
|
76
|
-
if (!isAllowedTransformWidth(width)) {
|
|
77
|
-
throw new Error(`assetSrcSet: width ${width} is not allowed (must be
|
|
102
|
+
if (!isAllowedTransformWidth(width, 'any')) {
|
|
103
|
+
throw new Error(`assetSrcSet: width ${width} is not allowed (must be an integer between 1 and 8192)`);
|
|
78
104
|
}
|
|
79
105
|
return `${assetUrl(ref, { ...opts, width })} ${width}w`;
|
|
80
106
|
})
|
package/dist/assets/finalize.js
CHANGED
|
@@ -39,6 +39,9 @@ export async function finalizeAsset(store, input) {
|
|
|
39
39
|
const existing = await store.getMeta(meta.hash32);
|
|
40
40
|
if (existing)
|
|
41
41
|
return { ok: true, meta: existing };
|
|
42
|
+
// Either put may find its key taken (`already-exists`): by an earlier attempt that stopped
|
|
43
|
+
// before the meta commit, or by a concurrent identical upload. The object kept there is this
|
|
44
|
+
// content's, so finalize goes on to commit the meta either way.
|
|
42
45
|
await store.putOriginal({ hash32: meta.hash32, ext: meta.ext, data, contentType: meta.mime });
|
|
43
46
|
if (publicObject) {
|
|
44
47
|
await store.putPublicObject(publicObject);
|
package/dist/assets/index.d.ts
CHANGED
|
@@ -14,6 +14,6 @@ export { ALLOWED_UPLOAD_CONTENT_TYPES, runFinalizePipeline, type FinalizeInput,
|
|
|
14
14
|
export { finalizeAsset, finalizeStagedUpload, type FinalizeAssetResult } from './finalize.js';
|
|
15
15
|
export { sanitizeSvg } from './svg-sanitizer.js';
|
|
16
16
|
export { assetSrc } from './asset-src.js';
|
|
17
|
-
export { formatDirectives, isAllowedTransformWidth, isValidCropRect, parseTransformPath, type CropRect, type OutputFormat, type ParsedTransformPath, type ParseTransformPathResult, type TransformDirectives, } from './transform-directives.js';
|
|
17
|
+
export { formatDirectives, isAllowedTransformWidth, isValidCropRect, parseTransformPath, type CropRect, type OutputFormat, type ParsedTransformPath, type ParseTransformPathResult, type TransformDirectives, type TransformWidthPolicy, } from './transform-directives.js';
|
|
18
18
|
export { applyTransform, type ApplyTransformInput, type TransformResult } from './transform.js';
|
|
19
19
|
export { assetUrl, assetSrcSet, type AssetRef, type AssetUrlOptions } from './asset-url.js';
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Writing transform outputs into the store. Server-only.
|
|
3
|
+
*
|
|
4
|
+
* `storeTransform` computes one key and is shared by the authenticated raw route
|
|
5
|
+
* (api/assets.ts), `materializeAssets` (the batch run that writes every key a build references
|
|
6
|
+
* before that build is released) and canopycms-cdk's lazy transform Lambda.
|
|
7
|
+
*/
|
|
8
|
+
import { type ParsedTransformPath } from './transform-directives.js';
|
|
9
|
+
import type { AssetStore, CreateOnlyResult } from './types.js';
|
|
10
|
+
/** Every transform output is stored under a content-addressed key, so it never changes. */
|
|
11
|
+
export declare const TRANSFORM_CACHE_CONTROL = "public, max-age=31536000, immutable";
|
|
12
|
+
/**
|
|
13
|
+
* The object tag on every derivative the lazy transform Lambda writes. Its bucket's `assets/t/`
|
|
14
|
+
* expiry filters on it, so what `materializeAssets` writes, which the Lambda's allowlist may refuse
|
|
15
|
+
* to recompute, is never expired. canopycms-cdk's `AssetSupport` copies these two strings as
|
|
16
|
+
* literals.
|
|
17
|
+
*/
|
|
18
|
+
export declare const LAZY_TRANSFORM_TAG: {
|
|
19
|
+
readonly key: "canopy-transform";
|
|
20
|
+
readonly value: "lazy";
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* `data` is the computed output whether or not it was stored: `stored: 'already-exists'` means
|
|
24
|
+
* another writer stored the key first, and the store kept that object.
|
|
25
|
+
*/
|
|
26
|
+
export type StoreTransformResult = {
|
|
27
|
+
ok: true;
|
|
28
|
+
data: Uint8Array;
|
|
29
|
+
contentType: string;
|
|
30
|
+
stored: CreateOnlyResult;
|
|
31
|
+
} | {
|
|
32
|
+
ok: false;
|
|
33
|
+
status: 400 | 404 | 413 | 422;
|
|
34
|
+
error: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Compute the transform `parsed` names from the asset's original and write it under `key`: the
|
|
38
|
+
* canonical key, or that key beneath an output prefix. `parsed` must come from
|
|
39
|
+
* `canonicalizeTransformPath`, so the stored pixels always match their key. A rejection is a fact
|
|
40
|
+
* about the asset or the URL and is never worth retrying; a thrown error belongs to the store or
|
|
41
|
+
* the environment. A 404's `error` names what was missing, so a caller answering a browser
|
|
42
|
+
* replaces it.
|
|
43
|
+
*/
|
|
44
|
+
export declare function storeTransform(store: AssetStore, parsed: ParsedTransformPath, key: string, options?: {
|
|
45
|
+
tags?: Readonly<Record<string, string>>;
|
|
46
|
+
}): Promise<StoreTransformResult>;
|
|
47
|
+
/** One key a build references, and where it was referenced, for the failure report. */
|
|
48
|
+
export interface MaterializeTarget {
|
|
49
|
+
/** `assets/t/{directives}/{hash32}/{slug}.{ext}`. */
|
|
50
|
+
key: string;
|
|
51
|
+
routes: readonly string[];
|
|
52
|
+
files: readonly string[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* `content`: the key cannot be produced from what the store holds (asset deleted, wrong slug,
|
|
56
|
+
* undecodable input, malformed key), so a retry would fail the same way and the page must change.
|
|
57
|
+
* `store`: the store kept failing, or refused the request outright; rerunning may succeed.
|
|
58
|
+
*/
|
|
59
|
+
type MaterializeFailureKind = 'content' | 'store';
|
|
60
|
+
export type MaterializeResult = {
|
|
61
|
+
key: string;
|
|
62
|
+
routes: string[];
|
|
63
|
+
files: string[];
|
|
64
|
+
} & ({
|
|
65
|
+
status: 'existed' | 'created' | 'copied';
|
|
66
|
+
} | {
|
|
67
|
+
status: 'failed';
|
|
68
|
+
failure: MaterializeFailureKind;
|
|
69
|
+
error: string;
|
|
70
|
+
});
|
|
71
|
+
/** The `schemaVersion` of every `MaterializeReport`; a consumer gating on the JSON checks it. */
|
|
72
|
+
export declare const MATERIALIZE_REPORT_SCHEMA_VERSION = 1;
|
|
73
|
+
export interface MaterializeReport {
|
|
74
|
+
schemaVersion: typeof MATERIALIZE_REPORT_SCHEMA_VERSION;
|
|
75
|
+
/** `MaterializeOptions.outputPrefix`, present only when one was given. */
|
|
76
|
+
outputPrefix?: string;
|
|
77
|
+
summary: {
|
|
78
|
+
total: number;
|
|
79
|
+
existed: number;
|
|
80
|
+
created: number;
|
|
81
|
+
/** Keys copied from the canonical prefix into an output prefix; 0 until one is configured. */
|
|
82
|
+
copied: number;
|
|
83
|
+
failed: number;
|
|
84
|
+
contentFailures: number;
|
|
85
|
+
storeFailures: number;
|
|
86
|
+
};
|
|
87
|
+
/** Sorted by key. */
|
|
88
|
+
results: MaterializeResult[];
|
|
89
|
+
}
|
|
90
|
+
export interface MaterializeOptions {
|
|
91
|
+
store: AssetStore;
|
|
92
|
+
targets: readonly MaterializeTarget[];
|
|
93
|
+
/**
|
|
94
|
+
* `assets/{hash32}/{slug}.{ext}` keys (svg, pdf) a build references. These are never produced
|
|
95
|
+
* here (finalize writes them at upload), only checked, or copied under an `outputPrefix`, so a
|
|
96
|
+
* missing one is a content failure, unless the bucket itself is missing: a store failure.
|
|
97
|
+
*/
|
|
98
|
+
statics?: readonly MaterializeTarget[];
|
|
99
|
+
/**
|
|
100
|
+
* Write every key `k` at `outputPrefix + k` instead, for a build whose writes must never land
|
|
101
|
+
* where production reads (a PR preview). A key production already stores is copied from there;
|
|
102
|
+
* the rest are transformed from the canonical originals. Production's own run, with no prefix,
|
|
103
|
+
* never reads beneath it. See `assertValidOutputPrefix` for what is accepted.
|
|
104
|
+
*/
|
|
105
|
+
outputPrefix?: string;
|
|
106
|
+
/** Store requests in flight at once. Default 8. */
|
|
107
|
+
concurrency?: number;
|
|
108
|
+
/**
|
|
109
|
+
* Transforms in flight at once. Each holds a decoded image, up to about 1.2 GiB at
|
|
110
|
+
* `MAX_INPUT_PIXELS`, so this stays small whatever `concurrency` is. Default 2.
|
|
111
|
+
*/
|
|
112
|
+
transformConcurrency?: number;
|
|
113
|
+
/**
|
|
114
|
+
* A directive string referenced by at least this many keys has its whole `assets/t/{directives}/`
|
|
115
|
+
* prefix listed once instead of a HEAD per key, when the store can list. Default 100.
|
|
116
|
+
*/
|
|
117
|
+
listThreshold?: number;
|
|
118
|
+
/** Attempts per store operation, including the first. Default 3. */
|
|
119
|
+
attempts?: number;
|
|
120
|
+
/** First retry delay; each later one doubles. Default 500. */
|
|
121
|
+
baseDelayMs?: number;
|
|
122
|
+
/** @internal Test seam for the retry delay. */
|
|
123
|
+
sleep?: (ms: number) => Promise<void>;
|
|
124
|
+
}
|
|
125
|
+
/** sharp cannot load in this process, so nothing missing can be produced here. */
|
|
126
|
+
export declare class SharpUnavailableError extends Error {
|
|
127
|
+
constructor(cause: unknown);
|
|
128
|
+
}
|
|
129
|
+
/** `MaterializeOptions.outputPrefix` broke a rule of `assertValidOutputPrefix`; nothing was read or written. */
|
|
130
|
+
export declare class InvalidOutputPrefixError extends Error {
|
|
131
|
+
constructor(prefix: string, reason: string);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Throws `InvalidOutputPrefixError` unless `prefix` is relative, ends in `/`, and is a run of
|
|
135
|
+
* `[A-Za-z0-9._-]` segments, none empty, `.` or `..`, whose first segments are not a canopy
|
|
136
|
+
* prefix. Production trusts whatever is under its own prefixes, so a write beneath one is a write
|
|
137
|
+
* production serves. Compared by segment: `assets-x/` is accepted, `assets/x/` is not.
|
|
138
|
+
*/
|
|
139
|
+
export declare function assertValidOutputPrefix(prefix: string): void;
|
|
140
|
+
/**
|
|
141
|
+
* @internal Exported for tests. Throttling, 5xx and dropped connections are transient. Any other
|
|
142
|
+
* 4xx (AccessDenied, NoSuchBucket) is a configuration fault that a retry only delays.
|
|
143
|
+
*/
|
|
144
|
+
export declare function isTransientStoreError(err: unknown): boolean;
|
|
145
|
+
/**
|
|
146
|
+
* Make every referenced transform key exist in `store`, and check every static key does. A key
|
|
147
|
+
* already stored is left alone:
|
|
148
|
+
* keys are content-addressed, so an existing object is the right one. sharp is loaded only when
|
|
149
|
+
* something must be transformed, and a sharp that cannot load throws `SharpUnavailableError` rather
|
|
150
|
+
* than failing each key. An invalid `outputPrefix` throws `InvalidOutputPrefixError` first.
|
|
151
|
+
*/
|
|
152
|
+
export declare function materializeAssets(options: MaterializeOptions): Promise<MaterializeReport>;
|
|
153
|
+
export {};
|