Automattic\WooCommerce\Vendor\GraphQL\Validator\Rules
UniqueDirectivesPerLocation::getASTVisitor
Method of the class: UniqueDirectivesPerLocation{}
No Hooks.
Returns
null. Nothing (null).
Usage
$UniqueDirectivesPerLocation = new UniqueDirectivesPerLocation(); $UniqueDirectivesPerLocation->getASTVisitor( $context ): array;
- $context(ValidationContext) (required)
- .
UniqueDirectivesPerLocation::getASTVisitor() UniqueDirectivesPerLocation::getASTVisitor code WC 10.9.1
public function getASTVisitor(ValidationContext $context): array
{
/** @var array<string, true> $uniqueDirectiveMap */
$uniqueDirectiveMap = [];
$schema = $context->getSchema();
$definedDirectives = $schema !== null
? $schema->getDirectives()
: Directive::getInternalDirectives();
foreach ($definedDirectives as $directive) {
if (! $directive->isRepeatable) {
$uniqueDirectiveMap[$directive->name] = true;
}
}
$astDefinitions = $context->getDocument()->definitions;
foreach ($astDefinitions as $definition) {
if ($definition instanceof DirectiveDefinitionNode
&& ! $definition->repeatable
) {
$uniqueDirectiveMap[$definition->name->value] = true;
}
}
return [
'enter' => static function (Node $node) use ($uniqueDirectiveMap, $context): void {
if (! property_exists($node, 'directives')) {
return;
}
$knownDirectives = [];
foreach ($node->directives as $directive) {
$directiveName = $directive->name->value;
if (isset($uniqueDirectiveMap[$directiveName])) {
if (isset($knownDirectives[$directiveName])) {
$context->reportError(new Error(
static::duplicateDirectiveMessage($directiveName),
[$knownDirectives[$directiveName], $directive]
));
} else {
$knownDirectives[$directiveName] = $directive;
}
}
}
},
];
}