UNPKG

wxt

Version:

⚡ Next-gen Web Extension Framework

61 lines (60 loc) 2.1 kB
//#region src/utils/internal/logger.ts function print(method, ...args) { if (import.meta.env.MODE === "production") return; if (typeof args[0] === "string") method(`[wxt] ${args.shift()}`, ...args); else method("[wxt]", ...args); } /** Wrapper around `console` with a "[wxt]" prefix */ 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) }; //#endregion //#region src/utils/internal/dev-server-websocket.ts let ws; /** Connect to the websocket and listen for messages. */ 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; } //#endregion //#region src/virtual/reload-html.ts if (import.meta.env.COMMAND === "serve") try { getDevServerWebSocket().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); } //#endregion export {};