next-pwa-pack
Version:
PWA cache provider for Next.js/React apps (service worker, manifest, offline page, SPA cache, offline)
1 lines • 1.61 kB
JavaScript
export async function clearAllCache(){const e=await caches.keys();await Promise.all(e.map((e=>caches.delete(e))))}export async function reloadServiceWorker(){"serviceWorker"in navigator&&navigator.serviceWorker.controller&&(navigator.serviceWorker.controller.postMessage({type:"SKIP_WAITING"}),window.location.reload())}export function updatePageCache(e){"serviceWorker"in navigator&&navigator.serviceWorker.controller&&navigator.serviceWorker.controller.postMessage({type:"REVALIDATE_URL",url:e||window.location.href})}export async function unregisterServiceWorkerAndClearCache(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistrations();await Promise.all(e.map((e=>e.unregister()))),await clearAllCache()}}export function signalSWRevalidate(e){localStorage.setItem("swRevalidate",JSON.stringify({urls:e,ts:Date.now()}))}export function updateSWCache(e){signalSWRevalidate(e),e.forEach(updatePageCache),clearStaticCache()}export function disablePWACache(){"serviceWorker"in navigator&&navigator.serviceWorker.controller&&navigator.serviceWorker.controller.postMessage({type:"DISABLE_CACHE"})}export function enablePWACache(){"serviceWorker"in navigator&&navigator.serviceWorker.controller&&navigator.serviceWorker.controller.postMessage({type:"ENABLE_CACHE"})}export function clearStaticCache(){"serviceWorker"in navigator&&navigator.serviceWorker.controller?(console.log("[PWA] Sending CLEAR_STATIC_CACHE message to service worker"),navigator.serviceWorker.controller.postMessage({type:"CLEAR_STATIC_CACHE"})):console.warn("[PWA] Service worker not available for clearStaticCache")}