canopycms 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +404 -0
- package/dist/__integration__/fixtures/content-seeds.d.ts +43 -0
- package/dist/__integration__/fixtures/content-seeds.d.ts.map +1 -0
- package/dist/__integration__/fixtures/content-seeds.js +99 -0
- package/dist/__integration__/fixtures/content-seeds.js.map +1 -0
- package/dist/__integration__/fixtures/schemas.d.ts +12 -0
- package/dist/__integration__/fixtures/schemas.d.ts.map +1 -0
- package/dist/__integration__/fixtures/schemas.js +65 -0
- package/dist/__integration__/fixtures/schemas.js.map +1 -0
- package/dist/__integration__/test-utils/api-client.d.ts +123 -0
- package/dist/__integration__/test-utils/api-client.d.ts.map +1 -0
- package/dist/__integration__/test-utils/api-client.js +118 -0
- package/dist/__integration__/test-utils/api-client.js.map +1 -0
- package/dist/__integration__/test-utils/multi-user.d.ts +25 -0
- package/dist/__integration__/test-utils/multi-user.d.ts.map +1 -0
- package/dist/__integration__/test-utils/multi-user.js +105 -0
- package/dist/__integration__/test-utils/multi-user.js.map +1 -0
- package/dist/__integration__/test-utils/test-workspace.d.ts +25 -0
- package/dist/__integration__/test-utils/test-workspace.d.ts.map +1 -0
- package/dist/__integration__/test-utils/test-workspace.js +102 -0
- package/dist/__integration__/test-utils/test-workspace.js.map +1 -0
- package/dist/ai/generate.d.ts +31 -0
- package/dist/ai/generate.d.ts.map +1 -0
- package/dist/ai/generate.js +277 -0
- package/dist/ai/generate.js.map +1 -0
- package/dist/ai/handler.d.ts +38 -0
- package/dist/ai/handler.d.ts.map +1 -0
- package/dist/ai/handler.js +99 -0
- package/dist/ai/handler.js.map +1 -0
- package/dist/ai/index.d.ts +13 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +10 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/json-to-markdown.d.ts +15 -0
- package/dist/ai/json-to-markdown.d.ts.map +1 -0
- package/dist/ai/json-to-markdown.js +318 -0
- package/dist/ai/json-to-markdown.js.map +1 -0
- package/dist/ai/resolve-branch.d.ts +13 -0
- package/dist/ai/resolve-branch.d.ts.map +1 -0
- package/dist/ai/resolve-branch.js +27 -0
- package/dist/ai/resolve-branch.js.map +1 -0
- package/dist/ai/types.d.ts +133 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +14 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/api/__test__/mock-client.d.ts +194 -0
- package/dist/api/__test__/mock-client.d.ts.map +1 -0
- package/dist/api/__test__/mock-client.js +322 -0
- package/dist/api/__test__/mock-client.js.map +1 -0
- package/dist/api/assets.d.ts +52 -0
- package/dist/api/assets.d.ts.map +1 -0
- package/dist/api/assets.js +106 -0
- package/dist/api/assets.js.map +1 -0
- package/dist/api/branch-merge.d.ts +28 -0
- package/dist/api/branch-merge.d.ts.map +1 -0
- package/dist/api/branch-merge.js +87 -0
- package/dist/api/branch-merge.js.map +1 -0
- package/dist/api/branch-review.d.ts +42 -0
- package/dist/api/branch-review.d.ts.map +1 -0
- package/dist/api/branch-review.js +102 -0
- package/dist/api/branch-review.js.map +1 -0
- package/dist/api/branch-status.d.ts +81 -0
- package/dist/api/branch-status.d.ts.map +1 -0
- package/dist/api/branch-status.js +125 -0
- package/dist/api/branch-status.js.map +1 -0
- package/dist/api/branch-withdraw.d.ts +18 -0
- package/dist/api/branch-withdraw.d.ts.map +1 -0
- package/dist/api/branch-withdraw.js +64 -0
- package/dist/api/branch-withdraw.js.map +1 -0
- package/dist/api/branch.d.ts +188 -0
- package/dist/api/branch.d.ts.map +1 -0
- package/dist/api/branch.js +381 -0
- package/dist/api/branch.js.map +1 -0
- package/dist/api/client.d.ts +289 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +412 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/comments.d.ts +84 -0
- package/dist/api/comments.d.ts.map +1 -0
- package/dist/api/comments.js +142 -0
- package/dist/api/comments.js.map +1 -0
- package/dist/api/content.d.ts +154 -0
- package/dist/api/content.d.ts.map +1 -0
- package/dist/api/content.js +308 -0
- package/dist/api/content.js.map +1 -0
- package/dist/api/entries.d.ts +155 -0
- package/dist/api/entries.d.ts.map +1 -0
- package/dist/api/entries.js +466 -0
- package/dist/api/entries.js.map +1 -0
- package/dist/api/github-sync.d.ts +22 -0
- package/dist/api/github-sync.d.ts.map +1 -0
- package/dist/api/github-sync.js +121 -0
- package/dist/api/github-sync.js.map +1 -0
- package/dist/api/groups.d.ts +91 -0
- package/dist/api/groups.d.ts.map +1 -0
- package/dist/api/groups.js +270 -0
- package/dist/api/groups.js.map +1 -0
- package/dist/api/guards.d.ts +58 -0
- package/dist/api/guards.d.ts.map +1 -0
- package/dist/api/guards.js +166 -0
- package/dist/api/guards.js.map +1 -0
- package/dist/api/index.d.ts +18 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +8 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/permissions.d.ts +278 -0
- package/dist/api/permissions.d.ts.map +1 -0
- package/dist/api/permissions.js +257 -0
- package/dist/api/permissions.js.map +1 -0
- package/dist/api/reference-options.d.ts +27 -0
- package/dist/api/reference-options.d.ts.map +1 -0
- package/dist/api/reference-options.js +88 -0
- package/dist/api/reference-options.js.map +1 -0
- package/dist/api/resolve-references.d.ts +32 -0
- package/dist/api/resolve-references.d.ts.map +1 -0
- package/dist/api/resolve-references.js +77 -0
- package/dist/api/resolve-references.js.map +1 -0
- package/dist/api/route-builder.d.ts +120 -0
- package/dist/api/route-builder.d.ts.map +1 -0
- package/dist/api/route-builder.js +108 -0
- package/dist/api/route-builder.js.map +1 -0
- package/dist/api/schema.d.ts +713 -0
- package/dist/api/schema.d.ts.map +1 -0
- package/dist/api/schema.js +656 -0
- package/dist/api/schema.js.map +1 -0
- package/dist/api/settings-helpers.d.ts +33 -0
- package/dist/api/settings-helpers.d.ts.map +1 -0
- package/dist/api/settings-helpers.js +61 -0
- package/dist/api/settings-helpers.js.map +1 -0
- package/dist/api/types.d.ts +37 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +2 -0
- package/dist/api/types.js.map +1 -0
- package/dist/api/user.d.ts +9 -0
- package/dist/api/user.d.ts.map +1 -0
- package/dist/api/user.js +34 -0
- package/dist/api/user.js.map +1 -0
- package/dist/api/validators.d.ts +85 -0
- package/dist/api/validators.d.ts.map +1 -0
- package/dist/api/validators.js +160 -0
- package/dist/api/validators.js.map +1 -0
- package/dist/asset-store.d.ts +32 -0
- package/dist/asset-store.d.ts.map +1 -0
- package/dist/asset-store.js +84 -0
- package/dist/asset-store.js.map +1 -0
- package/dist/auth/cache.d.ts +8 -0
- package/dist/auth/cache.d.ts.map +1 -0
- package/dist/auth/cache.js +8 -0
- package/dist/auth/cache.js.map +1 -0
- package/dist/auth/caching-auth-plugin.d.ts +42 -0
- package/dist/auth/caching-auth-plugin.d.ts.map +1 -0
- package/dist/auth/caching-auth-plugin.js +78 -0
- package/dist/auth/caching-auth-plugin.js.map +1 -0
- package/dist/auth/context-helpers.d.ts +31 -0
- package/dist/auth/context-helpers.d.ts.map +1 -0
- package/dist/auth/context-helpers.js +53 -0
- package/dist/auth/context-helpers.js.map +1 -0
- package/dist/auth/file-based-auth-cache.d.ts +46 -0
- package/dist/auth/file-based-auth-cache.d.ts.map +1 -0
- package/dist/auth/file-based-auth-cache.js +226 -0
- package/dist/auth/file-based-auth-cache.js.map +1 -0
- package/dist/auth/index.d.ts +6 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +2 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/plugin.d.ts +48 -0
- package/dist/auth/plugin.d.ts.map +1 -0
- package/dist/auth/plugin.js +2 -0
- package/dist/auth/plugin.js.map +1 -0
- package/dist/auth/types.d.ts +36 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/authorization/branch.d.ts +29 -0
- package/dist/authorization/branch.d.ts.map +1 -0
- package/dist/authorization/branch.js +67 -0
- package/dist/authorization/branch.js.map +1 -0
- package/dist/authorization/content.d.ts +38 -0
- package/dist/authorization/content.d.ts.map +1 -0
- package/dist/authorization/content.js +65 -0
- package/dist/authorization/content.js.map +1 -0
- package/dist/authorization/groups/index.d.ts +6 -0
- package/dist/authorization/groups/index.d.ts.map +1 -0
- package/dist/authorization/groups/index.js +6 -0
- package/dist/authorization/groups/index.js.map +1 -0
- package/dist/authorization/groups/loader.d.ts +24 -0
- package/dist/authorization/groups/loader.d.ts.map +1 -0
- package/dist/authorization/groups/loader.js +98 -0
- package/dist/authorization/groups/loader.js.map +1 -0
- package/dist/authorization/groups/schema.d.ts +67 -0
- package/dist/authorization/groups/schema.d.ts.map +1 -0
- package/dist/authorization/groups/schema.js +31 -0
- package/dist/authorization/groups/schema.js.map +1 -0
- package/dist/authorization/helpers.d.ts +35 -0
- package/dist/authorization/helpers.d.ts.map +1 -0
- package/dist/authorization/helpers.js +42 -0
- package/dist/authorization/helpers.js.map +1 -0
- package/dist/authorization/index.d.ts +36 -0
- package/dist/authorization/index.d.ts.map +1 -0
- package/dist/authorization/index.js +42 -0
- package/dist/authorization/index.js.map +1 -0
- package/dist/authorization/path.d.ts +29 -0
- package/dist/authorization/path.d.ts.map +1 -0
- package/dist/authorization/path.js +71 -0
- package/dist/authorization/path.js.map +1 -0
- package/dist/authorization/permissions/index.d.ts +6 -0
- package/dist/authorization/permissions/index.d.ts.map +1 -0
- package/dist/authorization/permissions/index.js +6 -0
- package/dist/authorization/permissions/index.js.map +1 -0
- package/dist/authorization/permissions/loader.d.ts +33 -0
- package/dist/authorization/permissions/loader.d.ts.map +1 -0
- package/dist/authorization/permissions/loader.js +85 -0
- package/dist/authorization/permissions/loader.js.map +1 -0
- package/dist/authorization/permissions/schema.d.ts +133 -0
- package/dist/authorization/permissions/schema.d.ts.map +1 -0
- package/dist/authorization/permissions/schema.js +56 -0
- package/dist/authorization/permissions/schema.js.map +1 -0
- package/dist/authorization/test-utils.d.ts +14 -0
- package/dist/authorization/test-utils.d.ts.map +1 -0
- package/dist/authorization/test-utils.js +13 -0
- package/dist/authorization/test-utils.js.map +1 -0
- package/dist/authorization/types.d.ts +55 -0
- package/dist/authorization/types.d.ts.map +1 -0
- package/dist/authorization/types.js +8 -0
- package/dist/authorization/types.js.map +1 -0
- package/dist/authorization/validation.d.ts +32 -0
- package/dist/authorization/validation.d.ts.map +1 -0
- package/dist/authorization/validation.js +53 -0
- package/dist/authorization/validation.js.map +1 -0
- package/dist/branch-metadata.d.ts +52 -0
- package/dist/branch-metadata.d.ts.map +1 -0
- package/dist/branch-metadata.js +125 -0
- package/dist/branch-metadata.js.map +1 -0
- package/dist/branch-registry.d.ts +44 -0
- package/dist/branch-registry.d.ts.map +1 -0
- package/dist/branch-registry.js +129 -0
- package/dist/branch-registry.js.map +1 -0
- package/dist/branch-schema-cache.d.ts +60 -0
- package/dist/branch-schema-cache.d.ts.map +1 -0
- package/dist/branch-schema-cache.js +142 -0
- package/dist/branch-schema-cache.js.map +1 -0
- package/dist/branch-workspace.d.ts +25 -0
- package/dist/branch-workspace.d.ts.map +1 -0
- package/dist/branch-workspace.js +87 -0
- package/dist/branch-workspace.js.map +1 -0
- package/dist/build/generate-ai-content.d.ts +28 -0
- package/dist/build/generate-ai-content.d.ts.map +1 -0
- package/dist/build/generate-ai-content.js +56 -0
- package/dist/build/generate-ai-content.js.map +1 -0
- package/dist/build/index.d.ts +8 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +7 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build-mode.d.ts +12 -0
- package/dist/build-mode.d.ts.map +1 -0
- package/dist/build-mode.js +25 -0
- package/dist/build-mode.js.map +1 -0
- package/dist/cli/generate-ai-content.d.ts +13 -0
- package/dist/cli/generate-ai-content.d.ts.map +1 -0
- package/dist/cli/generate-ai-content.js +78 -0
- package/dist/cli/generate-ai-content.js.map +1 -0
- package/dist/cli/init.d.ts +34 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +372 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/templates.d.ts +20 -0
- package/dist/cli/templates.d.ts.map +1 -0
- package/dist/cli/templates.js +38 -0
- package/dist/cli/templates.js.map +1 -0
- package/dist/client.d.ts +11 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +11 -0
- package/dist/client.js.map +1 -0
- package/dist/comment-store.d.ts +94 -0
- package/dist/comment-store.d.ts.map +1 -0
- package/dist/comment-store.js +234 -0
- package/dist/comment-store.js.map +1 -0
- package/dist/config/flatten.d.ts +29 -0
- package/dist/config/flatten.d.ts.map +1 -0
- package/dist/config/flatten.js +153 -0
- package/dist/config/flatten.js.map +1 -0
- package/dist/config/helpers.d.ts +48 -0
- package/dist/config/helpers.d.ts.map +1 -0
- package/dist/config/helpers.js +138 -0
- package/dist/config/helpers.js.map +1 -0
- package/dist/config/index.d.ts +21 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +23 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schemas/collection.d.ts +94 -0
- package/dist/config/schemas/collection.d.ts.map +1 -0
- package/dist/config/schemas/collection.js +57 -0
- package/dist/config/schemas/collection.js.map +1 -0
- package/dist/config/schemas/config.d.ts +304 -0
- package/dist/config/schemas/config.d.ts.map +1 -0
- package/dist/config/schemas/config.js +70 -0
- package/dist/config/schemas/config.js.map +1 -0
- package/dist/config/schemas/field.d.ts +276 -0
- package/dist/config/schemas/field.d.ts.map +1 -0
- package/dist/config/schemas/field.js +90 -0
- package/dist/config/schemas/field.js.map +1 -0
- package/dist/config/schemas/media.d.ts +48 -0
- package/dist/config/schemas/media.d.ts.map +1 -0
- package/dist/config/schemas/media.js +26 -0
- package/dist/config/schemas/media.js.map +1 -0
- package/dist/config/schemas/permissions.d.ts +76 -0
- package/dist/config/schemas/permissions.d.ts.map +1 -0
- package/dist/config/schemas/permissions.js +17 -0
- package/dist/config/schemas/permissions.js.map +1 -0
- package/dist/config/types.d.ts +272 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +24 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +19 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +66 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/config-test.d.ts +18 -0
- package/dist/config-test.d.ts.map +1 -0
- package/dist/config-test.js +42 -0
- package/dist/config-test.js.map +1 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +11 -0
- package/dist/config.js.map +1 -0
- package/dist/content-id-index.d.ts +152 -0
- package/dist/content-id-index.d.ts.map +1 -0
- package/dist/content-id-index.js +416 -0
- package/dist/content-id-index.js.map +1 -0
- package/dist/content-reader.d.ts +36 -0
- package/dist/content-reader.d.ts.map +1 -0
- package/dist/content-reader.js +149 -0
- package/dist/content-reader.js.map +1 -0
- package/dist/content-store.d.ts +129 -0
- package/dist/content-store.d.ts.map +1 -0
- package/dist/content-store.js +611 -0
- package/dist/content-store.js.map +1 -0
- package/dist/context.d.ts +44 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +69 -0
- package/dist/context.js.map +1 -0
- package/dist/editor/BranchManager.d.ts +62 -0
- package/dist/editor/BranchManager.d.ts.map +1 -0
- package/dist/editor/BranchManager.js +87 -0
- package/dist/editor/BranchManager.js.map +1 -0
- package/dist/editor/BranchManager.stories.d.ts +8 -0
- package/dist/editor/BranchManager.stories.d.ts.map +1 -0
- package/dist/editor/BranchManager.stories.js +74 -0
- package/dist/editor/BranchManager.stories.js.map +1 -0
- package/dist/editor/CanopyEditor.d.ts +10 -0
- package/dist/editor/CanopyEditor.d.ts.map +1 -0
- package/dist/editor/CanopyEditor.js +20 -0
- package/dist/editor/CanopyEditor.js.map +1 -0
- package/dist/editor/CanopyEditor.stories.d.ts +7 -0
- package/dist/editor/CanopyEditor.stories.d.ts.map +1 -0
- package/dist/editor/CanopyEditor.stories.js +99 -0
- package/dist/editor/CanopyEditor.stories.js.map +1 -0
- package/dist/editor/CanopyEditorPage.d.ts +12 -0
- package/dist/editor/CanopyEditorPage.d.ts.map +1 -0
- package/dist/editor/CanopyEditorPage.js +13 -0
- package/dist/editor/CanopyEditorPage.js.map +1 -0
- package/dist/editor/CommentsPanel.d.ts +21 -0
- package/dist/editor/CommentsPanel.d.ts.map +1 -0
- package/dist/editor/CommentsPanel.js +77 -0
- package/dist/editor/CommentsPanel.js.map +1 -0
- package/dist/editor/CommentsPanel.stories.d.ts +10 -0
- package/dist/editor/CommentsPanel.stories.d.ts.map +1 -0
- package/dist/editor/CommentsPanel.stories.js +175 -0
- package/dist/editor/CommentsPanel.stories.js.map +1 -0
- package/dist/editor/Editor.d.ts +72 -0
- package/dist/editor/Editor.d.ts.map +1 -0
- package/dist/editor/Editor.js +568 -0
- package/dist/editor/Editor.js.map +1 -0
- package/dist/editor/Editor.stories.d.ts +7 -0
- package/dist/editor/Editor.stories.d.ts.map +1 -0
- package/dist/editor/Editor.stories.js +95 -0
- package/dist/editor/Editor.stories.js.map +1 -0
- package/dist/editor/EditorPanes.d.ts +11 -0
- package/dist/editor/EditorPanes.d.ts.map +1 -0
- package/dist/editor/EditorPanes.js +99 -0
- package/dist/editor/EditorPanes.js.map +1 -0
- package/dist/editor/EditorPanes.stories.d.ts +7 -0
- package/dist/editor/EditorPanes.stories.d.ts.map +1 -0
- package/dist/editor/EditorPanes.stories.js +116 -0
- package/dist/editor/EditorPanes.stories.js.map +1 -0
- package/dist/editor/EntryNavigator.d.ts +48 -0
- package/dist/editor/EntryNavigator.d.ts.map +1 -0
- package/dist/editor/EntryNavigator.js +331 -0
- package/dist/editor/EntryNavigator.js.map +1 -0
- package/dist/editor/EntryNavigator.stories.d.ts +8 -0
- package/dist/editor/EntryNavigator.stories.d.ts.map +1 -0
- package/dist/editor/EntryNavigator.stories.js +42 -0
- package/dist/editor/EntryNavigator.stories.js.map +1 -0
- package/dist/editor/FormRenderer.d.ts +34 -0
- package/dist/editor/FormRenderer.d.ts.map +1 -0
- package/dist/editor/FormRenderer.js +127 -0
- package/dist/editor/FormRenderer.js.map +1 -0
- package/dist/editor/FormRenderer.stories.d.ts +7 -0
- package/dist/editor/FormRenderer.stories.d.ts.map +1 -0
- package/dist/editor/FormRenderer.stories.js +115 -0
- package/dist/editor/FormRenderer.stories.js.map +1 -0
- package/dist/editor/GroupManager.d.ts +7 -0
- package/dist/editor/GroupManager.d.ts.map +1 -0
- package/dist/editor/GroupManager.js +7 -0
- package/dist/editor/GroupManager.js.map +1 -0
- package/dist/editor/GroupManager.stories.d.ts +19 -0
- package/dist/editor/GroupManager.stories.d.ts.map +1 -0
- package/dist/editor/GroupManager.stories.js +265 -0
- package/dist/editor/GroupManager.stories.js.map +1 -0
- package/dist/editor/PermissionManager.d.ts +9 -0
- package/dist/editor/PermissionManager.d.ts.map +1 -0
- package/dist/editor/PermissionManager.js +9 -0
- package/dist/editor/PermissionManager.js.map +1 -0
- package/dist/editor/PermissionManager.stories.d.ts +20 -0
- package/dist/editor/PermissionManager.stories.d.ts.map +1 -0
- package/dist/editor/PermissionManager.stories.js +506 -0
- package/dist/editor/PermissionManager.stories.js.map +1 -0
- package/dist/editor/canopy-path.d.ts +17 -0
- package/dist/editor/canopy-path.d.ts.map +1 -0
- package/dist/editor/canopy-path.js +49 -0
- package/dist/editor/canopy-path.js.map +1 -0
- package/dist/editor/client-reference-resolver.d.ts +18 -0
- package/dist/editor/client-reference-resolver.d.ts.map +1 -0
- package/dist/editor/client-reference-resolver.js +87 -0
- package/dist/editor/client-reference-resolver.js.map +1 -0
- package/dist/editor/comments/BranchComments.d.ts +27 -0
- package/dist/editor/comments/BranchComments.d.ts.map +1 -0
- package/dist/editor/comments/BranchComments.js +26 -0
- package/dist/editor/comments/BranchComments.js.map +1 -0
- package/dist/editor/comments/EntryComments.d.ts +26 -0
- package/dist/editor/comments/EntryComments.d.ts.map +1 -0
- package/dist/editor/comments/EntryComments.js +26 -0
- package/dist/editor/comments/EntryComments.js.map +1 -0
- package/dist/editor/comments/FieldWrapper.d.ts +32 -0
- package/dist/editor/comments/FieldWrapper.d.ts.map +1 -0
- package/dist/editor/comments/FieldWrapper.js +41 -0
- package/dist/editor/comments/FieldWrapper.js.map +1 -0
- package/dist/editor/comments/FieldWrapper.stories.d.ts +10 -0
- package/dist/editor/comments/FieldWrapper.stories.d.ts.map +1 -0
- package/dist/editor/comments/FieldWrapper.stories.js +173 -0
- package/dist/editor/comments/FieldWrapper.stories.js.map +1 -0
- package/dist/editor/comments/InlineCommentThread.d.ts +23 -0
- package/dist/editor/comments/InlineCommentThread.d.ts.map +1 -0
- package/dist/editor/comments/InlineCommentThread.js +82 -0
- package/dist/editor/comments/InlineCommentThread.js.map +1 -0
- package/dist/editor/comments/ThreadCarousel.d.ts +110 -0
- package/dist/editor/comments/ThreadCarousel.d.ts.map +1 -0
- package/dist/editor/comments/ThreadCarousel.js +223 -0
- package/dist/editor/comments/ThreadCarousel.js.map +1 -0
- package/dist/editor/components/ConfirmDeleteModal.d.ts +15 -0
- package/dist/editor/components/ConfirmDeleteModal.d.ts.map +1 -0
- package/dist/editor/components/ConfirmDeleteModal.js +11 -0
- package/dist/editor/components/ConfirmDeleteModal.js.map +1 -0
- package/dist/editor/components/EditorContext.d.ts +35 -0
- package/dist/editor/components/EditorContext.d.ts.map +1 -0
- package/dist/editor/components/EditorContext.js +19 -0
- package/dist/editor/components/EditorContext.js.map +1 -0
- package/dist/editor/components/EditorFooter.d.ts +20 -0
- package/dist/editor/components/EditorFooter.d.ts.map +1 -0
- package/dist/editor/components/EditorFooter.js +15 -0
- package/dist/editor/components/EditorFooter.js.map +1 -0
- package/dist/editor/components/EditorHeader.d.ts +166 -0
- package/dist/editor/components/EditorHeader.d.ts.map +1 -0
- package/dist/editor/components/EditorHeader.js +99 -0
- package/dist/editor/components/EditorHeader.js.map +1 -0
- package/dist/editor/components/EditorSidebar.d.ts +76 -0
- package/dist/editor/components/EditorSidebar.d.ts.map +1 -0
- package/dist/editor/components/EditorSidebar.js +40 -0
- package/dist/editor/components/EditorSidebar.js.map +1 -0
- package/dist/editor/components/EntryCreateModal.d.ts +27 -0
- package/dist/editor/components/EntryCreateModal.d.ts.map +1 -0
- package/dist/editor/components/EntryCreateModal.js +78 -0
- package/dist/editor/components/EntryCreateModal.js.map +1 -0
- package/dist/editor/components/RenameEntryModal.d.ts +18 -0
- package/dist/editor/components/RenameEntryModal.d.ts.map +1 -0
- package/dist/editor/components/RenameEntryModal.js +62 -0
- package/dist/editor/components/RenameEntryModal.js.map +1 -0
- package/dist/editor/components/UserBadge.d.ts +28 -0
- package/dist/editor/components/UserBadge.d.ts.map +1 -0
- package/dist/editor/components/UserBadge.js +93 -0
- package/dist/editor/components/UserBadge.js.map +1 -0
- package/dist/editor/components/index.d.ts +4 -0
- package/dist/editor/components/index.d.ts.map +1 -0
- package/dist/editor/components/index.js +6 -0
- package/dist/editor/components/index.js.map +1 -0
- package/dist/editor/context/ApiClientContext.d.ts +33 -0
- package/dist/editor/context/ApiClientContext.d.ts.map +1 -0
- package/dist/editor/context/ApiClientContext.js +43 -0
- package/dist/editor/context/ApiClientContext.js.map +1 -0
- package/dist/editor/context/EditorStateContext.d.ts +93 -0
- package/dist/editor/context/EditorStateContext.d.ts.map +1 -0
- package/dist/editor/context/EditorStateContext.js +143 -0
- package/dist/editor/context/EditorStateContext.js.map +1 -0
- package/dist/editor/context/index.d.ts +20 -0
- package/dist/editor/context/index.d.ts.map +1 -0
- package/dist/editor/context/index.js +20 -0
- package/dist/editor/context/index.js.map +1 -0
- package/dist/editor/editor-config.d.ts +14 -0
- package/dist/editor/editor-config.d.ts.map +1 -0
- package/dist/editor/editor-config.js +79 -0
- package/dist/editor/editor-config.js.map +1 -0
- package/dist/editor/editor-utils.d.ts +92 -0
- package/dist/editor/editor-utils.d.ts.map +1 -0
- package/dist/editor/editor-utils.js +238 -0
- package/dist/editor/editor-utils.js.map +1 -0
- package/dist/editor/env.d.ts +5 -0
- package/dist/editor/env.d.ts.map +1 -0
- package/dist/editor/env.js +5 -0
- package/dist/editor/env.js.map +1 -0
- package/dist/editor/fields/BlockField.d.ts +19 -0
- package/dist/editor/fields/BlockField.d.ts.map +1 -0
- package/dist/editor/fields/BlockField.js +86 -0
- package/dist/editor/fields/BlockField.js.map +1 -0
- package/dist/editor/fields/BlockField.stories.d.ts +7 -0
- package/dist/editor/fields/BlockField.stories.d.ts.map +1 -0
- package/dist/editor/fields/BlockField.stories.js +50 -0
- package/dist/editor/fields/BlockField.stories.js.map +1 -0
- package/dist/editor/fields/CodeField.d.ts +12 -0
- package/dist/editor/fields/CodeField.d.ts.map +1 -0
- package/dist/editor/fields/CodeField.js +11 -0
- package/dist/editor/fields/CodeField.js.map +1 -0
- package/dist/editor/fields/MarkdownField.d.ts +11 -0
- package/dist/editor/fields/MarkdownField.d.ts.map +1 -0
- package/dist/editor/fields/MarkdownField.js +94 -0
- package/dist/editor/fields/MarkdownField.js.map +1 -0
- package/dist/editor/fields/ObjectField.d.ts +15 -0
- package/dist/editor/fields/ObjectField.d.ts.map +1 -0
- package/dist/editor/fields/ObjectField.js +12 -0
- package/dist/editor/fields/ObjectField.js.map +1 -0
- package/dist/editor/fields/ReferenceField.d.ts +20 -0
- package/dist/editor/fields/ReferenceField.d.ts.map +1 -0
- package/dist/editor/fields/ReferenceField.js +66 -0
- package/dist/editor/fields/ReferenceField.js.map +1 -0
- package/dist/editor/fields/SelectField.d.ts +18 -0
- package/dist/editor/fields/SelectField.d.ts.map +1 -0
- package/dist/editor/fields/SelectField.js +17 -0
- package/dist/editor/fields/SelectField.js.map +1 -0
- package/dist/editor/fields/TextField.d.ts +11 -0
- package/dist/editor/fields/TextField.d.ts.map +1 -0
- package/dist/editor/fields/TextField.js +10 -0
- package/dist/editor/fields/TextField.js.map +1 -0
- package/dist/editor/fields/ToggleField.d.ts +12 -0
- package/dist/editor/fields/ToggleField.d.ts.map +1 -0
- package/dist/editor/fields/ToggleField.js +10 -0
- package/dist/editor/fields/ToggleField.js.map +1 -0
- package/dist/editor/fields/fields.stories.d.ts +8 -0
- package/dist/editor/fields/fields.stories.d.ts.map +1 -0
- package/dist/editor/fields/fields.stories.js +34 -0
- package/dist/editor/fields/fields.stories.js.map +1 -0
- package/dist/editor/group-manager/ExternalGroupsTab.d.ts +16 -0
- package/dist/editor/group-manager/ExternalGroupsTab.d.ts.map +1 -0
- package/dist/editor/group-manager/ExternalGroupsTab.js +16 -0
- package/dist/editor/group-manager/ExternalGroupsTab.js.map +1 -0
- package/dist/editor/group-manager/GroupCard.d.ts +24 -0
- package/dist/editor/group-manager/GroupCard.d.ts.map +1 -0
- package/dist/editor/group-manager/GroupCard.js +9 -0
- package/dist/editor/group-manager/GroupCard.js.map +1 -0
- package/dist/editor/group-manager/GroupForm.d.ts +15 -0
- package/dist/editor/group-manager/GroupForm.d.ts.map +1 -0
- package/dist/editor/group-manager/GroupForm.js +7 -0
- package/dist/editor/group-manager/GroupForm.js.map +1 -0
- package/dist/editor/group-manager/InternalGroupsTab.d.ts +26 -0
- package/dist/editor/group-manager/InternalGroupsTab.d.ts.map +1 -0
- package/dist/editor/group-manager/InternalGroupsTab.js +18 -0
- package/dist/editor/group-manager/InternalGroupsTab.js.map +1 -0
- package/dist/editor/group-manager/MemberList.d.ts +23 -0
- package/dist/editor/group-manager/MemberList.d.ts.map +1 -0
- package/dist/editor/group-manager/MemberList.js +13 -0
- package/dist/editor/group-manager/MemberList.js.map +1 -0
- package/dist/editor/group-manager/hooks/useExternalGroupSearch.d.ts +16 -0
- package/dist/editor/group-manager/hooks/useExternalGroupSearch.d.ts.map +1 -0
- package/dist/editor/group-manager/hooks/useExternalGroupSearch.js +43 -0
- package/dist/editor/group-manager/hooks/useExternalGroupSearch.js.map +1 -0
- package/dist/editor/group-manager/hooks/useGroupState.d.ts +24 -0
- package/dist/editor/group-manager/hooks/useGroupState.d.ts.map +1 -0
- package/dist/editor/group-manager/hooks/useGroupState.js +97 -0
- package/dist/editor/group-manager/hooks/useGroupState.js.map +1 -0
- package/dist/editor/group-manager/hooks/useUserSearch.d.ts +20 -0
- package/dist/editor/group-manager/hooks/useUserSearch.d.ts.map +1 -0
- package/dist/editor/group-manager/hooks/useUserSearch.js +60 -0
- package/dist/editor/group-manager/hooks/useUserSearch.js.map +1 -0
- package/dist/editor/group-manager/index.d.ts +14 -0
- package/dist/editor/group-manager/index.d.ts.map +1 -0
- package/dist/editor/group-manager/index.js +71 -0
- package/dist/editor/group-manager/index.js.map +1 -0
- package/dist/editor/group-manager/types.d.ts +24 -0
- package/dist/editor/group-manager/types.d.ts.map +1 -0
- package/dist/editor/group-manager/types.js +5 -0
- package/dist/editor/group-manager/types.js.map +1 -0
- package/dist/editor/hooks/__test__/test-utils.d.ts +129 -0
- package/dist/editor/hooks/__test__/test-utils.d.ts.map +1 -0
- package/dist/editor/hooks/__test__/test-utils.js +157 -0
- package/dist/editor/hooks/__test__/test-utils.js.map +1 -0
- package/dist/editor/hooks/index.d.ts +12 -0
- package/dist/editor/hooks/index.d.ts.map +1 -0
- package/dist/editor/hooks/index.js +15 -0
- package/dist/editor/hooks/index.js.map +1 -0
- package/dist/editor/hooks/useBranchActions.d.ts +34 -0
- package/dist/editor/hooks/useBranchActions.d.ts.map +1 -0
- package/dist/editor/hooks/useBranchActions.js +95 -0
- package/dist/editor/hooks/useBranchActions.js.map +1 -0
- package/dist/editor/hooks/useBranchManager.d.ts +88 -0
- package/dist/editor/hooks/useBranchManager.d.ts.map +1 -0
- package/dist/editor/hooks/useBranchManager.js +245 -0
- package/dist/editor/hooks/useBranchManager.js.map +1 -0
- package/dist/editor/hooks/useCommentSystem.d.ts +93 -0
- package/dist/editor/hooks/useCommentSystem.d.ts.map +1 -0
- package/dist/editor/hooks/useCommentSystem.js +240 -0
- package/dist/editor/hooks/useCommentSystem.js.map +1 -0
- package/dist/editor/hooks/useDraftManager.d.ts +64 -0
- package/dist/editor/hooks/useDraftManager.d.ts.map +1 -0
- package/dist/editor/hooks/useDraftManager.js +228 -0
- package/dist/editor/hooks/useDraftManager.js.map +1 -0
- package/dist/editor/hooks/useEditorLayout.d.ts +34 -0
- package/dist/editor/hooks/useEditorLayout.d.ts.map +1 -0
- package/dist/editor/hooks/useEditorLayout.js +52 -0
- package/dist/editor/hooks/useEditorLayout.js.map +1 -0
- package/dist/editor/hooks/useEntryManager.d.ts +66 -0
- package/dist/editor/hooks/useEntryManager.d.ts.map +1 -0
- package/dist/editor/hooks/useEntryManager.js +305 -0
- package/dist/editor/hooks/useEntryManager.js.map +1 -0
- package/dist/editor/hooks/useGroupManager.d.ts +43 -0
- package/dist/editor/hooks/useGroupManager.d.ts.map +1 -0
- package/dist/editor/hooks/useGroupManager.js +122 -0
- package/dist/editor/hooks/useGroupManager.js.map +1 -0
- package/dist/editor/hooks/usePermissionManager.d.ts +40 -0
- package/dist/editor/hooks/usePermissionManager.d.ts.map +1 -0
- package/dist/editor/hooks/usePermissionManager.js +94 -0
- package/dist/editor/hooks/usePermissionManager.js.map +1 -0
- package/dist/editor/hooks/useReferenceResolution.d.ts +47 -0
- package/dist/editor/hooks/useReferenceResolution.d.ts.map +1 -0
- package/dist/editor/hooks/useReferenceResolution.js +207 -0
- package/dist/editor/hooks/useReferenceResolution.js.map +1 -0
- package/dist/editor/hooks/useSchemaManager.d.ts +46 -0
- package/dist/editor/hooks/useSchemaManager.d.ts.map +1 -0
- package/dist/editor/hooks/useSchemaManager.js +235 -0
- package/dist/editor/hooks/useSchemaManager.js.map +1 -0
- package/dist/editor/hooks/useUserContext.d.ts +22 -0
- package/dist/editor/hooks/useUserContext.d.ts.map +1 -0
- package/dist/editor/hooks/useUserContext.js +49 -0
- package/dist/editor/hooks/useUserContext.js.map +1 -0
- package/dist/editor/hooks/useUserMetadata.d.ts +16 -0
- package/dist/editor/hooks/useUserMetadata.d.ts.map +1 -0
- package/dist/editor/hooks/useUserMetadata.js +55 -0
- package/dist/editor/hooks/useUserMetadata.js.map +1 -0
- package/dist/editor/permission-manager/GroupSelector.d.ts +13 -0
- package/dist/editor/permission-manager/GroupSelector.d.ts.map +1 -0
- package/dist/editor/permission-manager/GroupSelector.js +22 -0
- package/dist/editor/permission-manager/GroupSelector.js.map +1 -0
- package/dist/editor/permission-manager/PermissionEditor.d.ts +34 -0
- package/dist/editor/permission-manager/PermissionEditor.d.ts.map +1 -0
- package/dist/editor/permission-manager/PermissionEditor.js +30 -0
- package/dist/editor/permission-manager/PermissionEditor.js.map +1 -0
- package/dist/editor/permission-manager/PermissionLevelBadge.d.ts +16 -0
- package/dist/editor/permission-manager/PermissionLevelBadge.d.ts.map +1 -0
- package/dist/editor/permission-manager/PermissionLevelBadge.js +22 -0
- package/dist/editor/permission-manager/PermissionLevelBadge.js.map +1 -0
- package/dist/editor/permission-manager/PermissionTree.d.ts +37 -0
- package/dist/editor/permission-manager/PermissionTree.d.ts.map +1 -0
- package/dist/editor/permission-manager/PermissionTree.js +45 -0
- package/dist/editor/permission-manager/PermissionTree.js.map +1 -0
- package/dist/editor/permission-manager/UserSelector.d.ts +16 -0
- package/dist/editor/permission-manager/UserSelector.d.ts.map +1 -0
- package/dist/editor/permission-manager/UserSelector.js +14 -0
- package/dist/editor/permission-manager/UserSelector.js.map +1 -0
- package/dist/editor/permission-manager/constants.d.ts +12 -0
- package/dist/editor/permission-manager/constants.d.ts.map +1 -0
- package/dist/editor/permission-manager/constants.js +9 -0
- package/dist/editor/permission-manager/constants.js.map +1 -0
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts +30 -0
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts.map +1 -0
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js +102 -0
- package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js.map +1 -0
- package/dist/editor/permission-manager/hooks/usePermissionTree.d.ts +41 -0
- package/dist/editor/permission-manager/hooks/usePermissionTree.d.ts.map +1 -0
- package/dist/editor/permission-manager/hooks/usePermissionTree.js +125 -0
- package/dist/editor/permission-manager/hooks/usePermissionTree.js.map +1 -0
- package/dist/editor/permission-manager/index.d.ts +14 -0
- package/dist/editor/permission-manager/index.d.ts.map +1 -0
- package/dist/editor/permission-manager/index.js +125 -0
- package/dist/editor/permission-manager/index.js.map +1 -0
- package/dist/editor/permission-manager/types.d.ts +53 -0
- package/dist/editor/permission-manager/types.d.ts.map +1 -0
- package/dist/editor/permission-manager/types.js +5 -0
- package/dist/editor/permission-manager/types.js.map +1 -0
- package/dist/editor/permission-manager/utils.d.ts +60 -0
- package/dist/editor/permission-manager/utils.d.ts.map +1 -0
- package/dist/editor/permission-manager/utils.js +152 -0
- package/dist/editor/permission-manager/utils.js.map +1 -0
- package/dist/editor/preview-bridge.d.ts +64 -0
- package/dist/editor/preview-bridge.d.ts.map +1 -0
- package/dist/editor/preview-bridge.js +225 -0
- package/dist/editor/preview-bridge.js.map +1 -0
- package/dist/editor/schema-editor/CollectionEditor.d.ts +53 -0
- package/dist/editor/schema-editor/CollectionEditor.d.ts.map +1 -0
- package/dist/editor/schema-editor/CollectionEditor.js +220 -0
- package/dist/editor/schema-editor/CollectionEditor.js.map +1 -0
- package/dist/editor/schema-editor/EntryTypeEditor.d.ts +39 -0
- package/dist/editor/schema-editor/EntryTypeEditor.d.ts.map +1 -0
- package/dist/editor/schema-editor/EntryTypeEditor.js +161 -0
- package/dist/editor/schema-editor/EntryTypeEditor.js.map +1 -0
- package/dist/editor/schema-editor/index.d.ts +10 -0
- package/dist/editor/schema-editor/index.d.ts.map +1 -0
- package/dist/editor/schema-editor/index.js +10 -0
- package/dist/editor/schema-editor/index.js.map +1 -0
- package/dist/editor/setup-test-dom.d.ts +1 -0
- package/dist/editor/setup-test-dom.d.ts.map +1 -0
- package/dist/editor/setup-test-dom.js +12 -0
- package/dist/editor/setup-test-dom.js.map +1 -0
- package/dist/editor/test-setup.d.ts +6 -0
- package/dist/editor/test-setup.d.ts.map +1 -0
- package/dist/editor/test-setup.js +34 -0
- package/dist/editor/test-setup.js.map +1 -0
- package/dist/editor/theme.d.ts +165 -0
- package/dist/editor/theme.d.ts.map +1 -0
- package/dist/editor/theme.js +66 -0
- package/dist/editor/theme.js.map +1 -0
- package/dist/editor/utils/env.d.ts +23 -0
- package/dist/editor/utils/env.d.ts.map +1 -0
- package/dist/editor/utils/env.js +38 -0
- package/dist/editor/utils/env.js.map +1 -0
- package/dist/entry-schema-registry.d.ts +44 -0
- package/dist/entry-schema-registry.d.ts.map +1 -0
- package/dist/entry-schema-registry.js +101 -0
- package/dist/entry-schema-registry.js.map +1 -0
- package/dist/entry-schema.d.ts +74 -0
- package/dist/entry-schema.d.ts.map +1 -0
- package/dist/entry-schema.js +5 -0
- package/dist/entry-schema.js.map +1 -0
- package/dist/git-manager.d.ts +144 -0
- package/dist/git-manager.d.ts.map +1 -0
- package/dist/git-manager.js +563 -0
- package/dist/git-manager.js.map +1 -0
- package/dist/github-service.d.ts +93 -0
- package/dist/github-service.d.ts.map +1 -0
- package/dist/github-service.js +228 -0
- package/dist/github-service.js.map +1 -0
- package/dist/http/handler.d.ts +57 -0
- package/dist/http/handler.d.ts.map +1 -0
- package/dist/http/handler.js +197 -0
- package/dist/http/handler.js.map +1 -0
- package/dist/http/index.d.ts +7 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +4 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/router.d.ts +49 -0
- package/dist/http/router.d.ts.map +1 -0
- package/dist/http/router.js +100 -0
- package/dist/http/router.js.map +1 -0
- package/dist/http/types.d.ts +34 -0
- package/dist/http/types.d.ts.map +1 -0
- package/dist/http/types.js +7 -0
- package/dist/http/types.js.map +1 -0
- package/dist/id.d.ts +17 -0
- package/dist/id.d.ts.map +1 -0
- package/dist/id.js +20 -0
- package/dist/id.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/operating-mode/client-safe-strategy.d.ts +57 -0
- package/dist/operating-mode/client-safe-strategy.d.ts.map +1 -0
- package/dist/operating-mode/client-safe-strategy.js +154 -0
- package/dist/operating-mode/client-safe-strategy.js.map +1 -0
- package/dist/operating-mode/client-unsafe-strategy.d.ts +26 -0
- package/dist/operating-mode/client-unsafe-strategy.d.ts.map +1 -0
- package/dist/operating-mode/client-unsafe-strategy.js +234 -0
- package/dist/operating-mode/client-unsafe-strategy.js.map +1 -0
- package/dist/operating-mode/client.d.ts +13 -0
- package/dist/operating-mode/client.d.ts.map +1 -0
- package/dist/operating-mode/client.js +11 -0
- package/dist/operating-mode/client.js.map +1 -0
- package/dist/operating-mode/index.d.ts +28 -0
- package/dist/operating-mode/index.d.ts.map +1 -0
- package/dist/operating-mode/index.js +28 -0
- package/dist/operating-mode/index.js.map +1 -0
- package/dist/operating-mode/types.d.ts +130 -0
- package/dist/operating-mode/types.d.ts.map +1 -0
- package/dist/operating-mode/types.js +9 -0
- package/dist/operating-mode/types.js.map +1 -0
- package/dist/paths/branch.d.ts +45 -0
- package/dist/paths/branch.d.ts.map +1 -0
- package/dist/paths/branch.js +84 -0
- package/dist/paths/branch.js.map +1 -0
- package/dist/paths/index.d.ts +22 -0
- package/dist/paths/index.d.ts.map +1 -0
- package/dist/paths/index.js +30 -0
- package/dist/paths/index.js.map +1 -0
- package/dist/paths/normalize-server.d.ts +20 -0
- package/dist/paths/normalize-server.d.ts.map +1 -0
- package/dist/paths/normalize-server.js +35 -0
- package/dist/paths/normalize-server.js.map +1 -0
- package/dist/paths/normalize.d.ts +59 -0
- package/dist/paths/normalize.d.ts.map +1 -0
- package/dist/paths/normalize.js +96 -0
- package/dist/paths/normalize.js.map +1 -0
- package/dist/paths/resolve.d.ts +30 -0
- package/dist/paths/resolve.d.ts.map +1 -0
- package/dist/paths/resolve.js +51 -0
- package/dist/paths/resolve.js.map +1 -0
- package/dist/paths/test-utils.d.ts +24 -0
- package/dist/paths/test-utils.d.ts.map +1 -0
- package/dist/paths/test-utils.js +23 -0
- package/dist/paths/test-utils.js.map +1 -0
- package/dist/paths/types.d.ts +72 -0
- package/dist/paths/types.d.ts.map +1 -0
- package/dist/paths/types.js +13 -0
- package/dist/paths/types.js.map +1 -0
- package/dist/paths/validation.d.ts +181 -0
- package/dist/paths/validation.d.ts.map +1 -0
- package/dist/paths/validation.js +322 -0
- package/dist/paths/validation.js.map +1 -0
- package/dist/reference-resolver.d.ts +58 -0
- package/dist/reference-resolver.d.ts.map +1 -0
- package/dist/reference-resolver.js +118 -0
- package/dist/reference-resolver.js.map +1 -0
- package/dist/schema/index.d.ts +18 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +19 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/meta-loader.d.ts +73 -0
- package/dist/schema/meta-loader.d.ts.map +1 -0
- package/dist/schema/meta-loader.js +273 -0
- package/dist/schema/meta-loader.js.map +1 -0
- package/dist/schema/resolver.d.ts +42 -0
- package/dist/schema/resolver.d.ts.map +1 -0
- package/dist/schema/resolver.js +70 -0
- package/dist/schema/resolver.js.map +1 -0
- package/dist/schema/schema-store-types.d.ts +48 -0
- package/dist/schema/schema-store-types.d.ts.map +1 -0
- package/dist/schema/schema-store-types.js +8 -0
- package/dist/schema/schema-store-types.js.map +1 -0
- package/dist/schema/schema-store.d.ts +249 -0
- package/dist/schema/schema-store.d.ts.map +1 -0
- package/dist/schema/schema-store.js +624 -0
- package/dist/schema/schema-store.js.map +1 -0
- package/dist/schema/types.d.ts +30 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +5 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/server.d.ts +11 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +10 -0
- package/dist/server.js.map +1 -0
- package/dist/services.d.ts +94 -0
- package/dist/services.d.ts.map +1 -0
- package/dist/services.js +251 -0
- package/dist/services.js.map +1 -0
- package/dist/settings-branch-utils.d.ts +21 -0
- package/dist/settings-branch-utils.d.ts.map +1 -0
- package/dist/settings-branch-utils.js +33 -0
- package/dist/settings-branch-utils.js.map +1 -0
- package/dist/settings-workspace.d.ts +30 -0
- package/dist/settings-workspace.d.ts.map +1 -0
- package/dist/settings-workspace.js +137 -0
- package/dist/settings-workspace.js.map +1 -0
- package/dist/task-queue/index.d.ts +3 -0
- package/dist/task-queue/index.d.ts.map +1 -0
- package/dist/task-queue/index.js +2 -0
- package/dist/task-queue/index.js.map +1 -0
- package/dist/task-queue/task-queue.d.ts +81 -0
- package/dist/task-queue/task-queue.d.ts.map +1 -0
- package/dist/task-queue/task-queue.js +434 -0
- package/dist/task-queue/task-queue.js.map +1 -0
- package/dist/task-queue/types.d.ts +39 -0
- package/dist/task-queue/types.d.ts.map +1 -0
- package/dist/task-queue/types.js +2 -0
- package/dist/task-queue/types.js.map +1 -0
- package/dist/test-utils/api-test-helpers.d.ts +238 -0
- package/dist/test-utils/api-test-helpers.d.ts.map +1 -0
- package/dist/test-utils/api-test-helpers.js +347 -0
- package/dist/test-utils/api-test-helpers.js.map +1 -0
- package/dist/test-utils/console-spy.d.ts +56 -0
- package/dist/test-utils/console-spy.d.ts.map +1 -0
- package/dist/test-utils/console-spy.js +81 -0
- package/dist/test-utils/console-spy.js.map +1 -0
- package/dist/test-utils/git-helpers.d.ts +21 -0
- package/dist/test-utils/git-helpers.d.ts.map +1 -0
- package/dist/test-utils/git-helpers.js +23 -0
- package/dist/test-utils/git-helpers.js.map +1 -0
- package/dist/test-utils/index.d.ts +5 -0
- package/dist/test-utils/index.d.ts.map +1 -0
- package/dist/test-utils/index.js +4 -0
- package/dist/test-utils/index.js.map +1 -0
- package/dist/types.d.ts +46 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/user.d.ts +62 -0
- package/dist/user.d.ts.map +1 -0
- package/dist/user.js +69 -0
- package/dist/user.js.map +1 -0
- package/dist/utils/debug.d.ts +44 -0
- package/dist/utils/debug.d.ts.map +1 -0
- package/dist/utils/debug.js +99 -0
- package/dist/utils/debug.js.map +1 -0
- package/dist/utils/error.d.ts +63 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/error.js +79 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/format.d.ts +8 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +13 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/validation/deletion-checker.d.ts +66 -0
- package/dist/validation/deletion-checker.d.ts.map +1 -0
- package/dist/validation/deletion-checker.js +163 -0
- package/dist/validation/deletion-checker.js.map +1 -0
- package/dist/validation/field-traversal.d.ts +62 -0
- package/dist/validation/field-traversal.d.ts.map +1 -0
- package/dist/validation/field-traversal.js +95 -0
- package/dist/validation/field-traversal.js.map +1 -0
- package/dist/validation/reference-validator.d.ts +45 -0
- package/dist/validation/reference-validator.d.ts.map +1 -0
- package/dist/validation/reference-validator.js +140 -0
- package/dist/validation/reference-validator.js.map +1 -0
- package/dist/worker/cms-worker.d.ts +122 -0
- package/dist/worker/cms-worker.d.ts.map +1 -0
- package/dist/worker/cms-worker.js +660 -0
- package/dist/worker/cms-worker.js.map +1 -0
- package/dist/worker/task-queue-config.d.ts +11 -0
- package/dist/worker/task-queue-config.d.ts.map +1 -0
- package/dist/worker/task-queue-config.js +24 -0
- package/dist/worker/task-queue-config.js.map +1 -0
- package/dist/worker/task-queue.d.ts +18 -0
- package/dist/worker/task-queue.d.ts.map +1 -0
- package/dist/worker/task-queue.js +20 -0
- package/dist/worker/task-queue.js.map +1 -0
- package/package.json +144 -0
- package/src/__integration__/errors/invalid-content.test.ts +238 -0
- package/src/__integration__/errors/permission-denied.test.ts +220 -0
- package/src/__integration__/fixtures/content-seeds.ts +105 -0
- package/src/__integration__/fixtures/schemas.ts +67 -0
- package/src/__integration__/initialization/prod-sim-init.test.ts +139 -0
- package/src/__integration__/permissions/path-permissions.test.ts +314 -0
- package/src/__integration__/permissions/role-permissions.test.ts +354 -0
- package/src/__integration__/permissions/settings-branch-isolation.test.ts +317 -0
- package/src/__integration__/settings/groups-api.test.ts +403 -0
- package/src/__integration__/test-utils/api-client.ts +167 -0
- package/src/__integration__/test-utils/multi-user.ts +129 -0
- package/src/__integration__/test-utils/test-workspace.ts +130 -0
- package/src/__integration__/user/user-context.test.ts +174 -0
- package/src/__integration__/validation/input-validation.test.ts +166 -0
- package/src/__integration__/workflows/api-editing-workflow.test.ts +244 -0
- package/src/__integration__/workflows/conflict-resolution.test.ts +259 -0
- package/src/__integration__/workflows/editing-workflow.test.ts +205 -0
- package/src/__integration__/workflows/review-workflow.test.ts +260 -0
- package/src/ai/__tests__/build.integration.test.ts +224 -0
- package/src/ai/__tests__/generate.integration.test.ts +495 -0
- package/src/ai/__tests__/handler.integration.test.ts +212 -0
- package/src/ai/__tests__/json-to-markdown.test.ts +553 -0
- package/src/ai/generate.ts +410 -0
- package/src/ai/handler.ts +123 -0
- package/src/ai/index.ts +26 -0
- package/src/ai/json-to-markdown.ts +424 -0
- package/src/ai/resolve-branch.ts +34 -0
- package/src/ai/types.ts +160 -0
- package/src/api/AGENTS.md +81 -0
- package/src/api/__test__/mock-client.ts +404 -0
- package/src/api/assets.test.ts +140 -0
- package/src/api/assets.ts +154 -0
- package/src/api/branch-merge.test.ts +163 -0
- package/src/api/branch-merge.ts +113 -0
- package/src/api/branch-review.test.ts +297 -0
- package/src/api/branch-review.ts +136 -0
- package/src/api/branch-status.test.ts +85 -0
- package/src/api/branch-status.ts +153 -0
- package/src/api/branch-withdraw.test.ts +146 -0
- package/src/api/branch-withdraw.ts +81 -0
- package/src/api/branch-workflow.integration.test.ts +578 -0
- package/src/api/branch.test.ts +620 -0
- package/src/api/branch.ts +492 -0
- package/src/api/client.test.ts +349 -0
- package/src/api/client.ts +506 -0
- package/src/api/comments.test.ts +285 -0
- package/src/api/comments.ts +210 -0
- package/src/api/content.test.ts +345 -0
- package/src/api/content.ts +454 -0
- package/src/api/entries.test.ts +1339 -0
- package/src/api/entries.ts +650 -0
- package/src/api/github-sync.ts +144 -0
- package/src/api/groups.test.ts +1013 -0
- package/src/api/groups.ts +375 -0
- package/src/api/guards.test.ts +533 -0
- package/src/api/guards.ts +271 -0
- package/src/api/index.ts +87 -0
- package/src/api/permissions.test.ts +766 -0
- package/src/api/permissions.ts +334 -0
- package/src/api/reference-options.ts +118 -0
- package/src/api/resolve-references.ts +107 -0
- package/src/api/route-builder.ts +289 -0
- package/src/api/schema.test.ts +840 -0
- package/src/api/schema.ts +936 -0
- package/src/api/security.test.ts +233 -0
- package/src/api/settings-helpers.ts +84 -0
- package/src/api/types.ts +40 -0
- package/src/api/user.test.ts +127 -0
- package/src/api/user.ts +42 -0
- package/src/api/validators.test.ts +275 -0
- package/src/api/validators.ts +176 -0
- package/src/asset-store.test.ts +37 -0
- package/src/asset-store.ts +110 -0
- package/src/auth/cache.ts +7 -0
- package/src/auth/caching-auth-plugin.test.ts +154 -0
- package/src/auth/caching-auth-plugin.ts +109 -0
- package/src/auth/context-helpers.ts +75 -0
- package/src/auth/file-based-auth-cache.test.ts +257 -0
- package/src/auth/file-based-auth-cache.ts +279 -0
- package/src/auth/index.ts +12 -0
- package/src/auth/plugin.ts +51 -0
- package/src/auth/types.ts +38 -0
- package/src/authorization/__tests__/branch.test.ts +260 -0
- package/src/authorization/__tests__/content.test.ts +142 -0
- package/src/authorization/__tests__/path.test.ts +133 -0
- package/src/authorization/__tests__/permissions-loader.test.ts +200 -0
- package/src/authorization/branch.ts +94 -0
- package/src/authorization/content.ts +93 -0
- package/src/authorization/groups/index.ts +11 -0
- package/src/authorization/groups/loader.ts +127 -0
- package/src/authorization/groups/schema.ts +48 -0
- package/src/authorization/helpers.ts +48 -0
- package/src/authorization/index.ts +84 -0
- package/src/authorization/path.ts +112 -0
- package/src/authorization/permissions/index.ts +11 -0
- package/src/authorization/permissions/loader.ts +116 -0
- package/src/authorization/permissions/schema.ts +66 -0
- package/src/authorization/test-utils.ts +15 -0
- package/src/authorization/types.ts +66 -0
- package/src/authorization/validation.test.ts +100 -0
- package/src/authorization/validation.ts +62 -0
- package/src/branch-metadata.test.ts +168 -0
- package/src/branch-metadata.ts +166 -0
- package/src/branch-registry.test.ts +248 -0
- package/src/branch-registry.ts +152 -0
- package/src/branch-schema-cache.test.ts +275 -0
- package/src/branch-schema-cache.ts +189 -0
- package/src/branch-workspace.test.ts +183 -0
- package/src/branch-workspace.ts +124 -0
- package/src/build/generate-ai-content.ts +78 -0
- package/src/build/index.ts +8 -0
- package/src/build-mode.ts +27 -0
- package/src/cli/generate-ai-content.ts +100 -0
- package/src/cli/init.test.ts +240 -0
- package/src/cli/init.ts +457 -0
- package/src/cli/templates/Dockerfile.cms.template +19 -0
- package/src/cli/templates/canopy.ts.template +55 -0
- package/src/cli/templates/canopycms.config.ts.template +11 -0
- package/src/cli/templates/deploy-cms.yml.template +27 -0
- package/src/cli/templates/edit-page.tsx.template +32 -0
- package/src/cli/templates/route.ts.template +12 -0
- package/src/cli/templates/schemas.ts.template +16 -0
- package/src/cli/templates.ts +47 -0
- package/src/client.ts +12 -0
- package/src/comment-store.test.ts +442 -0
- package/src/comment-store.ts +301 -0
- package/src/config/__tests__/config.test.ts +513 -0
- package/src/config/flatten.ts +174 -0
- package/src/config/helpers.ts +167 -0
- package/src/config/index.ts +86 -0
- package/src/config/schemas/collection.ts +67 -0
- package/src/config/schemas/config.ts +77 -0
- package/src/config/schemas/field.ts +108 -0
- package/src/config/schemas/media.ts +27 -0
- package/src/config/schemas/permissions.ts +21 -0
- package/src/config/types.ts +321 -0
- package/src/config/validation.ts +70 -0
- package/src/config-test.ts +65 -0
- package/src/config.ts +11 -0
- package/src/content-id-index.test.ts +512 -0
- package/src/content-id-index.ts +479 -0
- package/src/content-reader.test.ts +478 -0
- package/src/content-reader.ts +214 -0
- package/src/content-store.test.ts +1126 -0
- package/src/content-store.ts +793 -0
- package/src/context.ts +111 -0
- package/src/editor/BranchManager.stories.tsx +80 -0
- package/src/editor/BranchManager.test.tsx +324 -0
- package/src/editor/BranchManager.tsx +461 -0
- package/src/editor/CanopyEditor.stories.tsx +128 -0
- package/src/editor/CanopyEditor.test.tsx +81 -0
- package/src/editor/CanopyEditor.tsx +73 -0
- package/src/editor/CanopyEditorPage.test.tsx +59 -0
- package/src/editor/CanopyEditorPage.tsx +25 -0
- package/src/editor/CommentsPanel.stories.tsx +184 -0
- package/src/editor/CommentsPanel.tsx +338 -0
- package/src/editor/Editor.integration.test.tsx +227 -0
- package/src/editor/Editor.stories.tsx +119 -0
- package/src/editor/Editor.tsx +1221 -0
- package/src/editor/EditorPanes.stories.tsx +256 -0
- package/src/editor/EditorPanes.test.tsx +77 -0
- package/src/editor/EditorPanes.tsx +180 -0
- package/src/editor/EntryNavigator.stories.tsx +65 -0
- package/src/editor/EntryNavigator.test.tsx +598 -0
- package/src/editor/EntryNavigator.tsx +665 -0
- package/src/editor/FormRenderer.stories.tsx +212 -0
- package/src/editor/FormRenderer.test.tsx +194 -0
- package/src/editor/FormRenderer.tsx +432 -0
- package/src/editor/GroupManager.stories.tsx +301 -0
- package/src/editor/GroupManager.test.tsx +682 -0
- package/src/editor/GroupManager.tsx +9 -0
- package/src/editor/PermissionManager.stories.tsx +539 -0
- package/src/editor/PermissionManager.test.tsx +864 -0
- package/src/editor/PermissionManager.tsx +12 -0
- package/src/editor/canopy-path.test.ts +23 -0
- package/src/editor/canopy-path.ts +52 -0
- package/src/editor/client-reference-resolver.ts +118 -0
- package/src/editor/comments/BranchComments.tsx +93 -0
- package/src/editor/comments/EntryComments.tsx +94 -0
- package/src/editor/comments/FieldWrapper.stories.tsx +210 -0
- package/src/editor/comments/FieldWrapper.tsx +129 -0
- package/src/editor/comments/InlineCommentThread.test.tsx +384 -0
- package/src/editor/comments/InlineCommentThread.tsx +246 -0
- package/src/editor/comments/ThreadCarousel.test.tsx +393 -0
- package/src/editor/comments/ThreadCarousel.tsx +525 -0
- package/src/editor/components/ConfirmDeleteModal.tsx +49 -0
- package/src/editor/components/EditorContext.tsx +49 -0
- package/src/editor/components/EditorFooter.tsx +47 -0
- package/src/editor/components/EditorHeader.tsx +492 -0
- package/src/editor/components/EditorSidebar.tsx +193 -0
- package/src/editor/components/EntryCreateModal.tsx +193 -0
- package/src/editor/components/RenameEntryModal.tsx +152 -0
- package/src/editor/components/UserBadge.test.tsx +274 -0
- package/src/editor/components/UserBadge.tsx +240 -0
- package/src/editor/components/index.ts +6 -0
- package/src/editor/context/ApiClientContext.tsx +56 -0
- package/src/editor/context/EditorStateContext.tsx +221 -0
- package/src/editor/context/index.ts +40 -0
- package/src/editor/editor-config.test.ts +385 -0
- package/src/editor/editor-config.ts +94 -0
- package/src/editor/editor-utils.test.ts +772 -0
- package/src/editor/editor-utils.ts +303 -0
- package/src/editor/env.ts +4 -0
- package/src/editor/fields/BlockField.stories.tsx +79 -0
- package/src/editor/fields/BlockField.tsx +267 -0
- package/src/editor/fields/CodeField.tsx +41 -0
- package/src/editor/fields/MarkdownField.tsx +205 -0
- package/src/editor/fields/ObjectField.tsx +71 -0
- package/src/editor/fields/ReferenceField.tsx +138 -0
- package/src/editor/fields/SelectField.tsx +76 -0
- package/src/editor/fields/TextField.tsx +35 -0
- package/src/editor/fields/ToggleField.tsx +37 -0
- package/src/editor/fields/fields.stories.tsx +40 -0
- package/src/editor/group-manager/ExternalGroupsTab.tsx +114 -0
- package/src/editor/group-manager/GroupCard.tsx +102 -0
- package/src/editor/group-manager/GroupForm.tsx +66 -0
- package/src/editor/group-manager/InternalGroupsTab.tsx +147 -0
- package/src/editor/group-manager/MemberList.tsx +184 -0
- package/src/editor/group-manager/hooks/useExternalGroupSearch.ts +63 -0
- package/src/editor/group-manager/hooks/useGroupState.ts +134 -0
- package/src/editor/group-manager/hooks/useUserSearch.ts +84 -0
- package/src/editor/group-manager/index.tsx +210 -0
- package/src/editor/group-manager/types.ts +28 -0
- package/src/editor/hooks/README.md +26 -0
- package/src/editor/hooks/__test__/test-utils.tsx +183 -0
- package/src/editor/hooks/index.ts +23 -0
- package/src/editor/hooks/useBranchActions.test.tsx +267 -0
- package/src/editor/hooks/useBranchActions.tsx +121 -0
- package/src/editor/hooks/useBranchManager.test.tsx +391 -0
- package/src/editor/hooks/useBranchManager.tsx +326 -0
- package/src/editor/hooks/useCommentSystem.test.ts +615 -0
- package/src/editor/hooks/useCommentSystem.ts +347 -0
- package/src/editor/hooks/useDraftManager.test.ts +375 -0
- package/src/editor/hooks/useDraftManager.ts +259 -0
- package/src/editor/hooks/useEditorLayout.test.ts +147 -0
- package/src/editor/hooks/useEditorLayout.ts +67 -0
- package/src/editor/hooks/useEntryManager.test.ts +588 -0
- package/src/editor/hooks/useEntryManager.ts +387 -0
- package/src/editor/hooks/useGroupManager.test.ts +277 -0
- package/src/editor/hooks/useGroupManager.ts +139 -0
- package/src/editor/hooks/usePermissionManager.test.ts +211 -0
- package/src/editor/hooks/usePermissionManager.ts +113 -0
- package/src/editor/hooks/useReferenceResolution.ts +248 -0
- package/src/editor/hooks/useSchemaManager.test.ts +370 -0
- package/src/editor/hooks/useSchemaManager.ts +310 -0
- package/src/editor/hooks/useUserContext.tsx +57 -0
- package/src/editor/hooks/useUserMetadata.test.ts +191 -0
- package/src/editor/hooks/useUserMetadata.ts +71 -0
- package/src/editor/permission-manager/GroupSelector.tsx +73 -0
- package/src/editor/permission-manager/PermissionEditor.tsx +321 -0
- package/src/editor/permission-manager/PermissionLevelBadge.tsx +53 -0
- package/src/editor/permission-manager/PermissionTree.tsx +237 -0
- package/src/editor/permission-manager/UserSelector.tsx +95 -0
- package/src/editor/permission-manager/constants.tsx +18 -0
- package/src/editor/permission-manager/hooks/useGroupsAndUsers.ts +153 -0
- package/src/editor/permission-manager/hooks/usePermissionTree.ts +200 -0
- package/src/editor/permission-manager/index.tsx +294 -0
- package/src/editor/permission-manager/types.ts +58 -0
- package/src/editor/permission-manager/utils.ts +179 -0
- package/src/editor/preview-bridge.test.tsx +50 -0
- package/src/editor/preview-bridge.tsx +294 -0
- package/src/editor/schema-editor/CollectionEditor.test.tsx +238 -0
- package/src/editor/schema-editor/CollectionEditor.tsx +520 -0
- package/src/editor/schema-editor/EntryTypeEditor.test.tsx +215 -0
- package/src/editor/schema-editor/EntryTypeEditor.tsx +367 -0
- package/src/editor/schema-editor/index.ts +19 -0
- package/src/editor/setup-test-dom.ts +10 -0
- package/src/editor/test-setup.ts +33 -0
- package/src/editor/theme.tsx +119 -0
- package/src/editor/utils/env.ts +39 -0
- package/src/entry-schema-registry.test.ts +281 -0
- package/src/entry-schema-registry.ts +121 -0
- package/src/entry-schema.ts +84 -0
- package/src/git-manager.test.ts +552 -0
- package/src/git-manager.ts +667 -0
- package/src/github-service.test.ts +312 -0
- package/src/github-service.ts +295 -0
- package/src/http/handler.test.ts +275 -0
- package/src/http/handler.ts +280 -0
- package/src/http/index.ts +11 -0
- package/src/http/router.ts +164 -0
- package/src/http/types.ts +44 -0
- package/src/id.test.ts +48 -0
- package/src/id.ts +22 -0
- package/src/index.ts +26 -0
- package/src/operating-mode/__tests__/strategies.test.ts +511 -0
- package/src/operating-mode/client-safe-strategy.ts +184 -0
- package/src/operating-mode/client-unsafe-strategy.ts +303 -0
- package/src/operating-mode/client.ts +13 -0
- package/src/operating-mode/index.ts +34 -0
- package/src/operating-mode/types.ts +186 -0
- package/src/paths/__tests__/branch.test.ts +53 -0
- package/src/paths/__tests__/normalize.test.ts +141 -0
- package/src/paths/__tests__/resolve.test.ts +207 -0
- package/src/paths/__tests__/validation.test.ts +61 -0
- package/src/paths/branch.ts +115 -0
- package/src/paths/index.ts +73 -0
- package/src/paths/normalize-server.ts +40 -0
- package/src/paths/normalize.ts +107 -0
- package/src/paths/resolve.ts +61 -0
- package/src/paths/test-utils.ts +37 -0
- package/src/paths/types.ts +68 -0
- package/src/paths/validation.test.ts +480 -0
- package/src/paths/validation.ts +391 -0
- package/src/reference-resolver.test.ts +107 -0
- package/src/reference-resolver.ts +157 -0
- package/src/schema/index.ts +29 -0
- package/src/schema/meta-loader.ts +366 -0
- package/src/schema/resolver.ts +83 -0
- package/src/schema/schema-store-types.ts +56 -0
- package/src/schema/schema-store.test.ts +816 -0
- package/src/schema/schema-store.ts +795 -0
- package/src/schema/types.ts +33 -0
- package/src/schema-meta-loader.test.ts +447 -0
- package/src/server.ts +15 -0
- package/src/services.test.ts +559 -0
- package/src/services.ts +373 -0
- package/src/settings-branch-utils.ts +53 -0
- package/src/settings-workspace.ts +156 -0
- package/src/task-queue/README.md +144 -0
- package/src/task-queue/index.ts +14 -0
- package/src/task-queue/task-queue.test.ts +524 -0
- package/src/task-queue/task-queue.ts +514 -0
- package/src/task-queue/types.ts +41 -0
- package/src/test-utils/api-test-helpers.ts +445 -0
- package/src/test-utils/console-spy.test.ts +14 -0
- package/src/test-utils/console-spy.ts +125 -0
- package/src/test-utils/git-helpers.ts +31 -0
- package/src/test-utils/index.ts +4 -0
- package/src/types.ts +54 -0
- package/src/user.ts +118 -0
- package/src/utils/debug.test.ts +114 -0
- package/src/utils/debug.ts +127 -0
- package/src/utils/error.test.ts +92 -0
- package/src/utils/error.ts +83 -0
- package/src/utils/format.ts +12 -0
- package/src/validation/__tests__/field-traversal.test.ts +263 -0
- package/src/validation/deletion-checker.ts +234 -0
- package/src/validation/field-traversal.ts +146 -0
- package/src/validation/reference-validator.ts +168 -0
- package/src/worker/cms-worker-rebase.test.ts +473 -0
- package/src/worker/cms-worker.ts +777 -0
- package/src/worker/integration.test.ts +289 -0
- package/src/worker/task-queue-config.ts +25 -0
- package/src/worker/task-queue.test.ts +452 -0
- package/src/worker/task-queue.ts +58 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { extractSlugFromFilename } from './content-id-index';
|
|
3
|
+
/**
|
|
4
|
+
* ReferenceResolver resolves content IDs to display values for reference fields.
|
|
5
|
+
*
|
|
6
|
+
* This class provides utilities for:
|
|
7
|
+
* - Resolving a single ID to its display value (e.g., title)
|
|
8
|
+
* - Loading all available options for a reference field
|
|
9
|
+
* - Filtering options by collection constraints
|
|
10
|
+
* - Searching options by display value
|
|
11
|
+
*/
|
|
12
|
+
export class ReferenceResolver {
|
|
13
|
+
constructor(store, idIndex) {
|
|
14
|
+
this.store = store;
|
|
15
|
+
this.idIndex = idIndex;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Resolve a content ID to a display value.
|
|
19
|
+
* Returns null if the ID doesn't exist or points to a collection.
|
|
20
|
+
*
|
|
21
|
+
* @param id - The content ID to resolve
|
|
22
|
+
* @param displayField - The field to use for display value (default: 'title')
|
|
23
|
+
*/
|
|
24
|
+
async resolve(id, displayField = 'title') {
|
|
25
|
+
const location = this.idIndex.findById(id);
|
|
26
|
+
if (!location || location.type !== 'entry') {
|
|
27
|
+
return {
|
|
28
|
+
id,
|
|
29
|
+
exists: false,
|
|
30
|
+
displayValue: id, // Fallback to showing the ID itself
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const doc = await this.store.read(location.collection, location.slug);
|
|
35
|
+
const displayValue = String(doc.data[displayField] || doc.data.title || location.slug);
|
|
36
|
+
return {
|
|
37
|
+
id,
|
|
38
|
+
exists: true,
|
|
39
|
+
displayValue,
|
|
40
|
+
collection: location.collection,
|
|
41
|
+
slug: location.slug,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.error('Failed to resolve reference:', { id, error });
|
|
46
|
+
return {
|
|
47
|
+
id,
|
|
48
|
+
exists: false,
|
|
49
|
+
displayValue: id,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Load all available reference options for a reference field.
|
|
55
|
+
*
|
|
56
|
+
* This method scans the specified collections and returns options
|
|
57
|
+
* suitable for a dropdown/select field.
|
|
58
|
+
*
|
|
59
|
+
* @param collections - Collection paths to search (e.g., ['posts', 'docs'])
|
|
60
|
+
* @param displayField - Field to use for option labels (default: 'title')
|
|
61
|
+
* @param search - Optional search string to filter options
|
|
62
|
+
*/
|
|
63
|
+
async loadReferenceOptions(collections, displayField = 'title', search) {
|
|
64
|
+
const options = [];
|
|
65
|
+
for (const collectionPath of collections) {
|
|
66
|
+
// Get all entries in this collection
|
|
67
|
+
const entries = await this.listEntriesInCollection(collectionPath);
|
|
68
|
+
for (const entry of entries) {
|
|
69
|
+
const id = this.idIndex.findByPath(entry.relativePath);
|
|
70
|
+
if (!id)
|
|
71
|
+
continue;
|
|
72
|
+
try {
|
|
73
|
+
// The slug from the index may include the entry type prefix for new-format files
|
|
74
|
+
// (e.g., "author.alice" instead of just "alice"). We need to strip the type prefix
|
|
75
|
+
// before passing to store.read() to avoid double-prefixing.
|
|
76
|
+
// Use extractSlugFromFilename to properly extract just the slug part.
|
|
77
|
+
const filename = path.basename(entry.relativePath);
|
|
78
|
+
const normalizedSlug = extractSlugFromFilename(filename);
|
|
79
|
+
const doc = await this.store.read(entry.collection, normalizedSlug);
|
|
80
|
+
const label = String(doc.data[displayField] || doc.data.title || normalizedSlug);
|
|
81
|
+
// Apply search filter if provided
|
|
82
|
+
if (search && !label.toLowerCase().includes(search.toLowerCase())) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
options.push({
|
|
86
|
+
id,
|
|
87
|
+
label,
|
|
88
|
+
collection: entry.collection,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
// Skip entries that can't be read
|
|
93
|
+
console.error('Failed to read entry for reference options:', {
|
|
94
|
+
collection: entry.collection,
|
|
95
|
+
slug: entry.slug,
|
|
96
|
+
error,
|
|
97
|
+
});
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return options.sort((a, b) => a.label.localeCompare(b.label));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Helper to list all entries in a collection.
|
|
106
|
+
*/
|
|
107
|
+
async listEntriesInCollection(collectionPath) {
|
|
108
|
+
return this.store.listCollectionEntries(collectionPath);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Resolve multiple IDs at once.
|
|
112
|
+
* Useful for displaying lists of referenced items.
|
|
113
|
+
*/
|
|
114
|
+
async resolveMany(ids, displayField = 'title') {
|
|
115
|
+
return Promise.all(ids.map((id) => this.resolve(id, displayField)));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=reference-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-resolver.js","sourceRoot":"","sources":["../src/reference-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema Module
|
|
3
|
+
*
|
|
4
|
+
* This module provides schema loading and resolution for CanopyCMS.
|
|
5
|
+
* Schema structure is defined in .collection.json files (single source of truth)
|
|
6
|
+
* while field schemas are defined in an entry schema registry for reusability.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { resolveSchema } from 'canopycms/schema'
|
|
11
|
+
*
|
|
12
|
+
* const { schema, sources } = await resolveSchema(contentRoot, entrySchemaRegistry)
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export type { EntrySchemaRegistry, SchemaSourceInfo, SchemaResolutionResult } from './types';
|
|
16
|
+
export { loadCollectionMetaFiles, resolveCollectionReferences, watchCollectionMetaFiles, type CollectionMeta, type RootCollectionMeta, } from './meta-loader';
|
|
17
|
+
export { resolveSchema, hasSchemaFiles, isValidSchema } from './resolver';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAG5F,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAA;AAGtB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema Module
|
|
3
|
+
*
|
|
4
|
+
* This module provides schema loading and resolution for CanopyCMS.
|
|
5
|
+
* Schema structure is defined in .collection.json files (single source of truth)
|
|
6
|
+
* while field schemas are defined in an entry schema registry for reusability.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { resolveSchema } from 'canopycms/schema'
|
|
11
|
+
*
|
|
12
|
+
* const { schema, sources } = await resolveSchema(contentRoot, entrySchemaRegistry)
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
// Meta loader (low-level API)
|
|
16
|
+
export { loadCollectionMetaFiles, resolveCollectionReferences, watchCollectionMetaFiles, } from './meta-loader';
|
|
17
|
+
// Resolver (high-level API)
|
|
18
|
+
export { resolveSchema, hasSchemaFiles, isValidSchema } from './resolver';
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,8BAA8B;AAC9B,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,GAGzB,MAAM,eAAe,CAAA;AAEtB,4BAA4B;AAC5B,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { RootCollectionConfig } from '../config';
|
|
2
|
+
import type { ContentId } from '../paths/types';
|
|
3
|
+
import type { EntrySchemaRegistry } from './types';
|
|
4
|
+
export type EntryTypeMeta = {
|
|
5
|
+
name: string;
|
|
6
|
+
format: 'md' | 'mdx' | 'json';
|
|
7
|
+
schema: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
default?: boolean;
|
|
10
|
+
maxItems?: number;
|
|
11
|
+
};
|
|
12
|
+
export type CollectionMeta = {
|
|
13
|
+
name: string;
|
|
14
|
+
label?: string;
|
|
15
|
+
entries?: EntryTypeMeta[];
|
|
16
|
+
order: string[];
|
|
17
|
+
};
|
|
18
|
+
export type RootCollectionMeta = {
|
|
19
|
+
label?: string;
|
|
20
|
+
entries?: EntryTypeMeta[];
|
|
21
|
+
order?: string[];
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Loads all .collection.json meta files from contentRoot, including root.
|
|
25
|
+
*
|
|
26
|
+
* This function orchestrates the complete discovery process:
|
|
27
|
+
* 1. Attempts to load the root .collection.json (contentRoot/.collection.json) - optional
|
|
28
|
+
* 2. Recursively scans all subdirectories for .collection.json files
|
|
29
|
+
* 3. Returns both root configuration and nested collections
|
|
30
|
+
*
|
|
31
|
+
* Meta File Structure:
|
|
32
|
+
* - Root: contentRoot/.collection.json (optional, defines root-level entry types)
|
|
33
|
+
* - Collections: contentRoot/[path]/.collection.json (defines collection in that directory)
|
|
34
|
+
*
|
|
35
|
+
* @param contentRoot - Absolute path to the content directory
|
|
36
|
+
* @returns Object containing root meta (if exists) and array of collection metas with paths
|
|
37
|
+
* @throws Error if any .collection.json file is malformed or invalid
|
|
38
|
+
*/
|
|
39
|
+
export declare function loadCollectionMetaFiles(contentRoot: string): Promise<{
|
|
40
|
+
root: RootCollectionMeta | null;
|
|
41
|
+
collections: Array<CollectionMeta & {
|
|
42
|
+
path: string;
|
|
43
|
+
contentId?: ContentId;
|
|
44
|
+
}>;
|
|
45
|
+
}>;
|
|
46
|
+
/**
|
|
47
|
+
* Resolve schema references for root collection and all collections.
|
|
48
|
+
*
|
|
49
|
+
* This function takes the loaded meta files (which contain string references like "postSchema")
|
|
50
|
+
* and resolves them to actual EntrySchema arrays from the entry schema registry.
|
|
51
|
+
*
|
|
52
|
+
* Resolution Process:
|
|
53
|
+
* 1. Root entry types: Resolve "schema" string to entry schema registry lookup
|
|
54
|
+
* 2. Top-level collections: Resolve recursively, building nested tree structure
|
|
55
|
+
* 3. Nested collections: Automatically grouped under their parent collections
|
|
56
|
+
*
|
|
57
|
+
* @param metaFiles - Loaded meta files from loadCollectionMetaFiles()
|
|
58
|
+
* @param entrySchemaRegistry - Map of schema names to EntrySchema arrays
|
|
59
|
+
* @returns Fully resolved root collection config ready for use by CanopyCMS
|
|
60
|
+
* @throws Error if any schema reference doesn't exist in registry (with helpful suggestions)
|
|
61
|
+
*/
|
|
62
|
+
export declare function resolveCollectionReferences(metaFiles: {
|
|
63
|
+
root: RootCollectionMeta | null;
|
|
64
|
+
collections: Array<CollectionMeta & {
|
|
65
|
+
path: string;
|
|
66
|
+
contentId?: ContentId;
|
|
67
|
+
}>;
|
|
68
|
+
}, entrySchemaRegistry: EntrySchemaRegistry): RootCollectionConfig;
|
|
69
|
+
/**
|
|
70
|
+
* Watch for changes to .collection.json files
|
|
71
|
+
*/
|
|
72
|
+
export declare function watchCollectionMetaFiles(contentRoot: string, onChange: () => void): () => void;
|
|
73
|
+
//# sourceMappingURL=meta-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-loader.d.ts","sourceRoot":"","sources":["../../src/schema/meta-loader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,oBAAoB,EAErB,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAkDlD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAyFD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1E,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAC/B,WAAW,EAAE,KAAK,CAAC,cAAc,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC,CAAA;CAC7E,CAAC,CAiCD;AAuED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE;IACT,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAC/B,WAAW,EAAE,KAAK,CAAC,cAAc,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC,CAAA;CAC7E,EACD,mBAAmB,EAAE,mBAAmB,GACvC,oBAAoB,CAiCtB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAW9F"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import { join } from 'pathe';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import chokidar from 'chokidar';
|
|
5
|
+
import { extractSlugFromFilename, extractIdFromFilename } from '../content-id-index';
|
|
6
|
+
/**
|
|
7
|
+
* Zod schema for entry type metadata in .collection.json files.
|
|
8
|
+
* Each entry type has a name, format, and schema reference to the entry schema registry.
|
|
9
|
+
*/
|
|
10
|
+
const entryTypeMetaSchema = z.object({
|
|
11
|
+
name: z.string().min(1),
|
|
12
|
+
format: z.enum(['md', 'mdx', 'json']),
|
|
13
|
+
schema: z.string().min(1), // Entry schema registry key (validated at resolution time)
|
|
14
|
+
label: z.string().optional(),
|
|
15
|
+
default: z.boolean().optional(),
|
|
16
|
+
maxItems: z.number().int().positive().optional(),
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* Zod schema for .collection.json files
|
|
20
|
+
*
|
|
21
|
+
* A collection folder can contain:
|
|
22
|
+
* - entries: Array of entry types with their own schemas
|
|
23
|
+
* - collections: Nested collections (discovered via their own .collection.json files)
|
|
24
|
+
*
|
|
25
|
+
* Note: We can't validate `schema` against entry schema registry keys at parse time because:
|
|
26
|
+
* 1. Entry schema registry is passed at runtime (not available during Zod schema definition)
|
|
27
|
+
* 2. Would create circular dependency (loader → services → config → loader)
|
|
28
|
+
*
|
|
29
|
+
* Validation of schema references happens in resolution functions with clear error messages.
|
|
30
|
+
*/
|
|
31
|
+
const collectionMetaSchema = z
|
|
32
|
+
.object({
|
|
33
|
+
name: z.string().min(1),
|
|
34
|
+
label: z.string().optional(),
|
|
35
|
+
entries: z.array(entryTypeMetaSchema).optional(),
|
|
36
|
+
order: z.array(z.string()), // Embedded IDs for ordering items (required)
|
|
37
|
+
})
|
|
38
|
+
.refine((data) => data.entries && data.entries.length > 0, {
|
|
39
|
+
message: 'Collection must have at least one entry type',
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Zod schema for root .collection.json file (content/.collection.json)
|
|
43
|
+
* Like other collections but no name/path (derived from contentRoot)
|
|
44
|
+
*/
|
|
45
|
+
const rootCollectionMetaSchema = z.object({
|
|
46
|
+
label: z.string().optional(),
|
|
47
|
+
entries: z.array(entryTypeMetaSchema).optional(),
|
|
48
|
+
order: z.array(z.string()).optional(), // Embedded IDs for ordering items
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* Recursively scans a directory for .collection.json files.
|
|
52
|
+
*
|
|
53
|
+
* Discovery Rules:
|
|
54
|
+
* - Scans recursively from the base directory (content root)
|
|
55
|
+
* - Each directory can have at most ONE .collection.json file
|
|
56
|
+
* - Collection path is derived from the directory structure (e.g., "docs/api" for content/docs/api/)
|
|
57
|
+
* - Collection name comes from the "name" field in .collection.json, NOT the directory name
|
|
58
|
+
* - Directories without .collection.json are still scanned for nested collections
|
|
59
|
+
* - Invalid .collection.json files cause the entire scan to fail with a descriptive error
|
|
60
|
+
*
|
|
61
|
+
* @param baseDir - The directory to scan (absolute path)
|
|
62
|
+
* @param relativePath - Current path relative to content root (used for recursion)
|
|
63
|
+
* @returns Array of collection metadata with resolved paths
|
|
64
|
+
*/
|
|
65
|
+
/**
|
|
66
|
+
* Strip embedded ID from a directory or file name.
|
|
67
|
+
* e.g., "docs.bChqT78gcaLd" -> "docs"
|
|
68
|
+
* e.g., "home.home.agfzDt2RLpSn.json" -> "home"
|
|
69
|
+
*/
|
|
70
|
+
function stripEmbeddedIdFromName(name) {
|
|
71
|
+
// Use extractSlugFromFilename which handles the ID extraction logic
|
|
72
|
+
return extractSlugFromFilename(name);
|
|
73
|
+
}
|
|
74
|
+
async function scanForCollectionMeta(baseDir, relativePath = '') {
|
|
75
|
+
const collections = [];
|
|
76
|
+
try {
|
|
77
|
+
const entries = await fs.readdir(baseDir, { withFileTypes: true });
|
|
78
|
+
for (const entry of entries) {
|
|
79
|
+
if (!entry.isDirectory())
|
|
80
|
+
continue;
|
|
81
|
+
const folderName = entry.name;
|
|
82
|
+
// Strip embedded ID from folder name for logical path
|
|
83
|
+
// e.g., "docs.bChqT78gcaLd" -> "docs"
|
|
84
|
+
const logicalName = stripEmbeddedIdFromName(folderName);
|
|
85
|
+
// Extract embedded ContentId from directory name (e.g., "posts.a1b2c3d4e5f6" → "a1b2c3d4e5f6")
|
|
86
|
+
const collectionContentId = extractIdFromFilename(folderName) ?? undefined;
|
|
87
|
+
const folderPath = relativePath ? `${relativePath}/${logicalName}` : logicalName;
|
|
88
|
+
const absolutePath = join(baseDir, folderName);
|
|
89
|
+
const metaPath = join(absolutePath, '.collection.json');
|
|
90
|
+
// Try to load collection meta file
|
|
91
|
+
try {
|
|
92
|
+
await fs.access(metaPath);
|
|
93
|
+
const content = await fs.readFile(metaPath, 'utf-8');
|
|
94
|
+
const parsed = JSON.parse(content);
|
|
95
|
+
// Validate with Zod
|
|
96
|
+
const meta = collectionMetaSchema.parse(parsed);
|
|
97
|
+
collections.push({
|
|
98
|
+
...meta,
|
|
99
|
+
path: folderPath, // Path derived from folder name
|
|
100
|
+
contentId: collectionContentId,
|
|
101
|
+
});
|
|
102
|
+
// Recursively scan for nested collection folders (they'll have their own .collection.json files)
|
|
103
|
+
const nestedCollections = await scanForCollectionMeta(absolutePath, folderPath);
|
|
104
|
+
collections.push(...nestedCollections);
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
if (err.code !== 'ENOENT') {
|
|
108
|
+
// File exists but is invalid
|
|
109
|
+
console.error(`Error loading ${metaPath}:`, err);
|
|
110
|
+
throw new Error(`Invalid .collection.json in ${folderPath}: ${err.message}`);
|
|
111
|
+
}
|
|
112
|
+
// No .collection.json - still scan subfolders in case they have collections
|
|
113
|
+
const nestedCollections = await scanForCollectionMeta(absolutePath, folderPath);
|
|
114
|
+
collections.push(...nestedCollections);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return collections;
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
if (err.code === 'ENOENT') {
|
|
121
|
+
return [];
|
|
122
|
+
}
|
|
123
|
+
throw err;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Loads all .collection.json meta files from contentRoot, including root.
|
|
128
|
+
*
|
|
129
|
+
* This function orchestrates the complete discovery process:
|
|
130
|
+
* 1. Attempts to load the root .collection.json (contentRoot/.collection.json) - optional
|
|
131
|
+
* 2. Recursively scans all subdirectories for .collection.json files
|
|
132
|
+
* 3. Returns both root configuration and nested collections
|
|
133
|
+
*
|
|
134
|
+
* Meta File Structure:
|
|
135
|
+
* - Root: contentRoot/.collection.json (optional, defines root-level entry types)
|
|
136
|
+
* - Collections: contentRoot/[path]/.collection.json (defines collection in that directory)
|
|
137
|
+
*
|
|
138
|
+
* @param contentRoot - Absolute path to the content directory
|
|
139
|
+
* @returns Object containing root meta (if exists) and array of collection metas with paths
|
|
140
|
+
* @throws Error if any .collection.json file is malformed or invalid
|
|
141
|
+
*/
|
|
142
|
+
export async function loadCollectionMetaFiles(contentRoot) {
|
|
143
|
+
// Load root .collection.json (optional)
|
|
144
|
+
let root = null;
|
|
145
|
+
const rootMetaPath = join(contentRoot, '.collection.json');
|
|
146
|
+
try {
|
|
147
|
+
await fs.access(rootMetaPath);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
// No root .collection.json - that's okay
|
|
151
|
+
if (err.code === 'ENOENT') {
|
|
152
|
+
// File doesn't exist, that's fine
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
throw err;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// If file exists, try to read and parse it
|
|
159
|
+
try {
|
|
160
|
+
const content = await fs.readFile(rootMetaPath, 'utf-8');
|
|
161
|
+
const parsed = JSON.parse(content);
|
|
162
|
+
root = rootCollectionMetaSchema.parse(parsed);
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
// Only handle errors if the file exists (not ENOENT)
|
|
166
|
+
const errno = err.code;
|
|
167
|
+
if (errno !== 'ENOENT') {
|
|
168
|
+
throw new Error(`Invalid root .collection.json`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Scan for collection folders
|
|
172
|
+
const collections = await scanForCollectionMeta(contentRoot);
|
|
173
|
+
return { root, collections };
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Resolve schema references for entry types
|
|
177
|
+
*/
|
|
178
|
+
function resolveEntryTypes(entryTypes, entrySchemaRegistry, contextName) {
|
|
179
|
+
return entryTypes.map((entryType) => {
|
|
180
|
+
const resolvedSchema = entrySchemaRegistry[entryType.schema];
|
|
181
|
+
if (!resolvedSchema) {
|
|
182
|
+
throw new Error(`Schema reference "${entryType.schema}" in entry type "${entryType.name}" (${contextName}) not found in registry. ` +
|
|
183
|
+
`Available schemas: ${Object.keys(entrySchemaRegistry).join(', ')}`);
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
name: entryType.name,
|
|
187
|
+
label: entryType.label,
|
|
188
|
+
format: entryType.format,
|
|
189
|
+
schema: resolvedSchema,
|
|
190
|
+
schemaRef: entryType.schema,
|
|
191
|
+
default: entryType.default,
|
|
192
|
+
maxItems: entryType.maxItems,
|
|
193
|
+
};
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Resolve schema references for a single collection
|
|
198
|
+
*/
|
|
199
|
+
function resolveCollectionMeta(meta, entrySchemaRegistry, allCollections) {
|
|
200
|
+
// Resolve entry types
|
|
201
|
+
const entries = meta.entries && meta.entries.length > 0
|
|
202
|
+
? resolveEntryTypes(meta.entries, entrySchemaRegistry, `collection "${meta.name}"`)
|
|
203
|
+
: undefined;
|
|
204
|
+
// Find nested collections (subfolders with .collection.json)
|
|
205
|
+
const nestedCollections = allCollections.filter((col) => {
|
|
206
|
+
return (col.path.startsWith(`${meta.path}/`) &&
|
|
207
|
+
col.path.split('/').length === meta.path.split('/').length + 1);
|
|
208
|
+
});
|
|
209
|
+
const collections = nestedCollections.length > 0
|
|
210
|
+
? nestedCollections.map((nestedMeta) => resolveCollectionMeta(nestedMeta, entrySchemaRegistry, allCollections))
|
|
211
|
+
: undefined;
|
|
212
|
+
return {
|
|
213
|
+
name: meta.name,
|
|
214
|
+
label: meta.label,
|
|
215
|
+
path: meta.path,
|
|
216
|
+
contentId: meta.contentId,
|
|
217
|
+
...(entries && { entries }),
|
|
218
|
+
...(meta.order && { order: meta.order }),
|
|
219
|
+
...(collections && { collections }),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Resolve schema references for root collection and all collections.
|
|
224
|
+
*
|
|
225
|
+
* This function takes the loaded meta files (which contain string references like "postSchema")
|
|
226
|
+
* and resolves them to actual EntrySchema arrays from the entry schema registry.
|
|
227
|
+
*
|
|
228
|
+
* Resolution Process:
|
|
229
|
+
* 1. Root entry types: Resolve "schema" string to entry schema registry lookup
|
|
230
|
+
* 2. Top-level collections: Resolve recursively, building nested tree structure
|
|
231
|
+
* 3. Nested collections: Automatically grouped under their parent collections
|
|
232
|
+
*
|
|
233
|
+
* @param metaFiles - Loaded meta files from loadCollectionMetaFiles()
|
|
234
|
+
* @param entrySchemaRegistry - Map of schema names to EntrySchema arrays
|
|
235
|
+
* @returns Fully resolved root collection config ready for use by CanopyCMS
|
|
236
|
+
* @throws Error if any schema reference doesn't exist in registry (with helpful suggestions)
|
|
237
|
+
*/
|
|
238
|
+
export function resolveCollectionReferences(metaFiles, entrySchemaRegistry) {
|
|
239
|
+
// Build result object dynamically to avoid readonly conflicts
|
|
240
|
+
const result = {};
|
|
241
|
+
// Pass through root label if present
|
|
242
|
+
if (metaFiles.root?.label) {
|
|
243
|
+
result.label = metaFiles.root.label;
|
|
244
|
+
}
|
|
245
|
+
// Resolve root entry types
|
|
246
|
+
if (metaFiles.root?.entries && metaFiles.root.entries.length > 0) {
|
|
247
|
+
result.entries = resolveEntryTypes(metaFiles.root.entries, entrySchemaRegistry, 'root collection');
|
|
248
|
+
}
|
|
249
|
+
// Pass through root order array (embedded IDs for sorting)
|
|
250
|
+
if (metaFiles.root?.order) {
|
|
251
|
+
result.order = metaFiles.root.order;
|
|
252
|
+
}
|
|
253
|
+
// Resolve top-level collections (no slashes in path)
|
|
254
|
+
const topLevelCollections = metaFiles.collections.filter((meta) => !meta.path.includes('/'));
|
|
255
|
+
if (topLevelCollections.length > 0) {
|
|
256
|
+
result.collections = topLevelCollections.map((meta) => resolveCollectionMeta(meta, entrySchemaRegistry, metaFiles.collections));
|
|
257
|
+
}
|
|
258
|
+
return result;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Watch for changes to .collection.json files
|
|
262
|
+
*/
|
|
263
|
+
export function watchCollectionMetaFiles(contentRoot, onChange) {
|
|
264
|
+
const watcher = chokidar.watch(`${contentRoot}/**/.collection.json`, {
|
|
265
|
+
ignoreInitial: true,
|
|
266
|
+
});
|
|
267
|
+
watcher.on('add', onChange);
|
|
268
|
+
watcher.on('change', onChange);
|
|
269
|
+
watcher.on('unlink', onChange);
|
|
270
|
+
// Return cleanup function
|
|
271
|
+
return () => watcher.close();
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=meta-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-loader.js","sourceRoot":"","sources":["../../src/schema/meta-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema resolver for CanopyCMS.
|
|
3
|
+
*
|
|
4
|
+
* Loads and resolves schema from .collection.json files in the content directory.
|
|
5
|
+
* This is the single source of truth for collection structure.
|
|
6
|
+
*
|
|
7
|
+
* Field schemas are defined in the entry schema registry and referenced by name
|
|
8
|
+
* in .collection.json files for reusability and type safety.
|
|
9
|
+
*/
|
|
10
|
+
import type { RootCollectionConfig } from '../config';
|
|
11
|
+
import type { EntrySchemaRegistry, SchemaResolutionResult } from './types';
|
|
12
|
+
/**
|
|
13
|
+
* Resolve schema from .collection.json files.
|
|
14
|
+
*
|
|
15
|
+
* This is the primary entry point for loading schema configuration.
|
|
16
|
+
* It discovers all .collection.json files in the content directory
|
|
17
|
+
* and resolves schema references using the provided registry.
|
|
18
|
+
*
|
|
19
|
+
* @param contentRoot - Path to the content directory
|
|
20
|
+
* @param entrySchemaRegistry - Map of entry schema names to field definitions
|
|
21
|
+
* @returns Resolved schema configuration
|
|
22
|
+
* @throws Error if schema references cannot be resolved
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveSchema(contentRoot: string, entrySchemaRegistry: EntrySchemaRegistry): Promise<SchemaResolutionResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Check if content root has any .collection.json files.
|
|
27
|
+
*
|
|
28
|
+
* @param contentRoot - Path to the content directory
|
|
29
|
+
* @returns true if at least one .collection.json file exists
|
|
30
|
+
*/
|
|
31
|
+
export declare function hasSchemaFiles(contentRoot: string): Promise<boolean>;
|
|
32
|
+
/**
|
|
33
|
+
* Validate schema completeness.
|
|
34
|
+
*
|
|
35
|
+
* Checks that the resolved schema has at least one collection or
|
|
36
|
+
* root entries definition.
|
|
37
|
+
*
|
|
38
|
+
* @param schema - Resolved schema to validate
|
|
39
|
+
* @returns true if schema is valid
|
|
40
|
+
*/
|
|
41
|
+
export declare function isValidSchema(schema: RootCollectionConfig): boolean;
|
|
42
|
+
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/schema/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAoB,MAAM,SAAS,CAAA;AAG5F;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,mBAAmB,GACvC,OAAO,CAAC,sBAAsB,CAAC,CA2BjC;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAInE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema resolver for CanopyCMS.
|
|
3
|
+
*
|
|
4
|
+
* Loads and resolves schema from .collection.json files in the content directory.
|
|
5
|
+
* This is the single source of truth for collection structure.
|
|
6
|
+
*
|
|
7
|
+
* Field schemas are defined in the entry schema registry and referenced by name
|
|
8
|
+
* in .collection.json files for reusability and type safety.
|
|
9
|
+
*/
|
|
10
|
+
import { loadCollectionMetaFiles, resolveCollectionReferences } from './meta-loader';
|
|
11
|
+
/**
|
|
12
|
+
* Resolve schema from .collection.json files.
|
|
13
|
+
*
|
|
14
|
+
* This is the primary entry point for loading schema configuration.
|
|
15
|
+
* It discovers all .collection.json files in the content directory
|
|
16
|
+
* and resolves schema references using the provided registry.
|
|
17
|
+
*
|
|
18
|
+
* @param contentRoot - Path to the content directory
|
|
19
|
+
* @param entrySchemaRegistry - Map of entry schema names to field definitions
|
|
20
|
+
* @returns Resolved schema configuration
|
|
21
|
+
* @throws Error if schema references cannot be resolved
|
|
22
|
+
*/
|
|
23
|
+
export async function resolveSchema(contentRoot, entrySchemaRegistry) {
|
|
24
|
+
// Load all .collection.json meta files
|
|
25
|
+
const metaFiles = await loadCollectionMetaFiles(contentRoot);
|
|
26
|
+
// Build source info for debugging
|
|
27
|
+
const sources = [];
|
|
28
|
+
if (metaFiles.root) {
|
|
29
|
+
sources.push({
|
|
30
|
+
path: '.collection.json',
|
|
31
|
+
type: 'root',
|
|
32
|
+
collections: [],
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
for (const collection of metaFiles.collections) {
|
|
36
|
+
sources.push({
|
|
37
|
+
path: `${collection.path}/.collection.json`,
|
|
38
|
+
type: 'collection',
|
|
39
|
+
collections: [collection.name],
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
// Resolve schema references to actual field definitions
|
|
43
|
+
const schema = resolveCollectionReferences(metaFiles, entrySchemaRegistry);
|
|
44
|
+
return { schema, sources };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if content root has any .collection.json files.
|
|
48
|
+
*
|
|
49
|
+
* @param contentRoot - Path to the content directory
|
|
50
|
+
* @returns true if at least one .collection.json file exists
|
|
51
|
+
*/
|
|
52
|
+
export async function hasSchemaFiles(contentRoot) {
|
|
53
|
+
const metaFiles = await loadCollectionMetaFiles(contentRoot);
|
|
54
|
+
return metaFiles.root !== null || metaFiles.collections.length > 0;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Validate schema completeness.
|
|
58
|
+
*
|
|
59
|
+
* Checks that the resolved schema has at least one collection or
|
|
60
|
+
* root entries definition.
|
|
61
|
+
*
|
|
62
|
+
* @param schema - Resolved schema to validate
|
|
63
|
+
* @returns true if schema is valid
|
|
64
|
+
*/
|
|
65
|
+
export function isValidSchema(schema) {
|
|
66
|
+
const hasEntries = !!(schema.entries && schema.entries.length > 0);
|
|
67
|
+
const hasCollections = !!(schema.collections && schema.collections.length > 0);
|
|
68
|
+
return hasEntries || hasCollections;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/schema/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAA;AAEpF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,WAAmB,EACnB,mBAAwC;IAExC,uCAAuC;IACvC,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAA;IAE5D,kCAAkC;IAClC,MAAM,OAAO,GAAuB,EAAE,CAAA;IAEtC,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,EAAE;SAChB,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,GAAG,UAAU,CAAC,IAAI,mBAAmB;YAC3C,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;SAC/B,CAAC,CAAA;IACJ,CAAC;IAED,wDAAwD;IACxD,MAAM,MAAM,GAAG,2BAA2B,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAA;IAE1E,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AAC5B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB;IACtD,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAA;IAC5D,OAAO,SAAS,CAAC,IAAI,KAAK,IAAI,IAAI,SAAS,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAA;AACpE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,MAA4B;IACxD,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC9E,OAAO,UAAU,IAAI,cAAc,CAAA;AACrC,CAAC"}
|