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,475 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2018 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- import assert from 'assert/strict';
8
-
9
- import * as Lantern from '../lantern.js';
10
- import {readJson} from '../../../test/test-utils.js';
11
- import {runTraceEngine} from '../metrics/MetricTestUtils.js';
12
-
13
- const {NetworkAnalyzer} = Lantern.Simulation;
14
-
15
- const trace = readJson('../../../test/fixtures/artifacts/paul/trace.json', import.meta);
16
- const traceWithRedirect = readJson('../../../test/fixtures/artifacts/redirect/trace.json', import.meta);
17
-
18
- /**
19
- * @param {Lantern.Trace} trace
20
- */
21
- async function createRequests(trace) {
22
- const traceEngineData = await runTraceEngine(
23
- /** @type {TraceEngine.Types.TraceEvents.TraceEventData[]} */ (trace.traceEvents)
24
- );
25
- return Lantern.TraceEngineComputationData.createNetworkRequests(trace, traceEngineData);
26
- }
27
-
28
- describe('NetworkAnalyzer', () => {
29
- afterEach(() => {
30
- global.isLightrider = undefined;
31
- });
32
-
33
- let recordId;
34
-
35
- function createRecord(opts) {
36
- const url = opts.url || 'https://example.com';
37
- if (opts.networkRequestTime) opts.networkRequestTime *= 1000;
38
- if (opts.networkEndTime) opts.networkEndTime *= 1000;
39
- return Object.assign(
40
- {
41
- url,
42
- requestId: recordId++,
43
- connectionId: 0,
44
- connectionReused: false,
45
- networkRequestTime: 10,
46
- networkEndTime: 10,
47
- transferSize: 0,
48
- protocol: opts.protocol || 'http/1.1',
49
- parsedURL: {scheme: url.match(/https?/)[0], securityOrigin: url.match(/.*\.com/)[0]},
50
- timing: opts.timing || null,
51
- },
52
- opts
53
- );
54
- }
55
-
56
- beforeEach(() => {
57
- recordId = 1;
58
- });
59
-
60
- function assertCloseEnough(valueA, valueB, threshold = 1) {
61
- const message = `${valueA} was not close enough to ${valueB}`;
62
- assert.ok(Math.abs(valueA - valueB) < threshold, message);
63
- }
64
-
65
- describe('#estimateIfConnectionWasReused', () => {
66
- it('should use built-in value when trustworthy', () => {
67
- const records = [
68
- {requestId: 1, connectionId: 1, connectionReused: false},
69
- {requestId: 2, connectionId: 1, connectionReused: true},
70
- {requestId: 3, connectionId: 2, connectionReused: false},
71
- {requestId: 4, connectionId: 3, connectionReused: false},
72
- {requestId: 5, connectionId: 2, connectionReused: true},
73
- ];
74
-
75
- const result = NetworkAnalyzer.estimateIfConnectionWasReused(records);
76
- const expected = new Map([[1, false], [2, true], [3, false], [4, false], [5, true]]);
77
- assert.deepStrictEqual(result, expected);
78
- });
79
-
80
- it('should estimate values when not trustworthy (duplicate IDs)', () => {
81
- const records = [
82
- createRecord({requestId: 1, networkRequestTime: 0, networkEndTime: 15}),
83
- createRecord({requestId: 2, networkRequestTime: 10, networkEndTime: 25}),
84
- createRecord({requestId: 3, networkRequestTime: 20, networkEndTime: 40}),
85
- createRecord({requestId: 4, networkRequestTime: 30, networkEndTime: 40}),
86
- ];
87
-
88
- const result = NetworkAnalyzer.estimateIfConnectionWasReused(records);
89
- const expected = new Map([[1, false], [2, false], [3, true], [4, true]]);
90
- assert.deepStrictEqual(result, expected);
91
- });
92
-
93
- it('should estimate values when not trustworthy (connectionReused nonsense)', () => {
94
- const records = [
95
- createRecord({
96
- requestId: 1,
97
- connectionId: 1,
98
- connectionReused: true,
99
- networkRequestTime: 0,
100
- networkEndTime: 15,
101
- }),
102
- createRecord({
103
- requestId: 2,
104
- connectionId: 1,
105
- connectionReused: true,
106
- networkRequestTime: 10,
107
- networkEndTime: 25,
108
- }),
109
- createRecord({
110
- requestId: 3,
111
- connectionId: 1,
112
- connectionReused: true,
113
- networkRequestTime: 20,
114
- networkEndTime: 40,
115
- }),
116
- createRecord({
117
- requestId: 4,
118
- connectionId: 2,
119
- connectionReused: false,
120
- networkRequestTime: 30,
121
- networkEndTime: 40,
122
- }),
123
- ];
124
-
125
- const result = NetworkAnalyzer.estimateIfConnectionWasReused(records);
126
- const expected = new Map([[1, false], [2, false], [3, true], [4, true]]);
127
- assert.deepStrictEqual(result, expected);
128
- });
129
-
130
- it('should estimate with earliest allowed reuse', () => {
131
- const records = [
132
- createRecord({requestId: 1, networkRequestTime: 0, networkEndTime: 40}),
133
- createRecord({requestId: 2, networkRequestTime: 10, networkEndTime: 15}),
134
- createRecord({requestId: 3, networkRequestTime: 20, networkEndTime: 30}),
135
- createRecord({requestId: 4, networkRequestTime: 35, networkEndTime: 40}),
136
- ];
137
-
138
- const result = NetworkAnalyzer.estimateIfConnectionWasReused(records);
139
- const expected = new Map([[1, false], [2, false], [3, true], [4, true]]);
140
- assert.deepStrictEqual(result, expected);
141
- });
142
-
143
- it('should work on a real trace', async () => {
144
- const requests = await createRequests(trace);
145
- const result = NetworkAnalyzer.estimateIfConnectionWasReused(requests);
146
- const distinctConnections = Array.from(result.values()).filter(item => !item).length;
147
- assert.equal(result.size, 25);
148
- assert.equal(distinctConnections, 9);
149
- });
150
- });
151
-
152
- describe('#estimateRTTByOrigin', () => {
153
- it('should infer from tcp timing when available', () => {
154
- const timing = {connectStart: 0, connectEnd: 99};
155
- const request = createRecord({networkRequestTime: 0, networkEndTime: 1, timing});
156
- const result = NetworkAnalyzer.estimateRTTByOrigin([request]);
157
- const expected = {min: 99, max: 99, avg: 99, median: 99};
158
- assert.deepStrictEqual(result.get('https://example.com'), expected);
159
- });
160
-
161
- it('should infer only one estimate if tcp and ssl start times are equal', () => {
162
- const timing = {connectStart: 0, connectEnd: 99, sslStart: 0, sslEnd: 99};
163
- const request = createRecord({networkRequestTime: 0, networkEndTime: 1, timing});
164
- const result = NetworkAnalyzer.estimateRTTByOrigin([request]);
165
- const expected = {min: 99, max: 99, avg: 99, median: 99};
166
- assert.deepStrictEqual(result.get('https://example.com'), expected);
167
- });
168
-
169
- it('should infer from tcp and ssl timing when available', () => {
170
- const timing = {connectStart: 0, connectEnd: 99, sslStart: 50, sslEnd: 99};
171
- const request = createRecord({networkRequestTime: 0, networkEndTime: 1, timing});
172
- const result = NetworkAnalyzer.estimateRTTByOrigin([request]);
173
- const expected = {min: 49, max: 50, avg: 49.5, median: 49.5};
174
- assert.deepStrictEqual(result.get('https://example.com'), expected);
175
- });
176
-
177
- it('should infer from connection timing when available for h3 (one estimate)', () => {
178
- const timing = {connectStart: 0, connectEnd: 99, sslStart: 1, sslEnd: 99};
179
- const request =
180
- createRecord({networkRequestTime: 0, networkEndTime: 1, timing, protocol: 'h3'});
181
- const result = NetworkAnalyzer.estimateRTTByOrigin([request]);
182
- const expected = {min: 99, max: 99, avg: 99, median: 99};
183
- assert.deepStrictEqual(result.get('https://example.com'), expected);
184
- });
185
-
186
- it('should infer from sendStart when available', () => {
187
- const timing = {sendStart: 150};
188
- // this request took 150ms before Chrome could send the request
189
- // i.e. DNS (maybe) + queuing (maybe) + TCP handshake took ~100ms
190
- // 150ms / 3 round trips ~= 50ms RTT
191
- const request = createRecord({networkRequestTime: 0, networkEndTime: 1, timing});
192
- const result = NetworkAnalyzer.estimateRTTByOrigin([request], {coarseEstimateMultiplier: 1});
193
- const expected = {min: 50, max: 50, avg: 50, median: 50};
194
- assert.deepStrictEqual(result.get('https://example.com'), expected);
195
- });
196
-
197
- it('should infer from download timing when available', () => {
198
- const timing = {receiveHeadersEnd: 100};
199
- // this request took 1000ms after the first byte was received to download the payload
200
- // i.e. it took at least one full additional roundtrip after first byte to download the rest
201
- // 1000ms / 1 round trip ~= 1000ms RTT
202
- const request = createRecord({networkRequestTime: 0, networkEndTime: 1.1,
203
- transferSize: 28 * 1024, timing});
204
- const result = NetworkAnalyzer.estimateRTTByOrigin([request], {
205
- coarseEstimateMultiplier: 1,
206
- useHeadersEndEstimates: false,
207
- });
208
- const expected = {min: 1000, max: 1000, avg: 1000, median: 1000};
209
- assert.deepStrictEqual(result.get('https://example.com'), expected);
210
- });
211
-
212
- it('should infer from TTFB when available', () => {
213
- const timing = {receiveHeadersEnd: 1000};
214
- const request = createRecord({networkRequestTime: 0, networkEndTime: 1, timing,
215
- resourceType: 'Other'});
216
- const result = NetworkAnalyzer.estimateRTTByOrigin([request], {
217
- coarseEstimateMultiplier: 1,
218
- });
219
-
220
- // this request's TTFB was 1000ms, it used SSL and was a fresh connection requiring a handshake
221
- // which needs ~4 RTs. We don't know its resource type so it'll be assumed that 40% of it was
222
- // server response time.
223
- // 600 ms / 4 = 150ms
224
- const expected = {min: 150, max: 150, avg: 150, median: 150};
225
- assert.deepStrictEqual(result.get('https://example.com'), expected);
226
- });
227
-
228
- it('should use coarse estimates on a per-origin basis', () => {
229
- const records = [
230
- createRecord({url: 'https://example.com', timing: {connectStart: 1, connectEnd: 100, sendStart: 150}}),
231
- createRecord({url: 'https://example2.com', timing: {sendStart: 150}}),
232
- ];
233
- const result = NetworkAnalyzer.estimateRTTByOrigin(records);
234
- assert.deepStrictEqual(result.get('https://example.com'), {min: 99, max: 99, avg: 99, median: 99});
235
- assert.deepStrictEqual(result.get('https://example2.com'), {min: 15, max: 15, avg: 15, median: 15});
236
- });
237
-
238
- it('should handle untrustworthy connection information', () => {
239
- const timing = {sendStart: 150};
240
- const recordA = createRecord({networkRequestTime: 0, networkEndTime: 1, timing,
241
- connectionReused: true});
242
- const recordB = createRecord({
243
- networkRequestTime: 0,
244
- networkEndTime: 1,
245
- timing,
246
- connectionId: 2,
247
- connectionReused: true,
248
- });
249
- const result = NetworkAnalyzer.estimateRTTByOrigin([recordA, recordB], {
250
- coarseEstimateMultiplier: 1,
251
- });
252
- const expected = {min: 50, max: 50, avg: 50, median: 50};
253
- assert.deepStrictEqual(result.get('https://example.com'), expected);
254
- });
255
-
256
- it('should work on a real trace', async () => {
257
- const requests = await createRequests(trace);
258
- const result = NetworkAnalyzer.estimateRTTByOrigin(requests);
259
- assertCloseEnough(result.get('https://www.paulirish.com').min, 10);
260
- assertCloseEnough(result.get('https://www.googletagmanager.com').min, 17);
261
- assertCloseEnough(result.get('https://www.google-analytics.com').min, 10);
262
- });
263
-
264
- it('should approximate well with either method', async () => {
265
- const requests = await createRequests(trace);
266
- const result = NetworkAnalyzer.estimateRTTByOrigin(requests).get(NetworkAnalyzer.SUMMARY);
267
- const resultApprox = NetworkAnalyzer.estimateRTTByOrigin(requests, {
268
- forceCoarseEstimates: true,
269
- }).get(NetworkAnalyzer.SUMMARY);
270
- assertCloseEnough(result.min, resultApprox.min, 20);
271
- assertCloseEnough(result.avg, resultApprox.avg, 30);
272
- assertCloseEnough(result.median, resultApprox.median, 30);
273
- });
274
- });
275
-
276
- describe('#estimateServerResponseTimeByOrigin', () => {
277
- it('should estimate server response time using ttfb times', () => {
278
- const timing = {sendEnd: 100, receiveHeadersEnd: 200};
279
- const request = createRecord({networkRequestTime: 0, networkEndTime: 1, timing});
280
- const rttByOrigin = new Map([[NetworkAnalyzer.SUMMARY, 0]]);
281
- const result = NetworkAnalyzer.estimateServerResponseTimeByOrigin([request], {rttByOrigin});
282
- const expected = {min: 100, max: 100, avg: 100, median: 100};
283
- assert.deepStrictEqual(result.get('https://example.com'), expected);
284
- });
285
-
286
- it('should subtract out rtt', () => {
287
- const timing = {sendEnd: 100, receiveHeadersEnd: 200};
288
- const request = createRecord({networkRequestTime: 0, networkEndTime: 1, timing});
289
- const rttByOrigin = new Map([[NetworkAnalyzer.SUMMARY, 50]]);
290
- const result = NetworkAnalyzer.estimateServerResponseTimeByOrigin([request], {rttByOrigin});
291
- const expected = {min: 50, max: 50, avg: 50, median: 50};
292
- assert.deepStrictEqual(result.get('https://example.com'), expected);
293
- });
294
-
295
- it('should compute rtts when not provided', () => {
296
- const timing = {connectStart: 5, connectEnd: 55, sendEnd: 100, receiveHeadersEnd: 200};
297
- const request = createRecord({networkRequestTime: 0, networkEndTime: 1, timing});
298
- const result = NetworkAnalyzer.estimateServerResponseTimeByOrigin([request]);
299
- const expected = {min: 50, max: 50, avg: 50, median: 50};
300
- assert.deepStrictEqual(result.get('https://example.com'), expected);
301
- });
302
-
303
- it('should work on a real trace', async () => {
304
- const requests = await createRequests(trace);
305
- const result = NetworkAnalyzer.estimateServerResponseTimeByOrigin(requests);
306
- assertCloseEnough(result.get('https://www.paulirish.com').avg, 35);
307
- assertCloseEnough(result.get('https://www.googletagmanager.com').avg, 8);
308
- assertCloseEnough(result.get('https://www.google-analytics.com').avg, 8);
309
- });
310
-
311
- it('should approximate well with either method', async () => {
312
- const requests = await createRequests(trace);
313
- const result = NetworkAnalyzer.estimateServerResponseTimeByOrigin(requests).get(
314
- NetworkAnalyzer.SUMMARY
315
- );
316
- const resultApprox = NetworkAnalyzer.estimateServerResponseTimeByOrigin(requests, {
317
- forceCoarseEstimates: true,
318
- }).get(NetworkAnalyzer.SUMMARY);
319
- assertCloseEnough(result.min, resultApprox.min, 20);
320
- assertCloseEnough(result.avg, resultApprox.avg, 30);
321
- assertCloseEnough(result.median, resultApprox.median, 30);
322
- });
323
- });
324
-
325
- describe('#estimateThroughput', () => {
326
- const estimateThroughput = NetworkAnalyzer.estimateThroughput;
327
-
328
- function createThroughputRecord(responseHeadersEndTimeInS, networkEndTimeInS, extras) {
329
- return Object.assign(
330
- {
331
- responseHeadersEndTime: responseHeadersEndTimeInS * 1000,
332
- networkEndTime: networkEndTimeInS * 1000,
333
- transferSize: 1000,
334
- finished: true,
335
- failed: false,
336
- statusCode: 200,
337
- url: 'https://google.com/logo.png',
338
- parsedURL: {scheme: 'https'},
339
- },
340
- extras
341
- );
342
- }
343
-
344
- it('should return Infinity for no/missing records', () => {
345
- assert.equal(estimateThroughput([]), Infinity);
346
- assert.equal(estimateThroughput([createThroughputRecord(0, 0, {finished: false})]), Infinity);
347
- });
348
-
349
- it('should compute correctly for a basic waterfall', () => {
350
- const result = estimateThroughput([
351
- createThroughputRecord(0, 1),
352
- createThroughputRecord(1, 2),
353
- createThroughputRecord(2, 6),
354
- ]);
355
-
356
- assert.equal(result, 500 * 8);
357
- });
358
-
359
- it('should compute correctly for concurrent requests', () => {
360
- const result = estimateThroughput([
361
- createThroughputRecord(0, 1),
362
- createThroughputRecord(0.5, 1),
363
- ]);
364
-
365
- assert.equal(result, 2000 * 8);
366
- });
367
-
368
- it('should compute correctly for gaps', () => {
369
- const result = estimateThroughput([
370
- createThroughputRecord(0, 1),
371
- createThroughputRecord(3, 4),
372
- ]);
373
-
374
- assert.equal(result, 1000 * 8);
375
- });
376
-
377
- it('should compute correctly for partially overlapping requests', () => {
378
- const result = estimateThroughput([
379
- createThroughputRecord(0, 1),
380
- createThroughputRecord(0.5, 1.5),
381
- createThroughputRecord(1.25, 3),
382
- createThroughputRecord(1.4, 4),
383
- createThroughputRecord(5, 9),
384
- ]);
385
-
386
- assert.equal(result, 625 * 8);
387
- });
388
-
389
- it('should exclude failed records', () => {
390
- const result = estimateThroughput([
391
- createThroughputRecord(0, 2),
392
- createThroughputRecord(3, 4, {failed: true}),
393
- ]);
394
- assert.equal(result, 500 * 8);
395
- });
396
-
397
- it('should exclude cached records', () => {
398
- const result = estimateThroughput([
399
- createThroughputRecord(0, 2),
400
- createThroughputRecord(3, 4, {statusCode: 304}),
401
- ]);
402
- assert.equal(result, 500 * 8);
403
- });
404
-
405
- it('should exclude unfinished records', () => {
406
- const result = estimateThroughput([
407
- createThroughputRecord(0, 2),
408
- createThroughputRecord(3, 4, {finished: false}),
409
- ]);
410
- assert.equal(result, 500 * 8);
411
- });
412
-
413
- it('should exclude data URIs', () => {
414
- const result = estimateThroughput([
415
- createThroughputRecord(0, 2),
416
- createThroughputRecord(3, 4, {parsedURL: {scheme: 'data'}}),
417
- ]);
418
- assert.equal(result, 500 * 8);
419
- });
420
- });
421
-
422
- describe('#computeRTTAndServerResponseTime', () => {
423
- it('should work', async () => {
424
- const requests = await createRequests(trace);
425
- const result = NetworkAnalyzer.computeRTTAndServerResponseTime(requests);
426
-
427
- expect(result.rtt).toBeCloseTo(0.082);
428
- expect(result.additionalRttByOrigin).toMatchInlineSnapshot(`
429
- Map {
430
- "https://www.paulirish.com" => 9.788999999999994,
431
- "https://www.googletagmanager.com" => 17.21999999999999,
432
- "https://fonts.googleapis.com" => 16.816000000000003,
433
- "https://fonts.gstatic.com" => 1.6889999999999998,
434
- "https://www.google-analytics.com" => 9.924999999999997,
435
- "https://paulirish.disqus.com" => 9.000999999999998,
436
- "https://firebaseinstallations.googleapis.com" => 0,
437
- "https://firebaseremoteconfig.googleapis.com" => 0.1823,
438
- "__SUMMARY__" => 0,
439
- }
440
- `);
441
- });
442
- });
443
-
444
- describe('#findMainDocument', () => {
445
- it('should find the main document', async () => {
446
- const requests = await createRequests(trace);
447
- const mainDocument = NetworkAnalyzer.findResourceForUrl(requests, 'https://www.paulirish.com/');
448
- assert.equal(mainDocument.url, 'https://www.paulirish.com/');
449
- });
450
-
451
- it('should find the main document if the URL includes a fragment', async () => {
452
- const requests = await createRequests(trace);
453
- const mainDocument = NetworkAnalyzer.findResourceForUrl(requests, 'https://www.paulirish.com/#info');
454
- assert.equal(mainDocument.url, 'https://www.paulirish.com/');
455
- });
456
- });
457
-
458
- describe('#resolveRedirects', () => {
459
- it('should resolve to the same document when no redirect', async () => {
460
- const requests = await createRequests(trace);
461
- const mainDocument = NetworkAnalyzer.findResourceForUrl(requests, 'https://www.paulirish.com/');
462
- const finalDocument = NetworkAnalyzer.resolveRedirects(mainDocument);
463
- assert.equal(mainDocument.url, finalDocument.url);
464
- assert.equal(finalDocument.url, 'https://www.paulirish.com/');
465
- });
466
-
467
- it('should resolve to the final document with redirects', async () => {
468
- const requests = await createRequests(traceWithRedirect);
469
- const mainDocument = NetworkAnalyzer.findResourceForUrl(requests, 'http://www.vkontakte.ru/');
470
- const finalDocument = NetworkAnalyzer.resolveRedirects(mainDocument);
471
- assert.notEqual(mainDocument.url, finalDocument.url);
472
- assert.equal(finalDocument.url, 'https://m.vk.com/');
473
- });
474
- });
475
- });
@@ -1,153 +0,0 @@
1
- export type Node = import('../BaseNode.js').Node;
2
- export type NetworkNode = import('../NetworkNode.js').NetworkNode;
3
- export type CpuNode = import('../CpuNode.js').CPUNode;
4
- export type NodeTimingComplete = {
5
- startTime: number;
6
- endTime: number;
7
- /**
8
- * Helpful for debugging.
9
- */
10
- queuedTime: number;
11
- estimatedTimeElapsed: number;
12
- timeElapsed: number;
13
- timeElapsedOvershoot: number;
14
- bytesDownloaded: number;
15
- };
16
- export type NodeTimingQueued = Pick<NodeTimingComplete, 'queuedTime'>;
17
- export type CpuNodeTimingStarted = NodeTimingQueued & Pick<NodeTimingComplete, 'startTime' | 'timeElapsed'>;
18
- export type NetworkNodeTimingStarted = CpuNodeTimingStarted & Pick<NodeTimingComplete, 'timeElapsedOvershoot' | 'bytesDownloaded'>;
19
- export type CpuNodeTimingInProgress = CpuNodeTimingStarted & Pick<NodeTimingComplete, 'estimatedTimeElapsed'>;
20
- export type NetworkNodeTimingInProgress = NetworkNodeTimingStarted & Pick<NodeTimingComplete, 'estimatedTimeElapsed'>;
21
- export type CpuNodeTimingComplete = CpuNodeTimingInProgress & Pick<NodeTimingComplete, 'endTime'>;
22
- export type NetworkNodeTimingComplete = NetworkNodeTimingInProgress & Pick<NodeTimingComplete, 'endTime'> & {
23
- connectionTiming: ConnectionTiming;
24
- };
25
- export type NodeTimingData = NodeTimingQueued | CpuNodeTimingStarted | NetworkNodeTimingStarted | CpuNodeTimingInProgress | NetworkNodeTimingInProgress | CpuNodeTimingComplete | NetworkNodeTimingComplete;
26
- /**
27
- * A breakdown of network connection timings.
28
- */
29
- export type ConnectionTiming = {
30
- dnsResolutionTime?: number | undefined;
31
- connectionTime?: number | undefined;
32
- sslTime?: number | undefined;
33
- timeToFirstByte: number;
34
- };
35
- /**
36
- * @fileoverview
37
- *
38
- * This class encapsulates the type-related validation logic for moving timing information for nodes
39
- * through the different simulation phases. Methods here ensure that the invariants of simulation hold
40
- * as nodes are queued, partially simulated, and completed.
41
- */
42
- /** @typedef {import('../BaseNode.js').Node} Node */
43
- /** @typedef {import('../NetworkNode.js').NetworkNode} NetworkNode */
44
- /** @typedef {import('../CpuNode.js').CPUNode} CpuNode */
45
- /**
46
- * @typedef NodeTimingComplete
47
- * @property {number} startTime
48
- * @property {number} endTime
49
- * @property {number} queuedTime Helpful for debugging.
50
- * @property {number} estimatedTimeElapsed
51
- * @property {number} timeElapsed
52
- * @property {number} timeElapsedOvershoot
53
- * @property {number} bytesDownloaded
54
- */
55
- /** @typedef {Pick<NodeTimingComplete, 'queuedTime'>} NodeTimingQueued */
56
- /** @typedef {NodeTimingQueued & Pick<NodeTimingComplete, 'startTime'|'timeElapsed'>} CpuNodeTimingStarted */
57
- /** @typedef {CpuNodeTimingStarted & Pick<NodeTimingComplete, 'timeElapsedOvershoot'|'bytesDownloaded'>} NetworkNodeTimingStarted */
58
- /** @typedef {CpuNodeTimingStarted & Pick<NodeTimingComplete, 'estimatedTimeElapsed'>} CpuNodeTimingInProgress */
59
- /** @typedef {NetworkNodeTimingStarted & Pick<NodeTimingComplete, 'estimatedTimeElapsed'>} NetworkNodeTimingInProgress */
60
- /** @typedef {CpuNodeTimingInProgress & Pick<NodeTimingComplete, 'endTime'>} CpuNodeTimingComplete */
61
- /** @typedef {NetworkNodeTimingInProgress & Pick<NodeTimingComplete, 'endTime'> & {connectionTiming: ConnectionTiming}} NetworkNodeTimingComplete */
62
- /** @typedef {NodeTimingQueued | CpuNodeTimingStarted | NetworkNodeTimingStarted | CpuNodeTimingInProgress | NetworkNodeTimingInProgress | CpuNodeTimingComplete | NetworkNodeTimingComplete} NodeTimingData */
63
- /**
64
- * @typedef ConnectionTiming A breakdown of network connection timings.
65
- * @property {number} [dnsResolutionTime]
66
- * @property {number} [connectionTime]
67
- * @property {number} [sslTime]
68
- * @property {number} timeToFirstByte
69
- */
70
- export class SimulatorTimingMap {
71
- /** @type {Map<Node, NodeTimingData>} */
72
- _nodeTimings: Map<Node, NodeTimingData>;
73
- /** @return {Array<Node>} */
74
- getNodes(): Array<Node>;
75
- /**
76
- * @param {Node} node
77
- * @param {{queuedTime: number}} values
78
- */
79
- setReadyToStart(node: Node, values: {
80
- queuedTime: number;
81
- }): void;
82
- /**
83
- * @param {Node} node
84
- * @param {{startTime: number}} values
85
- */
86
- setInProgress(node: Node, values: {
87
- startTime: number;
88
- }): void;
89
- /**
90
- * @param {Node} node
91
- * @param {{endTime: number, connectionTiming?: ConnectionTiming}} values
92
- */
93
- setCompleted(node: Node, values: {
94
- endTime: number;
95
- connectionTiming?: ConnectionTiming;
96
- }): void;
97
- /**
98
- * @param {CpuNode} node
99
- * @param {{timeElapsed: number}} values
100
- */
101
- setCpu(node: CpuNode, values: {
102
- timeElapsed: number;
103
- }): void;
104
- /**
105
- * @param {CpuNode} node
106
- * @param {{estimatedTimeElapsed: number}} values
107
- */
108
- setCpuEstimated(node: CpuNode, values: {
109
- estimatedTimeElapsed: number;
110
- }): void;
111
- /**
112
- * @param {NetworkNode} node
113
- * @param {{timeElapsed: number, timeElapsedOvershoot: number, bytesDownloaded: number}} values
114
- */
115
- setNetwork(node: NetworkNode, values: {
116
- timeElapsed: number;
117
- timeElapsedOvershoot: number;
118
- bytesDownloaded: number;
119
- }): void;
120
- /**
121
- * @param {NetworkNode} node
122
- * @param {{estimatedTimeElapsed: number}} values
123
- */
124
- setNetworkEstimated(node: NetworkNode, values: {
125
- estimatedTimeElapsed: number;
126
- }): void;
127
- /**
128
- * @param {Node} node
129
- * @return {NodeTimingQueued}
130
- */
131
- getQueued(node: Node): NodeTimingQueued;
132
- /**
133
- * @param {CpuNode} node
134
- * @return {CpuNodeTimingStarted}
135
- */
136
- getCpuStarted(node: CpuNode): CpuNodeTimingStarted;
137
- /**
138
- * @param {NetworkNode} node
139
- * @return {NetworkNodeTimingStarted}
140
- */
141
- getNetworkStarted(node: NetworkNode): NetworkNodeTimingStarted;
142
- /**
143
- * @param {Node} node
144
- * @return {CpuNodeTimingInProgress | NetworkNodeTimingInProgress}
145
- */
146
- getInProgress(node: Node): CpuNodeTimingInProgress | NetworkNodeTimingInProgress;
147
- /**
148
- * @param {Node} node
149
- * @return {CpuNodeTimingComplete | NetworkNodeTimingComplete}
150
- */
151
- getCompleted(node: Node): CpuNodeTimingComplete | NetworkNodeTimingComplete;
152
- }
153
- //# sourceMappingURL=SimulationTimingMap.d.ts.map