|
23 | 23 | namespace PackageFactory\ComponentEngine\Target\Php\Transpiler\TypeReference; |
24 | 24 |
|
25 | 25 | use PackageFactory\ComponentEngine\Parser\Ast\TypeReferenceNode; |
| 26 | +use PackageFactory\ComponentEngine\TypeSystem\ScopeInterface; |
| 27 | +use PackageFactory\ComponentEngine\TypeSystem\Type\BooleanType\BooleanType; |
| 28 | +use PackageFactory\ComponentEngine\TypeSystem\Type\ComponentType\ComponentType; |
| 29 | +use PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumType; |
| 30 | +use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; |
| 31 | +use PackageFactory\ComponentEngine\TypeSystem\Type\SlotType\SlotType; |
| 32 | +use PackageFactory\ComponentEngine\TypeSystem\Type\StringType\StringType; |
| 33 | +use PackageFactory\ComponentEngine\TypeSystem\Type\StructType\StructType; |
26 | 34 |
|
27 | 35 | final class TypeReferenceTranspiler |
28 | 36 | { |
| 37 | + public function __construct( |
| 38 | + private readonly ScopeInterface $scope, |
| 39 | + private readonly TypeReferenceStrategyInterface $strategy |
| 40 | + ) { |
| 41 | + } |
| 42 | + |
29 | 43 | public function transpile(TypeReferenceNode $typeReferenceNode): string |
30 | 44 | { |
31 | | - return match ($typeReferenceNode->name) { |
32 | | - 'number' => 'int|float', |
33 | | - 'string' => 'string', |
34 | | - 'boolean' => 'bool', |
35 | | - default => $typeReferenceNode->name |
| 45 | + $type = $this->scope->resolveTypeReference($typeReferenceNode); |
| 46 | + |
| 47 | + return match ($type::class) { |
| 48 | + NumberType::class => 'int|float', |
| 49 | + StringType::class => 'string', |
| 50 | + BooleanType::class => 'bool', |
| 51 | + SlotType::class => $this->strategy->getPhpTypeReferenceForSlotType($type, $typeReferenceNode), |
| 52 | + ComponentType::class => $this->strategy->getPhpTypeReferenceForComponentType($type, $typeReferenceNode), |
| 53 | + EnumType::class => $this->strategy->getPhpTypeReferenceForEnumType($type, $typeReferenceNode), |
| 54 | + StructType::class => $this->strategy->getPhpTypeReferenceForStructType($type, $typeReferenceNode), |
| 55 | + default => $this->strategy->getPhpTypeReferenceForCustomType($type, $typeReferenceNode) |
36 | 56 | }; |
37 | 57 | } |
38 | 58 | } |
0 commit comments