lighthouse 12.1.0 → 12.2.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 (436) hide show
  1. package/cli/cli-flags.d.ts +2 -2
  2. package/cli/cli-flags.js +1 -1
  3. package/cli/sentry-prompt.js +2 -2
  4. package/cli/test/smokehouse/frontends/lib.d.ts +1 -1
  5. package/cli/test/smokehouse/lib/concurrent-mapper.d.ts +6 -6
  6. package/cli/test/smokehouse/lighthouse-runners/bundle.d.ts +1 -1
  7. package/cli/test/smokehouse/lighthouse-runners/cli.d.ts +1 -2
  8. package/cli/test/smokehouse/lighthouse-runners/devtools.d.ts +1 -1
  9. package/cli/test/smokehouse/report-assert.d.ts +0 -1
  10. package/cli/test/smokehouse/version-check.d.ts +3 -3
  11. package/core/audits/accessibility/accesskeys.d.ts +3 -3
  12. package/core/audits/accessibility/aria-allowed-attr.d.ts +3 -3
  13. package/core/audits/accessibility/aria-allowed-role.d.ts +3 -3
  14. package/core/audits/accessibility/aria-command-name.d.ts +3 -3
  15. package/core/audits/accessibility/aria-conditional-attr.d.ts +3 -3
  16. package/core/audits/accessibility/aria-deprecated-role.d.ts +3 -3
  17. package/core/audits/accessibility/aria-dialog-name.d.ts +3 -3
  18. package/core/audits/accessibility/aria-hidden-body.d.ts +3 -3
  19. package/core/audits/accessibility/aria-hidden-focus.d.ts +3 -3
  20. package/core/audits/accessibility/aria-input-field-name.d.ts +3 -3
  21. package/core/audits/accessibility/aria-meter-name.d.ts +3 -3
  22. package/core/audits/accessibility/aria-progressbar-name.d.ts +3 -3
  23. package/core/audits/accessibility/aria-prohibited-attr.d.ts +3 -3
  24. package/core/audits/accessibility/aria-required-attr.d.ts +3 -3
  25. package/core/audits/accessibility/aria-required-children.d.ts +3 -3
  26. package/core/audits/accessibility/aria-required-parent.d.ts +3 -3
  27. package/core/audits/accessibility/aria-roles.d.ts +3 -3
  28. package/core/audits/accessibility/aria-text.d.ts +3 -3
  29. package/core/audits/accessibility/aria-toggle-field-name.d.ts +3 -3
  30. package/core/audits/accessibility/aria-tooltip-name.d.ts +3 -3
  31. package/core/audits/accessibility/aria-treeitem-name.d.ts +3 -3
  32. package/core/audits/accessibility/aria-valid-attr-value.d.ts +3 -3
  33. package/core/audits/accessibility/aria-valid-attr.d.ts +3 -3
  34. package/core/audits/accessibility/axe-audit.d.ts +1 -1
  35. package/core/audits/accessibility/button-name.d.ts +3 -3
  36. package/core/audits/accessibility/bypass.d.ts +3 -3
  37. package/core/audits/accessibility/color-contrast.d.ts +3 -3
  38. package/core/audits/accessibility/definition-list.d.ts +3 -3
  39. package/core/audits/accessibility/dlitem.d.ts +3 -3
  40. package/core/audits/accessibility/document-title.d.ts +3 -3
  41. package/core/audits/accessibility/duplicate-id-aria.d.ts +3 -3
  42. package/core/audits/accessibility/empty-heading.d.ts +3 -3
  43. package/core/audits/accessibility/form-field-multiple-labels.d.ts +3 -3
  44. package/core/audits/accessibility/frame-title.d.ts +3 -3
  45. package/core/audits/accessibility/heading-order.d.ts +3 -3
  46. package/core/audits/accessibility/html-has-lang.d.ts +3 -3
  47. package/core/audits/accessibility/html-lang-valid.d.ts +3 -3
  48. package/core/audits/accessibility/html-xml-lang-mismatch.d.ts +3 -3
  49. package/core/audits/accessibility/identical-links-same-purpose.d.ts +3 -3
  50. package/core/audits/accessibility/image-alt.d.ts +3 -3
  51. package/core/audits/accessibility/image-redundant-alt.d.ts +3 -3
  52. package/core/audits/accessibility/input-button-name.d.ts +3 -3
  53. package/core/audits/accessibility/input-image-alt.d.ts +3 -3
  54. package/core/audits/accessibility/label-content-name-mismatch.d.ts +3 -3
  55. package/core/audits/accessibility/label.d.ts +3 -3
  56. package/core/audits/accessibility/landmark-one-main.d.ts +3 -3
  57. package/core/audits/accessibility/link-in-text-block.d.ts +3 -3
  58. package/core/audits/accessibility/link-name.d.ts +3 -3
  59. package/core/audits/accessibility/list.d.ts +3 -3
  60. package/core/audits/accessibility/listitem.d.ts +3 -3
  61. package/core/audits/accessibility/meta-refresh.d.ts +3 -3
  62. package/core/audits/accessibility/meta-viewport.d.ts +3 -3
  63. package/core/audits/accessibility/object-alt.d.ts +3 -3
  64. package/core/audits/accessibility/select-name.d.ts +3 -3
  65. package/core/audits/accessibility/skip-link.d.ts +3 -3
  66. package/core/audits/accessibility/tabindex.d.ts +3 -3
  67. package/core/audits/accessibility/table-duplicate-name.d.ts +3 -3
  68. package/core/audits/accessibility/table-fake-caption.d.ts +3 -3
  69. package/core/audits/accessibility/target-size.d.ts +3 -3
  70. package/core/audits/accessibility/td-has-header.d.ts +3 -3
  71. package/core/audits/accessibility/td-headers-attr.d.ts +3 -3
  72. package/core/audits/accessibility/th-has-data-cells.d.ts +3 -3
  73. package/core/audits/accessibility/valid-lang.d.ts +3 -3
  74. package/core/audits/accessibility/video-caption.d.ts +3 -3
  75. package/core/audits/audit.d.ts +17 -17
  76. package/core/audits/autocomplete.d.ts +9 -9
  77. package/core/audits/bf-cache.d.ts +10 -10
  78. package/core/audits/bootup-time.d.ts +7 -7
  79. package/core/audits/byte-efficiency/byte-efficiency-audit.d.ts +6 -8
  80. package/core/audits/byte-efficiency/byte-efficiency-audit.js +3 -6
  81. package/core/audits/byte-efficiency/duplicated-javascript.d.ts +4 -4
  82. package/core/audits/byte-efficiency/efficient-animated-content.d.ts +3 -4
  83. package/core/audits/byte-efficiency/legacy-javascript.d.ts +7 -8
  84. package/core/audits/byte-efficiency/modern-image-formats.d.ts +3 -3
  85. package/core/audits/byte-efficiency/offscreen-images.d.ts +3 -4
  86. package/core/audits/byte-efficiency/render-blocking-resources.d.ts +5 -9
  87. package/core/audits/byte-efficiency/render-blocking-resources.js +10 -16
  88. package/core/audits/byte-efficiency/total-byte-weight.d.ts +4 -4
  89. package/core/audits/byte-efficiency/unminified-css.d.ts +3 -3
  90. package/core/audits/byte-efficiency/unminified-javascript.d.ts +3 -3
  91. package/core/audits/byte-efficiency/unused-css-rules.d.ts +3 -3
  92. package/core/audits/byte-efficiency/unused-javascript.d.ts +3 -3
  93. package/core/audits/byte-efficiency/uses-long-cache-ttl.d.ts +4 -6
  94. package/core/audits/byte-efficiency/uses-optimized-images.d.ts +3 -3
  95. package/core/audits/byte-efficiency/uses-responsive-images-snapshot.d.ts +4 -4
  96. package/core/audits/byte-efficiency/uses-responsive-images.d.ts +4 -5
  97. package/core/audits/byte-efficiency/uses-text-compression.d.ts +3 -3
  98. package/core/audits/critical-request-chains.d.ts +3 -3
  99. package/core/audits/csp-xss.d.ts +8 -8
  100. package/core/audits/deprecations.d.ts +6 -6
  101. package/core/audits/dobetterweb/charset.d.ts +3 -3
  102. package/core/audits/dobetterweb/doctype.d.ts +9 -9
  103. package/core/audits/dobetterweb/dom-size.d.ts +9 -9
  104. package/core/audits/dobetterweb/geolocation-on-start.d.ts +3 -3
  105. package/core/audits/dobetterweb/inspector-issues.d.ts +6 -6
  106. package/core/audits/dobetterweb/js-libraries.d.ts +3 -3
  107. package/core/audits/dobetterweb/no-document-write.d.ts +3 -3
  108. package/core/audits/dobetterweb/notification-on-start.d.ts +3 -3
  109. package/core/audits/dobetterweb/paste-preventing-inputs.d.ts +3 -3
  110. package/core/audits/dobetterweb/uses-http2.d.ts +7 -11
  111. package/core/audits/dobetterweb/uses-http2.js +2 -5
  112. package/core/audits/dobetterweb/uses-passive-event-listeners.d.ts +3 -3
  113. package/core/audits/errors-in-console.d.ts +4 -4
  114. package/core/audits/font-display.d.ts +4 -4
  115. package/core/audits/image-aspect-ratio.d.ts +5 -5
  116. package/core/audits/image-size-responsive.d.ts +7 -7
  117. package/core/audits/is-on-https.d.ts +10 -10
  118. package/core/audits/largest-contentful-paint-element.d.ts +9 -9
  119. package/core/audits/layout-shifts.d.ts +9 -9
  120. package/core/audits/lcp-lazy-loaded.d.ts +3 -3
  121. package/core/audits/long-tasks.d.ts +11 -11
  122. package/core/audits/long-tasks.js +5 -5
  123. package/core/audits/mainthread-work-breakdown.d.ts +5 -5
  124. package/core/audits/metrics/cumulative-layout-shift.d.ts +1 -1
  125. package/core/audits/metrics/first-contentful-paint.d.ts +1 -1
  126. package/core/audits/metrics/first-meaningful-paint.d.ts +1 -1
  127. package/core/audits/metrics/interaction-to-next-paint.d.ts +1 -1
  128. package/core/audits/metrics/interactive.d.ts +1 -1
  129. package/core/audits/metrics/largest-contentful-paint.d.ts +1 -1
  130. package/core/audits/metrics/max-potential-fid.d.ts +2 -4
  131. package/core/audits/metrics/speed-index.d.ts +1 -1
  132. package/core/audits/metrics/total-blocking-time.d.ts +1 -1
  133. package/core/audits/network-rtt.d.ts +2 -2
  134. package/core/audits/network-server-latency.d.ts +2 -2
  135. package/core/audits/non-composited-animations.d.ts +9 -9
  136. package/core/audits/oopif-iframe-test-audit.d.ts +5 -5
  137. package/core/audits/preload-fonts.d.ts +3 -3
  138. package/core/audits/prioritize-lcp-image.d.ts +7 -7
  139. package/core/audits/redirects-http.d.ts +3 -3
  140. package/core/audits/redirects.d.ts +2 -3
  141. package/core/audits/resource-summary.d.ts +1 -1
  142. package/core/audits/screenshot-thumbnails.d.ts +2 -3
  143. package/core/audits/script-treemap-data.d.ts +1 -1
  144. package/core/audits/seo/canonical.d.ts +8 -8
  145. package/core/audits/seo/crawlable-anchors.d.ts +4 -4
  146. package/core/audits/seo/font-size.d.ts +11 -11
  147. package/core/audits/seo/hreflang.d.ts +6 -6
  148. package/core/audits/seo/http-status-code.d.ts +3 -3
  149. package/core/audits/seo/is-crawlable.d.ts +9 -10
  150. package/core/audits/seo/link-text.d.ts +4 -4
  151. package/core/audits/seo/manual/structured-data.d.ts +2 -2
  152. package/core/audits/seo/meta-description.d.ts +4 -4
  153. package/core/audits/seo/robots-txt.d.ts +6 -6
  154. package/core/audits/server-response-time.d.ts +4 -4
  155. package/core/audits/third-party-cookies.d.ts +4 -4
  156. package/core/audits/third-party-facades.d.ts +11 -12
  157. package/core/audits/third-party-summary.d.ts +5 -6
  158. package/core/audits/third-party-summary.js +7 -4
  159. package/core/audits/unsized-images.d.ts +3 -3
  160. package/core/audits/user-timings.d.ts +6 -6
  161. package/core/audits/uses-rel-preconnect.d.ts +5 -5
  162. package/core/audits/uses-rel-preload.d.ts +7 -7
  163. package/core/audits/uses-rel-preload.js +8 -6
  164. package/core/audits/valid-source-maps.d.ts +6 -7
  165. package/core/audits/viewport.d.ts +4 -4
  166. package/core/audits/work-during-interaction.d.ts +11 -12
  167. package/core/computed/computed-artifact.d.ts +2 -2
  168. package/core/computed/critical-request-chains.d.ts +9 -11
  169. package/core/computed/critical-request-chains.js +6 -6
  170. package/core/computed/document-urls.d.ts +3 -8
  171. package/core/computed/document-urls.js +1 -1
  172. package/core/computed/entity-classification.d.ts +6 -8
  173. package/core/computed/image-records.d.ts +3 -5
  174. package/core/computed/js-bundles.d.ts +2 -4
  175. package/core/computed/lcp-image-record.d.ts +3 -5
  176. package/core/computed/load-simulator.d.ts +7 -11
  177. package/core/computed/load-simulator.js +1 -1
  178. package/core/computed/main-resource.d.ts +5 -7
  179. package/core/computed/main-resource.js +1 -1
  180. package/core/computed/main-thread-tasks.d.ts +1 -3
  181. package/core/computed/metrics/cumulative-layout-shift.d.ts +2 -14
  182. package/core/computed/metrics/first-contentful-paint-all-frames.d.ts +1 -3
  183. package/core/computed/metrics/first-contentful-paint.d.ts +1 -3
  184. package/core/computed/metrics/interactive.d.ts +1 -3
  185. package/core/computed/metrics/lantern-first-contentful-paint.d.ts +3 -7
  186. package/core/computed/metrics/lantern-first-contentful-paint.js +3 -5
  187. package/core/computed/metrics/lantern-interactive.d.ts +3 -7
  188. package/core/computed/metrics/lantern-interactive.js +3 -5
  189. package/core/computed/metrics/lantern-largest-contentful-paint.d.ts +3 -7
  190. package/core/computed/metrics/lantern-largest-contentful-paint.js +3 -5
  191. package/core/computed/metrics/lantern-max-potential-fid.d.ts +3 -7
  192. package/core/computed/metrics/lantern-max-potential-fid.js +3 -5
  193. package/core/computed/metrics/lantern-metric.d.ts +8 -8
  194. package/core/computed/metrics/lantern-metric.js +1 -1
  195. package/core/computed/metrics/lantern-speed-index.d.ts +3 -7
  196. package/core/computed/metrics/lantern-speed-index.js +3 -5
  197. package/core/computed/metrics/lantern-total-blocking-time.d.ts +3 -7
  198. package/core/computed/metrics/lantern-total-blocking-time.js +1 -3
  199. package/core/computed/metrics/largest-contentful-paint-all-frames.d.ts +1 -3
  200. package/core/computed/metrics/largest-contentful-paint.d.ts +1 -3
  201. package/core/computed/metrics/lcp-breakdown.d.ts +3 -9
  202. package/core/computed/metrics/max-potential-fid.d.ts +1 -3
  203. package/core/computed/metrics/responsiveness.d.ts +7 -10
  204. package/core/computed/metrics/speed-index.d.ts +1 -3
  205. package/core/computed/metrics/time-to-first-byte.d.ts +1 -3
  206. package/core/computed/metrics/timing-summary.d.ts +8 -13
  207. package/core/computed/metrics/total-blocking-time.d.ts +1 -3
  208. package/core/computed/metrics/total-blocking-time.js +1 -1
  209. package/core/computed/module-duplication.d.ts +2 -8
  210. package/core/computed/navigation-insights.d.ts +2 -4
  211. package/core/computed/network-analysis.d.ts +2 -4
  212. package/core/computed/network-analysis.js +1 -1
  213. package/core/computed/network-records.d.ts +1 -3
  214. package/core/computed/page-dependency-graph.d.ts +9 -14
  215. package/core/computed/page-dependency-graph.js +3 -4
  216. package/core/computed/processed-navigation.d.ts +2 -5
  217. package/core/computed/processed-trace.d.ts +1 -3
  218. package/core/computed/resource-summary.d.ts +6 -10
  219. package/core/computed/screenshots.d.ts +1 -6
  220. package/core/computed/speedline.d.ts +1 -3
  221. package/core/computed/tbt-impact-tasks.d.ts +4 -5
  222. package/core/computed/tbt-impact-tasks.js +31 -8
  223. package/core/computed/trace-engine-result.d.ts +1 -3
  224. package/core/computed/trace-engine-result.js +10 -1
  225. package/core/computed/unused-css.d.ts +7 -9
  226. package/core/computed/unused-javascript-summary.d.ts +3 -5
  227. package/core/computed/user-timings.d.ts +3 -5
  228. package/core/computed/viewport-meta.d.ts +7 -9
  229. package/core/config/config-helpers.d.ts +5 -5
  230. package/core/config/config.d.ts +3 -3
  231. package/core/config/constants.d.ts +6 -6
  232. package/core/config/filters.d.ts +8 -8
  233. package/core/config/validation.d.ts +1 -1
  234. package/core/gather/driver/environment.d.ts +5 -5
  235. package/core/gather/driver/environment.js +1 -1
  236. package/core/gather/driver/execution-context.d.ts +6 -6
  237. package/core/gather/driver/navigation.d.ts +3 -3
  238. package/core/gather/driver/network-monitor.d.ts +6 -6
  239. package/core/gather/driver/storage.d.ts +4 -4
  240. package/core/gather/driver/target-manager.d.ts +4 -5
  241. package/core/gather/driver/target-manager.js +1 -1
  242. package/core/gather/driver/wait-for-condition.d.ts +3 -3
  243. package/core/gather/driver/wait-for-condition.js +4 -4
  244. package/core/gather/driver.d.ts +1 -1
  245. package/core/gather/gatherers/accessibility.d.ts +1 -1
  246. package/core/gather/gatherers/anchor-elements.d.ts +1 -1
  247. package/core/gather/gatherers/bf-cache-failures.d.ts +3 -3
  248. package/core/gather/gatherers/cache-contents.d.ts +1 -1
  249. package/core/gather/gatherers/console-messages.d.ts +1 -1
  250. package/core/gather/gatherers/css-usage.d.ts +1 -1
  251. package/core/gather/gatherers/devtools-log-compat.d.ts +3 -3
  252. package/core/gather/gatherers/devtools-log.d.ts +3 -3
  253. package/core/gather/gatherers/dobetterweb/doctype.d.ts +1 -1
  254. package/core/gather/gatherers/dobetterweb/domstats.d.ts +1 -1
  255. package/core/gather/gatherers/dobetterweb/optimized-images.d.ts +6 -7
  256. package/core/gather/gatherers/dobetterweb/response-compression.d.ts +4 -5
  257. package/core/gather/gatherers/full-page-screenshot.d.ts +3 -3
  258. package/core/gather/gatherers/iframe-elements.d.ts +1 -1
  259. package/core/gather/gatherers/image-elements.d.ts +1 -1
  260. package/core/gather/gatherers/inputs.d.ts +1 -1
  261. package/core/gather/gatherers/inspector-issues.d.ts +2 -2
  262. package/core/gather/gatherers/js-usage.d.ts +1 -1
  263. package/core/gather/gatherers/link-elements.d.ts +6 -10
  264. package/core/gather/gatherers/link-elements.js +5 -12
  265. package/core/gather/gatherers/main-document-content.d.ts +2 -2
  266. package/core/gather/gatherers/meta-elements.d.ts +1 -1
  267. package/core/gather/gatherers/network-user-agent.d.ts +4 -4
  268. package/core/gather/gatherers/root-causes.d.ts +3 -4
  269. package/core/gather/gatherers/seo/font-size.d.ts +19 -19
  270. package/core/gather/gatherers/seo/robots-txt.d.ts +1 -1
  271. package/core/gather/gatherers/source-maps.d.ts +2 -2
  272. package/core/gather/gatherers/stacks.d.ts +2 -2
  273. package/core/gather/gatherers/stylesheets.d.ts +1 -9
  274. package/core/gather/gatherers/stylesheets.js +8 -39
  275. package/core/gather/gatherers/trace-compat.d.ts +3 -3
  276. package/core/gather/gatherers/trace-elements.d.ts +4 -6
  277. package/core/gather/navigation-runner.d.ts +3 -4
  278. package/core/gather/runner-helpers.d.ts +3 -3
  279. package/core/gather/session.d.ts +4 -4
  280. package/core/gather/session.js +1 -1
  281. package/core/gather/snapshot-runner.d.ts +2 -2
  282. package/core/gather/timespan-runner.d.ts +3 -3
  283. package/core/index.d.cts +1 -7
  284. package/core/index.d.ts +6 -6
  285. package/core/lib/arbitrary-equality-map.d.ts +2 -2
  286. package/core/lib/asset-saver.d.ts +3 -3
  287. package/core/lib/asset-saver.js +1 -1
  288. package/core/lib/bf-cache-strings.d.ts +117 -117
  289. package/core/lib/cdt/Platform.d.ts +1 -1
  290. package/core/lib/cdt/SDK.d.ts +1 -1
  291. package/core/lib/cdt/generated/ParsedURL.js +2 -2
  292. package/core/lib/cdt/generated/SourceMap.d.ts +11 -11
  293. package/core/lib/cdt/generated/SourceMap.js +3 -3
  294. package/core/lib/csp-evaluator.d.ts +20 -20
  295. package/core/lib/deprecation-description.d.ts +3 -3
  296. package/core/lib/deprecations-strings.d.ts +112 -112
  297. package/core/lib/i18n/i18n.d.ts +48 -48
  298. package/core/lib/icons.d.ts +3 -3
  299. package/core/lib/lantern/lantern.d.ts +2 -19
  300. package/core/lib/lantern/lantern.js +2 -45
  301. package/core/lib/lantern-trace-saver.d.ts +5 -7
  302. package/core/lib/lantern-trace-saver.js +2 -3
  303. package/core/lib/lh-error.d.ts +87 -87
  304. package/core/lib/lighthouse-compatibility.d.ts +1 -1
  305. package/core/lib/manifest-parser.d.ts +1 -1
  306. package/core/lib/minify-devtoolslog.d.ts +1 -1
  307. package/core/lib/navigation-error.d.ts +4 -6
  308. package/core/lib/navigation-error.js +2 -2
  309. package/core/lib/network-recorder.js +1 -1
  310. package/core/lib/network-request.d.ts +5 -5
  311. package/core/lib/network-request.js +2 -2
  312. package/core/lib/page-functions.d.ts +2 -2
  313. package/core/lib/script-helpers.d.ts +0 -1
  314. package/core/lib/sentry.d.ts +8 -8
  315. package/core/lib/stack-packs.d.ts +1 -1
  316. package/core/lib/trace-engine.d.ts +2 -2
  317. package/core/lib/tracehouse/cpu-profile-model.d.ts +8 -8
  318. package/core/lib/tracehouse/cpu-profile-model.js +2 -2
  319. package/core/lib/tracehouse/main-thread-tasks.d.ts +5 -5
  320. package/core/lib/tracehouse/task-groups.d.ts +6 -38
  321. package/core/lib/tracehouse/task-summary.d.ts +0 -1
  322. package/core/lib/tracehouse/trace-processor.d.ts +9 -9
  323. package/core/lib/traces/metric-trace-events.d.ts +1 -1
  324. package/core/lib/url-utils.d.ts +4 -4
  325. package/core/runner.d.ts +3 -4
  326. package/core/runner.js +0 -1
  327. package/core/scoring.d.ts +0 -1
  328. package/core/user-flow.d.ts +5 -5
  329. package/dist/report/bundle.esm.js +1 -1
  330. package/dist/report/flow.js +1 -1
  331. package/dist/report/standalone.js +1 -1
  332. package/eslint-local-rules.d.cts +4 -1
  333. package/flow-report/src/i18n/localized-strings.d.ts +1 -1
  334. package/flow-report/src/i18n/ui-strings.d.ts +43 -43
  335. package/package.json +7 -7
  336. package/readme.md +0 -2
  337. package/report/generator/file-namer.d.ts +2 -2
  338. package/report/generator/flow-report-assets.d.ts +1 -1
  339. package/report/generator/report-generator.d.ts +4 -4
  340. package/report/renderer/api.d.ts +2 -5
  341. package/report/renderer/category-renderer.d.ts +8 -8
  342. package/report/renderer/components.d.ts +2 -2
  343. package/report/renderer/crc-details-renderer.d.ts +2 -2
  344. package/report/renderer/details-renderer.d.ts +7 -7
  345. package/report/renderer/dom.d.ts +7 -7
  346. package/report/renderer/drop-down-menu.d.ts +1 -1
  347. package/report/renderer/drop-down-menu.js +15 -17
  348. package/report/renderer/element-screenshot-renderer.d.ts +3 -3
  349. package/report/renderer/explodey-gauge.d.ts +2 -2
  350. package/report/renderer/features-util.d.ts +1 -1
  351. package/report/renderer/performance-category-renderer.d.ts +1 -1
  352. package/report/renderer/report-globals.d.ts +1 -1
  353. package/report/renderer/report-renderer.d.ts +1 -1
  354. package/report/renderer/report-ui-features.d.ts +1 -1
  355. package/report/renderer/report-utils.d.ts +62 -62
  356. package/report/renderer/snippet-renderer.d.ts +9 -9
  357. package/report/renderer/swap-locale-feature.d.ts +2 -2
  358. package/report/renderer/topbar-features.d.ts +2 -2
  359. package/report/types/augment-dom.d.ts +0 -11
  360. package/shared/localization/format.d.ts +3 -3
  361. package/shared/localization/locales/en-US.json +1 -1
  362. package/shared/localization/locales/en-XL.json +1 -1
  363. package/shared/localization/locales.d.ts +1 -1
  364. package/shared/type-verifiers.d.ts +1 -1
  365. package/shared/util.d.ts +6 -6
  366. package/tsconfig.json +1 -11
  367. package/types/artifacts.d.ts +4 -4
  368. package/types/gatherer.d.ts +4 -5
  369. package/types/internal/node.d.ts +0 -6
  370. package/types/internal/query-selector.d.ts +2 -2
  371. package/core/lib/lantern/BaseNode.d.ts +0 -163
  372. package/core/lib/lantern/BaseNode.js +0 -369
  373. package/core/lib/lantern/BaseNode.test.js +0 -385
  374. package/core/lib/lantern/CpuNode.d.ts +0 -43
  375. package/core/lib/lantern/CpuNode.js +0 -99
  376. package/core/lib/lantern/LanternError.d.ts +0 -8
  377. package/core/lib/lantern/LanternError.js +0 -9
  378. package/core/lib/lantern/Metric.d.ts +0 -69
  379. package/core/lib/lantern/Metric.js +0 -137
  380. package/core/lib/lantern/NetworkNode.d.ts +0 -49
  381. package/core/lib/lantern/NetworkNode.js +0 -136
  382. package/core/lib/lantern/PageDependencyGraph.d.ts +0 -82
  383. package/core/lib/lantern/PageDependencyGraph.js +0 -610
  384. package/core/lib/lantern/PageDependencyGraph.test.js +0 -654
  385. package/core/lib/lantern/TBTUtils.d.ts +0 -44
  386. package/core/lib/lantern/TBTUtils.js +0 -76
  387. package/core/lib/lantern/TBTUtils.test.d.ts +0 -2
  388. package/core/lib/lantern/TBTUtils.test.js +0 -130
  389. package/core/lib/lantern/TraceEngineComputationData.d.ts +0 -25
  390. package/core/lib/lantern/TraceEngineComputationData.js +0 -466
  391. package/core/lib/lantern/metrics/FirstContentfulPaint.d.ts +0 -79
  392. package/core/lib/lantern/metrics/FirstContentfulPaint.js +0 -198
  393. package/core/lib/lantern/metrics/FirstContentfulPaint.test.js +0 -54
  394. package/core/lib/lantern/metrics/Interactive.d.ts +0 -20
  395. package/core/lib/lantern/metrics/Interactive.js +0 -109
  396. package/core/lib/lantern/metrics/Interactive.test.js +0 -56
  397. package/core/lib/lantern/metrics/LargestContentfulPaint.d.ts +0 -19
  398. package/core/lib/lantern/metrics/LargestContentfulPaint.js +0 -105
  399. package/core/lib/lantern/metrics/LargestContentfulPaint.test.js +0 -42
  400. package/core/lib/lantern/metrics/MaxPotentialFID.d.ts +0 -24
  401. package/core/lib/lantern/metrics/MaxPotentialFID.js +0 -91
  402. package/core/lib/lantern/metrics/MetricTestUtils.d.ts +0 -19
  403. package/core/lib/lantern/metrics/MetricTestUtils.js +0 -48
  404. package/core/lib/lantern/metrics/SpeedIndex.d.ts +0 -32
  405. package/core/lib/lantern/metrics/SpeedIndex.js +0 -142
  406. package/core/lib/lantern/metrics/SpeedIndex.test.js +0 -83
  407. package/core/lib/lantern/metrics/TotalBlockingTime.d.ts +0 -25
  408. package/core/lib/lantern/metrics/TotalBlockingTime.js +0 -125
  409. package/core/lib/lantern/metrics/__snapshots__/FirstContentfulPaint.test.js.snap +0 -11
  410. package/core/lib/lantern/metrics/__snapshots__/Interactive.test.js.snap +0 -17
  411. package/core/lib/lantern/metrics/metrics.d.ts +0 -9
  412. package/core/lib/lantern/metrics/metrics.js +0 -16
  413. package/core/lib/lantern/simulation/ConnectionPool.d.ts +0 -48
  414. package/core/lib/lantern/simulation/ConnectionPool.js +0 -152
  415. package/core/lib/lantern/simulation/ConnectionPool.test.js +0 -195
  416. package/core/lib/lantern/simulation/Constants.d.ts +0 -52
  417. package/core/lib/lantern/simulation/Constants.js +0 -48
  418. package/core/lib/lantern/simulation/DNSCache.d.ts +0 -42
  419. package/core/lib/lantern/simulation/DNSCache.js +0 -74
  420. package/core/lib/lantern/simulation/DNSCache.test.js +0 -72
  421. package/core/lib/lantern/simulation/NetworkAnalyzer.d.ts +0 -209
  422. package/core/lib/lantern/simulation/NetworkAnalyzer.js +0 -597
  423. package/core/lib/lantern/simulation/NetworkAnalyzer.test.js +0 -475
  424. package/core/lib/lantern/simulation/SimulationTimingMap.d.ts +0 -153
  425. package/core/lib/lantern/simulation/SimulationTimingMap.js +0 -219
  426. package/core/lib/lantern/simulation/Simulator.d.ts +0 -157
  427. package/core/lib/lantern/simulation/Simulator.js +0 -593
  428. package/core/lib/lantern/simulation/Simulator.test.js +0 -434
  429. package/core/lib/lantern/simulation/TCPConnection.test.d.ts +0 -2
  430. package/core/lib/lantern/simulation/TCPConnection.test.js +0 -374
  431. package/core/lib/lantern/simulation/TcpConnection.d.ts +0 -89
  432. package/core/lib/lantern/simulation/TcpConnection.js +0 -230
  433. package/core/lib/lantern/simulation/simulation.d.ts +0 -21
  434. package/core/lib/lantern/simulation/simulation.js +0 -28
  435. package/core/lib/lantern/types/lantern.d.ts +0 -256
  436. package/core/lib/lantern/types/lantern.js +0 -7
