Skip to content

Commit b03a19f

Browse files
committed
Extract builtTypes in memory to registry
1 parent 02f14a5 commit b03a19f

10 files changed

+65
-19
lines changed

src/SchemaBuilderFactory.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Jerowork\GraphqlAttributeSchema;
66

77
use Jerowork\GraphqlAttributeSchema\Parser\Node\Node;
8+
use Jerowork\GraphqlAttributeSchema\TypeBuilder\BuiltTypesRegistry;
89
use Jerowork\GraphqlAttributeSchema\TypeBuilder\Object\CustomScalarObjectTypeBuilder;
910
use Jerowork\GraphqlAttributeSchema\TypeBuilder\Object\EnumObjectTypeBuilder;
1011
use Jerowork\GraphqlAttributeSchema\TypeBuilder\Object\InputTypeObjectTypeBuilder;
@@ -45,7 +46,10 @@ public static function create(
4546

4647
return new SchemaBuilder(
4748
new RootTypeBuilder(
48-
new TypeBuilder($objectTypeBuilders),
49+
new TypeBuilder(
50+
new BuiltTypesRegistry(),
51+
$objectTypeBuilders,
52+
),
4953
new RootTypeResolver(
5054
$container,
5155
[
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Jerowork\GraphqlAttributeSchema\TypeBuilder;
6+
7+
use GraphQL\Type\Definition\Type;
8+
9+
final class BuiltTypesRegistry
10+
{
11+
/**
12+
* @var array<string, Type>
13+
*/
14+
private array $builtTypes = [];
15+
16+
public function hasType(string $key): bool
17+
{
18+
return array_key_exists($key, $this->builtTypes);
19+
}
20+
21+
/**
22+
* @throws BuildException
23+
*/
24+
public function getType(string $key): Type
25+
{
26+
if (!$this->hasType($key)) {
27+
throw BuildException::logicError(sprintf('Type with key %s not found in registry', $key));
28+
}
29+
30+
return $this->builtTypes[$key];
31+
}
32+
33+
public function addType(string $key, Type $type): void
34+
{
35+
$this->builtTypes[$key] = $type;
36+
}
37+
}

src/TypeBuilder/TypeBuilder.php

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,14 @@
1414
use Jerowork\GraphqlAttributeSchema\Parser\Node\Type\ScalarNodeType;
1515
use Jerowork\GraphqlAttributeSchema\TypeBuilder\Object\ObjectTypeBuilder;
1616

17-
final class TypeBuilder
17+
final readonly class TypeBuilder
1818
{
19-
/**
20-
* @var array<class-string, WebonyxType>
21-
*/
22-
private array $builtTypes = [];
23-
2419
/**
2520
* @param iterable<ObjectTypeBuilder<Node>> $objectTypeBuilders
2621
*/
2722
public function __construct(
28-
private readonly iterable $objectTypeBuilders,
23+
private BuiltTypesRegistry $builtTypesRegistry,
24+
private iterable $objectTypeBuilders,
2925
) {}
3026

3127
/**
@@ -95,18 +91,20 @@ private function buildObject(string $className, Ast $ast): WebonyxType
9591
$nodeClassName = $node->getClassName();
9692
}
9793

98-
if (array_key_exists($nodeClassName, $this->builtTypes)) {
99-
return $this->builtTypes[$nodeClassName];
94+
if ($this->builtTypesRegistry->hasType($nodeClassName)) {
95+
return $this->builtTypesRegistry->getType($nodeClassName);
10096
}
10197

10298
foreach ($this->objectTypeBuilders as $objectTypeBuilder) {
10399
if (!$objectTypeBuilder->supports($node)) {
104100
continue;
105101
}
106102

107-
$this->builtTypes[$nodeClassName] = $objectTypeBuilder->build($node, $this, $ast);
103+
$builtType = $objectTypeBuilder->build($node, $this, $ast);
104+
105+
$this->builtTypesRegistry->addType($nodeClassName, $builtType);
108106

109-
return $this->builtTypes[$nodeClassName];
107+
return $builtType;
110108
}
111109

112110
throw BuildException::logicError(sprintf('Invalid object class %s', $nodeClassName));

tests/TypeBuilder/Object/BuildArgsTraitTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Jerowork\GraphqlAttributeSchema\Parser\Node\Child\FieldNode;
1111
use Jerowork\GraphqlAttributeSchema\Parser\Node\Child\FieldNodeType;
1212
use Jerowork\GraphqlAttributeSchema\Parser\Node\Type\ScalarNodeType;
13+
use Jerowork\GraphqlAttributeSchema\TypeBuilder\BuiltTypesRegistry;
1314
use Jerowork\GraphqlAttributeSchema\TypeBuilder\TypeBuilder;
1415
use PHPUnit\Framework\TestCase;
1516
use Jerowork\GraphqlAttributeSchema\TypeBuilder\Object\BuildArgsTrait;
@@ -51,7 +52,7 @@ public function itShouldBuildArgs(): void
5152
'name',
5253
null,
5354
),
54-
new TypeBuilder([]),
55+
new TypeBuilder(new BuiltTypesRegistry(), []),
5556
new Ast(),
5657
);
5758

tests/TypeBuilder/Object/CustomScalarObjectTypeBuilderTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Jerowork\GraphqlAttributeSchema\Parser\Node\Class\TypeNode;
1111
use Jerowork\GraphqlAttributeSchema\Test\Doubles\Scalar\TestScalarType;
1212
use Jerowork\GraphqlAttributeSchema\Test\Doubles\Type\TestType;
13+
use Jerowork\GraphqlAttributeSchema\TypeBuilder\BuiltTypesRegistry;
1314
use Jerowork\GraphqlAttributeSchema\TypeBuilder\TypeBuilder;
1415
use PHPUnit\Framework\TestCase;
1516
use Jerowork\GraphqlAttributeSchema\TypeBuilder\Object\CustomScalarObjectTypeBuilder;
@@ -60,7 +61,7 @@ public function itShouldBuildCustomScalarType(): void
6061
null,
6162
DateTime::class,
6263
),
63-
new TypeBuilder([]),
64+
new TypeBuilder(new BuiltTypesRegistry(), []),
6465
new Ast(),
6566
);
6667

tests/TypeBuilder/Object/EnumObjectTypeBuilderTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Jerowork\GraphqlAttributeSchema\Parser\Node\Class\TypeNode;
1212
use Jerowork\GraphqlAttributeSchema\Test\Doubles\Enum\TestEnumType;
1313
use Jerowork\GraphqlAttributeSchema\Test\Doubles\Type\TestType;
14+
use Jerowork\GraphqlAttributeSchema\TypeBuilder\BuiltTypesRegistry;
1415
use Jerowork\GraphqlAttributeSchema\TypeBuilder\TypeBuilder;
1516
use PHPUnit\Framework\Attributes\Test;
1617
use PHPUnit\Framework\TestCase;
@@ -63,7 +64,7 @@ public function itShouldBuildEnumType(): void
6364
new EnumValueNode('closed', 'Case Closed', null),
6465
],
6566
),
66-
new TypeBuilder([]),
67+
new TypeBuilder(new BuiltTypesRegistry(), []),
6768
new Ast(),
6869
);
6970

tests/TypeBuilder/Object/InputTypeObjectTypeBuilderTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Jerowork\GraphqlAttributeSchema\Parser\Node\Type\ScalarNodeType;
1616
use Jerowork\GraphqlAttributeSchema\Test\Doubles\Enum\TestEnumType;
1717
use Jerowork\GraphqlAttributeSchema\Test\Doubles\Type\TestType;
18+
use Jerowork\GraphqlAttributeSchema\TypeBuilder\BuiltTypesRegistry;
1819
use Jerowork\GraphqlAttributeSchema\TypeBuilder\Object\InputTypeObjectTypeBuilder;
1920
use Jerowork\GraphqlAttributeSchema\TypeBuilder\TypeBuilder;
2021
use PHPUnit\Framework\TestCase;
@@ -82,7 +83,7 @@ public function itShouldBuildType(): void
8283
),
8384
],
8485
),
85-
new TypeBuilder([]),
86+
new TypeBuilder(new BuiltTypesRegistry(), []),
8687
new Ast(),
8788
);
8889

tests/TypeBuilder/Object/TypeObjectTypeBuilderTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Jerowork\GraphqlAttributeSchema\Test\Doubles\Container\TestContainer;
1717
use Jerowork\GraphqlAttributeSchema\Test\Doubles\Enum\TestEnumType;
1818
use Jerowork\GraphqlAttributeSchema\Test\Doubles\Type\TestType;
19+
use Jerowork\GraphqlAttributeSchema\TypeBuilder\BuiltTypesRegistry;
1920
use Jerowork\GraphqlAttributeSchema\TypeBuilder\TypeBuilder;
2021
use Jerowork\GraphqlAttributeSchema\TypeResolver\Child\Output\EnumNodeOutputChildResolver;
2122
use Jerowork\GraphqlAttributeSchema\TypeResolver\Child\Output\ScalarTypeOutputChildResolver;
@@ -94,7 +95,7 @@ public function itShouldBuildType(): void
9495
),
9596
],
9697
),
97-
new TypeBuilder([]),
98+
new TypeBuilder(new BuiltTypesRegistry(), []),
9899
new Ast(),
99100
);
100101

tests/TypeBuilder/RootTypeBuilderTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Jerowork\GraphqlAttributeSchema\Parser\Node\Type\ScalarNodeType;
1212
use Jerowork\GraphqlAttributeSchema\Test\Doubles\Container\TestContainer;
1313
use Jerowork\GraphqlAttributeSchema\Test\Doubles\Mutation\TestMutation;
14+
use Jerowork\GraphqlAttributeSchema\TypeBuilder\BuiltTypesRegistry;
1415
use Jerowork\GraphqlAttributeSchema\TypeBuilder\RootTypeBuilder;
1516
use Jerowork\GraphqlAttributeSchema\TypeBuilder\TypeBuilder;
1617
use Jerowork\GraphqlAttributeSchema\TypeResolver\Child\Input\CustomScalarNodeInputChildResolver;
@@ -36,7 +37,7 @@ protected function setUp(): void
3637
parent::setUp();
3738

3839
$this->builder = new RootTypeBuilder(
39-
new TypeBuilder([]),
40+
new TypeBuilder(new BuiltTypesRegistry(), []),
4041
new RootTypeResolver(
4142
$this->container = new TestContainer(),
4243
[

tests/TypeBuilder/TypeBuilderTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Jerowork\GraphqlAttributeSchema\Test\Doubles\Container\TestContainer;
1515
use Jerowork\GraphqlAttributeSchema\Test\Doubles\Enum\TestEnumType;
1616
use Jerowork\GraphqlAttributeSchema\TypeBuilder\BuildException;
17+
use Jerowork\GraphqlAttributeSchema\TypeBuilder\BuiltTypesRegistry;
1718
use Jerowork\GraphqlAttributeSchema\TypeBuilder\Object\EnumObjectTypeBuilder;
1819
use Jerowork\GraphqlAttributeSchema\TypeBuilder\Object\InputTypeObjectTypeBuilder;
1920
use Jerowork\GraphqlAttributeSchema\TypeBuilder\Object\ObjectTypeBuilder;
@@ -52,7 +53,7 @@ protected function setUp(): void
5253
)),
5354
];
5455

55-
$this->builder = new TypeBuilder($objectTypeBuilders);
56+
$this->builder = new TypeBuilder(new BuiltTypesRegistry(), $objectTypeBuilders);
5657
}
5758

5859
#[Test]

0 commit comments

Comments
 (0)