chore(pwa): improve DX for $pwa (#2498)

This commit is contained in:
Joaquín Sánchez 2023-12-09 17:04:41 +01:00 committed by GitHub
parent 3dbdb99118
commit 9155c32ece
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 40 additions and 17 deletions

View file

@ -50,15 +50,15 @@ export default defineNuxtModule<VitePWANuxtOptions>({
baseURL: '/', baseURL: '/',
maxAge: 0, maxAge: 0,
}) })
if (options.disable) {
addPlugin({ src: resolver.resolve('./runtime/pwa-plugin-stub.client') }) // Register PWA types
} nuxt.hook('prepare:types', ({ references }) => {
else { // TODO: remove this once JetBrains fixes the issue with types: remove also the dts file
// Register PWA types references.push({ path: resolver.resolve('runtime/types') })
nuxt.hook('prepare:types', ({ references }) => { references.push({ types: 'vite-plugin-pwa/info' })
references.push({ types: 'vite-plugin-pwa/info' }) references.push({ types: 'vite-plugin-pwa/vue' })
references.push({ types: 'vite-plugin-pwa/client' }) })
}) if (!options.disable) {
// Inject $pwa helper throughout app // Inject $pwa helper throughout app
addPlugin({ src: resolver.resolve('./runtime/pwa-plugin.client') }) addPlugin({ src: resolver.resolve('./runtime/pwa-plugin.client') })
} }

View file

@ -1,7 +0,0 @@
export default defineNuxtPlugin(() => {
return {
provide: {
pwa: {},
},
}
})

View file

@ -1,4 +1,6 @@
import { useRegisterSW } from 'virtual:pwa-register/vue' import { useRegisterSW } from 'virtual:pwa-register/vue'
import type { UnwrapNestedRefs } from 'vue'
import type { PwaInjection } from './types'
import { STORAGE_KEY_PWA_HIDE_INSTALL } from '~/constants' import { STORAGE_KEY_PWA_HIDE_INSTALL } from '~/constants'
export default defineNuxtPlugin(() => { export default defineNuxtPlugin(() => {
@ -115,7 +117,7 @@ export default defineNuxtPlugin(() => {
needRefresh, needRefresh,
updateServiceWorker, updateServiceWorker,
close, close,
}), }) satisfies UnwrapNestedRefs<PwaInjection>,
}, },
} }
}) })

28
modules/pwa/runtime/types.d.ts vendored Normal file
View file

@ -0,0 +1,28 @@
import type { Ref } from 'vue'
import type { UnwrapNestedRefs } from 'vue'
export interface PwaInjection {
isInstalled: boolean
showInstallPrompt: Ref<boolean>
cancelInstall: () => void
install: () => Promise<void>
swActivated: Ref<boolean>
registrationError: Ref<boolean>
needRefresh: Ref<boolean>
updateServiceWorker: (reloadPage?: boolean | undefined) => Promise<void>
close: () => Promise<void>
}
declare module '#app' {
interface NuxtApp {
$pwa?: UnwrapNestedRefs<PwaInjection>
}
}
declare module '@vue/runtime-core' {
interface ComponentCustomProperties {
$pwa?: UnwrapNestedRefs<PwaInjection>
}
}
export {}