vendor/overblog/graphql-bundle/src/Definition/Type/ExtensibleSchema.php line 48

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Overblog\GraphQLBundle\Definition\Type;
  4. use GraphQL\Type\Definition\Type;
  5. use GraphQL\Type\Schema;
  6. use GraphQL\Type\SchemaConfig;
  7. use Overblog\GraphQLBundle\Definition\Type\SchemaExtension\SchemaExtensionInterface;
  8. use Overblog\GraphQLBundle\Resolver\UnresolvableException;
  9. class ExtensibleSchema extends Schema
  10. {
  11.     public function __construct($config)
  12.     {
  13.         parent::__construct($this->addDefaultFallBackToTypeLoader(
  14.             $config instanceof SchemaConfig $config SchemaConfig::create($config)
  15.         ));
  16.     }
  17.     /** @var SchemaExtensionInterface[] */
  18.     private array $extensions = [];
  19.     /**
  20.      * @param SchemaExtensionInterface[] $extensions
  21.      *
  22.      * @return $this
  23.      */
  24.     public function setExtensions(array $extensions)
  25.     {
  26.         $this->extensions = [];
  27.         foreach ($extensions as $extension) {
  28.             $this->addExtension($extension);
  29.         }
  30.         return $this;
  31.     }
  32.     public function addExtension(SchemaExtensionInterface $extension): void
  33.     {
  34.         $this->extensions[] = $extension;
  35.     }
  36.     /**
  37.      * @return $this
  38.      */
  39.     public function processExtensions()
  40.     {
  41.         foreach ($this->extensions as $extension) {
  42.             $extension->process($this);
  43.         }
  44.         return $this;
  45.     }
  46.     private function addDefaultFallBackToTypeLoader(SchemaConfig $schemaConfig): SchemaConfig
  47.     {
  48.         $typeLoader $schemaConfig->typeLoader;
  49.         $loaderWrapper null;
  50.         $loaderWrapper = function ($name) use ($typeLoader, &$schemaConfig, &$loaderWrapper): ?Type {
  51.             $type null;
  52.             try {
  53.                 $type $typeLoader($name);
  54.             } catch (UnresolvableException $e) {
  55.                 // second chance for types with un-registered name in TypeResolver
  56.                 // we disabled the custom typeLoader to force default loader usage
  57.                 $schemaConfig->typeLoader null;
  58.                 $type $this->getType($name);
  59.                 $schemaConfig->typeLoader $loaderWrapper// @phpstan-ignore-line
  60.             }
  61.             return $type;
  62.         };
  63.         $schemaConfig->typeLoader $loaderWrapper// @phpstan-ignore-line
  64.         return $schemaConfig;
  65.     }
  66. }