UNPKG

cnpmcore

Version:
271 lines 25.2 kB
"use strict"; 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; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PlaywrightBinary = void 0; const AbstractBinary_1 = require("./AbstractBinary"); const util_1 = __importDefault(require("util")); const path_1 = __importDefault(require("path")); const tegg_1 = require("@eggjs/tegg"); const Binary_1 = require("../../enum/Binary"); const PACKAGE_URL = 'https://registry.npmjs.com/playwright-core'; const DOWNLOAD_HOST = 'https://playwright.azureedge.net/'; // https://github.com/microsoft/playwright/blob/main/packages/playwright-core/src/server/registry/index.ts /* eslint-disable quote-props */ const DOWNLOAD_PATHS = { 'chromium': { '<unknown>': undefined, 'ubuntu18.04-x64': undefined, 'ubuntu20.04-x64': 'builds/chromium/%s/chromium-linux.zip', 'ubuntu22.04-x64': 'builds/chromium/%s/chromium-linux.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', 'debian11-x64': 'builds/chromium/%s/chromium-linux.zip', 'debian11-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip', 'debian12-x64': 'builds/chromium/%s/chromium-linux.zip', 'debian12-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip', 'mac10.13': 'builds/chromium/%s/chromium-mac.zip', 'mac10.14': 'builds/chromium/%s/chromium-mac.zip', 'mac10.15': 'builds/chromium/%s/chromium-mac.zip', 'mac11': 'builds/chromium/%s/chromium-mac.zip', 'mac11-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip', 'mac12': 'builds/chromium/%s/chromium-mac.zip', 'mac12-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip', 'mac13': 'builds/chromium/%s/chromium-mac.zip', 'mac13-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip', 'mac14': 'builds/chromium/%s/chromium-mac.zip', 'mac14-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip', 'win64': 'builds/chromium/%s/chromium-win64.zip', }, 'chromium-tip-of-tree': { '<unknown>': undefined, 'ubuntu18.04-x64': undefined, 'ubuntu20.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip', 'ubuntu22.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.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', 'debian11-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip', 'debian11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip', 'debian12-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip', 'debian12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip', 'mac10.13': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip', 'mac10.14': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip', 'mac10.15': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip', 'mac11': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip', 'mac11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip', 'mac12': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip', 'mac12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip', 'mac13': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip', 'mac13-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip', 'mac14': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip', 'mac14-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip', 'win64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-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', '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', '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-13.zip', 'mac10.14': 'builds/firefox/%s/firefox-mac-13.zip', 'mac10.15': 'builds/firefox/%s/firefox-mac-13.zip', 'mac11': 'builds/firefox/%s/firefox-mac-13.zip', 'mac11-arm64': 'builds/firefox/%s/firefox-mac-13-arm64.zip', 'mac12': 'builds/firefox/%s/firefox-mac-13.zip', 'mac12-arm64': 'builds/firefox/%s/firefox-mac-13-arm64.zip', 'mac13': 'builds/firefox/%s/firefox-mac-13.zip', 'mac13-arm64': 'builds/firefox/%s/firefox-mac-13-arm64.zip', 'mac14': 'builds/firefox/%s/firefox-mac-13.zip', 'mac14-arm64': 'builds/firefox/%s/firefox-mac-13-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', 'ubuntu18.04-arm64': undefined, 'ubuntu20.04-arm64': undefined, 'ubuntu22.04-arm64': 'builds/firefox-beta/%s/firefox-beta-ubuntu-22.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-13.zip', 'mac10.14': 'builds/firefox-beta/%s/firefox-beta-mac-13.zip', 'mac10.15': 'builds/firefox-beta/%s/firefox-beta-mac-13.zip', 'mac11': 'builds/firefox-beta/%s/firefox-beta-mac-13.zip', 'mac11-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-13-arm64.zip', 'mac12': 'builds/firefox-beta/%s/firefox-beta-mac-13.zip', 'mac12-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-13-arm64.zip', 'mac13': 'builds/firefox-beta/%s/firefox-beta-mac-13.zip', 'mac13-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-13-arm64.zip', 'mac14': 'builds/firefox-beta/%s/firefox-beta-mac-13.zip', 'mac14-arm64': 'builds/firefox-beta/%s/firefox-beta-mac-13-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', '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', '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', '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', 'ubuntu18.04-arm64': undefined, 'ubuntu20.04-arm64': 'builds/ffmpeg/%s/ffmpeg-linux-arm64.zip', 'ubuntu22.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', 'win64': 'builds/ffmpeg/%s/ffmpeg-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', 'ubuntu18.04-arm64': undefined, 'ubuntu20.04-arm64': 'builds/android/%s/android.zip', 'ubuntu22.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', 'win64': 'builds/android/%s/android.zip', }, }; let PlaywrightBinary = class PlaywrightBinary extends AbstractBinary_1.AbstractBinary { async initFetch() { this.dirItems = undefined; } async fetch(dir) { if (!this.dirItems) { const packageData = await this.requestJSON(PACKAGE_URL); const nowDateISO = new Date().toISOString(); this.dirItems = { '/': [{ name: 'builds/', isDir: true, url: '', size: '-', date: nowDateISO }], '/builds/': Object.keys(DOWNLOAD_PATHS).map(dist => ({ name: `${dist}/`, isDir: true, url: '', size: '-', date: nowDateISO })), ...Object.fromEntries(Object.keys(DOWNLOAD_PATHS).map(dist => [`/builds/${dist}/`, []])), }; // 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); 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); }) .catch(err => { /* c8 ignore next 2 */ this.logger.warn('[PlaywrightBinary.fetch:error] Playwright version %s browser data request failed: %s', version, err); }))); for (const browser of browsers) { const downloadPaths = DOWNLOAD_PATHS[browser.name]; if (!downloadPaths) continue; for (const [platform, remotePath] of Object.entries(downloadPaths)) { if (typeof remotePath !== 'string') continue; const revision = browser.revisionOverrides?.[platform] ?? browser.revision; const itemDate = browser.browserVersion || revision; const url = DOWNLOAD_HOST + util_1.default.format(remotePath, revision); const name = path_1.default.basename(remotePath); const dir = `/builds/${browser.name}/${revision}/`; if (!this.dirItems[dir]) { this.dirItems[`/builds/${browser.name}/`].push({ name: `${revision}/`, isDir: true, url: '', size: '-', date: revision, }); this.dirItems[dir] = []; } if (!this.dirItems[dir].find(item => item.name === name)) { this.dirItems[dir].push({ name, isDir: false, url, size: '-', date: itemDate }); } } } } return { items: this.dirItems[dir] ?? [], nextParams: null }; } }; exports.PlaywrightBinary = PlaywrightBinary; exports.PlaywrightBinary = PlaywrightBinary = __decorate([ (0, tegg_1.SingletonProto)(), (0, AbstractBinary_1.BinaryAdapter)(Binary_1.BinaryType.Playwright) ], PlaywrightBinary); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxheXdyaWdodEJpbmFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2FwcC9jb21tb24vYWRhcHRlci9iaW5hcnkvUGxheXdyaWdodEJpbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFDQSxxREFBMEY7QUFDMUYsZ0RBQXdCO0FBQ3hCLGdEQUF3QjtBQUN4QixzQ0FBNkM7QUFDN0MsOENBQStDO0FBRS9DLE1BQU0sV0FBVyxHQUFHLDRDQUE0QyxDQUFDO0FBQ2pFLE1BQU0sYUFBYSxHQUFHLG1DQUFtQyxDQUFDO0FBRTFELDBHQUEwRztBQUMxRyxnQ0FBZ0M7QUFDaEMsTUFBTSxjQUFjLEdBQUc7SUFDckIsVUFBVSxFQUFFO1FBQ1YsV0FBVyxFQUFFLFNBQVM7UUFDdEIsaUJBQWlCLEVBQUUsU0FBUztRQUM1QixpQkFBaUIsRUFBRSx1Q0FBdUM7UUFDMUQsaUJBQWlCLEVBQUUsdUNBQXVDO1FBQzFELG1CQUFtQixFQUFFLFNBQVM7UUFDOUIsbUJBQW1CLEVBQUUsNkNBQTZDO1FBQ2xFLG1CQUFtQixFQUFFLDZDQUE2QztRQUNsRSxjQUFjLEVBQUUsdUNBQXVDO1FBQ3ZELGdCQUFnQixFQUFFLDZDQUE2QztRQUMvRCxjQUFjLEVBQUUsdUNBQXVDO1FBQ3ZELGdCQUFnQixFQUFFLDZDQUE2QztRQUMvRCxVQUFVLEVBQUUscUNBQXFDO1FBQ2pELFVBQVUsRUFBRSxxQ0FBcUM7UUFDakQsVUFBVSxFQUFFLHFDQUFxQztRQUNqRCxPQUFPLEVBQUUscUNBQXFDO1FBQzlDLGFBQWEsRUFBRSwyQ0FBMkM7UUFDMUQsT0FBTyxFQUFFLHFDQUFxQztRQUM5QyxhQUFhLEVBQUUsMkNBQTJDO1FBQzFELE9BQU8sRUFBRSxxQ0FBcUM7UUFDOUMsYUFBYSxFQUFFLDJDQUEyQztRQUMxRCxPQUFPLEVBQUUscUNBQXFDO1FBQzlDLGFBQWEsRUFBRSwyQ0FBMkM7UUFDMUQsT0FBTyxFQUFFLHVDQUF1QztL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