123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /* eslint-disable */
- (function () {
- 'use strict';
- // This is the custom ID for HMR (chrome-extension/vite.config.mts)
- const __HMR_ID = 'chrome-extension-hmr';
- const LOCAL_RELOAD_SOCKET_PORT = 8081;
- const LOCAL_RELOAD_SOCKET_URL = `ws://localhost:${LOCAL_RELOAD_SOCKET_PORT}`;
- const DO_UPDATE = 'do_update';
- const DONE_UPDATE = 'done_update';
- class MessageInterpreter {
- // eslint-disable-next-line @typescript-eslint/no-empty-function
- constructor() {}
- static send(message) {
- return JSON.stringify(message);
- }
- static receive(serializedMessage) {
- return JSON.parse(serializedMessage);
- }
- }
- function initClient({ id, onUpdate }) {
- const ws = new WebSocket(LOCAL_RELOAD_SOCKET_URL);
- ws.onopen = () => {
- ws.addEventListener('message', event => {
- const message = MessageInterpreter.receive(String(event.data));
- if (message.type === DO_UPDATE && message.id === id) {
- onUpdate();
- ws.send(MessageInterpreter.send({ type: DONE_UPDATE }));
- return;
- }
- });
- };
- }
- function addRefresh() {
- let pendingReload = false;
- initClient({
- id: __HMR_ID,
- onUpdate: () => {
- // disable reload when tab is hidden
- if (document.hidden) {
- pendingReload = true;
- return;
- }
- reload();
- },
- });
- // reload
- function reload() {
- pendingReload = false;
- window.location.reload();
- }
- // reload when tab is visible
- function reloadWhenTabIsVisible() {
- !document.hidden && pendingReload && reload();
- }
- document.addEventListener('visibilitychange', reloadWhenTabIsVisible);
- }
- addRefresh();
- })();
|