From 3c0198ff299dd7a6c6cd13bc88d38ed196e1b429 Mon Sep 17 00:00:00 2001 From: iran-110 <70788031+Iran-110@users.noreply.github.com> Date: Tue, 15 Oct 2024 03:15:35 +0330 Subject: [PATCH 1/5] feat: adds requested "searchParams" to the service-worker url --- src/client/build/preact.ts | 2 ++ src/client/build/react.ts | 2 ++ src/client/build/register.ts | 9 +++++++-- src/client/build/solid.ts | 2 ++ src/client/build/svelte.ts | 2 ++ src/client/build/vue.ts | 2 ++ src/client/type.d.ts | 1 + types/index.d.ts | 1 + 8 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/client/build/preact.ts b/src/client/build/preact.ts index 847817e8..461f02f1 100644 --- a/src/client/build/preact.ts +++ b/src/client/build/preact.ts @@ -7,6 +7,7 @@ export type { RegisterSWOptions } export function useRegisterSW(options: RegisterSWOptions = {}) { const { immediate = true, + searchParams, onNeedRefresh, onOfflineReady, onRegistered, @@ -20,6 +21,7 @@ export function useRegisterSW(options: RegisterSWOptions = {}) { const [updateServiceWorker] = useState(() => { return registerSW({ immediate, + searchParams, onOfflineReady() { setOfflineReady(true) onOfflineReady?.() diff --git a/src/client/build/react.ts b/src/client/build/react.ts index b0105819..0fd24445 100644 --- a/src/client/build/react.ts +++ b/src/client/build/react.ts @@ -7,6 +7,7 @@ export type { RegisterSWOptions } export function useRegisterSW(options: RegisterSWOptions = {}) { const { immediate = true, + searchParams, onNeedRefresh, onOfflineReady, onRegistered, @@ -20,6 +21,7 @@ export function useRegisterSW(options: RegisterSWOptions = {}) { const [updateServiceWorker] = useState(() => { return registerSW({ immediate, + searchParams, onOfflineReady() { setOfflineReady(true) onOfflineReady?.() diff --git a/src/client/build/register.ts b/src/client/build/register.ts index 2fad68b7..386b9518 100644 --- a/src/client/build/register.ts +++ b/src/client/build/register.ts @@ -17,6 +17,7 @@ export type { RegisterSWOptions } export function registerSW(options: RegisterSWOptions = {}) { const { immediate = false, + searchParams, onNeedRefresh, onOfflineReady, onRegistered, @@ -35,11 +36,15 @@ export function registerSW(options: RegisterSWOptions = {}) { } } + // concatenate the service-worker url and the query search params (if is not empty) + const flattenedSearchParams = new URLSearchParams(searchParams).toString(); + const swScriptURL = ['__SW__', flattenedSearchParams].join("?"); + async function register() { if ('serviceWorker' in navigator) { wb = await import('workbox-window').then(({ Workbox }) => { // __SW__, __SCOPE__ and __TYPE__ will be replaced by virtual module - return new Workbox('__SW__', { scope: '__SCOPE__', type: '__TYPE__' }) + return new Workbox(swScriptURL, { scope: '__SCOPE__', type: '__TYPE__' }) }).catch((e) => { onRegisterError?.(e) return undefined @@ -119,7 +124,7 @@ export function registerSW(options: RegisterSWOptions = {}) { // register the service worker wb.register({ immediate }).then((r) => { if (onRegisteredSW) - onRegisteredSW('__SW__', r) + onRegisteredSW(swScriptURL, r) else onRegistered?.(r) }).catch((e) => { diff --git a/src/client/build/solid.ts b/src/client/build/solid.ts index 76e378ea..488c014e 100644 --- a/src/client/build/solid.ts +++ b/src/client/build/solid.ts @@ -7,6 +7,7 @@ export type { RegisterSWOptions } export function useRegisterSW(options: RegisterSWOptions = {}) { const { immediate = true, + searchParams, onNeedRefresh, onOfflineReady, onRegistered, @@ -19,6 +20,7 @@ export function useRegisterSW(options: RegisterSWOptions = {}) { const updateServiceWorker = registerSW({ immediate, + searchParams, onOfflineReady() { setOfflineReady(true) onOfflineReady?.() diff --git a/src/client/build/svelte.ts b/src/client/build/svelte.ts index f1e71cc1..adb00946 100644 --- a/src/client/build/svelte.ts +++ b/src/client/build/svelte.ts @@ -7,6 +7,7 @@ export type { RegisterSWOptions } export function useRegisterSW(options: RegisterSWOptions = {}) { const { immediate = true, + searchParams, onNeedRefresh, onOfflineReady, onRegistered, @@ -19,6 +20,7 @@ export function useRegisterSW(options: RegisterSWOptions = {}) { const updateServiceWorker = registerSW({ immediate, + searchParams, onOfflineReady() { offlineReady.set(true) onOfflineReady?.() diff --git a/src/client/build/vue.ts b/src/client/build/vue.ts index 4fd6801a..26c8706a 100644 --- a/src/client/build/vue.ts +++ b/src/client/build/vue.ts @@ -7,6 +7,7 @@ export type { RegisterSWOptions } export function useRegisterSW(options: RegisterSWOptions = {}) { const { immediate = true, + searchParams, onNeedRefresh, onOfflineReady, onRegistered, @@ -19,6 +20,7 @@ export function useRegisterSW(options: RegisterSWOptions = {}) { const updateServiceWorker = registerSW({ immediate, + searchParams, onNeedRefresh() { needRefresh.value = true onNeedRefresh?.() diff --git a/src/client/type.d.ts b/src/client/type.d.ts index fcb2a563..33290296 100644 --- a/src/client/type.d.ts +++ b/src/client/type.d.ts @@ -1,5 +1,6 @@ export interface RegisterSWOptions { immediate?: boolean + searchParams?: string | string[][] | URLSearchParams | Record onNeedRefresh?: () => void onOfflineReady?: () => void /** diff --git a/types/index.d.ts b/types/index.d.ts index fcb2a563..33290296 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,5 +1,6 @@ export interface RegisterSWOptions { immediate?: boolean + searchParams?: string | string[][] | URLSearchParams | Record onNeedRefresh?: () => void onOfflineReady?: () => void /** From dc8ebdaedd8715f8a9976a11e79a367c468e0a90 Mon Sep 17 00:00:00 2001 From: iran-110 <70788031+Iran-110@users.noreply.github.com> Date: Tue, 15 Oct 2024 03:15:55 +0330 Subject: [PATCH 2/5] chore: updates examples --- examples/assets-generator/src/pwa.ts | 1 + examples/preact-router/src/ReloadPrompt.tsx | 1 + examples/react-router/src/ReloadPrompt.tsx | 1 + examples/solid-router/src/ReloadPrompt.tsx | 1 + examples/svelte-routify/src/lib/ReloadPrompt.svelte | 1 + examples/sveltekit-pwa/src/lib/components/ReloadPrompt.svelte | 1 + examples/vanilla-js-custom-sw/src/main.js | 1 + examples/vanilla-ts-no-ip/src/main.ts | 1 + examples/vue-router/src/ReloadPrompt.vue | 1 + 9 files changed, 9 insertions(+) diff --git a/examples/assets-generator/src/pwa.ts b/examples/assets-generator/src/pwa.ts index 1afc1ec5..0fe33422 100644 --- a/examples/assets-generator/src/pwa.ts +++ b/examples/assets-generator/src/pwa.ts @@ -9,6 +9,7 @@ console.log(pwaAssetsIcons) registerSW({ immediate: true, + searchParams: { version: '1.0' }, onNeedRefresh() { console.log('onNeedRefresh message should not appear') }, diff --git a/examples/preact-router/src/ReloadPrompt.tsx b/examples/preact-router/src/ReloadPrompt.tsx index af2d7beb..dc1add7f 100644 --- a/examples/preact-router/src/ReloadPrompt.tsx +++ b/examples/preact-router/src/ReloadPrompt.tsx @@ -16,6 +16,7 @@ function ReloadPrompt() { needRefresh: [needRefresh, setNeedRefresh], updateServiceWorker, } = useRegisterSW({ + searchParams: { version: '1.0' }, onRegisteredSW(swUrl, r) { console.log(`Service Worker at: ${swUrl}`) // @ts-expect-error just ignore diff --git a/examples/react-router/src/ReloadPrompt.tsx b/examples/react-router/src/ReloadPrompt.tsx index 1eaaf2b1..6c5eca18 100644 --- a/examples/react-router/src/ReloadPrompt.tsx +++ b/examples/react-router/src/ReloadPrompt.tsx @@ -17,6 +17,7 @@ function ReloadPrompt() { needRefresh: [needRefresh, setNeedRefresh], updateServiceWorker, } = useRegisterSW({ + searchParams: { version: '1.0' }, onRegisteredSW(swUrl, r) { console.log(`Service Worker at: ${swUrl}`) // @ts-expect-error just ignore diff --git a/examples/solid-router/src/ReloadPrompt.tsx b/examples/solid-router/src/ReloadPrompt.tsx index 6ff9fcea..af426c4b 100644 --- a/examples/solid-router/src/ReloadPrompt.tsx +++ b/examples/solid-router/src/ReloadPrompt.tsx @@ -15,6 +15,7 @@ const ReloadPrompt: Component = () => { updateServiceWorker, } = useRegisterSW({ immediate: true, + searchParams: { version: '1.0' }, onRegisteredSW(swUrl, r) { console.log(`Service Worker at: ${swUrl}`) // @ts-expect-error just ignore diff --git a/examples/svelte-routify/src/lib/ReloadPrompt.svelte b/examples/svelte-routify/src/lib/ReloadPrompt.svelte index f1c07a26..73f29f92 100644 --- a/examples/svelte-routify/src/lib/ReloadPrompt.svelte +++ b/examples/svelte-routify/src/lib/ReloadPrompt.svelte @@ -16,6 +16,7 @@ needRefresh, updateServiceWorker, } = useRegisterSW({ + searchParams: { version: '1.0' }, onRegisteredSW(swUrl, r) { // eslint-disable-next-line no-console console.log(`Service Worker at: ${swUrl}`) diff --git a/examples/sveltekit-pwa/src/lib/components/ReloadPrompt.svelte b/examples/sveltekit-pwa/src/lib/components/ReloadPrompt.svelte index 6c907074..ef6b3ecb 100644 --- a/examples/sveltekit-pwa/src/lib/components/ReloadPrompt.svelte +++ b/examples/sveltekit-pwa/src/lib/components/ReloadPrompt.svelte @@ -10,6 +10,7 @@ needRefresh, updateServiceWorker } = useRegisterSW({ + searchParams: { version: '1.0' }, onRegistered(r) { if (reloadSW === 'true') { r && setInterval(() => { diff --git a/examples/vanilla-js-custom-sw/src/main.js b/examples/vanilla-js-custom-sw/src/main.js index 11c50d02..1378e58e 100644 --- a/examples/vanilla-js-custom-sw/src/main.js +++ b/examples/vanilla-js-custom-sw/src/main.js @@ -19,6 +19,7 @@ app.innerHTML = ` registerSW({ immediate: true, + searchParams: { version: '1.0' }, onNeedRefresh() { console.log('onNeedRefresh message should not appear') }, diff --git a/examples/vanilla-ts-no-ip/src/main.ts b/examples/vanilla-ts-no-ip/src/main.ts index 7a99aa6a..85770855 100644 --- a/examples/vanilla-ts-no-ip/src/main.ts +++ b/examples/vanilla-ts-no-ip/src/main.ts @@ -20,6 +20,7 @@ app.innerHTML = ` registerSW({ immediate: true, + searchParams: { version: '1.0' }, onNeedRefresh() { console.log('onNeedRefresh message should not appear') }, diff --git a/examples/vue-router/src/ReloadPrompt.vue b/examples/vue-router/src/ReloadPrompt.vue index 4b60d2b6..29489d5e 100644 --- a/examples/vue-router/src/ReloadPrompt.vue +++ b/examples/vue-router/src/ReloadPrompt.vue @@ -13,6 +13,7 @@ const { updateServiceWorker, } = useRegisterSW({ immediate: true, + searchParams: { version: '1.0' }, onRegisteredSW(swUrl, r) { console.log(`Service Worker at: ${swUrl}`) if (reloadSW === 'true') { From 7988711ae76b5c81a8961221cc5e1510abd6d9d8 Mon Sep 17 00:00:00 2001 From: iran-110 <70788031+Iran-110@users.noreply.github.com> Date: Tue, 15 Oct 2024 03:19:49 +0330 Subject: [PATCH 3/5] chore: updates docs --- docs/frameworks/index.md | 1 + docs/frameworks/preact.md | 1 + docs/frameworks/react.md | 1 + docs/frameworks/solidjs.md | 1 + docs/frameworks/svelte.md | 1 + docs/frameworks/vue.md | 1 + 6 files changed, 6 insertions(+) diff --git a/docs/frameworks/index.md b/docs/frameworks/index.md index fcb900d6..1b3251bc 100644 --- a/docs/frameworks/index.md +++ b/docs/frameworks/index.md @@ -30,6 +30,7 @@ You can find all the `vite-plugin-pwa` virtual modules declarations in the follo declare module 'virtual:pwa-register' { export interface RegisterSWOptions { immediate?: boolean + searchQueryParams?: string | string[][] | URLSearchParams | Record onNeedRefresh?: () => void onOfflineReady?: () => void /** diff --git a/docs/frameworks/preact.md b/docs/frameworks/preact.md index cca556b6..00f1d3d0 100644 --- a/docs/frameworks/preact.md +++ b/docs/frameworks/preact.md @@ -23,6 +23,7 @@ declare module 'virtual:pwa-register/preact' { export interface RegisterSWOptions { immediate?: boolean + searchQueryParams?: string | string[][] | URLSearchParams | Record onNeedRefresh?: () => void onOfflineReady?: () => void /** diff --git a/docs/frameworks/react.md b/docs/frameworks/react.md index 11fe8efb..3d312d22 100644 --- a/docs/frameworks/react.md +++ b/docs/frameworks/react.md @@ -23,6 +23,7 @@ declare module 'virtual:pwa-register/react' { export interface RegisterSWOptions { immediate?: boolean + searchQueryParams?: string | string[][] | URLSearchParams | Record onNeedRefresh?: () => void onOfflineReady?: () => void /** diff --git a/docs/frameworks/solidjs.md b/docs/frameworks/solidjs.md index 93256003..2422ad99 100644 --- a/docs/frameworks/solidjs.md +++ b/docs/frameworks/solidjs.md @@ -23,6 +23,7 @@ declare module 'virtual:pwa-register/solid' { export interface RegisterSWOptions { immediate?: boolean + searchQueryParams?: string | string[][] | URLSearchParams | Record onNeedRefresh?: () => void onOfflineReady?: () => void /** diff --git a/docs/frameworks/svelte.md b/docs/frameworks/svelte.md index dcd7a676..10304dfe 100644 --- a/docs/frameworks/svelte.md +++ b/docs/frameworks/svelte.md @@ -23,6 +23,7 @@ declare module 'virtual:pwa-register/svelte' { export interface RegisterSWOptions { immediate?: boolean + searchQueryParams?: string | string[][] | URLSearchParams | Record onNeedRefresh?: () => void onOfflineReady?: () => void /** diff --git a/docs/frameworks/vue.md b/docs/frameworks/vue.md index f61797f2..04ed3f70 100644 --- a/docs/frameworks/vue.md +++ b/docs/frameworks/vue.md @@ -21,6 +21,7 @@ declare module 'virtual:pwa-register/vue' { export interface RegisterSWOptions { immediate?: boolean + searchQueryParams?: string | string[][] | URLSearchParams | Record onNeedRefresh?: () => void onOfflineReady?: () => void /** From b901a7fe01c5828901841e52dfda24327b8f05c2 Mon Sep 17 00:00:00 2001 From: iran-110 <70788031+Iran-110@users.noreply.github.com> Date: Tue, 15 Oct 2024 04:52:54 +0330 Subject: [PATCH 4/5] fix: a minor fix --- src/client/build/register.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/build/register.ts b/src/client/build/register.ts index 386b9518..59388f71 100644 --- a/src/client/build/register.ts +++ b/src/client/build/register.ts @@ -38,7 +38,7 @@ export function registerSW(options: RegisterSWOptions = {}) { // concatenate the service-worker url and the query search params (if is not empty) const flattenedSearchParams = new URLSearchParams(searchParams).toString(); - const swScriptURL = ['__SW__', flattenedSearchParams].join("?"); + const swScriptURL = ['__SW__', flattenedSearchParams].filter(Boolean).join("?"); async function register() { if ('serviceWorker' in navigator) { From c330a5df8529d6542b3dced43482037b785ce86d Mon Sep 17 00:00:00 2001 From: iran-110 <70788031+Iran-110@users.noreply.github.com> Date: Thu, 28 Nov 2024 22:01:56 +0330 Subject: [PATCH 5/5] Revert "chore: updates docs" This reverts commit 7988711ae76b5c81a8961221cc5e1510abd6d9d8. --- docs/frameworks/index.md | 1 - docs/frameworks/preact.md | 1 - docs/frameworks/react.md | 1 - docs/frameworks/solidjs.md | 1 - docs/frameworks/svelte.md | 1 - docs/frameworks/vue.md | 1 - 6 files changed, 6 deletions(-) diff --git a/docs/frameworks/index.md b/docs/frameworks/index.md index 1b3251bc..fcb900d6 100644 --- a/docs/frameworks/index.md +++ b/docs/frameworks/index.md @@ -30,7 +30,6 @@ You can find all the `vite-plugin-pwa` virtual modules declarations in the follo declare module 'virtual:pwa-register' { export interface RegisterSWOptions { immediate?: boolean - searchQueryParams?: string | string[][] | URLSearchParams | Record onNeedRefresh?: () => void onOfflineReady?: () => void /** diff --git a/docs/frameworks/preact.md b/docs/frameworks/preact.md index 00f1d3d0..cca556b6 100644 --- a/docs/frameworks/preact.md +++ b/docs/frameworks/preact.md @@ -23,7 +23,6 @@ declare module 'virtual:pwa-register/preact' { export interface RegisterSWOptions { immediate?: boolean - searchQueryParams?: string | string[][] | URLSearchParams | Record onNeedRefresh?: () => void onOfflineReady?: () => void /** diff --git a/docs/frameworks/react.md b/docs/frameworks/react.md index 3d312d22..11fe8efb 100644 --- a/docs/frameworks/react.md +++ b/docs/frameworks/react.md @@ -23,7 +23,6 @@ declare module 'virtual:pwa-register/react' { export interface RegisterSWOptions { immediate?: boolean - searchQueryParams?: string | string[][] | URLSearchParams | Record onNeedRefresh?: () => void onOfflineReady?: () => void /** diff --git a/docs/frameworks/solidjs.md b/docs/frameworks/solidjs.md index 2422ad99..93256003 100644 --- a/docs/frameworks/solidjs.md +++ b/docs/frameworks/solidjs.md @@ -23,7 +23,6 @@ declare module 'virtual:pwa-register/solid' { export interface RegisterSWOptions { immediate?: boolean - searchQueryParams?: string | string[][] | URLSearchParams | Record onNeedRefresh?: () => void onOfflineReady?: () => void /** diff --git a/docs/frameworks/svelte.md b/docs/frameworks/svelte.md index 10304dfe..dcd7a676 100644 --- a/docs/frameworks/svelte.md +++ b/docs/frameworks/svelte.md @@ -23,7 +23,6 @@ declare module 'virtual:pwa-register/svelte' { export interface RegisterSWOptions { immediate?: boolean - searchQueryParams?: string | string[][] | URLSearchParams | Record onNeedRefresh?: () => void onOfflineReady?: () => void /** diff --git a/docs/frameworks/vue.md b/docs/frameworks/vue.md index 04ed3f70..f61797f2 100644 --- a/docs/frameworks/vue.md +++ b/docs/frameworks/vue.md @@ -21,7 +21,6 @@ declare module 'virtual:pwa-register/vue' { export interface RegisterSWOptions { immediate?: boolean - searchQueryParams?: string | string[][] | URLSearchParams | Record onNeedRefresh?: () => void onOfflineReady?: () => void /**