@stablyai/internal-playwright-core 0.1.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 (405) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +3 -0
  4. package/ThirdPartyNotices.txt +1134 -0
  5. package/bin/install_media_pack.ps1 +5 -0
  6. package/bin/install_webkit_wsl.ps1 +35 -0
  7. package/bin/reinstall_chrome_beta_linux.sh +42 -0
  8. package/bin/reinstall_chrome_beta_mac.sh +13 -0
  9. package/bin/reinstall_chrome_beta_win.ps1 +24 -0
  10. package/bin/reinstall_chrome_stable_linux.sh +42 -0
  11. package/bin/reinstall_chrome_stable_mac.sh +12 -0
  12. package/bin/reinstall_chrome_stable_win.ps1 +24 -0
  13. package/bin/reinstall_msedge_beta_linux.sh +48 -0
  14. package/bin/reinstall_msedge_beta_mac.sh +11 -0
  15. package/bin/reinstall_msedge_beta_win.ps1 +23 -0
  16. package/bin/reinstall_msedge_dev_linux.sh +48 -0
  17. package/bin/reinstall_msedge_dev_mac.sh +11 -0
  18. package/bin/reinstall_msedge_dev_win.ps1 +23 -0
  19. package/bin/reinstall_msedge_stable_linux.sh +48 -0
  20. package/bin/reinstall_msedge_stable_mac.sh +11 -0
  21. package/bin/reinstall_msedge_stable_win.ps1 +24 -0
  22. package/browsers.json +80 -0
  23. package/cli.js +18 -0
  24. package/index.d.ts +17 -0
  25. package/index.js +32 -0
  26. package/index.mjs +28 -0
  27. package/lib/androidServerImpl.js +65 -0
  28. package/lib/browserServerImpl.js +120 -0
  29. package/lib/cli/cli.js +58 -0
  30. package/lib/cli/driver.js +97 -0
  31. package/lib/cli/program.js +634 -0
  32. package/lib/cli/programWithTestStub.js +74 -0
  33. package/lib/client/accessibility.js +49 -0
  34. package/lib/client/android.js +361 -0
  35. package/lib/client/api.js +137 -0
  36. package/lib/client/artifact.js +79 -0
  37. package/lib/client/browser.js +163 -0
  38. package/lib/client/browserContext.js +529 -0
  39. package/lib/client/browserType.js +184 -0
  40. package/lib/client/cdpSession.js +51 -0
  41. package/lib/client/channelOwner.js +194 -0
  42. package/lib/client/clientHelper.js +64 -0
  43. package/lib/client/clientInstrumentation.js +55 -0
  44. package/lib/client/clientStackTrace.js +69 -0
  45. package/lib/client/clock.js +68 -0
  46. package/lib/client/connection.js +314 -0
  47. package/lib/client/consoleMessage.js +54 -0
  48. package/lib/client/coverage.js +44 -0
  49. package/lib/client/dialog.js +56 -0
  50. package/lib/client/download.js +62 -0
  51. package/lib/client/electron.js +138 -0
  52. package/lib/client/elementHandle.js +281 -0
  53. package/lib/client/errors.js +77 -0
  54. package/lib/client/eventEmitter.js +314 -0
  55. package/lib/client/events.js +99 -0
  56. package/lib/client/fetch.js +369 -0
  57. package/lib/client/fileChooser.js +46 -0
  58. package/lib/client/fileUtils.js +34 -0
  59. package/lib/client/frame.js +408 -0
  60. package/lib/client/harRouter.js +87 -0
  61. package/lib/client/input.js +84 -0
  62. package/lib/client/jsHandle.js +109 -0
  63. package/lib/client/jsonPipe.js +39 -0
  64. package/lib/client/localUtils.js +60 -0
  65. package/lib/client/locator.js +368 -0
  66. package/lib/client/network.js +747 -0
  67. package/lib/client/page.js +721 -0
  68. package/lib/client/platform.js +74 -0
  69. package/lib/client/playwright.js +71 -0
  70. package/lib/client/selectors.js +55 -0
  71. package/lib/client/stream.js +39 -0
  72. package/lib/client/timeoutSettings.js +79 -0
  73. package/lib/client/tracing.js +117 -0
  74. package/lib/client/types.js +28 -0
  75. package/lib/client/video.js +59 -0
  76. package/lib/client/waiter.js +142 -0
  77. package/lib/client/webError.js +39 -0
  78. package/lib/client/webSocket.js +93 -0
  79. package/lib/client/worker.js +63 -0
  80. package/lib/client/writableStream.js +39 -0
  81. package/lib/common/debugLogger.js +90 -0
  82. package/lib/common/socksProxy.js +569 -0
  83. package/lib/common/timeoutSettings.js +73 -0
  84. package/lib/common/types.js +5 -0
  85. package/lib/generated/bindingsControllerSource.js +28 -0
  86. package/lib/generated/clockSource.js +28 -0
  87. package/lib/generated/consoleApiSource.js +28 -0
  88. package/lib/generated/injectedScriptSource.js +28 -0
  89. package/lib/generated/pollingRecorderSource.js +28 -0
  90. package/lib/generated/recorderSource.js +28 -0
  91. package/lib/generated/storageScriptSource.js +28 -0
  92. package/lib/generated/utilityScriptSource.js +28 -0
  93. package/lib/generated/webSocketMockSource.js +336 -0
  94. package/lib/image_tools/colorUtils.js +98 -0
  95. package/lib/image_tools/compare.js +108 -0
  96. package/lib/image_tools/imageChannel.js +70 -0
  97. package/lib/image_tools/stats.js +102 -0
  98. package/lib/inProcessFactory.js +60 -0
  99. package/lib/index.js +19 -0
  100. package/lib/inprocess.js +3 -0
  101. package/lib/outofprocess.js +76 -0
  102. package/lib/protocol/debug.js +27 -0
  103. package/lib/protocol/serializers.js +192 -0
  104. package/lib/protocol/transport.js +82 -0
  105. package/lib/protocol/validator.js +2919 -0
  106. package/lib/protocol/validatorPrimitives.js +193 -0
  107. package/lib/remote/playwrightConnection.js +129 -0
  108. package/lib/remote/playwrightServer.js +335 -0
  109. package/lib/server/accessibility.js +69 -0
  110. package/lib/server/android/android.js +465 -0
  111. package/lib/server/android/backendAdb.js +177 -0
  112. package/lib/server/artifact.js +127 -0
  113. package/lib/server/bidi/bidiBrowser.js +490 -0
  114. package/lib/server/bidi/bidiChromium.js +153 -0
  115. package/lib/server/bidi/bidiConnection.js +212 -0
  116. package/lib/server/bidi/bidiExecutionContext.js +221 -0
  117. package/lib/server/bidi/bidiFirefox.js +130 -0
  118. package/lib/server/bidi/bidiInput.js +146 -0
  119. package/lib/server/bidi/bidiNetworkManager.js +383 -0
  120. package/lib/server/bidi/bidiOverCdp.js +102 -0
  121. package/lib/server/bidi/bidiPage.js +552 -0
  122. package/lib/server/bidi/bidiPdf.js +106 -0
  123. package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
  124. package/lib/server/bidi/third_party/bidiDeserializer.js +98 -0
  125. package/lib/server/bidi/third_party/bidiKeyboard.js +256 -0
  126. package/lib/server/bidi/third_party/bidiProtocol.js +24 -0
  127. package/lib/server/bidi/third_party/bidiProtocolCore.js +179 -0
  128. package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
  129. package/lib/server/bidi/third_party/bidiSerializer.js +148 -0
  130. package/lib/server/bidi/third_party/firefoxPrefs.js +259 -0
  131. package/lib/server/browser.js +149 -0
  132. package/lib/server/browserContext.js +695 -0
  133. package/lib/server/browserType.js +328 -0
  134. package/lib/server/callLog.js +82 -0
  135. package/lib/server/chromium/appIcon.png +0 -0
  136. package/lib/server/chromium/chromium.js +402 -0
  137. package/lib/server/chromium/chromiumSwitches.js +95 -0
  138. package/lib/server/chromium/crAccessibility.js +263 -0
  139. package/lib/server/chromium/crBrowser.js +501 -0
  140. package/lib/server/chromium/crConnection.js +202 -0
  141. package/lib/server/chromium/crCoverage.js +235 -0
  142. package/lib/server/chromium/crDevTools.js +113 -0
  143. package/lib/server/chromium/crDragDrop.js +131 -0
  144. package/lib/server/chromium/crExecutionContext.js +146 -0
  145. package/lib/server/chromium/crInput.js +187 -0
  146. package/lib/server/chromium/crNetworkManager.js +666 -0
  147. package/lib/server/chromium/crPage.js +1069 -0
  148. package/lib/server/chromium/crPdf.js +121 -0
  149. package/lib/server/chromium/crProtocolHelper.js +145 -0
  150. package/lib/server/chromium/crServiceWorker.js +123 -0
  151. package/lib/server/chromium/defaultFontFamilies.js +162 -0
  152. package/lib/server/chromium/protocol.d.js +16 -0
  153. package/lib/server/chromium/videoRecorder.js +113 -0
  154. package/lib/server/clock.js +149 -0
  155. package/lib/server/codegen/csharp.js +327 -0
  156. package/lib/server/codegen/java.js +274 -0
  157. package/lib/server/codegen/javascript.js +270 -0
  158. package/lib/server/codegen/jsonl.js +52 -0
  159. package/lib/server/codegen/language.js +132 -0
  160. package/lib/server/codegen/languages.js +68 -0
  161. package/lib/server/codegen/python.js +279 -0
  162. package/lib/server/codegen/types.js +16 -0
  163. package/lib/server/console.js +53 -0
  164. package/lib/server/cookieStore.js +206 -0
  165. package/lib/server/debugController.js +191 -0
  166. package/lib/server/debugger.js +119 -0
  167. package/lib/server/deviceDescriptors.js +39 -0
  168. package/lib/server/deviceDescriptorsSource.json +1779 -0
  169. package/lib/server/dialog.js +116 -0
  170. package/lib/server/dispatchers/androidDispatcher.js +325 -0
  171. package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  172. package/lib/server/dispatchers/browserContextDispatcher.js +364 -0
  173. package/lib/server/dispatchers/browserDispatcher.js +118 -0
  174. package/lib/server/dispatchers/browserTypeDispatcher.js +64 -0
  175. package/lib/server/dispatchers/cdpSessionDispatcher.js +44 -0
  176. package/lib/server/dispatchers/debugControllerDispatcher.js +78 -0
  177. package/lib/server/dispatchers/dialogDispatcher.js +47 -0
  178. package/lib/server/dispatchers/dispatcher.js +371 -0
  179. package/lib/server/dispatchers/electronDispatcher.js +89 -0
  180. package/lib/server/dispatchers/elementHandlerDispatcher.js +181 -0
  181. package/lib/server/dispatchers/frameDispatcher.js +227 -0
  182. package/lib/server/dispatchers/jsHandleDispatcher.js +85 -0
  183. package/lib/server/dispatchers/jsonPipeDispatcher.js +58 -0
  184. package/lib/server/dispatchers/localUtilsDispatcher.js +149 -0
  185. package/lib/server/dispatchers/networkDispatchers.js +213 -0
  186. package/lib/server/dispatchers/pageDispatcher.js +401 -0
  187. package/lib/server/dispatchers/playwrightDispatcher.js +108 -0
  188. package/lib/server/dispatchers/selectorsDispatcher.js +36 -0
  189. package/lib/server/dispatchers/streamDispatcher.js +67 -0
  190. package/lib/server/dispatchers/tracingDispatcher.js +68 -0
  191. package/lib/server/dispatchers/webSocketRouteDispatcher.js +165 -0
  192. package/lib/server/dispatchers/writableStreamDispatcher.js +79 -0
  193. package/lib/server/dom.js +806 -0
  194. package/lib/server/download.js +70 -0
  195. package/lib/server/electron/electron.js +270 -0
  196. package/lib/server/electron/loader.js +29 -0
  197. package/lib/server/errors.js +69 -0
  198. package/lib/server/fetch.js +621 -0
  199. package/lib/server/fileChooser.js +43 -0
  200. package/lib/server/fileUploadUtils.js +84 -0
  201. package/lib/server/firefox/ffAccessibility.js +238 -0
  202. package/lib/server/firefox/ffBrowser.js +428 -0
  203. package/lib/server/firefox/ffConnection.js +147 -0
  204. package/lib/server/firefox/ffExecutionContext.js +150 -0
  205. package/lib/server/firefox/ffInput.js +159 -0
  206. package/lib/server/firefox/ffNetworkManager.js +256 -0
  207. package/lib/server/firefox/ffPage.js +503 -0
  208. package/lib/server/firefox/firefox.js +116 -0
  209. package/lib/server/firefox/protocol.d.js +16 -0
  210. package/lib/server/formData.js +147 -0
  211. package/lib/server/frameSelectors.js +156 -0
  212. package/lib/server/frames.js +1502 -0
  213. package/lib/server/har/harRecorder.js +147 -0
  214. package/lib/server/har/harTracer.js +607 -0
  215. package/lib/server/harBackend.js +157 -0
  216. package/lib/server/helper.js +96 -0
  217. package/lib/server/index.js +58 -0
  218. package/lib/server/input.js +273 -0
  219. package/lib/server/instrumentation.js +69 -0
  220. package/lib/server/isomorphic/utilityScriptSerializers.js +212 -0
  221. package/lib/server/javascript.js +291 -0
  222. package/lib/server/launchApp.js +128 -0
  223. package/lib/server/localUtils.js +218 -0
  224. package/lib/server/macEditingCommands.js +143 -0
  225. package/lib/server/network.js +629 -0
  226. package/lib/server/page.js +871 -0
  227. package/lib/server/pipeTransport.js +89 -0
  228. package/lib/server/playwright.js +69 -0
  229. package/lib/server/progress.js +112 -0
  230. package/lib/server/protocolError.js +52 -0
  231. package/lib/server/recorder/chat.js +161 -0
  232. package/lib/server/recorder/codeGenerator.js +153 -0
  233. package/lib/server/recorder/csharp.js +310 -0
  234. package/lib/server/recorder/java.js +248 -0
  235. package/lib/server/recorder/javascript.js +229 -0
  236. package/lib/server/recorder/jsonl.js +47 -0
  237. package/lib/server/recorder/language.js +44 -0
  238. package/lib/server/recorder/python.js +276 -0
  239. package/lib/server/recorder/recorderActions.js +5 -0
  240. package/lib/server/recorder/recorderApp.js +387 -0
  241. package/lib/server/recorder/recorderRunner.js +138 -0
  242. package/lib/server/recorder/recorderSignalProcessor.js +83 -0
  243. package/lib/server/recorder/recorderUtils.js +157 -0
  244. package/lib/server/recorder/throttledFile.js +57 -0
  245. package/lib/server/recorder/utils.js +45 -0
  246. package/lib/server/recorder.js +499 -0
  247. package/lib/server/registry/browserFetcher.js +175 -0
  248. package/lib/server/registry/dependencies.js +371 -0
  249. package/lib/server/registry/index.js +1331 -0
  250. package/lib/server/registry/nativeDeps.js +1280 -0
  251. package/lib/server/registry/oopDownloadBrowserMain.js +120 -0
  252. package/lib/server/screenshotter.js +333 -0
  253. package/lib/server/selectors.js +112 -0
  254. package/lib/server/socksClientCertificatesInterceptor.js +383 -0
  255. package/lib/server/socksInterceptor.js +95 -0
  256. package/lib/server/stably/ai-tools/http-request.js +70 -0
  257. package/lib/server/stably/ai-tools/stablyApiCaller.js +137 -0
  258. package/lib/server/stably/autohealing/elementHandleFromCoordinates.js +64 -0
  259. package/lib/server/stably/autohealing/healingService.js +228 -0
  260. package/lib/server/stably/autohealing/screenshotFrame.js +41 -0
  261. package/lib/server/stably/constants.js +31 -0
  262. package/lib/server/trace/recorder/snapshotter.js +147 -0
  263. package/lib/server/trace/recorder/snapshotterInjected.js +541 -0
  264. package/lib/server/trace/recorder/tracing.js +602 -0
  265. package/lib/server/trace/test/inMemorySnapshotter.js +87 -0
  266. package/lib/server/trace/viewer/traceViewer.js +240 -0
  267. package/lib/server/transport.js +181 -0
  268. package/lib/server/types.js +28 -0
  269. package/lib/server/usKeyboardLayout.js +145 -0
  270. package/lib/server/utils/ascii.js +44 -0
  271. package/lib/server/utils/comparators.js +161 -0
  272. package/lib/server/utils/crypto.js +216 -0
  273. package/lib/server/utils/debug.js +42 -0
  274. package/lib/server/utils/debugLogger.js +122 -0
  275. package/lib/server/utils/env.js +73 -0
  276. package/lib/server/utils/eventsHelper.js +39 -0
  277. package/lib/server/utils/expectUtils.js +38 -0
  278. package/lib/server/utils/fileUtils.js +191 -0
  279. package/lib/server/utils/happyEyeballs.js +207 -0
  280. package/lib/server/utils/hostPlatform.js +111 -0
  281. package/lib/server/utils/httpServer.js +218 -0
  282. package/lib/server/utils/image_tools/colorUtils.js +89 -0
  283. package/lib/server/utils/image_tools/compare.js +109 -0
  284. package/lib/server/utils/image_tools/imageChannel.js +78 -0
  285. package/lib/server/utils/image_tools/stats.js +102 -0
  286. package/lib/server/utils/linuxUtils.js +71 -0
  287. package/lib/server/utils/network.js +233 -0
  288. package/lib/server/utils/nodePlatform.js +148 -0
  289. package/lib/server/utils/pipeTransport.js +84 -0
  290. package/lib/server/utils/processLauncher.js +241 -0
  291. package/lib/server/utils/profiler.js +65 -0
  292. package/lib/server/utils/socksProxy.js +511 -0
  293. package/lib/server/utils/spawnAsync.js +41 -0
  294. package/lib/server/utils/task.js +51 -0
  295. package/lib/server/utils/userAgent.js +98 -0
  296. package/lib/server/utils/wsServer.js +121 -0
  297. package/lib/server/utils/zipFile.js +74 -0
  298. package/lib/server/utils/zones.js +57 -0
  299. package/lib/server/webkit/protocol.d.js +16 -0
  300. package/lib/server/webkit/webkit.js +119 -0
  301. package/lib/server/webkit/wkAccessibility.js +237 -0
  302. package/lib/server/webkit/wkBrowser.js +339 -0
  303. package/lib/server/webkit/wkConnection.js +149 -0
  304. package/lib/server/webkit/wkExecutionContext.js +154 -0
  305. package/lib/server/webkit/wkInput.js +181 -0
  306. package/lib/server/webkit/wkInterceptableRequest.js +169 -0
  307. package/lib/server/webkit/wkPage.js +1134 -0
  308. package/lib/server/webkit/wkProvisionalPage.js +83 -0
  309. package/lib/server/webkit/wkWorkers.js +104 -0
  310. package/lib/server/webkit/wsl/webkit-wsl-transport-client.js +74 -0
  311. package/lib/server/webkit/wsl/webkit-wsl-transport-server.js +113 -0
  312. package/lib/third_party/diff_match_patch.js +2222 -0
  313. package/lib/third_party/pixelmatch.js +255 -0
  314. package/lib/utils/ascii.js +31 -0
  315. package/lib/utils/comparators.js +171 -0
  316. package/lib/utils/crypto.js +33 -0
  317. package/lib/utils/debug.js +46 -0
  318. package/lib/utils/debugLogger.js +89 -0
  319. package/lib/utils/env.js +49 -0
  320. package/lib/utils/eventsHelper.js +38 -0
  321. package/lib/utils/fileUtils.js +205 -0
  322. package/lib/utils/glob.js +83 -0
  323. package/lib/utils/happy-eyeballs.js +160 -0
  324. package/lib/utils/headers.js +52 -0
  325. package/lib/utils/hostPlatform.js +128 -0
  326. package/lib/utils/httpServer.js +236 -0
  327. package/lib/utils/index.js +346 -0
  328. package/lib/utils/isomorphic/ariaSnapshot.js +392 -0
  329. package/lib/utils/isomorphic/assert.js +31 -0
  330. package/lib/utils/isomorphic/colors.js +72 -0
  331. package/lib/utils/isomorphic/cssParser.js +245 -0
  332. package/lib/utils/isomorphic/cssTokenizer.js +1051 -0
  333. package/lib/utils/isomorphic/headers.js +53 -0
  334. package/lib/utils/isomorphic/locatorGenerators.js +673 -0
  335. package/lib/utils/isomorphic/locatorParser.js +176 -0
  336. package/lib/utils/isomorphic/locatorUtils.js +81 -0
  337. package/lib/utils/isomorphic/manualPromise.js +114 -0
  338. package/lib/utils/isomorphic/mimeType.js +459 -0
  339. package/lib/utils/isomorphic/multimap.js +80 -0
  340. package/lib/utils/isomorphic/protocolFormatter.js +78 -0
  341. package/lib/utils/isomorphic/protocolMetainfo.js +321 -0
  342. package/lib/utils/isomorphic/rtti.js +43 -0
  343. package/lib/utils/isomorphic/selectorParser.js +386 -0
  344. package/lib/utils/isomorphic/semaphore.js +54 -0
  345. package/lib/utils/isomorphic/stackTrace.js +158 -0
  346. package/lib/utils/isomorphic/stringUtils.js +155 -0
  347. package/lib/utils/isomorphic/time.js +49 -0
  348. package/lib/utils/isomorphic/timeoutRunner.js +66 -0
  349. package/lib/utils/isomorphic/traceUtils.js +58 -0
  350. package/lib/utils/isomorphic/types.js +16 -0
  351. package/lib/utils/isomorphic/urlMatch.js +176 -0
  352. package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
  353. package/lib/utils/linuxUtils.js +78 -0
  354. package/lib/utils/manualPromise.js +109 -0
  355. package/lib/utils/mimeType.js +29 -0
  356. package/lib/utils/multimap.js +75 -0
  357. package/lib/utils/network.js +188 -0
  358. package/lib/utils/processLauncher.js +248 -0
  359. package/lib/utils/profiler.js +53 -0
  360. package/lib/utils/rtti.js +44 -0
  361. package/lib/utils/semaphore.js +51 -0
  362. package/lib/utils/spawnAsync.js +45 -0
  363. package/lib/utils/stackTrace.js +121 -0
  364. package/lib/utils/task.js +58 -0
  365. package/lib/utils/time.js +37 -0
  366. package/lib/utils/timeoutRunner.js +66 -0
  367. package/lib/utils/traceUtils.js +44 -0
  368. package/lib/utils/userAgent.js +105 -0
  369. package/lib/utils/wsServer.js +127 -0
  370. package/lib/utils/zipFile.js +75 -0
  371. package/lib/utils/zones.js +62 -0
  372. package/lib/utils.js +107 -0
  373. package/lib/utilsBundle.js +109 -0
  374. package/lib/utilsBundleImpl/index.js +218 -0
  375. package/lib/utilsBundleImpl/xdg-open +1066 -0
  376. package/lib/vite/htmlReport/index.html +84 -0
  377. package/lib/vite/recorder/assets/codeMirrorModule-C3UTv-Ge.css +1 -0
  378. package/lib/vite/recorder/assets/codeMirrorModule-RJCXzfmE.js +24 -0
  379. package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  380. package/lib/vite/recorder/assets/index-Ri0uHF7I.css +1 -0
  381. package/lib/vite/recorder/assets/index-Y-X2TGJv.js +193 -0
  382. package/lib/vite/recorder/index.html +29 -0
  383. package/lib/vite/recorder/playwright-logo.svg +9 -0
  384. package/lib/vite/traceViewer/assets/codeMirrorModule-Bhnc5o2x.js +24 -0
  385. package/lib/vite/traceViewer/assets/defaultSettingsView-ClwvkA2N.js +265 -0
  386. package/lib/vite/traceViewer/assets/xtermModule-CsJ4vdCR.js +9 -0
  387. package/lib/vite/traceViewer/codeMirrorModule.C3UTv-Ge.css +1 -0
  388. package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  389. package/lib/vite/traceViewer/defaultSettingsView.TQ8_7ybu.css +1 -0
  390. package/lib/vite/traceViewer/index.DFO9NNF5.js +2 -0
  391. package/lib/vite/traceViewer/index.I8N9v4jT.css +1 -0
  392. package/lib/vite/traceViewer/index.html +43 -0
  393. package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  394. package/lib/vite/traceViewer/snapshot.html +21 -0
  395. package/lib/vite/traceViewer/sw.bundle.js +3 -0
  396. package/lib/vite/traceViewer/uiMode.Btcz36p_.css +1 -0
  397. package/lib/vite/traceViewer/uiMode.Shu3QS-1.js +5 -0
  398. package/lib/vite/traceViewer/uiMode.html +17 -0
  399. package/lib/vite/traceViewer/xtermModule.DYP7pi_n.css +32 -0
  400. package/lib/zipBundle.js +34 -0
  401. package/lib/zipBundleImpl.js +5 -0
  402. package/package.json +43 -0
  403. package/types/protocol.d.ts +23130 -0
  404. package/types/structs.d.ts +45 -0
  405. package/types/types.d.ts +22857 -0
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var oopDownloadBrowserMain_exports = {};
26
+ module.exports = __toCommonJS(oopDownloadBrowserMain_exports);
27
+ var import_fs = __toESM(require("fs"));
28
+ var import_path = __toESM(require("path"));
29
+ var import_manualPromise = require("../../utils/isomorphic/manualPromise");
30
+ var import_network = require("../utils/network");
31
+ var import_zipBundle = require("../../zipBundle");
32
+ function log(message) {
33
+ process.send?.({ method: "log", params: { message } });
34
+ }
35
+ function progress(done, total) {
36
+ process.send?.({ method: "progress", params: { done, total } });
37
+ }
38
+ function browserDirectoryToMarkerFilePath(browserDirectory) {
39
+ return import_path.default.join(browserDirectory, "INSTALLATION_COMPLETE");
40
+ }
41
+ function downloadFile(options) {
42
+ let downloadedBytes = 0;
43
+ let totalBytes = 0;
44
+ const promise = new import_manualPromise.ManualPromise();
45
+ (0, import_network.httpRequest)({
46
+ url: options.url,
47
+ headers: {
48
+ "User-Agent": options.userAgent
49
+ },
50
+ socketTimeout: options.socketTimeout
51
+ }, (response) => {
52
+ log(`-- response status code: ${response.statusCode}`);
53
+ if (response.statusCode !== 200) {
54
+ let content = "";
55
+ const handleError = () => {
56
+ const error = new Error(`Download failed: server returned code ${response.statusCode} body '${content}'. URL: ${options.url}`);
57
+ response.resume();
58
+ promise.reject(error);
59
+ };
60
+ response.on("data", (chunk) => content += chunk).on("end", handleError).on("error", handleError);
61
+ return;
62
+ }
63
+ totalBytes = parseInt(response.headers["content-length"] || "0", 10);
64
+ log(`-- total bytes: ${totalBytes}`);
65
+ const file = import_fs.default.createWriteStream(options.zipPath);
66
+ file.on("finish", () => {
67
+ if (downloadedBytes !== totalBytes) {
68
+ log(`-- download failed, size mismatch: ${downloadedBytes} != ${totalBytes}`);
69
+ promise.reject(new Error(`Download failed: size mismatch, file size: ${downloadedBytes}, expected size: ${totalBytes} URL: ${options.url}`));
70
+ } else {
71
+ log(`-- download complete, size: ${downloadedBytes}`);
72
+ promise.resolve();
73
+ }
74
+ });
75
+ file.on("error", (error) => promise.reject(error));
76
+ response.pipe(file);
77
+ response.on("data", onData);
78
+ response.on("error", (error) => {
79
+ file.close();
80
+ if (error?.code === "ECONNRESET") {
81
+ log(`-- download failed, server closed connection`);
82
+ promise.reject(new Error(`Download failed: server closed connection. URL: ${options.url}`));
83
+ } else {
84
+ log(`-- download failed, unexpected error`);
85
+ promise.reject(new Error(`Download failed: ${error?.message ?? error}. URL: ${options.url}`));
86
+ }
87
+ });
88
+ }, (error) => promise.reject(error));
89
+ return promise;
90
+ function onData(chunk) {
91
+ downloadedBytes += chunk.length;
92
+ progress(downloadedBytes, totalBytes);
93
+ }
94
+ }
95
+ async function main(options) {
96
+ await downloadFile(options);
97
+ log(`SUCCESS downloading ${options.title}`);
98
+ log(`extracting archive`);
99
+ await (0, import_zipBundle.extract)(options.zipPath, { dir: options.browserDirectory });
100
+ if (options.executablePath) {
101
+ log(`fixing permissions at ${options.executablePath}`);
102
+ await import_fs.default.promises.chmod(options.executablePath, 493);
103
+ }
104
+ await import_fs.default.promises.writeFile(browserDirectoryToMarkerFilePath(options.browserDirectory), "");
105
+ }
106
+ process.on("message", async (message) => {
107
+ const { method, params } = message;
108
+ if (method === "download") {
109
+ try {
110
+ await main(params);
111
+ process.exit(0);
112
+ } catch (e) {
113
+ console.error(e);
114
+ process.exit(1);
115
+ }
116
+ }
117
+ });
118
+ process.on("disconnect", () => {
119
+ process.exit(0);
120
+ });
@@ -0,0 +1,333 @@
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 screenshotter_exports = {};
20
+ __export(screenshotter_exports, {
21
+ Screenshotter: () => Screenshotter,
22
+ validateScreenshotOptions: () => validateScreenshotOptions
23
+ });
24
+ module.exports = __toCommonJS(screenshotter_exports);
25
+ var import_helper = require("./helper");
26
+ var import_utils = require("../utils");
27
+ var import_multimap = require("../utils/isomorphic/multimap");
28
+ function inPagePrepareForScreenshots(screenshotStyle, hideCaret, disableAnimations, syncAnimations) {
29
+ if (syncAnimations) {
30
+ const style = document.createElement("style");
31
+ style.textContent = "body {}";
32
+ document.head.appendChild(style);
33
+ document.documentElement.getBoundingClientRect();
34
+ style.remove();
35
+ }
36
+ if (!screenshotStyle && !hideCaret && !disableAnimations)
37
+ return;
38
+ const collectRoots = (root, roots2 = []) => {
39
+ roots2.push(root);
40
+ const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);
41
+ do {
42
+ const node = walker.currentNode;
43
+ const shadowRoot = node instanceof Element ? node.shadowRoot : null;
44
+ if (shadowRoot)
45
+ collectRoots(shadowRoot, roots2);
46
+ } while (walker.nextNode());
47
+ return roots2;
48
+ };
49
+ const roots = collectRoots(document);
50
+ const cleanupCallbacks = [];
51
+ if (screenshotStyle) {
52
+ for (const root of roots) {
53
+ const styleTag = document.createElement("style");
54
+ styleTag.textContent = screenshotStyle;
55
+ if (root === document)
56
+ document.documentElement.append(styleTag);
57
+ else
58
+ root.append(styleTag);
59
+ cleanupCallbacks.push(() => {
60
+ styleTag.remove();
61
+ });
62
+ }
63
+ }
64
+ if (hideCaret) {
65
+ const elements = /* @__PURE__ */ new Map();
66
+ for (const root of roots) {
67
+ root.querySelectorAll("input,textarea,[contenteditable]").forEach((element) => {
68
+ elements.set(element, {
69
+ value: element.style.getPropertyValue("caret-color"),
70
+ priority: element.style.getPropertyPriority("caret-color")
71
+ });
72
+ element.style.setProperty("caret-color", "transparent", "important");
73
+ });
74
+ }
75
+ cleanupCallbacks.push(() => {
76
+ for (const [element, value] of elements)
77
+ element.style.setProperty("caret-color", value.value, value.priority);
78
+ });
79
+ }
80
+ if (disableAnimations) {
81
+ const infiniteAnimationsToResume = /* @__PURE__ */ new Set();
82
+ const handleAnimations = (root) => {
83
+ for (const animation of root.getAnimations()) {
84
+ if (!animation.effect || animation.playbackRate === 0 || infiniteAnimationsToResume.has(animation))
85
+ continue;
86
+ const endTime = animation.effect.getComputedTiming().endTime;
87
+ if (Number.isFinite(endTime)) {
88
+ try {
89
+ animation.finish();
90
+ } catch (e) {
91
+ }
92
+ } else {
93
+ try {
94
+ animation.cancel();
95
+ infiniteAnimationsToResume.add(animation);
96
+ } catch (e) {
97
+ }
98
+ }
99
+ }
100
+ };
101
+ for (const root of roots) {
102
+ const handleRootAnimations = handleAnimations.bind(null, root);
103
+ handleRootAnimations();
104
+ root.addEventListener("transitionrun", handleRootAnimations);
105
+ root.addEventListener("animationstart", handleRootAnimations);
106
+ cleanupCallbacks.push(() => {
107
+ root.removeEventListener("transitionrun", handleRootAnimations);
108
+ root.removeEventListener("animationstart", handleRootAnimations);
109
+ });
110
+ }
111
+ cleanupCallbacks.push(() => {
112
+ for (const animation of infiniteAnimationsToResume) {
113
+ try {
114
+ animation.play();
115
+ } catch (e) {
116
+ }
117
+ }
118
+ });
119
+ }
120
+ window.__pwCleanupScreenshot = () => {
121
+ for (const cleanupCallback of cleanupCallbacks)
122
+ cleanupCallback();
123
+ delete window.__pwCleanupScreenshot;
124
+ };
125
+ }
126
+ class Screenshotter {
127
+ constructor(page) {
128
+ this._queue = new TaskQueue();
129
+ this._page = page;
130
+ this._queue = new TaskQueue();
131
+ }
132
+ async _originalViewportSize(progress) {
133
+ let viewportSize = this._page.emulatedSize()?.viewport;
134
+ if (!viewportSize)
135
+ viewportSize = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => ({ width: window.innerWidth, height: window.innerHeight }));
136
+ return viewportSize;
137
+ }
138
+ async _fullPageSize(progress) {
139
+ const fullPageSize = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => {
140
+ if (!document.body || !document.documentElement)
141
+ return null;
142
+ return {
143
+ width: Math.max(
144
+ document.body.scrollWidth,
145
+ document.documentElement.scrollWidth,
146
+ document.body.offsetWidth,
147
+ document.documentElement.offsetWidth,
148
+ document.body.clientWidth,
149
+ document.documentElement.clientWidth
150
+ ),
151
+ height: Math.max(
152
+ document.body.scrollHeight,
153
+ document.documentElement.scrollHeight,
154
+ document.body.offsetHeight,
155
+ document.documentElement.offsetHeight,
156
+ document.body.clientHeight,
157
+ document.documentElement.clientHeight
158
+ )
159
+ };
160
+ });
161
+ return fullPageSize;
162
+ }
163
+ async screenshotPage(progress, options) {
164
+ const format = validateScreenshotOptions(options);
165
+ return this._queue.postTask(async () => {
166
+ progress.log("taking page screenshot");
167
+ const viewportSize = await this._originalViewportSize(progress);
168
+ await this._preparePageForScreenshot(progress, this._page.mainFrame(), options.style, options.caret !== "initial", options.animations === "disabled");
169
+ try {
170
+ if (options.fullPage) {
171
+ const fullPageSize = await this._fullPageSize(progress);
172
+ let documentRect = { x: 0, y: 0, width: fullPageSize.width, height: fullPageSize.height };
173
+ const fitsViewport = fullPageSize.width <= viewportSize.width && fullPageSize.height <= viewportSize.height;
174
+ if (options.clip)
175
+ documentRect = trimClipToSize(options.clip, documentRect);
176
+ return await this._screenshot(progress, format, documentRect, void 0, fitsViewport, options);
177
+ }
178
+ const viewportRect = options.clip ? trimClipToSize(options.clip, viewportSize) : { x: 0, y: 0, ...viewportSize };
179
+ return await this._screenshot(progress, format, void 0, viewportRect, true, options);
180
+ } finally {
181
+ await this._restorePageAfterScreenshot();
182
+ }
183
+ });
184
+ }
185
+ async screenshotElement(progress, handle, options) {
186
+ const format = validateScreenshotOptions(options);
187
+ return this._queue.postTask(async () => {
188
+ progress.log("taking element screenshot");
189
+ const viewportSize = await this._originalViewportSize(progress);
190
+ await this._preparePageForScreenshot(progress, handle._frame, options.style, options.caret !== "initial", options.animations === "disabled");
191
+ try {
192
+ await handle._waitAndScrollIntoViewIfNeeded(
193
+ progress,
194
+ true
195
+ /* waitForVisible */
196
+ );
197
+ const boundingBox = await progress.race(handle.boundingBox());
198
+ (0, import_utils.assert)(boundingBox, "Node is either not visible or not an HTMLElement");
199
+ (0, import_utils.assert)(boundingBox.width !== 0, "Node has 0 width.");
200
+ (0, import_utils.assert)(boundingBox.height !== 0, "Node has 0 height.");
201
+ const fitsViewport = boundingBox.width <= viewportSize.width && boundingBox.height <= viewportSize.height;
202
+ const scrollOffset = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => ({ x: window.scrollX, y: window.scrollY }));
203
+ const documentRect = { ...boundingBox };
204
+ documentRect.x += scrollOffset.x;
205
+ documentRect.y += scrollOffset.y;
206
+ return await this._screenshot(progress, format, import_helper.helper.enclosingIntRect(documentRect), void 0, fitsViewport, options);
207
+ } finally {
208
+ await this._restorePageAfterScreenshot();
209
+ }
210
+ });
211
+ }
212
+ async _preparePageForScreenshot(progress, frame, screenshotStyle, hideCaret, disableAnimations) {
213
+ if (disableAnimations)
214
+ progress.log(" disabled all CSS animations");
215
+ const syncAnimations = this._page.delegate.shouldToggleStyleSheetToSyncAnimations();
216
+ await progress.race(this._page.safeNonStallingEvaluateInAllFrames("(" + inPagePrepareForScreenshots.toString() + `)(${JSON.stringify(screenshotStyle)}, ${hideCaret}, ${disableAnimations}, ${syncAnimations})`, "utility"));
217
+ try {
218
+ if (!process.env.PW_TEST_SCREENSHOT_NO_FONTS_READY) {
219
+ progress.log("waiting for fonts to load...");
220
+ await progress.race(frame.nonStallingEvaluateInExistingContext("document.fonts.ready", "utility").catch(() => {
221
+ }));
222
+ progress.log("fonts loaded");
223
+ }
224
+ } catch (error) {
225
+ await this._restorePageAfterScreenshot();
226
+ throw error;
227
+ }
228
+ }
229
+ async _restorePageAfterScreenshot() {
230
+ await this._page.safeNonStallingEvaluateInAllFrames("window.__pwCleanupScreenshot && window.__pwCleanupScreenshot()", "utility");
231
+ }
232
+ async _maskElements(progress, options) {
233
+ if (!options.mask || !options.mask.length)
234
+ return () => Promise.resolve();
235
+ const framesToParsedSelectors = new import_multimap.MultiMap();
236
+ await progress.race(Promise.all((options.mask || []).map(async ({ frame, selector }) => {
237
+ const pair = await frame.selectors.resolveFrameForSelector(selector);
238
+ if (pair)
239
+ framesToParsedSelectors.set(pair.frame, pair.info.parsed);
240
+ })));
241
+ const frames = [...framesToParsedSelectors.keys()];
242
+ const cleanup = async () => {
243
+ await Promise.all(frames.map((frame) => frame.hideHighlight()));
244
+ };
245
+ try {
246
+ const promises = frames.map((frame) => frame.maskSelectors(framesToParsedSelectors.get(frame), options.maskColor || "#F0F"));
247
+ await progress.race(Promise.all(promises));
248
+ return cleanup;
249
+ } catch (error) {
250
+ cleanup().catch(() => {
251
+ });
252
+ throw error;
253
+ }
254
+ }
255
+ async _screenshot(progress, format, documentRect, viewportRect, fitsViewport, options) {
256
+ if (options.__testHookBeforeScreenshot)
257
+ await progress.race(options.__testHookBeforeScreenshot());
258
+ const shouldSetDefaultBackground = options.omitBackground && format === "png";
259
+ if (shouldSetDefaultBackground)
260
+ await progress.race(this._page.delegate.setBackgroundColor({ r: 0, g: 0, b: 0, a: 0 }));
261
+ const cleanupHighlight = await this._maskElements(progress, options);
262
+ try {
263
+ const quality = format === "jpeg" ? options.quality ?? 80 : void 0;
264
+ const buffer = await this._page.delegate.takeScreenshot(progress, format, documentRect, viewportRect, quality, fitsViewport, options.scale || "device");
265
+ await cleanupHighlight();
266
+ if (shouldSetDefaultBackground)
267
+ await this._page.delegate.setBackgroundColor();
268
+ if (options.__testHookAfterScreenshot)
269
+ await progress.race(options.__testHookAfterScreenshot());
270
+ return buffer;
271
+ } catch (error) {
272
+ cleanupHighlight().catch(() => {
273
+ });
274
+ if (shouldSetDefaultBackground)
275
+ this._page.delegate.setBackgroundColor().catch(() => {
276
+ });
277
+ throw error;
278
+ }
279
+ }
280
+ }
281
+ class TaskQueue {
282
+ constructor() {
283
+ this._chain = Promise.resolve();
284
+ }
285
+ postTask(task) {
286
+ const result = this._chain.then(task);
287
+ this._chain = result.catch(() => {
288
+ });
289
+ return result;
290
+ }
291
+ }
292
+ function trimClipToSize(clip, size) {
293
+ const p1 = {
294
+ x: Math.max(0, Math.min(clip.x, size.width)),
295
+ y: Math.max(0, Math.min(clip.y, size.height))
296
+ };
297
+ const p2 = {
298
+ x: Math.max(0, Math.min(clip.x + clip.width, size.width)),
299
+ y: Math.max(0, Math.min(clip.y + clip.height, size.height))
300
+ };
301
+ const result = { x: p1.x, y: p1.y, width: p2.x - p1.x, height: p2.y - p1.y };
302
+ (0, import_utils.assert)(result.width && result.height, "Clipped area is either empty or outside the resulting image");
303
+ return result;
304
+ }
305
+ function validateScreenshotOptions(options) {
306
+ let format = null;
307
+ if (options.type) {
308
+ (0, import_utils.assert)(options.type === "png" || options.type === "jpeg", "Unknown options.type value: " + options.type);
309
+ format = options.type;
310
+ }
311
+ if (!format)
312
+ format = "png";
313
+ if (options.quality !== void 0) {
314
+ (0, import_utils.assert)(format === "jpeg", "options.quality is unsupported for the " + format + " screenshots");
315
+ (0, import_utils.assert)(typeof options.quality === "number", "Expected options.quality to be a number but found " + typeof options.quality);
316
+ (0, import_utils.assert)(Number.isInteger(options.quality), "Expected options.quality to be an integer");
317
+ (0, import_utils.assert)(options.quality >= 0 && options.quality <= 100, "Expected options.quality to be between 0 and 100 (inclusive), got " + options.quality);
318
+ }
319
+ if (options.clip) {
320
+ (0, import_utils.assert)(typeof options.clip.x === "number", "Expected options.clip.x to be a number but found " + typeof options.clip.x);
321
+ (0, import_utils.assert)(typeof options.clip.y === "number", "Expected options.clip.y to be a number but found " + typeof options.clip.y);
322
+ (0, import_utils.assert)(typeof options.clip.width === "number", "Expected options.clip.width to be a number but found " + typeof options.clip.width);
323
+ (0, import_utils.assert)(typeof options.clip.height === "number", "Expected options.clip.height to be a number but found " + typeof options.clip.height);
324
+ (0, import_utils.assert)(options.clip.width !== 0, "Expected options.clip.width not to be 0.");
325
+ (0, import_utils.assert)(options.clip.height !== 0, "Expected options.clip.height not to be 0.");
326
+ }
327
+ return format;
328
+ }
329
+ // Annotate the CommonJS export names for ESM import in node:
330
+ 0 && (module.exports = {
331
+ Screenshotter,
332
+ validateScreenshotOptions
333
+ });
@@ -0,0 +1,112 @@
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 selectors_exports = {};
20
+ __export(selectors_exports, {
21
+ Selectors: () => Selectors
22
+ });
23
+ module.exports = __toCommonJS(selectors_exports);
24
+ var import_crypto = require("./utils/crypto");
25
+ var import_selectorParser = require("../utils/isomorphic/selectorParser");
26
+ class Selectors {
27
+ constructor(engines, testIdAttributeName) {
28
+ this.guid = `selectors@${(0, import_crypto.createGuid)()}`;
29
+ this._builtinEngines = /* @__PURE__ */ new Set([
30
+ "css",
31
+ "css:light",
32
+ "xpath",
33
+ "xpath:light",
34
+ "_react",
35
+ "_vue",
36
+ "text",
37
+ "text:light",
38
+ "id",
39
+ "id:light",
40
+ "data-testid",
41
+ "data-testid:light",
42
+ "data-test-id",
43
+ "data-test-id:light",
44
+ "data-test",
45
+ "data-test:light",
46
+ "nth",
47
+ "visible",
48
+ "internal:control",
49
+ "internal:has",
50
+ "internal:has-not",
51
+ "internal:has-text",
52
+ "internal:has-not-text",
53
+ "internal:and",
54
+ "internal:or",
55
+ "internal:chain",
56
+ "role",
57
+ "internal:attr",
58
+ "internal:label",
59
+ "internal:text",
60
+ "internal:role",
61
+ "internal:testid",
62
+ "internal:describe",
63
+ "aria-ref"
64
+ ]);
65
+ this._builtinEnginesInMainWorld = /* @__PURE__ */ new Set([
66
+ "_react",
67
+ "_vue"
68
+ ]);
69
+ this._engines = /* @__PURE__ */ new Map();
70
+ this._testIdAttributeName = testIdAttributeName ?? "data-testid";
71
+ for (const engine of engines)
72
+ this.register(engine);
73
+ }
74
+ register(engine) {
75
+ if (!engine.name.match(/^[a-zA-Z_0-9-]+$/))
76
+ throw new Error("Selector engine name may only contain [a-zA-Z0-9_] characters");
77
+ if (this._builtinEngines.has(engine.name) || engine.name === "zs" || engine.name === "zs:light")
78
+ throw new Error(`"${engine.name}" is a predefined selector engine`);
79
+ if (this._engines.has(engine.name))
80
+ throw new Error(`"${engine.name}" selector engine has been already registered`);
81
+ this._engines.set(engine.name, engine);
82
+ }
83
+ testIdAttributeName() {
84
+ return this._testIdAttributeName;
85
+ }
86
+ setTestIdAttributeName(testIdAttributeName) {
87
+ this._testIdAttributeName = testIdAttributeName;
88
+ }
89
+ parseSelector(selector, strict) {
90
+ const parsed = typeof selector === "string" ? (0, import_selectorParser.parseSelector)(selector) : selector;
91
+ let needsMainWorld = false;
92
+ (0, import_selectorParser.visitAllSelectorParts)(parsed, (part) => {
93
+ const name = part.name;
94
+ const custom = this._engines.get(name);
95
+ if (!custom && !this._builtinEngines.has(name))
96
+ throw new import_selectorParser.InvalidSelectorError(`Unknown engine "${name}" while parsing selector ${(0, import_selectorParser.stringifySelector)(parsed)}`);
97
+ if (custom && !custom.contentScript)
98
+ needsMainWorld = true;
99
+ if (this._builtinEnginesInMainWorld.has(name))
100
+ needsMainWorld = true;
101
+ });
102
+ return {
103
+ parsed,
104
+ world: needsMainWorld ? "main" : "utility",
105
+ strict
106
+ };
107
+ }
108
+ }
109
+ // Annotate the CommonJS export names for ESM import in node:
110
+ 0 && (module.exports = {
111
+ Selectors
112
+ });