pagespeed-quest
Version:
A framework for efficient web front-end speed improvement
64 lines • 5.31 kB
JavaScript
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==