import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import path from 'path' import { visualEditPlugin } from './vite-plugins/visual-edit-plugin.js' import { errorOverlayPlugin } from './vite-plugins/error-overlay-plugin.js' // https://vite.dev/config/ export default defineConfig(({ mode }) => { return { plugins: [ mode === 'development' && visualEditPlugin(), react(), errorOverlayPlugin(), { name: 'iframe-hmr', configureServer(server) { server.middlewares.use((req, res, next) => { // Allow iframe embedding res.setHeader('X-Frame-Options', 'ALLOWALL'); res.setHeader('Content-Security-Policy', "frame-ancestors *;"); next(); }); } } ].filter(Boolean), server: { host: '0.0.0.0', // Bind to all interfaces for container access port: 5174, strictPort: true, // Allow all hosts - essential for Modal tunnel URLs allowedHosts: true, watch: { // Enable polling for better file change detection in containers usePolling: true, interval: 100, // Check every 100ms for responsive HMR }, hmr: { protocol: 'wss', clientPort: 443 } }, resolve: { alias: { '@': path.resolve(__dirname, './src'), }, extensions: ['.mjs', '.js', '.jsx', '.ts', '.tsx', '.json'] }, optimizeDeps: { include: ['react', 'react-dom'], esbuildOptions: { loader: { '.js': 'jsx', }, }, } } });