import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import tailwindcss from '@tailwindcss/vite' import path from 'path' // https://vite.dev/config/ export default defineConfig({ plugins: [ react(), tailwindcss(), ], esbuild: { drop: ['console', 'debugger'], } as unknown as import('vite').ESBuildOptions, base: './', resolve: { alias: { "@": path.resolve(__dirname, "./src"), }, }, build: { rollupOptions: { output: { entryFileNames: `assets/[name].js`, chunkFileNames: `assets/[name]-[hash].js`, assetFileNames: `assets/[name].[ext]`, manualChunks(id) { if (id.includes('node_modules')) { if (id.includes('react') || id.includes('react-dom') || id.includes('scheduler')) return 'react-core'; if (id.includes('firebase')) return 'firebase'; if (id.includes('grapesjs')) return 'editor-core'; if (id.includes('mermaid')) return 'mermaid-core'; if (id.includes('shiki')) return 'shiki-syntax'; if (id.includes('cytoscape')) return 'graph-core'; if (id.includes('recharts') || id.includes('d3')) return 'charts'; if (id.includes('framer-motion') || id.includes('motion')) return 'animations'; if (id.includes('lucide-react')) return 'lucide-icons'; if (id.includes('remixicon') || id.includes('@remixicon')) return 'remix-icons'; if (id.includes('emoji-picker-react')) return 'emoji-picker'; if (id.includes('date-fns') || id.includes('date-fns-jalali')) return 'date-utils'; if (id.includes('prismjs')) return 'syntax-highlighter'; if (id.includes('intl-tel-input') || id.includes('libphonenumber-js') || id.includes('country-flag-icons')) return 'phone-validation'; if (id.includes('@radix-ui')) return 'radix-ui'; if (id.includes('@base-ui')) return 'base-ui'; if (id.includes('es-toolkit')) return 'utils-toolkit'; if (id.includes('zod')) return 'validation'; return 'vendor'; } } } }, chunkSizeWarningLimit: 10000, // 🚫 حذف console.* وdebugger تلقائياً في Production minify: true, } })