@@ -164,57 +164,31 @@ export function buildASTSchema(ast: DocumentNode): GraphQLSchema {
164
164
}
165
165
}
166
166
167
- let queryTypeName ;
168
- let mutationTypeName ;
169
- let subscriptionTypeName ;
167
+ let operationTypes = {
168
+ query : nodeMap . Query && 'Query' ,
169
+ mutation : nodeMap . Mutation && 'Mutation' ,
170
+ subscription : nodeMap . Subscription && 'Subscription' ,
171
+ } ;
172
+
170
173
if ( schemaDef ) {
174
+ operationTypes = { } ;
171
175
schemaDef . operationTypes . forEach ( operationType => {
172
176
const typeName = operationType . type . name . value ;
173
- if ( operationType . operation === 'query' ) {
174
- if ( queryTypeName ) {
175
- throw new Error ( 'Must provide only one query type in schema.' ) ;
176
- }
177
- if ( ! nodeMap [ typeName ] ) {
178
- throw new Error (
179
- `Specified query type "${ typeName } " not found in document.`
180
- ) ;
181
- }
182
- queryTypeName = typeName ;
183
- } else if ( operationType . operation === 'mutation' ) {
184
- if ( mutationTypeName ) {
185
- throw new Error ( 'Must provide only one mutation type in schema.' ) ;
186
- }
187
- if ( ! nodeMap [ typeName ] ) {
188
- throw new Error (
189
- `Specified mutation type "${ typeName } " not found in document.`
190
- ) ;
191
- }
192
- mutationTypeName = typeName ;
193
- } else if ( operationType . operation === 'subscription' ) {
194
- if ( subscriptionTypeName ) {
195
- throw new Error ( 'Must provide only one subscription type in schema.' ) ;
196
- }
197
- if ( ! nodeMap [ typeName ] ) {
198
- throw new Error (
199
- `Specified subscription type "${ typeName } " not found in document.`
200
- ) ;
201
- }
202
- subscriptionTypeName = typeName ;
177
+ const operation = operationType . operation ;
178
+
179
+ if ( operationTypes [ operation ] ) {
180
+ throw new Error ( `Must provide only one ${ operation } type in schema.` ) ;
181
+ }
182
+ if ( ! nodeMap [ typeName ] ) {
183
+ throw new Error (
184
+ `Specified ${ operation } type "${ typeName } " not found in document.`
185
+ ) ;
203
186
}
187
+ operationTypes [ operation ] = typeName ;
204
188
} ) ;
205
- } else {
206
- if ( nodeMap . Query ) {
207
- queryTypeName = 'Query' ;
208
- }
209
- if ( nodeMap . Mutation ) {
210
- mutationTypeName = 'Mutation' ;
211
- }
212
- if ( nodeMap . Subscription ) {
213
- subscriptionTypeName = 'Subscription' ;
214
- }
215
189
}
216
190
217
- if ( ! queryTypeName ) {
191
+ if ( ! operationTypes . query ) {
218
192
throw new Error (
219
193
'Must provide schema definition with query type or a type named Query.'
220
194
) ;
@@ -254,12 +228,12 @@ export function buildASTSchema(ast: DocumentNode): GraphQLSchema {
254
228
}
255
229
256
230
return new GraphQLSchema({
257
- query : getObjectType ( nodeMap [ queryTypeName ] ) ,
258
- mutation : mutationTypeName ?
259
- getObjectType ( nodeMap [ mutationTypeName ] ) :
231
+ query : getObjectType ( operationTypes . query ) ,
232
+ mutation : operationTypes . mutation ?
233
+ getObjectType ( operationTypes . mutation ) :
260
234
null ,
261
- subscription : subscriptionTypeName ?
262
- getObjectType ( nodeMap [ subscriptionTypeName ] ) :
235
+ subscription : operationTypes . subscription ?
236
+ getObjectType ( operationTypes . subscription ) :
263
237
null ,
264
238
types ,
265
239
directives ,
@@ -280,8 +254,8 @@ export function buildASTSchema(ast: DocumentNode): GraphQLSchema {
280
254
} ) ;
281
255
}
282
256
283
- function getObjectType(typeNode: TypeDefinitionNode ): GraphQLObjectType {
284
- const type = typeDefNamed ( typeNode . name . value ) ;
257
+ function getObjectType(name: string ): GraphQLObjectType {
258
+ const type = typeDefNamed ( name ) ;
285
259
invariant (
286
260
type instanceof GraphQLObjectType ,
287
261
'AST must provide object type.'
0 commit comments