wxt
Version:
⚡ Next-gen Web Extension Framework
38 lines (37 loc) • 1.26 kB
JavaScript
import { logger } from "./logger.mjs";
let ws;
export 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;
}