Precache the shell, JS, CSS and self-hosted fonts in mealquest-precache-v1. Route every other request through the pure src/sw/routes.ts decision: NetworkFirst (3 s timeout) for plans, shopping, dinners and home; CacheFirst with expiration for /media/* and font files; NetworkOnly for /auth/*, settings, jobs and every non-GET. App navigations fall back to the precached index.html offline. On activate, delete only stale caches named mealquest-*. Maestro task: 8fa0d0bd-4a52-4f09-ba68-41bdbdfda63b Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
import { defineConfig } from 'vitest/config'
|
|
import react from '@vitejs/plugin-react'
|
|
import { VitePWA, type ManifestOptions } from 'vite-plugin-pwa'
|
|
import manifest from './manifest.json' with { type: 'json' }
|
|
|
|
const backend = 'http://localhost:8080'
|
|
|
|
export default defineConfig({
|
|
plugins: [
|
|
react(),
|
|
// The plugin writes manifest.webmanifest and sw.js, links the manifest
|
|
// from index.html and adds the registerSW.js script. It does both only
|
|
// in production builds: dev options stay off, so neither `vite` nor
|
|
// Vitest registers a service worker.
|
|
VitePWA({
|
|
strategies: 'injectManifest',
|
|
srcDir: 'src',
|
|
filename: 'sw.ts',
|
|
injectRegister: 'script',
|
|
// Precache the shell, JS, CSS and the self-hosted fonts.
|
|
injectManifest: { globPatterns: ['**/*.{html,js,css,woff2}'] },
|
|
// The web manifest lives in manifest.json: its theme and background
|
|
// colours are --color-accent and --color-bg from src/styles/tokens.css,
|
|
// and hex colours may not be written in TypeScript.
|
|
manifest: manifest as Partial<ManifestOptions>,
|
|
}),
|
|
],
|
|
server: {
|
|
proxy: {
|
|
'/api': backend,
|
|
'/auth': backend,
|
|
'/media': backend,
|
|
},
|
|
},
|
|
test: {
|
|
environment: 'jsdom',
|
|
// Inject CSS Modules into jsdom so tests can assert the sizes the
|
|
// stylesheets actually declare (for example 44 px hit areas).
|
|
css: true,
|
|
setupFiles: ['./src/test/setup.ts'],
|
|
},
|
|
})
|