@holydeck/cli 2026.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +234 -0
- package/dist/BrowserWebSocketTransport-H3D6MINS.js +12 -0
- package/dist/BrowserWebSocketTransport-H3D6MINS.js.map +1 -0
- package/dist/LaunchOptions-42ZS55HH.js +12 -0
- package/dist/LaunchOptions-42ZS55HH.js.map +1 -0
- package/dist/NodeWebSocketTransport-BXHQGXRM.js +15 -0
- package/dist/NodeWebSocketTransport-BXHQGXRM.js.map +1 -0
- package/dist/bidi-25S23FWJ.js +18358 -0
- package/dist/bidi-25S23FWJ.js.map +1 -0
- package/dist/chunk-2BLOYUSF.js +795 -0
- package/dist/chunk-2BLOYUSF.js.map +1 -0
- package/dist/chunk-43CZTS57.js +38 -0
- package/dist/chunk-43CZTS57.js.map +1 -0
- package/dist/chunk-DIBLSFAG.js +34 -0
- package/dist/chunk-DIBLSFAG.js.map +1 -0
- package/dist/chunk-IEJ3OX3N.js +52 -0
- package/dist/chunk-IEJ3OX3N.js.map +1 -0
- package/dist/chunk-JM4YIWBN.js +3796 -0
- package/dist/chunk-JM4YIWBN.js.map +1 -0
- package/dist/chunk-NP3DTWF7.js +23282 -0
- package/dist/chunk-NP3DTWF7.js.map +1 -0
- package/dist/chunk-SWG4X375.js +51 -0
- package/dist/chunk-SWG4X375.js.map +1 -0
- package/dist/chunk-UC6TFXMD.js +2821 -0
- package/dist/chunk-UC6TFXMD.js.map +1 -0
- package/dist/chunk-V4BIHFVZ.js +2287 -0
- package/dist/chunk-V4BIHFVZ.js.map +1 -0
- package/dist/chunk-V77AQPDK.js +20 -0
- package/dist/chunk-V77AQPDK.js.map +1 -0
- package/dist/chunk-XAENXL52.js +101 -0
- package/dist/chunk-XAENXL52.js.map +1 -0
- package/dist/cli.js +64101 -0
- package/dist/cli.js.map +1 -0
- package/dist/dist-3ZE2HBJQ.js +20447 -0
- package/dist/dist-3ZE2HBJQ.js.map +1 -0
- package/dist/dist-575AQY5L.js +1161 -0
- package/dist/dist-575AQY5L.js.map +1 -0
- package/dist/dist-DL5M2SDJ.js +117 -0
- package/dist/dist-DL5M2SDJ.js.map +1 -0
- package/dist/dist-OMWR53J4.js +4713 -0
- package/dist/dist-OMWR53J4.js.map +1 -0
- package/dist/dist-UT6HKKCD.js +281 -0
- package/dist/dist-UT6HKKCD.js.map +1 -0
- package/dist/fs-P6GYHPGZ.js +1685 -0
- package/dist/fs-P6GYHPGZ.js.map +1 -0
- package/dist/helpers-64DWIL6C.js +21 -0
- package/dist/helpers-64DWIL6C.js.map +1 -0
- package/dist/main-IQ64YDOJ.js +61 -0
- package/dist/main-IQ64YDOJ.js.map +1 -0
- package/dist/puppeteer-RDWY6FSG.js +2386 -0
- package/dist/puppeteer-RDWY6FSG.js.map +1 -0
- package/dist/yargs-KMQWKLG6.js +3264 -0
- package/dist/yargs-KMQWKLG6.js.map +1 -0
- package/dist/yauzl-7KG7KPPF.js +1355 -0
- package/dist/yauzl-7KG7KPPF.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/lilconfig@3.1.3/node_modules/lilconfig/src/index.js","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/node-env-setup.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/node/ChromeLauncher.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/node/BrowserLauncher.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/node/PipeTransport.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/node/util/fs.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/node/FirefoxLauncher.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/node/PuppeteerNode.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/node/ScreenRecorder.ts","../../../node_modules/.pnpm/puppeteer-core@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer-core/src/puppeteer-core.ts","../../../node_modules/.pnpm/puppeteer@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer/src/getConfiguration.ts","../../../node_modules/.pnpm/puppeteer@25.10.0_proxy-agent@8.0.2_yauzl@3.4.0/node_modules/puppeteer/src/puppeteer.ts"],"sourcesContent":["// @ts-check\nconst path = require('path');\nconst fs = require('fs');\nconst os = require('os');\nconst url = require('url');\n\nconst fsReadFileAsync = fs.promises.readFile;\n\n/** @type {(name: string, sync: boolean) => string[]} */\nfunction getDefaultSearchPlaces(name, sync) {\n\treturn [\n\t\t'package.json',\n\t\t`.${name}rc.json`,\n\t\t`.${name}rc.js`,\n\t\t`.${name}rc.cjs`,\n\t\t...(sync ? [] : [`.${name}rc.mjs`]),\n\t\t`.config/${name}rc`,\n\t\t`.config/${name}rc.json`,\n\t\t`.config/${name}rc.js`,\n\t\t`.config/${name}rc.cjs`,\n\t\t...(sync ? [] : [`.config/${name}rc.mjs`]),\n\t\t`${name}.config.js`,\n\t\t`${name}.config.cjs`,\n\t\t...(sync ? [] : [`${name}.config.mjs`]),\n\t];\n}\n\n/**\n * @type {(p: string) => string}\n *\n * see #17\n * On *nix, if cwd is not under homedir,\n * the last path will be '', ('/build' -> '')\n * but it should be '/' actually.\n * And on Windows, this will never happen. ('C:\\build' -> 'C:')\n */\nfunction parentDir(p) {\n\treturn path.dirname(p) || path.sep;\n}\n\n/** @type {import('./index').LoaderSync} */\nconst jsonLoader = (_, content) => JSON.parse(content);\n// Use plain require in webpack context for dynamic import\nconst requireFunc =\n\ttypeof __webpack_require__ === 'function' ? __non_webpack_require__ : require;\n/** @type {import('./index').LoadersSync} */\nconst defaultLoadersSync = Object.freeze({\n\t'.js': requireFunc,\n\t'.json': requireFunc,\n\t'.cjs': requireFunc,\n\tnoExt: jsonLoader,\n});\nmodule.exports.defaultLoadersSync = defaultLoadersSync;\n\n/** @type {import('./index').Loader} */\nconst dynamicImport = async id => {\n\ttry {\n\t\tconst fileUrl = url.pathToFileURL(id).href;\n\t\tconst mod = await import(/* webpackIgnore: true */ fileUrl);\n\n\t\treturn mod.default;\n\t} catch (e) {\n\t\ttry {\n\t\t\treturn requireFunc(id);\n\t\t} catch (/** @type {any} */ requireE) {\n\t\t\tif (\n\t\t\t\trequireE.code === 'ERR_REQUIRE_ESM' ||\n\t\t\t\t(requireE instanceof SyntaxError &&\n\t\t\t\t\trequireE\n\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t.includes('Cannot use import statement outside a module'))\n\t\t\t) {\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\tthrow requireE;\n\t\t}\n\t}\n};\n\n/** @type {import('./index').Loaders} */\nconst defaultLoaders = Object.freeze({\n\t'.js': dynamicImport,\n\t'.mjs': dynamicImport,\n\t'.cjs': dynamicImport,\n\t'.json': jsonLoader,\n\tnoExt: jsonLoader,\n});\nmodule.exports.defaultLoaders = defaultLoaders;\n\n/**\n * @param {string} name\n * @param {import('./index').Options | import('./index').OptionsSync} options\n * @param {boolean} sync\n * @returns {Required<import('./index').Options | import('./index').OptionsSync>}\n */\nfunction getOptions(name, options, sync) {\n\t/** @type {Required<import('./index').Options>} */\n\tconst conf = {\n\t\tstopDir: os.homedir(),\n\t\tsearchPlaces: getDefaultSearchPlaces(name, sync),\n\t\tignoreEmptySearchPlaces: true,\n\t\tcache: true,\n\t\ttransform: x => x,\n\t\tpackageProp: [name],\n\t\t...options,\n\t\tloaders: {\n\t\t\t...(sync ? defaultLoadersSync : defaultLoaders),\n\t\t\t...options.loaders,\n\t\t},\n\t};\n\tconf.searchPlaces.forEach(place => {\n\t\tconst key = path.extname(place) || 'noExt';\n\t\tconst loader = conf.loaders[key];\n\t\tif (!loader) {\n\t\t\tthrow new Error(`Missing loader for extension \"${place}\"`);\n\t\t}\n\n\t\tif (typeof loader !== 'function') {\n\t\t\tthrow new Error(\n\t\t\t\t`Loader for extension \"${place}\" is not a function: Received ${typeof loader}.`,\n\t\t\t);\n\t\t}\n\t});\n\n\treturn conf;\n}\n\n/** @type {(props: string | string[], obj: Record<string, any>) => unknown} */\nfunction getPackageProp(props, obj) {\n\tif (typeof props === 'string' && props in obj) return obj[props];\n\treturn (\n\t\t(Array.isArray(props) ? props : props.split('.')).reduce(\n\t\t\t(acc, prop) => (acc === undefined ? acc : acc[prop]),\n\t\t\tobj,\n\t\t) || null\n\t);\n}\n\n/** @param {string} filepath */\nfunction validateFilePath(filepath) {\n\tif (!filepath) throw new Error('load must pass a non-empty string');\n}\n\n/** @type {(loader: import('./index').Loader, ext: string) => void} */\nfunction validateLoader(loader, ext) {\n\tif (!loader) throw new Error(`No loader specified for extension \"${ext}\"`);\n\tif (typeof loader !== 'function') throw new Error('loader is not a function');\n}\n\n/** @type {(enableCache: boolean) => <T>(c: Map<string, T>, filepath: string, res: T) => T} */\nconst makeEmplace = enableCache => (c, filepath, res) => {\n\tif (enableCache) c.set(filepath, res);\n\treturn res;\n};\n\n/** @type {import('./index').lilconfig} */\nmodule.exports.lilconfig = function lilconfig(name, options) {\n\tconst {\n\t\tignoreEmptySearchPlaces,\n\t\tloaders,\n\t\tpackageProp,\n\t\tsearchPlaces,\n\t\tstopDir,\n\t\ttransform,\n\t\tcache,\n\t} = getOptions(name, options ?? {}, false);\n\tconst searchCache = new Map();\n\tconst loadCache = new Map();\n\tconst emplace = makeEmplace(cache);\n\n\treturn {\n\t\tasync search(searchFrom = process.cwd()) {\n\t\t\t/** @type {import('./index').LilconfigResult} */\n\t\t\tconst result = {\n\t\t\t\tconfig: null,\n\t\t\t\tfilepath: '',\n\t\t\t};\n\n\t\t\t/** @type {Set<string>} */\n\t\t\tconst visited = new Set();\n\t\t\tlet dir = searchFrom;\n\t\t\tdirLoop: while (true) {\n\t\t\t\tif (cache) {\n\t\t\t\t\tconst r = searchCache.get(dir);\n\t\t\t\t\tif (r !== undefined) {\n\t\t\t\t\t\tfor (const p of visited) searchCache.set(p, r);\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t\tvisited.add(dir);\n\t\t\t\t}\n\n\t\t\t\tfor (const searchPlace of searchPlaces) {\n\t\t\t\t\tconst filepath = path.join(dir, searchPlace);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait fs.promises.access(filepath);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst content = String(await fsReadFileAsync(filepath));\n\t\t\t\t\tconst loaderKey = path.extname(searchPlace) || 'noExt';\n\t\t\t\t\tconst loader = loaders[loaderKey];\n\n\t\t\t\t\t// handle package.json\n\t\t\t\t\tif (searchPlace === 'package.json') {\n\t\t\t\t\t\tconst pkg = await loader(filepath, content);\n\t\t\t\t\t\tconst maybeConfig = getPackageProp(packageProp, pkg);\n\t\t\t\t\t\tif (maybeConfig != null) {\n\t\t\t\t\t\t\tresult.config = maybeConfig;\n\t\t\t\t\t\t\tresult.filepath = filepath;\n\t\t\t\t\t\t\tbreak dirLoop;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// handle other type of configs\n\t\t\t\t\tconst isEmpty = content.trim() === '';\n\t\t\t\t\tif (isEmpty && ignoreEmptySearchPlaces) continue;\n\n\t\t\t\t\tif (isEmpty) {\n\t\t\t\t\t\tresult.isEmpty = true;\n\t\t\t\t\t\tresult.config = undefined;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalidateLoader(loader, loaderKey);\n\t\t\t\t\t\tresult.config = await loader(filepath, content);\n\t\t\t\t\t}\n\t\t\t\t\tresult.filepath = filepath;\n\t\t\t\t\tbreak dirLoop;\n\t\t\t\t}\n\t\t\t\tif (dir === stopDir || dir === parentDir(dir)) break dirLoop;\n\t\t\t\tdir = parentDir(dir);\n\t\t\t}\n\n\t\t\tconst transformed =\n\t\t\t\t// not found\n\t\t\t\tresult.filepath === '' && result.config === null\n\t\t\t\t\t? transform(null)\n\t\t\t\t\t: transform(result);\n\n\t\t\tif (cache) {\n\t\t\t\tfor (const p of visited) searchCache.set(p, transformed);\n\t\t\t}\n\n\t\t\treturn transformed;\n\t\t},\n\t\tasync load(filepath) {\n\t\t\tvalidateFilePath(filepath);\n\t\t\tconst absPath = path.resolve(process.cwd(), filepath);\n\t\t\tif (cache && loadCache.has(absPath)) {\n\t\t\t\treturn loadCache.get(absPath);\n\t\t\t}\n\t\t\tconst {base, ext} = path.parse(absPath);\n\t\t\tconst loaderKey = ext || 'noExt';\n\t\t\tconst loader = loaders[loaderKey];\n\t\t\tvalidateLoader(loader, loaderKey);\n\t\t\tconst content = String(await fsReadFileAsync(absPath));\n\n\t\t\tif (base === 'package.json') {\n\t\t\t\tconst pkg = await loader(absPath, content);\n\t\t\t\treturn emplace(\n\t\t\t\t\tloadCache,\n\t\t\t\t\tabsPath,\n\t\t\t\t\ttransform({\n\t\t\t\t\t\tconfig: getPackageProp(packageProp, pkg),\n\t\t\t\t\t\tfilepath: absPath,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\t/** @type {import('./index').LilconfigResult} */\n\t\t\tconst result = {\n\t\t\t\tconfig: null,\n\t\t\t\tfilepath: absPath,\n\t\t\t};\n\t\t\t// handle other type of configs\n\t\t\tconst isEmpty = content.trim() === '';\n\t\t\tif (isEmpty && ignoreEmptySearchPlaces)\n\t\t\t\treturn emplace(\n\t\t\t\t\tloadCache,\n\t\t\t\t\tabsPath,\n\t\t\t\t\ttransform({\n\t\t\t\t\t\tconfig: undefined,\n\t\t\t\t\t\tfilepath: absPath,\n\t\t\t\t\t\tisEmpty: true,\n\t\t\t\t\t}),\n\t\t\t\t);\n\n\t\t\t// cosmiconfig returns undefined for empty files\n\t\t\tresult.config = isEmpty ? undefined : await loader(absPath, content);\n\n\t\t\treturn emplace(\n\t\t\t\tloadCache,\n\t\t\t\tabsPath,\n\t\t\t\ttransform(isEmpty ? {...result, isEmpty, config: undefined} : result),\n\t\t\t);\n\t\t},\n\t\tclearLoadCache() {\n\t\t\tif (cache) loadCache.clear();\n\t\t},\n\t\tclearSearchCache() {\n\t\t\tif (cache) searchCache.clear();\n\t\t},\n\t\tclearCaches() {\n\t\t\tif (cache) {\n\t\t\t\tloadCache.clear();\n\t\t\t\tsearchCache.clear();\n\t\t\t}\n\t\t},\n\t};\n};\n\n/** @type {import('./index').lilconfigSync} */\nmodule.exports.lilconfigSync = function lilconfigSync(name, options) {\n\tconst {\n\t\tignoreEmptySearchPlaces,\n\t\tloaders,\n\t\tpackageProp,\n\t\tsearchPlaces,\n\t\tstopDir,\n\t\ttransform,\n\t\tcache,\n\t} = getOptions(name, options ?? {}, true);\n\tconst searchCache = new Map();\n\tconst loadCache = new Map();\n\tconst emplace = makeEmplace(cache);\n\n\treturn {\n\t\tsearch(searchFrom = process.cwd()) {\n\t\t\t/** @type {import('./index').LilconfigResult} */\n\t\t\tconst result = {\n\t\t\t\tconfig: null,\n\t\t\t\tfilepath: '',\n\t\t\t};\n\n\t\t\t/** @type {Set<string>} */\n\t\t\tconst visited = new Set();\n\t\t\tlet dir = searchFrom;\n\t\t\tdirLoop: while (true) {\n\t\t\t\tif (cache) {\n\t\t\t\t\tconst r = searchCache.get(dir);\n\t\t\t\t\tif (r !== undefined) {\n\t\t\t\t\t\tfor (const p of visited) searchCache.set(p, r);\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t}\n\t\t\t\t\tvisited.add(dir);\n\t\t\t\t}\n\n\t\t\t\tfor (const searchPlace of searchPlaces) {\n\t\t\t\t\tconst filepath = path.join(dir, searchPlace);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfs.accessSync(filepath);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst loaderKey = path.extname(searchPlace) || 'noExt';\n\t\t\t\t\tconst loader = loaders[loaderKey];\n\t\t\t\t\tconst content = String(fs.readFileSync(filepath));\n\n\t\t\t\t\t// handle package.json\n\t\t\t\t\tif (searchPlace === 'package.json') {\n\t\t\t\t\t\tconst pkg = loader(filepath, content);\n\t\t\t\t\t\tconst maybeConfig = getPackageProp(packageProp, pkg);\n\t\t\t\t\t\tif (maybeConfig != null) {\n\t\t\t\t\t\t\tresult.config = maybeConfig;\n\t\t\t\t\t\t\tresult.filepath = filepath;\n\t\t\t\t\t\t\tbreak dirLoop;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// handle other type of configs\n\t\t\t\t\tconst isEmpty = content.trim() === '';\n\t\t\t\t\tif (isEmpty && ignoreEmptySearchPlaces) continue;\n\n\t\t\t\t\tif (isEmpty) {\n\t\t\t\t\t\tresult.isEmpty = true;\n\t\t\t\t\t\tresult.config = undefined;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalidateLoader(loader, loaderKey);\n\t\t\t\t\t\tresult.config = loader(filepath, content);\n\t\t\t\t\t}\n\t\t\t\t\tresult.filepath = filepath;\n\t\t\t\t\tbreak dirLoop;\n\t\t\t\t}\n\t\t\t\tif (dir === stopDir || dir === parentDir(dir)) break dirLoop;\n\t\t\t\tdir = parentDir(dir);\n\t\t\t}\n\n\t\t\tconst transformed =\n\t\t\t\t// not found\n\t\t\t\tresult.filepath === '' && result.config === null\n\t\t\t\t\t? transform(null)\n\t\t\t\t\t: transform(result);\n\n\t\t\tif (cache) {\n\t\t\t\tfor (const p of visited) searchCache.set(p, transformed);\n\t\t\t}\n\n\t\t\treturn transformed;\n\t\t},\n\t\tload(filepath) {\n\t\t\tvalidateFilePath(filepath);\n\t\t\tconst absPath = path.resolve(process.cwd(), filepath);\n\t\t\tif (cache && loadCache.has(absPath)) {\n\t\t\t\treturn loadCache.get(absPath);\n\t\t\t}\n\t\t\tconst {base, ext} = path.parse(absPath);\n\t\t\tconst loaderKey = ext || 'noExt';\n\t\t\tconst loader = loaders[loaderKey];\n\t\t\tvalidateLoader(loader, loaderKey);\n\n\t\t\tconst content = String(fs.readFileSync(absPath));\n\n\t\t\tif (base === 'package.json') {\n\t\t\t\tconst pkg = loader(absPath, content);\n\t\t\t\treturn transform({\n\t\t\t\t\tconfig: getPackageProp(packageProp, pkg),\n\t\t\t\t\tfilepath: absPath,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst result = {\n\t\t\t\tconfig: null,\n\t\t\t\tfilepath: absPath,\n\t\t\t};\n\t\t\t// handle other type of configs\n\t\t\tconst isEmpty = content.trim() === '';\n\t\t\tif (isEmpty && ignoreEmptySearchPlaces)\n\t\t\t\treturn emplace(\n\t\t\t\t\tloadCache,\n\t\t\t\t\tabsPath,\n\t\t\t\t\ttransform({\n\t\t\t\t\t\tfilepath: absPath,\n\t\t\t\t\t\tconfig: undefined,\n\t\t\t\t\t\tisEmpty: true,\n\t\t\t\t\t}),\n\t\t\t\t);\n\n\t\t\t// cosmiconfig returns undefined for empty files\n\t\t\tresult.config = isEmpty ? undefined : loader(absPath, content);\n\n\t\t\treturn emplace(\n\t\t\t\tloadCache,\n\t\t\t\tabsPath,\n\t\t\t\ttransform(isEmpty ? {...result, isEmpty, config: undefined} : result),\n\t\t\t);\n\t\t},\n\t\tclearLoadCache() {\n\t\t\tif (cache) loadCache.clear();\n\t\t},\n\t\tclearSearchCache() {\n\t\t\tif (cache) searchCache.clear();\n\t\t},\n\t\tclearCaches() {\n\t\t\tif (cache) {\n\t\t\t\tloadCache.clear();\n\t\t\t\tsearchCache.clear();\n\t\t\t}\n\t\t},\n\t};\n};\n","/**\n * @license\n * Copyright 2026 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport {debuglog} from 'node:util';\n\nimport {environment} from './environment.js';\n\nconst READ_NOFOLLOW_FLAGS = fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW;\n\nconst WRITE_NOFOLLOW_FLAGS =\n fs.constants.O_WRONLY |\n fs.constants.O_CREAT |\n fs.constants.O_TRUNC |\n fs.constants.O_NOFOLLOW;\n\nconst WRITE_NOFOLLOW_NOOVERWRITE_FLAGS =\n fs.constants.O_WRONLY |\n fs.constants.O_CREAT |\n fs.constants.O_EXCL |\n fs.constants.O_NOFOLLOW;\n\nconst WRITE_NOOVERWRITE_FLAGS =\n fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL;\n\nconst WRITE_NOFOLLOW_MODE = 0o600;\n\nasync function readFile(\n path: string,\n encoding: 'utf8' | 'ascii',\n): Promise<string>;\nasync function readFile(path: string): Promise<Uint8Array>;\nasync function readFile(\n path: string,\n encoding?: 'utf8' | 'ascii',\n): Promise<string | Uint8Array> {\n if (\n !environment.value.followSymlinks &&\n fs.constants.O_NOFOLLOW !== undefined\n ) {\n return await fs.promises.readFile(path, {\n encoding,\n flag: READ_NOFOLLOW_FLAGS,\n });\n }\n return await fs.promises.readFile(path, {encoding});\n}\n\nenvironment.value = {\n path,\n debuglog,\n ScreenRecorder: environment.value.ScreenRecorder,\n followSymlinks: true,\n readFile,\n writeFile: async (filePath, data) => {\n if (\n !environment.value.followSymlinks &&\n fs.constants.O_NOFOLLOW !== undefined\n ) {\n await fs.promises.writeFile(filePath, data, {\n flag: WRITE_NOFOLLOW_FLAGS,\n mode: WRITE_NOFOLLOW_MODE,\n });\n } else {\n await fs.promises.writeFile(filePath, data);\n }\n },\n openFileForWriting: async filePath => {\n if (\n !environment.value.followSymlinks &&\n fs.constants.O_NOFOLLOW !== undefined\n ) {\n return await fs.promises.open(\n filePath,\n WRITE_NOFOLLOW_FLAGS,\n WRITE_NOFOLLOW_MODE,\n );\n }\n return await fs.promises.open(filePath, 'w+');\n },\n createWriteStream: (filePath, options) => {\n const encoding = options?.encoding;\n const overwrite = options?.overwrite ?? true;\n if (\n !environment.value.followSymlinks &&\n fs.constants.O_NOFOLLOW !== undefined\n ) {\n const flags = overwrite\n ? WRITE_NOFOLLOW_FLAGS\n : WRITE_NOFOLLOW_NOOVERWRITE_FLAGS;\n const fd = fs.openSync(filePath, flags, WRITE_NOFOLLOW_MODE);\n return fs.createWriteStream('', {\n fd,\n mode: WRITE_NOFOLLOW_MODE,\n encoding,\n });\n }\n if (!overwrite) {\n const fd = fs.openSync(filePath, WRITE_NOOVERWRITE_FLAGS);\n return fs.createWriteStream('', {\n fd,\n encoding,\n });\n }\n return fs.createWriteStream(filePath, encoding ? {encoding} : undefined);\n },\n mkdir: async (dirPath, options) => {\n await fs.promises.mkdir(dirPath, options);\n },\n};\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {mkdtemp} from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport {\n computeSystemExecutablePath,\n Browser as SupportedBrowsers,\n} from '@puppeteer/browsers';\n\nimport type {Browser} from '../api/Browser.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {assert} from '../util/assert.js';\n\nimport {BrowserLauncher, type ResolvedLaunchArgs} from './BrowserLauncher.js';\nimport {\n convertPuppeteerChannelToBrowsersChannel,\n type ChromeReleaseChannel,\n type LaunchOptions,\n} from './LaunchOptions.js';\nimport type {PuppeteerNode} from './PuppeteerNode.js';\nimport {rm} from './util/fs.js';\n\n/**\n * @internal\n */\nexport class ChromeLauncher extends BrowserLauncher {\n constructor(puppeteer: PuppeteerNode, logger: Logger) {\n super(puppeteer, 'chrome', logger);\n }\n\n override async launch(options: LaunchOptions = {}): Promise<Browser> {\n const config = await this.puppeteer.configuration();\n if (\n config.logLevel === 'warn' &&\n process.platform === 'darwin' &&\n process.arch === 'x64'\n ) {\n const cpus = os.cpus();\n if (cpus[0]?.model.includes('Apple')) {\n console.warn(\n [\n '\\x1B[1m\\x1B[43m\\x1B[30m',\n 'Degraded performance warning:\\x1B[0m\\x1B[33m',\n 'Launching Chrome on Mac Silicon (arm64) from an x64 Node installation results in',\n 'Rosetta translating the Chrome binary, even if Chrome is already arm64. This would',\n 'result in huge performance issues. To resolve this, you must run Puppeteer with',\n 'a version of Node built for arm64.',\n ].join('\\n '),\n );\n }\n }\n\n return await super.launch(options);\n }\n\n /**\n * @internal\n */\n override async computeLaunchArguments(\n options: LaunchOptions = {},\n ): Promise<ResolvedLaunchArgs> {\n const {\n ignoreDefaultArgs = false,\n args = [],\n pipe = false,\n debuggingPort,\n channel,\n executablePath,\n } = options;\n\n const chromeArguments = [];\n if (!ignoreDefaultArgs) {\n chromeArguments.push(...this.defaultArgs(options));\n } else if (Array.isArray(ignoreDefaultArgs)) {\n chromeArguments.push(\n ...this.defaultArgs(options).filter(arg => {\n return !ignoreDefaultArgs.includes(arg);\n }),\n );\n } else {\n chromeArguments.push(...args);\n }\n\n if (\n !chromeArguments.some(argument => {\n return argument.startsWith('--remote-debugging-');\n })\n ) {\n if (pipe) {\n assert(\n !debuggingPort,\n 'Browser should be launched with either pipe or debugging port - not both.',\n );\n chromeArguments.push('--remote-debugging-pipe');\n } else {\n chromeArguments.push(`--remote-debugging-port=${debuggingPort || 0}`);\n }\n }\n\n let isTempUserDataDir = false;\n\n // Check for the user data dir argument, which will always be set even\n // with a custom directory specified via the userDataDir option.\n const userDataDirIndex = chromeArguments.findIndex(arg => {\n return arg.startsWith('--user-data-dir');\n });\n\n let userDataDir: string;\n if (userDataDirIndex < 0) {\n isTempUserDataDir = true;\n const profilePath = await this.getProfilePath();\n userDataDir = await mkdtemp(profilePath);\n chromeArguments.push(`--user-data-dir=${userDataDir}`);\n } else {\n const parsedUserDataDir = chromeArguments[userDataDirIndex]!.split(\n '=',\n 2,\n )[1];\n assert(\n typeof parsedUserDataDir === 'string',\n '`--user-data-dir` is malformed',\n );\n userDataDir = parsedUserDataDir;\n }\n\n let chromeExecutable = executablePath;\n if (!chromeExecutable) {\n assert(\n channel || !this.puppeteer._isPuppeteerCore,\n `An \\`executablePath\\` or \\`channel\\` must be specified for \\`puppeteer-core\\``,\n );\n chromeExecutable = channel\n ? await this.executablePath(channel)\n : await this.resolveExecutablePath(options.headless ?? true);\n }\n\n return {\n executablePath: chromeExecutable,\n args: chromeArguments,\n isTempUserDataDir,\n userDataDir,\n };\n }\n\n /**\n * @internal\n */\n override async cleanUserDataDir(\n path: string,\n opts: {isTemp: boolean},\n ): Promise<void> {\n if (opts.isTemp) {\n try {\n await rm(path);\n } catch (error) {\n this.logger(DEBUG_PREFIXES.error)?.(error);\n }\n }\n }\n\n override defaultArgs(options: LaunchOptions = {}): string[] {\n // See https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md\n\n const userDisabledFeatures = getFeatures(\n '--disable-features',\n options.args,\n );\n if (options.args && userDisabledFeatures.length > 0) {\n removeMatchingFlags(options.args, '--disable-features');\n }\n\n const turnOnExperimentalFeaturesForTesting =\n process.env['PUPPETEER_TEST_EXPERIMENTAL_CHROME_FEATURES'] === 'true';\n\n const userEnabledFeatures = getFeatures('--enable-features', options.args);\n if (options.args && userEnabledFeatures.length > 0) {\n removeMatchingFlags(options.args, '--enable-features');\n }\n\n // Merge default enabled features with user-provided ones, if any.\n const enabledFeatures = [\n 'PdfOopif',\n // Add features to enable by default here.\n ...userEnabledFeatures,\n ].filter(feature => {\n return feature !== '';\n });\n\n // Merge default disabled features with user-provided ones, if any.\n const disabledFeatures = [\n 'Translate',\n // AcceptCHFrame disabled because of crbug.com/1348106.\n 'AcceptCHFrame',\n 'MediaRouter',\n 'OptimizationHints',\n 'WebUIReloadButton',\n 'WebUIOmniboxPopup',\n 'WebUIOmniboxAimPopup',\n ...(turnOnExperimentalFeaturesForTesting\n ? []\n : [\n // https://crbug.com/1492053\n 'ProcessPerSiteUpToMainFrameThreshold',\n // https://github.com/puppeteer/puppeteer/issues/10715\n 'IsolateSandboxedIframes',\n ]),\n ...userDisabledFeatures,\n ]\n .filter(feature => {\n return feature !== '';\n })\n .filter(disabledFeature => {\n return !enabledFeatures.includes(disabledFeature);\n });\n\n const chromeArguments = [\n '--allow-pre-commit-input',\n '--disable-background-networking',\n '--disable-background-timer-throttling',\n '--disable-backgrounding-occluded-windows',\n '--disable-breakpad',\n '--disable-client-side-phishing-detection',\n '--disable-component-extensions-with-background-pages',\n '--disable-crash-reporter', // No crash reporting in CfT.\n '--disable-default-apps',\n '--disable-dev-shm-usage',\n '--disable-hang-monitor',\n '--disable-infobars',\n '--disable-ipc-flooding-protection',\n '--disable-popup-blocking',\n '--disable-prompt-on-repost',\n '--disable-renderer-backgrounding',\n '--disable-search-engine-choice-screen',\n '--disable-sync',\n '--enable-automation',\n '--export-tagged-pdf',\n '--force-color-profile=srgb',\n '--generate-pdf-document-outline',\n '--metrics-recording-only',\n '--no-first-run',\n '--password-store=basic',\n '--use-mock-keychain',\n `--disable-features=${disabledFeatures.join(',')}`,\n `--enable-features=${enabledFeatures.join(',')}`,\n ].filter(arg => {\n return arg !== '';\n });\n const {\n devtools = false,\n headless = !devtools,\n args = [],\n userDataDir,\n enableExtensions = false,\n } = options;\n\n if (\n process.env['PUPPETEER_DANGEROUS_NO_SANDBOX'] === 'true' &&\n !args.includes('--no-sandbox')\n ) {\n chromeArguments.push('--no-sandbox');\n }\n\n if (userDataDir) {\n // If absolute (for any platform) path is given, we should not resolve it.\n chromeArguments.push(\n `--user-data-dir=${path.posix.isAbsolute(userDataDir) || path.win32.isAbsolute(userDataDir) ? userDataDir : path.resolve(userDataDir)}`,\n );\n }\n if (devtools) {\n chromeArguments.push('--auto-open-devtools-for-tabs');\n }\n if (headless) {\n chromeArguments.push(\n headless === 'shell' ? '--headless' : '--headless=new',\n '--hide-scrollbars',\n '--mute-audio',\n );\n }\n if (!enableExtensions) {\n chromeArguments.push('--disable-extensions');\n }\n if (\n args.every(arg => {\n return arg.startsWith('-');\n })\n ) {\n chromeArguments.push('about:blank');\n }\n chromeArguments.push(...args);\n return chromeArguments;\n }\n\n override async executablePath(\n channel?: ChromeReleaseChannel,\n validatePath = true,\n ): Promise<string> {\n if (channel) {\n return computeSystemExecutablePath(\n {\n browser: SupportedBrowsers.CHROME,\n channel: convertPuppeteerChannelToBrowsersChannel(channel),\n },\n validatePath,\n );\n } else {\n return await this.resolveExecutablePath(undefined, validatePath);\n }\n }\n}\n\n/**\n * Extracts all features from the given command-line flag\n * (e.g. `--enable-features`, `--enable-features=`).\n *\n * Example input:\n * [\"--enable-features=NetworkService,NetworkServiceInProcess\", \"--enable-features=Foo\"]\n *\n * Example output:\n * [\"NetworkService\", \"NetworkServiceInProcess\", \"Foo\"]\n *\n * @internal\n */\nexport function getFeatures(flag: string, options: string[] = []): string[] {\n const prefix = flag.endsWith('=') ? flag : `${flag}=`;\n return options\n .filter(s => {\n return s.startsWith(prefix);\n })\n .flatMap(s => {\n return s\n .substring(s.indexOf('=') + 1)\n .trim()\n .split(',')\n .map(feature => {\n return feature.trim();\n });\n })\n .filter(s => {\n return s;\n });\n}\n\n/**\n * Removes all elements in-place from the given string array\n * that match the given command-line flag.\n *\n * @internal\n */\nexport function removeMatchingFlags(array: string[], flag: string): string[] {\n const prefix = flag.endsWith('=') ? flag : `${flag}=`;\n let i = 0;\n while (i < array.length) {\n if (array[i]!.startsWith(prefix)) {\n array.splice(i, 1);\n } else {\n i++;\n }\n }\n return array;\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {accessSync, constants, existsSync} from 'node:fs';\nimport {tmpdir} from 'node:os';\nimport {join} from 'node:path';\n\nimport {\n Browser as InstalledBrowser,\n CDP_WEBSOCKET_ENDPOINT_REGEX,\n launch,\n TimeoutError as BrowsersTimeoutError,\n WEBDRIVER_BIDI_WEBSOCKET_ENDPOINT_REGEX,\n computeExecutablePath,\n} from '@puppeteer/browsers';\n\nimport {\n firstValueFrom,\n from,\n map,\n race,\n timer,\n} from '../../third_party/rxjs/rxjs.js';\nimport type {Browser, BrowserCloseCallback} from '../api/Browser.js';\nimport {CdpBrowser} from '../cdp/Browser.js';\nimport {Connection} from '../cdp/Connection.js';\nimport {assertSupportedUrlRestrictions} from '../common/BrowserConnector.js';\nimport type {WsOptions} from '../common/ConnectOptions.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {TimeoutError} from '../common/Errors.js';\nimport type {SupportedBrowser} from '../common/SupportedBrowser.js';\nimport {DEFAULT_VIEWPORT} from '../common/util.js';\nimport type {Viewport} from '../common/Viewport.js';\nimport {\n createIncrementalIdGenerator,\n type GetIdFn,\n} from '../util/incremental-id-generator.js';\n\nimport type {ChromeReleaseChannel, LaunchOptions} from './LaunchOptions.js';\nimport {NodeWebSocketTransport as WebSocketTransport} from './NodeWebSocketTransport.js';\nimport {PipeTransport} from './PipeTransport.js';\nimport type {PuppeteerNode} from './PuppeteerNode.js';\n\n/**\n * @internal\n */\nexport interface ResolvedLaunchArgs {\n isTempUserDataDir: boolean;\n userDataDir: string;\n executablePath: string;\n args: string[];\n}\n\n/**\n * Whether the profile directory exists and the current process can write to it.\n * A missing directory counts as writable: the browser creates it on launch.\n *\n * @internal\n */\nfunction isWritableDirectory(directory: string): boolean {\n try {\n accessSync(directory, constants.W_OK);\n return true;\n } catch {\n return !existsSync(directory);\n }\n}\n\n/**\n * @internal\n */\nexport function getBrowserTypeDisplayName(\n browserType: InstalledBrowser,\n): string {\n switch (browserType) {\n case InstalledBrowser.FIREFOX:\n case InstalledBrowser.CHROME:\n return browserType.charAt(0).toUpperCase() + browserType.slice(1);\n default:\n return browserType;\n }\n}\n\n/**\n * Describes a launcher - a class that is able to create and launch a browser instance.\n *\n * @public\n */\nexport abstract class BrowserLauncher {\n #browser: SupportedBrowser;\n #logger: Logger;\n\n /**\n * @internal\n */\n /**\n * @internal\n */\n puppeteer: PuppeteerNode;\n\n /**\n * @internal\n */\n constructor(\n puppeteer: PuppeteerNode,\n browser: SupportedBrowser,\n logger: Logger,\n ) {\n this.puppeteer = puppeteer;\n this.#browser = browser;\n this.#logger = logger;\n }\n\n /**\n * @internal\n */\n protected get logger(): Logger {\n return this.#logger;\n }\n\n get browser(): SupportedBrowser {\n return this.#browser;\n }\n\n async launch(options: LaunchOptions = {}): Promise<Browser> {\n options.logger ??= this.#logger;\n const {\n dumpio = false,\n enableExtensions = false,\n extensionsEnabledInIncognito = [],\n env = process.env,\n handleSIGINT = true,\n handleSIGTERM = true,\n handleSIGHUP = true,\n acceptInsecureCerts = false,\n networkEnabled = true,\n issuesEnabled = true,\n defaultViewport = DEFAULT_VIEWPORT,\n downloadBehavior,\n slowMo = 0,\n timeout = 30000,\n waitForInitialPage = true,\n protocolTimeout,\n handleDevToolsAsPage,\n idGenerator = createIncrementalIdGenerator(),\n blocklist,\n allowlist,\n } = options;\n\n let {protocol} = options;\n\n // Default to 'webDriverBiDi' for Firefox.\n if (this.#browser === 'firefox' && protocol === undefined) {\n protocol = 'webDriverBiDi';\n }\n\n assertSupportedUrlRestrictions({\n allowlist,\n blocklist,\n protocol,\n });\n\n if (this.#browser === 'firefox' && protocol === 'cdp') {\n throw new Error('Connecting to Firefox using CDP is no longer supported');\n }\n\n const launchArgs = await this.computeLaunchArguments({\n ...options,\n protocol,\n });\n\n if (!existsSync(launchArgs.executablePath)) {\n if (launchArgs.isTempUserDataDir) {\n await this.cleanUserDataDir(launchArgs.userDataDir, {\n isTemp: true,\n });\n }\n throw new Error(\n `Browser was not found at the configured executablePath (${launchArgs.executablePath})`,\n );\n }\n\n const usePipe = launchArgs.args.includes('--remote-debugging-pipe');\n\n const onProcessExit = async () => {\n await this.cleanUserDataDir(launchArgs.userDataDir, {\n isTemp: launchArgs.isTempUserDataDir,\n });\n };\n\n if (\n this.#browser === 'firefox' &&\n protocol === 'webDriverBiDi' &&\n usePipe\n ) {\n throw new Error(\n 'Pipe connections are not supported with Firefox and WebDriver BiDi',\n );\n }\n\n const browserProcess = launch({\n executablePath: launchArgs.executablePath,\n args: launchArgs.args,\n handleSIGHUP,\n handleSIGTERM,\n handleSIGINT,\n dumpio,\n env,\n pipe: usePipe,\n onExit: onProcessExit,\n signal: options.signal,\n logger: options.logger,\n });\n\n let browser: Browser;\n let cdpConnection: Connection;\n let closing = false;\n\n const browserCloseCallback: BrowserCloseCallback = async () => {\n if (closing) {\n return;\n }\n closing = true;\n await this.closeBrowser(browserProcess, cdpConnection);\n };\n\n try {\n if (this.#browser === 'firefox') {\n browser = await this.createBiDiBrowser(\n browserProcess,\n browserCloseCallback,\n {\n timeout,\n protocolTimeout,\n slowMo,\n defaultViewport,\n acceptInsecureCerts,\n networkEnabled,\n idGenerator,\n logger: options.logger,\n },\n );\n } else {\n if (usePipe) {\n cdpConnection = await this.createCdpPipeConnection(browserProcess, {\n timeout,\n protocolTimeout,\n slowMo,\n idGenerator,\n logger: options.logger,\n });\n } else {\n cdpConnection = await this.createCdpSocketConnection(browserProcess, {\n timeout,\n protocolTimeout,\n slowMo,\n idGenerator,\n logger: options.logger,\n });\n }\n\n if (protocol === 'webDriverBiDi') {\n browser = await this.createBiDiOverCdpBrowser(\n browserProcess,\n cdpConnection,\n browserCloseCallback,\n {\n defaultViewport,\n acceptInsecureCerts,\n networkEnabled,\n issuesEnabled,\n logger: options.logger,\n },\n );\n } else {\n browser = await CdpBrowser._create(\n cdpConnection,\n [],\n acceptInsecureCerts,\n defaultViewport,\n downloadBehavior,\n browserProcess.nodeProcess,\n browserCloseCallback,\n options.targetFilter,\n undefined,\n undefined,\n networkEnabled,\n issuesEnabled,\n handleDevToolsAsPage,\n blocklist,\n allowlist,\n options.logger,\n );\n }\n }\n } catch (error) {\n void browserCloseCallback();\n const logs = browserProcess.getRecentLogs().join('\\n');\n if (\n logs.includes(\n 'Failed to create a ProcessSingleton for your profile directory',\n ) ||\n // On Windows we will not get logs due to the singleton process handover. See\n // https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/process_singleton_win.cc;l=46;drc=fc7952f0422b5073515a205a04ec9c3a1ae81658\n (process.platform === 'win32' &&\n existsSync(join(launchArgs.userDataDir, 'lockfile')))\n ) {\n // The browser reports the same ProcessSingleton failure whether another\n // instance holds the lock or it simply cannot write to the profile\n // directory, so check for the latter before blaming a running browser.\n if (!isWritableDirectory(launchArgs.userDataDir)) {\n throw new Error(\n `The browser cannot write to ${launchArgs.userDataDir}. Make the \\`userDataDir\\` writable or use a different one.`,\n );\n }\n throw new Error(\n `The browser is already running for ${launchArgs.userDataDir}. Use a different \\`userDataDir\\` or stop the running browser first.`,\n );\n }\n if (logs.includes('Missing X server') && options.headless === false) {\n throw new Error(\n `Missing X server to start the headful browser. Either set headless to true or use xvfb-run to run your Puppeteer script.`,\n );\n }\n if (error instanceof BrowsersTimeoutError) {\n throw new TimeoutError(error.message);\n }\n throw error;\n }\n\n if (Array.isArray(enableExtensions)) {\n await Promise.all([\n enableExtensions.map(path => {\n return browser.installExtension(path, {\n enabledInIncognito: extensionsEnabledInIncognito.includes(path),\n });\n }),\n ]);\n }\n\n if (waitForInitialPage) {\n await this.waitForPageTarget(browser, timeout);\n }\n\n return browser;\n }\n\n abstract executablePath(\n channel?: ChromeReleaseChannel,\n validatePath?: boolean,\n ): Promise<string>;\n\n abstract defaultArgs(object: LaunchOptions): string[];\n\n /**\n * @internal\n */\n protected abstract computeLaunchArguments(\n options: LaunchOptions,\n ): Promise<ResolvedLaunchArgs>;\n\n /**\n * @internal\n */\n protected abstract cleanUserDataDir(\n path: string,\n opts: {isTemp: boolean},\n ): Promise<void>;\n\n /**\n * @internal\n */\n protected async closeBrowser(\n browserProcess: ReturnType<typeof launch>,\n cdpConnection?: Connection,\n ): Promise<void> {\n if (cdpConnection) {\n // Attempt to close the browser gracefully\n try {\n await cdpConnection.closeBrowser();\n await browserProcess.hasClosed();\n } catch (error) {\n this.#logger?.(DEBUG_PREFIXES.error)?.(error);\n await browserProcess.close();\n }\n } else {\n // Wait for a possible graceful shutdown.\n await firstValueFrom(\n race(\n from(browserProcess.hasClosed()),\n timer(5000).pipe(\n map(() => {\n return from(browserProcess.close());\n }),\n ),\n ),\n );\n }\n }\n\n /**\n * @internal\n */\n protected async waitForPageTarget(\n browser: Browser,\n timeout: number,\n ): Promise<void> {\n try {\n await browser.waitForTarget(\n t => {\n return t.type() === 'page';\n },\n {timeout},\n );\n } catch (error) {\n await browser.close();\n throw error;\n }\n }\n\n /**\n * @internal\n */\n protected async createCdpSocketConnection(\n browserProcess: ReturnType<typeof launch>,\n opts: {\n timeout: number;\n protocolTimeout: number | undefined;\n slowMo: number;\n idGenerator: GetIdFn;\n logger: Logger;\n wsOptions?: WsOptions;\n },\n ): Promise<Connection> {\n const browserWSEndpoint = await browserProcess.waitForLineOutput(\n CDP_WEBSOCKET_ENDPOINT_REGEX,\n opts.timeout,\n );\n const transport = await WebSocketTransport.create(\n browserWSEndpoint,\n undefined,\n opts.logger,\n opts.wsOptions,\n );\n return new Connection(\n browserWSEndpoint,\n transport,\n opts.slowMo,\n opts.protocolTimeout,\n /* rawErrors */ false,\n opts.idGenerator,\n opts.logger,\n );\n }\n\n /**\n * @internal\n */\n protected async createCdpPipeConnection(\n browserProcess: ReturnType<typeof launch>,\n opts: {\n timeout: number;\n protocolTimeout: number | undefined;\n slowMo: number;\n idGenerator: GetIdFn;\n logger: Logger;\n wsOptions?: WsOptions;\n },\n ): Promise<Connection> {\n // stdio was assigned during start(), and the 'pipe' option there adds the\n // 4th and 5th items to stdio array\n const {3: pipeWrite, 4: pipeRead} = browserProcess.nodeProcess.stdio;\n const transport = new PipeTransport(\n pipeWrite as NodeJS.WritableStream,\n pipeRead as NodeJS.ReadableStream,\n opts.logger,\n );\n return new Connection(\n '',\n transport,\n opts.slowMo,\n opts.protocolTimeout,\n /* rawErrors */ false,\n opts.idGenerator,\n opts.logger,\n );\n }\n\n /**\n * @internal\n */\n protected async createBiDiOverCdpBrowser(\n browserProcess: ReturnType<typeof launch>,\n cdpConnection: Connection,\n closeCallback: BrowserCloseCallback,\n opts: {\n defaultViewport: Viewport | null;\n acceptInsecureCerts?: boolean;\n networkEnabled: boolean;\n issuesEnabled: boolean;\n logger: Logger;\n },\n ): Promise<Browser> {\n const bidiOnly = process.env['PUPPETEER_WEBDRIVER_BIDI_ONLY'] === 'true';\n const BiDi = await import(/* webpackIgnore: true */ '../bidi/bidi.js');\n const bidiConnection = await BiDi.connectBidiOverCdp(\n cdpConnection,\n opts.logger,\n );\n return await BiDi.BidiBrowser.create({\n connection: bidiConnection,\n // Do not provide CDP connection to Browser, if BiDi-only mode is enabled. This\n // would restrict Browser to use only BiDi endpoint.\n cdpConnection: bidiOnly ? undefined : cdpConnection,\n closeCallback,\n process: browserProcess.nodeProcess,\n defaultViewport: opts.defaultViewport,\n acceptInsecureCerts: opts.acceptInsecureCerts,\n networkEnabled: opts.networkEnabled,\n issuesEnabled: opts.issuesEnabled,\n logger: opts.logger,\n });\n }\n\n /**\n * @internal\n */\n protected async createBiDiBrowser(\n browserProcess: ReturnType<typeof launch>,\n closeCallback: BrowserCloseCallback,\n opts: {\n timeout: number;\n protocolTimeout: number | undefined;\n slowMo: number;\n idGenerator: GetIdFn;\n defaultViewport: Viewport | null;\n acceptInsecureCerts?: boolean;\n networkEnabled?: boolean;\n issuesEnabled?: boolean;\n logger: Logger;\n wsOptions?: WsOptions;\n },\n ): Promise<Browser> {\n const browserWSEndpoint =\n (await browserProcess.waitForLineOutput(\n WEBDRIVER_BIDI_WEBSOCKET_ENDPOINT_REGEX,\n opts.timeout,\n )) + '/session';\n const transport = await WebSocketTransport.create(\n browserWSEndpoint,\n undefined,\n opts.logger,\n opts.wsOptions,\n );\n const BiDi = await import(/* webpackIgnore: true */ '../bidi/bidi.js');\n const bidiConnection = new BiDi.BidiConnection(\n browserWSEndpoint,\n transport,\n opts.idGenerator,\n opts.slowMo,\n opts.protocolTimeout,\n opts.logger,\n );\n return await BiDi.BidiBrowser.create({\n connection: bidiConnection,\n closeCallback,\n process: browserProcess.nodeProcess,\n defaultViewport: opts.defaultViewport,\n acceptInsecureCerts: opts.acceptInsecureCerts,\n networkEnabled: opts.networkEnabled ?? true,\n issuesEnabled: opts.issuesEnabled ?? true,\n logger: opts.logger,\n });\n }\n\n /**\n * @internal\n */\n protected async getProfilePath(): Promise<string> {\n const config = await this.puppeteer.configuration();\n return join(\n config.temporaryDirectory ?? tmpdir(),\n `puppeteer_dev_${this.browser}_profile-`,\n );\n }\n\n /**\n * @internal\n */\n async resolveExecutablePath(\n headless?: boolean | 'shell',\n validatePath = true,\n ): Promise<string> {\n const config = await this.puppeteer.configuration();\n let executablePath = config.executablePath;\n if (executablePath) {\n if (validatePath && !existsSync(executablePath)) {\n throw new Error(\n `Tried to find the browser at the configured path (${executablePath}), but no executable was found.`,\n );\n }\n return executablePath;\n }\n\n function puppeteerBrowserToInstalledBrowser(\n browser?: SupportedBrowser,\n headless?: boolean | 'shell',\n ) {\n switch (browser) {\n case 'chrome':\n if (headless === 'shell') {\n return InstalledBrowser.CHROMEHEADLESSSHELL;\n }\n return InstalledBrowser.CHROME;\n case 'firefox':\n return InstalledBrowser.FIREFOX;\n }\n return InstalledBrowser.CHROME;\n }\n\n const browserType = puppeteerBrowserToInstalledBrowser(\n this.browser,\n headless,\n );\n\n const defaultDownloadPath = await this.puppeteer.defaultDownloadPath();\n const browserVersion = await this.puppeteer.browserVersion();\n\n executablePath = computeExecutablePath({\n cacheDir: defaultDownloadPath!,\n browser: browserType,\n buildId: browserVersion,\n });\n\n if (validatePath && !existsSync(executablePath)) {\n const configVersion = config?.[this.browser]?.version;\n if (configVersion) {\n throw new Error(\n `Tried to find the browser at the configured path (${executablePath}) for version ${configVersion}, but no executable was found.`,\n );\n }\n\n throw new Error(\n `Could not find ${getBrowserTypeDisplayName(browserType)} (ver. ${browserVersion}). This can occur if either\\n` +\n ` 1. you did not perform an installation before running the script (e.g. \\`npx puppeteer browsers install ${browserType}\\`) or\\n` +\n ` 2. your cache path is incorrectly configured (which is: ${config.cacheDirectory}).\\n` +\n 'For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides/configuration.',\n );\n }\n return executablePath;\n }\n}\n","/**\n * @license\n * Copyright 2018 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {ConnectionTransport} from '../common/ConnectionTransport.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {EventEmitter} from '../common/EventEmitter.js';\nimport {assert} from '../util/assert.js';\nimport {DisposableStack} from '../util/disposable.js';\n\n/**\n * @internal\n */\nexport class PipeTransport implements ConnectionTransport {\n #pipeWrite: NodeJS.WritableStream;\n #subscriptions = new DisposableStack();\n #logger: Logger;\n\n #isClosed = false;\n #pendingMessage: Buffer[] = [];\n\n onclose?: () => void;\n onmessage?: (value: string) => void;\n\n constructor(\n pipeWrite: NodeJS.WritableStream,\n pipeRead: NodeJS.ReadableStream,\n logger: Logger,\n ) {\n this.#pipeWrite = pipeWrite;\n this.#logger = logger;\n const pipeReadEmitter = this.#subscriptions.use(\n // NodeJS event emitters don't support `*` so we need to typecast\n // As long as we don't use it we should be OK.\n new EventEmitter(\n pipeRead as unknown as EventEmitter<Record<string, any>>,\n logger,\n ),\n );\n pipeReadEmitter.on('data', buffer => {\n return this.#dispatch(buffer);\n });\n pipeReadEmitter.on('close', () => {\n if (this.onclose) {\n this.onclose.call(null);\n }\n });\n pipeReadEmitter.on('error', err => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n });\n const pipeWriteEmitter = this.#subscriptions.use(\n // NodeJS event emitters don't support `*` so we need to typecast\n // As long as we don't use it we should be OK.\n new EventEmitter(\n pipeWrite as unknown as EventEmitter<Record<string, any>>,\n ),\n );\n pipeWriteEmitter.on('error', err => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n });\n }\n\n send(message: string): void {\n assert(!this.#isClosed, '`PipeTransport` is closed.');\n\n this.#pipeWrite.write(message);\n this.#pipeWrite.write('\\0');\n }\n\n #dispatch(buffer: Buffer<ArrayBuffer>): void {\n assert(!this.#isClosed, '`PipeTransport` is closed.');\n\n this.#pendingMessage.push(buffer);\n if (buffer.indexOf('\\0') === -1) {\n return;\n }\n const concatBuffer = Buffer.concat(this.#pendingMessage);\n\n let start = 0;\n let end = concatBuffer.indexOf('\\0');\n while (end !== -1) {\n const message = concatBuffer.toString(undefined, start, end);\n setImmediate(() => {\n if (this.onmessage) {\n this.onmessage.call(null, message);\n }\n });\n start = end + 1;\n end = concatBuffer.indexOf('\\0', start);\n }\n if (start >= concatBuffer.length) {\n this.#pendingMessage = [];\n } else {\n this.#pendingMessage = [concatBuffer.subarray(start)];\n }\n }\n\n close(): void {\n this.#isClosed = true;\n this.#subscriptions.dispose();\n }\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport fs from 'node:fs';\n\nconst rmOptions = {\n force: true,\n recursive: true,\n maxRetries: 10,\n retryDelay: 100,\n};\n\n/**\n * @internal\n */\nexport async function rm(path: string): Promise<void> {\n await fs.promises.rm(path, rmOptions);\n}\n\n/**\n * @internal\n */\nexport function rmSync(path: string): void {\n fs.rmSync(path, rmOptions);\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport fs from 'node:fs';\nimport {rename, unlink, mkdtemp} from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport {Browser as SupportedBrowsers, createProfile} from '@puppeteer/browsers';\n\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {assert} from '../util/assert.js';\n\nimport {BrowserLauncher, type ResolvedLaunchArgs} from './BrowserLauncher.js';\nimport type {LaunchOptions} from './LaunchOptions.js';\nimport type {PuppeteerNode} from './PuppeteerNode.js';\nimport {rm} from './util/fs.js';\n\n/**\n * @internal\n */\nexport class FirefoxLauncher extends BrowserLauncher {\n constructor(puppeteer: PuppeteerNode, logger: Logger) {\n super(puppeteer, 'firefox', logger);\n }\n\n static getPreferences(\n extraPrefsFirefox?: Record<string, unknown>,\n ): Record<string, unknown> {\n return {\n ...extraPrefsFirefox,\n // Force all web content to use a single content process. TODO: remove\n // this once Firefox supports mouse event dispatch from the main frame\n // context. See https://bugzilla.mozilla.org/show_bug.cgi?id=1773393.\n 'fission.webContentIsolationStrategy': 0,\n };\n }\n\n /**\n * @internal\n */\n override async computeLaunchArguments(\n options: LaunchOptions = {},\n ): Promise<ResolvedLaunchArgs> {\n const {\n ignoreDefaultArgs = false,\n args = [],\n executablePath,\n pipe = false,\n extraPrefsFirefox = {},\n debuggingPort = null,\n } = options;\n\n const firefoxArguments = [];\n if (!ignoreDefaultArgs) {\n firefoxArguments.push(...this.defaultArgs(options));\n } else if (Array.isArray(ignoreDefaultArgs)) {\n firefoxArguments.push(\n ...this.defaultArgs(options).filter(arg => {\n return !ignoreDefaultArgs.includes(arg);\n }),\n );\n } else {\n firefoxArguments.push(...args);\n }\n\n if (\n !firefoxArguments.some(argument => {\n return argument.startsWith('--remote-debugging-');\n })\n ) {\n if (pipe) {\n assert(\n debuggingPort === null,\n 'Browser should be launched with either pipe or debugging port - not both.',\n );\n }\n firefoxArguments.push(`--remote-debugging-port=${debuggingPort || 0}`);\n }\n\n let userDataDir: string | undefined;\n let isTempUserDataDir = true;\n\n // Check for the profile argument, which will always be set even\n // with a custom directory specified via the userDataDir option.\n const profileArgIndex = firefoxArguments.findIndex(arg => {\n return ['-profile', '--profile'].includes(arg);\n });\n\n if (profileArgIndex !== -1) {\n userDataDir = firefoxArguments[profileArgIndex + 1];\n if (!userDataDir) {\n throw new Error(`Missing value for profile command line argument`);\n }\n\n // When using a custom Firefox profile it needs to be populated\n // with required preferences.\n isTempUserDataDir = false;\n } else {\n const profilePath = await this.getProfilePath();\n userDataDir = await mkdtemp(profilePath);\n firefoxArguments.push('--profile');\n firefoxArguments.push(userDataDir);\n }\n\n await createProfile(SupportedBrowsers.FIREFOX, {\n path: userDataDir,\n preferences: FirefoxLauncher.getPreferences(extraPrefsFirefox),\n });\n\n let firefoxExecutable: string;\n if (this.puppeteer._isPuppeteerCore || executablePath) {\n assert(\n executablePath,\n `An \\`executablePath\\` must be specified for \\`puppeteer-core\\``,\n );\n firefoxExecutable = executablePath;\n } else {\n firefoxExecutable = await this.executablePath(undefined);\n }\n\n return {\n isTempUserDataDir,\n userDataDir,\n args: firefoxArguments,\n executablePath: firefoxExecutable,\n };\n }\n\n /**\n * @internal\n */\n override async cleanUserDataDir(\n userDataDir: string,\n opts: {isTemp: boolean},\n ): Promise<void> {\n if (opts.isTemp) {\n try {\n await rm(userDataDir);\n } catch (error) {\n this.logger(DEBUG_PREFIXES.error)?.(error);\n }\n } else {\n try {\n const backupSuffix = '.puppeteer';\n const backupFiles = ['prefs.js', 'user.js'];\n\n const results = await Promise.allSettled(\n backupFiles.map(async file => {\n const prefsBackupPath = path.join(userDataDir, file + backupSuffix);\n if (fs.existsSync(prefsBackupPath)) {\n const prefsPath = path.join(userDataDir, file);\n await unlink(prefsPath);\n await rename(prefsBackupPath, prefsPath);\n }\n }),\n );\n for (const result of results) {\n if (result.status === 'rejected') {\n throw result.reason;\n }\n }\n } catch (error) {\n this.logger(DEBUG_PREFIXES.error)?.(error);\n }\n }\n }\n\n override async executablePath(\n _: unknown,\n validatePath = true,\n ): Promise<string> {\n return await this.resolveExecutablePath(\n undefined,\n /* validatePath=*/ validatePath,\n );\n }\n\n override defaultArgs(options: LaunchOptions = {}): string[] {\n const {\n devtools = false,\n headless = !devtools,\n args = [],\n userDataDir = null,\n } = options;\n\n const firefoxArguments = [];\n\n switch (os.platform()) {\n case 'darwin':\n firefoxArguments.push('--foreground');\n break;\n case 'win32':\n firefoxArguments.push('--wait-for-browser');\n break;\n }\n if (userDataDir) {\n firefoxArguments.push('--profile');\n firefoxArguments.push(userDataDir);\n }\n if (headless) {\n firefoxArguments.push('--headless');\n }\n if (devtools) {\n firefoxArguments.push('--devtools');\n }\n if (\n args.every(arg => {\n return arg.startsWith('-');\n })\n ) {\n firefoxArguments.push('about:blank');\n }\n firefoxArguments.push(...args);\n return firefoxArguments;\n }\n}\n","/**\n * @license\n * Copyright 2020 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n Browser as browsers_SupportedBrowser,\n resolveBuildId,\n detectBrowserPlatform,\n getInstalledBrowsers,\n uninstall,\n} from '@puppeteer/browsers';\n\nimport type {Browser} from '../api/Browser.js';\nimport type {Configuration} from '../common/Configuration.js';\nimport type {ConnectOptions} from '../common/ConnectOptions.js';\nimport {debug, type Logger} from '../common/Debug.js';\nimport {type CommonPuppeteerSettings, Puppeteer} from '../common/Puppeteer.js';\nimport type {SupportedBrowser} from '../common/SupportedBrowser.js';\nimport {environment} from '../environment.js';\nimport {PUPPETEER_REVISIONS} from '../revisions.js';\n\nimport type {BrowserLauncher} from './BrowserLauncher.js';\nimport {ChromeLauncher} from './ChromeLauncher.js';\nimport {FirefoxLauncher} from './FirefoxLauncher.js';\nimport type {ChromeReleaseChannel, LaunchOptions} from './LaunchOptions.js';\n\n/**\n * Extends the main {@link Puppeteer} class with Node specific behaviour for\n * fetching and downloading browsers.\n *\n * If you're using Puppeteer in a Node environment, this is the class you'll get\n * when you run `import puppeteer from 'puppeteer'`.\n *\n * @remarks\n * The most common method to use is {@link PuppeteerNode.launch | launch}, which\n * is used to launch and connect to a new browser instance.\n *\n * See {@link Puppeteer | the main Puppeteer class} for methods common to all\n * environments, such as {@link Puppeteer.connect}.\n *\n * @example\n * The following is a typical example of using Puppeteer to drive automation:\n *\n * ```ts\n * import puppeteer from 'puppeteer';\n *\n * const browser = await puppeteer.launch();\n * const page = await browser.newPage();\n * await page.goto('https://www.google.com');\n * // other actions...\n * await browser.close();\n * ```\n *\n * Once you have created a `page` you have access to a large API to interact\n * with the page, navigate, or find certain elements in that page.\n * The {@link Page | `page` documentation} lists all the available methods.\n *\n * @public\n */\nexport class PuppeteerNode extends Puppeteer {\n #launcher?: BrowserLauncher;\n #lastLaunchedBrowser?: SupportedBrowser;\n configuration: () => Promise<Configuration>;\n\n /**\n * @internal\n */\n constructor(\n settings: {\n configuration?: () => Promise<Configuration>;\n } & CommonPuppeteerSettings,\n ) {\n const {configuration, ...commonSettings} = settings;\n super(commonSettings);\n if (configuration) {\n this.configuration = configuration;\n } else {\n this.configuration = () => {\n return Promise.resolve({});\n };\n }\n\n this.connect = this.connect.bind(this);\n this.launch = this.launch.bind(this);\n this.executablePath = this.executablePath.bind(this);\n this.defaultArgs = this.defaultArgs.bind(this);\n this.trimCache = this.trimCache.bind(this);\n }\n\n /**\n * This method attaches Puppeteer to an existing browser instance.\n *\n * @param options - Set of configurable options to set on the browser.\n * @returns Promise which resolves to browser instance.\n */\n override connect(options: ConnectOptions): Promise<Browser> {\n options.logger ??= debug;\n return super.connect(options);\n }\n\n /**\n * Launches a browser instance with given arguments and options when\n * specified.\n *\n * When using with `puppeteer-core`,\n * {@link LaunchOptions.executablePath | options.executablePath} or\n * {@link LaunchOptions.channel | options.channel} must be provided.\n *\n * @example\n * You can use {@link LaunchOptions.ignoreDefaultArgs | options.ignoreDefaultArgs}\n * to filter out `--mute-audio` from default arguments:\n *\n * ```ts\n * const browser = await puppeteer.launch({\n * ignoreDefaultArgs: ['--mute-audio'],\n * });\n * ```\n *\n * @remarks\n * Puppeteer can also be used to control the Chrome browser, but it works best\n * with the version of Chrome for Testing downloaded by default.\n * There is no guarantee it will work with any other version. If Google Chrome\n * (rather than Chrome for Testing) is preferred, a\n * {@link https://www.google.com/chrome/browser/canary.html | Chrome Canary}\n * or\n * {@link https://www.chromium.org/getting-involved/dev-channel | Dev Channel}\n * build is suggested. See\n * {@link https://www.howtogeek.com/202825/what%E2%80%99s-the-difference-between-chromium-and-chrome/ | this article}\n * for a description of the differences between Chromium and Chrome.\n * {@link https://chromium.googlesource.com/chromium/src/+/lkgr/docs/chromium_browser_vs_google_chrome.md | This article}\n * describes some differences for Linux users. See\n * {@link https://developer.chrome.com/blog/chrome-for-testing/ | this doc} for the description\n * of Chrome for Testing.\n *\n * @param options - Options to configure launching behavior.\n */\n async launch(options: LaunchOptions = {}): Promise<Browser> {\n options.logger ??= debug;\n const {browser = await this.defaultBrowser()} = options;\n this.#lastLaunchedBrowser = browser;\n if (!['chrome', 'firefox'].includes(browser)) {\n throw new Error(`Unknown product: ${browser}`);\n }\n this.#launcher = this.#getLauncher(browser, options.logger);\n return await this.#launcher.launch(options);\n }\n\n #getLauncher(browser: SupportedBrowser, logger: Logger): BrowserLauncher {\n if (this.#launcher && this.#launcher.browser === browser) {\n return this.#launcher;\n }\n switch (browser) {\n case 'chrome':\n return new ChromeLauncher(this, logger);\n case 'firefox':\n return new FirefoxLauncher(this, logger);\n default:\n throw new Error(`Unknown product: ${browser}`);\n }\n }\n\n /**\n * The default executable path for a given ChromeReleaseChannel.\n */\n executablePath(channel: ChromeReleaseChannel): Promise<string>;\n /**\n * The default executable path given LaunchOptions.\n */\n executablePath(options: LaunchOptions): Promise<string>;\n /**\n * The default executable path.\n */\n executablePath(): Promise<string>;\n async executablePath(\n optsOrChannel?: ChromeReleaseChannel | LaunchOptions,\n ): Promise<string> {\n if (optsOrChannel === undefined) {\n return await this.#getLauncher(\n await this.lastLaunchedBrowser(),\n debug,\n ).executablePath(undefined, /* validatePath= */ false);\n }\n if (typeof optsOrChannel === 'string') {\n return await this.#getLauncher('chrome', debug).executablePath(\n optsOrChannel,\n /* validatePath= */ false,\n );\n }\n return await this.#getLauncher(\n optsOrChannel.browser ?? (await this.lastLaunchedBrowser()),\n (optsOrChannel as LaunchOptions).logger ?? debug,\n ).resolveExecutablePath(optsOrChannel.headless, /* validatePath= */ false);\n }\n\n /**\n * @internal\n */\n async browserVersion(): Promise<string> {\n const config = await this.configuration();\n const lastLaunched = await this.lastLaunchedBrowser();\n return config?.[lastLaunched]?.version ?? PUPPETEER_REVISIONS[lastLaunched];\n }\n\n /**\n * The default download path for puppeteer. For puppeteer-core, this\n * code should never be called as it is never defined.\n *\n * @internal\n */\n async defaultDownloadPath(): Promise<string | undefined> {\n const config = await this.configuration();\n return config.cacheDirectory;\n }\n\n /**\n * The name of the browser that was last launched.\n */\n async lastLaunchedBrowser(): Promise<SupportedBrowser> {\n return this.#lastLaunchedBrowser ?? (await this.defaultBrowser());\n }\n\n /**\n * The name of the browser that will be launched by default. For\n * `puppeteer`, this is influenced by your configuration. Otherwise, it's\n * `chrome`.\n */\n async defaultBrowser(): Promise<SupportedBrowser> {\n const config = await this.configuration();\n return config.defaultBrowser ?? 'chrome';\n }\n\n /**\n * @param options - Set of configurable options to set on the browser.\n *\n * @returns The default arguments that the browser will be launched with.\n */\n async defaultArgs(options: LaunchOptions = {}): Promise<string[]> {\n return this.#getLauncher(\n options.browser ?? (await this.lastLaunchedBrowser()),\n options.logger ?? debug,\n ).defaultArgs(options);\n }\n\n /**\n * Removes all non-current Firefox and Chrome binaries in the cache directory\n * identified by the provided Puppeteer configuration. The current browser\n * version is determined by resolving PUPPETEER_REVISIONS from Puppeteer\n * unless `configuration.browserRevision` is provided.\n *\n * @remarks\n *\n * Note that the method does not check if any other Puppeteer versions\n * installed on the host that use the same cache directory require the\n * non-current binaries.\n *\n * @public\n */\n async trimCache(): Promise<void> {\n const platform = detectBrowserPlatform();\n if (!platform) {\n throw new Error('The current platform is not supported.');\n }\n\n const config = await this.configuration();\n const cacheDir = config.cacheDirectory!;\n const installedBrowsers = await getInstalledBrowsers({\n cacheDir,\n });\n\n const puppeteerBrowsers: Array<{\n product: SupportedBrowser;\n browser: browsers_SupportedBrowser;\n currentBuildId: string;\n }> = [\n {\n product: 'chrome',\n browser: browsers_SupportedBrowser.CHROME,\n currentBuildId: '',\n },\n {\n product: 'firefox',\n browser: browsers_SupportedBrowser.FIREFOX,\n currentBuildId: '',\n },\n ];\n\n // Resolve current buildIds.\n await Promise.all(\n puppeteerBrowsers.map(async item => {\n const tag =\n config?.[item.product]?.version ?? PUPPETEER_REVISIONS[item.product];\n\n item.currentBuildId = await resolveBuildId(item.browser, platform, tag);\n }),\n );\n\n const currentBrowserBuilds = new Set(\n puppeteerBrowsers.map(browser => {\n return `${browser.browser}_${browser.currentBuildId}`;\n }),\n );\n\n const currentBrowsers = new Set(\n puppeteerBrowsers.map(browser => {\n return browser.browser;\n }),\n );\n\n for (const installedBrowser of installedBrowsers) {\n // Don't uninstall browsers that are not managed by Puppeteer yet.\n if (!currentBrowsers.has(installedBrowser.browser)) {\n continue;\n }\n // Keep the browser build used by the current Puppeteer installation.\n if (\n currentBrowserBuilds.has(\n `${installedBrowser.browser}_${installedBrowser.buildId}`,\n )\n ) {\n continue;\n }\n\n await uninstall({\n browser: installedBrowser.browser,\n platform,\n cacheDir,\n buildId: installedBrowser.buildId,\n });\n }\n }\n\n /**\n * Defines whether Puppeteer should follow symlinks for file operations.\n *\n * @param followSymlinks - Whether Puppeteer should follow symlinks.\n *\n * @public\n */\n setFollowSymlinks(followSymlinks: boolean): void {\n environment.value.followSymlinks = followSymlinks;\n }\n}\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {ChildProcessWithoutNullStreams} from 'node:child_process';\nimport {spawn, spawnSync} from 'node:child_process';\nimport os from 'node:os';\nimport {PassThrough} from 'node:stream';\n\nimport type {OperatorFunction} from '../../third_party/rxjs/rxjs.js';\nimport {\n bufferCount,\n concatMap,\n filter,\n from,\n fromEvent,\n lastValueFrom,\n map,\n takeUntil,\n tap,\n} from '../../third_party/rxjs/rxjs.js';\nimport {CDPSessionEvent} from '../api/CDPSession.js';\nimport type {BoundingBox} from '../api/ElementHandle.js';\nimport type {Page, VideoFormat} from '../api/Page.js';\nimport {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';\nimport {fromEmitterEvent} from '../common/util.js';\nimport {guarded} from '../util/decorators.js';\nimport {asyncDisposeSymbol} from '../util/disposable.js';\n\nconst CRF_VALUE = 30;\nconst DEFAULT_FPS = 30;\n\n/**\n * Computes how many encoder frames to emit for a captured frame that spans\n * `[previousTimestamp, timestamp]`, so that the cumulative number of emitted\n * frames tracks a constant-`fps` grid anchored at `startTimestamp`.\n *\n * Counting each interval independently with\n * `Math.round(fps * (timestamp - previousTimestamp))` is wrong when frames are\n * captured faster than `fps`: every sub-`1/fps` interval still rounds up to a\n * whole frame, so the emitted frame count grows with the capture rate instead\n * of staying at `fps * duration`, which stretches playback (and, for very high\n * capture rates, the per-interval value rounds down to 0 and frames are\n * dropped). Differencing the rounded cumulative position keeps the total at\n * `Math.round(fps * (lastTimestamp - startTimestamp))`, independent of the\n * capture rate.\n *\n * Timestamps are in seconds (CDP `Page.screencastFrame` metadata timestamps).\n *\n * @internal\n */\nexport function countFrames(\n startTimestamp: number,\n previousTimestamp: number,\n timestamp: number,\n fps: number,\n): number {\n const end = Math.round((timestamp - startTimestamp) * fps);\n const start = Math.round((previousTimestamp - startTimestamp) * fps);\n return Math.max(0, end - start);\n}\n\n/**\n * @internal\n */\nexport interface ScreenRecorderOptions {\n ffmpegPath?: string;\n speed?: number;\n crop?: BoundingBox;\n format?: VideoFormat;\n fps?: number;\n loop?: number;\n delay?: number;\n quality?: number;\n colors?: number;\n scale?: number;\n}\n\n/**\n * @public\n */\nexport class ScreenRecorder extends PassThrough {\n #page: Page;\n\n #process: ChildProcessWithoutNullStreams;\n\n #controller = new AbortController();\n #lastFrame: Promise<readonly [Buffer, number]>;\n\n #fps: number;\n #logger?: Logger;\n\n /**\n * @internal\n */\n constructor(\n page: Page,\n width: number,\n height: number,\n {\n ffmpegPath,\n speed,\n scale,\n crop,\n format,\n fps,\n loop,\n delay,\n quality,\n colors,\n }: ScreenRecorderOptions = {},\n logger?: Logger,\n ) {\n super({allowHalfOpen: false});\n\n this.#logger = logger;\n\n ffmpegPath ??= 'ffmpeg';\n format ??= 'webm';\n fps ??= DEFAULT_FPS;\n // Maps 0 to -1 as ffmpeg maps 0 to infinity.\n loop ||= -1;\n delay ??= -1;\n quality ??= CRF_VALUE;\n colors ??= 256;\n\n this.#fps = fps;\n\n // Tests if `ffmpeg` exists.\n const {error} = spawnSync(ffmpegPath);\n if (error) {\n throw error;\n }\n\n const filters = [\n `crop='min(${width},iw):min(${height},ih):0:0'`,\n `pad=${width}:${height}:0:0`,\n ];\n if (speed) {\n filters.push(`setpts=${1 / speed}*PTS`);\n }\n if (crop) {\n filters.push(`crop=${crop.width}:${crop.height}:${crop.x}:${crop.y}`);\n }\n if (scale) {\n filters.push(`scale=iw*${scale}:-1:flags=lanczos`);\n }\n\n const formatArgs = this.#getFormatArgs(\n format,\n fps,\n loop,\n delay,\n quality,\n colors,\n );\n const vf = formatArgs.indexOf('-vf');\n if (vf !== -1) {\n filters.push(formatArgs.splice(vf, 2).at(-1) ?? '');\n }\n\n this.#process = spawn(\n ffmpegPath,\n // See https://trac.ffmpeg.org/wiki/Encode/VP9 for more information on flags.\n [\n ['-loglevel', 'error'],\n // Reduces general buffering.\n ['-avioflags', 'direct'],\n // Reduces initial buffering while analyzing input fps and other stats.\n [\n '-fpsprobesize',\n '0',\n '-probesize',\n '32',\n '-analyzeduration',\n '0',\n '-fflags',\n 'nobuffer',\n ],\n // Forces input to be read from standard input, and forces png input\n // image format. `-framerate` is an input option and must appear before\n // `-i`; otherwise ffmpeg ignores it and the image2pipe demuxer falls\n // back to its default 25fps, stretching the output timeline relative to\n // the frames we feed it at `fps`.\n // prettier-ignore\n ['-framerate', `${fps}`, '-f', 'image2pipe', '-vcodec', 'png', '-i', 'pipe:0'],\n // No audio\n ['-an'],\n // This drastically reduces stalling when cpu is overbooked. By default\n // VP9 tries to use all available threads?\n ['-threads', '1'],\n // Disable bitrate.\n ['-b:v', '0'],\n // Specifies the encoding and format we are using.\n formatArgs,\n // Filters to ensure the images are piped correctly,\n // combined with any format-specific filters.\n ['-vf', filters.join()],\n 'pipe:1',\n ].flat(),\n {stdio: ['pipe', 'pipe', 'pipe']},\n );\n this.#process.stdout.pipe(this);\n this.#process.stderr.on('data', (data: Buffer) => {\n this.#logger?.(DEBUG_PREFIXES.ffmpeg)?.(data.toString('utf8'));\n });\n\n this.#page = page;\n\n const {client} = this.#page.mainFrame();\n client.once(CDPSessionEvent.Disconnected, () => {\n void this.stop().catch(err => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n });\n });\n\n // Anchor for the constant-fps grid; set to the first frame's timestamp.\n let startTimestamp: number | undefined;\n this.#lastFrame = lastValueFrom(\n fromEmitterEvent(client, 'Page.screencastFrame').pipe(\n tap(event => {\n void client.send('Page.screencastFrameAck', {\n sessionId: event.sessionId,\n });\n }),\n filter(event => {\n return event.metadata.timestamp !== undefined;\n }),\n map(event => {\n return {\n buffer: Buffer.from(event.data, 'base64'),\n timestamp: event.metadata.timestamp!,\n };\n }),\n bufferCount(2, 1) as OperatorFunction<\n {buffer: Buffer; timestamp: number},\n [\n {buffer: Buffer; timestamp: number},\n {buffer: Buffer; timestamp: number},\n ]\n >,\n concatMap(([{timestamp: previousTimestamp, buffer}, {timestamp}]) => {\n startTimestamp ??= previousTimestamp;\n return from(\n Array<Buffer>(\n countFrames(startTimestamp, previousTimestamp, timestamp, fps),\n ).fill(buffer),\n );\n }),\n map(buffer => {\n void this.#writeFrame(buffer);\n return [buffer, performance.now()] as const;\n }),\n takeUntil(fromEvent(this.#controller.signal, 'abort')),\n ),\n {defaultValue: [Buffer.from([]), performance.now()] as const},\n );\n }\n\n #getFormatArgs(\n format: VideoFormat,\n fps: number | 'source_fps',\n loop: number,\n delay: number,\n quality: number,\n colors: number,\n ): string[] {\n const libvpx = [\n ['-vcodec', 'vp9'],\n // Sets the quality. Lower the better.\n ['-crf', `${quality}`],\n // Sets the quality and how efficient the compression will be.\n [\n '-deadline',\n 'realtime',\n '-cpu-used',\n `${Math.min(os.cpus().length / 2, 8)}`,\n ],\n ];\n switch (format) {\n case 'webm':\n return [\n ...libvpx,\n // Sets the format\n ['-f', 'webm'],\n ].flat();\n case 'gif':\n fps = DEFAULT_FPS === fps ? 20 : 'source_fps';\n if (loop === Infinity) {\n loop = 0;\n }\n if (delay !== -1) {\n // ms to cs\n delay /= 10;\n }\n return [\n // Sets the frame rate and uses a custom palette generated from the\n // input.\n [\n '-vf',\n `fps=${fps},split[s0][s1];[s0]palettegen=stats_mode=diff:max_colors=${colors}[p];[s1][p]paletteuse=dither=bayer`,\n ],\n // Sets the number of times to loop playback.\n ['-loop', `${loop}`],\n // Sets the delay between iterations of a loop.\n ['-final_delay', `${delay}`],\n // Sets the format\n ['-f', 'gif'],\n ].flat();\n case 'mp4':\n return [\n ...libvpx,\n // Fragment file during stream to avoid errors.\n ['-movflags', 'hybrid_fragmented'],\n // Sets the format\n ['-f', 'mp4'],\n ].flat();\n }\n }\n\n @guarded()\n async #writeFrame(buffer: Buffer) {\n const error = await new Promise<Error | null | undefined>(resolve => {\n this.#process.stdin.write(buffer, resolve);\n });\n if (error) {\n console.log(`ffmpeg failed to write: ${error.message}.`);\n }\n }\n\n /**\n * Stops the recorder.\n *\n * @public\n */\n @guarded()\n async stop(): Promise<void> {\n if (this.#controller.signal.aborted) {\n return;\n }\n // Stopping the screencast will flush the frames.\n await this.#page._stopScreencast().catch(err => {\n this.#logger?.(DEBUG_PREFIXES.error)?.(err);\n });\n\n this.#controller.abort();\n\n // Repeat the last frame for the remaining frames.\n const [buffer, timestamp] = await this.#lastFrame;\n await Promise.all(\n Array<Buffer>(\n Math.max(\n 1,\n Math.round((this.#fps * (performance.now() - timestamp)) / 1000),\n ),\n )\n .fill(buffer)\n .map(this.#writeFrame.bind(this)),\n );\n\n // Close stdin to notify FFmpeg we are done.\n this.#process.stdin.end();\n await new Promise(resolve => {\n this.#process.once('close', resolve);\n });\n }\n\n override async [asyncDisposeSymbol](): Promise<void> {\n await this.stop();\n await super[asyncDisposeSymbol]();\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Set up Node-specific environment dependencies before importing other modules.\nimport './node-env-setup.js';\n\nexport * from './index.js';\n\nimport {environment} from './environment.js';\n\nimport * as Puppeteer from './index.js';\n\nenvironment.value.ScreenRecorder = Puppeteer.ScreenRecorder;\n\n/**\n * @public\n */\nconst puppeteer = new Puppeteer.PuppeteerNode({\n isPuppeteerCore: true,\n});\n\nexport const {\n /**\n * @public\n */\n connect,\n /**\n * @public\n */\n defaultArgs,\n /**\n * @public\n */\n executablePath,\n /**\n * @public\n */\n launch,\n} = puppeteer;\n\nexport default puppeteer;\n","/**\n * @license\n * Copyright 2023 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {homedir} from 'node:os';\nimport {join} from 'node:path';\n\nimport {lilconfig} from 'lilconfig';\nimport type {\n ChromeHeadlessShellSettings,\n ChromeSettings,\n Configuration,\n FirefoxSettings,\n SupportedBrowser,\n} from 'puppeteer-core';\n\nfunction getBooleanEnvVar(name: string): boolean | undefined {\n const env = process.env[name];\n if (env === undefined) {\n return;\n }\n switch (env.toLowerCase()) {\n case '':\n case '0':\n case 'false':\n case 'off':\n return false;\n default:\n return true;\n }\n}\n\n/**\n * @internal\n */\nfunction isSupportedBrowser(product: unknown): product is SupportedBrowser {\n switch (product) {\n case 'chrome':\n case 'firefox':\n return true;\n default:\n return false;\n }\n}\n\n/**\n * @internal\n */\nfunction getDefaultBrowser(browser?: unknown): SupportedBrowser {\n if (!browser) {\n return 'chrome';\n }\n if (!isSupportedBrowser(browser)) {\n throw new Error(`Unsupported browser ${browser}`);\n }\n return browser;\n}\n\n/**\n * @internal\n */\nfunction getLogLevel(logLevel: unknown): 'silent' | 'error' | 'warn' {\n switch (logLevel) {\n case 'silent':\n return 'silent';\n case 'error':\n return 'error';\n default:\n return 'warn';\n }\n}\n\n/**\n * @internal\n */\nexport function getBrowserSetting(\n browser: 'chrome' | 'chrome-headless-shell' | 'firefox',\n configuration: Configuration,\n defaultConfig:\n ChromeSettings | ChromeHeadlessShellSettings | FirefoxSettings = {},\n): ChromeSettings | ChromeHeadlessShellSettings | FirefoxSettings {\n const browserSetting:\n ChromeSettings | ChromeHeadlessShellSettings | FirefoxSettings = {};\n const browserEnvName = browser.replaceAll('-', '_').toUpperCase();\n\n browserSetting.version =\n process.env[`PUPPETEER_${browserEnvName}_VERSION`] ??\n configuration[browser]?.version ??\n defaultConfig.version;\n\n browserSetting.downloadBaseUrl =\n process.env[`PUPPETEER_${browserEnvName}_DOWNLOAD_BASE_URL`] ??\n configuration[browser]?.downloadBaseUrl ??\n defaultConfig.downloadBaseUrl;\n\n browserSetting.skipDownload =\n getBooleanEnvVar(`PUPPETEER_${browserEnvName}_SKIP_DOWNLOAD`) ??\n getBooleanEnvVar(`PUPPETEER_SKIP_${browserEnvName}_DOWNLOAD`) ??\n configuration[browser]?.skipDownload ??\n configuration.skipDownload ??\n defaultConfig.skipDownload;\n\n return browserSetting;\n}\n\n/**\n * @internal\n */\nexport const getConfiguration = async (): Promise<Configuration> => {\n const result = await lilconfig('puppeteer', {\n searchPlaces: [\n 'package.json',\n '.config/puppeteer.config.cjs',\n '.config/puppeteer.config.js',\n '.config/puppeteerrc.cjs',\n '.config/puppeteerrc.js',\n '.config/puppeteerrc.json',\n '.config/puppeteerrc',\n '.puppeteerrc.cjs',\n '.puppeteerrc.js',\n '.puppeteerrc.json',\n '.puppeteerrc',\n 'puppeteer.config.cjs',\n 'puppeteer.config.js',\n ],\n }).search();\n const configuration: Configuration = result ? {...result.config} : {};\n\n configuration.logLevel = getLogLevel(\n process.env['PUPPETEER_LOGLEVEL'] ?? configuration.logLevel,\n );\n\n // Merging environment variables.\n configuration.defaultBrowser = getDefaultBrowser(\n process.env['PUPPETEER_BROWSER'] ?? configuration.defaultBrowser,\n );\n\n configuration.executablePath =\n process.env['PUPPETEER_EXECUTABLE_PATH'] ?? configuration.executablePath;\n\n // Default to skipDownload if executablePath is set\n if (configuration.executablePath) {\n configuration.skipDownload = true;\n }\n\n // Set skipDownload explicitly or from default\n configuration.skipDownload =\n getBooleanEnvVar('PUPPETEER_SKIP_DOWNLOAD') ?? configuration.skipDownload;\n\n // Prepare variables used in browser downloading\n configuration.chrome = getBrowserSetting('chrome', configuration);\n configuration['chrome-headless-shell'] = getBrowserSetting(\n 'chrome-headless-shell',\n configuration,\n );\n configuration.firefox = getBrowserSetting('firefox', configuration, {\n skipDownload: true,\n });\n\n configuration.cacheDirectory =\n process.env['PUPPETEER_CACHE_DIR'] ??\n configuration.cacheDirectory ??\n join(homedir(), '.cache', 'puppeteer');\n\n configuration.temporaryDirectory =\n process.env['PUPPETEER_TMP_DIR'] ?? configuration.temporaryDirectory;\n\n configuration.experiments ??= {};\n\n return configuration;\n};\n","/**\n * @license\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport * from 'puppeteer-core';\n\nimport {PuppeteerNode} from 'puppeteer-core';\n\nimport {getConfiguration} from './getConfiguration.js';\n\n/**\n * @public\n */\n// @ts-expect-error using internal API.\nconst puppeteer = new PuppeteerNode({\n isPuppeteerCore: false,\n configuration: getConfiguration,\n});\n\nexport const {\n /**\n * @public\n */\n connect,\n /**\n * @public\n */\n defaultArgs,\n /**\n * @public\n */\n executablePath,\n /**\n * @public\n */\n launch,\n /**\n * @public\n */\n trimCache,\n /**\n * @public\n */\n setFollowSymlinks,\n} = puppeteer;\n\nexport default puppeteer;\n"],"mappings":"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","names":["path","fs","os","lilconfig","path","path","Browser","puppeteer","timeout","TimeoutError","path","executablePath","headless","fs","path","puppeteer","executablePath","path","Browser","fs","mkdtemp","os","path","puppeteer","executablePath","mkdtemp","Browser","path","fs","os","Browser","os","os","launch","join","puppeteer","connect","defaultArgs","executablePath","launch"]}
|