lighthouse 13.2.0 → 13.4.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 (212) hide show
  1. package/cli/cli-flags.d.ts +8 -9
  2. package/cli/cli-flags.js +2 -2
  3. package/cli/test/smokehouse/config/exclusions.js +2 -0
  4. package/cli/test/smokehouse/lighthouse-runners/bundle.js +7 -3
  5. package/cli/test/smokehouse/lighthouse-runners/cli.js +5 -1
  6. package/cli/test/smokehouse/lighthouse-runners/devtools-mcp.js +7 -3
  7. package/cli/test/smokehouse/lighthouse-runners/devtools.js +4 -1
  8. package/cli/test/smokehouse/smokehouse.js +7 -2
  9. package/cli/test/smokehouse/version-check.d.ts +1 -1
  10. package/core/audits/accessibility/accesskeys.js +1 -1
  11. package/core/audits/accessibility/aria-allowed-attr.js +1 -1
  12. package/core/audits/accessibility/aria-allowed-role.js +1 -1
  13. package/core/audits/accessibility/aria-command-name.js +1 -1
  14. package/core/audits/accessibility/aria-conditional-attr.js +1 -1
  15. package/core/audits/accessibility/aria-deprecated-role.js +1 -1
  16. package/core/audits/accessibility/aria-dialog-name.js +1 -1
  17. package/core/audits/accessibility/aria-hidden-body.js +1 -1
  18. package/core/audits/accessibility/aria-hidden-focus.js +1 -1
  19. package/core/audits/accessibility/aria-input-field-name.js +1 -1
  20. package/core/audits/accessibility/aria-meter-name.js +1 -1
  21. package/core/audits/accessibility/aria-progressbar-name.js +1 -1
  22. package/core/audits/accessibility/aria-prohibited-attr.js +1 -1
  23. package/core/audits/accessibility/aria-required-attr.js +1 -1
  24. package/core/audits/accessibility/aria-required-children.js +1 -1
  25. package/core/audits/accessibility/aria-required-parent.js +1 -1
  26. package/core/audits/accessibility/aria-roles.js +1 -1
  27. package/core/audits/accessibility/aria-text.js +1 -1
  28. package/core/audits/accessibility/aria-toggle-field-name.js +1 -1
  29. package/core/audits/accessibility/aria-tooltip-name.js +1 -1
  30. package/core/audits/accessibility/aria-treeitem-name.js +1 -1
  31. package/core/audits/accessibility/aria-valid-attr-value.js +1 -1
  32. package/core/audits/accessibility/aria-valid-attr.js +1 -1
  33. package/core/audits/accessibility/autocomplete-valid.js +1 -1
  34. package/core/audits/accessibility/button-name.js +1 -1
  35. package/core/audits/accessibility/bypass.js +1 -1
  36. package/core/audits/accessibility/color-contrast.js +1 -1
  37. package/core/audits/accessibility/definition-list.js +1 -1
  38. package/core/audits/accessibility/dlitem.js +1 -1
  39. package/core/audits/accessibility/document-title.js +1 -1
  40. package/core/audits/accessibility/duplicate-id-aria.js +1 -1
  41. package/core/audits/accessibility/empty-heading.js +1 -1
  42. package/core/audits/accessibility/form-field-multiple-labels.js +1 -1
  43. package/core/audits/accessibility/frame-title.js +1 -1
  44. package/core/audits/accessibility/heading-order.js +1 -1
  45. package/core/audits/accessibility/html-has-lang.js +1 -1
  46. package/core/audits/accessibility/html-lang-valid.js +1 -1
  47. package/core/audits/accessibility/html-xml-lang-mismatch.js +1 -1
  48. package/core/audits/accessibility/identical-links-same-purpose.js +1 -1
  49. package/core/audits/accessibility/image-alt.js +1 -1
  50. package/core/audits/accessibility/image-redundant-alt.js +1 -1
  51. package/core/audits/accessibility/input-button-name.js +1 -1
  52. package/core/audits/accessibility/input-image-alt.js +1 -1
  53. package/core/audits/accessibility/label-content-name-mismatch.js +1 -1
  54. package/core/audits/accessibility/label.js +1 -1
  55. package/core/audits/accessibility/landmark-one-main.js +1 -1
  56. package/core/audits/accessibility/link-in-text-block.js +1 -1
  57. package/core/audits/accessibility/link-name.js +1 -1
  58. package/core/audits/accessibility/list.js +1 -1
  59. package/core/audits/accessibility/listitem.js +1 -1
  60. package/core/audits/accessibility/meta-refresh.js +1 -1
  61. package/core/audits/accessibility/meta-viewport.js +1 -1
  62. package/core/audits/accessibility/object-alt.js +1 -1
  63. package/core/audits/accessibility/presentation-role-conflict.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/svg-img-alt.js +1 -1
  67. package/core/audits/accessibility/tabindex.js +1 -1
  68. package/core/audits/accessibility/table-duplicate-name.js +1 -1
  69. package/core/audits/accessibility/table-fake-caption.js +1 -1
  70. package/core/audits/accessibility/target-size.js +1 -1
  71. package/core/audits/accessibility/td-has-header.js +1 -1
  72. package/core/audits/accessibility/td-headers-attr.js +1 -1
  73. package/core/audits/accessibility/th-has-data-cells.js +1 -1
  74. package/core/audits/accessibility/valid-lang.js +1 -1
  75. package/core/audits/accessibility/video-caption.js +1 -1
  76. package/core/audits/agentic/agent-accessibility-tree.js +1 -1
  77. package/core/audits/agentic/llms-txt.js +10 -10
  78. package/core/audits/baseline.js +10 -12
  79. package/core/audits/dobetterweb/geolocation-on-start.js +2 -1
  80. package/core/audits/network-requests.js +2 -0
  81. package/core/audits/seo/canonical.js +19 -7
  82. package/core/audits/webmcp-form-coverage.js +2 -2
  83. package/core/audits/webmcp-registered-tools.js +1 -1
  84. package/core/audits/webmcp-schema-validity.js +1 -1
  85. package/core/computed/js-bundles.d.ts +1 -1
  86. package/core/computed/load-simulator.d.ts +1 -1
  87. package/core/computed/metrics/first-contentful-paint-all-frames.d.ts +1 -1
  88. package/core/computed/metrics/first-contentful-paint.d.ts +1 -1
  89. package/core/computed/metrics/interactive.d.ts +1 -1
  90. package/core/computed/metrics/lantern-metric.d.ts +6 -6
  91. package/core/computed/metrics/largest-contentful-paint-all-frames.d.ts +1 -1
  92. package/core/computed/metrics/largest-contentful-paint.d.ts +1 -1
  93. package/core/computed/metrics/max-potential-fid.d.ts +1 -1
  94. package/core/computed/metrics/speed-index.d.ts +1 -1
  95. package/core/computed/metrics/time-to-first-byte.d.ts +1 -1
  96. package/core/computed/metrics/total-blocking-time.d.ts +1 -1
  97. package/core/computed/module-duplication.d.ts +1 -1
  98. package/core/computed/page-dependency-graph.d.ts +1 -1
  99. package/core/computed/unused-css.d.ts +1 -1
  100. package/core/config/agentic-browsing-config.d.ts +1 -0
  101. package/core/config/agentic-browsing-config.js +3 -2
  102. package/core/config/config-helpers.d.ts +1 -0
  103. package/core/config/config-helpers.js +1 -1
  104. package/core/config/config-plugin.d.ts +1 -0
  105. package/core/config/config-plugin.js +1 -0
  106. package/core/config/config.d.ts +1 -0
  107. package/core/config/config.js +1 -0
  108. package/core/config/constants.d.ts +1 -0
  109. package/core/config/constants.js +1 -0
  110. package/core/config/default-config.js +45 -0
  111. package/core/config/experimental-config.d.ts +1 -9
  112. package/core/config/experimental-config.js +2 -0
  113. package/core/config/filters.d.ts +1 -0
  114. package/core/config/filters.js +1 -0
  115. package/core/config/full-config.d.ts +1 -5
  116. package/core/config/full-config.js +2 -0
  117. package/core/config/lr-desktop-config.d.ts +1 -0
  118. package/core/config/lr-desktop-config.js +1 -0
  119. package/core/config/lr-mobile-config.d.ts +1 -5
  120. package/core/config/lr-mobile-config.js +2 -0
  121. package/core/config/perf-config.d.ts +1 -5
  122. package/core/config/perf-config.js +2 -0
  123. package/core/config/validation.d.ts +1 -0
  124. package/core/config/validation.js +1 -0
  125. package/core/gather/driver/execution-context.d.ts +23 -0
  126. package/core/gather/driver/execution-context.js +86 -1
  127. package/core/gather/driver/storage.js +13 -0
  128. package/core/gather/driver.d.ts +1 -1
  129. package/core/gather/gatherers/accessibility.js +1 -0
  130. package/core/gather/gatherers/trace-elements.d.ts +4 -1
  131. package/core/gather/gatherers/trace-elements.js +24 -28
  132. package/core/gather/gatherers/webmcp-schema.js +9 -16
  133. package/core/gather/gatherers/webmcp.d.ts +5 -0
  134. package/core/gather/gatherers/webmcp.js +34 -27
  135. package/core/index.d.ts +0 -1
  136. package/core/index.js +0 -1
  137. package/core/lib/baseline/web-features-data.json +1177 -0
  138. package/core/lib/baseline/web-features-metadata.json +1 -1
  139. package/core/lib/deprecations-strings.d.ts +45 -23
  140. package/core/lib/deprecations-strings.js +23 -0
  141. package/core/lib/script-helpers.js +13 -1
  142. package/core/scoring.d.ts +58 -58
  143. package/dist/report/bundle.esm.js +4 -7
  144. package/dist/report/flow.js +6 -9
  145. package/dist/report/standalone.js +20 -12
  146. package/flow-report/types/flow-report.d.ts +2 -2
  147. package/package.json +23 -26
  148. package/report/assets/styles.css +1 -4
  149. package/report/renderer/components.js +1 -1
  150. package/report/renderer/details-renderer.d.ts +6 -1
  151. package/report/renderer/details-renderer.js +11 -3
  152. package/report/renderer/explodey-gauge.js +9 -7
  153. package/report/renderer/i18n-formatter.d.ts +1 -1
  154. package/report/renderer/logger.js +18 -4
  155. package/report/renderer/text-encoding.js +1 -1
  156. package/report/types/html-renderer.d.ts +2 -2
  157. package/shared/localization/locales/ar-XB.json +290 -65
  158. package/shared/localization/locales/ar.json +290 -65
  159. package/shared/localization/locales/bg.json +290 -65
  160. package/shared/localization/locales/ca.json +295 -70
  161. package/shared/localization/locales/cs.json +290 -65
  162. package/shared/localization/locales/da.json +294 -69
  163. package/shared/localization/locales/de.json +295 -70
  164. package/shared/localization/locales/el.json +290 -65
  165. package/shared/localization/locales/en-GB.json +290 -65
  166. package/shared/localization/locales/en-US.json +105 -75
  167. package/shared/localization/locales/en-XA.json +253 -64
  168. package/shared/localization/locales/en-XL.json +105 -75
  169. package/shared/localization/locales/es-419.json +290 -65
  170. package/shared/localization/locales/es.json +298 -73
  171. package/shared/localization/locales/fi.json +290 -65
  172. package/shared/localization/locales/fil.json +290 -65
  173. package/shared/localization/locales/fr.json +294 -69
  174. package/shared/localization/locales/he.json +293 -68
  175. package/shared/localization/locales/hi.json +291 -66
  176. package/shared/localization/locales/hr.json +290 -65
  177. package/shared/localization/locales/hu.json +290 -65
  178. package/shared/localization/locales/id.json +290 -65
  179. package/shared/localization/locales/it.json +294 -69
  180. package/shared/localization/locales/ja.json +290 -65
  181. package/shared/localization/locales/ko.json +290 -65
  182. package/shared/localization/locales/lt.json +290 -65
  183. package/shared/localization/locales/lv.json +290 -65
  184. package/shared/localization/locales/nl.json +290 -65
  185. package/shared/localization/locales/no.json +290 -65
  186. package/shared/localization/locales/pl.json +290 -65
  187. package/shared/localization/locales/pt-PT.json +291 -66
  188. package/shared/localization/locales/pt.json +290 -65
  189. package/shared/localization/locales/ro.json +290 -65
  190. package/shared/localization/locales/ru.json +301 -76
  191. package/shared/localization/locales/sk.json +291 -66
  192. package/shared/localization/locales/sl.json +290 -65
  193. package/shared/localization/locales/sr-Latn.json +290 -65
  194. package/shared/localization/locales/sr.json +290 -65
  195. package/shared/localization/locales/sv.json +297 -72
  196. package/shared/localization/locales/ta.json +291 -66
  197. package/shared/localization/locales/te.json +293 -68
  198. package/shared/localization/locales/th.json +291 -66
  199. package/shared/localization/locales/tr.json +290 -65
  200. package/shared/localization/locales/uk.json +290 -65
  201. package/shared/localization/locales/vi.json +291 -66
  202. package/shared/localization/locales/zh-HK.json +292 -67
  203. package/shared/localization/locales/zh-TW.json +291 -66
  204. package/shared/localization/locales/zh.json +291 -66
  205. package/shared/types/shared.d.ts +1 -1
  206. package/tsconfig-base.json +2 -1
  207. package/tsconfig.json +2 -0
  208. package/types/artifacts.d.ts +1 -1
  209. package/types/internal/rxjs.d.ts +1 -1
  210. package/types/internal/smokehouse.d.ts +8 -2
  211. package/types.d.ts +2 -0
  212. package/types.js +11 -0
@@ -21,7 +21,7 @@ const UIStrings = {
21
21
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
22
22
  description: 'Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) ' +
23
23
  'helps screen readers announce text properly. ' +
24
- '[Learn how to use the `lang` attribute](https://dequeuniversity.com/rules/axe/4.11/html-lang-valid).',
24
+ '[Learn how to use the `lang` attribute](https://dequeuniversity.com/rules/axe/4.12/html-lang-valid).',
25
25
  };
26
26
 
27
27
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -23,7 +23,7 @@ const UIStrings = {
23
23
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
24
24
  description: 'If the webpage does not specify a consistent language, then the screen ' +
25
25
  'reader might not announce the page\'s text correctly. ' +
26
- '[Learn more about the `lang` attribute](https://dequeuniversity.com/rules/axe/4.11/html-xml-lang-mismatch).',
26
+ '[Learn more about the `lang` attribute](https://dequeuniversity.com/rules/axe/4.12/html-xml-lang-mismatch).',
27
27
  };
28
28
 
29
29
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -20,7 +20,7 @@ const UIStrings = {
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'Links with the same destination should have the same description, to help users ' +
22
22
  'understand the link\'s purpose and decide whether to follow it. ' +
23
- '[Learn more about identical links](https://dequeuniversity.com/rules/axe/4.11/identical-links-same-purpose).',
23
+ '[Learn more about identical links](https://dequeuniversity.com/rules/axe/4.12/identical-links-same-purpose).',
24
24
  };
