From 516b7af6e68a75cc369eafa36f6d95a3f271ac97 Mon Sep 17 00:00:00 2001 From: dumbmoron Date: Sun, 7 Jul 2024 18:17:23 +0000 Subject: [PATCH 1/2] feat: update service worker when new version is detected --- .changeset/unlucky-cars-swim.md | 5 +++++ packages/kit/src/runtime/client/client.js | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 .changeset/unlucky-cars-swim.md diff --git a/.changeset/unlucky-cars-swim.md b/.changeset/unlucky-cars-swim.md new file mode 100644 index 000000000000..119db1bb464b --- /dev/null +++ b/.changeset/unlucky-cars-swim.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': minor +--- + +feat: update service worker when new version is detected diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index f91728bccc2c..7227f7366535 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -146,6 +146,19 @@ function native_navigation(url) { return new Promise(() => {}); } +/** + * Checks whether a service worker is registered, and if it is, + * tries to update it. + */ +async function update_service_worker() { + if (BROWSER && 'serviceWorker' in navigator) { + const registration = await navigator.serviceWorker.getRegistration(base || '/'); + if (registration) { + await registration.update(); + } + } +} + function noop() {} /** @type {import('types').CSRRoute[]} */ @@ -1001,6 +1014,8 @@ async function load_route({ id, invalidating, url, params, route, preload }) { // Referenced node could have been removed due to redeploy, check const updated = await stores.updated.check(); if (updated) { + // Before reloading, try to update the service worker if it exists + await update_service_worker(); return await native_navigation(url); } @@ -1325,6 +1340,8 @@ async function navigate({ } else if (/** @type {number} */ (navigation_result.props.page.status) >= 400) { const updated = await stores.updated.check(); if (updated) { + // Before reloading, try to update the service worker if it exists + await update_service_worker(); await native_navigation(url); } } From 172093443f884ac05978aebbbf317e1856e8e2a0 Mon Sep 17 00:00:00 2001 From: jj Date: Wed, 9 Oct 2024 16:15:27 +0200 Subject: [PATCH 2/2] remove BROWSER from condition Co-authored-by: Tee Ming --- packages/kit/src/runtime/client/client.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index 7227f7366535..69f7f79883f3 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -151,7 +151,7 @@ function native_navigation(url) { * tries to update it. */ async function update_service_worker() { - if (BROWSER && 'serviceWorker' in navigator) { + if ('serviceWorker' in navigator) { const registration = await navigator.serviceWorker.getRegistration(base || '/'); if (registration) { await registration.update();