Skip to content

Commit f42ae44

Browse files
committed
Services now returns Lazy Ghost objects instead of closures. Metadata moved to its own wrapper class
1 parent 7738edf commit f42ae44

File tree

15 files changed

+153
-136
lines changed

15 files changed

+153
-136
lines changed

src/Event/EntityDefinition.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace ApiSkeletons\Doctrine\ORM\GraphQL\Event;
66

7-
use ArrayObject;
7+
use ApiSkeletons\Doctrine\ORM\GraphQL\Type\Entity\Definition;
88
use League\Event\HasEventName;
99
use Override;
1010

@@ -14,9 +14,8 @@
1414
class EntityDefinition implements
1515
HasEventName
1616
{
17-
/** @param ArrayObject $definition<'description'|'fields'|'name'|'resolveField', mixed> */
1817
public function __construct(
19-
protected readonly ArrayObject $definition,
18+
protected readonly Definition $definition,
2019
protected readonly string $eventName,
2120
) {
2221
}
@@ -27,7 +26,7 @@ public function eventName(): string
2726
return $this->eventName;
2827
}
2928

30-
public function getDefinition(): ArrayObject
29+
public function getDefinition(): Definition
3130
{
3231
return $this->definition;
3332
}

src/Event/Metadata.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace ApiSkeletons\Doctrine\ORM\GraphQL\Event;
66

7-
use ArrayObject;
7+
use ApiSkeletons\Doctrine\ORM\GraphQL\Metadata as MetadataObject;
88
use League\Event\HasEventName;
99
use Override;
1010

@@ -15,7 +15,7 @@ class Metadata implements
1515
HasEventName
1616
{
1717
public function __construct(
18-
protected readonly ArrayObject $metadata,
18+
protected readonly MetadataObject $metadata,
1919
protected readonly string $eventName,
2020
) {
2121
}
@@ -26,7 +26,7 @@ public function eventName(): string
2626
return $this->eventName;
2727
}
2828

29-
public function getMetadata(): ArrayObject
29+
public function getMetadata(): MetadataObject
3030
{
3131
return $this->metadata;
3232
}

src/Metadata.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace ApiSkeletons\Doctrine\ORM\GraphQL;
6+
7+
use ArrayObject;
8+
9+
/**
10+
* This exists to wrap the metadata information
11+
*
12+
* @extends ArrayObject<string, mixed>
13+
*/
14+
class Metadata extends ArrayObject
15+
{
16+
}

src/Metadata/GlobalEnable.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
namespace ApiSkeletons\Doctrine\ORM\GraphQL\Metadata;
66

