Files
next-tjwater-drainage-frontend/vite.config.ts
T

88 lines
2.8 KiB
TypeScript

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";
const RUNTIME_CONFIG_PATH = "/runtime-config.js";
function renderRuntimeConfig(values: Record<string, string>) {
const config = {
DRAINAGE_MAPBOX_ACCESS_TOKEN:
values.DRAINAGE_MAPBOX_ACCESS_TOKEN || values.NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN || "",
DRAINAGE_MAP_URL:
values.DRAINAGE_MAP_URL ||
values.NEXT_PUBLIC_MAP_URL ||
"https://geoserver.waternetwork.cn/geoserver",
DRAINAGE_GEOSERVER_WORKSPACE:
values.DRAINAGE_GEOSERVER_WORKSPACE || values.NEXT_PUBLIC_GEOSERVER_WORKSPACE || "wenzhou",
DRAINAGE_AGENT_API_BASE_URL:
values.DRAINAGE_AGENT_API_BASE_URL ||
values.NEXT_PUBLIC_AGENT_API_BASE_URL ||
"http://127.0.0.1:8787",
DRAINAGE_TTS_API_URL: values.DRAINAGE_TTS_API_URL || "/api/tts/edge",
DRAINAGE_ENABLE_DEV_PANEL:
values.DRAINAGE_ENABLE_DEV_PANEL || values.NEXT_PUBLIC_ENABLE_DEV_PANEL || "false",
DRAINAGE_ENABLE_MSW: values.DRAINAGE_ENABLE_MSW || "false"
};
return `globalThis.__DRAINAGE_CONFIG__ = ${JSON.stringify(config)};\n`;
}
function runtimeConfigPlugin(values: Record<string, string>): Plugin {
const installMiddleware = (server: ViteDevServer | PreviewServer) => {
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: "drainage-runtime-config",
configureServer: installMiddleware,
configurePreviewServer: installMiddleware
};
}
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), "");
const agentBaseUrl =
env.AGENT_API_INTERNAL_BASE_URL ||
env.DRAINAGE_AGENT_API_BASE_URL ||
env.NEXT_PUBLIC_AGENT_API_BASE_URL ||
"http://127.0.0.1:8787";
const ttsBaseUrl = env.TTS_API_INTERNAL_BASE_URL || "http://127.0.0.1:8790";
return {
plugins: [runtimeConfigPlugin(env), react(), tailwindcss()],
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url))
}
},
server: {
proxy: {
"/api/v1/agent/chat": {
target: agentBaseUrl,
changeOrigin: true
},
"/api/tts/edge": {
target: ttsBaseUrl,
changeOrigin: true
}
}
},
test: {
environment: "jsdom",
globals: true,
setupFiles: ["./src/test/setup.ts"]
}
};
});