@rehearsal-labs/retest 0.1.0 → 0.3.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 (502) hide show
  1. package/README.md +12 -5
  2. package/dist/agent/session.d.ts +21 -2
  3. package/dist/agent/session.d.ts.map +1 -1
  4. package/dist/agent/session.js +73 -11
  5. package/dist/api/app-page.d.ts +39 -3
  6. package/dist/api/app-page.d.ts.map +1 -1
  7. package/dist/api/app-page.js +108 -0
  8. package/dist/api/dialog.d.ts +38 -0
  9. package/dist/api/dialog.d.ts.map +1 -0
  10. package/dist/api/dialog.js +78 -0
  11. package/dist/api/drag.d.ts +32 -0
  12. package/dist/api/drag.d.ts.map +1 -0
  13. package/dist/api/drag.js +26 -0
  14. package/dist/api/files.d.ts +49 -0
  15. package/dist/api/files.d.ts.map +1 -0
  16. package/dist/api/files.js +168 -0
  17. package/dist/api/inbox.d.ts +97 -0
  18. package/dist/api/inbox.d.ts.map +1 -0
  19. package/dist/api/inbox.js +191 -0
  20. package/dist/api/locator-recipes.d.ts +1 -1
  21. package/dist/api/locator-recipes.d.ts.map +1 -1
  22. package/dist/api/locator-recipes.js +4 -3
  23. package/dist/api/page.d.ts +214 -4
  24. package/dist/api/page.d.ts.map +1 -1
  25. package/dist/api/route.d.ts +21 -0
  26. package/dist/api/route.d.ts.map +1 -0
  27. package/dist/api/route.js +99 -0
  28. package/dist/api/source-location.d.ts.map +1 -1
  29. package/dist/api/source-location.js +3 -1
  30. package/dist/api/test-run.d.ts +127 -1
  31. package/dist/api/test-run.d.ts.map +1 -1
  32. package/dist/api/test-run.js +293 -0
  33. package/dist/assertions/expect.d.ts +91 -2
  34. package/dist/assertions/expect.d.ts.map +1 -1
  35. package/dist/assertions/expect.js +98 -0
  36. package/dist/assertions/look-until.d.ts +5 -0
  37. package/dist/assertions/look-until.d.ts.map +1 -1
  38. package/dist/assertions/look-until.js +1 -1
  39. package/dist/assertions/poll-layout.d.ts +24 -0
  40. package/dist/assertions/poll-layout.d.ts.map +1 -0
  41. package/dist/assertions/poll-layout.js +63 -0
  42. package/dist/assertions/screenshot.d.ts +36 -0
  43. package/dist/assertions/screenshot.d.ts.map +1 -0
  44. package/dist/assertions/screenshot.js +125 -0
  45. package/dist/browser/accessibility.d.ts.map +1 -1
  46. package/dist/browser/accessibility.js +22 -1
  47. package/dist/browser/actionability.d.ts +9 -6
  48. package/dist/browser/actionability.d.ts.map +1 -1
  49. package/dist/browser/actionability.js +17 -8
  50. package/dist/browser/browser.d.ts.map +1 -1
  51. package/dist/browser/browser.js +15 -4
  52. package/dist/browser/builds.d.ts +35 -6
  53. package/dist/browser/builds.d.ts.map +1 -1
  54. package/dist/browser/builds.js +115 -16
  55. package/dist/browser/cdp/connection.d.ts +6 -0
  56. package/dist/browser/cdp/connection.d.ts.map +1 -1
  57. package/dist/browser/cdp/connection.js +8 -0
  58. package/dist/browser/cdp/transport.d.ts.map +1 -1
  59. package/dist/browser/cdp/transport.js +4 -4
  60. package/dist/browser/checked-state.d.ts +2 -2
  61. package/dist/browser/checked-state.d.ts.map +1 -1
  62. package/dist/browser/chromium-process.d.ts +32 -2
  63. package/dist/browser/chromium-process.d.ts.map +1 -1
  64. package/dist/browser/chromium-process.js +95 -17
  65. package/dist/browser/contract.d.ts +119 -5
  66. package/dist/browser/contract.d.ts.map +1 -1
  67. package/dist/browser/dialogs.d.ts +157 -0
  68. package/dist/browser/dialogs.d.ts.map +1 -0
  69. package/dist/browser/dialogs.js +271 -0
  70. package/dist/browser/downloads.d.ts +71 -0
  71. package/dist/browser/downloads.d.ts.map +1 -0
  72. package/dist/browser/downloads.js +253 -0
  73. package/dist/browser/drag.d.ts +50 -0
  74. package/dist/browser/drag.d.ts.map +1 -0
  75. package/dist/browser/drag.js +584 -0
  76. package/dist/browser/electron-window-watch.d.ts +32 -0
  77. package/dist/browser/electron-window-watch.d.ts.map +1 -0
  78. package/dist/browser/electron-window-watch.js +93 -0
  79. package/dist/browser/electron.d.ts +14 -3
  80. package/dist/browser/electron.d.ts.map +1 -1
  81. package/dist/browser/electron.js +57 -9
  82. package/dist/browser/element-queries.d.ts +51 -15
  83. package/dist/browser/element-queries.d.ts.map +1 -1
  84. package/dist/browser/element-queries.js +92 -13
  85. package/dist/browser/emulation.d.ts.map +1 -1
  86. package/dist/browser/emulation.js +7 -5
  87. package/dist/browser/executables.d.ts +16 -1
  88. package/dist/browser/executables.d.ts.map +1 -1
  89. package/dist/browser/executables.js +50 -18
  90. package/dist/browser/file-chooser.d.ts +75 -0
  91. package/dist/browser/file-chooser.d.ts.map +1 -0
  92. package/dist/browser/file-chooser.js +449 -0
  93. package/dist/browser/firefox/accessible-names.d.ts +5 -4
  94. package/dist/browser/firefox/accessible-names.d.ts.map +1 -1
  95. package/dist/browser/firefox/accessible-names.js +11 -6
  96. package/dist/browser/firefox/bridge.js +3 -2
  97. package/dist/browser/firefox/executable.d.ts +14 -14
  98. package/dist/browser/firefox/executable.d.ts.map +1 -1
  99. package/dist/browser/firefox/executable.js +29 -21
  100. package/dist/browser/firefox/input.d.ts +5 -0
  101. package/dist/browser/firefox/input.d.ts.map +1 -1
  102. package/dist/browser/firefox/input.js +6 -3
  103. package/dist/browser/firefox/launch.js +1 -1
  104. package/dist/browser/firefox/navigation.d.ts +5 -2
  105. package/dist/browser/firefox/navigation.d.ts.map +1 -1
  106. package/dist/browser/firefox/navigation.js +48 -14
  107. package/dist/browser/firefox/orphans.d.ts.map +1 -1
  108. package/dist/browser/firefox/orphans.js +34 -2
  109. package/dist/browser/firefox/page.d.ts +11 -1
  110. package/dist/browser/firefox/page.d.ts.map +1 -1
  111. package/dist/browser/firefox/page.js +179 -26
  112. package/dist/browser/firefox/process.d.ts +20 -1
  113. package/dist/browser/firefox/process.d.ts.map +1 -1
  114. package/dist/browser/firefox/process.js +124 -22
  115. package/dist/browser/firefox/profile.d.ts +5 -0
  116. package/dist/browser/firefox/profile.d.ts.map +1 -1
  117. package/dist/browser/firefox/profile.js +17 -1
  118. package/dist/browser/firefox/storage.d.ts.map +1 -1
  119. package/dist/browser/firefox/storage.js +4 -2
  120. package/dist/browser/firefox/subscriptions.d.ts +26 -0
  121. package/dist/browser/firefox/subscriptions.d.ts.map +1 -0
  122. package/dist/browser/firefox/subscriptions.js +10 -0
  123. package/dist/browser/frames.d.ts +205 -0
  124. package/dist/browser/frames.d.ts.map +1 -0
  125. package/dist/browser/frames.js +657 -0
  126. package/dist/browser/input-guard.d.ts +18 -5
  127. package/dist/browser/input-guard.d.ts.map +1 -1
  128. package/dist/browser/input-guard.js +65 -6
  129. package/dist/browser/isolated-world.d.ts +8 -1
  130. package/dist/browser/isolated-world.d.ts.map +1 -1
  131. package/dist/browser/launch.d.ts +6 -0
  132. package/dist/browser/launch.d.ts.map +1 -1
  133. package/dist/browser/launch.js +14 -1
  134. package/dist/browser/layout.d.ts +120 -0
  135. package/dist/browser/layout.d.ts.map +1 -0
  136. package/dist/browser/layout.js +213 -0
  137. package/dist/browser/locate.d.ts +10 -0
  138. package/dist/browser/locate.d.ts.map +1 -1
  139. package/dist/browser/locate.js +24 -6
  140. package/dist/browser/origin-document.d.ts +4 -0
  141. package/dist/browser/origin-document.d.ts.map +1 -1
  142. package/dist/browser/origin-document.js +9 -1
  143. package/dist/browser/page-scripts.d.ts +48 -0
  144. package/dist/browser/page-scripts.d.ts.map +1 -1
  145. package/dist/browser/page-scripts.js +515 -39
  146. package/dist/browser/page.d.ts +60 -1
  147. package/dist/browser/page.d.ts.map +1 -1
  148. package/dist/browser/page.js +275 -32
  149. package/dist/browser/popups.d.ts +166 -0
  150. package/dist/browser/popups.d.ts.map +1 -0
  151. package/dist/browser/popups.js +317 -0
  152. package/dist/browser/routes.d.ts +97 -0
  153. package/dist/browser/routes.d.ts.map +1 -0
  154. package/dist/browser/routes.js +226 -0
  155. package/dist/browser/screenshot.d.ts +44 -0
  156. package/dist/browser/screenshot.d.ts.map +1 -0
  157. package/dist/browser/screenshot.js +51 -0
  158. package/dist/browser/shadow-candidates.d.ts +20 -0
  159. package/dist/browser/shadow-candidates.d.ts.map +1 -0
  160. package/dist/browser/shadow-candidates.js +77 -0
  161. package/dist/browser/webkit/page.d.ts +11 -1
  162. package/dist/browser/webkit/page.d.ts.map +1 -1
  163. package/dist/browser/webkit/page.js +53 -2
  164. package/dist/browser/webkit/relay.d.ts.map +1 -1
  165. package/dist/browser/webkit/relay.js +5 -1
  166. package/dist/cli/commands/doctor.js +3 -3
  167. package/dist/cli/commands/inspect.js +3 -2
  168. package/dist/cli/commands/install.d.ts.map +1 -1
  169. package/dist/cli/commands/install.js +26 -13
  170. package/dist/cli/commands/licences.d.ts +22 -0
  171. package/dist/cli/commands/licences.d.ts.map +1 -1
  172. package/dist/cli/commands/licences.js +62 -20
  173. package/dist/cli/commands/run.d.ts.map +1 -1
  174. package/dist/cli/commands/run.js +4 -2
  175. package/dist/cli/doctor/checks.js +4 -1
  176. package/dist/cli/inspect/diagnostics.js +3 -3
  177. package/dist/cli/inspect/test-timeline.d.ts.map +1 -1
  178. package/dist/cli/inspect/test-timeline.js +45 -11
  179. package/dist/cli/install/doctor-rows.d.ts.map +1 -1
  180. package/dist/cli/install/doctor-rows.js +5 -4
  181. package/dist/cli/install/file-changes.d.ts +44 -0
  182. package/dist/cli/install/file-changes.d.ts.map +1 -0
  183. package/dist/cli/install/file-changes.js +81 -0
  184. package/dist/cli/install/install-archive.d.ts +3 -1
  185. package/dist/cli/install/install-archive.d.ts.map +1 -1
  186. package/dist/cli/install/install-archive.js +80 -33
  187. package/dist/cli/install/lock.d.ts.map +1 -1
  188. package/dist/cli/install/lock.js +108 -21
  189. package/dist/cli/install/media-doctor.d.ts.map +1 -1
  190. package/dist/cli/install/media-doctor.js +2 -1
  191. package/dist/cli/install/media-install.d.ts.map +1 -1
  192. package/dist/cli/install/media-install.js +38 -19
  193. package/dist/cli/install/media-pins.d.ts +7 -1
  194. package/dist/cli/install/media-pins.d.ts.map +1 -1
  195. package/dist/cli/install/media-pins.js +23 -12
  196. package/dist/cli/install/media-record.d.ts.map +1 -1
  197. package/dist/cli/install/media-record.js +10 -9
  198. package/dist/cli/install/media-report.d.ts +3 -1
  199. package/dist/cli/install/media-report.d.ts.map +1 -1
  200. package/dist/cli/install/media-report.js +7 -5
  201. package/dist/cli/install/media-tools.d.ts.map +1 -1
  202. package/dist/cli/install/media-tools.js +6 -4
  203. package/dist/cli/install/process-start.d.ts +3 -2
  204. package/dist/cli/install/process-start.d.ts.map +1 -1
  205. package/dist/cli/install/process-start.js +4 -0
  206. package/dist/cli/install/report.d.ts.map +1 -1
  207. package/dist/cli/install/report.js +11 -7
  208. package/dist/cli/install/supervisor-install.d.ts +33 -0
  209. package/dist/cli/install/supervisor-install.d.ts.map +1 -0
  210. package/dist/cli/install/supervisor-install.js +158 -0
  211. package/dist/cli/install/supervisor-locate.d.ts +47 -0
  212. package/dist/cli/install/supervisor-locate.d.ts.map +1 -0
  213. package/dist/cli/install/supervisor-locate.js +113 -0
  214. package/dist/cli/install/supervisor-pins.d.ts +21 -0
  215. package/dist/cli/install/supervisor-pins.d.ts.map +1 -0
  216. package/dist/cli/install/supervisor-pins.js +28 -0
  217. package/dist/cli/install/supervisor-record.d.ts +31 -0
  218. package/dist/cli/install/supervisor-record.d.ts.map +1 -0
  219. package/dist/cli/install/supervisor-record.js +104 -0
  220. package/dist/cli/install/supervisor-report.d.ts +11 -0
  221. package/dist/cli/install/supervisor-report.d.ts.map +1 -0
  222. package/dist/cli/install/supervisor-report.js +33 -0
  223. package/dist/cli/install/supervisor-tools.d.ts +43 -0
  224. package/dist/cli/install/supervisor-tools.d.ts.map +1 -0
  225. package/dist/cli/install/supervisor-tools.js +114 -0
  226. package/dist/cli/install/unpack.d.ts +23 -3
  227. package/dist/cli/install/unpack.d.ts.map +1 -1
  228. package/dist/cli/install/unpack.js +124 -10
  229. package/dist/cli/install/zip-member.d.ts +15 -0
  230. package/dist/cli/install/zip-member.d.ts.map +1 -0
  231. package/dist/cli/install/zip-member.js +77 -0
  232. package/dist/cli/interrupt.d.ts +1 -1
  233. package/dist/cli/interrupt.d.ts.map +1 -1
  234. package/dist/cli/interrupt.js +15 -10
  235. package/dist/cli/terminal.d.ts +9 -1
  236. package/dist/cli/terminal.d.ts.map +1 -1
  237. package/dist/cli/terminal.js +14 -0
  238. package/dist/config/define.d.ts +2 -2
  239. package/dist/config/define.js +2 -2
  240. package/dist/config/loaded.d.ts +12 -2
  241. package/dist/config/loaded.d.ts.map +1 -1
  242. package/dist/config/read-inboxes.d.ts +10 -0
  243. package/dist/config/read-inboxes.d.ts.map +1 -0
  244. package/dist/config/read-inboxes.js +78 -0
  245. package/dist/config/register.d.ts +5 -1
  246. package/dist/config/register.d.ts.map +1 -1
  247. package/dist/config/types.d.ts +36 -0
  248. package/dist/config/types.d.ts.map +1 -1
  249. package/dist/config/validate.d.ts.map +1 -1
  250. package/dist/config/validate.js +4 -1
  251. package/dist/diagnostics/artifact.d.ts.map +1 -1
  252. package/dist/diagnostics/artifact.js +10 -2
  253. package/dist/diagnostics/attempt.d.ts +5 -0
  254. package/dist/diagnostics/attempt.d.ts.map +1 -1
  255. package/dist/diagnostics/attempt.js +10 -0
  256. package/dist/diagnostics/chromium-collector.d.ts +9 -1
  257. package/dist/diagnostics/chromium-collector.d.ts.map +1 -1
  258. package/dist/diagnostics/chromium-collector.js +19 -4
  259. package/dist/diagnostics/firefox-collector.d.ts +11 -10
  260. package/dist/diagnostics/firefox-collector.d.ts.map +1 -1
  261. package/dist/diagnostics/firefox-collector.js +16 -11
  262. package/dist/diagnostics/observations.d.ts +8 -0
  263. package/dist/diagnostics/observations.d.ts.map +1 -1
  264. package/dist/diagnostics/session-capture.d.ts.map +1 -1
  265. package/dist/diagnostics/session-capture.js +8 -0
  266. package/dist/index.d.ts +9 -4
  267. package/dist/index.d.ts.map +1 -1
  268. package/dist/index.js +1 -0
  269. package/dist/media/client.d.ts +2 -1
  270. package/dist/media/client.d.ts.map +1 -1
  271. package/dist/media/client.js +16 -5
  272. package/dist/media/host.d.ts +32 -0
  273. package/dist/media/host.d.ts.map +1 -0
  274. package/dist/media/host.js +50 -0
  275. package/dist/media/locate.d.ts.map +1 -1
  276. package/dist/media/locate.js +4 -3
  277. package/dist/media/policy.d.ts +2 -2
  278. package/dist/media/policy.d.ts.map +1 -1
  279. package/dist/media/policy.js +1 -1
  280. package/dist/native/processes.d.ts.map +1 -1
  281. package/dist/native/processes.js +7 -3
  282. package/dist/playwright/not-yet.d.ts.map +1 -1
  283. package/dist/playwright/not-yet.js +5 -2
  284. package/dist/protocol/commands.d.ts +122 -13
  285. package/dist/protocol/commands.d.ts.map +1 -1
  286. package/dist/protocol/commands.js +85 -6
  287. package/dist/protocol/diagnostics.d.ts +10 -0
  288. package/dist/protocol/diagnostics.d.ts.map +1 -1
  289. package/dist/protocol/diagnostics.js +5 -0
  290. package/dist/protocol/dialogs.d.ts +104 -0
  291. package/dist/protocol/dialogs.d.ts.map +1 -0
  292. package/dist/protocol/dialogs.js +101 -0
  293. package/dist/protocol/drag.d.ts +45 -0
  294. package/dist/protocol/drag.d.ts.map +1 -0
  295. package/dist/protocol/drag.js +31 -0
  296. package/dist/protocol/events.d.ts +153 -1
  297. package/dist/protocol/events.d.ts.map +1 -1
  298. package/dist/protocol/events.js +97 -0
  299. package/dist/protocol/files.d.ts +83 -0
  300. package/dist/protocol/files.d.ts.map +1 -0
  301. package/dist/protocol/files.js +73 -0
  302. package/dist/protocol/inbox.d.ts +87 -0
  303. package/dist/protocol/inbox.d.ts.map +1 -0
  304. package/dist/protocol/inbox.js +51 -0
  305. package/dist/protocol/index.d.ts +4 -1
  306. package/dist/protocol/index.d.ts.map +1 -1
  307. package/dist/protocol/layout-checks.d.ts +83 -0
  308. package/dist/protocol/layout-checks.d.ts.map +1 -0
  309. package/dist/protocol/layout-checks.js +214 -0
  310. package/dist/protocol/layout.d.ts +135 -0
  311. package/dist/protocol/layout.d.ts.map +1 -0
  312. package/dist/protocol/layout.js +124 -0
  313. package/dist/protocol/locator-checks.d.ts +19 -2
  314. package/dist/protocol/locator-checks.d.ts.map +1 -1
  315. package/dist/protocol/locator-checks.js +23 -1
  316. package/dist/protocol/locator.d.ts +55 -7
  317. package/dist/protocol/locator.d.ts.map +1 -1
  318. package/dist/protocol/locator.js +99 -18
  319. package/dist/protocol/messages.d.ts +95 -0
  320. package/dist/protocol/messages.d.ts.map +1 -1
  321. package/dist/protocol/messages.js +63 -0
  322. package/dist/protocol/popups.d.ts +43 -0
  323. package/dist/protocol/popups.d.ts.map +1 -0
  324. package/dist/protocol/popups.js +27 -0
  325. package/dist/protocol/result.d.ts +5 -0
  326. package/dist/protocol/result.d.ts.map +1 -1
  327. package/dist/protocol/result.js +1 -0
  328. package/dist/protocol/routes.d.ts +136 -0
  329. package/dist/protocol/routes.d.ts.map +1 -0
  330. package/dist/protocol/routes.js +191 -0
  331. package/dist/protocol/screenshot.d.ts +219 -0
  332. package/dist/protocol/screenshot.d.ts.map +1 -0
  333. package/dist/protocol/screenshot.js +335 -0
  334. package/dist/reporters/actions.d.ts +6 -4
  335. package/dist/reporters/actions.d.ts.map +1 -1
  336. package/dist/reporters/actions.js +24 -6
  337. package/dist/reporters/agent.d.ts.map +1 -1
  338. package/dist/reporters/agent.js +4 -2
  339. package/dist/reporters/commands.d.ts +12 -3
  340. package/dist/reporters/commands.d.ts.map +1 -1
  341. package/dist/reporters/commands.js +29 -11
  342. package/dist/reporters/dialogs-popups.d.ts +22 -0
  343. package/dist/reporters/dialogs-popups.d.ts.map +1 -0
  344. package/dist/reporters/dialogs-popups.js +30 -0
  345. package/dist/reporters/failure-card.d.ts +10 -1
  346. package/dist/reporters/failure-card.d.ts.map +1 -1
  347. package/dist/reporters/failure-card.js +5 -1
  348. package/dist/reporters/format.d.ts +33 -0
  349. package/dist/reporters/format.d.ts.map +1 -1
  350. package/dist/reporters/format.js +42 -0
  351. package/dist/reporters/html/comparison-view.d.ts +12 -0
  352. package/dist/reporters/html/comparison-view.d.ts.map +1 -0
  353. package/dist/reporters/html/comparison-view.js +21 -0
  354. package/dist/reporters/html/diagnostics-view.js +8 -0
  355. package/dist/reporters/html/downloads-view.d.ts +10 -0
  356. package/dist/reporters/html/downloads-view.d.ts.map +1 -0
  357. package/dist/reporters/html/downloads-view.js +29 -0
  358. package/dist/reporters/html/style.d.ts.map +1 -1
  359. package/dist/reporters/html/style.js +3 -0
  360. package/dist/reporters/html/summary-view.d.ts.map +1 -1
  361. package/dist/reporters/html/summary-view.js +3 -2
  362. package/dist/reporters/html/test-view.d.ts.map +1 -1
  363. package/dist/reporters/html/test-view.js +6 -3
  364. package/dist/reporters/html/timeline-view.d.ts.map +1 -1
  365. package/dist/reporters/html/timeline-view.js +26 -2
  366. package/dist/reporters/human-card.js +11 -1
  367. package/dist/reporters/human.d.ts +3 -1
  368. package/dist/reporters/human.d.ts.map +1 -1
  369. package/dist/reporters/human.js +11 -9
  370. package/dist/reporters/routes.d.ts +9 -0
  371. package/dist/reporters/routes.d.ts.map +1 -0
  372. package/dist/reporters/routes.js +17 -0
  373. package/dist/reporters/style.d.ts +21 -2
  374. package/dist/reporters/style.d.ts.map +1 -1
  375. package/dist/reporters/style.js +11 -2
  376. package/dist/runner/app-server.d.ts +27 -7
  377. package/dist/runner/app-server.d.ts.map +1 -1
  378. package/dist/runner/app-server.js +74 -24
  379. package/dist/runner/child-program.js +10 -0
  380. package/dist/runner/child.js +6 -2
  381. package/dist/runner/contract.d.ts +5 -0
  382. package/dist/runner/contract.d.ts.map +1 -1
  383. package/dist/runner/dialogs.d.ts +71 -0
  384. package/dist/runner/dialogs.d.ts.map +1 -0
  385. package/dist/runner/dialogs.js +189 -0
  386. package/dist/runner/files.d.ts +79 -0
  387. package/dist/runner/files.d.ts.map +1 -0
  388. package/dist/runner/files.js +312 -0
  389. package/dist/runner/inbox-links.d.ts +19 -0
  390. package/dist/runner/inbox-links.d.ts.map +1 -0
  391. package/dist/runner/inbox-links.js +63 -0
  392. package/dist/runner/inbox.d.ts +87 -0
  393. package/dist/runner/inbox.d.ts.map +1 -0
  394. package/dist/runner/inbox.js +340 -0
  395. package/dist/runner/index.d.ts +2 -1
  396. package/dist/runner/index.d.ts.map +1 -1
  397. package/dist/runner/media-leftovers.d.ts +7 -3
  398. package/dist/runner/media-leftovers.d.ts.map +1 -1
  399. package/dist/runner/media-leftovers.js +27 -6
  400. package/dist/runner/native-pool.d.ts.map +1 -1
  401. package/dist/runner/native-pool.js +2 -0
  402. package/dist/runner/observations.d.ts +15 -2
  403. package/dist/runner/observations.d.ts.map +1 -1
  404. package/dist/runner/observations.js +109 -6
  405. package/dist/runner/popups.d.ts +82 -0
  406. package/dist/runner/popups.d.ts.map +1 -0
  407. package/dist/runner/popups.js +236 -0
  408. package/dist/runner/redactor.d.ts.map +1 -1
  409. package/dist/runner/redactor.js +10 -6
  410. package/dist/runner/resources.d.ts +8 -0
  411. package/dist/runner/resources.d.ts.map +1 -1
  412. package/dist/runner/resources.js +12 -1
  413. package/dist/runner/routes.d.ts +23 -0
  414. package/dist/runner/routes.d.ts.map +1 -0
  415. package/dist/runner/routes.js +128 -0
  416. package/dist/runner/run-media.d.ts +6 -0
  417. package/dist/runner/run-media.d.ts.map +1 -1
  418. package/dist/runner/run-media.js +21 -0
  419. package/dist/runner/run-session.d.ts.map +1 -1
  420. package/dist/runner/run-session.js +102 -12
  421. package/dist/runner/run.d.ts.map +1 -1
  422. package/dist/runner/run.js +2 -1
  423. package/dist/runner/running-test.d.ts +35 -0
  424. package/dist/runner/running-test.d.ts.map +1 -1
  425. package/dist/runner/running-test.js +333 -22
  426. package/dist/runner/screenshot-baselines.d.ts +159 -0
  427. package/dist/runner/screenshot-baselines.d.ts.map +1 -0
  428. package/dist/runner/screenshot-baselines.js +357 -0
  429. package/dist/runner/secrets.d.ts +13 -0
  430. package/dist/runner/secrets.d.ts.map +1 -1
  431. package/dist/runner/secrets.js +6 -4
  432. package/dist/runner/target-drivers.d.ts +5 -2
  433. package/dist/runner/target-drivers.d.ts.map +1 -1
  434. package/dist/runner/target-drivers.js +10 -1
  435. package/dist/runner/test-file-process.d.ts +8 -0
  436. package/dist/runner/test-file-process.d.ts.map +1 -1
  437. package/dist/runner/test-file-process.js +26 -3
  438. package/dist/runner/test-pages.d.ts +3 -1
  439. package/dist/runner/test-pages.d.ts.map +1 -1
  440. package/dist/runner/test-pages.js +9 -5
  441. package/dist/schemas/event-v1.schema.json +118873 -6311
  442. package/dist/schemas/result-v1.schema.json +4 -0
  443. package/dist/shared/environment.d.ts +17 -0
  444. package/dist/shared/environment.d.ts.map +1 -0
  445. package/dist/shared/environment.js +27 -0
  446. package/dist/shared/image-diff.d.ts +36 -0
  447. package/dist/shared/image-diff.d.ts.map +1 -0
  448. package/dist/shared/image-diff.js +242 -0
  449. package/dist/shared/metadata-process-worker.js +15 -7
  450. package/dist/shared/metadata-process.d.ts +9 -1
  451. package/dist/shared/metadata-process.d.ts.map +1 -1
  452. package/dist/shared/metadata-process.js +84 -12
  453. package/dist/shared/png.d.ts +35 -0
  454. package/dist/shared/png.d.ts.map +1 -0
  455. package/dist/shared/png.js +251 -0
  456. package/dist/shared/posix-path.d.ts +12 -0
  457. package/dist/shared/posix-path.d.ts.map +1 -1
  458. package/dist/shared/posix-path.js +16 -0
  459. package/dist/shared/private-file.d.ts +38 -0
  460. package/dist/shared/private-file.d.ts.map +1 -0
  461. package/dist/shared/private-file.js +132 -0
  462. package/dist/shared/process-ownership.d.ts +67 -6
  463. package/dist/shared/process-ownership.d.ts.map +1 -1
  464. package/dist/shared/process-ownership.js +227 -45
  465. package/dist/shared/process-supervisor.d.ts +309 -0
  466. package/dist/shared/process-supervisor.d.ts.map +1 -0
  467. package/dist/shared/process-supervisor.js +737 -0
  468. package/dist/shared/process-system.d.ts +113 -0
  469. package/dist/shared/process-system.d.ts.map +1 -0
  470. package/dist/shared/process-system.js +254 -0
  471. package/dist/shared/regular-file.d.ts +2 -2
  472. package/dist/shared/regular-file.d.ts.map +1 -1
  473. package/dist/shared/regular-file.js +19 -2
  474. package/dist/store/artifacts.d.ts +28 -6
  475. package/dist/store/artifacts.d.ts.map +1 -1
  476. package/dist/store/artifacts.js +58 -6
  477. package/dist/store/rebuild-result.d.ts.map +1 -1
  478. package/dist/store/rebuild-result.js +6 -0
  479. package/dist/store/run-store.d.ts +5 -2
  480. package/dist/store/run-store.d.ts.map +1 -1
  481. package/dist/store/run-store.js +48 -4
  482. package/media/Cargo.lock +16 -0
  483. package/media/Cargo.toml +16 -1
  484. package/media/src/encoder.rs +56 -12
  485. package/media/src/frame.rs +7 -1
  486. package/media/src/main.rs +20 -2
  487. package/media/src/place.rs +230 -11
  488. package/media/src/process_ownership_windows.rs +1058 -0
  489. package/media/src/recording.rs +15 -7
  490. package/media/src/replies.rs +55 -0
  491. package/media/src/server.rs +72 -2
  492. package/media/src/store.rs +71 -2
  493. package/package.json +9 -4
  494. package/src/cli/install/media-notices.txt +465 -1
  495. package/supervisor/Cargo.lock +25 -0
  496. package/supervisor/Cargo.toml +22 -0
  497. package/supervisor/NOTICES +464 -0
  498. package/supervisor/build.rs +44 -0
  499. package/supervisor/src/command.rs +612 -0
  500. package/supervisor/src/jobs.rs +1650 -0
  501. package/supervisor/src/main.rs +71 -0
  502. package/supervisor/src/reply.rs +367 -0
