From 57fdcdda48d768ce0795f7d6d415aa2c37957322 Mon Sep 17 00:00:00 2001 From: Tomas Ludvik Date: Wed, 13 Sep 2023 08:55:42 +0200 Subject: [PATCH] [shopsys] updated overblog/graphql-bundle to stable version 1.0.0 with dependencies (#2788) --- composer.json | 4 +- src/Model/Error/ErrorCodeSubscriber.php | 7 ++- src/Model/ScalarType/StringType.php | 59 +++++++++++++++---- .../Exception/TokenUserMessageException.php | 2 +- 4 files changed, 55 insertions(+), 17 deletions(-) diff --git a/composer.json b/composer.json index 865eeb9c04..4396b7ac1a 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,7 @@ "require": { "php": "^8.1", "lcobucci/jwt": "^4.1.5", - "overblog/graphql-bundle": "^0.15", + "overblog/graphql-bundle": "^1.0", "overblog/graphiql-bundle": "^0.3", "shopsys/form-types-bundle": "12.0.x-dev", "shopsys/framework": "12.0.x-dev", @@ -34,7 +34,7 @@ "symfony/http-foundation": "^5.4", "symfony/http-kernel": "^5.4", "symfony/routing": "^5.4", - "webonyx/graphql-php": "^14.5" + "webonyx/graphql-php": "^15.6" }, "require-dev": { "phpunit/phpunit": "^9.5.20", diff --git a/src/Model/Error/ErrorCodeSubscriber.php b/src/Model/Error/ErrorCodeSubscriber.php index 867f4d08f0..a996d0f16c 100644 --- a/src/Model/Error/ErrorCodeSubscriber.php +++ b/src/Model/Error/ErrorCodeSubscriber.php @@ -37,7 +37,12 @@ public function onErrorFormatting(ErrorFormattingEvent $event): void } $formattedError = $event->getFormattedError(); - $extensions = $formattedError->offsetGet('extensions'); + $extensions = []; + + if ($formattedError->offsetExists('extensions')) { + $extensions = $formattedError->offsetGet('extensions'); + } + $extensions['userCode'] = $userCode; $extensions['code'] = $code; $formattedError->offsetSet('extensions', $extensions); diff --git a/src/Model/ScalarType/StringType.php b/src/Model/ScalarType/StringType.php index a4c3942203..30695a5c6f 100644 --- a/src/Model/ScalarType/StringType.php +++ b/src/Model/ScalarType/StringType.php @@ -4,36 +4,69 @@ namespace Shopsys\FrontendApiBundle\Model\ScalarType; +use GraphQL\Error\Error; +use GraphQL\Error\SerializationError; use GraphQL\Language\AST\Node; -use GraphQL\Type\Definition\StringType as BaseStringType; +use GraphQL\Language\AST\StringValueNode; +use GraphQL\Language\Printer; +use GraphQL\Type\Definition\ScalarType; +use GraphQL\Utils\Utils; use Shopsys\FrameworkBundle\Component\String\TransformString; +use function is_object; +use function is_scalar; +use function is_string; +use function method_exists; -class StringType extends BaseStringType +class StringType extends ScalarType { /** - * webonix/graphql-php has wrong typing between StringType::parseLiteral and Leaf type interface::parseLiteral, - * so phpstan-param annotation must be used - * - * @phpstan-param \GraphQL\Language\AST\IntValueNode|\GraphQL\Language\AST\FloatValueNode|\GraphQL\Language\AST\StringValueNode|\GraphQL\Language\AST\BooleanValueNode|\GraphQL\Language\AST\NullValueNode $valueNode - * @param \GraphQL\Language\AST\Node $valueNode - * @param array|null $variables + * @param mixed $value * @return string|null */ - public function parseLiteral(Node $valueNode, ?array $variables = null) + public function serialize($value): ?string { - $value = parent::parseLiteral($valueNode, $variables); + $canCast = is_scalar($value) + || (is_object($value) && method_exists($value, '__toString')) + || $value === null; - return TransformString::getTrimmedStringOrNullOnEmpty($value); + if (!$canCast) { + $notStringable = Utils::printSafe($value); + + throw new SerializationError("String cannot represent value: {$notStringable}"); + } + + return TransformString::getTrimmedStringOrNullOnEmpty((string)$value); } /** * @param mixed $value + * @throws \GraphQL\Error\Error * @return string|null */ - public function parseValue($value) + public function parseValue($value): ?string { - $value = parent::parseValue($value); + if (!is_string($value)) { + $notString = Utils::printSafeJson($value); + + throw new Error("String cannot represent a non string value: {$notString}"); + } return TransformString::getTrimmedStringOrNullOnEmpty($value); } + + /** + * @param \GraphQL\Language\AST\Node $valueNode + * @param array|null $variables + * @return string|null + */ + public function parseLiteral(Node $valueNode, ?array $variables = null): ?string + { + if ($valueNode instanceof StringValueNode) { + return TransformString::getTrimmedStringOrNullOnEmpty($valueNode->value); + } + + $notString = Printer::doPrint($valueNode); + + throw new Error("String cannot represent a non string value: {$notString}", $valueNode); + } } diff --git a/src/Model/Token/Exception/TokenUserMessageException.php b/src/Model/Token/Exception/TokenUserMessageException.php index 1694c5569f..c331014d15 100644 --- a/src/Model/Token/Exception/TokenUserMessageException.php +++ b/src/Model/Token/Exception/TokenUserMessageException.php @@ -15,7 +15,7 @@ class TokenUserMessageException extends CustomUserMessageAuthenticationException /** * @return bool */ - public function isClientSafe() + public function isClientSafe(): bool { return true; }