devtools-tracing 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 (397) hide show
  1. package/generate.ts +643 -0
  2. package/index.ts +16 -0
  3. package/lib/front_end/core/common/App.ts +7 -0
  4. package/lib/front_end/core/common/AppProvider.ts +32 -0
  5. package/lib/front_end/core/common/Base64.ts +47 -0
  6. package/lib/front_end/core/common/CharacterIdMap.ts +30 -0
  7. package/lib/front_end/core/common/Color.ts +2506 -0
  8. package/lib/front_end/core/common/ColorConverter.ts +402 -0
  9. package/lib/front_end/core/common/ColorUtils.ts +252 -0
  10. package/lib/front_end/core/common/Console.ts +114 -0
  11. package/lib/front_end/core/common/Debouncer.ts +15 -0
  12. package/lib/front_end/core/common/EventTarget.ts +52 -0
  13. package/lib/front_end/core/common/Gzip.ts +74 -0
  14. package/lib/front_end/core/common/JavaScriptMetaData.ts +29 -0
  15. package/lib/front_end/core/common/Lazy.ts +31 -0
  16. package/lib/front_end/core/common/Linkifier.ts +55 -0
  17. package/lib/front_end/core/common/MapWithDefault.ts +26 -0
  18. package/lib/front_end/core/common/Mutex.ts +55 -0
  19. package/lib/front_end/core/common/Object.ts +145 -0
  20. package/lib/front_end/core/common/ParsedURL.ts +554 -0
  21. package/lib/front_end/core/common/Progress.ts +180 -0
  22. package/lib/front_end/core/common/QueryParamHandler.ts +7 -0
  23. package/lib/front_end/core/common/ResolverBase.ts +85 -0
  24. package/lib/front_end/core/common/ResourceType.ts +588 -0
  25. package/lib/front_end/core/common/ReturnToPanel.ts +17 -0
  26. package/lib/front_end/core/common/Revealer.ts +192 -0
  27. package/lib/front_end/core/common/Runnable.ts +41 -0
  28. package/lib/front_end/core/common/SegmentedRange.ts +87 -0
  29. package/lib/front_end/core/common/SettingRegistration.ts +339 -0
  30. package/lib/front_end/core/common/Settings.ts +1497 -0
  31. package/lib/front_end/core/common/SimpleHistoryManager.ts +124 -0
  32. package/lib/front_end/core/common/StringOutputStream.ts +26 -0
  33. package/lib/front_end/core/common/TextDictionary.ts +48 -0
  34. package/lib/front_end/core/common/Throttler.ts +99 -0
  35. package/lib/front_end/core/common/Trie.ts +152 -0
  36. package/lib/front_end/core/common/Worker.ts +60 -0
  37. package/lib/front_end/core/common/common.ts +81 -0
  38. package/lib/front_end/core/host/AidaClient.ts +733 -0
  39. package/lib/front_end/core/host/GdpClient.ts +316 -0
  40. package/lib/front_end/core/host/InspectorFrontendHost.ts +648 -0
  41. package/lib/front_end/core/host/InspectorFrontendHostAPI.ts +551 -0
  42. package/lib/front_end/core/host/Platform.ts +76 -0
  43. package/lib/front_end/core/host/ResourceLoader.ts +282 -0
  44. package/lib/front_end/core/host/UserMetrics.ts +1230 -0
  45. package/lib/front_end/core/host/host.ts +23 -0
  46. package/lib/front_end/core/i18n/ByteUtilities.ts +82 -0
  47. package/lib/front_end/core/i18n/DevToolsLocale.ts +87 -0
  48. package/lib/front_end/core/i18n/NumberFormatter.ts +82 -0
  49. package/lib/front_end/core/i18n/i18n.ts +17 -0
  50. package/lib/front_end/core/i18n/i18nImpl.ts +204 -0
  51. package/lib/front_end/core/i18n/i18nTypes.ts +10 -0
  52. package/lib/front_end/core/i18n/locales.js +14 -0
  53. package/lib/front_end/core/i18n/time-utilities.ts +174 -0
  54. package/lib/front_end/core/platform/ArrayUtilities.ts +271 -0
  55. package/lib/front_end/core/platform/Brand.ts +23 -0
  56. package/lib/front_end/core/platform/Constructor.ts +10 -0
  57. package/lib/front_end/core/platform/DOMUtilities.ts +138 -0
  58. package/lib/front_end/core/platform/DateUtilities.ts +15 -0
  59. package/lib/front_end/core/platform/DevToolsPath.ts +53 -0
  60. package/lib/front_end/core/platform/KeyboardUtilities.ts +38 -0
  61. package/lib/front_end/core/platform/MapUtilities.ts +95 -0
  62. package/lib/front_end/core/platform/MimeType.ts +175 -0
  63. package/lib/front_end/core/platform/NumberUtilities.ts +80 -0
  64. package/lib/front_end/core/platform/StringUtilities.ts +588 -0
  65. package/lib/front_end/core/platform/Timing.ts +17 -0
  66. package/lib/front_end/core/platform/TypedArrayUtilities.ts +189 -0
  67. package/lib/front_end/core/platform/TypescriptUtilities.ts +86 -0
  68. package/lib/front_end/core/platform/UIString.ts +39 -0
  69. package/lib/front_end/core/platform/UserVisibleError.ts +28 -0
  70. package/lib/front_end/core/platform/platform.ts +45 -0
  71. package/lib/front_end/core/protocol_client/ConnectionTransport.ts +26 -0
  72. package/lib/front_end/core/protocol_client/InspectorBackend.ts +1050 -0
  73. package/lib/front_end/core/protocol_client/NodeURL.ts +42 -0
  74. package/lib/front_end/core/protocol_client/protocol_client.ts +13 -0
  75. package/lib/front_end/core/root/Runtime.ts +609 -0
  76. package/lib/front_end/core/root/root.ts +6 -0
  77. package/lib/front_end/core/sdk/AccessibilityModel.ts +353 -0
  78. package/lib/front_end/core/sdk/AnimationModel.ts +1041 -0
  79. package/lib/front_end/core/sdk/AutofillModel.ts +184 -0
  80. package/lib/front_end/core/sdk/CPUProfilerModel.ts +148 -0
  81. package/lib/front_end/core/sdk/CPUThrottlingManager.ts +282 -0
  82. package/lib/front_end/core/sdk/CSSContainerQuery.ts +139 -0
  83. package/lib/front_end/core/sdk/CSSFontFace.ts +40 -0
  84. package/lib/front_end/core/sdk/CSSLayer.ts +30 -0
  85. package/lib/front_end/core/sdk/CSSMatchedStyles.ts +1646 -0
  86. package/lib/front_end/core/sdk/CSSMedia.ts +121 -0
  87. package/lib/front_end/core/sdk/CSSMetadata.ts +1647 -0
  88. package/lib/front_end/core/sdk/CSSModel.ts +1128 -0
  89. package/lib/front_end/core/sdk/CSSProperty.ts +384 -0
  90. package/lib/front_end/core/sdk/CSSPropertyParser.ts +681 -0
  91. package/lib/front_end/core/sdk/CSSPropertyParserMatchers.ts +1395 -0
  92. package/lib/front_end/core/sdk/CSSQuery.ts +72 -0
  93. package/lib/front_end/core/sdk/CSSRule.ts +465 -0
  94. package/lib/front_end/core/sdk/CSSScope.ts +30 -0
  95. package/lib/front_end/core/sdk/CSSStartingStyle.ts +29 -0
  96. package/lib/front_end/core/sdk/CSSStyleDeclaration.ts +313 -0
  97. package/lib/front_end/core/sdk/CSSStyleSheetHeader.ts +196 -0
  98. package/lib/front_end/core/sdk/CSSSupports.ts +33 -0
  99. package/lib/front_end/core/sdk/CategorizedBreakpoint.ts +64 -0
  100. package/lib/front_end/core/sdk/ChildTargetManager.ts +314 -0
  101. package/lib/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +62 -0
  102. package/lib/front_end/core/sdk/Connections.ts +293 -0
  103. package/lib/front_end/core/sdk/ConsoleModel.ts +808 -0
  104. package/lib/front_end/core/sdk/ConsoleModelTypes.ts +15 -0
  105. package/lib/front_end/core/sdk/Cookie.ts +319 -0
  106. package/lib/front_end/core/sdk/CookieModel.ts +239 -0
  107. package/lib/front_end/core/sdk/CookieParser.ts +185 -0
  108. package/lib/front_end/core/sdk/DOMDebuggerModel.ts +787 -0
  109. package/lib/front_end/core/sdk/DOMModel.ts +1961 -0
  110. package/lib/front_end/core/sdk/DebuggerModel.ts +1605 -0
  111. package/lib/front_end/core/sdk/EmulationModel.ts +648 -0
  112. package/lib/front_end/core/sdk/EnhancedTracesParser.ts +515 -0
  113. package/lib/front_end/core/sdk/EventBreakpointsModel.ts +183 -0
  114. package/lib/front_end/core/sdk/FrameAssociated.ts +11 -0
  115. package/lib/front_end/core/sdk/FrameManager.ts +259 -0
  116. package/lib/front_end/core/sdk/HeapProfilerModel.ts +225 -0
  117. package/lib/front_end/core/sdk/HttpReasonPhraseStrings.ts +77 -0
  118. package/lib/front_end/core/sdk/IOModel.ts +91 -0
  119. package/lib/front_end/core/sdk/IsolateManager.ts +257 -0
  120. package/lib/front_end/core/sdk/IssuesModel.ts +70 -0
  121. package/lib/front_end/core/sdk/LayerTreeBase.ts +169 -0
  122. package/lib/front_end/core/sdk/LogModel.ts +56 -0
  123. package/lib/front_end/core/sdk/NetworkManager.ts +2823 -0
  124. package/lib/front_end/core/sdk/NetworkRequest.ts +2253 -0
  125. package/lib/front_end/core/sdk/OverlayColorGenerator.ts +52 -0
  126. package/lib/front_end/core/sdk/OverlayModel.ts +1011 -0
  127. package/lib/front_end/core/sdk/OverlayPersistentHighlighter.ts +522 -0
  128. package/lib/front_end/core/sdk/PageLoad.ts +35 -0
  129. package/lib/front_end/core/sdk/PageResourceLoader.ts +435 -0
  130. package/lib/front_end/core/sdk/PaintProfiler.ts +110 -0
  131. package/lib/front_end/core/sdk/PerformanceMetricsModel.ts +84 -0
  132. package/lib/front_end/core/sdk/PreloadingModel.ts +863 -0
  133. package/lib/front_end/core/sdk/RehydratingConnection.ts +386 -0
  134. package/lib/front_end/core/sdk/RehydratingObject.ts +66 -0
  135. package/lib/front_end/core/sdk/RemoteObject.ts +1160 -0
  136. package/lib/front_end/core/sdk/Resource.ts +232 -0
  137. package/lib/front_end/core/sdk/ResourceTreeModel.ts +1160 -0
  138. package/lib/front_end/core/sdk/RuntimeModel.ts +732 -0
  139. package/lib/front_end/core/sdk/SDKModel.ts +65 -0
  140. package/lib/front_end/core/sdk/ScopeTreeCache.ts +45 -0
  141. package/lib/front_end/core/sdk/ScreenCaptureModel.ts +255 -0
  142. package/lib/front_end/core/sdk/Script.ts +534 -0
  143. package/lib/front_end/core/sdk/SecurityOriginManager.ts +76 -0
  144. package/lib/front_end/core/sdk/ServerSentEvents.ts +80 -0
  145. package/lib/front_end/core/sdk/ServerSentEventsProtocol.ts +122 -0
  146. package/lib/front_end/core/sdk/ServerTiming.ts +260 -0
  147. package/lib/front_end/core/sdk/ServiceWorkerCacheModel.ts +377 -0
  148. package/lib/front_end/core/sdk/ServiceWorkerManager.ts +605 -0
  149. package/lib/front_end/core/sdk/SourceMap.ts +867 -0
  150. package/lib/front_end/core/sdk/SourceMapCache.ts +54 -0
  151. package/lib/front_end/core/sdk/SourceMapFunctionRanges.ts +156 -0
  152. package/lib/front_end/core/sdk/SourceMapManager.ts +239 -0
  153. package/lib/front_end/core/sdk/SourceMapScopeChainEntry.ts +189 -0
  154. package/lib/front_end/core/sdk/SourceMapScopesInfo.ts +508 -0
  155. package/lib/front_end/core/sdk/StorageBucketsModel.ts +204 -0
  156. package/lib/front_end/core/sdk/StorageKeyManager.ts +98 -0
  157. package/lib/front_end/core/sdk/Target.ts +332 -0
  158. package/lib/front_end/core/sdk/TargetManager.ts +453 -0
  159. package/lib/front_end/core/sdk/TraceObject.ts +61 -0
  160. package/lib/front_end/core/sdk/WebAuthnModel.ts +104 -0
  161. package/lib/front_end/core/sdk/sdk.ts +174 -0
  162. package/lib/front_end/entrypoints/formatter_worker/FormatterActions.ts +59 -0
  163. package/lib/front_end/generated/InspectorBackendCommands.js +1617 -0
  164. package/lib/front_end/generated/SupportedCSSProperties.js +7512 -0
  165. package/lib/front_end/generated/protocol-proxy-api.d.ts +5022 -0
  166. package/lib/front_end/generated/protocol.ts +22014 -0
  167. package/lib/front_end/models/cpu_profile/CPUProfileDataModel.ts +571 -0
  168. package/lib/front_end/models/cpu_profile/ProfileTreeModel.ts +103 -0
  169. package/lib/front_end/models/cpu_profile/cpu_profile.ts +11 -0
  170. package/lib/front_end/models/formatter/FormatterWorkerPool.ts +219 -0
  171. package/lib/front_end/models/formatter/ScriptFormatter.ts +112 -0
  172. package/lib/front_end/models/formatter/formatter.ts +8 -0
  173. package/lib/front_end/models/text_utils/CodeMirrorUtils.ts +37 -0
  174. package/lib/front_end/models/text_utils/ContentData.ts +199 -0
  175. package/lib/front_end/models/text_utils/ContentProvider.ts +68 -0
  176. package/lib/front_end/models/text_utils/StaticContentProvider.ts +49 -0
  177. package/lib/front_end/models/text_utils/StreamingContentData.ts +108 -0
  178. package/lib/front_end/models/text_utils/Text.ts +90 -0
  179. package/lib/front_end/models/text_utils/TextCursor.ts +44 -0
  180. package/lib/front_end/models/text_utils/TextRange.ts +266 -0
  181. package/lib/front_end/models/text_utils/TextUtils.ts +401 -0
  182. package/lib/front_end/models/text_utils/WasmDisassembly.ts +87 -0
  183. package/lib/front_end/models/text_utils/text_utils.ts +27 -0
  184. package/lib/front_end/models/trace/EntityMapper.ts +141 -0
  185. package/lib/front_end/models/trace/EventsSerializer.ts +101 -0
  186. package/lib/front_end/models/trace/LanternComputationData.ts +438 -0
  187. package/lib/front_end/models/trace/ModelImpl.ts +236 -0
  188. package/lib/front_end/models/trace/Name.ts +136 -0
  189. package/lib/front_end/models/trace/Processor.ts +652 -0
  190. package/lib/front_end/models/trace/Styles.ts +1138 -0
  191. package/lib/front_end/models/trace/extras/FilmStrip.ts +78 -0
  192. package/lib/front_end/models/trace/extras/MainThreadActivity.ts +86 -0
  193. package/lib/front_end/models/trace/extras/ScriptDuplication.ts +236 -0
  194. package/lib/front_end/models/trace/extras/StackTraceForEvent.ts +203 -0
  195. package/lib/front_end/models/trace/extras/ThirdParties.ts +164 -0
  196. package/lib/front_end/models/trace/extras/TraceFilter.ts +62 -0
  197. package/lib/front_end/models/trace/extras/TraceTree.ts +701 -0
  198. package/lib/front_end/models/trace/extras/extras.ts +11 -0
  199. package/lib/front_end/models/trace/handlers/AnimationFramesHandler.ts +128 -0
  200. package/lib/front_end/models/trace/handlers/AnimationHandler.ts +36 -0
  201. package/lib/front_end/models/trace/handlers/AsyncJSCallsHandler.ts +239 -0
  202. package/lib/front_end/models/trace/handlers/AuctionWorkletsHandler.ts +183 -0
  203. package/lib/front_end/models/trace/handlers/DOMStatsHandler.ts +31 -0
  204. package/lib/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +306 -0
  205. package/lib/front_end/models/trace/handlers/FlowsHandler.ts +175 -0
  206. package/lib/front_end/models/trace/handlers/FramesHandler.ts +571 -0
  207. package/lib/front_end/models/trace/handlers/GPUHandler.ts +50 -0
  208. package/lib/front_end/models/trace/handlers/ImagePaintingHandler.ts +183 -0
  209. package/lib/front_end/models/trace/handlers/InitiatorsHandler.ts +193 -0
  210. package/lib/front_end/models/trace/handlers/InvalidationsHandler.ts +168 -0
  211. package/lib/front_end/models/trace/handlers/LargestImagePaintHandler.ts +109 -0
  212. package/lib/front_end/models/trace/handlers/LargestTextPaintHandler.ts +35 -0
  213. package/lib/front_end/models/trace/handlers/LayerTreeHandler.ts +123 -0
  214. package/lib/front_end/models/trace/handlers/LayoutShiftsHandler.ts +573 -0
  215. package/lib/front_end/models/trace/handlers/MemoryHandler.ts +31 -0
  216. package/lib/front_end/models/trace/handlers/MetaHandler.ts +525 -0
  217. package/lib/front_end/models/trace/handlers/ModelHandlers.ts +34 -0
  218. package/lib/front_end/models/trace/handlers/NetworkRequestsHandler.ts +672 -0
  219. package/lib/front_end/models/trace/handlers/PageFramesHandler.ts +52 -0
  220. package/lib/front_end/models/trace/handlers/PageLoadMetricsHandler.ts +460 -0
  221. package/lib/front_end/models/trace/handlers/RendererHandler.ts +428 -0
  222. package/lib/front_end/models/trace/handlers/SamplesHandler.ts +271 -0
  223. package/lib/front_end/models/trace/handlers/ScreenshotsHandler.ts +122 -0
  224. package/lib/front_end/models/trace/handlers/ScriptsHandler.ts +336 -0
  225. package/lib/front_end/models/trace/handlers/SelectorStatsHandler.ts +110 -0
  226. package/lib/front_end/models/trace/handlers/Threads.ts +139 -0
  227. package/lib/front_end/models/trace/handlers/UserInteractionsHandler.ts +400 -0
  228. package/lib/front_end/models/trace/handlers/UserTimingsHandler.ts +233 -0
  229. package/lib/front_end/models/trace/handlers/WarningsHandler.ts +162 -0
  230. package/lib/front_end/models/trace/handlers/WorkersHandler.ts +45 -0
  231. package/lib/front_end/models/trace/handlers/handlers.ts +8 -0
  232. package/lib/front_end/models/trace/handlers/helpers.ts +196 -0
  233. package/lib/front_end/models/trace/handlers/types.ts +75 -0
  234. package/lib/front_end/models/trace/helpers/Extensions.ts +54 -0
  235. package/lib/front_end/models/trace/helpers/Network.ts +129 -0
  236. package/lib/front_end/models/trace/helpers/SamplesIntegrator.ts +544 -0
  237. package/lib/front_end/models/trace/helpers/SyntheticEvents.ts +87 -0
  238. package/lib/front_end/models/trace/helpers/Timing.ts +248 -0
  239. package/lib/front_end/models/trace/helpers/Trace.ts +928 -0
  240. package/lib/front_end/models/trace/helpers/TreeHelpers.ts +320 -0
  241. package/lib/front_end/models/trace/helpers/helpers.ts +11 -0
  242. package/lib/front_end/models/trace/insights/CLSCulprits.ts +668 -0
  243. package/lib/front_end/models/trace/insights/Cache.ts +269 -0
  244. package/lib/front_end/models/trace/insights/Common.ts +453 -0
  245. package/lib/front_end/models/trace/insights/DOMSize.ts +223 -0
  246. package/lib/front_end/models/trace/insights/DocumentLatency.ts +319 -0
  247. package/lib/front_end/models/trace/insights/DuplicatedJavaScript.ts +126 -0
  248. package/lib/front_end/models/trace/insights/FontDisplay.ts +119 -0
  249. package/lib/front_end/models/trace/insights/ForcedReflow.ts +220 -0
  250. package/lib/front_end/models/trace/insights/INPBreakdown.ts +171 -0
  251. package/lib/front_end/models/trace/insights/ImageDelivery.ts +348 -0
  252. package/lib/front_end/models/trace/insights/LCPBreakdown.ts +268 -0
  253. package/lib/front_end/models/trace/insights/LCPDiscovery.ts +237 -0
  254. package/lib/front_end/models/trace/insights/LegacyJavaScript.ts +138 -0
  255. package/lib/front_end/models/trace/insights/Models.ts +22 -0
  256. package/lib/front_end/models/trace/insights/ModernHTTP.ts +257 -0
  257. package/lib/front_end/models/trace/insights/NetworkDependencyTree.ts +726 -0
  258. package/lib/front_end/models/trace/insights/RenderBlocking.ts +257 -0
  259. package/lib/front_end/models/trace/insights/SlowCSSSelector.ts +175 -0
  260. package/lib/front_end/models/trace/insights/Statistics.ts +101 -0
  261. package/lib/front_end/models/trace/insights/ThirdParties.ts +130 -0
  262. package/lib/front_end/models/trace/insights/Viewport.ts +138 -0
  263. package/lib/front_end/models/trace/insights/insights.ts +10 -0
  264. package/lib/front_end/models/trace/insights/types.ts +157 -0
  265. package/lib/front_end/models/trace/lantern/core/LanternError.ts +7 -0
  266. package/lib/front_end/models/trace/lantern/core/NetworkAnalyzer.ts +619 -0
  267. package/lib/front_end/models/trace/lantern/core/core.ts +6 -0
  268. package/lib/front_end/models/trace/lantern/graph/BaseNode.ts +345 -0
  269. package/lib/front_end/models/trace/lantern/graph/CPUNode.ts +80 -0
  270. package/lib/front_end/models/trace/lantern/graph/NetworkNode.ts +101 -0
  271. package/lib/front_end/models/trace/lantern/graph/PageDependencyGraph.ts +636 -0
  272. package/lib/front_end/models/trace/lantern/graph/graph.ts +8 -0
  273. package/lib/front_end/models/trace/lantern/lantern.ts +17 -0
  274. package/lib/front_end/models/trace/lantern/metrics/FirstContentfulPaint.ts +187 -0
  275. package/lib/front_end/models/trace/lantern/metrics/Interactive.ts +88 -0
  276. package/lib/front_end/models/trace/lantern/metrics/LargestContentfulPaint.ts +92 -0
  277. package/lib/front_end/models/trace/lantern/metrics/MaxPotentialFID.ts +72 -0
  278. package/lib/front_end/models/trace/lantern/metrics/Metric.ts +126 -0
  279. package/lib/front_end/models/trace/lantern/metrics/SpeedIndex.ts +126 -0
  280. package/lib/front_end/models/trace/lantern/metrics/TBTUtils.ts +82 -0
  281. package/lib/front_end/models/trace/lantern/metrics/TotalBlockingTime.ts +112 -0
  282. package/lib/front_end/models/trace/lantern/metrics/metrics.ts +12 -0
  283. package/lib/front_end/models/trace/lantern/simulation/ConnectionPool.ts +150 -0
  284. package/lib/front_end/models/trace/lantern/simulation/Constants.ts +46 -0
  285. package/lib/front_end/models/trace/lantern/simulation/DNSCache.ts +61 -0
  286. package/lib/front_end/models/trace/lantern/simulation/SimulationTimingMap.ts +196 -0
  287. package/lib/front_end/models/trace/lantern/simulation/Simulator.ts +556 -0
  288. package/lib/front_end/models/trace/lantern/simulation/TCPConnection.ts +192 -0
  289. package/lib/front_end/models/trace/lantern/simulation/simulation.ts +10 -0
  290. package/lib/front_end/models/trace/lantern/types/Lantern.ts +220 -0
  291. package/lib/front_end/models/trace/lantern/types/types.ts +5 -0
  292. package/lib/front_end/models/trace/trace.ts +33 -0
  293. package/lib/front_end/models/trace/types/Configuration.ts +110 -0
  294. package/lib/front_end/models/trace/types/Extensions.ts +136 -0
  295. package/lib/front_end/models/trace/types/File.ts +281 -0
  296. package/lib/front_end/models/trace/types/Overlays.ts +138 -0
  297. package/lib/front_end/models/trace/types/Timing.ts +30 -0
  298. package/lib/front_end/models/trace/types/TraceEvents.ts +3277 -0
  299. package/lib/front_end/models/trace/types/types.ts +10 -0
  300. package/lib/front_end/third_party/i18n/LICENSE +202 -0
  301. package/lib/front_end/third_party/i18n/README.chromium +15 -0
  302. package/lib/front_end/third_party/i18n/i18n-impl.ts +61 -0
  303. package/lib/front_end/third_party/i18n/i18n.ts +11 -0
  304. package/lib/front_end/third_party/i18n/localized-string-set.ts +129 -0
  305. package/lib/front_end/third_party/intl-messageformat/LICENSE +33 -0
  306. package/lib/front_end/third_party/intl-messageformat/README.chromium +24 -0
  307. package/lib/front_end/third_party/intl-messageformat/intl-messageformat-tsconfig.json +16 -0
  308. package/lib/front_end/third_party/intl-messageformat/intl-messageformat.ts +6 -0
  309. package/lib/front_end/third_party/intl-messageformat/package/LICENSE.md +33 -0
  310. package/lib/front_end/third_party/intl-messageformat/package/README.md +3 -0
  311. package/lib/front_end/third_party/intl-messageformat/package/index.d.ts +6 -0
  312. package/lib/front_end/third_party/intl-messageformat/package/index.d.ts.map +1 -0
  313. package/lib/front_end/third_party/intl-messageformat/package/index.js +13 -0
  314. package/lib/front_end/third_party/intl-messageformat/package/intl-messageformat.esm.d.ts +5 -0
  315. package/lib/front_end/third_party/intl-messageformat/package/intl-messageformat.esm.js +1710 -0
  316. package/lib/front_end/third_party/intl-messageformat/package/intl-messageformat.iife.js +1815 -0
  317. package/lib/front_end/third_party/intl-messageformat/package/lib/index.d.ts +6 -0
  318. package/lib/front_end/third_party/intl-messageformat/package/lib/index.d.ts.map +1 -0
  319. package/lib/front_end/third_party/intl-messageformat/package/lib/index.js +10 -0
  320. package/lib/front_end/third_party/intl-messageformat/package/lib/src/core.d.ts +34 -0
  321. package/lib/front_end/third_party/intl-messageformat/package/lib/src/core.d.ts.map +1 -0
  322. package/lib/front_end/third_party/intl-messageformat/package/lib/src/core.js +229 -0
  323. package/lib/front_end/third_party/intl-messageformat/package/lib/src/error.d.ts +28 -0
  324. package/lib/front_end/third_party/intl-messageformat/package/lib/src/error.d.ts.map +1 -0
  325. package/lib/front_end/third_party/intl-messageformat/package/lib/src/error.js +48 -0
  326. package/lib/front_end/third_party/intl-messageformat/package/lib/src/formatters.d.ts +34 -0
  327. package/lib/front_end/third_party/intl-messageformat/package/lib/src/formatters.d.ts.map +1 -0
  328. package/lib/front_end/third_party/intl-messageformat/package/lib/src/formatters.js +179 -0
  329. package/lib/front_end/third_party/intl-messageformat/package/package.json +42 -0
  330. package/lib/front_end/third_party/intl-messageformat/package/src/core.d.ts +34 -0
  331. package/lib/front_end/third_party/intl-messageformat/package/src/core.d.ts.map +1 -0
  332. package/lib/front_end/third_party/intl-messageformat/package/src/core.js +230 -0
  333. package/lib/front_end/third_party/intl-messageformat/package/src/error.d.ts +28 -0
  334. package/lib/front_end/third_party/intl-messageformat/package/src/error.d.ts.map +1 -0
  335. package/lib/front_end/third_party/intl-messageformat/package/src/error.js +51 -0
  336. package/lib/front_end/third_party/intl-messageformat/package/src/formatters.d.ts +34 -0
  337. package/lib/front_end/third_party/intl-messageformat/package/src/formatters.d.ts.map +1 -0
  338. package/lib/front_end/third_party/intl-messageformat/package/src/formatters.js +182 -0
  339. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/error.d.ts +79 -0
  340. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/index.d.ts +15 -0
  341. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/parser.d.ts +153 -0
  342. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/types.d.ts +139 -0
  343. package/lib/front_end/third_party/legacy-javascript/LICENSE +202 -0
  344. package/lib/front_end/third_party/legacy-javascript/README.chromium +13 -0
  345. package/lib/front_end/third_party/legacy-javascript/legacy-javascript-tsconfig.json +8 -0
  346. package/lib/front_end/third_party/legacy-javascript/legacy-javascript.ts +3 -0
  347. package/lib/front_end/third_party/legacy-javascript/lib/legacy-javascript.d.ts +18 -0
  348. package/lib/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +943 -0
  349. package/lib/front_end/third_party/legacy-javascript/package.json +8 -0
  350. package/lib/front_end/third_party/legacy-javascript/rebuild.sh +9 -0
  351. package/lib/front_end/third_party/third-party-web/LICENSE +20 -0
  352. package/lib/front_end/third_party/third-party-web/README.chromium +13 -0
  353. package/lib/front_end/third_party/third-party-web/lib/nostats-subset.d.ts +2 -0
  354. package/lib/front_end/third_party/third-party-web/lib/nostats-subset.js +149 -0
  355. package/lib/front_end/third_party/third-party-web/package/LICENSE +20 -0
  356. package/lib/front_end/third_party/third-party-web/package/README.md +929 -0
  357. package/lib/front_end/third_party/third-party-web/package/dist/entities-httparchive-nostats.json +1 -0
  358. package/lib/front_end/third_party/third-party-web/package/dist/entities-httparchive.json +1 -0
  359. package/lib/front_end/third_party/third-party-web/package/dist/entities-nostats.json +1 -0
  360. package/lib/front_end/third_party/third-party-web/package/dist/entities.json +1 -0
  361. package/lib/front_end/third_party/third-party-web/package/facades.md +46 -0
  362. package/lib/front_end/third_party/third-party-web/package/httparchive-nostats-subset.d.ts +1 -0
  363. package/lib/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +1 -0
  364. package/lib/front_end/third_party/third-party-web/package/httparchive-subset.d.ts +1 -0
  365. package/lib/front_end/third_party/third-party-web/package/httparchive-subset.js +1 -0
  366. package/lib/front_end/third_party/third-party-web/package/lib/__snapshots__/index.test.js.snap +1006 -0
  367. package/lib/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +139 -0
  368. package/lib/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +44 -0
  369. package/lib/front_end/third_party/third-party-web/package/lib/entities.test.js +27 -0
  370. package/lib/front_end/third_party/third-party-web/package/lib/index.d.ts +34 -0
  371. package/lib/front_end/third_party/third-party-web/package/lib/index.js +3 -0
  372. package/lib/front_end/third_party/third-party-web/package/lib/index.test.js +246 -0
  373. package/lib/front_end/third_party/third-party-web/package/lib/markdown/faqs.partial.md +36 -0
  374. package/lib/front_end/third_party/third-party-web/package/lib/markdown/goals.partial.md +9 -0
  375. package/lib/front_end/third_party/third-party-web/package/lib/markdown/methodology.partial.md +5 -0
  376. package/lib/front_end/third_party/third-party-web/package/lib/markdown/template.md +151 -0
  377. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-02-01.md +1 -0
  378. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-03-01.md +1 -0
  379. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-05-06.md +1 -0
  380. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-05-13.md +14 -0
  381. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2021-01-01.md +1 -0
  382. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2024-07-01.md +3 -0
  383. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.d.ts +1 -0
  384. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +3 -0
  385. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive.d.ts +1 -0
  386. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +3 -0
  387. package/lib/front_end/third_party/third-party-web/package/lib/subsets/nostats.d.ts +1 -0
  388. package/lib/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +3 -0
  389. package/lib/front_end/third_party/third-party-web/package/nostats-subset.d.ts +1 -0
  390. package/lib/front_end/third_party/third-party-web/package/nostats-subset.js +1 -0
  391. package/lib/front_end/third_party/third-party-web/package/package.json +46 -0
  392. package/lib/front_end/third_party/third-party-web/package.json +8 -0
  393. package/lib/front_end/third_party/third-party-web/rebuild.sh +13 -0
  394. package/lib/front_end/third_party/third-party-web/third-party-web-tsconfig.json +8 -0
  395. package/lib/front_end/third_party/third-party-web/third-party-web.ts +3 -0
  396. package/package.json +24 -0
  397. package/patches/chrome-devtools-frontend+1.0.1533544.patch +187 -0
