diff --git a/src/Executor/ExecutionResult.php b/src/Executor/ExecutionResult.php index 074f200..7fc7523 100644 --- a/src/Executor/ExecutionResult.php +++ b/src/Executor/ExecutionResult.php @@ -14,15 +14,22 @@ class ExecutionResult * @var Error[] */ public $errors; + + /** + * @var array[] + */ + public $extensions; /** * @param array $data * @param array $errors + * @param array $extensions */ - public function __construct(array $data = null, array $errors = []) + public function __construct(array $data = null, array $errors = [], array $extensions = []) { $this->data = $data; $this->errors = $errors; + $this->extensions = $extensions; } /** @@ -35,6 +42,10 @@ class ExecutionResult if (!empty($this->errors)) { $result['errors'] = array_map(['GraphQL\Error', 'formatError'], $this->errors); } + + if (!empty($this->extensions)) { + $result['extensions'] = (array) $this->extensions; + } return $result; } diff --git a/src/Type/Definition/InterfaceType.php b/src/Type/Definition/InterfaceType.php index 7bf37c5..dd5a6e2 100644 --- a/src/Type/Definition/InterfaceType.php +++ b/src/Type/Definition/InterfaceType.php @@ -49,8 +49,9 @@ class InterfaceType extends Type implements AbstractType, OutputType, CompositeT public static function addImplementationToInterfaces(ObjectType $impl) { self::$_lazyLoadImplementations[] = function() use ($impl) { + /** @var self $interface */ foreach ($impl->getInterfaces() as $interface) { - $interface->_implementations[] = $impl; + $interface->addImplementation($impl); } }; } @@ -66,6 +67,16 @@ class InterfaceType extends Type implements AbstractType, OutputType, CompositeT self::$_lazyLoadImplementations = []; } + /** + * Add a implemented object type to interface + * + * @param ObjectType $impl + */ + protected function addImplementation(ObjectType $impl) + { + $this->_implementations[] = $impl; + } + /** * InterfaceType constructor. * @param array $config diff --git a/tests/Executor/ExecutionResultTest.php b/tests/Executor/ExecutionResultTest.php new file mode 100644 index 0000000..1c942f7 --- /dev/null +++ b/tests/Executor/ExecutionResultTest.php @@ -0,0 +1,25 @@ +assertEquals(['data' => null], $executionResult->toArray()); + } + + public function testToArrayExtensions() + { + $executionResult = new ExecutionResult(null, [], ['foo' => 'bar']); + + $this->assertEquals(['data' => null, 'extensions' => ['foo' => 'bar']], $executionResult->toArray()); + + $executionResult->extensions = ['bar' => 'foo']; + + $this->assertEquals(['data' => null, 'extensions' => ['bar' => 'foo']], $executionResult->toArray()); + } +}