Skip to content
This repository has been archived by the owner on Mar 8, 2023. It is now read-only.

Commit

Permalink
Merge b97f4f6 into 6ac91f9
Browse files Browse the repository at this point in the history
  • Loading branch information
crisu83 committed Nov 8, 2018
2 parents 6ac91f9 + b97f4f6 commit 771f736
Show file tree
Hide file tree
Showing 13 changed files with 237 additions and 101 deletions.
30 changes: 0 additions & 30 deletions src/Error/ErrorHandler.php

This file was deleted.

13 changes: 0 additions & 13 deletions src/Error/ErrorHandlerInterface.php

This file was deleted.

19 changes: 19 additions & 0 deletions src/Error/Handler/AddErrorMiddleware.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace Digia\GraphQL\Error\Handler;

use Digia\GraphQL\Execution\ExecutionContext;
use Digia\GraphQL\Execution\ExecutionException;

class AddErrorMiddleware implements ErrorMiddlewareInterface
{
/**
* @inheritdoc
*/
public function handle(ExecutionException $exception, ExecutionContext $context, callable $next)
{
$context->addError($exception);

return $next($exception, $context);
}
}
52 changes: 52 additions & 0 deletions src/Error/Handler/ErrorHandler.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

namespace Digia\GraphQL\Error\Handler;

use Digia\GraphQL\Execution\ExecutionContext;
use Digia\GraphQL\Execution\ExecutionException;

class ErrorHandler implements ErrorHandlerInterface
{
/**
* @var ErrorMiddlewareInterface[]
*/
protected $middleware;

/**
* ErrorHandler constructor.
* @param ErrorMiddlewareInterface[] $middleware
*/
public function __construct(array $middleware)
{
foreach ($middleware as $mw) {
$this->addMiddleware($mw);
}
}

/**
* @inheritdoc
*/
public function handle(ExecutionException $exception, ExecutionContext $context): void
{
$next = function () {
// NO-OP
};

foreach (\array_reverse($this->middleware) as $mw) {
$next = function (ExecutionException $exception, ExecutionContext $context) use ($mw, $next) {
/** @var ErrorMiddlewareInterface $mw */
return $mw->handle($exception, $context, $next);
};
}

$next($exception, $context);
}

/**
* @param ErrorMiddlewareInterface $middleware
*/
protected function addMiddleware(ErrorMiddlewareInterface $middleware): void
{
$this->middleware[] = $middleware;
}
}
15 changes: 15 additions & 0 deletions src/Error/Handler/ErrorHandlerInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace Digia\GraphQL\Error\Handler;

use Digia\GraphQL\Execution\ExecutionContext;
use Digia\GraphQL\Execution\ExecutionException;

interface ErrorHandlerInterface
{
/**
* @param ExecutionException $exception
* @param ExecutionContext $context
*/
public function handle(ExecutionException $exception, ExecutionContext $context): void;
}
17 changes: 17 additions & 0 deletions src/Error/Handler/ErrorMiddlewareInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

namespace Digia\GraphQL\Error\Handler;

use Digia\GraphQL\Execution\ExecutionContext;
use Digia\GraphQL\Execution\ExecutionException;

interface ErrorMiddlewareInterface
{
/**
* @param ExecutionException $exception
* @param ExecutionContext $context
* @param callable $next
* @return mixed
*/
public function handle(ExecutionException $exception, ExecutionContext $context, callable $next);
}
17 changes: 9 additions & 8 deletions src/Execution/Execution.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Digia\GraphQL\Execution;

