diff --git a/.changeset/rude-camels-cover.md b/.changeset/rude-camels-cover.md new file mode 100644 index 00000000..1f2684c2 --- /dev/null +++ b/.changeset/rude-camels-cover.md @@ -0,0 +1,5 @@ +--- +"@solidjs/router": patch +--- + +preserve headers in `query()`'s `handleResponse()` diff --git a/src/data/query.ts b/src/data/query.ts index 6ed49161..67ff9efd 100644 --- a/src/data/query.ts +++ b/src/data/query.ts @@ -177,6 +177,17 @@ export function query any>(fn: T, name: string): Cac function handleResponse(error: boolean) { return async (v: any | Response) => { if (v instanceof Response) { + const e = getRequestEvent(); + + if (e) { + for (const [ key, value ] of v.headers) { + if (key == "set-cookie") + e.response.headers.append("set-cookie", value); + else + e.response.headers.set(key, value); + } + } + const url = v.headers.get(LocationHeader); if (url !== null) { @@ -186,10 +197,7 @@ export function query any>(fn: T, name: string): Cac navigate(url, { replace: true }); }); else if (!isServer) window.location.href = url; - else if (isServer) { - const e = getRequestEvent(); - if (e) e.response = { status: 302, headers: new Headers({ Location: url }) }; - } + else if (e) e.response.status = 302; return; }