Automattic\WooCommerce\Vendor\GraphQL\Type

SchemaValidationContext::validateDirectivesAtLocationprivateWC 1.0

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() 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);
        }
    }
}