beam-cli
Version:
A beautifully simple CLI for running Lighthouse audits on a statically generated (SSG) website
53 lines (52 loc) • 1.69 kB
JavaScript
import chalk from 'chalk';
import { printTable } from 'console-table-printer';
const tableColumnScoreNames = {
performance: 'Perf',
seo: 'SEO',
accessibility: 'Acc',
'best-practices': 'Best-P',
pwa: 'PWA',
};
const colourScore = (score) => {
/* eslint-disable unicorn/no-nested-ternary */
const chalkColour = score < 0.5 ? chalk.red : score < 0.9 ? chalk.yellow : chalk.green;
/* eslint-enable unicorn/no-nested-ternary */
const text = Math.round((score ?? 0) * 100)
.toString()
.padStart(3, ' ');
return chalkColour(text);
};
export const printRunnerSummary = (results) => {
console.log('');
const tableResults = [];
for (const slugName in results.data) {
if (!Object.prototype.hasOwnProperty.call(results.data, slugName))
continue;
const run = results.data[slugName];
if (!run)
continue;
const categories = [
'performance',
'seo',
'accessibility',
'best-practices',
'pwa',
];
/* eslint-disable @typescript-eslint/naming-convention */
const row = {
URL: run.url,
TYPE: run.mobile ? 'Mobile' : 'Desktop',
Size: run.sizeDisplay.split('•')[1] ?? '',
};
/* eslint-enable @typescript-eslint/naming-convention */
for (const cat of categories) {
const score = run.scores[cat];
if (score) {
const columnName = tableColumnScoreNames[cat];
row[columnName] = colourScore(score);
}
}
tableResults.push(row);
}
printTable(tableResults);
};