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,374 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2017 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
-
11
- const {TcpConnection} = Lantern.Simulation;
12
-
13
- describe('DependencyGraph/Simulator/TcpConnection', () => {
14
- describe('#constructor', () => {
15
- it('should create the connection', () => {
16
- const rtt = 150;
17
- const throughput = 1600 * 1024;
18
- const connection = new TcpConnection(rtt, throughput);
19
- assert.ok(connection);
20
- assert.equal(connection._rtt, rtt);
21
- });
22
- });
23
-
24
- describe('#maximumSaturatedConnections', () => {
25
- it('should compute number of supported simulated requests', () => {
26
- const availableThroughput = 1460 * 8 * 10; // 10 TCP segments/second
27
- assert.equal(TcpConnection.maximumSaturatedConnections(100, availableThroughput), 1);
28
- assert.equal(TcpConnection.maximumSaturatedConnections(300, availableThroughput), 3);
29
- assert.equal(TcpConnection.maximumSaturatedConnections(1000, availableThroughput), 10);
30
- });
31
- });
32
-
33
- describe('.setWarmed', () => {
34
- it('adjusts the time to download appropriately', () => {
35
- const connection = new TcpConnection(100, Infinity);
36
- assert.equal(connection.simulateDownloadUntil(0).timeElapsed, 300);
37
- connection.setWarmed(true);
38
- assert.equal(connection.simulateDownloadUntil(0).timeElapsed, 100);
39
- });
40
- });
41
-
42
- describe('.setCongestionWindow', () => {
43
- it('adjusts the time to download appropriately', () => {
44
- const connection = new TcpConnection(100, Infinity);
45
- assert.deepEqual(connection.simulateDownloadUntil(50000), {
46
- bytesDownloaded: 50000,
47
- extraBytesDownloaded: 0,
48
- congestionWindow: 40,
49
- roundTrips: 5,
50
- timeElapsed: 500,
51
- connectionTiming: {
52
- connectionTime: 250,
53
- dnsResolutionTime: 0,
54
- sslTime: 100,
55
- timeToFirstByte: 300,
56
- },
57
- });
58
- connection.setCongestionWindow(40); // will download all in one round trip
59
- assert.deepEqual(connection.simulateDownloadUntil(50000), {
60
- bytesDownloaded: 50000,
61
- extraBytesDownloaded: 0,
62
- congestionWindow: 40,
63
- roundTrips: 3,
64
- timeElapsed: 300,
65
- connectionTiming: {
66
- connectionTime: 250,
67
- dnsResolutionTime: 0,
68
- sslTime: 100,
69
- timeToFirstByte: 300,
70
- },
71
- });
72
- });
73
- });
74
-
75
- describe('.setH2OverflowBytesDownloaded', () => {
76
- it('adjusts the time to download appropriately for H2 connections', () => {
77
- const connection = new TcpConnection(100, Infinity, 0, true, true);
78
- connection.setWarmed(true);
79
- assert.equal(connection.simulateDownloadUntil(30000).timeElapsed, 200);
80
- connection.setH2OverflowBytesDownloaded(20000);
81
- assert.equal(connection.simulateDownloadUntil(30000).timeElapsed, 100);
82
- connection.setH2OverflowBytesDownloaded(50000);
83
- assert.equal(connection.simulateDownloadUntil(30000).timeElapsed, 0);
84
- });
85
-
86
- it('does not adjust the time to download for non-H2 connections', () => {
87
- const connection = new TcpConnection(100, Infinity, 0, true, false);
88
- connection.setWarmed(true);
89
- assert.equal(connection.simulateDownloadUntil(30000).timeElapsed, 200);
90
- connection.setH2OverflowBytesDownloaded(20000);
91
- assert.equal(connection.simulateDownloadUntil(30000).timeElapsed, 200);
92
- connection.setH2OverflowBytesDownloaded(50000);
93
- assert.equal(connection.simulateDownloadUntil(30000).timeElapsed, 200);
94
- });
95
- });
96
-
97
- describe('.simulateDownloadUntil', () => {
98
- describe('when maximumTime is not set', () => {
99
- it('should provide the correct values small payload non-SSL', () => {
100
- const connection = new TcpConnection(100, Infinity, 0, false);
101
- assert.deepEqual(connection.simulateDownloadUntil(7300), {
102
- bytesDownloaded: 7300,
103
- extraBytesDownloaded: 0,
104
- congestionWindow: 10,
105
- roundTrips: 2,
106
- timeElapsed: 200,
107
- connectionTiming: {
108
- connectionTime: 150,
109
- dnsResolutionTime: 0,
110
- sslTime: undefined, // non-SSL
111
- timeToFirstByte: 200,
112
- },
113
- });
114
- });
115
-
116
- it('should provide the correct values small payload SSL', () => {
117
- const connection = new TcpConnection(100, Infinity, 0, true);
118
- assert.deepEqual(connection.simulateDownloadUntil(7300), {
119
- bytesDownloaded: 7300,
120
- extraBytesDownloaded: 0,
121
- congestionWindow: 10,
122
- roundTrips: 3,
123
- timeElapsed: 300,
124
- connectionTiming: {
125
- connectionTime: 250,
126
- dnsResolutionTime: 0,
127
- sslTime: 100,
128
- timeToFirstByte: 300,
129
- },
130
- });
131
- });
132
-
133
- it('should provide the correct values small payload H2', () => {
134
- const connection = new TcpConnection(100, Infinity, 0, true, true);
135
- assert.deepEqual(connection.simulateDownloadUntil(7300), {
136
- bytesDownloaded: 7300,
137
- extraBytesDownloaded: 7300,
138
- congestionWindow: 10,
139
- roundTrips: 3,
140
- timeElapsed: 300,
141
- connectionTiming: {
142
- connectionTime: 250,
143
- dnsResolutionTime: 0,
144
- sslTime: 100,
145
- timeToFirstByte: 300,
146
- },
147
- });
148
- });
149
-
150
- it('should provide the correct values response time', () => {
151
- const responseTime = 78;
152
- const connection = new TcpConnection(100, Infinity, responseTime, true);
153
- assert.deepEqual(connection.simulateDownloadUntil(7300), {
154
- bytesDownloaded: 7300,
155
- extraBytesDownloaded: 0,
156
- congestionWindow: 10,
157
- roundTrips: 3,
158
- timeElapsed: 300 + responseTime,
159
- connectionTiming: {
160
- connectionTime: 250,
161
- dnsResolutionTime: 0,
162
- sslTime: 100,
163
- timeToFirstByte: 378,
164
- },
165
- });
166
- });
167
-
168
- it('should provide the correct values large payload', () => {
169
- const connection = new TcpConnection(100, 8 * 1000 * 1000);
170
- const bytesToDownload = 10 * 1000 * 1000; // 10 mb
171
- assert.deepEqual(connection.simulateDownloadUntil(bytesToDownload), {
172
- bytesDownloaded: bytesToDownload,
173
- extraBytesDownloaded: 0,
174
- congestionWindow: 68,
175
- roundTrips: 105,
176
- timeElapsed: 10500,
177
- connectionTiming: {
178
- connectionTime: 250,
179
- dnsResolutionTime: 0,
180
- sslTime: 100,
181
- timeToFirstByte: 300,
182
- },
183
- });
184
- });
185
-
186
- it('should provide the correct values resumed small payload', () => {
187
- const connection = new TcpConnection(100, Infinity, 0, true);
188
- assert.deepEqual(connection.simulateDownloadUntil(7300, {timeAlreadyElapsed: 250}), {
189
- bytesDownloaded: 7300,
190
- extraBytesDownloaded: 0,
191
- congestionWindow: 10,
192
- roundTrips: 3,
193
- timeElapsed: 50,
194
- connectionTiming: {
195
- connectionTime: 250,
196
- dnsResolutionTime: 0,
197
- sslTime: 100,
198
- timeToFirstByte: 300,
199
- },
200
- });
201
- });
202
-
203
- it('should provide the correct values resumed small payload H2', () => {
204
- const connection = new TcpConnection(100, Infinity, 0, true, true);
205
- connection.setWarmed(true);
206
- connection.setH2OverflowBytesDownloaded(10000);
207
- assert.deepEqual(connection.simulateDownloadUntil(7300), {
208
- bytesDownloaded: 0,
209
- extraBytesDownloaded: 2700, // 10000 - 7300
210
- congestionWindow: 10,
211
- roundTrips: 0,
212
- timeElapsed: 0,
213
- connectionTiming: {
214
- timeToFirstByte: 0,
215
- },
216
- });
217
- });
218
-
219
- it('should provide the correct values resumed large payload', () => {
220
- const connection = new TcpConnection(100, 8 * 1000 * 1000);
221
- const bytesToDownload = 5 * 1000 * 1000; // 5 mb
222
- connection.setCongestionWindow(68);
223
- assert.deepEqual(
224
- connection.simulateDownloadUntil(bytesToDownload, {timeAlreadyElapsed: 5234}),
225
- {
226
- bytesDownloaded: bytesToDownload,
227
- extraBytesDownloaded: 0,
228
- congestionWindow: 68,
229
- roundTrips: 51, // 5 mb / (1460 * 68)
230
- timeElapsed: 5100,
231
- connectionTiming: {
232
- connectionTime: 250,
233
- dnsResolutionTime: 0,
234
- sslTime: 100,
235
- timeToFirstByte: 300,
236
- },
237
- }
238
- );
239
- });
240
- });
241
-
242
- describe('when maximumTime is set', () => {
243
- it('should provide the correct values less than TTFB', () => {
244
- const connection = new TcpConnection(100, Infinity, 0, false);
245
- assert.deepEqual(
246
- connection.simulateDownloadUntil(7300, {timeAlreadyElapsed: 0, maximumTimeToElapse: 68}),
247
- {
248
- bytesDownloaded: 7300,
249
- extraBytesDownloaded: 0,
250
- congestionWindow: 10,
251
- roundTrips: 2,
252
- timeElapsed: 200,
253
- connectionTiming: {
254
- connectionTime: 150,
255
- dnsResolutionTime: 0,
256
- sslTime: undefined, // non-SSL
257
- timeToFirstByte: 200,
258
- },
259
- }
260
- );
261
- });
262
-
263
- it('should provide the correct values just over TTFB', () => {
264
- const connection = new TcpConnection(100, Infinity, 0, false);
265
- assert.deepEqual(
266
- connection.simulateDownloadUntil(7300, {timeAlreadyElapsed: 0, maximumTimeToElapse: 250}),
267
- {
268
- bytesDownloaded: 7300,
269
- extraBytesDownloaded: 0,
270
- congestionWindow: 10,
271
- roundTrips: 2,
272
- timeElapsed: 200,
273
- connectionTiming: {
274
- connectionTime: 150,
275
- dnsResolutionTime: 0,
276
- sslTime: undefined, // non-SSL
277
- timeToFirstByte: 200,
278
- },
279
- }
280
- );
281
- });
282
-
283
- it('should provide the correct values with already elapsed', () => {
284
- const connection = new TcpConnection(100, Infinity, 0, false);
285
- assert.deepEqual(
286
- connection.simulateDownloadUntil(7300, {
287
- timeAlreadyElapsed: 75,
288
- maximumTimeToElapse: 250,
289
- }),
290
- {
291
- bytesDownloaded: 7300,
292
- extraBytesDownloaded: 0,
293
- congestionWindow: 10,
294
- roundTrips: 2,
295
- timeElapsed: 125,
296
- connectionTiming: {
297
- connectionTime: 150,
298
- dnsResolutionTime: 0,
299
- sslTime: undefined, // non-SSL
300
- timeToFirstByte: 200,
301
- },
302
- }
303
- );
304
- });
305
-
306
- it('should provide the correct values large payloads', () => {
307
- const connection = new TcpConnection(100, 8 * 1000 * 1000);
308
- const bytesToDownload = 10 * 1000 * 1000; // 10 mb
309
- assert.deepEqual(
310
- connection.simulateDownloadUntil(bytesToDownload, {
311
- timeAlreadyElapsed: 500,
312
- maximumTimeToElapse: 740,
313
- }),
314
- {
315
- bytesDownloaded: 683280, // should be less than 68 * 1460 * 8
316
- extraBytesDownloaded: 0,
317
- congestionWindow: 68,
318
- roundTrips: 8,
319
- timeElapsed: 800, // skips the handshake because time already elapsed
320
- connectionTiming: {
321
- connectionTime: 250,
322
- dnsResolutionTime: 0,
323
- sslTime: 100,
324
- timeToFirstByte: 300,
325
- },
326
- }
327
- );
328
- });
329
-
330
- it('should all add up', () => {
331
- const connection = new TcpConnection(100, 8 * 1000 * 1000);
332
- const bytesToDownload = 10 * 1000 * 1000; // 10 mb
333
- const firstStoppingPoint = 5234;
334
- const secondStoppingPoint = 315;
335
- const thirdStoppingPoint = 10500 - firstStoppingPoint - secondStoppingPoint;
336
-
337
- const firstSegment = connection.simulateDownloadUntil(bytesToDownload, {
338
- timeAlreadyElapsed: 0,
339
- maximumTimeToElapse: firstStoppingPoint,
340
- });
341
- const firstOvershoot = firstSegment.timeElapsed - firstStoppingPoint;
342
-
343
- connection.setCongestionWindow(firstSegment.congestionWindow);
344
- const secondSegment = connection.simulateDownloadUntil(
345
- bytesToDownload - firstSegment.bytesDownloaded,
346
- {
347
- timeAlreadyElapsed: firstSegment.timeElapsed,
348
- maximumTimeToElapse: secondStoppingPoint - firstOvershoot,
349
- }
350
- );
351
- const secondOvershoot = firstOvershoot + secondSegment.timeElapsed - secondStoppingPoint;
352
-
353
- connection.setCongestionWindow(secondSegment.congestionWindow);
354
- const thirdSegment = connection.simulateDownloadUntil(
355
- bytesToDownload - firstSegment.bytesDownloaded - secondSegment.bytesDownloaded,
356
- {timeAlreadyElapsed: firstSegment.timeElapsed + secondSegment.timeElapsed}
357
- );
358
- const thirdOvershoot = secondOvershoot + thirdSegment.timeElapsed - thirdStoppingPoint;
359
-
360
- assert.equal(thirdOvershoot, 0);
361
- assert.equal(
362
- firstSegment.bytesDownloaded +
363
- secondSegment.bytesDownloaded +
364
- thirdSegment.bytesDownloaded,
365
- bytesToDownload
366
- );
367
- assert.equal(
368
- firstSegment.timeElapsed + secondSegment.timeElapsed + thirdSegment.timeElapsed,
369
- 10500
370
- );
371
- });
372
- });
373
- });
374
- });
@@ -1,89 +0,0 @@
1
- export type ConnectionTiming = import('./SimulationTimingMap.js').ConnectionTiming;
2
- export type DownloadOptions = {
3
- dnsResolutionTime?: number | undefined;
4
- timeAlreadyElapsed?: number | undefined;
5
- maximumTimeToElapse?: number | undefined;
6
- };
7
- export type DownloadResults = {
8
- roundTrips: number;
9
- timeElapsed: number;
10
- bytesDownloaded: number;
11
- extraBytesDownloaded: number;
12
- congestionWindow: number;
13
- connectionTiming: ConnectionTiming;
14
- };
15
- export class TcpConnection {
16
- /**
17
- * @param {number} rtt
18
- * @param {number} availableThroughput
19
- * @return {number}
20
- */
21
- static maximumSaturatedConnections(rtt: number, availableThroughput: number): number;
22
- /**
23
- * @param {number} rtt
24
- * @param {number} throughput
25
- * @param {number=} serverLatency
26
- * @param {boolean=} ssl
27
- * @param {boolean=} h2
28
- */
29
- constructor(rtt: number, throughput: number, serverLatency?: number | undefined, ssl?: boolean | undefined, h2?: boolean | undefined);
30
- _warmed: boolean;
31
- _ssl: boolean;
32
- _h2: boolean;
33
- _rtt: number;
34
- _throughput: number;
35
- _serverLatency: number;
36
- _congestionWindow: number;
37
- _h2OverflowBytesDownloaded: number;
38
- /**
39
- * @return {number}
40
- */
41
- _computeMaximumCongestionWindowInSegments(): number;
42
- /**
43
- * @param {number} throughput
44
- */
45
- setThroughput(throughput: number): void;
46
- /**
47
- * @param {number} congestion
48
- */
49
- setCongestionWindow(congestion: number): void;
50
- /**
51
- * @param {boolean} warmed
52
- */
53
- setWarmed(warmed: boolean): void;
54
- /**
55
- * @return {boolean}
56
- */
57
- isWarm(): boolean;
58
- /**
59
- * @return {boolean}
60
- */
61
- isH2(): boolean;
62
- /**
63
- * @return {number}
64
- */
65
- get congestionWindow(): number;
66
- /**
67
- * Sets the number of excess bytes that are available to this connection on future downloads, only
68
- * applies to H2 connections.
69
- * @param {number} bytes
70
- */
71
- setH2OverflowBytesDownloaded(bytes: number): void;
72
- /**
73
- * @return {TcpConnection}
74
- */
75
- clone(): TcpConnection;
76
- /**
77
- * Simulates a network download of a particular number of bytes over an optional maximum amount of time
78
- * and returns information about the ending state.
79
- *
80
- * See https://hpbn.co/building-blocks-of-tcp/#three-way-handshake and
81
- * https://hpbn.co/transport-layer-security-tls/#tls-handshake for details.
82
- *
83
- * @param {number} bytesToDownload
84
- * @param {DownloadOptions} [options]
85
- * @return {DownloadResults}
86
- */
87
- simulateDownloadUntil(bytesToDownload: number, options?: DownloadOptions | undefined): DownloadResults;
88
- }
89
- //# sourceMappingURL=TcpConnection.d.ts.map
@@ -1,230 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2017 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- /** @typedef {import('./SimulationTimingMap.js').ConnectionTiming} ConnectionTiming */
8
-
9
- const INITIAL_CONGESTION_WINDOW = 10;
10
- const TCP_SEGMENT_SIZE = 1460;
11
-
12
- class TcpConnection {
13
- /**
14
- * @param {number} rtt
15
- * @param {number} throughput
16
- * @param {number=} serverLatency
17
- * @param {boolean=} ssl
18
- * @param {boolean=} h2
19
- */
20
- constructor(rtt, throughput, serverLatency = 0, ssl = true, h2 = false) {
21
- this._warmed = false;
22
- this._ssl = ssl;
23
- this._h2 = h2;
24
- this._rtt = rtt;
25
- this._throughput = throughput;
26
- this._serverLatency = serverLatency;
27
- this._congestionWindow = INITIAL_CONGESTION_WINDOW;
28
- this._h2OverflowBytesDownloaded = 0;
29
- }
30
-
31
- /**
32
- * @param {number} rtt
33
- * @param {number} availableThroughput
34
- * @return {number}
35
- */
36
- static maximumSaturatedConnections(rtt, availableThroughput) {
37
- const roundTripsPerSecond = 1000 / rtt;
38
- const bytesPerRoundTrip = TCP_SEGMENT_SIZE;
39
- const bytesPerSecond = roundTripsPerSecond * bytesPerRoundTrip;
40
- const minimumThroughputRequiredPerRequest = bytesPerSecond * 8;
41
- return Math.floor(availableThroughput / minimumThroughputRequiredPerRequest);
42
- }
43
-
44
- /**
45
- * @return {number}
46
- */
47
- _computeMaximumCongestionWindowInSegments() {
48
- const bytesPerSecond = this._throughput / 8;
49
- const secondsPerRoundTrip = this._rtt / 1000;
50
- const bytesPerRoundTrip = bytesPerSecond * secondsPerRoundTrip;
51
- return Math.floor(bytesPerRoundTrip / TCP_SEGMENT_SIZE);
52
- }
53
-
54
- /**
55
- * @param {number} throughput
56
- */
57
- setThroughput(throughput) {
58
- this._throughput = throughput;
59
- }
60
-
61
- /**
62
- * @param {number} congestion
63
- */
64
- setCongestionWindow(congestion) {
65
- this._congestionWindow = congestion;
66
- }
67
-
68
- /**
69
- * @param {boolean} warmed
70
- */
71
- setWarmed(warmed) {
72
- this._warmed = warmed;
73
- }
74
-
75
- /**
76
- * @return {boolean}
77
- */
78
- isWarm() {
79
- return this._warmed;
80
- }
81
-
82
- /**
83
- * @return {boolean}
84
- */
85
- isH2() {
86
- return this._h2;
87
- }
88
-
89
- /**
90
- * @return {number}
91
- */
92
- get congestionWindow() {
93
- return this._congestionWindow;
94
- }
95
-
96
- /**
97
- * Sets the number of excess bytes that are available to this connection on future downloads, only
98
- * applies to H2 connections.
99
- * @param {number} bytes
100
- */
101
- setH2OverflowBytesDownloaded(bytes) {
102
- if (!this._h2) return;
103
- this._h2OverflowBytesDownloaded = bytes;
104
- }
105
-
106
- /**
107
- * @return {TcpConnection}
108
- */
109
- clone() {
110
- return Object.assign(new TcpConnection(this._rtt, this._throughput), this);
111
- }
112
-
113
- /**
114
- * Simulates a network download of a particular number of bytes over an optional maximum amount of time
115
- * and returns information about the ending state.
116
- *
117
- * See https://hpbn.co/building-blocks-of-tcp/#three-way-handshake and
118
- * https://hpbn.co/transport-layer-security-tls/#tls-handshake for details.
119
- *
120
- * @param {number} bytesToDownload
121
- * @param {DownloadOptions} [options]
122
- * @return {DownloadResults}
123
- */
124
- simulateDownloadUntil(bytesToDownload, options) {
125
- const {timeAlreadyElapsed = 0, maximumTimeToElapse = Infinity, dnsResolutionTime = 0} =
126
- options || {};
127
-
128
- if (this._warmed && this._h2) {
129
- bytesToDownload -= this._h2OverflowBytesDownloaded;
130
- }
131
- const twoWayLatency = this._rtt;
132
- const oneWayLatency = twoWayLatency / 2;
133
- const maximumCongestionWindow = this._computeMaximumCongestionWindowInSegments();
134
-
135
- let handshakeAndRequest = oneWayLatency;
136
- if (!this._warmed) {
137
- handshakeAndRequest =
138
- // DNS lookup
139
- dnsResolutionTime +
140
- // SYN
141
- oneWayLatency +
142
- // SYN ACK
143
- oneWayLatency +
144
- // ACK + initial request
145
- oneWayLatency +
146
- // ClientHello/ServerHello assuming TLS False Start is enabled (https://istlsfastyet.com/#server-performance).
147
- (this._ssl ? twoWayLatency : 0);
148
- }
149
-
150
- let roundTrips = Math.ceil(handshakeAndRequest / twoWayLatency);
151
- let timeToFirstByte = handshakeAndRequest + this._serverLatency + oneWayLatency;
152
- if (this._warmed && this._h2) timeToFirstByte = 0;
153
-
154
- const timeElapsedForTTFB = Math.max(timeToFirstByte - timeAlreadyElapsed, 0);
155
- const maximumDownloadTimeToElapse = maximumTimeToElapse - timeElapsedForTTFB;
156
-
157
- let congestionWindow = Math.min(this._congestionWindow, maximumCongestionWindow);
158
- let totalBytesDownloaded = 0;
159
- if (timeElapsedForTTFB > 0) {
160
- totalBytesDownloaded = congestionWindow * TCP_SEGMENT_SIZE;
161
- } else {
162
- roundTrips = 0;
163
- }
164
-
165
- let downloadTimeElapsed = 0;
166
- let bytesRemaining = bytesToDownload - totalBytesDownloaded;
167
- while (bytesRemaining > 0 && downloadTimeElapsed <= maximumDownloadTimeToElapse) {
168
- roundTrips++;
169
- downloadTimeElapsed += twoWayLatency;
170
- congestionWindow = Math.max(Math.min(maximumCongestionWindow, congestionWindow * 2), 1);
171
-
172
- const bytesDownloadedInWindow = congestionWindow * TCP_SEGMENT_SIZE;
173
- totalBytesDownloaded += bytesDownloadedInWindow;
174
- bytesRemaining -= bytesDownloadedInWindow;
175
- }
176
-
177
- const timeElapsed = timeElapsedForTTFB + downloadTimeElapsed;
178
- const extraBytesDownloaded = this._h2 ? Math.max(totalBytesDownloaded - bytesToDownload, 0) : 0;
179
- const bytesDownloaded = Math.max(Math.min(totalBytesDownloaded, bytesToDownload), 0);
180
-
181
- /** @type {ConnectionTiming} */
182
- let connectionTiming;
183
- if (!this._warmed) {
184
- connectionTiming = {
185
- dnsResolutionTime,
186
- connectionTime: handshakeAndRequest - dnsResolutionTime,
187
- sslTime: this._ssl ? twoWayLatency : undefined,
188
- timeToFirstByte,
189
- };
190
- } else if (this._h2) {
191
- // TODO: timing information currently difficult to model for warm h2 connections.
192
- connectionTiming = {
193
- timeToFirstByte,
194
- };
195
- } else {
196
- connectionTiming = {
197
- connectionTime: handshakeAndRequest,
198
- timeToFirstByte,
199
- };
200
- }
201
-
202
- return {
203
- roundTrips,
204
- timeElapsed,
205
- bytesDownloaded,
206
- extraBytesDownloaded,
207
- congestionWindow,
208
- connectionTiming,
209
- };
210
- }
211
- }
212
-
213
- export {TcpConnection};
214
-
215
- /**
216
- * @typedef DownloadOptions
217
- * @property {number} [dnsResolutionTime]
218
- * @property {number} [timeAlreadyElapsed]
219
- * @property {number} [maximumTimeToElapse]
220
- */
221
-
222
- /**
223
- * @typedef DownloadResults
224
- * @property {number} roundTrips
225
- * @property {number} timeElapsed
226
- * @property {number} bytesDownloaded
227
- * @property {number} extraBytesDownloaded
228
- * @property {number} congestionWindow
229
- * @property {ConnectionTiming} connectionTiming
230
- */