Automattic\WooCommerce\Vendor\GraphQL\Type
SchemaValidationContext::validateDirectivesAtLocation
Method of the class: SchemaValidationContext{}
No Hooks.
Returns
null. Nothing (null).
Usage
// private - for code of main (parent) class only $result = $this->validateDirectivesAtLocation( $directives, $location ): void;
- $directives(NodeList
) (required) - .
- $location(string) (required)
- .
SchemaValidationContext::validateDirectivesAtLocation() SchemaValidationContext::validateDirectivesAtLocation code WC 10.9.1
private function validateDirectivesAtLocation(NodeList $directives, string $location): void
{
/** @var array<string, array<int, DirectiveNode>> $potentiallyDuplicateDirectives */
$potentiallyDuplicateDirectives = [];
$schema = $this->schema;
foreach ($directives as $directiveNode) {
$directiveName = $directiveNode->name->value;
// Ensure directive used is also defined
$schemaDirective = $schema->getDirective($directiveName);
if ($schemaDirective === null) {
$this->reportError("No directive @{$directiveName} defined.", $directiveNode);
continue;
}
if (! in_array($location, $schemaDirective->locations, true)) {
$this->reportError(
"Directive @{$directiveName} not allowed at {$location} location.",
array_filter([$directiveNode, $schemaDirective->astNode])
);
}
if (! $schemaDirective->isRepeatable) {
$potentiallyDuplicateDirectives[$directiveName][] = $directiveNode;
}
}
foreach ($potentiallyDuplicateDirectives as $directiveName => $directiveList) {
if (count($directiveList) > 1) {
$this->reportError("Non-repeatable directive @{$directiveName} used more than once at the same location.", $directiveList);
}
}
}