Skip to content

Commit f971f65

Browse files
authored
fix: make Senders lazy (#158)
1 parent 1bb7bcf commit f971f65

File tree

4 files changed

+36
-42
lines changed

4 files changed

+36
-42
lines changed

composer.json

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
"websockets",
1515
"server",
1616
"helper",
17-
"dev"
17+
"dev",
18+
"fibers",
19+
"dumper"
1820
],
1921
"authors": [
2022
{
@@ -28,17 +30,13 @@
2830
],
2931
"homepage": "https://buggregator.dev/",
3032
"funding": [
31-
{
32-
"type": "github",
33-
"url": "https://github.com/sponsors/buggregator"
34-
},
3533
{
3634
"type": "patreon",
3735
"url": "https://patreon.com/roxblnfk"
3836
},
3937
{
40-
"type": "patreon",
41-
"url": "https://patreon.com/butschster"
38+
"type": "boosty",
39+
"url": "https://boosty.to/roxblnfk"
4240
}
4341
],
4442
"require": {

composer.lock

Lines changed: 17 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Command/Run.php

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -80,17 +80,11 @@ public function getServers(Container $container): array
8080
public function createRegistry(OutputInterface $output): Sender\SenderRegistry
8181
{
8282
$registry = new Sender\SenderRegistry();
83-
$registry->register('console', Sender\ConsoleSender::create($output));
84-
$registry->register('file', new Sender\EventsToFileSender());
85-
$registry->register('file-body', new Sender\BodyToFileSender());
86-
$registry->register('mail-to-file', new Sender\MailToFileSender());
87-
$registry->register(
88-
'server',
89-
new Sender\RemoteSender(
90-
host: '127.0.0.1',
91-
port: 9099,
92-
),
93-
);
83+
$registry->register('console', static fn(): Sender => Sender\ConsoleSender::create($output));
84+
$registry->register('file', static fn(): Sender => new Sender\EventsToFileSender());
85+
$registry->register('file-body', static fn(): Sender => new Sender\BodyToFileSender());
86+
$registry->register('mail-to-file', static fn(): Sender => new Sender\MailToFileSender());
87+
$registry->register('server', static fn(): Sender => new Sender\RemoteSender(host: '127.0.0.1', port: 9099));
9488

9589
return $registry;
9690
}

src/Sender/SenderRegistry.php

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,16 @@ final class SenderRegistry
1414
/** @var array<non-empty-string, Sender> */
1515
private array $senders = [];
1616

17+
/** @var array<non-empty-string, \Closure(): Sender> */
18+
private array $factory = [];
19+
1720
/**
1821
* @param non-empty-string $name
22+
* @param callable(): Sender $factory
1923
*/
20-
public function register(string $name, Sender $sender): void
24+
public function register(string $name, callable $factory): void
2125
{
22-
$this->senders[$name] = $sender;
26+
$this->factory[$name] = $factory(...);
2327
}
2428

2529
/**
@@ -30,11 +34,9 @@ public function getSenders(array $types): array
3034
{
3135
$senders = [];
3236
foreach ($types as $type) {
33-
if (!isset($this->senders[$type])) {
34-
throw new \InvalidArgumentException(\sprintf('Unknown sender type "%s"', $type));
35-
}
36-
37-
$senders[] = $this->senders[$type];
37+
$senders[] = $this->senders[$type] ?? ($this->factory[$type] ?? throw new \InvalidArgumentException(
38+
"Unknown sender type `{$type}`.",
39+
))();
3840
}
3941

4042
return $senders;

0 commit comments

Comments
 (0)