88 lines
2.8 KiB
TypeScript
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"]
|
|
}
|
|
};
|
|
});
|