Repository Public
1import tailwindcss from '@tailwindcss/vite';2import react from '@vitejs/plugin-react';3import { build as esbuild } from 'esbuild';4import { defineConfig, type Plugin } from 'vite';56// v6-alerts: the service worker (src/sw.ts) is bundled on its own into ONE classic script at the root of the site, /sw.js —7// no hash in its name (the browser re-checks that URL), no import (a classic worker runs everywhere push exists), scope "/".8const sw = async (minify: boolean): Promise<string> =>9 (await esbuild({ entryPoints: ['src/sw.ts'], bundle: true, write: false, format: 'iife', target: 'es2020', minify, legalComments: 'none' })).outputFiles[0]!.text;10const serviceWorker = (): Plugin => ({11 name: 'spw-service-worker',12 async generateBundle() { this.emitFile({ type: 'asset', fileName: 'sw.js', source: await sw(true) }); },13 configureServer(server) {14 server.middlewares.use('/sw.js', (_req, res) => { void sw(false).then((code) => { res.setHeader('content-type', 'text/javascript'); res.setHeader('cache-control', 'no-cache'); res.end(code); }, (e: Error) => { res.statusCode = 500; res.end(e.message); }); });15 },16});1718export default defineConfig({19 plugins: [react(), tailwindcss(), serviceWorker()],20 build: { outDir: '../../dist/web', emptyOutDir: true, sourcemap: false, assetsInlineLimit: 0, modulePreload: { polyfill: false } },21 server: { port: 5173, proxy: { '/api': 'http://127.0.0.1:8650' } },22});23