diff --git a/CHANGELOG.md b/CHANGELOG.md index a6906d4..d7452ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## 2.3.0 - 2024-08-01 + +### Added + +- `Innmind\DI\Service` can now be used everywhere a service can be referenced + +### Fixed + +- `Innmind\Framework\Http\To` no longer raise Psalm errors when used as argument to `Application::route()` + ## 2.2.0 - 2024-03-24 ### Added diff --git a/src/Cli/Command/Defer.php b/src/Cli/Command/Defer.php index 44e1243..ff32142 100644 --- a/src/Cli/Command/Defer.php +++ b/src/Cli/Command/Defer.php @@ -7,14 +7,17 @@ Command, Console, }; -use Innmind\DI\Container; +use Innmind\DI\{ + Container, + Service, +}; /** * @internal */ final class Defer implements Command { - private string $service; + private string|Service $service; private Container $locate; /** @var callable(Command): Command */ private $map; @@ -24,7 +27,7 @@ final class Defer implements Command * @param callable(Command): Command $map */ public function __construct( - string $service, + string|Service $service, Container $locate, callable $map, ) { diff --git a/src/Http/Service.php b/src/Http/Service.php index b29716c..f974f19 100644 --- a/src/Http/Service.php +++ b/src/Http/Service.php @@ -7,15 +7,18 @@ ServerRequest, Response, }; -use Innmind\DI\Container; +use Innmind\DI\{ + Container, + Service as Ref, +}; use Innmind\Router\Route\Variables; final class Service { private Container $container; - private string $service; + private string|Ref $service; - private function __construct(Container $container, string $service) + private function __construct(Container $container, string|Ref $service) { $this->container = $container; $this->service = $service; @@ -30,7 +33,7 @@ public function __invoke(ServerRequest $request, Variables $variables): Response return ($this->container)($this->service)($request, $variables); } - public static function of(Container $container, string $service): self + public static function of(Container $container, string|Ref $service): self { return new self($container, $service); } diff --git a/src/Http/To.php b/src/Http/To.php index 012f9cb..888b15a 100644 --- a/src/Http/To.php +++ b/src/Http/To.php @@ -3,18 +3,23 @@ namespace Innmind\Framework\Http; +use Innmind\Framework\Environment; use Innmind\Http\{ ServerRequest, Response, }; -use Innmind\DI\Container; +use Innmind\DI\{ + Container, + Service, +}; +use Innmind\OperatingSystem\OperatingSystem; use Innmind\Router\Route\Variables; final class To { - private string $service; + private string|Service $service; - private function __construct(string $service) + private function __construct(string|Service $service) { $this->service = $service; } @@ -23,6 +28,8 @@ public function __invoke( ServerRequest $request, Variables $variables, Container $container, + OperatingSystem $os = null, // these arguments are not used, there here + Environment $env = null, // to satisfy Psalm when used in Framework::route() ): Response { /** * @psalm-suppress InvalidFunctionCall If it fails here then the service doesn't conform to the signature callable(ServerRequest, Variables): Response @@ -31,7 +38,7 @@ public function __invoke( return $container($this->service)($request, $variables); } - public static function service(string $service): self + public static function service(string|Service $service): self { return new self($service); }