diff options
Diffstat (limited to 'packages')
-rw-r--r-- | packages/astro/src/core/cookies/response.ts | 6 | ||||
-rw-r--r-- | packages/astro/src/vite-plugin-astro-server/response.ts | 19 | ||||
-rw-r--r-- | packages/webapi/package.json | 2 |
3 files changed, 17 insertions, 10 deletions
diff --git a/packages/astro/src/core/cookies/response.ts b/packages/astro/src/core/cookies/response.ts index d04ce1ef3..18d72ab1c 100644 --- a/packages/astro/src/core/cookies/response.ts +++ b/packages/astro/src/core/cookies/response.ts @@ -15,12 +15,14 @@ function getFromResponse(response: Response): AstroCookies | undefined { } } -export function* getSetCookiesFromResponse(response: Response): Generator<string, void, unknown> { +export function* getSetCookiesFromResponse(response: Response): Generator<string, string[]> { const cookies = getFromResponse(response); if (!cookies) { - return; + return []; } for (const headerValue of cookies.headers()) { yield headerValue; } + + return []; } diff --git a/packages/astro/src/vite-plugin-astro-server/response.ts b/packages/astro/src/vite-plugin-astro-server/response.ts index 008e7daab..a7cc6e093 100644 --- a/packages/astro/src/vite-plugin-astro-server/response.ts +++ b/packages/astro/src/vite-plugin-astro-server/response.ts @@ -55,19 +55,24 @@ export function writeHtmlResponse(res: http.ServerResponse, statusCode: number, export async function writeWebResponse(res: http.ServerResponse, webResponse: Response) { const { status, headers, body } = webResponse; + // Attach any set-cookie headers added via Astro.cookies.set() + const setCookieHeaders = Array.from(getSetCookiesFromResponse(webResponse)); + setCookieHeaders.forEach((cookie) => { + headers.append('set-cookie', cookie); + }); + const _headers = Object.fromEntries(headers.entries()); // Undici 5.20.0+ includes a `getSetCookie` helper that returns an array of all the `set-cookies` headers. // Previously, `headers.entries()` would already have these merged, but it seems like this isn't the case anymore. - if ('getSetCookie' in headers && typeof headers.getSetCookie === 'function') { - _headers['set-cookie'] = headers.getSetCookie(); + if (headers.has('set-cookie')) { + if ('getSetCookie' in headers && typeof headers.getSetCookie === 'function') { + _headers['set-cookie'] = headers.getSetCookie(); + } else { + _headers['set-cookie'] = headers.get('set-cookie')!; + } } - // Attach any set-cookie headers added via Astro.cookies.set() - const setCookieHeaders = Array.from(getSetCookiesFromResponse(webResponse)); - if (setCookieHeaders.length) { - res.setHeader('Set-Cookie', setCookieHeaders); - } res.writeHead(status, _headers); if (body) { if (Symbol.for('astro.responseBody') in webResponse) { diff --git a/packages/webapi/package.json b/packages/webapi/package.json index 82d9ee109..5316909b3 100644 --- a/packages/webapi/package.json +++ b/packages/webapi/package.json @@ -50,7 +50,7 @@ "bugs": "https://github.com/withastro/astro/issues", "homepage": "https://github.com/withastro/astro/tree/main/packages/webapi#readme", "dependencies": { - "undici": "5.18.0" + "undici": "5.20.0" }, "devDependencies": { "@rollup/plugin-alias": "^3.1.9", |