25
25
 
26
26
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -20,7 +20,7 @@ const UIStrings = {
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'Informative elements should aim for short, descriptive alternate text. ' +
22
22
  'Decorative elements can be ignored with an empty alt attribute. ' +
23
- '[Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.11/image-alt).',
23
+ '[Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.12/image-alt).',
24
24
  };
25
25
 
26
26
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -21,7 +21,7 @@ const UIStrings = {
21
21
  description: 'Informative elements should aim for short, descriptive alternative text. ' +
22
22
  'Alternative text that is exactly the same as the text adjacent to the link or image is ' +
23
23
  'potentially confusing for screen reader users, because the text will be read twice. ' +
24
- '[Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.11/image-redundant-alt).',
24
+ '[Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.12/image-redundant-alt).',
25
25
  };
26
26
 
27
27
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -20,7 +20,7 @@ const UIStrings = {
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'Adding discernable and accessible text to input buttons may help screen reader ' +
22
22
  'users understand the purpose of the input button. ' +
23
- '[Learn more about input buttons](https://dequeuniversity.com/rules/axe/4.11/input-button-name).',
23
+ '[Learn more about input buttons](https://dequeuniversity.com/rules/axe/4.12/input-button-name).',
24
24
  };
25
25
 
26
26
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -20,7 +20,7 @@ const UIStrings = {
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'When an image is being used as an `<input>` button, providing alternative ' +
22
22
  'text can help screen reader users understand the purpose of the button. ' +
23
- '[Learn about input image alt text](https://dequeuniversity.com/rules/axe/4.11/input-image-alt).',
23
+ '[Learn about input image alt text](https://dequeuniversity.com/rules/axe/4.12/input-image-alt).',
24
24
  };
25
25
 
26
26
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -20,7 +20,7 @@ const UIStrings = {
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'Visible text labels that do not match the accessible name can result in a ' +
22
22
  'confusing experience for screen reader users. ' +
23
- '[Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.11/label-content-name-mismatch).',
23
+ '[Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.12/label-content-name-mismatch).',
24
24
  };
25
25
 
26
26
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -20,7 +20,7 @@ const UIStrings = {
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'Labels ensure that form controls are announced properly by assistive ' +
22
22
  'technologies, like screen readers. [Learn ' +
23
- 'more about form element labels](https://dequeuniversity.com/rules/axe/4.11/label).',
23
+ 'more about form element labels](https://dequeuniversity.com/rules/axe/4.12/label).',
24
24
  };
