Skip to content

Commit a38801c

Browse files
authored
fix: remove missing sourcemap vue-router warnings (#172)
1 parent c824e78 commit a38801c

File tree

4 files changed

+89
-14
lines changed

4 files changed

+89
-14
lines changed

package.json

+10-9
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
"dev:preview:generate": "nr dev:generate && serve playground/dist",
5050
"release": "bumpp && npm publish",
5151
"lint": "eslint .",
52-
"lint-fix": "nr lint --fix",
52+
"lint:fix": "nr lint --fix",
5353
"test:build:serve": "PORT=4173 node playground/.output/server/index.mjs",
5454
"test:generate:serve": "PORT=4173 serve playground/dist",
5555
"test:build": "nr dev:build && NUXT_ECOSYSTEM_CI=true TEST_BUILD=true vitest run && TEST_BUILD=true playwright test",
@@ -60,6 +60,14 @@
6060
"test": "nr test:build && nr test:generate",
6161
"test:with-build": "nr dev:prepare && nr prepack && nr test"
6262
},
63+
"peerDependencies": {
64+
"@vite-pwa/assets-generator": "^0.2.6"
65+
},
66+
"peerDependenciesMeta": {
67+
"@vite-pwa/assets-generator": {
68+
"optional": true
69+
}
70+
},
6371
"dependencies": {
6472
"@nuxt/kit": "^3.9.0",
6573
"pathe": "^1.1.1",
@@ -88,20 +96,13 @@
8896
"resolutions": {
8997
"@nuxt/kit": "^3.10.1"
9098
},
91-
"peerDependencies": {
92-
"@vite-pwa/assets-generator": "^0.2.6"
93-
},
94-
"peerDependenciesMeta": {
95-
"@vite-pwa/assets-generator": {
96-
"optional": true
97-
}
98-
},
9999
"build": {
100100
"externals": [
101101
"node:child_process",
102102
"node:fs",
103103
"consola",
104104
"esbuild",
105+
"h3",
105106
"pathe",
106107
"rollup",
107108
"ufo",

playground-assets/nuxt.config.ts

-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
import process from 'node:process'
2-
3-
const sw = process.env.SW === 'true'
4-
51
export default defineNuxtConfig({
62
/* ssr: false, */
73
// typescript,

src/utils/dev.ts

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { join } from 'node:path'
2+
import fs from 'node:fs'
3+
import { eventHandler } from 'h3'
4+
5+
export function dev(
6+
swMap: string,
7+
resolvedSwMapFile: string,
8+
worboxMap: string,
9+
buildDir: string,
10+
baseURL: string,
11+
) {
12+
return eventHandler(async (event) => {
13+
const url = event.path
14+
if (!url)
15+
return
16+
17+
const file = url === swMap
18+
? resolvedSwMapFile
19+
: url.startsWith(worboxMap) && url.endsWith('.js.map')
20+
? join(
21+
buildDir,
22+
'dev-sw-dist',
23+
url.slice(baseURL.length),
24+
)
25+
: undefined
26+
27+
if (file) {
28+
try {
29+
await waitFor(() => fs.existsSync(file))
30+
const map = fs.readFileSync(file, 'utf-8')
31+
event.headers.set('Content-Type', 'application/json')
32+
event.headers.set('Cache-Control', 'public, max-age=0, must-revalidate')
33+
event.headers.set('Content-Length', `${map.length}`)
34+
event.node.res.end(map)
35+
}
36+
catch {
37+
}
38+
}
39+
})
40+
}
41+
42+
async function waitFor(method: () => boolean, retries = 5): Promise<void> {
43+
if (method())
44+
return
45+
46+
if (retries === 0)
47+
throw new Error('Timeout in waitFor')
48+
49+
await new Promise(resolve => setTimeout(resolve, 300))
50+
51+
return waitFor(method, retries - 1)
52+
}

src/utils/module.ts

+27-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
import { join } from 'node:path'
22
import { mkdir } from 'node:fs/promises'
3-
import { addComponent, addPlugin, createResolver, extendWebpackConfig, getNuxtVersion } from '@nuxt/kit'
3+
import {
4+
addComponent,
5+
addDevServerHandler,
6+
addPlugin,
7+
createResolver,
8+
extendWebpackConfig,
9+
getNuxtVersion,
10+
} from '@nuxt/kit'
411
import type { Plugin } from 'vite'
512
import type { Nuxt } from '@nuxt/schema'
613
import type { VitePluginPWAAPI } from 'vite-plugin-pwa'
@@ -254,6 +261,25 @@ export const periodicSyncForUpdates = ${typeof client.periodicSyncForUpdates ===
254261
viteServer.middlewares.stack.push({ route: suppressWarnings, handle: emptyHandle })
255262
})
256263
}
264+
const { sourcemap = nuxt.options.sourcemap.client === true } = options.workbox ?? {}
265+
if (sourcemap) {
266+
const swMap = `${nuxt.options.app.baseURL}${options.filename ?? 'sw.js'}.map`
267+
const resolvedSwMapFile = join(nuxt.options.buildDir, 'dev-sw-dist', swMap)
268+
const worboxMap = `${nuxt.options.app.baseURL}workbox-`
269+
addDevServerHandler({
270+
route: '',
271+
handler: await import('h3').then(({ defineLazyEventHandler }) => defineLazyEventHandler(async () => {
272+
const { dev } = await import('./dev')
273+
return dev(
274+
swMap,
275+
resolvedSwMapFile,
276+
worboxMap,
277+
nuxt.options.buildDir,
278+
nuxt.options.app.baseURL,
279+
)
280+
})),
281+
})
282+
}
257283
}
258284
}
259285
else {

0 commit comments

Comments
 (0)