lighthouse 13.4.1 → 13.5.0

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 (201) hide show
  1. package/build-tracker.config.js +1 -1
  2. package/cli/test/smokehouse/lighthouse-runners/bundle.js +3 -3
  3. package/cli/test/smokehouse/lighthouse-runners/devtools-mcp.js +2 -1
  4. package/core/audits/accessibility/accesskeys.js +1 -1
  5. package/core/audits/accessibility/aria-allowed-attr.js +1 -1
  6. package/core/audits/accessibility/aria-allowed-role.js +1 -1
  7. package/core/audits/accessibility/aria-command-name.js +1 -1
  8. package/core/audits/accessibility/aria-conditional-attr.js +1 -1
  9. package/core/audits/accessibility/aria-deprecated-role.js +1 -1
  10. package/core/audits/accessibility/aria-dialog-name.js +1 -1
  11. package/core/audits/accessibility/aria-hidden-body.js +1 -1
  12. package/core/audits/accessibility/aria-hidden-focus.js +1 -1
  13. package/core/audits/accessibility/aria-input-field-name.js +1 -1
  14. package/core/audits/accessibility/aria-meter-name.js +1 -1
  15. package/core/audits/accessibility/aria-progressbar-name.js +1 -1
  16. package/core/audits/accessibility/aria-prohibited-attr.js +1 -1
  17. package/core/audits/accessibility/aria-required-attr.js +1 -1
  18. package/core/audits/accessibility/aria-required-children.js +1 -1
  19. package/core/audits/accessibility/aria-required-parent.js +1 -1
  20. package/core/audits/accessibility/aria-roles.js +1 -1
  21. package/core/audits/accessibility/aria-text.js +1 -1
  22. package/core/audits/accessibility/aria-toggle-field-name.js +1 -1
  23. package/core/audits/accessibility/aria-tooltip-name.js +1 -1
  24. package/core/audits/accessibility/aria-treeitem-name.js +1 -1
  25. package/core/audits/accessibility/aria-valid-attr-value.js +1 -1
  26. package/core/audits/accessibility/aria-valid-attr.js +1 -1
  27. package/core/audits/accessibility/autocomplete-valid.js +1 -1
  28. package/core/audits/accessibility/button-name.js +1 -1
  29. package/core/audits/accessibility/bypass.js +1 -1
  30. package/core/audits/accessibility/color-contrast.js +1 -1
  31. package/core/audits/accessibility/definition-list.js +1 -1
  32. package/core/audits/accessibility/dlitem.js +1 -1
  33. package/core/audits/accessibility/document-title.js +1 -1
  34. package/core/audits/accessibility/duplicate-id-aria.js +1 -1
  35. package/core/audits/accessibility/empty-heading.js +1 -1
  36. package/core/audits/accessibility/form-field-multiple-labels.js +1 -1
  37. package/core/audits/accessibility/frame-title.js +1 -1
  38. package/core/audits/accessibility/heading-order.js +1 -1
  39. package/core/audits/accessibility/html-has-lang.js +1 -1
  40. package/core/audits/accessibility/html-lang-valid.js +1 -1
  41. package/core/audits/accessibility/html-xml-lang-mismatch.js +1 -1
  42. package/core/audits/accessibility/identical-links-same-purpose.js +1 -1
  43. package/core/audits/accessibility/image-alt.js +1 -1
  44. package/core/audits/accessibility/image-redundant-alt.js +1 -1
  45. package/core/audits/accessibility/input-button-name.js +1 -1
  46. package/core/audits/accessibility/input-image-alt.js +1 -1
  47. package/core/audits/accessibility/label-content-name-mismatch.js +1 -1
  48. package/core/audits/accessibility/label.js +1 -1
  49. package/core/audits/accessibility/landmark-one-main.js +1 -1
  50. package/core/audits/accessibility/link-in-text-block.js +1 -1
  51. package/core/audits/accessibility/link-name.js +1 -1
  52. package/core/audits/accessibility/list.js +1 -1
  53. package/core/audits/accessibility/listitem.js +1 -1
  54. package/core/audits/accessibility/meta-refresh.js +1 -1
  55. package/core/audits/accessibility/meta-viewport.js +1 -1
  56. package/core/audits/accessibility/object-alt.js +1 -1
  57. package/core/audits/accessibility/presentation-role-conflict.js +1 -1
  58. package/core/audits/accessibility/select-name.js +1 -1
  59. package/core/audits/accessibility/skip-link.js +1 -1
  60. package/core/audits/accessibility/svg-img-alt.js +1 -1
  61. package/core/audits/accessibility/tabindex.js +1 -1
  62. package/core/audits/accessibility/table-duplicate-name.js +1 -1
  63. package/core/audits/accessibility/table-fake-caption.js +1 -1
  64. package/core/audits/accessibility/target-size.js +1 -1
  65. package/core/audits/accessibility/td-has-header.js +1 -1
  66. package/core/audits/accessibility/td-headers-attr.js +1 -1
  67. package/core/audits/accessibility/th-has-data-cells.js +1 -1
  68. package/core/audits/accessibility/valid-lang.js +1 -1
  69. package/core/audits/accessibility/video-caption.js +1 -1
  70. package/core/audits/agentic/ard-schema.d.ts +19 -0
  71. package/core/audits/agentic/ard-schema.js +135 -0
  72. package/core/audits/baseline.d.ts +23 -10
  73. package/core/audits/deprecations.js +1 -2
  74. package/core/audits/webmcp-form-coverage.js +3 -1
  75. package/core/audits/webmcp-registered-tools.d.ts +2 -0
  76. package/core/audits/webmcp-registered-tools.js +16 -1
  77. package/core/audits/webmcp-schema-validity.js +1 -1
  78. package/core/computed/metrics/interactive.js +1 -1
  79. package/core/computed/metrics/lantern-metric.js +1 -1
  80. package/core/computed/trace-engine-result.d.ts +3 -3
  81. package/core/computed/trace-engine-result.js +4 -4
  82. package/core/computed/unused-javascript-summary.d.ts +0 -1
  83. package/core/computed/unused-javascript-summary.js +0 -1
  84. package/core/config/agentic-browsing-config.d.ts +2 -0
  85. package/core/config/agentic-browsing-config.js +13 -1
  86. package/core/config/default-config.js +13 -1
  87. package/core/config/validation.js +6 -0
  88. package/core/gather/driver/execution-context.js +0 -2
  89. package/core/gather/driver/navigation.d.ts +1 -0
  90. package/core/gather/driver/navigation.js +35 -7
  91. package/core/gather/driver/wait-for-condition.d.ts +5 -7
  92. package/core/gather/driver/wait-for-condition.js +15 -9
  93. package/core/gather/fetcher.d.ts +9 -2
  94. package/core/gather/fetcher.js +30 -4
  95. package/core/gather/gatherers/accessibility.js +1 -3
  96. package/core/gather/gatherers/agentic/ard.d.ts +30 -0
  97. package/core/gather/gatherers/agentic/ard.js +125 -0
  98. package/core/gather/gatherers/anchor-elements.js +0 -2
  99. package/core/gather/gatherers/full-page-screenshot.js +0 -4
  100. package/core/gather/gatherers/iframe-elements.js +0 -2
  101. package/core/gather/gatherers/image-elements.js +1 -13
  102. package/core/gather/gatherers/inputs.js +0 -2
  103. package/core/gather/gatherers/link-elements.js +0 -2
  104. package/core/gather/gatherers/meta-elements.js +0 -3
  105. package/core/gather/gatherers/seo/robots-txt.d.ts +1 -0
  106. package/core/gather/gatherers/seo/robots-txt.js +3 -0
  107. package/core/gather/gatherers/stacks.d.ts +1 -1
  108. package/core/gather/gatherers/stacks.js +1 -3
  109. package/core/gather/gatherers/trace-elements.js +1 -3
  110. package/core/gather/gatherers/viewport-dimensions.js +0 -2
  111. package/core/gather/navigation-runner.d.ts +3 -1
  112. package/core/gather/navigation-runner.js +6 -3
  113. package/core/gather/session.js +1 -0
  114. package/core/index.cjs +5 -5
  115. package/core/index.d.cts +5 -5
  116. package/core/lib/arbitrary-equality-map.d.ts +2 -2
  117. package/core/lib/arbitrary-equality-map.js +1 -1
  118. package/core/lib/baseline/web-features-data.json +52 -28
  119. package/core/lib/baseline/web-features-metadata.json +1 -1
  120. package/core/lib/deprecation-description.js +1 -1
  121. package/core/lib/page-functions.d.ts +0 -3
  122. package/core/lib/page-functions.js +0 -3
  123. package/core/lib/rect-helpers.js +0 -8
  124. package/core/runner.js +21 -0
  125. package/core/user-flow.d.ts +3 -0
  126. package/core/user-flow.js +12 -0
  127. package/dist/report/bundle.esm.js +10 -3
  128. package/dist/report/flow.js +20 -13
  129. package/dist/report/standalone.js +10 -3
  130. package/package.json +19 -14
  131. package/report/assets/styles.css +7 -0
  132. package/report/renderer/components.js +1 -1
  133. package/report/renderer/details-renderer.js +7 -5
  134. package/report/renderer/drop-down-menu.d.ts +2 -2
  135. package/report/renderer/drop-down-menu.js +1 -1
  136. package/report/renderer/report-renderer.js +24 -3
  137. package/report/renderer/report-utils.js +1 -1
  138. package/report/renderer/snippet-renderer.d.ts +4 -4
  139. package/report/renderer/snippet-renderer.js +3 -3
  140. package/report/renderer/text-encoding.js +2 -2
  141. package/shared/localization/locales/ar-XB.json +111 -72
  142. package/shared/localization/locales/ar.json +113 -74
  143. package/shared/localization/locales/bg.json +112 -73
  144. package/shared/localization/locales/ca.json +112 -73
  145. package/shared/localization/locales/cs.json +112 -73
  146. package/shared/localization/locales/da.json +112 -73
  147. package/shared/localization/locales/de.json +112 -73
  148. package/shared/localization/locales/el.json +112 -73
  149. package/shared/localization/locales/en-GB.json +111 -72
  150. package/shared/localization/locales/en-US.json +102 -66
  151. package/shared/localization/locales/en-XA.json +111 -72
  152. package/shared/localization/locales/en-XL.json +102 -66
  153. package/shared/localization/locales/es-419.json +112 -73
  154. package/shared/localization/locales/es.json +112 -73
  155. package/shared/localization/locales/fi.json +112 -73
  156. package/shared/localization/locales/fil.json +112 -73
  157. package/shared/localization/locales/fr.json +112 -73
  158. package/shared/localization/locales/he.json +112 -73
  159. package/shared/localization/locales/hi.json +112 -73
  160. package/shared/localization/locales/hr.json +112 -73
  161. package/shared/localization/locales/hu.json +112 -73
  162. package/shared/localization/locales/id.json +112 -73
  163. package/shared/localization/locales/it.json +113 -74
  164. package/shared/localization/locales/ja.json +112 -73
  165. package/shared/localization/locales/ko.json +112 -73
  166. package/shared/localization/locales/lt.json +112 -73
  167. package/shared/localization/locales/lv.json +112 -73
  168. package/shared/localization/locales/nl.json +112 -73
  169. package/shared/localization/locales/no.json +112 -73
  170. package/shared/localization/locales/pl.json +112 -73
  171. package/shared/localization/locales/pt-PT.json +112 -73
  172. package/shared/localization/locales/pt.json +112 -73
  173. package/shared/localization/locales/ro.json +112 -73
  174. package/shared/localization/locales/ru.json +112 -73
  175. package/shared/localization/locales/sk.json +112 -73
  176. package/shared/localization/locales/sl.json +112 -73
  177. package/shared/localization/locales/sr-Latn.json +112 -73
  178. package/shared/localization/locales/sr.json +112 -73
  179. package/shared/localization/locales/sv.json +124 -85
  180. package/shared/localization/locales/ta.json +112 -73
  181. package/shared/localization/locales/te.json +112 -73
  182. package/shared/localization/locales/th.json +112 -73
  183. package/shared/localization/locales/tr.json +113 -74
  184. package/shared/localization/locales/uk.json +112 -73
  185. package/shared/localization/locales/vi.json +112 -73
  186. package/shared/localization/locales/zh-HK.json +112 -73
  187. package/shared/localization/locales/zh-TW.json +113 -74
  188. package/shared/localization/locales/zh.json +113 -74
  189. package/shared/util.d.ts +6 -0
  190. package/shared/util.js +9 -0
  191. package/third-party/ard/LICENSE +201 -0
  192. package/third-party/ard/README.md +27 -0
  193. package/third-party/ard/ard-test.d.ts +2 -0
  194. package/third-party/ard/ard-test.js +358 -0
  195. package/third-party/ard/ard.d.ts +34 -0
  196. package/third-party/ard/ard.js +204 -0
  197. package/third-party/ard/schema-validator.d.ts +20 -0
  198. package/third-party/ard/schema-validator.js +1700 -0
  199. package/third-party/ard/spec/schemas/ai-catalog.schema.json +292 -0
  200. package/tsconfig.json +1 -0
  201. package/types/artifacts.d.ts +14 -0