25
25
 
26
26
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -19,7 +19,7 @@ const UIStrings = {
19
19
  failureTitle: 'Document does not have a main landmark.',
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'One main landmark helps screen reader users navigate a web page. ' +
22
- '[Learn more about landmarks](https://dequeuniversity.com/rules/axe/4.11/landmark-one-main).',
22
+ '[Learn more about landmarks](https://dequeuniversity.com/rules/axe/4.12/landmark-one-main).',
23
23
  };
24
24
 
25
25
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -20,7 +20,7 @@ const UIStrings = {
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'Low-contrast text is difficult or impossible for many users to read. Link text ' +
22
22
  'that is discernible improves the experience for users with low vision. ' +
23
- '[Learn how to make links distinguishable](https://dequeuniversity.com/rules/axe/4.11/link-in-text-block).',
23
+ '[Learn how to make links distinguishable](https://dequeuniversity.com/rules/axe/4.12/link-in-text-block).',
24
24
  };
25
25
 
26
26
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -21,7 +21,7 @@ const UIStrings = {
21
21
  description: 'Link text (and alternate text for images, when used as links) that is ' +
22
22
  'discernible, unique, and focusable improves the navigation experience for ' +
23
23
  'screen reader users. ' +
24
- '[Learn how to make links accessible](https://dequeuniversity.com/rules/axe/4.11/link-name).',
24
+ '[Learn how to make links accessible](https://dequeuniversity.com/rules/axe/4.12/link-name).',
25
25
  };
26
26
 
27
27
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -22,7 +22,7 @@ const UIStrings = {
22
22
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
23
23
  description: 'Screen readers have a specific way of announcing lists. Ensuring proper list ' +
24
24
  'structure aids screen reader output. ' +
25
- '[Learn more about proper list structure](https://dequeuniversity.com/rules/axe/4.11/list).',
25
+ '[Learn more about proper list structure](https://dequeuniversity.com/rules/axe/4.12/list).',
26
26
  };
27
27
 
28
28
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -21,7 +21,7 @@ const UIStrings = {
21
21
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
22
22
  description: 'Screen readers require list items (`<li>`) to be contained within a ' +
23
23
  'parent `<ul>`, `<ol>` or `<menu>` to be announced properly. ' +
24
- '[Learn more about proper list structure](https://dequeuniversity.com/rules/axe/4.11/listitem).',
24
+ '[Learn more about proper list structure](https://dequeuniversity.com/rules/axe/4.12/listitem).',
25
25
  };
26
26
 
27
27
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -21,7 +21,7 @@ const UIStrings = {
21
21
  description: 'Users do not expect a page to refresh automatically, and doing so will move ' +
22
22
  'focus back to the top of the page. This may create a frustrating or ' +
23
23
  'confusing experience. ' +
24
- '[Learn more about the refresh meta tag](https://dequeuniversity.com/rules/axe/4.11/meta-refresh).',
24
+ '[Learn more about the refresh meta tag](https://dequeuniversity.com/rules/axe/4.12/meta-refresh).',
25
25
  };
26
26
 
27
27
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -22,7 +22,7 @@ const UIStrings = {
22
22
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
23
23
  description: 'Disabling zooming is problematic for users with low vision who rely on ' +
24
24
  'screen magnification to properly see the contents of a web page. ' +
25
- '[Learn more about the viewport meta tag](https://dequeuniversity.com/rules/axe/4.11/meta-viewport).',
25
+ '[Learn more about the viewport meta tag](https://dequeuniversity.com/rules/axe/4.12/meta-viewport).',
26
26
  };
27
27
 
28
28
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -20,7 +20,7 @@ const UIStrings = {
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'Screen readers cannot translate non-text content. Adding alternate text to ' +
22
22
  '`<object>` elements helps screen readers convey meaning to users. ' +
23
- '[Learn more about alt text for `object` elements](https://dequeuniversity.com/rules/axe/4.11/object-alt).',
23
+ '[Learn more about alt text for `object` elements](https://dequeuniversity.com/rules/axe/4.12/object-alt).',
24
24
  };
25
25
 
26
26
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -22,7 +22,7 @@ const UIStrings = {
22
22
  'or `role="presentation"` does not resolve to none or presentation. To ensure the ' +
23
23
  'element remains removed from the accessibility tree, you should not add any global ' +
24
24
  'ARIA attributes to the element or make it focusable. ' +
25
- '[Learn more about presentation role conflict](https://dequeuniversity.com/rules/axe/4.11/presentation-role-conflict).',
25
+ '[Learn more about presentation role conflict](https://dequeuniversity.com/rules/axe/4.12/presentation-role-conflict).',
26
26
  };
27
27
 
28
28
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -20,7 +20,7 @@ const UIStrings = {
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'Form elements without effective labels can create frustrating experiences ' +
22
22
  'for screen reader users. ' +
23
- '[Learn more about the `select` element](https://dequeuniversity.com/rules/axe/4.11/select-name).',
23
+ '[Learn more about the `select` element](https://dequeuniversity.com/rules/axe/4.12/select-name).',
24
24
  };
25
25
 
26
26
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -19,7 +19,7 @@ const UIStrings = {
19
19
  failureTitle: 'Skip links are not focusable.',
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'Including a skip link can help users skip to the main content to save time. ' +
22
- '[Learn more about skip links](https://dequeuniversity.com/rules/axe/4.11/skip-link).',
22
+ '[Learn more about skip links](https://dequeuniversity.com/rules/axe/4.12/skip-link).',
23
23
  };
24
24
 
