frontend/vite.config.ts
2026-01-19 11:31:18 -06:00

64 lines
1.9 KiB
TypeScript

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import tsconfigPaths from 'vite-tsconfig-paths'
import { VitePWA } from 'vite-plugin-pwa';
import * as path from 'path' // ✅ Import path module
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
react(),
tsconfigPaths(),
VitePWA({
registerType: 'autoUpdate', // Automatically updates the service worker when a new version is available
workbox: {
skipWaiting: true, //makes the new worker call skip waiting
clientsClaim: true, //makes it claim control of clients as soon as it activates
globPatterns: ['**/*.{js,css,html,png,jpg,svg}'], // Cache all common asset types
maximumFileSizeToCacheInBytes: 20 * 1024 * 1024, // 20 MiB
cleanupOutdatedCaches: true,
navigateFallback: "/index.html",
runtimeCaching: [
{
urlPattern: ({ request }) => request.destination === 'document',
handler: 'NetworkFirst',
options: {
cacheName: 'html-cache',
},
},
{
urlPattern: ({ request }) =>
['style', 'script', 'worker'].includes(request.destination),
handler: 'StaleWhileRevalidate',
options: {
cacheName: 'assets-cache',
},
},
{
//this forces all api calls to go through the network
urlPattern: ({ url }) => url.pathname.startsWith('/v1/'),
handler: 'NetworkOnly',
options: {
cacheName: 'api-cache',
},
},
]
},
}),
],
build: {
outDir: './build',
sourcemap: true,
minify: false,
target: 'esnext',
rollupOptions: {
input: {
main: path.resolve(__dirname, 'index.html')
}
}
},
esbuild: {
keepNames: true, // Prevent function name mangling
},
})