From e77ff560b231cc7b05c9d707bfac10b49b8867fb Mon Sep 17 00:00:00 2001 From: Sibiraj <20282546+sibiraj-s@users.noreply.github.com> Date: Sat, 12 Oct 2024 16:50:51 +0530 Subject: [PATCH 1/3] fix: parse max-age in set cookie --- packages/cookies/src/serialize.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/cookies/src/serialize.ts b/packages/cookies/src/serialize.ts index b9a3e1e1..977ea9c2 100644 --- a/packages/cookies/src/serialize.ts +++ b/packages/cookies/src/serialize.ts @@ -19,7 +19,9 @@ export function stringifyCookie(c: ResponseCookie | RequestCookie): string { ].filter(Boolean) const stringified = `${c.name}=${encodeURIComponent(c.value ?? '')}` - return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join('; ')}` + return attrs.length === 0 + ? stringified + : `${stringified}; ${attrs.join('; ')}` } /** Parse a `Cookie` header value */ @@ -68,7 +70,10 @@ export function parseSetCookie(setCookie: string): undefined | ResponseCookie { partitioned, priority, } = Object.fromEntries( - attributes.map(([key, value]) => [key.toLowerCase(), value]), + attributes.map(([key, value]) => [ + key.toLowerCase().replace(/-/g, ''), + value, + ]), ) const cookie: ResponseCookie = { name, From 5ae9edf96eaa6129ca61c2af1f98e845ce5bac3e Mon Sep 17 00:00:00 2001 From: Sibiraj <20282546+sibiraj-s@users.noreply.github.com> Date: Sat, 12 Oct 2024 16:55:24 +0530 Subject: [PATCH 2/3] chore: add changeget --- .changeset/big-pumpkins-kiss.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/big-pumpkins-kiss.md diff --git a/.changeset/big-pumpkins-kiss.md b/.changeset/big-pumpkins-kiss.md new file mode 100644 index 00000000..24a95f9f --- /dev/null +++ b/.changeset/big-pumpkins-kiss.md @@ -0,0 +1,5 @@ +--- +'@edge-runtime/cookies': patch +--- + +Fix parsing max-age in set cookie From 0e3c55978ce60cda16aaafa417dfcb97cfa58589 Mon Sep 17 00:00:00 2001 From: Sibiraj <20282546+sibiraj-s@users.noreply.github.com> Date: Thu, 17 Oct 2024 20:13:31 +0530 Subject: [PATCH 3/3] test: add unit tests for parsing max-age from set-cookie --- packages/cookies/test/response-cookies.test.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/cookies/test/response-cookies.test.ts b/packages/cookies/test/response-cookies.test.ts index 145b6bfe..3e111939 100644 --- a/packages/cookies/test/response-cookies.test.ts +++ b/packages/cookies/test/response-cookies.test.ts @@ -278,3 +278,12 @@ test('splitting multiple set-cookie', () => { expect(cookies2.get('foo')?.value).toBe(undefined) expect(cookies2.get('fooz')?.value).toBe('barz') }) + +test('parse max-age from set-cookie', () => { + const headers = new Headers() + headers.set('set-cookie', 'foo=bar; Max-Age=1000') + + const cookies = new ResponseCookies(headers) + expect(cookies.get('foo')?.value).toBe('bar') + expect(cookies.get('foo')?.maxAge).toBe(1000) +})