From 78bad4abbab0ae3accfe6aabbd9463a9618c9a48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20S=C3=A1nchez?= Date: Wed, 3 May 2023 11:23:26 +0200 Subject: [PATCH] fix(browser): failing to load vitest/utils (#3190) --- packages/browser/src/client/main.ts | 4 ++-- packages/browser/src/client/runner.ts | 19 ++++++++-------- packages/browser/src/node/index.ts | 31 ++++++++++++++++++++++++--- 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/packages/browser/src/client/main.ts b/packages/browser/src/client/main.ts index 1a0f434ab187..25c91f157f5a 100644 --- a/packages/browser/src/client/main.ts +++ b/packages/browser/src/client/main.ts @@ -22,7 +22,7 @@ export const ENTRY_URL = `${ let config: ResolvedConfig | undefined let runner: VitestRunner | undefined -const browserHashMap = new Map() +const browserHashMap = new Map() const url = new URL(location.href) const testId = url.searchParams.get('id') || 'unknown' @@ -130,7 +130,7 @@ async function runTests(paths: string[], config: ResolvedConfig) { }) const now = `${new Date().getTime()}` - files.forEach(i => browserHashMap.set(i, now)) + files.forEach(i => browserHashMap.set(i, [true, now])) for (const file of files) await startTests([file], runner) diff --git a/packages/browser/src/client/runner.ts b/packages/browser/src/client/runner.ts index d73c2ccc6ea3..c45f35dbc767 100644 --- a/packages/browser/src/client/runner.ts +++ b/packages/browser/src/client/runner.ts @@ -4,7 +4,7 @@ import type { ResolvedConfig } from '#types' interface BrowserRunnerOptions { config: ResolvedConfig - browserHashMap: Map + browserHashMap: Map } interface CoverageHandler { @@ -14,7 +14,7 @@ interface CoverageHandler { export function createBrowserRunner(original: any, coverageModule: CoverageHandler | null) { return class BrowserTestRunner extends original { public config: ResolvedConfig - hashMap = new Map() + hashMap = new Map() constructor(options: BrowserRunnerOptions) { super(options.config) @@ -54,15 +54,16 @@ export function createBrowserRunner(original: any, coverageModule: CoverageHandl } async importFile(filepath: string) { - const match = filepath.match(/^(\w:\/)/) - let hash = this.hashMap.get(filepath) - if (!hash) { + let [test, hash] = this.hashMap.get(filepath) ?? [false, ''] + if (hash === '') { hash = Date.now().toString() - this.hashMap.set(filepath, hash) + this.hashMap.set(filepath, [false, hash]) } - const importpath = match - ? `/@fs/${filepath.slice(match[1].length)}?v=${hash}` - : `${filepath}?v=${hash}` + + // on Windows we need the unit to resolve the test file + const importpath = /^\w:/.test(filepath) + ? `/@fs/${filepath}?${test ? 'browserv' : 'v'}=${hash}` + : `${filepath}?${test ? 'browserv' : 'v'}=${hash}` await import(importpath) } } diff --git a/packages/browser/src/node/index.ts b/packages/browser/src/node/index.ts index 541b1758d67e..174408d8e299 100644 --- a/packages/browser/src/node/index.ts +++ b/packages/browser/src/node/index.ts @@ -41,13 +41,38 @@ export default (project: any, base = '/'): Plugin[] => { config() { return { optimizeDeps: { - exclude: [...polyfills, ...builtinModules], + exclude: [ + ...polyfills, + ...builtinModules, + 'vitest', + 'vitest/utils', + 'vitest/browser', + 'vitest/runners', + '@vitest/utils', + ], + include: [ + '@vitest/utils > concordance', + '@vitest/utils > loupe', + '@vitest/utils > pretty-format', + 'vitest > chai', + ], }, } }, async resolveId(id) { - if (!builtinModules.includes(id) && !polyfills.includes(id) && !id.startsWith('node:')) - return + if (!builtinModules.includes(id) && !polyfills.includes(id) && !id.startsWith('node:')) { + if (!/\?browserv=\w+$/.test(id)) + return + + let useId = id.slice(0, id.lastIndexOf('?')) + if (useId.startsWith('/@fs/')) + useId = useId.slice(5) + + if (/^\w:/.test(useId)) + useId = useId.replace(/\\/g, '/') + + return useId + } id = normalizeId(id) return { id: await polyfillPath(id), moduleSideEffects: false }