@theguild/federation-composition
Version:
Open Source Composition library for Apollo Federation
30 lines (29 loc) • 1.05 kB
JavaScript
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);
}
}
}
}