Skip to content

Commit 00a3916

Browse files
committed
fix(browser): optimize build output and always prebundle vitest
1 parent 142c735 commit 00a3916

File tree

14 files changed

+56
-42
lines changed

14 files changed

+56
-42
lines changed

packages/browser/src/client/client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import type { ModuleMocker } from '@vitest/mocker/browser'
21
import type { CancelReason } from '@vitest/runner'
32
import type { BirpcReturn } from 'birpc'
3+
import type { ModuleMocker } from 'vitest/internal/browser'
44
import type { WebSocketBrowserEvents, WebSocketBrowserHandlers } from '../node/types'
55
import type { IframeOrchestrator } from './orchestrator'
66
import { createBirpc } from 'birpc'

packages/browser/src/client/orchestrator.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import type { GlobalChannelIncomingEvent, IframeChannelIncomingEvent, IframeChannelOutgoingEvent, IframeViewportDoneEvent, IframeViewportFailEvent } from '@vitest/browser/client'
22
import type { BrowserTesterOptions, SerializedConfig } from 'vitest'
33
import { channel, client, globalChannel } from '@vitest/browser/client'
4-
import { generateHash } from '@vitest/runner/utils'
54
import { relative } from 'pathe'
65
import { getUiAPI } from './ui'
76
import { getBrowserState, getConfig } from './utils'
@@ -297,6 +296,20 @@ function generateFileId(file: string) {
297296
return generateHash(`${path}${project}`)
298297
}
299298

299+
// importing this from @vitest/runner bring it the whole runner
300+
function generateHash(str: string): string {
301+
let hash = 0
302+
if (str.length === 0) {
303+
return `${hash}`
304+
}
305+
for (let i = 0; i < str.length; i++) {
306+
const char = str.charCodeAt(i)
307+
hash = (hash << 5) - hash + char
308+
hash = hash & hash // Convert to 32bit integer
309+
}
310+
return `${hash}`
311+
}
312+
300313
async function setIframeViewport(
301314
iframe: HTMLIFrameElement,
302315
width: number,

packages/browser/src/client/tester/mocker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ModuleMocker } from '@vitest/mocker/browser'
1+
import { ModuleMocker } from 'vitest/internal/browser'
22
import { getBrowserState } from '../utils'
33

