<?phpnamespaceGraphQL\Validator\Rules;useGraphQL\Error\Error;useGraphQL\Language\AST\DirectiveNode;useGraphQL\Language\AST\Node;useGraphQL\Validator\ValidationContext;classUniqueDirectivesPerLocationextendsAbstractValidationRule{staticfunctionduplicateDirectiveMessage($directiveName){return'The directive "'.$directiveName.'" can only be used once at this location.';}publicfunctiongetVisitor(ValidationContext$context){return['enter'=>function(Node$node)use($context){if(isset($node->directives)){$knownDirectives=[];foreach($node->directivesas$directive){/** @var DirectiveNode $directive */$directiveName=$directive->name->value;if(isset($knownDirectives[$directiveName])){$context->reportError(newError(self::duplicateDirectiveMessage($directiveName),[$knownDirectives[$directiveName],$directive]));}else{$knownDirectives[$directiveName]=$directive;}}}}];}}