@@ -72,12 +72,15 @@ export function buildObjectTypeDefinition(
7272 node ,
7373 config ,
7474 ) ;
75+ const resolverFields = typeInResolverInterfacesConfig ?. fields ;
7576 const fieldsWithArguments = node . fields ?. filter (
7677 ( fieldNode ) => fieldNode . arguments ?. length ,
7778 ) ;
78- const fieldNodes = typeInResolverInterfacesConfig
79- ? node . fields
80- : fieldsWithArguments ;
79+ const fieldNodes = ! typeInResolverInterfacesConfig
80+ ? fieldsWithArguments
81+ : resolverFields
82+ ? node . fields ?. filter ( ( f ) => resolverFields . includes ( f . name . value ) )
83+ : node . fields ;
8184
8285 const isTopLevelType =
8386 node . name . value === "Query" || node . name . value === "Mutation" ;
@@ -101,23 +104,12 @@ ${getClassMembers({ node, fieldNodes, schema, config })}
101104 typeInResolverInterfacesConfig ,
102105 ) ;
103106 if ( shouldGenerateFunctions ) {
104- const atLeastOneFieldHasNoArguments = node . fields ?. some (
105- ( fieldNode ) => ! fieldNode . arguments ?. length ,
107+ const constructor = buildConstructor (
108+ node ,
109+ typeInResolverInterfacesConfig ,
110+ schema ,
111+ config ,
106112 ) ;
107- const constructor =
108- ! typeInResolverInterfacesConfig && atLeastOneFieldHasNoArguments
109- ? `(\n${ node . fields
110- ?. map ( ( fieldNode ) => {
111- return buildConstructorFieldDefinition ( {
112- node,
113- fieldNode,
114- schema,
115- config,
116- } ) ;
117- } )
118- . join ( ",\n" ) } \n)`
119- : "" ;
120-
121113 return `${ annotations } ${ outputRestrictionAnnotation } open class ${ name } ${ constructor } ${ interfaceInheritance } {
122114${ getClassMembers ( { node, fieldNodes, schema, config } ) }
123115}` ;
@@ -128,6 +120,50 @@ ${getClassMembers({ node, schema, config })}
128120)${ interfaceInheritance } ` ;
129121}
130122
123+ function buildConstructor (
124+ node : ObjectTypeDefinitionNode ,
125+ typeInResolverInterfacesConfig : ReturnType <
126+ typeof findTypeInResolverInterfacesConfig
127+ > ,
128+ schema : GraphQLSchema ,
129+ config : CodegenConfigWithDefaults ,
130+ ) : string {
131+ const resolverFields = typeInResolverInterfacesConfig ?. fields ;
132+
133+ if ( resolverFields ) {
134+ const nonResolverFields = node . fields ?. filter (
135+ ( f ) => ! resolverFields . includes ( f . name . value ) ,
136+ ) ;
137+ if ( ! nonResolverFields ?. length ) return "" ;
138+ return `(\n${ nonResolverFields
139+ . map ( ( fieldNode ) =>
140+ buildConstructorFieldDefinition ( {
141+ node,
142+ fieldNode,
143+ schema,
144+ config,
145+ typeInResolverInterfacesConfigOverride : null ,
146+ } ) . replace ( / , $ / , "" ) ,
147+ )
148+ . join ( ",\n" ) } \n)`;
149+ }
150+
151+ if ( typeInResolverInterfacesConfig ) return "" ;
152+
153+ const fieldsForConstructor = node . fields ?. filter ( ( f ) => ! f . arguments ?. length ) ;
154+ if ( ! fieldsForConstructor ?. length ) return "" ;
155+ return `(\n${ node . fields
156+ ?. map ( ( fieldNode ) =>
157+ buildConstructorFieldDefinition ( {
158+ node,
159+ fieldNode,
160+ schema,
161+ config,
162+ } ) ,
163+ )
164+ . join ( ",\n" ) } \n)`;
165+ }
166+
131167function getClassMembers ( {
132168 node,
133169 fieldNodes,
0 commit comments