From 00d960bc85cdad02328a9c7b85dcf04eb9382156 Mon Sep 17 00:00:00 2001 From: Brenley Dueck Date: Wed, 22 Jul 2026 07:29:36 -0500 Subject: [PATCH] fix: restore routerLoad argument to createHandler The optional 3rd argument to createHandler, introduced in #1840 to enable TanStack Router SSR, was accidentally dropped in the v2 rewrite (#1942). The client half (StartClientTanstack) survived, so apps using the with-tanstack-router pattern crashed with a 500 from an uninitialized router store. Restores routerLoad on both createHandler variants and threads it through createBaseHandler, invoked before createPageEvent so it only runs for page renders (not server functions or API routes). Fixes #2221 Co-Authored-By: Claude Fable 5 --- .changeset/spotty-moons-repeat.md | 5 +++++ packages/start/src/server/handler.ts | 6 +++++- packages/start/src/server/spa/handler.ts | 3 ++- 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 .changeset/spotty-moons-repeat.md diff --git a/.changeset/spotty-moons-repeat.md b/.changeset/spotty-moons-repeat.md new file mode 100644 index 000000000..daa950dc4 --- /dev/null +++ b/.changeset/spotty-moons-repeat.md @@ -0,0 +1,5 @@ +--- +"@solidjs/start": patch +--- + +Restore the optional `routerLoad` third argument to `createHandler`, which primes custom routers (e.g. TanStack Router) on the server before SSR rendering. It was accidentally dropped in the v2 rewrite. diff --git a/packages/start/src/server/handler.ts b/packages/start/src/server/handler.ts index e195d42c7..c1fea4b4c 100644 --- a/packages/start/src/server/handler.ts +++ b/packages/start/src/server/handler.ts @@ -21,6 +21,7 @@ export function createBaseHandler( createPageEvent: (e: FetchEvent) => Promise, fn: (context: PageEvent) => JSX.Element, options: HandlerOptions | ((context: PageEvent) => HandlerOptions | Promise) = {}, + routerLoad?: (event: FetchEvent) => Promise, ): H3 { const handler = defineHandler({ middleware: middleware.length ? middleware.map(decorateMiddleware) : undefined, @@ -64,6 +65,8 @@ export function createBaseHandler( } } + if (routerLoad) await routerLoad(event); + const context = await createPageEvent(event); const resolvedOptions = @@ -134,8 +137,9 @@ export function createBaseHandler( export function createHandler( fn: (context: PageEvent) => JSX.Element, options: HandlerOptions | ((context: PageEvent) => HandlerOptions | Promise) = {}, + routerLoad?: (event: FetchEvent) => Promise, ): H3 { - return createBaseHandler(createPageEvent, fn, options); + return createBaseHandler(createPageEvent, fn, options, routerLoad); } export async function createPageEvent(ctx: FetchEvent) { diff --git a/packages/start/src/server/spa/handler.ts b/packages/start/src/server/spa/handler.ts index 6bec714cf..855f02c5f 100644 --- a/packages/start/src/server/spa/handler.ts +++ b/packages/start/src/server/spa/handler.ts @@ -12,8 +12,9 @@ import type { FetchEvent, HandlerOptions, PageEvent } from "../types.ts"; export function createHandler( fn: (context: PageEvent) => JSX.Element, options?: HandlerOptions | ((context: PageEvent) => HandlerOptions), + routerLoad?: (event: FetchEvent) => Promise, ): H3 { - return createBaseHandler(createPageEvent, fn, options); + return createBaseHandler(createPageEvent, fn, options, routerLoad); } async function createPageEvent(ctx: FetchEvent) {