From 2bb9a391de261c2804e52d520daf0730fa1ce265 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Tue, 20 Dec 2022 14:14:56 +0300 Subject: [PATCH] fix: improve "isInternaRequest" check (#2541) --- packages/vite-node/src/client.ts | 59 +++++++++++++++++--------------- packages/vite-node/src/utils.ts | 9 ++++- test/core/test/imports.test.ts | 6 ++++ 3 files changed, 45 insertions(+), 29 deletions(-) diff --git a/packages/vite-node/src/client.ts b/packages/vite-node/src/client.ts index c83d142b7df0..f7e3d789a73e 100644 --- a/packages/vite-node/src/client.ts +++ b/packages/vite-node/src/client.ts @@ -13,35 +13,38 @@ import { extractSourceMap } from './source-map' const debugExecute = createDebug('vite-node:client:execute') const debugNative = createDebug('vite-node:client:native') -export const DEFAULT_REQUEST_STUBS = { - '/@vite/client': { - injectQuery: (id: string) => id, - createHotContext() { - return { - accept: () => {}, - prune: () => {}, - dispose: () => {}, - decline: () => {}, - invalidate: () => {}, - on: () => {}, - } - }, - updateStyle(id: string, css: string) { - if (typeof document === 'undefined') - return - - const element = document.getElementById(id) - if (element) - element.remove() - - const head = document.querySelector('head') - const style = document.createElement('style') - style.setAttribute('type', 'text/css') - style.id = id - style.innerHTML = css - head?.appendChild(style) - }, +const clientStub = { + injectQuery: (id: string) => id, + createHotContext() { + return { + accept: () => {}, + prune: () => {}, + dispose: () => {}, + decline: () => {}, + invalidate: () => {}, + on: () => {}, + } }, + updateStyle(id: string, css: string) { + if (typeof document === 'undefined') + return + + const element = document.getElementById(id) + if (element) + element.remove() + + const head = document.querySelector('head') + const style = document.createElement('style') + style.setAttribute('type', 'text/css') + style.id = id + style.innerHTML = css + head?.appendChild(style) + }, +} + +export const DEFAULT_REQUEST_STUBS = { + '/@vite/client': clientStub, + '@vite/client': clientStub, } export class ModuleCacheMap extends Map { diff --git a/packages/vite-node/src/utils.ts b/packages/vite-node/src/utils.ts index 8ab153674cd9..c98ef475c24d 100644 --- a/packages/vite-node/src/utils.ts +++ b/packages/vite-node/src/utils.ts @@ -41,8 +41,15 @@ export const hashRE = /#.*$/s export const cleanUrl = (url: string): string => url.replace(hashRE, '').replace(queryRE, '') +const internalRequests = [ + '@vite/client', + '@vite/env', +] + +const internalRequestRegexp = new RegExp(`^/?(${internalRequests.join('|')})$`) + export const isInternalRequest = (id: string): boolean => { - return id.startsWith('/@vite/') + return internalRequestRegexp.test(id) } export function normalizeModuleId(id: string) { diff --git a/test/core/test/imports.test.ts b/test/core/test/imports.test.ts index f803eb01a7a0..309928377676 100644 --- a/test/core/test/imports.test.ts +++ b/test/core/test/imports.test.ts @@ -61,3 +61,9 @@ test('dynamic import throws an error', async () => { // @ts-expect-error path does not exist await expect(() => import('./some-unknown-path')).rejects.toThrowError(/Failed to load/) }) + +test('can import @vite/client', async () => { + const name = '@vite/client' + await expect(import(name)).resolves.not.toThrow() + await expect(import(`/${name}`)).resolves.not.toThrow() +})