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,161 @@
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 i18n from '../../../core/i18n/i18n.js';
5
+ import * as Platform from '../../../core/platform/platform.js';
6
+ import * as Extras from '../extras/extras.js';
7
+ import * as Helpers from '../helpers/helpers.js';
8
+ import * as Types from '../types/types.js';
9
+ import { InsightCategory, } from './types.js';
10
+ export const UIStrings = {
11
+ /**
12
+ * @description Title of an insight that provides details about Forced reflow.
13
+ */
14
+ title: 'Forced reflow',
15
+ /**
16
+ * @description Text to describe the forced reflow.
17
+ */
18
+ description: 'A forced reflow occurs when JavaScript queries geometric properties (such as `offsetWidth`) after styles have been invalidated by a change to the DOM state. This can result in poor performance. Learn more about [forced reflows](https://developer.chrome.com/docs/performance/insights/forced-reflow) and possible mitigations.',
19
+ /**
20
+ * @description Title of a list to provide related stack trace data
21
+ */
22
+ reflowCallFrames: 'Call frames that trigger reflow',
23
+ /**
24
+ * @description Text to describe the top time-consuming function call
25
+ */
26
+ topTimeConsumingFunctionCall: 'Top function call',
27
+ /**
28
+ * @description Text to describe the total reflow time
29
+ */
30
+ totalReflowTime: 'Total reflow time',
31
+ /**
32
+ * @description Text to describe CPU processor tasks that could not be attributed to any specific source code.
33
+ */
34
+ unattributed: '[unattributed]',
35
+ /**
36
+ * @description Text for the name of anonymous functions
37
+ */
38
+ anonymous: '(anonymous)',
39
+ };
40
+ const str_ = i18n.i18n.registerUIStrings('models/trace/insights/ForcedReflow.ts', UIStrings);
41
+ export const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
42
+ function getCallFrameId(callFrame) {
43
+ return callFrame.scriptId + ':' + callFrame.lineNumber + ':' + callFrame.columnNumber;
44
+ }
45
+ function getLargestTopLevelFunctionData(forcedReflowEvents, traceParsedData) {
46
+ const entryToNodeMap = traceParsedData.Renderer.entryToNode;
47
+ const dataByTopLevelFunction = new Map();
48
+ if (forcedReflowEvents.length === 0) {
49
+ return;
50
+ }
51
+ for (const event of forcedReflowEvents) {
52
+ // Gather the stack traces by searching in the tree
53
+ const traceNode = entryToNodeMap.get(event);
54
+ if (!traceNode) {
55
+ continue;
56
+ }
57
+ let node = traceNode.parent;
58
+ let topLevelFunctionCall;
59
+ let topLevelFunctionCallEvent;
60
+ while (node) {
61
+ const eventData = node.entry;
62
+ if (Types.Events.isProfileCall(eventData)) {
63
+ topLevelFunctionCall = eventData.callFrame;
64
+ topLevelFunctionCallEvent = eventData;
65
+ }
66
+ else {
67
+ // We have finished searching bottom up data
68
+ if (Types.Events.isFunctionCall(eventData) && eventData.args.data &&
69
+ Types.Events.objectIsCallFrame(eventData.args.data)) {
70
+ topLevelFunctionCall = eventData.args.data;
71
+ topLevelFunctionCallEvent = eventData;
72
+ }
73
+ break;
74
+ }
75
+ node = node.parent;
76
+ }
77
+ if (!topLevelFunctionCall || !topLevelFunctionCallEvent) {
78
+ continue;
79
+ }
80
+ const aggregatedDataId = getCallFrameId(topLevelFunctionCall);
81
+ const aggregatedData = Platform.MapUtilities.getWithDefault(dataByTopLevelFunction, aggregatedDataId, () => ({
82
+ topLevelFunctionCall,
83
+ totalReflowTime: 0,
84
+ topLevelFunctionCallEvents: [],
85
+ }));
86
+ aggregatedData.totalReflowTime += (event.dur ?? 0);
87
+ aggregatedData.topLevelFunctionCallEvents.push(topLevelFunctionCallEvent);
88
+ }
89
+ let topTimeConsumingData = undefined;
90
+ dataByTopLevelFunction.forEach(data => {
91
+ if (!topTimeConsumingData || data.totalReflowTime > topTimeConsumingData.totalReflowTime) {
92
+ topTimeConsumingData = data;
93
+ }
94
+ });
95
+ return topTimeConsumingData;
96
+ }
97
+ function finalize(partialModel) {
98
+ return {
99
+ insightKey: "ForcedReflow" /* InsightKeys.FORCED_REFLOW */,
100
+ strings: UIStrings,
101
+ title: i18nString(UIStrings.title),
102
+ description: i18nString(UIStrings.description),
103
+ docs: 'https://developer.chrome.com/docs/performance/insights/forced-reflow',
104
+ category: InsightCategory.ALL,
105
+ state: partialModel.aggregatedBottomUpData.length !== 0 ? 'fail' : 'pass',
106
+ ...partialModel,
107
+ };
108
+ }
109
+ function getBottomCallFrameForEvent(event, traceParsedData) {
110
+ const profileStackTrace = Extras.StackTraceForEvent.get(event, traceParsedData);
111
+ const eventTopCallFrame = Helpers.Trace.getStackTraceTopCallFrameInEventPayload(event);
112
+ return profileStackTrace?.callFrames[0] ?? eventTopCallFrame ?? null;
113
+ }
114
+ export function isForcedReflowInsight(model) {
115
+ return model.insightKey === "ForcedReflow" /* InsightKeys.FORCED_REFLOW */;
116
+ }
117
+ export function generateInsight(traceParsedData, context) {
118
+ const isWithinContext = (event) => {
119
+ const frameId = Helpers.Trace.frameIDForEvent(event);
120
+ if (frameId !== context.frameId) {
121
+ return false;
122
+ }
123
+ return Helpers.Timing.eventIsInBounds(event, context.bounds);
124
+ };
125
+ const bottomUpDataMap = new Map();
126
+ const events = traceParsedData.Warnings.perWarning.get('FORCED_REFLOW')?.filter(isWithinContext) ?? [];
127
+ for (const event of events) {
128
+ const bottomCallFrame = getBottomCallFrameForEvent(event, traceParsedData);
129
+ const bottomCallId = bottomCallFrame ? getCallFrameId(bottomCallFrame) : 'UNATTRIBUTED';
130
+ const bottomUpData = Platform.MapUtilities.getWithDefault(bottomUpDataMap, bottomCallId, () => ({
131
+ bottomUpData: bottomCallFrame,
132
+ totalTime: 0,
133
+ relatedEvents: [],
134
+ }));
135
+ bottomUpData.totalTime += event.dur ?? 0;
136
+ bottomUpData.relatedEvents.push(event);
137
+ }
138
+ const topLevelFunctionCallData = getLargestTopLevelFunctionData(events, traceParsedData);
139
+ return finalize({
140
+ relatedEvents: events,
141
+ topLevelFunctionCallData,
142
+ aggregatedBottomUpData: [...bottomUpDataMap.values()],
143
+ });
144
+ }
145
+ export function createOverlays(model) {
146
+ if (!model.topLevelFunctionCallData) {
147
+ return [];
148
+ }
149
+ const allBottomUpEvents = [...model.aggregatedBottomUpData.values().flatMap(data => data.relatedEvents)];
150
+ return [
151
+ ...createOverlayForEvents(model.topLevelFunctionCallData.topLevelFunctionCallEvents, 'INFO'),
152
+ ...createOverlayForEvents(allBottomUpEvents),
153
+ ];
154
+ }
155
+ export function createOverlayForEvents(events, outlineReason = 'ERROR') {
156
+ return events.map(e => ({
157
+ type: 'ENTRY_OUTLINE',
158
+ entry: e,
159
+ outlineReason,
160
+ }));
161
+ }
@@ -0,0 +1,129 @@
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 i18n from '../../../core/i18n/i18n.js';
5
+ import * as Handlers from '../handlers/handlers.js';
6
+ import * as Helpers from '../helpers/helpers.js';
7
+ import { InsightCategory, } from './types.js';
8
+ export const UIStrings = {
9
+ /**
10
+ * @description Text to tell the user about the longest user interaction.
11
+ */
12
+ description: 'Start investigating [how to improve INP](https://developer.chrome.com/docs/performance/insights/inp-breakdown) by looking at the longest subpart.',
13
+ /**
14
+ * @description Title for the performance insight "INP breakdown", which shows a breakdown of INP by subparts / sections.
15
+ */
16
+ title: 'INP breakdown',
17
+ /**
18
+ * @description Label used for the subpart/component/stage/section of a larger duration.
19
+ */
20
+ subpart: 'Subpart',
21
+ /**
22
+ * @description Label used for a time duration.
23
+ */
24
+ duration: 'Duration',
25
+ // TODO: these are repeated in InteractionBreakdown. Add a place for common strings?
26
+ /**
27
+ * @description Text shown next to the interaction event's input delay time in the detail view.
28
+ */
29
+ inputDelay: 'Input delay',
30
+ /**
31
+ * @description Text shown next to the interaction event's thread processing duration in the detail view.
32
+ */
33
+ processingDuration: 'Processing duration',
34
+ /**
35
+ * @description Text shown next to the interaction event's presentation delay time in the detail view.
36
+ */
37
+ presentationDelay: 'Presentation delay',
38
+ /**
39
+ * @description Text status indicating that no user interactions were detected.
40
+ */
41
+ noInteractions: 'No interactions detected',
42
+ };
43
+ const str_ = i18n.i18n.registerUIStrings('models/trace/insights/INPBreakdown.ts', UIStrings);
44
+ export const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
45
+ export function isINPBreakdownInsight(insight) {
46
+ return insight.insightKey === "INPBreakdown" /* InsightKeys.INP_BREAKDOWN */;
47
+ }
48
+ function finalize(partialModel) {
49
+ let state = 'pass';
50
+ if (partialModel.longestInteractionEvent) {
51
+ const classification = Handlers.ModelHandlers.UserInteractions.scoreClassificationForInteractionToNextPaint(partialModel.longestInteractionEvent.dur);
52
+ if (classification === "good" /* Handlers.ModelHandlers.PageLoadMetrics.ScoreClassification.GOOD */) {
53
+ state = 'informative';
54
+ }
55
+ else {
56
+ state = 'fail';
57
+ }
58
+ }
59
+ return {
60
+ insightKey: "INPBreakdown" /* InsightKeys.INP_BREAKDOWN */,
61
+ strings: UIStrings,
62
+ title: i18nString(UIStrings.title),
63
+ description: i18nString(UIStrings.description),
64
+ docs: 'https://developer.chrome.com/docs/performance/insights/inp-breakdown',
65
+ category: InsightCategory.INP,
66
+ state,
67
+ ...partialModel,
68
+ };
69
+ }
70
+ export function generateInsight(data, context) {
71
+ const interactionEvents = data.UserInteractions.interactionEventsWithNoNesting.filter(event => {
72
+ return Helpers.Timing.eventIsInBounds(event, context.bounds);
73
+ });
74
+ if (!interactionEvents.length) {
75
+ // A valid result, when there is no user interaction.
76
+ return finalize({});
77
+ }
78
+ const longestByInteractionId = new Map();
79
+ for (const event of interactionEvents) {
80
+ const key = event.interactionId;
81
+ const longest = longestByInteractionId.get(key);
82
+ if (!longest || event.dur > longest.dur) {
83
+ longestByInteractionId.set(key, event);
84
+ }
85
+ }
86
+ const normalizedInteractionEvents = [...longestByInteractionId.values()];
87
+ normalizedInteractionEvents.sort((a, b) => b.dur - a.dur);
88
+ // INP is the "nearest-rank"/inverted_cdf 98th percentile, except Chrome only
89
+ // keeps the 10 worst events around, so it can never be more than the 10th from
90
+ // last array element. To keep things simpler, sort desc and pick from front.
91
+ // See https://source.chromium.org/chromium/chromium/src/+/main:components/page_load_metrics/browser/responsiveness_metrics_normalization.cc;l=45-59;drc=cb0f9c8b559d9c7c3cb4ca94fc1118cc015d38ad
92
+ const highPercentileIndex = Math.min(9, Math.floor(normalizedInteractionEvents.length / 50));
93
+ return finalize({
94
+ relatedEvents: [normalizedInteractionEvents[0]],
95
+ longestInteractionEvent: normalizedInteractionEvents[0],
96
+ highPercentileInteractionEvent: normalizedInteractionEvents[highPercentileIndex],
97
+ });
98
+ }
99
+ /**
100
+ * If `subpart` is -1, then all subparts are included. Otherwise it's just that index.
101
+ **/
102
+ export function createOverlaysForSubpart(event, subpartIndex = -1) {
103
+ const p1 = Helpers.Timing.traceWindowFromMicroSeconds(event.ts, (event.ts + event.inputDelay));
104
+ const p2 = Helpers.Timing.traceWindowFromMicroSeconds(p1.max, (p1.max + event.mainThreadHandling));
105
+ const p3 = Helpers.Timing.traceWindowFromMicroSeconds(p2.max, (p2.max + event.presentationDelay));
106
+ let sections = [
107
+ { bounds: p1, label: i18nString(UIStrings.inputDelay), showDuration: true },
108
+ { bounds: p2, label: i18nString(UIStrings.processingDuration), showDuration: true },
109
+ { bounds: p3, label: i18nString(UIStrings.presentationDelay), showDuration: true },
110
+ ];
111
+ if (subpartIndex !== -1) {
112
+ sections = [sections[subpartIndex]];
113
+ }
114
+ return [
115
+ {
116
+ type: 'TIMESPAN_BREAKDOWN',
117
+ sections,
118
+ renderLocation: 'BELOW_EVENT',
119
+ entry: event,
120
+ },
121
+ ];
122
+ }
123
+ export function createOverlays(model) {
124
+ const event = model.longestInteractionEvent;
125
+ if (!event) {
126
+ return [];
127
+ }
128
+ return createOverlaysForSubpart(event);
129
+ }
@@ -0,0 +1,263 @@
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 i18n from '../../../core/i18n/i18n.js';
5
+ import * as Helpers from '../helpers/helpers.js';
6
+ import { metricSavingsForWastedBytes } from './Common.js';
7
+ import { InsightCategory, } from './types.js';
8
+ export const UIStrings = {
9
+ /**
10
+ * @description Title of an insight that recommends ways to reduce the size of images downloaded and used on the page.
11
+ */
12
+ title: 'Improve image delivery',
13
+ /**
14
+ * @description Description of an insight that recommends ways to reduce the size of images downloaded and used on the page.
15
+ */
16
+ description: 'Reducing the download time of images can improve the perceived load time of the page and LCP. [Learn more about optimizing image size](https://developer.chrome.com/docs/performance/insights/image-delivery)',
17
+ /**
18
+ * @description Message displayed in a chip explaining that an image file size is large for the # of pixels it has and recommends possible adjustments to improve the image size.
19
+ */
20
+ useCompression: 'Increasing the image compression factor could improve this image\'s download size.',
21
+ /**
22
+ * @description Message displayed in a chip explaining that an image file size is large for the # of pixels it has and recommends possible adjustments to improve the image size.
23
+ */
24
+ useModernFormat: 'Using a modern image format (WebP, AVIF) or increasing the image compression could improve this image\'s download size.',
25
+ /**
26
+ * @description Message displayed in a chip advising the user to use video formats instead of GIFs because videos generally have smaller file sizes.
27
+ */
28
+ useVideoFormat: 'Using video formats instead of GIFs can improve the download size of animated content.',
29
+ /**
30
+ * @description Message displayed in a chip explaining that an image was displayed on the page with dimensions much smaller than the image file dimensions.
31
+ * @example {1000x500} PH1
32
+ * @example {100x50} PH2
33
+ */
34
+ useResponsiveSize: 'This image file is larger than it needs to be ({PH1}) for its displayed dimensions ({PH2}). Use responsive images to reduce the image download size.',
35
+ /**
36
+ * @description Column header for a table column containing network requests for images which can improve their file size (e.g. use a different format, increase compression, etc).
37
+ */
38
+ optimizeFile: 'Optimize file size',
39
+ /**
40
+ * @description Table row value representing the remaining items not shown in the table due to size constraints. This row will always represent at least 2 items.
41
+ * @example {5} PH1
42
+ */
43
+ others: '{PH1} others',
44
+ /**
45
+ * @description Text status indicating that no potential optimizations were found for any image file
46
+ */
47
+ noOptimizableImages: 'No optimizable images',
48
+ /**
49
+ * @description Text describing the estimated number of bytes that an image file optimization can save. This text is appended to another block of text describing the image optimization in more detail. "Est" means "Estimated".
50
+ * @example {Use the correct image dimensions to reduce the image file size.} PH1
51
+ * @example {50 MB} PH2
52
+ */
53
+ estimatedSavings: '{PH1} (Est {PH2})',
54
+ };
55
+ const str_ = i18n.i18n.registerUIStrings('models/trace/insights/ImageDelivery.ts', UIStrings);
56
+ export const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
57
+ /**
58
+ * Even JPEGs with lots of detail can usually be compressed down to <1 byte per pixel
59
+ * Using 4:2:2 subsampling already gets an uncompressed bitmap to 2 bytes per pixel.
60
+ * The compression ratio for JPEG is usually somewhere around 10:1 depending on content, so
61
+ * 8:1 is a reasonable expectation for web content which is 1.5MB for a 6MP image.
62
+ *
63
+ * WebP usually gives ~20% additional savings on top of that, so we will assume 10:1 for WebP.
64
+ * This is quite pessimistic as their study shows a photographic compression ratio of ~29:1.
65
+ * https://developers.google.com/speed/webp/docs/webp_lossless_alpha_study#results
66
+ *
67
+ * AVIF usually gives ~20% additional savings on top of WebP, so we will use 12:1 for AVIF.
68
+ * This is quite pessimistic as Netflix study shows a photographic compression ratio of ~40:1
69
+ * (0.4 *bits* per pixel at SSIM 0.97).
70
+ * https://netflixtechblog.com/avif-for-next-generation-image-coding-b1d75675fe4
71
+ */
72
+ const TARGET_BYTES_PER_PIXEL_AVIF = 2 * 1 / 12;
73
+ /**
74
+ * If GIFs are above this size, we'll flag them
75
+ * See https://github.com/GoogleChrome/lighthouse/pull/4885#discussion_r178406623 and https://github.com/GoogleChrome/lighthouse/issues/4696#issuecomment-370979920
76
+ */
77
+ const GIF_SIZE_THRESHOLD = 100 * 1024;
78
+ const BYTE_SAVINGS_THRESHOLD = 4096;
79
+ // Ignore up to 12KB of waste for responsive images if an effort was made with breakpoints.
80
+ const BYTE_SAVINGS_THRESHOLD_RESPONSIVE_BREAKPOINTS = 12288;
81
+ export var ImageOptimizationType;
82
+ (function (ImageOptimizationType) {
83
+ ImageOptimizationType["ADJUST_COMPRESSION"] = "ADJUST_COMPRESSION";
84
+ ImageOptimizationType["MODERN_FORMAT_OR_COMPRESSION"] = "MODERN_FORMAT_OR_COMPRESSION";
85
+ ImageOptimizationType["VIDEO_FORMAT"] = "VIDEO_FORMAT";
86
+ ImageOptimizationType["RESPONSIVE_SIZE"] = "RESPONSIVE_SIZE";
87
+ })(ImageOptimizationType || (ImageOptimizationType = {}));
88
+ export function isImageDeliveryInsight(model) {
89
+ return model.insightKey === 'ImageDelivery';
90
+ }
91
+ export function getOptimizationMessage(optimization) {
92
+ switch (optimization.type) {
93
+ case ImageOptimizationType.ADJUST_COMPRESSION:
94
+ return i18nString(UIStrings.useCompression);
95
+ case ImageOptimizationType.MODERN_FORMAT_OR_COMPRESSION:
96
+ return i18nString(UIStrings.useModernFormat);
97
+ case ImageOptimizationType.VIDEO_FORMAT:
98
+ return i18nString(UIStrings.useVideoFormat);
99
+ case ImageOptimizationType.RESPONSIVE_SIZE:
100
+ return i18nString(UIStrings.useResponsiveSize, {
101
+ PH1: `${optimization.fileDimensions.width}x${optimization.fileDimensions.height}`,
102
+ PH2: `${optimization.displayDimensions.width}x${optimization.displayDimensions.height}`,
103
+ });
104
+ }
105
+ }
106
+ export function getOptimizationMessageWithBytes(optimization) {
107
+ const byteSavingsText = i18n.ByteUtilities.bytesToString(optimization.byteSavings);
108
+ const optimizationMessage = getOptimizationMessage(optimization);
109
+ return i18nString(UIStrings.estimatedSavings, { PH1: optimizationMessage, PH2: byteSavingsText });
110
+ }
111
+ function finalize(partialModel) {
112
+ return {
113
+ insightKey: "ImageDelivery" /* InsightKeys.IMAGE_DELIVERY */,
114
+ strings: UIStrings,
115
+ title: i18nString(UIStrings.title),
116
+ description: i18nString(UIStrings.description),
117
+ docs: 'https://developer.chrome.com/docs/performance/insights/image-delivery',
118
+ category: InsightCategory.LCP,
119
+ state: partialModel.optimizableImages.length > 0 ? 'fail' : 'pass',
120
+ ...partialModel,
121
+ relatedEvents: new Map(partialModel.optimizableImages.map(image => [image.request, image.optimizations.map(getOptimizationMessageWithBytes)])),
122
+ };
123
+ }
124
+ /**
125
+ * Calculate rough savings percentage based on 1000 real gifs transcoded to video
126
+ * https://github.com/GoogleChrome/lighthouse/issues/4696#issuecomment-380296510
127
+ */
128
+ function estimateGIFPercentSavings(request) {
129
+ return Math.round((29.1 * Math.log10(request.args.data.decodedBodyLength) - 100.7)) / 100;
130
+ }
131
+ function getDisplayedSize(data, paintImage) {
132
+ // Note: for traces made prior to metadata.hostDPR (which means no data in
133
+ // paintEventToCorrectedDisplaySize), the displayed size unexpectedly ignores any
134
+ // emulated DPR and so the results may be very misleading.
135
+ return data.ImagePainting.paintEventToCorrectedDisplaySize.get(paintImage) ?? {
136
+ width: paintImage.args.data.width,
137
+ height: paintImage.args.data.height,
138
+ };
139
+ }
140
+ function getPixelCounts(data, paintImage) {
141
+ const { width, height } = getDisplayedSize(data, paintImage);
142
+ return {
143
+ filePixels: paintImage.args.data.srcWidth * paintImage.args.data.srcHeight,
144
+ displayedPixels: width * height,
145
+ };
146
+ }
147
+ export function generateInsight(data, context) {
148
+ const isWithinContext = (event) => Helpers.Timing.eventIsInBounds(event, context.bounds);
149
+ const contextRequests = data.NetworkRequests.byTime.filter(isWithinContext);
150
+ const optimizableImages = [];
151
+ for (const request of contextRequests) {
152
+ if (request.args.data.resourceType !== 'Image') {
153
+ continue;
154
+ }
155
+ if (request.args.data.mimeType === 'image/svg+xml') {
156
+ continue;
157
+ }
158
+ // If the request was redirected, the image paints will have the pre-redirect URL.
159
+ const url = request.args.data.redirects[0]?.url ?? request.args.data.url;
160
+ const imagePaints = data.ImagePainting.paintImageEventForUrl.get(url)?.filter(isWithinContext);
161
+ // This will filter out things like preloaded image requests where an image file is downloaded
162
+ // but never rendered on the page.
163
+ if (!imagePaints?.length) {
164
+ continue;
165
+ }
166
+ const largestImagePaint = imagePaints.reduce((prev, curr) => {
167
+ const prevPixels = getPixelCounts(data, prev).displayedPixels;
168
+ const currPixels = getPixelCounts(data, curr).displayedPixels;
169
+ return prevPixels > currPixels ? prev : curr;
170
+ });
171
+ const { filePixels: imageFilePixels, displayedPixels: largestImageDisplayPixels, } = getPixelCounts(data, largestImagePaint);
172
+ // Decoded body length is almost always the right one to be using because of the below:
173
+ // `encodedDataLength = decodedBodyLength + headers`.
174
+ // HOWEVER, there are some cases where an image is compressed again over the network and transfer size
175
+ // is smaller (see https://github.com/GoogleChrome/lighthouse/pull/4968).
176
+ // Use the min of the two numbers to be safe.
177
+ const imageBytes = Math.min(request.args.data.decodedBodyLength, request.args.data.encodedDataLength);
178
+ const bytesPerPixel = imageBytes / imageFilePixels;
179
+ let optimizations = [];
180
+ if (request.args.data.mimeType === 'image/gif') {
181
+ if (imageBytes > GIF_SIZE_THRESHOLD) {
182
+ const percentSavings = estimateGIFPercentSavings(request);
183
+ const byteSavings = Math.round(imageBytes * percentSavings);
184
+ optimizations.push({ type: ImageOptimizationType.VIDEO_FORMAT, byteSavings });
185
+ }
186
+ }
187
+ else if (bytesPerPixel > TARGET_BYTES_PER_PIXEL_AVIF) {
188
+ const idealAvifImageSize = Math.round(TARGET_BYTES_PER_PIXEL_AVIF * imageFilePixels);
189
+ const byteSavings = imageBytes - idealAvifImageSize;
190
+ if (request.args.data.mimeType !== 'image/webp' && request.args.data.mimeType !== 'image/avif') {
191
+ optimizations.push({ type: ImageOptimizationType.MODERN_FORMAT_OR_COMPRESSION, byteSavings });
192
+ }
193
+ else {
194
+ optimizations.push({ type: ImageOptimizationType.ADJUST_COMPRESSION, byteSavings });
195
+ }
196
+ }
197
+ // At this point (before looking at image size), the # of optimizations should only ever be 1 or 0
198
+ // Math.max handles both cases correctly, and is defensive against future patches that would add
199
+ // more than 1 format-specific optimization by this point.
200
+ const imageByteSavingsFromFormat = Math.max(0, ...optimizations.map(o => o.byteSavings));
201
+ let imageByteSavings = imageByteSavingsFromFormat;
202
+ const wastedPixelRatio = 1 - (largestImageDisplayPixels / imageFilePixels);
203
+ // Ignore CSS images because it's difficult to determine what is a spritesheet,
204
+ // and the reward-to-effort ratio for responsive CSS images is quite low https://css-tricks.com/responsive-images-css/.
205
+ if (wastedPixelRatio > 0 && !largestImagePaint.args.data.isCSS) {
206
+ const byteSavings = Math.round(wastedPixelRatio * imageBytes);
207
+ const hadBreakpoints = largestImagePaint.args.data.isPicture || largestImagePaint.args.data.srcsetAttribute;
208
+ if (!hadBreakpoints || byteSavings > BYTE_SAVINGS_THRESHOLD_RESPONSIVE_BREAKPOINTS) {
209
+ // This will compound the byte savings from any potential format changes with the image size
210
+ // optimization added here.
211
+ imageByteSavings += Math.round(wastedPixelRatio * (imageBytes - imageByteSavingsFromFormat));
212
+ const { width, height } = getDisplayedSize(data, largestImagePaint);
213
+ optimizations.push({
214
+ type: ImageOptimizationType.RESPONSIVE_SIZE,
215
+ byteSavings,
216
+ fileDimensions: {
217
+ width: Math.round(largestImagePaint.args.data.srcWidth),
218
+ height: Math.round(largestImagePaint.args.data.srcHeight),
219
+ },
220
+ displayDimensions: {
221
+ width: Math.round(width),
222
+ height: Math.round(height),
223
+ },
224
+ });
225
+ }
226
+ }
227
+ optimizations = optimizations.filter(optimization => optimization.byteSavings > BYTE_SAVINGS_THRESHOLD);
228
+ if (optimizations.length > 0) {
229
+ optimizableImages.push({
230
+ request,
231
+ largestImagePaint,
232
+ optimizations,
233
+ byteSavings: imageByteSavings,
234
+ });
235
+ }
236
+ }
237
+ const wastedBytesByRequestId = new Map();
238
+ for (const image of optimizableImages) {
239
+ wastedBytesByRequestId.set(image.request.args.data.requestId, image.byteSavings);
240
+ }
241
+ // Sort by savings, then by size of image.
242
+ optimizableImages.sort((a, b) => {
243
+ if (b.byteSavings !== a.byteSavings) {
244
+ return b.byteSavings - a.byteSavings;
245
+ }
246
+ return b.request.args.data.decodedBodyLength - a.request.args.data.decodedBodyLength;
247
+ });
248
+ return finalize({
249
+ optimizableImages,
250
+ metricSavings: metricSavingsForWastedBytes(wastedBytesByRequestId, context),
251
+ wastedBytes: optimizableImages.reduce((total, img) => total + img.byteSavings, 0),
252
+ });
253
+ }
254
+ export function createOverlayForRequest(request) {
255
+ return {
256
+ type: 'ENTRY_OUTLINE',
257
+ entry: request,
258
+ outlineReason: 'ERROR',
259
+ };
260
+ }
261
+ export function createOverlays(model) {
262
+ return model.optimizableImages.map(image => createOverlayForRequest(image.request));
263
+ }