From 0a45f21a0c533478868b683031089a84b027b622 Mon Sep 17 00:00:00 2001 From: dominikg Date: Sat, 15 Jan 2022 13:13:22 +0100 Subject: [PATCH] fix: ensure importAnalysis plugin and static middleware use the same code to determine filepath from url --- packages/vite/src/node/plugins/importAnalysis.ts | 7 +++---- packages/vite/src/node/server/middlewares/static.ts | 6 ++---- packages/vite/src/node/utils.ts | 8 +++++++- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/vite/src/node/plugins/importAnalysis.ts b/packages/vite/src/node/plugins/importAnalysis.ts index 953304e0ac38c2..082aa35dfae213 100644 --- a/packages/vite/src/node/plugins/importAnalysis.ts +++ b/packages/vite/src/node/plugins/importAnalysis.ts @@ -21,7 +21,8 @@ import { normalizePath, removeImportQuery, unwrapId, - moduleListContains + moduleListContains, + fsPathFromUrl } from '../utils' import { debugHmr, @@ -399,9 +400,7 @@ export function importAnalysisPlugin(config: ResolvedConfig): Plugin { let url = normalizedUrl // record as safe modules - server?.moduleGraph.safeModulesPath.add( - cleanUrl(url).slice(4 /* '/@fs'.length */) - ) + server?.moduleGraph.safeModulesPath.add(fsPathFromUrl(url)) // rewrite if (url !== specifier) { diff --git a/packages/vite/src/node/server/middlewares/static.ts b/packages/vite/src/node/server/middlewares/static.ts index 0b8e2db93255ed..379e4f4923c7a9 100644 --- a/packages/vite/src/node/server/middlewares/static.ts +++ b/packages/vite/src/node/server/middlewares/static.ts @@ -4,12 +4,11 @@ import type { Options } from 'sirv' import sirv from 'sirv' import type { Connect } from 'types/connect' import type { ViteDevServer } from '../..' -import { normalizePath } from '../..' import { FS_PREFIX } from '../../constants' import { cleanUrl, - ensureLeadingSlash, fsPathFromId, + fsPathFromUrl, isImportRequest, isInternalRequest, isWindows, @@ -148,8 +147,7 @@ export function isFileServingAllowed( ): boolean { if (!server.config.server.fs.strict) return true - const cleanedUrl = cleanUrl(url) - const file = ensureLeadingSlash(normalizePath(cleanedUrl)) + const file = fsPathFromUrl(url) if (server.config.server.fs.deny.some((i) => isMatch(file, i, _matchOptions))) return false diff --git a/packages/vite/src/node/utils.ts b/packages/vite/src/node/utils.ts index d723b25a54122d..f6fa05f2c3b7e1 100644 --- a/packages/vite/src/node/utils.ts +++ b/packages/vite/src/node/utils.ts @@ -147,12 +147,18 @@ export function normalizePath(id: string): string { } export function fsPathFromId(id: string): string { - const fsPath = normalizePath(id.slice(FS_PREFIX.length)) + const fsPath = normalizePath( + id.startsWith(FS_PREFIX) ? id.slice(FS_PREFIX.length) : id + ) return fsPath.startsWith('/') || fsPath.match(VOLUME_RE) ? fsPath : `/${fsPath}` } +export function fsPathFromUrl(url: string): string { + return fsPathFromId(cleanUrl(url)) +} + export function ensureVolumeInPath(file: string): string { return isWindows ? path.resolve(file) : file }