From 493b8ab886b2b4a4883bb745b8a94662b947ddc4 Mon Sep 17 00:00:00 2001 From: murtukov Date: Mon, 2 Nov 2020 22:15:21 +0100 Subject: [PATCH 1/7] Remove LazyConfig calls from generated types --- src/Definition/ConfigProcessor.php | 13 +++++++++---- src/Generator/TypeBuilder.php | 10 ++++------ src/Resources/config/services.yaml | 1 + 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/Definition/ConfigProcessor.php b/src/Definition/ConfigProcessor.php index e805f5b3a..7122322e4 100644 --- a/src/Definition/ConfigProcessor.php +++ b/src/Definition/ConfigProcessor.php @@ -4,20 +4,23 @@ namespace Overblog\GraphQLBundle\Definition; +use Closure; use Overblog\GraphQLBundle\Definition\ConfigProcessor\ConfigProcessorInterface; -final class ConfigProcessor implements ConfigProcessorInterface +final class ConfigProcessor { /** * @var ConfigProcessorInterface[] */ private array $processors; + private GlobalVariables $globalVariables; - public function __construct(iterable $processors) + public function __construct(iterable $processors, GlobalVariables $globalVariables) { foreach ($processors as $processor) { $this->register($processor); } + $this->globalVariables = $globalVariables; } public function getProcessors(): array @@ -30,12 +33,14 @@ public function register(ConfigProcessorInterface $configProcessor): void $this->processors[] = $configProcessor; } - public function process(LazyConfig $lazyConfig): LazyConfig + public function process(Closure $loader): array { + $lazyConfig = LazyConfig::create($loader, $this->globalVariables); + foreach ($this->getProcessors() as $processor) { $lazyConfig = $processor->process($lazyConfig); } - return $lazyConfig; + return $lazyConfig->load(); } } diff --git a/src/Generator/TypeBuilder.php b/src/Generator/TypeBuilder.php index f7b1848f8..86bbd25df 100644 --- a/src/Generator/TypeBuilder.php +++ b/src/Generator/TypeBuilder.php @@ -135,12 +135,10 @@ public function build(array $config, string $type): PhpFile $class->createConstructor() ->addArgument('configProcessor', ConfigProcessor::class) - ->addArgument(TypeGenerator::GLOBAL_VARS, GlobalVariables::class, null) - ->append('$configLoader = ', $this->buildConfigLoader($config)) - ->append('$config = $configProcessor->process(LazyConfig::create($configLoader, '.$this->globalVars.'))->load()') - ->append('parent::__construct($config)'); - - $this->file->addUse(LazyConfig::class); + ->addArgument(TypeGenerator::GLOBAL_VARS, GlobalVariables::class) + ->append('$config = ', $this->buildConfigLoader($config)) + ->emptyLine() + ->append('parent::__construct($configProcessor->process($config))'); return $this->file; } diff --git a/src/Resources/config/services.yaml b/src/Resources/config/services.yaml index 6e19ec166..ff1d1249a 100644 --- a/src/Resources/config/services.yaml +++ b/src/Resources/config/services.yaml @@ -87,6 +87,7 @@ services: Overblog\GraphQLBundle\Definition\ConfigProcessor: arguments: - !tagged_iterator overblog_graphql.definition_config_processor + - '@Overblog\GraphQLBundle\Definition\GlobalVariables' GraphQL\Executor\Promise\PromiseAdapter: "@overblog_graphql.promise_adapter" From 22afbb20f3a0d547b5b509e2e71b171a41fbddb4 Mon Sep 17 00:00:00 2001 From: murtukov Date: Mon, 2 Nov 2020 22:22:18 +0100 Subject: [PATCH 2/7] Remove unnecessary passes of $globalVariables --- src/Definition/ConfigProcessor.php | 6 ++---- src/Definition/LazyConfig.php | 12 +++++------- src/Resources/config/services.yaml | 1 - 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/Definition/ConfigProcessor.php b/src/Definition/ConfigProcessor.php index 7122322e4..50c7e3f4b 100644 --- a/src/Definition/ConfigProcessor.php +++ b/src/Definition/ConfigProcessor.php @@ -13,14 +13,12 @@ final class ConfigProcessor * @var ConfigProcessorInterface[] */ private array $processors; - private GlobalVariables $globalVariables; - public function __construct(iterable $processors, GlobalVariables $globalVariables) + public function __construct(iterable $processors) { foreach ($processors as $processor) { $this->register($processor); } - $this->globalVariables = $globalVariables; } public function getProcessors(): array @@ -35,7 +33,7 @@ public function register(ConfigProcessorInterface $configProcessor): void public function process(Closure $loader): array { - $lazyConfig = LazyConfig::create($loader, $this->globalVariables); + $lazyConfig = LazyConfig::create($loader); foreach ($this->getProcessors() as $processor) { $lazyConfig = $processor->process($lazyConfig); diff --git a/src/Definition/LazyConfig.php b/src/Definition/LazyConfig.php index d76aa19ce..4d0b2c7fa 100644 --- a/src/Definition/LazyConfig.php +++ b/src/Definition/LazyConfig.php @@ -9,28 +9,26 @@ final class LazyConfig { private Closure $loader; - private ?GlobalVariables $globalVariables; /** * @var callable[] */ private array $onPostLoad = []; - private function __construct(Closure $loader, GlobalVariables $globalVariables = null) + private function __construct(Closure $loader) { $this->loader = $loader; - $this->globalVariables = $globalVariables ?: new GlobalVariables(); } - public static function create(Closure $loader, GlobalVariables $globalVariables = null): self + public static function create(Closure $loader): self { - return new self($loader, $globalVariables); + return new self($loader); } public function load(): array { - $loader = $this->loader; - $config = $loader($this->globalVariables); + $config = ($this->loader)(); + foreach ($this->onPostLoad as $postLoader) { $config = $postLoader($config); } diff --git a/src/Resources/config/services.yaml b/src/Resources/config/services.yaml index ff1d1249a..6e19ec166 100644 --- a/src/Resources/config/services.yaml +++ b/src/Resources/config/services.yaml @@ -87,7 +87,6 @@ services: Overblog\GraphQLBundle\Definition\ConfigProcessor: arguments: - !tagged_iterator overblog_graphql.definition_config_processor - - '@Overblog\GraphQLBundle\Definition\GlobalVariables' GraphQL\Executor\Promise\PromiseAdapter: "@overblog_graphql.promise_adapter" From 3c951f69adc4c127803bbe61df1219df84b01a6d Mon Sep 17 00:00:00 2001 From: murtukov Date: Mon, 2 Nov 2020 22:32:13 +0100 Subject: [PATCH 3/7] Don't return $lazyConfig back from methods --- src/Definition/ConfigProcessor.php | 2 +- src/Definition/ConfigProcessor/AclConfigProcessor.php | 4 +--- src/Definition/ConfigProcessor/ConfigProcessorInterface.php | 2 +- .../ConfigProcessor/PublicFieldsFilterConfigProcessor.php | 4 +--- .../ConfigProcessor/WrapArgumentConfigProcessor.php | 4 +--- 5 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/Definition/ConfigProcessor.php b/src/Definition/ConfigProcessor.php index 50c7e3f4b..b7b8de6e4 100644 --- a/src/Definition/ConfigProcessor.php +++ b/src/Definition/ConfigProcessor.php @@ -36,7 +36,7 @@ public function process(Closure $loader): array $lazyConfig = LazyConfig::create($loader); foreach ($this->getProcessors() as $processor) { - $lazyConfig = $processor->process($lazyConfig); + $processor->process($lazyConfig); } return $lazyConfig->load(); diff --git a/src/Definition/ConfigProcessor/AclConfigProcessor.php b/src/Definition/ConfigProcessor/AclConfigProcessor.php index c8fc1d8e1..015740252 100644 --- a/src/Definition/ConfigProcessor/AclConfigProcessor.php +++ b/src/Definition/ConfigProcessor/AclConfigProcessor.php @@ -47,7 +47,7 @@ public static function acl(array $fields, AccessResolver $accessResolver, callab return $fields; } - public function process(LazyConfig $lazyConfig): LazyConfig + public function process(LazyConfig $lazyConfig): void { $lazyConfig->addPostLoader(function ($config) { if (isset($config['fields']) && is_callable($config['fields'])) { @@ -60,8 +60,6 @@ public function process(LazyConfig $lazyConfig): LazyConfig return $config; }); - - return $lazyConfig; } private static function findFieldResolver(array $field, ResolveInfo $info, callable $defaultResolver): callable diff --git a/src/Definition/ConfigProcessor/ConfigProcessorInterface.php b/src/Definition/ConfigProcessor/ConfigProcessorInterface.php index 4ed5fe220..186b3464f 100644 --- a/src/Definition/ConfigProcessor/ConfigProcessorInterface.php +++ b/src/Definition/ConfigProcessor/ConfigProcessorInterface.php @@ -8,5 +8,5 @@ interface ConfigProcessorInterface { - public function process(LazyConfig $lazyConfig): LazyConfig; + public function process(LazyConfig $lazyConfig): void; } diff --git a/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php b/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php index 6fe245e2c..926f72e3c 100644 --- a/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php +++ b/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php @@ -30,7 +30,7 @@ function ($field, $fieldName) { ); } - public function process(LazyConfig $lazyConfig): LazyConfig + public function process(LazyConfig $lazyConfig): void { $lazyConfig->addPostLoader(function ($config) { if (isset($config['fields']) && is_callable($config['fields'])) { @@ -43,7 +43,5 @@ public function process(LazyConfig $lazyConfig): LazyConfig return $config; }); - - return $lazyConfig; } } diff --git a/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php b/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php index 1207b029e..66d74d025 100644 --- a/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php +++ b/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php @@ -18,7 +18,7 @@ public function __construct(ArgumentFactory $argumentFactory) $this->argumentFactory = $argumentFactory; } - public function process(LazyConfig $lazyConfig): LazyConfig + public function process(LazyConfig $lazyConfig): void { $lazyConfig->addPostLoader(function ($config) { if (isset($config['resolveField']) && is_callable($config['resolveField'])) { @@ -38,8 +38,6 @@ public function process(LazyConfig $lazyConfig): LazyConfig return $config; }); - - return $lazyConfig; } private function wrapFieldsArgument(array $fields): array From 88c87aeb7e10d6b4c23c1e151492c708f3823a13 Mon Sep 17 00:00:00 2001 From: murtukov Date: Mon, 2 Nov 2020 23:48:52 +0100 Subject: [PATCH 4/7] Get rid of LazyConfig.php --- src/Definition/ConfigProcessor.php | 10 ++--- .../ConfigProcessor/AclConfigProcessor.php | 19 +++----- .../ConfigProcessorInterface.php | 4 +- .../PublicFieldsFilterConfigProcessor.php | 19 +++----- .../WrapArgumentConfigProcessor.php | 31 ++++++------- src/Definition/LazyConfig.php | 43 ------------------- src/Generator/TypeBuilder.php | 5 +-- 7 files changed, 35 insertions(+), 96 deletions(-) delete mode 100644 src/Definition/LazyConfig.php diff --git a/src/Definition/ConfigProcessor.php b/src/Definition/ConfigProcessor.php index b7b8de6e4..70eb81958 100644 --- a/src/Definition/ConfigProcessor.php +++ b/src/Definition/ConfigProcessor.php @@ -31,14 +31,12 @@ public function register(ConfigProcessorInterface $configProcessor): void $this->processors[] = $configProcessor; } - public function process(Closure $loader): array + public function process(array $config): array { - $lazyConfig = LazyConfig::create($loader); - foreach ($this->getProcessors() as $processor) { - $processor->process($lazyConfig); + $processor->process($config); } - return $lazyConfig->load(); + return $config; } -} +} \ No newline at end of file diff --git a/src/Definition/ConfigProcessor/AclConfigProcessor.php b/src/Definition/ConfigProcessor/AclConfigProcessor.php index 015740252..0cc50d264 100644 --- a/src/Definition/ConfigProcessor/AclConfigProcessor.php +++ b/src/Definition/ConfigProcessor/AclConfigProcessor.php @@ -5,7 +5,6 @@ namespace Overblog\GraphQLBundle\Definition\ConfigProcessor; use GraphQL\Type\Definition\ResolveInfo; -use Overblog\GraphQLBundle\Definition\LazyConfig; use Overblog\GraphQLBundle\Error\UserWarning; use Overblog\GraphQLBundle\Resolver\AccessResolver; use function is_array; @@ -47,19 +46,15 @@ public static function acl(array $fields, AccessResolver $accessResolver, callab return $fields; } - public function process(LazyConfig $lazyConfig): void + public function process(array &$config): void { - $lazyConfig->addPostLoader(function ($config) { - if (isset($config['fields']) && is_callable($config['fields'])) { - $config['fields'] = function () use ($config) { - $fields = $config['fields'](); + if (isset($config['fields']) && is_callable($config['fields'])) { + $config['fields'] = function () use ($config) { + $fields = $config['fields'](); - return static::acl($fields, $this->accessResolver, $this->defaultResolver); - }; - } - - return $config; - }); + return static::acl($fields, $this->accessResolver, $this->defaultResolver); + }; + } } private static function findFieldResolver(array $field, ResolveInfo $info, callable $defaultResolver): callable diff --git a/src/Definition/ConfigProcessor/ConfigProcessorInterface.php b/src/Definition/ConfigProcessor/ConfigProcessorInterface.php index 186b3464f..a68f96b01 100644 --- a/src/Definition/ConfigProcessor/ConfigProcessorInterface.php +++ b/src/Definition/ConfigProcessor/ConfigProcessorInterface.php @@ -4,9 +4,9 @@ namespace Overblog\GraphQLBundle\Definition\ConfigProcessor; -use Overblog\GraphQLBundle\Definition\LazyConfig; +use Closure; interface ConfigProcessorInterface { - public function process(LazyConfig $lazyConfig): void; + public function process(array &$config): void; } diff --git a/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php b/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php index 926f72e3c..22c71d3f2 100644 --- a/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php +++ b/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php @@ -4,7 +4,6 @@ namespace Overblog\GraphQLBundle\Definition\ConfigProcessor; -use Overblog\GraphQLBundle\Definition\LazyConfig; use function array_filter; use function call_user_func; use function is_array; @@ -30,18 +29,14 @@ function ($field, $fieldName) { ); } - public function process(LazyConfig $lazyConfig): void + public function process(array &$config): void { - $lazyConfig->addPostLoader(function ($config) { - if (isset($config['fields']) && is_callable($config['fields'])) { - $config['fields'] = function () use ($config) { - $fields = $config['fields'](); + if (isset($config['fields']) && is_callable($config['fields'])) { + $config['fields'] = function () use ($config) { + $fields = $config['fields'](); - return static::filter($fields); - }; - } - - return $config; - }); + return static::filter($fields); + }; + } } } diff --git a/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php b/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php index 66d74d025..57c921e9c 100644 --- a/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php +++ b/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php @@ -5,7 +5,6 @@ namespace Overblog\GraphQLBundle\Definition\ConfigProcessor; use Overblog\GraphQLBundle\Definition\ArgumentFactory; -use Overblog\GraphQLBundle\Definition\LazyConfig; use function is_array; use function is_callable; @@ -18,26 +17,22 @@ public function __construct(ArgumentFactory $argumentFactory) $this->argumentFactory = $argumentFactory; } - public function process(LazyConfig $lazyConfig): void + public function process(array &$config): void { - $lazyConfig->addPostLoader(function ($config) { - if (isset($config['resolveField']) && is_callable($config['resolveField'])) { - $config['resolveField'] = $this->argumentFactory->wrapResolverArgs($config['resolveField']); - } + if (isset($config['resolveField']) && is_callable($config['resolveField'])) { + $config['resolveField'] = $this->argumentFactory->wrapResolverArgs($config['resolveField']); + } - if (isset($config['fields'])) { - $config['fields'] = function () use ($config) { - $fields = $config['fields']; - if (is_callable($config['fields'])) { - $fields = $config['fields'](); - } + if (isset($config['fields'])) { + $config['fields'] = function () use ($config) { + $fields = $config['fields']; + if (is_callable($config['fields'])) { + $fields = $config['fields'](); + } - return $this->wrapFieldsArgument($fields); - }; - } - - return $config; - }); + return $this->wrapFieldsArgument($fields); + }; + } } private function wrapFieldsArgument(array $fields): array diff --git a/src/Definition/LazyConfig.php b/src/Definition/LazyConfig.php deleted file mode 100644 index 4d0b2c7fa..000000000 --- a/src/Definition/LazyConfig.php +++ /dev/null @@ -1,43 +0,0 @@ -loader = $loader; - } - - public static function create(Closure $loader): self - { - return new self($loader); - } - - public function load(): array - { - $config = ($this->loader)(); - - foreach ($this->onPostLoad as $postLoader) { - $config = $postLoader($config); - } - - return $config; - } - - public function addPostLoader(callable $postLoader): void - { - $this->onPostLoad[] = $postLoader; - } -} diff --git a/src/Generator/TypeBuilder.php b/src/Generator/TypeBuilder.php index 86bbd25df..78e232669 100644 --- a/src/Generator/TypeBuilder.php +++ b/src/Generator/TypeBuilder.php @@ -25,7 +25,6 @@ use Murtukov\PHPCodeGenerator\Utils; use Overblog\GraphQLBundle\Definition\ConfigProcessor; use Overblog\GraphQLBundle\Definition\GlobalVariables; -use Overblog\GraphQLBundle\Definition\LazyConfig; use Overblog\GraphQLBundle\Definition\Type\CustomScalarType; use Overblog\GraphQLBundle\Definition\Type\GeneratedTypeInterface; use Overblog\GraphQLBundle\Error\ResolveErrors; @@ -283,7 +282,7 @@ protected function wrapTypeRecursive($typeNode) * @throws GeneratorException * @throws UnrecognizedValueTypeException */ - protected function buildConfigLoader(array $config): ArrowFunction + protected function buildConfigLoader(array $config) { // Convert to an object for a better readability $c = (object) $config; @@ -349,7 +348,7 @@ protected function buildConfigLoader(array $config): ArrowFunction } } - return new ArrowFunction($configLoader); + return $configLoader; } /** From 01cfbe22df516f23857b2448596a8ce36bee4e42 Mon Sep 17 00:00:00 2001 From: murtukov Date: Tue, 3 Nov 2020 13:22:08 +0100 Subject: [PATCH 5/7] Reduce unnecessary calls --- src/Definition/ConfigProcessor.php | 3 +-- src/Definition/ConfigProcessor/AclConfigProcessor.php | 1 + .../ConfigProcessor/PublicFieldsFilterConfigProcessor.php | 2 +- src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php | 1 + src/Resolver/AccessResolver.php | 2 +- 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Definition/ConfigProcessor.php b/src/Definition/ConfigProcessor.php index 70eb81958..ce4fede26 100644 --- a/src/Definition/ConfigProcessor.php +++ b/src/Definition/ConfigProcessor.php @@ -4,7 +4,6 @@ namespace Overblog\GraphQLBundle\Definition; -use Closure; use Overblog\GraphQLBundle\Definition\ConfigProcessor\ConfigProcessorInterface; final class ConfigProcessor @@ -33,7 +32,7 @@ public function register(ConfigProcessorInterface $configProcessor): void public function process(array $config): array { - foreach ($this->getProcessors() as $processor) { + foreach ($this->processors as $processor) { $processor->process($config); } diff --git a/src/Definition/ConfigProcessor/AclConfigProcessor.php b/src/Definition/ConfigProcessor/AclConfigProcessor.php index 0cc50d264..74c7a9406 100644 --- a/src/Definition/ConfigProcessor/AclConfigProcessor.php +++ b/src/Definition/ConfigProcessor/AclConfigProcessor.php @@ -28,6 +28,7 @@ public static function acl(array $fields, AccessResolver $accessResolver, callab $deniedAccess = static function (): void { throw new UserWarning('Access denied to this field.'); }; + foreach ($fields as &$field) { if (is_array($field) && isset($field['access']) && true !== $field['access']) { $accessChecker = $field['access']; diff --git a/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php b/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php index 22c71d3f2..de2ced8d0 100644 --- a/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php +++ b/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php @@ -20,7 +20,7 @@ function ($field, $fieldName) { $exposed = true; if (is_array($field) && isset($field['public']) && is_callable($field['public'])) { - $exposed = (bool) call_user_func($field['public'], $fieldName); + $exposed = (bool) $field['public']($fieldName); } return $exposed; diff --git a/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php b/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php index 57c921e9c..fe830bc7a 100644 --- a/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php +++ b/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php @@ -26,6 +26,7 @@ public function process(array &$config): void if (isset($config['fields'])) { $config['fields'] = function () use ($config) { $fields = $config['fields']; + if (is_callable($config['fields'])) { $fields = $config['fields'](); } diff --git a/src/Resolver/AccessResolver.php b/src/Resolver/AccessResolver.php index 7eb17c9e3..847d91133 100644 --- a/src/Resolver/AccessResolver.php +++ b/src/Resolver/AccessResolver.php @@ -114,7 +114,7 @@ function (Edge $edge) use ($accessChecker, $resolveArgs) { private function hasAccess(callable $accessChecker, array $resolveArgs = [], $object = null) { $resolveArgs[] = $object; - $accessOrPromise = call_user_func_array($accessChecker, $resolveArgs); + $accessOrPromise = $accessChecker(...$resolveArgs); return $accessOrPromise; } From e18c116010cc5494bca07ea00c3dc8fbc05fff71 Mon Sep 17 00:00:00 2001 From: murtukov Date: Tue, 3 Nov 2020 16:13:38 +0100 Subject: [PATCH 6/7] Update method description and perform code quality --- src/Definition/ConfigProcessor.php | 2 +- .../ConfigProcessorInterface.php | 2 -- .../PublicFieldsFilterConfigProcessor.php | 1 - src/Generator/TypeBuilder.php | 22 +++++++++---------- 4 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/Definition/ConfigProcessor.php b/src/Definition/ConfigProcessor.php index ce4fede26..a8511d294 100644 --- a/src/Definition/ConfigProcessor.php +++ b/src/Definition/ConfigProcessor.php @@ -38,4 +38,4 @@ public function process(array $config): array return $config; } -} \ No newline at end of file +} diff --git a/src/Definition/ConfigProcessor/ConfigProcessorInterface.php b/src/Definition/ConfigProcessor/ConfigProcessorInterface.php index a68f96b01..3cf3c20d8 100644 --- a/src/Definition/ConfigProcessor/ConfigProcessorInterface.php +++ b/src/Definition/ConfigProcessor/ConfigProcessorInterface.php @@ -4,8 +4,6 @@ namespace Overblog\GraphQLBundle\Definition\ConfigProcessor; -use Closure; - interface ConfigProcessorInterface { public function process(array &$config): void; diff --git a/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php b/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php index de2ced8d0..27be7b8eb 100644 --- a/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php +++ b/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php @@ -5,7 +5,6 @@ namespace Overblog\GraphQLBundle\Definition\ConfigProcessor; use function array_filter; -use function call_user_func; use function is_array; use function is_callable; use const ARRAY_FILTER_USE_BOTH; diff --git a/src/Generator/TypeBuilder.php b/src/Generator/TypeBuilder.php index 78e232669..7a6aa3511 100644 --- a/src/Generator/TypeBuilder.php +++ b/src/Generator/TypeBuilder.php @@ -135,7 +135,7 @@ public function build(array $config, string $type): PhpFile $class->createConstructor() ->addArgument('configProcessor', ConfigProcessor::class) ->addArgument(TypeGenerator::GLOBAL_VARS, GlobalVariables::class) - ->append('$config = ', $this->buildConfigLoader($config)) + ->append('$config = ', $this->buildConfig($config)) ->emptyLine() ->append('parent::__construct($configProcessor->process($config))'); @@ -198,12 +198,12 @@ protected function wrapTypeRecursive($typeNode) } /** - * Builds an arrow function with an array as the return value. Content of - * the array depends on the GraphQL type that is currently being generated. + * Builds a config array compatible with webonyx/graphql-php type system. The content + * of the array depends on the GraphQL type that is currently being generated. * * Render example (object): * - * fn() => [ + * [ * 'name' => self::NAME, * 'description' => 'Root query type', * 'fields' => fn() => [ @@ -220,7 +220,7 @@ protected function wrapTypeRecursive($typeNode) * * Render example (input-object): * - * fn() => [ + * [ * 'name' => self::NAME, * 'description' => 'Some description.', * 'validation' => {@see buildValidationRules} @@ -232,7 +232,7 @@ protected function wrapTypeRecursive($typeNode) * * Render example (interface) * - * fn() => [ + * [ * 'name' => self::NAME, * 'description' => 'Some description.', * 'fields' => fn() => [ @@ -244,7 +244,7 @@ protected function wrapTypeRecursive($typeNode) * * Render example (union): * - * fn() => [ + * [ * 'name' => self::NAME, * 'description' => 'Some description.', * 'types' => fn() => [ @@ -256,7 +256,7 @@ protected function wrapTypeRecursive($typeNode) * * Render example (custom-scalar): * - * fn() => [ + * [ * 'name' => self::NAME, * 'description' => 'Some description' * 'serialize' => {@see buildScalarCallback}, @@ -266,7 +266,7 @@ protected function wrapTypeRecursive($typeNode) * * Render example (enum): * - * fn() => [ + * [ * 'name' => self::NAME, * 'values' => [ * 'PUBLISHED' => ['value' => 1], @@ -282,7 +282,7 @@ protected function wrapTypeRecursive($typeNode) * @throws GeneratorException * @throws UnrecognizedValueTypeException */ - protected function buildConfigLoader(array $config) + protected function buildConfig(array $config): Collection { // Convert to an object for a better readability $c = (object) $config; @@ -348,7 +348,7 @@ protected function buildConfigLoader(array $config) } } - return $configLoader; + return $configLoader; // @phpstan-ignore-line } /** From bc1eb48c6d99528752adeee62a529f8e4f2a34f8 Mon Sep 17 00:00:00 2001 From: murtukov Date: Tue, 3 Nov 2020 16:32:12 +0100 Subject: [PATCH 7/7] Pass arrays to config processors by value --- src/Definition/ConfigProcessor.php | 2 +- src/Definition/ConfigProcessor/AclConfigProcessor.php | 4 +++- src/Definition/ConfigProcessor/ConfigProcessorInterface.php | 2 +- .../ConfigProcessor/PublicFieldsFilterConfigProcessor.php | 4 +++- .../ConfigProcessor/WrapArgumentConfigProcessor.php | 4 +++- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Definition/ConfigProcessor.php b/src/Definition/ConfigProcessor.php index a8511d294..57ed8ccf8 100644 --- a/src/Definition/ConfigProcessor.php +++ b/src/Definition/ConfigProcessor.php @@ -33,7 +33,7 @@ public function register(ConfigProcessorInterface $configProcessor): void public function process(array $config): array { foreach ($this->processors as $processor) { - $processor->process($config); + $config = $processor->process($config); } return $config; diff --git a/src/Definition/ConfigProcessor/AclConfigProcessor.php b/src/Definition/ConfigProcessor/AclConfigProcessor.php index 74c7a9406..02b990d21 100644 --- a/src/Definition/ConfigProcessor/AclConfigProcessor.php +++ b/src/Definition/ConfigProcessor/AclConfigProcessor.php @@ -47,7 +47,7 @@ public static function acl(array $fields, AccessResolver $accessResolver, callab return $fields; } - public function process(array &$config): void + public function process(array $config): array { if (isset($config['fields']) && is_callable($config['fields'])) { $config['fields'] = function () use ($config) { @@ -56,6 +56,8 @@ public function process(array &$config): void return static::acl($fields, $this->accessResolver, $this->defaultResolver); }; } + + return $config; } private static function findFieldResolver(array $field, ResolveInfo $info, callable $defaultResolver): callable diff --git a/src/Definition/ConfigProcessor/ConfigProcessorInterface.php b/src/Definition/ConfigProcessor/ConfigProcessorInterface.php index 3cf3c20d8..aa4c7a62a 100644 --- a/src/Definition/ConfigProcessor/ConfigProcessorInterface.php +++ b/src/Definition/ConfigProcessor/ConfigProcessorInterface.php @@ -6,5 +6,5 @@ interface ConfigProcessorInterface { - public function process(array &$config): void; + public function process(array $config): array; } diff --git a/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php b/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php index 27be7b8eb..2f7747885 100644 --- a/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php +++ b/src/Definition/ConfigProcessor/PublicFieldsFilterConfigProcessor.php @@ -28,7 +28,7 @@ function ($field, $fieldName) { ); } - public function process(array &$config): void + public function process(array $config): array { if (isset($config['fields']) && is_callable($config['fields'])) { $config['fields'] = function () use ($config) { @@ -37,5 +37,7 @@ public function process(array &$config): void return static::filter($fields); }; } + + return $config; } } diff --git a/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php b/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php index fe830bc7a..cc6c26e25 100644 --- a/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php +++ b/src/Definition/ConfigProcessor/WrapArgumentConfigProcessor.php @@ -17,7 +17,7 @@ public function __construct(ArgumentFactory $argumentFactory) $this->argumentFactory = $argumentFactory; } - public function process(array &$config): void + public function process(array $config): array { if (isset($config['resolveField']) && is_callable($config['resolveField'])) { $config['resolveField'] = $this->argumentFactory->wrapResolverArgs($config['resolveField']); @@ -34,6 +34,8 @@ public function process(array &$config): void return $this->wrapFieldsArgument($fields); }; } + + return $config; } private function wrapFieldsArgument(array $fields): array