@codechecks/lighthouse-keeper
Version:
Keep an eye on Google Lighthouse score changes
103 lines • 3.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const table = require("markdown-table");
function getReport({ reportComparison, baselineExists, reportLink, minScores, }) {
const failedMetrics = getFailedMetrics(reportComparison, minScores);
return {
status: failedMetrics.length > 0 ? "failure" : "success",
name: "Lighthouse Keeper",
shortDescription: getShortDescription(reportComparison, baselineExists, failedMetrics),
longDescription: getLongDescription(reportComparison, failedMetrics, minScores, reportLink),
};
}
exports.getReport = getReport;
function getFailedMetrics(comparison, minScore) {
const failedMetrics = [];
for (const metricsComparison of comparison.metricsComparison) {
const minValue = minScore[metricsComparison.key];
if (minValue === undefined) {
continue;
}
if (metricsComparison.value < minValue) {
failedMetrics.push(Object.assign({}, metricsComparison, { minScore: minValue }));
}
}
return failedMetrics;
}
function getShortDescription(artifactComparison, baselineExists, failedMetrics) {
if (failedMetrics.length > 0) {
return `${failedMetrics.map(m => m.name).join(", ")} scores dropped too low!`;
}
if (!baselineExists) {
return "New Lighthouse report generated!";
}
const decreased = artifactComparison.metricsComparison.filter(c => c.diff < 0).length;
const increased = artifactComparison.metricsComparison.filter(c => c.diff > 0).length;
if (decreased > 0) {
return `${decreased} metrics decreased, be careful!`;
}
if (increased > 0) {
return `${increased} metrics got better, good job!`;
}
return `No changes in metrics detected!`;
}
function getLongDescription(artifactComparison, failedMetrics, minScores, reportLink) {
function renderRow(metric) {
const failedMetric = failedMetrics.find(fm => fm.key === metric.key);
const minScore = minScores[metric.key];
return [
metric.name,
`${getIcon(metric.diff, !!failedMetric)} ${diffWithSign(metric.diff)}`,
metric.value.toString(),
minScore ? minScore.toString() : "-",
];
}
function renderFailedAudits(newFailedAudits) {
if (newFailedAudits.length === 0) {
return "";
}
return `
## New failed audits (${newFailedAudits.length}):
${artifactComparison.failedAudits
.map(a => `### ${a.title}\n${a.description}`)
.join("\n\n---\n\n")}`;
}
function renderReportLink(reportLink) {
return `## [Full report link 📝](${reportLink})`;
}
// prettier-ignore
const rows = [
['Name', 'Status', 'Score', 'Min Score'],
...artifactComparison.metricsComparison.map(a => renderRow(a))
];
const metricsTable = table(rows, {
align: ["l", "c", "r", "r"],
}) + "\n";
return [
metricsTable,
renderFailedAudits(artifactComparison.failedAudits),
renderReportLink(reportLink),
].join("\n\n");
}
function getIcon(diff, failed) {
if (failed) {
return "🔴";
}
if (diff > 0) {
return "✅";
}
if (diff < 0) {
return "⚠️";
}
return "";
}
function diffWithSign(value) {
if (value > 0) {
return `+${value}`;
}
if (value < 0) {
return value.toString();
}
return "-";
}
//# sourceMappingURL=reports.js.map