import react from '@vitejs/plugin-react-swc'; import { resolve } from 'node:path'; import * as process from 'node:process'; import { defineConfig } from 'vite'; const isProduction = process.env.NODE_ENV === 'production'; const SD_HOST = '127.0.0.1'; const SD_PORT = 7860; export default defineConfig({ base: '/dev', build: { cssMinify: true, minify: 'terser', outDir: './javascript', rollupOptions: { input: resolve(__dirname, 'src/main.tsx'), output: { assetFileNames: `[name].[ext]`, chunkFileNames: `[name].js`, entryFileNames: `[name].js`, }, }, }, define: { 'process.env': process.env, }, plugins: [ react(), !isProduction && { configureServer: (server) => { server.middlewares.use((_request, res, next) => { res.setHeader('Cross-Origin-Embedder-Policy', 'unsafe-none'); res.setHeader('Cross-Origin-Opener-Policy', 'unsafe-non'); next(); }); }, name: 'configure-response-headers', }, !isProduction && { configureServer: (server) => { server.middlewares.use(async (_request, res, next): Promise => { if ( _request.originalUrl === '/dev' || _request.originalUrl === '/dev?__theme=dark' || _request.originalUrl === '/dev?__theme=light' ) { const response = await fetch(`http://${SD_HOST}:${SD_PORT}/`); let updatedResponse = await response.text(); const toAdd = ` `; updatedResponse = updatedResponse.replace('', `${toAdd}`); res.statusCode = 200; res.setHeader('Content-Type', 'text/html'); res.setHeader('charset', 'utf8'); res.end(updatedResponse); return; } next(); }); }, name: 'route-default-to-index', }, ], resolve: { alias: { '@': resolve(__dirname, 'src'), }, }, server: { host: '127.0.0.1', port: 8000, proxy: { '/queue/join': { target: `ws://${SD_HOST}:${SD_PORT}`, ws: true, }, '^(?!.*dev).*$': `http://${SD_HOST}:${SD_PORT}`, }, }, });