✅ All 169 tests passing ✅ Service worker registration working correctly ✅ Push notifications enabled ✅ Test environment properly isolated Final implementation includes: - Fixed vite.config.ts configuration for proper service worker registration - Environment-aware registration (disabled in tests, enabled in dev/prod) - Documentation and outcome report completed - Branch ready for merge Refs: docs/plans/FixServiceWorkerDevRegistrationIssues.md
110 lines
3.9 KiB
TypeScript
110 lines
3.9 KiB
TypeScript
import tailwindcss from '@tailwindcss/vite';
|
|
import { defineConfig } from 'vitest/config';
|
|
import { playwright } from '@vitest/browser-playwright';
|
|
import { sveltekit } from '@sveltejs/kit/vite';
|
|
import { SvelteKitPWA } from '@vite-pwa/sveltekit';
|
|
import fs from 'fs';
|
|
|
|
export default defineConfig({
|
|
define: {
|
|
'process.env.NODE_ENV': process.env.NODE_ENV === 'production' ? '"production"' : '"development"'
|
|
},
|
|
server: {
|
|
watch: {
|
|
ignored: ['**/debug_page.txt', '**/.ssl/**', '**/docs/**', '**/secrets/**']
|
|
},
|
|
https: {
|
|
key: fs.readFileSync('./.ssl/localhost.key'),
|
|
cert: fs.readFileSync('./.ssl/localhost.crt')
|
|
}
|
|
},
|
|
plugins: [
|
|
SvelteKitPWA({
|
|
srcDir: './src',
|
|
mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',
|
|
strategies: 'injectManifest',
|
|
filename: 'service-worker.ts',
|
|
scope: '/',
|
|
base: '/',
|
|
selfDestroying: process.env.SELF_DESTROYING_SW === 'true',
|
|
// Disable automatic registration to prevent test environment issues
|
|
injectRegister: process.env.NODE_ENV === 'test' ? false : 'auto',
|
|
injectManifest: {
|
|
swSrc: 'src/service-worker.ts',
|
|
swDest: 'service-worker.js',
|
|
injectionPoint: 'self.__WB_MANIFEST',
|
|
// Additional build configuration for better reliability
|
|
globPatterns: ['**/*.{js,css,html,ico,png,svg,webp,woff,woff2}'],
|
|
maximumFileSizeToCacheInBytes: 4 * 1024 * 1024, // 4MB
|
|
},
|
|
manifest: {
|
|
short_name: 'InstaChef',
|
|
name: 'InstaChef Recipe Saver',
|
|
start_url: '/',
|
|
scope: '/',
|
|
display: 'standalone',
|
|
theme_color: "#ffffff",
|
|
background_color: "#ffffff",
|
|
icons: [
|
|
{ src: '/favicon.png', sizes: '192x192', type: 'image/png' },
|
|
{ src: '/favicon.png', sizes: '512x512', type: 'image/png' }
|
|
],
|
|
share_target: {
|
|
action: '/share',
|
|
method: 'GET',
|
|
enctype: 'application/x-www-form-urlencoded',
|
|
params: { title: 'title', text: 'text', url: 'url' }
|
|
}
|
|
},
|
|
workbox: {
|
|
globPatterns: ['client/**/*.{js,css,ico,png,svg,webp,woff,woff2}'],
|
|
cleanupOutdatedCaches: true,
|
|
skipWaiting: false, // Let service worker control this
|
|
clientsClaim: false, // Let service worker control this
|
|
maximumFileSizeToCacheInBytes: 4 * 1024 * 1024, // 4MB
|
|
runtimeCaching: [
|
|
{
|
|
urlPattern: /^https:\/\/api\./,
|
|
handler: 'NetworkFirst',
|
|
options: {
|
|
cacheName: 'api-cache',
|
|
networkTimeoutSeconds: 10
|
|
}
|
|
}
|
|
]
|
|
},
|
|
devOptions: {
|
|
enabled: process.env.NODE_ENV !== 'test', // Disable in test environment
|
|
suppressWarnings: true,
|
|
navigateFallback: '/',
|
|
},
|
|
}),tailwindcss(), sveltekit()],
|
|
test: {
|
|
expect: { requireAssertions: true },
|
|
projects: [
|
|
{
|
|
extends: './vite.config.ts',
|
|
test: {
|
|
name: 'client',
|
|
browser: {
|
|
enabled: true,
|
|
provider: playwright(),
|
|
instances: [{ browser: 'chromium', headless: true }]
|
|
},
|
|
include: ['src/**/*.svelte.{test,spec}.{js,ts}'],
|
|
exclude: ['src/lib/server/**']
|
|
}
|
|
},
|
|
{
|
|
extends: './vite.config.ts',
|
|
test: {
|
|
name: 'server',
|
|
environment: 'node',
|
|
include: ['src/**/*.{test,spec}.{js,ts}'],
|
|
exclude: ['src/**/*.svelte.{test,spec}.{js,ts}']
|
|
}
|
|
}
|
|
]
|
|
}
|
|
});
|