diff --git a/src/Execution/Execution.php b/src/Execution/Execution.php index 7b197964..ae887b25 100644 --- a/src/Execution/Execution.php +++ b/src/Execution/Execution.php @@ -9,7 +9,7 @@ use Digia\GraphQL\Language\AST\Node\SelectionSetNode; use Digia\GraphQL\Language\AST\NodeKindEnum; use Digia\GraphQL\Type\Definition\ObjectType; -use Digia\GraphQL\Type\Schema\Schema; +use Digia\GraphQL\Type\Schema; /** * Class Execution diff --git a/src/Execution/ExecutionArguments.php b/src/Execution/ExecutionArguments.php index 49978c77..3cf2f127 100644 --- a/src/Execution/ExecutionArguments.php +++ b/src/Execution/ExecutionArguments.php @@ -4,7 +4,7 @@ use Digia\GraphQL\Language\AST\Node\DocumentNode; use Digia\GraphQL\Language\AST\Node\OperationDefinitionNode; -use Digia\GraphQL\Type\Schema\Schema; +use Digia\GraphQL\Type\Schema; class ExecutionArguments { diff --git a/src/Execution/ExecutionContext.php b/src/Execution/ExecutionContext.php index d6d19ad6..d4dfc170 100644 --- a/src/Execution/ExecutionContext.php +++ b/src/Execution/ExecutionContext.php @@ -5,7 +5,7 @@ use Digia\GraphQL\Error\GraphQLError; use Digia\GraphQL\Language\AST\Node\FragmentDefinitionNode; use Digia\GraphQL\Language\AST\Node\OperationDefinitionNode; -use Digia\GraphQL\Type\Schema\Schema; +use Digia\GraphQL\Type\Schema; class ExecutionContext { diff --git a/src/Type/Contract/SchemaInterface.php b/src/Type/Contract/SchemaInterface.php new file mode 100644 index 00000000..007bde19 --- /dev/null +++ b/src/Type/Contract/SchemaInterface.php @@ -0,0 +1,60 @@ +_typeMap; - } - - /** - * @return bool + * @inheritdoc */ - public function getAssumeValid(): bool + public function getDirectives(): array { - return $this->assumeValid; + return $this->directives; } /** * @inheritdoc */ - protected function beforeConfig(): void + public function getTypeMap(): array { - $this->setDirectives(specifiedDirectives()); + return $this->_typeMap; } /** - * @throws \Exception + * @inheritdoc */ - protected function afterConfig(): void + public function getAssumeValid(): bool { - $this->buildTypeMap(); - $this->buildImplementations(); + return $this->assumeValid; } /** - * @param AbstractTypeInterface $abstractType - * @param TypeInterface $possibleType - * @return bool + * @inheritdoc * @throws \Exception */ public function isPossibleType(AbstractTypeInterface $abstractType, TypeInterface $possibleType): bool @@ -185,11 +174,10 @@ public function isPossibleType(AbstractTypeInterface $abstractType, TypeInterfac } /** - * @param AbstractTypeInterface $abstractType - * @return null|TypeInterface[] + * @inheritdoc * @throws \Exception */ - protected function getPossibleTypes(AbstractTypeInterface $abstractType): ?array + public function getPossibleTypes(AbstractTypeInterface $abstractType): ?array { if ($abstractType instanceof UnionType) { return $abstractType->getTypes(); @@ -198,6 +186,31 @@ protected function getPossibleTypes(AbstractTypeInterface $abstractType): ?array return $this->_implementations[$abstractType->getName()] ?? null; } + /** + * @inheritdoc + */ + public function getType(string $name): ?TypeInterface + { + return $this->_typeMap[$name] ?? null; + } + + /** + * @inheritdoc + */ + protected function beforeConfig(): void + { + $this->setDirectives(specifiedDirectives()); + } + + /** + * @throws \Exception + */ + protected function afterConfig(): void + { + $this->buildTypeMap(); + $this->buildImplementations(); + } + /** * */ @@ -217,10 +230,10 @@ protected function buildTypeMap(): void $typeMap = []; // First by deeply visiting all initial types. - $typeMap = array_reduce($initialTypes, 'Digia\GraphQL\Type\Schema\typeMapReducer', $typeMap); + $typeMap = array_reduce($initialTypes, 'Digia\GraphQL\Type\typeMapReducer', $typeMap); // Then by deeply visiting all directive types. - $typeMap = array_reduce($this->directives, 'Digia\GraphQL\Type\Schema\typeMapDirectiveReducer', $typeMap); + $typeMap = array_reduce($this->directives, 'Digia\GraphQL\Type\typeMapDirectiveReducer', $typeMap); // Storing the resulting map for reference by the schema. $this->_typeMap = $typeMap; @@ -232,7 +245,7 @@ protected function buildTypeMap(): void protected function buildImplementations() { $implementations = []; - + // Keep track of all implementations by interface name. foreach ($this->_typeMap as $typeName => $type) { if ($type instanceof ObjectType) { @@ -288,7 +301,7 @@ protected function setSubscription(ObjectType $subscription): Schema * @param array $types * @return Schema */ - public function setTypes(array $types): Schema + protected function setTypes(array $types): Schema { $this->types = $types; @@ -353,11 +366,11 @@ function typeMapReducer(array $map, ?TypeInterface $type): array $reducedMap = $map; if ($type instanceof UnionType) { - $reducedMap = array_reduce($type->getTypes(), 'Digia\GraphQL\Type\Schema\typeMapReducer', $reducedMap); + $reducedMap = array_reduce($type->getTypes(), 'Digia\GraphQL\Type\typeMapReducer', $reducedMap); } if ($type instanceof ObjectType) { - $reducedMap = array_reduce($type->getInterfaces(), 'Digia\GraphQL\Type\Schema\typeMapReducer', $reducedMap); + $reducedMap = array_reduce($type->getInterfaces(), 'Digia\GraphQL\Type\typeMapReducer', $reducedMap); } if ($type instanceof ObjectType || $type instanceof InterfaceType) { @@ -367,7 +380,7 @@ function typeMapReducer(array $map, ?TypeInterface $type): array return $argument->getType(); }, $field->getArgs()); - $reducedMap = array_reduce($fieldArgTypes, 'Digia\GraphQL\Type\Schema\typeMapReducer', $reducedMap); + $reducedMap = array_reduce($fieldArgTypes, 'Digia\GraphQL\Type\typeMapReducer', $reducedMap); } $reducedMap = typeMapReducer($reducedMap, $field->getType()); diff --git a/src/Type/definition.php b/src/Type/definition.php index 3c25f63a..d46fa754 100644 --- a/src/Type/definition.php +++ b/src/Type/definition.php @@ -20,7 +20,7 @@ use Digia\GraphQL\Type\Definition\UnionType; use Digia\GraphQL\Type\Definition\Directive; use Digia\GraphQL\Type\Definition\Contract\DirectiveInterface; -use Digia\GraphQL\Type\Schema\Schema; +use Digia\GraphQL\Type\Schema; use function Digia\GraphQL\Util\invariant; use function Digia\GraphQL\Util\toString; diff --git a/tests/Functional/Excecution/ExecutionTest.php b/tests/Functional/Excecution/ExecutionTest.php index 685ca5a4..2b192e3a 100644 --- a/tests/Functional/Excecution/ExecutionTest.php +++ b/tests/Functional/Excecution/ExecutionTest.php @@ -17,7 +17,7 @@ use Digia\GraphQL\Language\SourceLocation; use Digia\GraphQL\Test\TestCase; use Digia\GraphQL\Type\Definition\ObjectType; -use Digia\GraphQL\Type\Schema\Schema; +use Digia\GraphQL\Type\Schema; use function Digia\GraphQL\Type\GraphQLInt; use function Digia\GraphQL\Type\GraphQLList; use function Digia\GraphQL\Type\GraphQLString; diff --git a/tests/Functional/Type/DefinitionTest.php b/tests/Functional/Type/DefinitionTest.php index 5e10f50a..17ff180a 100644 --- a/tests/Functional/Type/DefinitionTest.php +++ b/tests/Functional/Type/DefinitionTest.php @@ -13,7 +13,7 @@ use Digia\GraphQL\Type\Definition\ScalarType; use Digia\GraphQL\Type\Definition\TypeNameEnum; use Digia\GraphQL\Type\Definition\UnionType; -use Digia\GraphQL\Type\Schema\Schema; +use Digia\GraphQL\Type\Schema; class DefinitionTest extends TestCase { diff --git a/tests/Functional/Type/EnumTypeTest.php b/tests/Functional/Type/EnumTypeTest.php index 77e2aabf..05cf6a08 100644 --- a/tests/Functional/Type/EnumTypeTest.php +++ b/tests/Functional/Type/EnumTypeTest.php @@ -11,7 +11,7 @@ use function Digia\GraphQL\Type\GraphQLObjectType; use function Digia\GraphQL\Type\GraphQLSchema; use function Digia\GraphQL\Type\GraphQLString; -use Digia\GraphQL\Type\Schema\Schema; +use Digia\GraphQL\Type\Schema; class EnumTypeTest extends TestCase { diff --git a/tests/Functional/Type/SchemaTest.php b/tests/Functional/Type/SchemaTest.php index b95bd5c0..33c49952 100644 --- a/tests/Functional/Type/SchemaTest.php +++ b/tests/Functional/Type/SchemaTest.php @@ -14,7 +14,7 @@ use function Digia\GraphQL\Type\GraphQLObjectType; use function Digia\GraphQL\Type\GraphQLSchema; use function Digia\GraphQL\Type\GraphQLString; -use Digia\GraphQL\Type\Schema\Schema; +use Digia\GraphQL\Type\Schema; class SchemaTest extends TestCase {