@graphql-tools/graphql
Version:
Fork of GraphQL.js
31 lines (30 loc) • 1.09 kB
JavaScript
import { groupBy } from '../../jsutils/groupBy.js';
import { GraphQLError } from '../../error/GraphQLError.js';
/**
* Unique argument names
*
* A GraphQL field or directive is only valid if all supplied arguments are
* uniquely named.
*
* See https://spec.graphql.org/draft/#sec-Argument-Names
*/
export function UniqueArgumentNamesRule(context) {
return {
Field: checkArgUniqueness,
Directive: checkArgUniqueness,
};
function checkArgUniqueness(parentNode) {
var _a;
// FIXME: https://github.com/graphql/graphql-js/issues/2203
/* c8 ignore next */
const argumentNodes = (_a = parentNode.arguments) !== null && _a !== void 0 ? _a : [];
const seenArgs = groupBy(argumentNodes, arg => arg.name.value);
for (const [argName, argNodes] of seenArgs) {
if (argNodes.length > 1) {
context.reportError(new GraphQLError(`There can be only one argument named "${argName}".`, {
nodes: argNodes.map(node => node.name),
}));
}
}
}
}