Skip to content

Commit d2e8a4e

Browse files
authored
feat: middleware callables (#672)
1 parent 0f97964 commit d2e8a4e

26 files changed

+144
-61
lines changed

src/Tempest/Auth/src/AuthorizerMiddleware.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Tempest\Container\Container;
88
use Tempest\Http\HttpMiddleware;
9+
use Tempest\Http\HttpMiddlewareCallable;
910
use Tempest\Http\MatchedRoute;
1011
use Tempest\Http\Request;
1112
use Tempest\Http\Response;
@@ -20,7 +21,7 @@ public function __construct(
2021
) {
2122
}
2223

23-
public function __invoke(Request $request, callable $next): Response
24+
public function __invoke(Request $request, HttpMiddlewareCallable $next): Response
2425
{
2526
$attribute = $this->matchedRoute
2627
->route

src/Tempest/CommandBus/src/CommandBusMiddleware.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,5 @@
66

77
interface CommandBusMiddleware
88
{
9-
/** @param callable(object $command): void $next */
10-
public function __invoke(object $command, callable $next): void;
9+
public function __invoke(object $command, CommandBusMiddlewareCallable $next): void;
1110
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tempest\CommandBus;
6+
7+
use Closure;
8+
9+
final readonly class CommandBusMiddlewareCallable
10+
{
11+
public function __construct(
12+
private Closure $closure,
13+
) {
14+
}
15+
16+
public function __invoke(object $command): void
17+
{
18+
($this->closure)($command);
19+
}
20+
}

src/Tempest/CommandBus/src/GenericCommandBus.php

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

55
namespace Tempest\CommandBus;
66

7-
use Closure;
87
use Tempest\Container\Container;
98

109
final class GenericCommandBus implements CommandBus
@@ -31,21 +30,23 @@ public function dispatch(object $command): void
3130
$callable($command);
3231
}
3332

34-
private function getCallable(CommandHandler $commandHandler): Closure
33+
private function getCallable(CommandHandler $commandHandler): CommandBusMiddlewareCallable
3534
{
36-
$callable = function (object $command) use ($commandHandler): void {
35+
$callable = new CommandBusMiddlewareCallable(function (object $command) use ($commandHandler): void {
3736
$commandHandler->handler->invokeArgs(
3837
$this->container->get($commandHandler->handler->getDeclaringClass()->getName()),
3938
[$command],
4039
);
4140

4241
$this->history[] = $command;
43-
};
42+
});
4443

4544
$middlewareStack = $this->commandBusConfig->middleware;
4645

4746
while ($middlewareClass = array_pop($middlewareStack)) {
48-
$callable = fn (object $command) => $this->container->get($middlewareClass)($command, $callable);
47+
$callable = new CommandBusMiddlewareCallable(
48+
fn (object $command) => $this->container->get($middlewareClass)($command, $callable),
49+
);
4950
}
5051

5152
return $callable;

src/Tempest/Console/src/Actions/ExecuteConsoleCommand.php

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

55
namespace Tempest\Console\Actions;
66

7-
use Closure;
87
use Tempest\Console\ConsoleConfig;
98
use Tempest\Console\ConsoleInputBuilder;
9+
use Tempest\Console\ConsoleMiddlewareCallable;
1010
use Tempest\Console\ExitCode;
1111
use Tempest\Console\Initializers\Invocation;
1212
use Tempest\Console\Input\ConsoleArgumentBag;
@@ -32,9 +32,9 @@ public function __invoke(string $commandName): ExitCode
3232
));
3333
}
3434

35-
private function getCallable(array $commandMiddleware): Closure
35+
private function getCallable(array $commandMiddleware): ConsoleMiddlewareCallable
3636
{
37-
$callable = function (Invocation $invocation) {
37+
$callable = new ConsoleMiddlewareCallable(function (Invocation $invocation) {
3838
$consoleCommand = $invocation->consoleCommand;
3939

4040
$handler = $consoleCommand->handler;
@@ -49,12 +49,14 @@ private function getCallable(array $commandMiddleware): Closure
4949
);
5050

5151
return ExitCode::SUCCESS;
52-
};
52+
});
5353

