import tailwindcss from "@tailwindcss/vite"; import react from "@vitejs/plugin-react-swc"; import { defineConfig, loadEnv, type Plugin, type PreviewServer, type ViteDevServer } from "vite"; import { fileURLToPath, URL } from "node:url"; import { createEdgeTtsMiddleware } from "./server/edge-tts-service"; const RUNTIME_CONFIG_PATH = "/runtime-config.js"; function renderRuntimeConfig(values: Record) { const config = { TJWATER_MAPBOX_ACCESS_TOKEN: values.TJWATER_MAPBOX_ACCESS_TOKEN || "", TJWATER_MAP_URL: values.TJWATER_MAP_URL || "https://geoserver.waternetwork.cn/geoserver", TJWATER_GEOSERVER_WORKSPACE: values.TJWATER_GEOSERVER_WORKSPACE || "tjwater", TJWATER_AGENT_API_BASE_URL: values.TJWATER_AGENT_API_BASE_URL || "http://127.0.0.1:8787", TJWATER_ENABLE_DEV_PANEL: values.TJWATER_ENABLE_DEV_PANEL || "false", TJWATER_ENABLE_MSW: values.TJWATER_ENABLE_MSW || "false" }; return `globalThis.__TJWATER_CONFIG__ = ${JSON.stringify(config)};\n`; } function runtimeConfigPlugin(values: Record): Plugin { const installMiddleware = (server: ViteDevServer | PreviewServer) => { server.middlewares.use(createEdgeTtsMiddleware()); server.middlewares.use((request, response, next) => { if (request.url?.split("?", 1)[0] !== RUNTIME_CONFIG_PATH) { next(); return; } response.statusCode = 200; response.setHeader("Content-Type", "application/javascript; charset=utf-8"); response.setHeader("Cache-Control", "no-store"); response.end(renderRuntimeConfig(values)); }); }; return { name: "tjwater-runtime-config", configureServer: installMiddleware, configurePreviewServer: installMiddleware }; } export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd(), ""); return { plugins: [runtimeConfigPlugin(env), react(), tailwindcss()], resolve: { alias: { "@": fileURLToPath(new URL("./src", import.meta.url)) } }, test: { environment: "jsdom", globals: true, setupFiles: ["./src/test/setup.ts"] } }; });