import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; import path from "path"; import { fileURLToPath, URL } from 'node:url'; // Determine if we're building for mobile based on environment variable const isMobile = process.env.VITE_PLATFORM === 'capacitor'; export default defineConfig(({ mode }) => { return { plugins: [vue()], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), 'nostr-tools': path.resolve(__dirname, 'node_modules/nostr-tools'), 'nostr-tools/nip06': path.resolve(__dirname, 'node_modules/nostr-tools/nip06'), 'nostr-tools/core': path.resolve(__dirname, 'node_modules/nostr-tools/core'), stream: 'stream-browserify', util: 'util', crypto: 'crypto-browserify' }, mainFields: ['module', 'jsnext:main', 'jsnext', 'main'], }, optimizeDeps: { include: ['nostr-tools', 'nostr-tools/nip06', 'nostr-tools/core'], esbuildOptions: { define: { global: 'globalThis' } } }, define: { __USE_QR_READER__: JSON.stringify(!isMobile), __IS_MOBILE__: JSON.stringify(isMobile), }, build: { sourcemap: true, target: 'esnext', chunkSizeWarningLimit: 1000, commonjsOptions: { include: [/node_modules/], transformMixedEsModules: true }, rollupOptions: { external: isMobile ? ['vue-qrcode-reader'] : [], output: { globals: { stream: 'stream', util: 'util', crypto: 'crypto' }, entryFileNames: `[name]${isMobile ? '-mobile' : ''}.js`, chunkFileNames: `[name]${isMobile ? '-mobile' : ''}.js`, assetFileNames: `[name]${isMobile ? '-mobile' : ''}.[ext]` } } } }; });