@@ -23,6 +23,8 @@
23
23
  "array-findlast": "2022-08-23",
24
24
  "array-flat": "2020-01-15",
25
25
  "array-from": "2016-09-20",
26
+ "array-fromasync": "2024-01-25",
27
+ "array-group": "2024-03-05",
26
28
  "array-includes": "2016-09-20",
27
29
  "array-isarray": "2015-07-29",
28
30
  "array-iteration-methods": "2015-07-29",
@@ -40,6 +42,7 @@
40
42
  "audio-worklet": "2021-04-26",
41
43
  "autofocus": "2015-07-29",
42
44
  "autonomous-custom-elements": "2020-01-15",
45
+ "avif": "2024-01-25",
43
46
  "b": "2015-07-29",
44
47
  "backdrop": "2022-03-14",
45
48
  "background": "2015-07-29",
@@ -88,6 +91,7 @@
88
91
  "change-event": "2015-07-29",
89
92
  "channel-messaging": "2015-09-22",
90
93
  "charset": "2015-07-29",
94
+ "check-visibility": "2024-03-05",
91
95
  "cite": "2015-07-29",
92
96
  "class-syntax": "2016-03-08",
93
97
  "clip-path": "2021-01-21",
@@ -137,6 +141,7 @@
137
141
  "data-urls": "2015-07-29",
