UNPKG

cnpmcore

Version:

Private NPM Registry for Enterprise

548 lines 49.8 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import path from 'node:path'; import util from 'node:util'; import { SingletonProto } from 'egg'; import { BinaryType } from "../../enum/Binary.js"; import { AbstractBinary, BinaryAdapter } from "./AbstractBinary.js"; const PACKAGE_URL = 'https://registry.npmjs.com/playwright-core'; const DOWNLOAD_HOST = 'https://playwright.azureedge.net/'; // https://github.com/playwright-community/playwright-go/blob/56e30d60f8b42785982469eaca6ad969bc2e1946/run.go#L341-L374 const PLAYWRIGHT_DRIVER_ARCHS = ['win32_x64', 'mac-arm64', 'mac', 'linux-arm64', 'linux']; // https://github.com/microsoft/playwright/blob/main/packages/playwright-core/src/server/registry/index.ts // CFT entries use Chrome for Testing URLs: builds/cft/{browserVersion}/{suffix} // (introduced in playwright 1.58.1, see https://github.com/cnpm/cnpmcore/issues/1033) const cft = (suffix) => ({ cft: suffix }); /* eslint-disable quote-props */ const DOWNLOAD_PATHS = { chromium: { '<unknown>': undefined, 'ubuntu18.04-x64': undefined, 'ubuntu20.04-x64': cft('linux64/chrome-linux64.zip'), 'ubuntu22.04-x64': cft('linux64/chrome-linux64.zip'), 'ubuntu24.04-x64': cft('linux64/chrome-linux64.zip'), 'ubuntu18.04-arm64': undefined, 'ubuntu20.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip', 'ubuntu22.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip', 'ubuntu24.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip', 'debian11-x64': cft('linux64/chrome-linux64.zip'), 'debian11-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip', 'debian12-x64': cft('linux64/chrome-linux64.zip'), 'debian12-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip', 'debian13-x64': cft('linux64/chrome-linux64.zip'), 'debian13-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip', 'mac10.13': cft('mac-x64/chrome-mac-x64.zip'), 'mac10.14': cft('mac-x64/chrome-mac-x64.zip'), 'mac10.15': cft('mac-x64/chrome-mac-x64.zip'), mac11: cft('mac-x64/chrome-mac-x64.zip'), 'mac11-arm64': cft('mac-arm64/chrome-mac-arm64.zip'), mac12: cft('mac-x64/chrome-mac-x64.zip'), 'mac12-arm64': cft('mac-arm64/chrome-mac-arm64.zip'), mac13: cft('mac-x64/chrome-mac-x64.zip'), 'mac13-arm64': cft('mac-arm64/chrome-mac-arm64.zip'), mac14: cft('mac-x64/chrome-mac-x64.zip'), 'mac14-arm64': cft('mac-arm64/chrome-mac-arm64.zip'), mac15: cft('mac-x64/chrome-mac-x64.zip'), 'mac15-arm64': cft('mac-arm64/chrome-mac-arm64.zip'), win64: cft('win64/chrome-win64.zip'), }, 'chromium-headless-shell': { '<unknown>': undefined, 'ubuntu18.04-x64': undefined, 'ubuntu20.04-x64': cft('linux64/chrome-headless-shell-linux64.zip'), 'ubuntu22.04-x64': cft('linux64/chrome-headless-shell-linux64.zip'), 'ubuntu24.04-x64': cft('linux64/chrome-headless-shell-linux64.zip'), 'ubuntu18.04-arm64': undefined, 'ubuntu20.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip', 'ubuntu22.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip', 'ubuntu24.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip', 'debian11-x64': cft('linux64/chrome-headless-shell-linux64.zip'), 'debian11-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip', 'debian12-x64': cft('linux64/chrome-headless-shell-linux64.zip'), 'debian12-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip', 'debian13-x64': cft('linux64/chrome-headless-shell-linux64.zip'), 'debian13-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip', 'mac10.13': undefined, 'mac10.14': undefined, 'mac10.15': undefined, mac11: cft('mac-x64/chrome-headless-shell-mac-x64.zip'), 'mac11-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'), mac12: cft('mac-x64/chrome-headless-shell-mac-x64.zip'), 'mac12-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'), mac13: cft('mac-x64/chrome-headless-shell-mac-x64.zip'), 'mac13-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'), mac14: cft('mac-x64/chrome-headless-shell-mac-x64.zip'), 'mac14-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'), mac15: cft('mac-x64/chrome-headless-shell-mac-x64.zip'), 'mac15-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'), win64: cft('win64/chrome-headless-shell-win64.zip'), }, 'chromium-tip-of-tree': { '<unknown>': undefined, 'ubuntu18.04-x64': undefined, 'ubuntu20.04-x64': cft('linux64/chrome-linux64.zip'), 'ubuntu22.04-x64': cft('linux64/chrome-linux64.zip'), 'ubuntu24.04-x64': cft('linux64/chrome-linux64.zip'), 'ubuntu18.04-arm64': undefined, 'ubuntu20.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip', 'ubuntu22.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip', 'ubuntu24.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip', 'debian11-x64': cft('linux64/chrome-linux64.zip'), 'debian11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip', 'debian12-x64': cft('linux64/chrome-linux64.zip'), 'debian12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip', 'debian13-x64': cft('linux64/chrome-linux64.zip'), 'debian13-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip', 'mac10.13': cft('mac-x64/chrome-mac-x64.zip'), 'mac10.14': cft('mac-x64/chrome-mac-x64.zip'), 'mac10.15': cft('mac-x64/chrome-mac-x64.zip'), mac11: cft('mac-x64/chrome-mac-x64.zip'), 'mac11-arm64': cft('mac-arm64/chrome-mac-arm64.zip'), mac12: cft('mac-x64/chrome-mac-x64.zip'), 'mac12-arm64': cft('mac-arm64/chrome-mac-arm64.zip'), mac13: cft('mac-x64/chrome-mac-x64.zip'), 'mac13-arm64': cft('mac-arm64/chrome-mac-arm64.zip'), mac14: cft('mac-x64/chrome-mac-x64.zip'), 'mac14-arm64': cft('mac-arm64/chrome-mac-arm64.zip'), mac15: cft('mac-x64/chrome-mac-x64.zip'), 'mac15-arm64': cft('mac-arm64/chrome-mac-arm64.zip'), win64: cft('win64/chrome-win64.zip'), }, 'chromium-tip-of-tree-headless-shell': { '<unknown>': undefined, 'ubuntu18.04-x64': undefined, 'ubuntu20.04-x64': cft('linux64/chrome-headless-shell-linux64.zip'), 'ubuntu22.04-x64': cft('linux64/chrome-headless-shell-linux64.zip'), 'ubuntu24.04-x64': cft('linux64/chrome-headless-shell-linux64.zip'), 'ubuntu18.04-arm64': undefined, 'ubuntu20.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip', 'ubuntu22.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip', 'ubuntu24.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip', 'debian11-x64': cft('linux64/chrome-headless-shell-linux64.zip'), 'debian11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip', 'debian12-x64': cft('linux64/chrome-headless-shell-linux64.zip'), 'debian12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip', 'debian13-x64': cft('linux64/chrome-headless-shell-linux64.zip'), 'debian13-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip', 'mac10.13': undefined, 'mac10.14': undefined, 'mac10.15': undefined, mac11: cft('mac-x64/chrome-headless-shell-mac-x64.zip'), 'mac11-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'), mac12: cft('mac-x64/chrome-headless-shell-mac-x64.zip'), 'mac12-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'), mac13: cft('mac-x64/chrome-headless-shell-mac-x64.zip'), 'mac13-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'), mac14: cft('mac-x64/chrome-headless-shell-mac-x64.zip'), 'mac14-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'), mac15: cft('mac-x64/chrome-headless-shell-mac-x64.zip'), 'mac15-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'), win64: cft('win64/chrome-headless-shell-win64.zip'), }, firefox: { '<unknown>': undefined, 'ubuntu18.04-x64': undefined, 'ubuntu20.04-x64': 'builds/firefox/%s/firefox-ubuntu-20.04.zip', 'ubuntu22.04-x64': 'builds/firefox/%s/firefox-ubuntu-22.04.zip', 'ubuntu24.04-x64': 'builds/firefox/%s/firefox-ubuntu-24.04.zip', 'ubuntu18.04-arm64': undefined, 'ubuntu20.04-arm64': 'builds/firefox/%s/firefox-ubuntu-20.04-arm64.zip', 'ubuntu22.04-arm64': 'builds/firefox/%s/firefox-ubuntu-22.04-arm64.zip', 'ubuntu24.04-arm64': 'builds/firefox/%s/firefox-ubuntu-24.04-arm64.zip', 'debian11-x64': 'builds/firefox/%s/firefox-debian-11.zip', 'debian11-arm64': 'builds/firefox/%s/firefox-debian-11-arm64.zip', 'debian12-x64': 'builds/firefox/%s/firefox-debian-12.zip', 'debian12-arm64': 'builds/firefox/%s/firefox-debian-12-arm64.zip', 'mac10.13': 'builds/firefox/%s/firefox-mac.zip', 'mac10.14': 'builds/firefox/%s/firefox-mac.zip', 'mac10.15': 'builds/firefox/%s/firefox-mac.zip', mac11: 'builds/firefox/%s/firefox-mac.zip', 'mac11-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip', mac12: 'builds/firefox/%s/firefox-mac.zip', 'mac12-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip', mac13: 'builds/firefox/%s/firefox-mac.zip', 'mac13-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip', mac14: 'builds/firefox/%s/firefox-mac.zip', 'mac14-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip', mac15: 'builds/firefox/%s/firefox-mac.zip', 'mac15-arm64': 'builds/firefox/%s/firefox-mac-arm64.zip', win64: 'builds/firefox/%s/firefox-win64.zip', }, 'firefox-beta': { '<unknown>': undefined, 'ubuntu18.04-x64': undefined, 'ubuntu20.04-x64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-20.04.zip', 'ubuntu22.04-x64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-22.04.zip', 'ubuntu24.04-x64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-24.04.zip', 'ubuntu18.04-arm64': undefined, 'ubuntu20.04-arm64': undefined, 'ubuntu22.04-arm64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-22.04-arm64.zip', 'ubuntu24.04-arm64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-24.04-arm64.zip', 'debian11-x64': 'builds/firefox-beta/%s/firefox-beta-debian-11.zip', 'debian11-arm64': 'builds/firefox-beta/%s/firefox-beta-debian-11-arm64.zip', 'debian12-x64': 'builds/firefox-beta/%s/firefox-beta-debian-12.zip', 'debian12-arm64': 'builds/firefox-beta/%s/firefox-beta-debian-12-arm64.zip', 'mac10.13': 'builds/firefox-beta/%s/firefox-beta-mac.zip', 'mac10.14': 'builds/firefox-beta/%s/firefox-beta-mac.zip', 'mac10.15': 'builds/firefox-beta/%s/firefox-beta-mac.zip', mac11: 'builds/firefox-beta/%s/firefox-beta-mac.zip', 'mac11-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip', mac12: 'builds/firefox-beta/%s/firefox-beta-mac.zip', 'mac12-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip', mac13: 'builds/firefox-beta/%s/firefox-beta-mac.zip', 'mac13-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip', mac14: 'builds/firefox-beta/%s/firefox-beta-mac.zip', 'mac14-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip', mac15: 'builds/firefox-beta/%s/firefox-beta-mac.zip', 'mac15-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-arm64.zip', win64: 'builds/firefox-beta/%s/firefox-beta-win64.zip', }, webkit: { '<unknown>': undefined, 'ubuntu18.04-x64': undefined, 'ubuntu20.04-x64': 'builds/webkit/%s/webkit-ubuntu-20.04.zip', 'ubuntu22.04-x64': 'builds/webkit/%s/webkit-ubuntu-22.04.zip', 'ubuntu24.04-x64': 'builds/webkit/%s/webkit-ubuntu-24.04.zip', 'ubuntu18.04-arm64': undefined, 'ubuntu20.04-arm64': 'builds/webkit/%s/webkit-ubuntu-20.04-arm64.zip', 'ubuntu22.04-arm64': 'builds/webkit/%s/webkit-ubuntu-22.04-arm64.zip', 'ubuntu24.04-arm64': 'builds/webkit/%s/webkit-ubuntu-24.04-arm64.zip', 'debian11-x64': 'builds/webkit/%s/webkit-debian-11.zip', 'debian11-arm64': 'builds/webkit/%s/webkit-debian-11-arm64.zip', 'debian12-x64': 'builds/webkit/%s/webkit-debian-12.zip', 'debian12-arm64': 'builds/webkit/%s/webkit-debian-12-arm64.zip', 'mac10.13': undefined, 'mac10.14': 'builds/deprecated-webkit-mac-10.14/%s/deprecated-webkit-mac-10.14.zip', 'mac10.15': 'builds/deprecated-webkit-mac-10.15/%s/deprecated-webkit-mac-10.15.zip', mac11: 'builds/webkit/%s/webkit-mac-11.zip', 'mac11-arm64': 'builds/webkit/%s/webkit-mac-11-arm64.zip', mac12: 'builds/webkit/%s/webkit-mac-12.zip', 'mac12-arm64': 'builds/webkit/%s/webkit-mac-12-arm64.zip', mac13: 'builds/webkit/%s/webkit-mac-13.zip', 'mac13-arm64': 'builds/webkit/%s/webkit-mac-13-arm64.zip', mac14: 'builds/webkit/%s/webkit-mac-14.zip', 'mac14-arm64': 'builds/webkit/%s/webkit-mac-14-arm64.zip', mac15: 'builds/webkit/%s/webkit-mac-15.zip', 'mac15-arm64': 'builds/webkit/%s/webkit-mac-15-arm64.zip', win64: 'builds/webkit/%s/webkit-win64.zip', }, ffmpeg: { '<unknown>': undefined, 'ubuntu18.04-x64': undefined, 'ubuntu20.04-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip', 'ubuntu22.04-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip', 'ubuntu24.04-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip', 'ubuntu18.04-arm64': undefined, 'ubuntu20.04-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip', 'ubuntu22.04-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip', 'ubuntu24.04-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip', 'debian11-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip', 'debian11-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip', 'debian12-x64': 'builds/ffmpeg/%s/ffmpeg-linux.zip', 'debian12-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip', 'mac10.13': 'builds/ffmpeg/%s/ffmpeg-mac.zip', 'mac10.14': 'builds/ffmpeg/%s/ffmpeg-mac.zip', 'mac10.15': 'builds/ffmpeg/%s/ffmpeg-mac.zip', mac11: 'builds/ffmpeg/%s/ffmpeg-mac.zip', 'mac11-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip', mac12: 'builds/ffmpeg/%s/ffmpeg-mac.zip', 'mac12-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip', mac13: 'builds/ffmpeg/%s/ffmpeg-mac.zip', 'mac13-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip', mac14: 'builds/ffmpeg/%s/ffmpeg-mac.zip', 'mac14-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip', mac15: 'builds/ffmpeg/%s/ffmpeg-mac.zip', 'mac15-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip', win64: 'builds/ffmpeg/%s/ffmpeg-win64.zip', }, winldd: { '<unknown>': undefined, 'ubuntu18.04-x64': undefined, 'ubuntu20.04-x64': undefined, 'ubuntu22.04-x64': undefined, 'ubuntu24.04-x64': undefined, 'ubuntu18.04-arm64': undefined, 'ubuntu20.04-arm64': undefined, 'ubuntu22.04-arm64': undefined, 'ubuntu24.04-arm64': undefined, 'debian11-x64': undefined, 'debian11-arm64': undefined, 'debian12-x64': undefined, 'debian12-arm64': undefined, 'mac10.13': undefined, 'mac10.14': undefined, 'mac10.15': undefined, mac11: undefined, 'mac11-arm64': undefined, mac12: undefined, 'mac12-arm64': undefined, mac13: undefined, 'mac13-arm64': undefined, mac14: undefined, 'mac14-arm64': undefined, mac15: undefined, 'mac15-arm64': undefined, win64: 'builds/winldd/%s/winldd-win64.zip', }, android: { '<unknown>': 'builds/android/%s/android.zip', 'ubuntu18.04-x64': undefined, 'ubuntu20.04-x64': 'builds/android/%s/android.zip', 'ubuntu22.04-x64': 'builds/android/%s/android.zip', 'ubuntu24.04-x64': 'builds/android/%s/android.zip', 'ubuntu18.04-arm64': undefined, 'ubuntu20.04-arm64': 'builds/android/%s/android.zip', 'ubuntu22.04-arm64': 'builds/android/%s/android.zip', 'ubuntu24.04-arm64': 'builds/android/%s/android.zip', 'debian11-x64': 'builds/android/%s/android.zip', 'debian11-arm64': 'builds/android/%s/android.zip', 'debian12-x64': 'builds/android/%s/android.zip', 'debian12-arm64': 'builds/android/%s/android.zip', 'mac10.13': 'builds/android/%s/android.zip', 'mac10.14': 'builds/android/%s/android.zip', 'mac10.15': 'builds/android/%s/android.zip', mac11: 'builds/android/%s/android.zip', 'mac11-arm64': 'builds/android/%s/android.zip', mac12: 'builds/android/%s/android.zip', 'mac12-arm64': 'builds/android/%s/android.zip', mac13: 'builds/android/%s/android.zip', 'mac13-arm64': 'builds/android/%s/android.zip', mac14: 'builds/android/%s/android.zip', 'mac14-arm64': 'builds/android/%s/android.zip', mac15: 'builds/android/%s/android.zip', 'mac15-arm64': 'builds/android/%s/android.zip', win64: 'builds/android/%s/android.zip', }, }; let PlaywrightBinary = class PlaywrightBinary extends AbstractBinary { async initFetch() { this.dirItems = undefined; } async fetch(dir) { if (!this.dirItems) { const packageData = await this.requestJSON(PACKAGE_URL); const nowDateISO = new Date().toISOString(); const buildDirs = []; for (const browserName of Object.keys(DOWNLOAD_PATHS)) { if (browserName === 'chromium-headless-shell' || browserName === 'chromium-tip-of-tree-headless-shell') { continue; } buildDirs.push({ name: `${browserName}/`, isDir: true, url: '', size: '-', date: nowDateISO, }); } buildDirs.push({ name: 'driver/', isDir: true, url: '', size: '-', date: nowDateISO, }); // builds/cft/ holds Chrome for Testing downloads // (Playwright 1.58.1+ moved chromium downloads to builds/cft/{browserVersion}/{platform}/) buildDirs.push({ name: 'cft/', isDir: true, url: '', size: '-', date: nowDateISO, }); this.dirItems = { '/': [ { name: 'builds/', isDir: true, url: '', size: '-', date: nowDateISO, }, ], '/builds/': buildDirs, '/builds/cft/': [], }; for (const browserName of Object.keys(DOWNLOAD_PATHS)) { if (browserName === 'chromium-headless-shell' || browserName === 'chromium-tip-of-tree-headless-shell') { continue; } this.dirItems[`/builds/${browserName}/`] = []; } // Only download beta and release versions of packages to reduce amount of request const packageVersions = Object.keys(packageData.versions) .filter((version) => version.match(/^(?:\d+\.\d+\.\d+)(?:-beta-\d+)?$/)) // select recently update 20 items .slice(-20); // Add driver to dirItems this.dirItems['/builds/driver/'] = []; const hasBetaVersions = packageVersions.some((version) => version.includes('-beta-')); if (hasBetaVersions) { this.dirItems['/builds/driver/'].push({ name: 'next/', isDir: true, url: '', size: '-', date: 'next', }); this.dirItems['/builds/driver/next/'] = []; } for (const version of packageVersions) { for (const arch of PLAYWRIGHT_DRIVER_ARCHS) { const isBetaVersion = version.includes('-beta-'); const driverFileName = `playwright-${version}-${arch}.zip`; const driverURL = isBetaVersion ? DOWNLOAD_HOST + `builds/driver/next/${driverFileName}` : DOWNLOAD_HOST + `builds/driver/${driverFileName}`; const driverItem = { name: driverFileName, isDir: false, url: driverURL, size: '-', date: version, }; const targetDir = isBetaVersion ? '/builds/driver/next/' : '/builds/driver/'; this.dirItems[targetDir].push(driverItem); } } const browsers = []; await Promise.all(packageVersions.map((version) => this.requestJSON(`https://unpkg.com/playwright-core@${version}/browsers.json`) .then((data) => { // browsers: [ // { // "name": "chromium", // "revision": "1005", // "installByDefault": true, // "browserVersion": "102.0.5005.40", // "revisionOverrides": {} // }, // ] browsers.push(...data.browsers); return data; }) .catch((err) => { /* c8 ignore next 2 */ this.logger.warn('[PlaywrightBinary.fetch:error] Playwright version %s browser data request failed: %s', version, err); }))); // if chromium-headless-shell not exists on browsers, copy chromium to chromium-headless-shell if (!browsers.some((browser) => browser.name === 'chromium-headless-shell')) { const chromium = browsers.find((browser) => browser.name === 'chromium'); // { // "name": "chromium", // "revision": "1155", // "installByDefault": true, // "browserVersion": "133.0.6943.16" // } if (chromium) { browsers.push({ ...chromium, name: 'chromium-headless-shell', }); } } // if chromium-tip-of-tree-headless-shell not exists on browsers, copy chromium-tip-of-tree to chromium-tip-of-tree-headless-shell if (!browsers.some((browser) => browser.name === 'chromium-tip-of-tree-headless-shell')) { const chromiumTipOfTree = browsers.find((browser) => browser.name === 'chromium-tip-of-tree'); if (chromiumTipOfTree) { browsers.push({ ...chromiumTipOfTree, name: 'chromium-tip-of-tree-headless-shell', }); } } for (const browser of browsers) { const downloadPaths = DOWNLOAD_PATHS[browser.name]; if (!downloadPaths) continue; let browserDirname = browser.name; if (browser.name === 'chromium-headless-shell') { // chromium-headless-shell should be under chromium // https://playwright.azureedge.net/builds/chromium/1155/chromium-headless-shell-mac-arm64.zip browserDirname = 'chromium'; } else if (browser.name === 'chromium-tip-of-tree-headless-shell') { // chromium-tip-of-tree-headless-shell should be under chromium-tip-of-tree // https://playwright.azureedge.net/builds/chromium-tip-of-tree/1293/chromium-tip-of-tree-headless-shell-mac-arm64.zip browserDirname = 'chromium-tip-of-tree'; } for (const [platform, remotePath] of Object.entries(downloadPaths)) { if (!remotePath) continue; const revision = browser.revisionOverrides?.[platform] ?? browser.revision; const itemDate = browser.browserVersion || revision; let url; let name; let dir; if (typeof remotePath === 'string') { url = DOWNLOAD_HOST + util.format(remotePath, revision); name = path.basename(remotePath); dir = `/builds/${browserDirname}/${revision}/`; if (!this.dirItems[dir]) { this.dirItems[`/builds/${browserDirname}/`].push({ name: `${revision}/`, isDir: true, url: '', size: '-', date: revision, }); this.dirItems[dir] = []; } } else { if (!browser.browserVersion) continue; const cftSuffix = remotePath.cft; url = `${DOWNLOAD_HOST}builds/cft/${browser.browserVersion}/${cftSuffix}`; name = path.basename(cftSuffix); const platformDir = path.dirname(cftSuffix); const versionDir = `/builds/cft/${browser.browserVersion}/`; dir = `${versionDir}${platformDir}/`; if (!this.dirItems[versionDir]) { this.dirItems['/builds/cft/'].push({ name: `${browser.browserVersion}/`, isDir: true, url: '', size: '-', date: browser.browserVersion, }); this.dirItems[versionDir] = []; } if (!this.dirItems[versionDir].some((item) => item.name === `${platformDir}/`)) { this.dirItems[versionDir].push({ name: `${platformDir}/`, isDir: true, url: '', size: '-', date: browser.browserVersion, }); } if (!this.dirItems[dir]) { this.dirItems[dir] = []; } } if (!this.dirItems[dir].some((item) => item.name === name)) { this.dirItems[dir].push({ name, isDir: false, url, size: '-', date: itemDate, }); } } } } return { items: this.dirItems[dir] ?? [], nextParams: null }; } }; PlaywrightBinary = __decorate([ SingletonProto(), BinaryAdapter(BinaryType.Playwright) ], PlaywrightBinary); export { PlaywrightBinary }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxheXdyaWdodEJpbmFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2FwcC9jb21tb24vYWRhcHRlci9iaW5hcnkvUGxheXdyaWdodEJpbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBRTdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFxQyxNQUFNLHFCQUFxQixDQUFDO0FBRXZHLE1BQU0sV0FBVyxHQUFHLDRDQUE0QyxDQUFDO0FBQ2pFLE1BQU0sYUFBYSxHQUFHLG1DQUFtQyxDQUFDO0FBQzFELHVIQUF1SDtBQUN2SCxNQUFNLHVCQUF1QixHQUFHLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRTFGLDBHQUEwRztBQUMxRyxnRkFBZ0Y7QUFDaEYsc0ZBQXNGO0FBQ3RGLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFVLENBQUM7QUFDM0QsZ0NBQWdDO0FBQ2hDLE1BQU0sY0FBYyxHQUFHO0lBQ3JCLFFBQVEsRUFBRTtRQUNSLFdBQVcsRUFBRSxTQUFTO1FBQ3RCLGlCQUFpQixFQUFFLFNBQVM7UUFDNUIsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLDRCQUE0QixDQUFDO1FBQ3BELGlCQUFpQixFQUFFLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQztRQUNwRCxpQkFBaUIsRUFBRSxHQUFHLENBQUMsNEJBQTRCLENBQUM7UUFDcEQsbUJBQW1CLEVBQUUsU0FBUztRQUM5QixtQkFBbUIsRUFB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