From 61425d4b791aab4e77be406a5b8848e3ff17be3a Mon Sep 17 00:00:00 2001 From: chris Date: Thu, 31 Jul 2025 11:24:13 -0400 Subject: [PATCH] update sw test --- package.json | 4 ++- public/sw.js | 98 ++++++++++++++++++---------------------------------- 2 files changed, 36 insertions(+), 66 deletions(-) diff --git a/package.json b/package.json index 88b57b0..8ffff6c 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "dependencies": { + "@tailwindcss/vite": "^4.1.11", "bcryptjs": "^3.0.2", "cors": "^2.8.5", "dotenv": "^17.2.1", @@ -7,6 +8,7 @@ "jsonwebtoken": "^9.0.2", "pm2": "^6.0.8", "sqlite": "^5.1.1", - "sqlite3": "^5.1.7" + "sqlite3": "^5.1.7", + "tailwindcss": "^4.1.11" } } diff --git a/public/sw.js b/public/sw.js index 8fc9c8a..15071d8 100644 --- a/public/sw.js +++ b/public/sw.js @@ -1,80 +1,48 @@ -const CACHE_NAME = 'timetracker-v3'; // Update this if you change anything! - -// Cache only local assets here. Avoid opaque external resources in addAll(). -const urlsToCache = [ - '/', - '/index.html', - '/manifest.json' - // Add local JS/CSS files here if you have them, e.g., '/main.js', '/styles.css' -]; - -// Install: Cache core files -self.addEventListener('install', (event) => { - console.log('[SW] Install event'); +const CACHE_NAME = 'timetracker-test-v1'; +const urlsToCache = ['/', '/index.html']; +self.addEventListener('install', event => { + console.log('[SW] Install'); event.waitUntil( - caches.open(CACHE_NAME) - .then(cache => { - console.log('[SW] Caching app shell:', urlsToCache); - return cache.addAll(urlsToCache); - }) - .catch(err => { - console.error('[SW] Install cache error:', err); - }) + caches.open(CACHE_NAME).then(cache => { + console.log('[SW] Caching shell:', urlsToCache); + return cache.addAll(urlsToCache); + }).catch(err => console.error('[SW] Install failed:', err)) ); }); -// Activate: Clean up old caches -self.addEventListener('activate', (event) => { - console.log('[SW] Activate event'); - +self.addEventListener('activate', event => { + console.log('[SW] Activate'); event.waitUntil( - caches.keys().then(cacheNames => { - return Promise.all( + caches.keys().then(cacheNames => + Promise.all( cacheNames.map(name => { if (name !== CACHE_NAME) { console.log('[SW] Deleting old cache:', name); return caches.delete(name); } }) - ); + ) + ) + ); +}); + +self.addEventListener('fetch', event => { + if (event.request.method !== 'GET') return; + + event.respondWith( + caches.match(event.request).then(cached => { + if (cached) { + console.log('[SW] Cache hit:', event.request.url); + return cached; + } + + return fetch(event.request).then(networkRes => { + return networkRes; + }).catch(err => { + console.error('[SW] Fetch failed:', event.request.url, err); + return new Response('Offline', { status: 503 }); + }); }) ); }); - -// Fetch: Cache-first strategy with dynamic caching -self.addEventListener('fetch', (event) => { - if (event.request.method !== 'GET') return; - - console.log('[SW] Fetch request:', event.request.url); - - event.respondWith( - caches.match(event.request) - .then(cachedResponse => { - if (cachedResponse) { - console.log('[SW] Serving from cache:', event.request.url); - return cachedResponse; - } - - return fetch(event.request) - .then(networkResponse => { - if ( - networkResponse && - networkResponse.status === 200 && - networkResponse.type !== 'opaque' - ) { - const responseToCache = networkResponse.clone(); - caches.open(CACHE_NAME).then(cache => { - console.log('[SW] Dynamically caching:', event.request.url); - cache.put(event.request, responseToCache); - }); - } - return networkResponse; - }) - .catch(err => { - console.error('[SW] Network request failed:', event.request.url, err); - // Optionally, return a fallback page or image here - }); - }) - ); -});