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/cli/init.js
CHANGED
|
@@ -334,18 +334,18 @@ var init_config = __esm({
|
|
|
334
334
|
onAccountClick: z5.function().returns(z5.void()).optional(),
|
|
335
335
|
onLogoutClick: z5.function().returns(z5.void()).optional(),
|
|
336
336
|
// Optional: custom account component (e.g., Clerk's UserButton)
|
|
337
|
-
AccountComponent: z5.custom().optional()
|
|
337
|
+
AccountComponent: z5.custom().optional(),
|
|
338
|
+
// Optional: provider sign-in UI for signed-out users (see EditorSignInProps)
|
|
339
|
+
SignInComponent: z5.custom().optional()
|
|
338
340
|
});
|
|
339
341
|
CanopyConfigSchema = z5.object({
|
|
340
342
|
media: mediaSchema.optional(),
|
|
341
|
-
// No outer .optional()
|
|
342
|
-
//
|
|
343
|
-
//
|
|
344
|
-
//
|
|
345
|
-
//
|
|
346
|
-
//
|
|
347
|
-
// still resolves to 'deny' and an omitted level inside the object form stays undefined
|
|
348
|
-
// (resolved to 'deny' at read time by resolveDefaultPathAccess).
|
|
343
|
+
// No outer .optional(): both schemas already .default('deny'), so the field is optional on
|
|
344
|
+
// input but always resolves to 'allow'/'deny' (never undefined) on output — an outer
|
|
345
|
+
// .optional() would short-circuit before the inner default runs, defeating the fail-closed
|
|
346
|
+
// default (SCH-M1). defaultPathAccessSchema's .default('deny') sits on the OUTER union, not
|
|
347
|
+
// inside defaultPathAccessLevelsSchema, so an omitted level in the object form stays
|
|
348
|
+
// undefined (resolved to 'deny' at read time by resolveDefaultPathAccess).
|
|
349
349
|
defaultBranchAccess: defaultBranchAccessSchema,
|
|
350
350
|
defaultPathAccess: defaultPathAccessSchema,
|
|
351
351
|
// .optional() deliberately defeats defaultBaseBranchSchema's .default('main'):
|
|
@@ -369,16 +369,11 @@ var init_config = __esm({
|
|
|
369
369
|
allowNetworkRemoteInProd: z5.boolean().optional(),
|
|
370
370
|
settingsBranch: z5.string().optional(),
|
|
371
371
|
autoCreateSettingsPR: z5.boolean().optional(),
|
|
372
|
-
//
|
|
373
|
-
//
|
|
374
|
-
//
|
|
375
|
-
//
|
|
376
|
-
//
|
|
377
|
-
// "win" over modeDefault (masking dev's real default of 'local'), and the env
|
|
378
|
-
// var would just be racing config's baked-in 'prod' instead of a true absence.
|
|
379
|
-
// `.optional()` here is what keeps an omitted deploymentName reaching
|
|
380
|
-
// resolveDeploymentName as `undefined`, so it can fall through to modeDefault.
|
|
381
|
-
// Do not "fix" this by removing `.optional()`.
|
|
372
|
+
// `.optional()`, NOT bare `deploymentNameSchema`: its own `.default('prod')` would make
|
|
373
|
+
// `parse(undefined)` resolve to 'prod' instead of staying `undefined`, collapsing the
|
|
374
|
+
// env > config > modeDefault precedence chain `resolveDeploymentName`
|
|
375
|
+
// (operating-mode/deployment-name.ts) implements — config would always "win" over
|
|
376
|
+
// modeDefault, masking dev's real default of 'local'. Do not remove `.optional()`.
|
|
382
377
|
deploymentName: deploymentNameSchema.optional(),
|
|
383
378
|
contentRoot: contentRootSchema.default("content"),
|
|
384
379
|
sourceRoot: sourceRootSchema.optional(),
|
|
@@ -522,7 +517,6 @@ var init_fs = __esm({
|
|
|
522
517
|
// dist/cli/templates.js
|
|
523
518
|
var templates_exports = {};
|
|
524
519
|
__export(templates_exports, {
|
|
525
|
-
SCAFFOLD_STACK_NAME: () => SCAFFOLD_STACK_NAME,
|
|
526
520
|
aiConfig: () => aiConfig,
|
|
527
521
|
aiRoute: () => aiRoute,
|
|
528
522
|
apiRoute: () => apiRoute,
|
|
@@ -588,9 +582,8 @@ async function aiRoute(options) {
|
|
|
588
582
|
const template = await readTemplate("ai-route.ts.template");
|
|
589
583
|
return template.replace("{{CONFIG_IMPORT}}", options.configImport);
|
|
590
584
|
}
|
|
591
|
-
async function middleware(
|
|
592
|
-
|
|
593
|
-
return readTemplate(templateName);
|
|
585
|
+
async function middleware() {
|
|
586
|
+
return readTemplate("middleware.ts.template");
|
|
594
587
|
}
|
|
595
588
|
async function nextConfig(options) {
|
|
596
589
|
const templateName = options.staticBuild ? "next.config-static.ts.template" : "next.config.ts.template";
|
|
@@ -638,8 +631,7 @@ __export(project_detect_exports, {
|
|
|
638
631
|
detectDefaultBranch: () => detectDefaultBranch,
|
|
639
632
|
detectGitHubRepo: () => detectGitHubRepo,
|
|
640
633
|
detectPackageManager: () => detectPackageManager,
|
|
641
|
-
missingCdkDependencies: () => missingCdkDependencies
|
|
642
|
-
readPackageJson: () => readPackageJson
|
|
634
|
+
missingCdkDependencies: () => missingCdkDependencies
|
|
643
635
|
});
|
|
644
636
|
import fs3 from "node:fs/promises";
|
|
645
637
|
import path3 from "node:path";
|
|
@@ -768,14 +760,13 @@ var init_project_detect = __esm({
|
|
|
768
760
|
pnpm: {
|
|
769
761
|
lockfile: "pnpm-lock.yaml",
|
|
770
762
|
ciInstall: "corepack enable && pnpm install --frozen-lockfile",
|
|
771
|
-
// pnpm-workspace.yaml holds settings the install obeys even in a single-package app
|
|
772
|
-
// 11's `allowBuilds` decisions, `overrides`, `patchedDependencies
|
|
773
|
-
// install on any dependency build script without a decision, and an app with the
|
|
774
|
-
// several (es5-ext
|
|
775
|
-
//
|
|
776
|
-
//
|
|
777
|
-
//
|
|
778
|
-
// in the context, and the same line with the literal name fails with "not found".
|
|
763
|
+
// pnpm-workspace.yaml holds settings the install obeys even in a single-package app
|
|
764
|
+
// (pnpm 11's `allowBuilds` decisions, `overrides`, `patchedDependencies`); pnpm 11 fails
|
|
765
|
+
// the install on any dependency build script without a decision, and an app with the
|
|
766
|
+
// editor has several (es5-ext, sharp). The `[l]` glob keeps the file optional: on Docker
|
|
767
|
+
// Engine 29.6.2 (BuildKit v0.31.2), `COPY package.json pnpm-workspace.yam[l] ./` builds
|
|
768
|
+
// with no pnpm-workspace.yaml in the context, while the same line with the literal name
|
|
769
|
+
// fails with "not found".
|
|
779
770
|
dockerCopy: "COPY package.json pnpm-lock.yaml pnpm-workspace.yam[l] ./",
|
|
780
771
|
dockerInstall: "RUN corepack enable && pnpm install --frozen-lockfile",
|
|
781
772
|
build: "pnpm run build",
|
|
@@ -810,7 +801,7 @@ var init_project_detect = __esm({
|
|
|
810
801
|
}
|
|
811
802
|
});
|
|
812
803
|
|
|
813
|
-
// dist/
|
|
804
|
+
// dist/task-queue/task-queue-config.js
|
|
814
805
|
var task_queue_config_exports = {};
|
|
815
806
|
__export(task_queue_config_exports, {
|
|
816
807
|
getTaskQueueDir: () => getTaskQueueDir
|
|
@@ -828,7 +819,7 @@ function getTaskQueueDir(config) {
|
|
|
828
819
|
}
|
|
829
820
|
}
|
|
830
821
|
var init_task_queue_config = __esm({
|
|
831
|
-
"dist/
|
|
822
|
+
"dist/task-queue/task-queue-config.js"() {
|
|
832
823
|
"use strict";
|
|
833
824
|
init_config2();
|
|
834
825
|
}
|
|
@@ -861,15 +852,11 @@ var init_debug = __esm({
|
|
|
861
852
|
return LOG_LEVELS[level] >= LOG_LEVELS[minLevel];
|
|
862
853
|
}
|
|
863
854
|
/**
|
|
864
|
-
* The ISO-8601 timestamp leads the line BARE
|
|
865
|
-
*
|
|
866
|
-
*
|
|
867
|
-
*
|
|
868
|
-
*
|
|
869
|
-
* leading `[` meant every debug line was silently folded into the previous
|
|
870
|
-
* event instead of starting its own. The bracketed `[prefix:category]` and
|
|
871
|
-
* `[level]` fields still follow, so the human-readable shape is unchanged
|
|
872
|
-
* apart from those two characters.
|
|
855
|
+
* The ISO-8601 timestamp leads the line BARE, never bracketed. `CANOPYCMS_DEBUG=true` can
|
|
856
|
+
* be set on the EC2 worker, whose stdout appends to /var/log/canopy-worker/worker.log, and
|
|
857
|
+
* the CloudWatch agent's `multi_line_start_pattern` matches a timestamp at the START of a
|
|
858
|
+
* line (see worker/log.ts's INVARIANT and cms-service.ts's agent config): any leading
|
|
859
|
+
* character folds the line into the previous event instead of starting its own.
|
|
873
860
|
*/
|
|
874
861
|
formatMessage(level, category, message) {
|
|
875
862
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
@@ -902,15 +889,9 @@ var init_debug = __esm({
|
|
|
902
889
|
throw new Error(errorMsg);
|
|
903
890
|
}
|
|
904
891
|
}
|
|
905
|
-
/**
|
|
906
|
-
* Start timing an operation
|
|
907
|
-
*/
|
|
908
892
|
time(label) {
|
|
909
893
|
this.timers.set(label, Date.now());
|
|
910
894
|
}
|
|
911
|
-
/**
|
|
912
|
-
* End timing an operation and log the duration
|
|
913
|
-
*/
|
|
914
895
|
timeEnd(category, label) {
|
|
915
896
|
const start = this.timers.get(label);
|
|
916
897
|
if (start === void 0) {
|
|
@@ -922,9 +903,6 @@ var init_debug = __esm({
|
|
|
922
903
|
this.debug(category, `${label} completed`, { durationMs: duration });
|
|
923
904
|
return duration;
|
|
924
905
|
}
|
|
925
|
-
/**
|
|
926
|
-
* Wrap an async function with automatic timing
|
|
927
|
-
*/
|
|
928
906
|
async timed(category, label, fn) {
|
|
929
907
|
this.time(label);
|
|
930
908
|
try {
|
|
@@ -1375,17 +1353,9 @@ var init_task_queue = __esm({
|
|
|
1375
1353
|
}
|
|
1376
1354
|
});
|
|
1377
1355
|
|
|
1378
|
-
// dist/task-queue/
|
|
1379
|
-
var
|
|
1380
|
-
|
|
1381
|
-
"use strict";
|
|
1382
|
-
init_task_queue();
|
|
1383
|
-
}
|
|
1384
|
-
});
|
|
1385
|
-
|
|
1386
|
-
// dist/worker/task-queue.js
|
|
1387
|
-
var task_queue_exports = {};
|
|
1388
|
-
__export(task_queue_exports, {
|
|
1356
|
+
// dist/task-queue/cms-task-queue.js
|
|
1357
|
+
var cms_task_queue_exports = {};
|
|
1358
|
+
__export(cms_task_queue_exports, {
|
|
1389
1359
|
cleanupOldTasks: () => cleanupOldTasks,
|
|
1390
1360
|
cmsTaskQueueLogger: () => cmsTaskQueueLogger,
|
|
1391
1361
|
completeTask: () => completeTask,
|
|
@@ -1394,7 +1364,6 @@ __export(task_queue_exports, {
|
|
|
1394
1364
|
failTask: () => failTask,
|
|
1395
1365
|
getQueueStats: () => getQueueStats,
|
|
1396
1366
|
getTask: () => getTask,
|
|
1397
|
-
getTaskResult: () => getTask,
|
|
1398
1367
|
listCorruptTaskFiles: () => listCorruptTaskFiles,
|
|
1399
1368
|
listTasks: () => listTasks,
|
|
1400
1369
|
recoverOrphanedTasks: () => recoverOrphanedTasks,
|
|
@@ -1402,11 +1371,11 @@ __export(task_queue_exports, {
|
|
|
1402
1371
|
retryTask: () => retryTask
|
|
1403
1372
|
});
|
|
1404
1373
|
var debugLogger, cmsTaskQueueLogger;
|
|
1405
|
-
var
|
|
1406
|
-
"dist/
|
|
1374
|
+
var init_cms_task_queue = __esm({
|
|
1375
|
+
"dist/task-queue/cms-task-queue.js"() {
|
|
1407
1376
|
"use strict";
|
|
1408
1377
|
init_debug();
|
|
1409
|
-
|
|
1378
|
+
init_task_queue();
|
|
1410
1379
|
debugLogger = createDebugLogger({ prefix: "TaskQueue" });
|
|
1411
1380
|
cmsTaskQueueLogger = {
|
|
1412
1381
|
debug(message, data) {
|
|
@@ -1427,7 +1396,6 @@ var ProdClientSafeStrategy = class {
|
|
|
1427
1396
|
constructor() {
|
|
1428
1397
|
this.mode = "prod";
|
|
1429
1398
|
}
|
|
1430
|
-
// UI Feature Flags
|
|
1431
1399
|
supportsBranching() {
|
|
1432
1400
|
return true;
|
|
1433
1401
|
}
|
|
@@ -1440,7 +1408,6 @@ var ProdClientSafeStrategy = class {
|
|
|
1440
1408
|
supportsPullRequests() {
|
|
1441
1409
|
return true;
|
|
1442
1410
|
}
|
|
1443
|
-
// Simple Data
|
|
1444
1411
|
getPermissionsFileName() {
|
|
1445
1412
|
return "permissions.json";
|
|
1446
1413
|
}
|
|
@@ -1458,7 +1425,6 @@ var DevClientSafeStrategy = class {
|
|
|
1458
1425
|
constructor() {
|
|
1459
1426
|
this.mode = "dev";
|
|
1460
1427
|
}
|
|
1461
|
-
// UI Feature Flags
|
|
1462
1428
|
supportsBranching() {
|
|
1463
1429
|
return true;
|
|
1464
1430
|
}
|
|
@@ -1471,7 +1437,6 @@ var DevClientSafeStrategy = class {
|
|
|
1471
1437
|
supportsPullRequests() {
|
|
1472
1438
|
return false;
|
|
1473
1439
|
}
|
|
1474
|
-
// Simple Data
|
|
1475
1440
|
getPermissionsFileName() {
|
|
1476
1441
|
return "permissions.json";
|
|
1477
1442
|
}
|
|
@@ -1512,11 +1477,6 @@ function resolveDeploymentName(config, modeDefault) {
|
|
|
1512
1477
|
// dist/operating-mode/client-unsafe-strategy.js
|
|
1513
1478
|
init_config2();
|
|
1514
1479
|
var ProdStrategy = class extends ProdClientSafeStrategy {
|
|
1515
|
-
// All client-safe methods inherited automatically from ProdClientSafeStrategy:
|
|
1516
|
-
// - mode, supportsBranching(), supportsStatusBadge(), supportsComments()
|
|
1517
|
-
// - supportsPullRequests(), getPermissionsFileName(), getGroupsFileName()
|
|
1518
|
-
// - shouldCommit(), shouldPush()
|
|
1519
|
-
// Add client-unsafe methods (use Node.js APIs)
|
|
1520
1480
|
getWorkspaceRoot(_sourceRoot) {
|
|
1521
1481
|
return path.resolve(process.env.CANOPYCMS_WORKSPACE_ROOT ?? DEFAULT_PROD_WORKSPACE);
|
|
1522
1482
|
}
|
|
@@ -1570,7 +1530,6 @@ var ProdStrategy = class extends ProdClientSafeStrategy {
|
|
|
1570
1530
|
}
|
|
1571
1531
|
};
|
|
1572
1532
|
var DevStrategy = class extends DevClientSafeStrategy {
|
|
1573
|
-
// Inherits client-safe methods from DevClientSafeStrategy
|
|
1574
1533
|
getWorkspaceRoot(sourceRoot) {
|
|
1575
1534
|
return path.resolve(sourceRoot ?? process.cwd(), ".canopy-dev");
|
|
1576
1535
|
}
|
|
@@ -1760,7 +1719,7 @@ async function init(options) {
|
|
|
1760
1719
|
} else {
|
|
1761
1720
|
await writeFile(path7.join(projectDir, "next.config.ts"), await nextConfig2({ staticBuild }), writeOpts);
|
|
1762
1721
|
}
|
|
1763
|
-
await writeFile(path7.join(projectDir, path7.dirname(appDir), "middleware.ts"), await middleware2(
|
|
1722
|
+
await writeFile(path7.join(projectDir, path7.dirname(appDir), "middleware.ts"), await middleware2(), writeOpts);
|
|
1764
1723
|
const gitignorePath = path7.join(projectDir, ".gitignore");
|
|
1765
1724
|
const CANOPY_GITIGNORE_BLOCK = "# CanopyCMS\n.canopy-dev/\n";
|
|
1766
1725
|
if (await filePathExists(gitignorePath)) {
|
|
@@ -1971,7 +1930,7 @@ CanopyCMS worker run-once (mode: ${mode}, auth: ${authMode})
|
|
|
1971
1930
|
process.exitCode = 1;
|
|
1972
1931
|
}
|
|
1973
1932
|
}
|
|
1974
|
-
const { dequeueTask: dequeueTask2, completeTask: completeTask2, listTasks: listTasks2 } = await Promise.resolve().then(() => (
|
|
1933
|
+
const { dequeueTask: dequeueTask2, completeTask: completeTask2, listTasks: listTasks2 } = await Promise.resolve().then(() => (init_cms_task_queue(), cms_task_queue_exports));
|
|
1975
1934
|
if (mode === "prod") {
|
|
1976
1935
|
const pending = await listTasks2(taskDir, "pending");
|
|
1977
1936
|
if (pending.length > 0) {
|
package/dist/cli/migrate.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* so re-running is a no-op. Source-specific ordering conventions (e.g.
|
|
13
13
|
* Nextra _meta.json) are out of scope — order defaults to alphabetical.
|
|
14
14
|
*/
|
|
15
|
-
|
|
15
|
+
declare const MIGRATE_FORMATS: readonly ["md", "mdx", "json", "yaml"];
|
|
16
16
|
export type MigrateFormat = (typeof MIGRATE_FORMATS)[number];
|
|
17
17
|
export interface MigrateOptions {
|
|
18
18
|
projectDir: string;
|
|
@@ -20,7 +20,6 @@ export interface MigrateOptions {
|
|
|
20
20
|
contentRoot?: string;
|
|
21
21
|
/** Entry type name written into .collection.json and file names (e.g. 'doc') */
|
|
22
22
|
entryType?: string;
|
|
23
|
-
/** File format to migrate */
|
|
24
23
|
format?: MigrateFormat;
|
|
25
24
|
/** Entry schema registry key written into .collection.json (e.g. 'docSchema') */
|
|
26
25
|
schema?: string;
|
|
@@ -29,21 +28,25 @@ export interface MigrateOptions {
|
|
|
29
28
|
/** Skip the confirmation prompt */
|
|
30
29
|
force?: boolean;
|
|
31
30
|
}
|
|
32
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Migration precondition failure — thrown so the CLI exits non-zero.
|
|
33
|
+
* @internal Exported for tests.
|
|
34
|
+
*/
|
|
33
35
|
export declare class MigrateError extends Error {
|
|
34
36
|
constructor(message: string);
|
|
35
37
|
}
|
|
36
38
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
39
|
+
* Normalizes a file/directory base name into a slug parseSlug accepts
|
|
40
|
+
* (/^[a-z0-9][a-z0-9-]*$/) — underscores are NOT allowed: the public read path
|
|
41
|
+
* rejects them, so a migrated page carrying one is unreachable and fails the
|
|
42
|
+
* production build (static/index.ts's assertRoutableSlugs). Migration writes
|
|
43
|
+
* files directly, bypassing the write API's [SLUG] create guard, so this
|
|
44
|
+
* normalization is the only thing that keeps the migrated tree buildable.
|
|
45
|
+
* @internal Exported for tests.
|
|
44
46
|
*/
|
|
45
47
|
export declare function slugifyName(name: string): string;
|
|
46
48
|
/** Run the migrate command. Returns the number of operations applied. */
|
|
47
49
|
export declare function migrate(options: MigrateOptions): Promise<{
|
|
48
50
|
opCount: number;
|
|
49
51
|
}>;
|
|
52
|
+
export {};
|
package/dist/cli/migrate.js
CHANGED
|
@@ -25,8 +25,11 @@ import { withLock } from '../utils/async-mutex.js';
|
|
|
25
25
|
import { withOccFileLock, OccWriteConflictError } from '../utils/occ-json-write.js';
|
|
26
26
|
import { BranchMetadataFileManager } from '../branch-metadata.js';
|
|
27
27
|
import { invalidateBranchContentCaches } from '../content-index-generation.js';
|
|
28
|
-
|
|
29
|
-
/**
|
|
28
|
+
const MIGRATE_FORMATS = ['md', 'mdx', 'json', 'yaml'];
|
|
29
|
+
/**
|
|
30
|
+
* Migration precondition failure — thrown so the CLI exits non-zero.
|
|
31
|
+
* @internal Exported for tests.
|
|
32
|
+
*/
|
|
30
33
|
export class MigrateError extends Error {
|
|
31
34
|
constructor(message) {
|
|
32
35
|
super(message);
|
|
@@ -34,13 +37,13 @@ export class MigrateError extends Error {
|
|
|
34
37
|
}
|
|
35
38
|
}
|
|
36
39
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
40
|
+
* Normalizes a file/directory base name into a slug parseSlug accepts
|
|
41
|
+
* (/^[a-z0-9][a-z0-9-]*$/) — underscores are NOT allowed: the public read path
|
|
42
|
+
* rejects them, so a migrated page carrying one is unreachable and fails the
|
|
43
|
+
* production build (static/index.ts's assertRoutableSlugs). Migration writes
|
|
44
|
+
* files directly, bypassing the write API's [SLUG] create guard, so this
|
|
45
|
+
* normalization is the only thing that keeps the migrated tree buildable.
|
|
46
|
+
* @internal Exported for tests.
|
|
44
47
|
*/
|
|
45
48
|
export function slugifyName(name) {
|
|
46
49
|
const slug = name
|
|
@@ -145,7 +148,6 @@ export async function migrate(options) {
|
|
|
145
148
|
if (!(await filePathExists(contentDir))) {
|
|
146
149
|
throw new MigrateError(`Content directory not found: ${contentRoot}/ (expected at ${contentDir})`);
|
|
147
150
|
}
|
|
148
|
-
// Resolve entry type / format / schema from flags, prompting for what's missing
|
|
149
151
|
let entryType = options.entryType;
|
|
150
152
|
if (!entryType) {
|
|
151
153
|
const result = await p.text({
|
|
@@ -218,27 +220,18 @@ export async function migrate(options) {
|
|
|
218
220
|
return { opCount: 0 };
|
|
219
221
|
}
|
|
220
222
|
}
|
|
221
|
-
//
|
|
222
|
-
//
|
|
223
|
-
//
|
|
224
|
-
//
|
|
225
|
-
// plain content tree into CanopyCMS conventions. In that (common) case
|
|
226
|
-
// there is no cached schema/content-index to invalidate, and bumping the
|
|
227
|
-
// markers there would be a no-op nobody reads — no consumer treats the
|
|
228
|
-
// live project root as a cached branchRoot outside build/static mode, which
|
|
229
|
-
// skips the disk cache entirely — and would risk violating the
|
|
230
|
-
// never-write-.canopy-meta-at-the-project-root invariant documented on
|
|
223
|
+
// `projectDir` (resolved by cli/project-root.ts) is usually the live source repo,
|
|
224
|
+
// not a branch clone — migrate typically runs before any branch workspace exists.
|
|
225
|
+
// The live root has no cached schema/content-index to invalidate, and touching one
|
|
226
|
+
// would risk the never-write-.canopy-meta-at-the-project-root invariant owned by
|
|
231
227
|
// BranchSchemaCache.
|
|
232
228
|
//
|
|
233
|
-
// But projectDir CAN
|
|
234
|
-
//
|
|
235
|
-
//
|
|
236
|
-
//
|
|
237
|
-
//
|
|
238
|
-
// .
|
|
239
|
-
// root never does — rather than assuming based on how migrate is "usually"
|
|
240
|
-
// invoked. Computed BEFORE applying ops so the same check gates both the
|
|
241
|
-
// surrogate schema lock below and the post-migration cache invalidation.
|
|
229
|
+
// But `projectDir` CAN be an actual branch clone if cwd is inside one (clones are
|
|
230
|
+
// full git checkouts, see GitManager.cloneRepo, with their own canopycms.config.ts).
|
|
231
|
+
// Guard on that directly: a branch clone always has .canopy-meta/branch.json, the
|
|
232
|
+
// live project root never does. Computed before applying ops so this one check
|
|
233
|
+
// gates both the surrogate schema lock below and the post-migration cache
|
|
234
|
+
// invalidation.
|
|
242
235
|
const isBranchClone = Boolean(await BranchMetadataFileManager.loadOnly(projectDir));
|
|
243
236
|
const applyOps = async () => {
|
|
244
237
|
for (const op of ops) {
|
|
@@ -276,7 +269,6 @@ export async function migrate(options) {
|
|
|
276
269
|
if (isBranchClone) {
|
|
277
270
|
await invalidateBranchContentCaches(projectDir);
|
|
278
271
|
}
|
|
279
|
-
// Sanity-check the result: all .collection.json files must parse
|
|
280
272
|
try {
|
|
281
273
|
const result = await loadCollectionMetaFiles(contentDir);
|
|
282
274
|
p.log.success(`Validated: ${result.collections.length} collection(s)${result.root ? ' + root' : ''} loaded cleanly.`);
|
|
@@ -4,19 +4,15 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Everything here is best-effort by design: `init-deploy aws` must never fail
|
|
6
6
|
* because a project has no git remote, no lockfile, or no git binary at all.
|
|
7
|
-
* Each detector falls back to
|
|
8
|
-
*
|
|
9
|
-
* output to what shipped previously.
|
|
7
|
+
* Each detector falls back to a fixed default (e.g. 'npm', 'main') it cannot
|
|
8
|
+
* verify, keeping the output deterministic instead of failing the command.
|
|
10
9
|
*/
|
|
11
10
|
export type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'yarn-berry';
|
|
12
11
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* Dockerfile layer -- so they are kept together: a `Dockerfile.cms` that
|
|
18
|
-
* installs with npm while the workflow installs with pnpm is exactly the
|
|
19
|
-
* half-fix that moves a failure rather than removing it.
|
|
12
|
+
* Package-manager-specific command and file strings the deployment templates
|
|
13
|
+
* need, kept together because they reach two different places (a GitHub
|
|
14
|
+
* Actions step and a Dockerfile layer): a `Dockerfile.cms` using npm while
|
|
15
|
+
* the workflow uses pnpm would just move the failure, not remove it.
|
|
20
16
|
*/
|
|
21
17
|
export interface PackageManagerCommands {
|
|
22
18
|
/** Lockfile that identifies this manager, for the workflow's `paths:` filter. */
|
|
@@ -34,27 +30,21 @@ export interface PackageManagerCommands {
|
|
|
34
30
|
}
|
|
35
31
|
export declare function commandsFor(manager: PackageManager): PackageManagerCommands;
|
|
36
32
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* declared intent. Otherwise the lockfile decides. With neither, we return
|
|
41
|
-
* 'npm', which is what every template hardcoded before this existed.
|
|
33
|
+
* Identifies the adopter's package manager. `packageManager` (the corepack
|
|
34
|
+
* field) wins when present — it's the declared intent; otherwise the lockfile
|
|
35
|
+
* decides; with neither, this returns 'npm'.
|
|
42
36
|
*
|
|
43
|
-
* Yarn
|
|
44
|
-
* flags and
|
|
45
|
-
*
|
|
37
|
+
* Yarn splits into classic vs Berry because the two need different install
|
|
38
|
+
* flags and Docker build contexts, and `yarn.lock`'s name alone can't tell
|
|
39
|
+
* them apart — only its first lines can.
|
|
46
40
|
*/
|
|
47
41
|
export declare function detectPackageManager(projectDir: string): Promise<PackageManager>;
|
|
48
42
|
/**
|
|
49
|
-
* The branch the deploy workflow should trigger on.
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* `branches: [add-cms]` baked into the workflow, so the deploy would go quiet
|
|
55
|
-
* the moment that branch merged. That silent-trigger failure is the exact LOW
|
|
56
|
-
* this detection exists to fix, so we do not reintroduce it in a
|
|
57
|
-
* harder-to-predict form.
|
|
43
|
+
* The branch the deploy workflow should trigger on. Only `origin/HEAD` counts —
|
|
44
|
+
* "use the currently checked-out branch" looks like a better fallback than the
|
|
45
|
+
* hardcoded `main` it replaces, but scaffolding from a setup branch would bake
|
|
46
|
+
* `branches: [add-cms]` into the workflow, so the deploy would silently go
|
|
47
|
+
* quiet the moment that branch merges.
|
|
58
48
|
*/
|
|
59
49
|
export declare function detectDefaultBranch(projectDir: string): Promise<string>;
|
|
60
50
|
export interface GitHubRepo {
|
|
@@ -67,9 +57,6 @@ export interface GitHubRepo {
|
|
|
67
57
|
* (`https://github.com/owner/repo`) forms.
|
|
68
58
|
*/
|
|
69
59
|
export declare function detectGitHubRepo(projectDir: string): Promise<GitHubRepo | null>;
|
|
70
|
-
type PackageJson = Record<string, unknown>;
|
|
71
|
-
/** Read the adopter's package.json, or null when absent/unparseable. */
|
|
72
|
-
export declare function readPackageJson(projectDir: string): Promise<PackageJson | null>;
|
|
73
60
|
/**
|
|
74
61
|
* Dependencies the generated CDK app needs at deploy time.
|
|
75
62
|
*
|
|
@@ -89,4 +76,3 @@ export declare const CDK_DEPENDENCIES: readonly ["canopycms", "canopycms-cdk", "
|
|
|
89
76
|
* manifest certainly has none of them installed.
|
|
90
77
|
*/
|
|
91
78
|
export declare function missingCdkDependencies(projectDir: string): Promise<string[]>;
|
|
92
|
-
export {};
|
|
@@ -4,9 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Everything here is best-effort by design: `init-deploy aws` must never fail
|
|
6
6
|
* because a project has no git remote, no lockfile, or no git binary at all.
|
|
7
|
-
* Each detector falls back to
|
|
8
|
-
*
|
|
9
|
-
* output to what shipped previously.
|
|
7
|
+
* Each detector falls back to a fixed default (e.g. 'npm', 'main') it cannot
|
|
8
|
+
* verify, keeping the output deterministic instead of failing the command.
|
|
10
9
|
*/
|
|
11
10
|
import fs from 'node:fs/promises';
|
|
12
11
|
import path from 'node:path';
|
|
@@ -24,14 +23,13 @@ const COMMANDS = {
|
|
|
24
23
|
pnpm: {
|
|
25
24
|
lockfile: 'pnpm-lock.yaml',
|
|
26
25
|
ciInstall: 'corepack enable && pnpm install --frozen-lockfile',
|
|
27
|
-
// pnpm-workspace.yaml holds settings the install obeys even in a single-package app
|
|
28
|
-
// 11's `allowBuilds` decisions, `overrides`, `patchedDependencies
|
|
29
|
-
// install on any dependency build script without a decision, and an app with the
|
|
30
|
-
// several (es5-ext
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
// in the context, and the same line with the literal name fails with "not found".
|
|
26
|
+
// pnpm-workspace.yaml holds settings the install obeys even in a single-package app
|
|
27
|
+
// (pnpm 11's `allowBuilds` decisions, `overrides`, `patchedDependencies`); pnpm 11 fails
|
|
28
|
+
// the install on any dependency build script without a decision, and an app with the
|
|
29
|
+
// editor has several (es5-ext, sharp). The `[l]` glob keeps the file optional: on Docker
|
|
30
|
+
// Engine 29.6.2 (BuildKit v0.31.2), `COPY package.json pnpm-workspace.yam[l] ./` builds
|
|
31
|
+
// with no pnpm-workspace.yaml in the context, while the same line with the literal name
|
|
32
|
+
// fails with "not found".
|
|
35
33
|
dockerCopy: 'COPY package.json pnpm-lock.yaml pnpm-workspace.yam[l] ./',
|
|
36
34
|
dockerInstall: 'RUN corepack enable && pnpm install --frozen-lockfile',
|
|
37
35
|
build: 'pnpm run build',
|
|
@@ -58,15 +56,13 @@ export function commandsFor(manager) {
|
|
|
58
56
|
return COMMANDS[manager];
|
|
59
57
|
}
|
|
60
58
|
/**
|
|
61
|
-
*
|
|
59
|
+
* Identifies the adopter's package manager. `packageManager` (the corepack
|
|
60
|
+
* field) wins when present — it's the declared intent; otherwise the lockfile
|
|
61
|
+
* decides; with neither, this returns 'npm'.
|
|
62
62
|
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* Yarn is split into classic vs Berry because the two need different install
|
|
68
|
-
* flags and a different Docker build context, and `yarn.lock`'s *name* cannot
|
|
69
|
-
* tell them apart -- only its first lines can.
|
|
63
|
+
* Yarn splits into classic vs Berry because the two need different install
|
|
64
|
+
* flags and Docker build contexts, and `yarn.lock`'s name alone can't tell
|
|
65
|
+
* them apart — only its first lines can.
|
|
70
66
|
*/
|
|
71
67
|
export async function detectPackageManager(projectDir) {
|
|
72
68
|
for (const dir of await workspaceSearchPath(projectDir)) {
|
|
@@ -86,20 +82,17 @@ const MAX_WORKSPACE_DEPTH = 8;
|
|
|
86
82
|
/**
|
|
87
83
|
* Directories to consult for package-manager evidence, nearest first.
|
|
88
84
|
*
|
|
89
|
-
* Normally just `projectDir`.
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* Dockerfile.cms: silently wrong, and the exact failure this detection exists
|
|
96
|
-
* to prevent.
|
|
85
|
+
* Normally just `projectDir`. In a pnpm/npm/yarn monorepo the lockfile and
|
|
86
|
+
* `packageManager` field live at the repo root, while the Next.js app —
|
|
87
|
+
* where `canopycms init` told the adopter to run `init-deploy aws` — is a
|
|
88
|
+
* subdirectory (e.g. `apps/site`) with neither. Looking only at `projectDir`
|
|
89
|
+
* there would return 'npm' for a pnpm repo and silently write `npm ci` into
|
|
90
|
+
* both the workflow and Dockerfile.cms.
|
|
97
91
|
*
|
|
98
|
-
* The walk starts only when `projectDir` has a package.json but no evidence
|
|
99
|
-
* its own
|
|
100
|
-
* holding `.git
|
|
101
|
-
*
|
|
102
|
-
* stranger's package manager.
|
|
92
|
+
* The walk starts only when `projectDir` has a package.json but no evidence
|
|
93
|
+
* of its own (the signal of a workspace member), and stops at the directory
|
|
94
|
+
* holding `.git` — otherwise a project with no lockfile anywhere would climb
|
|
95
|
+
* into unrelated directories and adopt a stranger's package manager.
|
|
103
96
|
*/
|
|
104
97
|
async function workspaceSearchPath(projectDir) {
|
|
105
98
|
const start = path.resolve(projectDir);
|
|
@@ -152,15 +145,11 @@ async function isYarnBerryLockfile(projectDir) {
|
|
|
152
145
|
}
|
|
153
146
|
}
|
|
154
147
|
/**
|
|
155
|
-
* The branch the deploy workflow should trigger on.
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
* `branches: [add-cms]` baked into the workflow, so the deploy would go quiet
|
|
161
|
-
* the moment that branch merged. That silent-trigger failure is the exact LOW
|
|
162
|
-
* this detection exists to fix, so we do not reintroduce it in a
|
|
163
|
-
* harder-to-predict form.
|
|
148
|
+
* The branch the deploy workflow should trigger on. Only `origin/HEAD` counts —
|
|
149
|
+
* "use the currently checked-out branch" looks like a better fallback than the
|
|
150
|
+
* hardcoded `main` it replaces, but scaffolding from a setup branch would bake
|
|
151
|
+
* `branches: [add-cms]` into the workflow, so the deploy would silently go
|
|
152
|
+
* quiet the moment that branch merges.
|
|
164
153
|
*/
|
|
165
154
|
export async function detectDefaultBranch(projectDir) {
|
|
166
155
|
const head = await gitRaw(projectDir, ['symbolic-ref', '--short', 'refs/remotes/origin/HEAD']);
|
|
@@ -203,7 +192,7 @@ async function gitRaw(projectDir, args) {
|
|
|
203
192
|
}
|
|
204
193
|
}
|
|
205
194
|
/** Read the adopter's package.json, or null when absent/unparseable. */
|
|
206
|
-
|
|
195
|
+
async function readPackageJson(projectDir) {
|
|
207
196
|
try {
|
|
208
197
|
const raw = await fs.readFile(path.join(projectDir, 'package.json'), 'utf-8');
|
|
209
198
|
const parsed = JSON.parse(raw);
|