src/Server/Helper.php
private function promiseToExecuteOperation(
        PromiseAdapter $promiseAdapter,
        ServerConfig $config,
        OperationParams $op,
        $isBatch = false
    ) {
        try {
            if (! $config->getSchema()) {
                throw new InvariantViolation('Schema is required for the server');
            }

            if ($isBatch && ! $config->getQueryBatching()) {
                throw new RequestError('Batched queries are not supported by this server');
            }

            $errors = $this->validateOperationParams($op);

            if (! empty($errors)) {
                $errors = Utils::map(
                    $errors,
                    static function (RequestError $err) {
                        return Error::createLocatedError($err, null, null);
                    }
                );

                return $promiseAdapter->createFulfilled(
                    new ExecutionResult(null, $errors)
                );
            }

            $doc = $op->queryId ? $this->loadPersistedQuery($config, $op) : $op->query;

            if (! $doc instanceof DocumentNode) {
                $doc = Parser::parse($doc);
            }

            $operationType = AST::getOperation($doc, $op->operation);
            if ($operationType !== 'query' && $op->isReadOnly()) {
                throw new RequestError('GET supports only query operation');
            }

            $result = GraphQL::promiseToExecute(
                $promiseAdapter,
                $config->getSchema(),
                $doc,
                $this->resolveRootValue($config, $op, $doc, $operationType),
                $this->resolveContextValue($config, $op, $doc, $operationType),
                $op->variables,
                $op->operation,
                $config->getFieldResolver(),
                $this->resolveValidationRules($config, $op, $doc, $operationType)
            );
        } catch (RequestError $e) {
            $result = $promiseAdapter->createFulfilled(
                new ExecutionResult(null, [Error::createLocatedError($e)])
            );
        } catch (Error $e) {
            $result = $promiseAdapter->createFulfilled(
                new ExecutionResult(null, [$e])
            );
        }

        $applyErrorHandling = static function (ExecutionResult $result) use ($config) {
            if ($config->getErrorsHandler()) {
                $result->setErrorsHandler($config->getErrorsHandler());
            }
            if ($config->getErrorFormatter() || $config->getDebug()) {
                $result->setErrorFormatter(
                    FormattedError::prepareFormatter(
                        $config->getErrorFormatter(),
                        $config->getDebug()
                    )
                );
            }

            return $result;
        };

        return $result->then($applyErrorHandling);
    }
private function promiseToExecuteOperation(
        PromiseAdapter $promiseAdapter,
        ServerConfig $config,
        OperationParams $op,
        $isBatch = false
    ) {
        try {
            if (! $config->getSchema()) {
                throw new InvariantViolation('Schema is required for the server');
            }

            if ($isBatch && ! $config->getQueryBatching()) {
                throw new RequestError('Batched queries are not supported by this server');
            }

            $errors = $this->validateOperationParams($op);

            if (! empty($errors)) {
                $errors = Utils::map(
                    $errors,
                    static function (RequestError $err) {
                        return Error::createLocatedError($err, null, null);
                    }
                );

                return $promiseAdapter->createFulfilled(
                    new ExecutionResult(null, $errors)
                );
            }

            $doc = $op->queryId ? $this->loadPersistedQuery($config, $op) : $op->query;

            if (! $doc instanceof DocumentNode) {
                $doc = Parser::parse($doc);
            }

            $operationType = AST::getOperation($doc, $op->operation);
            if ($operationType !== 'query' && $op->isReadOnly()) {
                throw new RequestError('GET supports only query operation');
            }

            $result = GraphQL::promiseToExecute(
                $promiseAdapter,
                $config->getSchema(),
                $doc,
                $this->resolveRootValue($config, $op, $doc, $operationType),
                $this->resolveContextValue($config, $op, $doc, $operationType),
                $op->variables,
                $op->operation,
                $config->getFieldResolver(),
                $this->resolveValidationRules($config, $op, $doc, $operationType)
            );
        } catch (RequestError $e) {
            $result = $promiseAdapter->createFulfilled(
                new ExecutionResult(null, [Error::createLocatedError($e)])
            );
        } catch (Error $e) {
            $result = $promiseAdapter->createFulfilled(
                new ExecutionResult(null, [$e])
            );
        }

        $applyErrorHandling = static function (ExecutionResult $result) use ($config) {
            if ($config->getErrorsHandler()) {
                $result->setErrorsHandler($config->getErrorsHandler());
            }
            if ($config->getErrorFormatter() || $config->getDebug()) {
                $result->setErrorFormatter(
                    FormattedError::prepareFormatter(
                        $config->getErrorFormatter(),
                        $config->getDebug()
                    )
                );
            }

            return $result;
        };

        return $result->then($applyErrorHandling);
    }
private function promiseToExecuteOperation ( PromiseAdapter $ promiseAdapter , ServerConfig $ config , OperationParams $ op , $ isBatch = false ) { try { if ( ! $ config -> getSchema ( ) ) { throw new InvariantViolation ( 'Schema is required for the server' ) ; } if ( $ isBatch && ! $ config -> getQueryBatching ( ) ) { throw new RequestError ( 'Batched queries are not supported by this server' ) ; } $ errors = $ this -> validateOperationParams ( $ op ) ; if ( ! empty ( $ errors ) ) { $ errors = Utils :: map ( $ errors , static function ( RequestError $ err ) { return Error :: createLocatedError ( $ err , null , null ) ; } ) ; return $ promiseAdapter -> createFulfilled ( new ExecutionResult ( null , $ errors ) ) ; } $ doc = $ op -> queryId ? $ this -> loadPersistedQuery ( $ config , $ op ) : $ op -> query ; if ( ! $ doc instanceof DocumentNode ) { $ doc = Parser :: parse ( $ doc ) ; } $ operationType = AST :: getOperation ( $ doc , $ op -> operation ) ; if ( $ operationType !== 'query' && $ op -> isReadOnly ( ) ) { throw new RequestError ( 'GET supports only query operation' ) ; } $ result = GraphQL :: promiseToExecute ( $ promiseAdapter , $ config -> getSchema ( ) , $ doc , $ this -> resolveRootValue ( $ config , $ op , $ doc , $ operationType ) , $ this -> resolveContextValue ( $ config , $ op , $ doc , $ operationType ) , $ op -> variables , $ op -> operation , $ config -> getFieldResolver ( ) , $ this -> resolveValidationRules ( $ config , $ op , $ doc , $ operationType ) ) ; } catch ( RequestError $ e ) { $ result = $ promiseAdapter -> createFulfilled ( new ExecutionResult ( null , [ Error :: createLocatedError ( $ e ) ] ) ) ; } catch ( Error $ e ) { $ result = $ promiseAdapter -> createFulfilled ( new ExecutionResult ( null , [ $ e ] ) ) ; } $ applyErrorHandling = static function ( ExecutionResult $ result ) use ( $ config ) { if ( $ config -> getErrorsHandler ( ) ) { $ result -> setErrorsHandler ( $ config -> getErrorsHandler ( ) ) ; } if ( $ config -> getErrorFormatter ( ) || $ config -> getDebug ( ) ) { $ result -> setErrorFormatter ( FormattedError :: prepareFormatter ( $ config -> getErrorFormatter ( ) , $ config -> getDebug ( ) ) ) ; } return $ result ; } ; return $ result -> then ( $ applyErrorHandling ) ; }
@param bool $isBatch

@return Promise
@param bool $isBatch