/* * This file (which will be your service worker) * is picked up by the build system ONLY if * quasar.config file > pwa > workboxMode is set to "InjectManifest" */ declare const self: ServiceWorkerGlobalScope & typeof globalThis & { skipWaiting: () => Promise }; import { clientsClaim } from 'workbox-core'; import { precacheAndRoute, cleanupOutdatedCaches, createHandlerBoundToURL, } from 'workbox-precaching'; import { registerRoute, NavigationRoute } from 'workbox-routing'; import { CacheFirst, NetworkFirst } from 'workbox-strategies'; import { ExpirationPlugin } from 'workbox-expiration'; import { CacheableResponsePlugin } from 'workbox-cacheable-response'; import type { WorkboxPlugin } from 'workbox-core/types'; self.skipWaiting().catch((error) => { console.error('Error during service worker activation:', error); }); clientsClaim(); // Use with precache injection precacheAndRoute(self.__WB_MANIFEST); cleanupOutdatedCaches(); // Cache app shell and static assets with Cache First strategy registerRoute( // Match static assets ({ request }) => request.destination === 'style' || request.destination === 'script' || request.destination === 'image' || request.destination === 'font', new CacheFirst({ cacheName: 'static-assets', plugins: [ new CacheableResponsePlugin({ statuses: [0, 200], }) as WorkboxPlugin, new ExpirationPlugin({ maxEntries: 60, maxAgeSeconds: 30 * 24 * 60 * 60, // 30 days }) as WorkboxPlugin, ], }) ); // Cache API calls with Network First strategy registerRoute( // Match API calls ({ url }) => url.pathname.startsWith('/api/'), new NetworkFirst({ cacheName: 'api-cache', plugins: [ new CacheableResponsePlugin({ statuses: [0, 200], }) as WorkboxPlugin, new ExpirationPlugin({ maxEntries: 50, maxAgeSeconds: 24 * 60 * 60, // 24 hours }) as WorkboxPlugin, ], }) ); // Non-SSR fallbacks to index.html // Production SSR fallbacks to offline.html (except for dev) if (process.env.MODE !== 'ssr' || process.env.PROD) { registerRoute( new NavigationRoute(createHandlerBoundToURL(process.env.PWA_FALLBACK_HTML), { denylist: [new RegExp(process.env.PWA_SERVICE_WORKER_REGEX), /workbox-(.)*\.js$/], }), ); }