canopycms 0.0.15 → 0.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/generate.js +5 -5
- package/dist/ai/generate.js.map +1 -1
- package/dist/ai/handler.js +5 -5
- package/dist/ai/index.js +3 -3
- package/dist/ai/resolve-branch.js +2 -2
- package/dist/api/__test__/mock-client.js +1 -1
- package/dist/api/assets.js +1 -1
- package/dist/api/branch-merge.js +3 -3
- package/dist/api/branch-review.js +4 -4
- package/dist/api/branch-status.js +8 -8
- package/dist/api/branch-withdraw.js +5 -5
- package/dist/api/branch.js +9 -9
- package/dist/api/comments.js +4 -4
- package/dist/api/content.js +5 -5
- package/dist/api/entries.d.ts.map +1 -1
- package/dist/api/entries.js +57 -145
- package/dist/api/entries.js.map +1 -1
- package/dist/api/github-sync.js +3 -3
- package/dist/api/groups.js +4 -4
- package/dist/api/guards.js +1 -1
- package/dist/api/index.js +3 -3
- package/dist/api/permissions.js +4 -4
- package/dist/api/reference-options.js +5 -5
- package/dist/api/resolve-references.js +4 -4
- package/dist/api/route-builder.js +1 -1
- package/dist/api/schema.js +5 -5
- package/dist/api/settings-helpers.js +1 -1
- package/dist/api/user.js +1 -1
- package/dist/api/validators.js +3 -3
- package/dist/asset-store.js +1 -1
- package/dist/auth/cache.js +2 -2
- package/dist/auth/caching-auth-plugin.js +1 -1
- package/dist/auth/file-based-auth-cache.js +1 -1
- package/dist/auth/index.js +1 -1
- package/dist/authorization/branch.js +1 -1
- package/dist/authorization/content.js +3 -3
- package/dist/authorization/groups/index.js +2 -2
- package/dist/authorization/groups/loader.js +4 -4
- package/dist/authorization/index.js +8 -8
- package/dist/authorization/path.js +1 -1
- package/dist/authorization/permissions/index.js +2 -2
- package/dist/authorization/permissions/loader.js +3 -3
- package/dist/authorization/permissions/schema.js +1 -1
- package/dist/authorization/test-utils.js +1 -1
- package/dist/authorization/validation.js +1 -1
- package/dist/branch-metadata.js +3 -3
- package/dist/branch-registry.js +2 -2
- package/dist/branch-schema-cache.js +2 -2
- package/dist/branch-workspace.js +6 -6
- package/dist/build/generate-ai-content.js +4 -4
- package/dist/build/index.js +1 -1
- package/dist/cli/cli.js +5 -5
- package/dist/cli/generate-ai-content.js +12 -13
- package/dist/cli/init.js +4 -11
- package/dist/cli/sync.js +1 -1
- package/dist/client.js +9 -9
- package/dist/config/flatten.js +2 -2
- package/dist/config/helpers.js +3 -3
- package/dist/config/index.js +9 -9
- package/dist/config/schemas/collection.js +1 -1
- package/dist/config/schemas/config.js +2 -2
- package/dist/config/schemas/field.d.ts +21 -0
- package/dist/config/schemas/field.d.ts.map +1 -1
- package/dist/config/schemas/field.js +2 -1
- package/dist/config/schemas/field.js.map +1 -1
- package/dist/config/types.d.ts +2 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/validation.js +2 -2
- package/dist/config-test.js +2 -2
- package/dist/config.js +2 -2
- package/dist/content-id-index.js +2 -2
- package/dist/content-listing.d.ts +67 -2
- package/dist/content-listing.d.ts.map +1 -1
- package/dist/content-listing.js +95 -13
- package/dist/content-listing.js.map +1 -1
- package/dist/content-reader.js +5 -5
- package/dist/content-store.d.ts +1 -1
- package/dist/content-store.d.ts.map +1 -1
- package/dist/content-store.js +6 -6
- package/dist/content-store.js.map +1 -1
- package/dist/content-tree.d.ts +11 -5
- package/dist/content-tree.d.ts.map +1 -1
- package/dist/content-tree.js +3 -1
- package/dist/content-tree.js.map +1 -1
- package/dist/context.d.ts +3 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +24 -6
- package/dist/context.js.map +1 -1
- package/dist/editor/BranchManager.js +4 -4
- package/dist/editor/CanopyEditor.js +3 -3
- package/dist/editor/CanopyEditorPage.js +1 -1
- package/dist/editor/CommentsPanel.js +1 -1
- package/dist/editor/Editor.js +18 -18
- package/dist/editor/EntryNavigator.js +1 -1
- package/dist/editor/FormRenderer.js +12 -12
- package/dist/editor/GroupManager.js +1 -1
- package/dist/editor/PermissionManager.js +1 -1
- package/dist/editor/client-reference-resolver.js +1 -1
- package/dist/editor/comments/BranchComments.js +1 -1
- package/dist/editor/comments/EntryComments.js +1 -1
- package/dist/editor/comments/FieldWrapper.js +1 -1
- package/dist/editor/comments/InlineCommentThread.js +1 -1
- package/dist/editor/comments/ThreadCarousel.js +1 -1
- package/dist/editor/components/EditorHeader.js +1 -1
- package/dist/editor/components/UserBadge.js +1 -1
- package/dist/editor/components/index.js +3 -3
- package/dist/editor/context/ApiClientContext.js +1 -1
- package/dist/editor/context/index.js +2 -2
- package/dist/editor/editor-utils.js +1 -1
- package/dist/editor/fields/BlockField.js +1 -1
- package/dist/editor/fields/ObjectField.js +1 -1
- package/dist/editor/fields/ReferenceField.js +1 -1
- package/dist/editor/group-manager/GroupCard.js +1 -1
- package/dist/editor/group-manager/InternalGroupsTab.js +1 -1
- package/dist/editor/group-manager/MemberList.js +1 -1
- package/dist/editor/group-manager/index.js +9 -9
- package/dist/editor/hooks/__test__/test-utils.js +3 -3
- package/dist/editor/hooks/index.js +11 -11
- package/dist/editor/hooks/useBranchActions.js +1 -1
- package/dist/editor/hooks/useBranchManager.js +1 -1
- package/dist/editor/hooks/useCommentSystem.js +2 -2
- package/dist/editor/hooks/useDraftManager.js +1 -1
- package/dist/editor/hooks/useEntryManager.js +3 -3
- package/dist/editor/hooks/useGroupManager.js +1 -1
- package/dist/editor/hooks/usePermissionManager.js +1 -1
- package/dist/editor/hooks/useReferenceResolution.js +1 -1
- package/dist/editor/hooks/useSchemaManager.js +1 -1
- package/dist/editor/hooks/useUserContext.js +1 -1
- package/dist/editor/permission-manager/PermissionEditor.js +4 -4
- package/dist/editor/permission-manager/PermissionLevelBadge.js +1 -1
- package/dist/editor/permission-manager/PermissionTree.js +3 -3
- package/dist/editor/permission-manager/UserSelector.js +1 -1
- package/dist/editor/permission-manager/hooks/usePermissionTree.js +2 -2
- package/dist/editor/permission-manager/index.js +6 -6
- package/dist/editor/preview-bridge.js +1 -1
- package/dist/editor/schema-editor/CollectionEditor.js +2 -2
- package/dist/editor/schema-editor/index.js +2 -2
- package/dist/entry-schema-registry.d.ts.map +1 -1
- package/dist/entry-schema-registry.js +34 -2
- package/dist/entry-schema-registry.js.map +1 -1
- package/dist/entry-schema.d.ts +1 -0
- package/dist/entry-schema.d.ts.map +1 -1
- package/dist/entry-schema.js.map +1 -1
- package/dist/git-manager.js +4 -4
- package/dist/github-service.js +1 -1
- package/dist/http/handler.js +7 -7
- package/dist/http/index.js +3 -3
- package/dist/http/router.js +12 -12
- package/dist/id.js +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/operating-mode/client-unsafe-strategy.js +2 -2
- package/dist/operating-mode/client.js +1 -1
- package/dist/operating-mode/index.js +2 -2
- package/dist/paths/branch.js +1 -1
- package/dist/paths/index.js +6 -6
- package/dist/paths/test-utils.js +1 -1
- package/dist/paths/validation.js +1 -1
- package/dist/reference-resolver.js +2 -2
- package/dist/reference-resolver.js.map +1 -1
- package/dist/schema/index.js +2 -2
- package/dist/schema/meta-loader.d.ts.map +1 -1
- package/dist/schema/meta-loader.js +11 -1
- package/dist/schema/meta-loader.js.map +1 -1
- package/dist/schema/resolver.js +1 -1
- package/dist/schema/schema-store.js +4 -4
- package/dist/server.d.ts +3 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +13 -12
- package/dist/server.js.map +1 -1
- package/dist/services.js +12 -12
- package/dist/settings-branch-utils.js +1 -1
- package/dist/settings-workspace.js +3 -3
- package/dist/task-queue/index.js +1 -1
- package/dist/task-queue/task-queue.js +1 -1
- package/dist/user.js +1 -1
- package/dist/utils/fs.js +1 -1
- package/dist/utils/title-field.d.ts +40 -0
- package/dist/utils/title-field.d.ts.map +1 -0
- package/dist/utils/title-field.js +126 -0
- package/dist/utils/title-field.js.map +1 -0
- package/dist/validation/reference-validator.js +2 -2
- package/dist/worker/cms-worker.js +5 -5
- package/dist/worker/task-queue-config.js +1 -1
- package/dist/worker/task-queue.js +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find the field marked `isTitle: true` in a schema and extract its value from data.
|
|
3
|
+
* Recurses into object fields to support nested title fields (e.g., hero.title).
|
|
4
|
+
* Returns the string value or undefined if not found or not a string.
|
|
5
|
+
*/
|
|
6
|
+
export function extractTitleFromSchema(fields, data) {
|
|
7
|
+
return findTitleValue(fields, data);
|
|
8
|
+
}
|
|
9
|
+
function findTitleValue(fields, data) {
|
|
10
|
+
for (const field of fields) {
|
|
11
|
+
if (field.isTitle) {
|
|
12
|
+
const value = data[field.name];
|
|
13
|
+
return typeof value === 'string' ? value : undefined;
|
|
14
|
+
}
|
|
15
|
+
// Recurse into non-list object fields (list objects can't provide a single title value)
|
|
16
|
+
if (field.type === 'object' && 'fields' in field && field.fields && !field.list) {
|
|
17
|
+
const nested = data[field.name];
|
|
18
|
+
if (nested != null && typeof nested === 'object' && !Array.isArray(nested)) {
|
|
19
|
+
const result = findTitleValue(field.fields, nested);
|
|
20
|
+
if (result !== undefined)
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
/** Convert a slug like "my-cool-page" to "My Cool Page". */
|
|
28
|
+
export function humanizeSlug(slug) {
|
|
29
|
+
return slug
|
|
30
|
+
.replace(/[-_]/g, ' ')
|
|
31
|
+
.replace(/\b\w/g, (c) => c.toUpperCase())
|
|
32
|
+
.trim();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Resolve a display title for an entry using the full fallback chain:
|
|
36
|
+
* 1. Schema-marked isTitle field (if schema provided)
|
|
37
|
+
* 2. Convention: data.title or data.name
|
|
38
|
+
* 3. Entry type label (if provided)
|
|
39
|
+
* 4. Humanized slug (if provided)
|
|
40
|
+
* 5. "Untitled"
|
|
41
|
+
*/
|
|
42
|
+
export function resolveEntryTitle(data, options) {
|
|
43
|
+
// 1. Schema-marked isTitle field
|
|
44
|
+
if (options?.schema) {
|
|
45
|
+
const schemaTitle = extractTitleFromSchema(options.schema, data);
|
|
46
|
+
if (schemaTitle)
|
|
47
|
+
return schemaTitle;
|
|
48
|
+
}
|
|
49
|
+
// 2. Convention: data.title or data.name
|
|
50
|
+
const title = data.title ?? data.name;
|
|
51
|
+
if (typeof title === 'string')
|
|
52
|
+
return title;
|
|
53
|
+
// 3. Entry type label
|
|
54
|
+
if (options?.entryTypeLabel)
|
|
55
|
+
return options.entryTypeLabel;
|
|
56
|
+
// 4. Humanized slug
|
|
57
|
+
return options?.slug ? humanizeSlug(options.slug) : 'Untitled';
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Count the number of fields marked `isTitle: true` in a schema, recursing into objects.
|
|
61
|
+
* Skips `list: true` objects since runtime title extraction cannot resolve array values.
|
|
62
|
+
* Used for validation — at most one field per schema should be marked.
|
|
63
|
+
*/
|
|
64
|
+
export function countTitleFields(fields) {
|
|
65
|
+
let count = 0;
|
|
66
|
+
for (const field of fields) {
|
|
67
|
+
if (field.isTitle)
|
|
68
|
+
count++;
|
|
69
|
+
if (field.type === 'object' && 'fields' in field && field.fields && !field.list) {
|
|
70
|
+
count += countTitleFields(field.fields);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return count;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Validate that all isTitle fields in a schema are string type.
|
|
77
|
+
* Skips `list: true` objects (those are caught by findTitleFieldsInLists).
|
|
78
|
+
* Returns an array of field names that have isTitle on a non-string type.
|
|
79
|
+
*/
|
|
80
|
+
export function findInvalidTitleFields(fields, parentPath) {
|
|
81
|
+
const invalid = [];
|
|
82
|
+
for (const field of fields) {
|
|
83
|
+
const fieldPath = parentPath ? `${parentPath}.${field.name}` : field.name;
|
|
84
|
+
if (field.isTitle && field.type !== 'string') {
|
|
85
|
+
invalid.push(fieldPath);
|
|
86
|
+
}
|
|
87
|
+
if (field.type === 'object' && 'fields' in field && field.fields && !field.list) {
|
|
88
|
+
invalid.push(...findInvalidTitleFields(field.fields, fieldPath));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return invalid;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Find isTitle fields inside `list: true` object fields, where they can never resolve.
|
|
95
|
+
* Returns dotted paths of such fields.
|
|
96
|
+
*/
|
|
97
|
+
export function findTitleFieldsInLists(fields, parentPath) {
|
|
98
|
+
const found = [];
|
|
99
|
+
for (const field of fields) {
|
|
100
|
+
const fieldPath = parentPath ? `${parentPath}.${field.name}` : field.name;
|
|
101
|
+
if (field.type === 'object' && 'fields' in field && field.fields) {
|
|
102
|
+
if (field.list) {
|
|
103
|
+
// Any isTitle inside a list object is invalid — collect them
|
|
104
|
+
found.push(...collectAllTitleFields(field.fields, fieldPath));
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
found.push(...findTitleFieldsInLists(field.fields, fieldPath));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return found;
|
|
112
|
+
}
|
|
113
|
+
/** Collect all isTitle fields recursively (used inside list context). */
|
|
114
|
+
function collectAllTitleFields(fields, parentPath) {
|
|
115
|
+
const found = [];
|
|
116
|
+
for (const field of fields) {
|
|
117
|
+
const fieldPath = `${parentPath}.${field.name}`;
|
|
118
|
+
if (field.isTitle)
|
|
119
|
+
found.push(fieldPath);
|
|
120
|
+
if (field.type === 'object' && 'fields' in field && field.fields) {
|
|
121
|
+
found.push(...collectAllTitleFields(field.fields, fieldPath));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return found;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=title-field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"title-field.js","sourceRoot":"","sources":["../../src/utils/title-field.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { isValidId } from '../id';
|
|
2
|
-
import { findFieldsByType } from './field-traversal';
|
|
1
|
+
import { isValidId } from '../id.js';
|
|
2
|
+
import { findFieldsByType } from './field-traversal.js';
|
|
3
3
|
/**
|
|
4
4
|
* ReferenceValidator validates that referenced content IDs exist and match collection constraints.
|
|
5
5
|
*
|
|
@@ -2,11 +2,11 @@ import fs from 'node:fs/promises';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { simpleGit } from 'simple-git';
|
|
4
4
|
import { Octokit } from '@octokit/rest';
|
|
5
|
-
import { dequeueTask, completeTask, failTask, retryTask, recoverOrphanedTasks, cleanupOldTasks, cmsTaskQueueLogger, } from './task-queue';
|
|
6
|
-
import { getBranchMetadataFileManager, BranchMetadataFileManager } from '../branch-metadata';
|
|
7
|
-
import { extractIdFromFilename } from '../content-id-index';
|
|
8
|
-
import { ROOT_COLLECTION_ID } from '../paths/types';
|
|
9
|
-
import { isFileExistsError } from '../utils/error';
|
|
5
|
+
import { dequeueTask, completeTask, failTask, retryTask, recoverOrphanedTasks, cleanupOldTasks, cmsTaskQueueLogger, } from './task-queue.js';
|
|
6
|
+
import { getBranchMetadataFileManager, BranchMetadataFileManager } from '../branch-metadata.js';
|
|
7
|
+
import { extractIdFromFilename } from '../content-id-index.js';
|
|
8
|
+
import { ROOT_COLLECTION_ID } from '../paths/types.js';
|
|
9
|
+
import { isFileExistsError } from '../utils/error.js';
|
|
10
10
|
const DEFAULT_TASK_TIMEOUT = 60_000;
|
|
11
11
|
const DEFAULT_MAX_RETRIES = 3;
|
|
12
12
|
// Payload validation helpers — fail fast with clear errors instead of silent `as` casts
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CanopyCMS task queue — re-exports from the generic task-queue module
|
|
3
3
|
* with CMS-specific action types and a WorkerTask alias.
|
|
4
4
|
*/
|
|
5
|
-
import { createDebugLogger } from '../utils/debug';
|
|
5
|
+
import { createDebugLogger } from '../utils/debug.js';
|
|
6
6
|
// ============================================================================
|
|
7
7
|
// Shared logger instance for CMS task queue operations
|
|
8
8
|
// ============================================================================
|
|
@@ -16,5 +16,5 @@ export const cmsTaskQueueLogger = {
|
|
|
16
16
|
// Re-exports from generic task-queue module
|
|
17
17
|
// ============================================================================
|
|
18
18
|
export { enqueueTask, dequeueTask, completeTask, failTask, retryTask, recoverOrphanedTasks, cleanupOldTasks, getTask, getTask as getTaskResult, // backward-compatible alias
|
|
19
|
-
listTasks, getQueueStats, } from '../task-queue';
|
|
19
|
+
listTasks, getQueueStats, } from '../task-queue/index.js';
|
|
20
20
|
//# sourceMappingURL=task-queue.js.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"//": "@codemirror/language, @lezer/highlight: workaround — @mdxeditor/editor uses cm6-theme-basic-light which peer-requires these but mdxeditor doesn't declare them as dependencies",
|
|
3
3
|
"name": "canopycms",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.17",
|
|
5
5
|
"description": "CanopyCMS core package: schema-driven content, branch-aware editing, and editor UI for Next.js.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|