/// /// /// /// import { build, files, version } from '$service-worker'; import { precacheAndRoute } from 'workbox-precaching'; import { registerRoute, NavigationRoute } from 'workbox-routing'; import { NetworkFirst, CacheFirst } from 'workbox-strategies'; import { BackgroundSyncPlugin } from 'workbox-background-sync'; declare const self: ServiceWorkerGlobalScope; const CACHE_NAME = `colectivo-${version}`; const ASSETS = [...build, ...files]; // Precache all static assets precacheAndRoute(ASSETS.map((url) => ({ url, revision: version }))); // Cache-first for static assets (JS, CSS, fonts, icons) registerRoute( ({ request }) => request.destination === 'style' || request.destination === 'script' || request.destination === 'font' || request.destination === 'image', new CacheFirst({ cacheName: `${CACHE_NAME}-assets` }) ); // Network-first for app routes (HTML navigation) registerRoute( new NavigationRoute( new NetworkFirst({ cacheName: `${CACHE_NAME}-pages`, networkTimeoutSeconds: 3 }) ) ); // Background Sync for pending offline operations const bgSyncPlugin = new BackgroundSyncPlugin('pending-ops-queue', { maxRetentionTime: 24 * 60 // 24 hours }); // Listen for messages from the app self.addEventListener('message', (event) => { if (event.data?.type === 'SKIP_WAITING') { self.skipWaiting(); } });