import assert from "node:assert/strict"; import { test } from "node:test"; import { parseSse } from "../src/lib/sse"; test("parseSse extracts event + data blocks separated by blank lines", () => { const { messages, rest } = parseSse('event:message\ndata:{"a":1}\n\nevent:message\ndata:hello\n\n'); assert.equal(rest, ""); assert.equal(messages.length, 2); assert.equal(messages[0].event, "message"); assert.equal(messages[0].data, '{"a":1}'); assert.equal(messages[1].data, "hello"); }); test("parseSse keeps a trailing partial event in rest", () => { const { messages, rest } = parseSse("event:message\ndata:par"); assert.equal(messages.length, 0); assert.equal(rest, "event:message\ndata:par"); }); test("parseSse joins multi-line data fields with newline", () => { const { messages } = parseSse("data:line1\ndata:line2\n\n"); assert.equal(messages.length, 1); assert.equal(messages[0].data, "line1\nline2"); }); test("parseSse normalizes CRLF-delimited events", () => { const { messages, rest } = parseSse("data:hello\r\n\r\n"); assert.equal(rest, ""); assert.equal(messages.length, 1); assert.equal(messages[0].data, "hello"); });