/**
* Determines if a field should be included based on the @include and @skip
* directives, where @skip has higher precedence than @include.
*/
private static function shouldIncludeNode(ExecutionContext $exeContext, $directives)
{
$skipDirective = Directive::skipDirective();
$includeDirective = Directive::includeDirective();
/** @var \GraphQL\Language\AST\Directive $skipAST */
$skipAST = $directives ? Utils::find($directives, function (\GraphQL\Language\AST\Directive $directive) use($skipDirective) {
return $directive->name->value === $skipDirective->name;
}) : null;
if ($skipAST) {
$argValues = Values::getArgumentValues($skipDirective->args, $skipAST->arguments, $exeContext->variableValues);
return empty($argValues['if']);
}
/** @var \GraphQL\Language\AST\Directive $includeAST */
$includeAST = $directives ? Utils::find($directives, function (\GraphQL\Language\AST\Directive $directive) use($includeDirective) {
return $directive->name->value === $includeDirective->name;
}) : null;
if ($includeAST) {
$argValues = Values::getArgumentValues($includeDirective->args, $includeAST->arguments, $exeContext->variableValues);
return !empty($argValues['if']);
}
return true;
}