UNPKG

@waylaidwanderer/fastify-sse-v2

Version:
32 lines (29 loc) 754 B
import { EventMessage } from "fastify"; export async function* transformAsyncIterable( source: AsyncIterable<EventMessage> ): AsyncIterable<string> { for await (const message of source) { yield serializeSSEEvent(message); } yield serializeSSEEvent({ event: "end", data: "Stream closed" }); } export function serializeSSEEvent(chunk: EventMessage): string { let payload = ""; if (chunk.id) { payload += `id: ${chunk.id}\n`; } if (chunk.event) { payload += `event: ${chunk.event}\n`; } if (chunk.data) { payload += `data: ${chunk.data}\n`; } if (chunk.retry) { payload += `retry: ${chunk.retry}\n`; } if (!payload) { return ""; } payload += "\n"; return payload; }