@aphexcms/cms-core 9.2.2 → 9.4.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/dist/cli/generate-types.d.ts +9 -1
- package/dist/cli/generate-types.d.ts.map +1 -1
- package/dist/cli/generate-types.js +23 -17
- package/dist/cli/generate-types.js.map +1 -1
- package/dist/cli/index.js +22 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/migrate.d.ts +10 -0
- package/dist/cli/migrate.d.ts.map +1 -0
- package/dist/cli/migrate.js +105 -0
- package/dist/cli/migrate.js.map +1 -0
- package/dist/components/AdminApp.svelte +12 -0
- package/dist/components/AdminApp.svelte.d.ts.map +1 -1
- package/dist/components/admin/DocumentVersionPanel.svelte +3 -0
- package/dist/components/admin/DocumentVersionPanel.svelte.d.ts.map +1 -1
- package/dist/components/admin/MediaBrowser.svelte +0 -1
- package/dist/components/admin/MediaBrowser.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/richtext/PortableTextImageView.svelte +3 -0
- package/dist/components/admin/fields/richtext/PortableTextImageView.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/richtext/PortableTextInlineView.svelte +3 -1
- package/dist/components/admin/fields/richtext/PortableTextInlineView.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/richtext/PortableTextObjectView.svelte +3 -0
- package/dist/components/admin/fields/richtext/PortableTextObjectView.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/richtext/RichtextField.svelte +8 -20
- package/dist/components/admin/fields/richtext/RichtextField.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/richtext/block-defaults.d.ts +4 -0
- package/dist/components/admin/fields/richtext/block-defaults.d.ts.map +1 -0
- package/dist/components/admin/fields/richtext/block-defaults.js +8 -0
- package/dist/field-validation/utils.d.ts +15 -0
- package/dist/field-validation/utils.d.ts.map +1 -1
- package/dist/field-validation/utils.js +74 -0
- package/dist/graphql/resolvers.d.ts.map +1 -1
- package/dist/graphql/resolvers.js +9 -10
- package/dist/graphql/schema.d.ts.map +1 -1
- package/dist/graphql/schema.js +18 -19
- package/dist/lib/components/admin/fields/richtext/block-defaults.d.ts +4 -0
- package/dist/lib/components/admin/fields/richtext/block-defaults.d.ts.map +1 -0
- package/dist/lib/components/admin/fields/richtext/block-defaults.js +9 -0
- package/dist/lib/components/admin/fields/richtext/block-defaults.js.map +1 -0
- package/dist/lib/field-validation/utils.d.ts +15 -0
- package/dist/lib/field-validation/utils.d.ts.map +1 -1
- package/dist/lib/field-validation/utils.js +74 -0
- package/dist/lib/field-validation/utils.js.map +1 -1
- package/dist/lib/graphql/resolvers.d.ts.map +1 -1
- package/dist/lib/graphql/resolvers.js +9 -10
- package/dist/lib/graphql/resolvers.js.map +1 -1
- package/dist/lib/graphql/schema.d.ts.map +1 -1
- package/dist/lib/graphql/schema.js +18 -19
- package/dist/lib/graphql/schema.js.map +1 -1
- package/dist/lib/mcp/tools.d.ts +28 -0
- package/dist/lib/mcp/tools.d.ts.map +1 -0
- package/dist/lib/mcp/tools.js +505 -0
- package/dist/lib/mcp/tools.js.map +1 -0
- package/dist/lib/routes/mcp.d.ts +5 -0
- package/dist/lib/routes/mcp.d.ts.map +1 -0
- package/dist/lib/routes/mcp.js +72 -0
- package/dist/lib/routes/mcp.js.map +1 -0
- package/dist/lib/schema-utils/validator.d.ts +6 -0
- package/dist/lib/schema-utils/validator.d.ts.map +1 -1
- package/dist/lib/schema-utils/validator.js +21 -15
- package/dist/lib/schema-utils/validator.js.map +1 -1
- package/dist/lib/server/index.d.ts +2 -1
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +4 -1
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/utils/string-case.d.ts +21 -0
- package/dist/lib/utils/string-case.d.ts.map +1 -0
- package/dist/lib/utils/string-case.js +26 -0
- package/dist/lib/utils/string-case.js.map +1 -0
- package/dist/lib/vite/index.d.ts.map +1 -1
- package/dist/lib/vite/index.js +12 -1
- package/dist/lib/vite/index.js.map +1 -1
- package/dist/mcp/tools.d.ts +28 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +504 -0
- package/dist/routes/mcp.d.ts +5 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +71 -0
- package/dist/schema-utils/validator.d.ts +6 -0
- package/dist/schema-utils/validator.d.ts.map +1 -1
- package/dist/schema-utils/validator.js +21 -15
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +4 -1
- package/dist/utils/string-case.d.ts +21 -0
- package/dist/utils/string-case.d.ts.map +1 -0
- package/dist/utils/string-case.js +25 -0
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +12 -1
- package/package.json +4 -2
|
@@ -15,6 +15,21 @@ export interface DocumentValidationResult {
|
|
|
15
15
|
* Check if a field is required based on its validation rules
|
|
16
16
|
*/
|
|
17
17
|
export declare function isFieldRequired(field: Field): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Structural (shape) validation for a field's stored value — the depth=0 write
|
|
20
|
+
* shape. This catches a caller (notably an AI agent over MCP) sending the wrong
|
|
21
|
+
* JSON shape that presence/required checks would miss: a slug as `{ current }`
|
|
22
|
+
* (Sanity's convention — AphexCMS stores slugs as plain strings), or a
|
|
23
|
+
* reference/image missing its `_ref`. Runs before the user's Rule validation
|
|
24
|
+
* and only when a value is meaningfully present (absent/empty is a required-ness
|
|
25
|
+
* concern, handled separately), so optional and half-filled fields are left
|
|
26
|
+
* alone. Returns an error message, or null when the shape is acceptable.
|
|
27
|
+
*
|
|
28
|
+
* Intentionally conservative: only unambiguous mismatches error, and empty
|
|
29
|
+
* placeholders (`''`, an image with no `asset`) are treated as absent so the
|
|
30
|
+
* admin's in-progress edit states don't trip it.
|
|
31
|
+
*/
|
|
32
|
+
export declare function validateValueShape(field: Field, value: unknown): string | null;
|
|
18
33
|
/**
|
|
19
34
|
* Validate a field value against its validation rules
|
|
20
35
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/field-validation/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKxD,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACnD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAUrD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAClC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,GAAG,EACV,OAAO,GAAE,GAAQ,GACf,OAAO,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC1B,CAAC,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/field-validation/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKxD,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACnD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAUrD;AAYD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAmC9E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAClC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,GAAG,EACV,OAAO,GAAE,GAAQ,GACf,OAAO,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC1B,CAAC,CA6ID;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,CAO/D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CACzC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,OAAO,GAAE,GAAQ,GACf,OAAO,CAAC,wBAAwB,CAAC,CAqDnC"}
|
|
@@ -18,6 +18,69 @@ export function isFieldRequired(field) {
|
|
|
18
18
|
return false;
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
+
function describeValue(value) {
|
|
22
|
+
if (Array.isArray(value))
|
|
23
|
+
return 'an array';
|
|
24
|
+
if (value === null)
|
|
25
|
+
return 'null';
|
|
26
|
+
if (typeof value === 'object')
|
|
27
|
+
return 'an object';
|
|
28
|
+
return `a ${typeof value}`;
|
|
29
|
+
}
|
|
30
|
+
const isPlainObject = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
31
|
+
/**
|
|
32
|
+
* Structural (shape) validation for a field's stored value — the depth=0 write
|
|
33
|
+
* shape. This catches a caller (notably an AI agent over MCP) sending the wrong
|
|
34
|
+
* JSON shape that presence/required checks would miss: a slug as `{ current }`
|
|
35
|
+
* (Sanity's convention — AphexCMS stores slugs as plain strings), or a
|
|
36
|
+
* reference/image missing its `_ref`. Runs before the user's Rule validation
|
|
37
|
+
* and only when a value is meaningfully present (absent/empty is a required-ness
|
|
38
|
+
* concern, handled separately), so optional and half-filled fields are left
|
|
39
|
+
* alone. Returns an error message, or null when the shape is acceptable.
|
|
40
|
+
*
|
|
41
|
+
* Intentionally conservative: only unambiguous mismatches error, and empty
|
|
42
|
+
* placeholders (`''`, an image with no `asset`) are treated as absent so the
|
|
43
|
+
* admin's in-progress edit states don't trip it.
|
|
44
|
+
*/
|
|
45
|
+
export function validateValueShape(field, value) {
|
|
46
|
+
// Absent (or an empty-string placeholder for a non-string field) → shape is
|
|
47
|
+
// irrelevant here; presence is enforced by Rule().required().
|
|
48
|
+
if (value === null || value === undefined)
|
|
49
|
+
return null;
|
|
50
|
+
switch (field.type) {
|
|
51
|
+
case 'string':
|
|
52
|
+
case 'text':
|
|
53
|
+
case 'slug':
|
|
54
|
+
case 'url':
|
|
55
|
+
return typeof value === 'string' ? null : `expected a string, got ${describeValue(value)}`;
|
|
56
|
+
case 'reference':
|
|
57
|
+
if (value === '')
|
|
58
|
+
return null;
|
|
59
|
+
return isPlainObject(value) && typeof value._ref === 'string'
|
|
60
|
+
? null
|
|
61
|
+
: `expected a reference object { _type: 'reference', _ref: '<documentId>' }, got ${describeValue(value)}`;
|
|
62
|
+
case 'image':
|
|
63
|
+
case 'file': {
|
|
64
|
+
if (value === '')
|
|
65
|
+
return null;
|
|
66
|
+
if (!isPlainObject(value))
|
|
67
|
+
return `expected an ${field.type} object { _type: '${field.type}', asset: { _type: 'reference', _ref: '<assetId>' } }, got ${describeValue(value)}`;
|
|
68
|
+
// An object with no asset yet is a valid empty/in-progress state.
|
|
69
|
+
if (value.asset === undefined || value.asset === null)
|
|
70
|
+
return null;
|
|
71
|
+
return isPlainObject(value.asset) && typeof value.asset._ref === 'string'
|
|
72
|
+
? null
|
|
73
|
+
: `${field.type} asset must be { _type: 'reference', _ref: '<assetId>' }`;
|
|
74
|
+
}
|
|
75
|
+
case 'array':
|
|
76
|
+
return Array.isArray(value) ? null : `expected an array, got ${describeValue(value)}`;
|
|
77
|
+
case 'object':
|
|
78
|
+
return isPlainObject(value) ? null : `expected an object, got ${describeValue(value)}`;
|
|
79
|
+
default:
|
|
80
|
+
// number/boolean/date/datetime — left to existing auto-rules / user rules.
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
21
84
|
/**
|
|
22
85
|
* Validate a field value against its validation rules
|
|
23
86
|
*/
|
|
@@ -28,6 +91,17 @@ export async function validateField(field, value, context = {}) {
|
|
|
28
91
|
hasValidation: !!field.validation
|
|
29
92
|
});
|
|
30
93
|
const allErrors = [];
|
|
94
|
+
// Structural shape check first: if the value is the wrong JSON shape (e.g. a
|
|
95
|
+
// slug sent as `{ current }`, or a reference without `_ref`), report that and
|
|
96
|
+
// stop — the type-assuming auto-rules and user rules below expect the correct
|
|
97
|
+
// primitive/shape and would otherwise throw or emit confusing errors.
|
|
98
|
+
const shapeError = validateValueShape(field, value);
|
|
99
|
+
if (shapeError) {
|
|
100
|
+
return {
|
|
101
|
+
isValid: false,
|
|
102
|
+
errors: [{ level: 'error', message: `Field "${field.name}" ${shapeError}` }]
|
|
103
|
+
};
|
|
104
|
+
}
|
|
31
105
|
// Add automatic validation for date/datetime/url fields based on type
|
|
32
106
|
if (field.type === 'date') {
|
|
33
107
|
const dateField = field;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../src/lib/graphql/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../src/lib/graphql/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,kBAAkB,CAAC;AAyH1D,wBAAgB,eAAe,CAC9B,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,UAAU,EAAE,EACzB,kBAAkB,GAAE,OAAO,GAAG,WAAyB,uBA4tBvD"}
|
|
@@ -2,9 +2,7 @@ import { GraphQLError } from 'graphql';
|
|
|
2
2
|
import { authToContext } from '../local-api/auth-helpers.js';
|
|
3
3
|
import { getDefaultValueForFieldType } from '../utils/field-defaults.js';
|
|
4
4
|
import { cmsLogger } from '../utils/logger.js';
|
|
5
|
-
|
|
6
|
-
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
7
|
-
}
|
|
5
|
+
import { toPascalCase, toCamelCase } from '../utils/string-case.js';
|
|
8
6
|
// Normalize null/undefined field values to type-appropriate defaults (recursive)
|
|
9
7
|
function normalizeDocumentFields(data, schemaType, allSchemaTypes) {
|
|
10
8
|
if (!data)
|
|
@@ -130,7 +128,7 @@ export function createResolvers(cms, schemaTypes, defaultPerspective = 'publishe
|
|
|
130
128
|
// Generate reference field resolvers for all types
|
|
131
129
|
function generateReferenceFieldResolvers() {
|
|
132
130
|
schemaTypes.forEach((schemaType) => {
|
|
133
|
-
const typeName =
|
|
131
|
+
const typeName = toPascalCase(schemaType.name);
|
|
134
132
|
function processFields(fields, currentTypeName) {
|
|
135
133
|
fields.forEach((field) => {
|
|
136
134
|
// Handle reference fields
|
|
@@ -244,7 +242,7 @@ export function createResolvers(cms, schemaTypes, defaultPerspective = 'publishe
|
|
|
244
242
|
}
|
|
245
243
|
// Handle nested objects
|
|
246
244
|
if (field.type === 'object' && field.fields) {
|
|
247
|
-
const nestedTypeName =
|
|
245
|
+
const nestedTypeName = toPascalCase(`${schemaType.name}${field.name}Object`);
|
|
248
246
|
processFields(field.fields, nestedTypeName);
|
|
249
247
|
}
|
|
250
248
|
});
|
|
@@ -262,11 +260,11 @@ export function createResolvers(cms, schemaTypes, defaultPerspective = 'publishe
|
|
|
262
260
|
if (field.type === 'array' && field.of && field.of.length > 1) {
|
|
263
261
|
const validTypes = field.of.filter((item) => schemaTypes.find((s) => s.name === item.type));
|
|
264
262
|
if (validTypes.length > 1) {
|
|
265
|
-
const unionName = `${
|
|
263
|
+
const unionName = `${toPascalCase(parentName)}${toPascalCase(field.name)}Item`;
|
|
266
264
|
resolvers[unionName] = {
|
|
267
265
|
__resolveType(obj) {
|
|
268
266
|
if (obj._type) {
|
|
269
|
-
return
|
|
267
|
+
return toPascalCase(obj._type);
|
|
270
268
|
}
|
|
271
269
|
return null;
|
|
272
270
|
}
|
|
@@ -286,7 +284,8 @@ export function createResolvers(cms, schemaTypes, defaultPerspective = 'publishe
|
|
|
286
284
|
// Generate resolvers for each document type
|
|
287
285
|
const documentTypes = schemaTypes.filter((type) => type.type === 'document');
|
|
288
286
|
documentTypes.forEach((schemaType) => {
|
|
289
|
-
const typeName =
|
|
287
|
+
const typeName = toPascalCase(schemaType.name);
|
|
288
|
+
const fieldName = toCamelCase(schemaType.name);
|
|
290
289
|
// Singleton resolvers: no-arg query, no-id mutations.
|
|
291
290
|
// Schema/codegen already differs for singletons (see schema.ts) — the
|
|
292
291
|
// resolver just delegates to the singleton-aware CollectionAPI methods.
|
|
@@ -306,7 +305,7 @@ export function createResolvers(cms, schemaTypes, defaultPerspective = 'publishe
|
|
|
306
305
|
...normalizedData
|
|
307
306
|
};
|
|
308
307
|
};
|
|
309
|
-
resolvers.Query[
|
|
308
|
+
resolvers.Query[fieldName] = async (_, args, context) => {
|
|
310
309
|
try {
|
|
311
310
|
const { localAPI, auth } = context;
|
|
312
311
|
const apiContext = authToContext(auth);
|
|
@@ -404,7 +403,7 @@ export function createResolvers(cms, schemaTypes, defaultPerspective = 'publishe
|
|
|
404
403
|
return; // skip the regular per-type resolvers below for singletons
|
|
405
404
|
}
|
|
406
405
|
// Single document resolver: page(id: "123", perspective: "draft")
|
|
407
|
-
resolvers.Query[
|
|
406
|
+
resolvers.Query[fieldName] = async (_, args, context) => {
|
|
408
407
|
try {
|
|
409
408
|
const { localAPI, auth } = context;
|
|
410
409
|
const apiContext = authToContext(auth);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/lib/graphql/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAkD,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/lib/graphql/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAkD,MAAM,kBAAkB,CAAC;AAyYnG,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CA2FvE"}
|
package/dist/graphql/schema.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
3
|
-
}
|
|
1
|
+
import { toPascalCase, toCamelCase } from '../utils/string-case.js';
|
|
4
2
|
function generateGraphQLField(field, schemaTypes, parentName = '') {
|
|
5
3
|
const nullability = isFieldRequired(field) ? '!' : '';
|
|
6
4
|
const fieldType = getGraphQLType(field, schemaTypes, parentName);
|
|
@@ -44,7 +42,7 @@ function handleArrayField(field, schemaTypes, parentName = '') {
|
|
|
44
42
|
const refItem = refItems[0];
|
|
45
43
|
const to = refItem.to;
|
|
46
44
|
if (to && to.length === 1) {
|
|
47
|
-
return `[${
|
|
45
|
+
return `[${toPascalCase(to[0].type)}]`;
|
|
48
46
|
}
|
|
49
47
|
return '[JSON]';
|
|
50
48
|
}
|
|
@@ -56,22 +54,22 @@ function handleArrayField(field, schemaTypes, parentName = '') {
|
|
|
56
54
|
// If array contains only one type
|
|
57
55
|
if (validTypes.length === 1) {
|
|
58
56
|
const itemType = validTypes[0];
|
|
59
|
-
return `[${
|
|
57
|
+
return `[${toPascalCase(itemType.type)}]`;
|
|
60
58
|
}
|
|
61
59
|
// For multiple types in array, create union type with parent prefix
|
|
62
|
-
const unionName = `${
|
|
60
|
+
const unionName = `${toPascalCase(parentName)}${toPascalCase(field.name)}Item`;
|
|
63
61
|
return `[${unionName}]`;
|
|
64
62
|
}
|
|
65
63
|
function handleObjectField(field, _schemaTypes, parentName = '') {
|
|
66
64
|
if (field.fields && field.fields.length > 0) {
|
|
67
65
|
// Inline object - create a unique type name with parent prefix
|
|
68
|
-
return
|
|
66
|
+
return toPascalCase(`${parentName}${field.name}Object`);
|
|
69
67
|
}
|
|
70
68
|
return 'String'; // JSON string fallback
|
|
71
69
|
}
|
|
72
70
|
function handleReferenceField(field) {
|
|
73
71
|
if (field.to && field.to.length === 1) {
|
|
74
|
-
return
|
|
72
|
+
return toPascalCase(field.to[0].type);
|
|
75
73
|
}
|
|
76
74
|
return 'String'; // ID reference for MVP
|
|
77
75
|
}
|
|
@@ -82,7 +80,7 @@ function isFieldRequired(field) {
|
|
|
82
80
|
return field.validation.toString().includes('required');
|
|
83
81
|
}
|
|
84
82
|
function generateObjectType(schemaType, allSchemaTypes) {
|
|
85
|
-
const typeName =
|
|
83
|
+
const typeName = toPascalCase(schemaType.name);
|
|
86
84
|
const fields = schemaType.fields
|
|
87
85
|
.map((field) => generateGraphQLField(field, allSchemaTypes, schemaType.name))
|
|
88
86
|
.join('\n');
|
|
@@ -91,7 +89,7 @@ ${fields}
|
|
|
91
89
|
}`;
|
|
92
90
|
}
|
|
93
91
|
function generateDocumentType(schemaType, allSchemaTypes) {
|
|
94
|
-
const typeName =
|
|
92
|
+
const typeName = toPascalCase(schemaType.name);
|
|
95
93
|
const customFields = schemaType.fields
|
|
96
94
|
.map((field) => generateGraphQLField(field, allSchemaTypes, schemaType.name))
|
|
97
95
|
.join('\n');
|
|
@@ -111,7 +109,7 @@ function generateInlineObjectTypes(schemaTypes) {
|
|
|
111
109
|
fields.forEach((field) => {
|
|
112
110
|
if (field.type === 'object' && field.fields) {
|
|
113
111
|
const objectField = field;
|
|
114
|
-
const typeName =
|
|
112
|
+
const typeName = toPascalCase(`${parentName}${field.name}Object`);
|
|
115
113
|
const fieldDefs = objectField.fields
|
|
116
114
|
.map((f) => generateGraphQLField(f, schemaTypes, `${parentName}${field.name}`))
|
|
117
115
|
.join('\n');
|
|
@@ -127,8 +125,8 @@ ${fieldDefs}
|
|
|
127
125
|
// Only create union for types that exist in schemaTypes
|
|
128
126
|
const validTypes = arrayField.of.filter((item) => schemaTypes.find((s) => s.name === item.type));
|
|
129
127
|
if (validTypes.length > 1) {
|
|
130
|
-
const unionName = `${
|
|
131
|
-
const unionTypes = validTypes.map((item) =>
|
|
128
|
+
const unionName = `${toPascalCase(parentName)}${toPascalCase(field.name)}Item`;
|
|
129
|
+
const unionTypes = validTypes.map((item) => toPascalCase(item.type)).join(' | ');
|
|
132
130
|
inlineTypes.push(`union ${unionName} = ${unionTypes}`);
|
|
133
131
|
}
|
|
134
132
|
}
|
|
@@ -186,7 +184,7 @@ input IDFilter {
|
|
|
186
184
|
}
|
|
187
185
|
// Generate where input type for a specific document type
|
|
188
186
|
function generateWhereInputType(schemaType, _allSchemaTypes) {
|
|
189
|
-
const typeName =
|
|
187
|
+
const typeName = toPascalCase(schemaType.name);
|
|
190
188
|
const whereTypeName = `${typeName}WhereInput`;
|
|
191
189
|
// Generate field filters
|
|
192
190
|
const fieldFilters = [];
|
|
@@ -223,7 +221,7 @@ function getFilterType(field) {
|
|
|
223
221
|
}
|
|
224
222
|
// Generate data input type for mutations
|
|
225
223
|
function generateDataInputType(schemaType, allSchemaTypes) {
|
|
226
|
-
const typeName =
|
|
224
|
+
const typeName = toPascalCase(schemaType.name);
|
|
227
225
|
const inputTypeName = `${typeName}DataInput`;
|
|
228
226
|
const fields = [];
|
|
229
227
|
schemaType.fields.forEach((field) => {
|
|
@@ -268,16 +266,17 @@ function generateQueryFields(schemaTypes) {
|
|
|
268
266
|
const documentTypes = schemaTypes.filter((type) => type.type === 'document');
|
|
269
267
|
return documentTypes
|
|
270
268
|
.map((schemaType) => {
|
|
271
|
-
const typeName =
|
|
269
|
+
const typeName = toPascalCase(schemaType.name);
|
|
272
270
|
// Singletons resolve to a single canonical row — no id arg, no
|
|
273
271
|
// `all` query. Lazy-creates on first access via the resolver.
|
|
272
|
+
const fieldName = toCamelCase(schemaType.name);
|
|
274
273
|
if (schemaType.singleton) {
|
|
275
274
|
return ` # Get the ${schemaType.name} singleton (lazy-creates an empty draft on first access)
|
|
276
|
-
${
|
|
275
|
+
${fieldName}(perspective: String, depth: Int): ${typeName}!`;
|
|
277
276
|
}
|
|
278
277
|
const whereInputType = `${typeName}WhereInput`;
|
|
279
278
|
return ` # Get a single ${schemaType.name} by ID
|
|
280
|
-
${
|
|
279
|
+
${fieldName}(id: ID!, perspective: String, depth: Int): ${typeName}
|
|
281
280
|
|
|
282
281
|
# Get all ${schemaType.name} documents with filtering
|
|
283
282
|
all${typeName}(
|
|
@@ -295,7 +294,7 @@ function generateMutationFields(schemaTypes) {
|
|
|
295
294
|
const documentTypes = schemaTypes.filter((type) => type.type === 'document');
|
|
296
295
|
return documentTypes
|
|
297
296
|
.map((schemaType) => {
|
|
298
|
-
const typeName =
|
|
297
|
+
const typeName = toPascalCase(schemaType.name);
|
|
299
298
|
const dataInputType = `${typeName}DataInput`;
|
|
300
299
|
// Singletons skip create/delete/all: there's only ever one row, with
|
|
301
300
|
// a deterministic id, so update/publish/unpublish operate on it
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-defaults.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/components/admin/fields/richtext/block-defaults.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,oBAAoB,UAA+D,CAAC;AAEjG,eAAO,MAAM,wBAAwB,UAA0D,CAAC;AAEhG,eAAO,MAAM,mBAAmB,UAAuB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Default Portable Text block config, applied when a `{ type: 'block' }` in a
|
|
2
|
+
// schema omits its own `styles` / `marks.decorators` / `lists`. Single source of
|
|
3
|
+
// truth: the editor (RichtextField.svelte) and the MCP schema guide
|
|
4
|
+
// (mcp/tools.ts → portableTextGuide) both import these, so what the agent is told
|
|
5
|
+
// matches what the editor actually offers. Plain constants — no Svelte.
|
|
6
|
+
export const DEFAULT_BLOCK_STYLES = ['normal', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote'];
|
|
7
|
+
export const DEFAULT_BLOCK_DECORATORS = ['strong', 'em', 'underline', 'strike-through', 'code'];
|
|
8
|
+
export const DEFAULT_BLOCK_LISTS = ['bullet', 'number'];
|
|
9
|
+
//# sourceMappingURL=block-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-defaults.js","sourceRoot":"","sources":["../../../../../../src/lib/components/admin/fields/richtext/block-defaults.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,iFAAiF;AACjF,oEAAoE;AACpE,kFAAkF;AAClF,wEAAwE;AAExE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AAEjG,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAEhG,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC"}
|
|
@@ -15,6 +15,21 @@ export interface DocumentValidationResult {
|
|
|
15
15
|
* Check if a field is required based on its validation rules
|
|
16
16
|
*/
|
|
17
17
|
export declare function isFieldRequired(field: Field): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Structural (shape) validation for a field's stored value — the depth=0 write
|
|
20
|
+
* shape. This catches a caller (notably an AI agent over MCP) sending the wrong
|
|
21
|
+
* JSON shape that presence/required checks would miss: a slug as `{ current }`
|
|
22
|
+
* (Sanity's convention — AphexCMS stores slugs as plain strings), or a
|
|
23
|
+
* reference/image missing its `_ref`. Runs before the user's Rule validation
|
|
24
|
+
* and only when a value is meaningfully present (absent/empty is a required-ness
|
|
25
|
+
* concern, handled separately), so optional and half-filled fields are left
|
|
26
|
+
* alone. Returns an error message, or null when the shape is acceptable.
|
|
27
|
+
*
|
|
28
|
+
* Intentionally conservative: only unambiguous mismatches error, and empty
|
|
29
|
+
* placeholders (`''`, an image with no `asset`) are treated as absent so the
|
|
30
|
+
* admin's in-progress edit states don't trip it.
|
|
31
|
+
*/
|
|
32
|
+
export declare function validateValueShape(field: Field, value: unknown): string | null;
|
|
18
33
|
/**
|
|
19
34
|
* Validate a field value against its validation rules
|
|
20
35
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/field-validation/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKxD,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACnD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAUrD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAClC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,GAAG,EACV,OAAO,GAAE,GAAQ,GACf,OAAO,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC1B,CAAC,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/field-validation/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKxD,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACnD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAUrD;AAYD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAmC9E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAClC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,GAAG,EACV,OAAO,GAAE,GAAQ,GACf,OAAO,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC1B,CAAC,CA6ID;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,CAO/D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CACzC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,OAAO,GAAE,GAAQ,GACf,OAAO,CAAC,wBAAwB,CAAC,CAqDnC"}
|
|
@@ -18,6 +18,69 @@ export function isFieldRequired(field) {
|
|
|
18
18
|
return false;
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
+
function describeValue(value) {
|
|
22
|
+
if (Array.isArray(value))
|
|
23
|
+
return 'an array';
|
|
24
|
+
if (value === null)
|
|
25
|
+
return 'null';
|
|
26
|
+
if (typeof value === 'object')
|
|
27
|
+
return 'an object';
|
|
28
|
+
return `a ${typeof value}`;
|
|
29
|
+
}
|
|
30
|
+
const isPlainObject = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
31
|
+
/**
|
|
32
|
+
* Structural (shape) validation for a field's stored value — the depth=0 write
|
|
33
|
+
* shape. This catches a caller (notably an AI agent over MCP) sending the wrong
|
|
34
|
+
* JSON shape that presence/required checks would miss: a slug as `{ current }`
|
|
35
|
+
* (Sanity's convention — AphexCMS stores slugs as plain strings), or a
|
|
36
|
+
* reference/image missing its `_ref`. Runs before the user's Rule validation
|
|
37
|
+
* and only when a value is meaningfully present (absent/empty is a required-ness
|
|
38
|
+
* concern, handled separately), so optional and half-filled fields are left
|
|
39
|
+
* alone. Returns an error message, or null when the shape is acceptable.
|
|
40
|
+
*
|
|
41
|
+
* Intentionally conservative: only unambiguous mismatches error, and empty
|
|
42
|
+
* placeholders (`''`, an image with no `asset`) are treated as absent so the
|
|
43
|
+
* admin's in-progress edit states don't trip it.
|
|
44
|
+
*/
|
|
45
|
+
export function validateValueShape(field, value) {
|
|
46
|
+
// Absent (or an empty-string placeholder for a non-string field) → shape is
|
|
47
|
+
// irrelevant here; presence is enforced by Rule().required().
|
|
48
|
+
if (value === null || value === undefined)
|
|
49
|
+
return null;
|
|
50
|
+
switch (field.type) {
|
|
51
|
+
case 'string':
|
|
52
|
+
case 'text':
|
|
53
|
+
case 'slug':
|
|
54
|
+
case 'url':
|
|
55
|
+
return typeof value === 'string' ? null : `expected a string, got ${describeValue(value)}`;
|
|
56
|
+
case 'reference':
|
|
57
|
+
if (value === '')
|
|
58
|
+
return null;
|
|
59
|
+
return isPlainObject(value) && typeof value._ref === 'string'
|
|
60
|
+
? null
|
|
61
|
+
: `expected a reference object { _type: 'reference', _ref: '<documentId>' }, got ${describeValue(value)}`;
|
|
62
|
+
case 'image':
|
|
63
|
+
case 'file': {
|
|
64
|
+
if (value === '')
|
|
65
|
+
return null;
|
|
66
|
+
if (!isPlainObject(value))
|
|
67
|
+
return `expected an ${field.type} object { _type: '${field.type}', asset: { _type: 'reference', _ref: '<assetId>' } }, got ${describeValue(value)}`;
|
|
68
|
+
// An object with no asset yet is a valid empty/in-progress state.
|
|
69
|
+
if (value.asset === undefined || value.asset === null)
|
|
70
|
+
return null;
|
|
71
|
+
return isPlainObject(value.asset) && typeof value.asset._ref === 'string'
|
|
72
|
+
? null
|
|
73
|
+
: `${field.type} asset must be { _type: 'reference', _ref: '<assetId>' }`;
|
|
74
|
+
}
|
|
75
|
+
case 'array':
|
|
76
|
+
return Array.isArray(value) ? null : `expected an array, got ${describeValue(value)}`;
|
|
77
|
+
case 'object':
|
|
78
|
+
return isPlainObject(value) ? null : `expected an object, got ${describeValue(value)}`;
|
|
79
|
+
default:
|
|
80
|
+
// number/boolean/date/datetime — left to existing auto-rules / user rules.
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
21
84
|
/**
|
|
22
85
|
* Validate a field value against its validation rules
|
|
23
86
|
*/
|
|
@@ -28,6 +91,17 @@ export async function validateField(field, value, context = {}) {
|
|
|
28
91
|
hasValidation: !!field.validation
|
|
29
92
|
});
|
|
30
93
|
const allErrors = [];
|
|
94
|
+
// Structural shape check first: if the value is the wrong JSON shape (e.g. a
|
|
95
|
+
// slug sent as `{ current }`, or a reference without `_ref`), report that and
|
|
96
|
+
// stop — the type-assuming auto-rules and user rules below expect the correct
|
|
97
|
+
// primitive/shape and would otherwise throw or emit confusing errors.
|
|
98
|
+
const shapeError = validateValueShape(field, value);
|
|
99
|
+
if (shapeError) {
|
|
100
|
+
return {
|
|
101
|
+
isValid: false,
|
|
102
|
+
errors: [{ level: 'error', message: `Field "${field.name}" ${shapeError}` }]
|
|
103
|
+
};
|
|
104
|
+
}
|
|
31
105
|
// Add automatic validation for date/datetime/url fields based on type
|
|
32
106
|
if (field.type === 'date') {
|
|
33
107
|
const dateField = field;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/field-validation/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAa5C;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAY;IAC3C,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,CAAC;QACJ,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;QAC9F,IAAI,CAAC,YAAY;YAAE,OAAO,KAAK,CAAC;QAChC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,KAAY,EACZ,KAAU,EACV,UAAe,EAAE;IAKjB,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE,qBAAqB,KAAK,CAAC,IAAI,GAAG,EAAE;QACtE,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK;QACL,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU;KACjC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAsB,EAAE,CAAC;IAExC,sEAAsE;IACtE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,KAAY,CAAC;QAC/B,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE,UAAU,IAAI,YAAY,CAAC;QACjE,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE,yCAAyC,KAAK,CAAC,IAAI,GAAG,EAAE;YAC1F,UAAU;SACV,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE;YAC9C,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;YAClB,GAAG,OAAO;SACV,CAAC,CAAC;QAEH,SAAS,CAAC,IAAI,CACb,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;SACvB,CAAC,CAAC,CACH,CAAC;IACH,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,KAAY,CAAC;QACnC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,UAAU,IAAI,YAAY,CAAC;QACrE,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,UAAU,IAAI,OAAO,CAAC;QAChE,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE,6CAA6C,KAAK,CAAC,IAAI,GAAG,EAAE;YAC9F,UAAU;YACV,UAAU;SACV,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE;YAC9C,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;YAClB,GAAG,OAAO;SACV,CAAC,CAAC;QAEH,SAAS,CAAC,IAAI,CACb,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;SACvB,CAAC,CAAC,CACH,CAAC;IACH,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACjC,oEAAoE;QACpE,mGAAmG;QACnG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YACvB,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE,wCAAwC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;YAE1F,8DAA8D;YAC9D,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE;oBAC9C,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;oBAClB,GAAG,OAAO;iBACV,CAAC,CAAC;gBAEH,SAAS,CAAC,IAAI,CACb,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;iBACvB,CAAC,CAAC,CACH,CAAC;YACH,CAAC;QACF,CAAC;aAAM,CAAC;YACP,SAAS,CAAC,KAAK,CACd,iBAAiB,EACjB,0CAA0C,KAAK,CAAC,IAAI,2BAA2B,CAC/E,CAAC;QACH,CAAC;IACF,CAAC;IAED,+CAA+C;IAC/C,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACvB,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE,mCAAmC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IACtF,CAAC;SAAM,CAAC;QACP,IAAI,CAAC;YACJ,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC1D,CAAC,CAAC,KAAK,CAAC,UAAU;gBAClB,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAEtB,SAAS,CAAC,KAAK,CACd,iBAAiB,EACjB,UAAU,KAAK,CAAC,IAAI,SAAS,mBAAmB,CAAC,MAAM,gCAAgC,CACvF,CAAC;YAEF,KAAK,MAAM,YAAY,IAAI,mBAAmB,EAAE,CAAC;gBAChD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAEtC,IAAI,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;oBAC7B,SAAS,CAAC,KAAK,CACd,kCAAkC,KAAK,CAAC,IAAI,yGAAyG,CACrJ,CAAC;oBACF,SAAS;gBACV,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;oBAC1C,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;oBAClB,GAAG,OAAO;iBACV,CAAC,CAAC;gBAEH,SAAS,CAAC,IAAI,CACb,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;iBACvB,CAAC,CAAC,CACH,CAAC;YACH,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE,yBAAyB,KAAK,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC;YACnF,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAClE,CAAC;IACF,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAE1E,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE,UAAU,KAAK,CAAC,IAAI,uBAAuB,EAAE;QAC/E,OAAO;QACP,MAAM,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAkB;IACtD,IAAI,SAAS,EAAE,CAAC;QACf,OAAO,6BAA6B,CAAC;IACtC,CAAC;IAED,0DAA0D;IAC1D,OAAO,EAAE,CAAC;AACX,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,MAAkB,EAClB,IAAyB,EACzB,UAAe,EAAE;IAEjB,SAAS,CAAC,KAAK,CAAC,wBAAwB,EAAE,qBAAqB,EAAE;QAChE,UAAU,EAAE,MAAM,CAAC,IAAI;QACvB,IAAI;KACJ,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAA+C,EAAE,CAAC;IAExE,gFAAgF;IAChF,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAEhF,SAAS,CAAC,KAAK,CAAC,wBAAwB,EAAE,qBAAqB,EAAE;QAChE,cAAc;QACd,iBAAiB;KACjB,CAAC,CAAC;IAEH,oDAAoD;IACpD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,SAAS,CAAC,KAAK,CAAC,wBAAwB,EAAE,qBAAqB,KAAK,CAAC,IAAI,GAAG,EAAE;YAC7E,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK;SACL,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,iBAAiB,EAAE,CAAC,CAAC;QAEvF,SAAS,CAAC,KAAK,CAAC,wBAAwB,EAAE,UAAU,KAAK,CAAC,IAAI,qBAAqB,EAAE;YACpF,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAE7F,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,gBAAgB,CAAC,IAAI,CAAC;oBACrB,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,MAAM,EAAE,aAAa;iBACrB,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;IACF,CAAC;IAED,SAAS,CAAC,KAAK,CAAC,wBAAwB,EAAE,cAAc,EAAE;QACzD,OAAO,EAAE,gBAAgB,CAAC,MAAM,KAAK,CAAC;QACtC,MAAM,EAAE,gBAAgB;KACxB,CAAC,CAAC;IAEH,OAAO;QACN,OAAO,EAAE,gBAAgB,CAAC,MAAM,KAAK,CAAC;QACtC,MAAM,EAAE,gBAAgB;QACxB,cAAc;KACd,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/field-validation/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../src/lib/graphql/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../src/lib/graphql/resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,kBAAkB,CAAC;AAyH1D,wBAAgB,eAAe,CAC9B,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,UAAU,EAAE,EACzB,kBAAkB,GAAE,OAAO,GAAG,WAAyB,uBA4tBvD"}
|
|
@@ -2,9 +2,7 @@ import { GraphQLError } from 'graphql';
|
|
|
2
2
|
import { authToContext } from '../local-api/auth-helpers.js';
|
|
3
3
|
import { getDefaultValueForFieldType } from '../utils/field-defaults.js';
|
|
4
4
|
import { cmsLogger } from '../utils/logger.js';
|
|
5
|
-
|
|
6
|
-
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
7
|
-
}
|
|
5
|
+
import { toPascalCase, toCamelCase } from '../utils/string-case.js';
|
|
8
6
|
// Normalize null/undefined field values to type-appropriate defaults (recursive)
|
|
9
7
|
function normalizeDocumentFields(data, schemaType, allSchemaTypes) {
|
|
10
8
|
if (!data)
|
|
@@ -130,7 +128,7 @@ export function createResolvers(cms, schemaTypes, defaultPerspective = 'publishe
|
|
|
130
128
|
// Generate reference field resolvers for all types
|
|
131
129
|
function generateReferenceFieldResolvers() {
|
|
132
130
|
schemaTypes.forEach((schemaType) => {
|
|
133
|
-
const typeName =
|
|
131
|
+
const typeName = toPascalCase(schemaType.name);
|
|
134
132
|
function processFields(fields, currentTypeName) {
|
|
135
133
|
fields.forEach((field) => {
|
|
136
134
|
// Handle reference fields
|
|
@@ -244,7 +242,7 @@ export function createResolvers(cms, schemaTypes, defaultPerspective = 'publishe
|
|
|
244
242
|
}
|
|
245
243
|
// Handle nested objects
|
|
246
244
|
if (field.type === 'object' && field.fields) {
|
|
247
|
-
const nestedTypeName =
|
|
245
|
+
const nestedTypeName = toPascalCase(`${schemaType.name}${field.name}Object`);
|
|
248
246
|
processFields(field.fields, nestedTypeName);
|
|
249
247
|
}
|
|
250
248
|
});
|
|
@@ -262,11 +260,11 @@ export function createResolvers(cms, schemaTypes, defaultPerspective = 'publishe
|
|
|
262
260
|
if (field.type === 'array' && field.of && field.of.length > 1) {
|
|
263
261
|
const validTypes = field.of.filter((item) => schemaTypes.find((s) => s.name === item.type));
|
|
264
262
|
if (validTypes.length > 1) {
|
|
265
|
-
const unionName = `${
|
|
263
|
+
const unionName = `${toPascalCase(parentName)}${toPascalCase(field.name)}Item`;
|
|
266
264
|
resolvers[unionName] = {
|
|
267
265
|
__resolveType(obj) {
|
|
268
266
|
if (obj._type) {
|
|
269
|
-
return
|
|
267
|
+
return toPascalCase(obj._type);
|
|
270
268
|
}
|
|
271
269
|
return null;
|
|
272
270
|
}
|
|
@@ -286,7 +284,8 @@ export function createResolvers(cms, schemaTypes, defaultPerspective = 'publishe
|
|
|
286
284
|
// Generate resolvers for each document type
|
|
287
285
|
const documentTypes = schemaTypes.filter((type) => type.type === 'document');
|
|
288
286
|
documentTypes.forEach((schemaType) => {
|
|
289
|
-
const typeName =
|
|
287
|
+
const typeName = toPascalCase(schemaType.name);
|
|
288
|
+
const fieldName = toCamelCase(schemaType.name);
|
|
290
289
|
// Singleton resolvers: no-arg query, no-id mutations.
|
|
291
290
|
// Schema/codegen already differs for singletons (see schema.ts) — the
|
|
292
291
|
// resolver just delegates to the singleton-aware CollectionAPI methods.
|
|
@@ -306,7 +305,7 @@ export function createResolvers(cms, schemaTypes, defaultPerspective = 'publishe
|
|
|
306
305
|
...normalizedData
|
|
307
306
|
};
|
|
308
307
|
};
|
|
309
|
-
resolvers.Query[
|
|
308
|
+
resolvers.Query[fieldName] = async (_, args, context) => {
|
|
310
309
|
try {
|
|
311
310
|
const { localAPI, auth } = context;
|
|
312
311
|
const apiContext = authToContext(auth);
|
|
@@ -404,7 +403,7 @@ export function createResolvers(cms, schemaTypes, defaultPerspective = 'publishe
|
|
|
404
403
|
return; // skip the regular per-type resolvers below for singletons
|
|
405
404
|
}
|
|
406
405
|
// Single document resolver: page(id: "123", perspective: "draft")
|
|
407
|
-
resolvers.Query[
|
|
406
|
+
resolvers.Query[fieldName] = async (_, args, context) => {
|
|
408
407
|
try {
|
|
409
408
|
const { localAPI, auth } = context;
|
|
410
409
|
const apiContext = authToContext(auth);
|