chrome-ai-bridge 1.0.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 (443) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +252 -0
  3. package/build/node_modules/chrome-devtools-frontend/LICENSE +27 -0
  4. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/App.js +4 -0
  5. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/AppProvider.js +17 -0
  6. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Base64.js +43 -0
  7. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/CharacterIdMap.js +27 -0
  8. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Color.js +2033 -0
  9. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorConverter.js +332 -0
  10. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorUtils.js +221 -0
  11. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Console.js +79 -0
  12. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Debouncer.js +14 -0
  13. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/EventTarget.js +14 -0
  14. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Gzip.js +66 -0
  15. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/JavaScriptMetaData.js +4 -0
  16. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Lazy.js +29 -0
  17. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/MapWithDefault.js +22 -0
  18. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Mutex.js +49 -0
  19. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Object.js +86 -0
  20. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +449 -0
  21. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Progress.js +144 -0
  22. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResolverBase.js +69 -0
  23. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResourceType.js +495 -0
  24. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ReturnToPanel.js +15 -0
  25. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Revealer.js +164 -0
  26. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Runnable.js +24 -0
  27. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SegmentedRange.js +78 -0
  28. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SettingRegistration.js +164 -0
  29. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Settings.js +1263 -0
  30. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SimpleHistoryManager.js +97 -0
  31. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/StringOutputStream.js +14 -0
  32. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/TextDictionary.js +40 -0
  33. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Throttler.js +71 -0
  34. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Trie.js +127 -0
  35. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/common.js +41 -0
  36. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/AidaClient.js +434 -0
  37. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/DispatchHttpRequestClient.js +66 -0
  38. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/GdpClient.js +202 -0
  39. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHost.js +92 -0
  40. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostAPI.js +69 -0
  41. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostStub.js +430 -0
  42. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/Platform.js +61 -0
  43. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +220 -0
  44. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +968 -0
  45. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/host.js +13 -0
  46. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/i18n.js +60 -0
  47. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +199 -0
  48. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Brand.js +4 -0
  49. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Constructor.js +4 -0
  50. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DateUtilities.js +13 -0
  51. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DevToolsPath.js +27 -0
  52. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/HostRuntime.js +19 -0
  53. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/KeyboardUtilities.js +21 -0
  54. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MapUtilities.js +79 -0
  55. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MimeType.js +143 -0
  56. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/NumberUtilities.js +72 -0
  57. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +538 -0
  58. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Timing.js +9 -0
  59. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypedArrayUtilities.js +157 -0
  60. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypescriptUtilities.js +24 -0
  61. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UIString.js +4 -0
  62. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UserVisibleError.js +22 -0
  63. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/api/HostRuntime.js +4 -0
  64. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/api/api.js +5 -0
  65. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/browser/HostRuntime.js +63 -0
  66. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/browser/browser.js +5 -0
  67. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/node/HostRuntime.js +72 -0
  68. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/node/node.js +5 -0
  69. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/platform.js +26 -0
  70. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/CDPConnection.js +17 -0
  71. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/ConnectionTransport.js +12 -0
  72. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/DevToolsCDPConnection.js +138 -0
  73. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +539 -0
  74. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/protocol_client.js +8 -0
  75. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/DevToolsContext.js +54 -0
  76. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/Runtime.js +4 -0
  77. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/root.js +6 -0
  78. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AccessibilityModel.js +281 -0
  79. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +845 -0
  80. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AutofillModel.js +155 -0
  81. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUProfilerModel.js +99 -0
  82. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUThrottlingManager.js +217 -0
  83. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSContainerQuery.js +98 -0
  84. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSFontFace.js +31 -0
  85. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSLayer.js +22 -0
  86. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +1318 -0
  87. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMedia.js +100 -0
  88. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +1532 -0
  89. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +908 -0
  90. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +312 -0
  91. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParser.js +574 -0
  92. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +1346 -0
  93. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSQuery.js +53 -0
  94. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSRule.js +403 -0
  95. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSScope.js +22 -0
  96. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStartingStyle.js +21 -0
  97. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleDeclaration.js +275 -0
  98. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleSheetHeader.js +166 -0
  99. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSSupports.js +24 -0
  100. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CategorizedBreakpoint.js +29 -0
  101. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ChildTargetManager.js +236 -0
  102. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CompilerSourceMappingContentProvider.js +47 -0
  103. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Connections.js +205 -0
  104. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +629 -0
  105. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModelTypes.js +14 -0
  106. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Cookie.js +241 -0
  107. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieModel.js +198 -0
  108. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieParser.js +163 -0
  109. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMDebuggerModel.js +597 -0
  110. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +1635 -0
  111. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +1216 -0
  112. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EmulationModel.js +527 -0
  113. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EnhancedTracesParser.js +364 -0
  114. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EventBreakpointsModel.js +127 -0
  115. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameAssociated.js +4 -0
  116. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameManager.js +199 -0
  117. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HeapProfilerModel.js +130 -0
  118. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HttpReasonPhraseStrings.js +75 -0
  119. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IOModel.js +80 -0
  120. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IsolateManager.js +208 -0
  121. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IssuesModel.js +41 -0
  122. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LayerTreeBase.js +95 -0
  123. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LogModel.js +34 -0
  124. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +2223 -0
  125. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +1654 -0
  126. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayColorGenerator.js +48 -0
  127. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +765 -0
  128. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayPersistentHighlighter.js +384 -0
  129. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageLoad.js +25 -0
  130. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageResourceLoader.js +310 -0
  131. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PaintProfiler.js +67 -0
  132. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PerformanceMetricsModel.js +62 -0
  133. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PreloadingModel.js +608 -0
  134. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +413 -0
  135. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingObject.js +4 -0
  136. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RemoteObject.js +908 -0
  137. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Resource.js +163 -0
  138. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +923 -0
  139. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RuntimeModel.js +535 -0
  140. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SDKModel.js +45 -0
  141. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScopeTreeCache.js +36 -0
  142. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScreenCaptureModel.js +176 -0
  143. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Script.js +420 -0
  144. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SecurityOriginManager.js +54 -0
  145. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEvents.js +67 -0
  146. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEventsProtocol.js +113 -0
  147. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerTiming.js +216 -0
  148. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerCacheModel.js +271 -0
  149. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerManager.js +511 -0
  150. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +691 -0
  151. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapCache.js +57 -0
  152. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapFunctionRanges.js +132 -0
  153. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +201 -0
  154. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopeChainEntry.js +156 -0
  155. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +508 -0
  156. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageBucketsModel.js +143 -0
  157. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageKeyManager.js +53 -0
  158. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Target.js +257 -0
  159. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TargetManager.js +395 -0
  160. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +55 -0
  161. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/WebAuthnModel.js +66 -0
  162. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk-meta.js +1166 -0
  163. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk.js +91 -0
  164. package/build/node_modules/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +2640 -0
  165. package/build/node_modules/chrome-devtools-frontend/front_end/generated/Deprecation.js +384 -0
  166. package/build/node_modules/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +1532 -0
  167. package/build/node_modules/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +7602 -0
  168. package/build/node_modules/chrome-devtools-frontend/front_end/generated/protocol.js +4 -0
  169. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +289 -0
  170. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +995 -0
  171. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +664 -0
  172. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/UnitFormatters.js +139 -0
  173. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +377 -0
  174. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIContext.js +131 -0
  175. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIQueries.js +149 -0
  176. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CSSWorkspaceBinding.js +245 -0
  177. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +486 -0
  178. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ContentProviderBasedProject.js +130 -0
  179. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerLanguagePlugins.js +992 -0
  180. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +592 -0
  181. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DefaultScriptMapping.js +112 -0
  182. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/FileUtils.js +186 -0
  183. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/LiveLocation.js +60 -0
  184. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/NetworkProject.js +107 -0
  185. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/PresentationConsoleMessageHelper.js +244 -0
  186. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceMapping.js +564 -0
  187. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceScriptMapping.js +437 -0
  188. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceUtils.js +87 -0
  189. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/SASSSourceMapping.js +182 -0
  190. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/StylesSourceMapping.js +268 -0
  191. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/TempFile.js +55 -0
  192. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/bindings.js +20 -0
  193. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/CPUProfileDataModel.js +516 -0
  194. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/ProfileTreeModel.js +89 -0
  195. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/cpu_profile.js +6 -0
  196. package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/CrUXManager.js +285 -0
  197. package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/crux-manager.js +4 -0
  198. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/DeviceModeModel.js +775 -0
  199. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/EmulatedDevices.js +1706 -0
  200. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/emulation.js +6 -0
  201. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +145 -0
  202. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/ScriptFormatter.js +77 -0
  203. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/formatter.js +6 -0
  204. package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/GeometryImpl.js +347 -0
  205. package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/geometry.js +4 -0
  206. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/LogManager.js +67 -0
  207. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +494 -0
  208. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/RequestResolver.js +49 -0
  209. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs-meta.js +73 -0
  210. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs.js +7 -0
  211. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/Calculator.js +4 -0
  212. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/NetworkTimeCalculator.js +256 -0
  213. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/RequestTimeRanges.js +122 -0
  214. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/network_time_calculator.js +6 -0
  215. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/FunctionCodeResolver.js +192 -0
  216. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/NamesResolver.js +622 -0
  217. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/ScopeChainModel.js +59 -0
  218. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/source_map_scopes.js +7 -0
  219. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTrace.js +4 -0
  220. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceImpl.js +67 -0
  221. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +97 -0
  222. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/Trie.js +121 -0
  223. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace.js +5 -0
  224. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace_impl.js +7 -0
  225. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/CodeMirrorUtils.js +32 -0
  226. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentData.js +173 -0
  227. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentProvider.js +30 -0
  228. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StaticContentProvider.js +32 -0
  229. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StreamingContentData.js +79 -0
  230. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/Text.js +69 -0
  231. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextCursor.js +35 -0
  232. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextRange.js +231 -0
  233. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextUtils.js +355 -0
  234. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/WasmDisassembly.js +68 -0
  235. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/text_utils.js +14 -0
  236. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EntityMapper.js +122 -0
  237. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +81 -0
  238. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +371 -0
  239. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +169 -0
  240. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Name.js +114 -0
  241. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Processor.js +555 -0
  242. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Styles.js +815 -0
  243. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/FilmStrip.js +44 -0
  244. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/MainThreadActivity.js +76 -0
  245. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ScriptDuplication.js +162 -0
  246. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/StackTraceForEvent.js +191 -0
  247. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ThirdParties.js +118 -0
  248. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceFilter.js +50 -0
  249. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +599 -0
  250. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +10 -0
  251. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationFramesHandler.js +109 -0
  252. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationHandler.js +26 -0
  253. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AsyncJSCallsHandler.js +187 -0
  254. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AuctionWorkletsHandler.js +162 -0
  255. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/DOMStatsHandler.js +21 -0
  256. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ExtensionTraceDataHandler.js +263 -0
  257. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FlowsHandler.js +148 -0
  258. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +485 -0
  259. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/GPUHandler.js +35 -0
  260. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ImagePaintingHandler.js +147 -0
  261. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InitiatorsHandler.js +180 -0
  262. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InvalidationsHandler.js +126 -0
  263. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +85 -0
  264. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestTextPaintHandler.js +27 -0
  265. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayerTreeHandler.js +103 -0
  266. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +449 -0
  267. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MemoryHandler.js +21 -0
  268. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +404 -0
  269. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ModelHandlers.js +33 -0
  270. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +566 -0
  271. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageFramesHandler.js +42 -0
  272. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +349 -0
  273. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/RendererHandler.js +346 -0
  274. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SamplesHandler.js +260 -0
  275. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScreenshotsHandler.js +97 -0
  276. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +276 -0
  277. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SelectorStatsHandler.js +71 -0
  278. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/Threads.js +101 -0
  279. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserInteractionsHandler.js +317 -0
  280. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +183 -0
  281. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WarningsHandler.js +134 -0
  282. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WorkersHandler.js +33 -0
  283. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/handlers.js +7 -0
  284. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/helpers.js +163 -0
  285. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/types.js +1 -0
  286. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Extensions.js +41 -0
  287. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Network.js +102 -0
  288. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SamplesIntegrator.js +495 -0
  289. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SyntheticEvents.js +74 -0
  290. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +186 -0
  291. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Trace.js +820 -0
  292. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/TreeHelpers.js +254 -0
  293. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/helpers.js +10 -0
  294. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +489 -0
  295. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Cache.js +209 -0
  296. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +340 -0
  297. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DOMSize.js +181 -0
  298. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +258 -0
  299. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +90 -0
  300. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/FontDisplay.js +82 -0
  301. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ForcedReflow.js +161 -0
  302. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +129 -0
  303. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +263 -0
  304. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +199 -0
  305. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +183 -0
  306. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LegacyJavaScript.js +90 -0
  307. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Models.js +21 -0
  308. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +200 -0
  309. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +545 -0
  310. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +192 -0
  311. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/SlowCSSSelector.js +136 -0
  312. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Statistics.js +92 -0
  313. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ThirdParties.js +98 -0
  314. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Viewport.js +102 -0
  315. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/insights.js +9 -0
  316. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/types.js +18 -0
  317. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/LanternError.js +6 -0
  318. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/NetworkAnalyzer.js +488 -0
  319. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/core.js +5 -0
  320. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/BaseNode.js +276 -0
  321. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/CPUNode.js +63 -0
  322. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/NetworkNode.js +82 -0
  323. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/PageDependencyGraph.js +551 -0
  324. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/graph.js +7 -0
  325. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/lantern.js +9 -0
  326. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/FirstContentfulPaint.js +136 -0
  327. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Interactive.js +67 -0
  328. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/LargestContentfulPaint.js +68 -0
  329. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/MaxPotentialFID.js +48 -0
  330. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Metric.js +68 -0
  331. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/SpeedIndex.js +101 -0
  332. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TBTUtils.js +64 -0
  333. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TotalBlockingTime.js +78 -0
  334. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/metrics.js +11 -0
  335. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/ConnectionPool.js +115 -0
  336. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Constants.js +42 -0
  337. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/DNSCache.js +47 -0
  338. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/SimulationTimingMap.js +134 -0
  339. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Simulator.js +450 -0
  340. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/TCPConnection.js +154 -0
  341. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/simulation.js +9 -0
  342. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/Lantern.js +24 -0
  343. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/types.js +4 -0
  344. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/trace.js +17 -0
  345. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Configuration.js +18 -0
  346. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Extensions.js +37 -0
  347. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/File.js +57 -0
  348. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Overlays.js +4 -0
  349. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Timing.js +15 -0
  350. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +580 -0
  351. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/types.js +9 -0
  352. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/SourceMapsResolver.js +224 -0
  353. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/trace_source_maps_resolver.js +4 -0
  354. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/FileManager.js +64 -0
  355. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/IgnoreListManager.js +504 -0
  356. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/SearchConfig.js +113 -0
  357. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/UISourceCode.js +601 -0
  358. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/WorkspaceImpl.js +201 -0
  359. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/workspace-meta.js +34 -0
  360. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/workspace.js +9 -0
  361. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/codemirror.next/codemirror.next.js +1 -0
  362. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/LICENSE +202 -0
  363. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/legacy-javascript.js +2 -0
  364. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +940 -0
  365. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/LICENSE +26 -0
  366. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js +196 -0
  367. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js +226 -0
  368. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/codec.js +4 -0
  369. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +394 -0
  370. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js +24 -0
  371. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +283 -0
  372. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/mod.js +7 -0
  373. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/util.js +9 -0
  374. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/vlq.js +84 -0
  375. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/source-map-scopes-codec.js +4 -0
  376. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/LICENSE +20 -0
  377. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/lib/nostats-subset.js +146 -0
  378. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +2 -0
  379. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-subset.js +2 -0
  380. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +118 -0
  381. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +40 -0
  382. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/entities.test.js +26 -0
  383. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.js +4 -0
  384. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.test.js +215 -0
  385. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +4 -0
  386. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +4 -0
  387. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +4 -0
  388. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/nostats-subset.js +2 -0
  389. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/third-party-web.js +2 -0
  390. package/build/src/McpContext.js +400 -0
  391. package/build/src/McpResponse.js +237 -0
  392. package/build/src/Mutex.js +40 -0
  393. package/build/src/PageCollector.js +68 -0
  394. package/build/src/WaitForHelper.js +134 -0
  395. package/build/src/browser-connection-manager.js +373 -0
  396. package/build/src/browser.js +719 -0
  397. package/build/src/cli.js +120 -0
  398. package/build/src/client-detector.js +93 -0
  399. package/build/src/config.js +38 -0
  400. package/build/src/formatters/consoleFormatter.js +73 -0
  401. package/build/src/formatters/extensionsPageFormatter.js +184 -0
  402. package/build/src/formatters/networkFormatter.js +34 -0
  403. package/build/src/formatters/snapshotFormatter.js +80 -0
  404. package/build/src/graceful.js +125 -0
  405. package/build/src/index.js +13 -0
  406. package/build/src/logger.js +27 -0
  407. package/build/src/login-helper.js +431 -0
  408. package/build/src/main.js +268 -0
  409. package/build/src/plugin-api.js +189 -0
  410. package/build/src/profile-migration.js +82 -0
  411. package/build/src/profile-resolver.js +555 -0
  412. package/build/src/project-detector.js +71 -0
  413. package/build/src/project-root-state.js +18 -0
  414. package/build/src/roots-manager.js +253 -0
  415. package/build/src/selectors/chatgpt.json +61 -0
  416. package/build/src/selectors/gemini.json +24 -0
  417. package/build/src/selectors/loader.js +128 -0
  418. package/build/src/stable-identity.js +193 -0
  419. package/build/src/startup-check.js +147 -0
  420. package/build/src/system-profile.js +181 -0
  421. package/build/src/tools/ToolDefinition.js +9 -0
  422. package/build/src/tools/bookmarks.js +170 -0
  423. package/build/src/tools/categories.js +15 -0
  424. package/build/src/tools/chatgpt-web.js +507 -0
  425. package/build/src/tools/console.js +19 -0
  426. package/build/src/tools/core-tools.js +65 -0
  427. package/build/src/tools/diagnose-ui.js +328 -0
  428. package/build/src/tools/emulation.js +67 -0
  429. package/build/src/tools/extensions.js +185 -0
  430. package/build/src/tools/gemini-web.js +491 -0
  431. package/build/src/tools/iframe-popup-tools.js +204 -0
  432. package/build/src/tools/input.js +185 -0
  433. package/build/src/tools/network.js +68 -0
  434. package/build/src/tools/optional-tools.js +69 -0
  435. package/build/src/tools/pages.js +172 -0
  436. package/build/src/tools/performance.js +127 -0
  437. package/build/src/tools/screenshot.js +48 -0
  438. package/build/src/tools/script.js +39 -0
  439. package/build/src/tools/snapshot.js +45 -0
  440. package/build/src/trace-processing/parse.js +93 -0
  441. package/build/src/utils/pagination.js +49 -0
  442. package/package.json +90 -0
  443. package/scripts/cli.mjs +49 -0
