diff --git a/.changeset/tender-berries-hunt.md b/.changeset/tender-berries-hunt.md new file mode 100644 index 00000000..5278625f --- /dev/null +++ b/.changeset/tender-berries-hunt.md @@ -0,0 +1,5 @@ +--- +'@edge-runtime/primitives': patch +--- + +fix entries iteration on Headers diff --git a/packages/integration-tests/tests/headers.test.ts b/packages/integration-tests/tests/headers.test.ts index 06df511f..7590fca7 100644 --- a/packages/integration-tests/tests/headers.test.ts +++ b/packages/integration-tests/tests/headers.test.ts @@ -10,3 +10,11 @@ test('sets header calling Headers constructor', async () => { headers.set('cookie', 'hello=world') expect(headers.get('cookie')).toBe('hello=world') }) + +test('multiple headers', async () => { + const headers = new Headers() + headers.append('set-cookie', 'foo=chocochip') + headers.append('set-cookie', 'bar=chocochip') + expect(headers.get('set-cookie')).toBe('foo=chocochip, bar=chocochip') + expect([...headers]).toEqual([['set-cookie', 'foo=chocochip, bar=chocochip']]) +}) diff --git a/packages/primitives/src/primitives/fetch.js b/packages/primitives/src/primitives/fetch.js index 8469233a..9192c683 100644 --- a/packages/primitives/src/primitives/fetch.js +++ b/packages/primitives/src/primitives/fetch.js @@ -27,8 +27,13 @@ class Request extends BaseRequest { const __entries = HeadersModule.Headers.prototype.entries HeadersModule.Headers.prototype.entries = function* () { + let sentSetCookie = false for (const [key, value] of __entries.call(this)) { if (key === 'set-cookie') { + if (sentSetCookie) { + continue + } + sentSetCookie = true const cookies = this.getSetCookie() yield [key, cookies.join(', ')] } else {