wxt
Version:
⚡ Next-gen Web Extension Framework
61 lines (60 loc) • 2.1 kB
JavaScript
//#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 {};