@@ -1,27 +1,37 @@
1
+ import { type DragThrough } from './drag.ts';
1
2
  import { type Failure } from './failures.ts';
3
+ import { type FileRecord, type InputFileRecord } from './files.ts';
4
+ import { type InboxCodeRef, type InboxLinkRef } from './inbox.ts';
5
+ import { type LayoutLook } from './layout.ts';
2
6
  import { type EmptyStep, type LocatorRecipe } from './locator.ts';
3
7
  import { type OptionChoiceRecord } from './option-choices.ts';
4
8
  import { type PageFacts } from './page-facts.ts';
5
9
  import { type Schema } from './schema.ts';
10
+ import { type ScreenshotLook } from './screenshot.ts';
6
11
  import { type SecretRef } from './secret.ts';
7
- /** What `fill` types: the text itself, or a secret the parent resolves. */
8
- export type FillValue = string | SecretRef;
12
+ /** What `fill` types: the text itself, or a secret or a code from an inbox, which the parent resolves. */
13
+ export type FillValue = string | SecretRef | InboxCodeRef;
14
+ /** Where `goto` goes: an address, or a link from an inbox, which the parent resolves. */
15
+ export type GotoTarget = string | InboxLinkRef;
9
16
  /**
10
- * A page command from the child. `goto.url` is what the test passed; the parent resolves it against the
11
- * base URL. `reload`, `goBack` and `goForward` reload the page and move through its history. `press.key` is the key
12
- * as the test wrote it, which `parseKey` reads; a `press` without a locator goes to the page's keyboard, to whatever
13
- * holds the focus. `select.choices` are the options to choose, in the order the test named them, which
14
- * `optionChoicesProblem` checks. `select.multiple` is present when the test passed a list, which only a
17
+ * A page command from the child. `goto.url` is what the test passed, an address the parent resolves against the
18
+ * base URL, or a link from an inbox, which only the parent can read. `reload`, `goBack` and `goForward` reload the
19
+ * page and move through its history. `press.key` is the key as the test wrote it, which `parseKey` reads; a `press`
20
+ * without a locator goes to the page's keyboard, to whatever holds the focus. `select.choices` are the options to
21
+ * choose, in the order the test named them, which `optionChoicesProblem` checks. `select.multiple` is present when
22
+ * the test passed a list, which only a
15
23
  * `<select multiple>` takes, even a list of one. `scroll` turns the mouse wheel by `x` and `y` CSS pixels, which
16
24
  * `scrollProblem` checks: at the element's centre, or without a locator at the viewport's. `hover` moves the mouse to
17
- * the element's centre. `observe` reads a locator's elements once, and `observePage` the page's address and title.
25
+ * the element's centre. `observe` reads a locator's elements once, and `observePage` the page's address and title. `observeLayout`
26
+ * measures the page's layout once, with the one element `locator` finds and the one `other` finds, each when given,
27
+ * and with how much of their words a container cuts off when `words` is set.
18
28
  * With `after`, a look first waits until the page's document has changed since `after.changes`, as the page counts
19
29
  * its changes, or until `after.waitMs` have passed, and never past its own time. `check` marks a look a check sends
20
30
  * while it polls, which reports an assertion once it ends; a plain read, such as `page.url()`, sends none.
21
31
  */
