import { EventMessage } from "fastify"; export async function* transformAsyncIterable( source: AsyncIterable ): AsyncIterable { for await (const message of source) { yield serializeSSEEvent(message); } } 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) { for (const line of chunk.data.split("\n")) { payload += `data: ${line}\n`; } } if (chunk.retry) { payload += `retry: ${chunk.retry}\n`; } if (chunk.comment) { payload += `:${chunk.comment}\n`; } if (!payload) { return ""; } payload += "\n"; return payload; }