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; }