testing/transports/sse_frame_reader.ts

SSE frame reader over a ReadableStreamDefaultReader<Uint8Array>.

Transport-agnostic core shared by the in-process SSE route suite (testing/sse_round_trip.ts, reading a Hono Response.body) and the cross-process transports/sse_transport.ts (reading a streaming fetch body): \n\n-delimited framing, a per-read timeout (so vitest can't hang on a stalled stream), and wait_for_close for server-initiated close detection (the auth-guard revocation seam).

view source

Declarations
#

3 declarations

create_sse_frame_reader
#

testing/transports/sse_frame_reader.ts view source

(reader: ReadableStreamDefaultReader<Uint8Array<ArrayBufferLike>>, default_timeout_ms?: number): SseFrameReader import {create_sse_frame_reader} from '@fuzdev/fuz_app/testing/transports/sse_frame_reader.js';

Wrap a byte-stream reader in \n\n-delimited SSE frame parsing.

Preserves bytes past a frame terminator in an internal buffer for the next read_frame. read_frame and wait_for_close both race each underlying read against timeout_ms so a misbehaving stream surfaces as a failure rather than a vitest hang.

reader

type ReadableStreamDefaultReader<Uint8Array<ArrayBufferLike>>

default_timeout_ms

type number
default SSE_FRAME_READ_TIMEOUT_MS

returns

SseFrameReader

SSE_FRAME_READ_TIMEOUT_MS
#

SseFrameReader
#

testing/transports/sse_frame_reader.ts view source

SseFrameReader import type {SseFrameReader} from '@fuzdev/fuz_app/testing/transports/sse_frame_reader.js';

Frame-level reader returned by create_sse_frame_reader.

read_frame

Read one complete SSE frame (up to the next \n\n), without the trailing terminator. Throws if the per-read timeout elapses or the stream ends before a frame arrives.

type (timeout_ms?: number) => Promise<string>

wait_for_close

Drain until the server closes the stream. Resolves true if the stream closes within timeout_ms, false on timeout.

type (timeout_ms?: number) => Promise<boolean>

cancel

Cancel the underlying reader. Safe to call when already closed.

type () => Promise<void>

Depends on
#

Imported by
#