Automattic\WooCommerce\Vendor\GraphQL\Validator\Rules

KnownDirectives::getDirectiveLocationForASTPathprotectedWC 1.0

Method of the class: KnownDirectives{}

No Hooks.

Returns

null. Nothing (null).

Usage

// protected - for code of main (parent) or child class
$result = $this->getDirectiveLocationForASTPath( $ancestors ): string;
$ancestors(array<Node|NodeList>) (required)
.

KnownDirectives::getDirectiveLocationForASTPath() code WC 10.9.1

protected function getDirectiveLocationForASTPath(array $ancestors): string
{
    $appliedTo = $ancestors[count($ancestors) - 1];

    switch (true) {
        case $appliedTo instanceof OperationDefinitionNode:
            switch ($appliedTo->operation) {
                case 'query':
                    return DirectiveLocation::QUERY;
                case 'mutation':
                    return DirectiveLocation::MUTATION;
                case 'subscription':
                    return DirectiveLocation::SUBSCRIPTION;
            }
            // no break, since all possible cases were handled
        case $appliedTo instanceof FieldNode:
            return DirectiveLocation::FIELD;
        case $appliedTo instanceof FragmentSpreadNode:
            return DirectiveLocation::FRAGMENT_SPREAD;
        case $appliedTo instanceof InlineFragmentNode:
            return DirectiveLocation::INLINE_FRAGMENT;
        case $appliedTo instanceof FragmentDefinitionNode:
            return DirectiveLocation::FRAGMENT_DEFINITION;
        case $appliedTo instanceof VariableDefinitionNode:
            return DirectiveLocation::VARIABLE_DEFINITION;
        case $appliedTo instanceof SchemaDefinitionNode:
        case $appliedTo instanceof SchemaExtensionNode:
            return DirectiveLocation::SCHEMA;
        case $appliedTo instanceof ScalarTypeDefinitionNode:
        case $appliedTo instanceof ScalarTypeExtensionNode:
            return DirectiveLocation::SCALAR;
        case $appliedTo instanceof ObjectTypeDefinitionNode:
        case $appliedTo instanceof ObjectTypeExtensionNode:
            return DirectiveLocation::OBJECT;
        case $appliedTo instanceof FieldDefinitionNode:
            return DirectiveLocation::FIELD_DEFINITION;
        case $appliedTo instanceof InterfaceTypeDefinitionNode:
        case $appliedTo instanceof InterfaceTypeExtensionNode:
            return DirectiveLocation::IFACE;
        case $appliedTo instanceof UnionTypeDefinitionNode:
        case $appliedTo instanceof UnionTypeExtensionNode:
            return DirectiveLocation::UNION;
        case $appliedTo instanceof EnumTypeDefinitionNode:
        case $appliedTo instanceof EnumTypeExtensionNode:
            return DirectiveLocation::ENUM;
        case $appliedTo instanceof EnumValueDefinitionNode:
            return DirectiveLocation::ENUM_VALUE;
        case $appliedTo instanceof InputObjectTypeDefinitionNode:
        case $appliedTo instanceof InputObjectTypeExtensionNode:
            return DirectiveLocation::INPUT_OBJECT;
        case $appliedTo instanceof InputValueDefinitionNode:
            $parentNode = $ancestors[count($ancestors) - 3];

            return $parentNode instanceof InputObjectTypeDefinitionNode
                ? DirectiveLocation::INPUT_FIELD_DEFINITION
                : DirectiveLocation::ARGUMENT_DEFINITION;
        default:
            $unknownLocation = get_class($appliedTo);
            throw new \Exception("Unknown directive location: {$unknownLocation}.");
    }
}