From 6117b46b7832fc5384fb4a20af714d5cf85bb2f6 Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 21 Jun 2023 17:23:15 +0800 Subject: [PATCH 1/3] fix(indexHtml): decode html URI --- packages/vite/src/node/plugins/html.ts | 2 +- .../vite/src/node/server/middlewares/indexHtml.ts | 6 +++++- playground/html/__tests__/html.spec.ts | 11 +++++++++++ "playground/html/a \303\241.html" | 5 +++++ playground/html/vite.config.js | 1 + 5 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 "playground/html/a \303\241.html" diff --git a/packages/vite/src/node/plugins/html.ts b/packages/vite/src/node/plugins/html.ts index b76c36dbda71df..57e11943aac283 100644 --- a/packages/vite/src/node/plugins/html.ts +++ b/packages/vite/src/node/plugins/html.ts @@ -97,7 +97,7 @@ export function htmlInlineProxyPlugin(config: ResolvedConfig): Plugin { const index = Number(proxyMatch[1]) const file = cleanUrl(id) const url = file.replace(normalizePath(config.root), '') - const result = htmlProxyMap.get(config)!.get(url)![index] + const result = htmlProxyMap.get(config)!.get(url)?.[index] if (result) { return result } else { diff --git a/packages/vite/src/node/server/middlewares/indexHtml.ts b/packages/vite/src/node/server/middlewares/indexHtml.ts index 9de3d1f7c7b548..13a1072c46c5a9 100644 --- a/packages/vite/src/node/server/middlewares/indexHtml.ts +++ b/packages/vite/src/node/server/middlewares/indexHtml.ts @@ -331,7 +331,11 @@ export function indexHtmlMiddleware( if (fs.existsSync(filename)) { try { let html = await fsp.readFile(filename, 'utf-8') - html = await server.transformIndexHtml(url, html, req.originalUrl) + html = await server.transformIndexHtml( + decodeURI(url), + html, + req.originalUrl, + ) return send(req, res, html, 'html', { headers: server.config.server.headers, }) diff --git a/playground/html/__tests__/html.spec.ts b/playground/html/__tests__/html.spec.ts index 144fcfe1d0003a..1b77efb6338b11 100644 --- a/playground/html/__tests__/html.spec.ts +++ b/playground/html/__tests__/html.spec.ts @@ -303,3 +303,14 @@ describe('side-effects', () => { expect(browserLogs).toContain('message from sideEffects script') }) }) + +describe('special character', () => { + beforeAll(async () => { + await page.goto(viteTestUrl + '/a á.html') + }) + + test('should fetch html proxy', async () => { + console.log(browserLogs) + expect(browserLogs).toContain('special character') + }) +}) diff --git "a/playground/html/a \303\241.html" "b/playground/html/a \303\241.html" new file mode 100644 index 00000000000000..5a3c9ae4e1a28a --- /dev/null +++ "b/playground/html/a \303\241.html" @@ -0,0 +1,5 @@ +

Special Character

+ + diff --git a/playground/html/vite.config.js b/playground/html/vite.config.js index c03421c16045b0..78eca9ea504a9b 100644 --- a/playground/html/vite.config.js +++ b/playground/html/vite.config.js @@ -29,6 +29,7 @@ export default defineConfig({ importmapOrder: resolve(__dirname, 'importmapOrder.html'), env: resolve(__dirname, 'env.html'), sideEffects: resolve(__dirname, 'side-effects/index.html'), + 'a á': resolve(__dirname, 'a á.html'), }, }, }, From 76ebba26ad53da6efadb2367929c2f0333fd5945 Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 21 Jun 2023 17:31:57 +0800 Subject: [PATCH 2/3] chore: remove useless console.log --- playground/html/__tests__/html.spec.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/playground/html/__tests__/html.spec.ts b/playground/html/__tests__/html.spec.ts index 1b77efb6338b11..6d66fa7622a5f3 100644 --- a/playground/html/__tests__/html.spec.ts +++ b/playground/html/__tests__/html.spec.ts @@ -310,7 +310,6 @@ describe('special character', () => { }) test('should fetch html proxy', async () => { - console.log(browserLogs) expect(browserLogs).toContain('special character') }) }) From 00453a5c663003672fca53510c11a9dfe2320e56 Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 21 Jun 2023 22:21:24 +0800 Subject: [PATCH 3/3] chore: decode html URI in devHtmlHook --- packages/vite/src/node/server/middlewares/indexHtml.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/vite/src/node/server/middlewares/indexHtml.ts b/packages/vite/src/node/server/middlewares/indexHtml.ts index 13a1072c46c5a9..3948f997a3bb91 100644 --- a/packages/vite/src/node/server/middlewares/indexHtml.ts +++ b/packages/vite/src/node/server/middlewares/indexHtml.ts @@ -150,6 +150,7 @@ const devHtmlHook: IndexHtmlTransformHook = async ( ) => { const { config, moduleGraph, watcher } = server! const base = config.base || '/' + htmlPath = decodeURI(htmlPath) let proxyModulePath: string let proxyModuleUrl: string @@ -331,11 +332,7 @@ export function indexHtmlMiddleware( if (fs.existsSync(filename)) { try { let html = await fsp.readFile(filename, 'utf-8') - html = await server.transformIndexHtml( - decodeURI(url), - html, - req.originalUrl, - ) + html = await server.transformIndexHtml(url, html, req.originalUrl) return send(req, res, html, 'html', { headers: server.config.server.headers, })