Spaces:
Sleeping
Sleeping
| const CACHE_NAME = 'pattanshetty-v2'; | |
| const urlsToCache = [ | |
| '/', | |
| '/index.html', | |
| ]; | |
| // Install event - cache resources | |
| self.addEventListener('install', (event) => { | |
| console.log('[ServiceWorker] Installing...'); | |
| event.waitUntil( | |
| caches.open(CACHE_NAME) | |
| .then((cache) => { | |
| console.log('[ServiceWorker] Caching app shell'); | |
| return cache.addAll(urlsToCache).catch((err) => { | |
| console.error('[ServiceWorker] Cache addAll failed:', err); | |
| }); | |
| }) | |
| .catch((err) => { | |
| console.error('[ServiceWorker] Cache open failed:', err); | |
| }) | |
| ); | |
| self.skipWaiting(); | |
| }); | |
| // Activate event - clean up old caches | |
| self.addEventListener('activate', (event) => { | |
| console.log('[ServiceWorker] Activating...'); | |
| event.waitUntil( | |
| caches.keys().then((cacheNames) => { | |
| return Promise.all( | |
| cacheNames.map((cacheName) => { | |
| if (cacheName !== CACHE_NAME) { | |
| console.log('[ServiceWorker] Deleting old cache:', cacheName); | |
| return caches.delete(cacheName); | |
| } | |
| }) | |
| ); | |
| }).catch((err) => { | |
| console.error('[ServiceWorker] Activation failed:', err); | |
| }) | |
| ); | |
| self.clients.claim(); | |
| }); | |
| // Fetch event - Network first, fallback to cache | |
| self.addEventListener('fetch', (event) => { | |
| // Skip non-GET requests | |
| if (event.request.method !== 'GET') { | |
| return; | |
| } | |
| event.respondWith( | |
| fetch(event.request) | |
| .then((response) => { | |
| // Check if valid response | |
| if (!response || response.status !== 200 || response.type === 'error') { | |
| return response; | |
| } | |
| // Clone the response | |
| const responseToCache = response.clone(); | |
| caches.open(CACHE_NAME) | |
| .then((cache) => { | |
| cache.put(event.request, responseToCache); | |
| }) | |
| .catch((err) => { | |
| console.error('[ServiceWorker] Cache put failed:', err); | |
| }); | |
| return response; | |
| }) | |
| .catch((err) => { | |
| console.log('[ServiceWorker] Fetch failed, trying cache:', err); | |
| // Network failed, try cache | |
| return caches.match(event.request) | |
| .then((cachedResponse) => { | |
| if (cachedResponse) { | |
| return cachedResponse; | |
| } | |
| // Return offline page or error | |
| return new Response('Offline - No cached version available', { | |
| status: 503, | |
| statusText: 'Service Unavailable', | |
| headers: new Headers({ | |
| 'Content-Type': 'text/plain' | |
| }) | |
| }); | |
| }); | |
| }) | |
| ); | |
| }); | |