Skip to content

Commit cd9fc8e

Browse files
GraphQLSchema: Remove unneeded recursion during type collection (#2083)
1 parent 89f9f72 commit cd9fc8e

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

src/type/schema.js

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import {
3232
isInterfaceType,
3333
isUnionType,
3434
isInputObjectType,
35-
isWrappingType,
35+
getNamedType,
3636
} from './definition';
3737

3838
/**
@@ -324,39 +324,39 @@ function typeMapReducer(map: TypeMap, type: ?GraphQLType): TypeMap {
324324
if (!type) {
325325
return map;
326326
}
327-
if (isWrappingType(type)) {
328-
return typeMapReducer(map, type.ofType);
329-
}
330-
if (map[type.name]) {
331-
if (map[type.name] !== type) {
327+
328+
const namedType = getNamedType(type);
329+
const seenType = map[namedType.name];
330+
if (seenType) {
331+
if (seenType !== namedType) {
332332
throw new Error(
333-
`Schema must contain uniquely named types but contains multiple types named "${type.name}".`,
333+
`Schema must contain uniquely named types but contains multiple types named "${namedType.name}".`,
334334
);
335335
}
336336
return map;
337337
}
338-
map[type.name] = type;
338+
map[namedType.name] = namedType;
339339

340340
let reducedMap = map;
341341

342-
if (isUnionType(type)) {
343-
reducedMap = type.getTypes().reduce(typeMapReducer, reducedMap);
342+
if (isUnionType(namedType)) {
343+
reducedMap = namedType.getTypes().reduce(typeMapReducer, reducedMap);
344344
}
345345

346-
if (isObjectType(type)) {
347-
reducedMap = type.getInterfaces().reduce(typeMapReducer, reducedMap);
346+
if (isObjectType(namedType)) {
347+
reducedMap = namedType.getInterfaces().reduce(typeMapReducer, reducedMap);
348348
}
349349

350-
if (isObjectType(type) || isInterfaceType(type)) {
351-
for (const field of objectValues(type.getFields())) {
350+
if (isObjectType(namedType) || isInterfaceType(namedType)) {
351+
for (const field of objectValues(namedType.getFields())) {
352352
const fieldArgTypes = field.args.map(arg => arg.type);
353353
reducedMap = fieldArgTypes.reduce(typeMapReducer, reducedMap);
354354
reducedMap = typeMapReducer(reducedMap, field.type);
355355
}
356356
}
357357

358-
if (isInputObjectType(type)) {
359-
for (const field of objectValues(type.getFields())) {
358+
if (isInputObjectType(namedType)) {
359+
for (const field of objectValues(namedType.getFields())) {
360360
reducedMap = typeMapReducer(reducedMap, field.type);
361361
}
362362
}

0 commit comments

Comments
 (0)