@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
text/typescript
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
}