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/paths/normalize.ts
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Path normalization utilities (client-safe).
|
|
3
|
-
*
|
|
4
|
-
* Consolidates the various path normalization patterns used across the codebase
|
|
5
|
-
* into a single, well-tested module.
|
|
6
|
-
*
|
|
7
|
-
* NOTE: These functions are pure and can be used in both client and server code.
|
|
8
|
-
* Server-only functions that depend on Node.js 'path' module are in normalize-server.ts.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import type { LogicalPath, PhysicalPath } from './types'
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Normalize a filesystem path by:
|
|
15
|
-
* - Converting backslashes to forward slashes
|
|
16
|
-
* - Removing empty segments
|
|
17
|
-
* - Removing leading/trailing slashes
|
|
18
|
-
*
|
|
19
|
-
* This is the foundational normalization used by most path operations.
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* normalizeFilesystemPath('content\\posts\\\\my-post') // 'content/posts/my-post'
|
|
23
|
-
* normalizeFilesystemPath('/content/posts/') // 'content/posts'
|
|
24
|
-
*/
|
|
25
|
-
export function normalizeFilesystemPath(path: string): string {
|
|
26
|
-
return path
|
|
27
|
-
.split(/[\\/]+/)
|
|
28
|
-
.filter(Boolean)
|
|
29
|
-
.join('/')
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Normalize a collection path by removing any content root prefix
|
|
34
|
-
* and normalizing separators.
|
|
35
|
-
*
|
|
36
|
-
* @example
|
|
37
|
-
* normalizeCollectionPath('content/posts') // 'posts'
|
|
38
|
-
* normalizeCollectionPath('content\\blog\\posts') // 'blog/posts'
|
|
39
|
-
* normalizeCollectionPath('posts') // 'posts'
|
|
40
|
-
*/
|
|
41
|
-
export function normalizeCollectionPath(collectionPath: string, contentRoot = 'content'): string {
|
|
42
|
-
const normalized = normalizeFilesystemPath(collectionPath)
|
|
43
|
-
const prefix = `${contentRoot}/`
|
|
44
|
-
if (normalized.startsWith(prefix)) {
|
|
45
|
-
return normalized.slice(prefix.length)
|
|
46
|
-
}
|
|
47
|
-
return normalized
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Check if a path contains traversal sequences (.., etc.)
|
|
52
|
-
*/
|
|
53
|
-
export function hasTraversalSequence(path: string): boolean {
|
|
54
|
-
const normalized = normalizeFilesystemPath(path)
|
|
55
|
-
return normalized.includes('..')
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Create a logical path from segments.
|
|
60
|
-
* Validates that no segment contains path traversal.
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* createLogicalPath('content', 'posts', 'my-post') // 'content/posts/my-post' as LogicalPath
|
|
64
|
-
*/
|
|
65
|
-
export function createLogicalPath(...segments: string[]): LogicalPath {
|
|
66
|
-
const normalized = segments
|
|
67
|
-
.map((s) => normalizeFilesystemPath(s))
|
|
68
|
-
.filter(Boolean)
|
|
69
|
-
.join('/')
|
|
70
|
-
|
|
71
|
-
if (hasTraversalSequence(normalized)) {
|
|
72
|
-
throw new Error(`Invalid path: contains traversal sequence: ${normalized}`)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return normalized as LogicalPath
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Create a physical path from segments.
|
|
80
|
-
* This is for paths that may contain embedded IDs.
|
|
81
|
-
*
|
|
82
|
-
* @example
|
|
83
|
-
* createPhysicalPath('content', 'posts', 'my-post.ABC123.mdx') // as PhysicalPath
|
|
84
|
-
*/
|
|
85
|
-
export function createPhysicalPath(...segments: string[]): PhysicalPath {
|
|
86
|
-
const normalized = segments
|
|
87
|
-
.map((s) => normalizeFilesystemPath(s))
|
|
88
|
-
.filter(Boolean)
|
|
89
|
-
.join('/')
|
|
90
|
-
|
|
91
|
-
if (hasTraversalSequence(normalized)) {
|
|
92
|
-
throw new Error(`Invalid path: contains traversal sequence: ${normalized}`)
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return normalized as PhysicalPath
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Join path segments with forward slashes.
|
|
100
|
-
* Does not validate - use createLogicalPath/createPhysicalPath for validation.
|
|
101
|
-
*/
|
|
102
|
-
export function joinPath(...segments: string[]): string {
|
|
103
|
-
return segments
|
|
104
|
-
.map((s) => normalizeFilesystemPath(s))
|
|
105
|
-
.filter(Boolean)
|
|
106
|
-
.join('/')
|
|
107
|
-
}
|
package/src/paths/resolve.ts
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Path resolution utilities for converting between physical and logical paths.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import type { FlatSchemaItem } from '../config'
|
|
6
|
-
import type { LogicalPath } from './types'
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Resolve a physical collection path to its logical path.
|
|
10
|
-
*
|
|
11
|
-
* Physical paths contain embedded IDs (e.g., "content/authors.q52DCVPuH4ga"),
|
|
12
|
-
* while logical paths are schema-defined (e.g., "content/authors").
|
|
13
|
-
*
|
|
14
|
-
* This function matches physical path segments to logical path segments,
|
|
15
|
-
* accounting for ID suffixes in physical paths.
|
|
16
|
-
*
|
|
17
|
-
* @param physicalPath - The physical filesystem path with embedded IDs
|
|
18
|
-
* @param schemaItems - Iterable of schema items to search
|
|
19
|
-
* @returns The matching logical path, or the physical path if no match found
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* // Match physical to logical
|
|
23
|
-
* resolveLogicalPath("content/authors.q52DCVPuH4ga", schemaItems)
|
|
24
|
-
* // Returns: "content/authors"
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* // Nested collections
|
|
28
|
-
* resolveLogicalPath("content/docs.ABC/api.DEF", schemaItems)
|
|
29
|
-
* // Returns: "content/docs/api"
|
|
30
|
-
*/
|
|
31
|
-
export function resolveLogicalPath(
|
|
32
|
-
physicalPath: string,
|
|
33
|
-
schemaItems: Iterable<FlatSchemaItem>,
|
|
34
|
-
): LogicalPath | string {
|
|
35
|
-
const pathSegments = physicalPath.split('/')
|
|
36
|
-
|
|
37
|
-
for (const schemaItem of schemaItems) {
|
|
38
|
-
if (schemaItem.type === 'collection') {
|
|
39
|
-
const logicalSegments = schemaItem.logicalPath.split('/')
|
|
40
|
-
|
|
41
|
-
// Check if all logical segments match the corresponding physical segments
|
|
42
|
-
// (ignoring the ID part after the dot in directory names)
|
|
43
|
-
if (pathSegments.length === logicalSegments.length) {
|
|
44
|
-
const matches = logicalSegments.every((logicalSeg, i) => {
|
|
45
|
-
const physicalSeg = pathSegments[i]
|
|
46
|
-
// Physical segment might have ID: "authors.q52DCVPuH4ga"
|
|
47
|
-
// Logical segment: "authors"
|
|
48
|
-
// Match if identical OR if physical starts with logical + '.'
|
|
49
|
-
return physicalSeg === logicalSeg || physicalSeg.startsWith(logicalSeg + '.')
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
if (matches) {
|
|
53
|
-
return schemaItem.logicalPath
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Fallback: return the physical path if we can't find a match
|
|
60
|
-
return physicalPath
|
|
61
|
-
}
|
package/src/paths/test-utils.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Test utilities for path types.
|
|
3
|
-
*
|
|
4
|
-
* These are unsafe casts with NO validation. Import only from test files.
|
|
5
|
-
* For production code, use the parse* or create* functions instead.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* // In test files only:
|
|
9
|
-
* import { unsafeAsLogicalPath, unsafeAsEntrySlug } from '../paths/test-utils'
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import type {
|
|
13
|
-
BranchName,
|
|
14
|
-
CollectionSlug,
|
|
15
|
-
ContentId,
|
|
16
|
-
LogicalPath,
|
|
17
|
-
PhysicalPath,
|
|
18
|
-
EntrySlug,
|
|
19
|
-
} from './types'
|
|
20
|
-
|
|
21
|
-
/** Test-only: cast a string to LogicalPath without validation. */
|
|
22
|
-
export const unsafeAsLogicalPath = (path: string): LogicalPath => path as LogicalPath
|
|
23
|
-
|
|
24
|
-
/** Test-only: cast a string to PhysicalPath without validation. */
|
|
25
|
-
export const unsafeAsPhysicalPath = (path: string): PhysicalPath => path as PhysicalPath
|
|
26
|
-
|
|
27
|
-
/** Test-only: cast a string to EntrySlug without validation. */
|
|
28
|
-
export const unsafeAsEntrySlug = (slug: string): EntrySlug => slug as EntrySlug
|
|
29
|
-
|
|
30
|
-
/** Test-only: cast a string to BranchName without validation. */
|
|
31
|
-
export const unsafeAsBranchName = (name: string): BranchName => name as BranchName
|
|
32
|
-
|
|
33
|
-
/** Test-only: cast a string to CollectionSlug without validation. */
|
|
34
|
-
export const unsafeAsCollectionSlug = (slug: string): CollectionSlug => slug as CollectionSlug
|
|
35
|
-
|
|
36
|
-
/** Test-only: cast a string to ContentId without validation. */
|
|
37
|
-
export const unsafeAsContentId = (id: string): ContentId => id as ContentId
|
package/src/paths/types.ts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Path type definitions for CanopyCMS
|
|
3
|
-
*
|
|
4
|
-
* These branded types provide compile-time safety to prevent accidentally
|
|
5
|
-
* mixing logical paths (content/posts/my-post) with physical filesystem
|
|
6
|
-
* paths (content/posts/my-post.ABC123.mdx).
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* A logical content path without embedded IDs.
|
|
11
|
-
* Used in APIs, URLs, and user-facing contexts.
|
|
12
|
-
* Example: "content/posts/my-post"
|
|
13
|
-
*/
|
|
14
|
-
export type LogicalPath = string & { readonly __brand: 'LogicalPath' }
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* A physical filesystem path that may contain embedded IDs.
|
|
18
|
-
* Used for actual file operations.
|
|
19
|
-
* Example: "content/posts/my-post.ABC123.mdx"
|
|
20
|
-
*/
|
|
21
|
-
export type PhysicalPath = string & { readonly __brand: 'PhysicalPath' }
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* A branch name that has been sanitized for filesystem use.
|
|
25
|
-
*/
|
|
26
|
-
export type SanitizedBranchName = string & {
|
|
27
|
-
readonly __brand: 'SanitizedBranchName'
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* A git branch name (before sanitization for filesystem use).
|
|
32
|
-
* Example: "feature/add-dark-mode" or "main"
|
|
33
|
-
*/
|
|
34
|
-
export type BranchName = string & { readonly __brand: 'BranchName' }
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* A 12-character Base58-encoded content ID.
|
|
38
|
-
* Used to uniquely identify entries and collections in filenames.
|
|
39
|
-
* Example: "bChqT78gcaLd"
|
|
40
|
-
*/
|
|
41
|
-
export type ContentId = string & { readonly __brand: 'ContentId' }
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Sentinel ContentId for the root content directory (which has no embedded ID in its name).
|
|
45
|
-
* Uses underscores — can never collide with real 12-char Base58 IDs (which exclude `_`).
|
|
46
|
-
*/
|
|
47
|
-
export const ROOT_COLLECTION_ID = '__rootcoll__' as ContentId
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* A collection slug (validated segment of a collection path).
|
|
51
|
-
* Example: "posts" or "api-docs"
|
|
52
|
-
*/
|
|
53
|
-
export type CollectionSlug = string & { readonly __brand: 'CollectionSlug' }
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* An entry slug (last segment of an entry path, used in URLs and filenames).
|
|
57
|
-
* Example: "my-first-post" or "getting-started"
|
|
58
|
-
*/
|
|
59
|
-
export type EntrySlug = string & { readonly __brand: 'EntrySlug' }
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Path validation result.
|
|
63
|
-
*/
|
|
64
|
-
export interface PathValidationResult {
|
|
65
|
-
valid: boolean
|
|
66
|
-
error?: string
|
|
67
|
-
normalizedPath?: string
|
|
68
|
-
}
|