93 lines
3.2 KiB
TypeScript
93 lines
3.2 KiB
TypeScript
import path from "path"
|
|
import tailwindcss from "@tailwindcss/vite"
|
|
import react from "@vitejs/plugin-react"
|
|
import {defineConfig, type Plugin} from "vite"
|
|
|
|
function tailwindEscapeFix(): Plugin {
|
|
return {
|
|
name: "tailwind-escape-fix",
|
|
enforce: "pre",
|
|
async transform(code, id) {
|
|
if (id.endsWith(".css")) {
|
|
return code.replace(/(\d)::(\d)(px|rem|em|%|vh|vw|ms|s)/g, "$1.$2$3")
|
|
}
|
|
},
|
|
}
|
|
}
|
|
|
|
export default defineConfig({
|
|
plugins: [tailwindcss(), tailwindEscapeFix(), react()],
|
|
optimizeDeps: {
|
|
entries: ["src/**/*.{ts,tsx}"],
|
|
},
|
|
build: {
|
|
rollupOptions: {
|
|
output: {
|
|
manualChunks(id: string) {
|
|
if (id.includes("node_modules")) {
|
|
// React + deps that import React — keep together to avoid circular deps
|
|
if (id.includes("react-dom") || id.includes("react-router-dom") || id.includes("scheduler") || id.includes("@tanstack/react-query")) {
|
|
return "vendor-react";
|
|
}
|
|
if (id.includes("react-markdown") || id.includes("remark-gfm") || id.includes("rehype-raw") || id.includes("rehype-sanitize")) {
|
|
return "vendor-markdown";
|
|
}
|
|
if (id.includes("lucide-react")) {
|
|
return "vendor-lucide";
|
|
}
|
|
if (id.includes("motion")) {
|
|
return "vendor-motion";
|
|
}
|
|
if (id.includes("recharts")) {
|
|
return "vendor-recharts";
|
|
}
|
|
// Streamdown + diagram deps — keep together to avoid circular deps
|
|
if (id.includes("streamdown") || id.includes("@streamdown") || id.includes("cytoscape") || id.includes("d3-") || id.includes("dagre")) {
|
|
return "vendor-streamdown";
|
|
}
|
|
if (id.includes("@tanstack/react-table")) {
|
|
return "vendor-table";
|
|
}
|
|
if (id.includes("radix-ui")) {
|
|
return "vendor-radix";
|
|
}
|
|
}
|
|
},
|
|
},
|
|
},
|
|
chunkSizeWarningLimit: 400,
|
|
},
|
|
resolve: {
|
|
alias: {
|
|
"@": path.resolve(__dirname, "./src"),
|
|
},
|
|
dedupe: ["react", "react-dom"],
|
|
},
|
|
server: {
|
|
host: true,
|
|
port: 5080,
|
|
fs: {
|
|
deny: ["**/target/**"],
|
|
},
|
|
watch: {
|
|
ignored: ["**/libs/**", "**/target/**"],
|
|
},
|
|
hmr: {
|
|
host: "localhost",
|
|
port: 5080,
|
|
protocol: "ws",
|
|
},
|
|
proxy: {
|
|
"/api": {
|
|
target: "http://localhost:8080",
|
|
changeOrigin: true,
|
|
},
|
|
"/ws": {
|
|
target: "ws://localhost:8080",
|
|
changeOrigin: true,
|
|
ws: true,
|
|
},
|
|
},
|
|
},
|
|
})
|