UNPKG

pagespeed-quest

Version:

A framework for efficient web front-end speed improvement

64 lines 5.31 kB
import Path from 'path'; import { captureLighthouseDigest } from './lighthouse-digest.js'; import { generateLighthouseSummary } from './lighthouse-summary.js'; export async function execLighthouse(opts, dependency) { const artifactsDir = opts.artifactsDir || './artifacts'; await dependency.mkdirp(artifactsDir); const deviceType = opts.deviceType || 'mobile'; const outputPath = Path.join(artifactsDir, 'lighthouse'); const args = [ opts.url, '--save-assets', '--output=html,json', `--output-path=${outputPath}`, '--only-categories=performance', `--form-factor=${deviceType}`, // Set screen emulation to match form factor `--screenEmulation.mobile=${deviceType === 'mobile' ? 'true' : 'false'}`, // Disable throttling as Rust proxy handles timing accurately '--throttling.rttMs=0', '--throttling.throughputKbps=0', '--throttling.downloadThroughputKbps=0', '--throttling.uploadThroughputKbps=0', '--throttling.cpuSlowdownMultiplier=1', ]; args.push(`--max-wait-for-load=${opts.timeout}`); const chromeFlags = ['--ignore-certificate-errors', `--proxy-server=http://localhost:${opts.proxyPort}`]; if (opts.headless) chromeFlags.push('--headless'); args.push(`--chrome-flags=${chromeFlags.join(' ')}`); if (opts.view) args.push('--view'); await dependency.executeLighthouse(args); // Capture score and metrics screenshot if requested if (opts.captureScoreAndMetrics !== false) { const htmlPath = `${outputPath}.report.html`; const digestPath = Path.join(artifactsDir, 'lighthouse.digest.png'); try { await captureLighthouseDigest({ htmlPath, outputPath: digestPath, }, dependency); } catch (error) { dependency.logger?.warn(`Failed to capture Lighthouse score and metrics: ${error}`); } } // Generate summary markdown if (opts.artifactsDir) { const jsonPath = `${outputPath}.report.json`; const summaryPath = Path.join(artifactsDir, 'summary.md'); try { await generateLighthouseSummary({ jsonPath, outputPath: summaryPath, inventoryDir: opts.inventoryDir, resources: opts.resources, }, dependency); } catch (error) { dependency.logger?.warn(`Failed to generate Lighthouse summary: ${error}`); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRob3VzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9saWdodGhvdXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUd2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNoRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQWdCbkUsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQ2xDLElBQXlCLEVBQ3pCLFVBQWdGO0lBRWhGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksYUFBYSxDQUFBO0lBQ3ZELE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUVyQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQTtJQUM5QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUN4RCxNQUFNLElBQUksR0FBYTtRQUNyQixJQUFJLENBQUMsR0FBRztRQUNSLGVBQWU7UUFDZixvQkFBb0I7UUFDcEIsaUJBQWlCLFVBQVUsRUFBRTtRQUM3QiwrQkFBK0I7UUFDL0IsaUJBQWlCLFVBQVUsRUFBRTtRQUM3Qiw0Q0FBNEM7UUFDNUMsNEJBQTRCLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO1FBQ3hFLDZEQUE2RDtRQUM3RCxzQkFBc0I7UUFDdEIsK0JBQStCO1FBQy9CLHVDQUF1QztRQUN2QyxxQ0FBcUM7UUFDckMsc0NBQXNDO0tBQ3ZDLENBQUE7SUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUVoRCxNQUFNLFdBQVcsR0FBYSxDQUFDLDZCQUE2QixFQUFFLG1DQUFtQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtJQUNsSCxJQUFJLElBQUksQ0FBQyxRQUFRO1FBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUVwRCxJQUFJLElBQUksQ0FBQyxJQUFJO1FBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUVsQyxNQUFNLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUV4QyxvREFBb0Q7SUFDcEQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxVQUFVLGNBQWMsQ0FBQTtRQUM1QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSx1QkFBdUIsQ0FBQyxDQUFBO1FBRW5FLElBQUksQ0FBQztZQUNILE1BQU0sdUJBQXVCLENBQzNCO2dCQUNFLFFBQVE7Z0JBQ1IsVUFBVSxFQUFFLFVBQVU7YUFDdkIsRUFDRCxVQUFVLENBQ1gsQ0FBQTtRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsbURBQW1ELEtBQUssRUFBRSxDQUFDLENBQUE7UUFDckYsQ0FBQztJQUNILENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsTUFBTSxRQUFRLEdBQUcsR0FBRyxVQUFVLGNBQWMsQ0FBQTtRQUM1QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUV6RCxJQUFJLENBQUM7WUFDSCxNQUFNLHlCQUF5QixDQUM3QjtnQkFDRSxRQUFRO2dCQUNSLFVBQVUsRUFBRSxXQUFXO2dCQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQy9CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzthQUMxQixFQUNELFVBQVUsQ0FDWCxDQUFBO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQywwQ0FBMEMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUM1RSxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMifQ==