canopycms 0.0.67-int.90 → 0.0.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -3
- package/dist/ai/generate.js +1 -27
- package/dist/ai/handler.d.ts +0 -4
- package/dist/ai/handler.js +0 -11
- package/dist/ai/index.d.ts +1 -8
- package/dist/ai/index.js +1 -8
- package/dist/ai/json-to-markdown.js +15 -58
- package/dist/ai/resolve-branch.d.ts +2 -7
- package/dist/ai/resolve-branch.js +2 -8
- package/dist/ai/strip-mdx.d.ts +5 -13
- package/dist/ai/strip-mdx.js +5 -17
- package/dist/ai/to-plain-text.d.ts +10 -28
- package/dist/ai/to-plain-text.js +10 -28
- package/dist/ai/transform-components.d.ts +2 -4
- package/dist/ai/transform-components.js +8 -19
- package/dist/ai/types.d.ts +5 -10
- package/dist/api/admin-branch-health.d.ts +4 -12
- package/dist/api/admin-branch-health.js +26 -66
- package/dist/api/admin.d.ts +4 -12
- package/dist/api/admin.js +10 -26
- package/dist/api/assets.d.ts +0 -25
- package/dist/api/assets.js +50 -91
- package/dist/api/branch-merge.d.ts +1 -1
- package/dist/api/branch-merge.js +0 -2
- package/dist/api/branch-review.d.ts +0 -8
- package/dist/api/branch-review.js +0 -13
- package/dist/api/branch-status.d.ts +0 -3
- package/dist/api/branch-status.js +8 -33
- package/dist/api/branch-withdraw.d.ts +0 -1
- package/dist/api/branch-withdraw.js +6 -9
- package/dist/api/branch.d.ts +7 -12
- package/dist/api/branch.js +7 -44
- package/dist/api/client.d.ts +71 -224
- package/dist/api/client.js +82 -233
- package/dist/api/comments.d.ts +2 -4
- package/dist/api/comments.js +0 -17
- package/dist/api/content.d.ts +0 -6
- package/dist/api/content.js +66 -142
- package/dist/api/entries-constants.d.ts +5 -9
- package/dist/api/entries-constants.js +5 -9
- package/dist/api/entries.d.ts +8 -13
- package/dist/api/entries.js +20 -51
- package/dist/api/github-sync.d.ts +2 -4
- package/dist/api/github-sync.js +4 -8
- package/dist/api/groups.d.ts +3 -0
- package/dist/api/groups.js +8 -21
- package/dist/api/guards.d.ts +4 -16
- package/dist/api/guards.js +3 -22
- package/dist/api/index.d.ts +4 -4
- package/dist/api/permissions.d.ts +2 -0
- package/dist/api/permissions.js +18 -40
- package/dist/api/reference-options.d.ts +0 -1
- package/dist/api/reference-options.js +3 -11
- package/dist/api/request-body-hash.d.ts +12 -23
- package/dist/api/request-body-hash.js +12 -23
- package/dist/api/resolve-references.d.ts +0 -1
- package/dist/api/resolve-references.js +13 -28
- package/dist/api/route-builder.d.ts +3 -7
- package/dist/api/route-builder.js +1 -1
- package/dist/api/routes.d.ts +12 -0
- package/dist/api/routes.js +47 -0
- package/dist/api/schema.d.ts +23 -33
- package/dist/api/schema.js +20 -74
- package/dist/api/settings-helpers.js +4 -5
- package/dist/api/types.d.ts +0 -5
- package/dist/api/user.js +0 -5
- package/dist/api/validators.d.ts +14 -52
- package/dist/api/validators.js +14 -52
- package/dist/assets/asset-prefixes.d.ts +4 -8
- package/dist/assets/asset-prefixes.js +4 -8
- package/dist/assets/asset-src.d.ts +5 -22
- package/dist/assets/asset-src.js +5 -21
- package/dist/assets/factory.d.ts +1 -2
- package/dist/assets/factory.js +1 -2
- package/dist/assets/finalize.d.ts +3 -1
- package/dist/assets/finalize.js +3 -1
- package/dist/assets/index.d.ts +3 -3
- package/dist/assets/index.js +1 -1
- package/dist/assets/keys.d.ts +5 -3
- package/dist/assets/keys.js +6 -3
- package/dist/assets/pipeline.d.ts +3 -2
- package/dist/assets/pipeline.js +22 -56
- package/dist/assets/sharp-loader.d.ts +2 -10
- package/dist/assets/sharp-loader.js +2 -10
- package/dist/assets/store-local.d.ts +1 -2
- package/dist/assets/store-local.js +1 -2
- package/dist/assets/store-s3.d.ts +3 -4
- package/dist/assets/svg-sanitizer.d.ts +6 -14
- package/dist/assets/svg-sanitizer.js +6 -14
- package/dist/assets/transform-directives.d.ts +3 -4
- package/dist/assets/transform-directives.js +1 -1
- package/dist/assets/transform.d.ts +19 -30
- package/dist/assets/transform.js +18 -31
- package/dist/auth/cache.d.ts +2 -3
- package/dist/auth/cache.js +2 -3
- package/dist/auth/caching-auth-plugin.d.ts +11 -22
- package/dist/auth/caching-auth-plugin.js +12 -14
- package/dist/auth/context-helpers.d.ts +6 -20
- package/dist/auth/context-helpers.js +5 -17
- package/dist/auth/file-based-auth-cache.d.ts +10 -21
- package/dist/auth/file-based-auth-cache.js +23 -51
- package/dist/auth/plugin.d.ts +29 -61
- package/dist/auth/plugin.js +9 -13
- package/dist/auth/types.d.ts +11 -20
- package/dist/authorization/branch.d.ts +30 -49
- package/dist/authorization/branch.js +16 -42
- package/dist/authorization/content.d.ts +11 -40
- package/dist/authorization/content.js +13 -45
- package/dist/authorization/groups/index.d.ts +0 -3
- package/dist/authorization/groups/index.js +0 -3
- package/dist/authorization/groups/loader.d.ts +14 -28
- package/dist/authorization/groups/loader.js +14 -38
- package/dist/authorization/groups/schema.d.ts +0 -6
- package/dist/authorization/groups/schema.js +4 -7
- package/dist/authorization/helpers.d.ts +9 -28
- package/dist/authorization/helpers.js +9 -28
- package/dist/authorization/index.d.ts +3 -25
- package/dist/authorization/index.js +3 -35
- package/dist/authorization/path.d.ts +6 -13
- package/dist/authorization/path.js +8 -25
- package/dist/authorization/permissions/index.d.ts +0 -3
- package/dist/authorization/permissions/index.js +0 -3
- package/dist/authorization/permissions/loader.d.ts +14 -27
- package/dist/authorization/permissions/loader.js +14 -32
- package/dist/authorization/permissions/schema.d.ts +1 -6
- package/dist/authorization/permissions/schema.js +6 -13
- package/dist/authorization/protected-branch.d.ts +36 -65
- package/dist/authorization/protected-branch.js +29 -41
- package/dist/authorization/settings-file-store.d.ts +38 -81
- package/dist/authorization/settings-file-store.js +38 -79
- package/dist/authorization/types.d.ts +4 -26
- package/dist/authorization/types.js +0 -6
- package/dist/authorization/validation.d.ts +1 -23
- package/dist/authorization/validation.js +1 -24
- package/dist/branch-health.d.ts +39 -67
- package/dist/branch-health.js +27 -43
- package/dist/branch-metadata-file.d.ts +16 -32
- package/dist/branch-metadata-file.js +13 -26
- package/dist/branch-metadata.d.ts +49 -80
- package/dist/branch-metadata.js +57 -87
- package/dist/branch-registry.d.ts +26 -64
- package/dist/branch-registry.js +44 -93
- package/dist/branch-schema-cache.d.ts +34 -124
- package/dist/branch-schema-cache.js +49 -155
- package/dist/branch-workspace.d.ts +4 -4
- package/dist/branch-workspace.js +15 -19
- package/dist/build/generate-ai-content.d.ts +1 -0
- package/dist/build/generate-ai-content.js +12 -25
- package/dist/build-canopy.d.ts +17 -27
- package/dist/build-canopy.js +16 -23
- package/dist/build-mode.d.ts +25 -27
- package/dist/build-mode.js +25 -29
- package/dist/cli/cli.d.ts +15 -26
- package/dist/cli/cli.js +601 -978
- package/dist/cli/generate-ai-content.js +351 -628
- package/dist/cli/github-app-manifest.d.ts +84 -0
- package/dist/cli/github-app-manifest.js +161 -0
- package/dist/cli/init-github-app.d.ts +110 -444
- package/dist/cli/init-github-app.js +236 -773
- package/dist/cli/init.js +39 -80
- package/dist/cli/migrate.d.ts +13 -10
- package/dist/cli/migrate.js +22 -30
- package/dist/cli/project-detect.d.ts +17 -31
- package/dist/cli/project-detect.js +31 -42
- package/dist/cli/project-root.d.ts +4 -11
- package/dist/cli/project-root.js +4 -11
- package/dist/cli/prompt.d.ts +10 -0
- package/dist/cli/prompt.js +67 -0
- package/dist/cli/sync.d.ts +0 -8
- package/dist/cli/sync.js +8 -28
- package/dist/cli/template-files/middleware.ts.template +15 -29
- package/dist/cli/templates.d.ts +2 -12
- package/dist/cli/templates.js +4 -4
- package/dist/client.d.ts +1 -1
- package/dist/comment-store.d.ts +32 -53
- package/dist/comment-store.js +32 -52
- package/dist/config/flatten.d.ts +0 -3
- package/dist/config/flatten.js +2 -12
- package/dist/config/helpers.js +2 -2
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.js +1 -4
- package/dist/config/schemas/collection.d.ts +0 -8
- package/dist/config/schemas/collection.js +0 -10
- package/dist/config/schemas/config.d.ts +6 -78
- package/dist/config/schemas/config.js +38 -54
- package/dist/config/schemas/field.d.ts +2 -242
- package/dist/config/schemas/field.js +9 -20
- package/dist/config/schemas/media.js +1 -1
- package/dist/config/schemas/permissions.js +0 -2
- package/dist/config/schemas/url.d.ts +5 -6
- package/dist/config/schemas/url.js +5 -6
- package/dist/config/types.d.ts +45 -33
- package/dist/config/types.js +0 -1
- package/dist/config.d.ts +1 -8
- package/dist/config.js +1 -9
- package/dist/content-id-index.d.ts +76 -188
- package/dist/content-id-index.js +79 -230
- package/dist/content-index-generation.d.ts +27 -48
- package/dist/content-index-generation.js +35 -84
- package/dist/content-index-registry.d.ts +15 -24
- package/dist/content-index-registry.js +5 -9
- package/dist/content-listing.d.ts +64 -107
- package/dist/content-listing.js +68 -118
- package/dist/content-reader.d.ts +20 -29
- package/dist/content-reader.js +10 -18
- package/dist/content-store.d.ts +210 -336
- package/dist/content-store.js +413 -657
- package/dist/content-tree.d.ts +44 -86
- package/dist/content-tree.js +26 -54
- package/dist/context.d.ts +67 -94
- package/dist/context.js +53 -72
- package/dist/dev-content-watcher.d.ts +18 -18
- package/dist/dev-content-watcher.js +41 -44
- package/dist/editor/BranchManager.d.ts +3 -6
- package/dist/editor/BranchManager.js +24 -44
- package/dist/editor/CanopyEditor.js +5 -2
- package/dist/editor/CommentsPanel.js +0 -2
- package/dist/editor/Editor.js +19 -76
- package/dist/editor/EditorAuthGate.d.ts +27 -0
- package/dist/editor/EditorAuthGate.js +140 -0
- package/dist/editor/EntryNavigator.js +0 -20
- package/dist/editor/FormRenderer.d.ts +1 -2
- package/dist/editor/FormRenderer.js +8 -23
- package/dist/editor/admin/SystemHealthPanel.js +20 -37
- package/dist/editor/admin/useSystemHealth.d.ts +2 -3
- package/dist/editor/admin/useSystemHealth.js +10 -12
- package/dist/editor/client-reference-resolver.d.ts +2 -5
- package/dist/editor/client-reference-resolver.js +2 -19
- package/dist/editor/comments/BranchComments.js +0 -4
- package/dist/editor/comments/EntryComments.js +0 -4
- package/dist/editor/comments/FieldWrapper.js +0 -4
- package/dist/editor/comments/InlineCommentThread.js +0 -2
- package/dist/editor/comments/ThreadCarousel.d.ts +0 -58
- package/dist/editor/comments/ThreadCarousel.js +0 -12
- package/dist/editor/components/EditorFooter.d.ts +0 -8
- package/dist/editor/components/EditorFooter.js +0 -5
- package/dist/editor/components/EditorHeader.d.ts +0 -31
- package/dist/editor/components/EditorHeader.js +21 -71
- package/dist/editor/components/EditorSidebar.d.ts +0 -19
- package/dist/editor/components/EditorSidebar.js +0 -16
- package/dist/editor/components/EntryCreateModal.d.ts +4 -4
- package/dist/editor/components/EntryCreateModal.js +7 -22
- package/dist/editor/components/RenameEntryModal.js +0 -4
- package/dist/editor/components/UserBadge.js +0 -10
- package/dist/editor/components/index.js +0 -2
- package/dist/editor/context/ApiClientContext.d.ts +8 -7
- package/dist/editor/context/ApiClientContext.js +39 -11
- package/dist/editor/context/AssetContext.d.ts +7 -17
- package/dist/editor/context/AssetContext.js +7 -17
- package/dist/editor/context/EditorIdentityContext.d.ts +13 -0
- package/dist/editor/context/EditorIdentityContext.js +7 -0
- package/dist/editor/context/EditorStateContext.d.ts +10 -41
- package/dist/editor/context/EditorStateContext.js +7 -23
- package/dist/editor/context/SWRProvider.d.ts +3 -6
- package/dist/editor/context/index.d.ts +1 -20
- package/dist/editor/context/index.js +1 -20
- package/dist/editor/editor-utils.d.ts +8 -47
- package/dist/editor/editor-utils.js +19 -72
- package/dist/editor/fields/BlockField.d.ts +2 -2
- package/dist/editor/fields/BlockField.js +1 -2
- package/dist/editor/fields/CodeField.d.ts +0 -1
- package/dist/editor/fields/CodeField.js +0 -1
- package/dist/editor/fields/DateTimeField.d.ts +15 -22
- package/dist/editor/fields/DateTimeField.js +17 -26
- package/dist/editor/fields/ImageField.d.ts +2 -2
- package/dist/editor/fields/ImageField.js +8 -14
- package/dist/editor/fields/InlineGroupField.d.ts +0 -1
- package/dist/editor/fields/InlineGroupField.js +0 -1
- package/dist/editor/fields/MarkdownField.d.ts +0 -1
- package/dist/editor/fields/MarkdownField.js +6 -11
- package/dist/editor/fields/MdxImageDialog.d.ts +1 -1
- package/dist/editor/fields/MdxImageDialog.js +0 -1
- package/dist/editor/fields/NumberField.d.ts +9 -19
- package/dist/editor/fields/NumberField.js +11 -22
- package/dist/editor/fields/NumberListField.d.ts +7 -10
- package/dist/editor/fields/NumberListField.js +7 -10
- package/dist/editor/fields/ObjectField.d.ts +5 -8
- package/dist/editor/fields/ObjectField.js +0 -1
- package/dist/editor/fields/ReferenceField.d.ts +1 -1
- package/dist/editor/fields/ReferenceField.js +11 -16
- package/dist/editor/fields/SelectField.d.ts +2 -2
- package/dist/editor/fields/SelectField.js +0 -1
- package/dist/editor/fields/StringListField.d.ts +0 -4
- package/dist/editor/fields/StringListField.js +4 -9
- package/dist/editor/fields/TextField.d.ts +0 -1
- package/dist/editor/fields/TextField.js +0 -1
- package/dist/editor/fields/ToggleField.d.ts +0 -1
- package/dist/editor/fields/ToggleField.js +0 -1
- package/dist/editor/fields/entry-link/EntryLinkContext.js +2 -4
- package/dist/editor/fields/entry-link/InsertEntryLink.d.ts +0 -3
- package/dist/editor/fields/entry-link/InsertEntryLink.js +0 -4
- package/dist/editor/group-manager/ExternalGroupsTab.d.ts +0 -3
- package/dist/editor/group-manager/ExternalGroupsTab.js +0 -1
- package/dist/editor/group-manager/GroupCard.d.ts +0 -3
- package/dist/editor/group-manager/GroupForm.d.ts +0 -3
- package/dist/editor/group-manager/InternalGroupsTab.d.ts +0 -3
- package/dist/editor/group-manager/InternalGroupsTab.js +0 -2
- package/dist/editor/group-manager/MemberList.d.ts +0 -3
- package/dist/editor/group-manager/hooks/useExternalGroupSearch.d.ts +0 -3
- package/dist/editor/group-manager/hooks/useExternalGroupSearch.js +0 -3
- package/dist/editor/group-manager/hooks/useGroupState.d.ts +0 -3
- package/dist/editor/group-manager/hooks/useGroupState.js +0 -5
- package/dist/editor/group-manager/hooks/useUserSearch.d.ts +0 -3
- package/dist/editor/group-manager/hooks/useUserSearch.js +0 -3
- package/dist/editor/group-manager/index.d.ts +0 -6
- package/dist/editor/group-manager/index.js +0 -10
- package/dist/editor/group-manager/types.d.ts +2 -5
- package/dist/editor/group-manager/types.js +0 -3
- package/dist/editor/hooks/index.d.ts +6 -11
- package/dist/editor/hooks/index.js +6 -12
- package/dist/editor/hooks/useBranchActions.d.ts +0 -14
- package/dist/editor/hooks/useBranchActions.js +0 -22
- package/dist/editor/hooks/useBranchManager.d.ts +2 -48
- package/dist/editor/hooks/useBranchManager.js +4 -64
- package/dist/editor/hooks/useBranchesData.d.ts +7 -6
- package/dist/editor/hooks/useBranchesData.js +7 -6
- package/dist/editor/hooks/useCommentSystem.d.ts +0 -49
- package/dist/editor/hooks/useCommentSystem.js +1 -36
- package/dist/editor/hooks/useDraftManager.d.ts +2 -35
- package/dist/editor/hooks/useDraftManager.js +23 -64
- package/dist/editor/hooks/useEditorLayout.d.ts +0 -20
- package/dist/editor/hooks/useEditorLayout.js +0 -23
- package/dist/editor/hooks/useEntriesData.d.ts +1 -0
- package/dist/editor/hooks/useEntriesData.js +2 -3
- package/dist/editor/hooks/useEntryLinkResolution.d.ts +2 -2
- package/dist/editor/hooks/useEntryLinkResolution.js +2 -2
- package/dist/editor/hooks/useEntryManager.d.ts +2 -27
- package/dist/editor/hooks/useEntryManager.js +29 -78
- package/dist/editor/hooks/useGroupManager.d.ts +0 -21
- package/dist/editor/hooks/useGroupManager.js +0 -21
- package/dist/editor/hooks/usePermissionManager.d.ts +0 -20
- package/dist/editor/hooks/usePermissionManager.js +0 -20
- package/dist/editor/hooks/useReferenceResolution.d.ts +2 -33
- package/dist/editor/hooks/useReferenceResolution.js +1 -48
- package/dist/editor/hooks/useSchemaManager.d.ts +8 -27
- package/dist/editor/hooks/useSchemaManager.js +0 -19
- package/dist/editor/hooks/useUserContext.d.ts +2 -9
- package/dist/editor/hooks/useUserContext.js +10 -10
- package/dist/editor/hooks/useUserMetadata.d.ts +0 -2
- package/dist/editor/hooks/useUserMetadata.js +0 -3
- package/dist/editor/media/AssetCard.d.ts +0 -1
- package/dist/editor/media/AssetCard.js +1 -2
- package/dist/editor/media/CropStep.d.ts +0 -1
- package/dist/editor/media/CropStep.js +0 -1
- package/dist/editor/media/MediaLibrary.d.ts +1 -2
- package/dist/editor/media/MediaLibrary.js +1 -2
- package/dist/editor/media/MediaLibraryBody.d.ts +0 -1
- package/dist/editor/media/MediaLibraryBody.js +0 -1
- package/dist/editor/media/crop-math.d.ts +1 -1
- package/dist/editor/media/crop-math.js +1 -1
- package/dist/editor/permission-manager/GroupSelector.d.ts +0 -3
- package/dist/editor/permission-manager/PermissionEditor.d.ts +0 -4
- package/dist/editor/permission-manager/PermissionEditor.js +0 -1
- package/dist/editor/permission-manager/PermissionLevelBadge.d.ts +0 -7
- package/dist/editor/permission-manager/PermissionLevelBadge.js +0 -4
- package/dist/editor/permission-manager/PermissionTree.d.ts +0 -4
- package/dist/editor/permission-manager/UserSelector.d.ts +0 -3
- package/dist/editor/permission-manager/constants.d.ts +0 -3
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts +0 -3
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js +0 -10
- package/dist/editor/permission-manager/hooks/usePermissionTree.d.ts +0 -14
- package/dist/editor/permission-manager/hooks/usePermissionTree.js +0 -11
- package/dist/editor/permission-manager/index.d.ts +0 -7
- package/dist/editor/permission-manager/index.js +0 -16
- package/dist/editor/permission-manager/types.d.ts +2 -12
- package/dist/editor/permission-manager/types.js +0 -3
- package/dist/editor/permission-manager/utils.d.ts +0 -28
- package/dist/editor/permission-manager/utils.js +9 -23
- package/dist/editor/preview-bridge.d.ts +5 -1
- package/dist/editor/preview-bridge.js +4 -4
- package/dist/editor/schema-editor/CollectionEditor.d.ts +0 -5
- package/dist/editor/schema-editor/CollectionEditor.js +9 -31
- package/dist/editor/schema-editor/EntryTypeEditor.d.ts +0 -6
- package/dist/editor/schema-editor/EntryTypeEditor.js +3 -24
- package/dist/editor/schema-editor/index.d.ts +0 -7
- package/dist/editor/schema-editor/index.js +0 -7
- package/dist/editor/utils/env.d.ts +3 -18
- package/dist/editor/utils/env.js +6 -25
- package/dist/entry-link-resolver.d.ts +13 -35
- package/dist/entry-link-resolver.js +20 -53
- package/dist/entry-schema-registry.d.ts +20 -60
- package/dist/entry-schema-registry.js +20 -69
- package/dist/entry-schema.d.ts +118 -223
- package/dist/entry-schema.js +46 -91
- package/dist/git-manager.d.ts +101 -200
- package/dist/git-manager.js +211 -384
- package/dist/github-service.d.ts +34 -75
- package/dist/github-service.js +37 -91
- package/dist/http/handler.d.ts +6 -37
- package/dist/http/handler.js +65 -120
- package/dist/http/router.d.ts +15 -32
- package/dist/http/router.js +34 -99
- package/dist/http/types.d.ts +15 -40
- package/dist/http/types.js +3 -7
- package/dist/id.d.ts +4 -10
- package/dist/id.js +4 -10
- package/dist/index.js +6 -9
- package/dist/operating-mode/client-safe-strategy.d.ts +7 -14
- package/dist/operating-mode/client-safe-strategy.js +8 -28
- package/dist/operating-mode/client-unsafe-strategy.d.ts +6 -16
- package/dist/operating-mode/client-unsafe-strategy.js +9 -34
- package/dist/operating-mode/client.d.ts +3 -10
- package/dist/operating-mode/client.js +3 -8
- package/dist/operating-mode/deployment-name-fixtures.d.ts +14 -18
- package/dist/operating-mode/deployment-name-fixtures.js +14 -18
- package/dist/operating-mode/deployment-name.d.ts +19 -29
- package/dist/operating-mode/deployment-name.js +29 -47
- package/dist/operating-mode/index.d.ts +4 -25
- package/dist/operating-mode/index.js +9 -31
- package/dist/operating-mode/mode-env.d.ts +32 -54
- package/dist/operating-mode/mode-env.js +36 -58
- package/dist/operating-mode/types.d.ts +24 -72
- package/dist/operating-mode/types.js +1 -7
- package/dist/paths/branch-name.d.ts +30 -40
- package/dist/paths/branch-name.js +30 -40
- package/dist/paths/branch.d.ts +4 -18
- package/dist/paths/branch.js +6 -22
- package/dist/paths/index.d.ts +2 -13
- package/dist/paths/index.js +3 -23
- package/dist/paths/normalize-server.d.ts +3 -15
- package/dist/paths/normalize-server.js +3 -15
- package/dist/paths/normalize.d.ts +13 -33
- package/dist/paths/normalize.js +13 -33
- package/dist/paths/resolve.d.ts +4 -17
- package/dist/paths/resolve.js +4 -22
- package/dist/paths/types.d.ts +12 -34
- package/dist/paths/types.js +5 -7
- package/dist/paths/validation.d.ts +22 -119
- package/dist/paths/validation.js +30 -148
- package/dist/reference-resolver.d.ts +0 -13
- package/dist/reference-resolver.js +0 -18
- package/dist/resolve-canopy-user.d.ts +16 -18
- package/dist/resolve-canopy-user.js +17 -26
- package/dist/resource-generation.d.ts +16 -25
- package/dist/resource-generation.js +34 -97
- package/dist/schema/meta-loader.d.ts +2 -14
- package/dist/schema/meta-loader.js +15 -64
- package/dist/schema/resolver.d.ts +1 -4
- package/dist/schema/resolver.js +1 -6
- package/dist/schema/schema-store-types.d.ts +0 -12
- package/dist/schema/schema-store.d.ts +61 -138
- package/dist/schema/schema-store.js +85 -282
- package/dist/schema/types.d.ts +0 -4
- package/dist/server.d.ts +62 -93
- package/dist/server.js +63 -94
- package/dist/services.d.ts +23 -47
- package/dist/services.js +55 -98
- package/dist/settings-workspace.d.ts +17 -30
- package/dist/settings-workspace.js +51 -81
- package/dist/static/index.d.ts +26 -52
- package/dist/static/index.js +33 -67
- package/dist/{worker/task-queue.d.ts → task-queue/cms-task-queue.d.ts} +7 -9
- package/dist/task-queue/cms-task-queue.js +13 -0
- package/dist/task-queue/task-queue-config.d.ts +3 -0
- package/dist/{worker → task-queue}/task-queue-config.js +1 -6
- package/dist/task-queue/task-queue.d.ts +16 -22
- package/dist/task-queue/task-queue.js +20 -44
- package/dist/task-queue/types.d.ts +0 -1
- package/dist/task-queue/worker-status.d.ts +35 -0
- package/dist/task-queue/worker-status.js +40 -0
- package/dist/types.d.ts +40 -51
- package/dist/url-collision.d.ts +26 -40
- package/dist/url-collision.js +47 -63
- package/dist/url-exclusivity-fixtures.d.ts +15 -20
- package/dist/url-exclusivity-fixtures.js +14 -19
- package/dist/url-path-resolver.d.ts +8 -16
- package/dist/url-path-resolver.js +19 -29
- package/dist/user.d.ts +8 -21
- package/dist/user.js +10 -19
- package/dist/utils/async-mutex.js +4 -6
- package/dist/utils/atomic-write.d.ts +2 -11
- package/dist/utils/atomic-write.js +2 -11
- package/dist/utils/body-field.d.ts +8 -15
- package/dist/utils/body-field.js +8 -15
- package/dist/utils/content-serialize.d.ts +18 -24
- package/dist/utils/content-serialize.js +109 -160
- package/dist/utils/content-write-lock.d.ts +51 -106
- package/dist/utils/content-write-lock.js +66 -111
- package/dist/utils/debug.d.ts +7 -23
- package/dist/utils/debug.js +7 -23
- package/dist/utils/entry-url.d.ts +11 -23
- package/dist/utils/entry-url.js +11 -26
- package/dist/utils/error.d.ts +25 -90
- package/dist/utils/error.js +60 -147
- package/dist/utils/flatten-group-fields.d.ts +5 -7
- package/dist/utils/flatten-group-fields.js +5 -7
- package/dist/utils/format.d.ts +1 -5
- package/dist/utils/format.js +1 -5
- package/dist/utils/fs.d.ts +3 -4
- package/dist/utils/fs.js +3 -4
- package/dist/utils/git.d.ts +52 -83
- package/dist/utils/git.js +79 -125
- package/dist/utils/logger.d.ts +35 -50
- package/dist/utils/logger.js +35 -52
- package/dist/utils/provisioning-lock.d.ts +23 -35
- package/dist/utils/provisioning-lock.js +49 -69
- package/dist/utils/sanitize-href.d.ts +5 -10
- package/dist/utils/sanitize-href.js +8 -18
- package/dist/utils/title-field.d.ts +17 -20
- package/dist/utils/title-field.js +18 -27
- package/dist/utils/typed-filename.d.ts +20 -48
- package/dist/utils/typed-filename.js +25 -61
- package/dist/utils/url-prefix.d.ts +3 -3
- package/dist/utils/url-prefix.js +3 -3
- package/dist/validation/block-structural-keys.d.ts +16 -31
- package/dist/validation/block-structural-keys.js +19 -29
- package/dist/validation/deletion-checker.d.ts +0 -34
- package/dist/validation/deletion-checker.js +1 -43
- package/dist/validation/entry-link-validator.d.ts +6 -13
- package/dist/validation/entry-link-validator.js +4 -13
- package/dist/validation/entry-type-reference-validator.d.ts +13 -18
- package/dist/validation/entry-type-reference-validator.js +13 -18
- package/dist/validation/entry-validator.d.ts +13 -25
- package/dist/validation/entry-validator.js +15 -32
- package/dist/validation/field-traversal.d.ts +3 -30
- package/dist/validation/field-traversal.js +1 -32
- package/dist/validation/reference-validator.d.ts +5 -24
- package/dist/validation/reference-validator.js +5 -30
- package/dist/worker/cms-worker.d.ts +172 -232
- package/dist/worker/cms-worker.js +241 -333
- package/dist/worker/git-sync.d.ts +32 -133
- package/dist/worker/git-sync.js +129 -191
- package/dist/worker/github-auth.d.ts +13 -19
- package/dist/worker/github-auth.js +13 -19
- package/dist/worker/history-rewrite.d.ts +53 -66
- package/dist/worker/history-rewrite.js +54 -60
- package/dist/worker/log.d.ts +24 -41
- package/dist/worker/log.js +25 -42
- package/dist/worker/rebase.d.ts +20 -110
- package/dist/worker/rebase.js +279 -354
- package/dist/worker/task-runner.d.ts +32 -66
- package/dist/worker/task-runner.js +126 -162
- package/dist/worker/worker-context.d.ts +41 -81
- package/package.json +4 -4
- package/dist/cli/template-files/middleware-clerk.ts.template +0 -37
- package/dist/worker/task-queue-config.d.ts +0 -8
- package/dist/worker/task-queue.js +0 -19
- package/dist/worker/worker-status.d.ts +0 -47
- package/dist/worker/worker-status.js +0 -52
package/dist/schema/types.d.ts
CHANGED
|
@@ -13,14 +13,10 @@ export type EntrySchemaRegistry = Record<string, EntrySchema>;
|
|
|
13
13
|
export interface SchemaSourceInfo {
|
|
14
14
|
/** File path relative to content root */
|
|
15
15
|
path: string;
|
|
16
|
-
/** Type of schema source */
|
|
17
16
|
type: 'root' | 'collection';
|
|
18
17
|
/** Collection names defined in this source */
|
|
19
18
|
collections: string[];
|
|
20
19
|
}
|
|
21
|
-
/**
|
|
22
|
-
* Result of schema resolution.
|
|
23
|
-
*/
|
|
24
20
|
export interface SchemaResolutionResult {
|
|
25
21
|
/** Resolved schema ready for use */
|
|
26
22
|
schema: RootCollectionConfig;
|
package/dist/server.d.ts
CHANGED
|
@@ -5,22 +5,17 @@ export * from './context.js';
|
|
|
5
5
|
export { operatingStrategy } from './operating-mode/index.js';
|
|
6
6
|
export * from './authorization/groups/index.js';
|
|
7
7
|
/**
|
|
8
|
-
* One-call factory for a **build/admin** Canopy context
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* never use it in request-handling code. See the source JSDoc for the full
|
|
13
|
-
* security note and the `createNextCanopyContext().getCanopyForBuild()`
|
|
14
|
-
* comparison this mirrors.
|
|
8
|
+
* One-call factory for a **build/admin** Canopy context, for standalone scripts outside a
|
|
9
|
+
* Next.js request or build phase. Reads the filesystem as a synthetic admin user and bypasses
|
|
10
|
+
* ALL branch/path ACLs — never use it in request-handling code. Full security note in the
|
|
11
|
+
* source JSDoc.
|
|
15
12
|
*/
|
|
16
13
|
export { createBuildCanopy, type CreateBuildCanopyOptions } from './build-canopy.js';
|
|
17
14
|
/**
|
|
18
|
-
* Resolve a CanopyUser for a request: loads internal groups from the
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* SSR wrapper so the "authenticate -> load groups -> merge" pipeline can't
|
|
23
|
-
* drift between the two again.
|
|
15
|
+
* Resolve a CanopyUser for a request: loads internal groups from the settings workspace (the
|
|
16
|
+
* single source of truth — never a content branch clone) and merges them into an auth-plugin
|
|
17
|
+
* result via `authResultToCanopyUser`. Shared by the core HTTP handler and the Next.js SSR
|
|
18
|
+
* wrapper so the "authenticate -> load groups -> merge" pipeline cannot drift between them.
|
|
24
19
|
*/
|
|
25
20
|
export { resolveCanopyUser, type ResolveCanopyUserDeps } from './resolve-canopy-user.js';
|
|
26
21
|
export * from './branch-workspace.js';
|
|
@@ -28,44 +23,31 @@ export * from './content-store.js';
|
|
|
28
23
|
export { loadCollectionMetaFiles, resolveCollectionReferences, watchCollectionMetaFiles, resolveSchema, } from './schema/index.js';
|
|
29
24
|
export type { CollectionMeta, RootCollectionMeta } from './schema/index.js';
|
|
30
25
|
/**
|
|
31
|
-
* Create a type-safe entry schema registry with runtime validation.
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* convention is to key by entry-type name (filename token, also the value of
|
|
36
|
-
* `meta.entryType` in tree-builder callbacks) — that way
|
|
37
|
-
* `EntryTypesFromRegistry<typeof yourRegistry>` derives the
|
|
38
|
-
* discriminated-union map for `buildContentTree`'s `TEntryTypes` parameter
|
|
39
|
-
* automatically. See `createEntrySchemaRegistry`'s source-file JSDoc for the
|
|
40
|
-
* full example.
|
|
26
|
+
* Create a type-safe entry schema registry with runtime validation. Keys are the strings
|
|
27
|
+
* `.collection.json` files reference via `entry.schema`; key them by entry-type name so
|
|
28
|
+
* `EntryTypesFromRegistry<typeof yourRegistry>` derives `buildContentTree`'s `TEntryTypes` map.
|
|
29
|
+
* Source JSDoc has the example and the full validation list.
|
|
41
30
|
*/
|
|
42
31
|
export { createEntrySchemaRegistry } from './entry-schema-registry.js';
|
|
43
32
|
/**
|
|
44
|
-
* Validate that entry-schema references in `.collection.json` files exist in
|
|
45
|
-
*
|
|
46
|
-
* than at request time.
|
|
33
|
+
* Validate that entry-schema references in `.collection.json` files exist in the registry —
|
|
34
|
+
* at build time, so a stale reference fails there rather than at request time.
|
|
47
35
|
*/
|
|
48
36
|
export { validateEntrySchemaRegistry } from './entry-schema-registry.js';
|
|
49
37
|
/**
|
|
50
|
-
* Derive a discriminated-union entry-type map from a registry value
|
|
51
|
-
* `typeof entrySchemaRegistry
|
|
52
|
-
*
|
|
53
|
-
* `buildContentTree`'s `TEntryTypes` generic.
|
|
38
|
+
* Derive a discriminated-union entry-type map from a registry value: pass
|
|
39
|
+
* `typeof entrySchemaRegistry`. The registry must be keyed by entry-type name for the result
|
|
40
|
+
* to plug straight into `buildContentTree`'s `TEntryTypes` generic.
|
|
54
41
|
*/
|
|
55
42
|
export type { EntryTypesFromRegistry } from './entry-schema.js';
|
|
56
43
|
/**
|
|
57
|
-
* Resolve
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
* search-document/index builders in particular, since a search UI needs a
|
|
62
|
-
* title for every result regardless of which field the schema uses.
|
|
44
|
+
* Resolve an entry's display title through the full fallback chain: a schema-marked `isTitle`
|
|
45
|
+
* field, then `data.title`/`data.name`, then an entry-type label, then a humanized slug, then
|
|
46
|
+
* `"Untitled"`. Search-document and index builders in particular need a title for every result
|
|
47
|
+
* regardless of which field the schema uses.
|
|
63
48
|
*
|
|
64
|
-
* Client-safe (
|
|
65
|
-
*
|
|
66
|
-
* the root `canopycms` entry for that reason. Exported here too because
|
|
67
|
-
* build/admin scripts (the primary reason this was unreachable before) are
|
|
68
|
-
* more likely to `import` from `canopycms/server` than the root entry.
|
|
49
|
+
* Client-safe (its only imports are types, erased at compile time), so it is exported from the
|
|
50
|
+
* root `canopycms` entry as well as here, where build/admin scripts look for it.
|
|
69
51
|
*/
|
|
70
52
|
export { resolveEntryTitle } from './utils/title-field.js';
|
|
71
53
|
/** Generate a Canopy-format 12-character Base58 content ID. */
|
|
@@ -73,47 +55,41 @@ export { generateId } from './id.js';
|
|
|
73
55
|
/** Returns true if a string is a valid 12-character Base58 Canopy ID. */
|
|
74
56
|
export { isValidId } from './id.js';
|
|
75
57
|
/**
|
|
76
|
-
* Build a hierarchical tree of content nodes from the schema and filesystem.
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* `
|
|
81
|
-
*
|
|
82
|
-
* Adopters using `canopycms-next` typically call `canopy.buildContentTree(...)`
|
|
83
|
-
* via `getCanopyForBuild()` rather than the bare function.
|
|
58
|
+
* Build a hierarchical tree of content nodes from the schema and filesystem. Pass `TEntryTypes`
|
|
59
|
+
* (typically `EntryTypesFromRegistry<typeof entrySchemaRegistry>`) for narrowed access to
|
|
60
|
+
* `meta.indexEntry.data` after switching on `meta.entryType` in an `extract` callback.
|
|
61
|
+
* `canopycms-next` adopters usually call `canopy.buildContentTree(...)` via
|
|
62
|
+
* `getCanopyForBuild()` instead of the bare function.
|
|
84
63
|
*/
|
|
85
64
|
export { buildContentTree } from './content-tree.js';
|
|
86
65
|
export type { ContentTreeNode, BuildContentTreeOptions, ContentTreeExtractMeta, EntryTypeMap, DefaultEntryTypes, } from './content-tree.js';
|
|
87
66
|
/**
|
|
88
|
-
* `buildContentTree`'s default URL path builder: strips the `{contentRootName}/`
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* replaces the default outright, it does not compose with it.
|
|
67
|
+
* `buildContentTree`'s default URL path builder: strips the `{contentRootName}/` prefix,
|
|
68
|
+
* collapses an entry's `index` slug to its parent collection's path, and lowercases the result.
|
|
69
|
+
* Call it from inside a custom `buildPath` rather than reimplementing it — the `buildPath`
|
|
70
|
+
* option REPLACES the default outright, it does not compose with it.
|
|
93
71
|
*/
|
|
94
72
|
export { defaultBuildPath } from './content-tree.js';
|
|
95
73
|
/** List all content entries as a flat array. */
|
|
96
74
|
export { listEntries } from './content-listing.js';
|
|
97
75
|
export type { ListEntriesItem, ListEntriesOptions } from './content-listing.js';
|
|
98
76
|
/**
|
|
99
|
-
* Parse a content filename
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* omit it to parse the filename shape without that check. See the source JSDoc
|
|
104
|
-
* for the full filename grammar.
|
|
77
|
+
* Parse a content filename `{type}.{slug}.{id}.{ext}` into `{ type, slug, id }`. `id` must be a
|
|
78
|
+
* valid 12-character Base58 content ID (no ambiguous `0`, `O`, `I`, `l`) or the parse fails.
|
|
79
|
+
* Pass `entryTypes` to also require `type` to match a known entry-type name. Full grammar in
|
|
80
|
+
* the source JSDoc.
|
|
105
81
|
*/
|
|
106
82
|
export { parseTypedFilename } from './content-listing.js';
|
|
107
83
|
/**
|
|
108
84
|
* Resolve a canopy entry-link to its URL. Pair with the field-walker variants
|
|
109
|
-
* (`resolveEntryLinksInText`, `resolveEntryLinksInData`) when rendering MDX
|
|
110
|
-
*
|
|
85
|
+
* (`resolveEntryLinksInText`, `resolveEntryLinksInData`) when rendering MDX bodies or
|
|
86
|
+
* frontmatter that may contain link tokens.
|
|
111
87
|
*/
|
|
112
88
|
export { resolveEntryUrl, resolveEntryLinksInText, resolveEntryLinksInData, extractEntryLinkIds, } from './entry-link-resolver.js';
|
|
113
89
|
export type { EntryLinkUrlResolver } from './entry-link-resolver.js';
|
|
114
90
|
/**
|
|
115
|
-
*
|
|
116
|
-
*
|
|
91
|
+
* The canonical URL for an entry from its logical path + slug, plus the shared "is this the
|
|
92
|
+
* collection-index slug?" predicate that decides whether it collapses.
|
|
117
93
|
*/
|
|
118
94
|
export { computeEntryUrl, isIndexSlug } from './utils/entry-url.js';
|
|
119
95
|
/** Collect static paths for `generateStaticParams` / sitemap emission. */
|
|
@@ -124,65 +100,58 @@ export { collectRoutableEntries } from './static/index.js';
|
|
|
124
100
|
export type { RoutableEntry, CollectRoutableEntriesOptions } from './static/index.js';
|
|
125
101
|
/**
|
|
126
102
|
* Find every URL claimed by more than one entry — the check a production build already runs
|
|
127
|
-
*
|
|
103
|
+
* and fails on. Exported so a content-integrity test can assert it directly instead of
|
|
128
104
|
* hand-rolling the same scan over `listEntries`.
|
|
129
105
|
*/
|
|
130
106
|
export { findDuplicateUrlPaths } from './static/index.js';
|
|
131
107
|
export type { DuplicateUrlPath } from './static/index.js';
|
|
132
108
|
/**
|
|
133
|
-
* SEO field extraction and URL shaping
|
|
109
|
+
* SEO field extraction and URL shaping, framework-agnostic. `isNoindexEntry` is the single
|
|
134
110
|
* predicate behind both `robots: noindex` and sitemap exclusion.
|
|
135
111
|
*/
|
|
136
112
|
export { DEFAULT_SEO_FIELD_NAMES, extractSeoFields, isNoindexEntry, isAbsoluteUrl, withTrailingSlash, resolveSeoUrl, stripTrailingSlashes, } from './static/index.js';
|
|
137
113
|
export type { SeoFields, SeoFieldNames, SeoFieldLocation, SeoOgType, SeoTwitterCard, ExtractSeoFieldsOptions, ResolveSeoUrlOptions, } from './static/index.js';
|
|
138
114
|
/**
|
|
139
|
-
* Start a chokidar-backed watcher
|
|
140
|
-
*
|
|
115
|
+
* Start a chokidar-backed watcher for divergence between the dev working tree and the resolved
|
|
116
|
+
* branch clone. Dev mode only.
|
|
141
117
|
*/
|
|
142
118
|
export { startDevContentWatcher } from './dev-content-watcher.js';
|
|
143
119
|
export type { StartDevContentWatcherOptions } from './dev-content-watcher.js';
|
|
144
120
|
/**
|
|
145
|
-
* Instantiate the AssetStore configured by a site's `media
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
* `directory` with no fallback, or `adapter: 'lfs'` (config literal kept,
|
|
149
|
-
* not yet implemented).
|
|
121
|
+
* Instantiate the AssetStore configured by a site's `config.media`. Returns undefined when no
|
|
122
|
+
* store applies: `media` unset with no `devAssetsDir` fallback, `adapter: 'local'` without
|
|
123
|
+
* `directory` and no fallback, or `adapter: 'lfs'` (config literal kept, not yet implemented).
|
|
150
124
|
*/
|
|
151
125
|
export { createAssetStore } from './assets/factory.js';
|
|
152
126
|
/**
|
|
153
|
-
* The five S3/local bucket-prefix strings (`asset-originals/`, `asset-staging/`,
|
|
154
|
-
* `
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
* keys through the same constants `S3AssetStore` uses, rather than
|
|
158
|
-
* duplicating the literal prefix strings.
|
|
127
|
+
* The five S3/local bucket-prefix strings (`asset-originals/`, `asset-staging/`, `asset-meta/`,
|
|
128
|
+
* `assets/`, `assets/t/`). Exported so server-only consumers outside this package — notably the
|
|
129
|
+
* prod transform Lambda (`packages/canopycms-cdk/lambda/asset-transform`) — build and parse
|
|
130
|
+
* asset keys through the same constants `S3AssetStore` uses rather than duplicating the strings.
|
|
159
131
|
*/
|
|
160
132
|
export { ASSET_PREFIXES, type AssetPrefixes } from './assets/keys.js';
|
|
161
133
|
/** Asset metadata sidecar shape (`asset-meta/{hash32}.json`), written by the finalize pipeline and read by the transform layer (dev-mode emulation and the prod transform Lambda). */
|
|
162
134
|
export type { AssetMeta } from './assets/types.js';
|
|
163
135
|
/**
|
|
164
|
-
* Parse the three path segments after `assets/t/` (`{directives}/{hash32}/{slug}.{ext}`)
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
* so the URL grammar is defined in exactly one place.
|
|
136
|
+
* Parse the three path segments after `assets/t/` (`{directives}/{hash32}/{slug}.{ext}`) into a
|
|
137
|
+
* validated `TransformDirectives` set, or a structured parse error. Reused unchanged by the
|
|
138
|
+
* dev-mode lazy `/assets/t/*` emulation (`api/assets.ts`) and the prod transform Lambda, so the
|
|
139
|
+
* URL grammar is defined in exactly one place.
|
|
169
140
|
*/
|
|
170
141
|
export { parseTransformPath } from './assets/transform-directives.js';
|
|
171
142
|
export type { ParsedTransformPath, ParseTransformPathResult } from './assets/transform-directives.js';
|
|
172
143
|
/**
|
|
173
|
-
* Canonical string form of a `TransformDirectives` set
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
* canonical writes agree with the dev-mode emulation and `assetUrl()`.
|
|
144
|
+
* Canonical string form of a `TransformDirectives` set — the cache key every transform output is
|
|
145
|
+
* stored under (`assets/t/{formatDirectives(...)}/{hash32}/{slug}.{ext}`). Equivalent directive
|
|
146
|
+
* sets (different key order or float formatting) always format to the same string. Reused by the
|
|
147
|
+
* prod transform Lambda so its writes agree with the dev-mode emulation and `assetUrl()`.
|
|
178
148
|
*/
|
|
179
149
|
export { formatDirectives } from './assets/transform-directives.js';
|
|
180
150
|
/**
|
|
181
151
|
* Apply a parsed `TransformDirectives` set to source image bytes with sharp:
|
|
182
|
-
* resize/format/quality/crop,
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
* (`packages/canopycms-cdk/lambda/asset-transform`).
|
|
152
|
+
* resize/format/quality/crop, EXIF stripped on every re-encode, identity included. Server-only
|
|
153
|
+
* (sharp); reused unchanged by the dev-mode lazy `/assets/t/*` emulation and the prod transform
|
|
154
|
+
* Lambda.
|
|
186
155
|
*/
|
|
187
156
|
export { applyTransform } from './assets/transform.js';
|
|
188
157
|
export type { ApplyTransformInput, TransformResult } from './assets/transform.js';
|
package/dist/server.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
// Public server-side API for adopters.
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
// the same pattern (see DEVELOPING.md).
|
|
1
|
+
// Public server-side API for adopters. Every named re-export carries its own JSDoc, because
|
|
2
|
+
// TypeScript's propagation through `export { X } from './module.js'` is inconsistent across LSP
|
|
3
|
+
// versions and module-resolution modes and adopters would otherwise get no hover text. Follow the
|
|
4
|
+
// pattern for new top-level public re-exports (see DEVELOPING.md).
|
|
6
5
|
export * from './content-reader.js';
|
|
7
6
|
export * from './services.js';
|
|
8
7
|
export * from './build-mode.js';
|
|
@@ -10,59 +9,42 @@ export * from './context.js';
|
|
|
10
9
|
export { operatingStrategy } from './operating-mode/index.js';
|
|
11
10
|
export * from './authorization/groups/index.js';
|
|
12
11
|
/**
|
|
13
|
-
* One-call factory for a **build/admin** Canopy context
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* never use it in request-handling code. See the source JSDoc for the full
|
|
18
|
-
* security note and the `createNextCanopyContext().getCanopyForBuild()`
|
|
19
|
-
* comparison this mirrors.
|
|
12
|
+
* One-call factory for a **build/admin** Canopy context, for standalone scripts outside a
|
|
13
|
+
* Next.js request or build phase. Reads the filesystem as a synthetic admin user and bypasses
|
|
14
|
+
* ALL branch/path ACLs — never use it in request-handling code. Full security note in the
|
|
15
|
+
* source JSDoc.
|
|
20
16
|
*/
|
|
21
17
|
export { createBuildCanopy } from './build-canopy.js';
|
|
22
18
|
/**
|
|
23
|
-
* Resolve a CanopyUser for a request: loads internal groups from the
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* SSR wrapper so the "authenticate -> load groups -> merge" pipeline can't
|
|
28
|
-
* drift between the two again.
|
|
19
|
+
* Resolve a CanopyUser for a request: loads internal groups from the settings workspace (the
|
|
20
|
+
* single source of truth — never a content branch clone) and merges them into an auth-plugin
|
|
21
|
+
* result via `authResultToCanopyUser`. Shared by the core HTTP handler and the Next.js SSR
|
|
22
|
+
* wrapper so the "authenticate -> load groups -> merge" pipeline cannot drift between them.
|
|
29
23
|
*/
|
|
30
24
|
export { resolveCanopyUser } from './resolve-canopy-user.js';
|
|
31
25
|
export * from './branch-workspace.js';
|
|
32
26
|
export * from './content-store.js';
|
|
33
27
|
export { loadCollectionMetaFiles, resolveCollectionReferences, watchCollectionMetaFiles, resolveSchema, } from './schema/index.js';
|
|
34
28
|
/**
|
|
35
|
-
* Create a type-safe entry schema registry with runtime validation.
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* convention is to key by entry-type name (filename token, also the value of
|
|
40
|
-
* `meta.entryType` in tree-builder callbacks) — that way
|
|
41
|
-
* `EntryTypesFromRegistry<typeof yourRegistry>` derives the
|
|
42
|
-
* discriminated-union map for `buildContentTree`'s `TEntryTypes` parameter
|
|
43
|
-
* automatically. See `createEntrySchemaRegistry`'s source-file JSDoc for the
|
|
44
|
-
* full example.
|
|
29
|
+
* Create a type-safe entry schema registry with runtime validation. Keys are the strings
|
|
30
|
+
* `.collection.json` files reference via `entry.schema`; key them by entry-type name so
|
|
31
|
+
* `EntryTypesFromRegistry<typeof yourRegistry>` derives `buildContentTree`'s `TEntryTypes` map.
|
|
32
|
+
* Source JSDoc has the example and the full validation list.
|
|
45
33
|
*/
|
|
46
34
|
export { createEntrySchemaRegistry } from './entry-schema-registry.js';
|
|
47
35
|
/**
|
|
48
|
-
* Validate that entry-schema references in `.collection.json` files exist in
|
|
49
|
-
*
|
|
50
|
-
* than at request time.
|
|
36
|
+
* Validate that entry-schema references in `.collection.json` files exist in the registry —
|
|
37
|
+
* at build time, so a stale reference fails there rather than at request time.
|
|
51
38
|
*/
|
|
52
39
|
export { validateEntrySchemaRegistry } from './entry-schema-registry.js';
|
|
53
40
|
/**
|
|
54
|
-
* Resolve
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* search-document/index builders in particular, since a search UI needs a
|
|
59
|
-
* title for every result regardless of which field the schema uses.
|
|
41
|
+
* Resolve an entry's display title through the full fallback chain: a schema-marked `isTitle`
|
|
42
|
+
* field, then `data.title`/`data.name`, then an entry-type label, then a humanized slug, then
|
|
43
|
+
* `"Untitled"`. Search-document and index builders in particular need a title for every result
|
|
44
|
+
* regardless of which field the schema uses.
|
|
60
45
|
*
|
|
61
|
-
* Client-safe (
|
|
62
|
-
*
|
|
63
|
-
* the root `canopycms` entry for that reason. Exported here too because
|
|
64
|
-
* build/admin scripts (the primary reason this was unreachable before) are
|
|
65
|
-
* more likely to `import` from `canopycms/server` than the root entry.
|
|
46
|
+
* Client-safe (its only imports are types, erased at compile time), so it is exported from the
|
|
47
|
+
* root `canopycms` entry as well as here, where build/admin scripts look for it.
|
|
66
48
|
*/
|
|
67
49
|
export { resolveEntryTitle } from './utils/title-field.js';
|
|
68
50
|
/** Generate a Canopy-format 12-character Base58 content ID. */
|
|
@@ -70,44 +52,38 @@ export { generateId } from './id.js';
|
|
|
70
52
|
/** Returns true if a string is a valid 12-character Base58 Canopy ID. */
|
|
71
53
|
export { isValidId } from './id.js';
|
|
72
54
|
/**
|
|
73
|
-
* Build a hierarchical tree of content nodes from the schema and filesystem.
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* `
|
|
78
|
-
*
|
|
79
|
-
* Adopters using `canopycms-next` typically call `canopy.buildContentTree(...)`
|
|
80
|
-
* via `getCanopyForBuild()` rather than the bare function.
|
|
55
|
+
* Build a hierarchical tree of content nodes from the schema and filesystem. Pass `TEntryTypes`
|
|
56
|
+
* (typically `EntryTypesFromRegistry<typeof entrySchemaRegistry>`) for narrowed access to
|
|
57
|
+
* `meta.indexEntry.data` after switching on `meta.entryType` in an `extract` callback.
|
|
58
|
+
* `canopycms-next` adopters usually call `canopy.buildContentTree(...)` via
|
|
59
|
+
* `getCanopyForBuild()` instead of the bare function.
|
|
81
60
|
*/
|
|
82
61
|
export { buildContentTree } from './content-tree.js';
|
|
83
62
|
/**
|
|
84
|
-
* `buildContentTree`'s default URL path builder: strips the `{contentRootName}/`
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* replaces the default outright, it does not compose with it.
|
|
63
|
+
* `buildContentTree`'s default URL path builder: strips the `{contentRootName}/` prefix,
|
|
64
|
+
* collapses an entry's `index` slug to its parent collection's path, and lowercases the result.
|
|
65
|
+
* Call it from inside a custom `buildPath` rather than reimplementing it — the `buildPath`
|
|
66
|
+
* option REPLACES the default outright, it does not compose with it.
|
|
89
67
|
*/
|
|
90
68
|
export { defaultBuildPath } from './content-tree.js';
|
|
91
69
|
/** List all content entries as a flat array. */
|
|
92
70
|
export { listEntries } from './content-listing.js';
|
|
93
71
|
/**
|
|
94
|
-
* Parse a content filename
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
* omit it to parse the filename shape without that check. See the source JSDoc
|
|
99
|
-
* for the full filename grammar.
|
|
72
|
+
* Parse a content filename `{type}.{slug}.{id}.{ext}` into `{ type, slug, id }`. `id` must be a
|
|
73
|
+
* valid 12-character Base58 content ID (no ambiguous `0`, `O`, `I`, `l`) or the parse fails.
|
|
74
|
+
* Pass `entryTypes` to also require `type` to match a known entry-type name. Full grammar in
|
|
75
|
+
* the source JSDoc.
|
|
100
76
|
*/
|
|
101
77
|
export { parseTypedFilename } from './content-listing.js';
|
|
102
78
|
/**
|
|
103
79
|
* Resolve a canopy entry-link to its URL. Pair with the field-walker variants
|
|
104
|
-
* (`resolveEntryLinksInText`, `resolveEntryLinksInData`) when rendering MDX
|
|
105
|
-
*
|
|
80
|
+
* (`resolveEntryLinksInText`, `resolveEntryLinksInData`) when rendering MDX bodies or
|
|
81
|
+
* frontmatter that may contain link tokens.
|
|
106
82
|
*/
|
|
107
83
|
export { resolveEntryUrl, resolveEntryLinksInText, resolveEntryLinksInData, extractEntryLinkIds, } from './entry-link-resolver.js';
|
|
108
84
|
/**
|
|
109
|
-
*
|
|
110
|
-
*
|
|
85
|
+
* The canonical URL for an entry from its logical path + slug, plus the shared "is this the
|
|
86
|
+
* collection-index slug?" predicate that decides whether it collapses.
|
|
111
87
|
*/
|
|
112
88
|
export { computeEntryUrl, isIndexSlug } from './utils/entry-url.js';
|
|
113
89
|
/** Collect static paths for `generateStaticParams` / sitemap emission. */
|
|
@@ -116,58 +92,51 @@ export { collectStaticPaths } from './static/index.js';
|
|
|
116
92
|
export { collectRoutableEntries } from './static/index.js';
|
|
117
93
|
/**
|
|
118
94
|
* Find every URL claimed by more than one entry — the check a production build already runs
|
|
119
|
-
*
|
|
95
|
+
* and fails on. Exported so a content-integrity test can assert it directly instead of
|
|
120
96
|
* hand-rolling the same scan over `listEntries`.
|
|
121
97
|
*/
|
|
122
98
|
export { findDuplicateUrlPaths } from './static/index.js';
|
|
123
99
|
/**
|
|
124
|
-
* SEO field extraction and URL shaping
|
|
100
|
+
* SEO field extraction and URL shaping, framework-agnostic. `isNoindexEntry` is the single
|
|
125
101
|
* predicate behind both `robots: noindex` and sitemap exclusion.
|
|
126
102
|
*/
|
|
127
103
|
export { DEFAULT_SEO_FIELD_NAMES, extractSeoFields, isNoindexEntry, isAbsoluteUrl, withTrailingSlash, resolveSeoUrl, stripTrailingSlashes, } from './static/index.js';
|
|
128
104
|
/**
|
|
129
|
-
* Start a chokidar-backed watcher
|
|
130
|
-
*
|
|
105
|
+
* Start a chokidar-backed watcher for divergence between the dev working tree and the resolved
|
|
106
|
+
* branch clone. Dev mode only.
|
|
131
107
|
*/
|
|
132
108
|
export { startDevContentWatcher } from './dev-content-watcher.js';
|
|
133
109
|
/**
|
|
134
|
-
* Instantiate the AssetStore configured by a site's `media
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
* `directory` with no fallback, or `adapter: 'lfs'` (config literal kept,
|
|
138
|
-
* not yet implemented).
|
|
110
|
+
* Instantiate the AssetStore configured by a site's `config.media`. Returns undefined when no
|
|
111
|
+
* store applies: `media` unset with no `devAssetsDir` fallback, `adapter: 'local'` without
|
|
112
|
+
* `directory` and no fallback, or `adapter: 'lfs'` (config literal kept, not yet implemented).
|
|
139
113
|
*/
|
|
140
114
|
export { createAssetStore } from './assets/factory.js';
|
|
141
115
|
/**
|
|
142
|
-
* The five S3/local bucket-prefix strings (`asset-originals/`, `asset-staging/`,
|
|
143
|
-
* `
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
* keys through the same constants `S3AssetStore` uses, rather than
|
|
147
|
-
* duplicating the literal prefix strings.
|
|
116
|
+
* The five S3/local bucket-prefix strings (`asset-originals/`, `asset-staging/`, `asset-meta/`,
|
|
117
|
+
* `assets/`, `assets/t/`). Exported so server-only consumers outside this package — notably the
|
|
118
|
+
* prod transform Lambda (`packages/canopycms-cdk/lambda/asset-transform`) — build and parse
|
|
119
|
+
* asset keys through the same constants `S3AssetStore` uses rather than duplicating the strings.
|
|
148
120
|
*/
|
|
149
121
|
export { ASSET_PREFIXES } from './assets/keys.js';
|
|
150
122
|
/**
|
|
151
|
-
* Parse the three path segments after `assets/t/` (`{directives}/{hash32}/{slug}.{ext}`)
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
* so the URL grammar is defined in exactly one place.
|
|
123
|
+
* Parse the three path segments after `assets/t/` (`{directives}/{hash32}/{slug}.{ext}`) into a
|
|
124
|
+
* validated `TransformDirectives` set, or a structured parse error. Reused unchanged by the
|
|
125
|
+
* dev-mode lazy `/assets/t/*` emulation (`api/assets.ts`) and the prod transform Lambda, so the
|
|
126
|
+
* URL grammar is defined in exactly one place.
|
|
156
127
|
*/
|
|
157
128
|
export { parseTransformPath } from './assets/transform-directives.js';
|
|
158
129
|
/**
|
|
159
|
-
* Canonical string form of a `TransformDirectives` set
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
* canonical writes agree with the dev-mode emulation and `assetUrl()`.
|
|
130
|
+
* Canonical string form of a `TransformDirectives` set — the cache key every transform output is
|
|
131
|
+
* stored under (`assets/t/{formatDirectives(...)}/{hash32}/{slug}.{ext}`). Equivalent directive
|
|
132
|
+
* sets (different key order or float formatting) always format to the same string. Reused by the
|
|
133
|
+
* prod transform Lambda so its writes agree with the dev-mode emulation and `assetUrl()`.
|
|
164
134
|
*/
|
|
165
135
|
export { formatDirectives } from './assets/transform-directives.js';
|
|
166
136
|
/**
|
|
167
137
|
* Apply a parsed `TransformDirectives` set to source image bytes with sharp:
|
|
168
|
-
* resize/format/quality/crop,
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
* (`packages/canopycms-cdk/lambda/asset-transform`).
|
|
138
|
+
* resize/format/quality/crop, EXIF stripped on every re-encode, identity included. Server-only
|
|
139
|
+
* (sharp); reused unchanged by the dev-mode lazy `/assets/t/*` emulation and the prod transform
|
|
140
|
+
* Lambda.
|
|
172
141
|
*/
|
|
173
142
|
export { applyTransform } from './assets/transform.js';
|
package/dist/services.d.ts
CHANGED
|
@@ -1,22 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `CanopyServices` — the long-lived, per-deployment service container
|
|
2
|
+
* `CanopyServices` — the long-lived, per-deployment service container, built
|
|
3
|
+
* once by `createCanopyServices` and threaded through `ApiContext.services` to
|
|
4
|
+
* every API handler. Holds config, the schema registry and cache, the ACL
|
|
5
|
+
* checkers, the git-manager factory, the branch registry, the GitHub service,
|
|
6
|
+
* and four branch-workflow operations. Not `context.ts`, which is the
|
|
7
|
+
* per-REQUEST facade built on top of this.
|
|
3
8
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* four branch-workflow operations (`commitFiles`, `submitBranch`,
|
|
8
|
-
* `commitToSettingsBranch`, `getSettingsBranchRoot`).
|
|
9
|
+
* SCOPE WARNING: a service locator every api module reaches, so adding a field
|
|
10
|
+
* is free and therefore constant, and no handler's signature reveals what it
|
|
11
|
+
* touches. Give a new capability its own narrow interface instead.
|
|
9
12
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* signature reveals what it actually touches. Prefer giving a new capability its
|
|
13
|
-
* own narrow interface over a 23rd field here.
|
|
14
|
-
*
|
|
15
|
-
* Not to be confused with `context.ts`, which is the per-REQUEST facade built on
|
|
16
|
-
* top of this.
|
|
17
|
-
*
|
|
18
|
-
* `createTestCanopyServices` is test-only despite living in a production module;
|
|
19
|
-
* it reaches the published surface through a wildcard re-export.
|
|
13
|
+
* `createTestCanopyServices` is test-only despite living in a production
|
|
14
|
+
* module; it reaches the published surface through a wildcard re-export.
|
|
20
15
|
*
|
|
21
16
|
* Module map: ./AGENTS.md.
|
|
22
17
|
*/
|
|
@@ -30,8 +25,8 @@ import { BranchRegistry } from './branch-registry.js';
|
|
|
30
25
|
import { type GitHubService } from './github-service.js';
|
|
31
26
|
import { BranchSchemaCache } from './branch-schema-cache.js';
|
|
32
27
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
28
|
+
* Bootstrap admin IDs from the environment. These users are treated as Admins
|
|
29
|
+
* whatever their group membership.
|
|
35
30
|
*/
|
|
36
31
|
export declare const getBootstrapAdminIds: () => Set<string>;
|
|
37
32
|
export interface CanopyServices {
|
|
@@ -49,9 +44,9 @@ export interface CanopyServices {
|
|
|
49
44
|
checkBranchAccess: (context: BranchContext, user: CanopyUser) => ReturnType<ReturnType<typeof createCheckBranchAccess>>;
|
|
50
45
|
checkContentAccess: ReturnType<typeof createCheckContentAccess>;
|
|
51
46
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
47
|
+
* A batch content-access checker: loads permissions once, returns a
|
|
48
|
+
* synchronous per-path check. Use it whenever one request checks many paths,
|
|
49
|
+
* so permissions are not re-loaded per path.
|
|
55
50
|
*/
|
|
56
51
|
createContentAccessChecker: (context: BranchContext, branchRoot: string, user: CanopyUser) => Promise<ContentAccessChecker>;
|
|
57
52
|
createGitManagerFor: (repoPath: string, opts?: {
|
|
@@ -90,44 +85,25 @@ export interface CanopyServices {
|
|
|
90
85
|
/** Get the root path for settings storage (ensures workspace exists) */
|
|
91
86
|
getSettingsBranchRoot: () => Promise<string>;
|
|
92
87
|
}
|
|
93
|
-
/**
|
|
94
|
-
* Options for createCanopyServices and createTestCanopyServices.
|
|
95
|
-
*/
|
|
96
88
|
export interface CreateCanopyServicesOptions {
|
|
97
|
-
/**
|
|
98
|
-
* Entry schema registry for resolving .collection.json references.
|
|
99
|
-
* Maps entry schema names to field definitions.
|
|
100
|
-
*/
|
|
89
|
+
/** Entry schema names → field definitions, for resolving .collection.json references. */
|
|
101
90
|
entrySchemaRegistry?: EntrySchemaRegistry;
|
|
102
91
|
/**
|
|
103
|
-
* Test-only:
|
|
104
|
-
* When provided, bypasses the default BranchSchemaCache creation.
|
|
92
|
+
* Test-only: bypasses the default BranchSchemaCache creation.
|
|
105
93
|
* @internal
|
|
106
94
|
*/
|
|
107
95
|
branchSchemaCache?: BranchSchemaCache;
|
|
108
96
|
/**
|
|
109
|
-
* Test-only:
|
|
110
|
-
* When provided, bypasses the real git workspace setup for settings.
|
|
97
|
+
* Test-only: bypasses the real git workspace setup for settings.
|
|
111
98
|
* @internal
|
|
112
99
|
*/
|
|
113
100
|
getSettingsBranchRoot?: () => Promise<string>;
|
|
114
101
|
}
|
|
115
102
|
/**
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
* Schema is now loaded per-branch via BranchSchemaCache, not at startup.
|
|
121
|
-
*
|
|
122
|
-
* @param config - Validated Canopy configuration
|
|
123
|
-
* @param options - Optional settings including entry schema registry
|
|
103
|
+
* Build the reusable helpers from a validated CanopyConfig — once at startup,
|
|
104
|
+
* then injected into request handlers and loaders. Schema is not loaded here;
|
|
105
|
+
* BranchSchemaCache loads it per branch.
|
|
124
106
|
*/
|
|
125
107
|
export declare const createCanopyServices: (config: CanopyConfig, options?: CreateCanopyServicesOptions) => Promise<CanopyServices>;
|
|
126
|
-
/**
|
|
127
|
-
* Create services for testing.
|
|
128
|
-
* Schema is loaded per-branch via BranchSchemaCache.
|
|
129
|
-
*
|
|
130
|
-
* @param config - Validated Canopy configuration
|
|
131
|
-
* @param options - Optional settings including entry schema registry
|
|
132
|
-
*/
|
|
108
|
+
/** {@link createCanopyServices} for tests, with branch identity pinned. */
|
|
133
109
|
export declare const createTestCanopyServices: (config: CanopyConfig, options?: CreateCanopyServicesOptions) => Promise<CanopyServices>;
|