From fbe802fc4ebd9eed864a5231e33b17e490b04067 Mon Sep 17 00:00:00 2001 From: denis0001-dev Date: Thu, 28 Aug 2025 16:34:43 +0300 Subject: [PATCH] Fix HMR --- frontend/src/userPanel/settings.ts | 1 + frontend/vite.config.ts | 33 ++++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/frontend/src/userPanel/settings.ts b/frontend/src/userPanel/settings.ts index d4980d1..bd58b30 100644 --- a/frontend/src/userPanel/settings.ts +++ b/frontend/src/userPanel/settings.ts @@ -62,6 +62,7 @@ function handleListItemClick(item: Element): void { function resetToFirstPanel(): void { const firstItem = settingsList.querySelector('mdui-list-item'); const firstPanel = document.querySelector('.settings-panel'); + if (firstItem && firstPanel) { settingsList.querySelectorAll('mdui-list-item').forEach(li => li.removeAttribute('active')); settingsPanels.forEach(panel => panel.classList.remove('active')); diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 36730dc..5771b3e 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -1,9 +1,34 @@ -import { defineConfig, PluginOption } from 'vite'; -import { createHtmlPlugin } from 'vite-plugin-html'; -import autoprefixer from 'autoprefixer'; -import electron from 'vite-plugin-electron/simple'; +import { defineConfig, PluginOption } from "vite"; +import { createHtmlPlugin } from "vite-plugin-html"; +import autoprefixer from "autoprefixer"; +import electron from "vite-plugin-electron/simple"; + +function hmrAutoAcceptPlugin(): PluginOption { + const injectionLine = "if(import.meta.hot){import.meta.hot.accept()}"; + const fileRegex = /\.(m?jsx?|tsx?)$/; + + return { + name: "hmr-auto-accept", + apply: "serve", + enforce: "post", + transform(code, id) { + if (!fileRegex.test(id)) return null; + if (id.endsWith(".d.ts")) return null; + if (id.includes("node_modules")) return null; + if (id.startsWith("\0") || id.includes("virtual:") || id.includes("/@vite/")) return null; + if (code.includes("import.meta.hot.accept()")) return null; + + if (!code.endsWith("\n")) { + code += "\n"; + } + code += injectionLine; + return { code: code, map: null }; + }, + }; +} const plugins: PluginOption[] = [ + hmrAutoAcceptPlugin(), createHtmlPlugin({ minify: { collapseWhitespace: true,