AeThex-Connect/packages/web/vite.config.ts

83 lines
2 KiB
TypeScript

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { VitePWA } from 'vite-plugin-pwa'
import path from 'path'
export default defineConfig({
plugins: [
react(),
VitePWA({
registerType: 'autoUpdate',
workbox: {
clientsClaim: true,
skipWaiting: true,
cleanupOutdatedCaches: true,
runtimeCaching: [
{
urlPattern: /^https:\/\/api\.aethex\.dev\/.*/i,
handler: 'NetworkFirst',
options: {
cacheName: 'api-cache',
networkTimeoutSeconds: 3,
expiration: {
maxEntries: 50,
maxAgeSeconds: 7 * 24 * 60 * 60, // 1 week
},
},
},
],
},
manifest: {
name: 'AeThex Connect',
short_name: 'AeThex',
description: 'Next-generation communication platform',
theme_color: '#a855f7',
background_color: '#0a0a0f',
display: 'standalone',
scope: '/',
start_url: '/',
orientation: 'portrait-primary',
},
devOptions: {
enabled: true,
navigateFallback: 'index.html',
suppressWarnings: true,
},
}),
],
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
},
},
build: {
target: 'es2020',
outDir: 'dist',
sourcemap: false,
minify: 'terser',
terserOptions: {
compress: {
drop_console: true,
},
},
rollupOptions: {
output: {
manualChunks: {
'vendor-core': ['react', 'react-dom', 'react-router-dom'],
'vendor-state': ['@reduxjs/toolkit', 'react-redux'],
'vendor-webrtc': ['socket.io-client'],
},
},
},
},
server: {
port: 5173,
proxy: {
'/api': {
target: process.env.VITE_API_URL || 'http://localhost:3000',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
},
},
},
})