138
142
  "dataset": "2015-07-29",
139
143
  "date": "2015-07-29",
144
+ "declarative-shadow-dom": "2024-02-20",
140
145
  "dedicated-workers": "2015-07-29",
141
146
  "default": "2020-01-15",
142
147
  "del": "2015-07-29",
@@ -175,6 +180,7 @@
175
180
  "ext-blend-minmax": "2018-04-30",
176
181
  "ext-color-buffer-float": "2021-09-20",
177
182
  "ext-color-buffer-half-float": "2020-09-16",
183
+ "ext-shader-texture-lod": "2021-09-02",
178
184
  "ext-srgb": "2020-02-07",
179
185
  "ext-texture-filter-anisotropic": "2016-06-07",
180
186
  "fetch": "2017-03-27",
@@ -274,7 +280,7 @@
274
280
  "input": "2015-07-29",
275
281
  "input-button": "2015-07-29",
276
282
  "input-checkbox": "2015-07-29",
277
- "input-date-time": "2021-04-26",
283
+ "input-date-time": "2021-10-05",
278
284
  "input-email-tel-url": "2015-07-29",
279
285
  "input-event": "2020-01-15",
280
286
  "input-file": "2015-07-29",
@@ -387,6 +393,7 @@
387
393
  "oes-texture-float": "2015-07-29",