@@ -1,91 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2024 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- import * as Lantern from '../lantern.js';
8
-
9
- /** @typedef {import('../BaseNode.js').Node} Node */
10
-
11
- class MaxPotentialFID extends Lantern.Metric {
12
- /**
13
- * @return {Lantern.Simulation.MetricCoefficients}
14
- */
15
- static get COEFFICIENTS() {
16
- return {
17
- intercept: 0,
18
- optimistic: 0.5,
19
- pessimistic: 0.5,
20
- };
21
- }
22
-
23
- /**
24
- * @param {Node} dependencyGraph
25
- * @return {Node}
26
- */
27
- static getOptimisticGraph(dependencyGraph) {
28
- return dependencyGraph;
29
- }
30
-
31
- /**
32
- * @param {Node} dependencyGraph
33
- * @return {Node}
34
- */
35
- static getPessimisticGraph(dependencyGraph) {
36
- return dependencyGraph;
37
- }
38
-
39
- /**
40
- * @param {Lantern.Simulation.Result} simulation
41
- * @param {import('../Metric.js').Extras} extras
42
- * @return {Lantern.Simulation.Result}
43
- */
44
- static getEstimateFromSimulation(simulation, extras) {
45
- if (!extras.fcpResult) throw new Error('missing fcpResult');
46
-
47
- // Intentionally use the opposite FCP estimate, a more pessimistic FCP means that more tasks
48
- // are excluded from the FID computation, so a higher FCP means lower FID for same work.
49
- const fcpTimeInMs = extras.optimistic
50
- ? extras.fcpResult.pessimisticEstimate.timeInMs
51
- : extras.fcpResult.optimisticEstimate.timeInMs;
52
-
53
- const timings = MaxPotentialFID.getTimingsAfterFCP(
54
- simulation.nodeTimings,
55
- fcpTimeInMs
56
- );
57
-
58
- return {
59
- timeInMs: Math.max(...timings.map(timing => timing.duration), 16),
60
- nodeTimings: simulation.nodeTimings,
61
- };
62
- }
63
-
64
- /**
65
- * @param {Lantern.Simulation.MetricComputationDataInput} data
66
- * @param {Omit<import('../Metric.js').Extras, 'optimistic'>=} extras
67
- * @return {Promise<Lantern.Metrics.Result>}
68
- */
69
- static compute(data, extras) {
70
- const fcpResult = extras?.fcpResult;
71
- if (!fcpResult) {
72
- throw new Error('FCP is required to calculate the Max Potential FID metric');
73
- }
74
-
75
- return super.compute(data, extras);
76
- }
77
-
78
- /**
79
- * @param {Lantern.Simulation.Result['nodeTimings']} nodeTimings
80
- * @param {number} fcpTimeInMs
81
- * @return {Array<{duration: number}>}
82
- */
83
- static getTimingsAfterFCP(nodeTimings, fcpTimeInMs) {
84
- return Array.from(nodeTimings.entries())
85
- .filter(([node, timing]) =>
86
- node.type === Lantern.BaseNode.TYPES.CPU && timing.endTime > fcpTimeInMs)
87
- .map(([_, timing]) => timing);
88
- }
89
- }
90
-
91
- export {MaxPotentialFID};
@@ -1,19 +0,0 @@
1
- /**
2
- * @param {TraceEngine.Types.TraceEvents.TraceEventData[]} traceEvents
3
- */
4
- export function runTraceEngine(traceEvents: TraceEngine.Types.TraceEvents.TraceEventData[]): Promise<TraceEngine.Handlers.Types.EnabledHandlerDataWithMeta<typeof TraceEngine.Handlers.ModelHandlers>>;
5
- /**
6
- * @param {{trace: Lantern.Trace, settings?: Lantern.Simulation.Settings, URL?: Lantern.Simulation.URL}} opts
7
- */
8
- export function getComputationDataFromFixture({ trace, settings, URL }: {
9
- trace: Lantern.Trace;
10
- settings?: Lantern.Simulation.Settings;
11
- URL?: Lantern.Simulation.URL;
12
- }): Promise<{
13
- simulator: Lantern.Simulation.Simulator<any>;
14
- graph: import("../PageDependencyGraph.js").Node;
15
- processedNavigation: import("../types/lantern.js").Simulation.ProcessedNavigation;
16
- }>;
17
- import * as TraceEngine from '@paulirish/trace_engine';
18
- import * as Lantern from '../lantern.js';
19
- //# sourceMappingURL=MetricTestUtils.d.ts.map
@@ -1,48 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2024 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- import * as TraceEngine from '@paulirish/trace_engine';
8
-
9
- import * as Lantern from '../lantern.js';
10
- import {polyfillDOMRect} from '../../polyfill-dom-rect.js';
11
-
12
- polyfillDOMRect();
13
-
14
- /**
15
- * @param {TraceEngine.Types.TraceEvents.TraceEventData[]} traceEvents
16
- */
17
- async function runTraceEngine(traceEvents) {
18
- const processor = TraceEngine.Processor.TraceProcessor.createWithAllHandlers();
19
- await processor.parse(traceEvents);
20
- if (!processor.traceParsedData) throw new Error('No data');
21
- return processor.traceParsedData;
22
- }
23
-
24
- /**
25
- * @param {{trace: Lantern.Trace, settings?: Lantern.Simulation.Settings, URL?: Lantern.Simulation.URL}} opts
26
- */
27
- async function getComputationDataFromFixture({trace, settings, URL}) {
28
- settings = settings ?? /** @type {Lantern.Simulation.Settings} */({});
29
- if (!settings.throttlingMethod) settings.throttlingMethod = 'simulate';
30
- const traceEngineData = await runTraceEngine(
31
- /** @type {TraceEngine.Types.TraceEvents.TraceEventData[]} */ (trace.traceEvents)
32
- );
33
- const requests =
34
- Lantern.TraceEngineComputationData.createNetworkRequests(trace, traceEngineData);
35
- const networkAnalysis = Lantern.Simulation.NetworkAnalyzer.analyze(requests);
36
-
37
- return {
38
- simulator: Lantern.Simulation.Simulator.createSimulator({...settings, networkAnalysis}),
39
- graph: Lantern.TraceEngineComputationData.createGraph(requests, trace, traceEngineData, URL),
40
- processedNavigation:
41
- Lantern.TraceEngineComputationData.createProcessedNavigation(traceEngineData),
42
- };
43
- }
44
-
45
- export {
46
- runTraceEngine,
47
- getComputationDataFromFixture,
48
- };
@@ -1,32 +0,0 @@
1
- export type Node = import('../BaseNode.js').Node;
2
- /** @typedef {import('../BaseNode.js').Node} Node */
3
- export class SpeedIndex extends Lantern.Metric {
4
- /**
5
- * @param {Node} dependencyGraph
6
- * @return {Node}
7
- */
8
- static getOptimisticGraph(dependencyGraph: Node): Node;
9
- /**
10
- * @param {Node} dependencyGraph
11
- * @return {Node}
12
- */
13
- static getPessimisticGraph(dependencyGraph: Node): Node;
14
- /**
15
- * Approximate speed index using layout events from the simulated node timings.
16
- * The layout-based speed index is the weighted average of the endTime of CPU nodes that contained
17
- * a 'Layout' task. log(duration) is used as the weight to stand for "significance" to the page.
18
- *
19
- * If no layout events can be found or the endTime of a CPU task is too early, FCP is used instead.
20
- *
21
- * This approach was determined after evaluating the accuracy/complexity tradeoff of many
22
- * different methods. Read more in the evaluation doc.
23
- *
24
- * @see https://docs.google.com/document/d/1qJWXwxoyVLVadezIp_Tgdk867G3tDNkkVRvUJSH3K1E/edit#
25
- * @param {Lantern.Simulation.Result['nodeTimings']} nodeTimings
26
- * @param {number} fcpTimeInMs
27
- * @return {number}
28
- */
29
- static computeLayoutBasedSpeedIndex(nodeTimings: Lantern.Simulation.Result['nodeTimings'], fcpTimeInMs: number): number;
30
- }
31
- import * as Lantern from '../lantern.js';
32
- //# sourceMappingURL=SpeedIndex.d.ts.map
@@ -1,142 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2024 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- import * as Lantern from '../lantern.js';
8
-
9
- const mobileSlow4GRtt = 150;
10
-
11
- /** @typedef {import('../BaseNode.js').Node} Node */
12
-
13
- class SpeedIndex extends Lantern.Metric {
14
- /**
15
- * @return {Lantern.Simulation.MetricCoefficients}
16
- */
17
- static get COEFFICIENTS() {
18
- return {
19
- // Note that the optimistic estimate is based on the real observed speed index rather than a
20
- // real lantern graph (and the final estimate will be Math.max(FCP, Speed Index)).
21
- intercept: 0,
22
- optimistic: 1.4,
23
- pessimistic: 0.4,
24
- };
25
- }
26
-
27
- /**
28
- * @param {number} rttMs
29
- * @return {Lantern.Simulation.MetricCoefficients}
30
- */
31
- static getScaledCoefficients(rttMs) { // eslint-disable-line no-unused-vars
32
- // We want to scale our default coefficients based on the speed of the connection.
33
- // We will linearly interpolate coefficients for the passed-in rttMs based on two pre-determined points:
34
- // 1. Baseline point of 30 ms RTT where Speed Index should be a ~50/50 blend of optimistic/pessimistic.
35
- // 30 ms was based on a typical home WiFi connection's actual RTT.
36
- // Coefficients here follow from the fact that the optimistic estimate should be very close
37
- // to reality at this connection speed and the pessimistic estimate compensates for minor
38
- // connection speed differences.
39
- // 2. Default throttled point of 150 ms RTT where the default coefficients have been determined to be most accurate.
40
- // Coefficients here were determined through thorough analysis and linear regression on the
41
- // lantern test data set. See core/scripts/test-lantern.sh for more detail.
42
- // While the coefficients haven't been analyzed at the interpolated points, it's our current best effort.
43
- const defaultCoefficients = this.COEFFICIENTS;
44
- const defaultRttExcess = mobileSlow4GRtt - 30;
45
- const multiplier = Math.max((rttMs - 30) / defaultRttExcess, 0);
46
-
47
- return {
48
- intercept: defaultCoefficients.intercept * multiplier,
49
- optimistic: 0.5 + (defaultCoefficients.optimistic - 0.5) * multiplier,
50
- pessimistic: 0.5 + (defaultCoefficients.pessimistic - 0.5) * multiplier,
51
- };
52
- }
53
-
54
- /**
55
- * @param {Node} dependencyGraph
56
- * @return {Node}
57
- */
58
- static getOptimisticGraph(dependencyGraph) {
59
- return dependencyGraph;
60
- }
61
-
62
- /**
63
- * @param {Node} dependencyGraph
64
- * @return {Node}
65
- */
66
- static getPessimisticGraph(dependencyGraph) {
67
- return dependencyGraph;
68
- }
69
-
70
- /**
71
- * @param {Lantern.Simulation.Result} simulationResult
72
- * @param {import('../Metric.js').Extras} extras
73
- * @return {Lantern.Simulation.Result}
74
- */
75
- static getEstimateFromSimulation(simulationResult, extras) {
76
- if (!extras.fcpResult) throw new Error('missing fcpResult');
77
- if (extras.observedSpeedIndex === undefined) throw new Error('missing observedSpeedIndex');
78
-
79
- const fcpTimeInMs = extras.fcpResult.pessimisticEstimate.timeInMs;
80
- const estimate = extras.optimistic
81
- ? extras.observedSpeedIndex
82
- : SpeedIndex.computeLayoutBasedSpeedIndex(simulationResult.nodeTimings, fcpTimeInMs);
83
- return {
84
- timeInMs: estimate,
85
- nodeTimings: simulationResult.nodeTimings,
86
- };
87
- }
88
-
89
- /**
90
- * @param {Lantern.Simulation.MetricComputationDataInput} data
91
- * @param {Omit<import('../Metric.js').Extras, 'optimistic'>=} extras
92
- * @return {Promise<Lantern.Metrics.Result>}
93
- */
94
- static async compute(data, extras) {
95
- const fcpResult = extras?.fcpResult;
96
- if (!fcpResult) {
97
- throw new Error('FCP is required to calculate the SpeedIndex metric');
98
- }
99
-
100
- const metricResult = await super.compute(data, extras);
101
- metricResult.timing = Math.max(metricResult.timing, fcpResult.timing);
102
- return metricResult;
103
- }
104
-
105
- /**
106
- * Approximate speed index using layout events from the simulated node timings.
107
- * The layout-based speed index is the weighted average of the endTime of CPU nodes that contained
108
- * a 'Layout' task. log(duration) is used as the weight to stand for "significance" to the page.
109
- *
110
- * If no layout events can be found or the endTime of a CPU task is too early, FCP is used instead.
111
- *
112
- * This approach was determined after evaluating the accuracy/complexity tradeoff of many
113
- * different methods. Read more in the evaluation doc.
114
- *
115
- * @see https://docs.google.com/document/d/1qJWXwxoyVLVadezIp_Tgdk867G3tDNkkVRvUJSH3K1E/edit#
116
- * @param {Lantern.Simulation.Result['nodeTimings']} nodeTimings
117
- * @param {number} fcpTimeInMs
118
- * @return {number}
119
- */
120
- static computeLayoutBasedSpeedIndex(nodeTimings, fcpTimeInMs) {
121
- /** @type {Array<{time: number, weight: number}>} */
122
- const layoutWeights = [];
123
- for (const [node, timing] of nodeTimings.entries()) {
124
- if (node.type !== Lantern.BaseNode.TYPES.CPU) continue;
125
-
126
- if (node.childEvents.some(x => x.name === 'Layout')) {
127
- const timingWeight = Math.max(Math.log2(timing.endTime - timing.startTime), 0);
128
- layoutWeights.push({time: timing.endTime, weight: timingWeight});
129
- }
130
- }
131
-
132
- const totalWeightedTime = layoutWeights
133
- .map(evt => evt.weight * Math.max(evt.time, fcpTimeInMs))
134
- .reduce((a, b) => a + b, 0);
135
- const totalWeight = layoutWeights.map(evt => evt.weight).reduce((a, b) => a + b, 0);
136
-
137
- if (!totalWeight) return fcpTimeInMs;
138
- return totalWeightedTime / totalWeight;
139
- }
140
- }
141
-
142
- export {SpeedIndex};
@@ -1,83 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2024 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- import * as Lantern from '../lantern.js';
8
- import {readJson} from '../../../test/test-utils.js';
9
- import {getComputationDataFromFixture} from './MetricTestUtils.js';
10
-
11
- const {SpeedIndex, FirstContentfulPaint} = Lantern.Metrics;
12
-
13
- const trace = readJson('../../../test/fixtures/artifacts/progressive-app/trace.json', import.meta);
14
-
15
- const defaultThrottling = Lantern.Simulation.Constants.throttling.mobileSlow4G;
16
-
17
- describe('Metrics: Lantern Speed Index', () => {
18
- it('should compute predicted value', async () => {
19
- const data = await getComputationDataFromFixture({trace});
20
- // TODO: observedSpeedIndex is from the Speedline library, and is used for optimistic
21
- // mode. At the moment callers must pass the result into Lantern.
22
- const observedSpeedIndex = 379.04474997520487;
23
- const result = await SpeedIndex.compute(data, {
24
- fcpResult: await FirstContentfulPaint.compute(data),
25
- observedSpeedIndex,
26
- });
27
-
28
- expect({
29
- timing: Math.round(result.timing),
30
- optimistic: Math.round(result.optimisticEstimate.timeInMs),
31
- pessimistic: Math.round(result.pessimisticEstimate.timeInMs)}).
32
- toMatchInlineSnapshot(`
33
- Object {
34
- "optimistic": 379,
35
- "pessimistic": 1122,
36
- "timing": 1107,
37
- }
38
- `);
39
- });
40
-
41
- it('should compute predicted value for different settings', async () => {
42
- const settings = {throttlingMethod: 'simulate', throttling: {...defaultThrottling, rttMs: 300}};
43
- const data = await getComputationDataFromFixture({trace, settings});
44
- const observedSpeedIndex = 379.04474997520487;
45
- const result = await SpeedIndex.compute(data, {
46
- fcpResult: await FirstContentfulPaint.compute(data),
47
- observedSpeedIndex,
48
- });
49
-
50
- expect({
51
- timing: Math.round(result.timing),
52
- optimistic: Math.round(result.optimisticEstimate.timeInMs),
53
- pessimistic: Math.round(result.pessimisticEstimate.timeInMs)}).
54
- toMatchInlineSnapshot(`
55
- Object {
56
- "optimistic": 379,
57
- "pessimistic": 2022,
58
- "timing": 2007,
59
- }
60
- `);
61
- });
62
-
63
- it('should not scale coefficients at default', async () => {
64
- const result = SpeedIndex.getScaledCoefficients(defaultThrottling.rttMs);
65
- expect(result).toEqual(SpeedIndex.COEFFICIENTS);
66
- });
67
-
68
- it('should scale coefficients back', async () => {
69
- const result = SpeedIndex.getScaledCoefficients(5);
70
- expect(result).toEqual({intercept: 0, pessimistic: 0.5, optimistic: 0.5});
71
- });
72
-
73
- it('should scale coefficients forward', async () => {
74
- const result = SpeedIndex.getScaledCoefficients(300);
75
- expect(result).toMatchInlineSnapshot(`
76
- Object {
77
- "intercept": 0,
78
- "optimistic": 2.525,
79
- "pessimistic": 0.275,
80
- }
81
- `);
82
- });
83
- });
@@ -1,25 +0,0 @@
1
- export type Node = import('../BaseNode.js').Node;
2
- /** @typedef {import('../BaseNode.js').Node} Node */
3
- export class TotalBlockingTime extends Lantern.Metric {
4
- /**
5
- * @param {Node} dependencyGraph
6
- * @return {Node}
7
- */
8
- static getOptimisticGraph(dependencyGraph: Node): Node;
9
- /**
10
- * @param {Node} dependencyGraph
11
- * @return {Node}
12
- */
13
- static getPessimisticGraph(dependencyGraph: Node): Node;
14
- /**
15
- * @param {Lantern.Simulation.Result['nodeTimings']} nodeTimings
16
- * @param {number} minDurationMs
17
- */
18
- static getTopLevelEvents(nodeTimings: Lantern.Simulation.Result['nodeTimings'], minDurationMs: number): {
19
- start: number;
20
- end: number;
21
- duration: number;
22
- }[];
23
- }
24
- import * as Lantern from '../lantern.js';
25
- //# sourceMappingURL=TotalBlockingTime.d.ts.map
@@ -1,125 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2024 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- import * as Lantern from '../lantern.js';
8
-
9
- /** @typedef {import('../BaseNode.js').Node} Node */
10
-
11
- class TotalBlockingTime extends Lantern.Metric {
12
- /**
13
- * @return {Lantern.Simulation.MetricCoefficients}
14
- */
15
- static get COEFFICIENTS() {
16
- return {
17
- intercept: 0,
18
- optimistic: 0.5,
19
- pessimistic: 0.5,
20
- };
21
- }
22
-
23
- /**
24
- * @param {Node} dependencyGraph
25
- * @return {Node}
26
- */
27
- static getOptimisticGraph(dependencyGraph) {
28
- return dependencyGraph;
29
- }
30
-
31
- /**
32
- * @param {Node} dependencyGraph
33
- * @return {Node}
34
- */
35
- static getPessimisticGraph(dependencyGraph) {
36
- return dependencyGraph;
37
- }
38
-
39
- /**
40
- * @param {Lantern.Simulation.Result} simulation
41
- * @param {import('../Metric.js').Extras} extras
42
- * @return {Lantern.Simulation.Result}
43
- */
44
- static getEstimateFromSimulation(simulation, extras) {
45
- if (!extras.fcpResult) throw new Error('missing fcpResult');
46
- if (!extras.interactiveResult) throw new Error('missing interactiveResult');
47
-
48
- // Intentionally use the opposite FCP estimate. A pessimistic FCP is higher than equal to an
49
- // optimistic FCP, which means potentially more tasks are excluded from the Total Blocking Time
50
- // computation. So a more pessimistic FCP gives a more optimistic Total Blocking Time for the
51
- // same work.
52
- const fcpTimeInMs = extras.optimistic
53
- ? extras.fcpResult.pessimisticEstimate.timeInMs
54
- : extras.fcpResult.optimisticEstimate.timeInMs;
55
-
56
- // Similarly, we always have pessimistic TTI >= optimistic TTI. Therefore, picking optimistic
57
- // TTI means our window of interest is smaller and thus potentially more tasks are excluded from
58
- // Total Blocking Time computation, yielding a lower (more optimistic) Total Blocking Time value
59
- // for the same work.
60
- const interactiveTimeMs = extras.optimistic
61
- ? extras.interactiveResult.optimisticEstimate.timeInMs
62
- : extras.interactiveResult.pessimisticEstimate.timeInMs;
63
-
64
- const minDurationMs = Lantern.TBTUtils.BLOCKING_TIME_THRESHOLD;
65
-
66
- const events = TotalBlockingTime.getTopLevelEvents(
67
- simulation.nodeTimings,
68
- minDurationMs
69
- );
70
-
71
- return {
72
- timeInMs: Lantern.TBTUtils.calculateSumOfBlockingTime(
73
- events,
74
- fcpTimeInMs,
75
- interactiveTimeMs
76
- ),
77
- nodeTimings: simulation.nodeTimings,
78
- };
79
- }
80
-
81
- /**
82
- * @param {Lantern.Simulation.MetricComputationDataInput} data
83
- * @param {Omit<import('../Metric.js').Extras, 'optimistic'>=} extras
84
- * @return {Promise<Lantern.Metrics.Result>}
85
- */
86
- static async compute(data, extras) {
87
- const fcpResult = extras?.fcpResult;
88
- if (!fcpResult) {
89
- throw new Error('FCP is required to calculate the TBT metric');
90
- }
91
-
92
- const interactiveResult = extras?.fcpResult;
93
- if (!interactiveResult) {
94
- throw new Error('Interactive is required to calculate the TBT metric');
95
- }
96
-
97
- return super.compute(data, extras);
98
- }
99
-
100
- /**
101
- * @param {Lantern.Simulation.Result['nodeTimings']} nodeTimings
102
- * @param {number} minDurationMs
103
- */
104
- static getTopLevelEvents(nodeTimings, minDurationMs) {
105
- /** @type {Array<{start: number, end: number, duration: number}>}
106
- */
107
- const events = [];
108
-
109
- for (const [node, timing] of nodeTimings.entries()) {
110
- if (node.type !== Lantern.BaseNode.TYPES.CPU) continue;
111
- // Filtering out events below minimum duration.
112
- if (timing.duration < minDurationMs) continue;
113
-
114
- events.push({
115
- start: timing.startTime,
116
- end: timing.endTime,
117
- duration: timing.duration,
118
- });
119
- }
120
-
121
- return events;
122
- }
123
- }
124
-
125
- export {TotalBlockingTime};
@@ -1,11 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`Metrics: Lantern FCP should compute predicted value 1`] = `
4
- Object {
5
- "optimistic": 1107,
6
- "optimisticNodeTimings": 4,
7
- "pessimistic": 1107,
8
- "pessimisticNodeTimings": 4,
9
- "timing": 1107,
10
- }
11
- `;
@@ -1,17 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`Metrics: Lantern TTI should compute predicted value 1`] = `
4
- Object {
5
- "optimistic": 1107,
6
- "pessimistic": 1134,
7
- "timing": 1122,
8
- }
9
- `;
10
-
11
- exports[`Metrics: Lantern TTI should compute predicted value on iframes with substantial layout 1`] = `
12
- Object {
13
- "optimistic": 2372,
14
- "pessimistic": 2386,
15
- "timing": 2379,
16
- }
17
- `;
@@ -1,9 +0,0 @@
1
- export { FirstContentfulPaint } from "./FirstContentfulPaint.js";
2
- export { Interactive } from "./Interactive.js";
3
- export { LargestContentfulPaint } from "./LargestContentfulPaint.js";
4
- export { MaxPotentialFID } from "./MaxPotentialFID.js";
5
- export { SpeedIndex } from "./SpeedIndex.js";
6
- export { TotalBlockingTime } from "./TotalBlockingTime.js";
7
- export type Result<T = any> = Lantern.MetricResult<T>;
8
- import * as Lantern from '../types/lantern.js';
9
- //# sourceMappingURL=metrics.d.ts.map
@@ -1,16 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2024 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- import * as Lantern from '../types/lantern.js';
8
-
9
- export {FirstContentfulPaint} from './FirstContentfulPaint.js';
10
- export {Interactive} from './Interactive.js';
11
- export {LargestContentfulPaint} from './LargestContentfulPaint.js';
12
- export {MaxPotentialFID} from './MaxPotentialFID.js';
13
- export {SpeedIndex} from './SpeedIndex.js';
14
- export {TotalBlockingTime} from './TotalBlockingTime.js';
15
-
16
- /** @template [T=any] @typedef {Lantern.MetricResult<T>} Result */
@@ -1,48 +0,0 @@
1
- export class ConnectionPool {
2
- /**
3
- * @param {Lantern.NetworkRequest[]} records
4
- * @param {Required<Lantern.Simulation.Options>} options
5
- */
6
- constructor(records: Lantern.NetworkRequest[], options: Required<Lantern.Simulation.Options>);
7
- _options: Required<import("../types/lantern.js").Simulation.Options>;
8
- _records: Lantern.NetworkRequest<any>[];
9
- /** @type {Map<string, TcpConnection[]>} */
10
- _connectionsByOrigin: Map<string, TcpConnection[]>;
11
- /** @type {Map<Lantern.NetworkRequest, TcpConnection>} */
12
- _connectionsByRequest: Map<Lantern.NetworkRequest, TcpConnection>;
13
- _connectionsInUse: Set<any>;
14
- _connectionReusedByRequestId: Map<string, boolean>;
15
- /**
16
- * @return {TcpConnection[]}
17
- */
18
- connectionsInUse(): TcpConnection[];
19
- _initializeConnections(): void;
20
- /**
21
- * @param {Array<TcpConnection>} connections
22
- */
23
- _findAvailableConnectionWithLargestCongestionWindow(connections: Array<TcpConnection>): Lantern.Simulation.TcpConnection | null;
24
- /**
25
- * This method finds an available connection to the origin specified by the network request or null
26
- * if no connection was available. If returned, connection will not be available for other network
27
- * records until release is called.
28
- *
29
- * @param {Lantern.NetworkRequest} request
30
- * @return {?TcpConnection}
31
- */
32
- acquire(request: Lantern.NetworkRequest): TcpConnection | null;
33
- /**
34
- * Return the connection currently being used to fetch a request. If no connection
35
- * currently being used for this request, an error will be thrown.
36
- *
37
- * @param {Lantern.NetworkRequest} request
38
- * @return {TcpConnection}
39
- */
40
- acquireActiveConnectionFromRequest(request: Lantern.NetworkRequest): TcpConnection;
41
- /**
42
- * @param {Lantern.NetworkRequest} request
43
- */
44
- release(request: Lantern.NetworkRequest): void;
45
- }
46
- import * as Lantern from '../lantern.js';
47
- import { TcpConnection } from './TcpConnection.js';
48
- //# sourceMappingURL=ConnectionPool.d.ts.map