Automattic\WooCommerce\Vendor\GraphQL\Validator\Rules
KnownArgumentNamesOnDirectives::getASTVisitor
Method of the class: KnownArgumentNamesOnDirectives{}
No Hooks.
Returns
null. Nothing (null).
Usage
$KnownArgumentNamesOnDirectives = new KnownArgumentNamesOnDirectives(); $KnownArgumentNamesOnDirectives->getASTVisitor( $context ): array;
- $context(ValidationContext) (required)
- .
KnownArgumentNamesOnDirectives::getASTVisitor() KnownArgumentNamesOnDirectives::getASTVisitor code WC 10.9.1
public function getASTVisitor(ValidationContext $context): array
{
$directiveArgs = [];
$schema = $context->getSchema();
$definedDirectives = $schema !== null
? $schema->getDirectives()
: Directive::getInternalDirectives();
foreach ($definedDirectives as $directive) {
$directiveArgs[$directive->name] = array_map(
static fn (Argument $arg): string => $arg->name,
$directive->args
);
}
$astDefinitions = $context->getDocument()->definitions;
foreach ($astDefinitions as $def) {
if ($def instanceof DirectiveDefinitionNode) {
$argNames = [];
foreach ($def->arguments as $arg) {
$argNames[] = $arg->name->value;
}
$directiveArgs[$def->name->value] = $argNames;
}
}
return [
NodeKind::DIRECTIVE => static function (DirectiveNode $directiveNode) use ($directiveArgs, $context): VisitorOperation {
$directiveName = $directiveNode->name->value;
if (! isset($directiveArgs[$directiveName])) {
return Visitor::skipNode();
}
$knownArgs = $directiveArgs[$directiveName];
foreach ($directiveNode->arguments as $argNode) {
$argName = $argNode->name->value;
if (! in_array($argName, $knownArgs, true)) {
$suggestions = Utils::suggestionList($argName, $knownArgs);
$context->reportError(new Error(
static::unknownDirectiveArgMessage($argName, $directiveName, $suggestions),
[$argNode]
));
}
}
return Visitor::skipNode();
},
];
}