Automattic\WooCommerce\Vendor\GraphQL\Validator\Rules

QueryComplexity::getVisitorpublicWC 1.0

Method of the class: QueryComplexity{}

No Hooks.

Returns

null. Nothing (null).

Usage

$QueryComplexity = new QueryComplexity();
$QueryComplexity->getVisitor( $context ): array;
$context(QueryValidationContext) (required)
.

QueryComplexity::getVisitor() code WC 10.9.1

public function getVisitor(QueryValidationContext $context): array
{
    $this->queryComplexity = 0;
    $this->context = $context;
    $this->variableDefs = new NodeList([]);
    $this->fieldNodeAndDefs = new \ArrayObject();

    return $this->invokeIfNeeded(
        $context,
        [
            NodeKind::SELECTION_SET => function (SelectionSetNode $selectionSet) use ($context): void {
                $this->fieldNodeAndDefs = $this->collectFieldASTsAndDefs(
                    $context,
                    $context->getParentType(),
                    $selectionSet,
                    null,
                    $this->fieldNodeAndDefs
                );
            },
            NodeKind::VARIABLE_DEFINITION => function ($def): VisitorOperation {
                $this->variableDefs[] = $def;

                return Visitor::skipNode();
            },
            NodeKind::DOCUMENT => [
                'leave' => function (DocumentNode $document) use ($context): void {
                    $errors = $context->getErrors();

                    if ($errors !== []) {
                        return;
                    }

                    if ($this->maxQueryComplexity === self::DISABLED) {
                        return;
                    }

                    foreach ($document->definitions as $definition) {
                        if (! $definition instanceof OperationDefinitionNode) {
                            continue;
                        }

                        $this->queryComplexity = $this->fieldComplexity($definition->selectionSet);

                        if ($this->queryComplexity > $this->maxQueryComplexity) {
                            $context->reportError(
                                new Error(static::maxQueryComplexityErrorMessage(
                                    $this->maxQueryComplexity,
                                    $this->queryComplexity
                                ))
                            );

                            return;
                        }
                    }
                },
            ],
        ]
    );
}