Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/vitest-dev/vitest. Next generation testing framework powered by Vite. vitest.dev
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869import type { BrowserProviderModule, ResolvedBrowserOptions, TestProject } from 'vitest/node'import { isFileServingAllowed } from 'vitest/node'
export function replacer(code: string, values: Record<string, string>): string { return code.replace(/\{\s*(\w+)\s*\}/g, (_, key) => values[key] ?? _)}
export function assertBrowserFileAccess(project: TestProject, path: string): void { const normalized = slash(path) if ( !isFileServingAllowed(normalized, project.vite) && !isFileServingAllowed(normalized, project.vitest.server) ) { throw new Error( `Access denied to "${path}". See Vite config documentation for "server.fs": https://vitejs.dev/config/server-options.html#server-fs-strict.`, ) }}
export function assertBrowserApiWrite(project: TestProject, path: string): void { if (!project.config.browser.api.allowWrite || !project.vitest.config.api.allowWrite) { throw new Error( `Cannot modify file "${path}". File writing is disabled because server is exposed to the internet, see https://vitest.dev/config/browser/api.`, ) }}
const builtinProviders = ['webdriverio', 'playwright', 'preview']
export async function getBrowserProvider( options: ResolvedBrowserOptions, project: TestProject,): Promise<BrowserProviderModule> { if (options.provider == null || builtinProviders.includes(options.provider)) { const providers = await import('./providers') const provider = (options.provider || 'preview') as | 'webdriverio' | 'playwright' | 'preview' return providers[provider] }
let customProviderModule
try { customProviderModule = (await project.import<{ default: BrowserProviderModule }>( options.provider, )) } catch (error) { throw new Error( `Failed to load custom BrowserProvider from ${options.provider}`, { cause: error }, ) }
if (customProviderModule.default == null) { throw new Error( `Custom BrowserProvider loaded from ${options.provider} was not the default export`, ) }
return customProviderModule.default}
export function slash(path: string): string { return path.replace(/\\/g, '/').replace(/\/+/g, '/')}