summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/astro/src/core/cookies/response.ts6
-rw-r--r--packages/astro/src/vite-plugin-astro-server/response.ts19
-rw-r--r--packages/webapi/package.json2
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",