for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Digia\GraphQL\Validation\Rule;
use Digia\GraphQL\Error\ValidationException;
use Digia\GraphQL\Language\Node\DefinitionNodeInterface;
use Digia\GraphQL\Language\Node\DocumentNode;
use Digia\GraphQL\Language\Node\ExecutableDefinitionNodeInterface;
use Digia\GraphQL\Language\Node\NameAwareInterface;
use Digia\GraphQL\Language\Node\NodeInterface;
use Digia\GraphQL\Language\Node\SchemaDefinitionNode;
use function Digia\GraphQL\Validation\nonExecutableDefinitionMessage;
/**
* Executable definitions
*
* A GraphQL document is only valid for execution if all definitions are either
* operation or fragment definitions.
*/
class ExecutableDefinitionsRule extends AbstractRule
{
* @inheritdoc
protected function enterDocument(DocumentNode $node): ?NodeInterface
foreach ($node->getDefinitions() as $definition) {
if (!$definition instanceof ExecutableDefinitionNodeInterface) {
$this->context->reportError(
new ValidationException(
nonExecutableDefinitionMessage($this->getDefinitionName($definition)),
[$definition]
)
);
}
return $node;
* @param NodeInterface $node
* @return string
protected function getDefinitionName(NodeInterface $node): string
if ($node instanceof SchemaDefinitionNode) {
return 'schema';
return $node instanceof NameAwareInterface
return $node instanceof ...NameValue() : 'unknown'
null
string
? $node->getNameValue()
: 'unknown';