import { useRuntimeConfig, refreshNuxtData } from "#imports"; const logger = { log: (...args) => console.log("[Content]", ...args), warn: (...args) => console.warn("[Content]", ...args) }; let ws; export function useContentWebSocket() { if (!window.WebSocket) { logger.warn("Could not enable hot reload, your browser does not support WebSocket."); return; } const onMessage = (message) => { try { const data = JSON.parse(message.data); if (!data) { return; } refreshNuxtData(); } catch { } }; const onOpen = () => logger.log("WS connected!"); const onError = (e) => { switch (e.code) { case "ECONNREFUSED": connect(true); break; default: logger.warn("WS Error:", e); break; } }; const onClose = (e) => { if (e.code === 1e3 || e.code === 1005) { logger.log("WS closed!"); } else { connect(true); } }; const connect = (retry = false) => { if (retry) { logger.log("WS reconnecting.."); setTimeout(connect, 1e3); return; } if (ws) { try { ws.close(); } catch { } ws = void 0; } const wsURL = `${useRuntimeConfig().public.content.wsUrl}ws`; logger.log(`WS connect to ${wsURL}`); ws = new WebSocket(wsURL); ws.onopen = onOpen; ws.onmessage = onMessage; ws.onerror = onError; ws.onclose = onClose; }; connect(); return { connect }; }