lighthouse 11.7.0 → 12.0.0-dev.20240422

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/CONTRIBUTING.md +2 -2
  2. package/cli/bin.js +0 -7
  3. package/cli/cli-flags.d.ts +1 -5
  4. package/cli/cli-flags.js +4 -8
  5. package/cli/test/smokehouse/__snapshots__/report-assert-test.js.snap +14 -14
  6. package/cli/test/smokehouse/config/exclusions.js +3 -0
  7. package/cli/test/smokehouse/core-tests.js +6 -20
  8. package/cli/test/smokehouse/frontends/smokehouse-bin.js +2 -2
  9. package/core/audits/accessibility/accesskeys.js +1 -1
  10. package/core/audits/accessibility/aria-allowed-attr.js +1 -1
  11. package/core/audits/accessibility/aria-allowed-role.js +1 -1
  12. package/core/audits/accessibility/aria-command-name.js +1 -1
  13. package/core/audits/accessibility/aria-conditional-attr.d.ts +10 -0
  14. package/core/audits/accessibility/aria-conditional-attr.js +43 -0
  15. package/core/audits/accessibility/{duplicate-id-active.d.ts → aria-deprecated-role.d.ts} +3 -3
  16. package/core/audits/accessibility/aria-deprecated-role.js +43 -0
  17. package/core/audits/accessibility/aria-dialog-name.js +1 -1
  18. package/core/audits/accessibility/aria-hidden-body.js +1 -1
  19. package/core/audits/accessibility/aria-hidden-focus.js +1 -1
  20. package/core/audits/accessibility/aria-input-field-name.js +1 -1
  21. package/core/audits/accessibility/aria-meter-name.js +1 -1
  22. package/core/audits/accessibility/aria-progressbar-name.js +1 -1
  23. package/core/audits/accessibility/aria-prohibited-attr.d.ts +10 -0
  24. package/core/audits/accessibility/aria-prohibited-attr.js +44 -0
  25. package/core/audits/accessibility/aria-required-attr.js +1 -1
  26. package/core/audits/accessibility/aria-required-children.js +1 -1
  27. package/core/audits/accessibility/aria-required-parent.js +1 -1
  28. package/core/audits/accessibility/aria-roles.js +1 -1
  29. package/core/audits/accessibility/aria-text.js +1 -1
  30. package/core/audits/accessibility/aria-toggle-field-name.js +1 -1
  31. package/core/audits/accessibility/aria-tooltip-name.js +1 -1
  32. package/core/audits/accessibility/aria-treeitem-name.js +1 -1
  33. package/core/audits/accessibility/aria-valid-attr-value.js +1 -1
  34. package/core/audits/accessibility/aria-valid-attr.js +1 -1
  35. package/core/audits/accessibility/button-name.js +1 -1
  36. package/core/audits/accessibility/bypass.js +1 -1
  37. package/core/audits/accessibility/color-contrast.js +1 -1
  38. package/core/audits/accessibility/definition-list.js +1 -1
  39. package/core/audits/accessibility/dlitem.js +1 -1
  40. package/core/audits/accessibility/document-title.js +1 -1
  41. package/core/audits/accessibility/duplicate-id-aria.js +1 -1
  42. package/core/audits/accessibility/empty-heading.js +1 -1
  43. package/core/audits/accessibility/form-field-multiple-labels.js +1 -1
  44. package/core/audits/accessibility/frame-title.js +1 -1
  45. package/core/audits/accessibility/heading-order.js +1 -1
  46. package/core/audits/accessibility/html-has-lang.js +1 -1
  47. package/core/audits/accessibility/html-lang-valid.js +1 -1
  48. package/core/audits/accessibility/html-xml-lang-mismatch.js +1 -1
  49. package/core/audits/accessibility/identical-links-same-purpose.js +1 -1
  50. package/core/audits/accessibility/image-alt.js +1 -1
  51. package/core/audits/accessibility/image-redundant-alt.js +1 -1
  52. package/core/audits/accessibility/input-button-name.js +1 -1
  53. package/core/audits/accessibility/input-image-alt.js +1 -1
  54. package/core/audits/accessibility/label-content-name-mismatch.js +1 -1
  55. package/core/audits/accessibility/label.js +1 -1
  56. package/core/audits/accessibility/landmark-one-main.js +1 -1
  57. package/core/audits/accessibility/link-in-text-block.js +1 -1
  58. package/core/audits/accessibility/link-name.js +1 -1
  59. package/core/audits/accessibility/list.js +1 -1
  60. package/core/audits/accessibility/listitem.js +1 -1
  61. package/core/audits/accessibility/meta-refresh.js +1 -1
  62. package/core/audits/accessibility/meta-viewport.js +1 -1
  63. package/core/audits/accessibility/object-alt.js +1 -1
  64. package/core/audits/accessibility/select-name.js +1 -1
  65. package/core/audits/accessibility/skip-link.js +1 -1
  66. package/core/audits/accessibility/tabindex.js +1 -1
  67. package/core/audits/accessibility/table-duplicate-name.js +1 -1
  68. package/core/audits/accessibility/table-fake-caption.js +1 -1
  69. package/core/audits/accessibility/target-size.js +1 -2
  70. package/core/audits/accessibility/td-has-header.js +1 -1
  71. package/core/audits/accessibility/td-headers-attr.js +1 -1
  72. package/core/audits/accessibility/th-has-data-cells.js +1 -1
  73. package/core/audits/accessibility/valid-lang.js +1 -1
  74. package/core/audits/accessibility/video-caption.js +1 -1
  75. package/core/audits/byte-efficiency/byte-efficiency-audit.d.ts +0 -16
  76. package/core/audits/byte-efficiency/byte-efficiency-audit.js +1 -38
  77. package/core/audits/byte-efficiency/offscreen-images.d.ts +0 -11
  78. package/core/audits/byte-efficiency/offscreen-images.js +0 -15
  79. package/core/audits/byte-efficiency/render-blocking-resources.js +27 -26
  80. package/core/audits/byte-efficiency/unminified-css.js +2 -2
  81. package/core/audits/byte-efficiency/unused-css-rules.js +3 -1
  82. package/core/audits/dobetterweb/uses-http2.d.ts +0 -13
  83. package/core/audits/dobetterweb/uses-http2.js +4 -38
  84. package/core/audits/font-display.js +2 -2
  85. package/core/audits/layout-shifts.js +2 -2
  86. package/core/audits/preload-fonts.d.ts +1 -5
  87. package/core/audits/preload-fonts.js +1 -10
  88. package/core/audits/prioritize-lcp-image.js +2 -2
  89. package/core/audits/redirects-http.d.ts +19 -0
  90. package/core/audits/redirects-http.js +75 -0
  91. package/core/audits/resource-summary.d.ts +2 -0
  92. package/core/audits/resource-summary.js +5 -4
  93. package/core/audits/seo/is-crawlable.d.ts +2 -1
  94. package/core/audits/seo/link-text.js +12 -0
  95. package/core/audits/uses-rel-preload.d.ts +1 -5
  96. package/core/audits/uses-rel-preload.js +5 -15
  97. package/core/audits/work-during-interaction.d.ts +2 -2
  98. package/core/audits/work-during-interaction.js +2 -2
  99. package/core/computed/js-bundles.d.ts +1 -1
  100. package/core/computed/metrics/cumulative-layout-shift.js +2 -2
  101. package/core/computed/metrics/lantern-first-contentful-paint.d.ts +13 -82
  102. package/core/computed/metrics/lantern-first-contentful-paint.js +16 -178
  103. package/core/computed/metrics/lantern-first-meaningful-paint.d.ts +13 -12
  104. package/core/computed/metrics/lantern-first-meaningful-paint.js +11 -49
  105. package/core/computed/metrics/lantern-interactive.d.ts +13 -21
  106. package/core/computed/metrics/lantern-interactive.js +12 -84
  107. package/core/computed/metrics/lantern-largest-contentful-paint.d.ts +13 -25
  108. package/core/computed/metrics/lantern-largest-contentful-paint.js +13 -80
  109. package/core/computed/metrics/lantern-max-potential-fid.d.ts +13 -24
  110. package/core/computed/metrics/lantern-max-potential-fid.js +12 -64
  111. package/core/computed/metrics/lantern-metric.d.ts +14 -18
  112. package/core/computed/metrics/lantern-metric.js +34 -30
  113. package/core/computed/metrics/lantern-speed-index.d.ts +13 -32
  114. package/core/computed/metrics/lantern-speed-index.js +13 -116
  115. package/core/computed/metrics/lantern-total-blocking-time.d.ts +13 -25
  116. package/core/computed/metrics/lantern-total-blocking-time.js +10 -94
  117. package/core/computed/metrics/metric.js +1 -3
  118. package/core/computed/module-duplication.d.ts +1 -1
  119. package/core/computed/navigation-insights.d.ts +36 -0
  120. package/core/computed/navigation-insights.js +35 -0
  121. package/core/computed/page-dependency-graph.js +3 -7
  122. package/core/computed/resource-summary.d.ts +10 -12
  123. package/core/computed/resource-summary.js +12 -19
  124. package/core/computed/trace-engine-result.d.ts +16 -3
  125. package/core/computed/trace-engine-result.js +19 -14
  126. package/core/computed/unused-css.d.ts +3 -1
  127. package/core/computed/unused-css.js +6 -5
  128. package/core/config/config-helpers.js +0 -4
  129. package/core/config/constants.js +0 -1
  130. package/core/config/default-config.js +63 -142
  131. package/core/config/experimental-config.js +11 -0
  132. package/core/config/filters.js +0 -1
  133. package/core/gather/driver/navigation.js +4 -1
  134. package/core/gather/driver/prepare.js +1 -1
  135. package/core/gather/driver/target-manager.js +4 -3
  136. package/core/gather/driver/wait-for-condition.js +2 -3
  137. package/core/gather/driver.d.ts +12 -0
  138. package/core/gather/driver.js +27 -0
  139. package/core/gather/gatherers/accessibility.js +4 -6
  140. package/core/gather/gatherers/css-usage.d.ts +0 -21
  141. package/core/gather/gatherers/css-usage.js +9 -119
  142. package/core/gather/gatherers/root-causes.d.ts +2 -2
  143. package/core/gather/gatherers/root-causes.js +6 -5
  144. package/core/gather/gatherers/stylesheets.d.ts +26 -0
  145. package/core/gather/gatherers/stylesheets.js +138 -0
  146. package/core/gather/gatherers/trace-elements.d.ts +4 -13
  147. package/core/gather/gatherers/trace-elements.js +42 -31
  148. package/core/gather/navigation-runner.js +3 -1
  149. package/core/gather/session.d.ts +8 -0
  150. package/core/gather/session.js +14 -1
  151. package/core/lib/emulation.js +2 -2
  152. package/core/lib/i18n/i18n.d.ts +0 -1
  153. package/core/lib/i18n/i18n.js +0 -2
  154. package/core/lib/lantern/cpu-node.d.ts +7 -1
  155. package/core/lib/lantern/cpu-node.js +12 -2
  156. package/core/lib/lantern/lantern-error.d.ts +8 -0
  157. package/core/lib/lantern/lantern-error.js +9 -0
  158. package/core/lib/lantern/metric.js +2 -6
  159. package/core/lib/lantern/metrics/first-contentful-paint.d.ts +79 -0
  160. package/core/lib/lantern/metrics/first-contentful-paint.js +200 -0
  161. package/core/lib/lantern/metrics/first-meaningful-paint.d.ts +6 -0
  162. package/core/lib/lantern/metrics/first-meaningful-paint.js +64 -0
  163. package/core/lib/lantern/metrics/interactive.d.ts +26 -0
  164. package/core/lib/lantern/metrics/interactive.js +112 -0
  165. package/core/lib/lantern/metrics/largest-contentful-paint.d.ts +19 -0
  166. package/core/lib/lantern/metrics/largest-contentful-paint.js +108 -0
  167. package/core/lib/lantern/metrics/max-potential-fid.d.ts +30 -0
  168. package/core/lib/lantern/metrics/max-potential-fid.js +92 -0
  169. package/core/lib/lantern/metrics/speed-index.d.ts +38 -0
  170. package/core/lib/lantern/metrics/speed-index.js +144 -0
  171. package/core/lib/lantern/metrics/total-blocking-time.d.ts +31 -0
  172. package/core/lib/lantern/metrics/total-blocking-time.js +128 -0
  173. package/core/lib/lantern/network-node.js +28 -4
  174. package/core/lib/lantern/page-dependency-graph.d.ts +4 -4
  175. package/core/lib/lantern/page-dependency-graph.js +19 -7
  176. package/core/lib/lantern/simulator/connection-pool.d.ts +2 -12
  177. package/core/lib/lantern/simulator/connection-pool.js +3 -22
  178. package/core/lib/lantern/simulator/network-analyzer.js +1 -12
  179. package/core/lib/lantern/simulator/simulator.d.ts +2 -4
  180. package/core/lib/lantern/simulator/simulator.js +7 -14
  181. package/core/lib/lantern/types/lantern.d.ts +5 -3
  182. package/core/lib/lantern-trace-saver.js +0 -1
  183. package/core/lib/lh-error.d.ts +9 -0
  184. package/core/lib/lh-error.js +13 -3
  185. package/core/lib/lighthouse-compatibility.js +53 -10
  186. package/core/lib/navigation-error.js +3 -0
  187. package/core/lib/network-request.d.ts +1 -0
  188. package/core/lib/network-request.js +29 -1
  189. package/core/lib/proto-preprocessor.js +24 -8
  190. package/core/lib/tracehouse/trace-processor.js +15 -2
  191. package/core/runner.js +18 -25
  192. package/dist/report/bundle.esm.js +11 -112
  193. package/dist/report/flow.js +16 -117
  194. package/dist/report/standalone.js +12 -113
  195. package/flow-report/src/help-dialog.tsx +0 -1
  196. package/flow-report/src/i18n/i18n.d.ts +0 -4
  197. package/flow-report/src/i18n/ui-strings.d.ts +0 -1
  198. package/flow-report/src/i18n/ui-strings.js +0 -2
  199. package/flow-report/src/summary/category.tsx +10 -12
  200. package/package.json +7 -7
  201. package/readme.md +4 -4
  202. package/report/assets/styles.css +1 -60
  203. package/report/assets/templates.html +0 -95
  204. package/report/renderer/category-renderer.js +1 -1
  205. package/report/renderer/components.d.ts +2 -2
  206. package/report/renderer/components.js +2 -103
  207. package/report/renderer/dom.d.ts +1 -1
  208. package/report/renderer/dom.js +1 -1
  209. package/report/renderer/performance-category-renderer.d.ts +0 -7
  210. package/report/renderer/performance-category-renderer.js +1 -32
  211. package/report/renderer/report-renderer.js +3 -13
  212. package/report/renderer/report-ui-features.js +1 -1
  213. package/report/renderer/report-utils.d.ts +0 -1
  214. package/report/renderer/report-utils.js +13 -13
  215. package/shared/localization/locales/ar-XB.json +62 -329
  216. package/shared/localization/locales/ar.json +62 -329
  217. package/shared/localization/locales/bg.json +62 -329
  218. package/shared/localization/locales/ca.json +62 -329
  219. package/shared/localization/locales/cs.json +62 -329
  220. package/shared/localization/locales/da.json +62 -329
  221. package/shared/localization/locales/de.json +62 -329
  222. package/shared/localization/locales/el.json +62 -329
  223. package/shared/localization/locales/en-GB.json +62 -329
  224. package/shared/localization/locales/en-US.json +101 -332
  225. package/shared/localization/locales/en-XA.json +62 -329
  226. package/shared/localization/locales/en-XL.json +101 -332
  227. package/shared/localization/locales/es-419.json +62 -329
  228. package/shared/localization/locales/es.json +62 -329
  229. package/shared/localization/locales/fi.json +62 -329
  230. package/shared/localization/locales/fil.json +61 -328
  231. package/shared/localization/locales/fr.json +62 -329
  232. package/shared/localization/locales/he.json +62 -329
  233. package/shared/localization/locales/hi.json +62 -329
  234. package/shared/localization/locales/hr.json +63 -330
  235. package/shared/localization/locales/hu.json +62 -329
  236. package/shared/localization/locales/id.json +62 -329
  237. package/shared/localization/locales/it.json +62 -329
  238. package/shared/localization/locales/ja.json +62 -329
  239. package/shared/localization/locales/ko.json +62 -329
  240. package/shared/localization/locales/lt.json +62 -329
  241. package/shared/localization/locales/lv.json +62 -329
  242. package/shared/localization/locales/nl.json +62 -329
  243. package/shared/localization/locales/no.json +62 -329
  244. package/shared/localization/locales/pl.json +61 -328
  245. package/shared/localization/locales/pt-PT.json +62 -329
  246. package/shared/localization/locales/pt.json +64 -331
  247. package/shared/localization/locales/ro.json +62 -329
  248. package/shared/localization/locales/ru.json +62 -329
  249. package/shared/localization/locales/sk.json +62 -329
  250. package/shared/localization/locales/sl.json +62 -329
  251. package/shared/localization/locales/sr-Latn.json +62 -329
  252. package/shared/localization/locales/sr.json +62 -329
  253. package/shared/localization/locales/sv.json +62 -329
  254. package/shared/localization/locales/ta.json +61 -328
  255. package/shared/localization/locales/te.json +62 -329
  256. package/shared/localization/locales/th.json +62 -329
  257. package/shared/localization/locales/tr.json +62 -329
  258. package/shared/localization/locales/uk.json +62 -329
  259. package/shared/localization/locales/vi.json +61 -328
  260. package/shared/localization/locales/zh-HK.json +62 -329
  261. package/shared/localization/locales/zh-TW.json +61 -328
  262. package/shared/localization/locales/zh.json +62 -329
  263. package/tsconfig.json +1 -3
  264. package/types/artifacts.d.ts +21 -110
  265. package/types/audit.d.ts +0 -10
  266. package/types/config.d.ts +0 -1
  267. package/types/externs.d.ts +0 -2
  268. package/types/gatherer.d.ts +3 -0
  269. package/types/internal/smokehouse.d.ts +1 -1
  270. package/types/lh.d.ts +0 -2
  271. package/types/lhr/audit-details.d.ts +9 -4
  272. package/types/lhr/lhr.d.ts +0 -4
  273. package/types/lhr/settings.d.ts +0 -4
  274. package/core/audits/accessibility/duplicate-id-active.js +0 -42
  275. package/core/audits/content-width.d.ts +0 -17
  276. package/core/audits/content-width.js +0 -76
  277. package/core/audits/installable-manifest.d.ts +0 -111
  278. package/core/audits/installable-manifest.js +0 -248
  279. package/core/audits/layout-shift-elements.d.ts +0 -16
  280. package/core/audits/layout-shift-elements.js +0 -101
  281. package/core/audits/manual/pwa-cross-browser.d.ts +0 -12
  282. package/core/audits/manual/pwa-cross-browser.js +0 -40
  283. package/core/audits/manual/pwa-each-page-has-url.d.ts +0 -12
  284. package/core/audits/manual/pwa-each-page-has-url.js +0 -38
  285. package/core/audits/manual/pwa-page-transitions.d.ts +0 -12
  286. package/core/audits/manual/pwa-page-transitions.js +0 -38
  287. package/core/audits/maskable-icon.d.ts +0 -25
  288. package/core/audits/maskable-icon.js +0 -70
  289. package/core/audits/multi-check-audit.d.ts +0 -28
  290. package/core/audits/multi-check-audit.js +0 -82
  291. package/core/audits/no-unload-listeners.d.ts +0 -16
  292. package/core/audits/no-unload-listeners.js +0 -86
  293. package/core/audits/performance-budget.d.ts +0 -39
  294. package/core/audits/performance-budget.js +0 -154
  295. package/core/audits/script-elements-test-audit.d.ts +0 -14
  296. package/core/audits/script-elements-test-audit.js +0 -29
  297. package/core/audits/seo/plugins.d.ts +0 -15
  298. package/core/audits/seo/plugins.js +0 -150
  299. package/core/audits/seo/tap-targets.d.ts +0 -50
  300. package/core/audits/seo/tap-targets.js +0 -352
  301. package/core/audits/splash-screen.d.ts +0 -37
  302. package/core/audits/splash-screen.js +0 -98
  303. package/core/audits/themed-omnibox.d.ts +0 -42
  304. package/core/audits/themed-omnibox.js +0 -102
  305. package/core/audits/timing-budget.d.ts +0 -43
  306. package/core/audits/timing-budget.js +0 -175
  307. package/core/computed/manifest-values.d.ts +0 -24
  308. package/core/computed/manifest-values.js +0 -136
  309. package/core/config/budget.d.ts +0 -74
  310. package/core/config/budget.js +0 -340
  311. package/core/config/metrics-to-audits.d.ts +0 -19
  312. package/core/config/metrics-to-audits.js +0 -62
  313. package/core/gather/driver/service-workers.d.ts +0 -16
  314. package/core/gather/driver/service-workers.js +0 -52
  315. package/core/gather/gatherers/dobetterweb/tags-blocking-first-paint.d.ts +0 -47
  316. package/core/gather/gatherers/dobetterweb/tags-blocking-first-paint.js +0 -233
  317. package/core/gather/gatherers/global-listeners.d.ts +0 -27
  318. package/core/gather/gatherers/global-listeners.js +0 -108
  319. package/core/gather/gatherers/installability-errors.d.ts +0 -17
  320. package/core/gather/gatherers/installability-errors.js +0 -56
  321. package/core/gather/gatherers/script-elements.d.ts +0 -21
  322. package/core/gather/gatherers/script-elements.js +0 -100
  323. package/core/gather/gatherers/seo/embedded-content.d.ts +0 -10
  324. package/core/gather/gatherers/seo/embedded-content.js +0 -63
  325. package/core/gather/gatherers/seo/tap-targets.d.ts +0 -21
  326. package/core/gather/gatherers/seo/tap-targets.js +0 -389
  327. package/core/gather/gatherers/service-worker.d.ts +0 -10
  328. package/core/gather/gatherers/service-worker.js +0 -32
  329. package/core/gather/gatherers/web-app-manifest.d.ts +0 -32
  330. package/core/gather/gatherers/web-app-manifest.js +0 -106
  331. package/report/renderer/pwa-category-renderer.d.ts +0 -55
  332. package/report/renderer/pwa-category-renderer.js +0 -184
  333. package/third-party/chromium-synchronization/installability-errors-test.js +0 -79
  334. package/types/lhr/budget.d.ts +0 -60
