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,588 @@
1
+ // Copyright 2020 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 {Brand} from './Brand.js';
6
+
7
+ export const escapeCharacters = (inputString: string, charsToEscape: string): string => {
8
+ let foundChar = false;
9
+ for (let i = 0; i < charsToEscape.length; ++i) {
10
+ if (inputString.indexOf(charsToEscape.charAt(i)) !== -1) {
11
+ foundChar = true;
12
+ break;
13
+ }
14
+ }
15
+
16
+ if (!foundChar) {
17
+ return String(inputString);
18
+ }
19
+
20
+ let result = '';
21
+ for (let i = 0; i < inputString.length; ++i) {
22
+ if (charsToEscape.indexOf(inputString.charAt(i)) !== -1) {
23
+ result += '\\';
24
+ }
25
+ result += inputString.charAt(i);
26
+ }
27
+
28
+ return result;
29
+ };
30
+
31
+ const toHexadecimal = (charCode: number, padToLength: number): string => {
32
+ return charCode.toString(16).toUpperCase().padStart(padToLength, '0');
33
+ };
34
+
35
+ // Remember to update the third group in the regexps patternsToEscape and
36
+ // patternsToEscapePlusSingleQuote when adding new entries in this map.
37
+ const escapedReplacements = new Map([
38
+ ['\b', '\\b'],
39
+ ['\f', '\\f'],
40
+ ['\n', '\\n'],
41
+ ['\r', '\\r'],
42
+ ['\t', '\\t'],
43
+ ['\v', '\\v'],
44
+ ['\'', '\\\''],
45
+ ['\\', '\\\\'],
46
+ ['<!--', '\\x3C!--'],
47
+ ['<script', '\\x3Cscript'],
48
+ ['</script', '\\x3C/script'],
49
+ ]);
50
+
51
+ export const formatAsJSLiteral = (content: string): string => {
52
+ const patternsToEscape = /(\\|<(?:!--|\/?script))|(\p{Control})|(\p{Surrogate})/gu;
53
+ const patternsToEscapePlusSingleQuote = /(\\|'|<(?:!--|\/?script))|(\p{Control})|(\p{Surrogate})/gu;
54
+ const escapePattern = (match: string, pattern: string, controlChar: string, loneSurrogate: string): string => {
55
+ if (controlChar) {
56
+ if (escapedReplacements.has(controlChar)) {
57
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/13086
58
+ return escapedReplacements.get(controlChar);
59
+ }
60
+ const twoDigitHex = toHexadecimal(controlChar.charCodeAt(0), 2);
61
+ return '\\x' + twoDigitHex;
62
+ }
63
+ if (loneSurrogate) {
64
+ const fourDigitHex = toHexadecimal(loneSurrogate.charCodeAt(0), 4);
65
+ return '\\u' + fourDigitHex;
66
+ }
67
+ if (pattern) {
68
+ return escapedReplacements.get(pattern) || '';
69
+ }
70
+ return match;
71
+ };
72
+
73
+ let escapedContent = '';
74
+ let quote = '';
75
+ if (!content.includes('\'')) {
76
+ quote = '\'';
77
+ escapedContent = content.replaceAll(patternsToEscape, escapePattern);
78
+ } else if (!content.includes('"')) {
79
+ quote = '"';
80
+ escapedContent = content.replaceAll(patternsToEscape, escapePattern);
81
+ } else if (!content.includes('`') && !content.includes('${')) {
82
+ quote = '`';
83
+ escapedContent = content.replaceAll(patternsToEscape, escapePattern);
84
+ } else {
85
+ quote = '\'';
86
+ escapedContent = content.replaceAll(patternsToEscapePlusSingleQuote, escapePattern);
87
+ }
88
+ return `${quote}${escapedContent}${quote}`;
89
+ };
90
+
91
+ /**
92
+ * This implements a subset of the sprintf() function described in the Single UNIX
93
+ * Specification. It supports the %s, %f, %d, and %% formatting specifiers, and
94
+ * understands the %m$d notation to select the m-th parameter for this substitution,
95
+ * as well as the optional precision for %s, %f, and %d.
96
+ *
97
+ * @param fmt format string.
98
+ * @param args parameters to the format string.
99
+ * @returns the formatted output string.
100
+ */
101
+ export const sprintf = (fmt: string, ...args: unknown[]): string => {
102
+ let argIndex = 0;
103
+ const RE = /%(?:(\d+)\$)?(?:\.(\d*))?([%dfs])/g;
104
+ return fmt.replaceAll(RE, (_: string, index?: string, precision?: string, specifier?: string) => {
105
+ if (specifier === '%') {
106
+ return '%';
107
+ }
108
+ if (index !== undefined) {
109
+ argIndex = parseInt(index, 10) - 1;
110
+ if (argIndex < 0) {
111
+ throw new RangeError(`Invalid parameter index ${argIndex + 1}`);
112
+ }
113
+ }
114
+ if (argIndex >= args.length) {
115
+ throw new RangeError(`Expected at least ${argIndex + 1} format parameters, but only ${args.length} where given.`);
116
+ }
117
+ if (specifier === 's') {
118
+ const argValue = String(args[argIndex++]);
119
+ if (precision !== undefined) {
120
+ return argValue.substring(0, Number(precision));
121
+ }
122
+ return argValue;
123
+ }
124
+ let argValue = Number(args[argIndex++]);
125
+ if (isNaN(argValue)) {
126
+ argValue = 0;
127
+ }
128
+ if (specifier === 'd') {
129
+ return String(Math.floor(argValue)).padStart(Number(precision), '0');
130
+ }
131
+ if (precision !== undefined) {
132
+ return argValue.toFixed(Number(precision));
133
+ }
134
+ return String(argValue);
135
+ });
136
+ };
137
+
138
+ export const toBase64 = (inputString: string): string => {
139
+ /* note to the reader: we can't use btoa here because we need to
140
+ * support Unicode correctly. See the test cases for this function and
141
+ * also
142
+ * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_Unicode_Problem
143
+ */
144
+
145
+ function encodeBits(b: number): number {
146
+ return b < 26 ? b + 65 : b < 52 ? b + 71 : b < 62 ? b - 4 : b === 62 ? 43 : b === 63 ? 47 : 65;
147
+ }
148
+ const encoder = new TextEncoder();
149
+ const data = encoder.encode(inputString.toString());
150
+ const n = data.length;
151
+ let encoded = '';
152
+ if (n === 0) {
153
+ return encoded;
154
+ }
155
+ let shift;
156
+ let v = 0;
157
+ for (let i = 0; i < n; i++) {
158
+ shift = i % 3;
159
+ v |= data[i] << (16 >>> shift & 24);
160
+ if (shift === 2) {
161
+ encoded += String.fromCharCode(
162
+ encodeBits(v >>> 18 & 63), encodeBits(v >>> 12 & 63), encodeBits(v >>> 6 & 63), encodeBits(v & 63));
163
+ v = 0;
164
+ }
165
+ }
166
+ if (shift === 0) {
167
+ encoded += String.fromCharCode(encodeBits(v >>> 18 & 63), encodeBits(v >>> 12 & 63), 61, 61);
168
+ } else if (shift === 1) {
169
+ encoded += String.fromCharCode(encodeBits(v >>> 18 & 63), encodeBits(v >>> 12 & 63), encodeBits(v >>> 6 & 63), 61);
170
+ }
171
+ return encoded;
172
+ };
173
+
174
+ export const findIndexesOfSubString = (inputString: string, searchString: string): number[] => {
175
+ const matches = [];
176
+ let i = inputString.indexOf(searchString);
177
+ while (i !== -1) {
178
+ matches.push(i);
179
+ i = inputString.indexOf(searchString, i + searchString.length);
180
+ }
181
+ return matches;
182
+ };
183
+
184
+ export const findLineEndingIndexes = (inputString: string): number[] => {
185
+ const endings = findIndexesOfSubString(inputString, '\n');
186
+ endings.push(inputString.length);
187
+ return endings;
188
+ };
189
+
190
+ export const isWhitespace = (inputString: string): boolean => {
191
+ return /^\s*$/.test(inputString);
192
+ };
193
+
194
+ export const trimURL = (url: string, baseURLDomain?: string): string => {
195
+ let result = url.replace(/^(https|http|file):\/\//i, '');
196
+ if (baseURLDomain) {
197
+ if (result.toLowerCase().startsWith(baseURLDomain.toLowerCase())) {
198
+ result = result.substr(baseURLDomain.length);
199
+ }
200
+ }
201
+ return result;
202
+ };
203
+
204
+ export const collapseWhitespace = (inputString: string): string => {
205
+ return inputString.replace(/[\s\xA0]+/g, ' ');
206
+ };
207
+
208
+ export const reverse = (inputString: string): string => {
209
+ return inputString.split('').reverse().join('');
210
+ };
211
+
212
+ export const replaceControlCharacters = (inputString: string): string => {
213
+ // Replace C0 and C1 control character sets with replacement character.
214
+ // Do not replace '\t', \n' and '\r'.
215
+ return inputString.replace(/[\0-\x08\x0B\f\x0E-\x1F\x80-\x9F]/g, '\uFFFD');
216
+ };
217
+
218
+ export const countWtf8Bytes = (inputString: string): number => {
219
+ let count = 0;
220
+ for (let i = 0; i < inputString.length; i++) {
221
+ const c = inputString.charCodeAt(i);
222
+ if (c <= 0x7F) {
223
+ count++;
224
+ } else if (c <= 0x07FF) {
225
+ count += 2;
226
+ } else if (c < 0xD800 || 0xDFFF < c) {
227
+ count += 3;
228
+ } else {
229
+ if (c <= 0xDBFF && i + 1 < inputString.length) {
230
+ // The current character is a leading surrogate, and there is a
231
+ // next character.
232
+ const next = inputString.charCodeAt(i + 1);
233
+ if (0xDC00 <= next && next <= 0xDFFF) {
234
+ // The next character is a trailing surrogate, meaning this
235
+ // is a surrogate pair.
236
+ count += 4;
237
+ i++;
238
+ continue;
239
+ }
240
+ }
241
+ count += 3;
242
+ }
243
+ }
244
+ return count;
245
+ };
246
+
247
+ export const stripLineBreaks = (inputStr: string): string => {
248
+ return inputStr.replace(/(\r)?\n/g, '');
249
+ };
250
+
251
+ const EXTENDED_KEBAB_CASE_REGEXP = /^([a-z0-9]+(?:-[a-z0-9]+)*\.)*[a-z0-9]+(?:-[a-z0-9]+)*$/;
252
+
253
+ /**
254
+ * Tests if the `inputStr` is following the extended Kebab Case naming convention,
255
+ * where words are separated with either a dash (`-`) or a dot (`.`), and all
256
+ * characters must be lower-case alphanumeric.
257
+ *
258
+ * For example, it will yield `true` for `'my.amazing-string.literal'`, but `false`
259
+ * for `'Another.AmazingLiteral'` or '`another_amazing_literal'`.
260
+ *
261
+ * @param inputStr the input string to test.
262
+ * @returns `true` if the `inputStr` follows the extended Kebab Case convention.
263
+ */
264
+ export const isExtendedKebabCase = (inputStr: string): boolean => {
265
+ return EXTENDED_KEBAB_CASE_REGEXP.test(inputStr);
266
+ };
267
+
268
+ export const toTitleCase = (inputStr: string): string => {
269
+ return inputStr.substring(0, 1).toUpperCase() + inputStr.substring(1);
270
+ };
271
+
272
+ export const removeURLFragment = (inputStr: string): string => {
273
+ const url = new URL(inputStr);
274
+ url.hash = '';
275
+ return url.toString();
276
+ };
277
+
278
+ const SPECIAL_REGEX_CHARACTERS = '^[]{}()\\.^$*+?|-,';
279
+
280
+ export const regexSpecialCharacters = function(): string {
281
+ return SPECIAL_REGEX_CHARACTERS;
282
+ };
283
+
284
+ export const filterRegex = function(query: string): RegExp {
285
+ let regexString = '^(?:.*\\0)?'; // Start from beginning or after a \0
286
+ for (let i = 0; i < query.length; ++i) {
287
+ let c = query.charAt(i);
288
+ if (SPECIAL_REGEX_CHARACTERS.indexOf(c) !== -1) {
289
+ c = '\\' + c;
290
+ }
291
+ regexString += '[^\\0' + c + ']*' + c;
292
+ }
293
+ return new RegExp(regexString, 'i');
294
+ };
295
+
296
+ export const createSearchRegex = function(
297
+ query: string, caseSensitive: boolean, isRegex: boolean, matchWholeWord = false): RegExp {
298
+ const regexFlags = caseSensitive ? 'g' : 'gi';
299
+ let regexObject;
300
+
301
+ if (isRegex) {
302
+ try {
303
+ regexObject = new RegExp(query, regexFlags);
304
+ } catch {
305
+ // Silent catch.
306
+ }
307
+ }
308
+
309
+ if (!regexObject) {
310
+ regexObject = createPlainTextSearchRegex(query, regexFlags);
311
+ }
312
+
313
+ if (matchWholeWord && regexObject) {
314
+ regexObject = new RegExp(`\\b${regexObject.source}\\b`, regexFlags);
315
+ }
316
+
317
+ return regexObject;
318
+ };
319
+
320
+ export const caseInsensetiveComparator = function(a: string, b: string): number {
321
+ a = a.toUpperCase();
322
+ b = b.toUpperCase();
323
+ if (a === b) {
324
+ return 0;
325
+ }
326
+ return a > b ? 1 : -1;
327
+ };
328
+
329
+ export const hashCode = function(string?: string): number {
330
+ if (!string) {
331
+ return 0;
332
+ }
333
+ // Hash algorithm for substrings is described in "Über die Komplexität der Multiplikation in
334
+ // eingeschränkten Branchingprogrammmodellen" by Woelfe.
335
+ // http://opendatastructures.org/versions/edition-0.1d/ods-java/node33.html#SECTION00832000000000000000
336
+ const p = ((1 << 30) * 4 - 5); // prime: 2^32 - 5
337
+ const z = 0x5033d967; // 32 bits from random.org
338
+ const z2 = 0x59d2f15d; // random odd 32 bit number
339
+ let s = 0;
340
+ let zi = 1;
341
+ for (let i = 0; i < string.length; i++) {
342
+ const xi = string.charCodeAt(i) * z2;
343
+ s = (s + zi * xi) % p;
344
+ zi = (zi * z) % p;
345
+ }
346
+ s = (s + zi * (p - 1)) % p;
347
+ return Math.abs(s | 0);
348
+ };
349
+
350
+ export const compare = (a: string, b: string): number => {
351
+ if (a > b) {
352
+ return 1;
353
+ }
354
+ if (a < b) {
355
+ return -1;
356
+ }
357
+ return 0;
358
+ };
359
+
360
+ export const trimMiddle = (str: string, maxLength: number): string => {
361
+ if (str.length <= maxLength) {
362
+ return String(str);
363
+ }
364
+ let leftHalf = maxLength >> 1;
365
+ let rightHalf = maxLength - leftHalf - 1;
366
+ if ((str.codePointAt(str.length - rightHalf - 1) as number) >= 0x10000) {
367
+ --rightHalf;
368
+ ++leftHalf;
369
+ }
370
+ if (leftHalf > 0 && (str.codePointAt(leftHalf - 1) as number) >= 0x10000) {
371
+ --leftHalf;
372
+ }
373
+ return str.substr(0, leftHalf) + '…' + str.substr(str.length - rightHalf, rightHalf);
374
+ };
375
+
376
+ export const trimEndWithMaxLength = (str: string, maxLength: number): string => {
377
+ if (str.length <= maxLength) {
378
+ return String(str);
379
+ }
380
+ return str.substr(0, maxLength - 1) + '…';
381
+ };
382
+
383
+ export const escapeForRegExp = (str: string): string => {
384
+ return escapeCharacters(str, SPECIAL_REGEX_CHARACTERS);
385
+ };
386
+
387
+ export const naturalOrderComparator = (a: string, b: string): number => {
388
+ const chunk = /^\d+|^\D+/;
389
+ let chunkA, chunkB, numA, numB;
390
+ while (true) {
391
+ if (a) {
392
+ if (!b) {
393
+ return 1;
394
+ }
395
+ } else {
396
+ if (b) {
397
+ return -1;
398
+ }
399
+ return 0;
400
+ }
401
+ chunkA = (a.match(chunk) as string[])[0];
402
+ chunkB = (b.match(chunk) as string[])[0];
403
+ numA = !Number.isNaN(Number(chunkA));
404
+ numB = !Number.isNaN(Number(chunkB));
405
+ if (numA && !numB) {
406
+ return -1;
407
+ }
408
+ if (numB && !numA) {
409
+ return 1;
410
+ }
411
+ if (numA && numB) {
412
+ const diff = Number(chunkA) - Number(chunkB);
413
+ if (diff) {
414
+ return diff;
415
+ }
416
+ if (chunkA.length !== chunkB.length) {
417
+ if (!Number(chunkA) && !Number(chunkB)) { // chunks are strings of all 0s (special case)
418
+ return chunkA.length - chunkB.length;
419
+ }
420
+ return chunkB.length - chunkA.length;
421
+ }
422
+ } else if (chunkA !== chunkB) {
423
+ return (chunkA < chunkB) ? -1 : 1;
424
+ }
425
+ a = a.substring(chunkA.length);
426
+ b = b.substring(chunkB.length);
427
+ }
428
+ };
429
+
430
+ export const base64ToSize = function(content: string|null): number {
431
+ if (!content) {
432
+ return 0;
433
+ }
434
+ let size = content.length * 3 / 4;
435
+ if (content[content.length - 1] === '=') {
436
+ size--;
437
+ }
438
+ if (content.length > 1 && content[content.length - 2] === '=') {
439
+ size--;
440
+ }
441
+ return size;
442
+ };
443
+
444
+ export const SINGLE_QUOTE = '\'';
445
+ export const DOUBLE_QUOTE = '"';
446
+ const BACKSLASH = '\\';
447
+
448
+ export const findUnclosedCssQuote = function(str: string): string {
449
+ let unmatchedQuote = '';
450
+ for (let i = 0; i < str.length; ++i) {
451
+ const char = str[i];
452
+ if (char === BACKSLASH) {
453
+ i++;
454
+ continue;
455
+ }
456
+ if (char === SINGLE_QUOTE || char === DOUBLE_QUOTE) {
457
+ if (unmatchedQuote === char) {
458
+ unmatchedQuote = '';
459
+ } else if (unmatchedQuote === '') {
460
+ unmatchedQuote = char;
461
+ }
462
+ }
463
+ }
464
+ return unmatchedQuote;
465
+ };
466
+
467
+ export const countUnmatchedLeftParentheses = (str: string): number => {
468
+ const stringLiteralRegex = /'(?:\\.|[^'\\])*'|"(?:\\.|[^"\\])*"/g;
469
+ // Remove all matched string literals from the original string.
470
+ const strWithoutStrings = str.replace(stringLiteralRegex, '');
471
+
472
+ let unmatchedCount = 0;
473
+ for (const c of strWithoutStrings) {
474
+ if (c === '(') {
475
+ unmatchedCount++;
476
+ } else if (c === ')' && unmatchedCount > 0) {
477
+ unmatchedCount--;
478
+ }
479
+ }
480
+ return unmatchedCount;
481
+ };
482
+
483
+ export const createPlainTextSearchRegex = function(query: string, flags?: string): RegExp {
484
+ // This should be kept the same as the one in StringUtil.cpp.
485
+ let regex = '';
486
+ for (let i = 0; i < query.length; ++i) {
487
+ const c = query.charAt(i);
488
+ if (regexSpecialCharacters().indexOf(c) !== -1) {
489
+ regex += '\\';
490
+ }
491
+ regex += c;
492
+ }
493
+ return new RegExp(regex, flags || '');
494
+ };
495
+
496
+ export type LowerCaseString = Brand<string, 'lowerCaseStringTag'>;
497
+
498
+ export const toLowerCaseString = function(input: string): LowerCaseString {
499
+ return input.toLowerCase() as LowerCaseString;
500
+ };
501
+
502
+ /**
503
+ * 1: two or more consecutive uppercase letters. This is useful for identifying acronyms
504
+ * 2: lookahead assertion that matches a word boundary
505
+ * 3: numeronym: single letter followed by number and another letter
506
+ * 4: word starting with an optional uppercase letter
507
+ * 5: single digit followed by word to handle '3D' or '2px' (this might be controverial)
508
+ * 6: single uppercase letter or number
509
+ * 7: a dot character. We extract it into a separate word and remove dashes around it later.
510
+ * This is makes more sense conceptually and allows accounting for all possible word variants.
511
+ * Making dot a part of a word prevent us from handling acronyms or numeronyms after the word
512
+ * correctly without making the RegExp prohibitively complicated.
513
+ * https://regex101.com/r/FhMVKc/1
514
+ * <---1---><------------2-----------> <---------3--------> <-----4----> <------5-----> <-----6----> <7>
515
+ */
516
+ const WORD = /[A-Z]{2,}(?=[A-Z0-9][a-z0-9]+|\b|_)|[A-Za-z][0-9]+[a-z]?|[A-Z]?[a-z]+|[0-9][A-Za-z]+|[A-Z]|[0-9]+|[.]/g;
517
+
518
+ export const toKebabCase = function(input: string): Lowercase<string> {
519
+ return (input.match?.(WORD)?.map(w => w.toLowerCase()).join('-').replaceAll('-.-', '.') || input) as
520
+ Lowercase<string>;
521
+ };
522
+
523
+ export function toKebabCaseKeys<T>(settingValue: Record<string, T>): Record<string, T> {
524
+ return Object.fromEntries(Object.entries(settingValue).map(([key, value]) => [toKebabCase(key), value]));
525
+ }
526
+
527
+ /**
528
+ * Converts a given string to snake_case.
529
+ * This function handles camelCase, PascalCase, and acronyms, including transitions between letters and numbers.
530
+ * It uses Unicode-aware regular expressions (`\p{L}`, `\p{N}`, `\p{Lu}`, `\p{Ll}` with the `u` flag)
531
+ * to correctly process letters and numbers from various languages.
532
+ *
533
+ * @param text The input string to convert to snake_case.
534
+ * @returns The snake_case version of the input string.
535
+ */
536
+ export function toSnakeCase(text: string): string {
537
+ if (!text) {
538
+ return '';
539
+ }
540
+ // First, handle case-based transformations to insert underscores correctly.
541
+ // 1. Add underscore between a letter and a number.
542
+ // e.g., "version2" -> "version_2"
543
+ // 2. Add underscore between an uppercase letter sequence and a following uppercase+lowercase sequence.
544
+ // e.g., "APIFlags" -> "API_Flags"
545
+ // 3. Add underscore between a lowercase/number and an uppercase letter.
546
+ // e.g., "lastName" -> "last_Name", "version_2Update" -> "version_2_Update"
547
+ // 4. Replace sequences of non-alphanumeric with a single underscore
548
+ // 5. Remove any leading or trailing underscores.
549
+ const result = text.replace(/(\p{L})(\p{N})/gu, '$1_$2') // 1
550
+ .replace(/(\p{Lu}+)(\p{Lu}\p{Ll})/gu, '$1_$2') // 2
551
+ .replace(/(\p{Ll}|\p{N})(\p{Lu})/gu, '$1_$2') // 3
552
+ .toLowerCase()
553
+ .replace(/[^\p{L}\p{N}]+/gu, '_') // 4
554
+ .replace(/^_|_$/g, ''); // 5
555
+
556
+ return result;
557
+ }
558
+
559
+ /** Replaces the last occurrence of parameter `search` with parameter `replacement` in `input` **/
560
+ export const replaceLast = function(input: string, search: string, replacement: string): string {
561
+ const replacementStartIndex = input.lastIndexOf(search);
562
+ if (replacementStartIndex === -1) {
563
+ return input;
564
+ }
565
+
566
+ return input.slice(0, replacementStartIndex) + input.slice(replacementStartIndex).replace(search, replacement);
567
+ };
568
+
569
+ export const stringifyWithPrecision = function stringifyWithPrecision(s: number, precision = 2): string {
570
+ if (precision === 0) {
571
+ return s.toFixed(0);
572
+ }
573
+ const string = s.toFixed(precision).replace(/\.?0*$/, '');
574
+ return string === '-0' ? '0' : string;
575
+ };
576
+
577
+ /**
578
+ * Somewhat efficiently concatenates 2 base64 encoded strings.
579
+ */
580
+ export const concatBase64 = function(lhs: string, rhs: string): string {
581
+ if (lhs.length === 0 || !lhs.endsWith('=')) {
582
+ // Empty string or no padding, we can straight-up concatenate.
583
+ return lhs + rhs;
584
+ }
585
+ const lhsLeaveAsIs = lhs.substring(0, lhs.length - 4);
586
+ const lhsToDecode = lhs.substring(lhs.length - 4);
587
+ return lhsLeaveAsIs + window.btoa(window.atob(lhsToDecode) + window.atob(rhs));
588
+ };
@@ -0,0 +1,17 @@
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 type {Brand} from './Brand.js';
6
+
7
+ export type Seconds = Brand<number, 'Seconds'>;
8
+ export type MilliSeconds = Brand<number, 'MilliSeconds'>;
9
+ export type MicroSeconds = Brand<number, 'MicroSeconds'>;
10
+
11
+ export function milliSecondsToSeconds(x: MilliSeconds): Seconds {
12
+ return (x / 1000) as Seconds;
13
+ }
14
+
15
+ export function microSecondsToMilliSeconds(x: MicroSeconds): MilliSeconds {
16
+ return (x / 1000) as MilliSeconds;
17
+ }