40 lines
1.2 KiB
PHP
40 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace Nuwave\Lighthouse\Execution;
|
|
|
|
use Closure;
|
|
use GraphQL\Error\Error;
|
|
use Nuwave\Lighthouse\Exceptions\RendersErrorsExtensions;
|
|
|
|
/**
|
|
* Handle Exceptions that implement Nuwave\Lighthouse\Exceptions\RendersErrorsExtensions
|
|
* and add extra content from them to the 'extensions' key of the Error that is rendered
|
|
* to the User.
|
|
*/
|
|
class ExtensionErrorHandler implements ErrorHandler
|
|
{
|
|
public function __invoke(?Error $error, Closure $next): ?array
|
|
{
|
|
if ($error === null) {
|
|
return $next(null);
|
|
}
|
|
|
|
$underlyingException = $error->getPrevious();
|
|
if ($underlyingException instanceof RendersErrorsExtensions) {
|
|
// Reconstruct the error, passing in the extensions of the underlying exception
|
|
return $next(new Error(
|
|
$error->getMessage(),
|
|
// @phpstan-ignore-next-line graphql-php and phpstan disagree with themselves
|
|
$error->getNodes(),
|
|
$error->getSource(),
|
|
$error->getPositions(),
|
|
$error->getPath(),
|
|
$underlyingException,
|
|
$underlyingException->extensionsContent()
|
|
));
|
|
}
|
|
|
|
return $next($error);
|
|
}
|
|
}
|