UNPKG

pagespeed-quest

Version:

A framework for efficient web front-end speed improvement

69 lines 6.42 kB
import Path from 'path'; import puppeteer from 'puppeteer'; /** * Captures a digest screenshot of the Lighthouse report. * This function captures two specific sections: * 1. The final screenshot header (lh-category-header__finalscreenshot) * 2. The metrics audit group (lh-audit-group--metrics) */ export async function captureLighthouseDigest(opts, dependency) { const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'], }); try { const page = await browser.newPage(); // Load the HTML file const fileUrl = `file://${Path.resolve(opts.htmlPath)}`; await page.goto(fileUrl, { waitUntil: 'networkidle0' }); // Check if the required elements exist const elementsExist = await page.evaluate(() => { const finalScreenshot = document.querySelector('.lh-category-header__finalscreenshot'); const metrics = document.querySelector('.lh-audit-group--metrics'); return finalScreenshot !== null && metrics !== null; }); if (!elementsExist) { throw new Error('Required elements not found in the Lighthouse report'); } // Get the bounding boxes of both elements const finalScreenshotElement = await page.$('.lh-category-header__finalscreenshot'); const metricsElement = await page.$('.lh-audit-group--metrics'); if (!finalScreenshotElement || !metricsElement) { throw new Error('Required elements not found in the Lighthouse report'); } const finalScreenshotBox = await finalScreenshotElement.boundingBox(); const metricsBox = await metricsElement.boundingBox(); if (!finalScreenshotBox || !metricsBox) { throw new Error('Could not get bounding box of required elements'); } // Calculate the bounding box that encompasses both elements const minX = Math.min(finalScreenshotBox.x, metricsBox.x); const minY = Math.min(finalScreenshotBox.y, metricsBox.y); const maxX = Math.max(finalScreenshotBox.x + finalScreenshotBox.width, metricsBox.x + metricsBox.width); const maxY = Math.max(finalScreenshotBox.y + finalScreenshotBox.height, metricsBox.y + metricsBox.height); const boundingBox = { x: minX, y: minY, width: maxX - minX, height: maxY - minY, }; // Ensure output directory exists const outputDir = Path.dirname(opts.outputPath); await dependency.mkdirp(outputDir); // Capture the screenshot await page.screenshot({ path: opts.outputPath, clip: { x: boundingBox.x, y: boundingBox.y, width: boundingBox.width, height: boundingBox.height, }, }); dependency.logger?.info(`Lighthouse digest screenshot saved to ${opts.outputPath}`); } finally { await browser.close(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRob3VzZS1kaWdlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGlnaHRob3VzZS1kaWdlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBRXZCLE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQTtBQVNqQzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLENBQzNDLElBQWtDLEVBQ2xDLFVBQTBEO0lBRTFELE1BQU0sT0FBTyxHQUFHLE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNyQyxRQUFRLEVBQUUsSUFBSTtRQUNkLElBQUksRUFBRSxDQUFDLGNBQWMsRUFBRSwwQkFBMEIsQ0FBQztLQUNuRCxDQUFDLENBQUE7SUFFRixJQUFJLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUVwQyxxQkFBcUI7UUFDckIsTUFBTSxPQUFPLEdBQUcsVUFBVSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFBO1FBQ3ZELE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQTtRQUV2RCx1Q0FBdUM7UUFDdkMsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM3QyxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLHNDQUFzQyxDQUFDLENBQUE7WUFDdEYsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1lBQ2xFLE9BQU8sZUFBZSxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFBO1FBQ3JELENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lB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