388
394
  "oes-texture-float-linear": "2015-07-29",
389
395
  "oes-texture-half-float": "2016-08-02",
396
+ "oes-texture-half-float-linear": "2016-08-02",
390
397
  "oes-vertex-array-object": "2018-04-30",
391
398
  "offline-audio-context": "2021-04-26",
392
399
  "offscreen-canvas": "2023-03-27",
@@ -434,6 +441,7 @@
434
441
  "promise-allsettled": "2020-07-28",
435
442
  "promise-any": "2020-09-16",
436
443
  "promise-finally": "2018-10-02",
444
+ "promise-withresolvers": "2024-03-05",
437
445
  "proxy-reflect": "2016-09-20",
438
446
  "push": "2023-03-27",
439
447
  "q": "2015-07-29",
@@ -441,6 +449,7 @@
441
449
  "queuemicrotask": "2020-07-28",
442
450
  "quotes": "2021-04-26",
443
451
  "read-write-pseudos": "2020-07-28",
452
+ "rect-xywh": "2024-01-23",
444
453
  "referrer-policy": "2021-09-20",
445
454
  "regexp": "2015-07-29",
446
455
  "relative-positioning": "2015-07-29",
@@ -557,6 +566,7 @@
557
566
  "title": "2015-07-29",
558
567
  "title-attr": "2015-07-29",
559
568
  "touch-action": "2019-09-19",
569
+ "transferable-arraybuffer": "2024-03-05",
560
570
  "transforms2d": "2015-09-30",
561
571
  "transforms3d": "2022-03-14",
562
572
  "transitions": "2015-09-30",
@@ -588,6 +598,7 @@
588
598
  "wasm-bigint": "2021-04-26",
589
599
  "wasm-bulk-memory": "2021-10-25",
590
600
  "wasm-exception-handling": "2022-05-03",
601
+ "wasm-extended-constant-expressions": "2024-03-05",
591
602
  "wasm-multi-value": "2020-10-20",
592
603
  "wasm-mutable-globals": "2020-03-24",
593
604
  "wasm-non-trapping-float-to-int": "2021-10-25",
@@ -601,7 +612,7 @@
601
612
  "weakset": "2015-09-30",
602
613
  "web-animations": "2020-09-16",
603
614
  "web-audio": "2021-04-26",
604
- "web-cryptography": "2015-07-29",
615
+ "web-cryptography": "2017-09-19",
605
616
  "web-locks": "2022-03-14",
606
617
  "webauthn": "2021-09-07",
607
618
  "webauthn-public-key-easy": "2023-10-24",
@@ -634,7 +645,6 @@
634
645
  "xhr": "2015-07-29",
635
646
  "xml-serializer": "2015-07-29",
636
647
  "xpath": "2015-07-29",
637
- "xslt": "2015-07-29",
638
648
  "z-index": "2015-07-29"
639
649
  },