@@ -84,7 +84,6 @@ export const HelpDialog: FunctionComponent<{onClose: () => void}> = ({
84
84
  strings.categoryAccessibility,
85
85
  strings.categoryBestPractices,
86
86
  strings.categorySeo,
87
- strings.categoryProgressiveWebApp,
88
87
  ]}
89
88
  />
90
89
  <HelpDialogColumn
@@ -25,7 +25,6 @@ declare function useI18n(): {
25
25
  categoryAccessibility: string;
26
26
  categoryBestPractices: string;
27
27
  categorySeo: string;
28
- categoryProgressiveWebApp: string;
29
28
  desktop: string;
30
29
  mobile: string;
31
30
  ratingPass: string;
@@ -110,7 +109,6 @@ declare function useI18n(): {
110
109
  firstPartyChipLabel: string;
111
110
  openInANewTabTooltip: string;
112
111
  unattributable: string;
113
- pwaRemovalMessage: string;
114
112
  };
115
113
  };
116
114
  declare function useLocalizedStrings(): {
@@ -131,7 +129,6 @@ declare function useLocalizedStrings(): {
131
129
  categoryAccessibility: string;
132
130
  categoryBestPractices: string;
133
131
  categorySeo: string;
134
- categoryProgressiveWebApp: string;
135
132
  desktop: string;
136
133
  mobile: string;
137
134
  ratingPass: string;
@@ -216,7 +213,6 @@ declare function useLocalizedStrings(): {
216
213
  firstPartyChipLabel: string;
217
214
  openInANewTabTooltip: string;
218
215
  unattributable: string;
219
- pwaRemovalMessage: string;
220
216
  };
221
217
  declare function useStringFormatter(): (str: string, values?: Record<string, string | number>) => string;
222
218
  declare const I18nProvider: FunctionComponent;
@@ -16,7 +16,6 @@ export namespace UIStrings {
16
16
  const categoryAccessibility: string;
17
17
  const categoryBestPractices: string;
18
18
  const categorySeo: string;
19
- const categoryProgressiveWebApp: string;
20
19
  const desktop: string;
21
20
  const mobile: string;
22
21
  const ratingPass: string;
@@ -43,8 +43,6 @@ export const UIStrings = {
43
43
  categoryBestPractices: 'Best Practices',
44
44
  /** Title of the Search Engine Optimization (SEO) category of audits. This is displayed at the top of a list of audits focused on topics related to optimizing a website for indexing by search engines. Also used as a label of a score gauge; try to limit to 20 characters. */
45
45
  categorySeo: 'SEO',
46
- /** Title of the Progressive Web Application (PWA) category of audits. This is displayed at the top of a list of audits focused on topics related to whether or not a site is a progressive web app, e.g. responds offline, uses a service worker, is on https, etc. Also used as a label of a score gauge. */
47
- categoryProgressiveWebApp: 'Progressive Web App',
48
46
  /** Label for a report evaluating a web page. Label indicates that the report refers to the desktop version of the site. */
49
47
  desktop: 'Desktop',
50
48
  /** Label for a report evaluating a web page. Label indicates that the report refers to the mobile version of the site. */
@@ -39,13 +39,6 @@ function getScoreToBeGained(audit: ScoredAuditRef): number {
39
39
  return audit.weight * (1 - audit.result.score);
40
40
  }
41
41
 
42
- function getOverallSavings(audit: LH.ReportResult.AuditRef): number {
43
- return (
44
- audit.result.details &&
45
- audit.result.details.overallSavingsMs
46
- ) || 0;
47
- }
48
-
49
42
  const SummaryTooltipAudit: FunctionComponent<{audit: LH.ReportResult.AuditRef}> = ({audit}) => {
50
43
  const rating = ReportUtils.calculateRating(audit.result.score, audit.result.scoreDisplayMode);
51
44
  return (
@@ -63,10 +56,10 @@ const SummaryTooltipAudits: FunctionComponent<{category: LH.ReportResult.Categor
63
56
  return audit.result.score !== null &&
64
57
  // Metrics should not be displayed in this group.
65
58
  audit.group !== 'metrics' &&
66
- // Audits in performance group "hidden" should not be counted.
67
- (audit.group !== 'hidden' || category.id !== 'performance') &&
68
- // We don't want unweighted audits except for opportunities with potential savings.
69
- (audit.weight > 0 || getOverallSavings(audit) > 0) &&
59
+ // Audits in group "hidden" should not be counted.
60
+ audit.group !== 'hidden' &&
61
+ // We don't want unweighted audits except for performance diagnostics.
62
+ (audit.weight > 0 || audit.group === 'diagnostics') &&
70
63
  // Passing audits should never be high impact.
71
64
  !ReportUtils.showAsPassed(audit.result);
72
65
  }
@@ -79,7 +72,12 @@ const SummaryTooltipAudits: FunctionComponent<{category: LH.ReportResult.Categor
79
72
  const remainingScoreA = getScoreToBeGained(a);
80
73
  const remainingScoreB = getScoreToBeGained(b);
81
74
  if (remainingScoreA !== remainingScoreB) return remainingScoreB - remainingScoreA;
82
- return getOverallSavings(b) - getOverallSavings(a);
75
+ if (a.result.score !== b.result.score) return a.result.score - b.result.score;
76
+
77
+ // TODO: Sort using overall impact from metric savings, not just LCP
78
+ const aLcpSavings = a.result.metricSavings?.LCP || 0;
79
+ const bLcpSavings = b.result.metricSavings?.LCP || 0;
80
+ return bLcpSavings - aLcpSavings;
83
81
  })
84
82
  .splice(0, MAX_TOOLTIP_AUDITS);
85
83
  if (!audits.length) return null;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "lighthouse",
3
3
  "type": "module",
4
- "version": "11.7.0",
4
+ "version": "12.0.0-dev.20240422",
5
5
  "description": "Automated auditing, performance metrics, and best practices for the web.",
6
6
  "main": "./core/index.js",
7
7
  "bin": {
@@ -165,7 +165,7 @@
165
165
  "pako": "^2.0.3",
166
166
  "preact": "^10.7.2",
167
167
  "pretty-json-stringify": "^0.0.2",
168
- "puppeteer": "^22.5.0",
168
+ "puppeteer": "^22.6.5",
169
169
  "resolve": "^1.22.1",
170
170
  "rollup": "^2.52.7",
171
171
  "rollup-plugin-polyfill-node": "^0.12.0",
@@ -179,9 +179,9 @@
179
179
  "webtreemap-cdt": "^3.2.1"
180
180
  },
181
181
  "dependencies": {
182
- "@paulirish/trace_engine": "^0.0.12",
182
+ "@paulirish/trace_engine": "^0.0.19",
183
183
  "@sentry/node": "^6.17.4",
184
- "axe-core": "^4.8.4",
184
+ "axe-core": "^4.9.0",
185
185
  "chrome-launcher": "^1.1.1",
186
186
  "configstore": "^5.0.1",
187
187
  "csp_evaluator": "1.1.1",
@@ -199,12 +199,12 @@
199
199
  "open": "^8.4.0",
200
200
  "parse-cache-control": "1.0.1",
201
201
  "ps-list": "^8.0.0",
202
- "puppeteer-core": "^22.5.0",
202
+ "puppeteer-core": "^22.6.5",
203
203
  "robots-parser": "^3.0.1",
204
204
  "semver": "^5.3.0",
205
205
  "speedline-core": "^1.4.3",
206
- "third-party-web": "^0.24.1",
207
- "tldts-icann": "^6.1.0",
206
+ "third-party-web": "^0.24.2",
207
+ "tldts-icann": "^6.1.16",
208
208
  "ws": "^7.0.0",
209
209
  "yargs": "^17.3.1",
210
210
  "yargs-parser": "^21.0.0"
package/readme.md CHANGED
@@ -103,9 +103,8 @@ Configuration:
103
103
  --gather-mode, -G Collect artifacts from a connected browser and save to disk. (Artifacts folder path may optionally be provided). If audit-mode is not also enabled, the run will quit early.
104
104
  --audit-mode, -A Process saved artifacts from disk. (Artifacts folder path may be provided, otherwise defaults to ./latest-run/)
105
105
  --only-audits Only run the specified audits [array]
106
- --only-categories Only run the specified categories. Available categories: accessibility, best-practices, performance, pwa, seo [array]
106
+ --only-categories Only run the specified categories. Available categories: accessibility, best-practices, performance, seo [array]
107
107
  --skip-audits Run everything except these audits [array]
108
- --budget-path The path to the budget.json file for LightWallet. [string]
109
108
  --disable-full-page-screenshot Disables collection of the full page screenshot, which can be quite large [boolean]
110
109
 
111
110
  Output:
@@ -148,7 +147,7 @@ Examples:
148
147
  lighthouse <url> --quiet --chrome-flags="--headless" Launch Headless Chrome, turn off logging
149
148
  lighthouse <url> --extra-headers "{\"Cookie\":\"monster=blue\", \"x-men\":\"wolverine\"}" Stringify'd JSON HTTP Header key/value pairs to send in requests
150
149
  lighthouse <url> --extra-headers=./path/to/file.json Path to JSON file of HTTP Header key/value pairs to send in requests
151
- lighthouse <url> --only-categories=performance,pwa Only run the specified categories. Available categories: accessibility, best-practices, performance, pwa, seo
150
+ lighthouse <url> --only-categories=performance,seo Only run the specified categories. Available categories: accessibility, best-practices, performance, seo
152
151
 
153
152
  For more information on Lighthouse, see https://developers.google.com/web/tools/lighthouse/.
154
153
  ```
@@ -242,7 +241,6 @@ Useful documentation, examples, and recipes to get you started.
242
241
  - [Developing Plugins](./docs/plugins.md)
243
242
  - [Making a New Audit](./docs/new-audits.md)
244
243
  - [Testing on a mobile device](./docs/readme.md#testing-on-a-mobile-device)
245
- - [Setting a performance budget](./docs/performance-budgets.md)
246
244
  - [Lighthouse Architecture](./docs/architecture.md)
247
245
 
248
246
  **Recipes**
@@ -364,6 +362,8 @@ This section details services that have integrated Lighthouse data. If you're wo
364
362
 
365
363
  * **[Lighthouse Metrics China](http://lighthousemetricschina.com)** - The first Lighthouse metrics tool specifically designed for China. Experience unparalleled website monitoring capabilities with Lighthouse. Gain insights into the fluctuations of your scores and metrics within the realm of the [Great Firewall of China](https://www.chinafirewalltest.co), enabling a comprehensive understanding of the factors influencing each change. Lighthouse Metrics China offers both free and paid plans.
366
364
 
365
+ * **[DeploymentHawk](https://deploymenthawk.com)** - DeploymentHawk is an automated site auditing tool powered by Lighthouse. Effortlessly catch performance, accessibility, and SEO issues before they impact your users. DeploymentHawk is a paid product with a free 7-day trial.
366
+
367
367
  ## Lighthouse Integrations in non-Web Perf services
368
368
 
369
369
  * **[PageWatch](https://pagewatch.dev/)** — PageWatch is a tool to find problem pages on your website. It provides insights into spelling errors, layout issues, slow pages (powered by Lighthouse) and more. PageWatch is offered via free and paid plans.
@@ -103,8 +103,6 @@
103
103
  --plugin-badge-size-big: calc(var(--gauge-circle-size-big) / 2.7);
104
104
  --plugin-badge-size: calc(var(--gauge-circle-size) / 2.7);
105
105
  --plugin-icon-size: 65%;
106
- --pwa-icon-margin: 0 var(--default-padding);
107
- --pwa-icon-size: var(--topbar-logo-size);
108
106
  --report-background-color: #fff;
109
107
  --report-border-color-secondary: #ebebeb;
110
108
  --report-font-family-monospace: 'Roboto Mono', 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console', monospace;
@@ -157,15 +155,6 @@
157
155
  --fail-icon-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><title>warn</title><path fill="%23C7221F" d="M2 42h44L24 4 2 42zm24-6h-4v-4h4v4zm0-8h-4v-8h4v8z"/></svg>');
158
156
  --error-icon-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3 15"><title>error</title><path d="M0 15H 3V 12H 0V" fill="%23FF4E42"/><path d="M0 9H 3V 0H 0V" fill="%23FF4E42"/></svg>');
159
157
 
160
- --pwa-installable-gray-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="nonzero"><circle fill="%23DAE0E3" cx="12" cy="12" r="12"/><path d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z" fill="%23FFF"/></g></svg>');
161
- --pwa-optimized-gray-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="%23DAE0E3" width="24" height="24" rx="12"/><path fill="%23FFF" d="M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z"/><path d="M5 5h14v14H5z"/></g></svg>');
162
-
163
- --pwa-installable-gray-url-dark: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="nonzero"><circle fill="%23424242" cx="12" cy="12" r="12"/><path d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z" fill="%23FFF"/></g></svg>');
164
- --pwa-optimized-gray-url-dark: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="%23424242" width="24" height="24" rx="12"/><path fill="%23FFF" d="M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z"/><path d="M5 5h14v14H5z"/></g></svg>');
165
-
166
- --pwa-installable-color-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero" fill="none"><circle fill="%230CCE6B" cx="12" cy="12" r="12"/><path d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z" fill="%23FFF"/></g></svg>');
167
- --pwa-optimized-color-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="%230CCE6B" width="24" height="24" rx="12"/><path d="M5 5h14v14H5z"/><path fill="%23FFF" d="M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z"/></g></svg>');
168
-
169
158
  --swap-locale-icon-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"/></svg>');
170
159
  }
171
160
 
@@ -207,8 +196,6 @@
207
196
 
208
197
  /* SVGs */
209
198
  --plugin-icon-url: var(--plugin-icon-url-dark);
210
- --pwa-installable-gray-url: var(--pwa-installable-gray-url-dark);
211
- --pwa-optimized-gray-url: var(--pwa-optimized-gray-url-dark);
212
199
  }
213
200
  }
214
201
 
@@ -229,7 +216,6 @@
229
216
  --header-padding: 16px 0 16px 0;
230
217
  --image-preview-size: 24px;
231
218
  --plugin-icon-size: 75%;
232
- --pwa-icon-margin: 0 7px 0 -3px;
233
219
  --report-font-size: 14px;
234
220
  --report-line-height: 20px;
235
221
  --score-icon-margin-left: 2px;
@@ -261,7 +247,6 @@
261
247
  --header-padding: 16px 0 16px 0;
262
248
  --screenshot-overlay-background: transparent;
263
249
  --plugin-icon-size: 75%;
264
- --pwa-icon-margin: 0 7px 0 -3px;
265
250
  --report-font-family-monospace: 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console', monospace;
266
251
  --report-font-family: '.SFNSDisplay-Regular', 'Helvetica Neue', 'Lucida Grande', sans-serif;
267
252
  --report-font-size: 12px;
@@ -931,48 +916,6 @@
931
916
  margin-bottom: calc(var(--audit-group-margin-bottom) / 2);
932
917
  }
933
918
 
934
- .lh-audit-group__header::before {
935
- /* By default, groups don't get an icon */
936
- content: none;
937
- width: var(--pwa-icon-size);
938
- height: var(--pwa-icon-size);
939
- margin: var(--pwa-icon-margin);
940
- display: inline-block;
941
- vertical-align: middle;
942
- }
943
-
944
- /* Style the "over budget" columns red. */
945
- .lh-audit-group--budgets #performance-budget tbody tr td:nth-child(4),
946
- .lh-audit-group--budgets #performance-budget tbody tr td:nth-child(5),
947
- .lh-audit-group--budgets #timing-budget tbody tr td:nth-child(3) {
948
- color: var(--color-red-700);
949
- }
950
-
951
- /* Align the "over budget request count" text to be close to the "over budget bytes" column. */
952
- .lh-audit-group--budgets .lh-table tbody tr td:nth-child(4){
953
- text-align: right;
954
- }
955
-
956
- .lh-audit-group--budgets .lh-details--budget {
957
- width: 100%;
958
- margin: 0 0 var(--default-padding);
959
- }
960
-
961
- .lh-audit-group--pwa-installable .lh-audit-group__header::before {
962
- content: '';
963
- background-image: var(--pwa-installable-gray-url);
964
- }
965
- .lh-audit-group--pwa-optimized .lh-audit-group__header::before {
966
- content: '';
967
- background-image: var(--pwa-optimized-gray-url);
968
- }
969
- .lh-audit-group--pwa-installable.lh-badged .lh-audit-group__header::before {
970
- background-image: var(--pwa-installable-color-url);
971
- }
972
- .lh-audit-group--pwa-optimized.lh-badged .lh-audit-group__header::before {
973
- background-image: var(--pwa-optimized-color-url);
974
- }
975
-
976
919
  .lh-audit-group--metrics .lh-audit-group__summary {
977
920
  margin-top: 0;
978
921
  margin-bottom: 0;
@@ -1323,10 +1266,8 @@
1323
1266
 
1324
1267
  .lh-scores-header .lh-gauge__wrapper,
1325
1268
  .lh-scores-header .lh-fraction__wrapper,
1326
- .lh-scores-header .lh-gauge--pwa__wrapper,
1327
1269
  .lh-sticky-header .lh-gauge__wrapper,
1328
- .lh-sticky-header .lh-fraction__wrapper,
1329
- .lh-sticky-header .lh-gauge--pwa__wrapper {
1270
+ .lh-sticky-header .lh-fraction__wrapper {
1330
1271
  width: var(--gauge-wrapper-width);
1331
1272
  }
1332
1273
 
@@ -514,101 +514,6 @@ SPDX-License-Identifier: Apache-2.0
514
514
  </a>
515
515
  </template>
516
516
 
517
-
518
- <!-- Lighthouse PWA badge gauge -->
519
- <template id="gaugePwa">
520
- <style>
521
- .lh-gauge--pwa .lh-gauge--pwa__component {
522
- display: none;
523
- }
524
- .lh-gauge--pwa__wrapper:not(.lh-badged--all) .lh-gauge--pwa__logo > path {
525
- /* Gray logo unless everything is passing. */
526
- fill: #B0B0B0;
527
- }
528
-
529
- .lh-gauge--pwa__disc {
530
- fill: var(--color-gray-200);
531
- }
532
-
533
- .lh-gauge--pwa__logo--primary-color {
534
- fill: #304FFE;
535
- }
536
-
537
- .lh-gauge--pwa__logo--secondary-color {
538
- fill: #3D3D3D;
539
- }
540
- .lh-dark .lh-gauge--pwa__logo--secondary-color {
541
- fill: #D8B6B6;
542
- }
543
-
544
- /* No passing groups. */
545
- .lh-gauge--pwa__wrapper:not([class*='lh-badged--']) .lh-gauge--pwa__na-line {
546
- display: inline;
547
- }
548
- /* Just optimized. Same n/a line as no passing groups. */
549
- .lh-gauge--pwa__wrapper.lh-badged--pwa-optimized:not(.lh-badged--pwa-installable) .lh-gauge--pwa__na-line {
550
- display: inline;
551
- }
552
-
553
- /* Just installable. */
554
- .lh-gauge--pwa__wrapper.lh-badged--pwa-installable .lh-gauge--pwa__installable-badge {
555
- display: inline;
556
- }
557
-
558
- /* All passing groups. */
559
- .lh-gauge--pwa__wrapper.lh-badged--all .lh-gauge--pwa__check-circle {
560
- display: inline;
561
- }
562
- </style>
563
-
564
- <a class="lh-gauge__wrapper lh-gauge--pwa__wrapper">
565
- <svg viewBox="0 0 60 60" class="lh-gauge lh-gauge--pwa">
566
- <defs>
567
- <linearGradient id="lh-gauge--pwa__check-circle__gradient" x1="50%" y1="0%" x2="50%" y2="100%">
568
- <stop stop-color="#00C852" offset="0%"></stop>
569
- <stop stop-color="#009688" offset="100%"></stop>
570
- </linearGradient>
571
- <linearGradient id="lh-gauge--pwa__installable__shadow-gradient" x1="76.056%" x2="24.111%" y1="82.995%" y2="24.735%">
572
- <stop stop-color="#A5D6A7" offset="0%"></stop>
573
- <stop stop-color="#80CBC4" offset="100%"></stop>
574
- </linearGradient>
575
-
576
- <g id="lh-gauge--pwa__installable-badge">
577
- <circle fill="#FFFFFF" cx="10" cy="10" r="10"></circle>
578
- <path fill="#009688" d="M10 4.167A5.835 5.835 0 0 0 4.167 10 5.835 5.835 0 0 0 10 15.833 5.835 5.835 0 0 0 15.833 10 5.835 5.835 0 0 0 10 4.167zm2.917 6.416h-2.334v2.334H9.417v-2.334H7.083V9.417h2.334V7.083h1.166v2.334h2.334v1.166z"/>
579
- </g>
580
- </defs>
581
-
582
- <g stroke="none" fill-rule="nonzero">
583
- <!-- Background and PWA logo (color by default) -->
584
- <circle class="lh-gauge--pwa__disc" cx="30" cy="30" r="30"></circle>
585
- <g class="lh-gauge--pwa__logo">
586
- <path class="lh-gauge--pwa__logo--secondary-color" d="M35.66 19.39l.7-1.75h2L37.4 15 38.6 12l3.4 9h-2.51l-.58-1.61z"/>
587
- <path class="lh-gauge--pwa__logo--primary-color" d="M33.52 21l3.65-9h-2.42l-2.5 5.82L30.5 12h-1.86l-1.9 5.82-1.35-2.65-1.21 3.72L25.4 21h2.38l1.72-5.2 1.64 5.2z"/>
588
- <path class="lh-gauge--pwa__logo--secondary-color" fill-rule="nonzero" d="M20.3 17.91h1.48c.45 0 .85-.05 1.2-.15l.39-1.18 1.07-3.3a2.64 2.64 0 0 0-.28-.37c-.55-.6-1.36-.91-2.42-.91H18v9h2.3V17.9zm1.96-3.84c.22.22.33.5.33.87 0 .36-.1.65-.29.87-.2.23-.59.35-1.15.35h-.86v-2.41h.87c.52 0 .89.1 1.1.32z"/>
589
- </g>
590
-
591
- <!-- No badges. -->
592
- <rect class="lh-gauge--pwa__component lh-gauge--pwa__na-line" fill="#FFFFFF" x="20" y="32" width="20" height="4" rx="2"></rect>
593
-
594
- <!-- Just installable. -->
595
- <g class="lh-gauge--pwa__component lh-gauge--pwa__installable-badge" transform="translate(20, 29)">
596
- <path fill="url(#lh-gauge--pwa__installable__shadow-gradient)" d="M33.629 19.487c-4.272 5.453-10.391 9.39-17.415 10.869L3 17.142 17.142 3 33.63 19.487z"/>
597
- <use href="#lh-gauge--pwa__installable-badge" />
598
- </g>
599
-
600
- <!-- Full PWA. -->
601
- <g class="lh-gauge--pwa__component lh-gauge--pwa__check-circle" transform="translate(18, 28)">
602
- <circle fill="#FFFFFF" cx="12" cy="12" r="12"></circle>
603
- <path fill="url(#lh-gauge--pwa__check-circle__gradient)" d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"></path>
604
- </g>
605
- </g>
606
- </svg>
607
-
608
- <div class="lh-gauge__label"></div>
609
- </a>
610
- </template>
611
-
612
517
  <!-- Lighthouse crtiical request chains component -->
613
518
  <template id="crc">
614
519
  <div class="lh-crc-container">
@@ -239,7 +239,6 @@ export class CategoryRenderer {
239
239
 
240
240
  for (const auditRef of auditRefs) {
241
241
  const groupId = auditRef.group || notAGroup;
242
- if (groupId === 'hidden') continue;
243
242
  const groupAuditRefs = grouped.get(groupId) || [];
244
243
  groupAuditRefs.push(auditRef);
245
244
  grouped.set(groupId, groupAuditRefs);
@@ -531,6 +530,7 @@ export class CategoryRenderer {
531
530
 
532
531
  // Sort audits into clumps.
533
532
  for (const auditRef of category.auditRefs) {
533
+ if (auditRef.group === 'hidden') continue;
534
534
  const clumpId = this._getClumpIdForAuditRef(auditRef);
535
535
  const clump = /** @type {Array<LH.ReportResult.AuditRef>} */ (clumps.get(clumpId)); // already defined
536
536
  clump.push(auditRef);
@@ -1,4 +1,4 @@
1
- /** @typedef {'3pFilter'|'audit'|'categoryHeader'|'chevron'|'clump'|'crc'|'crcChain'|'elementScreenshot'|'explodeyGauge'|'footer'|'fraction'|'gauge'|'gaugePwa'|'heading'|'metric'|'scorescale'|'scoresWrapper'|'snippet'|'snippetContent'|'snippetHeader'|'snippetLine'|'styles'|'topbar'|'warningsToplevel'} ComponentName */
1
+ /** @typedef {'3pFilter'|'audit'|'categoryHeader'|'chevron'|'clump'|'crc'|'crcChain'|'elementScreenshot'|'explodeyGauge'|'footer'|'fraction'|'gauge'|'heading'|'metric'|'scorescale'|'scoresWrapper'|'snippet'|'snippetContent'|'snippetHeader'|'snippetLine'|'styles'|'topbar'|'warningsToplevel'} ComponentName */
2
2
  /**
3
3
  * @param {DOM} dom
4
4
  * @param {ComponentName} componentName
@@ -6,5 +6,5 @@
6
6
  */
7
7
  export function createComponent(dom: DOM, componentName: ComponentName): DocumentFragment;
8
8
  export type DOM = import('./dom.js').DOM;
9
- export type ComponentName = '3pFilter' | 'audit' | 'categoryHeader' | 'chevron' | 'clump' | 'crc' | 'crcChain' | 'elementScreenshot' | 'explodeyGauge' | 'footer' | 'fraction' | 'gauge' | 'gaugePwa' | 'heading' | 'metric' | 'scorescale' | 'scoresWrapper' | 'snippet' | 'snippetContent' | 'snippetHeader' | 'snippetLine' | 'styles' | 'topbar' | 'warningsToplevel';
9
+ export type ComponentName = '3pFilter' | 'audit' | 'categoryHeader' | 'chevron' | 'clump' | 'crc' | 'crcChain' | 'elementScreenshot' | 'explodeyGauge' | 'footer' | 'fraction' | 'gauge' | 'heading' | 'metric' | 'scorescale' | 'scoresWrapper' | 'snippet' | 'snippetContent' | 'snippetHeader' | 'snippetLine' | 'styles' | 'topbar' | 'warningsToplevel';
10
10
  //# sourceMappingURL=components.d.ts.map