registerSW.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // eslint-disable-next-line import/no-unresolved
  2. import { registerSW as viteRegisterSW } from "virtual:pwa-register";
  3. // fetch new sw every hour, i.e. update app every hour while running
  4. const intervalMS = 60 * 60 * 1000;
  5. // https://vite-pwa-org.netlify.app/guide/periodic-sw-updates.html
  6. const registerSW = () => {
  7. console.log("[ServiceWorker] Registering service worker");
  8. if (!("serviceWorker" in navigator)) {
  9. console.warn("[ServiceWorker] Service workers not supported");
  10. return;
  11. }
  12. viteRegisterSW({
  13. onRegisteredSW(swUrl, registration) {
  14. console.log("[ServiceWorker] Registered:", { swUrl, registration });
  15. if (!registration) {
  16. console.warn("[ServiceWorker] No registration returned");
  17. return;
  18. }
  19. setInterval(async () => {
  20. if (registration.installing || navigator?.onLine === false) return;
  21. const resp = await fetch(swUrl, {
  22. cache: "no-store",
  23. headers: {
  24. cache: "no-store",
  25. "cache-control": "no-cache",
  26. },
  27. });
  28. if (resp?.status === 200) {
  29. console.log("[ServiceWorker] Updating service worker");
  30. await registration.update();
  31. }
  32. }, intervalMS);
  33. },
  34. onRegisterError(error) {
  35. console.error("[ServiceWorker] Registration error:", error);
  36. },
  37. });
  38. };
  39. export default registerSW;