···11-import type { ModuleMocker } from '@vitest/mocker/browser'
21import type { CancelReason } from '@vitest/runner'
32import type { BirpcReturn } from 'birpc'
33+import type { ModuleMocker } from 'vitest/internal/browser'
44import type { WebSocketBrowserEvents, WebSocketBrowserHandlers } from '../node/types'
55import type { IframeOrchestrator } from './orchestrator'
66import { createBirpc } from 'birpc'
+14-1
packages/browser/src/client/orchestrator.ts
···11import type { GlobalChannelIncomingEvent, IframeChannelIncomingEvent, IframeChannelOutgoingEvent, IframeViewportDoneEvent, IframeViewportFailEvent } from '@vitest/browser/client'
22import type { BrowserTesterOptions, SerializedConfig } from 'vitest'
33import { channel, client, globalChannel } from '@vitest/browser/client'
44-import { generateHash } from '@vitest/runner/utils'
54import { relative } from 'pathe'
65import { getUiAPI } from './ui'
76import { getBrowserState, getConfig } from './utils'
···295294 const project = config.name || ''
296295 const path = relative(config.root, file)
297296 return generateHash(`${path}${project}`)
297297+}
298298+299299+// importing this from @vitest/runner bring it the whole runner
300300+function generateHash(str: string): string {
301301+ let hash = 0
302302+ if (str.length === 0) {
303303+ return `${hash}`
304304+ }
305305+ for (let i = 0; i < str.length; i++) {
306306+ const char = str.charCodeAt(i)
307307+ hash = (hash << 5) - hash + char
308308+ hash = hash & hash // Convert to 32bit integer
309309+ }
310310+ return `${hash}`
298311}
299312300313async function setIframeViewport(