5454
$middlewareStack = [...$this->consoleConfig->middleware, ...$commandMiddleware];
5555

5656
while ($middlewareClass = array_pop($middlewareStack)) {
57-
$callable = fn (Invocation $invocation) => $this->container->get($middlewareClass)($invocation, $callable);
57+
$callable = new ConsoleMiddlewareCallable(
58+
fn (Invocation $invocation) => $this->container->get($middlewareClass)($invocation, $callable)
59+
);
5860
}
5961

6062
return $callable;

src/Tempest/Console/src/ConsoleMiddleware.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,5 @@
88

99
interface ConsoleMiddleware
1010
{
11-
/** @param callable(Invocation $invocation): ExitCode $next */
12-
public function __invoke(Invocation $invocation, callable $next): ExitCode;
11+
public function __invoke(Invocation $invocation, ConsoleMiddlewareCallable $next): ExitCode;
1312
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tempest\Console;
6+
7+
use Closure;
8+
use Tempest\Console\Initializers\Invocation;
9+
10+
final readonly class ConsoleMiddlewareCallable
11+
{
12+
public function __construct(
13+
private Closure $closure,
14+
) {
15+
}
16+
17+
public function __invoke(Invocation $invocation): ExitCode
18+
{
19+
return ($this->closure)($invocation);
20+
}
21+
}

src/Tempest/Console/src/Middleware/CautionMiddleware.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Tempest\Console\Console;
88
use Tempest\Console\ConsoleMiddleware;
9+
use Tempest\Console\ConsoleMiddlewareCallable;
910
use Tempest\Console\ExitCode;
1011
use Tempest\Console\Initializers\Invocation;
1112
use Tempest\Core\AppConfig;
@@ -18,7 +19,7 @@ public function __construct(
1819
) {
1920
}
2021

21-
public function __invoke(Invocation $invocation, callable $next): ExitCode
22+
public function __invoke(Invocation $invocation, ConsoleMiddlewareCallable $next): ExitCode
2223
{
2324
$environment = $this->appConfig->environment;
2425

src/Tempest/Console/src/Middleware/ConsoleExceptionMiddleware.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Tempest\Console\Console;
88
use Tempest\Console\ConsoleMiddleware;
9+
use Tempest\Console\ConsoleMiddlewareCallable;
910
use Tempest\Console\Exceptions\ConsoleException;
1011
use Tempest\Console\ExitCode;
1112
use Tempest\Console\Initializers\Invocation;
@@ -17,7 +18,7 @@ public function __construct(
1718
) {
1819
}
1920

20-
public function __invoke(Invocation $invocation, callable $next): ExitCode
21+
public function __invoke(Invocation $invocation, ConsoleMiddlewareCallable $next): ExitCode
2122
{
2223
try {
2324
return $next($invocation);

src/Tempest/Console/src/Middleware/ForceMiddleware.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Tempest\Console\Console;
88
use Tempest\Console\ConsoleMiddleware;
9+
use Tempest\Console\ConsoleMiddlewareCallable;
910
use Tempest\Console\ExitCode;
1011
use Tempest\Console\GenericConsole;
1112
use Tempest\Console\Initializers\Invocation;
@@ -16,7 +17,7 @@ public function __construct(private Console $console)
1617
{
1718
}
1819

19-
public function __invoke(Invocation $invocation, callable $next): ExitCode
20+
public function __invoke(Invocation $invocation, ConsoleMiddlewareCallable $next): ExitCode
2021
{
2122
if ($invocation->argumentBag->get('-f') || $invocation->argumentBag->get('force')) {
2223
if ($this->console instanceof GenericConsole) {

0 commit comments

Comments
 (0)