UNPKG

@cityssm/puppeteer-launch

Version:

Launch Puppeteer, falling back to system browsers when the cached ones aren't working or aren't available.

61 lines (48 loc) 1.61 kB
import hasPackage from '@cityssm/has-package' import type { InstalledWebBrowser } from '@cityssm/web-browser-info' let browsersLoaded = false let chromeBrowsers: InstalledWebBrowser[] = [] let firefoxBrowsers: InstalledWebBrowser[] = [] async function loadUserBrowsers(): Promise<void> { if (!await hasPackage('@cityssm/web-browser-info')) { return } const { chromeWebBrowserTypes, getInstalledWebBrowsers } = await import('@cityssm/web-browser-info') if (!browsersLoaded) { /* * Load Chrome first */ const fallbackChromeBrowsers = await getInstalledWebBrowsers( chromeWebBrowserTypes, 110 ) chromeBrowsers = fallbackChromeBrowsers /* * Load Firefox */ const fallbackFirefoxBrowsers = await getInstalledWebBrowsers('firefox') firefoxBrowsers = fallbackFirefoxBrowsers // eslint-disable-next-line require-atomic-updates browsersLoaded = true } } /** * Gets the path to the user's Chrome browser. * @returns The path to the user's Chrome browser, or undefined if not found. */ export async function getUserChromePath(): Promise<string | undefined> { await loadUserBrowsers() const chromePath = chromeBrowsers[0]?.command return chromePath } /** * Gets the path to the user's Firefox browser. * @returns The path to the user's Firefox browser, or undefined if not found. */ export async function getUserFirefoxPath(): Promise<string | undefined> { await loadUserBrowsers() const firefoxPath = firefoxBrowsers[0]?.command return firefoxPath }