UNPKG

@theguild/federation-composition

Version:
30 lines (29 loc) 1.05 kB
import { GraphQLError, } from "graphql"; export function UniqueEnumValueNamesRule(context) { const knownValueNames = new Map(); return { EnumTypeDefinition: checkValueUniqueness, EnumTypeExtension: checkValueUniqueness, }; function checkValueUniqueness(node) { const typeName = node.name.value; if (!knownValueNames.has(typeName)) { knownValueNames.set(typeName, new Set()); } const valueNodes = node.values ?? []; const valueNames = knownValueNames.get(typeName); for (const valueDef of valueNodes) { const valueName = valueDef.name.value; if (valueNames.has(valueName)) { context.reportError(new GraphQLError(`Enum value "${typeName}.${valueName}" can only be defined once.`, { extensions: { code: "INVALID_GRAPHQL", }, })); } else { valueNames.add(valueName); } } } }