Skip to content

Commit 217a47d

Browse files
authoredMar 18, 2024
Fix bug where we cant resolve custom types (#6016)
* chore(schema): optimize(readability) document dependency check * fix(schema): map tyhe schemaType type, and not the schematype fixes a bug where we cant map custom defined string fields etc
1 parent dcd5537 commit 217a47d

File tree

3 files changed

+36
-7
lines changed

3 files changed

+36
-7
lines changed
 

‎packages/@sanity/schema/src/sanity/extractSchema.ts

+10-7
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,8 @@ export function extractSchema(
171171
}
172172

173173
// map some known types
174-
if (typesMap.has(schemaType.name)) {
175-
return typesMap.get(schemaType.name)
174+
if (schemaType.type && typesMap.has(schemaType.type.name)) {
175+
return typesMap.get(schemaType.type.name)
176176
}
177177

178178
// Cross dataset references are not supported
@@ -457,18 +457,20 @@ function sortByDependencies(compiledSchema: SchemaDef): string[] {
457457

458458
if ('fields' in schemaType) {
459459
for (const field of gatherFields(schemaType)) {
460+
const last = lastType(field.type)
461+
if (last.name === 'document') {
462+
dependencies.add(last)
463+
continue
464+
}
465+
460466
let schemaTypeName: string | undefined
461467
if (schemaType.type.type) {
462468
schemaTypeName = field.type.type.name
463469
} else if ('jsonType' in schemaType.type) {
464470
schemaTypeName = field.type.jsonType
465471
}
466472

467-
if (
468-
schemaTypeName === 'document' ||
469-
schemaTypeName === 'object' ||
470-
schemaTypeName === 'block'
471-
) {
473+
if (schemaTypeName === 'object' || schemaTypeName === 'block') {
472474
if (isReferenceType(field.type)) {
473475
field.type.to.forEach((ref) => dependencies.add(ref.type))
474476
} else {
@@ -493,6 +495,7 @@ function sortByDependencies(compiledSchema: SchemaDef): string[] {
493495

494496
walkDependencies(schemaType, dependencies)
495497
dependencyMap.set(schemaType, dependencies)
498+
seen.clear() // Clear the seen set for the next type
496499
})
497500

498501
// Sorts the types by their dependencies

‎packages/@sanity/schema/test/extractSchema/__snapshots__/extractSchema.test.ts.snap

+15
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,13 @@ Array [
222222
"type": "object",
223223
},
224224
},
225+
Object {
226+
"name": "someTextType",
227+
"type": "type",
228+
"value": Object {
229+
"type": "string",
230+
},
231+
},
225232
Object {
226233
"attributes": Object {
227234
"_createdAt": Object {
@@ -4268,6 +4275,14 @@ Array [
42684275
"type": "inline",
42694276
},
42704277
},
4278+
"someTextType": Object {
4279+
"optional": true,
4280+
"type": "objectAttribute",
4281+
"value": Object {
4282+
"name": "someTextType",
4283+
"type": "inline",
4284+
},
4285+
},
42714286
"title": Object {
42724287
"optional": true,
42734288
"type": "objectAttribute",

‎packages/@sanity/schema/test/extractSchema/extractSchema.test.ts

+11
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,11 @@ describe('Extract schema test', () => {
8989
name: 'manuscript',
9090
type: 'manuscript',
9191
},
92+
{
93+
title: 'Some text',
94+
name: 'someTextType',
95+
type: 'someTextType',
96+
},
9297
{
9398
title: 'customStringType',
9499
name: 'customStringType',
@@ -225,6 +230,10 @@ describe('Extract schema test', () => {
225230
},
226231
],
227232
},
233+
defineType({
234+
name: 'someTextType',
235+
type: 'text',
236+
}),
228237
],
229238
})
230239

@@ -235,6 +244,7 @@ describe('Extract schema test', () => {
235244
'sanity.imageDimensions',
236245
'geopoint',
237246
'slug',
247+
'someTextType',
238248
'sanity.fileAsset',
239249
'code',
240250
'customStringType',
@@ -269,6 +279,7 @@ describe('Extract schema test', () => {
269279
'number',
270280
'someInlinedObject',
271281
'manuscript',
282+
'someTextType',
272283
'customStringType',
273284
'blocks',
274285
'other',

0 commit comments

Comments
 (0)
Please sign in to comment.