UNPKG

1.17 kBJavaScriptView Raw
1import { GraphQLError } from "../../error/GraphQLError.mjs";
2
3/**
4 * Unique type names
5 *
6 * A GraphQL document is only valid if all defined types have unique names.
7 */
8export function UniqueTypeNamesRule(context) {
9 var knownTypeNames = Object.create(null);
10 var schema = context.getSchema();
11 return {
12 ScalarTypeDefinition: checkTypeName,
13 ObjectTypeDefinition: checkTypeName,
14 InterfaceTypeDefinition: checkTypeName,
15 UnionTypeDefinition: checkTypeName,
16 EnumTypeDefinition: checkTypeName,
17 InputObjectTypeDefinition: checkTypeName
18 };
19
20 function checkTypeName(node) {
21 var typeName = node.name.value;
22
23 if (schema !== null && schema !== void 0 && schema.getType(typeName)) {
24 context.reportError(new GraphQLError("Type \"".concat(typeName, "\" already exists in the schema. It cannot also be defined in this type definition."), node.name));
25 return;
26 }
27
28 if (knownTypeNames[typeName]) {
29 context.reportError(new GraphQLError("There can be only one type named \"".concat(typeName, "\"."), [knownTypeNames[typeName], node.name]));
30 } else {
31 knownTypeNames[typeName] = node.name;
32 }
33
34 return false;
35 }
36}