fix: support CRLF SSE frame parsing (#223)

This commit is contained in:
Alan
2026-04-09 21:52:28 +08:00
committed by GitHub
parent 87230cf3bf
commit bb07836231
2 changed files with 65 additions and 6 deletions

View File

@@ -0,0 +1,49 @@
import { describe, expect, test } from 'bun:test'
import { parseSSEFrames } from '../SSETransport.js'
describe('parseSSEFrames', () => {
test('parses LF-delimited frames', () => {
const input = 'event: client_event\ndata: {"ok":true}\n\n'
const { frames, remaining } = parseSSEFrames(input)
expect(remaining).toBe('')
expect(frames).toEqual([
{
event: 'client_event',
data: '{"ok":true}',
},
])
})
test('parses CRLF-delimited frames and strips trailing carriage returns', () => {
const input =
'event: client_event\r\ndata: {"ok":true}\r\nid: 7\r\n\r\nevent: keepalive\r\ndata: ping\r\n\r\n'
const { frames, remaining } = parseSSEFrames(input)
expect(remaining).toBe('')
expect(frames).toEqual([
{
event: 'client_event',
data: '{"ok":true}',
id: '7',
},
{
event: 'keepalive',
data: 'ping',
},
])
})
test('keeps incomplete trailing frame in remaining buffer for CRLF streams', () => {
const input = 'event: client_event\r\ndata: {"ok":true}\r\n\r\ndata: {"tail":1}\r\n'
const { frames, remaining } = parseSSEFrames(input)
expect(frames).toEqual([
{
event: 'client_event',
data: '{"ok":true}',
},
])
expect(remaining).toBe('data: {"tail":1}\r\n')
})
})