chrome-devtools-mcp 0.0.1 → 0.0.2

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 (354) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +196 -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 +2029 -0
  9. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorConverter.js +330 -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 +86 -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 +64 -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/Linkifier.js +34 -0
  18. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/MapWithDefault.js +20 -0
  19. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Mutex.js +49 -0
  20. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Object.js +86 -0
  21. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +459 -0
  22. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Progress.js +137 -0
  23. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/QueryParamHandler.js +4 -0
  24. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResolverBase.js +69 -0
  25. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResourceType.js +506 -0
  26. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ReturnToPanel.js +13 -0
  27. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Revealer.js +159 -0
  28. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Runnable.js +24 -0
  29. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SegmentedRange.js +79 -0
  30. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SettingRegistration.js +164 -0
  31. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Settings.js +1281 -0
  32. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SimpleHistoryManager.js +97 -0
  33. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/StringOutputStream.js +17 -0
  34. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/TextDictionary.js +40 -0
  35. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Throttler.js +71 -0
  36. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Trie.js +127 -0
  37. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Worker.js +44 -0
  38. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/common.js +44 -0
  39. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/AidaClient.js +415 -0
  40. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/GdpClient.js +161 -0
  41. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHost.js +510 -0
  42. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostAPI.js +66 -0
  43. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/Platform.js +59 -0
  44. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +232 -0
  45. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +953 -0
  46. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/host.js +12 -0
  47. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/i18n.js +9 -0
  48. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +199 -0
  49. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Brand.js +4 -0
  50. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Constructor.js +4 -0
  51. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DOMUtilities.js +122 -0
  52. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DateUtilities.js +13 -0
  53. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DevToolsPath.js +27 -0
  54. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/KeyboardUtilities.js +21 -0
  55. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MapUtilities.js +79 -0
  56. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MimeType.js +143 -0
  57. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/NumberUtilities.js +72 -0
  58. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +536 -0
  59. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Timing.js +9 -0
  60. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypedArrayUtilities.js +157 -0
  61. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypescriptUtilities.js +24 -0
  62. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UIString.js +4 -0
  63. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UserVisibleError.js +22 -0
  64. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/platform.js +26 -0
  65. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +800 -0
  66. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/NodeURL.js +31 -0
  67. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/protocol_client.js +13 -0
  68. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/Runtime.js +1 -0
  69. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/root.js +5 -0
  70. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AccessibilityModel.js +281 -0
  71. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +846 -0
  72. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AutofillModel.js +155 -0
  73. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUProfilerModel.js +99 -0
  74. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUThrottlingManager.js +220 -0
  75. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSContainerQuery.js +98 -0
  76. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSFontFace.js +31 -0
  77. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSLayer.js +22 -0
  78. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +1279 -0
  79. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMedia.js +100 -0
  80. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +1518 -0
  81. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +902 -0
  82. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +315 -0
  83. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParser.js +572 -0
  84. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +1316 -0
  85. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSQuery.js +53 -0
  86. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSRule.js +361 -0
  87. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSScope.js +22 -0
  88. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleDeclaration.js +275 -0
  89. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleSheetHeader.js +166 -0
  90. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSSupports.js +24 -0
  91. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CategorizedBreakpoint.js +29 -0
  92. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ChildTargetManager.js +232 -0
  93. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CompilerSourceMappingContentProvider.js +47 -0
  94. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Connections.js +242 -0
  95. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +629 -0
  96. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModelTypes.js +14 -0
  97. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Cookie.js +241 -0
  98. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieModel.js +198 -0
  99. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieParser.js +163 -0
  100. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMDebuggerModel.js +597 -0
  101. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +1610 -0
  102. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +1231 -0
  103. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EmulationModel.js +527 -0
  104. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EnhancedTracesParser.js +346 -0
  105. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EventBreakpointsModel.js +125 -0
  106. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameAssociated.js +4 -0
  107. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameManager.js +199 -0
  108. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HeapProfilerModel.js +130 -0
  109. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HttpReasonPhraseStrings.js +73 -0
  110. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IOModel.js +83 -0
  111. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IsolateManager.js +208 -0
  112. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IssuesModel.js +41 -0
  113. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LayerTreeBase.js +95 -0
  114. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LogModel.js +34 -0
  115. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +1915 -0
  116. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +1660 -0
  117. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayColorGenerator.js +48 -0
  118. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +765 -0
  119. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayPersistentHighlighter.js +384 -0
  120. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageLoad.js +25 -0
  121. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageResourceLoader.js +300 -0
  122. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PaintProfiler.js +67 -0
  123. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PerformanceMetricsModel.js +62 -0
  124. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PreloadingModel.js +563 -0
  125. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +292 -0
  126. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingObject.js +4 -0
  127. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RemoteObject.js +905 -0
  128. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Resource.js +163 -0
  129. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +922 -0
  130. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RuntimeModel.js +535 -0
  131. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SDKModel.js +45 -0
  132. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScreenCaptureModel.js +174 -0
  133. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Script.js +395 -0
  134. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SecurityOriginManager.js +54 -0
  135. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEvents.js +67 -0
  136. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEventsProtocol.js +110 -0
  137. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerTiming.js +216 -0
  138. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerCacheModel.js +271 -0
  139. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerManager.js +511 -0
  140. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +678 -0
  141. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapCache.js +41 -0
  142. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapFunctionRanges.js +132 -0
  143. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +189 -0
  144. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopeChainEntry.js +156 -0
  145. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +276 -0
  146. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageBucketsModel.js +143 -0
  147. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageKeyManager.js +53 -0
  148. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Target.js +262 -0
  149. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TargetManager.js +382 -0
  150. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +49 -0
  151. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/WebAuthnModel.js +66 -0
  152. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk-meta.js +1117 -0
  153. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk.js +89 -0
  154. package/build/node_modules/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +1513 -0
  155. package/build/node_modules/chrome-devtools-frontend/front_end/generated/Deprecation.js +339 -0
  156. package/build/node_modules/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +1558 -0
  157. package/build/node_modules/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +7473 -0
  158. package/build/node_modules/chrome-devtools-frontend/front_end/generated/protocol.js +4 -0
  159. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +260 -0
  160. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +1096 -0
  161. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/UnitFormatters.js +130 -0
  162. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/CPUProfileDataModel.js +514 -0
  163. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/ProfileTreeModel.js +90 -0
  164. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/cpu_profile.js +6 -0
  165. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/LogManager.js +67 -0
  166. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +494 -0
  167. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/RequestResolver.js +49 -0
  168. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs-meta.js +73 -0
  169. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs.js +7 -0
  170. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/Calculator.js +4 -0
  171. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/NetworkTimeCalculator.js +256 -0
  172. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/RequestTimeRanges.js +120 -0
  173. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/network_time_calculator.js +6 -0
  174. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/CodeMirrorUtils.js +32 -0
  175. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentData.js +173 -0
  176. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentProvider.js +30 -0
  177. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StaticContentProvider.js +32 -0
  178. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StreamingContentData.js +79 -0
  179. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/Text.js +69 -0
  180. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextCursor.js +35 -0
  181. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextRange.js +231 -0
  182. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextUtils.js +332 -0
  183. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/WasmDisassembly.js +68 -0
  184. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/text_utils.js +14 -0
  185. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EntityMapper.js +122 -0
  186. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +81 -0
  187. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +370 -0
  188. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +171 -0
  189. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Name.js +114 -0
  190. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Processor.js +547 -0
  191. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Styles.js +815 -0
  192. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/FilmStrip.js +44 -0
  193. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/MainThreadActivity.js +76 -0
  194. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ScriptDuplication.js +162 -0
  195. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/StackTraceForEvent.js +191 -0
  196. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ThirdParties.js +118 -0
  197. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceFilter.js +50 -0
  198. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +592 -0
  199. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +10 -0
  200. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationFramesHandler.js +109 -0
  201. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationHandler.js +26 -0
  202. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AsyncJSCallsHandler.js +187 -0
  203. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AuctionWorkletsHandler.js +162 -0
  204. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/DOMStatsHandler.js +21 -0
  205. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ExtensionTraceDataHandler.js +263 -0
  206. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FlowsHandler.js +148 -0
  207. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +483 -0
  208. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/GPUHandler.js +35 -0
  209. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ImagePaintingHandler.js +147 -0
  210. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InitiatorsHandler.js +180 -0
  211. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InvalidationsHandler.js +126 -0
  212. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +85 -0
  213. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestTextPaintHandler.js +27 -0
  214. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayerTreeHandler.js +103 -0
  215. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +446 -0
  216. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MemoryHandler.js +21 -0
  217. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +400 -0
  218. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ModelHandlers.js +33 -0
  219. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +540 -0
  220. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageFramesHandler.js +42 -0
  221. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +349 -0
  222. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/RendererHandler.js +346 -0
  223. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SamplesHandler.js +207 -0
  224. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScreenshotsHandler.js +98 -0
  225. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +251 -0
  226. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SelectorStatsHandler.js +71 -0
  227. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/Threads.js +101 -0
  228. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserInteractionsHandler.js +297 -0
  229. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +184 -0
  230. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WarningsHandler.js +134 -0
  231. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WorkersHandler.js +33 -0
  232. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/handlers.js +7 -0
  233. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/helpers.js +163 -0
  234. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/types.js +1 -0
  235. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Extensions.js +41 -0
  236. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Network.js +102 -0
  237. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SamplesIntegrator.js +493 -0
  238. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SyntheticEvents.js +74 -0
  239. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +184 -0
  240. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Trace.js +744 -0
  241. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/TreeHelpers.js +254 -0
  242. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/helpers.js +10 -0
  243. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +488 -0
  244. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Cache.js +208 -0
  245. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +340 -0
  246. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DOMSize.js +180 -0
  247. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +256 -0
  248. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +89 -0
  249. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/FontDisplay.js +81 -0
  250. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ForcedReflow.js +160 -0
  251. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +117 -0
  252. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +262 -0
  253. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +188 -0
  254. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +182 -0
  255. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LegacyJavaScript.js +88 -0
  256. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Models.js +21 -0
  257. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +199 -0
  258. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +544 -0
  259. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +191 -0
  260. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/SlowCSSSelector.js +135 -0
  261. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Statistics.js +92 -0
  262. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ThirdParties.js +97 -0
  263. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Viewport.js +101 -0
  264. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/insights.js +9 -0
  265. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/types.js +18 -0
  266. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/LanternError.js +6 -0
  267. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/NetworkAnalyzer.js +488 -0
  268. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/core.js +5 -0
  269. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/BaseNode.js +276 -0
  270. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/CPUNode.js +63 -0
  271. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/NetworkNode.js +82 -0
  272. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/PageDependencyGraph.js +551 -0
  273. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/graph.js +7 -0
  274. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/lantern.js +9 -0
  275. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/FirstContentfulPaint.js +136 -0
  276. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Interactive.js +67 -0
  277. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/LargestContentfulPaint.js +68 -0
  278. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/MaxPotentialFID.js +48 -0
  279. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Metric.js +68 -0
  280. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/SpeedIndex.js +101 -0
  281. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TBTUtils.js +64 -0
  282. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TotalBlockingTime.js +78 -0
  283. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/metrics.js +11 -0
  284. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/ConnectionPool.js +115 -0
  285. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Constants.js +42 -0
  286. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/DNSCache.js +47 -0
  287. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/SimulationTimingMap.js +134 -0
  288. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Simulator.js +450 -0
  289. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/TCPConnection.js +154 -0
  290. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/simulation.js +9 -0
  291. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/Lantern.js +24 -0
  292. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/types.js +4 -0
  293. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/trace.js +17 -0
  294. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Configuration.js +18 -0
  295. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Extensions.js +37 -0
  296. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/File.js +57 -0
  297. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Overlays.js +4 -0
  298. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Timing.js +15 -0
  299. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +565 -0
  300. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/types.js +9 -0
  301. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/codemirror.next/codemirror.next.js +1 -0
  302. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/LICENSE +202 -0
  303. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/legacy-javascript.js +38 -0
  304. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +944 -0
  305. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/LICENSE +26 -0
  306. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js +196 -0
  307. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js +226 -0
  308. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/codec.js +4 -0
  309. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +394 -0
  310. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js +24 -0
  311. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +283 -0
  312. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/mod.js +7 -0
  313. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/util.js +9 -0
  314. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/vlq.js +84 -0
  315. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/source-map-scopes-codec.js +4 -0
  316. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/LICENSE +20 -0
  317. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/lib/nostats-subset.js +148 -0
  318. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +2 -0
  319. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-subset.js +2 -0
  320. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +118 -0
  321. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +40 -0
  322. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/entities.test.js +26 -0
  323. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.js +4 -0
  324. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.test.js +215 -0
  325. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +4 -0
  326. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +4 -0
  327. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +4 -0
  328. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/nostats-subset.js +2 -0
  329. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/third-party-web.js +8 -0
  330. package/build/src/McpContext.js +204 -0
  331. package/build/src/McpResponse.js +178 -0
  332. package/build/src/Mutex.js +40 -0
  333. package/build/src/PageCollector.js +68 -0
  334. package/build/src/browser.js +105 -0
  335. package/build/src/formatters/consoleFormatter.js +71 -0
  336. package/build/src/formatters/networkFormatter.js +34 -0
  337. package/build/src/formatters/snapshotFormatter.js +75 -0
  338. package/build/src/index.js +206 -0
  339. package/build/src/logger.js +26 -0
  340. package/build/src/tools/ToolDefinition.js +8 -0
  341. package/build/src/tools/categories.js +14 -0
  342. package/build/src/tools/console.js +19 -0
  343. package/build/src/tools/emulation.js +61 -0
  344. package/build/src/tools/input.js +202 -0
  345. package/build/src/tools/network.js +35 -0
  346. package/build/src/tools/pages.js +181 -0
  347. package/build/src/tools/performance.js +116 -0
  348. package/build/src/tools/screenshot.js +65 -0
  349. package/build/src/tools/script.js +35 -0
  350. package/build/src/tools/snapshot.js +42 -0
  351. package/build/src/trace-processing/parse.js +73 -0
  352. package/build/src/waitForHelpers.js +109 -0
  353. package/package.json +53 -6
  354. package/README +0 -1
