Skip to content

Commit 5f19f92

Browse files
authored
refactor: avoid nested h3 defineHandler call in createBaseHandler (#2006)
1 parent 79bf309 commit 5f19f92

File tree

2 files changed

+13
-11
lines changed

2 files changed

+13
-11
lines changed

packages/start/src/server/fetchEvent.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { getRequestIP, type H3Event } from "h3";
1+
import { type EventHandler, getRequestIP, type H3Event, type Middleware } from "h3";
2+
import { provideRequestEvent } from "solid-js/web/storage";
23
import type { FetchEvent } from "./types.ts";
34

45
const FETCH_EVENT_CONTEXT = "solidFetchEvent";
@@ -27,3 +28,9 @@ export function mergeResponseHeaders(h3Event: H3Event, headers: Headers) {
2728
h3Event.res.headers.append(key, value);
2829
}
2930
}
31+
32+
export const decorateHandler = <T extends EventHandler>(fn: T) =>
33+
(event => provideRequestEvent(getFetchEvent(event), () => fn(event))) as T;
34+
35+
export const decorateMiddleware = <T extends Middleware>(fn: T) =>
36+
((event, next) => provideRequestEvent(getFetchEvent(event), () => fn(event, next))) as T;

packages/start/src/server/handler.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@ import { join } from "pathe";
44
import type { JSX } from "solid-js";
55
import { sharedConfig } from "solid-js";
66
import { getRequestEvent, renderToStream, renderToString } from "solid-js/web";
7-
import { provideRequestEvent } from "solid-js/web/storage";
87

98
import { createRoutes } from "../router.tsx";
10-
import { getFetchEvent } from "./fetchEvent.ts";
9+
import { decorateHandler, decorateMiddleware } from "./fetchEvent.ts";
1110
import { getSsrManifest } from "./manifest/ssr-manifest.ts";
1211
import { matchAPIRoute } from "./routes.ts";
1312
import { handleServerFunction } from "./server-functions-handler.ts";
@@ -29,8 +28,8 @@ export function createBaseHandler(
2928
| ((context: PageEvent) => HandlerOptions | Promise<HandlerOptions>) = {},
3029
) {
3130
const handler = defineHandler({
32-
middleware,
33-
handler: async (e: H3Event) => {
31+
middleware: middleware.length ? middleware.map(decorateMiddleware): undefined,
32+
handler: decorateHandler(async (e: H3Event) => {
3433
const event = getRequestEvent()!;
3534
const url = new URL(event.request.url);
3635
const pathname = url.pathname;
@@ -126,16 +125,12 @@ export function createBaseHandler(
126125
const { writable, readable } = new TransformStream();
127126
stream.pipeTo(writable);
128127
return readable
129-
},
128+
}),
130129
});
131130

132131
const app = new H3();
133132

134-
app.use(
135-
defineHandler((e) =>
136-
provideRequestEvent(getFetchEvent(e), () => handler(e)),
137-
),
138-
);
133+
app.use(handler);
139134

140135
return app;
141136
}

0 commit comments

Comments
 (0)