Skip to content

Commit 39af2a0

Browse files
committedMay 16, 2022
Edge Cookies: Add getRaw method
1 parent 359d03f commit 39af2a0

File tree

3 files changed

+24
-12
lines changed

3 files changed

+24
-12
lines changed
 

‎packages/next/server/web/spec-extension/cookies.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const deserializeCookie = (input: Request | Response): string[] => {
3535

3636
const serializeCookie = (input: string[]) => input.join(', ')
3737

38-
export class Cookies extends Map<string, string> {
38+
export class Cookies extends Map<string, string | object> {
3939
constructor(input?: string | null) {
4040
const parsedInput = typeof input === 'string' ? cookie.parse(input) : {}
4141
super(Object.entries(parsedInput))
@@ -59,10 +59,17 @@ export class NextCookies extends Cookies {
5959
super(response.headers.get('cookie'))
6060
this.response = response
6161
}
62+
get = (...args: Parameters<Cookies['get']>) => {
63+
const value = this.getRaw(...args)
64+
return typeof value === 'string' ? cookie.parse(value) : value
65+
}
66+
getRaw = (...args: Parameters<Cookies['get']>) => {
67+
return super.get(...args)
68+
}
6269
set = (...args: Parameters<Cookies['set']>) => {
6370
const isAlreadyAdded = super.has(args[0])
6471
const store = super.set(...args)
65-
const currentCookie = store.get(args[0])
72+
const currentCookie = store.getRaw(args[0])
6673

6774
if (typeof currentCookie !== 'string') {
6875
throw new Error(

‎test/unit/web-runtime/cookies.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ it('.set with options', async () => {
7272
})
7373

7474
const [[key, value]] = Array.from(cookies.entries())
75-
const values = value.split('; ')
75+
const values = (value as string).split('; ')
7676

7777
expect(key).toBe('foo')
7878

‎test/unit/web-runtime/next-cookies.test.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,17 @@ it('reflect .set into `set-cookie`', async () => {
3434

3535
const response = new NextResponse()
3636

37-
response.cookies.set('foo', 'bar')
37+
response.cookies.set('foo', 'bar', { path: '/test' })
3838
expect(Object.fromEntries(response.headers.entries())['set-cookie']).toBe(
39-
'foo=bar; Path=/'
39+
'foo=bar; Path=/test'
4040
)
41-
expect(response.cookies.get('foo')).toBe('foo=bar; Path=/')
41+
expect(response.cookies.getRaw('foo')).toBe('foo=bar; Path=/test')
4242

4343
response.cookies.set('foo', 'barz')
4444
expect(Object.fromEntries(response.headers.entries())['set-cookie']).toBe(
4545
'foo=barz; Path=/'
4646
)
47-
expect(response.cookies.get('foo')).toBe('foo=barz; Path=/')
47+
expect(response.cookies.getRaw('foo')).toBe('foo=barz; Path=/')
4848

4949
response.cookies.set('fooz', 'barz')
5050
expect(Object.fromEntries(response.headers.entries())['set-cookie']).toBe(
@@ -68,28 +68,32 @@ it('reflect .delete into `set-cookie`', async () => {
6868
expect(Object.fromEntries(response.headers.entries())['set-cookie']).toBe(
6969
'foo=bar; Path=/'
7070
)
71-
expect(response.cookies.get('foo')).toBe('foo=bar; Path=/')
71+
expect(response.cookies.get('foo')).toEqual({ Path: '/', foo: 'bar' })
72+
expect(response.cookies.getRaw('foo')).toBe('foo=bar; Path=/')
7273

7374
response.cookies.set('fooz', 'barz')
7475
expect(Object.fromEntries(response.headers.entries())['set-cookie']).toBe(
7576
'foo=bar; Path=/, fooz=barz; Path=/'
7677
)
77-
expect(response.cookies.get('fooz')).toBe('fooz=barz; Path=/')
78+
expect(response.cookies.get('fooz')).toEqual({ Path: '/', fooz: 'barz' })
79+
expect(response.cookies.getRaw('fooz')).toBe('fooz=barz; Path=/')
7880

7981
const firstDelete = response.cookies.delete('foo')
8082
expect(firstDelete).toBe(true)
8183
expect(Object.fromEntries(response.headers.entries())['set-cookie']).toBe(
8284
'foo=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT, fooz=barz; Path=/'
8385
)
8486

85-
expect(response.cookies.get('foo')).toBe(undefined)
87+
expect(response.cookies.get('foo')).toEqual(undefined)
88+
expect(response.cookies.getRaw('foo')).toBe(undefined)
8689

8790
const secondDelete = response.cookies.delete('fooz')
8891
expect(secondDelete).toBe(true)
8992
expect(Object.fromEntries(response.headers.entries())['set-cookie']).toBe(
9093
'fooz=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT, foo=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT'
9194
)
92-
expect(response.cookies.get('fooz')).toBe(undefined)
95+
expect(response.cookies.get('fooz')).toEqual(undefined)
96+
expect(response.cookies.getRaw('fooz')).toBe(undefined)
9397
expect(response.cookies.size).toBe(0)
9498
})
9599

@@ -109,7 +113,8 @@ it('reflect .clear into `set-cookie`', async () => {
109113
expect(Object.fromEntries(response.headers.entries())['set-cookie']).toBe(
110114
'foo=bar; Path=/'
111115
)
112-
expect(response.cookies.get('foo')).toBe('foo=bar; Path=/')
116+
expect(response.cookies.get('foo')).toEqual({ Path: '/', foo: 'bar' })
117+
expect(response.cookies.getRaw('foo')).toBe('foo=bar; Path=/')
113118

114119
response.cookies.set('fooz', 'barz')
115120
expect(Object.fromEntries(response.headers.entries())['set-cookie']).toBe(

0 commit comments

Comments
 (0)