diff --git a/worker/index.ts b/worker/index.ts index dfa799d..5fc35ae 100644 --- a/worker/index.ts +++ b/worker/index.ts @@ -18,8 +18,12 @@ import { // @ts-expect-error -- virtual module resolved by vinext at build time import { renderPage, handleApiRoute, runMiddleware, vinextConfig } from "virtual:vinext-server-entry"; +interface AssetFetcher { + fetch(request: Request): Promise; +} + interface Env { - ASSETS: Fetcher; + ASSETS: AssetFetcher; IMAGES: { input(stream: ReadableStream): { transform(options: Record): { @@ -56,6 +60,11 @@ function stripBasePath(pathname: string, basePath: string): string { return pathname.slice(basePath.length) || "/"; } +function stripQueryString(url: string): string { + const queryIndex = url.indexOf("?"); + return queryIndex === -1 ? url : url.slice(0, queryIndex); +} + export default { async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise { try { @@ -207,7 +216,7 @@ export default { // Config header matching must keep using the original normalized pathname // even if middleware rewrites the downstream route/render target. - let resolvedPathname = resolvedUrl.split("?")[0]; + let resolvedPathname = stripQueryString(resolvedUrl); // ── 5. Apply custom headers from next.config.js ─────────────── // Config headers are additive for multi-value headers (Vary, @@ -247,7 +256,7 @@ export default { return proxyExternalRequest(request, rewritten); } resolvedUrl = rewritten; - resolvedPathname = rewritten.split("?")[0]; + resolvedPathname = stripQueryString(rewritten); } } @@ -267,7 +276,7 @@ export default { return proxyExternalRequest(request, rewritten); } resolvedUrl = rewritten; - resolvedPathname = rewritten.split("?")[0]; + resolvedPathname = stripQueryString(rewritten); } }