import { vitePlugin as remixVitePlugin } from '@remix-run/dev'; import { vercelPreset } from '@vercel/remix/vite'; import UnoCSS from 'unocss/vite'; import { defineConfig } from 'vite'; import { optimizeCssModules } from 'vite-plugin-optimize-css-modules'; import { sentryVitePlugin } from '@sentry/vite-plugin'; import tsconfigPaths from 'vite-tsconfig-paths'; import * as dotenv from 'dotenv'; import { execSync } from 'child_process'; dotenv.config(); // Get git hash with fallback const getGitHash = () => { try { return execSync('git rev-parse --short HEAD').toString().trim(); } catch { return 'no-git-info'; } }; export default defineConfig((config) => { return { define: { __COMMIT_HASH: JSON.stringify(getGitHash()), __APP_VERSION: JSON.stringify(process.env.npm_package_version), // 'process.env': JSON.stringify(process.env) }, build: { target: 'esnext', sourcemap: true, }, plugins: [ remixVitePlugin({ future: { v3_fetcherPersist: true, v3_relativeSplatPath: true, v3_throwAbortReason: true, v3_lazyRouteDiscovery: true, }, presets: [vercelPreset()], }), UnoCSS(), tsconfigPaths(), config.mode === 'production' && optimizeCssModules({ apply: 'build' }), config.mode === 'production' && process.env.SENTRY_AUTH_TOKEN && sentryVitePlugin({ authToken: process.env.SENTRY_AUTH_TOKEN, org: 'replay', project: 'nut', }), ], envPrefix: [ 'VITE_', 'SUPABASE_URL', 'SUPABASE_ANON_KEY', ], css: { preprocessorOptions: { scss: { api: 'modern-compiler', }, }, }, }; });