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
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CLI command: npx canopycms generate-ai-content
|
|
3
|
-
*
|
|
4
|
-
* Generates static AI-ready content files from CanopyCMS content.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import path from 'node:path'
|
|
8
|
-
|
|
9
|
-
import { generateAIContentFiles } from '../build/generate-ai-content'
|
|
10
|
-
import { getErrorMessage } from '../utils/error'
|
|
11
|
-
|
|
12
|
-
interface GenerateAIContentCLIOptions {
|
|
13
|
-
projectDir: string
|
|
14
|
-
outputDir?: string
|
|
15
|
-
configPath?: string
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export async function generateAIContentCLI(options: GenerateAIContentCLIOptions): Promise<void> {
|
|
19
|
-
const { projectDir, outputDir = 'public/ai', configPath } = options
|
|
20
|
-
|
|
21
|
-
console.log('\nCanopyCMS generate-ai-content\n')
|
|
22
|
-
|
|
23
|
-
// Load adopter's canopycms config
|
|
24
|
-
const canopyConfigPath = path.join(projectDir, 'canopycms.config.ts')
|
|
25
|
-
let canopyConfigModule: Record<string, unknown>
|
|
26
|
-
try {
|
|
27
|
-
canopyConfigModule = (await import(canopyConfigPath)) as Record<string, unknown>
|
|
28
|
-
} catch (err) {
|
|
29
|
-
console.error(`Could not load config from ${canopyConfigPath}`)
|
|
30
|
-
console.error(getErrorMessage(err))
|
|
31
|
-
process.exit(1)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// Extract the server config (defineCanopyConfig returns { server, client })
|
|
35
|
-
const configExport = canopyConfigModule.default ?? canopyConfigModule.config ?? canopyConfigModule
|
|
36
|
-
const serverConfig =
|
|
37
|
-
typeof configExport === 'object' && configExport !== null && 'server' in configExport
|
|
38
|
-
? (configExport as { server: unknown }).server
|
|
39
|
-
: configExport
|
|
40
|
-
|
|
41
|
-
// Load entry schema registry
|
|
42
|
-
const schemasPath = path.join(projectDir, 'app/schemas.ts')
|
|
43
|
-
let entrySchemaRegistry: Record<string, unknown> = {}
|
|
44
|
-
try {
|
|
45
|
-
const schemasModule = (await import(schemasPath)) as Record<string, unknown>
|
|
46
|
-
entrySchemaRegistry =
|
|
47
|
-
(schemasModule.entrySchemaRegistry as Record<string, unknown>) ?? schemasModule
|
|
48
|
-
} catch {
|
|
49
|
-
console.warn(' No app/schemas.ts found, using empty entry schema registry')
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// Load AI config if specified
|
|
53
|
-
let aiConfig: unknown
|
|
54
|
-
if (configPath) {
|
|
55
|
-
try {
|
|
56
|
-
const aiConfigModule = (await import(path.resolve(configPath))) as Record<string, unknown>
|
|
57
|
-
aiConfig = aiConfigModule.aiContentConfig ?? aiConfigModule.default ?? aiConfigModule.config
|
|
58
|
-
} catch (err) {
|
|
59
|
-
console.error(`Could not load AI config from ${configPath}`)
|
|
60
|
-
console.error(getErrorMessage(err))
|
|
61
|
-
process.exit(1)
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Validate AI config shape if provided
|
|
66
|
-
if (aiConfig !== undefined && (typeof aiConfig !== 'object' || aiConfig === null)) {
|
|
67
|
-
console.error('Invalid AI content config: expected an object.')
|
|
68
|
-
process.exit(1)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Validate loaded config has required shape
|
|
72
|
-
if (
|
|
73
|
-
!serverConfig ||
|
|
74
|
-
typeof serverConfig !== 'object' ||
|
|
75
|
-
!('mode' in serverConfig) ||
|
|
76
|
-
!('contentRoot' in serverConfig)
|
|
77
|
-
) {
|
|
78
|
-
console.error(
|
|
79
|
-
'Invalid CanopyCMS config: expected an object with mode and contentRoot properties.',
|
|
80
|
-
)
|
|
81
|
-
console.error('Make sure canopycms.config.ts uses defineCanopyConfig().')
|
|
82
|
-
process.exit(1)
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const resolvedOutput = path.resolve(projectDir, outputDir)
|
|
86
|
-
console.log(` Output: ${resolvedOutput}`)
|
|
87
|
-
console.log(` Mode: ${(serverConfig as { mode?: string }).mode ?? 'dev'}`)
|
|
88
|
-
|
|
89
|
-
const result = await generateAIContentFiles({
|
|
90
|
-
config: serverConfig as Parameters<typeof generateAIContentFiles>[0]['config'],
|
|
91
|
-
entrySchemaRegistry: entrySchemaRegistry as Parameters<
|
|
92
|
-
typeof generateAIContentFiles
|
|
93
|
-
>[0]['entrySchemaRegistry'],
|
|
94
|
-
outputDir: resolvedOutput,
|
|
95
|
-
aiConfig: aiConfig as Parameters<typeof generateAIContentFiles>[0]['aiConfig'],
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
console.log(`\n Generated ${result.fileCount} files`)
|
|
99
|
-
console.log(` Output: ${result.outputDir}\n`)
|
|
100
|
-
}
|
package/src/cli/init.test.ts
DELETED
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'
|
|
2
|
-
import fs from 'node:fs/promises'
|
|
3
|
-
import path from 'node:path'
|
|
4
|
-
import os from 'node:os'
|
|
5
|
-
import { init, initDeployAws } from './init'
|
|
6
|
-
import { mockConsole } from '../test-utils/console-spy'
|
|
7
|
-
|
|
8
|
-
// Mock @clack/prompts to avoid interactive prompts in tests
|
|
9
|
-
vi.mock('@clack/prompts', () => ({
|
|
10
|
-
intro: vi.fn(),
|
|
11
|
-
outro: vi.fn(),
|
|
12
|
-
note: vi.fn(),
|
|
13
|
-
log: {
|
|
14
|
-
success: vi.fn(),
|
|
15
|
-
warn: vi.fn(),
|
|
16
|
-
error: vi.fn(),
|
|
17
|
-
info: vi.fn(),
|
|
18
|
-
},
|
|
19
|
-
confirm: vi.fn().mockResolvedValue(false),
|
|
20
|
-
select: vi.fn(),
|
|
21
|
-
text: vi.fn(),
|
|
22
|
-
isCancel: vi.fn().mockReturnValue(false),
|
|
23
|
-
cancel: vi.fn(),
|
|
24
|
-
}))
|
|
25
|
-
|
|
26
|
-
function defaultOpts(tmpDir: string, overrides?: Partial<Parameters<typeof init>[0]>) {
|
|
27
|
-
return {
|
|
28
|
-
authProvider: 'dev' as const,
|
|
29
|
-
mode: 'dev' as const,
|
|
30
|
-
appDir: 'app',
|
|
31
|
-
projectDir: tmpDir,
|
|
32
|
-
force: false,
|
|
33
|
-
nonInteractive: true,
|
|
34
|
-
...overrides,
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
describe('canopycms init', () => {
|
|
39
|
-
let tmpDir: string
|
|
40
|
-
|
|
41
|
-
beforeEach(async () => {
|
|
42
|
-
mockConsole()
|
|
43
|
-
tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'canopy-init-test-'))
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
afterEach(async () => {
|
|
47
|
-
await fs.rm(tmpDir, { recursive: true, force: true })
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
it('creates all expected files', async () => {
|
|
51
|
-
await init(defaultOpts(tmpDir))
|
|
52
|
-
|
|
53
|
-
const expectedFiles = [
|
|
54
|
-
'canopycms.config.ts',
|
|
55
|
-
'app/lib/canopy.ts',
|
|
56
|
-
'app/schemas.ts',
|
|
57
|
-
'app/api/canopycms/[...canopycms]/route.ts',
|
|
58
|
-
'app/edit/page.tsx',
|
|
59
|
-
]
|
|
60
|
-
|
|
61
|
-
for (const file of expectedFiles) {
|
|
62
|
-
const filePath = path.join(tmpDir, file)
|
|
63
|
-
const stat = await fs.stat(filePath)
|
|
64
|
-
expect(stat.isFile(), `Expected ${file} to exist`).toBe(true)
|
|
65
|
-
}
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
it('generates config with correct mode for dev', async () => {
|
|
69
|
-
await init(defaultOpts(tmpDir, { mode: 'dev' }))
|
|
70
|
-
|
|
71
|
-
const config = await fs.readFile(path.join(tmpDir, 'canopycms.config.ts'), 'utf-8')
|
|
72
|
-
expect(config).toContain("mode: 'dev'")
|
|
73
|
-
expect(config).toContain('defineCanopyConfig')
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
it('generates config with correct mode for prod-sim', async () => {
|
|
77
|
-
await init(defaultOpts(tmpDir, { mode: 'prod-sim' }))
|
|
78
|
-
|
|
79
|
-
const config = await fs.readFile(path.join(tmpDir, 'canopycms.config.ts'), 'utf-8')
|
|
80
|
-
expect(config).toContain("mode: 'prod-sim'")
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
it('generates API route with correct handler pattern', async () => {
|
|
84
|
-
await init(defaultOpts(tmpDir))
|
|
85
|
-
|
|
86
|
-
const route = await fs.readFile(
|
|
87
|
-
path.join(tmpDir, 'app/api/canopycms/[...canopycms]/route.ts'),
|
|
88
|
-
'utf-8',
|
|
89
|
-
)
|
|
90
|
-
expect(route).toContain('getHandler')
|
|
91
|
-
expect(route).toContain('export const GET')
|
|
92
|
-
expect(route).toContain('export const POST')
|
|
93
|
-
expect(route).toContain('export const PATCH')
|
|
94
|
-
expect(route).toContain('RouteContext')
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
it('generates edit page with auth support', async () => {
|
|
98
|
-
await init(defaultOpts(tmpDir))
|
|
99
|
-
|
|
100
|
-
const page = await fs.readFile(path.join(tmpDir, 'app/edit/page.tsx'), 'utf-8')
|
|
101
|
-
expect(page).toContain("'use client'")
|
|
102
|
-
expect(page).toContain('useClerkAuthConfig')
|
|
103
|
-
expect(page).toContain('useDevAuthConfig')
|
|
104
|
-
expect(page).toContain('NextCanopyEditorPage')
|
|
105
|
-
})
|
|
106
|
-
|
|
107
|
-
it('skips existing files in non-interactive mode', async () => {
|
|
108
|
-
const configPath = path.join(tmpDir, 'canopycms.config.ts')
|
|
109
|
-
await fs.writeFile(configPath, 'existing content', 'utf-8')
|
|
110
|
-
|
|
111
|
-
await init(defaultOpts(tmpDir))
|
|
112
|
-
|
|
113
|
-
const content = await fs.readFile(configPath, 'utf-8')
|
|
114
|
-
expect(content).toBe('existing content')
|
|
115
|
-
})
|
|
116
|
-
|
|
117
|
-
it('overwrites existing files with --force', async () => {
|
|
118
|
-
const configPath = path.join(tmpDir, 'canopycms.config.ts')
|
|
119
|
-
await fs.writeFile(configPath, 'existing content', 'utf-8')
|
|
120
|
-
|
|
121
|
-
await init(defaultOpts(tmpDir, { force: true }))
|
|
122
|
-
|
|
123
|
-
const content = await fs.readFile(configPath, 'utf-8')
|
|
124
|
-
expect(content).not.toBe('existing content')
|
|
125
|
-
expect(content).toContain('defineCanopyConfig')
|
|
126
|
-
})
|
|
127
|
-
|
|
128
|
-
it('prompts for overwrite when interactive and file exists', async () => {
|
|
129
|
-
const { confirm } = await import('@clack/prompts')
|
|
130
|
-
vi.mocked(confirm).mockResolvedValueOnce(true)
|
|
131
|
-
|
|
132
|
-
const configPath = path.join(tmpDir, 'canopycms.config.ts')
|
|
133
|
-
await fs.writeFile(configPath, 'existing content', 'utf-8')
|
|
134
|
-
|
|
135
|
-
await init(defaultOpts(tmpDir, { nonInteractive: false }))
|
|
136
|
-
|
|
137
|
-
expect(confirm).toHaveBeenCalled()
|
|
138
|
-
const content = await fs.readFile(configPath, 'utf-8')
|
|
139
|
-
expect(content).toContain('defineCanopyConfig')
|
|
140
|
-
})
|
|
141
|
-
|
|
142
|
-
it('updates .gitignore if present', async () => {
|
|
143
|
-
await fs.writeFile(path.join(tmpDir, '.gitignore'), 'node_modules\n', 'utf-8')
|
|
144
|
-
|
|
145
|
-
await init(defaultOpts(tmpDir))
|
|
146
|
-
|
|
147
|
-
const gitignore = await fs.readFile(path.join(tmpDir, '.gitignore'), 'utf-8')
|
|
148
|
-
expect(gitignore).toContain('.canopy-prod-sim/')
|
|
149
|
-
})
|
|
150
|
-
|
|
151
|
-
it('creates files in custom app-dir', async () => {
|
|
152
|
-
await init(defaultOpts(tmpDir, { appDir: 'src/app' }))
|
|
153
|
-
|
|
154
|
-
const expectedFiles = [
|
|
155
|
-
'canopycms.config.ts',
|
|
156
|
-
'src/app/lib/canopy.ts',
|
|
157
|
-
'src/app/schemas.ts',
|
|
158
|
-
'src/app/api/canopycms/[...canopycms]/route.ts',
|
|
159
|
-
'src/app/edit/page.tsx',
|
|
160
|
-
]
|
|
161
|
-
|
|
162
|
-
for (const file of expectedFiles) {
|
|
163
|
-
const filePath = path.join(tmpDir, file)
|
|
164
|
-
const stat = await fs.stat(filePath)
|
|
165
|
-
expect(stat.isFile(), `Expected ${file} to exist`).toBe(true)
|
|
166
|
-
}
|
|
167
|
-
})
|
|
168
|
-
|
|
169
|
-
it('adjusts import paths for custom app-dir', async () => {
|
|
170
|
-
await init(defaultOpts(tmpDir, { appDir: 'src/app' }))
|
|
171
|
-
|
|
172
|
-
const canopy = await fs.readFile(path.join(tmpDir, 'src/app/lib/canopy.ts'), 'utf-8')
|
|
173
|
-
// src/app/lib/ is 3 levels deep → ../../../canopycms.config
|
|
174
|
-
expect(canopy).toContain('../../../canopycms.config')
|
|
175
|
-
|
|
176
|
-
const route = await fs.readFile(
|
|
177
|
-
path.join(tmpDir, 'src/app/api/canopycms/[...canopycms]/route.ts'),
|
|
178
|
-
'utf-8',
|
|
179
|
-
)
|
|
180
|
-
// src/app/api/canopycms/[...canopycms]/ is 6 levels deep → ../../../../../../ but we want the lib/canopy path
|
|
181
|
-
expect(route).toContain('lib/canopy')
|
|
182
|
-
|
|
183
|
-
const editPage = await fs.readFile(path.join(tmpDir, 'src/app/edit/page.tsx'), 'utf-8')
|
|
184
|
-
expect(editPage).toContain('../../../canopycms.config')
|
|
185
|
-
})
|
|
186
|
-
})
|
|
187
|
-
|
|
188
|
-
describe('canopycms init-deploy aws', () => {
|
|
189
|
-
let tmpDir: string
|
|
190
|
-
|
|
191
|
-
beforeEach(async () => {
|
|
192
|
-
mockConsole()
|
|
193
|
-
tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'canopy-deploy-test-'))
|
|
194
|
-
})
|
|
195
|
-
|
|
196
|
-
afterEach(async () => {
|
|
197
|
-
await fs.rm(tmpDir, { recursive: true, force: true })
|
|
198
|
-
})
|
|
199
|
-
|
|
200
|
-
it('creates Dockerfile.cms', async () => {
|
|
201
|
-
await initDeployAws({ cloud: 'aws', projectDir: tmpDir, force: false, nonInteractive: true })
|
|
202
|
-
|
|
203
|
-
const dockerfile = await fs.readFile(path.join(tmpDir, 'Dockerfile.cms'), 'utf-8')
|
|
204
|
-
expect(dockerfile).toContain('lambda-adapter')
|
|
205
|
-
expect(dockerfile).toContain('CANOPY_BUILD=cms')
|
|
206
|
-
expect(dockerfile).toContain('apt-get install -y git')
|
|
207
|
-
})
|
|
208
|
-
|
|
209
|
-
it('creates GitHub Actions workflow', async () => {
|
|
210
|
-
await initDeployAws({ cloud: 'aws', projectDir: tmpDir, force: false, nonInteractive: true })
|
|
211
|
-
|
|
212
|
-
const workflow = await fs.readFile(
|
|
213
|
-
path.join(tmpDir, '.github/workflows/deploy-cms.yml'),
|
|
214
|
-
'utf-8',
|
|
215
|
-
)
|
|
216
|
-
expect(workflow).toContain('Deploy CMS')
|
|
217
|
-
expect(workflow).toContain('docker build')
|
|
218
|
-
})
|
|
219
|
-
|
|
220
|
-
it('skips existing files in non-interactive mode', async () => {
|
|
221
|
-
const dockerfilePath = path.join(tmpDir, 'Dockerfile.cms')
|
|
222
|
-
await fs.writeFile(dockerfilePath, 'existing', 'utf-8')
|
|
223
|
-
|
|
224
|
-
await initDeployAws({ cloud: 'aws', projectDir: tmpDir, force: false, nonInteractive: true })
|
|
225
|
-
|
|
226
|
-
const content = await fs.readFile(dockerfilePath, 'utf-8')
|
|
227
|
-
expect(content).toBe('existing')
|
|
228
|
-
})
|
|
229
|
-
|
|
230
|
-
it('overwrites existing files with --force', async () => {
|
|
231
|
-
const dockerfilePath = path.join(tmpDir, 'Dockerfile.cms')
|
|
232
|
-
await fs.writeFile(dockerfilePath, 'existing', 'utf-8')
|
|
233
|
-
|
|
234
|
-
await initDeployAws({ cloud: 'aws', projectDir: tmpDir, force: true, nonInteractive: false })
|
|
235
|
-
|
|
236
|
-
const content = await fs.readFile(dockerfilePath, 'utf-8')
|
|
237
|
-
expect(content).not.toBe('existing')
|
|
238
|
-
expect(content).toContain('lambda-adapter')
|
|
239
|
-
})
|
|
240
|
-
})
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { createNextCanopyContext } from 'canopycms-next'
|
|
2
|
-
import { createClerkAuthPlugin, createClerkJwtVerifier } from 'canopycms-auth-clerk'
|
|
3
|
-
import { createDevAuthPlugin, createDevTokenVerifier } from 'canopycms-auth-dev'
|
|
4
|
-
import type { AuthPlugin } from 'canopycms/auth'
|
|
5
|
-
import { CachingAuthPlugin, FileBasedAuthCache } from 'canopycms/auth/cache'
|
|
6
|
-
import config from '{{CONFIG_IMPORT}}'
|
|
7
|
-
import { entrySchemaRegistry } from '../schemas'
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Select auth plugin based on operating mode and auth provider.
|
|
11
|
-
*
|
|
12
|
-
* prod / prod-sim: Use CachingAuthPlugin (networkless JWT + file-based cache).
|
|
13
|
-
* The cache is populated by the worker daemon (run-once or continuous).
|
|
14
|
-
*
|
|
15
|
-
* dev: Use auth plugin directly (no caching layer needed).
|
|
16
|
-
*/
|
|
17
|
-
function getAuthPlugin(): AuthPlugin {
|
|
18
|
-
const mode = config.server.mode
|
|
19
|
-
const authMode = process.env.CANOPY_AUTH_MODE || 'dev'
|
|
20
|
-
|
|
21
|
-
// In prod/prod-sim: use CachingAuthPlugin to simulate/run the Lambda code path
|
|
22
|
-
if (mode === 'prod' || mode === 'prod-sim') {
|
|
23
|
-
const cachePath = process.env.CANOPY_AUTH_CACHE_PATH
|
|
24
|
-
?? (mode === 'prod-sim' ? '.canopy-prod-sim/.cache' : '/mnt/efs/workspace/.cache')
|
|
25
|
-
|
|
26
|
-
const tokenVerifier = authMode === 'clerk'
|
|
27
|
-
? createClerkJwtVerifier({ jwtKey: process.env.CLERK_JWT_KEY ?? '' })
|
|
28
|
-
: createDevTokenVerifier()
|
|
29
|
-
|
|
30
|
-
return new CachingAuthPlugin(tokenVerifier, new FileBasedAuthCache(cachePath))
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// In dev mode: use auth plugin directly
|
|
34
|
-
if (authMode === 'clerk') {
|
|
35
|
-
return createClerkAuthPlugin({ useOrganizationsAsGroups: true })
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return createDevAuthPlugin()
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const canopyContextPromise = createNextCanopyContext({
|
|
42
|
-
config: config.server,
|
|
43
|
-
authPlugin: getAuthPlugin(),
|
|
44
|
-
entrySchemaRegistry,
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
export const getCanopy = async () => {
|
|
48
|
-
const context = await canopyContextPromise
|
|
49
|
-
return context.getCanopy()
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export const getHandler = async () => {
|
|
53
|
-
const context = await canopyContextPromise
|
|
54
|
-
return context.handler
|
|
55
|
-
}
|
package/src/cli/templates.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* File templates for `canopycms init` and `canopycms init-deploy aws`.
|
|
3
|
-
* Reads .template files from the templates/ directory for readability.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import fs from 'node:fs/promises'
|
|
7
|
-
import path from 'node:path'
|
|
8
|
-
import { fileURLToPath } from 'node:url'
|
|
9
|
-
|
|
10
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
|
11
|
-
const TEMPLATES_DIR = path.join(__dirname, 'templates')
|
|
12
|
-
|
|
13
|
-
async function readTemplate(name: string): Promise<string> {
|
|
14
|
-
return fs.readFile(path.join(TEMPLATES_DIR, name), 'utf-8')
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export async function canopyCmsConfig(options: { mode: string }): Promise<string> {
|
|
18
|
-
const template = await readTemplate('canopycms.config.ts.template')
|
|
19
|
-
return template.replace('{{MODE}}', options.mode)
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export async function canopyContext(options: { configImport: string }): Promise<string> {
|
|
23
|
-
const template = await readTemplate('canopy.ts.template')
|
|
24
|
-
return template.replace('{{CONFIG_IMPORT}}', options.configImport)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export async function schemasTemplate(): Promise<string> {
|
|
28
|
-
return readTemplate('schemas.ts.template')
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export async function apiRoute(options: { canopyImport: string }): Promise<string> {
|
|
32
|
-
const template = await readTemplate('route.ts.template')
|
|
33
|
-
return template.replace('{{CANOPY_IMPORT}}', options.canopyImport)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export async function editPage(options: { configImport: string }): Promise<string> {
|
|
37
|
-
const template = await readTemplate('edit-page.tsx.template')
|
|
38
|
-
return template.replace('{{CONFIG_IMPORT}}', options.configImport)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export async function dockerfileCms(): Promise<string> {
|
|
42
|
-
return readTemplate('Dockerfile.cms.template')
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export async function githubWorkflowCms(): Promise<string> {
|
|
46
|
-
return readTemplate('deploy-cms.yml.template')
|
|
47
|
-
}
|
package/src/client.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
export type { CanopyClientConfig } from './config'
|
|
4
|
-
export * from './editor/EditorPanes'
|
|
5
|
-
export * from './editor/EntryNavigator'
|
|
6
|
-
export * from './editor/Editor'
|
|
7
|
-
export * from './editor/preview-bridge'
|
|
8
|
-
export * from './editor/canopy-path'
|
|
9
|
-
export * from './editor/theme'
|
|
10
|
-
export * from './editor/editor-config'
|
|
11
|
-
export * from './editor/CanopyEditor'
|
|
12
|
-
export * from './editor/CanopyEditorPage'
|