import type { ServerResponse } from 'node:http' export const reloadScript = `` export function createReloadChannel() { const clients = new Set() let heartbeat: ReturnType | undefined let closed = false function stopHeartbeat() { clearInterval(heartbeat) heartbeat = undefined } return { add(response: ServerResponse) { if (closed) { response.writeHead(503).end() return } response.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', }) response.write('event: connected\ndata: ready\n\n') clients.add(response) response.once('close', () => { clients.delete(response) if (!clients.size) stopHeartbeat() }) if (!heartbeat) { heartbeat = setInterval(() => { for (const client of clients) client.write('event: ping\ndata: waiting\n\n') }, 30000) heartbeat.unref() } }, reload() { if (!closed) { for (const client of clients) client.write('data: reload\n\n') } }, close() { closed = true stopHeartbeat() for (const client of clients) client.end() clients.clear() }, } }