Skip to content

Commit 36bc9b8

Browse files
authored
Merge pull request #1595 from abhishekg999/ahh/fix-trace-afterhandle-stream-reference
Fix: stream reference should point to teed value
2 parents f027642 + d929d08 commit 36bc9b8

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

src/compose.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1797,6 +1797,9 @@ export const composeHandler = ({
17971797
(maybeAsync ? '' : `(async()=>{`) +
17981798
`const stream=await tee(r,3)\n` +
17991799
`r=stream[0]\n` +
1800+
(hooks.afterHandle?.length
1801+
? `c.response=c.responseValue=r\n`
1802+
: '') +
18001803
`const listener=stream[1]\n` +
18011804
(hasTrace || hooks.afterResponse?.length
18021805
? `afterHandlerStreamListener=stream[2]\n`

test/response/stream.test.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { describe, it, expect } from 'bun:test'
1+
import { describe, expect, it } from 'bun:test'
22
import { req } from '../utils'
33

44
import { Elysia, sse } from '../../src'
@@ -560,4 +560,39 @@ describe('Stream', () => {
560560
expect(result).toEqual(['Elysia', 'Eden'].map((x) => `data: ${x}\n\n`))
561561
expect(response.headers.get('content-type')).toBe('text/event-stream')
562562
})
563+
564+
it('handle sse with plugin global hooks and trace', async () => {
565+
const PluginA = () =>
566+
new Elysia({ name: 'PluginA' })
567+
.onBeforeHandle(() => {})
568+
.onAfterHandle(() => {})
569+
.onParse(() => {})
570+
.onTransform(() => {})
571+
.onError(() => {})
572+
.onAfterResponse(() => {})
573+
.onStart(() => {})
574+
.onStop(() => {})
575+
.onRequest(() => {})
576+
.trace(() => {})
577+
.as('global')
578+
579+
const app = new Elysia().use(PluginA()).get('/sse', async function* () {
580+
yield sse({ event: 'message', data: { meow: '1' } })
581+
yield sse({ event: 'message', data: { meow: '2' } })
582+
yield sse({ event: 'message', data: { meow: '3' } })
583+
})
584+
585+
const response = await app.handle(req('/sse'))
586+
expect(response.headers.get('content-type')).toBe('text/event-stream')
587+
588+
const result = []
589+
590+
for await (const chunk of streamResponse(response)) result.push(chunk)
591+
expect(result).toHaveLength(3)
592+
expect(result).toEqual([
593+
'event: message\ndata: {"meow":"1"}\n\n',
594+
'event: message\ndata: {"meow":"2"}\n\n',
595+
'event: message\ndata: {"meow":"3"}\n\n'
596+
])
597+
})
563598
})

0 commit comments

Comments
 (0)