Skip to content

Commit 50b6d97

Browse files
type-validate: inline getAllNodes function (#2953)
1 parent fe5f91e commit 50b6d97

File tree

1 file changed

+14
-28
lines changed

1 file changed

+14
-28
lines changed

src/type/validate.js

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,9 @@ function getOperationTypeNode(
144144
operation: OperationTypeNode,
145145
): ?ASTNode {
146146
// istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')
147-
return getAllNodes(schema)
148-
.flatMap((schemaNode) => schemaNode.operationTypes ?? [])
147+
return [schema.astNode]
148+
.concat(schema.extensionASTNodes)
149+
.flatMap((schemaNode) => schemaNode?.operationTypes ?? [])
149150
.find((operationNode) => operationNode.operation === operation)?.type;
150151
}
151152

@@ -262,7 +263,7 @@ function validateFields(
262263
if (fields.length === 0) {
263264
context.reportError(
264265
`Type ${type.name} must define one or more fields.`,
265-
getAllNodes(type),
266+
[type.astNode].concat(type.extensionASTNodes),
266267
);
267268
}
268269

@@ -363,7 +364,7 @@ function validateTypeImplementsInterface(
363364
if (!typeField) {
364365
context.reportError(
365366
`Interface field ${iface.name}.${fieldName} expected but ${type.name} does not provide it.`,
366-
[ifaceField.astNode, ...getAllNodes(type)],
367+
[ifaceField.astNode, type.astNode].concat(type.extensionASTNodes),
367368
);
368369
continue;
369370
}
@@ -463,7 +464,7 @@ function validateUnionMembers(
463464
if (memberTypes.length === 0) {
464465
context.reportError(
465466
`Union type ${union.name} must define one or more member types.`,
466-
getAllNodes(union),
467+
[union.astNode].concat(union.extensionASTNodes),
467468
);
468469
}
469470

@@ -496,7 +497,7 @@ function validateEnumValues(
496497
if (enumValues.length === 0) {
497498
context.reportError(
498499
`Enum type ${enumType.name} must define one or more values.`,
499-
getAllNodes(enumType),
500+
[enumType.astNode].concat(enumType.extensionASTNodes),
500501
);
501502
}
502503

@@ -523,7 +524,7 @@ function validateInputFields(
523524
if (fields.length === 0) {
524525
context.reportError(
525526
`Input Object type ${inputObj.name} must define one or more fields.`,
526-
getAllNodes(inputObj),
527+
[inputObj.astNode].concat(inputObj.extensionASTNodes),
527528
);
528529
}
529530

@@ -606,30 +607,14 @@ function createInputObjectCircularRefsValidator(
606607
}
607608
}
608609

609-
type SDLDefinedObject<T, K> = {
610-
+astNode: ?T,
611-
+extensionASTNodes?: ?$ReadOnlyArray<K>,
612-
...
613-
};
614-
615-
function getAllNodes<T: ASTNode, K: ASTNode>(
616-
object: SDLDefinedObject<T, K>,
617-
): $ReadOnlyArray<T | K> {
618-
const { astNode, extensionASTNodes } = object;
619-
return astNode
620-
? extensionASTNodes
621-
? [astNode].concat(extensionASTNodes)
622-
: [astNode]
623-
: extensionASTNodes ?? [];
624-
}
625-
626610
function getAllImplementsInterfaceNodes(
627611
type: GraphQLObjectType | GraphQLInterfaceType,
628612
iface: GraphQLInterfaceType,
629613
): $ReadOnlyArray<NamedTypeNode> {
630614
// istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')
631-
return getAllNodes(type)
632-
.flatMap((typeNode) => typeNode.interfaces ?? [])
615+
return [type.astNode]
616+
.concat(type.extensionASTNodes)
617+
.flatMap((typeNode) => typeNode?.interfaces ?? [])
633618
.filter((ifaceNode) => ifaceNode.name.value === iface.name);
634619
}
635620

@@ -638,8 +623,9 @@ function getUnionMemberTypeNodes(
638623
typeName: string,
639624
): ?$ReadOnlyArray<NamedTypeNode> {
640625
// istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203')
641-
return getAllNodes(union)
642-
.flatMap((unionNode) => unionNode.types ?? [])
626+
return [union.astNode]
627+
.concat(union.extensionASTNodes)
628+
.flatMap((unionNode) => unionNode?.types ?? [])
643629
.filter((typeNode) => typeNode.name.value === typeName);
644630
}
645631

0 commit comments

Comments
 (0)