diff --git a/vite.config.ts b/vite.config.ts index 2a9d670..dccd397 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -20,6 +20,43 @@ export default defineConfig({ 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"),