Skip to content

Commit 7b1b918

Browse files
committed
Integrate into validateTypes main type cycle
1 parent 09f212a commit 7b1b918

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

src/type/validate.js

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,11 @@ function validateName(
232232
}
233233

234234
function validateTypes(context: SchemaValidationContext): void {
235+
const validateInputObjectCircularRefs = createInputObjectCircularRefsValidator(
236+
context,
237+
);
235238
const typeMap = context.schema.getTypeMap();
239+
236240
objectValues(typeMap).forEach(type => {
237241
// Ensure all provided types are in fact GraphQL type.
238242
if (!isNamedType(type)) {
@@ -266,11 +270,11 @@ function validateTypes(context: SchemaValidationContext): void {
266270
} else if (isInputObjectType(type)) {
267271
// Ensure Input Object fields are valid.
268272
validateInputFields(context, type);
273+
274+
// Ensure Input Objects do not contain non-nullable circular references
275+
validateInputObjectCircularRefs(type);
269276
}
270277
});
271-
272-
// Ensure Input Objects do not contain non-nullable circular references
273-
validateInputObjectCircularReferences(context);
274278
}
275279

276280
function validateFields(
@@ -563,9 +567,9 @@ function validateInputFields(
563567
});
564568
}
565569

566-
function validateInputObjectCircularReferences(
570+
function createInputObjectCircularRefsValidator(
567571
context: SchemaValidationContext,
568-
): void {
572+
) {
569573
// Modified copy of algorithm from 'src/validation/rules/NoFragmentCycles.js'.
570574
// Tracks already visited types to maintain O(N) and to ensure that cycles
571575
// are not redundantly reported.
@@ -577,12 +581,7 @@ function validateInputObjectCircularReferences(
577581
// Position in the type path
578582
const fieldPathIndexByTypeName = Object.create(null);
579583

580-
const typeMap = context.schema.getTypeMap();
581-
for (const type of objectValues(typeMap)) {
582-
if (isInputObjectType(type)) {
583-
detectCycleRecursive(type);
584-
}
585-
}
584+
return detectCycleRecursive;
586585

587586
// This does a straight-forward DFS to find cycles.
588587
// It does not terminate when a cycle was found but continues to explore

0 commit comments

Comments
 (0)