| @@ 22-55 (lines=34) @@ | ||
| 19 | /** |
|
| 20 | * Class EnumBuilder |
|
| 21 | */ |
|
| 22 | class EnumBuilder extends DefinitionBuilder |
|
| 23 | { |
|
| 24 | /** |
|
| 25 | * @param Readable $file |
|
| 26 | * @param RuleInterface|EnumDefinitionNode $ast |
|
| 27 | * @return \Generator|mixed |
|
| 28 | */ |
|
| 29 | public function build(Readable $file, RuleInterface $ast) |
|
| 30 | { |
|
| 31 | $enum = new TypeDefinition($ast->getFullName()); |
|
| 32 | $enum->in($file, $ast->getOffset()); |
|
| 33 | ||
| 34 | $enum->type = Type::ENUM; |
|
| 35 | $enum->description = $ast->getDescription(); |
|
| 36 | ||
| 37 | yield from $this->loadEnumValues($ast, $enum); |
|
| 38 | ||
| 39 | return $enum; |
|
| 40 | } |
|
| 41 | ||
| 42 | /** |
|
| 43 | * @param EnumDefinitionNode $ast |
|
| 44 | * @param TypeDefinition $enum |
|
| 45 | * @return \Generator |
|
| 46 | */ |
|
| 47 | protected function loadEnumValues(EnumDefinitionNode $ast, TypeDefinition $enum): \Generator |
|
| 48 | { |
|
| 49 | $enum->values = []; |
|
| 50 | ||
| 51 | foreach ($ast->getEnumValueNodes() as $values) { |
|
| 52 | $enum->values[] = yield $values; |
|
| 53 | } |
|
| 54 | } |
|
| 55 | } |
|
| 56 | ||
| @@ 22-55 (lines=34) @@ | ||
| 19 | /** |
|
| 20 | * Class InputBuilder |
|
| 21 | */ |
|
| 22 | class InputBuilder extends DefinitionBuilder |
|
| 23 | { |
|
| 24 | /** |
|
| 25 | * @param Readable $file |
|
| 26 | * @param RuleInterface|InputDefinitionNode $ast |
|
| 27 | * @return \Generator|mixed |
|
| 28 | */ |
|
| 29 | public function build(Readable $file, RuleInterface $ast) |
|
| 30 | { |
|
| 31 | $input = new TypeDefinition($ast->getFullName()); |
|
| 32 | $input->in($file, $ast->getOffset()); |
|
| 33 | ||
| 34 | $input->type = Type::INPUT_OBJECT; |
|
| 35 | $input->description = $ast->getDescription(); |
|
| 36 | ||
| 37 | yield from $this->loadInputFields($ast, $input); |
|
| 38 | ||
| 39 | return $input; |
|
| 40 | } |
|
| 41 | ||
| 42 | /** |
|
| 43 | * @param InputDefinitionNode $ast |
|
| 44 | * @param TypeDefinition $input |
|
| 45 | * @return \Generator |
|
| 46 | */ |
|
| 47 | protected function loadInputFields(InputDefinitionNode $ast, TypeDefinition $input): \Generator |
|
| 48 | { |
|
| 49 | $input->fields = []; |
|
| 50 | ||
| 51 | foreach ($ast->getInputFieldNodes() as $field) { |
|
| 52 | $input->fields[] = yield $field; |
|
| 53 | } |
|
| 54 | } |
|
| 55 | } |
|
| 56 | ||
| @@ 24-58 (lines=35) @@ | ||
| 21 | /** |
|
| 22 | * Class SchemaBuilder |
|
| 23 | */ |
|
| 24 | class SchemaBuilder extends DefinitionBuilder |
|
| 25 | { |
|
| 26 | /** |
|
| 27 | * @param Readable $file |
|
| 28 | * @param RuleInterface|SchemaDefinitionNode $ast |
|
| 29 | * @return \Generator|mixed |
|
| 30 | */ |
|
| 31 | public function build(Readable $file, RuleInterface $ast) |
|
| 32 | { |
|
| 33 | // TODO detach from reflection component |
|
| 34 | $schema = new TypeDefinition($ast->getFullName() ?: SchemaDefinition::DEFAULT_SCHEMA_NAME); |
|
| 35 | $schema->in($file, $ast->getOffset()); |
|
| 36 | ||
| 37 | $schema->type = Type::SCHEMA; |
|
| 38 | $schema->description = $ast->getDescription(); |
|
| 39 | ||
| 40 | yield from $this->loadSchemaFields($ast, $schema); |
|
| 41 | ||
| 42 | return $schema; |
|
| 43 | } |
|
| 44 | ||
| 45 | /** |
|
| 46 | * @param SchemaDefinitionNode $ast |
|
| 47 | * @param TypeDefinition $schema |
|
| 48 | * @return \Generator |
|
| 49 | */ |
|
| 50 | protected function loadSchemaFields(SchemaDefinitionNode $ast, TypeDefinition $schema): \Generator |
|
| 51 | { |
|
| 52 | $schema->fields = []; |
|
| 53 | ||
| 54 | foreach ($ast->getSchemaFields() as $field) { |
|
| 55 | $schema->fields[] = yield $field; |
|
| 56 | } |
|
| 57 | } |
|
| 58 | } |
|
| 59 | ||
| @@ 23-55 (lines=33) @@ | ||
| 20 | /** |
|
| 21 | * Class UnionBuilder |
|
| 22 | */ |
|
| 23 | class UnionBuilder extends DefinitionBuilder |
|
| 24 | { |
|
| 25 | /** |
|
| 26 | * @param Readable $file |
|
| 27 | * @param RuleInterface|UnionDefinitionNode $ast |
|
| 28 | * @return \Generator|mixed |
|
| 29 | */ |
|
| 30 | public function build(Readable $file, RuleInterface $ast) |
|
| 31 | { |
|
| 32 | $union = new TypeDefinition($ast->getFullName()); |
|
| 33 | $union->in($file, $ast->getOffset()); |
|
| 34 | ||
| 35 | $union->type = Type::UNION; |
|
| 36 | $union->description = $ast->getDescription(); |
|
| 37 | ||
| 38 | $this->loadUnionDefinitions($ast, $union); |
|
| 39 | ||
| 40 | return $union; |
|
| 41 | } |
|
| 42 | ||
| 43 | /** |
|
| 44 | * @param UnionDefinitionNode $ast |
|
| 45 | * @param TypeDefinition $union |
|
| 46 | */ |
|
| 47 | protected function loadUnionDefinitions(UnionDefinitionNode $ast, TypeDefinition $union): void |
|
| 48 | { |
|
| 49 | $union->definitions = []; |
|
| 50 | ||
| 51 | foreach ($ast->getUnionDefinitions() as $definition) { |
|
| 52 | $union->definitions[] = $definition; |
|
| 53 | } |
|
| 54 | } |
|
| 55 | } |
|
| 56 | ||