640
650
  "low": {
@@ -643,17 +653,16 @@
643
653
  "abs-sign": "2025-06-26",
644
654
  "active-view-transition": "2026-01-13",
645
655
  "align-content-block": "2024-04-16",
656
+ "alpha": "2026-09-14",
646
657
  "alt-text-generated-content": "2024-07-09",
647
- "array-fromasync": "2024-01-25",
648
- "array-group": "2024-03-05",
649
658
  "async-clipboard": "2024-06-11",
659
+ "async-iterable-streams": "2026-09-14",
650
660
  "atomics-pause": "2025-04-01",
651
661
  "atomics-wait-async": "2025-11-11",
652
- "avif": "2024-01-25",
662
+ "autocorrect": "2026-09-11",
653
663
  "backdrop-filter": "2024-09-16",
654
664
  "baseline-shift": "2026-03-24",
655
665
  "canvas-2d-willreadfrequently": "2024-09-16",
656
- "check-visibility": "2024-03-05",
657
666
  "clipboard-supports": "2025-03-31",
658
667
  "composed-ranges": "2025-08-19",
659
668
  "container-style-queries": "2026-05-19",
@@ -662,11 +671,11 @@
662
671
  "contrast-color": "2026-04-10",
663
672
  "cookie-enabled": "2024-09-16",
664
673
  "crisp-edges": "2026-05-07",
665
- "declarative-shadow-dom": "2024-02-20",
666
674
  "details-content": "2025-09-16",
667
675
  "details-name": "2024-09-03",
668
676
  "document-caretpositionfrompoint": "2025-12-12",
669
677
  "event-timing": "2025-12-12",
678
+ "ext-texture-compression-rgtc": "2025-05-12",
670
679
  "fetch-priority": "2024-10-29",
671
680
  "field-sizing": "2026-06-16",
672
681
  "float16array": "2025-04-04",
@@ -679,6 +688,7 @@
679
688
  "http3": "2024-09-16",
680
689
  "input-file-webkitdirectory": "2025-08-19",
681
690
  "intl-duration-format": "2025-03-04",
691
+ "intl-locale-info": "2026-07-21",
682
692
  "intl-segmenter": "2024-04-16",
683
693
  "invoker-commands": "2025-12-12",
684
694
  "iterator-concat": "2026-03-24",
@@ -689,21 +699,22 @@
689
699
  "json-raw": "2025-03-31",
690
700
  "largest-contentful-paint": "2025-12-12",
691
701
  "light-dark": "2024-05-13",
702
+ "light-dark-image": "2026-09-14",
692
703
  "link-rel-dns-prefetch": "2025-09-15",
693
704
  "math-sum-precise": "2026-04-10",
694
705
  "navigation": "2026-01-13",
695
706
  "open-pseudo": "2026-05-11",
707
+ "overflow-anchor": "2026-09-14",
696
708
  "page-setup": "2024-12-11",
697
709
  "paint-order": "2024-03-22",
698
710
  "parse-html-unsafe": "2025-09-15",
699
711
  "popover": "2025-01-27",
700
712
  "print-color-adjust": "2025-05-01",
713
+ "progress-function": "2026-09-01",
701
714
  "promise-try": "2025-01-07",
702
- "promise-withresolvers": "2024-03-05",
703
715
  "rcap": "2026-01-13",
704
716
  "rch": "2026-01-13",
705
717
  "readable-byte-streams": "2026-03-24",
706
- "rect-xywh": "2024-01-23",
707
718
  "regexp-escape": "2025-05-01",
708
719
  "registered-custom-properties": "2024-07-09",
709
720
  "relative-color": "2024-09-16",
@@ -717,7 +728,7 @@
717
728
  "round-mod-rem": "2024-05-17",
718
729
  "ruby-align": "2024-12-11",
719
730
  "ruby-position": "2024-12-11",
720
- "scope": "2025-12-12",
731
+ "scope": "2026-03-24",
721
732
  "screen-wake-lock": "2025-03-31",
722
733
  "scroll-to-text-fragment": "2024-10-01",
723
734
  "scrollbar-color": "2025-12-12",
@@ -727,6 +738,7 @@
727
738
  "set-methods": "2024-06-11",
728
739
  "shape-function": "2026-02-24",
729
740
  "shared-workers": "2026-05-05",
741
+ "sibling-count": "2026-08-18",
730
742
  "starting-style": "2024-08-06",
731
743
  "state": "2024-05-17",
732
744
  "target-text": "2024-12-11",
@@ -737,7 +749,7 @@
737
749
  "text-wrap": "2024-10-17",
738
750
  "text-wrap-balance": "2024-05-13",
739
751
  "toggleevent-source": "2026-05-11",
740
- "transferable-arraybuffer": "2024-03-05",
752
+ "top-level-await": "2026-09-14",
741
753
  "transform-box": "2024-04-16",
742
754
  "transition-behavior": "2024-08-06",
743
755
  "trusted-types": "2026-02-24",
@@ -747,8 +759,9 @@
747
759
  "view-transition-class": "2025-10-14",
748
760
  "view-transitions": "2025-10-14",
749
761
  "wasm-branch-hinting": "2026-02-24",
750
- "wasm-extended-constant-expressions": "2024-03-05",
762
+ "wasm-exnref-exceptions": "2025-05-29",
751
763
  "wasm-garbage-collection": "2024-12-11",
764
+ "wasm-jspi": "2026-09-14",
752
765
  "wasm-tail-call-optimization": "2024-12-11",
753
766
  "wasm-typed-fun-refs": "2024-09-16",
754
767
  "webgl-color-management": "2024-10-29",
@@ -768,6 +781,8 @@
768
781
  "alternative-style-sheets",
769
782
  "ambient-light",
770
783
  "anchor-positioning",
784
+ "anchor-positioning-animations",
785
+ "anchor-positioning-position-visibility-plurals",
771
786
  "anchor-positioning-transforms",
772
787
  "app-file-handlers",
773
788
  "app-launch-handler",
@@ -777,7 +792,6 @@
777
792
  "app-shortcuts",
778
793
  "arguments-callee",
779
794
  "arianotify",
780
- "async-iterable-streams",
781
795
  "attr",
782
796
  "attribution-reporting",
783
797
  "audio-session",
@@ -785,7 +799,6 @@
785
799
  "audiolistener",
786
800
  "audiolistener-setposition-setorientation",
787
801
  "autocapitalize",
788
- "autocorrect",
789
802
  "autofill",
790
803
  "background-attachment",
791
804
  "background-clip-border-area",
@@ -827,13 +840,16 @@
827
840
  "column-pseudo",
828
841
  "compression-dictionary-transport",
829
842
  "compute-pressure",
843
+ "connection-allowlists",
830
844
  "contact-picker",
831
845
  "container-anchor-position-queries",
832
846
  "container-scroll-state-queries",
847
+ "container-timing",
833
848
  "content-index",
834
849
  "context-fill-stroke",
835
850
  "controls-list",
836
851
  "cookie-store",
852
+ "cookie-store-get-metadata",
837
853
  "corner-shape",
838
854
  "counter-reset-reversed",
839
855
  "cross-document-view-transitions",
@@ -878,9 +894,7 @@
878
894
  "ext-disjoint-timer-query",
879
895
  "ext-float-blend",
880
896
  "ext-frag-depth",
881
- "ext-shader-texture-lod",
882
897
  "ext-texture-compression-bptc",
883
- "ext-texture-compression-rgtc",
884
898
  "ext-texture-norm16",
885
899
  "external",
886
900
  "eyedropper",
@@ -896,6 +910,7 @@
896
910
  "file-system-access",
897
911
  "filter-function",
898
912
  "fit-content-function",
913
+ "flexbox-flex-wrap-balance",
899
914
  "focusgroup",
900
915
  "font-family-ui",
901
916
  "font-language-override",
@@ -905,6 +920,7 @@
905
920
  "font-variant-emoji",
906
921
  "font-variant-position",
907
922
  "font-width",
923
+ "frame-sizing",
908
924
  "fullscreen",
909
925
  "function",
910
926
  "functions-caller-arguments",
@@ -913,10 +929,12 @@
913
929
  "gamepad-vr",
914
930
  "gap-decorations",
915
931
  "geolocation-element",
932
+ "geolocation-element-initialpermissionstatus",
916
933
  "getallrecords",
917
934
  "getboxquads",
918
935
  "glyph-orientation-vertical",
919
936
  "gpc",
937
+ "grid-lanes",
920
938
  "gyroscope",
921
939
  "hanging-punctuation",
922
940
  "has-slotted",
@@ -926,6 +944,9 @@
926
944
  "highlightsfrompoint",
927
945
  "host-context",
928
946
  "html-media-capture",
947
+ "html-processing-instructions",
948
+ "html-setters",
949
+ "html-streaming-setters",
929
950
  "html-wrapper-methods",
930
951
  "hyphenate-limit-chars",
931
952
  "idle-detection",
@@ -934,17 +955,21 @@
934
955
  "image-function",
935
956
  "ime-mode",
936
957
  "import-assertions",
958
+ "import-defer",
959
+ "import-maps-multiple",
937
960
  "initial-letter",
938
961
  "ink",
939
962
  "input-color",
940
963
  "input-color-alpha",
964
+ "input-date-time-month",
965
+ "input-date-time-week",
941
966
  "insertable-streams",
942
967
  "install",
968
+ "interaction-contentful-paint",
943
969
  "interactivity",
944
970
  "interest-invokers",
945
971
  "interpolate-size",
946
972
  "intersection-observer-v2",
947
- "intl-locale-info",
948
973
  "inverted-colors",
949
974
  "is-error",
950
975
  "is-input-pending",
@@ -956,8 +981,8 @@
956
981
  "languagedetector",
957
982
  "languagemodel",
958
983
  "layout-instability",
959
- "light-dark-image",
960
984
  "line-clamp",
985
+ "link-parameters",
961
986
  "link-rel-expect",
962
987
  "link-rel-prefetch",
963
988
  "loading-lazy-media",
@@ -972,7 +997,6 @@
972
997
  "margin-trim",
973
998
  "marker",
974
999
  "mask-border",
975
- "masonry",
976
1000
  "mathml-full",
977
1001
  "measure-memory",
978
1002
  "media-pseudos",
@@ -994,11 +1018,9 @@
994
1018
  "numeric-factory-functions",
995
1019
  "object-view-box",
996
1020
  "observable",
997
- "oes-texture-half-float-linear",
998
1021
  "opaquerange",
999
1022
  "orientation-sensor",
1000
1023
  "origin",
1001
- "overflow-anchor",
1002
1024
  "overflow-clip-margin",
1003
1025
  "overflow-overlay",
1004
1026
  "overlay",
@@ -1029,7 +1051,6 @@
1029
1051
  "private-click-measurement",
1030
1052
  "private-network-access",
1031
1053
  "profiler",
1032
- "progress-function",
1033
1054
  "protected-audience",
1034
1055
  "proto",
1035
1056
  "random-function",
@@ -1066,6 +1087,7 @@
1066
1087
  "scroll-into-view-container",
1067
1088
  "scroll-marker-targets",
1068
1089
  "scroll-markers",
1090
+ "scroll-promises",
1069
1091
  "scroll-snap-events",
1070
1092
  "scroll-target-group",
1071
1093
  "secure-payment-confirmation",
@@ -1076,12 +1098,13 @@
1076
1098
  "share",
1077
1099
  "shared-storage",
1078
1100
  "shared-storage-locks",
1101
+ "shared-workers-extended-lifetime",
1079
1102
  "show-picker-input",
1080
1103
  "show-picker-select",
1081
- "sibling-count",
1082
1104
  "signature-based-resource-integrity",
1083
1105
  "sizes-auto",
1084
1106
  "smooth",
1107
+ "soft-navigations",
1085
1108
  "speak",
1086
1109
  "speak-as",
1087
1110
  "speculation-rules",
@@ -1097,6 +1120,7 @@
1097
1120
  "switch-control",
1098
1121
  "table-discouraged",
1099
1122
  "target-within",
1123
+ "template-for",
1100
1124
  "temporal",
1101
1125
  "text-autospace",
1102
1126
  "text-box",
@@ -1104,11 +1128,11 @@
1104
1128
  "text-decoration-selection",
1105
1129
  "text-fit",
1106
1130
  "text-justify",
1131
+ "text-modules",
1107
1132
  "text-size-adjust",
1108
1133
  "text-spacing-trim",
1109
1134
  "text-wrap-pretty",
1110
1135
  "time-relative-selectors",
1111
- "top-level-await",
1112
1136
  "topics",
1113
1137
  "touch-events",
1114
1138
  "transferable-streams",
@@ -1127,8 +1151,6 @@
1127
1151
  "virtual-keyboard",
1128
1152
  "virtual-pressure-sources",
1129
1153
  "virtual-sensors",
1130
- "wasm-exnref-exceptions",
1131
- "wasm-jspi",
1132
1154
  "wasm-memory64",
1133
1155
  "wasm-multi-memory",
1134
1156
  "wasm-simd-relaxed",
@@ -1172,11 +1194,13 @@
1172
1194
  "wheel-events",
1173
1195
  "widows-orphans",
1174
1196
  "window-controls-overlay",
1197
+ "window-drag",
1175
1198
  "window-management",
1176
1199
  "with",
1177
1200
  "word-break-auto-phrase",
1178
1201
  "word-break-break-word",
1179
1202
  "writing-mode-svg-values",
1180
- "writingsuggestions"
1203
+ "writingsuggestions",
1204
+ "xslt"
1181
1205
  ]
