Skip to content

Commit 2469b57

Browse files
committed
fix(commandkit): middlewares run order
1 parent 56c7cd1 commit 2469b57

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed

apps/website/docs/guide/02-commands/07-middlewares.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export function beforeExecute(ctx: MiddlewareContext) {
8989
:::tip
9090

9191
Middleware execution (both before and after) follows a hierarchy:
92-
directory-scoped middleware runs first, then command-specific
93-
middleware, and finally global middleware.
92+
command-scoped middlewares run first, then directory-scoped
93+
middlewares, and finally global middlewares.
9494

9595
:::

packages/commandkit/src/app/router/CommandsRouter.ts

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -285,17 +285,30 @@ export class CommandsRouter {
285285
private applyMiddlewares() {
286286
this.commands.forEach((command) => {
287287
const commandPath = command.parentPath;
288-
const samePathMiddlewares = Array.from(this.middlewares.values())
289-
.filter((middleware) => {
290-
if (middleware.global) return true;
291-
if (middleware.command) return middleware.command === command.name;
292-
return middleware.parentPath === commandPath;
293-
})
288+
const allMiddlewares = Array.from(this.middlewares.values());
289+
290+
const commandSpecificMiddlewares = allMiddlewares
291+
.filter((middleware) => middleware.command === command.name)
292+
.map((middleware) => middleware.id);
293+
294+
const directorySpecificMiddlewares = allMiddlewares
295+
.filter(
296+
(middleware) =>
297+
!middleware.global &&
298+
!middleware.command &&
299+
middleware.parentPath === commandPath,
300+
)
301+
.map((middleware) => middleware.id);
302+
303+
const globalMiddlewares = allMiddlewares
304+
.filter((middleware) => middleware.global)
294305
.map((middleware) => middleware.id);
295306

296-
command.middlewares = Array.from(
297-
new Set([...command.middlewares, ...samePathMiddlewares]),
298-
);
307+
command.middlewares = [
308+
...commandSpecificMiddlewares,
309+
...directorySpecificMiddlewares,
310+
...globalMiddlewares,
311+
];
299312
});
300313
}
301314

0 commit comments

Comments
 (0)