public function __invoke(ValidationContext $context) { return [Node::FIELD => ['leave' => function (Field $fieldAST) use($context) { $fieldDef = $context->getFieldDef(); if (!$fieldDef) { return Visitor::skipNode(); } $errors = []; $argASTs = $fieldAST->arguments ?: []; $argASTMap = []; foreach ($argASTs as $argAST) { $argASTMap[$argAST->name->value] = $argASTs; } foreach ($fieldDef->args as $argDef) { $argAST = isset($argASTMap[$argDef->name]) ? $argASTMap[$argDef->name] : null; if (!$argAST && $argDef->getType() instanceof NonNull) { $errors[] = new Error(self::missingFieldArgMessage($fieldAST->name->value, $argDef->name, $argDef->getType()), [$fieldAST]); } } if (!empty($errors)) { return $errors; } }], Node::DIRECTIVE => ['leave' => function (Directive $directiveAST) use($context) { $directiveDef = $context->getDirective(); if (!$directiveDef) { return Visitor::skipNode(); } $errors = []; $argASTs = $directiveAST->arguments ?: []; $argASTMap = []; foreach ($argASTs as $argAST) { $argASTMap[$argAST->name->value] = $argASTs; } foreach ($directiveDef->args as $argDef) { $argAST = isset($argASTMap[$argDef->name]) ? $argASTMap[$argDef->name] : null; if (!$argAST && $argDef->getType() instanceof NonNull) { $errors[] = new Error(self::missingDirectiveArgMessage($directiveAST->name->value, $argDef->name, $argDef->getType()), [$directiveAST]); } } if (!empty($errors)) { return $errors; } }]]; }
public function __invoke(ValidationContext $context) { return [NodeKind::ARGUMENT => function (ArgumentNode $node, $key, $parent, $path, $ancestors) use($context) { $argumentOf = $ancestors[count($ancestors) - 1]; if ($argumentOf->kind === NodeKind::FIELD) { $fieldDef = $context->getFieldDef(); if ($fieldDef) { $fieldArgDef = null; foreach ($fieldDef->args as $arg) { if ($arg->name === $node->name->value) { $fieldArgDef = $arg; break; } } if (!$fieldArgDef) { $parentType = $context->getParentType(); Utils::invariant($parentType); $context->reportError(new Error(self::unknownArgMessage($node->name->value, $fieldDef->name, $parentType->name), [$node])); } } } else { if ($argumentOf->kind === NodeKind::DIRECTIVE) { $directive = $context->getDirective(); if ($directive) { $directiveArgDef = null; foreach ($directive->args as $arg) { if ($arg->name === $node->name->value) { $directiveArgDef = $arg; break; } } if (!$directiveArgDef) { $context->reportError(new Error(self::unknownDirectiveArgMessage($node->name->value, $directive->name), [$node])); } } } } }]; }
public function __invoke(ValidationContext $context) { return [NodeKind::FIELD => ['leave' => function (FieldNode $fieldNode) use($context) { $fieldDef = $context->getFieldDef(); if (!$fieldDef) { return Visitor::skipNode(); } $argNodes = $fieldNode->arguments ?: []; $argNodeMap = []; foreach ($argNodes as $argNode) { $argNodeMap[$argNode->name->value] = $argNodes; } foreach ($fieldDef->args as $argDef) { $argNode = isset($argNodeMap[$argDef->name]) ? $argNodeMap[$argDef->name] : null; if (!$argNode && $argDef->getType() instanceof NonNull) { $context->reportError(new Error(self::missingFieldArgMessage($fieldNode->name->value, $argDef->name, $argDef->getType()), [$fieldNode])); } } }], NodeKind::DIRECTIVE => ['leave' => function (DirectiveNode $directiveNode) use($context) { $directiveDef = $context->getDirective(); if (!$directiveDef) { return Visitor::skipNode(); } $argNodes = $directiveNode->arguments ?: []; $argNodeMap = []; foreach ($argNodes as $argNode) { $argNodeMap[$argNode->name->value] = $argNodes; } foreach ($directiveDef->args as $argDef) { $argNode = isset($argNodeMap[$argDef->name]) ? $argNodeMap[$argDef->name] : null; if (!$argNode && $argDef->getType() instanceof NonNull) { $context->reportError(new Error(self::missingDirectiveArgMessage($directiveNode->name->value, $argDef->name, $argDef->getType()), [$directiveNode])); } } }]]; }