@waylaidwanderer/fastify-sse-v2
Version:
Fastify plugin for sending server side events.
32 lines (29 loc) • 754 B
text/typescript
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;
}