canopycms 0.0.29 → 0.0.31
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/api/reference-options.d.ts.map +1 -1
- package/dist/api/reference-options.js +37 -20
- package/dist/api/reference-options.js.map +1 -1
- package/dist/cli/generate-ai-content.js +70 -17
- package/dist/cli/init.js +2 -1
- package/dist/config/schemas/field.d.ts +6 -3
- package/dist/config/schemas/field.d.ts.map +1 -1
- package/dist/config/schemas/field.js +4 -2
- package/dist/config/schemas/field.js.map +1 -1
- package/dist/config/types.d.ts +2 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/validation.d.ts +5 -0
- package/dist/config/validation.d.ts.map +1 -1
- package/dist/config/validation.js +45 -0
- package/dist/config/validation.js.map +1 -1
- package/dist/content-id-index.d.ts +20 -0
- package/dist/content-id-index.d.ts.map +1 -1
- package/dist/content-id-index.js +45 -0
- package/dist/content-id-index.js.map +1 -1
- package/dist/content-store.d.ts +4 -1
- package/dist/content-store.d.ts.map +1 -1
- package/dist/content-store.js +24 -20
- package/dist/content-store.js.map +1 -1
- package/dist/editor/FormRenderer.d.ts.map +1 -1
- package/dist/editor/FormRenderer.js +1 -1
- package/dist/editor/FormRenderer.js.map +1 -1
- package/dist/editor/fields/ReferenceField.d.ts +1 -0
- package/dist/editor/fields/ReferenceField.d.ts.map +1 -1
- package/dist/editor/fields/ReferenceField.js +15 -10
- package/dist/editor/fields/ReferenceField.js.map +1 -1
- package/dist/entry-schema.d.ts +4 -0
- package/dist/entry-schema.d.ts.map +1 -1
- package/dist/entry-schema.js.map +1 -1
- package/dist/reference-resolver.d.ts +5 -8
- package/dist/reference-resolver.d.ts.map +1 -1
- package/dist/reference-resolver.js +53 -45
- package/dist/reference-resolver.js.map +1 -1
- package/dist/validation/reference-validator.d.ts.map +1 -1
- package/dist/validation/reference-validator.js +31 -5
- package/dist/validation/reference-validator.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { extractEntryTypeFromFilename } from '../content-id-index.js';
|
|
1
3
|
import { isValidId } from '../id.js';
|
|
2
4
|
import { findFieldsByType } from './field-traversal.js';
|
|
3
5
|
/**
|
|
@@ -35,7 +37,7 @@ export class ReferenceValidator {
|
|
|
35
37
|
value: ctx.value,
|
|
36
38
|
path: ctx.path,
|
|
37
39
|
}));
|
|
38
|
-
for (const { field, value, path } of refs) {
|
|
40
|
+
for (const { field, value, path: fieldPath } of refs) {
|
|
39
41
|
const ids = Array.isArray(value) ? value : [value];
|
|
40
42
|
for (const id of ids) {
|
|
41
43
|
// Skip null/undefined values (they're handled by required validation)
|
|
@@ -45,7 +47,7 @@ export class ReferenceValidator {
|
|
|
45
47
|
if (typeof id !== 'string' || !isValidId(id)) {
|
|
46
48
|
errors.push({
|
|
47
49
|
field: field.name,
|
|
48
|
-
fieldPath
|
|
50
|
+
fieldPath,
|
|
49
51
|
id: String(id),
|
|
50
52
|
error: 'Invalid content ID format',
|
|
51
53
|
});
|
|
@@ -56,7 +58,7 @@ export class ReferenceValidator {
|
|
|
56
58
|
if (!location) {
|
|
57
59
|
errors.push({
|
|
58
60
|
field: field.name,
|
|
59
|
-
fieldPath
|
|
61
|
+
fieldPath,
|
|
60
62
|
id,
|
|
61
63
|
error: 'Referenced entry does not exist',
|
|
62
64
|
});
|
|
@@ -66,7 +68,7 @@ export class ReferenceValidator {
|
|
|
66
68
|
if (location.type !== 'entry') {
|
|
67
69
|
errors.push({
|
|
68
70
|
field: field.name,
|
|
69
|
-
fieldPath
|
|
71
|
+
fieldPath,
|
|
70
72
|
id,
|
|
71
73
|
error: 'ID points to a collection, not an entry',
|
|
72
74
|
});
|
|
@@ -81,10 +83,23 @@ export class ReferenceValidator {
|
|
|
81
83
|
if (!allowed) {
|
|
82
84
|
errors.push({
|
|
83
85
|
field: field.name,
|
|
84
|
-
fieldPath
|
|
86
|
+
fieldPath,
|
|
85
87
|
id,
|
|
86
88
|
error: `Entry is in collection "${location.collection}", but only [${field.collections.join(', ')}] are allowed`,
|
|
87
89
|
});
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Validate entry type constraint
|
|
94
|
+
if (field.entryTypes && field.entryTypes.length > 0) {
|
|
95
|
+
const entryType = extractEntryTypeFromFilename(path.basename(location.relativePath));
|
|
96
|
+
if (!entryType || !field.entryTypes.includes(entryType)) {
|
|
97
|
+
errors.push({
|
|
98
|
+
field: field.name,
|
|
99
|
+
fieldPath,
|
|
100
|
+
id,
|
|
101
|
+
error: `Entry has type "${entryType ?? 'unknown'}", but only [${field.entryTypes.join(', ')}] are allowed`,
|
|
102
|
+
});
|
|
88
103
|
}
|
|
89
104
|
}
|
|
90
105
|
}
|
|
@@ -134,6 +149,17 @@ export class ReferenceValidator {
|
|
|
134
149
|
};
|
|
135
150
|
}
|
|
136
151
|
}
|
|
152
|
+
if (field.entryTypes && field.entryTypes.length > 0) {
|
|
153
|
+
const entryType = extractEntryTypeFromFilename(path.basename(location.relativePath));
|
|
154
|
+
if (!entryType || !field.entryTypes.includes(entryType)) {
|
|
155
|
+
return {
|
|
156
|
+
field: field.name,
|
|
157
|
+
fieldPath: field.name,
|
|
158
|
+
id,
|
|
159
|
+
error: `Entry has type "${entryType ?? 'unknown'}", but only [${field.entryTypes.join(', ')}] are allowed`,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
137
163
|
return null;
|
|
138
164
|
}
|
|
139
165
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-validator.js","sourceRoot":"","sources":["../../src/validation/reference-validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reference-validator.js","sourceRoot":"","sources":["../../src/validation/reference-validator.ts"],"names":[],"mappings":"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"}
|
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.31",
|
|
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": {
|