diff --git a/src/adapter/utils.ts b/src/adapter/utils.ts index c700f5c4f..21c366692 100644 --- a/src/adapter/utils.ts +++ b/src/adapter/utils.ts @@ -159,6 +159,7 @@ export const createStreamHandler = | IteratorResult | undefined + if (set) handleSet(set) if (init instanceof Promise) init = await init // Generator or ReadableStream is returned from a generator function diff --git a/test/response/stream.test.ts b/test/response/stream.test.ts index 341b23c4a..5c86f883c 100644 --- a/test/response/stream.test.ts +++ b/test/response/stream.test.ts @@ -96,6 +96,31 @@ describe('Stream', () => { expect(response).toBe('ab') }) + it('include multiple set-cookie headers in streamed response', async () => { + const app = new Elysia().get('/', async function* (context) { + context.cookie['cookie1'].set({ + value: 'value1' + }) + context.cookie['cookie2'].set({ + value: 'value2' + }) + + yield sse({ event: 'test', data: { count: 1 } }) + yield sse({ event: 'test', data: { count: 2 } }) + }) + + const response = await app.handle(req('/')) + + const cookieHeaders = response.headers.getSetCookie() + expect(cookieHeaders).toHaveLength(2) + expect(cookieHeaders.some((h) => h.includes('cookie1=value1'))).toBe( + true + ) + expect(cookieHeaders.some((h) => h.includes('cookie2=value2'))).toBe( + true + ) + }) + it('mutate set before yield is called', async () => { const expected = ['a', 'b', 'c']