compare-lighthouse.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /**
  2. * Compares two files lighthouse outputs, listing changes between the numeric audits.
  3. *
  4. * Outputs in Markdown for easy posting in Github.
  5. */
  6. import { readFileSync } from 'fs-extra';
  7. const firstFilePath = process.argv[2];
  8. const secondFilePath = process.argv[3];
  9. console.log(`\`${firstFilePath}\` -> \`${secondFilePath}\`\n\n`);
  10. interface IOutput {
  11. audits: {
  12. [name: string]: {
  13. id: string;
  14. title: string;
  15. description: string;
  16. scoreDisplayMode: string;
  17. displayValue: string;
  18. numericValue: number;
  19. };
  20. };
  21. }
  22. const first: IOutput = JSON.parse(readFileSync(firstFilePath).toString());
  23. const second: IOutput = JSON.parse(readFileSync(secondFilePath).toString());
  24. for (const auditName in first.audits) {
  25. const firstAudit = first.audits[auditName];
  26. // only compare numeric audits
  27. if (firstAudit.scoreDisplayMode !== 'numeric') {
  28. continue;
  29. }
  30. const secondAudit = second.audits[auditName];
  31. const percentChange =
  32. ((secondAudit.numericValue - firstAudit.numericValue) /
  33. firstAudit.numericValue) *
  34. 100;
  35. if (isNaN(percentChange)) {
  36. continue;
  37. }
  38. console.log(
  39. `**${firstAudit.title}**\n* ${percentChange.toFixed(0)}% Δ\n* ${
  40. firstAudit.displayValue
  41. } -> ${secondAudit.displayValue}\n* ${firstAudit.description}\n`
  42. );
  43. }