Skip to content

Commit 21369ea

Browse files
committed
feat: implement metadata support
1 parent d3701d2 commit 21369ea

47 files changed

Lines changed: 507 additions & 171 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
declare(strict_types=1);
44

5-
namespace Constructo\Contract\Schema;
5+
namespace Constructo\Contract\Reflect;
66

7-
use Constructo\Core\Metadata\Schema\Registry\Specs;
7+
use Constructo\Support\Metadata\Schema\Registry\Specs;
88

99
interface SpecsFactory
1010
{
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Constructo\Contract\Reflect;
6+
7+
use Constructo\Support\Metadata\Schema\Registry\Types;
8+
9+
interface TypesFactory
10+
{
11+
public function make(): Types;
12+
}

src/Support/Reflective/Schema/SchemaReflector.php renamed to src/Core/Reflect/Reflector.php

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,18 @@
22

33
declare(strict_types=1);
44

5-
namespace Constructo\Support\Reflective\Schema;
5+
namespace Constructo\Core\Reflect;
66

7-
use Constructo\Core\Metadata\Schema;
8-
use Constructo\Core\Metadata\Schema\Field;
7+
use Constructo\Core\Reflect\Resolver\Field\ManagedChain;
8+
use Constructo\Core\Reflect\Resolver\Field\RequirementChain;
9+
use Constructo\Core\Reflect\Resolver\Field\TypeChain;
10+
use Constructo\Factory\SchemaFactory;
911
use Constructo\Support\Cache;
12+
use Constructo\Support\Metadata\Schema;
13+
use Constructo\Support\Metadata\Schema\Field;
14+
use Constructo\Support\Metadata\Schema\Registry\Types;
1015
use Constructo\Support\Reflective\Factory\Target;
1116
use Constructo\Support\Reflective\Notation;
12-
use Constructo\Support\Reflective\Schema\Parameter\ManagedChain;
13-
use Constructo\Support\Reflective\Schema\Parameter\Registry\Types;
14-
use Constructo\Support\Reflective\Schema\Parameter\RequirementChain;
15-
use Constructo\Support\Reflective\Schema\Parameter\TypeChain;
1617
use ReflectionException;
1718
use ReflectionParameter;
1819

@@ -23,26 +24,30 @@
2324
use function in_array;
2425
use function sprintf;
2526

26-
class SchemaReflector
27+
class Reflector
2728
{
2829
private array $currentPath = [];
2930

3031
public function __construct(
32+
protected readonly SchemaFactory $factory,
33+
protected readonly Types $types,
3134
protected readonly Cache $cache,
32-
protected readonly ?Types $types = null,
3335
protected readonly Notation $notation = Notation::SNAKE,
3436
) {
3537
}
3638

3739
/**
40+
* @template T of object
41+
* @param class-string<T> $source
3842
* @throws ReflectionException
3943
*/
40-
public function extract(string $source, Schema $schema): Schema
44+
public function reflect(string $source): Schema
4145
{
4246
$this->cache->reset();
4347
$this->currentPath = [];
4448

45-
$parameters = $this->getParametersFromCache($source);
49+
$parameters = $this->getParameters($source);
50+
$schema = $this->factory->make();
4651
$this->extractFields($parameters, $schema);
4752

4853
return $schema;
@@ -86,7 +91,7 @@ protected function extractFields(array $parameters, Schema $schema, ?Field $pare
8691
*/
8792
private function extractFieldsNestedSource(string $source, Schema $schema, Field $parent, array $path): void
8893
{
89-
$nestedParameters = $this->getParametersFromCache($source);
94+
$nestedParameters = $this->getParameters($source);
9095
if (empty($nestedParameters)) {
9196
return;
9297
}
@@ -101,7 +106,10 @@ private function wouldCauseCircularReference(string $source): bool
101106
return in_array($source, $this->currentPath, true);
102107
}
103108

104-
private function getParametersFromCache(string $source): array
109+
/**
110+
* @throws ReflectionException
111+
*/
112+
private function getParameters(string $source): array
105113
{
106114
$cacheKey = sprintf("parameters:%s", $source);
107115

@@ -114,13 +122,12 @@ private function getParametersFromCache(string $source): array
114122
return $parameters;
115123
}
116124

125+
/**
126+
* @throws ReflectionException
127+
*/
117128
protected function extractParameters(string $source): array
118129
{
119-
try {
120-
return Target::createFrom($source)
121-
->getReflectionParameters();
122-
} catch (ReflectionException) {
123-
return [];
124-
}
130+
return Target::createFrom($source)
131+
->getReflectionParameters();
125132
}
126133
}

src/Support/Reflective/Schema/Parameter/Chain.php renamed to src/Core/Reflect/Resolver/Field/Chain.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
declare(strict_types=1);
44

5-
namespace Constructo\Support\Reflective\Schema\Parameter;
5+
namespace Constructo\Core\Reflect\Resolver\Field;
66

7-
use Constructo\Core\Metadata\Schema\Field;
8-
use Constructo\Support\Reflective\Schema\Parameter\Registry\Types;
7+
use Constructo\Support\Metadata\Schema\Field;
8+
use Constructo\Support\Metadata\Schema\Registry\Types;
99
use ReflectionParameter;
1010

1111
abstract class Chain

src/Support/Reflective/Schema/Parameter/ManagedChain.php renamed to src/Core/Reflect/Resolver/Field/ManagedChain.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
declare(strict_types=1);
44

5-
namespace Constructo\Support\Reflective\Schema\Parameter;
5+
namespace Constructo\Core\Reflect\Resolver\Field;
66

7-
use Constructo\Core\Metadata\Schema\Field;
7+
use Constructo\Support\Metadata\Schema\Field;
88
use Constructo\Support\Reflective\Attribute\Managed;
99
use ReflectionParameter;
1010

src/Support/Reflective/Schema/Parameter/RequirementChain.php renamed to src/Core/Reflect/Resolver/Field/RequirementChain.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
declare(strict_types=1);
44

5-
namespace Constructo\Support\Reflective\Schema\Parameter;
5+
namespace Constructo\Core\Reflect\Resolver\Field;
66

7-
use Constructo\Core\Metadata\Schema\Field;
8-
use Constructo\Core\Metadata\Schema\Registry\Specs;
7+
use Constructo\Support\Metadata\Schema\Field;
8+
use Constructo\Support\Metadata\Schema\Registry\Specs;
99
use ReflectionParameter;
1010

1111
class RequirementChain extends Chain

src/Support/Reflective/Schema/Parameter/TypeChain.php renamed to src/Core/Reflect/Resolver/Field/TypeChain.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
declare(strict_types=1);
44

5-
namespace Constructo\Support\Reflective\Schema\Parameter;
5+
namespace Constructo\Core\Reflect\Resolver\Field;
66

7-
use Constructo\Core\Metadata\Schema\Field;
8-
use Constructo\Support\Reflective\Schema\Parameter\Field\BuiltinNamedTypeHandler;
9-
use Constructo\Support\Reflective\Schema\Parameter\Field\DefineAttributeTypeHandler;
10-
use Constructo\Support\Reflective\Schema\Parameter\Field\DependencyTypeHandler;
11-
use Constructo\Support\Reflective\Schema\Parameter\Field\EnumNamedTypeHandler;
12-
use Constructo\Support\Reflective\Schema\Parameter\Field\PatternAttributeTypeHandler;
7+
use Constructo\Core\Reflect\Resolver\Type\BuiltinNamedTypeHandler;
8+
use Constructo\Core\Reflect\Resolver\Type\DefineAttributeTypeHandler;
9+
use Constructo\Core\Reflect\Resolver\Type\DependencyTypeHandler;
10+
use Constructo\Core\Reflect\Resolver\Type\EnumNamedTypeHandler;
11+
use Constructo\Core\Reflect\Resolver\Type\PatternAttributeTypeHandler;
12+
use Constructo\Support\Metadata\Schema\Field;
1313
use ReflectionParameter;
1414

1515
class TypeChain extends Chain

src/Support/Reflective/Schema/Parameter/Field/BuiltinNamedTypeHandler.php renamed to src/Core/Reflect/Resolver/Type/BuiltinNamedTypeHandler.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
declare(strict_types=1);
44

5-
namespace Constructo\Support\Reflective\Schema\Parameter\Field;
5+
namespace Constructo\Core\Reflect\Resolver\Type;
66

7-
use Constructo\Core\Metadata\Schema\Field;
8-
use Constructo\Support\Reflective\Schema\Parameter\Field\Contract\NamedTypeHandler;
9-
use Constructo\Support\Reflective\Schema\Parameter\Field\Contract\NamedTypeResolution;
7+
use Constructo\Core\Reflect\Resolver\Type\Contract\NamedTypeHandler;
8+
use Constructo\Core\Reflect\Resolver\Type\Contract\NamedTypeResolution;
9+
use Constructo\Support\Metadata\Schema\Field;
1010
use ReflectionNamedType;
1111

1212
use function is_string;

src/Support/Reflective/Schema/Parameter/Field/Contract/NamedTypeHandler.php renamed to src/Core/Reflect/Resolver/Type/Contract/NamedTypeHandler.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
declare(strict_types=1);
44

5-
namespace Constructo\Support\Reflective\Schema\Parameter\Field\Contract;
5+
namespace Constructo\Core\Reflect\Resolver\Type\Contract;
66

7-
use Constructo\Core\Metadata\Schema\Field;
7+
use Constructo\Support\Metadata\Schema\Field;
88
use ReflectionNamedType;
99
use ReflectionParameter;
1010

src/Support/Reflective/Schema/Parameter/Field/Contract/NamedTypeResolution.php renamed to src/Core/Reflect/Resolver/Type/Contract/NamedTypeResolution.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace Constructo\Support\Reflective\Schema\Parameter\Field\Contract;
5+
namespace Constructo\Core\Reflect\Resolver\Type\Contract;
66

77
enum NamedTypeResolution
88
{

0 commit comments

Comments
 (0)