@@ -0,0 +1,1231 @@
1
+ // Copyright 2021 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 Common from '../common/common.js';
5
+ import * as Host from '../host/host.js';
6
+ import * as i18n from '../i18n/i18n.js';
7
+ import * as Platform from '../platform/platform.js';
8
+ import * as Root from '../root/root.js';
9
+ import { RemoteObjectProperty, ScopeRef } from './RemoteObject.js';
10
+ import { Events as ResourceTreeModelEvents, ResourceTreeModel } from './ResourceTreeModel.js';
11
+ import { RuntimeModel } from './RuntimeModel.js';
12
+ import { Script } from './Script.js';
13
+ import { SDKModel } from './SDKModel.js';
14
+ import { SourceMapManager } from './SourceMapManager.js';
15
+ import { Type } from './Target.js';
16
+ const UIStrings = {
17
+ /**
18
+ * @description Title of a section in the debugger showing local JavaScript variables.
19
+ */
20
+ local: 'Local',
21
+ /**
22
+ * @description Text that refers to closure as a programming term
23
+ */
24
+ closure: 'Closure',
25
+ /**
26
+ * @description Noun that represents a section or block of code in the Debugger Model. Shown in the Sources tab, while paused on a breakpoint.
27
+ */
28
+ block: 'Block',
29
+ /**
30
+ * @description Label for a group of JavaScript files
31
+ */
32
+ script: 'Script',
33
+ /**
34
+ * @description Title of a section in the debugger showing JavaScript variables from the a 'with'
35
+ *block. Block here means section of code, 'with' refers to a JavaScript programming concept and
36
+ *is a fixed term.
37
+ */
38
+ withBlock: '`With` block',
39
+ /**
40
+ * @description Title of a section in the debugger showing JavaScript variables from the a 'catch'
41
+ *block. Block here means section of code, 'catch' refers to a JavaScript programming concept and
42
+ *is a fixed term.
43
+ */
44
+ catchBlock: '`Catch` block',
45
+ /**
46
+ * @description Title of a section in the debugger showing JavaScript variables from the global scope.
47
+ */
48
+ global: 'Global',
49
+ /**
50
+ * @description Text for a JavaScript module, the programming concept
51
+ */
52
+ module: 'Module',
53
+ /**
54
+ * @description Text describing the expression scope in WebAssembly
55
+ */
56
+ expression: 'Expression',
57
+ /**
58
+ * @description Text in Scope Chain Sidebar Pane of the Sources panel
59
+ */
60
+ exception: 'Exception',
61
+ /**
62
+ * @description Text in Scope Chain Sidebar Pane of the Sources panel
63
+ */
64
+ returnValue: 'Return value',
65
+ };
66
+ const str_ = i18n.i18n.registerUIStrings('core/sdk/DebuggerModel.ts', UIStrings);
67
+ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
68
+ export function sortAndMergeRanges(locationRanges) {
69
+ function compare(p1, p2) {
70
+ return (p1.lineNumber - p2.lineNumber) || (p1.columnNumber - p2.columnNumber);
71
+ }
72
+ function overlap(r1, r2) {
73
+ if (r1.scriptId !== r2.scriptId) {
74
+ return false;
75
+ }
76
+ const n = compare(r1.start, r2.start);
77
+ if (n < 0) {
78
+ return compare(r1.end, r2.start) >= 0;
79
+ }
80
+ if (n > 0) {
81
+ return compare(r1.start, r2.end) <= 0;
82
+ }
83
+ return true;
84
+ }
85
+ if (locationRanges.length === 0) {
86
+ return [];
87
+ }
88
+ locationRanges.sort((r1, r2) => {
89
+ if (r1.scriptId < r2.scriptId) {
90
+ return -1;
91
+ }
92
+ if (r1.scriptId > r2.scriptId) {
93
+ return 1;
94
+ }
95
+ return compare(r1.start, r2.start) || compare(r1.end, r2.end);
96
+ });
97
+ let prev = locationRanges[0];
98
+ const merged = [];
99
+ for (let i = 1; i < locationRanges.length; ++i) {
100
+ const curr = locationRanges[i];
101
+ if (overlap(prev, curr)) {
102
+ if (compare(prev.end, curr.end) <= 0) {
103
+ prev = { ...prev, end: curr.end };
104
+ }
105
+ }
106
+ else {
107
+ merged.push(prev);
108
+ prev = curr;
109
+ }
110
+ }
111
+ merged.push(prev);
112
+ return merged;
113
+ }
114
+ export const WASM_SYMBOLS_PRIORITY = [
115
+ "ExternalDWARF" /* Protocol.Debugger.DebugSymbolsType.ExternalDWARF */,
116
+ "EmbeddedDWARF" /* Protocol.Debugger.DebugSymbolsType.EmbeddedDWARF */,
117
+ "SourceMap" /* Protocol.Debugger.DebugSymbolsType.SourceMap */,
118
+ ];
119
+ export class DebuggerModel extends SDKModel {
120
+ agent;
121
+ #runtimeModel;
122
+ #sourceMapManager;
123
+ #debuggerPausedDetails = null;
124
+ #scripts = new Map();
125
+ #scriptsBySourceURL = new Map();
126
+ #discardableScripts = [];
127
+ continueToLocationCallback = null;
128
+ #selectedCallFrame = null;
129
+ #debuggerEnabled = false;
130
+ #debuggerId = null;
131
+ #skipAllPausesTimeout = 0;
132
+ #beforePausedCallback = null;
133
+ #computeAutoStepRangesCallback = null;
134
+ #expandCallFramesCallback = null;
135
+ evaluateOnCallFrameCallback = null;
136
+ #synchronizeBreakpointsCallback = null;
137
+ // We need to be able to register listeners for individual breakpoints. As such, we dispatch
138
+ // on breakpoint ids, which are not statically known. The event #payload will always be a `Location`.
139
+ #breakpointResolvedEventTarget = new Common.ObjectWrapper.ObjectWrapper();
140
+ // When stepping over with autostepping enabled, the context denotes the function to which autostepping is restricted
141
+ // to by way of its functionLocation (as per Debugger.CallFrame).
142
+ #autoSteppingContext = null;
143
+ #isPausing = false;
144
+ constructor(target) {
145
+ super(target);
146
+ target.registerDebuggerDispatcher(new DebuggerDispatcher(this));
147
+ this.agent = target.debuggerAgent();
148
+ this.#runtimeModel = target.model(RuntimeModel);
149
+ this.#sourceMapManager = new SourceMapManager(target);
150
+ Common.Settings.Settings.instance()
151
+ .moduleSetting('pause-on-exception-enabled')
152
+ .addChangeListener(this.pauseOnExceptionStateChanged, this);
153
+ Common.Settings.Settings.instance()
154
+ .moduleSetting('pause-on-caught-exception')
155
+ .addChangeListener(this.pauseOnExceptionStateChanged, this);
156
+ Common.Settings.Settings.instance()
157
+ .moduleSetting('pause-on-uncaught-exception')
158
+ .addChangeListener(this.pauseOnExceptionStateChanged, this);
159
+ Common.Settings.Settings.instance()
160
+ .moduleSetting('disable-async-stack-traces')
161
+ .addChangeListener(this.asyncStackTracesStateChanged, this);
162
+ Common.Settings.Settings.instance()
163
+ .moduleSetting('breakpoints-active')
164
+ .addChangeListener(this.breakpointsActiveChanged, this);
165
+ if (!target.suspended()) {
166
+ void this.enableDebugger();
167
+ }
168
+ this.#sourceMapManager.setEnabled(Common.Settings.Settings.instance().moduleSetting('js-source-maps-enabled').get());
169
+ Common.Settings.Settings.instance()
170
+ .moduleSetting('js-source-maps-enabled')
171
+ .addChangeListener(event => this.#sourceMapManager.setEnabled(event.data));
172
+ const resourceTreeModel = target.model(ResourceTreeModel);
173
+ if (resourceTreeModel) {
174
+ resourceTreeModel.addEventListener(ResourceTreeModelEvents.FrameNavigated, this.onFrameNavigated, this);
175
+ }
176
+ }
177
+ static selectSymbolSource(debugSymbols) {
178
+ if (!debugSymbols || debugSymbols.length === 0) {
179
+ return null;
180
+ }
181
+ // Provides backwards compatibility to previous CDP version on Protocol.Debugger.DebugSymbols.
182
+ // TODO(crbug.com/369515221): Remove extra code as soon as old v8 versions used in Node are no longer supported.
183
+ if ('type' in debugSymbols) {
184
+ if (debugSymbols.type === 'None') {
185
+ return null;
186
+ }
187
+ return debugSymbols;
188
+ }
189
+ let debugSymbolsSource = null;
190
+ const symbolTypes = new Map(debugSymbols.map(symbol => [symbol.type, symbol]));
191
+ for (const symbol of WASM_SYMBOLS_PRIORITY) {
192
+ if (symbolTypes.has(symbol)) {
193
+ debugSymbolsSource = symbolTypes.get(symbol) || null;
194
+ break;
195
+ }
196
+ }
197
+ console.assert(debugSymbolsSource !== null, 'Unknown symbol types. Front-end and back-end should be kept in sync regarding Protocol.Debugger.DebugSymbolTypes');
198
+ if (debugSymbolsSource && debugSymbols.length > 1) {
199
+ Common.Console.Console.instance().warn(`Multiple debug symbols for script were found. Using ${debugSymbolsSource.type}`);
200
+ }
201
+ return debugSymbolsSource;
202
+ }
203
+ sourceMapManager() {
204
+ return this.#sourceMapManager;
205
+ }
206
+ runtimeModel() {
207
+ return this.#runtimeModel;
208
+ }
209
+ debuggerEnabled() {
210
+ return Boolean(this.#debuggerEnabled);
211
+ }
212
+ debuggerId() {
213
+ return this.#debuggerId;
214
+ }
215
+ async enableDebugger() {
216
+ if (this.#debuggerEnabled) {
217
+ return;
218
+ }
219
+ this.#debuggerEnabled = true;
220
+ // Set a limit for the total size of collected script sources retained by debugger.
221
+ // 10MB for remote frontends, 100MB for others.
222
+ const isRemoteFrontend = Root.Runtime.Runtime.queryParam('remoteFrontend') || Root.Runtime.Runtime.queryParam('ws');
223
+ const maxScriptsCacheSize = isRemoteFrontend ? 10e6 : 100e6;
224
+ const enablePromise = this.agent.invoke_enable({ maxScriptsCacheSize });
225
+ let instrumentationPromise;
226
+ if (Root.Runtime.experiments.isEnabled("instrumentation-breakpoints" /* Root.Runtime.ExperimentName.INSTRUMENTATION_BREAKPOINTS */)) {
227
+ instrumentationPromise = this.agent.invoke_setInstrumentationBreakpoint({
228
+ instrumentation: "beforeScriptExecution" /* Protocol.Debugger.SetInstrumentationBreakpointRequestInstrumentation.BeforeScriptExecution */,
229
+ });
230
+ }
231
+ this.pauseOnExceptionStateChanged();
232
+ void this.asyncStackTracesStateChanged();
233
+ if (!Common.Settings.Settings.instance().moduleSetting('breakpoints-active').get()) {
234
+ this.breakpointsActiveChanged();
235
+ }
236
+ this.dispatchEventToListeners(Events.DebuggerWasEnabled, this);
237
+ const [enableResult] = await Promise.all([enablePromise, instrumentationPromise]);
238
+ this.registerDebugger(enableResult);
239
+ }
240
+ async syncDebuggerId() {
241
+ const isRemoteFrontend = Root.Runtime.Runtime.queryParam('remoteFrontend') || Root.Runtime.Runtime.queryParam('ws');
242
+ const maxScriptsCacheSize = isRemoteFrontend ? 10e6 : 100e6;
243
+ const enablePromise = this.agent.invoke_enable({ maxScriptsCacheSize });
244
+ void enablePromise.then(this.registerDebugger.bind(this));
245
+ return await enablePromise;
246
+ }
247
+ onFrameNavigated() {
248
+ if (DebuggerModel.shouldResyncDebuggerId) {
249
+ return;
250
+ }
251
+ DebuggerModel.shouldResyncDebuggerId = true;
252
+ }
253
+ registerDebugger(response) {
254
+ if (response.getError()) {
255
+ this.#debuggerEnabled = false;
256
+ return;
257
+ }
258
+ const { debuggerId } = response;
259
+ debuggerIdToModel.set(debuggerId, this);
260
+ this.#debuggerId = debuggerId;
261
+ this.dispatchEventToListeners(Events.DebuggerIsReadyToPause, this);
262
+ }
263
+ isReadyToPause() {
264
+ return Boolean(this.#debuggerId);
265
+ }
266
+ static async modelForDebuggerId(debuggerId) {
267
+ if (DebuggerModel.shouldResyncDebuggerId) {
268
+ await DebuggerModel.resyncDebuggerIdForModels();
269
+ DebuggerModel.shouldResyncDebuggerId = false;
270
+ }
271
+ return debuggerIdToModel.get(debuggerId) || null;
272
+ }
273
+ static async resyncDebuggerIdForModels() {
274
+ const dbgModels = debuggerIdToModel.values();
275
+ for (const dbgModel of dbgModels) {
276
+ if (dbgModel.debuggerEnabled()) {
277
+ await dbgModel.syncDebuggerId();
278
+ }
279
+ }
280
+ }
281
+ async disableDebugger() {
282
+ if (!this.#debuggerEnabled) {
283
+ return;
284
+ }
285
+ this.#debuggerEnabled = false;
286
+ await this.asyncStackTracesStateChanged();
287
+ await this.agent.invoke_disable();
288
+ this.#isPausing = false;
289
+ this.globalObjectCleared();
290
+ this.dispatchEventToListeners(Events.DebuggerWasDisabled, this);
291
+ if (typeof this.#debuggerId === 'string') {
292
+ debuggerIdToModel.delete(this.#debuggerId);
293
+ }
294
+ this.#debuggerId = null;
295
+ }
296
+ skipAllPauses(skip) {
297
+ if (this.#skipAllPausesTimeout) {
298
+ clearTimeout(this.#skipAllPausesTimeout);
299
+ this.#skipAllPausesTimeout = 0;
300
+ }
301
+ void this.agent.invoke_setSkipAllPauses({ skip });
302
+ }
303
+ skipAllPausesUntilReloadOrTimeout(timeout) {
304
+ if (this.#skipAllPausesTimeout) {
305
+ clearTimeout(this.#skipAllPausesTimeout);
306
+ }
307
+ void this.agent.invoke_setSkipAllPauses({ skip: true });
308
+ // If reload happens before the timeout, the flag will be already unset and the timeout callback won't change anything.
309
+ this.#skipAllPausesTimeout = window.setTimeout(this.skipAllPauses.bind(this, false), timeout);
310
+ }
311
+ pauseOnExceptionStateChanged() {
312
+ const pauseOnCaughtEnabled = Common.Settings.Settings.instance().moduleSetting('pause-on-caught-exception').get();
313
+ let state;
314
+ const pauseOnUncaughtEnabled = Common.Settings.Settings.instance().moduleSetting('pause-on-uncaught-exception').get();
315
+ if (pauseOnCaughtEnabled && pauseOnUncaughtEnabled) {
316
+ state = "all" /* Protocol.Debugger.SetPauseOnExceptionsRequestState.All */;
317
+ }
318
+ else if (pauseOnCaughtEnabled) {
319
+ state = "caught" /* Protocol.Debugger.SetPauseOnExceptionsRequestState.Caught */;
320
+ }
321
+ else if (pauseOnUncaughtEnabled) {
322
+ state = "uncaught" /* Protocol.Debugger.SetPauseOnExceptionsRequestState.Uncaught */;
323
+ }
324
+ else {
325
+ state = "none" /* Protocol.Debugger.SetPauseOnExceptionsRequestState.None */;
326
+ }
327
+ void this.agent.invoke_setPauseOnExceptions({ state });
328
+ }
329
+ asyncStackTracesStateChanged() {
330
+ const maxAsyncStackChainDepth = 32;
331
+ const enabled = !Common.Settings.Settings.instance().moduleSetting('disable-async-stack-traces').get() && this.#debuggerEnabled;
332
+ const maxDepth = enabled ? maxAsyncStackChainDepth : 0;
333
+ return this.agent.invoke_setAsyncCallStackDepth({ maxDepth });
334
+ }
335
+ breakpointsActiveChanged() {
336
+ void this.agent.invoke_setBreakpointsActive({ active: Common.Settings.Settings.instance().moduleSetting('breakpoints-active').get() });
337
+ }
338
+ setComputeAutoStepRangesCallback(callback) {
339
+ this.#computeAutoStepRangesCallback = callback;
340
+ }
341
+ async computeAutoStepSkipList(mode) {
342
+ let ranges = [];
343
+ if (this.#computeAutoStepRangesCallback && this.#debuggerPausedDetails &&
344
+ this.#debuggerPausedDetails.callFrames.length > 0) {
345
+ const [callFrame] = this.#debuggerPausedDetails.callFrames;
346
+ ranges = await this.#computeAutoStepRangesCallback.call(null, mode, callFrame);
347
+ }
348
+ const skipList = ranges.map(({ start, end }) => ({
349
+ scriptId: start.scriptId,
350
+ start: { lineNumber: start.lineNumber, columnNumber: start.columnNumber },
351
+ end: { lineNumber: end.lineNumber, columnNumber: end.columnNumber },
352
+ }));
353
+ return sortAndMergeRanges(skipList);
354
+ }
355
+ async stepInto() {
356
+ const skipList = await this.computeAutoStepSkipList("StepInto" /* StepMode.STEP_INTO */);
357
+ void this.agent.invoke_stepInto({ breakOnAsyncCall: false, skipList });
358
+ }
359
+ async stepOver() {
360
+ this.#autoSteppingContext = this.#debuggerPausedDetails?.callFrames[0]?.functionLocation() ?? null;
361
+ const skipList = await this.computeAutoStepSkipList("StepOver" /* StepMode.STEP_OVER */);
362
+ void this.agent.invoke_stepOver({ skipList });
363
+ }
364
+ async stepOut() {
365
+ const skipList = await this.computeAutoStepSkipList("StepOut" /* StepMode.STEP_OUT */);
366
+ if (skipList.length !== 0) {
367
+ void this.agent.invoke_stepOver({ skipList });
368
+ }
369
+ else {
370
+ void this.agent.invoke_stepOut();
371
+ }
372
+ }
373
+ scheduleStepIntoAsync() {
374
+ void this.computeAutoStepSkipList("StepInto" /* StepMode.STEP_INTO */).then(skipList => {
375
+ void this.agent.invoke_stepInto({ breakOnAsyncCall: true, skipList });
376
+ });
377
+ }
378
+ resume() {
379
+ void this.agent.invoke_resume({ terminateOnResume: false });
380
+ this.#isPausing = false;
381
+ }
382
+ pause() {
383
+ this.#isPausing = true;
384
+ this.skipAllPauses(false);
385
+ void this.agent.invoke_pause();
386
+ }
387
+ async setBreakpointByURL(url, lineNumber, columnNumber, condition) {
388
+ // Convert file url to node-js path.
389
+ let urlRegex;
390
+ if (this.target().type() === Type.NODE && Common.ParsedURL.schemeIs(url, 'file:')) {
391
+ const platformPath = Common.ParsedURL.ParsedURL.urlToRawPathString(url, Host.Platform.isWin());
392
+ urlRegex =
393
+ `${Platform.StringUtilities.escapeForRegExp(platformPath)}|${Platform.StringUtilities.escapeForRegExp(url)}`;
394
+ if (Host.Platform.isWin() && platformPath.match(/^.:\\/)) {
395
+ // Match upper or lower case drive letter
396
+ urlRegex = `[${platformPath[0].toUpperCase()}${platformPath[0].toLowerCase()}]` + urlRegex.substr(1);
397
+ }
398
+ }
399
+ // Adjust column if needed.
400
+ let minColumnNumber = 0;
401
+ const scripts = this.#scriptsBySourceURL.get(url) || [];
402
+ for (let i = 0, l = scripts.length; i < l; ++i) {
403
+ const script = scripts[i];
404
+ if (lineNumber === script.lineOffset) {
405
+ minColumnNumber = minColumnNumber ? Math.min(minColumnNumber, script.columnOffset) : script.columnOffset;
406
+ }
407
+ }
408
+ columnNumber = Math.max(columnNumber || 0, minColumnNumber);
409
+ const response = await this.agent.invoke_setBreakpointByUrl({
410
+ lineNumber,
411
+ url: urlRegex ? undefined : url,
412
+ urlRegex,
413
+ columnNumber,
414
+ condition,
415
+ });
416
+ if (response.getError()) {
417
+ return { locations: [], breakpointId: null };
418
+ }
419
+ let locations = [];
420
+ if (response.locations) {
421
+ locations = response.locations.map(payload => Location.fromPayload(this, payload));
422
+ }
423
+ return { locations, breakpointId: response.breakpointId };
424
+ }
425
+ async setBreakpointInAnonymousScript(scriptHash, lineNumber, columnNumber, condition) {
426
+ const response = await this.agent.invoke_setBreakpointByUrl({ lineNumber, scriptHash, columnNumber, condition });
427
+ if (response.getError()) {
428
+ return { locations: [], breakpointId: null };
429
+ }
430
+ let locations = [];
431
+ if (response.locations) {
432
+ locations = response.locations.map(payload => Location.fromPayload(this, payload));
433
+ }
434
+ return { locations, breakpointId: response.breakpointId };
435
+ }
436
+ async removeBreakpoint(breakpointId) {
437
+ await this.agent.invoke_removeBreakpoint({ breakpointId });
438
+ }
439
+ async getPossibleBreakpoints(startLocation, endLocation, restrictToFunction) {
440
+ const response = await this.agent.invoke_getPossibleBreakpoints({
441
+ start: startLocation.payload(),
442
+ end: endLocation ? endLocation.payload() : undefined,
443
+ restrictToFunction,
444
+ });
445
+ if (response.getError() || !response.locations) {
446
+ return [];
447
+ }
448
+ return response.locations.map(location => BreakLocation.fromPayload(this, location));
449
+ }
450
+ async fetchAsyncStackTrace(stackId) {
451
+ const response = await this.agent.invoke_getStackTrace({ stackTraceId: stackId });
452
+ return response.getError() ? null : response.stackTrace;
453
+ }
454
+ breakpointResolved(breakpointId, location) {
455
+ this.#breakpointResolvedEventTarget.dispatchEventToListeners(breakpointId, Location.fromPayload(this, location));
456
+ }
457
+ globalObjectCleared() {
458
+ this.resetDebuggerPausedDetails();
459
+ this.reset();
460
+ // TODO(dgozman): move clients to ExecutionContextDestroyed/ScriptCollected events.
461
+ this.dispatchEventToListeners(Events.GlobalObjectCleared, this);
462
+ }
463
+ reset() {
464
+ for (const script of this.#scripts.values()) {
465
+ this.#sourceMapManager.detachSourceMap(script);
466
+ }
467
+ this.#scripts.clear();
468
+ this.#scriptsBySourceURL.clear();
469
+ this.#discardableScripts = [];
470
+ this.#autoSteppingContext = null;
471
+ }
472
+ scripts() {
473
+ return Array.from(this.#scripts.values());
474
+ }
475
+ scriptForId(scriptId) {
476
+ return this.#scripts.get(scriptId) || null;
477
+ }
478
+ /**
479
+ * Returns all `Script` objects with the same provided `sourceURL`. The
480
+ * resulting array is sorted by time with the newest `Script` in the front.
481
+ */
482
+ scriptsForSourceURL(sourceURL) {
483
+ return this.#scriptsBySourceURL.get(sourceURL) || [];
484
+ }
485
+ scriptsForExecutionContext(executionContext) {
486
+ const result = [];
487
+ for (const script of this.#scripts.values()) {
488
+ if (script.executionContextId === executionContext.id) {
489
+ result.push(script);
490
+ }
491
+ }
492
+ return result;
493
+ }
494
+ get callFrames() {
495
+ return this.#debuggerPausedDetails ? this.#debuggerPausedDetails.callFrames : null;
496
+ }
497
+ debuggerPausedDetails() {
498
+ return this.#debuggerPausedDetails;
499
+ }
500
+ async setDebuggerPausedDetails(debuggerPausedDetails) {
501
+ this.#isPausing = false;
502
+ this.#debuggerPausedDetails = debuggerPausedDetails;
503
+ if (this.#beforePausedCallback) {
504
+ if (!await this.#beforePausedCallback.call(null, debuggerPausedDetails, this.#autoSteppingContext)) {
505
+ return false;
506
+ }
507
+ }
508
+ // If we resolved a location in auto-stepping callback, reset the
509
+ // auto-step-over context.
510
+ this.#autoSteppingContext = null;
511
+ this.dispatchEventToListeners(Events.DebuggerPaused, this);
512
+ this.setSelectedCallFrame(debuggerPausedDetails.callFrames[0]);
513
+ return true;
514
+ }
515
+ resetDebuggerPausedDetails() {
516
+ this.#isPausing = false;
517
+ this.#debuggerPausedDetails = null;
518
+ this.setSelectedCallFrame(null);
519
+ }
520
+ setBeforePausedCallback(callback) {
521
+ this.#beforePausedCallback = callback;
522
+ }
523
+ setExpandCallFramesCallback(callback) {
524
+ this.#expandCallFramesCallback = callback;
525
+ }
526
+ setEvaluateOnCallFrameCallback(callback) {
527
+ this.evaluateOnCallFrameCallback = callback;
528
+ }
529
+ setSynchronizeBreakpointsCallback(callback) {
530
+ this.#synchronizeBreakpointsCallback = callback;
531
+ }
532
+ async pausedScript(callFrames, reason, auxData, breakpointIds, asyncStackTrace, asyncStackTraceId) {
533
+ if (reason === "instrumentation" /* Protocol.Debugger.PausedEventReason.Instrumentation */) {
534
+ const script = this.scriptForId(auxData.scriptId);
535
+ if (this.#synchronizeBreakpointsCallback && script) {
536
+ await this.#synchronizeBreakpointsCallback(script);
537
+ }
538
+ this.resume();
539
+ return;
540
+ }
541
+ const pausedDetails = new DebuggerPausedDetails(this, callFrames, reason, auxData, breakpointIds, asyncStackTrace, asyncStackTraceId);
542
+ await this.#expandCallFrames(pausedDetails);
543
+ if (this.continueToLocationCallback) {
544
+ const callback = this.continueToLocationCallback;
545
+ this.continueToLocationCallback = null;
546
+ if (callback(pausedDetails)) {
547
+ return;
548
+ }
549
+ }
550
+ if (!await this.setDebuggerPausedDetails(pausedDetails)) {
551
+ if (this.#autoSteppingContext) {
552
+ void this.stepOver();
553
+ }
554
+ else {
555
+ void this.stepInto();
556
+ }
557
+ }
558
+ else {
559
+ Common.EventTarget.fireEvent('DevTools.DebuggerPaused');
560
+ }
561
+ }
562
+ /** Delegates to the DebuggerLanguagePlugin and potential attached source maps to expand inlined call frames */
563
+ async #expandCallFrames(pausedDetails) {
564
+ if (this.#expandCallFramesCallback) {
565
+ pausedDetails.callFrames = await this.#expandCallFramesCallback.call(null, pausedDetails.callFrames);
566
+ }
567
+ if (!Root.Runtime.experiments.isEnabled("use-source-map-scopes" /* Root.Runtime.ExperimentName.USE_SOURCE_MAP_SCOPES */)) {
568
+ return;
569
+ }
570
+ // TODO(crbug.com/40277685): Support attaching/detaching source maps after pausing.
571
+ // Expanding call frames via source maps here is only suitable for the experiment prototype because
572
+ // we block until all relevant source maps are loaded.
573
+ // We should change this so the "Debugger Plugin" and "Source Map" have a bottle neck where they expand
574
+ // call frames and that bottleneck should support attaching/detaching source maps while paused.
575
+ const finalFrames = [];
576
+ for (const frame of pausedDetails.callFrames) {
577
+ const sourceMap = await this.sourceMapManager().sourceMapForClientPromise(frame.script);
578
+ if (sourceMap?.hasScopeInfo()) {
579
+ finalFrames.push(...sourceMap.expandCallFrame(frame));
580
+ }
581
+ else {
582
+ finalFrames.push(frame);
583
+ }
584
+ }
585
+ pausedDetails.callFrames = finalFrames;
586
+ }
587
+ resumedScript() {
588
+ this.resetDebuggerPausedDetails();
589
+ this.dispatchEventToListeners(Events.DebuggerResumed, this);
590
+ }
591
+ parsedScriptSource(scriptId, sourceURL, startLine, startColumn, endLine, endColumn,
592
+ // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration
593
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
594
+ executionContextId, hash, executionContextAuxData, isLiveEdit, sourceMapURL, hasSourceURLComment, hasSyntaxError, length, isModule, originStackTrace, codeOffset, scriptLanguage, debugSymbols, embedderName, buildId) {
595
+ const knownScript = this.#scripts.get(scriptId);
596
+ if (knownScript) {
597
+ return knownScript;
598
+ }
599
+ let isContentScript = false;
600
+ if (executionContextAuxData && ('isDefault' in executionContextAuxData)) {
601
+ isContentScript = !executionContextAuxData['isDefault'];
602
+ }
603
+ const selectedDebugSymbol = DebuggerModel.selectSymbolSource(debugSymbols);
604
+ const script = new Script(this, scriptId, sourceURL, startLine, startColumn, endLine, endColumn, executionContextId, hash, isContentScript, isLiveEdit, sourceMapURL, hasSourceURLComment, length, isModule, originStackTrace, codeOffset, scriptLanguage, selectedDebugSymbol, embedderName, buildId);
605
+ this.registerScript(script);
606
+ this.dispatchEventToListeners(Events.ParsedScriptSource, script);
607
+ if (script.sourceMapURL && !hasSyntaxError) {
608
+ this.#sourceMapManager.attachSourceMap(script, script.sourceURL, script.sourceMapURL);
609
+ }
610
+ const isDiscardable = hasSyntaxError && script.isAnonymousScript();
611
+ if (isDiscardable) {
612
+ this.#discardableScripts.push(script);
613
+ this.collectDiscardedScripts();
614
+ }
615
+ return script;
616
+ }
617
+ setSourceMapURL(script, newSourceMapURL) {
618
+ // Detach any previous source map from the `script` first.
619
+ this.#sourceMapManager.detachSourceMap(script);
620
+ script.sourceMapURL = newSourceMapURL;
621
+ this.#sourceMapManager.attachSourceMap(script, script.sourceURL, script.sourceMapURL);
622
+ }
623
+ async setDebugInfoURL(script, _externalURL) {
624
+ if (this.#expandCallFramesCallback && this.#debuggerPausedDetails) {
625
+ this.#debuggerPausedDetails.callFrames =
626
+ await this.#expandCallFramesCallback.call(null, this.#debuggerPausedDetails.callFrames);
627
+ }
628
+ this.dispatchEventToListeners(Events.DebugInfoAttached, script);
629
+ }
630
+ executionContextDestroyed(executionContext) {
631
+ for (const script of this.#scripts.values()) {
632
+ if (script.executionContextId === executionContext.id) {
633
+ this.#sourceMapManager.detachSourceMap(script);
634
+ }
635
+ }
636
+ }
637
+ registerScript(script) {
638
+ this.#scripts.set(script.scriptId, script);
639
+ if (script.isAnonymousScript()) {
640
+ return;
641
+ }
642
+ let scripts = this.#scriptsBySourceURL.get(script.sourceURL);
643
+ if (!scripts) {
644
+ scripts = [];
645
+ this.#scriptsBySourceURL.set(script.sourceURL, scripts);
646
+ }
647
+ // Newer scripts with the same URL should be preferred so we put them in
648
+ // the front. Consuming code usually will iterate over the array and pick
649
+ // the first script that works.
650
+ scripts.unshift(script);
651
+ }
652
+ unregisterScript(script) {
653
+ console.assert(script.isAnonymousScript());
654
+ this.#scripts.delete(script.scriptId);
655
+ }
656
+ collectDiscardedScripts() {
657
+ if (this.#discardableScripts.length < 1000) {
658
+ return;
659
+ }
660
+ const scriptsToDiscard = this.#discardableScripts.splice(0, 100);
661
+ for (const script of scriptsToDiscard) {
662
+ this.unregisterScript(script);
663
+ this.dispatchEventToListeners(Events.DiscardedAnonymousScriptSource, script);
664
+ }
665
+ }
666
+ createRawLocation(script, lineNumber, columnNumber, inlineFrameIndex) {
667
+ return this.createRawLocationByScriptId(script.scriptId, lineNumber, columnNumber, inlineFrameIndex);
668
+ }
669
+ createRawLocationByURL(sourceURL, lineNumber, columnNumber, inlineFrameIndex) {
670
+ for (const script of this.#scriptsBySourceURL.get(sourceURL) || []) {
671
+ if (script.lineOffset > lineNumber ||
672
+ (script.lineOffset === lineNumber && columnNumber !== undefined && script.columnOffset > columnNumber)) {
673
+ continue;
674
+ }
675
+ if (script.endLine < lineNumber ||
676
+ (script.endLine === lineNumber && columnNumber !== undefined && script.endColumn <= columnNumber)) {
677
+ continue;
678
+ }
679
+ return new Location(this, script.scriptId, lineNumber, columnNumber, inlineFrameIndex);
680
+ }
681
+ return null;
682
+ }
683
+ createRawLocationByScriptId(scriptId, lineNumber, columnNumber, inlineFrameIndex) {
684
+ return new Location(this, scriptId, lineNumber, columnNumber, inlineFrameIndex);
685
+ }
686
+ createRawLocationsByStackTrace(stackTrace) {
687
+ const rawLocations = [];
688
+ for (let current = stackTrace; current; current = current.parent) {
689
+ for (const { scriptId, lineNumber, columnNumber } of current.callFrames) {
690
+ rawLocations.push(this.createRawLocationByScriptId(scriptId, lineNumber, columnNumber));
691
+ }
692
+ }
693
+ return rawLocations;
694
+ }
695
+ isPaused() {
696
+ return Boolean(this.debuggerPausedDetails());
697
+ }
698
+ isPausing() {
699
+ return this.#isPausing;
700
+ }
701
+ setSelectedCallFrame(callFrame) {
702
+ if (this.#selectedCallFrame === callFrame) {
703
+ return;
704
+ }
705
+ this.#selectedCallFrame = callFrame;
706
+ this.dispatchEventToListeners(Events.CallFrameSelected, this);
707
+ }
708
+ selectedCallFrame() {
709
+ return this.#selectedCallFrame;
710
+ }
711
+ async evaluateOnSelectedCallFrame(options) {
712
+ const callFrame = this.selectedCallFrame();
713
+ if (!callFrame) {
714
+ throw new Error('No call frame selected');
715
+ }
716
+ return await callFrame.evaluate(options);
717
+ }
718
+ functionDetailsPromise(remoteObject) {
719
+ return remoteObject.getAllProperties(false /* accessorPropertiesOnly */, false /* generatePreview */)
720
+ .then(buildDetails.bind(this));
721
+ function buildDetails(response) {
722
+ if (!response) {
723
+ return null;
724
+ }
725
+ let location = null;
726
+ if (response.internalProperties) {
727
+ for (const prop of response.internalProperties) {
728
+ if (prop.name === '[[FunctionLocation]]') {
729
+ location = prop.value;
730
+ }
731
+ }
732
+ }
733
+ let functionName = null;
734
+ if (response.properties) {
735
+ for (const prop of response.properties) {
736
+ if (prop.name === 'name' && prop.value && prop.value.type === 'string') {
737
+ functionName = prop.value;
738
+ }
739
+ }
740
+ }
741
+ let debuggerLocation = null;
742
+ if (location) {
743
+ debuggerLocation = this.createRawLocationByScriptId(location.value.scriptId, location.value.lineNumber, location.value.columnNumber);
744
+ }
745
+ return { location: debuggerLocation, functionName: functionName ? functionName.value : '' };
746
+ }
747
+ }
748
+ async setVariableValue(scopeNumber, variableName, newValue, callFrameId) {
749
+ const response = await this.agent.invoke_setVariableValue({ scopeNumber, variableName, newValue, callFrameId });
750
+ const error = response.getError();
751
+ return error;
752
+ }
753
+ addBreakpointListener(breakpointId, listener, thisObject) {
754
+ this.#breakpointResolvedEventTarget.addEventListener(breakpointId, listener, thisObject);
755
+ }
756
+ removeBreakpointListener(breakpointId, listener, thisObject) {
757
+ this.#breakpointResolvedEventTarget.removeEventListener(breakpointId, listener, thisObject);
758
+ }
759
+ async setBlackboxPatterns(patterns, skipAnonymous) {
760
+ const response = await this.agent.invoke_setBlackboxPatterns({ patterns, skipAnonymous });
761
+ const error = response.getError();
762
+ return !error;
763
+ }
764
+ async setBlackboxExecutionContexts(uniqueIds) {
765
+ const response = await this.agent.invoke_setBlackboxExecutionContexts({ uniqueIds });
766
+ const error = response.getError();
767
+ return !error;
768
+ }
769
+ dispose() {
770
+ if (this.#debuggerId) {
771
+ debuggerIdToModel.delete(this.#debuggerId);
772
+ }
773
+ Common.Settings.Settings.instance()
774
+ .moduleSetting('pause-on-exception-enabled')
775
+ .removeChangeListener(this.pauseOnExceptionStateChanged, this);
776
+ Common.Settings.Settings.instance()
777
+ .moduleSetting('pause-on-caught-exception')
778
+ .removeChangeListener(this.pauseOnExceptionStateChanged, this);
779
+ Common.Settings.Settings.instance()
780
+ .moduleSetting('disable-async-stack-traces')
781
+ .removeChangeListener(this.asyncStackTracesStateChanged, this);
782
+ }
783
+ async suspendModel() {
784
+ await this.disableDebugger();
785
+ }
786
+ async resumeModel() {
787
+ await this.enableDebugger();
788
+ }
789
+ static shouldResyncDebuggerId = false;
790
+ getEvaluateOnCallFrameCallback() {
791
+ return this.evaluateOnCallFrameCallback;
792
+ }
793
+ /**
794
+ * Iterates the async stack trace parents.
795
+ *
796
+ * Retrieving cross-target async stack fragments requires CDP interaction, so this is an async generator.
797
+ *
798
+ * Important: This iterator will not yield the "synchronous" part of the stack trace, only the async parent chain.
799
+ */
800
+ async *iterateAsyncParents(stackTraceOrPausedDetails) {
801
+ // We make `DebuggerPausedDetails` look like a stack trace. We are only interested in `parent` and `parentId` in any case.
802
+ let stackTrace = stackTraceOrPausedDetails instanceof DebuggerPausedDetails ?
803
+ {
804
+ callFrames: [],
805
+ parent: stackTraceOrPausedDetails.asyncStackTrace,
806
+ parentId: stackTraceOrPausedDetails.asyncStackTraceId
807
+ } :
808
+ stackTraceOrPausedDetails;
809
+ let target = this.target();
810
+ while (true) {
811
+ if (stackTrace.parent) {
812
+ stackTrace = stackTrace.parent;
813
+ }
814
+ else if (stackTrace.parentId) {
815
+ const model = stackTrace.parentId.debuggerId ?
816
+ await DebuggerModel.modelForDebuggerId(stackTrace.parentId.debuggerId) :
817
+ this;
818
+ if (!model) {
819
+ return;
820
+ }
821
+ const maybeStackTrace = await model.fetchAsyncStackTrace(stackTrace.parentId);
822
+ if (!maybeStackTrace) {
823
+ return;
824
+ }
825
+ stackTrace = maybeStackTrace;
826
+ target = model.target();
827
+ }
828
+ else {
829
+ return;
830
+ }
831
+ yield { stackTrace, target };
832
+ }
833
+ }
834
+ }
835
+ const debuggerIdToModel = new Map();
836
+ /**
837
+ * Keep these in sync with WebCore::V8Debugger
838
+ */
839
+ export var PauseOnExceptionsState;
840
+ (function (PauseOnExceptionsState) {
841
+ /* eslint-disable @typescript-eslint/naming-convention -- Used by web_tests. */
842
+ PauseOnExceptionsState["DontPauseOnExceptions"] = "none";
843
+ PauseOnExceptionsState["PauseOnAllExceptions"] = "all";
844
+ PauseOnExceptionsState["PauseOnCaughtExceptions"] = "caught";
845
+ PauseOnExceptionsState["PauseOnUncaughtExceptions"] = "uncaught";
846
+ /* eslint-enable @typescript-eslint/naming-convention */
847
+ })(PauseOnExceptionsState || (PauseOnExceptionsState = {}));
848
+ export var Events;
849
+ (function (Events) {
850
+ /* eslint-disable @typescript-eslint/naming-convention -- Used by web_tests. */
851
+ Events["DebuggerWasEnabled"] = "DebuggerWasEnabled";
852
+ Events["DebuggerWasDisabled"] = "DebuggerWasDisabled";
853
+ Events["DebuggerPaused"] = "DebuggerPaused";
854
+ Events["DebuggerResumed"] = "DebuggerResumed";
855
+ Events["DebugInfoAttached"] = "DebugInfoAttached";
856
+ Events["ParsedScriptSource"] = "ParsedScriptSource";
857
+ Events["DiscardedAnonymousScriptSource"] = "DiscardedAnonymousScriptSource";
858
+ Events["GlobalObjectCleared"] = "GlobalObjectCleared";
859
+ Events["CallFrameSelected"] = "CallFrameSelected";
860
+ Events["DebuggerIsReadyToPause"] = "DebuggerIsReadyToPause";
861
+ Events["ScriptSourceWasEdited"] = "ScriptSourceWasEdited";
862
+ /* eslint-enable @typescript-eslint/naming-convention */
863
+ })(Events || (Events = {}));
864
+ class DebuggerDispatcher {
865
+ #debuggerModel;
866
+ constructor(debuggerModel) {
867
+ this.#debuggerModel = debuggerModel;
868
+ }
869
+ paused({ callFrames, reason, data, hitBreakpoints, asyncStackTrace, asyncStackTraceId }) {
870
+ if (!this.#debuggerModel.debuggerEnabled()) {
871
+ return;
872
+ }
873
+ void this.#debuggerModel.pausedScript(callFrames, reason, data, hitBreakpoints || [], asyncStackTrace, asyncStackTraceId);
874
+ }
875
+ resumed() {
876
+ if (!this.#debuggerModel.debuggerEnabled()) {
877
+ return;
878
+ }
879
+ this.#debuggerModel.resumedScript();
880
+ }
881
+ scriptParsed({ scriptId, url, startLine, startColumn, endLine, endColumn, executionContextId, hash, executionContextAuxData, isLiveEdit, sourceMapURL, hasSourceURL, length, isModule, stackTrace, codeOffset, scriptLanguage, debugSymbols, embedderName, buildId, }) {
882
+ if (!this.#debuggerModel.debuggerEnabled()) {
883
+ return;
884
+ }
885
+ this.#debuggerModel.parsedScriptSource(scriptId, url, startLine, startColumn, endLine, endColumn, executionContextId, hash, executionContextAuxData, Boolean(isLiveEdit), sourceMapURL, Boolean(hasSourceURL), false, length || 0, isModule || null, stackTrace || null, codeOffset || null, scriptLanguage || null, debugSymbols || null, embedderName || null, buildId || null);
886
+ }
887
+ scriptFailedToParse({ scriptId, url, startLine, startColumn, endLine, endColumn, executionContextId, hash, executionContextAuxData, sourceMapURL, hasSourceURL, length, isModule, stackTrace, codeOffset, scriptLanguage, embedderName, buildId, }) {
888
+ if (!this.#debuggerModel.debuggerEnabled()) {
889
+ return;
890
+ }
891
+ this.#debuggerModel.parsedScriptSource(scriptId, url, startLine, startColumn, endLine, endColumn, executionContextId, hash, executionContextAuxData, false, sourceMapURL, Boolean(hasSourceURL), true, length || 0, isModule || null, stackTrace || null, codeOffset || null, scriptLanguage || null, null, embedderName || null, buildId || null);
892
+ }
893
+ breakpointResolved({ breakpointId, location }) {
894
+ if (!this.#debuggerModel.debuggerEnabled()) {
895
+ return;
896
+ }
897
+ this.#debuggerModel.breakpointResolved(breakpointId, location);
898
+ }
899
+ }
900
+ export class Location {
901
+ debuggerModel;
902
+ scriptId;
903
+ lineNumber;
904
+ columnNumber;
905
+ inlineFrameIndex;
906
+ constructor(debuggerModel, scriptId, lineNumber, columnNumber, inlineFrameIndex) {
907
+ this.debuggerModel = debuggerModel;
908
+ this.scriptId = scriptId;
909
+ this.lineNumber = lineNumber;
910
+ this.columnNumber = columnNumber || 0;
911
+ this.inlineFrameIndex = inlineFrameIndex || 0;
912
+ }
913
+ static fromPayload(debuggerModel, payload, inlineFrameIndex) {
914
+ return new Location(debuggerModel, payload.scriptId, payload.lineNumber, payload.columnNumber, inlineFrameIndex);
915
+ }
916
+ payload() {
917
+ return { scriptId: this.scriptId, lineNumber: this.lineNumber, columnNumber: this.columnNumber };
918
+ }
919
+ script() {
920
+ return this.debuggerModel.scriptForId(this.scriptId);
921
+ }
922
+ continueToLocation(pausedCallback) {
923
+ if (pausedCallback) {
924
+ this.debuggerModel.continueToLocationCallback = this.paused.bind(this, pausedCallback);
925
+ }
926
+ void this.debuggerModel.agent.invoke_continueToLocation({
927
+ location: this.payload(),
928
+ targetCallFrames: "current" /* Protocol.Debugger.ContinueToLocationRequestTargetCallFrames.Current */,
929
+ });
930
+ }
931
+ paused(pausedCallback, debuggerPausedDetails) {
932
+ const location = debuggerPausedDetails.callFrames[0].location();
933
+ if (location.scriptId === this.scriptId && location.lineNumber === this.lineNumber &&
934
+ location.columnNumber === this.columnNumber) {
935
+ pausedCallback();
936
+ return true;
937
+ }
938
+ return false;
939
+ }
940
+ id() {
941
+ return this.debuggerModel.target().id() + ':' + this.scriptId + ':' + this.lineNumber + ':' + this.columnNumber;
942
+ }
943
+ }
944
+ export class BreakLocation extends Location {
945
+ type;
946
+ constructor(debuggerModel, scriptId, lineNumber, columnNumber, type) {
947
+ super(debuggerModel, scriptId, lineNumber, columnNumber);
948
+ if (type) {
949
+ this.type = type;
950
+ }
951
+ }
952
+ static fromPayload(debuggerModel, payload) {
953
+ return new BreakLocation(debuggerModel, payload.scriptId, payload.lineNumber, payload.columnNumber, payload.type);
954
+ }
955
+ }
956
+ export class CallFrame {
957
+ debuggerModel;
958
+ script;
959
+ payload;
960
+ #location;
961
+ #scopeChain;
962
+ #localScope;
963
+ inlineFrameIndex;
964
+ functionName;
965
+ #functionLocation;
966
+ #returnValue;
967
+ missingDebugInfoDetails;
968
+ exception;
969
+ canBeRestarted;
970
+ constructor(debuggerModel, script, payload, inlineFrameIndex, functionName, exception = null) {
971
+ this.debuggerModel = debuggerModel;
972
+ this.script = script;
973
+ this.payload = payload;
974
+ this.#location = Location.fromPayload(debuggerModel, payload.location, inlineFrameIndex);
975
+ this.#scopeChain = [];
976
+ this.#localScope = null;
977
+ this.inlineFrameIndex = inlineFrameIndex || 0;
978
+ this.functionName = functionName ?? payload.functionName;
979
+ this.missingDebugInfoDetails = null;
980
+ this.canBeRestarted = Boolean(payload.canBeRestarted);
981
+ this.exception = exception;
982
+ for (let i = 0; i < payload.scopeChain.length; ++i) {
983
+ const scope = new Scope(this, i);
984
+ this.#scopeChain.push(scope);
985
+ if (scope.type() === "local" /* Protocol.Debugger.ScopeType.Local */) {
986
+ this.#localScope = scope;
987
+ }
988
+ }
989
+ if (payload.functionLocation) {
990
+ this.#functionLocation = Location.fromPayload(debuggerModel, payload.functionLocation);
991
+ }
992
+ this.#returnValue =
993
+ payload.returnValue ? this.debuggerModel.runtimeModel().createRemoteObject(payload.returnValue) : null;
994
+ }
995
+ static fromPayloadArray(debuggerModel, callFrames, exception) {
996
+ const result = [];
997
+ for (let i = 0; i < callFrames.length; ++i) {
998
+ const callFrame = callFrames[i];
999
+ const script = debuggerModel.scriptForId(callFrame.location.scriptId);
1000
+ if (script) {
1001
+ const ex = i === 0 ? exception : null;
1002
+ result.push(new CallFrame(debuggerModel, script, callFrame, undefined, undefined, ex));
1003
+ }
1004
+ }
1005
+ return result;
1006
+ }
1007
+ createVirtualCallFrame(inlineFrameIndex, name) {
1008
+ return new CallFrame(this.debuggerModel, this.script, this.payload, inlineFrameIndex, name, this.exception);
1009
+ }
1010
+ get id() {
1011
+ return this.payload.callFrameId;
1012
+ }
1013
+ scopeChain() {
1014
+ return this.#scopeChain;
1015
+ }
1016
+ localScope() {
1017
+ return this.#localScope;
1018
+ }
1019
+ thisObject() {
1020
+ return this.payload.this ? this.debuggerModel.runtimeModel().createRemoteObject(this.payload.this) : null;
1021
+ }
1022
+ returnValue() {
1023
+ return this.#returnValue;
1024
+ }
1025
+ async setReturnValue(expression) {
1026
+ if (!this.#returnValue) {
1027
+ return null;
1028
+ }
1029
+ const evaluateResponse = await this.debuggerModel.agent.invoke_evaluateOnCallFrame({ callFrameId: this.id, expression, silent: true, objectGroup: 'backtrace' });
1030
+ if (evaluateResponse.getError() || evaluateResponse.exceptionDetails) {
1031
+ return null;
1032
+ }
1033
+ const response = await this.debuggerModel.agent.invoke_setReturnValue({ newValue: evaluateResponse.result });
1034
+ if (response.getError()) {
1035
+ return null;
1036
+ }
1037
+ this.#returnValue = this.debuggerModel.runtimeModel().createRemoteObject(evaluateResponse.result);
1038
+ return this.#returnValue;
1039
+ }
1040
+ location() {
1041
+ return this.#location;
1042
+ }
1043
+ functionLocation() {
1044
+ return this.#functionLocation || null;
1045
+ }
1046
+ async evaluate(options) {
1047
+ const debuggerModel = this.debuggerModel;
1048
+ const runtimeModel = debuggerModel.runtimeModel();
1049
+ const evaluateOnCallFrameCallback = debuggerModel.getEvaluateOnCallFrameCallback();
1050
+ if (evaluateOnCallFrameCallback) {
1051
+ const result = await evaluateOnCallFrameCallback(this, options);
1052
+ if (result) {
1053
+ return result;
1054
+ }
1055
+ }
1056
+ const response = await this.debuggerModel.agent.invoke_evaluateOnCallFrame({
1057
+ callFrameId: this.id,
1058
+ expression: options.expression,
1059
+ objectGroup: options.objectGroup,
1060
+ includeCommandLineAPI: options.includeCommandLineAPI,
1061
+ silent: options.silent,
1062
+ returnByValue: options.returnByValue,
1063
+ generatePreview: options.generatePreview,
1064
+ throwOnSideEffect: options.throwOnSideEffect,
1065
+ timeout: options.timeout,
1066
+ });
1067
+ const error = response.getError();
1068
+ if (error) {
1069
+ return { error };
1070
+ }
1071
+ return { object: runtimeModel.createRemoteObject(response.result), exceptionDetails: response.exceptionDetails };
1072
+ }
1073
+ async restart() {
1074
+ console.assert(this.canBeRestarted, 'This frame can not be restarted.');
1075
+ // Note that even if `canBeRestarted` is true, the restart frame call can still fail.
1076
+ // The user can evaluate arbitrary code between pausing and restarting the frame that
1077
+ // could mess with the call stack.
1078
+ await this.debuggerModel.agent.invoke_restartFrame({ callFrameId: this.id, mode: "StepInto" /* Protocol.Debugger.RestartFrameRequestMode.StepInto */ });
1079
+ }
1080
+ getPayload() {
1081
+ return this.payload;
1082
+ }
1083
+ }
1084
+ export class Scope {
1085
+ #callFrame;
1086
+ #payload;
1087
+ #type;
1088
+ #name;
1089
+ #ordinal;
1090
+ #locationRange;
1091
+ #object;
1092
+ constructor(callFrame, ordinal) {
1093
+ this.#callFrame = callFrame;
1094
+ this.#payload = callFrame.getPayload().scopeChain[ordinal];
1095
+ this.#type = this.#payload.type;
1096
+ this.#name = this.#payload.name;
1097
+ this.#ordinal = ordinal;
1098
+ this.#object = null;
1099
+ const start = this.#payload.startLocation ? Location.fromPayload(callFrame.debuggerModel, this.#payload.startLocation) : null;
1100
+ const end = this.#payload.endLocation ? Location.fromPayload(callFrame.debuggerModel, this.#payload.endLocation) : null;
1101
+ if (start && end && start.scriptId === end.scriptId) {
1102
+ this.#locationRange = { start, end };
1103
+ }
1104
+ else {
1105
+ this.#locationRange = null;
1106
+ }
1107
+ }
1108
+ callFrame() {
1109
+ return this.#callFrame;
1110
+ }
1111
+ type() {
1112
+ return this.#type;
1113
+ }
1114
+ typeName() {
1115
+ switch (this.#type) {
1116
+ case "local" /* Protocol.Debugger.ScopeType.Local */:
1117
+ return i18nString(UIStrings.local);
1118
+ case "closure" /* Protocol.Debugger.ScopeType.Closure */:
1119
+ return i18nString(UIStrings.closure);
1120
+ case "catch" /* Protocol.Debugger.ScopeType.Catch */:
1121
+ return i18nString(UIStrings.catchBlock);
1122
+ case "eval" /* Protocol.Debugger.ScopeType.Eval */:
1123
+ return i18n.i18n.lockedString('Eval');
1124
+ case "block" /* Protocol.Debugger.ScopeType.Block */:
1125
+ return i18nString(UIStrings.block);
1126
+ case "script" /* Protocol.Debugger.ScopeType.Script */:
1127
+ return i18nString(UIStrings.script);
1128
+ case "with" /* Protocol.Debugger.ScopeType.With */:
1129
+ return i18nString(UIStrings.withBlock);
1130
+ case "global" /* Protocol.Debugger.ScopeType.Global */:
1131
+ return i18nString(UIStrings.global);
1132
+ case "module" /* Protocol.Debugger.ScopeType.Module */:
1133
+ return i18nString(UIStrings.module);
1134
+ case "wasm-expression-stack" /* Protocol.Debugger.ScopeType.WasmExpressionStack */:
1135
+ return i18nString(UIStrings.expression);
1136
+ }
1137
+ return '';
1138
+ }
1139
+ name() {
1140
+ return this.#name;
1141
+ }
1142
+ range() {
1143
+ return this.#locationRange;
1144
+ }
1145
+ object() {
1146
+ if (this.#object) {
1147
+ return this.#object;
1148
+ }
1149
+ const runtimeModel = this.#callFrame.debuggerModel.runtimeModel();
1150
+ const declarativeScope = this.#type !== "with" /* Protocol.Debugger.ScopeType.With */ && this.#type !== "global" /* Protocol.Debugger.ScopeType.Global */;
1151
+ if (declarativeScope) {
1152
+ this.#object =
1153
+ runtimeModel.createScopeRemoteObject(this.#payload.object, new ScopeRef(this.#ordinal, this.#callFrame.id));
1154
+ }
1155
+ else {
1156
+ this.#object = runtimeModel.createRemoteObject(this.#payload.object);
1157
+ }
1158
+ return this.#object;
1159
+ }
1160
+ description() {
1161
+ const declarativeScope = this.#type !== "with" /* Protocol.Debugger.ScopeType.With */ && this.#type !== "global" /* Protocol.Debugger.ScopeType.Global */;
1162
+ return declarativeScope ? '' : (this.#payload.object.description || '');
1163
+ }
1164
+ icon() {
1165
+ return undefined;
1166
+ }
1167
+ extraProperties() {
1168
+ if (this.#ordinal !== 0 || this.#type !== "local" /* Protocol.Debugger.ScopeType.Local */ || this.#callFrame.script.isWasm()) {
1169
+ return [];
1170
+ }
1171
+ const extraProperties = [];
1172
+ const exception = this.#callFrame.exception;
1173
+ if (exception) {
1174
+ extraProperties.push(new RemoteObjectProperty(i18nString(UIStrings.exception), exception, undefined, undefined, undefined, undefined, undefined,
1175
+ /* synthetic */ true));
1176
+ }
1177
+ const returnValue = this.#callFrame.returnValue();
1178
+ if (returnValue) {
1179
+ extraProperties.push(new RemoteObjectProperty(i18nString(UIStrings.returnValue), returnValue, undefined, undefined, undefined, undefined, undefined,
1180
+ /* synthetic */ true, this.#callFrame.setReturnValue.bind(this.#callFrame)));
1181
+ }
1182
+ return extraProperties;
1183
+ }
1184
+ }
1185
+ export class DebuggerPausedDetails {
1186
+ debuggerModel;
1187
+ callFrames;
1188
+ reason;
1189
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1190
+ auxData;
1191
+ breakpointIds;
1192
+ asyncStackTrace;
1193
+ asyncStackTraceId;
1194
+ constructor(debuggerModel, callFrames, reason,
1195
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1196
+ auxData, breakpointIds, asyncStackTrace, asyncStackTraceId) {
1197
+ this.debuggerModel = debuggerModel;
1198
+ this.reason = reason;
1199
+ this.auxData = auxData;
1200
+ this.breakpointIds = breakpointIds;
1201
+ if (asyncStackTrace) {
1202
+ this.asyncStackTrace = this.cleanRedundantFrames(asyncStackTrace);
1203
+ }
1204
+ this.asyncStackTraceId = asyncStackTraceId;
1205
+ this.callFrames = CallFrame.fromPayloadArray(debuggerModel, callFrames, this.exception());
1206
+ }
1207
+ exception() {
1208
+ if (this.reason !== "exception" /* Protocol.Debugger.PausedEventReason.Exception */ &&
1209
+ this.reason !== "promiseRejection" /* Protocol.Debugger.PausedEventReason.PromiseRejection */) {
1210
+ return null;
1211
+ }
1212
+ return this.debuggerModel.runtimeModel().createRemoteObject(this.auxData);
1213
+ }
1214
+ cleanRedundantFrames(asyncStackTrace) {
1215
+ let stack = asyncStackTrace;
1216
+ let previous = null;
1217
+ while (stack) {
1218
+ if (previous && !stack.callFrames.length) {
1219
+ previous.parent = stack.parent;
1220
+ }
1221
+ else {
1222
+ previous = stack;
1223
+ }
1224
+ stack = stack.parent;
1225
+ }
1226
+ return asyncStackTrace;
1227
+ }
1228
+ }
1229
+ SDKModel.register(DebuggerModel, { capabilities: 4 /* Capability.JS */, autostart: true });
1230
+ export const LOGPOINT_SOURCE_URL = 'debugger://logpoint';
1231
+ export const COND_BREAKPOINT_SOURCE_URL = 'debugger://breakpoint';