/
browser.ts
35 lines (27 loc) · 1.05 KB
/
browser.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import { PlaywrightBrowserProvider } from '../node/browser/playwright'
import { WebdriverBrowserProvider } from '../node/browser/webdriver'
import type { BrowserProviderModule, ResolvedBrowserOptions } from '../types/browser'
interface Loader {
executeId: (id: string) => Promise<{ default: BrowserProviderModule }>
}
export async function getBrowserProvider(options: ResolvedBrowserOptions, loader: Loader): Promise<BrowserProviderModule> {
switch (options.provider) {
case undefined:
case 'webdriverio':
return WebdriverBrowserProvider
case 'playwright':
return PlaywrightBrowserProvider
default:
break
}
let customProviderModule
try {
customProviderModule = await loader.executeId(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
}