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.
117 lines
3.4 KiB
117 lines
3.4 KiB
import { defineConfig, mergeConfig } from "vite";
|
|
import { VitePWA } from "vite-plugin-pwa";
|
|
import { createBuildConfig } from "./vite.config.common.mts";
|
|
import { loadAppConfig } from "./vite.config.utils.mts";
|
|
|
|
export default defineConfig(async ({ mode }) => {
|
|
const baseConfig = await createBuildConfig('web');
|
|
const appConfig = await loadAppConfig();
|
|
|
|
// Environment-specific configuration based on mode
|
|
const getEnvironmentConfig = (mode: string) => {
|
|
switch (mode) {
|
|
case 'production':
|
|
return {
|
|
// Production optimizations
|
|
build: {
|
|
minify: 'terser',
|
|
sourcemap: false,
|
|
rollupOptions: {
|
|
output: {
|
|
manualChunks: {
|
|
vendor: ['vue', 'vue-router', 'pinia'],
|
|
utils: ['luxon', 'ramda', 'zod'],
|
|
crypto: ['@ethersproject/wallet', '@ethersproject/hdnode', 'ethereum-cryptography'],
|
|
sql: ['@jlongster/sql.js', 'absurd-sql']
|
|
}
|
|
}
|
|
}
|
|
},
|
|
define: {
|
|
__DEV__: false,
|
|
__TEST__: false,
|
|
__PROD__: true
|
|
}
|
|
};
|
|
case 'test':
|
|
return {
|
|
// Test environment configuration
|
|
build: {
|
|
minify: false,
|
|
sourcemap: true,
|
|
rollupOptions: {
|
|
output: {
|
|
manualChunks: undefined
|
|
}
|
|
}
|
|
},
|
|
define: {
|
|
__DEV__: false,
|
|
__TEST__: true,
|
|
__PROD__: false
|
|
}
|
|
};
|
|
default: // development
|
|
return {
|
|
// Development configuration
|
|
build: {
|
|
minify: false,
|
|
sourcemap: true,
|
|
rollupOptions: {
|
|
output: {
|
|
manualChunks: undefined
|
|
}
|
|
}
|
|
},
|
|
define: {
|
|
__DEV__: true,
|
|
__TEST__: false,
|
|
__PROD__: false
|
|
}
|
|
};
|
|
}
|
|
};
|
|
|
|
const environmentConfig = getEnvironmentConfig(mode);
|
|
|
|
return mergeConfig(baseConfig, {
|
|
...environmentConfig,
|
|
// Ensure source maps are enabled for development and test modes
|
|
// This affects both dev server and build output
|
|
sourcemap: mode === 'development' || mode === 'test',
|
|
// Server configuration inherited from base config
|
|
// CORS headers removed to allow images from any domain
|
|
plugins: [
|
|
VitePWA({
|
|
registerType: 'autoUpdate',
|
|
manifest: appConfig.pwaConfig?.manifest,
|
|
// Enable PWA in all web environments for consistent testing
|
|
devOptions: {
|
|
enabled: true, // ✅ Enable in all environments
|
|
type: 'classic'
|
|
},
|
|
workbox: {
|
|
cleanupOutdatedCaches: true,
|
|
skipWaiting: true,
|
|
clientsClaim: true,
|
|
sourcemap: mode !== 'production',
|
|
maximumFileSizeToCacheInBytes: 10 * 1024 * 1024, // 10MB
|
|
// Environment-specific caching strategies
|
|
runtimeCaching: mode === 'production' ? [
|
|
{
|
|
urlPattern: /^https:\/\/api\./,
|
|
handler: 'NetworkFirst',
|
|
options: {
|
|
cacheName: 'api-cache',
|
|
expiration: {
|
|
maxEntries: 100,
|
|
maxAgeSeconds: 60 * 60 * 24 // 24 hours
|
|
}
|
|
}
|
|
}
|
|
] : []
|
|
}
|
|
})
|
|
]
|
|
});
|
|
});
|
|
|