@@ -0,0 +1,219 @@
1
+ // Copyright 2016 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
+
5
+ import * as Common from '../../core/common/common.js';
6
+ import * as FormatterActions from '../../entrypoints/formatter_worker/FormatterActions.js'; // eslint-disable-line @devtools/es-modules-import
7
+
8
+ export {DefinitionKind, ScopeKind, type ScopeTreeNode} from '../../entrypoints/formatter_worker/FormatterActions.js';
9
+
10
+ let formatterWorkerPoolInstance: FormatterWorkerPool|undefined;
11
+
12
+ export class FormatterWorkerPool {
13
+ private taskQueue: Task[];
14
+ private workerTasks: Map<Common.Worker.WorkerWrapper, Task|null>;
15
+
16
+ constructor() {
17
+ this.taskQueue = [];
18
+ this.workerTasks = new Map();
19
+ }
20
+
21
+ static instance(): FormatterWorkerPool {
22
+ if (!formatterWorkerPoolInstance) {
23
+ formatterWorkerPoolInstance = new FormatterWorkerPool();
24
+ }
25
+
26
+ return formatterWorkerPoolInstance;
27
+ }
28
+
29
+ dispose(): void {
30
+ for (const task of this.taskQueue) {
31
+ console.error('rejecting task');
32
+ task.errorCallback(new Event('Worker terminated'));
33
+ }
34
+ for (const [worker, task] of this.workerTasks.entries()) {
35
+ task?.errorCallback(new Event('Worker terminated'));
36
+ worker.terminate(/* immediately=*/ true);
37
+ }
38
+ }
39
+
40
+ static removeInstance(): void {
41
+ formatterWorkerPoolInstance?.dispose();
42
+ formatterWorkerPoolInstance = undefined;
43
+ }
44
+
45
+ private createWorker(): Common.Worker.WorkerWrapper {
46
+ const worker = Common.Worker.WorkerWrapper.fromURL(
47
+ new URL('../../entrypoints/formatter_worker/formatter_worker-entrypoint.js', import.meta.url));
48
+ worker.onmessage = this.onWorkerMessage.bind(this, worker);
49
+ worker.onerror = this.onWorkerError.bind(this, worker);
50
+ return worker;
51
+ }
52
+
53
+ private processNextTask(): void {
54
+ const maxWorkers = Math.max(2, navigator.hardwareConcurrency - 1);
55
+
56
+ if (!this.taskQueue.length) {
57
+ return;
58
+ }
59
+
60
+ let freeWorker = [...this.workerTasks.keys()].find(worker => !this.workerTasks.get(worker));
61
+ if (!freeWorker && this.workerTasks.size < maxWorkers) {
62
+ freeWorker = this.createWorker();
63
+ }
64
+ if (!freeWorker) {
65
+ return;
66
+ }
67
+
68
+ const task = this.taskQueue.shift();
69
+ if (task) {
70
+ this.workerTasks.set(freeWorker, task);
71
+ freeWorker.postMessage({method: task.method, params: task.params});
72
+ }
73
+ }
74
+
75
+ private onWorkerMessage(worker: Common.Worker.WorkerWrapper, event: MessageEvent): void {
76
+ const task = this.workerTasks.get(worker);
77
+ if (!task) {
78
+ return;
79
+ }
80
+ if (task.isChunked && event.data && !event.data['isLastChunk']) {
81
+ task.callback(event.data);
82
+ return;
83
+ }
84
+
85
+ this.workerTasks.set(worker, null);
86
+ this.processNextTask();
87
+ task.callback(event.data ? event.data : null);
88
+ }
89
+
90
+ private onWorkerError(worker: Common.Worker.WorkerWrapper, event: Event): void {
91
+ console.error(event);
92
+ const task = this.workerTasks.get(worker);
93
+ worker.terminate();
94
+ this.workerTasks.delete(worker);
95
+
96
+ const newWorker = this.createWorker();
97
+ this.workerTasks.set(newWorker, null);
98
+ this.processNextTask();
99
+ if (task) {
100
+ task.errorCallback(event);
101
+ }
102
+ }
103
+
104
+ private runChunkedTask(
105
+ methodName: string, params: Record<string, string>, callback: (arg0: boolean, arg1: unknown) => void): void {
106
+ const task = new Task(methodName, params, onData, () => onData(null), true);
107
+ this.taskQueue.push(task);
108
+ this.processNextTask();
109
+
110
+ function onData(data: Object|null): void {
111
+ if (!data) {
112
+ callback(true, null);
113
+ return;
114
+ }
115
+ const isLastChunk = 'isLastChunk' in data && Boolean(data['isLastChunk']);
116
+ const chunk = 'chunk' in data && data['chunk'];
117
+ callback(isLastChunk, chunk);
118
+ }
119
+ }
120
+
121
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
122
+ private runTask(methodName: FormatterActions.FormatterActions, params: Record<string, unknown>): Promise<any> {
123
+ return new Promise((resolve, reject) => {
124
+ const task = new Task(methodName, params, resolve, reject, false);
125
+ this.taskQueue.push(task);
126
+ this.processNextTask();
127
+ });
128
+ }
129
+
130
+ format(mimeType: string, content: string, indentString: string): Promise<FormatterActions.FormatResult> {
131
+ const parameters = {mimeType, content, indentString};
132
+ return this.runTask(FormatterActions.FormatterActions.FORMAT, parameters) as Promise<FormatterActions.FormatResult>;
133
+ }
134
+
135
+ javaScriptSubstitute(expression: string, mapping: Map<string, string|null>): Promise<string> {
136
+ if (mapping.size === 0) {
137
+ return Promise.resolve(expression);
138
+ }
139
+ return this.runTask(FormatterActions.FormatterActions.JAVASCRIPT_SUBSTITUTE, {content: expression, mapping})
140
+ .then(result => result || '');
141
+ }
142
+
143
+ javaScriptScopeTree(expression: string, sourceType: 'module'|'script' = 'script'):
144
+ Promise<FormatterActions.ScopeTreeNode|null> {
145
+ return this.runTask(FormatterActions.FormatterActions.JAVASCRIPT_SCOPE_TREE, {content: expression, sourceType})
146
+ .then(result => result || null);
147
+ }
148
+
149
+ parseCSS(content: string, callback: (arg0: boolean, arg1: CSSRule[]) => void): void {
150
+ this.runChunkedTask(FormatterActions.FormatterActions.PARSE_CSS, {content}, onDataChunk);
151
+
152
+ // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration
153
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
154
+ function onDataChunk(isLastChunk: boolean, data: any): void {
155
+ const rules = (data || [] as CSSRule[]);
156
+ callback(isLastChunk, rules);
157
+ }
158
+ }
159
+ }
160
+
161
+ class Task {
162
+ method: string;
163
+ params: unknown;
164
+ callback: (arg0: MessageEvent|null) => void;
165
+ errorCallback: (arg0: Event) => void;
166
+ isChunked: boolean|undefined;
167
+ constructor(
168
+ method: string, params: unknown, callback: (arg0: MessageEvent|null) => void,
169
+ errorCallback: (arg0: Event) => void, isChunked?: boolean) {
170
+ this.method = method;
171
+ this.params = params;
172
+ this.callback = callback;
173
+ this.errorCallback = errorCallback;
174
+ this.isChunked = isChunked;
175
+ }
176
+ }
177
+
178
+ interface CSSProperty {
179
+ name: string;
180
+ nameRange: TextRange;
181
+ value: string;
182
+ valueRange: TextRange;
183
+ range: TextRange;
184
+ disabled?: boolean;
185
+ }
186
+
187
+ export function formatterWorkerPool(): FormatterWorkerPool {
188
+ return FormatterWorkerPool.instance();
189
+ }
190
+
191
+ export interface OutlineItem {
192
+ line: number;
193
+ column: number;
194
+ title: string;
195
+ subtitle?: string;
196
+ }
197
+
198
+ export interface CSSStyleRule {
199
+ selectorText: string;
200
+ styleRange: TextRange;
201
+ lineNumber: number;
202
+ columnNumber: number;
203
+ properties: CSSProperty[];
204
+ }
205
+
206
+ export interface CSSAtRule {
207
+ atRule: string;
208
+ lineNumber: number;
209
+ columnNumber: number;
210
+ }
211
+
212
+ export type CSSRule = CSSStyleRule|CSSAtRule;
213
+
214
+ export interface TextRange {
215
+ startLine: number;
216
+ startColumn: number;
217
+ endLine: number;
218
+ endColumn: number;
219
+ }
@@ -0,0 +1,112 @@
1
+ // Copyright 2011 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
+
5
+ import * as Common from '../../core/common/common.js';
6
+ import * as Platform from '../../core/platform/platform.js';
7
+ import type * as FormatterActions from '../../entrypoints/formatter_worker/FormatterActions.js';
8
+
9
+ import {formatterWorkerPool} from './FormatterWorkerPool.js';
10
+
11
+ function locationToPosition(lineEndings: number[], lineNumber: number, columnNumber: number): number {
12
+ const position = lineNumber ? lineEndings[lineNumber - 1] + 1 : 0;
13
+ return position + columnNumber;
14
+ }
15
+
16
+ function positionToLocation(lineEndings: number[], position: number): number[] {
17
+ const lineNumber =
18
+ Platform.ArrayUtilities.upperBound(lineEndings, position - 1, Platform.ArrayUtilities.DEFAULT_COMPARATOR);
19
+ let columnNumber;
20
+ if (!lineNumber) {
21
+ columnNumber = position;
22
+ } else {
23
+ columnNumber = position - lineEndings[lineNumber - 1] - 1;
24
+ }
25
+ return [lineNumber, columnNumber];
26
+ }
27
+
28
+ export interface FormattedContent {
29
+ formattedContent: string;
30
+ formattedMapping: FormatterSourceMapping;
31
+ }
32
+
33
+ export async function format(
34
+ contentType: Common.ResourceType.ResourceType, mimeType: string, content: string,
35
+ indent: string =
36
+ Common.Settings.Settings.instance().moduleSetting('text-editor-indent').get()): Promise<FormattedContent> {
37
+ if (contentType.isDocumentOrScriptOrStyleSheet()) {
38
+ return await formatScriptContent(mimeType, content, indent);
39
+ }
40
+
41
+ return {formattedContent: content, formattedMapping: new IdentityFormatterSourceMapping()};
42
+ }
43
+
44
+ export async function formatScriptContent(
45
+ mimeType: string, content: string,
46
+ indent: string =
47
+ Common.Settings.Settings.instance().moduleSetting('text-editor-indent').get()): Promise<FormattedContent> {
48
+ const originalContent = content.replace(/\r\n?|[\n\u2028\u2029]/g, '\n').replace(/^\uFEFF/, '');
49
+
50
+ const pool = formatterWorkerPool();
51
+
52
+ let formatResult: FormatterActions.FormatResult = {content: originalContent, mapping: {original: [], formatted: []}};
53
+ try {
54
+ formatResult = await pool.format(mimeType, originalContent, indent);
55
+ } catch {
56
+ }
57
+ const originalContentLineEndings = Platform.StringUtilities.findLineEndingIndexes(originalContent);
58
+ const formattedContentLineEndings = Platform.StringUtilities.findLineEndingIndexes(formatResult.content);
59
+
60
+ const sourceMapping =
61
+ new FormatterSourceMappingImpl(originalContentLineEndings, formattedContentLineEndings, formatResult.mapping);
62
+ return {formattedContent: formatResult.content, formattedMapping: sourceMapping};
63
+ }
64
+
65
+ export interface FormatterSourceMapping {
66
+ originalToFormatted(lineNumber: number, columnNumber?: number): number[];
67
+ formattedToOriginal(lineNumber: number, columnNumber?: number): number[];
68
+ }
69
+
70
+ class IdentityFormatterSourceMapping implements FormatterSourceMapping {
71
+ originalToFormatted(lineNumber: number, columnNumber = 0): number[] {
72
+ return [lineNumber, columnNumber];
73
+ }
74
+
75
+ formattedToOriginal(lineNumber: number, columnNumber = 0): number[] {
76
+ return [lineNumber, columnNumber];
77
+ }
78
+ }
79
+
80
+ class FormatterSourceMappingImpl implements FormatterSourceMapping {
81
+ private readonly originalLineEndings: number[];
82
+ private readonly formattedLineEndings: number[];
83
+ private readonly mapping: FormatterActions.FormatMapping;
84
+
85
+ constructor(originalLineEndings: number[], formattedLineEndings: number[], mapping: FormatterActions.FormatMapping) {
86
+ this.originalLineEndings = originalLineEndings;
87
+ this.formattedLineEndings = formattedLineEndings;
88
+ this.mapping = mapping;
89
+ }
90
+
91
+ originalToFormatted(lineNumber: number, columnNumber?: number): number[] {
92
+ const originalPosition = locationToPosition(this.originalLineEndings, lineNumber, columnNumber || 0);
93
+ const formattedPosition = this.convertPosition(this.mapping.original, this.mapping.formatted, originalPosition);
94
+ return positionToLocation(this.formattedLineEndings, formattedPosition);
95
+ }
96
+
97
+ formattedToOriginal(lineNumber: number, columnNumber?: number): number[] {
98
+ const formattedPosition = locationToPosition(this.formattedLineEndings, lineNumber, columnNumber || 0);
99
+ const originalPosition = this.convertPosition(this.mapping.formatted, this.mapping.original, formattedPosition);
100
+ return positionToLocation(this.originalLineEndings, originalPosition);
101
+ }
102
+
103
+ private convertPosition(positions1: number[], positions2: number[], position: number): number {
104
+ const index =
105
+ Platform.ArrayUtilities.upperBound(positions1, position, Platform.ArrayUtilities.DEFAULT_COMPARATOR) - 1;
106
+ let convertedPosition: number = positions2[index] + position - positions1[index];
107
+ if (index < positions2.length - 1 && convertedPosition > positions2[index + 1]) {
108
+ convertedPosition = positions2[index + 1];
109
+ }
110
+ return convertedPosition;
111
+ }
112
+ }
@@ -0,0 +1,8 @@
1
+ // Copyright 2019 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
+
5
+ import * as FormatterWorkerPool from './FormatterWorkerPool.js';
6
+ import * as ScriptFormatter from './ScriptFormatter.js';
7
+
8
+ export {FormatterWorkerPool, ScriptFormatter};
@@ -0,0 +1,37 @@
1
+ // Copyright 2022 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import * as CodeMirror from '../../third_party/codemirror.next/codemirror.next.js';
6
+
7
+ type Tokenizer = (line: string, callback: (value: string, style: string|null) => void) => Promise<void>;
8
+
9
+ export function createCssTokenizer(): Tokenizer {
10
+ async function tokenize(line: string, callback: (value: string, style: string|null) => void): Promise<void> {
11
+ const streamParser = await CodeMirror.cssStreamParser();
12
+ const stream = new CodeMirror.StringStream(line, 4, 2);
13
+
14
+ const state = streamParser.startState(2);
15
+ let lastPos = stream.pos;
16
+ while (!stream.eol()) {
17
+ stream.start = lastPos;
18
+ let tokenType = streamParser.token(stream, state);
19
+ /**
20
+ * We expect unknown properties (like `unknownProp: unknownPropVal`) to still be
21
+ * formatted correctly. However, `tokenType` for such properties are marked
22
+ * as `error` from CodeMirror side and the internal state of the parser becomes `maybeprop`.
23
+ *
24
+ * So, we handle that specific keyword to be marked as `property` even though it is
25
+ * not a known property. We do this because for our formatting purposes it doesn't matter
26
+ * whether a property is a known CSS property or not.
27
+ */
28
+ if (tokenType === 'error' && state.state === 'maybeprop') {
29
+ tokenType = 'property';
30
+ }
31
+ const segment = stream.current();
32
+ callback(segment, tokenType);
33
+ lastPos = stream.pos;
34
+ }
35
+ }
36
+ return tokenize;
37
+ }
@@ -0,0 +1,199 @@
1
+ // Copyright 2023 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import * as Platform from '../../core/platform/platform.js';
6
+
7
+ import { contentAsDataURL, type DeferredContent } from './ContentProvider.js';
8
+ import {Text} from './Text.js';
9
+
10
+ /**
11
+ * This class is a small wrapper around either raw binary or text data.
12
+ * As the binary data can actually contain textual data, we also store the
13
+ * MIME type and if applicable, the charset.
14
+ *
15
+ * This information should be generally kept together, as interpreting text
16
+ * from raw bytes requires an encoding.
17
+ *
18
+ * Note that we only rarely have to decode text ourselves in the frontend,
19
+ * this is mostly handled by the backend. There are cases though (e.g. SVG,
20
+ * or streaming response content) where we receive text data in
21
+ * binary (base64-encoded) form.
22
+ *
23
+ * The class only implements decoding. We currently don't have a use-case
24
+ * to re-encode text into base64 bytes using a specified charset.
25
+ */
26
+ export class ContentData {
27
+ readonly mimeType: string;
28
+ readonly charset: string;
29
+
30
+ #contentAsBase64?: string;
31
+ #contentAsText?: string;
32
+
33
+ #contentAsTextObj?: Text;
34
+
35
+ constructor(data: string, isBase64: boolean, mimeType: string, charset?: string) {
36
+ this.charset = charset || 'utf-8';
37
+ if (isBase64) {
38
+ this.#contentAsBase64 = data;
39
+ } else {
40
+ this.#contentAsText = data;
41
+ }
42
+
43
+ this.mimeType = mimeType;
44
+ if (!this.mimeType) {
45
+ // Tests or broken requests might pass an empty/undefined mime type. Fallback to
46
+ // "default" mime types.
47
+ this.mimeType = isBase64 ? 'application/octet-stream' : 'text/plain';
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Returns the data as base64.
53
+ *
54
+ * @throws if this `ContentData` was constructed from text content.
55
+ */
56
+ get base64(): string {
57
+ if (this.#contentAsBase64 === undefined) {
58
+ throw new Error('Encoding text content as base64 is not supported');
59
+ }
60
+ return this.#contentAsBase64;
61
+ }
62
+
63
+ /**
64
+ * Returns the content as text. If this `ContentData` was constructed with base64
65
+ * encoded bytes, it will use the provided charset to attempt to decode the bytes.
66
+ *
67
+ * @throws if `mimeType` is not a text type.
68
+ */
69
+ get text(): string {
70
+ if (this.#contentAsText !== undefined) {
71
+ return this.#contentAsText;
72
+ }
73
+
74
+ if (!this.isTextContent) {
75
+ throw new Error('Cannot interpret binary data as text');
76
+ }
77
+
78
+ const binaryString = window.atob(this.#contentAsBase64 as string);
79
+ const len = binaryString.length;
80
+ const bytes = new Uint8Array(len);
81
+ for (let i = 0; i < len; i++) {
82
+ bytes[i] = binaryString.charCodeAt(i);
83
+ }
84
+
85
+ this.#contentAsText = new TextDecoder(this.charset).decode(bytes);
86
+ return this.#contentAsText;
87
+ }
88
+
89
+ /** @returns true, if this `ContentData` was constructed from text content or the mime type indicates text that can be decoded */
90
+ get isTextContent(): boolean {
91
+ return this.#createdFromText || Platform.MimeType.isTextType(this.mimeType);
92
+ }
93
+
94
+ get isEmpty(): boolean {
95
+ // Don't trigger unnecessary decoding. Only check if both of the strings are empty.
96
+ return !Boolean(this.#contentAsBase64) && !Boolean(this.#contentAsText);
97
+ }
98
+
99
+ get createdFromBase64(): boolean {
100
+ return this.#contentAsBase64 !== undefined;
101
+ }
102
+
103
+ get #createdFromText(): boolean {
104
+ return this.#contentAsBase64 === undefined;
105
+ }
106
+
107
+ /**
108
+ * Returns the text content as a `Text` object. The returned object is always the same to
109
+ * minimize the number of times we have to calculate the line endings array.
110
+ *
111
+ * @throws if `mimeType` is not a text type.
112
+ */
113
+ get textObj(): Text {
114
+ if (this.#contentAsTextObj === undefined) {
115
+ this.#contentAsTextObj = new Text(this.text);
116
+ }
117
+ return this.#contentAsTextObj;
118
+ }
119
+
120
+ /**
121
+ * @returns True, iff the contents (base64 or text) are equal.
122
+ * Does not compare mime type and charset, but will decode base64 data if both
123
+ * mime types indicate that it's text content.
124
+ */
125
+ contentEqualTo(other: ContentData): boolean {
126
+ if (this.#contentAsBase64 !== undefined && other.#contentAsBase64 !== undefined) {
127
+ return this.#contentAsBase64 === other.#contentAsBase64;
128
+ }
129
+ if (this.#contentAsText !== undefined && other.#contentAsText !== undefined) {
130
+ return this.#contentAsText === other.#contentAsText;
131
+ }
132
+ if (this.isTextContent && other.isTextContent) {
133
+ return this.text === other.text;
134
+ }
135
+ return false;
136
+ }
137
+
138
+ asDataUrl(): string|null {
139
+ // To keep with existing behavior we prefer to return the content
140
+ // encoded if that is how this ContentData was constructed with.
141
+ if (this.#contentAsBase64 !== undefined) {
142
+ const charset = this.isTextContent ? this.charset : null;
143
+ return contentAsDataURL(this.#contentAsBase64, this.mimeType ?? '', true, charset);
144
+ }
145
+ return contentAsDataURL(this.text, this.mimeType ?? '', false, 'utf-8');
146
+ }
147
+
148
+ /**
149
+ * @deprecated Used during migration from `DeferredContent` to `ContentData`.
150
+ */
151
+ asDeferedContent(): DeferredContent {
152
+ // To prevent encoding mistakes, we'll return text content already decoded.
153
+ if (this.isTextContent) {
154
+ return {content: this.text, isEncoded: false};
155
+ }
156
+ if (this.#contentAsText !== undefined) {
157
+ // Unknown text mime type, this should not really happen.
158
+ return {content: this.#contentAsText, isEncoded: false};
159
+ }
160
+ if (this.#contentAsBase64 !== undefined) {
161
+ return {content: this.#contentAsBase64, isEncoded: true};
162
+ }
163
+ throw new Error('Unreachable');
164
+ }
165
+
166
+ static isError(contentDataOrError: ContentDataOrError): contentDataOrError is {error: string} {
167
+ return 'error' in contentDataOrError;
168
+ }
169
+
170
+ /** @returns `value` if the passed `ContentDataOrError` is an error, or the text content otherwise */
171
+ static textOr<T>(contentDataOrError: ContentDataOrError, value: T): string|T {
172
+ if (ContentData.isError(contentDataOrError)) {
173
+ return value;
174
+ }
175
+ return contentDataOrError.text;
176
+ }
177
+
178
+ /** @returns an empty 'text/plain' content data if the passed `ContentDataOrError` is an error, or the content data itself otherwise */
179
+ static contentDataOrEmpty(contentDataOrError: ContentDataOrError): ContentData {
180
+ if (ContentData.isError(contentDataOrError)) {
181
+ return EMPTY_TEXT_CONTENT_DATA;
182
+ }
183
+ return contentDataOrError;
184
+ }
185
+
186
+ /**
187
+ * @deprecated Used during migration from `DeferredContent` to `ContentData`.
188
+ */
189
+ static asDeferredContent(contentDataOrError: ContentDataOrError): DeferredContent {
190
+ if (ContentData.isError(contentDataOrError)) {
191
+ return {error: contentDataOrError.error, content: null, isEncoded: false};
192
+ }
193
+ return contentDataOrError.asDeferedContent();
194
+ }
195
+ }
196
+
197
+ export const EMPTY_TEXT_CONTENT_DATA = new ContentData('', /* isBase64 */ false, 'text/plain');
198
+
199
+ export type ContentDataOrError = ContentData|{error: string};
@@ -0,0 +1,68 @@
1
+ // Copyright 2012 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
+
5
+ import type * as Common from '../../core/common/common.js';
6
+ import type * as Platform from '../../core/platform/platform.js';
7
+
8
+ import type {ContentDataOrError} from './ContentData.js';
9
+ import type {StreamingContentDataOrError} from './StreamingContentData.js';
10
+ import type {WasmDisassembly} from './WasmDisassembly.js';
11
+
12
+ export interface ContentProvider {
13
+ contentURL(): Platform.DevToolsPath.UrlString;
14
+ contentType(): Common.ResourceType.ResourceType;
15
+ requestContentData(): Promise<ContentDataOrError>;
16
+ searchInContent(query: string, caseSensitive: boolean, isRegex: boolean): Promise<SearchMatch[]>;
17
+ }
18
+
19
+ export class SearchMatch {
20
+ constructor(
21
+ readonly lineNumber: number, readonly lineContent: string, readonly columnNumber: number,
22
+ readonly matchLength: number) {
23
+ }
24
+
25
+ static comparator(a: SearchMatch, b: SearchMatch): number {
26
+ return a.lineNumber - b.lineNumber || a.columnNumber - b.columnNumber;
27
+ }
28
+ }
29
+
30
+ export const contentAsDataURL = function(
31
+ content: string|null, mimeType: string, contentEncoded: boolean, charset?: string|null,
32
+ limitSize = true): string|null {
33
+ const maxDataUrlSize = 1024 * 1024;
34
+ if (content === undefined || content === null || (limitSize && content.length > maxDataUrlSize)) {
35
+ return null;
36
+ }
37
+
38
+ content = contentEncoded ? content : encodeURIComponent(content);
39
+ return 'data:' + mimeType + (charset ? ';charset=' + charset : '') + (contentEncoded ? ';base64' : '') + ',' +
40
+ content;
41
+ };
42
+
43
+ export type DeferredContent = {
44
+ content: string,
45
+ isEncoded: boolean,
46
+ }|{
47
+ content: '',
48
+ isEncoded: false,
49
+ wasmDisassemblyInfo: WasmDisassembly,
50
+ }|{
51
+ content: null,
52
+ error: string,
53
+ isEncoded: boolean,
54
+ };
55
+
56
+ /**
57
+ * Some ContentProvider like NetworkRequests might never actually be able to return
58
+ * a fully completed "requestContentData" as the request keeps on going indefinitely.
59
+ * Such proivders can implement the "StreamingContentProvider" addition, which allows
60
+ * for partial/streaming content.
61
+ **/
62
+ export interface StreamingContentProvider extends ContentProvider {
63
+ requestStreamingContent(): Promise<StreamingContentDataOrError>;
64
+ }
65
+
66
+ export const isStreamingContentProvider = function(provider: ContentProvider): provider is StreamingContentProvider {
67
+ return 'requestStreamingContent' in provider;
68
+ };
@@ -0,0 +1,49 @@
1
+ // Copyright 2014 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
+
5
+ import type * as Common from '../../core/common/common.js';
6
+ import type * as Platform from '../../core/platform/platform.js';
7
+
8
+ import {ContentData, type ContentDataOrError} from './ContentData.js';
9
+ import type {ContentProvider, SearchMatch} from './ContentProvider.js';
10
+ import {performSearchInContentData} from './TextUtils.js';
11
+
12
+ export class StaticContentProvider implements ContentProvider {
13
+ readonly #contentURL: Platform.DevToolsPath.UrlString;
14
+ readonly #contentType: Common.ResourceType.ResourceType;
15
+ readonly #lazyContent: () => Promise<ContentDataOrError>;
16
+
17
+ constructor(
18
+ contentURL: Platform.DevToolsPath.UrlString, contentType: Common.ResourceType.ResourceType,
19
+ lazyContent: () => Promise<ContentDataOrError>) {
20
+ this.#contentURL = contentURL;
21
+ this.#contentType = contentType;
22
+ this.#lazyContent = lazyContent;
23
+ }
24
+
25
+ static fromString(
26
+ contentURL: Platform.DevToolsPath.UrlString, contentType: Common.ResourceType.ResourceType,
27
+ content: string): StaticContentProvider {
28
+ const lazyContent = (): Promise<ContentData> =>
29
+ Promise.resolve(new ContentData(content, /* isBase64 */ false, contentType.canonicalMimeType()));
30
+ return new StaticContentProvider(contentURL, contentType, lazyContent);
31
+ }
32
+
33
+ contentURL(): Platform.DevToolsPath.UrlString {
34
+ return this.#contentURL;
35
+ }
36
+
37
+ contentType(): Common.ResourceType.ResourceType {
38
+ return this.#contentType;
39
+ }
40
+
41
+ requestContentData(): Promise<ContentDataOrError> {
42
+ return this.#lazyContent();
43
+ }
44
+
45
+ async searchInContent(query: string, caseSensitive: boolean, isRegex: boolean): Promise<SearchMatch[]> {
46
+ const contentData = await this.requestContentData();
47
+ return performSearchInContentData(contentData, query, caseSensitive, isRegex);
48
+ }
49
+ }