import path from 'node:path'; import tailwindcss from '@tailwindcss/vite'; import react from '@vitejs/plugin-react'; import {defineConfig, loadEnv} from 'vite'; export default defineConfig(({mode}) => { const env = loadEnv(mode, __dirname, ''); const ignoredWatchGlobs = [ '**/dist/**', '**/dist_check/**', '**/dist_check_final/**', '**/dist_check_monster_position/**', '**/temp*build*/**', '**/public/generated-character-drafts/**', '**/public/generated-characters/**', '**/public/generated-custom-world-scenes/**', '**/public/generated-qwen-sprites/**', '**/backend-rewrite-tasklist/**', '**/docs/**', '**/jenkins/**', '**/media/**', '**/scripts/**', '**/server-rs/**', '**/*.test.ts', '**/*.test.tsx', '**/*.spec.ts', '**/*.spec.tsx', ]; const rustServerTarget = env.RUST_SERVER_TARGET || env.GENARRATIVE_API_TARGET || `http://127.0.0.1:${env.GENARRATIVE_API_PORT || '3100'}`; const runtimeServerTarget = env.GENARRATIVE_RUNTIME_SERVER_TARGET || rustServerTarget; return { root: __dirname, envDir: __dirname, plugins: [ react(), tailwindcss(), ], define: { 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY), }, resolve: { alias: { '@': path.resolve(__dirname, '.'), }, }, optimizeDeps: { // Only crawl the real app entry so temporary build folders do not get // treated as extra HTML entrypoints during dependency scanning. entries: ['index.html'], }, build: { chunkSizeWarningLimit: 800, }, server: { // HMR is disabled in AI Studio via DISABLE_HMR env var. // Do not modify; file watching is disabled to prevent flickering during agent edits. hmr: process.env.DISABLE_HMR !== 'true', proxy: { '/generated-character-drafts': { target: runtimeServerTarget, changeOrigin: true, secure: false, }, '/generated-characters': { target: runtimeServerTarget, changeOrigin: true, secure: false, }, '/generated-animations': { target: runtimeServerTarget, changeOrigin: true, secure: false, }, '/generated-custom-world-scenes': { target: runtimeServerTarget, changeOrigin: true, secure: false, }, '/generated-custom-world-covers': { target: runtimeServerTarget, changeOrigin: true, secure: false, }, '/generated-qwen-sprites': { target: runtimeServerTarget, changeOrigin: true, secure: false, }, '/api/auth': { target: runtimeServerTarget, changeOrigin: true, secure: false, }, '/api/runtime': { target: runtimeServerTarget, changeOrigin: true, secure: false, }, '/api/story': { target: runtimeServerTarget, changeOrigin: true, secure: false, }, '/api/editor': { target: runtimeServerTarget, changeOrigin: true, secure: false, }, '/api/assets': { target: runtimeServerTarget, changeOrigin: true, secure: false, }, '/api/custom-world': { target: runtimeServerTarget, changeOrigin: true, secure: false, }, '/api/llm': { target: runtimeServerTarget, changeOrigin: true, secure: false, }, '/api/ws': { target: runtimeServerTarget, changeOrigin: true, secure: false, ws: true, }, }, watch: { ignored: ignoredWatchGlobs, }, }, }; });