@treegress.com/treegress-browser-core 1.59.0-treegress.3

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 (439) hide show
  1. package/README.md +60 -0
  2. package/ThirdPartyNotices.txt +3759 -0
  3. package/bin/install_media_pack.ps1 +5 -0
  4. package/bin/install_webkit_wsl.ps1 +33 -0
  5. package/bin/reinstall_chrome_beta_linux.sh +42 -0
  6. package/bin/reinstall_chrome_beta_mac.sh +13 -0
  7. package/bin/reinstall_chrome_beta_win.ps1 +24 -0
  8. package/bin/reinstall_chrome_stable_linux.sh +42 -0
  9. package/bin/reinstall_chrome_stable_mac.sh +12 -0
  10. package/bin/reinstall_chrome_stable_win.ps1 +24 -0
  11. package/bin/reinstall_msedge_beta_linux.sh +48 -0
  12. package/bin/reinstall_msedge_beta_mac.sh +11 -0
  13. package/bin/reinstall_msedge_beta_win.ps1 +23 -0
  14. package/bin/reinstall_msedge_dev_linux.sh +48 -0
  15. package/bin/reinstall_msedge_dev_mac.sh +11 -0
  16. package/bin/reinstall_msedge_dev_win.ps1 +23 -0
  17. package/bin/reinstall_msedge_stable_linux.sh +48 -0
  18. package/bin/reinstall_msedge_stable_mac.sh +11 -0
  19. package/bin/reinstall_msedge_stable_win.ps1 +24 -0
  20. package/browsers.json +81 -0
  21. package/cli.js +18 -0
  22. package/index.d.ts +17 -0
  23. package/index.js +32 -0
  24. package/index.mjs +28 -0
  25. package/lib/androidServerImpl.js +65 -0
  26. package/lib/browserServerImpl.js +120 -0
  27. package/lib/cli/client/cli.js +6 -0
  28. package/lib/cli/client/program.js +375 -0
  29. package/lib/cli/client/registry.js +171 -0
  30. package/lib/cli/client/session.js +282 -0
  31. package/lib/cli/client/socketConnection.js +108 -0
  32. package/lib/cli/daemon/command.js +73 -0
  33. package/lib/cli/daemon/commands.js +879 -0
  34. package/lib/cli/daemon/daemon.js +179 -0
  35. package/lib/cli/daemon/helpGenerator.js +173 -0
  36. package/lib/cli/daemon/program.js +123 -0
  37. package/lib/cli/driver.js +98 -0
  38. package/lib/cli/program.js +598 -0
  39. package/lib/cli/programWithTestStub.js +74 -0
  40. package/lib/client/android.js +361 -0
  41. package/lib/client/api.js +137 -0
  42. package/lib/client/artifact.js +79 -0
  43. package/lib/client/browser.js +169 -0
  44. package/lib/client/browserContext.js +590 -0
  45. package/lib/client/browserType.js +153 -0
  46. package/lib/client/cdpSession.js +55 -0
  47. package/lib/client/channelOwner.js +194 -0
  48. package/lib/client/clientHelper.js +64 -0
  49. package/lib/client/clientInstrumentation.js +55 -0
  50. package/lib/client/clientStackTrace.js +69 -0
  51. package/lib/client/clock.js +68 -0
  52. package/lib/client/connect.js +152 -0
  53. package/lib/client/connection.js +322 -0
  54. package/lib/client/consoleMessage.js +61 -0
  55. package/lib/client/coverage.js +44 -0
  56. package/lib/client/dialog.js +56 -0
  57. package/lib/client/disposable.js +76 -0
  58. package/lib/client/download.js +62 -0
  59. package/lib/client/electron.js +138 -0
  60. package/lib/client/elementHandle.js +284 -0
  61. package/lib/client/errors.js +77 -0
  62. package/lib/client/eventEmitter.js +327 -0
  63. package/lib/client/events.js +103 -0
  64. package/lib/client/fetch.js +368 -0
  65. package/lib/client/fileChooser.js +46 -0
  66. package/lib/client/fileUtils.js +34 -0
  67. package/lib/client/frame.js +409 -0
  68. package/lib/client/harRouter.js +99 -0
  69. package/lib/client/input.js +84 -0
  70. package/lib/client/inspector.js +48 -0
  71. package/lib/client/jsHandle.js +109 -0
  72. package/lib/client/jsonPipe.js +39 -0
  73. package/lib/client/localUtils.js +60 -0
  74. package/lib/client/locator.js +373 -0
  75. package/lib/client/network.js +750 -0
  76. package/lib/client/page.js +750 -0
  77. package/lib/client/pageAgent.js +64 -0
  78. package/lib/client/platform.js +77 -0
  79. package/lib/client/playwright.js +71 -0
  80. package/lib/client/selectors.js +55 -0
  81. package/lib/client/stream.js +39 -0
  82. package/lib/client/timeoutSettings.js +79 -0
  83. package/lib/client/tracing.js +124 -0
  84. package/lib/client/types.js +28 -0
  85. package/lib/client/video.js +65 -0
  86. package/lib/client/waiter.js +142 -0
  87. package/lib/client/webError.js +39 -0
  88. package/lib/client/worker.js +85 -0
  89. package/lib/client/writableStream.js +39 -0
  90. package/lib/devtools/appIcon.png +0 -0
  91. package/lib/devtools/devtoolsApp.js +275 -0
  92. package/lib/devtools/devtoolsController.js +289 -0
  93. package/lib/generated/bindingsControllerSource.js +28 -0
  94. package/lib/generated/clockSource.js +28 -0
  95. package/lib/generated/injectedScriptSource.js +28 -0
  96. package/lib/generated/pollingRecorderSource.js +28 -0
  97. package/lib/generated/storageScriptSource.js +28 -0
  98. package/lib/generated/utilityScriptSource.js +28 -0
  99. package/lib/generated/webSocketMockSource.js +336 -0
  100. package/lib/inProcessFactory.js +60 -0
  101. package/lib/inprocess.js +3 -0
  102. package/lib/mcp/browserFactory.js +196 -0
  103. package/lib/mcp/cdpRelay.js +353 -0
  104. package/lib/mcp/config.d.js +16 -0
  105. package/lib/mcp/config.js +399 -0
  106. package/lib/mcp/configIni.js +190 -0
  107. package/lib/mcp/exports.js +42 -0
  108. package/lib/mcp/extensionContextFactory.js +59 -0
  109. package/lib/mcp/index.js +62 -0
  110. package/lib/mcp/log.js +35 -0
  111. package/lib/mcp/program.js +111 -0
  112. package/lib/mcp/protocol.js +28 -0
  113. package/lib/mcp/sdk/http.js +152 -0
  114. package/lib/mcp/sdk/server.js +230 -0
  115. package/lib/mcp/sdk/tool.js +47 -0
  116. package/lib/mcp/watchdog.js +44 -0
  117. package/lib/mcpBundle.js +84 -0
  118. package/lib/mcpBundleImpl/index.js +147 -0
  119. package/lib/outofprocess.js +76 -0
  120. package/lib/protocol/serializers.js +197 -0
  121. package/lib/protocol/validator.js +3064 -0
  122. package/lib/protocol/validatorPrimitives.js +193 -0
  123. package/lib/remote/playwrightConnection.js +129 -0
  124. package/lib/remote/playwrightPipeServer.js +100 -0
  125. package/lib/remote/playwrightServer.js +339 -0
  126. package/lib/remote/playwrightWebSocketServer.js +73 -0
  127. package/lib/remote/serverTransport.js +96 -0
  128. package/lib/server/agent/actionRunner.js +341 -0
  129. package/lib/server/agent/actions.js +128 -0
  130. package/lib/server/agent/codegen.js +111 -0
  131. package/lib/server/agent/context.js +161 -0
  132. package/lib/server/agent/expectTools.js +156 -0
  133. package/lib/server/agent/pageAgent.js +204 -0
  134. package/lib/server/agent/performTools.js +262 -0
  135. package/lib/server/agent/tool.js +109 -0
  136. package/lib/server/android/android.js +465 -0
  137. package/lib/server/android/backendAdb.js +177 -0
  138. package/lib/server/artifact.js +127 -0
  139. package/lib/server/bidi/bidiBrowser.js +560 -0
  140. package/lib/server/bidi/bidiChromium.js +162 -0
  141. package/lib/server/bidi/bidiConnection.js +213 -0
  142. package/lib/server/bidi/bidiDeserializer.js +116 -0
  143. package/lib/server/bidi/bidiExecutionContext.js +267 -0
  144. package/lib/server/bidi/bidiFirefox.js +128 -0
  145. package/lib/server/bidi/bidiInput.js +146 -0
  146. package/lib/server/bidi/bidiNetworkManager.js +411 -0
  147. package/lib/server/bidi/bidiOverCdp.js +102 -0
  148. package/lib/server/bidi/bidiPage.js +598 -0
  149. package/lib/server/bidi/bidiPdf.js +106 -0
  150. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  151. package/lib/server/bidi/third_party/bidiKeyboard.js +256 -0
  152. package/lib/server/bidi/third_party/bidiProtocol.js +24 -0
  153. package/lib/server/bidi/third_party/bidiProtocolCore.js +180 -0
  154. package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
  155. package/lib/server/bidi/third_party/bidiSerializer.js +148 -0
  156. package/lib/server/bidi/third_party/firefoxPrefs.js +261 -0
  157. package/lib/server/browser.js +217 -0
  158. package/lib/server/browserContext.js +699 -0
  159. package/lib/server/browserType.js +337 -0
  160. package/lib/server/callLog.js +82 -0
  161. package/lib/server/chromium/appIcon.png +0 -0
  162. package/lib/server/chromium/chromium.js +399 -0
  163. package/lib/server/chromium/chromiumSwitches.js +104 -0
  164. package/lib/server/chromium/crBrowser.js +532 -0
  165. package/lib/server/chromium/crConnection.js +197 -0
  166. package/lib/server/chromium/crCoverage.js +235 -0
  167. package/lib/server/chromium/crDevTools.js +111 -0
  168. package/lib/server/chromium/crDragDrop.js +131 -0
  169. package/lib/server/chromium/crExecutionContext.js +146 -0
  170. package/lib/server/chromium/crInput.js +187 -0
  171. package/lib/server/chromium/crNetworkManager.js +708 -0
  172. package/lib/server/chromium/crPage.js +1004 -0
  173. package/lib/server/chromium/crPdf.js +121 -0
  174. package/lib/server/chromium/crProtocolHelper.js +145 -0
  175. package/lib/server/chromium/crServiceWorker.js +136 -0
  176. package/lib/server/chromium/defaultFontFamilies.js +162 -0
  177. package/lib/server/chromium/protocol.d.js +16 -0
  178. package/lib/server/clock.js +149 -0
  179. package/lib/server/codegen/csharp.js +327 -0
  180. package/lib/server/codegen/java.js +274 -0
  181. package/lib/server/codegen/javascript.js +247 -0
  182. package/lib/server/codegen/jsonl.js +52 -0
  183. package/lib/server/codegen/language.js +132 -0
  184. package/lib/server/codegen/languages.js +68 -0
  185. package/lib/server/codegen/python.js +279 -0
  186. package/lib/server/codegen/types.js +16 -0
  187. package/lib/server/console.js +61 -0
  188. package/lib/server/cookieStore.js +206 -0
  189. package/lib/server/debugController.js +197 -0
  190. package/lib/server/debugger.js +119 -0
  191. package/lib/server/deviceDescriptors.js +39 -0
  192. package/lib/server/deviceDescriptorsSource.json +1779 -0
  193. package/lib/server/dialog.js +116 -0
  194. package/lib/server/dispatchers/androidDispatcher.js +325 -0
  195. package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  196. package/lib/server/dispatchers/browserContextDispatcher.js +377 -0
  197. package/lib/server/dispatchers/browserDispatcher.js +124 -0
  198. package/lib/server/dispatchers/browserTypeDispatcher.js +71 -0
  199. package/lib/server/dispatchers/cdpSessionDispatcher.js +47 -0
  200. package/lib/server/dispatchers/debugControllerDispatcher.js +78 -0
  201. package/lib/server/dispatchers/dialogDispatcher.js +47 -0
  202. package/lib/server/dispatchers/dispatcher.js +364 -0
  203. package/lib/server/dispatchers/disposableDispatcher.js +39 -0
  204. package/lib/server/dispatchers/electronDispatcher.js +90 -0
  205. package/lib/server/dispatchers/elementHandlerDispatcher.js +181 -0
  206. package/lib/server/dispatchers/frameDispatcher.js +227 -0
  207. package/lib/server/dispatchers/jsHandleDispatcher.js +85 -0
  208. package/lib/server/dispatchers/jsonPipeDispatcher.js +58 -0
  209. package/lib/server/dispatchers/localUtilsDispatcher.js +185 -0
  210. package/lib/server/dispatchers/networkDispatchers.js +214 -0
  211. package/lib/server/dispatchers/pageAgentDispatcher.js +106 -0
  212. package/lib/server/dispatchers/pageDispatcher.js +441 -0
  213. package/lib/server/dispatchers/playwrightDispatcher.js +108 -0
  214. package/lib/server/dispatchers/streamDispatcher.js +67 -0
  215. package/lib/server/dispatchers/tracingDispatcher.js +68 -0
  216. package/lib/server/dispatchers/webSocketRouteDispatcher.js +164 -0
  217. package/lib/server/dispatchers/writableStreamDispatcher.js +79 -0
  218. package/lib/server/disposable.js +41 -0
  219. package/lib/server/dom.js +815 -0
  220. package/lib/server/download.js +71 -0
  221. package/lib/server/electron/electron.js +272 -0
  222. package/lib/server/electron/loader.js +30 -0
  223. package/lib/server/errors.js +69 -0
  224. package/lib/server/fetch.js +621 -0
  225. package/lib/server/fileChooser.js +43 -0
  226. package/lib/server/fileUploadUtils.js +84 -0
  227. package/lib/server/firefox/ffBrowser.js +415 -0
  228. package/lib/server/firefox/ffConnection.js +142 -0
  229. package/lib/server/firefox/ffExecutionContext.js +150 -0
  230. package/lib/server/firefox/ffInput.js +159 -0
  231. package/lib/server/firefox/ffNetworkManager.js +256 -0
  232. package/lib/server/firefox/ffPage.js +495 -0
  233. package/lib/server/firefox/firefox.js +114 -0
  234. package/lib/server/firefox/protocol.d.js +16 -0
  235. package/lib/server/formData.js +147 -0
  236. package/lib/server/frameSelectors.js +160 -0
  237. package/lib/server/frames.js +1476 -0
  238. package/lib/server/har/harRecorder.js +147 -0
  239. package/lib/server/har/harTracer.js +608 -0
  240. package/lib/server/harBackend.js +157 -0
  241. package/lib/server/helper.js +96 -0
  242. package/lib/server/index.js +58 -0
  243. package/lib/server/input.js +277 -0
  244. package/lib/server/instrumentation.js +72 -0
  245. package/lib/server/javascript.js +291 -0
  246. package/lib/server/launchApp.js +127 -0
  247. package/lib/server/localUtils.js +214 -0
  248. package/lib/server/macEditingCommands.js +143 -0
  249. package/lib/server/network.js +668 -0
  250. package/lib/server/page.js +915 -0
  251. package/lib/server/pipeTransport.js +89 -0
  252. package/lib/server/playwright.js +69 -0
  253. package/lib/server/progress.js +136 -0
  254. package/lib/server/protocolError.js +52 -0
  255. package/lib/server/recorder/chat.js +161 -0
  256. package/lib/server/recorder/recorderApp.js +367 -0
  257. package/lib/server/recorder/recorderRunner.js +138 -0
  258. package/lib/server/recorder/recorderSignalProcessor.js +83 -0
  259. package/lib/server/recorder/recorderUtils.js +157 -0
  260. package/lib/server/recorder/throttledFile.js +57 -0
  261. package/lib/server/recorder.js +533 -0
  262. package/lib/server/registry/browserFetcher.js +177 -0
  263. package/lib/server/registry/dependencies.js +371 -0
  264. package/lib/server/registry/index.js +1395 -0
  265. package/lib/server/registry/nativeDeps.js +1281 -0
  266. package/lib/server/registry/oopDownloadBrowserMain.js +127 -0
  267. package/lib/server/screencast.js +214 -0
  268. package/lib/server/screenshotter.js +333 -0
  269. package/lib/server/selectors.js +112 -0
  270. package/lib/server/socksClientCertificatesInterceptor.js +383 -0
  271. package/lib/server/socksInterceptor.js +95 -0
  272. package/lib/server/trace/recorder/snapshotter.js +147 -0
  273. package/lib/server/trace/recorder/snapshotterInjected.js +561 -0
  274. package/lib/server/trace/recorder/tracing.js +607 -0
  275. package/lib/server/trace/viewer/traceParser.js +72 -0
  276. package/lib/server/trace/viewer/traceViewer.js +244 -0
  277. package/lib/server/transport.js +181 -0
  278. package/lib/server/types.js +28 -0
  279. package/lib/server/usKeyboardLayout.js +145 -0
  280. package/lib/server/utils/ascii.js +44 -0
  281. package/lib/server/utils/comparators.js +139 -0
  282. package/lib/server/utils/crypto.js +216 -0
  283. package/lib/server/utils/debug.js +42 -0
  284. package/lib/server/utils/debugLogger.js +122 -0
  285. package/lib/server/utils/env.js +73 -0
  286. package/lib/server/utils/eventsHelper.js +39 -0
  287. package/lib/server/utils/expectUtils.js +123 -0
  288. package/lib/server/utils/fileUtils.js +191 -0
  289. package/lib/server/utils/happyEyeballs.js +207 -0
  290. package/lib/server/utils/hostPlatform.js +123 -0
  291. package/lib/server/utils/httpServer.js +205 -0
  292. package/lib/server/utils/image_tools/colorUtils.js +89 -0
  293. package/lib/server/utils/image_tools/compare.js +109 -0
  294. package/lib/server/utils/image_tools/imageChannel.js +78 -0
  295. package/lib/server/utils/image_tools/stats.js +102 -0
  296. package/lib/server/utils/linuxUtils.js +71 -0
  297. package/lib/server/utils/network.js +244 -0
  298. package/lib/server/utils/nodePlatform.js +154 -0
  299. package/lib/server/utils/pipeTransport.js +84 -0
  300. package/lib/server/utils/processLauncher.js +243 -0
  301. package/lib/server/utils/profiler.js +65 -0
  302. package/lib/server/utils/socksProxy.js +511 -0
  303. package/lib/server/utils/spawnAsync.js +41 -0
  304. package/lib/server/utils/task.js +51 -0
  305. package/lib/server/utils/userAgent.js +98 -0
  306. package/lib/server/utils/wsServer.js +121 -0
  307. package/lib/server/utils/zipFile.js +74 -0
  308. package/lib/server/utils/zones.js +57 -0
  309. package/lib/server/videoRecorder.js +133 -0
  310. package/lib/server/webkit/protocol.d.js +16 -0
  311. package/lib/server/webkit/webkit.js +108 -0
  312. package/lib/server/webkit/wkBrowser.js +331 -0
  313. package/lib/server/webkit/wkConnection.js +144 -0
  314. package/lib/server/webkit/wkExecutionContext.js +154 -0
  315. package/lib/server/webkit/wkInput.js +181 -0
  316. package/lib/server/webkit/wkInterceptableRequest.js +197 -0
  317. package/lib/server/webkit/wkPage.js +1164 -0
  318. package/lib/server/webkit/wkProvisionalPage.js +83 -0
  319. package/lib/server/webkit/wkWorkers.js +106 -0
  320. package/lib/serverRegistry.js +136 -0
  321. package/lib/third_party/pixelmatch.js +255 -0
  322. package/lib/tools/browserServerBackend.js +79 -0
  323. package/lib/tools/common.js +63 -0
  324. package/lib/tools/config.js +41 -0
  325. package/lib/tools/console.js +65 -0
  326. package/lib/tools/context.js +282 -0
  327. package/lib/tools/cookies.js +152 -0
  328. package/lib/tools/customDomLocatorCompiler.js +239 -0
  329. package/lib/tools/customDomResolverDiagnostics.js +100 -0
  330. package/lib/tools/customDomSnapshotFormatter.js +658 -0
  331. package/lib/tools/devtools.js +42 -0
  332. package/lib/tools/dialogs.js +59 -0
  333. package/lib/tools/evaluate.js +61 -0
  334. package/lib/tools/exports.js +57 -0
  335. package/lib/tools/files.js +58 -0
  336. package/lib/tools/form.js +63 -0
  337. package/lib/tools/keyboard.js +151 -0
  338. package/lib/tools/logFile.js +95 -0
  339. package/lib/tools/mouse.js +170 -0
  340. package/lib/tools/navigate.js +105 -0
  341. package/lib/tools/network.js +112 -0
  342. package/lib/tools/pdf.js +48 -0
  343. package/lib/tools/response.js +278 -0
  344. package/lib/tools/route.js +140 -0
  345. package/lib/tools/runCode.js +76 -0
  346. package/lib/tools/screenshot.js +87 -0
  347. package/lib/tools/sessionLog.js +75 -0
  348. package/lib/tools/snapshot.js +209 -0
  349. package/lib/tools/storage.js +67 -0
  350. package/lib/tools/tab.js +596 -0
  351. package/lib/tools/tabs.js +67 -0
  352. package/lib/tools/tool.js +47 -0
  353. package/lib/tools/tools.js +94 -0
  354. package/lib/tools/tracing.js +75 -0
  355. package/lib/tools/utils.js +88 -0
  356. package/lib/tools/verify.js +149 -0
  357. package/lib/tools/video.js +89 -0
  358. package/lib/tools/wait.js +63 -0
  359. package/lib/tools/webstorage.js +223 -0
  360. package/lib/utils/isomorphic/aiSnapshotTypes.js +16 -0
  361. package/lib/utils/isomorphic/ariaSnapshot.js +455 -0
  362. package/lib/utils/isomorphic/assert.js +31 -0
  363. package/lib/utils/isomorphic/colors.js +72 -0
  364. package/lib/utils/isomorphic/cssParser.js +245 -0
  365. package/lib/utils/isomorphic/cssTokenizer.js +1051 -0
  366. package/lib/utils/isomorphic/headers.js +53 -0
  367. package/lib/utils/isomorphic/imageUtils.js +141 -0
  368. package/lib/utils/isomorphic/locatorGenerators.js +689 -0
  369. package/lib/utils/isomorphic/locatorParser.js +176 -0
  370. package/lib/utils/isomorphic/locatorUtils.js +81 -0
  371. package/lib/utils/isomorphic/lruCache.js +51 -0
  372. package/lib/utils/isomorphic/manualPromise.js +114 -0
  373. package/lib/utils/isomorphic/mimeType.js +464 -0
  374. package/lib/utils/isomorphic/multimap.js +80 -0
  375. package/lib/utils/isomorphic/protocolFormatter.js +81 -0
  376. package/lib/utils/isomorphic/protocolMetainfo.js +345 -0
  377. package/lib/utils/isomorphic/rtti.js +43 -0
  378. package/lib/utils/isomorphic/selectorParser.js +386 -0
  379. package/lib/utils/isomorphic/semaphore.js +54 -0
  380. package/lib/utils/isomorphic/stackTrace.js +158 -0
  381. package/lib/utils/isomorphic/stringUtils.js +204 -0
  382. package/lib/utils/isomorphic/time.js +49 -0
  383. package/lib/utils/isomorphic/timeoutRunner.js +66 -0
  384. package/lib/utils/isomorphic/trace/entries.js +16 -0
  385. package/lib/utils/isomorphic/trace/snapshotRenderer.js +502 -0
  386. package/lib/utils/isomorphic/trace/snapshotServer.js +120 -0
  387. package/lib/utils/isomorphic/trace/snapshotStorage.js +89 -0
  388. package/lib/utils/isomorphic/trace/traceLoader.js +131 -0
  389. package/lib/utils/isomorphic/trace/traceModel.js +366 -0
  390. package/lib/utils/isomorphic/trace/traceModernizer.js +401 -0
  391. package/lib/utils/isomorphic/trace/versions/traceV3.js +16 -0
  392. package/lib/utils/isomorphic/trace/versions/traceV4.js +16 -0
  393. package/lib/utils/isomorphic/trace/versions/traceV5.js +16 -0
  394. package/lib/utils/isomorphic/trace/versions/traceV6.js +16 -0
  395. package/lib/utils/isomorphic/trace/versions/traceV7.js +16 -0
  396. package/lib/utils/isomorphic/trace/versions/traceV8.js +16 -0
  397. package/lib/utils/isomorphic/traceUtils.js +58 -0
  398. package/lib/utils/isomorphic/types.js +16 -0
  399. package/lib/utils/isomorphic/urlMatch.js +243 -0
  400. package/lib/utils/isomorphic/utilityScriptSerializers.js +262 -0
  401. package/lib/utils/isomorphic/yaml.js +84 -0
  402. package/lib/utils.js +111 -0
  403. package/lib/utilsBundle.js +112 -0
  404. package/lib/utilsBundleImpl/index.js +218 -0
  405. package/lib/utilsBundleImpl/xdg-open +1066 -0
  406. package/lib/vite/devtools/assets/index-D3CVnoLM.css +1 -0
  407. package/lib/vite/devtools/assets/index-wqccfruE.js +50 -0
  408. package/lib/vite/devtools/index.html +28 -0
  409. package/lib/vite/htmlReport/index.html +84 -0
  410. package/lib/vite/recorder/assets/codeMirrorModule-4NapTJOb.js +32 -0
  411. package/lib/vite/recorder/assets/codeMirrorModule-DYBRYzYX.css +1 -0
  412. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  413. package/lib/vite/recorder/assets/index-BSjZa4pk.css +1 -0
  414. package/lib/vite/recorder/assets/index-CD9lKVjM.js +193 -0
  415. package/lib/vite/recorder/index.html +29 -0
  416. package/lib/vite/recorder/playwright-logo.svg +9 -0
  417. package/lib/vite/traceViewer/assets/codeMirrorModule-RgXeHFoQ.js +32 -0
  418. package/lib/vite/traceViewer/assets/defaultSettingsView-DP6vvJEM.js +269 -0
  419. package/lib/vite/traceViewer/assets/xtermModule-CsJ4vdCR.js +9 -0
  420. package/lib/vite/traceViewer/codeMirrorModule.DYBRYzYX.css +1 -0
  421. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  422. package/lib/vite/traceViewer/defaultSettingsView.DQ9U-ctL.css +1 -0
  423. package/lib/vite/traceViewer/index.BVu7tZDe.css +1 -0
  424. package/lib/vite/traceViewer/index.D8YUXFVt.js +2 -0
  425. package/lib/vite/traceViewer/index.html +43 -0
  426. package/lib/vite/traceViewer/manifest.webmanifest +16 -0
  427. package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  428. package/lib/vite/traceViewer/snapshot.html +21 -0
  429. package/lib/vite/traceViewer/sw.bundle.js +5 -0
  430. package/lib/vite/traceViewer/uiMode.BIQFTUME.js +6 -0
  431. package/lib/vite/traceViewer/uiMode.Btcz36p_.css +1 -0
  432. package/lib/vite/traceViewer/uiMode.html +17 -0
  433. package/lib/vite/traceViewer/xtermModule.DYP7pi_n.css +32 -0
  434. package/lib/zipBundle.js +34 -0
  435. package/lib/zipBundleImpl.js +5 -0
  436. package/package.json +52 -0
  437. package/types/protocol.d.ts +24365 -0
  438. package/types/structs.d.ts +45 -0
  439. package/types/types.d.ts +23724 -0
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var webstorage_exports = {};
20
+ __export(webstorage_exports, {
21
+ default: () => webstorage_default
22
+ });
23
+ module.exports = __toCommonJS(webstorage_exports);
24
+ var import_mcpBundle = require("../mcpBundle");
25
+ var import_tool = require("./tool");
26
+ const localStorageList = (0, import_tool.defineTabTool)({
27
+ capability: "storage",
28
+ schema: {
29
+ name: "browser_localstorage_list",
30
+ title: "List localStorage",
31
+ description: "List all localStorage key-value pairs",
32
+ inputSchema: import_mcpBundle.z.object({}),
33
+ type: "readOnly"
34
+ },
35
+ handle: async (tab, params, response) => {
36
+ const items = await tab.page.evaluate(() => {
37
+ const result = [];
38
+ for (let i = 0; i < localStorage.length; i++) {
39
+ const key = localStorage.key(i);
40
+ if (key !== null)
41
+ result.push({ key, value: localStorage.getItem(key) || "" });
42
+ }
43
+ return result;
44
+ });
45
+ if (items.length === 0)
46
+ response.addTextResult("No localStorage items found");
47
+ else
48
+ response.addTextResult(items.map((item) => `${item.key}=${item.value}`).join("\n"));
49
+ response.addCode(`await page.evaluate(() => ({ ...localStorage }));`);
50
+ }
51
+ });
52
+ const localStorageGet = (0, import_tool.defineTabTool)({
53
+ capability: "storage",
54
+ schema: {
55
+ name: "browser_localstorage_get",
56
+ title: "Get localStorage item",
57
+ description: "Get a localStorage item by key",
58
+ inputSchema: import_mcpBundle.z.object({
59
+ key: import_mcpBundle.z.string().describe("Key to get")
60
+ }),
61
+ type: "readOnly"
62
+ },
63
+ handle: async (tab, params, response) => {
64
+ const value = await tab.page.evaluate((key) => localStorage.getItem(key), params.key);
65
+ if (value === null)
66
+ response.addTextResult(`localStorage key '${params.key}' not found`);
67
+ else
68
+ response.addTextResult(`${params.key}=${value}`);
69
+ response.addCode(`await page.evaluate(() => localStorage.getItem('${params.key}'));`);
70
+ }
71
+ });
72
+ const localStorageSet = (0, import_tool.defineTabTool)({
73
+ capability: "storage",
74
+ schema: {
75
+ name: "browser_localstorage_set",
76
+ title: "Set localStorage item",
77
+ description: "Set a localStorage item",
78
+ inputSchema: import_mcpBundle.z.object({
79
+ key: import_mcpBundle.z.string().describe("Key to set"),
80
+ value: import_mcpBundle.z.string().describe("Value to set")
81
+ }),
82
+ type: "action"
83
+ },
84
+ handle: async (tab, params, response) => {
85
+ await tab.page.evaluate(({ key, value }) => localStorage.setItem(key, value), params);
86
+ response.addCode(`await page.evaluate(() => localStorage.setItem('${params.key}', '${params.value}'));`);
87
+ }
88
+ });
89
+ const localStorageDelete = (0, import_tool.defineTabTool)({
90
+ capability: "storage",
91
+ schema: {
92
+ name: "browser_localstorage_delete",
93
+ title: "Delete localStorage item",
94
+ description: "Delete a localStorage item",
95
+ inputSchema: import_mcpBundle.z.object({
96
+ key: import_mcpBundle.z.string().describe("Key to delete")
97
+ }),
98
+ type: "action"
99
+ },
100
+ handle: async (tab, params, response) => {
101
+ await tab.page.evaluate((key) => localStorage.removeItem(key), params.key);
102
+ response.addCode(`await page.evaluate(() => localStorage.removeItem('${params.key}'));`);
103
+ }
104
+ });
105
+ const localStorageClear = (0, import_tool.defineTabTool)({
106
+ capability: "storage",
107
+ schema: {
108
+ name: "browser_localstorage_clear",
109
+ title: "Clear localStorage",
110
+ description: "Clear all localStorage",
111
+ inputSchema: import_mcpBundle.z.object({}),
112
+ type: "action"
113
+ },
114
+ handle: async (tab, params, response) => {
115
+ await tab.page.evaluate(() => localStorage.clear());
116
+ response.addCode(`await page.evaluate(() => localStorage.clear());`);
117
+ }
118
+ });
119
+ const sessionStorageList = (0, import_tool.defineTabTool)({
120
+ capability: "storage",
121
+ schema: {
122
+ name: "browser_sessionstorage_list",
123
+ title: "List sessionStorage",
124
+ description: "List all sessionStorage key-value pairs",
125
+ inputSchema: import_mcpBundle.z.object({}),
126
+ type: "readOnly"
127
+ },
128
+ handle: async (tab, params, response) => {
129
+ const items = await tab.page.evaluate(() => {
130
+ const result = [];
131
+ for (let i = 0; i < sessionStorage.length; i++) {
132
+ const key = sessionStorage.key(i);
133
+ if (key !== null)
134
+ result.push({ key, value: sessionStorage.getItem(key) || "" });
135
+ }
136
+ return result;
137
+ });
138
+ if (items.length === 0)
139
+ response.addTextResult("No sessionStorage items found");
140
+ else
141
+ response.addTextResult(items.map((item) => `${item.key}=${item.value}`).join("\n"));
142
+ response.addCode(`await page.evaluate(() => ({ ...sessionStorage }));`);
143
+ }
144
+ });
145
+ const sessionStorageGet = (0, import_tool.defineTabTool)({
146
+ capability: "storage",
147
+ schema: {
148
+ name: "browser_sessionstorage_get",
149
+ title: "Get sessionStorage item",
150
+ description: "Get a sessionStorage item by key",
151
+ inputSchema: import_mcpBundle.z.object({
152
+ key: import_mcpBundle.z.string().describe("Key to get")
153
+ }),
154
+ type: "readOnly"
155
+ },
156
+ handle: async (tab, params, response) => {
157
+ const value = await tab.page.evaluate((key) => sessionStorage.getItem(key), params.key);
158
+ if (value === null)
159
+ response.addTextResult(`sessionStorage key '${params.key}' not found`);
160
+ else
161
+ response.addTextResult(`${params.key}=${value}`);
162
+ response.addCode(`await page.evaluate(() => sessionStorage.getItem('${params.key}'));`);
163
+ }
164
+ });
165
+ const sessionStorageSet = (0, import_tool.defineTabTool)({
166
+ capability: "storage",
167
+ schema: {
168
+ name: "browser_sessionstorage_set",
169
+ title: "Set sessionStorage item",
170
+ description: "Set a sessionStorage item",
171
+ inputSchema: import_mcpBundle.z.object({
172
+ key: import_mcpBundle.z.string().describe("Key to set"),
173
+ value: import_mcpBundle.z.string().describe("Value to set")
174
+ }),
175
+ type: "action"
176
+ },
177
+ handle: async (tab, params, response) => {
178
+ await tab.page.evaluate(({ key, value }) => sessionStorage.setItem(key, value), params);
179
+ response.addCode(`await page.evaluate(() => sessionStorage.setItem('${params.key}', '${params.value}'));`);
180
+ }
181
+ });
182
+ const sessionStorageDelete = (0, import_tool.defineTabTool)({
183
+ capability: "storage",
184
+ schema: {
185
+ name: "browser_sessionstorage_delete",
186
+ title: "Delete sessionStorage item",
187
+ description: "Delete a sessionStorage item",
188
+ inputSchema: import_mcpBundle.z.object({
189
+ key: import_mcpBundle.z.string().describe("Key to delete")
190
+ }),
191
+ type: "action"
192
+ },
193
+ handle: async (tab, params, response) => {
194
+ await tab.page.evaluate((key) => sessionStorage.removeItem(key), params.key);
195
+ response.addCode(`await page.evaluate(() => sessionStorage.removeItem('${params.key}'));`);
196
+ }
197
+ });
198
+ const sessionStorageClear = (0, import_tool.defineTabTool)({
199
+ capability: "storage",
200
+ schema: {
201
+ name: "browser_sessionstorage_clear",
202
+ title: "Clear sessionStorage",
203
+ description: "Clear all sessionStorage",
204
+ inputSchema: import_mcpBundle.z.object({}),
205
+ type: "action"
206
+ },
207
+ handle: async (tab, params, response) => {
208
+ await tab.page.evaluate(() => sessionStorage.clear());
209
+ response.addCode(`await page.evaluate(() => sessionStorage.clear());`);
210
+ }
211
+ });
212
+ var webstorage_default = [
213
+ localStorageList,
214
+ localStorageGet,
215
+ localStorageSet,
216
+ localStorageDelete,
217
+ localStorageClear,
218
+ sessionStorageList,
219
+ sessionStorageGet,
220
+ sessionStorageSet,
221
+ sessionStorageDelete,
222
+ sessionStorageClear
223
+ ];
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var aiSnapshotTypes_exports = {};
16
+ module.exports = __toCommonJS(aiSnapshotTypes_exports);
@@ -0,0 +1,455 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var ariaSnapshot_exports = {};
20
+ __export(ariaSnapshot_exports, {
21
+ KeyParser: () => KeyParser,
22
+ ParserError: () => ParserError,
23
+ ariaNodesEqual: () => ariaNodesEqual,
24
+ findNewNode: () => findNewNode,
25
+ hasPointerCursor: () => hasPointerCursor,
26
+ parseAriaSnapshot: () => parseAriaSnapshot,
27
+ parseAriaSnapshotUnsafe: () => parseAriaSnapshotUnsafe,
28
+ textValue: () => textValue
29
+ });
30
+ module.exports = __toCommonJS(ariaSnapshot_exports);
31
+ function ariaNodesEqual(a, b) {
32
+ if (a.role !== b.role || a.name !== b.name)
33
+ return false;
34
+ if (!ariaPropsEqual(a, b) || hasPointerCursor(a) !== hasPointerCursor(b))
35
+ return false;
36
+ const aKeys = Object.keys(a.props);
37
+ const bKeys = Object.keys(b.props);
38
+ return aKeys.length === bKeys.length && aKeys.every((k) => a.props[k] === b.props[k]);
39
+ }
40
+ function hasPointerCursor(ariaNode) {
41
+ return ariaNode.box.cursor === "pointer";
42
+ }
43
+ function ariaPropsEqual(a, b) {
44
+ return a.active === b.active && a.checked === b.checked && a.disabled === b.disabled && a.expanded === b.expanded && a.selected === b.selected && a.level === b.level && a.pressed === b.pressed;
45
+ }
46
+ function parseAriaSnapshotUnsafe(yaml, text, options = {}) {
47
+ const result = parseAriaSnapshot(yaml, text, options);
48
+ if (result.errors.length)
49
+ throw new Error(result.errors[0].message);
50
+ return result.fragment;
51
+ }
52
+ function parseAriaSnapshot(yaml, text, options = {}) {
53
+ const lineCounter = new yaml.LineCounter();
54
+ const parseOptions = {
55
+ keepSourceTokens: true,
56
+ lineCounter,
57
+ ...options
58
+ };
59
+ const yamlDoc = yaml.parseDocument(text, parseOptions);
60
+ const errors = [];
61
+ const convertRange = (range) => {
62
+ return [lineCounter.linePos(range[0]), lineCounter.linePos(range[1])];
63
+ };
64
+ const addError = (error) => {
65
+ errors.push({
66
+ message: error.message,
67
+ range: [lineCounter.linePos(error.pos[0]), lineCounter.linePos(error.pos[1])]
68
+ });
69
+ };
70
+ const convertSeq = (container, seq) => {
71
+ for (const item of seq.items) {
72
+ const itemIsString = item instanceof yaml.Scalar && typeof item.value === "string";
73
+ if (itemIsString) {
74
+ const childNode = KeyParser.parse(item, parseOptions, errors);
75
+ if (childNode) {
76
+ container.children = container.children || [];
77
+ container.children.push(childNode);
78
+ }
79
+ continue;
80
+ }
81
+ const itemIsMap = item instanceof yaml.YAMLMap;
82
+ if (itemIsMap) {
83
+ convertMap(container, item);
84
+ continue;
85
+ }
86
+ errors.push({
87
+ message: "Sequence items should be strings or maps",
88
+ range: convertRange(item.range || seq.range)
89
+ });
90
+ }
91
+ };
92
+ const convertMap = (container, map) => {
93
+ for (const entry of map.items) {
94
+ container.children = container.children || [];
95
+ const keyIsString = entry.key instanceof yaml.Scalar && typeof entry.key.value === "string";
96
+ if (!keyIsString) {
97
+ errors.push({
98
+ message: "Only string keys are supported",
99
+ range: convertRange(entry.key.range || map.range)
100
+ });
101
+ continue;
102
+ }
103
+ const key = entry.key;
104
+ const value = entry.value;
105
+ if (key.value === "text") {
106
+ const valueIsString = value instanceof yaml.Scalar && typeof value.value === "string";
107
+ if (!valueIsString) {
108
+ errors.push({
109
+ message: "Text value should be a string",
110
+ range: convertRange(entry.value.range || map.range)
111
+ });
112
+ continue;
113
+ }
114
+ container.children.push({
115
+ kind: "text",
116
+ text: textValue(value.value)
117
+ });
118
+ continue;
119
+ }
120
+ if (key.value === "/children") {
121
+ const valueIsString = value instanceof yaml.Scalar && typeof value.value === "string";
122
+ if (!valueIsString || value.value !== "contain" && value.value !== "equal" && value.value !== "deep-equal") {
123
+ errors.push({
124
+ message: 'Strict value should be "contain", "equal" or "deep-equal"',
125
+ range: convertRange(entry.value.range || map.range)
126
+ });
127
+ continue;
128
+ }
129
+ container.containerMode = value.value;
130
+ continue;
131
+ }
132
+ if (key.value.startsWith("/")) {
133
+ const valueIsString = value instanceof yaml.Scalar && typeof value.value === "string";
134
+ if (!valueIsString) {
135
+ errors.push({
136
+ message: "Property value should be a string",
137
+ range: convertRange(entry.value.range || map.range)
138
+ });
139
+ continue;
140
+ }
141
+ container.props = container.props ?? {};
142
+ container.props[key.value.slice(1)] = textValue(value.value);
143
+ continue;
144
+ }
145
+ const childNode = KeyParser.parse(key, parseOptions, errors);
146
+ if (!childNode)
147
+ continue;
148
+ const valueIsScalar = value instanceof yaml.Scalar;
149
+ if (valueIsScalar) {
150
+ const type = typeof value.value;
151
+ if (type !== "string" && type !== "number" && type !== "boolean") {
152
+ errors.push({
153
+ message: "Node value should be a string or a sequence",
154
+ range: convertRange(entry.value.range || map.range)
155
+ });
156
+ continue;
157
+ }
158
+ container.children.push({
159
+ ...childNode,
160
+ children: [{
161
+ kind: "text",
162
+ text: textValue(String(value.value))
163
+ }]
164
+ });
165
+ continue;
166
+ }
167
+ const valueIsSequence = value instanceof yaml.YAMLSeq;
168
+ if (valueIsSequence) {
169
+ container.children.push(childNode);
170
+ convertSeq(childNode, value);
171
+ continue;
172
+ }
173
+ errors.push({
174
+ message: "Map values should be strings or sequences",
175
+ range: convertRange(entry.value.range || map.range)
176
+ });
177
+ }
178
+ };
179
+ const fragment = { kind: "role", role: "fragment" };
180
+ yamlDoc.errors.forEach(addError);
181
+ if (errors.length)
182
+ return { errors, fragment };
183
+ if (!(yamlDoc.contents instanceof yaml.YAMLSeq)) {
184
+ errors.push({
185
+ message: 'Aria snapshot must be a YAML sequence, elements starting with " -"',
186
+ range: yamlDoc.contents ? convertRange(yamlDoc.contents.range) : [{ line: 0, col: 0 }, { line: 0, col: 0 }]
187
+ });
188
+ }
189
+ if (errors.length)
190
+ return { errors, fragment };
191
+ convertSeq(fragment, yamlDoc.contents);
192
+ if (errors.length)
193
+ return { errors, fragment: emptyFragment };
194
+ if (fragment.children?.length === 1 && (!fragment.containerMode || fragment.containerMode === "contain"))
195
+ return { fragment: fragment.children[0], errors: [] };
196
+ return { fragment, errors: [] };
197
+ }
198
+ const emptyFragment = { kind: "role", role: "fragment" };
199
+ function normalizeWhitespace(text) {
200
+ return text.replace(/[\u200b\u00ad]/g, "").replace(/[\r\n\s\t]+/g, " ").trim();
201
+ }
202
+ function textValue(value) {
203
+ return {
204
+ raw: value,
205
+ normalized: normalizeWhitespace(value)
206
+ };
207
+ }
208
+ class KeyParser {
209
+ static parse(text, options, errors) {
210
+ try {
211
+ return new KeyParser(text.value)._parse();
212
+ } catch (e) {
213
+ if (e instanceof ParserError) {
214
+ const message = options.prettyErrors === false ? e.message : e.message + ":\n\n" + text.value + "\n" + " ".repeat(e.pos) + "^\n";
215
+ errors.push({
216
+ message,
217
+ range: [options.lineCounter.linePos(text.range[0]), options.lineCounter.linePos(text.range[0] + e.pos)]
218
+ });
219
+ return null;
220
+ }
221
+ throw e;
222
+ }
223
+ }
224
+ constructor(input) {
225
+ this._input = input;
226
+ this._pos = 0;
227
+ this._length = input.length;
228
+ }
229
+ _peek() {
230
+ return this._input[this._pos] || "";
231
+ }
232
+ _next() {
233
+ if (this._pos < this._length)
234
+ return this._input[this._pos++];
235
+ return null;
236
+ }
237
+ _eof() {
238
+ return this._pos >= this._length;
239
+ }
240
+ _isWhitespace() {
241
+ return !this._eof() && /\s/.test(this._peek());
242
+ }
243
+ _skipWhitespace() {
244
+ while (this._isWhitespace())
245
+ this._pos++;
246
+ }
247
+ _readIdentifier(type) {
248
+ if (this._eof())
249
+ this._throwError(`Unexpected end of input when expecting ${type}`);
250
+ const start = this._pos;
251
+ while (!this._eof() && /[a-zA-Z]/.test(this._peek()))
252
+ this._pos++;
253
+ return this._input.slice(start, this._pos);
254
+ }
255
+ _readString() {
256
+ let result = "";
257
+ let escaped = false;
258
+ while (!this._eof()) {
259
+ const ch = this._next();
260
+ if (escaped) {
261
+ result += ch;
262
+ escaped = false;
263
+ } else if (ch === "\\") {
264
+ escaped = true;
265
+ } else if (ch === '"') {
266
+ return result;
267
+ } else {
268
+ result += ch;
269
+ }
270
+ }
271
+ this._throwError("Unterminated string");
272
+ }
273
+ _throwError(message, offset = 0) {
274
+ throw new ParserError(message, offset || this._pos);
275
+ }
276
+ _readRegex() {
277
+ let result = "";
278
+ let escaped = false;
279
+ let insideClass = false;
280
+ while (!this._eof()) {
281
+ const ch = this._next();
282
+ if (escaped) {
283
+ result += ch;
284
+ escaped = false;
285
+ } else if (ch === "\\") {
286
+ escaped = true;
287
+ result += ch;
288
+ } else if (ch === "/" && !insideClass) {
289
+ return { pattern: result };
290
+ } else if (ch === "[") {
291
+ insideClass = true;
292
+ result += ch;
293
+ } else if (ch === "]" && insideClass) {
294
+ result += ch;
295
+ insideClass = false;
296
+ } else {
297
+ result += ch;
298
+ }
299
+ }
300
+ this._throwError("Unterminated regex");
301
+ }
302
+ _readStringOrRegex() {
303
+ const ch = this._peek();
304
+ if (ch === '"') {
305
+ this._next();
306
+ return normalizeWhitespace(this._readString());
307
+ }
308
+ if (ch === "/") {
309
+ this._next();
310
+ return this._readRegex();
311
+ }
312
+ return null;
313
+ }
314
+ _readAttributes(result) {
315
+ let errorPos = this._pos;
316
+ while (true) {
317
+ this._skipWhitespace();
318
+ if (this._peek() === "[") {
319
+ this._next();
320
+ this._skipWhitespace();
321
+ errorPos = this._pos;
322
+ const flagName = this._readIdentifier("attribute");
323
+ this._skipWhitespace();
324
+ let flagValue = "";
325
+ if (this._peek() === "=") {
326
+ this._next();
327
+ this._skipWhitespace();
328
+ errorPos = this._pos;
329
+ while (this._peek() !== "]" && !this._isWhitespace() && !this._eof())
330
+ flagValue += this._next();
331
+ }
332
+ this._skipWhitespace();
333
+ if (this._peek() !== "]")
334
+ this._throwError("Expected ]");
335
+ this._next();
336
+ this._applyAttribute(result, flagName, flagValue || "true", errorPos);
337
+ } else {
338
+ break;
339
+ }
340
+ }
341
+ }
342
+ _parse() {
343
+ this._skipWhitespace();
344
+ const role = this._readIdentifier("role");
345
+ this._skipWhitespace();
346
+ const name = this._readStringOrRegex() || "";
347
+ const result = { kind: "role", role, name };
348
+ this._readAttributes(result);
349
+ this._skipWhitespace();
350
+ if (!this._eof())
351
+ this._throwError("Unexpected input");
352
+ return result;
353
+ }
354
+ _applyAttribute(node, key, value, errorPos) {
355
+ if (key === "checked") {
356
+ this._assert(value === "true" || value === "false" || value === "mixed", 'Value of "checked" attribute must be a boolean or "mixed"', errorPos);
357
+ node.checked = value === "true" ? true : value === "false" ? false : "mixed";
358
+ return;
359
+ }
360
+ if (key === "disabled") {
361
+ this._assert(value === "true" || value === "false", 'Value of "disabled" attribute must be a boolean', errorPos);
362
+ node.disabled = value === "true";
363
+ return;
364
+ }
365
+ if (key === "expanded") {
366
+ this._assert(value === "true" || value === "false", 'Value of "expanded" attribute must be a boolean', errorPos);
367
+ node.expanded = value === "true";
368
+ return;
369
+ }
370
+ if (key === "active") {
371
+ this._assert(value === "true" || value === "false", 'Value of "active" attribute must be a boolean', errorPos);
372
+ node.active = value === "true";
373
+ return;
374
+ }
375
+ if (key === "level") {
376
+ this._assert(!isNaN(Number(value)), 'Value of "level" attribute must be a number', errorPos);
377
+ node.level = Number(value);
378
+ return;
379
+ }
380
+ if (key === "pressed") {
381
+ this._assert(value === "true" || value === "false" || value === "mixed", 'Value of "pressed" attribute must be a boolean or "mixed"', errorPos);
382
+ node.pressed = value === "true" ? true : value === "false" ? false : "mixed";
383
+ return;
384
+ }
385
+ if (key === "selected") {
386
+ this._assert(value === "true" || value === "false", 'Value of "selected" attribute must be a boolean', errorPos);
387
+ node.selected = value === "true";
388
+ return;
389
+ }
390
+ this._assert(false, `Unsupported attribute [${key}]`, errorPos);
391
+ }
392
+ _assert(value, message, valuePos) {
393
+ if (!value)
394
+ this._throwError(message || "Assertion error", valuePos);
395
+ }
396
+ }
397
+ class ParserError extends Error {
398
+ constructor(message, pos) {
399
+ super(message);
400
+ this.pos = pos;
401
+ }
402
+ }
403
+ function findNewNode(from, to) {
404
+ function fillMap(root, map, position) {
405
+ let size = 1;
406
+ let childPosition = position + size;
407
+ for (const child of root.children || []) {
408
+ if (typeof child === "string") {
409
+ size++;
410
+ childPosition++;
411
+ } else {
412
+ size += fillMap(child, map, childPosition);
413
+ childPosition += size;
414
+ }
415
+ }
416
+ if (!["none", "presentation", "fragment", "iframe", "generic"].includes(root.role) && root.name) {
417
+ let byRole = map.get(root.role);
418
+ if (!byRole) {
419
+ byRole = /* @__PURE__ */ new Map();
420
+ map.set(root.role, byRole);
421
+ }
422
+ const existing = byRole.get(root.name);
423
+ const sizeAndPosition = size * 100 - position;
424
+ if (!existing || existing.sizeAndPosition < sizeAndPosition)
425
+ byRole.set(root.name, { node: root, sizeAndPosition });
426
+ }
427
+ return size;
428
+ }
429
+ const fromMap = /* @__PURE__ */ new Map();
430
+ if (from)
431
+ fillMap(from, fromMap, 0);
432
+ const toMap = /* @__PURE__ */ new Map();
433
+ fillMap(to, toMap, 0);
434
+ const result = [];
435
+ for (const [role, byRole] of toMap) {
436
+ for (const [name, byName] of byRole) {
437
+ const inFrom = fromMap.get(role)?.get(name);
438
+ if (!inFrom)
439
+ result.push(byName);
440
+ }
441
+ }
442
+ result.sort((a, b) => b.sizeAndPosition - a.sizeAndPosition);
443
+ return result[0]?.node;
444
+ }
445
+ // Annotate the CommonJS export names for ESM import in node:
446
+ 0 && (module.exports = {
447
+ KeyParser,
448
+ ParserError,
449
+ ariaNodesEqual,
450
+ findNewNode,
451
+ hasPointerCursor,
452
+ parseAriaSnapshot,
453
+ parseAriaSnapshotUnsafe,
454
+ textValue
455
+ });