77
use ApiSkeletons\Doctrine\ORM\GraphQL\Config;
8-
use ApiSkeletons\Doctrine\ORM\GraphQL\Event\Metadata;
8+
use ApiSkeletons\Doctrine\ORM\GraphQL\Event\Metadata as MetadataEvent;
99
use ApiSkeletons\Doctrine\ORM\GraphQL\Hydrator\Strategy;
10+
use ApiSkeletons\Doctrine\ORM\GraphQL\Metadata;
1011
use ApiSkeletons\Doctrine\ORM\GraphQL\Metadata\Common\MetadataFactory;
11-
use ArrayObject;
1212
use Doctrine\ORM\EntityManager;
1313
use League\Event\EventDispatcher;
1414
use Override;
@@ -20,18 +20,18 @@
2020
*/
2121
final class GlobalEnable extends MetadataFactory
2222
{
23-
private ArrayObject $metadata;
23+
private Metadata $metadata;
2424

2525
public function __construct(
2626
protected readonly EntityManager $entityManager,
2727
protected readonly Config $config,
2828
protected readonly EventDispatcher $eventDispatcher,
2929
) {
30-
$this->metadata = new ArrayObject();
30+
$this->metadata = new Metadata();
3131
}
3232

3333
/** @param class-string[] $entityClasses */
34-
public function __invoke(array $entityClasses): ArrayObject
34+
public function getMetadata(array $entityClasses): Metadata
3535
{
3636
foreach ($entityClasses as $entityClass) {
3737
// Get extract by value or reference
@@ -53,7 +53,7 @@ public function __invoke(array $entityClasses): ArrayObject
5353
}
5454

5555
$this->eventDispatcher->dispatch(
56-
new Metadata($this->metadata, 'metadata.build'),
56+
new MetadataEvent($this->metadata, 'metadata.build'),
5757
);
5858

5959
return $this->metadata;

src/Metadata/MetadataFactory.php

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,26 @@
66

77
use ApiSkeletons\Doctrine\ORM\GraphQL\Attribute;
88
use ApiSkeletons\Doctrine\ORM\GraphQL\Config;
9-
use ApiSkeletons\Doctrine\ORM\GraphQL\Event\Metadata;
9+
use ApiSkeletons\Doctrine\ORM\GraphQL\Event\Metadata as MetadataEvent;
1010
use ApiSkeletons\Doctrine\ORM\GraphQL\Filter\Filters;
1111
use ApiSkeletons\Doctrine\ORM\GraphQL\Hydrator\Strategy;
12+
use ApiSkeletons\Doctrine\ORM\GraphQL\Metadata;
1213
use ApiSkeletons\Doctrine\ORM\GraphQL\Metadata\Common\MetadataFactory as CommonMetadataFactory;
13-
use ArrayObject;
1414
use Doctrine\ORM\EntityManager;
1515
use Doctrine\ORM\Mapping\ClassMetadata;
1616
use League\Event\EventDispatcher;
1717
use Override;
1818
use ReflectionClass;
1919

2020
use function assert;
21-
use function count;
2221

2322
/**
2423
* Build metadata for entities
2524
*/
2625
class MetadataFactory extends CommonMetadataFactory
2726
{
2827
public function __construct(
29-
protected ArrayObject $metadata,
28+
protected Metadata $metadata,
3029
protected readonly EntityManager $entityManager,
3130
protected readonly Config $config,
3231
protected readonly GlobalEnable $globalEnable,
@@ -37,9 +36,9 @@ public function __construct(
3736
/**
3837
* Build metadata for all entities and return it
3938
*/
40-
public function __invoke(): ArrayObject
39+
public function getMetadata(): Metadata
4140
{
42-
if (count($this->metadata)) {
41+
if ($this->metadata->count()) {
4342
return $this->metadata;
4443
}
4544

@@ -51,7 +50,7 @@ public function __invoke(): ArrayObject
5150

5251
// If global enable is set, use the GlobalEnable class to build metadata
5352
if ($this->config->getGlobalEnable()) {
54-
$this->metadata = ($this->globalEnable)($entityClasses);
53+
$this->metadata = $this->globalEnable->getMetadata($entityClasses);
5554

5655
return $this->metadata;
5756
}
@@ -71,7 +70,7 @@ public function __invoke(): ArrayObject
7170

7271
// Fire the metadata.build event
7372
$this->eventDispatcher->dispatch(
74-
new Metadata($this->metadata, 'metadata.build'),
73+
new MetadataEvent($this->metadata, 'metadata.build'),
7574
);
7675

7776
return $this->metadata;

src/Resolve/ResolveCollectionFactory.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
use ApiSkeletons\Doctrine\ORM\GraphQL\Config;
88
use ApiSkeletons\Doctrine\ORM\GraphQL\Event\Criteria as CriteriaEvent;
99
use ApiSkeletons\Doctrine\ORM\GraphQL\Filter\Filters;
10+
use ApiSkeletons\Doctrine\ORM\GraphQL\Metadata;
1011
use ApiSkeletons\Doctrine\ORM\GraphQL\Type\Entity\Entity;
1112
use ApiSkeletons\Doctrine\ORM\GraphQL\Type\Entity\EntityTypeContainer;
1213
use ApiSkeletons\Doctrine\ORM\GraphQL\Type\TypeContainer;
13-
use ArrayObject;
1414
use Closure;
1515
use Doctrine\Common\Collections\Collection;
1616
use Doctrine\Common\Collections\Criteria;
@@ -38,7 +38,7 @@ public function __construct(
3838
protected readonly TypeContainer $typeContainer,
3939
protected readonly EntityTypeContainer $entityTypeContainer,
4040
protected readonly EventDispatcher $eventDispatcher,
41-
protected readonly ArrayObject $metadata,
41+
protected readonly Metadata $metadata,
4242
) {
4343
}
4444

src/Resolve/ResolveEntityFactory.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
use ApiSkeletons\Doctrine\ORM\GraphQL\Config;
88
use ApiSkeletons\Doctrine\ORM\GraphQL\Event\QueryBuilder as QueryBuilderEvent;
99
use ApiSkeletons\Doctrine\ORM\GraphQL\Filter\QueryBuilder as QueryBuilderFilter;
10+
use ApiSkeletons\Doctrine\ORM\GraphQL\Metadata;
1011
use ApiSkeletons\Doctrine\ORM\GraphQL\Type\Entity\Entity;
11-
use ArrayObject;
1212
use Closure;
1313
use Doctrine\ORM\EntityManager;
1414
use Doctrine\ORM\QueryBuilder;
@@ -28,7 +28,7 @@ public function __construct(
2828
protected readonly Config $config,
2929
protected readonly EntityManager $entityManager,
3030
protected readonly EventDispatcher $eventDispatcher,
31-
protected readonly ArrayObject $metadata,
31+
protected readonly Metadata $metadata,
3232
) {
3333
}
3434

0 commit comments

Comments
 (0)