UNPKG

@theguild/federation-composition

Version:
31 lines (30 loc) 1.27 kB
import { GraphQLError, Kind } from "graphql"; export function KnownArgumentNamesOnDirectivesRule(context) { const directiveArgs = new Map(); const astDefinitions = context.getDocument().definitions; for (const def of astDefinitions) { if (def.kind === Kind.DIRECTIVE_DEFINITION) { const argsNodes = def.arguments ?? []; directiveArgs.set(def.name.value, new Set(argsNodes.map((arg) => arg.name.value))); } } return { Directive(directiveNode) { const directiveName = directiveNode.name.value; const knownArgs = directiveArgs.get(directiveName); if (directiveNode.arguments && knownArgs) { for (const argNode of directiveNode.arguments) { const argName = argNode.name.value; if (!knownArgs.has(argName)) { context.reportError(new GraphQLError(`Unknown argument "${argName}" on directive "@${directiveName}".`, { nodes: argNode, extensions: { code: "INVALID_GRAPHQL", }, })); } } } }, }; }