Skip to content

Commit 54f017c

Browse files
authored
feat: add pwa:beforeBuildServiceWorker Nuxt hook (#196)
* feat: add `pwa:beforeBuildServiceWorker` Nuxt hook * chore: add experimental `includeAllowlist` * chore: use also Nuxt `pages:resolved` hook * chore: rename module hook render pages param * chore: remove experimental allowlist * chore: fix jsdoc
1 parent 558caf3 commit 54f017c

File tree

4 files changed

+37
-7
lines changed

4 files changed

+37
-7
lines changed

playground/nuxt.config.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,14 @@ const sw = process.env.SW === 'true'
55
export default defineNuxtConfig({
66
/* ssr: false, */
77
// typescript,
8-
modules: ['@vite-pwa/nuxt'],
8+
modules: [
9+
'@vite-pwa/nuxt',
10+
(_, nuxt) => {
11+
nuxt.hook('pwa:beforeBuildServiceWorker', (options) => {
12+
console.log('pwa:beforeBuildServiceWorker: ', options.base)
13+
})
14+
},
15+
],
916
future: {
1017
typescriptBundlerResolution: true,
1118
},
@@ -20,7 +27,7 @@ export default defineNuxtConfig({
2027
},
2128
},
2229
prerender: {
23-
routes: ['/', '/about'],
30+
routes: ['/'/* , '/about' */],
2431
},
2532
},
2633
imports: {
@@ -73,6 +80,9 @@ export default defineNuxtConfig({
7380
// if enabling periodic sync for update use 1 hour or so (periodicSyncForUpdates: 3600)
7481
periodicSyncForUpdates: 20,
7582
},
83+
experimental: {
84+
includeAllowlist: true,
85+
},
7686
devOptions: {
7787
enabled: true,
7888
suppressWarnings: true,

src/module.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { HookResult } from '@nuxt/schema'
2-
import type { PwaModuleOptions } from './types'
2+
import type { PwaModuleOptions, ResolvedVitePWAOptions } from './types'
33
import { defineNuxtModule } from '@nuxt/kit'
44
import { version } from '../package.json'
55
import { doSetup } from './utils/module'
@@ -8,6 +8,10 @@ export * from './types'
88

99
export interface ModuleOptions extends PwaModuleOptions {}
1010

11+
export interface ModuleHooks {
12+
'pwa:beforeBuildServiceWorker': (options: ResolvedVitePWAOptions) => HookResult
13+
}
14+
1115
export interface ModuleRuntimeHooks {
1216
/**
1317
* Emitted when the service worker is registered

src/types.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import type { VitePWAOptions } from 'vite-plugin-pwa'
22

3+
export type { ResolvedVitePWAOptions } from 'vite-plugin-pwa'
4+
35
export interface ClientOptions {
46
/**
57
* Exposes the plugin: defaults to true.
@@ -52,11 +54,12 @@ export interface PwaModuleOptions extends Partial<VitePWAOptions> {
5254
* const newUrl = new URL(url.href)
5355
* newUrl.search = ''
5456
* urls.push(newUrl)
55-
* }
56-
* return urls
57-
* }
58-
* }
57+
* }
58+
* return urls
59+
* }
60+
* }
5961
* )
62+
* ```
6063
*/
6164
enableWorkboxPayloadQueryParams?: true
6265
}

src/utils/config.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,19 @@ export function configurePWAOptions(
112112
outDir: options.outDir,
113113
}
114114
}
115+
116+
const integration = options.integration ?? {}
117+
const {
118+
beforeBuildServiceWorker: original,
119+
...rest
120+
} = integration
121+
options.integration = {
122+
...rest,
123+
async beforeBuildServiceWorker(resolvedPwaOptions) {
124+
await original?.(resolvedPwaOptions)
125+
await nuxt.callHook('pwa:beforeBuildServiceWorker', resolvedPwaOptions)
126+
},
127+
}
115128
}
116129

117130
function createManifestTransform(

0 commit comments

Comments
 (0)