Automattic\WooCommerce\Vendor\GraphQL\Validator\Rules

KnownTypeNames::getASTVisitorpublicWC 1.0

Method of the class: KnownTypeNames{}

No Hooks.

Returns

null. Nothing (null).

Usage

$KnownTypeNames = new KnownTypeNames();
$KnownTypeNames->getASTVisitor( $context ): array;
$context(ValidationContext) (required)
.

KnownTypeNames::getASTVisitor() code WC 10.9.1

public function getASTVisitor(ValidationContext $context): array
{
    /** @var array<int, string> $definedTypes */
    $definedTypes = [];
    foreach ($context->getDocument()->definitions as $def) {
        if ($def instanceof TypeDefinitionNode) {
            $definedTypes[] = $def->getName()->value;
        }
    }

    return [
        NodeKind::NAMED_TYPE => static function (NamedTypeNode $node, $_1, $parent, $_2, $ancestors) use ($context, $definedTypes): void {
            $typeName = $node->name->value;
            $schema = $context->getSchema();

            if (in_array($typeName, $definedTypes, true)) {
                return;
            }

            if ($schema !== null && $schema->hasType($typeName)) {
                return;
            }

            $definitionNode = $ancestors[2] ?? $parent;
            $isSDL = $definitionNode instanceof TypeSystemDefinitionNode || $definitionNode instanceof TypeSystemExtensionNode;
            if ($isSDL && in_array($typeName, Type::BUILT_IN_TYPE_NAMES, true)) {
                return;
            }

            $existingTypesMap = $schema !== null
                ? $schema->getTypeMap()
                : [];
            $typeNames = [
                ...array_keys($existingTypesMap),
                ...$definedTypes,
            ];
            $context->reportError(new Error(
                static::unknownTypeMessage(
                    $typeName,
                    Utils::suggestionList(
                        $typeName,
                        $isSDL
                            ? [...Type::BUILT_IN_TYPE_NAMES, ...$typeNames]
                            : $typeNames
                    )
                ),
                [$node]
            ));
        },
    ];
}