Automattic\WooCommerce\Vendor\GraphQL\Validator\Rules

UniqueDirectiveNames::getSDLVisitorpublicWC 1.0

Method of the class: UniqueDirectiveNames{}

No Hooks.

Returns

null. Nothing (null).

Usage

$UniqueDirectiveNames = new UniqueDirectiveNames();
$UniqueDirectiveNames->getSDLVisitor( $context ): array;
$context(SDLValidationContext) (required)
.

UniqueDirectiveNames::getSDLVisitor() code WC 10.9.1

public function getSDLVisitor(SDLValidationContext $context): array
{
    $schema = $context->getSchema();

    /** @var array<string, NameNode> $knownDirectiveNames */
    $knownDirectiveNames = [];

    return [
        NodeKind::DIRECTIVE_DEFINITION => static function ($node) use ($context, $schema, &$knownDirectiveNames): ?VisitorOperation {
            $directiveName = $node->name->value;

            if ($schema !== null && $schema->getDirective($directiveName) !== null) {
                $context->reportError(
                    new Error(
                        'Directive "@' . $directiveName . '" already exists in the schema. It cannot be redefined.',
                        $node->name,
                    ),
                );

                return null;
            }

            if (isset($knownDirectiveNames[$directiveName])) {
                $context->reportError(
                    new Error(
                        'There can be only one directive named "@' . $directiveName . '".',
                        [
                            $knownDirectiveNames[$directiveName],
                            $node->name,
                        ]
                    ),
                );
            } else {
                $knownDirectiveNames[$directiveName] = $node->name;
            }

            return Visitor::skipNode();
        },
    ];
}