canopycms 0.0.0 → 0.0.2
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/dist/auth/plugin.d.ts +8 -0
- package/dist/auth/plugin.d.ts.map +1 -1
- package/dist/build-mode.d.ts +15 -5
- package/dist/build-mode.d.ts.map +1 -1
- package/dist/build-mode.js +18 -8
- package/dist/build-mode.js.map +1 -1
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +37 -36
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/template-files/ai-config.ts.template +21 -0
- package/dist/cli/template-files/ai-route.ts.template +10 -0
- package/dist/cli/template-files/canopy.ts.template +24 -0
- package/dist/cli/templates.d.ts +5 -1
- package/dist/cli/templates.d.ts.map +1 -1
- package/dist/cli/templates.js +9 -2
- package/dist/cli/templates.js.map +1 -1
- package/dist/config/schemas/config.d.ts +4 -0
- package/dist/config/schemas/config.d.ts.map +1 -1
- package/dist/config/schemas/config.js +2 -0
- package/dist/config/schemas/config.js.map +1 -1
- package/dist/config/types.d.ts +5 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/content-reader.js +2 -2
- package/dist/content-reader.js.map +1 -1
- package/dist/context.js +5 -5
- package/dist/context.js.map +1 -1
- package/dist/operating-mode/client-unsafe-strategy.d.ts.map +1 -1
- package/dist/operating-mode/client-unsafe-strategy.js +15 -18
- package/dist/operating-mode/client-unsafe-strategy.js.map +1 -1
- package/dist/operating-mode/types.d.ts +8 -0
- package/dist/operating-mode/types.d.ts.map +1 -1
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -1
- package/package.json +5 -4
- package/src/cli/init.ts +43 -38
- package/dist/__integration__/fixtures/content-seeds.d.ts +0 -43
- package/dist/__integration__/fixtures/content-seeds.d.ts.map +0 -1
- package/dist/__integration__/fixtures/content-seeds.js +0 -99
- package/dist/__integration__/fixtures/content-seeds.js.map +0 -1
- package/dist/__integration__/fixtures/schemas.d.ts +0 -12
- package/dist/__integration__/fixtures/schemas.d.ts.map +0 -1
- package/dist/__integration__/fixtures/schemas.js +0 -65
- package/dist/__integration__/fixtures/schemas.js.map +0 -1
- package/dist/__integration__/test-utils/api-client.d.ts +0 -123
- package/dist/__integration__/test-utils/api-client.d.ts.map +0 -1
- package/dist/__integration__/test-utils/api-client.js +0 -118
- package/dist/__integration__/test-utils/api-client.js.map +0 -1
- package/dist/__integration__/test-utils/multi-user.d.ts +0 -25
- package/dist/__integration__/test-utils/multi-user.d.ts.map +0 -1
- package/dist/__integration__/test-utils/multi-user.js +0 -105
- package/dist/__integration__/test-utils/multi-user.js.map +0 -1
- package/dist/__integration__/test-utils/test-workspace.d.ts +0 -25
- package/dist/__integration__/test-utils/test-workspace.d.ts.map +0 -1
- package/dist/__integration__/test-utils/test-workspace.js +0 -102
- package/dist/__integration__/test-utils/test-workspace.js.map +0 -1
- package/dist/editor/BranchManager.stories.d.ts +0 -8
- package/dist/editor/BranchManager.stories.d.ts.map +0 -1
- package/dist/editor/BranchManager.stories.js +0 -74
- package/dist/editor/BranchManager.stories.js.map +0 -1
- package/dist/editor/CanopyEditor.stories.d.ts +0 -7
- package/dist/editor/CanopyEditor.stories.d.ts.map +0 -1
- package/dist/editor/CanopyEditor.stories.js +0 -99
- package/dist/editor/CanopyEditor.stories.js.map +0 -1
- package/dist/editor/CommentsPanel.stories.d.ts +0 -10
- package/dist/editor/CommentsPanel.stories.d.ts.map +0 -1
- package/dist/editor/CommentsPanel.stories.js +0 -175
- package/dist/editor/CommentsPanel.stories.js.map +0 -1
- package/dist/editor/Editor.stories.d.ts +0 -7
- package/dist/editor/Editor.stories.d.ts.map +0 -1
- package/dist/editor/Editor.stories.js +0 -95
- package/dist/editor/Editor.stories.js.map +0 -1
- package/dist/editor/EditorPanes.stories.d.ts +0 -7
- package/dist/editor/EditorPanes.stories.d.ts.map +0 -1
- package/dist/editor/EditorPanes.stories.js +0 -116
- package/dist/editor/EditorPanes.stories.js.map +0 -1
- package/dist/editor/EntryNavigator.stories.d.ts +0 -8
- package/dist/editor/EntryNavigator.stories.d.ts.map +0 -1
- package/dist/editor/EntryNavigator.stories.js +0 -42
- package/dist/editor/EntryNavigator.stories.js.map +0 -1
- package/dist/editor/FormRenderer.stories.d.ts +0 -7
- package/dist/editor/FormRenderer.stories.d.ts.map +0 -1
- package/dist/editor/FormRenderer.stories.js +0 -115
- package/dist/editor/FormRenderer.stories.js.map +0 -1
- package/dist/editor/GroupManager.stories.d.ts +0 -19
- package/dist/editor/GroupManager.stories.d.ts.map +0 -1
- package/dist/editor/GroupManager.stories.js +0 -265
- package/dist/editor/GroupManager.stories.js.map +0 -1
- package/dist/editor/PermissionManager.stories.d.ts +0 -20
- package/dist/editor/PermissionManager.stories.d.ts.map +0 -1
- package/dist/editor/PermissionManager.stories.js +0 -506
- package/dist/editor/PermissionManager.stories.js.map +0 -1
- package/dist/editor/comments/FieldWrapper.stories.d.ts +0 -10
- package/dist/editor/comments/FieldWrapper.stories.d.ts.map +0 -1
- package/dist/editor/comments/FieldWrapper.stories.js +0 -173
- package/dist/editor/comments/FieldWrapper.stories.js.map +0 -1
- package/dist/editor/fields/BlockField.stories.d.ts +0 -7
- package/dist/editor/fields/BlockField.stories.d.ts.map +0 -1
- package/dist/editor/fields/BlockField.stories.js +0 -50
- package/dist/editor/fields/BlockField.stories.js.map +0 -1
- package/dist/editor/fields/fields.stories.d.ts +0 -8
- package/dist/editor/fields/fields.stories.d.ts.map +0 -1
- package/dist/editor/fields/fields.stories.js +0 -34
- package/dist/editor/fields/fields.stories.js.map +0 -1
- package/dist/test-utils/api-test-helpers.d.ts +0 -238
- package/dist/test-utils/api-test-helpers.d.ts.map +0 -1
- package/dist/test-utils/api-test-helpers.js +0 -347
- package/dist/test-utils/api-test-helpers.js.map +0 -1
- package/dist/test-utils/console-spy.d.ts +0 -56
- package/dist/test-utils/console-spy.d.ts.map +0 -1
- package/dist/test-utils/console-spy.js +0 -81
- package/dist/test-utils/console-spy.js.map +0 -1
- package/dist/test-utils/git-helpers.d.ts +0 -21
- package/dist/test-utils/git-helpers.d.ts.map +0 -1
- package/dist/test-utils/git-helpers.js +0 -23
- package/dist/test-utils/git-helpers.js.map +0 -1
- package/dist/test-utils/index.d.ts +0 -5
- package/dist/test-utils/index.d.ts.map +0 -1
- package/dist/test-utils/index.js +0 -4
- package/dist/test-utils/index.js.map +0 -1
- package/src/__integration__/errors/invalid-content.test.ts +0 -238
- package/src/__integration__/errors/permission-denied.test.ts +0 -220
- package/src/__integration__/fixtures/content-seeds.ts +0 -105
- package/src/__integration__/fixtures/schemas.ts +0 -67
- package/src/__integration__/initialization/prod-sim-init.test.ts +0 -139
- package/src/__integration__/permissions/path-permissions.test.ts +0 -314
- package/src/__integration__/permissions/role-permissions.test.ts +0 -354
- package/src/__integration__/permissions/settings-branch-isolation.test.ts +0 -317
- package/src/__integration__/settings/groups-api.test.ts +0 -403
- package/src/__integration__/test-utils/api-client.ts +0 -167
- package/src/__integration__/test-utils/multi-user.ts +0 -129
- package/src/__integration__/test-utils/test-workspace.ts +0 -130
- package/src/__integration__/user/user-context.test.ts +0 -174
- package/src/__integration__/validation/input-validation.test.ts +0 -166
- package/src/__integration__/workflows/api-editing-workflow.test.ts +0 -244
- package/src/__integration__/workflows/conflict-resolution.test.ts +0 -259
- package/src/__integration__/workflows/editing-workflow.test.ts +0 -205
- package/src/__integration__/workflows/review-workflow.test.ts +0 -260
- package/src/ai/__tests__/build.integration.test.ts +0 -224
- package/src/ai/__tests__/generate.integration.test.ts +0 -495
- package/src/ai/__tests__/handler.integration.test.ts +0 -212
- package/src/ai/__tests__/json-to-markdown.test.ts +0 -553
- package/src/ai/generate.ts +0 -410
- package/src/ai/handler.ts +0 -123
- package/src/ai/index.ts +0 -26
- package/src/ai/json-to-markdown.ts +0 -424
- package/src/ai/resolve-branch.ts +0 -34
- package/src/ai/types.ts +0 -160
- package/src/api/AGENTS.md +0 -81
- package/src/api/__test__/mock-client.ts +0 -404
- package/src/api/assets.test.ts +0 -140
- package/src/api/assets.ts +0 -154
- package/src/api/branch-merge.test.ts +0 -163
- package/src/api/branch-merge.ts +0 -113
- package/src/api/branch-review.test.ts +0 -297
- package/src/api/branch-review.ts +0 -136
- package/src/api/branch-status.test.ts +0 -85
- package/src/api/branch-status.ts +0 -153
- package/src/api/branch-withdraw.test.ts +0 -146
- package/src/api/branch-withdraw.ts +0 -81
- package/src/api/branch-workflow.integration.test.ts +0 -578
- package/src/api/branch.test.ts +0 -620
- package/src/api/branch.ts +0 -492
- package/src/api/client.test.ts +0 -349
- package/src/api/client.ts +0 -506
- package/src/api/comments.test.ts +0 -285
- package/src/api/comments.ts +0 -210
- package/src/api/content.test.ts +0 -345
- package/src/api/content.ts +0 -454
- package/src/api/entries.test.ts +0 -1339
- package/src/api/entries.ts +0 -650
- package/src/api/github-sync.ts +0 -144
- package/src/api/groups.test.ts +0 -1013
- package/src/api/groups.ts +0 -375
- package/src/api/guards.test.ts +0 -533
- package/src/api/guards.ts +0 -271
- package/src/api/index.ts +0 -87
- package/src/api/permissions.test.ts +0 -766
- package/src/api/permissions.ts +0 -334
- package/src/api/reference-options.ts +0 -118
- package/src/api/resolve-references.ts +0 -107
- package/src/api/route-builder.ts +0 -289
- package/src/api/schema.test.ts +0 -840
- package/src/api/schema.ts +0 -936
- package/src/api/security.test.ts +0 -233
- package/src/api/settings-helpers.ts +0 -84
- package/src/api/types.ts +0 -40
- package/src/api/user.test.ts +0 -127
- package/src/api/user.ts +0 -42
- package/src/api/validators.test.ts +0 -275
- package/src/api/validators.ts +0 -176
- package/src/asset-store.test.ts +0 -37
- package/src/asset-store.ts +0 -110
- package/src/auth/cache.ts +0 -7
- package/src/auth/caching-auth-plugin.test.ts +0 -154
- package/src/auth/caching-auth-plugin.ts +0 -109
- package/src/auth/context-helpers.ts +0 -75
- package/src/auth/file-based-auth-cache.test.ts +0 -257
- package/src/auth/file-based-auth-cache.ts +0 -279
- package/src/auth/index.ts +0 -12
- package/src/auth/plugin.ts +0 -51
- package/src/auth/types.ts +0 -38
- package/src/authorization/__tests__/branch.test.ts +0 -260
- package/src/authorization/__tests__/content.test.ts +0 -142
- package/src/authorization/__tests__/path.test.ts +0 -133
- package/src/authorization/__tests__/permissions-loader.test.ts +0 -200
- package/src/authorization/branch.ts +0 -94
- package/src/authorization/content.ts +0 -93
- package/src/authorization/groups/index.ts +0 -11
- package/src/authorization/groups/loader.ts +0 -127
- package/src/authorization/groups/schema.ts +0 -48
- package/src/authorization/helpers.ts +0 -48
- package/src/authorization/index.ts +0 -84
- package/src/authorization/path.ts +0 -112
- package/src/authorization/permissions/index.ts +0 -11
- package/src/authorization/permissions/loader.ts +0 -116
- package/src/authorization/permissions/schema.ts +0 -66
- package/src/authorization/test-utils.ts +0 -15
- package/src/authorization/types.ts +0 -66
- package/src/authorization/validation.test.ts +0 -100
- package/src/authorization/validation.ts +0 -62
- package/src/branch-metadata.test.ts +0 -168
- package/src/branch-metadata.ts +0 -166
- package/src/branch-registry.test.ts +0 -248
- package/src/branch-registry.ts +0 -152
- package/src/branch-schema-cache.test.ts +0 -275
- package/src/branch-schema-cache.ts +0 -189
- package/src/branch-workspace.test.ts +0 -183
- package/src/branch-workspace.ts +0 -124
- package/src/build/generate-ai-content.ts +0 -78
- package/src/build/index.ts +0 -8
- package/src/build-mode.ts +0 -27
- package/src/cli/generate-ai-content.ts +0 -100
- package/src/cli/init.test.ts +0 -240
- package/src/cli/templates/canopy.ts.template +0 -55
- package/src/cli/templates.ts +0 -47
- package/src/client.ts +0 -12
- package/src/comment-store.test.ts +0 -442
- package/src/comment-store.ts +0 -301
- package/src/config/__tests__/config.test.ts +0 -513
- package/src/config/flatten.ts +0 -174
- package/src/config/helpers.ts +0 -167
- package/src/config/index.ts +0 -86
- package/src/config/schemas/collection.ts +0 -67
- package/src/config/schemas/config.ts +0 -77
- package/src/config/schemas/field.ts +0 -108
- package/src/config/schemas/media.ts +0 -27
- package/src/config/schemas/permissions.ts +0 -21
- package/src/config/types.ts +0 -321
- package/src/config/validation.ts +0 -70
- package/src/config-test.ts +0 -65
- package/src/config.ts +0 -11
- package/src/content-id-index.test.ts +0 -512
- package/src/content-id-index.ts +0 -479
- package/src/content-reader.test.ts +0 -478
- package/src/content-reader.ts +0 -214
- package/src/content-store.test.ts +0 -1126
- package/src/content-store.ts +0 -793
- package/src/context.ts +0 -111
- package/src/editor/BranchManager.stories.tsx +0 -80
- package/src/editor/BranchManager.test.tsx +0 -324
- package/src/editor/BranchManager.tsx +0 -461
- package/src/editor/CanopyEditor.stories.tsx +0 -128
- package/src/editor/CanopyEditor.test.tsx +0 -81
- package/src/editor/CanopyEditor.tsx +0 -73
- package/src/editor/CanopyEditorPage.test.tsx +0 -59
- package/src/editor/CanopyEditorPage.tsx +0 -25
- package/src/editor/CommentsPanel.stories.tsx +0 -184
- package/src/editor/CommentsPanel.tsx +0 -338
- package/src/editor/Editor.integration.test.tsx +0 -227
- package/src/editor/Editor.stories.tsx +0 -119
- package/src/editor/Editor.tsx +0 -1221
- package/src/editor/EditorPanes.stories.tsx +0 -256
- package/src/editor/EditorPanes.test.tsx +0 -77
- package/src/editor/EditorPanes.tsx +0 -180
- package/src/editor/EntryNavigator.stories.tsx +0 -65
- package/src/editor/EntryNavigator.test.tsx +0 -598
- package/src/editor/EntryNavigator.tsx +0 -665
- package/src/editor/FormRenderer.stories.tsx +0 -212
- package/src/editor/FormRenderer.test.tsx +0 -194
- package/src/editor/FormRenderer.tsx +0 -432
- package/src/editor/GroupManager.stories.tsx +0 -301
- package/src/editor/GroupManager.test.tsx +0 -682
- package/src/editor/GroupManager.tsx +0 -9
- package/src/editor/PermissionManager.stories.tsx +0 -539
- package/src/editor/PermissionManager.test.tsx +0 -864
- package/src/editor/PermissionManager.tsx +0 -12
- package/src/editor/canopy-path.test.ts +0 -23
- package/src/editor/canopy-path.ts +0 -52
- package/src/editor/client-reference-resolver.ts +0 -118
- package/src/editor/comments/BranchComments.tsx +0 -93
- package/src/editor/comments/EntryComments.tsx +0 -94
- package/src/editor/comments/FieldWrapper.stories.tsx +0 -210
- package/src/editor/comments/FieldWrapper.tsx +0 -129
- package/src/editor/comments/InlineCommentThread.test.tsx +0 -384
- package/src/editor/comments/InlineCommentThread.tsx +0 -246
- package/src/editor/comments/ThreadCarousel.test.tsx +0 -393
- package/src/editor/comments/ThreadCarousel.tsx +0 -525
- package/src/editor/components/ConfirmDeleteModal.tsx +0 -49
- package/src/editor/components/EditorContext.tsx +0 -49
- package/src/editor/components/EditorFooter.tsx +0 -47
- package/src/editor/components/EditorHeader.tsx +0 -492
- package/src/editor/components/EditorSidebar.tsx +0 -193
- package/src/editor/components/EntryCreateModal.tsx +0 -193
- package/src/editor/components/RenameEntryModal.tsx +0 -152
- package/src/editor/components/UserBadge.test.tsx +0 -274
- package/src/editor/components/UserBadge.tsx +0 -240
- package/src/editor/components/index.ts +0 -6
- package/src/editor/context/ApiClientContext.tsx +0 -56
- package/src/editor/context/EditorStateContext.tsx +0 -221
- package/src/editor/context/index.ts +0 -40
- package/src/editor/editor-config.test.ts +0 -385
- package/src/editor/editor-config.ts +0 -94
- package/src/editor/editor-utils.test.ts +0 -772
- package/src/editor/editor-utils.ts +0 -303
- package/src/editor/env.ts +0 -4
- package/src/editor/fields/BlockField.stories.tsx +0 -79
- package/src/editor/fields/BlockField.tsx +0 -267
- package/src/editor/fields/CodeField.tsx +0 -41
- package/src/editor/fields/MarkdownField.tsx +0 -205
- package/src/editor/fields/ObjectField.tsx +0 -71
- package/src/editor/fields/ReferenceField.tsx +0 -138
- package/src/editor/fields/SelectField.tsx +0 -76
- package/src/editor/fields/TextField.tsx +0 -35
- package/src/editor/fields/ToggleField.tsx +0 -37
- package/src/editor/fields/fields.stories.tsx +0 -40
- package/src/editor/group-manager/ExternalGroupsTab.tsx +0 -114
- package/src/editor/group-manager/GroupCard.tsx +0 -102
- package/src/editor/group-manager/GroupForm.tsx +0 -66
- package/src/editor/group-manager/InternalGroupsTab.tsx +0 -147
- package/src/editor/group-manager/MemberList.tsx +0 -184
- package/src/editor/group-manager/hooks/useExternalGroupSearch.ts +0 -63
- package/src/editor/group-manager/hooks/useGroupState.ts +0 -134
- package/src/editor/group-manager/hooks/useUserSearch.ts +0 -84
- package/src/editor/group-manager/index.tsx +0 -210
- package/src/editor/group-manager/types.ts +0 -28
- package/src/editor/hooks/README.md +0 -26
- package/src/editor/hooks/__test__/test-utils.tsx +0 -183
- package/src/editor/hooks/index.ts +0 -23
- package/src/editor/hooks/useBranchActions.test.tsx +0 -267
- package/src/editor/hooks/useBranchActions.tsx +0 -121
- package/src/editor/hooks/useBranchManager.test.tsx +0 -391
- package/src/editor/hooks/useBranchManager.tsx +0 -326
- package/src/editor/hooks/useCommentSystem.test.ts +0 -615
- package/src/editor/hooks/useCommentSystem.ts +0 -347
- package/src/editor/hooks/useDraftManager.test.ts +0 -375
- package/src/editor/hooks/useDraftManager.ts +0 -259
- package/src/editor/hooks/useEditorLayout.test.ts +0 -147
- package/src/editor/hooks/useEditorLayout.ts +0 -67
- package/src/editor/hooks/useEntryManager.test.ts +0 -588
- package/src/editor/hooks/useEntryManager.ts +0 -387
- package/src/editor/hooks/useGroupManager.test.ts +0 -277
- package/src/editor/hooks/useGroupManager.ts +0 -139
- package/src/editor/hooks/usePermissionManager.test.ts +0 -211
- package/src/editor/hooks/usePermissionManager.ts +0 -113
- package/src/editor/hooks/useReferenceResolution.ts +0 -248
- package/src/editor/hooks/useSchemaManager.test.ts +0 -370
- package/src/editor/hooks/useSchemaManager.ts +0 -310
- package/src/editor/hooks/useUserContext.tsx +0 -57
- package/src/editor/hooks/useUserMetadata.test.ts +0 -191
- package/src/editor/hooks/useUserMetadata.ts +0 -71
- package/src/editor/permission-manager/GroupSelector.tsx +0 -73
- package/src/editor/permission-manager/PermissionEditor.tsx +0 -321
- package/src/editor/permission-manager/PermissionLevelBadge.tsx +0 -53
- package/src/editor/permission-manager/PermissionTree.tsx +0 -237
- package/src/editor/permission-manager/UserSelector.tsx +0 -95
- package/src/editor/permission-manager/constants.tsx +0 -18
- package/src/editor/permission-manager/hooks/useGroupsAndUsers.ts +0 -153
- package/src/editor/permission-manager/hooks/usePermissionTree.ts +0 -200
- package/src/editor/permission-manager/index.tsx +0 -294
- package/src/editor/permission-manager/types.ts +0 -58
- package/src/editor/permission-manager/utils.ts +0 -179
- package/src/editor/preview-bridge.test.tsx +0 -50
- package/src/editor/preview-bridge.tsx +0 -294
- package/src/editor/schema-editor/CollectionEditor.test.tsx +0 -238
- package/src/editor/schema-editor/CollectionEditor.tsx +0 -520
- package/src/editor/schema-editor/EntryTypeEditor.test.tsx +0 -215
- package/src/editor/schema-editor/EntryTypeEditor.tsx +0 -367
- package/src/editor/schema-editor/index.ts +0 -19
- package/src/editor/setup-test-dom.ts +0 -10
- package/src/editor/test-setup.ts +0 -33
- package/src/editor/theme.tsx +0 -119
- package/src/editor/utils/env.ts +0 -39
- package/src/entry-schema-registry.test.ts +0 -281
- package/src/entry-schema-registry.ts +0 -121
- package/src/entry-schema.ts +0 -84
- package/src/git-manager.test.ts +0 -552
- package/src/git-manager.ts +0 -667
- package/src/github-service.test.ts +0 -312
- package/src/github-service.ts +0 -295
- package/src/http/handler.test.ts +0 -275
- package/src/http/handler.ts +0 -280
- package/src/http/index.ts +0 -11
- package/src/http/router.ts +0 -164
- package/src/http/types.ts +0 -44
- package/src/id.test.ts +0 -48
- package/src/id.ts +0 -22
- package/src/index.ts +0 -26
- package/src/operating-mode/__tests__/strategies.test.ts +0 -511
- package/src/operating-mode/client-safe-strategy.ts +0 -184
- package/src/operating-mode/client-unsafe-strategy.ts +0 -303
- package/src/operating-mode/client.ts +0 -13
- package/src/operating-mode/index.ts +0 -34
- package/src/operating-mode/types.ts +0 -186
- package/src/paths/__tests__/branch.test.ts +0 -53
- package/src/paths/__tests__/normalize.test.ts +0 -141
- package/src/paths/__tests__/resolve.test.ts +0 -207
- package/src/paths/__tests__/validation.test.ts +0 -61
- package/src/paths/branch.ts +0 -115
- package/src/paths/index.ts +0 -73
- package/src/paths/normalize-server.ts +0 -40
- package/src/paths/normalize.ts +0 -107
- package/src/paths/resolve.ts +0 -61
- package/src/paths/test-utils.ts +0 -37
- package/src/paths/types.ts +0 -68
- package/src/paths/validation.test.ts +0 -480
- package/src/paths/validation.ts +0 -391
- package/src/reference-resolver.test.ts +0 -107
- package/src/reference-resolver.ts +0 -157
- package/src/schema/index.ts +0 -29
- package/src/schema/meta-loader.ts +0 -366
- package/src/schema/resolver.ts +0 -83
- package/src/schema/schema-store-types.ts +0 -56
- package/src/schema/schema-store.test.ts +0 -816
- package/src/schema/schema-store.ts +0 -795
- package/src/schema/types.ts +0 -33
- package/src/schema-meta-loader.test.ts +0 -447
- package/src/server.ts +0 -15
- package/src/services.test.ts +0 -559
- package/src/services.ts +0 -373
- package/src/settings-branch-utils.ts +0 -53
- package/src/settings-workspace.ts +0 -156
- package/src/task-queue/README.md +0 -144
- package/src/task-queue/index.ts +0 -14
- package/src/task-queue/task-queue.test.ts +0 -524
- package/src/task-queue/task-queue.ts +0 -514
- package/src/task-queue/types.ts +0 -41
- package/src/test-utils/api-test-helpers.ts +0 -445
- package/src/test-utils/console-spy.test.ts +0 -14
- package/src/test-utils/console-spy.ts +0 -125
- package/src/test-utils/git-helpers.ts +0 -31
- package/src/test-utils/index.ts +0 -4
- package/src/types.ts +0 -54
- package/src/user.ts +0 -118
- package/src/utils/debug.test.ts +0 -114
- package/src/utils/debug.ts +0 -127
- package/src/utils/error.test.ts +0 -92
- package/src/utils/error.ts +0 -83
- package/src/utils/format.ts +0 -12
- package/src/validation/__tests__/field-traversal.test.ts +0 -263
- package/src/validation/deletion-checker.ts +0 -234
- package/src/validation/field-traversal.ts +0 -146
- package/src/validation/reference-validator.ts +0 -168
- package/src/worker/cms-worker-rebase.test.ts +0 -473
- package/src/worker/cms-worker.ts +0 -777
- package/src/worker/integration.test.ts +0 -289
- package/src/worker/task-queue-config.ts +0 -25
- package/src/worker/task-queue.test.ts +0 -452
- package/src/worker/task-queue.ts +0 -58
- /package/{src/cli/templates → dist/cli/template-files}/Dockerfile.cms.template +0 -0
- /package/{src/cli/templates → dist/cli/template-files}/canopycms.config.ts.template +0 -0
- /package/{src/cli/templates → dist/cli/template-files}/deploy-cms.yml.template +0 -0
- /package/{src/cli/templates → dist/cli/template-files}/edit-page.tsx.template +0 -0
- /package/{src/cli/templates → dist/cli/template-files}/route.ts.template +0 -0
- /package/{src/cli/templates → dist/cli/template-files}/schemas.ts.template +0 -0
package/src/config/types.ts
DELETED
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Type definitions for CanopyCMS configuration.
|
|
3
|
-
* These are pure TypeScript types - Zod schemas are in ./schemas/
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { CanopyGroupId, CanopyUserId } from '../types'
|
|
7
|
-
import type { OperatingMode } from '../operating-mode'
|
|
8
|
-
import type { AuthPlugin } from '../auth/plugin'
|
|
9
|
-
import type { LogicalPath, ContentId } from '../paths/types'
|
|
10
|
-
import type { PermissionPath } from '../authorization/types'
|
|
11
|
-
|
|
12
|
-
// Field types
|
|
13
|
-
export const primitiveFieldTypes = [
|
|
14
|
-
'string',
|
|
15
|
-
'number',
|
|
16
|
-
'boolean',
|
|
17
|
-
'datetime',
|
|
18
|
-
'rich-text',
|
|
19
|
-
'markdown',
|
|
20
|
-
'mdx',
|
|
21
|
-
'image',
|
|
22
|
-
'code',
|
|
23
|
-
] as const
|
|
24
|
-
|
|
25
|
-
export const fieldTypes = [
|
|
26
|
-
...primitiveFieldTypes,
|
|
27
|
-
'select',
|
|
28
|
-
'reference',
|
|
29
|
-
'object',
|
|
30
|
-
'block',
|
|
31
|
-
] as const
|
|
32
|
-
|
|
33
|
-
export type PrimitiveFieldType = (typeof primitiveFieldTypes)[number]
|
|
34
|
-
export type FieldType = (typeof fieldTypes)[number]
|
|
35
|
-
export type ContentFormat = 'md' | 'mdx' | 'json'
|
|
36
|
-
export type MediaAdapterKind = 'local' | 's3' | 'lfs' | (string & {})
|
|
37
|
-
|
|
38
|
-
// Permission types
|
|
39
|
-
export type PermissionLevel = 'read' | 'edit' | 'review'
|
|
40
|
-
|
|
41
|
-
export interface PermissionTarget {
|
|
42
|
-
allowedUsers?: CanopyUserId[]
|
|
43
|
-
allowedGroups?: CanopyGroupId[]
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export interface PathPermission {
|
|
47
|
-
path: PermissionPath
|
|
48
|
-
read?: PermissionTarget
|
|
49
|
-
edit?: PermissionTarget
|
|
50
|
-
review?: PermissionTarget
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Select/Reference options
|
|
54
|
-
export type SelectOption = string | { label: string; value: string }
|
|
55
|
-
export type ReferenceOption = string | { label: string; value: string }
|
|
56
|
-
|
|
57
|
-
// Field configuration types
|
|
58
|
-
export interface BaseFieldConfig {
|
|
59
|
-
name: string
|
|
60
|
-
label?: string
|
|
61
|
-
description?: string
|
|
62
|
-
required?: boolean
|
|
63
|
-
list?: boolean
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export interface PrimitiveFieldConfig extends BaseFieldConfig {
|
|
67
|
-
type: PrimitiveFieldType
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export interface SelectFieldConfig extends BaseFieldConfig {
|
|
71
|
-
type: 'select'
|
|
72
|
-
options: SelectOption[]
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export interface ReferenceFieldConfig extends BaseFieldConfig {
|
|
76
|
-
type: 'reference'
|
|
77
|
-
collections: string[]
|
|
78
|
-
displayField?: string
|
|
79
|
-
options?: ReferenceOption[]
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export interface BlockConfig {
|
|
83
|
-
name: string
|
|
84
|
-
label?: string
|
|
85
|
-
description?: string
|
|
86
|
-
fields: FieldConfig[]
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export interface BlockFieldConfig extends BaseFieldConfig {
|
|
90
|
-
type: 'block'
|
|
91
|
-
templates: BlockConfig[]
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export interface ObjectFieldConfig extends BaseFieldConfig {
|
|
95
|
-
type: 'object'
|
|
96
|
-
fields: FieldConfig[]
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Custom field config for user-defined field types.
|
|
101
|
-
* The type must not conflict with built-in types.
|
|
102
|
-
* Note: We use a branded type approach to avoid index signature issues.
|
|
103
|
-
*/
|
|
104
|
-
export type CustomFieldConfig = BaseFieldConfig & {
|
|
105
|
-
type: Exclude<string, FieldType>
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export type FieldConfig =
|
|
109
|
-
| PrimitiveFieldConfig
|
|
110
|
-
| SelectFieldConfig
|
|
111
|
-
| ReferenceFieldConfig
|
|
112
|
-
| BlockFieldConfig
|
|
113
|
-
| ObjectFieldConfig
|
|
114
|
-
| CustomFieldConfig
|
|
115
|
-
|
|
116
|
-
// Media configuration
|
|
117
|
-
export type MediaConfig =
|
|
118
|
-
| { adapter: 'local'; publicBaseUrl?: string }
|
|
119
|
-
| { adapter: 's3'; bucket: string; region: string; publicBaseUrl?: string }
|
|
120
|
-
| { adapter: 'lfs'; publicBaseUrl?: string }
|
|
121
|
-
| { adapter: string; publicBaseUrl?: string }
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Field definitions for one entry type — the array of FieldConfig that
|
|
125
|
-
* describes which fields an entry of this type contains.
|
|
126
|
-
*
|
|
127
|
-
* Contrast with BranchSchema, which is the full collection tree for a branch.
|
|
128
|
-
*/
|
|
129
|
-
export type EntrySchema = readonly FieldConfig[]
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Entry type config: defines a type of content within a collection.
|
|
133
|
-
* Each type has its own entry schema (fields) and can have cardinality constraints.
|
|
134
|
-
*
|
|
135
|
-
* Examples:
|
|
136
|
-
* - { name: 'post', format: 'mdx', schema: postSchema } - unlimited posts
|
|
137
|
-
* - { name: 'settings', format: 'json', schema: settingsSchema, maxItems: 1 } - restricted to one instance
|
|
138
|
-
*/
|
|
139
|
-
export type EntryTypeConfig = {
|
|
140
|
-
readonly name: string
|
|
141
|
-
readonly format: ContentFormat
|
|
142
|
-
readonly schema: EntrySchema
|
|
143
|
-
/** Entry schema registry key (e.g., "postSchema"). Set during schema resolution. */
|
|
144
|
-
readonly schemaRef?: string
|
|
145
|
-
readonly label?: string
|
|
146
|
-
readonly description?: string
|
|
147
|
-
readonly default?: boolean // Is this the default type for "Add" button?
|
|
148
|
-
readonly maxItems?: number // Limit instances (e.g., 1 = only one entry allowed)
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Collection: contains nested collections and typed entries.
|
|
153
|
-
* The entries array defines the types of content allowed in this collection.
|
|
154
|
-
*/
|
|
155
|
-
export type CollectionConfig = {
|
|
156
|
-
readonly name: string
|
|
157
|
-
readonly path: string
|
|
158
|
-
readonly label?: string
|
|
159
|
-
readonly description?: string
|
|
160
|
-
/** 12-char content ID from the collection's directory name. Optional: absent in static configs. */
|
|
161
|
-
readonly contentId?: ContentId
|
|
162
|
-
/** Array of entry types allowed in this collection */
|
|
163
|
-
readonly entries?: readonly EntryTypeConfig[]
|
|
164
|
-
readonly collections?: readonly CollectionConfig[]
|
|
165
|
-
/** Ordering of items by embedded ID. Items not in order appear at end alphabetically. */
|
|
166
|
-
readonly order?: readonly string[]
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Root schema configuration for CanopyCMS.
|
|
171
|
-
* Contains top-level collections and entries (typed content at the root level).
|
|
172
|
-
*/
|
|
173
|
-
export type RootCollectionConfig = {
|
|
174
|
-
/** Optional label for the root collection (e.g., "All Files", "Content") */
|
|
175
|
-
readonly label?: string
|
|
176
|
-
/** Entry types at the root level */
|
|
177
|
-
readonly entries?: readonly EntryTypeConfig[]
|
|
178
|
-
readonly collections?: readonly CollectionConfig[]
|
|
179
|
-
/** Ordering of root items by embedded ID. Items not in order appear at end alphabetically. */
|
|
180
|
-
readonly order?: readonly string[]
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* The full collection structure tree for one branch — the resolved schema
|
|
185
|
-
* describing all collections, entry types, and their fields.
|
|
186
|
-
*
|
|
187
|
-
* Contrast with EntrySchema, which is the field definitions for a single entry type.
|
|
188
|
-
*/
|
|
189
|
-
export type BranchSchema = RootCollectionConfig
|
|
190
|
-
|
|
191
|
-
// Editor configuration
|
|
192
|
-
export interface CanopyEditorConfig {
|
|
193
|
-
title?: string
|
|
194
|
-
subtitle?: string
|
|
195
|
-
theme?: unknown
|
|
196
|
-
previewBase?: Record<string, string>
|
|
197
|
-
onAccountClick?: () => void
|
|
198
|
-
onLogoutClick?: () => void
|
|
199
|
-
AccountComponent?: React.ComponentType
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// Default value types
|
|
203
|
-
export type DefaultBranchAccess = 'allow' | 'deny'
|
|
204
|
-
export type DefaultPathAccess = 'allow' | 'deny'
|
|
205
|
-
export type DefaultBaseBranch = string
|
|
206
|
-
export type DefaultRemoteName = string
|
|
207
|
-
export type DefaultRemoteUrl = string
|
|
208
|
-
export type GitBotAuthorName = string
|
|
209
|
-
export type GitBotAuthorEmail = string
|
|
210
|
-
export type GithubTokenEnvVar = string
|
|
211
|
-
export type CanopyOperatingMode = OperatingMode
|
|
212
|
-
export type ContentRoot = string
|
|
213
|
-
export type SourceRoot = string | undefined
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* Validated CanopyConfig - the runtime configuration object.
|
|
217
|
-
*/
|
|
218
|
-
export interface CanopyConfig {
|
|
219
|
-
media?: MediaConfig
|
|
220
|
-
defaultBranchAccess?: DefaultBranchAccess
|
|
221
|
-
defaultPathAccess?: DefaultPathAccess
|
|
222
|
-
defaultBaseBranch?: DefaultBaseBranch
|
|
223
|
-
defaultRemoteName?: DefaultRemoteName
|
|
224
|
-
defaultRemoteUrl?: DefaultRemoteUrl
|
|
225
|
-
gitBotAuthorName: GitBotAuthorName
|
|
226
|
-
gitBotAuthorEmail: GitBotAuthorEmail
|
|
227
|
-
githubTokenEnvVar?: GithubTokenEnvVar
|
|
228
|
-
mode: CanopyOperatingMode
|
|
229
|
-
settingsBranch?: string
|
|
230
|
-
autoCreateSettingsPR?: boolean
|
|
231
|
-
deploymentName?: string
|
|
232
|
-
contentRoot: ContentRoot
|
|
233
|
-
sourceRoot?: SourceRoot
|
|
234
|
-
editor?: CanopyEditorConfig
|
|
235
|
-
authPlugin?: AuthPlugin
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* Input type for config authoring (allows looser types before validation)
|
|
240
|
-
*/
|
|
241
|
-
export interface CanopyConfigInput {
|
|
242
|
-
media?: MediaConfig
|
|
243
|
-
defaultBranchAccess?: DefaultBranchAccess
|
|
244
|
-
defaultPathAccess?: DefaultPathAccess
|
|
245
|
-
defaultBaseBranch?: string
|
|
246
|
-
defaultRemoteName?: string
|
|
247
|
-
defaultRemoteUrl?: string
|
|
248
|
-
gitBotAuthorName: string
|
|
249
|
-
gitBotAuthorEmail: string
|
|
250
|
-
githubTokenEnvVar?: string
|
|
251
|
-
mode?: OperatingMode
|
|
252
|
-
settingsBranch?: string
|
|
253
|
-
autoCreateSettingsPR?: boolean
|
|
254
|
-
deploymentName?: string
|
|
255
|
-
contentRoot?: string
|
|
256
|
-
sourceRoot?: string
|
|
257
|
-
editor?: CanopyEditorConfig
|
|
258
|
-
authPlugin?: AuthPlugin
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
export type CanopyConfigFragment = Partial<CanopyConfigInput>
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* Flattened schema item for efficient lookups.
|
|
265
|
-
* Discriminated union of collection or entry type with logical path resolved.
|
|
266
|
-
* Used for O(1) schema lookups via Map<logicalPath, FlatSchemaItem>.
|
|
267
|
-
*/
|
|
268
|
-
export type FlatSchemaItem =
|
|
269
|
-
| {
|
|
270
|
-
type: 'collection'
|
|
271
|
-
logicalPath: LogicalPath
|
|
272
|
-
name: string
|
|
273
|
-
label?: string
|
|
274
|
-
description?: string
|
|
275
|
-
/** 12-char content ID from the collection's directory name. Optional: absent in static configs. */
|
|
276
|
-
contentId?: ContentId
|
|
277
|
-
parentPath?: LogicalPath
|
|
278
|
-
/** Array of entry types in this collection */
|
|
279
|
-
entries?: readonly EntryTypeConfig[]
|
|
280
|
-
collections?: readonly CollectionConfig[]
|
|
281
|
-
/** Ordering of items by embedded ID. Items not in order appear at end alphabetically. */
|
|
282
|
-
order?: readonly string[]
|
|
283
|
-
}
|
|
284
|
-
| {
|
|
285
|
-
/** An entry type within a collection */
|
|
286
|
-
type: 'entry-type'
|
|
287
|
-
logicalPath: LogicalPath
|
|
288
|
-
/** The entry type name (e.g., 'post', 'doc') */
|
|
289
|
-
name: string
|
|
290
|
-
label?: string
|
|
291
|
-
description?: string
|
|
292
|
-
/** Path of the parent collection */
|
|
293
|
-
parentPath: LogicalPath
|
|
294
|
-
format: ContentFormat
|
|
295
|
-
schema: EntrySchema
|
|
296
|
-
/** Entry schema registry key (e.g., "postSchema"). Set during schema resolution. */
|
|
297
|
-
schemaRef?: string
|
|
298
|
-
default?: boolean
|
|
299
|
-
maxItems?: number
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/**
|
|
303
|
-
* Client config - subset safe for browser (DRY - derived from CanopyConfig)
|
|
304
|
-
* Use flatSchema for O(1) cached access to the flattened schema structure.
|
|
305
|
-
* Schema is loaded from .collection.json files on the server and provided as flatSchema.
|
|
306
|
-
*/
|
|
307
|
-
export type CanopyClientConfig = Pick<
|
|
308
|
-
CanopyConfig,
|
|
309
|
-
'defaultBaseBranch' | 'contentRoot' | 'editor' | 'mode'
|
|
310
|
-
> & {
|
|
311
|
-
flatSchema: FlatSchemaItem[]
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
// Client-only fields that can be provided as overrides (e.g., from auth providers)
|
|
315
|
-
export interface ClientOnlyFields {
|
|
316
|
-
editor?: {
|
|
317
|
-
onAccountClick?: () => void
|
|
318
|
-
onLogoutClick?: () => void | Promise<void>
|
|
319
|
-
AccountComponent?: React.ComponentType
|
|
320
|
-
}
|
|
321
|
-
}
|
package/src/config/validation.ts
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configuration validation utilities.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { CanopyConfigSchema } from './schemas/config'
|
|
6
|
-
import { normalizePathValue, normalizeSchemaPathsRoot } from './flatten'
|
|
7
|
-
import type { CanopyConfig } from './types'
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Recursively check that all select fields have options defined.
|
|
11
|
-
* Throws an error if a select field is missing options.
|
|
12
|
-
*/
|
|
13
|
-
export const ensureSelectFieldsHaveOptions = (config: unknown): void => {
|
|
14
|
-
const checkFields = (fields: unknown[] | undefined) => {
|
|
15
|
-
if (!Array.isArray(fields)) return
|
|
16
|
-
for (const field of fields) {
|
|
17
|
-
const f = field as Record<string, unknown>
|
|
18
|
-
if (f?.type === 'select' && (!Array.isArray(f.options) || f.options.length === 0)) {
|
|
19
|
-
const fieldName = (f?.name as string) ?? 'unknown'
|
|
20
|
-
throw new Error(`Select field "${fieldName}" requires options`)
|
|
21
|
-
}
|
|
22
|
-
if (f?.type === 'object') {
|
|
23
|
-
checkFields(f.fields as unknown[])
|
|
24
|
-
}
|
|
25
|
-
if (f?.type === 'block' && Array.isArray(f.templates)) {
|
|
26
|
-
for (const template of f.templates as Array<{ fields?: unknown[] }>) {
|
|
27
|
-
checkFields(template.fields)
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const walkSchema = (root: Record<string, unknown> | undefined) => {
|
|
34
|
-
if (!root) return
|
|
35
|
-
// Check entries fields (now an array of entry types)
|
|
36
|
-
if (Array.isArray(root.entries)) {
|
|
37
|
-
for (const entryType of root.entries as Array<{ schema?: unknown[] }>) {
|
|
38
|
-
checkFields(entryType?.schema)
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
// Recursively check nested collections
|
|
42
|
-
if (Array.isArray(root.collections)) {
|
|
43
|
-
for (const collection of root.collections as Array<Record<string, unknown>>) {
|
|
44
|
-
walkSchema(collection)
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
walkSchema((config as Record<string, unknown>)?.schema as Record<string, unknown>)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Validate and normalize a CanopyConfig object.
|
|
54
|
-
* Performs Zod validation, checks select field options, and normalizes paths.
|
|
55
|
-
*
|
|
56
|
-
* @param config - Raw configuration input
|
|
57
|
-
* @returns Validated and normalized CanopyConfig
|
|
58
|
-
* @throws Error if validation fails
|
|
59
|
-
*/
|
|
60
|
-
export const validateCanopyConfig = (config: unknown): CanopyConfig => {
|
|
61
|
-
ensureSelectFieldsHaveOptions(config)
|
|
62
|
-
const parsed = CanopyConfigSchema.parse(config)
|
|
63
|
-
const normalized = {
|
|
64
|
-
...parsed,
|
|
65
|
-
contentRoot: normalizePathValue(parsed.contentRoot ?? 'content'),
|
|
66
|
-
schema: parsed.schema ? normalizeSchemaPathsRoot(parsed.schema) : undefined,
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return normalized as CanopyConfig
|
|
70
|
-
}
|
package/src/config-test.ts
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import type { CanopyConfig, CanopyConfigInput, RootCollectionConfig } from './config'
|
|
2
|
-
import { defineCanopyConfig, flattenSchema } from './config'
|
|
3
|
-
import {
|
|
4
|
-
createTestCanopyServices,
|
|
5
|
-
type CanopyServices,
|
|
6
|
-
type CreateCanopyServicesOptions,
|
|
7
|
-
} from './services'
|
|
8
|
-
|
|
9
|
-
const FALLBACK_AUTHOR = {
|
|
10
|
-
gitBotAuthorName: 'CanopyCMS Test Bot',
|
|
11
|
-
gitBotAuthorEmail: 'canopycms-test@example.com',
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
type TestConfigInput = Omit<
|
|
15
|
-
CanopyConfigInput,
|
|
16
|
-
'gitBotAuthorName' | 'gitBotAuthorEmail' | 'schema'
|
|
17
|
-
> & {
|
|
18
|
-
schema: RootCollectionConfig
|
|
19
|
-
} & Partial<Pick<CanopyConfigInput, 'gitBotAuthorName' | 'gitBotAuthorEmail'>>
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Test-only helper that fills required author fields for convenience.
|
|
23
|
-
* Do not use in production code; prefer defineCanopyConfig.
|
|
24
|
-
*/
|
|
25
|
-
export const defineCanopyTestConfig = (
|
|
26
|
-
config: TestConfigInput,
|
|
27
|
-
overrides?: Partial<CanopyConfigInput>,
|
|
28
|
-
): CanopyConfig => {
|
|
29
|
-
// Destructure to exclude schema from being spread into defineCanopyConfig
|
|
30
|
-
const { schema: _schema, ...configWithoutSchema } = config
|
|
31
|
-
return defineCanopyConfig({
|
|
32
|
-
...FALLBACK_AUTHOR,
|
|
33
|
-
...configWithoutSchema,
|
|
34
|
-
...(overrides ?? {}),
|
|
35
|
-
}).server
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Test-only helper that creates CanopyServices with inline schema.
|
|
40
|
-
* Creates a mock branchSchemaCache that returns the test schema without requiring .collection.json files.
|
|
41
|
-
* Do not use in production code; use createCanopyServices with entrySchemaRegistry.
|
|
42
|
-
*/
|
|
43
|
-
export const createTestServices = async (
|
|
44
|
-
config: TestConfigInput,
|
|
45
|
-
options?: CreateCanopyServicesOptions,
|
|
46
|
-
): Promise<CanopyServices> => {
|
|
47
|
-
const canopyConfig = defineCanopyTestConfig(config)
|
|
48
|
-
const flatSchema = flattenSchema(config.schema, canopyConfig.contentRoot)
|
|
49
|
-
|
|
50
|
-
// Create a mock branchSchemaCache that returns the test schema
|
|
51
|
-
const mockBranchSchemaCache = {
|
|
52
|
-
getSchema: async () => ({
|
|
53
|
-
schema: config.schema,
|
|
54
|
-
flatSchema,
|
|
55
|
-
}),
|
|
56
|
-
invalidate: async () => {},
|
|
57
|
-
clearAll: async () => {},
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return createTestCanopyServices(canopyConfig, {
|
|
61
|
-
...options,
|
|
62
|
-
branchSchemaCache:
|
|
63
|
-
mockBranchSchemaCache as unknown as CreateCanopyServicesOptions['branchSchemaCache'],
|
|
64
|
-
})
|
|
65
|
-
}
|
package/src/config.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CanopyCMS Configuration
|
|
3
|
-
*
|
|
4
|
-
* This file re-exports from the config module for backward compatibility.
|
|
5
|
-
* New code should import directly from './config/index' or './config'.
|
|
6
|
-
*
|
|
7
|
-
* @module config
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
// Re-export everything from the config module
|
|
11
|
-
export * from './config/index'
|