diff --git a/composer.json b/composer.json index 1005ce0..663c921 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,9 @@ "websockets", "server", "helper", - "dev" + "dev", + "fibers", + "dumper" ], "authors": [ { @@ -28,17 +30,13 @@ ], "homepage": "https://buggregator.dev/", "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/buggregator" - }, { "type": "patreon", "url": "https://patreon.com/roxblnfk" }, { - "type": "patreon", - "url": "https://patreon.com/butschster" + "type": "boosty", + "url": "https://boosty.to/roxblnfk" } ], "require": { diff --git a/composer.lock b/composer.lock index 027b1b6..56eb940 100644 --- a/composer.lock +++ b/composer.lock @@ -2301,16 +2301,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.68.0", + "version": "v3.68.1", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "73f78d8b2b34a0dd65fedb434a602ee4c2c8ad4c" + "reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/73f78d8b2b34a0dd65fedb434a602ee4c2c8ad4c", - "reference": "73f78d8b2b34a0dd65fedb434a602ee4c2c8ad4c", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b9db2b2ea3cdba7201067acee46f984ef2397cff", + "reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff", "shasum": "" }, "require": { @@ -2392,7 +2392,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.68.0" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.68.1" }, "funding": [ { @@ -2400,7 +2400,7 @@ "type": "github" } ], - "time": "2025-01-13T17:01:01+00:00" + "time": "2025-01-17T09:20:36+00:00" }, { "name": "google/protobuf", @@ -3408,16 +3408,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.12.15", + "version": "1.12.16", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "c91d4e8bc056f46cf653656e6f71004b254574d1" + "reference": "e0bb5cb78545aae631220735aa706eac633a6be9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c91d4e8bc056f46cf653656e6f71004b254574d1", - "reference": "c91d4e8bc056f46cf653656e6f71004b254574d1", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e0bb5cb78545aae631220735aa706eac633a6be9", + "reference": "e0bb5cb78545aae631220735aa706eac633a6be9", "shasum": "" }, "require": { @@ -3462,7 +3462,7 @@ "type": "github" } ], - "time": "2025-01-05T16:40:22+00:00" + "time": "2025-01-21T14:50:05+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", @@ -3565,16 +3565,16 @@ }, { "name": "phpstan/phpstan-strict-rules", - "version": "1.6.1", + "version": "1.6.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-strict-rules.git", - "reference": "daeec748b53de80a97498462513066834ec28f8b" + "reference": "b564ca479e7e735f750aaac4935af965572a7845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/daeec748b53de80a97498462513066834ec28f8b", - "reference": "daeec748b53de80a97498462513066834ec28f8b", + "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/b564ca479e7e735f750aaac4935af965572a7845", + "reference": "b564ca479e7e735f750aaac4935af965572a7845", "shasum": "" }, "require": { @@ -3608,9 +3608,9 @@ "description": "Extra strict and opinionated rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-strict-rules/issues", - "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.6.1" + "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.6.2" }, - "time": "2024-09-20T14:04:44+00:00" + "time": "2025-01-19T13:02:24+00:00" }, { "name": "phpunit/php-code-coverage", diff --git a/src/Command/Run.php b/src/Command/Run.php index 92c4d2e..033be35 100644 --- a/src/Command/Run.php +++ b/src/Command/Run.php @@ -80,17 +80,11 @@ public function getServers(Container $container): array public function createRegistry(OutputInterface $output): Sender\SenderRegistry { $registry = new Sender\SenderRegistry(); - $registry->register('console', Sender\ConsoleSender::create($output)); - $registry->register('file', new Sender\EventsToFileSender()); - $registry->register('file-body', new Sender\BodyToFileSender()); - $registry->register('mail-to-file', new Sender\MailToFileSender()); - $registry->register( - 'server', - new Sender\RemoteSender( - host: '127.0.0.1', - port: 9099, - ), - ); + $registry->register('console', static fn(): Sender => Sender\ConsoleSender::create($output)); + $registry->register('file', static fn(): Sender => new Sender\EventsToFileSender()); + $registry->register('file-body', static fn(): Sender => new Sender\BodyToFileSender()); + $registry->register('mail-to-file', static fn(): Sender => new Sender\MailToFileSender()); + $registry->register('server', static fn(): Sender => new Sender\RemoteSender(host: '127.0.0.1', port: 9099)); return $registry; } diff --git a/src/Sender/SenderRegistry.php b/src/Sender/SenderRegistry.php index 34d6218..7c60997 100644 --- a/src/Sender/SenderRegistry.php +++ b/src/Sender/SenderRegistry.php @@ -14,12 +14,16 @@ final class SenderRegistry /** @var array */ private array $senders = []; + /** @var array */ + private array $factory = []; + /** * @param non-empty-string $name + * @param callable(): Sender $factory */ - public function register(string $name, Sender $sender): void + public function register(string $name, callable $factory): void { - $this->senders[$name] = $sender; + $this->factory[$name] = $factory(...); } /** @@ -30,11 +34,9 @@ public function getSenders(array $types): array { $senders = []; foreach ($types as $type) { - if (!isset($this->senders[$type])) { - throw new \InvalidArgumentException(\sprintf('Unknown sender type "%s"', $type)); - } - - $senders[] = $this->senders[$type]; + $senders[] = $this->senders[$type] ?? ($this->factory[$type] ?? throw new \InvalidArgumentException( + "Unknown sender type `{$type}`.", + ))(); } return $senders;