use Digia\GraphQL\Error\ErrorHandlerInterface;
use Digia\GraphQL\Error\Handler\ErrorHandlerInterface;
use Digia\GraphQL\Language\Node\DocumentNode;
use Digia\GraphQL\Language\Node\FragmentDefinitionNode;
use Digia\GraphQL\Language\Node\FragmentSpreadNode;
Expand All @@ -13,13 +13,14 @@ class Execution implements ExecutionInterface
{

/**
* @param Schema $schema
* @param DocumentNode $documentNode
* @param mixed $rootValue
* @param mixed $contextValue
* @param array $variableValues
* @param null|string $operationName
* @param callable|null $fieldResolver
* @param Schema $schema
* @param DocumentNode $documentNode
* @param mixed $rootValue
* @param mixed $contextValue
* @param array $variableValues
* @param null|string $operationName
* @param callable|null $fieldResolver
* @param ErrorHandlerInterface|null $errorHandler
* @return ExecutionResult
* @throws \Throwable
*/
Expand Down
2 changes: 1 addition & 1 deletion src/Execution/ExecutionInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Digia\GraphQL\Execution;

use Digia\GraphQL\Error\ErrorHandlerInterface;
use Digia\GraphQL\Error\Handler\ErrorHandlerInterface;
use Digia\GraphQL\Language\Node\DocumentNode;
use Digia\GraphQL\Schema\Schema;

Expand Down
20 changes: 13 additions & 7 deletions src/Execution/Executor.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

namespace Digia\GraphQL\Execution;

use Digia\GraphQL\Error\ErrorHandlerInterface;
use Digia\GraphQL\Error\Handler\ErrorHandler;
use Digia\GraphQL\Error\Handler\ErrorHandlerInterface;
use Digia\GraphQL\Error\GraphQLException;
use Digia\GraphQL\Error\InvalidTypeException;
use Digia\GraphQL\Error\InvariantException;
use Digia\GraphQL\Error\Handler\AddErrorMiddleware;
use Digia\GraphQL\Language\Node\FieldNode;
use Digia\GraphQL\Language\Node\OperationDefinitionNode;
use Digia\GraphQL\Schema\Schema;
Expand Down Expand Up @@ -80,7 +82,7 @@ public function __construct(
) {
$this->context = $context;
$this->fieldCollector = $fieldCollector;
$this->errorHandler = $errorHandler;
$this->errorHandler = $errorHandler ?? $this->createDefaultErrorHandler();
}

/**
Expand Down Expand Up @@ -973,11 +975,7 @@ protected function createResolveInfo(
*/
protected function handleError(ExecutionException $error)
{
if (null !== $this->errorHandler) {
$this->errorHandler->handleError($error);
}

$this->context->addError($error);
$this->errorHandler->handle($error, $this->context);
}

/**
Expand Down Expand Up @@ -1014,4 +1012,12 @@ public static function defaultFieldResolver($rootValue, array $arguments, $conte
? $property($rootValue, $arguments, $contextValues, $info)
: $property;
}

/**
* @return ErrorHandler
*/
protected function createDefaultErrorHandler(): ErrorHandler
{
return new ErrorHandler([new AddErrorMiddleware()]);
}
}
25 changes: 9 additions & 16 deletions src/GraphQL.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

namespace Digia\GraphQL;

use Digia\GraphQL\Error\ErrorHandler;
use Digia\GraphQL\Error\ErrorHandlerInterface;
use Digia\GraphQL\Error\Handler\ErrorHandlerInterface;
use Digia\GraphQL\Execution\ExecutionInterface;
use Digia\GraphQL\Execution\ExecutionProvider;
use Digia\GraphQL\Execution\ExecutionResult;
Expand Down Expand Up @@ -231,14 +230,14 @@ public static function validate(Schema $schema, DocumentNode $document): array
}

/**
* @param Schema $schema
* @param DocumentNode $document
* @param mixed $rootValue
* @param mixed $contextValue
* @param array $variableValues
* @param string|null $operationName
* @param callable|null $fieldResolver
* @param ErrorHandlerInterface|callable|null $errorHandler
* @param Schema $schema
* @param DocumentNode $document
* @param mixed $rootValue
* @param mixed $contextValue
* @param array $variableValues
* @param string|null $operationName
* @param callable|null $fieldResolver
* @param ErrorHandlerInterface|null $errorHandler
* @return ExecutionResult
*/
public static function execute(
Expand All @@ -254,12 +253,6 @@ public static function execute(
/** @var ExecutionInterface $execution */
$execution = static::make(ExecutionInterface::class);

if (null !== $errorHandler) {
$errorHandler = $errorHandler instanceof ErrorHandlerInterface
? $errorHandler
: new ErrorHandler($errorHandler);
}

return $execution->execute(
$schema,
$document,
Expand Down
2 changes: 1 addition & 1 deletion src/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Digia\GraphQL;

use Digia\GraphQL\Error\ErrorHandlerInterface;
use Digia\GraphQL\Error\Handler\ErrorHandlerInterface;
use Digia\GraphQL\Error\InvariantException;
use Digia\GraphQL\Execution\ExecutionResult;
use Digia\GraphQL\Language\Node\DocumentNode;
Expand Down
25 changes: 0 additions & 25 deletions tests/Unit/Error/ErrorHandlerTest.php

This file was deleted.

Loading

0 comments on commit 771f736

Please sign in to comment.