import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import path from 'path' // https://vitejs.dev/config/ export default defineConfig(async ({ mode }) => { const isDev = mode === 'development' const config = { plugins: [vue()], resolve: { alias: { '@': path.resolve(__dirname, 'src'), }, }, optimizeDeps: { include: ['feather-icons', 'tailwind.config.js'], }, server: { fs: { allow: [path.resolve(__dirname, '..')], }, }, } const frappeui = await importFrappeUIPlugin(isDev, config) config.plugins.unshift( frappeui({ frappeProxy: true, lucideIcons: true, jinjaBootData: true, buildConfig: { indexHtmlPath: '../cloud_portal/www/portal.html', emptyOutDir: true, sourcemap: true, }, }), ) return config }) async function importFrappeUIPlugin(isDev, config) { if (isDev) { try { const fs = await import('node:fs') const localVitePluginPath = path.resolve(__dirname, '../frappe-ui/vite') if (fs.existsSync(localVitePluginPath)) { const module = await import('../frappe-ui/vite') console.info('Local frappe-ui vite plugin found, using local plugin') config.resolve.alias = getAliases(config) return module.default } else { console.warn('Local frappe-ui vite plugin not found, using npm package') } } catch (error) { console.warn( 'Local frappe-ui not found, falling back to npm package:', error.message, ) } } const module = await import('frappe-ui/vite') return module.default } function getAliases(config) { return { ...config.resolve.alias, 'frappe-ui/tailwind': path.resolve( __dirname, '../frappe-ui/tailwind/preset.js', ), 'frappe-ui/style.css': path.resolve( __dirname, '../frappe-ui/src/style.css', ), 'frappe-ui/frappe': path.resolve(__dirname, '../frappe-ui/frappe/index.js'), 'frappe-ui': path.resolve(__dirname, '../frappe-ui/src/index.ts'), } }