25
25
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -20,7 +20,7 @@ const UIStrings = {
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with \'Learn\' becomes link text to additional documentation. */
21
21
  description: 'Ensures SVG elements with an `img`, `graphics-document` or `graphics-symbol` ' +
22
22
  'role have an accessible text alternative. ' +
23
- '[Learn more about SVG alt text](https://dequeuniversity.com/rules/axe/4.11/svg-img-alt).',
23
+ '[Learn more about SVG alt text](https://dequeuniversity.com/rules/axe/4.12/svg-img-alt).',
24
24
  };
25
25
 
26
26
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -20,7 +20,7 @@ const UIStrings = {
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'A value greater than 0 implies an explicit navigation ordering. ' +
22
22
  'Although technically valid, this often creates frustrating experiences ' +
23
- 'for users who rely on assistive technologies. [Learn more about the `tabindex` attribute](https://dequeuniversity.com/rules/axe/4.11/tabindex).',
23
+ 'for users who rely on assistive technologies. [Learn more about the `tabindex` attribute](https://dequeuniversity.com/rules/axe/4.12/tabindex).',
24
24
  };
25
25
 
26
26
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -20,7 +20,7 @@ const UIStrings = {
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'The summary attribute should describe the table structure, while `<caption>` ' +
22
22
  'should have the onscreen title. Accurate table mark-up helps users of screen readers. ' +
23
- '[Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.11/table-duplicate-name).',
23
+ '[Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.12/table-duplicate-name).',
24
24
  };
25
25
 
26
26
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -23,7 +23,7 @@ const UIStrings = {
23
23
  description: 'Screen readers have features to make navigating tables easier. Ensuring ' +
24
24
  'that tables use the actual caption element instead of cells with the `[colspan]` ' +
25
25
  'attribute may improve the experience for screen reader users. ' +
26
- '[Learn more about captions](https://dequeuniversity.com/rules/axe/4.11/table-fake-caption).',
26
+ '[Learn more about captions](https://dequeuniversity.com/rules/axe/4.12/table-fake-caption).',
27
27
  };
28
28
 
29
29
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -20,7 +20,7 @@ const UIStrings = {
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'Touch targets with sufficient size and spacing help users who may have ' +
22
22
  'difficulty targeting small controls to activate the targets. ' +
23
- '[Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.11/target-size).',
23
+ '[Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.12/target-size).',
24
24
  };
25
25
 
26
26
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -21,7 +21,7 @@ const UIStrings = {
21
21
  description: 'Screen readers have features to make navigating tables easier. Ensuring ' +
22
22
  'that `<td>` elements in a large table (3 or more cells in width and height) have an ' +
23
23
  'associated table header may improve the experience for screen reader users. ' +
24
- '[Learn more about table headers](https://dequeuniversity.com/rules/axe/4.11/td-has-header).',
24
+ '[Learn more about table headers](https://dequeuniversity.com/rules/axe/4.12/td-has-header).',
25
25
  };
26
26
 
27
27
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -24,7 +24,7 @@ const UIStrings = {
24
24
  description: 'Screen readers have features to make navigating tables easier. Ensuring ' +
25
25
  '`<td>` cells using the `[headers]` attribute only refer to other cells in the same ' +
26
26
  'table may improve the experience for screen reader users. ' +
27
- '[Learn more about the `headers` attribute](https://dequeuniversity.com/rules/axe/4.11/td-headers-attr).',
27
+ '[Learn more about the `headers` attribute](https://dequeuniversity.com/rules/axe/4.12/td-headers-attr).',
28
28
  };
29
29
 
30
30
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -23,7 +23,7 @@ const UIStrings = {
23
23
  description: 'Screen readers have features to make navigating tables easier. Ensuring ' +
24
24
  'table headers always refer to some set of cells may improve the experience for screen ' +
25
25
  'reader users. ' +
26
- '[Learn more about table headers](https://dequeuniversity.com/rules/axe/4.11/th-has-data-cells).',
26
+ '[Learn more about table headers](https://dequeuniversity.com/rules/axe/4.12/th-has-data-cells).',
27
27
  };
28
28
 
29
29
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -20,7 +20,7 @@ const UIStrings = {
20
20
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
21
21
  description: 'Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) ' +
22
22
  'on elements helps ensure that text is pronounced correctly by a screen reader. ' +
23
- '[Learn how to use the `lang` attribute](https://dequeuniversity.com/rules/axe/4.11/valid-lang).',
23
+ '[Learn how to use the `lang` attribute](https://dequeuniversity.com/rules/axe/4.12/valid-lang).',
24
24
  };
25
25
 
