Skip to content

Commit baa606c

Browse files
authored
fix: parse max-age in set cookie (#995)
* fix: parse max-age in set cookie * chore: add changeget * test: add unit tests for parsing max-age from set-cookie
1 parent 8bfb9b3 commit baa606c

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

.changeset/big-pumpkins-kiss.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@edge-runtime/cookies': patch
3+
---
4+
5+
Fix parsing max-age in set cookie

packages/cookies/src/serialize.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ export function stringifyCookie(c: ResponseCookie | RequestCookie): string {
1919
].filter(Boolean)
2020

2121
const stringified = `${c.name}=${encodeURIComponent(c.value ?? '')}`
22-
return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join('; ')}`
22+
return attrs.length === 0
23+
? stringified
24+
: `${stringified}; ${attrs.join('; ')}`
2325
}
2426

2527
/** Parse a `Cookie` header value */
@@ -68,7 +70,10 @@ export function parseSetCookie(setCookie: string): undefined | ResponseCookie {
6870
partitioned,
6971
priority,
7072
} = Object.fromEntries(
71-
attributes.map(([key, value]) => [key.toLowerCase(), value]),
73+
attributes.map(([key, value]) => [
74+
key.toLowerCase().replace(/-/g, ''),
75+
value,
76+
]),
7277
)
7378
const cookie: ResponseCookie = {
7479
name,

packages/cookies/test/response-cookies.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,3 +278,12 @@ test('splitting multiple set-cookie', () => {
278278
expect(cookies2.get('foo')?.value).toBe(undefined)
279279
expect(cookies2.get('fooz')?.value).toBe('barz')
280280
})
281+
282+
test('parse max-age from set-cookie', () => {
283+
const headers = new Headers()
284+
headers.set('set-cookie', 'foo=bar; Max-Age=1000')
285+
286+
const cookies = new ResponseCookies(headers)
287+
expect(cookies.get('foo')?.value).toBe('bar')
288+
expect(cookies.get('foo')?.maxAge).toBe(1000)
289+
})

0 commit comments

Comments
 (0)