@@ -0,0 +1,450 @@
1
+ // Copyright 2024 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+ import * as Core from '../core/core.js';
5
+ import * as Graph from '../graph/graph.js';
6
+ import { ConnectionPool } from './ConnectionPool.js';
7
+ import { Constants } from './Constants.js';
8
+ import { DNSCache } from './DNSCache.js';
9
+ import { SimulatorTimingMap } from './SimulationTimingMap.js';
10
+ import { TCPConnection } from './TCPConnection.js';
11
+ const defaultThrottling = Constants.throttling.mobileSlow4G;
12
+ // see https://cs.chromium.org/search/?q=kDefaultMaxNumDelayableRequestsPerClient&sq=package:chromium&type=cs
13
+ const DEFAULT_MAXIMUM_CONCURRENT_REQUESTS = 10;
14
+ // layout tasks tend to be less CPU-bound and do not experience the same increase in duration
15
+ const DEFAULT_LAYOUT_TASK_MULTIPLIER = 0.5;
16
+ // if a task takes more than 10 seconds it's usually a sign it isn't actually CPU bound and we're overestimating
17
+ const DEFAULT_MAXIMUM_CPU_TASK_DURATION = 10000;
18
+ const NodeState = {
19
+ NotReadyToStart: 0,
20
+ ReadyToStart: 1,
21
+ InProgress: 2,
22
+ Complete: 3,
23
+ };
24
+ const PriorityStartTimePenalty = {
25
+ VeryHigh: 0,
26
+ High: 0.25,
27
+ Medium: 0.5,
28
+ Low: 1,
29
+ VeryLow: 2,
30
+ };
31
+ const ALL_SIMULATION_NODE_TIMINGS = new Map();
32
+ class Simulator {
33
+ static createSimulator(settings) {
34
+ const { throttlingMethod, throttling, precomputedLanternData, networkAnalysis } = settings;
35
+ const options = {
36
+ additionalRttByOrigin: networkAnalysis.additionalRttByOrigin,
37
+ serverResponseTimeByOrigin: networkAnalysis.serverResponseTimeByOrigin,
38
+ observedThroughput: networkAnalysis.throughput,
39
+ };
40
+ // If we have precomputed lantern data, overwrite our observed estimates and use precomputed instead
41
+ // for increased stability.
42
+ if (precomputedLanternData) {
43
+ options.additionalRttByOrigin = new Map(Object.entries(precomputedLanternData.additionalRttByOrigin));
44
+ options.serverResponseTimeByOrigin = new Map(Object.entries(precomputedLanternData.serverResponseTimeByOrigin));
45
+ }
46
+ switch (throttlingMethod) {
47
+ case 'provided':
48
+ options.rtt = networkAnalysis.rtt;
49
+ options.throughput = networkAnalysis.throughput;
50
+ options.cpuSlowdownMultiplier = 1;
51
+ options.layoutTaskMultiplier = 1;
52
+ break;
53
+ case 'devtools':
54
+ if (throttling) {
55
+ options.rtt = throttling.requestLatencyMs / Constants.throttling.DEVTOOLS_RTT_ADJUSTMENT_FACTOR;
56
+ options.throughput =
57
+ throttling.downloadThroughputKbps * 1024 / Constants.throttling.DEVTOOLS_THROUGHPUT_ADJUSTMENT_FACTOR;
58
+ }
59
+ options.cpuSlowdownMultiplier = 1;
60
+ options.layoutTaskMultiplier = 1;
61
+ break;
62
+ case 'simulate':
63
+ if (throttling) {
64
+ options.rtt = throttling.rttMs;
65
+ options.throughput = throttling.throughputKbps * 1024;
66
+ options.cpuSlowdownMultiplier = throttling.cpuSlowdownMultiplier;
67
+ }
68
+ break;
69
+ default:
70
+ // intentionally fallback to simulator defaults
71
+ break;
72
+ }
73
+ return new Simulator(options);
74
+ }
75
+ options;
76
+ _rtt;
77
+ throughput;
78
+ maximumConcurrentRequests;
79
+ cpuSlowdownMultiplier;
80
+ layoutTaskMultiplier;
81
+ cachedNodeListByStartPosition;
82
+ nodeTimings;
83
+ numberInProgressByType;
84
+ nodes;
85
+ dns;
86
+ connectionPool;
87
+ constructor(options) {
88
+ this.options = Object.assign({
89
+ rtt: defaultThrottling.rttMs,
90
+ throughput: defaultThrottling.throughputKbps * 1024,
91
+ maximumConcurrentRequests: DEFAULT_MAXIMUM_CONCURRENT_REQUESTS,
92
+ cpuSlowdownMultiplier: defaultThrottling.cpuSlowdownMultiplier,
93
+ layoutTaskMultiplier: DEFAULT_LAYOUT_TASK_MULTIPLIER,
94
+ additionalRttByOrigin: new Map(),
95
+ serverResponseTimeByOrigin: new Map(),
96
+ }, options);
97
+ this._rtt = this.options.rtt;
98
+ this.throughput = this.options.throughput;
99
+ this.maximumConcurrentRequests = Math.max(Math.min(TCPConnection.maximumSaturatedConnections(this._rtt, this.throughput), this.options.maximumConcurrentRequests), 1);
100
+ this.cpuSlowdownMultiplier = this.options.cpuSlowdownMultiplier;
101
+ this.layoutTaskMultiplier = this.cpuSlowdownMultiplier * this.options.layoutTaskMultiplier;
102
+ this.cachedNodeListByStartPosition = [];
103
+ // Properties reset on every `.simulate` call but duplicated here for type checking
104
+ this.nodeTimings = new SimulatorTimingMap();
105
+ this.numberInProgressByType = new Map();
106
+ this.nodes = {};
107
+ this.dns = new DNSCache({ rtt: this._rtt });
108
+ // @ts-expect-error
109
+ this.connectionPool = null;
110
+ if (!Number.isFinite(this._rtt)) {
111
+ throw new Core.LanternError(`Invalid rtt ${this._rtt}`);
112
+ }
113
+ if (!Number.isFinite(this.throughput)) {
114
+ throw new Core.LanternError(`Invalid throughput ${this.throughput}`);
115
+ }
116
+ }
117
+ get rtt() {
118
+ return this._rtt;
119
+ }
120
+ initializeConnectionPool(graph) {
121
+ const records = [];
122
+ graph.getRootNode().traverse(node => {
123
+ if (node.type === Graph.BaseNode.types.NETWORK) {
124
+ records.push(node.request);
125
+ }
126
+ });
127
+ this.connectionPool = new ConnectionPool(records, this.options);
128
+ }
129
+ /**
130
+ * Initializes the various state data structures such _nodeTimings and the _node Sets by state.
131
+ */
132
+ initializeAuxiliaryData() {
133
+ this.nodeTimings = new SimulatorTimingMap();
134
+ this.numberInProgressByType = new Map();
135
+ this.nodes = {};
136
+ this.cachedNodeListByStartPosition = [];
137
+ // NOTE: We don't actually need *all* of these sets, but the clarity that each node progresses
138
+ // through the system is quite nice.
139
+ for (const state of Object.values(NodeState)) {
140
+ this.nodes[state] = new Set();
141
+ }
142
+ }
143
+ numberInProgress(type) {
144
+ return this.numberInProgressByType.get(type) || 0;
145
+ }
146
+ markNodeAsReadyToStart(node, queuedTime) {
147
+ const nodeStartPosition = Simulator.computeNodeStartPosition(node);
148
+ const firstNodeIndexWithGreaterStartPosition = this.cachedNodeListByStartPosition.findIndex(candidate => Simulator.computeNodeStartPosition(candidate) > nodeStartPosition);
149
+ const insertionIndex = firstNodeIndexWithGreaterStartPosition === -1 ? this.cachedNodeListByStartPosition.length :
150
+ firstNodeIndexWithGreaterStartPosition;
151
+ this.cachedNodeListByStartPosition.splice(insertionIndex, 0, node);
152
+ this.nodes[NodeState.ReadyToStart].add(node);
153
+ this.nodes[NodeState.NotReadyToStart].delete(node);
154
+ this.nodeTimings.setReadyToStart(node, { queuedTime });
155
+ }
156
+ markNodeAsInProgress(node, startTime) {
157
+ const indexOfNodeToStart = this.cachedNodeListByStartPosition.indexOf(node);
158
+ this.cachedNodeListByStartPosition.splice(indexOfNodeToStart, 1);
159
+ this.nodes[NodeState.InProgress].add(node);
160
+ this.nodes[NodeState.ReadyToStart].delete(node);
161
+ this.numberInProgressByType.set(node.type, this.numberInProgress(node.type) + 1);
162
+ this.nodeTimings.setInProgress(node, { startTime });
163
+ }
164
+ markNodeAsComplete(node, endTime, connectionTiming) {
165
+ this.nodes[NodeState.Complete].add(node);
166
+ this.nodes[NodeState.InProgress].delete(node);
167
+ this.numberInProgressByType.set(node.type, this.numberInProgress(node.type) - 1);
168
+ this.nodeTimings.setCompleted(node, { endTime, connectionTiming });
169
+ // Try to add all its dependents to the queue
170
+ for (const dependent of node.getDependents()) {
171
+ // Skip dependent node if one of its dependencies hasn't finished yet
172
+ const dependencies = dependent.getDependencies();
173
+ if (dependencies.some(dep => !this.nodes[NodeState.Complete].has(dep))) {
174
+ continue;
175
+ }
176
+ // Otherwise add it to the queue
177
+ this.markNodeAsReadyToStart(dependent, endTime);
178
+ }
179
+ }
180
+ acquireConnection(request) {
181
+ return this.connectionPool.acquire(request);
182
+ }
183
+ getNodesSortedByStartPosition() {
184
+ // Make a copy so we don't skip nodes due to concurrent modification
185
+ return Array.from(this.cachedNodeListByStartPosition);
186
+ }
187
+ startNodeIfPossible(node, totalElapsedTime) {
188
+ if (node.type === Graph.BaseNode.types.CPU) {
189
+ // Start a CPU task if there's no other CPU task in process
190
+ if (this.numberInProgress(node.type) === 0) {
191
+ this.markNodeAsInProgress(node, totalElapsedTime);
192
+ }
193
+ return;
194
+ }
195
+ if (node.type !== Graph.BaseNode.types.NETWORK) {
196
+ throw new Core.LanternError('Unsupported');
197
+ }
198
+ // If a network request is connectionless, we can always start it, so skip the connection checks
199
+ if (!node.isConnectionless) {
200
+ // Start a network request if we're not at max requests and a connection is available
201
+ const numberOfActiveRequests = this.numberInProgress(node.type);
202
+ if (numberOfActiveRequests >= this.maximumConcurrentRequests) {
203
+ return;
204
+ }
205
+ const connection = this.acquireConnection(node.request);
206
+ if (!connection) {
207
+ return;
208
+ }
209
+ }
210
+ this.markNodeAsInProgress(node, totalElapsedTime);
211
+ }
212
+ /**
213
+ * Updates each connection in use with the available throughput based on the number of network requests
214
+ * currently in flight.
215
+ */
216
+ updateNetworkCapacity() {
217
+ const inFlight = this.numberInProgress(Graph.BaseNode.types.NETWORK);
218
+ if (inFlight === 0) {
219
+ return;
220
+ }
221
+ for (const connection of this.connectionPool.connectionsInUse()) {
222
+ connection.setThroughput(this.throughput / inFlight);
223
+ }
224
+ }
225
+ /**
226
+ * Estimates the number of milliseconds remaining given current conditions before the node is complete.
227
+ */
228
+ estimateTimeRemaining(node) {
229
+ if (node.type === Graph.BaseNode.types.CPU) {
230
+ return this.estimateCPUTimeRemaining(node);
231
+ }
232
+ if (node.type === Graph.BaseNode.types.NETWORK) {
233
+ return this.estimateNetworkTimeRemaining(node);
234
+ }
235
+ throw new Core.LanternError('Unsupported');
236
+ }
237
+ estimateCPUTimeRemaining(cpuNode) {
238
+ const timingData = this.nodeTimings.getCpuStarted(cpuNode);
239
+ const multiplier = cpuNode.didPerformLayout() ? this.layoutTaskMultiplier : this.cpuSlowdownMultiplier;
240
+ const totalDuration = Math.min(Math.round(cpuNode.duration / 1000 * multiplier), DEFAULT_MAXIMUM_CPU_TASK_DURATION);
241
+ const estimatedTimeElapsed = totalDuration - timingData.timeElapsed;
242
+ this.nodeTimings.setCpuEstimated(cpuNode, { estimatedTimeElapsed });
243
+ return estimatedTimeElapsed;
244
+ }
245
+ estimateNetworkTimeRemaining(networkNode) {
246
+ const request = networkNode.request;
247
+ const timingData = this.nodeTimings.getNetworkStarted(networkNode);
248
+ let timeElapsed = 0;
249
+ if (networkNode.fromDiskCache) {
250
+ // Rough access time for seeking to location on disk and reading sequentially.
251
+ // 8ms per seek + 20ms/MB
252
+ // @see http://norvig.com/21-days.html#answers
253
+ const sizeInMb = (request.resourceSize || 0) / 1024 / 1024;
254
+ timeElapsed = 8 + 20 * sizeInMb - timingData.timeElapsed;
255
+ }
256
+ else if (networkNode.isNonNetworkProtocol) {
257
+ // Estimates for the overhead of a data URL in Chromium and the decoding time for base64-encoded data.
258
+ // 2ms per request + 10ms/MB
259
+ // @see traces on https://dopiaza.org/tools/datauri/examples/index.php
260
+ const sizeInMb = (request.resourceSize || 0) / 1024 / 1024;
261
+ timeElapsed = 2 + 10 * sizeInMb - timingData.timeElapsed;
262
+ }
263
+ else {
264
+ const connection = this.connectionPool.acquireActiveConnectionFromRequest(request);
265
+ const dnsResolutionTime = this.dns.getTimeUntilResolution(request, {
266
+ requestedAt: timingData.startTime,
267
+ shouldUpdateCache: true,
268
+ });
269
+ const timeAlreadyElapsed = timingData.timeElapsed;
270
+ const calculation = connection.simulateDownloadUntil(request.transferSize - timingData.bytesDownloaded, { timeAlreadyElapsed, dnsResolutionTime, maximumTimeToElapse: Infinity });
271
+ timeElapsed = calculation.timeElapsed;
272
+ }
273
+ const estimatedTimeElapsed = timeElapsed + timingData.timeElapsedOvershoot;
274
+ this.nodeTimings.setNetworkEstimated(networkNode, { estimatedTimeElapsed });
275
+ return estimatedTimeElapsed;
276
+ }
277
+ /**
278
+ * Computes and returns the minimum estimated completion time of the nodes currently in progress.
279
+ */
280
+ findNextNodeCompletionTime() {
281
+ let minimumTime = Infinity;
282
+ for (const node of this.nodes[NodeState.InProgress]) {
283
+ minimumTime = Math.min(minimumTime, this.estimateTimeRemaining(node));
284
+ }
285
+ return minimumTime;
286
+ }
287
+ /**
288
+ * Given a time period, computes the progress toward completion that the node made during that time.
289
+ */
290
+ updateProgressMadeInTimePeriod(node, timePeriodLength, totalElapsedTime) {
291
+ const timingData = this.nodeTimings.getInProgress(node);
292
+ const isFinished = timingData.estimatedTimeElapsed === timePeriodLength;
293
+ if (node.type === Graph.BaseNode.types.CPU || node.isConnectionless) {
294
+ if (isFinished) {
295
+ this.markNodeAsComplete(node, totalElapsedTime);
296
+ }
297
+ else {
298
+ timingData.timeElapsed += timePeriodLength;
299
+ }
300
+ return;
301
+ }
302
+ if (node.type !== Graph.BaseNode.types.NETWORK) {
303
+ throw new Core.LanternError('Unsupported');
304
+ }
305
+ if (!('bytesDownloaded' in timingData)) {
306
+ throw new Core.LanternError('Invalid timing data');
307
+ }
308
+ const request = node.request;
309
+ const connection = this.connectionPool.acquireActiveConnectionFromRequest(request);
310
+ const dnsResolutionTime = this.dns.getTimeUntilResolution(request, {
311
+ requestedAt: timingData.startTime,
312
+ shouldUpdateCache: true,
313
+ });
314
+ const calculation = connection.simulateDownloadUntil(request.transferSize - timingData.bytesDownloaded, {
315
+ dnsResolutionTime,
316
+ timeAlreadyElapsed: timingData.timeElapsed,
317
+ maximumTimeToElapse: timePeriodLength - timingData.timeElapsedOvershoot,
318
+ });
319
+ connection.setCongestionWindow(calculation.congestionWindow);
320
+ connection.setH2OverflowBytesDownloaded(calculation.extraBytesDownloaded);
321
+ if (isFinished) {
322
+ connection.setWarmed(true);
323
+ this.connectionPool.release(request);
324
+ this.markNodeAsComplete(node, totalElapsedTime, calculation.connectionTiming);
325
+ }
326
+ else {
327
+ timingData.timeElapsed += calculation.timeElapsed;
328
+ timingData.timeElapsedOvershoot += calculation.timeElapsed - timePeriodLength;
329
+ timingData.bytesDownloaded += calculation.bytesDownloaded;
330
+ }
331
+ }
332
+ computeFinalNodeTimings() {
333
+ const completeNodeTimingEntries = this.nodeTimings.getNodes().map(node => {
334
+ return [node, this.nodeTimings.getCompleted(node)];
335
+ });
336
+ // Most consumers will want the entries sorted by startTime, so insert them in that order
337
+ completeNodeTimingEntries.sort((a, b) => a[1].startTime - b[1].startTime);
338
+ // Trimmed version of type `Lantern.Simulation.NodeTiming`.
339
+ const nodeTimingEntries = completeNodeTimingEntries.map(([node, timing]) => {
340
+ return [
341
+ node,
342
+ {
343
+ startTime: timing.startTime,
344
+ endTime: timing.endTime,
345
+ duration: timing.endTime - timing.startTime,
346
+ },
347
+ ];
348
+ });
349
+ return {
350
+ nodeTimings: new Map(nodeTimingEntries),
351
+ completeNodeTimings: new Map(completeNodeTimingEntries),
352
+ };
353
+ }
354
+ getOptions() {
355
+ return this.options;
356
+ }
357
+ /**
358
+ * Estimates the time taken to process all of the graph's nodes, returns the overall time along with
359
+ * each node annotated by start/end times.
360
+ *
361
+ * Simulator/connection pool are allowed to deviate from what was
362
+ * observed in the trace/devtoolsLog and start requests as soon as they are queued (i.e. do not
363
+ * wait around for a warm connection to be available if the original request was fetched on a warm
364
+ * connection).
365
+ */
366
+ simulate(graph, options) {
367
+ if (Graph.BaseNode.findCycle(graph)) {
368
+ throw new Core.LanternError('Cannot simulate graph with cycle');
369
+ }
370
+ options = Object.assign({
371
+ label: undefined,
372
+ }, options);
373
+ // initialize the necessary data containers
374
+ this.dns = new DNSCache({ rtt: this._rtt });
375
+ this.initializeConnectionPool(graph);
376
+ this.initializeAuxiliaryData();
377
+ const nodesNotReadyToStart = this.nodes[NodeState.NotReadyToStart];
378
+ const nodesReadyToStart = this.nodes[NodeState.ReadyToStart];
379
+ const nodesInProgress = this.nodes[NodeState.InProgress];
380
+ const rootNode = graph.getRootNode();
381
+ rootNode.traverse(node => nodesNotReadyToStart.add(node));
382
+ let totalElapsedTime = 0;
383
+ let iteration = 0;
384
+ // root node is always ready to start
385
+ this.markNodeAsReadyToStart(rootNode, totalElapsedTime);
386
+ // loop as long as we have nodes in the queue or currently in progress
387
+ while (nodesReadyToStart.size || nodesInProgress.size) {
388
+ // move all possible queued nodes to in progress
389
+ for (const node of this.getNodesSortedByStartPosition()) {
390
+ this.startNodeIfPossible(node, totalElapsedTime);
391
+ }
392
+ if (!nodesInProgress.size) {
393
+ // Interplay between fromDiskCache and connectionReused can be incorrect,
394
+ // have to give up.
395
+ throw new Core.LanternError('Failed to start a node');
396
+ }
397
+ // set the available throughput for all connections based on # in-flight
398
+ this.updateNetworkCapacity();
399
+ // find the time that the next node will finish
400
+ const minimumTime = this.findNextNodeCompletionTime();
401
+ totalElapsedTime += minimumTime;
402
+ // While this is no longer strictly necessary, it's always better than hanging
403
+ if (!Number.isFinite(minimumTime) || iteration > 100000) {
404
+ throw new Core.LanternError('Simulation failed, depth exceeded');
405
+ }
406
+ iteration++;
407
+ // update how far each node will progress until that point
408
+ for (const node of nodesInProgress) {
409
+ this.updateProgressMadeInTimePeriod(node, minimumTime, totalElapsedTime);
410
+ }
411
+ }
412
+ // `nodeTimings` are used for simulator consumers, `completeNodeTimings` kept for debugging.
413
+ const { nodeTimings, completeNodeTimings } = this.computeFinalNodeTimings();
414
+ ALL_SIMULATION_NODE_TIMINGS.set(options.label || 'unlabeled', completeNodeTimings);
415
+ return {
416
+ timeInMs: totalElapsedTime,
417
+ nodeTimings,
418
+ };
419
+ }
420
+ computeWastedMsFromWastedBytes(wastedBytes) {
421
+ const { throughput, observedThroughput } = this.options;
422
+ // https://github.com/GoogleChrome/lighthouse/pull/13323#issuecomment-962031709
423
+ // 0 throughput means the no (additional) throttling is expected.
424
+ // This is common for desktop + devtools throttling where throttling is additive and we don't want any additional.
425
+ const bitsPerSecond = throughput === 0 ? observedThroughput : throughput;
426
+ if (bitsPerSecond === 0) {
427
+ return 0;
428
+ }
429
+ const wastedBits = wastedBytes * 8;
430
+ const wastedMs = wastedBits / bitsPerSecond * 1000;
431
+ // This is an estimate of wasted time, so we won't be more precise than 10ms.
432
+ return Math.round(wastedMs / 10) * 10;
433
+ }
434
+ // Used by Lighthouse asset-saver
435
+ static get allNodeTimings() {
436
+ return ALL_SIMULATION_NODE_TIMINGS;
437
+ }
438
+ /**
439
+ * We attempt to start nodes by their observed start time using the request priority as a tie breaker.
440
+ * When simulating, just because a low priority image started 5ms before a high priority image doesn't mean
441
+ * it would have happened like that when the network was slower.
442
+ */
443
+ static computeNodeStartPosition(node) {
444
+ if (node.type === 'cpu') {
445
+ return node.startTime;
446
+ }
447
+ return node.startTime + (PriorityStartTimePenalty[node.request.priority] * 1000 * 1000 || 0);
448
+ }
449
+ }
450
+ export { Simulator };
@@ -0,0 +1,154 @@
1
+ // Copyright 2024 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+ const INITIAL_CONGESTION_WINDOW = 10;
5
+ const TCP_SEGMENT_SIZE = 1460;
6
+ class TCPConnection {
7
+ warmed;
8
+ ssl;
9
+ h2;
10
+ rtt;
11
+ throughput;
12
+ serverLatency;
13
+ _congestionWindow;
14
+ h2OverflowBytesDownloaded;
15
+ constructor(rtt, throughput, serverLatency = 0, ssl = true, h2 = false) {
16
+ this.warmed = false;
17
+ this.ssl = ssl;
18
+ this.h2 = h2;
19
+ this.rtt = rtt;
20
+ this.throughput = throughput;
21
+ this.serverLatency = serverLatency;
22
+ this._congestionWindow = INITIAL_CONGESTION_WINDOW;
23
+ this.h2OverflowBytesDownloaded = 0;
24
+ }
25
+ static maximumSaturatedConnections(rtt, availableThroughput) {
26
+ const roundTripsPerSecond = 1000 / rtt;
27
+ const bytesPerRoundTrip = TCP_SEGMENT_SIZE;
28
+ const bytesPerSecond = roundTripsPerSecond * bytesPerRoundTrip;
29
+ const minimumThroughputRequiredPerRequest = bytesPerSecond * 8;
30
+ return Math.floor(availableThroughput / minimumThroughputRequiredPerRequest);
31
+ }
32
+ computeMaximumCongestionWindowInSegments() {
33
+ const bytesPerSecond = this.throughput / 8;
34
+ const secondsPerRoundTrip = this.rtt / 1000;
35
+ const bytesPerRoundTrip = bytesPerSecond * secondsPerRoundTrip;
36
+ return Math.floor(bytesPerRoundTrip / TCP_SEGMENT_SIZE);
37
+ }
38
+ setThroughput(throughput) {
39
+ this.throughput = throughput;
40
+ }
41
+ setCongestionWindow(congestion) {
42
+ this._congestionWindow = congestion;
43
+ }
44
+ setWarmed(warmed) {
45
+ this.warmed = warmed;
46
+ }
47
+ isH2() {
48
+ return this.h2;
49
+ }
50
+ get congestionWindow() {
51
+ return this._congestionWindow;
52
+ }
53
+ /**
54
+ * Sets the number of excess bytes that are available to this connection on future downloads, only
55
+ * applies to H2 connections.
56
+ */
57
+ setH2OverflowBytesDownloaded(bytes) {
58
+ if (!this.h2) {
59
+ return;
60
+ }
61
+ this.h2OverflowBytesDownloaded = bytes;
62
+ }
63
+ clone() {
64
+ return Object.assign(new TCPConnection(this.rtt, this.throughput), this);
65
+ }
66
+ /**
67
+ * Simulates a network download of a particular number of bytes over an optional maximum amount of time
68
+ * and returns information about the ending state.
69
+ *
70
+ * See https://hpbn.co/building-blocks-of-tcp/#three-way-handshake and
71
+ * https://hpbn.co/transport-layer-security-tls/#tls-handshake for details.
72
+ */
73
+ simulateDownloadUntil(bytesToDownload, options) {
74
+ const { timeAlreadyElapsed = 0, maximumTimeToElapse = Infinity, dnsResolutionTime = 0 } = options || {};
75
+ if (this.warmed && this.h2) {
76
+ bytesToDownload -= this.h2OverflowBytesDownloaded;
77
+ }
78
+ const twoWayLatency = this.rtt;
79
+ const oneWayLatency = twoWayLatency / 2;
80
+ const maximumCongestionWindow = this.computeMaximumCongestionWindowInSegments();
81
+ let handshakeAndRequest = oneWayLatency;
82
+ if (!this.warmed) {
83
+ handshakeAndRequest =
84
+ // DNS lookup
85
+ dnsResolutionTime +
86
+ // SYN
87
+ oneWayLatency +
88
+ // SYN ACK
89
+ oneWayLatency +
90
+ // ACK + initial request
91
+ oneWayLatency +
92
+ // ClientHello/ServerHello assuming TLS False Start is enabled (https://istlsfastyet.com/#server-performance).
93
+ (this.ssl ? twoWayLatency : 0);
94
+ }
95
+ let roundTrips = Math.ceil(handshakeAndRequest / twoWayLatency);
96
+ let timeToFirstByte = handshakeAndRequest + this.serverLatency + oneWayLatency;
97
+ if (this.warmed && this.h2) {
98
+ timeToFirstByte = 0;
99
+ }
100
+ const timeElapsedForTTFB = Math.max(timeToFirstByte - timeAlreadyElapsed, 0);
101
+ const maximumDownloadTimeToElapse = maximumTimeToElapse - timeElapsedForTTFB;
102
+ let congestionWindow = Math.min(this._congestionWindow, maximumCongestionWindow);
103
+ let totalBytesDownloaded = 0;
104
+ if (timeElapsedForTTFB > 0) {
105
+ totalBytesDownloaded = congestionWindow * TCP_SEGMENT_SIZE;
106
+ }
107
+ else {
108
+ roundTrips = 0;
109
+ }
110
+ let downloadTimeElapsed = 0;
111
+ let bytesRemaining = bytesToDownload - totalBytesDownloaded;
112
+ while (bytesRemaining > 0 && downloadTimeElapsed <= maximumDownloadTimeToElapse) {
113
+ roundTrips++;
114
+ downloadTimeElapsed += twoWayLatency;
115
+ congestionWindow = Math.max(Math.min(maximumCongestionWindow, congestionWindow * 2), 1);
116
+ const bytesDownloadedInWindow = congestionWindow * TCP_SEGMENT_SIZE;
117
+ totalBytesDownloaded += bytesDownloadedInWindow;
118
+ bytesRemaining -= bytesDownloadedInWindow;
119
+ }
120
+ const timeElapsed = timeElapsedForTTFB + downloadTimeElapsed;
121
+ const extraBytesDownloaded = this.h2 ? Math.max(totalBytesDownloaded - bytesToDownload, 0) : 0;
122
+ const bytesDownloaded = Math.max(Math.min(totalBytesDownloaded, bytesToDownload), 0);
123
+ let connectionTiming;
124
+ if (!this.warmed) {
125
+ connectionTiming = {
126
+ dnsResolutionTime,
127
+ connectionTime: handshakeAndRequest - dnsResolutionTime,
128
+ sslTime: this.ssl ? twoWayLatency : undefined,
129
+ timeToFirstByte,
130
+ };
131
+ }
132
+ else if (this.h2) {
133
+ // TODO: timing information currently difficult to model for warm h2 connections.
134
+ connectionTiming = {
135
+ timeToFirstByte,
136
+ };
137
+ }
138
+ else {
139
+ connectionTiming = {
140
+ connectionTime: handshakeAndRequest,
141
+ timeToFirstByte,
142
+ };
143
+ }
144
+ return {
145
+ roundTrips,
146
+ timeElapsed,
147
+ bytesDownloaded,
148
+ extraBytesDownloaded,
149
+ congestionWindow,
150
+ connectionTiming,
151
+ };
152
+ }
153
+ }
154
+ export { TCPConnection };
@@ -0,0 +1,9 @@
1
+ // Copyright 2024 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+ export * from './ConnectionPool.js';
5
+ export * from './Constants.js';
6
+ export * from './DNSCache.js';
7
+ export * from './SimulationTimingMap.js';
8
+ export * from './Simulator.js';
9
+ export * from './TCPConnection.js';
@@ -0,0 +1,24 @@
1
+ // Copyright 2024 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+ export const NetworkRequestTypes = {
5
+ XHR: 'XHR',
6
+ Fetch: 'Fetch',
7
+ EventSource: 'EventSource',
8
+ Script: 'Script',
9
+ Stylesheet: 'Stylesheet',
10
+ Image: 'Image',
11
+ Media: 'Media',
12
+ Font: 'Font',
13
+ Document: 'Document',
14
+ TextTrack: 'TextTrack',
15
+ WebSocket: 'WebSocket',
16
+ Other: 'Other',
17
+ Manifest: 'Manifest',
18
+ SignedExchange: 'SignedExchange',
19
+ Ping: 'Ping',
20
+ Preflight: 'Preflight',
21
+ CSPViolationReport: 'CSPViolationReport',
22
+ Prefetch: 'Prefetch',
23
+ FedCM: 'FedCM',
24
+ };
@@ -0,0 +1,4 @@
1
+ // Copyright 2024 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+ export * from './Lantern.js';
@@ -0,0 +1,17 @@
1
+ // Copyright 2022 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+ import * as EntityMapper from './EntityMapper.js';
5
+ import * as EventsSerializer from './EventsSerializer.js';
6
+ import * as Extras from './extras/extras.js';
7
+ import * as Handlers from './handlers/handlers.js';
8
+ import * as Helpers from './helpers/helpers.js';
9
+ import * as Insights from './insights/insights.js';
10
+ import * as Lantern from './lantern/lantern.js';
11
+ import * as LanternComputationData from './LanternComputationData.js';
12
+ import * as TraceModel from './ModelImpl.js';
13
+ import * as Name from './Name.js';
14
+ import * as Processor from './Processor.js';
15
+ import * as Styles from './Styles.js';
16
+ import * as Types from './types/types.js';
17
+ export { EntityMapper, EventsSerializer, Extras, Handlers, Helpers, Insights, Lantern, LanternComputationData, Name, Processor, Styles, TraceModel, Types, };
@@ -0,0 +1,18 @@
1
+ // Copyright 2023 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+ export const defaults = () => ({
5
+ includeRuntimeCallStats: false,
6
+ showAllEvents: false,
7
+ debugMode: false,
8
+ maxInvalidationEventsPerEvent: 20,
9
+ enableAnimationsFrameHandler: false,
10
+ });
11
+ /**
12
+ * Generates a key that can be used to represent this config in a cache. This is
13
+ * used mainly in tests, where we want to avoid re-parsing a file if we have
14
+ * already processed it with the same configuration.
15
+ */
16
+ export function configToCacheKey(config) {
17
+ return JSON.stringify(config);
18
+ }