Files
crowd-funder-for-time-pwa/vite.config.common.mts
Matthew Raymer 8b8566c578 fix: resolve build errors and test timing issues
- Fix syntax error in logger.ts: change 'typeof import' to 'typeof import.meta'
  to resolve ESBuild compilation error preventing web build

- Align CapacitorPlatformService.insertNewDidIntoSettings with WebPlatformService:
  * Add dynamic constants import to avoid circular dependencies
  * Use INSERT OR REPLACE for data integrity
  * Set proper default values (finishedOnboarding=false, API servers)
  * Remove TODO comment as implementation is now parallel

- Fix Playwright test timing issues in 60-new-activity.spec.ts:
  * Replace generic alert selectors with specific alert type targeting
  * Change Info alerts from 'Success' to 'Info' filter for proper targeting
  * Fix "strict mode violation" errors caused by multiple simultaneous alerts
  * Improve test reliability by using established alert handling patterns

- Update migrationService.ts and vite.config.common.mts with related improvements

Test Results: Improved from 2 failed tests to 42/44 passing (95.5% success rate)
Build Status: Web build now compiles successfully without syntax errors
2025-09-15 06:44:37 +00:00

120 lines
3.9 KiB
TypeScript

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'));