From b61020babd668146f6d2d7137e625e6ffd57653f Mon Sep 17 00:00:00 2001 From: Ajay Ghanwat Date: Mon, 3 Aug 2026 00:54:29 +0530 Subject: [PATCH] fix: update PWA workers without reloading pages --- packages/dev-server/src/runtime.ts | 16 +++++----------- .../dev-server/test/performance-runtime.test.ts | 4 ++-- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/packages/dev-server/src/runtime.ts b/packages/dev-server/src/runtime.ts index 2c7118f5..fb246bcc 100644 --- a/packages/dev-server/src/runtime.ts +++ b/packages/dev-server/src/runtime.ts @@ -312,18 +312,12 @@ export function renderPwaClient(version = "2") { swUrl = window.trustedTypes.createPolicy("wrnexus-pwa", { createScriptURL: function(value) { return value; } }).createScriptURL(swUrl); } catch (_) {} } - var reloading = false; - navigator.serviceWorker.addEventListener("controllerchange", function () { - var key = "wrnexus-pwa-controller-" + swVersion; - if (reloading || sessionStorage.getItem(key)) return; - reloading = true; - sessionStorage.setItem(key, "1"); - location.reload(); - }); addEventListener("load", function () { - navigator.serviceWorker.register(swUrl, { updateViaCache: "none" }).then(function (registration) { - return registration.update(); - }).catch(function () {}); + var register = function () { + navigator.serviceWorker.register(swUrl, { updateViaCache: "none" }).catch(function () {}); + }; + if ("requestIdleCallback" in window) window.requestIdleCallback(register, { timeout: 2000 }); + else setTimeout(register, 0); }); }`; } diff --git a/packages/dev-server/test/performance-runtime.test.ts b/packages/dev-server/test/performance-runtime.test.ts index 5662b99e..425fb304 100644 --- a/packages/dev-server/test/performance-runtime.test.ts +++ b/packages/dev-server/test/performance-runtime.test.ts @@ -6,8 +6,8 @@ test("PWA registration is valid JavaScript and Trusted Types compatible", () => expect(PWA_CLIENT).toContain('createPolicy("wrnexus-pwa"'); expect(PWA_CLIENT).toContain("createScriptURL(swUrl)"); expect(PWA_CLIENT).toContain('register(swUrl, { updateViaCache: "none" })'); - expect(PWA_CLIENT).toContain("registration.update()"); - expect(PWA_CLIENT).toContain('addEventListener("controllerchange"'); + expect(PWA_CLIENT).toContain("requestIdleCallback"); + expect(PWA_CLIENT).not.toContain("location.reload()"); }); test("development PWA cleanup removes stale WRNexus service workers and caches", () => {