UNPKG

assistant-stream

Version:

Streaming utilities for AI assistants

44 lines (43 loc) • 1.65 kB
import { SSEEventDecoderStream } from "./SSEEventDecoderStream.js"; // src/core/utils/stream/SSEJson.ts const SSE_HEADERS = { "Content-Type": "text/event-stream", "Cache-Control": "no-cache", Connection: "keep-alive" }; const createSSEJsonEncoder = (doneMarker) => (readable) => readable.pipeThrough(new TransformStream({ transform(chunk, controller) { controller.enqueue(`data: ${JSON.stringify(chunk)}\n\n`); }, flush(controller) { if (doneMarker !== void 0) controller.enqueue(`data: ${doneMarker}\n\n`); } })).pipeThrough(new TextEncoderStream()); const createSSEJsonDecoder = (options) => (readable) => { let receivedDone = false; const done = options.done; return readable.pipeThrough(new TextDecoderStream("utf-8", { ignoreBOM: true })).pipeThrough(new SSEEventDecoderStream({ maxLineLength: options.maxLineLength, maxEventLength: options.maxEventLength, stopAfter: done ? (event) => (event.event || "message") === "message" && event.data === done.marker : void 0 })).pipeThrough(new TransformStream({ transform(event, controller) { if (event.event !== "message") { if (options.strict !== false) throw new Error(`Unknown SSE event type: ${event.event}`); options.onUnknownEvent?.(event.event); return; } if (options.done !== void 0 && event.data === options.done.marker) { receivedDone = true; controller.terminate(); return; } options.parse(event.data, controller); }, flush() { if (options.done !== void 0 && !receivedDone) options.done.onMissing?.(); } })); }; export { SSE_HEADERS, createSSEJsonDecoder, createSSEJsonEncoder }; //# sourceMappingURL=SSEJson.js.map