diff --git a/configuration.d.ts b/configuration.d.ts index 489a542..d796209 100644 --- a/configuration.d.ts +++ b/configuration.d.ts @@ -3,4 +3,6 @@ declare module 'virtual:nuxt-pwa-configuration' { export const display: 'fullscreen' | 'standalone' | 'minimal-ui' | 'browser' export const installPrompt: string | undefined export const periodicSyncForUpdates: number + export const i18nSplitManifest: boolean + export const i18nSplitServiceWorker: boolean } diff --git a/src/runtime/plugins/pwa.client.ts b/src/runtime/plugins/pwa.client.ts index a82db88..73233dd 100644 --- a/src/runtime/plugins/pwa.client.ts +++ b/src/runtime/plugins/pwa.client.ts @@ -1,14 +1,14 @@ import { nextTick, reactive, ref } from 'vue' import type { UnwrapNestedRefs } from 'vue' import { useRegisterSW } from 'virtual:pwa-register/vue' -import { display, installPrompt, periodicSyncForUpdates } from 'virtual:nuxt-pwa-configuration' +import { display, installPrompt, periodicSyncForUpdates, i18nSplitServiceWorker } from 'virtual:nuxt-pwa-configuration' import type { BeforeInstallPromptEvent, PwaInjection, UserChoice } from './types' import { defineNuxtPlugin } from '#imports' import type { Plugin } from '#app' const plugin: Plugin<{ pwa?: UnwrapNestedRefs -}> = defineNuxtPlugin(() => { +}> = defineNuxtPlugin(({$router, $config}) => { const registrationError = ref(false) const swActivated = ref(false) const showInstallPrompt = ref(false) @@ -50,10 +50,18 @@ const plugin: Plugin<{ }, timeout) } + let baseUrl = "" + if (i18nSplitServiceWorker) { + const separator = $config.public.i18n.routesNameSeparator + const locale = $router.currentRoute.value.name.split(separator)[1] + baseUrl = $router.resolve({name:`index${separator}${locale}`}).path + } + const { offlineReady, needRefresh, updateServiceWorker, } = useRegisterSW({ immediate: true, + baseUrl: baseUrl, onRegisterError() { registrationError.value = true }, diff --git a/src/utils/module.ts b/src/utils/module.ts index 258a898..ebadcc1 100644 --- a/src/utils/module.ts +++ b/src/utils/module.ts @@ -178,6 +178,8 @@ export async function doSetup(options: PwaModuleOptions, nuxt: Nuxt) { export const display = '${display}' export const installPrompt = ${JSON.stringify(installPrompt)} export const periodicSyncForUpdates = ${typeof client.periodicSyncForUpdates === 'number' ? client.periodicSyncForUpdates : 0} +export const i18nSplitManifest = ${options.i18n?.splitManifest} +export const i18nSplitServiceWorker = ${options.i18n?.splitServiceWorker} ` } },