From dae8b0e66bf51920bf90288dd3829ecc3622376a Mon Sep 17 00:00:00 2001 From: Andrii Sudiev Date: Tue, 1 Oct 2024 18:28:48 +0300 Subject: [PATCH] CR fixes --- src/Parameters/PrefetchDataParameter.php | 1 + src/QueryField.php | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Parameters/PrefetchDataParameter.php b/src/Parameters/PrefetchDataParameter.php index 284cd364c..a903272e4 100644 --- a/src/Parameters/PrefetchDataParameter.php +++ b/src/Parameters/PrefetchDataParameter.php @@ -72,6 +72,7 @@ private function computePrefetch(array $args, mixed $context, ResolveInfo $info, $toPassPrefetchArgs = QueryField::paramsToArguments($this->fieldName, $this->parameters, null, $args, $context, $info, $this->resolver); $resolvedValues = ($this->resolver)($sources, ...$toPassPrefetchArgs); + foreach ($sources as $source) { // map results to each source to support old prefetch behavior $prefetchBuffer->storeResult($source, $resolvedValues); diff --git a/src/QueryField.php b/src/QueryField.php index 656cc99a5..5a224b70a 100644 --- a/src/QueryField.php +++ b/src/QueryField.php @@ -74,7 +74,7 @@ public function __construct( $callResolver = function (...$args) use ($originalResolver, $source, $resolver) { $result = $resolver($source, ...$args); - return $this->unwrapReturnType($result, $originalResolver); + return $this->resolveWithPromise($result, $originalResolver); }; // GraphQL allows deferring resolving the field's value using promises, i.e. they call the resolve @@ -90,11 +90,12 @@ public function __construct( parent::__construct($config); } - private function unwrapReturnType(mixed $result, ResolverInterface $originalResolver): mixed + private function resolveWithPromise(mixed $result, ResolverInterface $originalResolver): mixed { if ($result instanceof SyncPromise) { - return $result->then(fn ($resolvedValue) => $this->unwrapReturnType($resolvedValue, $originalResolver)); + return $result->then(fn ($resolvedValue) => $this->resolveWithPromise($resolvedValue, $originalResolver)); } + try { $this->assertReturnType($result); } catch (TypeMismatchRuntimeException $e) { @@ -102,6 +103,7 @@ private function unwrapReturnType(mixed $result, ResolverInterface $originalReso throw $e; } + return $result; }