26
26
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -21,7 +21,7 @@ const UIStrings = {
21
21
  /** Description of a Lighthouse audit that tells the user *why* they should try to pass. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
22
22
  description: 'When a video provides a caption it is easier for deaf and hearing impaired ' +
23
23
  'users to access its information. ' +
24
- '[Learn more about video captions](https://dequeuniversity.com/rules/axe/4.11/video-caption).',
24
+ '[Learn more about video captions](https://dequeuniversity.com/rules/axe/4.12/video-caption).',
25
25
  };
26
26
 
27
27
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -13,7 +13,7 @@ const UIStrings = {
13
13
  /** Title shown when one or more agent accessibility checks fail. */
14
14
  failureTitle: 'Accessibility tree is not well-formed',
15
15
  /** Description of a Lighthouse audit that tells the user *why* they need a well-formed accessibility tree. */
16
- description: 'A well-formed accessibility tree helps AI agents to ' +
16
+ description: 'A well-formed [accessibility tree](http://goo.gle/lighthouse-agentic-a11y) helps AI agents to ' +
17
17
  'navigate and interact with the page.',
18
18
  /** Label of a table column that identifies the accessibility rule that failed. */
19
19
  columnRule: 'Failing Rule',
@@ -11,15 +11,15 @@ const HTTP_CLIENT_ERROR_CODE_LOW = 400;
11
11
  const HTTP_SERVER_ERROR_CODE_LOW = 500;
12
12
 
13
13
  const UIStrings = {
14
- /** Title of a Lighthouse audit that provides detail on the site's llms.txt file. Note: "llms.txt" is a canonical filename and should not be translated. This descriptive title is shown when the llms.txt file is present and configured correctly. */
15
- title: 'llms.txt is present',
16
- /** Title of a Lighthouse audit that provides detail on the site's llms.txt file. Note: "llms.txt" is a canonical filename and should not be translated. This descriptive title is shown when the llms.txt file is misconfigured. */
17
- failureTitle: 'llms.txt is missing or incomplete',
18
- /** Description of a Lighthouse audit that tells the user *why* they need to have a valid llms.txt file. Note: "llms.txt" is a canonical filename and should not be translated. This is displayed after a user expands the section to see more. No character length limits. */
19
- description: 'If your llms.txt file is malformed, large language models may not be able to ' +
20
- 'understand how you want your website to be crawled or used for training. A valid ' +
21
- 'llms.txt should be a Markdown file containing at least one H1 header. ' +
22
- '[Learn more about llms.txt](https://llmstxt.org/).',
14
+ /** Title of a Lighthouse audit that provides detail on the site's llms.txt file. Note: "llms.txt" is a canonical filename and should not be translated. This descriptive title is shown when the llms.txt file follows community recommendations. */
15
+ title: 'llms.txt follows recommendations',
16
+ /** Title of a Lighthouse audit that provides detail on the site's llms.txt file. Note: "llms.txt" is a canonical filename and should not be translated. This descriptive title is shown when the llms.txt file does not follow community recommendations. */
17
+ failureTitle: 'llms.txt does not follow recommendations',
18
+ /** Description of a Lighthouse audit that tells the user *why* they should have an llms.txt file. Note: "llms.txt" is a canonical filename and should not be translated. This is displayed after a user expands the section to see more. No character length limits. */
19
+ description: 'If your llms.txt file does not follow recommendations, ' +
20
+ 'large language models may not be able to ' +
21
+ 'understand how you want your website to be crawled or used for training. The ' +
22
+ '[llms.txt](https://llmstxt.org/) file should be a Markdown file containing at least one H1 header.',
23
23
  /**
24
24
  * @description Label for the audit identifying that the request failed with a specific HTTP status code.
25
25
  * @example {500} statusCode
@@ -84,7 +84,7 @@ class LlmsTxt extends Audit {
84
84
  throw new Error(`Status ${status} was valid, but content was null`);
85
85
  }
86
86
 
87
- const hasH1 = /^#\s+.+/m.test(content);
87
+ const hasH1 = /^\s*#\s+.+/m.test(content);
88
88
  const hasLink = /\[.+\]\(.+\)/.test(content);
89
89
  const isTooShort = content.length < 50;
90
90
 
@@ -4,8 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import data from 'web-features/data.json' with {type: 'json'};
8
-
7
+ import data from '../lib/baseline/web-features-data.json' with {type: 'json'};
9
8
  import {Audit} from './audit.js';
10
9
  import metadata from '../lib/baseline/web-features-metadata.json' with {type: 'json'};
11
10
  import * as i18n from '../lib/i18n/i18n.js';
@@ -27,7 +26,6 @@ const UIStrings = {
27
26
  };
28
27
 
29
28
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
30
- const {features} = /** @type {any} */ (data);
31
29
 
32
30
 
33
31
  /** @typedef {LH.TraceEvent & {args: {feature: string, url?: string, lineNumber?: number, columnNumber?: number}}} DXFeatureEvent */
@@ -90,21 +88,21 @@ class Baseline extends Audit {
90
88
  continue;
91
89
  }
92
90
 
93
- const featureData = features[feature.featureId];
94
-
95
- if (!featureData || !('status' in featureData)) {
96
- continue;
97
- }
91
+ const featureId = feature.featureId;
98
92
 
99
93
  let displayStatus = 'Limited Availability';
100
94
  let baselineTier = 'limited';
101
95
 
102
- if (featureData.status.baseline === 'high') {
103
- displayStatus = `Widely Available (${featureData.status.baseline_low_date})`;
96
+ if (featureId in data.high) {
97
+ const highData = /** @type {Record<string, string>} */ (data.high);
98
+ displayStatus = `Widely Available (${highData[featureId]})`;
104
99
  baselineTier = 'high';
105
- } else if (featureData.status.baseline === 'low') {
106
- displayStatus = `Newly Available (${featureData.status.baseline_low_date})`;
100
+ } else if (featureId in data.low) {
101
+ const lowData = /** @type {Record<string, string>} */ (data.low);
102
+ displayStatus = `Newly Available (${lowData[featureId]})`;
107
103
  baselineTier = 'low';
104
+ } else if (!data.limited.includes(featureId)) {
105
+ continue;
108
106
  }
109
107
 
110
108
  baselineStatus.push({
@@ -21,7 +21,8 @@ const UIStrings = {
21
21
  /** Description of a Lighthouse audit that tells the user why they should not ask for geolocation permissions on load. This is displayed after a user expands the section to see more. No character length limits. The last sentence starting with 'Learn' becomes link text to additional documentation. */
22
22
  description: 'Users are mistrustful of or confused by sites that request their ' +
23
23
  'location without context. Consider tying the request to a user action instead. ' +
24
- '[Learn more about the geolocation permission](https://developer.chrome.com/docs/lighthouse/best-practices/geolocation-on-start/).',
24
+ '[Learn more about the geolocation permission](https://developer.chrome.com/docs/lighthouse/best-practices/geolocation-on-start/). ' +
25
+ 'Also consider using the [`<geolocation>` element](https://developer.chrome.com/blog/geolocation-html-element).',
25
26
  };
26
27
 
27
28
  const str_ = i18n.createIcuMessageFn(import.meta.url, UIStrings);
@@ -70,6 +70,8 @@ class NetworkRequests extends Audit {
70
70
  url: UrlUtils.elideDataURI(record.url),
71
71
  sessionTargetType: record.sessionTargetType,
72
72
  protocol: record.protocol,
73
+ cache: record.fromDiskCache ? 'disk' :
74
+ record.fromMemoryCache ? 'memory' : record.fromPrefetchCache ? 'prefetch' : 'none',
73
75
  rendererStartTime: normalizeTime(record.rendererStartTime),
74
76
  networkRequestTime: normalizeTime(record.networkRequestTime),
75
77
  networkEndTime: normalizeTime(record.networkEndTime),
@@ -5,7 +5,6 @@
5
5
  */
6
6
 
7
7
  import {Audit} from '../audit.js';
8
- import UrlUtils from '../../lib/url-utils.js';
9
8
  import {MainResource} from '../../computed/main-resource.js';
10
9
  import * as i18n from '../../lib/i18n/i18n.js';
11
10
 
@@ -90,12 +89,25 @@ class Canonical extends Audit {
90
89
  // Links that don't have an href aren't canonical references for SEO, skip them
91
90
  if (!link.hrefRaw) continue;
92
91
 
93
- // Links that had an hrefRaw but didn't have a valid href were invalid, flag them
94
- if (!link.href) invalidCanonicalLink = link;
95
- // Links that had a valid href but didn't have a valid hrefRaw must have been relatively resolved, flag them
96
- else if (!UrlUtils.isValid(link.hrefRaw)) relativeCanonicallink = link;
97
- // Otherwise, it was a valid canonical URL
98
- else uniqueCanonicalURLs.add(link.href);
92
+ // Links that don't have an href are invalid, flag them
93
+ if (!link.href) {
94
+ invalidCanonicalLink = link;
95
+ continue;
96
+ }
97
+
98
+ if (URL.parse(link.hrefRaw, 'https://example.com') === null) {
99
+ // Links that are syntactically INVALID with a base, flag them
100
+ invalidCanonicalLink = link;
101
+ } else {
102
+ // Links that are syntactically VALID with a base:
103
+ if (URL.parse(link.hrefRaw) === null) {
104
+ // Links that are INVALID without a base must be relative, flag them
105
+ relativeCanonicallink = link;
106
+ } else {
107
+ // Links that are valid without a base are absolute
108
+ uniqueCanonicalURLs.add(link.href);
109
+ }
110
+ }
99
111
  } else if (link.rel === 'alternate') {
100
112
  if (link.href && link.hreflang) hreflangURLs.add(link.href);
101
113
  }
@@ -11,8 +11,8 @@ const UIStrings = {
11
11
  /** Title of a Lighthouse audit that lists forms found in the page for WebMCP coverage. "WebMCP" stands for "Web Model Context Protocol" and should not be translated. */
12
12
  title: 'WebMCP form coverage',
13
13
  /** Description of a Lighthouse audit that lists forms found in the page and indicates whether they have WebMCP declarative tool annotations. This is displayed after a user expands the section to see more. No character length limits. "WebMCP" stands for "Web Model Context Protocol" and should not be translated. */
14
- description: 'Consider adding WebMCP annotations to the forms listed below. This helps AI ' +
15
- 'agents identify and interact with these forms more reliably.', // TODO: add a learn more link once available
14
+ description: 'Consider adding [WebMCP](http://goo.gle/webmcp-docs) annotations to the forms listed below. This helps AI ' +
15
+ 'agents identify and interact with these forms more reliably.',
16
16
  /** [ICU Syntax] Label for the audit identifying the number of forms missing annotations. "WebMCP" stands for "Web Model Context Protocol" and should not be translated. */
17
17
  displayValue: `{itemCount, plural,
18
18
  =1 {1 form missing annotations}
@@ -15,7 +15,7 @@ const UIStrings = {
15
15
  /** Title of a Lighthouse audit that lists registered WebMCP tools. "WebMCP" stands for "Web Model Context Protocol" and should not be translated. */
16
16
  title: 'WebMCP tools registered',
17
17
  /** Description of a Lighthouse audit that lists registered WebMCP tools. This is displayed after a user expands the section to see more. No character length limits. "WebMCP" stands for "Web Model Context Protocol", neither should be translated. */
18
- description: 'Lists the WebMCP tools registered at the time of analysis. ',
18
+ description: 'Lists the [WebMCP tools](http://goo.gle/webmcp-docs) registered at the time of analysis.',
19
19
  /** Label for a column in a data table; entries will be the name of a WebMCP tool. */
20
20
  columnTool: 'Tool name',
21
21
  /** Label for a column in a data table; entries will be the description of a WebMCP tool. */
@@ -13,7 +13,7 @@ const UIStrings = {
13
13
  /** Title of a Lighthouse audit that provides detail on WebMCP schema validity. This descriptive title is shown to users when there are schema validity issues. "WebMCP" stands for "Web Model Context Protocol" and should not be translated. */
14
14
  failureTitle: 'WebMCP schemas are invalid',
15
15
  /** Description of a Lighthouse audit that tells the user why they should ensure WebMCP schemas are valid. This is displayed after a user expands the section to see more. No character length limits. "WebMCP" stands for "Web Model Context Protocol" and should not be translated. */
16
- description: 'Valid WebMCP schemas are required for AI agents to ' +
16
+ description: 'Valid [WebMCP schemas](http://goo.gle/webmcp-docs) are required for AI agents to ' +
17
17
  ' understand and interact with tools correctly. ' +
18
18
  'Please fix any errors or warnings reported by the browser.',
19
19
  /** Header of the table column which displays the element. */
@@ -1,6 +1,6 @@
1
1
  export { JSBundlesComputed as JSBundles };
2
2
  declare const JSBundlesComputed: typeof JSBundles & {
3
- request: (dependencies: Pick<import("../index.js").Artifacts, "Scripts" | "SourceMaps">, context: LH.Artifacts.ComputedContext) => Promise<import("../index.js").Artifacts.Bundle[]>;
3
+ request: (dependencies: Pick<import("../index.js").Artifacts, "SourceMaps" | "Scripts">, context: LH.Artifacts.ComputedContext) => Promise<import("../index.js").Artifacts.Bundle[]>;
4
4
  };
5
5
  declare class JSBundles {
6
6
  /**
@@ -3,7 +3,7 @@ declare const LoadSimulatorComputed: typeof LoadSimulator & {
3
3
  request: (dependencies: {
4
4
  devtoolsLog: LH.DevtoolsLog;
5
5
  settings: LH.Audit.Context["settings"];
6
- }, context: LH.Artifacts.ComputedContext) => Promise<import("../../types/gatherer.js").default.Simulation.Simulator>;
6
+ }, context: LH.Artifacts.ComputedContext) => Promise<import("../../types.js").Gatherer.Simulation.Simulator>;
7
7
  };
8
8
  declare class LoadSimulator {
9
9
  /**
@@ -1,6 +1,6 @@
1
1
  export { FirstContentfulPaintAllFramesComputed as FirstContentfulPaintAllFrames };
2
2
  declare const FirstContentfulPaintAllFramesComputed: typeof FirstContentfulPaintAllFrames & {
3
- request: (dependencies: import("../../index.js").Artifacts.MetricComputationDataInput, context: LH.Artifacts.ComputedContext) => Promise<import("../../index.js").Artifacts.Metric | import("../../index.js").Artifacts.LanternMetric>;
3
+ request: (dependencies: import("../../index.js").Artifacts.MetricComputationDataInput, context: LH.Artifacts.ComputedContext) => Promise<import("../../index.js").Artifacts.LanternMetric | import("../../index.js").Artifacts.Metric>;
4
4
  };
5
5
  declare class FirstContentfulPaintAllFrames extends NavigationMetric {
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  export { FirstContentfulPaintComputed as FirstContentfulPaint };
2
2
  declare const FirstContentfulPaintComputed: typeof FirstContentfulPaint & {
3
- request: (dependencies: import("../../index.js").Artifacts.MetricComputationDataInput, context: LH.Artifacts.ComputedContext) => Promise<import("../../index.js").Artifacts.Metric | import("../../index.js").Artifacts.LanternMetric>;
3
+ request: (dependencies: import("../../index.js").Artifacts.MetricComputationDataInput, context: LH.Artifacts.ComputedContext) => Promise<import("../../index.js").Artifacts.LanternMetric | import("../../index.js").Artifacts.Metric>;
4
4
  };
5
5
  declare class FirstContentfulPaint extends NavigationMetric {
6
6
  /**
@@ -10,7 +10,7 @@ export type TimePeriod = {
10
10
  end: number;
11
11
  };
12
12
  declare const InteractiveComputed: typeof Interactive & {
13
- request: (dependencies: import("../../index.js").Artifacts.MetricComputationDataInput, context: LH.Artifacts.ComputedContext) => Promise<import("../../index.js").Artifacts.Metric | import("../../index.js").Artifacts.LanternMetric>;
13
+ request: (dependencies: import("../../index.js").Artifacts.MetricComputationDataInput, context: LH.Artifacts.ComputedContext) => Promise<import("../../index.js").Artifacts.LanternMetric | import("../../index.js").Artifacts.Metric>;
14
14
  };
15
15
  /**
16
16
  * @fileoverview Computes "Time To Interactive", the time at which the page has loaded critical
@@ -3,8 +3,8 @@
3
3
  * @param {LH.Artifacts.ComputedContext} context
4
4
  */
5
5
  export function getComputationDataParamsFromTrace(data: LH.Artifacts.MetricComputationDataInput, context: LH.Artifacts.ComputedContext): Promise<{
6
- simulator: import("../../../types/gatherer.js").default.Simulation.Simulator;
7
- graph: import("../../../types/gatherer.js").default.Simulation.GraphNode;
6
+ simulator: import("../../../types.js").Gatherer.Simulation.Simulator;
7
+ graph: import("../../../types.js").Gatherer.Simulation.GraphNode;
8
8
  processedNavigation: Lantern.Types.Simulation.ProcessedNavigation;
9
9
  }>;
10
10
  /**
@@ -12,8 +12,8 @@ export function getComputationDataParamsFromTrace(data: LH.Artifacts.MetricCompu
12
12
  * @param {LH.Artifacts.ComputedContext} context
13
13
  */
14
14
  export function getComputationDataParamsFromDevtoolsLog(data: LH.Artifacts.MetricComputationDataInput, context: LH.Artifacts.ComputedContext): Promise<{
15
- simulator: import("../../../types/gatherer.js").default.Simulation.Simulator;
16
- graph: import("../../../types/gatherer.js").default.Simulation.GraphNode;
15
+ simulator: import("../../../types.js").Gatherer.Simulation.Simulator;
16
+ graph: import("../../../types.js").Gatherer.Simulation.GraphNode;
17
17
  processedNavigation: import("../../index.js").Artifacts.ProcessedNavigation;
18
18
  }>;
19
19
  /**
@@ -21,8 +21,8 @@ export function getComputationDataParamsFromDevtoolsLog(data: LH.Artifacts.Metri
21
21
  * @param {LH.Artifacts.ComputedContext} context
22
22
  */
23
23
  export function getComputationDataParams(data: LH.Artifacts.MetricComputationDataInput, context: LH.Artifacts.ComputedContext): Promise<{
24
- simulator: import("../../../types/gatherer.js").default.Simulation.Simulator;
25
- graph: import("../../../types/gatherer.js").default.Simulation.GraphNode;
24
+ simulator: import("../../../types.js").Gatherer.Simulation.Simulator;
25
+ graph: import("../../../types.js").Gatherer.Simulation.GraphNode;
26
26
  processedNavigation: Lantern.Types.Simulation.ProcessedNavigation;
27
27
  }>;
28
28
  /**