Initial Commit

This commit is contained in:
2026-05-27 23:29:53 +01:00
commit fbc70f96e6
10000 changed files with 1102152 additions and 0 deletions

View File

@@ -0,0 +1,68 @@
import { describe, expect, it } from "@suaveplan/testing/runner";
import { SSE_BUN_CODES, SseBunError } from "../error-codes/error-codes.js";
import {
encodeComment,
encodeSseEvent,
encodeStreamPrologue,
} from "./sse-stream.js";
const dec = (bytes: Uint8Array): string => new TextDecoder().decode(bytes);
describe("stream.encodeSseEvent", () => {
it("emits id, event, data lines for a basic event", () => {
const out = dec(
encodeSseEvent(
{ id: "1", event: "ping", data: "hello" },
{ maxEventBytes: 1024 }
)
);
expect(out).toBe("id: 1\nevent: ping\ndata: hello\n\n");
}, 5000);
it("omits event line when undefined and includes retry when supplied", () => {
const out = dec(
encodeSseEvent(
{ id: "2", data: "x", retry: 5000 },
{ maxEventBytes: 1024 }
)
);
expect(out).toBe("id: 2\nretry: 5000\ndata: x\n\n");
}, 5000);
it("splits multi-line data into one data: line per chunk", () => {
const out = dec(
encodeSseEvent(
{ id: "3", data: "a\nb\nc" },
{ maxEventBytes: 1024 }
)
);
expect(out).toBe("id: 3\ndata: a\ndata: b\ndata: c\n\n");
}, 5000);
it("throws EVENT_TOO_LARGE when encoded bytes exceed cap", () => {
try {
encodeSseEvent(
{ id: "4", data: "x".repeat(1000) },
{ maxEventBytes: 100 }
);
expect.fail("expected throw");
} catch (err) {
expect(err).toBeInstanceOf(SseBunError);
expect((err as SseBunError).code).toBe(
SSE_BUN_CODES.EVENT_TOO_LARGE
);
}
}, 5000);
});
describe("stream.encodeStreamPrologue", () => {
it("emits retry directive then blank line", () => {
expect(dec(encodeStreamPrologue(3000))).toBe("retry: 3000\n\n");
}, 5000);
});
describe("stream.encodeComment", () => {
it("emits a colon-prefixed comment terminated by a blank line", () => {
expect(dec(encodeComment("keepalive"))).toBe(":keepalive\n\n");
}, 5000);
});