Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f45dd27

Browse files
committed
refactor: allow overriding middleware resolution
1 parent 631249d commit f45dd27

File tree

2 files changed

+21
-21
lines changed

2 files changed

+21
-21
lines changed

src/h3.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import { toRequest } from "./utils/request.ts";
2525

2626
export type H3Core = H3Type;
2727

28+
const NoHandler = () => kNotFound;
29+
2830
export const H3Core = /* @__PURE__ */ (() => {
2931
// prettier-ignore
3032
const HTTPMethods = ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE" ] as const;
@@ -99,18 +101,23 @@ export const H3Core = /* @__PURE__ */ (() => {
99101
this._routes.push(_route);
100102
}
101103

104+
_getMiddleware(route: MatchedRoute<H3Route> | void): Middleware[] {
105+
return route?.data.middleware
106+
? [...this._middleware, ...route.data.middleware]
107+
: this._middleware;
108+
}
109+
102110
handler(event: H3Event): unknown | Promise<unknown> {
103111
const route = this._findRoute(event);
104112
if (route) {
105113
event.context.params = route.params;
106114
event.context.matchedRoute = route.data;
107115
}
108-
const middleware = route?.data.middleware
109-
? [...this._middleware, ...route.data.middleware]
110-
: this._middleware;
111-
return callMiddleware(event, middleware, () => {
112-
return route ? route.data.handler(event) : kNotFound;
113-
});
116+
const routeHandler = route?.data.handler || NoHandler;
117+
const middleware = this._getMiddleware(route);
118+
return middleware.length > 0
119+
? callMiddleware(event, middleware, () => routeHandler(event))
120+
: routeHandler(event);
114121
}
115122

116123
mount(
@@ -208,9 +215,7 @@ export const H3Core = /* @__PURE__ */ (() => {
208215
})() as unknown as { new (config?: H3Config): H3Type };
209216

210217
export class H3 extends H3Core {
211-
/**
212-
* @internal
213-
*/
218+
/** @internal */
214219
_rou3: RouterContext<H3Route>;
215220

216221
constructor(config: H3Config = {}) {

src/types/h3.ts

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,10 @@ export type MiddlewareOptions = {
6969
};
7070

7171
export declare class H3 {
72-
/**
73-
* @internal
74-
*/
72+
/** @internal */
7573
_middleware: Middleware[];
7674

77-
/**
78-
* @internal
79-
*/
75+
/** @internal */
8076
_routes: H3Route[];
8177

8278
/**
@@ -111,14 +107,13 @@ export declare class H3 {
111107
context?: H3EventContext,
112108
): Response | Promise<Response>;
113109

114-
/**
115-
* @internal
116-
*/
110+
/** @internal */
117111
_findRoute(_event: H3Event): MatchedRoute<H3Route> | void;
118112

119-
/**
120-
* @internal
121-
*/
113+
/** @internal */
114+
_getMiddleware(route: MatchedRoute<H3Route> | void): Middleware[];
115+
116+
/** @internal */
122117
_addRoute(_route: H3Route): void;
123118

124119
/**

0 commit comments

Comments
 (0)