GraphQL\Type\SchemaValidator::noInputTypesAsOutputFieldsRule PHP Method

noInputTypesAsOutputFieldsRule() public static method

public static noInputTypesAsOutputFieldsRule ( )
    public static function noInputTypesAsOutputFieldsRule()
    {
        return function ($context) {
            $operationMayNotBeInputType = function (Type $type, $operation) {
                if (!Type::isOutputType($type)) {
                    return new Error("Schema {$operation} must be Object Type but got: {$type}.");
                }
                return null;
            };
            /** @var Schema $schema */
            $schema = $context['schema'];
            $typeMap = $schema->getTypeMap();
            $errors = [];
            $queryType = $schema->getQueryType();
            if ($queryType) {
                $queryError = $operationMayNotBeInputType($queryType, 'query');
                if ($queryError !== null) {
                    $errors[] = $queryError;
                }
            }
            $mutationType = $schema->getMutationType();
            if ($mutationType) {
                $mutationError = $operationMayNotBeInputType($mutationType, 'mutation');
                if ($mutationError !== null) {
                    $errors[] = $mutationError;
                }
            }
            $subscriptionType = $schema->getSubscriptionType();
            if ($subscriptionType) {
                $subscriptionError = $operationMayNotBeInputType($subscriptionType, 'subscription');
                if ($subscriptionError !== null) {
                    $errors[] = $subscriptionError;
                }
            }
            foreach ($typeMap as $typeName => $type) {
                if ($type instanceof ObjectType || $type instanceof InterfaceType) {
                    $fields = $type->getFields();
                    foreach ($fields as $fieldName => $field) {
                        if ($field->getType() instanceof InputObjectType) {
                            $errors[] = new Error("Field {$typeName}.{$field->name} is of type " . "{$field->getType()->name}, which is an input type, but field types " . "must be output types!");
                        }
                    }
                }
            }
            return !empty($errors) ? $errors : null;
        };
    }

Usage Example

 public function testAcceptsASchemaThatSimplyHasAnInputTypeAsAFieldArg()
 {
     $this->expectToAcceptSchemaWithNormalInputArg(SchemaValidator::noInputTypesAsOutputFieldsRule());
 }