UNPKG

wxt

Version:

⚡ Next-gen Web Extension Framework

64 lines (61 loc) 2.02 kB
function print(method, ...args) { if (import.meta.env.MODE === "production") return; if (typeof args[0] === "string") { const message = args.shift(); method(`[wxt] ${message}`, ...args); } else { method("[wxt]", ...args); } } const logger = { debug: (...args) => print(console.debug, ...args), log: (...args) => print(console.log, ...args), warn: (...args) => print(console.warn, ...args), error: (...args) => print(console.error, ...args) }; let ws; function getDevServerWebSocket() { if (import.meta.env.COMMAND !== "serve") throw Error( "Must be running WXT dev command to connect to call getDevServerWebSocket()" ); if (ws == null) { const serverUrl = __DEV_SERVER_ORIGIN__; logger.debug("Connecting to dev server @", serverUrl); ws = new WebSocket(serverUrl, "vite-hmr"); ws.addWxtEventListener = ws.addEventListener.bind(ws); ws.sendCustom = (event, payload) => ws?.send(JSON.stringify({ type: "custom", event, payload })); ws.addEventListener("open", () => { logger.debug("Connected to dev server"); }); ws.addEventListener("close", () => { logger.debug("Disconnected from dev server"); }); ws.addEventListener("error", (event) => { logger.error("Failed to connect to dev server", event); }); ws.addEventListener("message", (e) => { try { const message = JSON.parse(e.data); if (message.type === "custom") { ws?.dispatchEvent( new CustomEvent(message.event, { detail: message.data }) ); } } catch (err) { logger.error("Failed to handle message", err); } }); } return ws; } if (import.meta.env.COMMAND === "serve") { try { const ws = getDevServerWebSocket(); ws.addWxtEventListener("wxt:reload-page", (event) => { if (event.detail === location.pathname.substring(1)) location.reload(); }); } catch (err) { logger.error("Failed to setup web socket connection with dev server", err); } }