@@ -6,6 +6,7 @@ import type {
6
6
FieldNode ,
7
7
FormattedExecutionResult ,
8
8
GraphQLCompositeType ,
9
+ GraphQLNamedType ,
9
10
InputObjectTypeDefinitionNode ,
10
11
InputObjectTypeExtensionNode ,
11
12
InputValueDefinitionNode ,
@@ -181,8 +182,6 @@ export class GrowingSchema {
181
182
// the input objects are correct.
182
183
private seenQueries = new WeakSet < GraphQLOperation > ( ) ;
183
184
184
- private seenInputObjects : Record < string , string [ ] > = { } ;
185
-
186
185
public validateQuery ( query : DocumentNode ) {
187
186
const errors = validate ( this . schema , query , enforcedRules ) ;
188
187
if ( errors . length > 0 ) {
@@ -204,17 +203,6 @@ export class GrowingSchema {
204
203
205
204
this . validateResponseAgainstSchema ( operation , response ) ;
206
205
this . seenQueries . add ( operation ) ;
207
-
208
- // Track the fields of each input object so we can avoid
209
- // creating duplicate input objects.
210
- Object . entries ( this . schema . getTypeMap ( ) ) . forEach ( ( [ name , node ] ) => {
211
- if ( node instanceof GraphQLInputObjectType ) {
212
- this . seenInputObjects [ name ] =
213
- node . astNode ?. fields ?. map ( ( field ) => {
214
- return field . name . value ;
215
- } ) || [ ] ;
216
- }
217
- } ) ;
218
206
} catch ( e ) {
219
207
this . schema = previousSchema ;
220
208
throw e ;
@@ -455,6 +443,10 @@ export class GrowingSchema {
455
443
}
456
444
}
457
445
446
+ private getType < T extends GraphQLNamedType > ( name : string ) : T {
447
+ return this . schema . getType ( name ) as T ;
448
+ }
449
+
458
450
private getVariableDefinitionsFromAncestors (
459
451
ancestors : readonly ( ASTNode | readonly ASTNode [ ] ) [ ]
460
452
) : OperationVariableDefinitions {
@@ -616,7 +608,7 @@ export class GrowingSchema {
616
608
return [
617
609
{
618
610
kind :
619
- this . seenInputObjects [ name ] ?
611
+ this . getType ( name ) ?
620
612
Kind . INPUT_OBJECT_TYPE_EXTENSION
621
613
: Kind . INPUT_OBJECT_TYPE_DEFINITION ,
622
614
name : { kind : Kind . NAME , value : name } ,
@@ -633,6 +625,11 @@ export class GrowingSchema {
633
625
fields : InputValueDefinitionNode [ ] ;
634
626
inputObjects : InputObjectsList ;
635
627
} {
628
+ const existingInputObject =
629
+ this . getType < GraphQLInputObjectType > ( inputObjectName ) ;
630
+ const existingInputObjectFields =
631
+ existingInputObject ?. astNode ?. fields ?. map ( ( field ) => field . name . value ) ||
632
+ [ ] ;
636
633
const inputObjects : InputObjectsList = [ ] ;
637
634
638
635
let valuesToHandle = valuesInScope ;
@@ -727,8 +724,7 @@ export class GrowingSchema {
727
724
} as InputValueDefinitionNode ;
728
725
} )
729
726
. filter (
730
- ( field ) =>
731
- ! this . seenInputObjects [ inputObjectName ] ?. includes ( field . name . value )
727
+ ( field ) => ! existingInputObjectFields ?. includes ( field . name . value )
732
728
) ;
733
729
return { fields, inputObjects } ;
734
730
}
0 commit comments