import react from '@vitejs/plugin-react'; import * as packageJson from './package.json'; import { resolve } from 'path'; import { ConfigEnv, defineConfig, UserConfig } from 'vite'; import { default as dts } from 'vite-plugin-dts'; import tailwindcss from '@tailwindcss/vite'; export default defineConfig((configEnv: ConfigEnv) => { const { mode } = configEnv; const isDevelopment = mode === 'development'; const config: UserConfig = { build: { sourcemap: true, lib: { entry: resolve('src', 'index.ts'), name: 'personaChatSDK', formats: ['es', 'umd', 'cjs', 'iife'], fileName: (format: string) => `bundle.${format}.js`, }, rollupOptions: { external: [ ...Object.keys(packageJson.peerDependencies), ...Object.keys(packageJson.dependencies || {}), /^react\//, /^react-dom\//, /^@radix-ui\//, ], input: resolve(__dirname, 'src', 'index.ts'), output: { globals: { 'react-dom': 'ReactDOM', react: 'React', 'react/jsx-runtime': 'React', 'react/jsx-dev-runtime': 'React', '@assistant-ui/react': 'AssistantUI', '@radix-ui/react-dialog': 'RadixDialog', '@radix-ui/react-slot': 'RadixSlot', 'rehype-raw': 'rehypeRaw', zustand: 'zustand', }, }, }, }, resolve: { dedupe: Object.keys(packageJson.peerDependencies || {}), alias: { '@applica-software-guru/persona-chat-sdk': resolve(__dirname, 'src'), '@': resolve(__dirname, 'playground/src'), '@/*': resolve(__dirname, 'playground/src/*'), '*': resolve(__dirname, 'src/*'), }, }, plugins: [ dts({ include: ['./src/**/*.{js,jsx,ts,tsx}'], }), react(), ], define: { 'process.env': { NODE_ENV: 'production', }, }, optimizeDeps: { include: Object.keys(packageJson.peerDependencies || {}), }, }; if (isDevelopment) { config.plugins = [react(), tailwindcss()]; config.root = resolve(__dirname, 'playground'); } return config; });