44
export class VitestBrowserClientMocker extends ModuleMocker {

packages/browser/src/client/tester/runner.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@ import type { VitestBrowserClientMocker } from './mocker'
55
import { globalChannel, onCancel } from '@vitest/browser/client'
66
import { page, userEvent } from '@vitest/browser/context'
77
import {
8+
createStackString,
89
loadDiffConfig,
910
loadSnapshotSerializers,
11+
NodeBenchmarkRunner,
1012
originalPositionFor,
13+
parseStacktrace,
1114
takeCoverageInsideWorker,
1215
TraceMap,
16+
VitestTestRunner,
1317
} from 'vitest/internal/browser'
14-
import { NodeBenchmarkRunner, VitestTestRunner } from 'vitest/runners'
15-
import { createStackString, parseStacktrace } from '../../../../utils/src/source-map'
1618
import { executor, getWorkerState } from '../utils'
1719
import { rpc } from './rpc'
1820
import { VitestBrowserSnapshotEnvironment } from './snapshot'

packages/browser/src/client/tester/tester.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@ import { createSafeRpc } from './rpc'
1919
import { browserHashMap, initiateRunner } from './runner'
2020
import { CommandsManager } from './utils'
2121

22+
const now = performance.now.bind(performance)
23+
2224
const debugVar = getConfig().env.VITEST_BROWSER_DEBUG
2325
const debug = debugVar && debugVar !== 'false'
24-
? (...args: unknown[]) => client.rpc.debug?.(...args.map(String))
26+
? (...args: unknown[]) => client.rpc.debug(...args.map(String))
2527
: undefined
2628

2729
channel.addEventListener('message', async (e) => {
@@ -142,7 +144,7 @@ async function prepareTestEnvironment(options: PrepareOptions) {
142144
})
143145
}
144146

145-
state.durations.prepare = performance.now() - options.startTime
147+
state.durations.prepare = options.startTime - now()
146148

147149
return {
148150
runner,
@@ -194,15 +196,15 @@ interface PrepareOptions {
194196
}
195197

196198
async function prepare(options: PrepareOptions) {
199+
// fetch('file://non-existing-1').catch(() => {})
197200
preparedData = await prepareTestEnvironment(options)
201+
// fetch('file://non-existing-2').catch(() => {})
198202

199203
// page is reloading
200204
debug?.('runner resolved successfully')
201205

202206
const { config, state } = preparedData
203207

204-
state.durations.prepare = performance.now() - state.durations.prepare
205-
206208
debug?.('prepare time', state.durations.prepare, 'ms')
207209

208210
await Promise.all([

packages/browser/src/node/plugin.ts

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -188,32 +188,12 @@ export default (parentServer: ParentBrowserProject, base = '/'): Plugin[] => {
188188
...(project.config.snapshotSerializers || []),
189189
]
190190

191-
const exclude = [
192-
'vitest',
193-
'vitest/internal/browser',
194-
'vitest/runners',
195-
'@vitest/browser',
196-
'@vitest/browser/client',
197-
'@vitest/utils',
198-
'@vitest/utils/source-map',
199-
'@vitest/runner',
200-
'@vitest/spy',
201-
'@vitest/utils/error',
202-
'@vitest/snapshot',
203-
'@vitest/expect',
204-
'std-env',
205-
'tinybench',
206-
'tinyspy',
207-
'tinyrainbow',
208-
'pathe',
209-
'msw',
210-
'msw/browser',
211-
]
212-
213191
if (typeof project.config.diff === 'string') {
214192
entries.push(project.config.diff)
215193
}
216194

195+
const exclude: string[] = []
196+
217197
if (parentServer.vitest.coverageProvider) {
218198
const coverage = parentServer.vitest.config.coverage
219199
const provider = coverage.provider
@@ -237,6 +217,8 @@ export default (parentServer: ParentBrowserProject, base = '/'): Plugin[] => {
237217
}
238218

239219
const include = [
220+
'vitest',
221+
'vitest/internal/browser',
240222
'vitest > expect-type',
241223
'vitest > @vitest/snapshot > magic-string',
242224
'vitest > chai',
@@ -275,7 +257,7 @@ export default (parentServer: ParentBrowserProject, base = '/'): Plugin[] => {
275257
},
276258
optimizeDeps: {
277259
entries,
278-
exclude,
260+
// exclude,
279261
include,
280262
},
281263
}

packages/mocker/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
},
6868
"dependencies": {
6969
"@vitest/spy": "workspace:*",
70+
"@vitest/utils": "workspace:*",
7071
"estree-walker": "^3.0.3",
7172
"magic-string": "catalog:"
7273
},

packages/mocker/rollup.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ const external = [
2323
...Object.keys(pkg.dependencies || {}),
2424
...Object.keys(pkg.peerDependencies || {}),
2525
/^msw/,
26+
'@vitest/utils/source-map',
2627
]
2728

2829
const dtsUtils = createDtsUtils()

packages/mocker/src/node/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import { fileURLToPath } from 'node:url'
2+
import { resolve } from 'pathe'
3+
14
export { createManualModuleSource } from '../utils'
25
export { automockModule, automockPlugin } from './automockPlugin'
36
export type { AutomockPluginOptions } from './automockPlugin'
@@ -15,3 +18,6 @@ export type {
1518
ServerMockResolution,
1619
ServerResolverOptions,
1720
} from './resolver'
21+
22+
const pkgRoot = resolve(fileURLToPath(import.meta.url), '../..')
23+
export const distRoot: string = resolve(pkgRoot, 'dist')

packages/utils/package.json

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,6 @@
2424
"types": "./dist/diff.d.ts",
2525
"default": "./dist/diff.js"
2626
},
27-
"./ast": {
28-
"types": "./dist/ast.d.ts",
29-
"default": "./dist/ast.js"
30-
},
3127
"./error": {
3228
"types": "./dist/error.d.ts",
3329
"default": "./dist/error.js"

packages/vitest/rollup.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ const external = [
8282
'vite-node/utils',
8383
'@vitest/mocker',
8484
'@vitest/mocker/node',
85+
'@vitest/mocker/browser',
8586
'@vitest/utils/diff',
8687
'@vitest/utils/ast',
8788
'@vitest/utils/error',

packages/vitest/src/node/project.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,13 @@ export class TestProject {
536536
this.config.root,
537537
this.vitest.version,
538538
)
539-
const { createBrowserServer, distRoot } = await import('@vitest/browser')
539+
const [
540+
{ createBrowserServer, distRoot },
541+
{ distRoot: mockerDist },
542+
] = await Promise.all([
543+
import('@vitest/browser'),
544+
import('@vitest/mocker/node'),
545+
])
540546
let cacheDir: string
541547
const browser = await createBrowserServer(
542548
this,
@@ -550,7 +556,7 @@ export class TestProject {
550556
},
551557
...MocksPlugins({
552558
filter(id) {
553-
if (id.includes(distRoot) || id.includes(cacheDir)) {
559+
if (id.includes(distRoot) || id.includes(mockerDist) || id.includes(cacheDir)) {
554560
return false
555561
}
556562
return true

packages/vitest/src/public/browser.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ export {
33
stopCoverageInsideWorker,
44
takeCoverageInsideWorker,
55
} from '../integrations/coverage'
6-
76
export {
87
loadDiffConfig,
98
loadSnapshotSerializers,
109
setupCommonEnv,
1110
} from '../runtime/setup-common'
11+
12+
export { NodeBenchmarkRunner, VitestTestRunner } from './runners'
13+
export { ModuleMocker } from '@vitest/mocker/browser'
1214
export { collectTests, processError, startTests } from '@vitest/runner'
1315
export * as SpyModule from '@vitest/spy'
1416
export {
@@ -19,6 +21,8 @@ export {
1921
} from '@vitest/utils'
2022
export type { LoupeOptions, ParsedStack, StringifyOptions } from '@vitest/utils'
2123
export {
24+
createStackString,
2225
originalPositionFor,
26+
parseStacktrace,
2327
TraceMap,
2428
} from '@vitest/utils/source-map'

pnpm-lock.yaml

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)