Files

54 lines
2.3 KiB
TypeScript

import { defineConfig, loadEnv, type ViteDevServer } from "vite";
import react from "@vitejs/plugin-react";
import path from "node:path";
import { createB1ReadApiMiddleware } from "./src/shared/api/b1ReadBackend.ts";
export default defineConfig(({ command, mode }) => {
const env = loadEnv(mode, process.cwd(), "");
const configuredClientMode = process.env.VITE_PROJECTBRAIN_CLIENT_MODE ?? env.VITE_PROJECTBRAIN_CLIENT_MODE;
const productionBuild = command === "build" && mode === "production";
if (productionBuild && configuredClientMode === "mock") {
throw new Error("Production builds cannot enable VITE_PROJECTBRAIN_CLIENT_MODE=mock.");
}
const realMode = configuredClientMode === "real" || (productionBuild && configuredClientMode === undefined);
return {
server: {
host: "::",
port: 8080,
...(process.env.CI ? { watch: { usePolling: true, interval: 500 } } : {}),
...(realMode ? { proxy: { "/api": { target: env.PROJECTBRAIN_DEV_API_TARGET || "http://127.0.0.1:4000", changeOrigin: false } } } : {}),
},
plugins: [
react(),
...(!realMode ? [{
name: "projectbrain-b1-read-api",
configureServer(server: ViteDevServer) {
server.middlewares.use(createB1ReadApiMiddleware());
},
}] : []),
],
resolve: {
alias: {
"@": path.resolve(import.meta.dirname, "./src"),
},
},
build: {
rolldownOptions: {
checks: { pluginTimings: false },
output: {
manualChunks(id) {
if (!id.includes("node_modules")) return undefined;
if (id.includes("react-router-dom")) return "vendor-router";
if (id.includes("@radix-ui") || id.includes("lucide-react") || id.includes("cmdk") || id.includes("sonner")) return "vendor-ui";
if (id.includes("recharts")) return "vendor-charts";
if (id.includes("@tanstack/react-query")) return "vendor-query";
if (/node_modules[\\/]\.pnpm[\\/](react|react-dom|scheduler)@/.test(id) || /node_modules[\\/](react|react-dom|scheduler)[\\/]/.test(id)) return "vendor-react";
if (id.includes("react-day-picker") || id.includes("react-hook-form") || id.includes("react-resizable-panels")) return "vendor-forms";
return "vendor";
},
},
},
},
};
});