22
32
  export type PageCommand = {
23
33
  kind: 'goto';
24
- url: string;
34
+ url: GotoTarget;
25
35
  } | {
26
36
  kind: 'reload';
27
37
  } | {
@@ -61,6 +71,33 @@ export type PageCommand = {
61
71
  locator?: LocatorRecipe;
62
72
  x: number;
63
73
  y: number;
74
+ }
75
+ /**
76
+ * Gives a file input the files, as `inputFilesProblem` checks them, in place of those it held; none clears it.
77
+ * `list` is present when the test passed a list, even of one or of none.
78
+ */
79
+ | {
80
+ kind: 'setInputFiles';
81
+ locator: LocatorRecipe;
82
+ files: InputFileRecord[];
83
+ list?: true;
84
+ }
85
+ /** Gives the input of a file picker a `page.fileChooser()` caught the files, by the id the parent gave the picker. */
86
+ | {
87
+ kind: 'setChooserFiles';
88
+ chooser: string;
89
+ files: InputFileRecord[];
90
+ list?: true;
91
+ }
92
+ /**
93
+ * Presses the mouse on the element `locator` finds, moves it through `steps` positions, 5 when absent, to the centre
94
+ * of the element `target` finds, and releases it there; `dragProblem` checks `steps`.
95
+ */
96
+ | {
97
+ kind: 'dragTo';
98
+ locator: LocatorRecipe;
99
+ target: LocatorRecipe;
100
+ steps?: number;
64
101
  } | {
65
102
  kind: 'swipe';
66
103
  locator?: LocatorRecipe;
@@ -72,6 +109,10 @@ export type PageCommand = {
72
109
  kind: 'nativeAlert';
73
110
  operation: 'accept' | 'dismiss';
74
111
  button?: string;
112
+ }
113
+ /** Closes a page the app opened, running its `beforeunload` handlers, and waits for it to go. */
114
+ | {
115
+ kind: 'close';
75
116
  } | {
76
117
  kind: 'observe';
77
118
  locator: LocatorRecipe;
@@ -81,14 +122,34 @@ export type PageCommand = {
81
122
  kind: 'observePage';
82
123
  after?: ObserveAfter;
83
124
  check?: true;
125
+ } | {
126
+ kind: 'observeLayout';
127
+ locator?: LocatorRecipe;
128
+ other?: LocatorRecipe;
129
+ words?: true;
130
+ after?: ObserveAfter;
131
+ check?: true;
132
+ }
133
+ /**
134
+ * Takes a picture of the page's viewport, or of the one element `locator` finds, for `toHaveScreenshot`, and says how
135
+ * it stands against the baseline `name`, counting pixels further apart than `threshold`. `previous` names the look
136
+ * before it in the same check, whose picture this one must match to have settled.
137
+ */
138
+ | {
139
+ kind: 'observeScreenshot';
140
+ locator?: LocatorRecipe;
141
+ name: string;
142
+ threshold?: number;
143
+ previous?: string;
144
+ check?: true;
84
145
  };
85
146
  /** What an `observe` waits for first: a change after the page's `changes` count, or `waitMs`, whichever comes first. */
86
147
  export type ObserveAfter = {
87
148
  changes: number;
88
149
  waitMs: number;
89
150
  };
90
- /** The commands that act, as against the two that only look. */
91
- export type ActionKind = Exclude<PageCommand['kind'], 'observe' | 'observePage'>;
151
+ /** The commands that act, as against the three that only look. */
152
+ export type ActionKind = Exclude<PageCommand['kind'], 'observe' | 'observePage' | 'observeLayout' | 'observeScreenshot'>;
92
153
  /** The actions that open a document in the page, as `goto` does, and answer with the address it ended on. */
93
154
  export type NavigationKind = Extract<ActionKind, 'goto' | 'reload' | 'goBack' | 'goForward'>;
94
155
  /** The kinds of command that open a document. */
@@ -171,6 +232,31 @@ export type CommandResult = {
171
232
  changed: boolean;
172
233
  via?: 'label';
173
234
  page?: PageFacts;
235
+ }
236
+ /** The page closed, so it names no page. */
237
+ | {
238
+ ok: true;
239
+ kind: 'close';
240
+ page?: PageFacts;
241
+ }
242
+ /**
243
+ * The files the input's `change` carried, as the browser read them, and in `kept` what the input holds once the page's
244
+ * own listeners ran, when that differs, as when a page clears an input it has read. A page that read nothing back
245
+ * leaves both out.
246
+ */
247
+ | {
248
+ ok: true;
249
+ kind: 'setInputFiles' | 'setChooserFiles';
250
+ files?: FileRecord[];
251
+ kept?: FileRecord[];
252
+ page?: PageFacts;
253
+ }
254
+ /** A drag that dropped on its target: through mouse events alone, or through the browser's drag events. */
255
+ | {
256
+ ok: true;
257
+ kind: 'dragTo';
258
+ through: DragThrough;
259
+ page?: PageFacts;
174
260
  } | {
175
261
  ok: true;
176
262
  kind: 'observe';
@@ -190,6 +276,22 @@ export type CommandResult = {
190
276
  changes?: number;
191
277
  waitedMs?: number;
192
278
  page?: PageFacts;
279
+ } | {
280
+ ok: true;
281
+ kind: 'observeLayout';
282
+ observation: LayoutLook;
283
+ observationId?: string;
284
+ sessionId?: string;
285
+ changes?: number;
286
+ waitedMs?: number;
287
+ page?: PageFacts;
288
+ } | {
289
+ ok: true;
290
+ kind: 'observeScreenshot';
291
+ observation: ScreenshotLook;
292
+ observationId?: string;
293
+ sessionId?: string;
294
+ page?: PageFacts;
193
295
  } | {
194
296
  ok: false;
195
297
  failure: Failure;
@@ -200,10 +302,17 @@ export declare const observationSchema: Schema<Observation>;
200
302
  export declare const pageObservationSchema: Schema<PageObservation>;
201
303
  export declare const commandResultSchema: Schema<CommandResult>;
202
304
  /**
203
- * Names a page command the way a test writes it. A `fill` value is never shown; a secret shows its name. A long
204
- * `press` key or option is cut short, as messages cut any text.
305
+ * Names a page command the way a test writes it. A `fill` value is never shown; a secret shows its name, and a code
306
+ * or a link from an inbox its placeholder. A long `press` key or option is cut short, as messages cut any text.
205
307
  *
206
308
  * @example describeCommand({ kind: 'click', locator: { by: 'testId', value: 'save-task' } }) // "getByTestId('save-task').click()"
207
309
  */
208
310
  export declare function describeCommand(command: PageCommand): string;
311
+ /**
312
+ * Every locator a command names: the one an action or a look acts on, the other element a layout look measures, the
313
+ * element a drag drops on, and the element of each frame either is inside, before it.
314
+ *
315
+ * @example commandLocators({ kind: 'observeLayout', locator: save, other: help }) // [save, help]
316
+ */
317
+ export declare function commandLocators(command: PageCommand): LocatorRecipe[];
209
318
  //# sourceMappingURL=commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/protocol/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/protocol/commands.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,13 @@
1
+ import { describeDragArguments, dragThroughSchema } from "./drag.js";
1
2
  import { failureSchema } from "./failures.js";
3
+ import { describeInputFiles, fileRecordSchema, inputFileRecordSchema } from "./files.js";
4
+ import { describeInboxReference, inboxCodeRefSchema, inboxLinkRefSchema } from "./inbox.js";
5
+ import { layoutLookSchema } from "./layout.js";
2
6
  import { describeLocator, emptyStepSchema, locatorRecipeSchema, stringLiteral } from "./locator.js";
3
7
  import { describeOptionChoice, describeOptionChoices, optionChoiceRecordSchema } from "./option-choices.js";
4
8
  import { pageFactsSchema } from "./page-facts.js";
5
9
  import { s } from "./schema.js";
10
+ import { screenshotLookSchema } from "./screenshot.js";
6
11
  import { describeScrollDelta } from "./scroll-delta.js";
7
12
  import { secretRefSchema } from "./secret.js";
8
13
  import { shorten } from "./text.js";
@@ -18,10 +23,10 @@ export function isNavigationKind(kind) {
18
23
  }
19
24
  /** How many matches an observation lists at most. */
20
25
  export const observedItemLimit = 100;
21
- const fillValueSchema = s.union([s.string(), secretRefSchema]);
26
+ const fillValueSchema = s.union([s.string(), secretRefSchema, inboxCodeRefSchema]);
22
27
  const after = s.optional(s.object({ changes: s.number({ integer: true, min: 0 }), waitMs: s.number({ integer: true, min: 0 }) }));
23
28
  export const pageCommandSchema = s.discriminatedUnion('kind', [
24
- s.object({ kind: s.literal('goto'), url: s.string() }),
29
+ s.object({ kind: s.literal('goto'), url: s.union([s.string(), inboxLinkRefSchema]) }),
25
30
  s.object({ kind: s.literal('reload') }),
26
31
  s.object({ kind: s.literal('goBack') }),
27
32
  s.object({ kind: s.literal('goForward') }),
@@ -39,11 +44,31 @@ export const pageCommandSchema = s.discriminatedUnion('kind', [
39
44
  s.object({ kind: s.literal('check'), locator: locatorRecipeSchema }),
40
45
  s.object({ kind: s.literal('uncheck'), locator: locatorRecipeSchema }),
41
46
  s.object({ kind: s.literal('scroll'), locator: s.optional(locatorRecipeSchema), x: s.number(), y: s.number() }),
47
+ s.object({ kind: s.literal('setInputFiles'), locator: locatorRecipeSchema, files: s.array(inputFileRecordSchema), list: s.optional(s.literal(true)) }),
48
+ s.object({ kind: s.literal('setChooserFiles'), chooser: s.string(), files: s.array(inputFileRecordSchema), list: s.optional(s.literal(true)) }),
49
+ s.object({ kind: s.literal('dragTo'), locator: locatorRecipeSchema, target: locatorRecipeSchema, steps: s.optional(s.number({ integer: true, min: 1 })) }),
42
50
  s.object({ kind: s.literal('swipe'), locator: s.optional(locatorRecipeSchema), direction: s.enum(['up', 'down', 'left', 'right']) }),
43
51
  s.object({ kind: s.literal('nativeKeyboard'), operation: s.enum(['dismiss', 'dismissFirstRunCard', 'wait']) }),
44
52
  s.object({ kind: s.literal('nativeAlert'), operation: s.enum(['accept', 'dismiss']), button: s.optional(s.string()) }),
53
+ s.object({ kind: s.literal('close') }),
45
54
  s.object({ kind: s.literal('observe'), locator: locatorRecipeSchema, after, check: s.optional(s.literal(true)) }),
46
55
  s.object({ kind: s.literal('observePage'), after, check: s.optional(s.literal(true)) }),
56
+ s.object({
57
+ kind: s.literal('observeLayout'),
58
+ locator: s.optional(locatorRecipeSchema),
59
+ other: s.optional(locatorRecipeSchema),
60
+ words: s.optional(s.literal(true)),
61
+ after,
62
+ check: s.optional(s.literal(true)),
63
+ }),
64
+ s.object({
65
+ kind: s.literal('observeScreenshot'),
66
+ locator: s.optional(locatorRecipeSchema),
67
+ name: s.string(),
68
+ threshold: s.optional(s.number({ min: 0 })),
69
+ previous: s.optional(s.string()),
70
+ check: s.optional(s.literal(true)),
71
+ }),
47
72
  ]);
48
73
  export const actionKindSchema = s.enum([
49
74
  'goto',
@@ -62,6 +87,10 @@ export const actionKindSchema = s.enum([
62
87
  'swipe',
63
88
  'nativeKeyboard',
64
89
  'nativeAlert',
90
+ 'close',
91
+ 'setInputFiles',
92
+ 'setChooserFiles',
93
+ 'dragTo',
65
94
  ]);
66
95
  export const observationSchema = s.object({
67
96
  count: s.number({ integer: true, min: 0 }),
@@ -88,6 +117,9 @@ export const commandResultSchema = s.union([
88
117
  s.object({ ok: s.literal(true), kind: s.enum(['fill', 'click', 'tap', 'hover', 'press', 'scroll', 'swipe', 'nativeKeyboard', 'nativeAlert']), page }),
89
118
  s.object({ ok: s.literal(true), kind: s.literal('select'), changed: s.boolean(), page }),
90
119
  s.object({ ok: s.literal(true), kind: s.enum(['check', 'uncheck']), changed: s.boolean(), via: s.optional(s.literal('label')), page }),
120
+ s.object({ ok: s.literal(true), kind: s.literal('close'), page }),
121
+ s.object({ ok: s.literal(true), kind: s.enum(['setInputFiles', 'setChooserFiles']), files: s.optional(s.array(fileRecordSchema)), kept: s.optional(s.array(fileRecordSchema)), page }),
122
+ s.object({ ok: s.literal(true), kind: s.literal('dragTo'), through: dragThroughSchema, page }),
91
123
  s.object({
92
124
  ok: s.literal(true),
93
125
  kind: s.literal('observe'),
@@ -109,18 +141,36 @@ export const commandResultSchema = s.union([
109
141
  waitedMs: s.optional(s.number({ integer: true, min: 0 })),
110
142
  page,
111
143
  }),
144
+ s.object({
145
+ ok: s.literal(true),
146
+ kind: s.literal('observeLayout'),
147
+ observation: layoutLookSchema,
148
+ observationId: s.optional(s.string()),
149
+ sessionId: s.optional(s.string()),
150
+ changes: s.optional(s.number({ integer: true, min: 0 })),
151
+ waitedMs: s.optional(s.number({ integer: true, min: 0 })),
152
+ page,
153
+ }),
154
+ s.object({
155
+ ok: s.literal(true),
156
+ kind: s.literal('observeScreenshot'),
157
+ observation: screenshotLookSchema,
158
+ observationId: s.optional(s.string()),
159
+ sessionId: s.optional(s.string()),
160
+ page,
161
+ }),
112
162
  s.object({ ok: s.literal(false), failure: failureSchema }),
113
163
  ]);
114
164
  /**
115
- * Names a page command the way a test writes it. A `fill` value is never shown; a secret shows its name. A long
116
- * `press` key or option is cut short, as messages cut any text.
165
+ * Names a page command the way a test writes it. A `fill` value is never shown; a secret shows its name, and a code
166
+ * or a link from an inbox its placeholder. A long `press` key or option is cut short, as messages cut any text.
117
167
  *
118
168
  * @example describeCommand({ kind: 'click', locator: { by: 'testId', value: 'save-task' } }) // "getByTestId('save-task').click()"
119
169
  */
120
170
  export function describeCommand(command) {
121
171
  switch (command.kind) {
122
172
  case 'goto':
123
- return `page.goto(${JSON.stringify(command.url)})`;
173
+ return `page.goto(${typeof command.url === 'string' ? JSON.stringify(command.url) : describeInboxReference(command.url)})`;
124
174
  case 'reload':
125
175
  case 'goBack':
126
176
  case 'goForward':
@@ -146,18 +196,47 @@ export function describeCommand(command) {
146
196
  const target = command.locator === undefined ? 'page' : describeLocator(command.locator);
147
197
  return `${target}.scroll(${describeScrollDelta(command)})`;
148
198
  }
199
+ case 'setInputFiles':
200
+ return `${describeLocator(command.locator)}.setInputFiles(${describeInputFiles(command.files, command.list === true)})`;
201
+ case 'dragTo':
202
+ return `${describeLocator(command.locator)}.dragTo(${describeDragArguments(command)})`;
203
+ case 'setChooserFiles':
204
+ return `fileChooser.setFiles(${describeInputFiles(command.files, command.list === true)})`;
149
205
  case 'swipe':
150
206
  return `${command.locator === undefined ? 'page' : describeLocator(command.locator)}.swipe(${stringLiteral(command.direction)})`;
151
207
  case 'nativeKeyboard':
152
208
  return `page.keyboard.${command.operation}()`;
153
209
  case 'nativeAlert':
154
210
  return `page.alert.${command.operation}(${command.button === undefined ? '' : stringLiteral(command.button)})`;
211
+ case 'close':
212
+ return 'page.close()';
155
213
  case 'observe':
156
214
  return `a look at ${describeLocator(command.locator)}`;
157
215
  case 'observePage':
158
216
  return 'a look at the page';
217
+ case 'observeLayout': {
218
+ const { locator, other } = command;
219
+ if (locator === undefined)
220
+ return "a look at the page's layout";
221
+ return `a look at the layout of ${describeLocator(locator)}${other === undefined ? '' : ` and ${describeLocator(other)}`}`;
222
+ }
223
+ case 'observeScreenshot':
224
+ return command.locator === undefined ? 'a picture of the page' : `a picture of ${describeLocator(command.locator)}`;
159
225
  }
160
226
  }
161
227
  function describeFillValue(value) {
162
- return typeof value === 'string' ? '' : `secret(${JSON.stringify(value.secret)})`;
228
+ if (typeof value === 'string')
229
+ return '';
230
+ return 'secret' in value ? `secret(${JSON.stringify(value.secret)})` : describeInboxReference(value);
231
+ }
232
+ /**
233
+ * Every locator a command names: the one an action or a look acts on, the other element a layout look measures, the
234
+ * element a drag drops on, and the element of each frame either is inside, before it.
235
+ *
236
+ * @example commandLocators({ kind: 'observeLayout', locator: save, other: help }) // [save, help]
237
+ */
238
+ export function commandLocators(command) {
239
+ const own = 'locator' in command && command.locator !== undefined ? [command.locator] : [];
240
+ const named = command.kind === 'observeLayout' && command.other !== undefined ? [...own, command.other] : command.kind === 'dragTo' ? [...own, command.target] : own;
241
+ return named.flatMap((locator) => [...(locator.frame ?? []), locator]);
163
242
  }
@@ -159,6 +159,9 @@ export type NetworkResponseRecord = DiagnosticIdentity & NativeNetworkProvenance
159
159
  serviceWorker?: boolean;
160
160
  protocol?: string;
161
161
  redirectedTo?: string;
162
+ /** The response was the test's own: a route of the page gave it in the network's place. `route` is its pattern. */
163
+ mocked?: true;
164
+ route?: string;
162
165
  };
163
166
  /**
164
167
  * A hop that finished: for a redirect, when its response arrived. `durationMs` is the browser's own measure from the
@@ -186,6 +189,13 @@ export type NetworkFailedRecord = DiagnosticIdentity & NativeNetworkProvenance &
186
189
  reason: string;
187
190
  canceled?: true;
188
191
  blocked?: string;
192
+ /**
193
+ * The failure was the test's own: a route of the page refused the request. `route` is its pattern, and
194
+ * `routeRefused` Chrome's reason when Chrome refused the route's answer, so Retest failed the request in its place.
195
+ */
196
+ mocked?: true;
197
+ route?: string;
198
+ routeRefused?: string;
189
199
  };
190
200
  /**
191
201
  * Why a hop's end is not recorded: it was still open when the attempt ended, the run was interrupted, the page crashed
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/protocol/diagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/protocol/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -149,6 +149,8 @@ const responseShape = {
149
149
  serviceWorker: s.optional(s.boolean()),
150
150
  protocol: s.optional(s.string()),
151
151
  redirectedTo: s.optional(s.string()),
152
+ mocked: s.optional(s.literal(true)),
153
+ route: s.optional(s.string()),
152
154
  };
153
155
  const finishedShape = {
154
156
  ...nativeNetworkProvenance,
@@ -169,6 +171,9 @@ const failedShape = {
169
171
  reason: s.string(),
170
172
  canceled: s.optional(s.literal(true)),
171
173
  blocked: s.optional(s.string()),
174
+ mocked: s.optional(s.literal(true)),
175
+ route: s.optional(s.string()),
176
+ routeRefused: s.optional(s.string()),
172
177
  };
173
178
  const pendingShape = {
174
179
  ...identity,
@@ -0,0 +1,104 @@
1
+ import { type Failure } from './failures.ts';
2
+ import { type Schema } from './schema.ts';
3
+ /** The kinds of JavaScript dialog a page can open. */
4
+ export type DialogType = 'alert' | 'confirm' | 'prompt' | 'beforeunload';
5
+ export declare const dialogTypes: readonly DialogType[];
6
+ /**
7
+ * A dialog as the test file's process receives it: its id within the attempt, its kind, the text the page showed and a
8
+ * prompt's default, both with every value the run hides replaced. A dialog other than a prompt has an empty default.
9
+ */
10
+ export type DialogRecord = {
11
+ id: string;
12
+ type: DialogType;
13
+ message: string;
14
+ defaultValue: string;
15
+ };
16
+ /**
17
+ * What a test asks of an app's page about dialogs: to wait for the next one, to stop a wait whose action failed before
18
+ * any dialog opened, naming the wait by its id, or to answer a dialog it was given, with the text a prompt takes.
19
+ */
20
+ export type DialogRequest = {
21
+ kind: 'wait';
22
+ } | {
23
+ kind: 'stop';
24
+ wait: number;
25
+ } | {
26
+ kind: 'answer';
27
+ dialog: string;
28
+ accept: boolean;
29
+ promptText?: string;
30
+ };
31
+ /**
32
+ * The parent's answers. A wait is first `armed`, once the page hands its next dialog to the test, then `opened` with that
33
+ * dialog, or `failed` at either point. A stop is `stopped`, and an answer `answered` or `failed`.
34
+ */
35
+ export type DialogAnswer = {
36
+ kind: 'armed';
37
+ } | {
38
+ kind: 'opened';
39
+ dialog: DialogRecord;
40
+ } | {
41
+ kind: 'stopped';
42
+ } | {
43
+ kind: 'answered';
44
+ } | {
45
+ kind: 'failed';
46
+ failure: Failure;
47
+ };
48
+ /** How a dialog was answered: accepted or dismissed. */
49
+ export type DialogAnswered = 'accepted' | 'dismissed';
50
+ /** How many code units of a dialog's text an event records, as a title is cut. */
51
+ export declare const dialogTextLimit = 300;
52
+ export declare const dialogTypeSchema: Schema<DialogType>;
53
+ export declare const dialogRecordSchema: Schema<DialogRecord>;
54
+ export declare const dialogRequestSchema: Schema<DialogRequest>;
55
+ export declare const dialogAnswerSchema: Schema<DialogAnswer>;
56
+ /**
57
+ * Whether a value names a kind of dialog, as Chrome's `Page.javascriptDialogOpening` reports it.
58
+ *
59
+ * @example isDialogType('confirm') // true
60
+ */
61
+ export declare function isDialogType(value: string): value is DialogType;
62
+ /**
63
+ * Who reads a dialog's sentence: a test, which can wrap an action in `page.dialog()`, or an agent session, which cannot
64
+ * and is told what Retest answered instead.
65
+ */
66
+ export type DialogReader = 'test' | 'agent';
67
+ /** A dialog Retest answered itself because nothing waited for it, as a failure's sentence names it. */
68
+ export type UnwaitedDialogParts = {
69
+ type: DialogType;
70
+ /** The text the page showed, as a sentence may quote it: redacted, or left out where it cannot be. */
71
+ text?: string | undefined;
72
+ answered: DialogAnswered;
73
+ /** The command that was running, as a failure names it, such as "click getByTestId('delete')"; none when idle. */
74
+ command?: string | undefined;
75
+ /** The dialog came from a page this page opened while nothing waited for it. */
76
+ popup?: boolean | undefined;
77
+ /** Who reads the sentence; a test unless named. */
78
+ reader?: DialogReader | undefined;
79
+ };
80
+ /**
81
+ * The sentence for a dialog nobody waited for, when it is the whole failure of the command that ran meanwhile: its kind
82
+ * and text, what was running, how Retest answered it, and, for a test, how to answer it. A `beforeunload` dialog is
83
+ * accepted, so the navigation the test asked for happens.
84
+ *
85
+ * @example unwaitedDialogMessage({ type: 'confirm', text: 'Delete?', answered: 'dismissed', command: "click getByTestId('delete')" })
86
+ */
87
+ export declare function unwaitedDialogMessage(parts: UnwaitedDialogParts): string;
88
+ /**
89
+ * The sentence for a dialog nobody waited for, when the command that ran meanwhile failed of its own accord: it follows
90
+ * that command's own message and names the dialog and Retest's answer.
91
+ *
92
+ * @example unwaitedDialogSentence({ type: 'alert', text: 'Saved', answered: 'dismissed' }) // 'The page also opened an alert dialog that says "Saved", and Retest dismissed it.'
93
+ */
94
+ export declare function unwaitedDialogSentence(parts: UnwaitedDialogParts): string;
95
+ /**
96
+ * A failure that names a dialog Retest answered, in words for its reader, with the dialog's text quoted once `redact` has
97
+ * hidden every value in it. The page gives that text apart, in `details.dialogMessage`, and a failure whose `details`
98
+ * name the command was the dialog's alone; any other is the command's own, with the dialog's sentence after it. Any
99
+ * other failure is given back as it is.
100
+ *
101
+ * @example withDialogWords(failure, (text) => redactor.redact(text), 'agent')
102
+ */
103
+ export declare function withDialogWords(failure: Failure, redact: (text: string) => string, reader?: DialogReader): Failure;
104
+ //# sourceMappingURL=dialogs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialogs.d.ts","sourceRoot":"","sources":["../../src/protocol/dialogs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAK,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA;AAG5C,sDAAsD;AACtD,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,cAAc,CAAA;AAExE,eAAO,MAAM,WAAW,EAAE,SAAS,UAAU,EAAmD,CAAA;AAEhG;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAA;AAElG;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAExJ;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAA;AAE3K,wDAAwD;AACxD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,WAAW,CAAA;AAErD,kFAAkF;AAClF,eAAO,MAAM,eAAe,MAAM,CAAA;AAElC,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAA0D,CAAA;AAE1G,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,YAAY,CAAuG,CAAA;AAE3J,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,aAAa,CAIpD,CAAA;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,YAAY,CAMlD,CAAA;AAEF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,UAAU,CAE/D;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,CAAA;AAE3C,uGAAuG;AACvG,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,UAAU,CAAA;IAChB,sGAAsG;IACtG,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,QAAQ,EAAE,cAAc,CAAA;IACxB,kHAAkH;IAClH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,gFAAgF;IAChF,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC3B,mDAAmD;IACnD,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAA;CAClC,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CASxE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAKzE;AASD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,MAAM,GAAE,YAAqB,GAAG,OAAO,CAe1H"}