1182
1206
  }
@@ -1,3 +1,3 @@
1
1
  {
2
- "date": "2026-07-15"
2
+ "date": "2026-09-17"
3
3
  }
@@ -33,7 +33,7 @@ const deprecationsStr_ = i18n.createIcuMessageFn(
33
33
  */
34
34
  function getIssueDetailDescription(issueDetails) {
35
35
  let message;
36
- const type = /** @type {keyof DEPRECATIONS_METADATA} */ (issueDetails.type);
36
+ const type = /** @type {keyof typeof DEPRECATIONS_METADATA} */ (issueDetails.type);
37
37
  const maybeEnglishMessage = DeprecationUIStrings[type];
38
38
  if (maybeEnglishMessage) {
39
39
  message = deprecationsStr_(maybeEnglishMessage);
@@ -22,9 +22,6 @@ export type ParseSelector<T extends string> = import("typed-query-selector/parse
22
22
  * @fileoverview
23
23
  * Helper functions that are passed by `toString()` by Driver to be evaluated in target page.
24
24
  *
25
- * Every function in this module only runs in the browser, so it is ignored from
26
- * the c8 code coverage tool. See c8.sh
27
- *
28
25
  * Important: this module should only be imported like this:
29
26
  * const pageFunctions = require('...');
30
27
  * Never like this:
@@ -12,9 +12,6 @@ import {Util} from '../../shared/util.js';
12
12
  * @fileoverview
13
13
  * Helper functions that are passed by `toString()` by Driver to be evaluated in target page.
14
14
  *
15
- * Every function in this module only runs in the browser, so it is ignored from
16
- * the c8 code coverage tool. See c8.sh
17
- *
18
15
  * Important: this module should only be imported like this:
19
16
  * const pageFunctions = require('...');
20
17
  * Never like this:
@@ -20,14 +20,12 @@ function rectContainsPoint(rect, {x, y}) {
20
20
  */
21
21
  // We sometimes run this as a part of a gatherer script injected into the page, so prevent
22
22
  // renaming the function for code coverage.
23
- /* c8 ignore start */
24
23
  function rectContains(rect1, rect2) {
25
24
  return rect2.top >= rect1.top &&
26
25
  rect2.right <= rect1.right &&
27
26
  rect2.bottom <= rect1.bottom &&
28
27
  rect2.left >= rect1.left;
29
28
  }
30
- /* c8 ignore stop */
31
29
 
32
30
  /**
33
31
  * @param {LH.Artifacts.Rect[]} rects
@@ -63,14 +61,12 @@ function filterOutRectsContainedByOthers(rects) {
63
61
  /**
64
62
  * @param {LH.Artifacts.Rect} rect
65
63
  */
66
- /* c8 ignore start */
67
64
  function getRectCenterPoint(rect) {
68
65
  return {
69
66
  x: rect.left + rect.width / 2,
70
67
  y: rect.top + rect.height / 2,
71
68
  };
72
69
  }
73
- /* c8 ignore stop */
74
70
 
75
71
  /**
76
72
  * @param {LH.Artifacts.Rect} rectA
@@ -195,16 +191,13 @@ function getRectAtCenter(rect, centerRectSize) {
195
191
  /**
196
192
  * @param {LH.Artifacts.Rect} rect
197
193
  */
198
- /* c8 ignore start */
199
194
  function getRectArea(rect) {
200
195
  return rect.width * rect.height;
201
196
  }
202
- /* c8 ignore stop */
203
197
 
204
198
  /**
205
199
  * @param {LH.Artifacts.Rect[]} rects
206
200
  */
207
- /* c8 ignore start */
208
201
  function getLargestRect(rects) {
209
202
  let largestRect = rects[0];
210
203
  for (const rect of rects) {
@@ -214,7 +207,6 @@ function getLargestRect(rects) {
214
207
  }
215
208
  return largestRect;
216
209
  }
217
- /* c8 ignore stop */
218
210
 
219
211
  /**
220
212
  *
package/core/runner.js CHANGED
@@ -23,6 +23,7 @@ import {lighthouseVersion} from '../shared/root.js';
23
23
  import {getModuleDirectory} from '../shared/esm-utils.js';
24
24
  import {EntityClassification} from './computed/entity-classification.js';
25
25
  import UrlUtils from './lib/url-utils.js';
26
+ import {Util} from '../shared/util.js';
26
27
 
27
28
  const moduleDir = getModuleDirectory(import.meta);
28
29
 
@@ -70,10 +71,30 @@ class Runner {
70
71
  // Use version from gathering stage.
71
72
  // If accessibility gatherer didn't run or errored, it won't be in credits.
72
73
  const axeVersion = artifacts.Accessibility?.version;
74
+ /** @type {Record<string, string|undefined>} */
73
75
  const credits = {
74
76
  'axe-core': axeVersion,
75
77
  };
76
78
 
79
+ // Add plugins to the credits.
80
+ //
81
+ // This won't work in bundled environments, but we currently don't ship plugins
82
+ // in DevTools or PSI. So until we do, don't bother figuring out how to support
83
+ // bundled code.
84
+ if (resolvedConfig.categories) {
85
+ for (const categoryId of Object.keys(resolvedConfig.categories)) {
86
+ const isPlugin = Util.isPluginCategory(categoryId);
87
+ if (!isPlugin) continue;
88
+
89
+ try {
90
+ const require = (await import('module')).createRequire(import.meta.url);
91
+ credits[categoryId] = require(`${categoryId}/package.json`).version;
92
+ } catch {
93
+ // Ignore if we can't find it.
94
+ }
95
+ }
96
+ }
97
+
77
98
  /** @type {Record<string, LH.RawIcu<LH.Result.Category>>} */
78
99
  let categories = {};
79
100
  if (resolvedConfig.categories) {
@@ -13,6 +13,9 @@ export class UserFlow {
13
13
  _gatherSteps: LH.UserFlow.GatherStep[];
14
14
  /** @type {GatherStepRunnerOptions} */
15
15
  _gatherStepRunnerOptions: GatherStepRunnerOptions;
16
+ /** @type {AbortController} */
17
+ _controller: AbortController;
18
+ dispose(): void;
16
19
  /**
17
20
  * @param {LH.UserFlow.StepFlags|undefined} flags
18
21
  * @return {LH.UserFlow.StepFlags|undefined}
package/core/user-flow.js CHANGED
@@ -66,6 +66,16 @@ class UserFlow {
66
66
  this._gatherSteps = [];
67
67
  /** @type {GatherStepRunnerOptions} */
68
68
  this._gatherStepRunnerOptions = new WeakMap();
69
+ /** @type {AbortController} */
70
+ this._controller = new AbortController();
71
+
72
+ page.on('close', () => {
73
+ this.dispose();
74
+ });
75
+ }
76
+
77
+ dispose() {
78
+ this._controller.abort();
69
79
  }
70
80
 
71
81
  /**
@@ -131,6 +141,7 @@ class UserFlow {
131
141
  const gatherResult = await navigationGather(this._page, requestor, {
132
142
  config: this._options?.config,
133
143
  flags: nextFlags,
144
+ signal: this._controller.signal,
134
145
  });
135
146
 
136
147
  this._addGatherStep(gatherResult, nextFlags);
@@ -162,6 +173,7 @@ class UserFlow {
162
173
  () => new Promise(continueNavigation => completeSetup(continueNavigation)),
163
174
  stepOptions
164
175
  ).catch(err => {
176
+ if (this._controller.signal.aborted) return;
165
177
  if (this.currentNavigation) {
166
178
  // If the navigation already started, re-throw the error so it is emitted when `navigationResultPromise` is awaited.
167
179
  throw err;