You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							119 lines
						
					
					
						
							3.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							119 lines
						
					
					
						
							3.9 KiB
						
					
					
				| import { defineConfig, UserConfig, Plugin } from "vite"; | |
| import vue from "@vitejs/plugin-vue"; | |
| import dotenv from "dotenv"; | |
| import { loadAppConfig } from "./vite.config.utils.mts"; | |
| import path from "path"; | |
| import { fileURLToPath } from 'url'; | |
| 
 | |
| // Load environment variables | |
| dotenv.config({ path: `.env.${process.env.NODE_ENV}` }) | |
| 
 | |
| const __filename = fileURLToPath(import.meta.url); | |
| const __dirname = path.dirname(__filename); | |
| 
 | |
| export async function createBuildConfig(platform: string): Promise<UserConfig> { | |
|   const appConfig = await loadAppConfig(); | |
|   const isCapacitor = platform === "capacitor"; | |
|   const isElectron = platform === "electron"; | |
|   const isNative = isCapacitor || isElectron; | |
| 
 | |
|   // Set platform - PWA is always enabled for web platforms | |
|   process.env.VITE_PLATFORM = platform; | |
|    | |
|   // Environment variables are loaded from .env files via dotenv.config() above | |
| 
 | |
|   return { | |
|     base: "/", | |
|     plugins: [vue()], | |
|     server: { | |
|       port: parseInt(process.env.VITE_PORT || "8080"), | |
|       fs: { strict: false }, | |
|       // CORS headers disabled to allow images from any domain | |
|       // This means SharedArrayBuffer is unavailable, but absurd-sql | |
|       // will automatically fall back to IndexedDB mode which still works | |
|     }, | |
|     build: { | |
|       outDir: "dist", | |
|       assetsDir: 'assets', | |
|       chunkSizeWarningLimit: 1000, | |
|       rollupOptions: { | |
|         output: { | |
|           format: 'esm', | |
|           generatedCode: { | |
|             preset: 'es2015' | |
|           }, | |
|           manualChunks: undefined | |
|         } | |
|       } | |
|     }, | |
|     worker: { | |
|       format: 'es', | |
|       plugins: () => [] | |
|     }, | |
|     // ESBuild configuration to fail on errors - TEMPORARILY DISABLED | |
|     // esbuild: { | |
|     //   target: 'es2015', | |
|     //   supported: { | |
|     //     'bigint': true | |
|     //   }, | |
|     //   // Fail on any ESBuild errors | |
|     //   logLevel: 'error', | |
|     //   // Ensure build fails on syntax errors and other critical issues | |
|     //   logOverride: {  | |
|     //     'duplicate-export': 'error', | |
|     //     'duplicate-member': 'error', | |
|     //     'syntax-error': 'error', | |
|     //     'invalid-identifier': 'error' | |
|     //   } | |
|     // }, | |
| 
 | |
|     define: { | |
|       'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), | |
|       'process.env.VITE_PLATFORM': JSON.stringify(platform), | |
|       'process.env.VITE_LOG_LEVEL': JSON.stringify(process.env.VITE_LOG_LEVEL), | |
|       // PWA is always enabled for web platforms | |
|       __dirname: JSON.stringify(process.cwd()), | |
|       __IS_MOBILE__: JSON.stringify(isCapacitor), | |
|       __IS_ELECTRON__: JSON.stringify(isElectron), | |
|       __USE_QR_READER__: JSON.stringify(!isCapacitor), | |
|       'process.platform': JSON.stringify('browser'), | |
|       'process.version': JSON.stringify('v16.0.0'), | |
|       'process.env.NODE_DEBUG': JSON.stringify(false), | |
|       'global.process': JSON.stringify({ | |
|         platform: 'browser', | |
|         version: 'v16.0.0', | |
|         env: { NODE_DEBUG: false } | |
|       }) | |
|     }, | |
|     resolve: { | |
|       alias: { | |
|         '@': path.resolve(__dirname, 'src'), | |
|         '@nostr/tools': path.resolve(__dirname, 'node_modules/@nostr/tools'), | |
|         '@nostr/tools/nip06': path.resolve(__dirname, 'node_modules/@nostr/tools/nip06'), | |
|         ...appConfig.aliasConfig, | |
|         'path': path.resolve(__dirname, './src/utils/node-modules/path.js'), | |
|         'fs': path.resolve(__dirname, './src/utils/node-modules/fs.js'), | |
|         'crypto': path.resolve(__dirname, './src/utils/node-modules/crypto.js'), | |
|         'dexie-export-import': path.resolve(__dirname, 'node_modules/dexie-export-import') | |
|       } | |
|     }, | |
|     optimizeDeps: { | |
|       include: [ | |
|         '@nostr/tools', | |
|         '@nostr/tools/nip06', | |
|         '@jlongster/sql.js', | |
|         'absurd-sql', | |
|         'absurd-sql/dist/indexeddb-main-thread', | |
|         'absurd-sql/dist/indexeddb-backend' | |
|       ], | |
|       exclude: isNative ? [ | |
|         'register-service-worker', | |
|         'workbox-window', | |
|         'web-push', | |
|         'serviceworker-webpack-plugin' | |
|       ] : [] | |
|     } | |
|   }; | |
| } | |
| 
 | |
| export default defineConfig(async () => createBuildConfig('web'));
 | |
| 
 |