@rehearsal-labs/retest 0.2.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 (218) hide show
  1. package/README.md +6 -5
  2. package/dist/api/source-location.d.ts.map +1 -1
  3. package/dist/api/source-location.js +3 -1
  4. package/dist/browser/builds.d.ts +35 -6
  5. package/dist/browser/builds.d.ts.map +1 -1
  6. package/dist/browser/builds.js +115 -16
  7. package/dist/browser/cdp/transport.d.ts.map +1 -1
  8. package/dist/browser/cdp/transport.js +4 -4
  9. package/dist/browser/chromium-process.d.ts +23 -0
  10. package/dist/browser/chromium-process.d.ts.map +1 -1
  11. package/dist/browser/chromium-process.js +78 -13
  12. package/dist/browser/electron.d.ts +1 -1
  13. package/dist/browser/electron.d.ts.map +1 -1
  14. package/dist/browser/electron.js +6 -3
  15. package/dist/browser/executables.d.ts +16 -1
  16. package/dist/browser/executables.d.ts.map +1 -1
  17. package/dist/browser/executables.js +50 -18
  18. package/dist/browser/firefox/accessible-names.d.ts +5 -4
  19. package/dist/browser/firefox/accessible-names.d.ts.map +1 -1
  20. package/dist/browser/firefox/accessible-names.js +11 -6
  21. package/dist/browser/firefox/bridge.js +3 -2
  22. package/dist/browser/firefox/executable.d.ts +14 -14
  23. package/dist/browser/firefox/executable.d.ts.map +1 -1
  24. package/dist/browser/firefox/executable.js +29 -21
  25. package/dist/browser/firefox/launch.js +1 -1
  26. package/dist/browser/firefox/navigation.d.ts +5 -2
  27. package/dist/browser/firefox/navigation.d.ts.map +1 -1
  28. package/dist/browser/firefox/navigation.js +48 -14
  29. package/dist/browser/firefox/orphans.d.ts.map +1 -1
  30. package/dist/browser/firefox/orphans.js +34 -2
  31. package/dist/browser/firefox/page.d.ts.map +1 -1
  32. package/dist/browser/firefox/page.js +113 -19
  33. package/dist/browser/firefox/process.d.ts +20 -1
  34. package/dist/browser/firefox/process.d.ts.map +1 -1
  35. package/dist/browser/firefox/process.js +124 -22
  36. package/dist/browser/firefox/profile.d.ts +5 -0
  37. package/dist/browser/firefox/profile.d.ts.map +1 -1
  38. package/dist/browser/firefox/profile.js +17 -1
  39. package/dist/browser/firefox/storage.d.ts.map +1 -1
  40. package/dist/browser/firefox/storage.js +4 -2
  41. package/dist/browser/firefox/subscriptions.d.ts +26 -0
  42. package/dist/browser/firefox/subscriptions.d.ts.map +1 -0
  43. package/dist/browser/firefox/subscriptions.js +10 -0
  44. package/dist/browser/launch.d.ts +6 -0
  45. package/dist/browser/launch.d.ts.map +1 -1
  46. package/dist/browser/launch.js +14 -1
  47. package/dist/cli/commands/doctor.js +3 -3
  48. package/dist/cli/commands/inspect.js +3 -2
  49. package/dist/cli/commands/install.d.ts.map +1 -1
  50. package/dist/cli/commands/install.js +26 -13
  51. package/dist/cli/commands/licences.d.ts +22 -0
  52. package/dist/cli/commands/licences.d.ts.map +1 -1
  53. package/dist/cli/commands/licences.js +62 -20
  54. package/dist/cli/commands/run.js +2 -2
  55. package/dist/cli/doctor/checks.js +4 -1
  56. package/dist/cli/inspect/diagnostics.js +3 -3
  57. package/dist/cli/inspect/test-timeline.js +10 -10
  58. package/dist/cli/install/doctor-rows.d.ts.map +1 -1
  59. package/dist/cli/install/doctor-rows.js +5 -4
  60. package/dist/cli/install/file-changes.d.ts +44 -0
  61. package/dist/cli/install/file-changes.d.ts.map +1 -0
  62. package/dist/cli/install/file-changes.js +81 -0
  63. package/dist/cli/install/install-archive.d.ts +3 -1
  64. package/dist/cli/install/install-archive.d.ts.map +1 -1
  65. package/dist/cli/install/install-archive.js +80 -33
  66. package/dist/cli/install/lock.d.ts.map +1 -1
  67. package/dist/cli/install/lock.js +108 -21
  68. package/dist/cli/install/media-doctor.d.ts.map +1 -1
  69. package/dist/cli/install/media-doctor.js +2 -1
  70. package/dist/cli/install/media-install.d.ts.map +1 -1
  71. package/dist/cli/install/media-install.js +38 -19
  72. package/dist/cli/install/media-pins.d.ts +7 -1
  73. package/dist/cli/install/media-pins.d.ts.map +1 -1
  74. package/dist/cli/install/media-pins.js +23 -12
  75. package/dist/cli/install/media-record.d.ts.map +1 -1
  76. package/dist/cli/install/media-record.js +10 -9
  77. package/dist/cli/install/media-report.d.ts +3 -1
  78. package/dist/cli/install/media-report.d.ts.map +1 -1
  79. package/dist/cli/install/media-report.js +7 -5
  80. package/dist/cli/install/media-tools.d.ts.map +1 -1
  81. package/dist/cli/install/media-tools.js +6 -4
  82. package/dist/cli/install/process-start.d.ts +3 -2
  83. package/dist/cli/install/process-start.d.ts.map +1 -1
  84. package/dist/cli/install/process-start.js +4 -0
  85. package/dist/cli/install/report.d.ts.map +1 -1
  86. package/dist/cli/install/report.js +11 -7
  87. package/dist/cli/install/supervisor-install.d.ts +33 -0
  88. package/dist/cli/install/supervisor-install.d.ts.map +1 -0
  89. package/dist/cli/install/supervisor-install.js +158 -0
  90. package/dist/cli/install/supervisor-locate.d.ts +47 -0
  91. package/dist/cli/install/supervisor-locate.d.ts.map +1 -0
  92. package/dist/cli/install/supervisor-locate.js +113 -0
  93. package/dist/cli/install/supervisor-pins.d.ts +21 -0
  94. package/dist/cli/install/supervisor-pins.d.ts.map +1 -0
  95. package/dist/cli/install/supervisor-pins.js +28 -0
  96. package/dist/cli/install/supervisor-record.d.ts +31 -0
  97. package/dist/cli/install/supervisor-record.d.ts.map +1 -0
  98. package/dist/cli/install/supervisor-record.js +104 -0
  99. package/dist/cli/install/supervisor-report.d.ts +11 -0
  100. package/dist/cli/install/supervisor-report.d.ts.map +1 -0
  101. package/dist/cli/install/supervisor-report.js +33 -0
  102. package/dist/cli/install/supervisor-tools.d.ts +43 -0
  103. package/dist/cli/install/supervisor-tools.d.ts.map +1 -0
  104. package/dist/cli/install/supervisor-tools.js +114 -0
  105. package/dist/cli/install/unpack.d.ts +23 -3
  106. package/dist/cli/install/unpack.d.ts.map +1 -1
  107. package/dist/cli/install/unpack.js +124 -10
  108. package/dist/cli/install/zip-member.d.ts +15 -0
  109. package/dist/cli/install/zip-member.d.ts.map +1 -0
  110. package/dist/cli/install/zip-member.js +77 -0
  111. package/dist/cli/interrupt.d.ts +1 -1
  112. package/dist/cli/interrupt.d.ts.map +1 -1
  113. package/dist/cli/interrupt.js +15 -10
  114. package/dist/cli/terminal.d.ts +9 -1
  115. package/dist/cli/terminal.d.ts.map +1 -1
  116. package/dist/cli/terminal.js +14 -0
  117. package/dist/config/define.d.ts +2 -2
  118. package/dist/config/define.js +2 -2
  119. package/dist/diagnostics/firefox-collector.d.ts +11 -10
  120. package/dist/diagnostics/firefox-collector.d.ts.map +1 -1
  121. package/dist/diagnostics/firefox-collector.js +16 -11
  122. package/dist/media/client.d.ts +2 -1
  123. package/dist/media/client.d.ts.map +1 -1
  124. package/dist/media/client.js +16 -5
  125. package/dist/media/host.d.ts +32 -0
  126. package/dist/media/host.d.ts.map +1 -0
  127. package/dist/media/host.js +50 -0
  128. package/dist/media/locate.d.ts.map +1 -1
  129. package/dist/media/locate.js +4 -3
  130. package/dist/native/processes.d.ts.map +1 -1
  131. package/dist/native/processes.js +7 -3
  132. package/dist/protocol/files.d.ts +1 -1
  133. package/dist/protocol/files.d.ts.map +1 -1
  134. package/dist/protocol/files.js +10 -5
  135. package/dist/reporters/commands.d.ts +12 -3
  136. package/dist/reporters/commands.d.ts.map +1 -1
  137. package/dist/reporters/commands.js +29 -11
  138. package/dist/reporters/human-card.js +1 -1
  139. package/dist/reporters/human.d.ts +3 -1
  140. package/dist/reporters/human.d.ts.map +1 -1
  141. package/dist/reporters/human.js +8 -8
  142. package/dist/reporters/style.d.ts +21 -2
  143. package/dist/reporters/style.d.ts.map +1 -1
  144. package/dist/reporters/style.js +11 -2
  145. package/dist/runner/app-server.d.ts +27 -7
  146. package/dist/runner/app-server.d.ts.map +1 -1
  147. package/dist/runner/app-server.js +74 -24
  148. package/dist/runner/child.js +6 -2
  149. package/dist/runner/media-leftovers.d.ts +7 -3
  150. package/dist/runner/media-leftovers.d.ts.map +1 -1
  151. package/dist/runner/media-leftovers.js +27 -6
  152. package/dist/runner/resources.d.ts +8 -0
  153. package/dist/runner/resources.d.ts.map +1 -1
  154. package/dist/runner/resources.js +12 -1
  155. package/dist/runner/run-session.d.ts.map +1 -1
  156. package/dist/runner/run-session.js +9 -4
  157. package/dist/runner/run.d.ts.map +1 -1
  158. package/dist/runner/run.js +2 -1
  159. package/dist/runner/target-drivers.d.ts +5 -2
  160. package/dist/runner/target-drivers.d.ts.map +1 -1
  161. package/dist/runner/target-drivers.js +10 -1
  162. package/dist/runner/test-file-process.d.ts +8 -0
  163. package/dist/runner/test-file-process.d.ts.map +1 -1
  164. package/dist/runner/test-file-process.js +26 -3
  165. package/dist/runner/test-pages.d.ts.map +1 -1
  166. package/dist/runner/test-pages.js +5 -2
  167. package/dist/shared/environment.d.ts +17 -0
  168. package/dist/shared/environment.d.ts.map +1 -0
  169. package/dist/shared/environment.js +27 -0
  170. package/dist/shared/metadata-process-worker.js +15 -7
  171. package/dist/shared/metadata-process.d.ts +5 -0
  172. package/dist/shared/metadata-process.d.ts.map +1 -1
  173. package/dist/shared/metadata-process.js +36 -6
  174. package/dist/shared/posix-path.d.ts +12 -0
  175. package/dist/shared/posix-path.d.ts.map +1 -1
  176. package/dist/shared/posix-path.js +16 -0
  177. package/dist/shared/private-file.d.ts +38 -0
  178. package/dist/shared/private-file.d.ts.map +1 -0
  179. package/dist/shared/private-file.js +132 -0
  180. package/dist/shared/process-ownership.d.ts +52 -2
  181. package/dist/shared/process-ownership.d.ts.map +1 -1
  182. package/dist/shared/process-ownership.js +104 -11
  183. package/dist/shared/process-supervisor.d.ts +309 -0
  184. package/dist/shared/process-supervisor.d.ts.map +1 -0
  185. package/dist/shared/process-supervisor.js +737 -0
  186. package/dist/shared/process-system.d.ts +113 -0
  187. package/dist/shared/process-system.d.ts.map +1 -0
  188. package/dist/shared/process-system.js +254 -0
  189. package/dist/shared/regular-file.d.ts +2 -2
  190. package/dist/shared/regular-file.d.ts.map +1 -1
  191. package/dist/shared/regular-file.js +19 -2
  192. package/dist/store/artifacts.d.ts +5 -4
  193. package/dist/store/artifacts.d.ts.map +1 -1
  194. package/dist/store/artifacts.js +18 -5
  195. package/dist/store/run-store.d.ts +5 -2
  196. package/dist/store/run-store.d.ts.map +1 -1
  197. package/dist/store/run-store.js +48 -4
  198. package/media/Cargo.lock +16 -0
  199. package/media/Cargo.toml +16 -1
  200. package/media/src/encoder.rs +56 -12
  201. package/media/src/frame.rs +7 -1
  202. package/media/src/main.rs +20 -2
  203. package/media/src/place.rs +230 -11
  204. package/media/src/process_ownership_windows.rs +1058 -0
  205. package/media/src/recording.rs +15 -7
  206. package/media/src/replies.rs +55 -0
  207. package/media/src/server.rs +72 -2
  208. package/media/src/store.rs +71 -2
  209. package/package.json +9 -4
  210. package/src/cli/install/media-notices.txt +465 -1
  211. package/supervisor/Cargo.lock +25 -0
  212. package/supervisor/Cargo.toml +22 -0
  213. package/supervisor/NOTICES +464 -0
  214. package/supervisor/build.rs +44 -0
  215. package/supervisor/src/command.rs +612 -0
  216. package/supervisor/src/jobs.rs +1650 -0
  217. package/supervisor/src/main.rs +71 -0
  218. package/supervisor/src/reply.rs +367 -0
package/README.md CHANGED
@@ -25,7 +25,7 @@ There is no Playwright, Puppeteer or Selenium underneath. Retest is early, and t
25
25
 
26
26
  ## Quick start
27
27
 
28
- You need Node.js 24.12 or later, on macOS or Linux.
28
+ You need Node.js 24.12 or later, on macOS, Linux or Windows x64. Windows also needs Retest's process supervisor, which [the guide](docs/guide.md#windows) says how to install.
29
29
 
30
30
  ```sh
31
31
  npm install --save-dev @rehearsal-labs/retest typescript @types/node
@@ -72,16 +72,16 @@ npx retest install --list # what is pinned for this machine; downloads nothi
72
72
  npx retest install firefox # also chromium, webkit and electron
73
73
  ```
74
74
 
75
- On macOS on Apple silicon, Retest pins Chrome for Testing, Firefox 133, Playwright's WebKit build 2359 and Electron 44.5.1. On Linux x64 it pins Chrome for Testing only. A Firefox target finds the installed build by itself. Give a Chromium, WebKit or Electron target the path that `retest install` prints.
75
+ On macOS on Apple silicon, Retest pins Chrome for Testing, Firefox 158.0.1, WebKit build 2359 and Electron 44.5.1. On Windows x64 it pins Chrome for Testing, Firefox 158.0.1 and Electron 44.5.1. On Linux x64 it pins Chrome for Testing only. A Firefox target finds the installed build by itself. Give a Chromium, WebKit or Electron target the path that `retest install` prints.
76
76
 
77
77
  ## What runs today
78
78
 
79
79
  | | |
80
80
  | --- | --- |
81
- | Browsers | Chrome and Chromium. Firefox 133 and WebKit build 2359 on macOS on Apple silicon |
81
+ | Browsers | Chrome and Chromium. Firefox 158.0.1 on macOS on Apple silicon and on Windows x64. WebKit build 2359 on macOS on Apple silicon |
82
82
  | iOS simulator apps | Find, tap, fill and check elements through WebDriverAgent, built on your Mac from a pinned commit |
83
83
  | macOS apps | Find, click, fill and check elements through the macOS runner of appium-mac2-driver |
84
- | Electron apps | The app's first window, driven like a Chrome page. Checked with Electron 44.5.1 on macOS |
84
+ | Electron apps | The app's first window, driven like a Chrome page. Checked with Electron 44.5.1 on macOS and Windows |
85
85
  | One test across platforms | An iOS simulator app, a macOS app and web apps in the same test |
86
86
  | AI checks | `test.evaluate` asks a judge you choose whether a screenshot, text or recorded frames meet a requirement |
87
87
  | Layout checks | Overlapping elements, cut-off text, an element past the viewport's right edge and sideways scroll, each measured in pixels. Checked on Chrome on macOS |
@@ -92,8 +92,9 @@ On macOS on Apple silicon, Retest pins Chrome for Testing, Firefox 133, Playwrig
92
92
  | Mocked responses and drag | Answer a request with your own response or refuse it; drag an element onto another. Checked on Chrome on macOS |
93
93
  | Playwright test files | `retest run --playwright` runs `.spec.ts` files unchanged, for the methods [the guide](docs/guide.md#run-playwright-test-files) lists |
94
94
  | Linux | Chrome and Chromium only, checked inside Docker |
95
+ | Windows x64 | Chrome, Chromium, Firefox and Electron, with recordings on Chrome. Nothing a run starts outlives Retest. Checked on Windows Server 2025 on GitHub's runner |
95
96
 
96
- Not yet: Android apps, Windows, Safari, and real phones or tablets.
97
+ Not yet: Android apps, Safari, and real phones or tablets. [The guide](docs/guide.md#windows) says what Windows does not run yet.
97
98
 
98
99
  ## One test across platforms
99
100
 
@@ -1 +1 @@
1
- {"version":3,"file":"source-location.d.ts","sourceRoot":"","sources":["../../src/api/source-location.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAY7D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAM1E;AAED,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAOvF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG3F"}
1
+ {"version":3,"file":"source-location.d.ts","sourceRoot":"","sources":["../../src/api/source-location.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAc7D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAM1E;AAED,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAOvF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG3F"}
@@ -5,7 +5,9 @@ import { formatLine } from "../protocol/location.js";
5
5
  import { relativePosixPath } from "../shared/posix-path.js";
6
6
  // The folder holding this copy of Retest: `src` when run from source, `dist` when built.
7
7
  const ownDirectory = fileURLToPath(new URL('../', import.meta.url));
8
- const stackFrame = /(?:\(|at )((?:file:\/\/)?\/[^()]*?):(\d+):(\d+)\)?$/;
8
+ // A frame names its script by a file URL or an absolute path: a POSIX one, or on Windows a drive or UNC path, as V8
9
+ // writes a frame a source map placed.
10
+ const stackFrame = /(?:\(|at )((?:file:\/\/)?\/[^()]*?|[A-Za-z]:[\\/][^()]*?|\\\\[^()]*?):(\d+):(\d+)\)?$/;
9
11
  const maxFrames = 64;
10
12
  /**
11
13
  * Where the code that called into Retest sits: the first stack frame outside Retest's own files.
@@ -5,7 +5,7 @@ export type BuildEngine = 'chromium' | 'firefox' | 'webkit' | 'electron' | 'webd
5
5
  /** The engines whose build is a published archive Retest downloads; the native executors are built from source. */
6
6
  export type ArchiveEngine = Exclude<BuildEngine, ExecutorName>;
7
7
  /** A machine a build is pinned for. */
8
- export type BuildPlatform = 'mac-arm64' | 'linux-x64';
8
+ export type BuildPlatform = 'mac-arm64' | 'linux-x64' | 'win-x64';
9
9
  /** Every engine, in the order lists show them. */
10
10
  export declare const buildEngines: readonly BuildEngine[];
11
11
  /**
@@ -38,12 +38,19 @@ export type PinnedLicences = {
38
38
  readonly inspected: false;
39
39
  readonly reason: string;
40
40
  };
41
- /** How a published archive is packed: a zip, or a macOS disk image holding one app bundle that is copied out. */
41
+ /**
42
+ * How a published archive is packed: a zip; a macOS disk image holding one app bundle that is copied out; or a Windows
43
+ * installer that is a 7-Zip self-extracting archive, from which only the folder `folder` is unpacked and nothing of the
44
+ * installer is run.
45
+ */
42
46
  export type ArchiveFormat = {
43
47
  readonly format: 'zip';
44
48
  } | {
45
49
  readonly format: 'dmg';
46
50
  readonly app: string;
51
+ } | {
52
+ readonly format: 'exe';
53
+ readonly folder: string;
47
54
  };
48
55
  /** A file of an installed build whose bytes are pinned, beside its executable and licences, and why. */
49
56
  export type PinnedFile = {
@@ -106,6 +113,7 @@ export type BuildPin = ArchivePin | SourcePin;
106
113
  * The tested set. Chromium is Chrome for Testing, from Google; Firefox is Mozilla's release; WebKit is Playwright's
107
114
  * automation build, the only WebKit build with the inspector pipe Retest drives; Electron is the release its fixture app
108
115
  * runs on; the two native executors are built from their pinned commits. Only Chromium is pinned for Linux x64; its archive has been inspected, without a Linux browser execution claim.
116
+ * Windows x64 has Chromium, Firefox and Electron, from the same releases, and no WebKit build.
109
117
  */
110
118
  export declare const pinnedBuilds: readonly BuildPin[];
111
119
  /**
@@ -114,7 +122,7 @@ export declare const pinnedBuilds: readonly BuildPin[];
114
122
  * @example buildPlatform('darwin', 'arm64') // 'mac-arm64'
115
123
  */
116
124
  export declare function buildPlatform(platform?: NodeJS.Platform, arch?: string): BuildPlatform | undefined;
117
- /** @example describePlatform('linux-x64') // 'Linux x64' */
125
+ /** @example describePlatform('win-x64') // 'Windows x64' */
118
126
  export declare function describePlatform(platform: BuildPlatform): string;
119
127
  /**
120
128
  * The pin of one engine for one platform, if Retest pins one.
@@ -122,6 +130,12 @@ export declare function describePlatform(platform: BuildPlatform): string;
122
130
  * @example findPin('webkit', 'linux-x64') // undefined
123
131
  */
124
132
  export declare function findPin(engine: BuildEngine, platform: BuildPlatform, pins?: readonly BuildPin[]): BuildPin | undefined;
133
+ /**
134
+ * Why there is no pin of an engine for a platform, as one sentence for `retest install` to refuse with.
135
+ *
136
+ * @example unpinnedMessage('webkit', 'win-x64') // 'Retest does not run WebKit on Windows, so there is no WebKit build to install.'
137
+ */
138
+ export declare function unpinnedMessage(engine: BuildEngine, platform: BuildPlatform): string;
125
139
  /** @example describePin(findPin('electron', 'mac-arm64')) // 'Electron 44.5.1' */
126
140
  export declare function describePin(pin: BuildPin): string;
127
141
  /**
@@ -161,11 +175,26 @@ export type CacheFolders = {
161
175
  };
162
176
  /**
163
177
  * The cache folders under the user's cache folder: `~/Library/Caches/retest` on macOS, `$XDG_CACHE_HOME/retest` or
164
- * `~/.cache/retest` on Linux. Undefined without an absolute `HOME`, since there is then no user cache folder.
178
+ * `~/.cache/retest` on Linux, `%LOCALAPPDATA%\retest` on Windows. Undefined without an absolute `HOME`, or on Windows
179
+ * an absolute `LOCALAPPDATA`, since there is then no user cache folder. Paths are written as `platform` writes them.
165
180
  *
166
181
  * @example cacheFolders({ HOME: '/Users/ada' }, 'darwin')?.browsers // '/Users/ada/Library/Caches/retest/browsers'
182
+ * @example cacheFolders({ LOCALAPPDATA: 'C:\\Users\\ada\\AppData\\Local' }, 'win32')?.browsers // 'C:\\Users\\ada\\AppData\\Local\\retest\\browsers'
167
183
  */
168
184
  export declare function cacheFolders(env: Readonly<Record<string, string | undefined>>, platform?: NodeJS.Platform): CacheFolders | undefined;
185
+ /**
186
+ * The variable `cacheFolders` finds the user's cache folder from, for a message to name when it is not set.
187
+ *
188
+ * @example cacheVariable('win32') // 'LOCALAPPDATA'
189
+ */
190
+ export declare function cacheVariable(platform?: NodeJS.Platform): 'HOME' | 'LOCALAPPDATA';
191
+ /**
192
+ * An environment variable as the system reads it: by its exact name, and on Windows, where names differ only in case
193
+ * for the same variable, by any spelling of it. `process.env` already reads so on Windows; a copy of it does not.
194
+ *
195
+ * @example environmentVariable({ ProgramFiles: 'C:\\Program Files' }, 'PROGRAMFILES', 'win32') // 'C:\\Program Files'
196
+ */
197
+ export declare function environmentVariable(env: Readonly<Record<string, string | undefined>>, name: string, platform?: NodeJS.Platform): string | undefined;
169
198
  /**
170
199
  * The folder one pin's build is installed in. A browser or Electron build is named after its engine, version and
171
200
  * platform; an executor build after its name, version and the key of the tested set, as its build step names it.
@@ -340,7 +369,7 @@ export type InstalledBuildOptions = {
340
369
  * `retest install` refuses. The message names the folder, what is wrong and how to fix it. Nothing is downloaded,
341
370
  * and nothing is thrown: a folder that cannot be read is damaged.
342
371
  *
343
- * @example await installedBuild('firefox', process.env) // { state: 'damaged', message: 'Firefox 133.0.3 … in … is not usable: …' }
372
+ * @example await installedBuild('firefox', process.env) // { state: 'damaged', message: 'Firefox 158.0.1 … in … is not usable: …' }
344
373
  */
345
374
  export declare function installedBuild(engine: ArchiveEngine, env: Readonly<Record<string, string | undefined>>, options?: InstalledBuildOptions): Promise<InstalledBuild>;
346
375
  /** A pinned build as a driver reads it; see `installedBuild`. */
@@ -359,7 +388,7 @@ export type InstalledBuild = {
359
388
  * installed as its pin and record say; undefined otherwise, which a damaged build is too. A driver that must tell a
360
389
  * damaged build from a missing one asks `installedBuild`. A target's own `executablePath` always wins over it.
361
390
  *
362
- * @example await installedExecutable('firefox', process.env) // '/Users/ada/Library/Caches/retest/browsers/firefox-133.0.3-mac-arm64/build/Firefox.app/Contents/MacOS/firefox'
391
+ * @example await installedExecutable('firefox', process.env) // '/Users/ada/Library/Caches/retest/browsers/firefox-158.0.1-mac-arm64/build/Firefox.app/Contents/MacOS/firefox'
363
392
  */
364
393
  export declare function installedExecutable(engine: ArchiveEngine, env: Readonly<Record<string, string | undefined>>, options?: InstalledBuildOptions): Promise<string | undefined>;
365
394
  //# sourceMappingURL=builds.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builds.d.ts","sourceRoot":"","sources":["../../src/browser/builds.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builds.d.ts","sourceRoot":"","sources":["../../src/browser/builds.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { closeSync, constants, fstatSync, lstatSync, openSync, readSync } from 'node:fs';
2
2
  import { createHash } from 'node:crypto';
3
3
  import { access, lstat, readdir, readlink } from 'node:fs/promises';
4
- import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
4
+ import { basename, dirname, isAbsolute, join, posix, relative, resolve, sep, win32 } from 'node:path';
5
5
  import { fileURLToPath } from 'node:url';
6
6
  import { folderChecksum, nativePins, pinKey, readBuildRecord } from "../native/executors.js";
7
7
  import { errorMessage } from "../protocol/failures.js";
@@ -13,6 +13,8 @@ export const buildEngines = ['chromium', 'firefox', 'webkit', 'electron', 'webdr
13
13
  const chromiumVersion = '153.0.8010.12';
14
14
  const chromeForTesting = 'https://storage.googleapis.com/chrome-for-testing-public';
15
15
  const macChrome = 'chrome-mac-arm64/Google Chrome for Testing.app';
16
+ const firefoxReleases = 'https://archive.mozilla.org/pub/firefox/releases';
17
+ const electronReleases = 'https://github.com/electron/electron/releases/download';
16
18
  // Authorized Linux archive observations, retained beside the pin table without adding unsupported install pins.
17
19
  // Firefox 133.0.3: https://archive.mozilla.org/pub/firefox/releases/133.0.3/linux-x86_64/en-US/firefox-133.0.3.tar.bz2
18
20
  // 89_495_132 bytes; SHA-256 43713e238d0153fdbf1ab46dd76c6b01ab83fae197b5dc3a95087f51907ba44d.
@@ -76,6 +78,7 @@ function executorPin(engine) {
76
78
  * The tested set. Chromium is Chrome for Testing, from Google; Firefox is Mozilla's release; WebKit is Playwright's
77
79
  * automation build, the only WebKit build with the inspector pipe Retest drives; Electron is the release its fixture app
78
80
  * runs on; the two native executors are built from their pinned commits. Only Chromium is pinned for Linux x64; its archive has been inspected, without a Linux browser execution claim.
81
+ * Windows x64 has Chromium, Firefox and Electron, from the same releases, and no WebKit build.
79
82
  */
80
83
  export const pinnedBuilds = [
81
84
  {
@@ -114,23 +117,58 @@ export const pinnedBuilds = [
114
117
  },
115
118
  provenance: 'Archive size and checksum, executable and both licence files read from the Google publisher download. Linux browser execution and installation remain unverified.',
116
119
  },
120
+ {
121
+ kind: 'archive',
122
+ engine: 'chromium',
123
+ title: 'Chrome for Testing',
124
+ version: chromiumVersion,
125
+ platform: 'win-x64',
126
+ archive: { format: 'zip', url: `${chromeForTesting}/${chromiumVersion}/win64/chrome-win64.zip`, size: 205_123_748, sha256: '415968b02065d4a9e2c10b85f0ae9f489b8fba500e94d9d0a7b7c4852a7234c1' },
127
+ executable: { path: 'chrome-win64/chrome.exe', sha256: '9b07943f834485b43c9d54caea2951c78715f9f07070a80ab6658465ebd3e711' },
128
+ files: [],
129
+ licences: {
130
+ inspected: true,
131
+ files: [
132
+ { path: 'chrome-win64/ABOUT', title: "the build's notice, which names chrome://credits, where the licences compiled into the browser are listed", licence: 'BSD-3-Clause and the licences at chrome://credits', sha256: '122b32f3ee3f1e8d65c774f5257fc6cc2127b666148ced0ce2efa3ea57e1d93c', published: true },
133
+ ],
134
+ },
135
+ provenance: 'Archive size and checksum, executable and notice read from the Google publisher download of 21 October 2026, here and on a Windows Server 2025 machine, whose own tar.exe unpacks the same files as unzip and libarchive bsdtar do on macOS. The Windows build carries no Widevine module, so there is no Widevine licence to pin. Installed by retest install and run on Windows Server 2025 x64, on a GitHub windows-2025 runner, in the 0.3.0 CI matrix.',
136
+ },
117
137
  {
118
138
  kind: 'archive',
119
139
  engine: 'firefox',
120
140
  title: 'Firefox',
121
- version: '133.0.3',
122
- build: '20241209150345',
141
+ version: '158.0.1',
142
+ build: '20261019185856',
123
143
  platform: 'mac-arm64',
124
- archive: { format: 'dmg', app: 'Firefox.app', url: 'https://archive.mozilla.org/pub/firefox/releases/133.0.3/mac/en-US/Firefox%20133.0.3.dmg', size: 154_008_053, sha256: '9ceb4fa2120228f287e6c654cef7898b4cce0a659270056276b8884581267d3b', checksums: 'https://archive.mozilla.org/pub/firefox/releases/133.0.3/SHA256SUMS' },
125
- executable: { path: 'Firefox.app/Contents/MacOS/firefox', sha256: '363eae026f4f5b3a8549f6a9c96a269754094ef12afc5f02cdffbcb4bcbf389c' },
144
+ archive: { format: 'dmg', app: 'Firefox.app', url: `${firefoxReleases}/158.0.1/mac/en-US/Firefox%20158.0.1.dmg`, size: 165_038_147, sha256: '1d7aa96b51fc9110185047de18228ac87238fba5e42bba53c9d696f88878cba6', checksums: `${firefoxReleases}/158.0.1/SHA256SUMS` },
145
+ executable: { path: 'Firefox.app/Contents/MacOS/firefox', sha256: '0b406e1d7c88d48c13f6389e05f22dedcb6ab99f06e539150a49e4ba995d0386' },
126
146
  files: [],
127
147
  licences: {
128
148
  inspected: true,
129
149
  files: [
130
- { path: 'Firefox.app/Contents/Resources/omni.ja', title: "the archive that holds Firefox's about:license page, chrome/toolkit/content/global/license.html", licence: 'MPL-2.0 and the licences at about:license', sha256: '1ecdc0a4f6de9f562b24417cdaff4d2f17474d51572e65bbc4c7489cf4025c38', published: true },
150
+ { path: 'Firefox.app/Contents/Resources/omni.ja', title: "the archive that holds Firefox's about:license page, chrome/toolkit/content/global/license.html", licence: 'MPL-2.0 and the licences at about:license', sha256: 'dbfea026a6155b5c8794f55b2e54b19b0120353379a18e343dad381aa84228f5', published: true },
131
151
  ],
132
152
  },
133
- provenance: 'Version, build id, executable and omni.ja checksums originally read from the signed en-US Firefox 133.0.3 in /Applications. The Mozilla disk-image download carries the same executable and omni.ja. The image holds Firefox.app at its root, copied to Firefox.app under the installed build. The archive size and checksum pinned above were measured from that download, which unpacked as the pin describes. Mozilla SHA256SUMS was not fetched for this pin.',
153
+ provenance: "Archive size and checksum from Mozilla's download of 22 October 2026, which matched the release's SHA256SUMS. The image holds Firefox.app at its root, copied to Firefox.app under the installed build. Executable and omni.ja checksums read from the mounted image; its application.ini names Firefox 158.0.1 build 20261019185856.",
154
+ },
155
+ {
156
+ kind: 'archive',
157
+ engine: 'firefox',
158
+ title: 'Firefox',
159
+ version: '158.0.1',
160
+ build: '20261019185856',
161
+ platform: 'win-x64',
162
+ archive: { format: 'exe', folder: 'core', url: `${firefoxReleases}/158.0.1/win64/en-US/Firefox%20Setup%20158.0.1.exe`, size: 94_890_968, sha256: '3259a2f8508e58cf2e383b6c99bfc64d6ddc86d1407b7c2f86f660af955b5d10', checksums: `${firefoxReleases}/158.0.1/SHA256SUMS` },
163
+ executable: { path: 'core/firefox.exe', sha256: '76732d4e43c864194660c671c52ecf4bad89e43b666d9a0acf89cd4b692ced9b' },
164
+ files: [],
165
+ licences: {
166
+ inspected: true,
167
+ files: [
168
+ { path: 'core/omni.ja', title: "the archive that holds Firefox's about:license page, chrome/toolkit/content/global/license.html", licence: 'MPL-2.0 and the licences at about:license', sha256: '42f976ac57103698320728a9c134ec8e710ab9a3c48d127ea3e115e1b3b211c3', published: true },
169
+ ],
170
+ },
171
+ provenance: "Archive size and checksum from Mozilla's download of 22 October 2026, which matched the release's SHA256SUMS. Mozilla publishes no zip of a Windows release, only this installer: a 7-Zip archive behind a self-extracting stub that Retest never runs. The archive holds setup.exe and the core folder, which is the whole of Firefox and is unpacked alone. Executable and omni.ja checksums read from that folder as libarchive bsdtar unpacked it on macOS, and the same bytes again after retest install unpacked it with tar.exe on a Windows Server 2025 machine; its application.ini names Firefox 158.0.1 build 20261019185856.",
134
172
  },
135
173
  {
136
174
  kind: 'archive',
@@ -171,6 +209,25 @@ export const pinnedBuilds = [
171
209
  treeSha256: 'f94a2b748b5f3e41b0ff1938ebd02052bb8af4cf037c2d24d21ffd51c5f7d7b4',
172
210
  provenance: "Archive size and checksum from a download of the official release, which matched the release's SHASUMS256.txt; executable, licence and tree checksums read from that archive unpacked with ditto in ~/Library/Caches/retest-proofs/electron/44.5.1.",
173
211
  },
212
+ {
213
+ kind: 'archive',
214
+ engine: 'electron',
215
+ title: 'Electron',
216
+ version: '44.5.1',
217
+ platform: 'win-x64',
218
+ archive: { format: 'zip', url: `${electronReleases}/v44.5.1/electron-v44.5.1-win32-x64.zip`, size: 157_998_329, sha256: '9b382492dcfee91f8f9e92c91f7972550a1b95d2299cac72279dab33a600d7db', checksums: `${electronReleases}/v44.5.1/SHASUMS256.txt` },
219
+ executable: { path: 'electron.exe', sha256: '49b61a030a520fc36a4b8fa5cce53fb4e935a7bdbbe4b80e9222f598e49cc7fa' },
220
+ files: [],
221
+ licences: {
222
+ inspected: true,
223
+ files: [
224
+ { path: 'LICENSE', title: "Electron's licence", licence: 'MIT', sha256: '5154e165bd6c2cc0cfbcd8916498c7abab0497923bafcd5cb07673fe8480087d', published: true },
225
+ { path: 'LICENSES.chromium.html', title: 'the licences of Chromium and the libraries compiled into it', licence: 'BSD-3-Clause and the licences it lists', sha256: '7b328b8c7463ac9bfc7dc648c751533517c8441a0b5b21047d6c0b2620e60d70', published: true },
226
+ ],
227
+ },
228
+ treeSha256: '0a50669f7461801821ab9d01ee2193748d36f45b6235bcfd648ed9a44a175e30',
229
+ provenance: "Archive size and checksum from a download of the official release on 21 October 2026, which matched the release's SHASUMS256.txt, here and on a Windows Server 2025 machine. Executable, licence and tree checksums read on that machine from the archive unpacked with its own tar.exe; unzip and libarchive bsdtar on macOS unpack the same files. Installed by retest install and run on Windows Server 2025 x64, on a GitHub windows-2025 runner, in the 0.3.0 CI matrix.",
230
+ },
174
231
  executorPin('webdriveragent'),
175
232
  executorPin('mac2'),
176
233
  ];
@@ -184,11 +241,14 @@ export function buildPlatform(platform = process.platform, arch = process.arch)
184
241
  return 'mac-arm64';
185
242
  if (platform === 'linux' && arch === 'x64')
186
243
  return 'linux-x64';
244
+ if (platform === 'win32' && arch === 'x64')
245
+ return 'win-x64';
187
246
  return undefined;
188
247
  }
189
- /** @example describePlatform('linux-x64') // 'Linux x64' */
248
+ const platformNames = { 'mac-arm64': 'macOS arm64', 'linux-x64': 'Linux x64', 'win-x64': 'Windows x64' };
249
+ /** @example describePlatform('win-x64') // 'Windows x64' */
190
250
  export function describePlatform(platform) {
191
- return platform === 'mac-arm64' ? 'macOS arm64' : 'Linux x64';
251
+ return platformNames[platform];
192
252
  }
193
253
  /**
194
254
  * The pin of one engine for one platform, if Retest pins one.
@@ -198,6 +258,16 @@ export function describePlatform(platform) {
198
258
  export function findPin(engine, platform, pins = pinnedBuilds) {
199
259
  return pins.find((pin) => pin.engine === engine && pin.platform === platform);
200
260
  }
261
+ /**
262
+ * Why there is no pin of an engine for a platform, as one sentence for `retest install` to refuse with.
263
+ *
264
+ * @example unpinnedMessage('webkit', 'win-x64') // 'Retest does not run WebKit on Windows, so there is no WebKit build to install.'
265
+ */
266
+ export function unpinnedMessage(engine, platform) {
267
+ if (engine === 'webkit' && platform === 'win-x64')
268
+ return 'Retest does not run WebKit on Windows, so there is no WebKit build to install.';
269
+ return `Retest pins no ${engine} build for ${describePlatform(platform)}.`;
270
+ }
201
271
  /** @example describePin(findPin('electron', 'mac-arm64')) // 'Electron 44.5.1' */
202
272
  export function describePin(pin) {
203
273
  const build = pin.kind === 'archive' && pin.build !== undefined ? ` (build ${pin.build})` : '';
@@ -275,17 +345,46 @@ export function readBundledLicence(file) {
275
345
  }
276
346
  /**
277
347
  * The cache folders under the user's cache folder: `~/Library/Caches/retest` on macOS, `$XDG_CACHE_HOME/retest` or
278
- * `~/.cache/retest` on Linux. Undefined without an absolute `HOME`, since there is then no user cache folder.
348
+ * `~/.cache/retest` on Linux, `%LOCALAPPDATA%\retest` on Windows. Undefined without an absolute `HOME`, or on Windows
349
+ * an absolute `LOCALAPPDATA`, since there is then no user cache folder. Paths are written as `platform` writes them.
279
350
  *
280
351
  * @example cacheFolders({ HOME: '/Users/ada' }, 'darwin')?.browsers // '/Users/ada/Library/Caches/retest/browsers'
352
+ * @example cacheFolders({ LOCALAPPDATA: 'C:\\Users\\ada\\AppData\\Local' }, 'win32')?.browsers // 'C:\\Users\\ada\\AppData\\Local\\retest\\browsers'
281
353
  */
282
354
  export function cacheFolders(env, platform = process.platform) {
355
+ if (platform === 'win32') {
356
+ const local = environmentVariable(env, cacheVariable(platform), platform);
357
+ if (local === undefined || !win32.isAbsolute(local))
358
+ return undefined;
359
+ return { browsers: win32.join(local, 'retest', 'browsers'), executors: win32.join(local, 'retest', 'native-executors') };
360
+ }
283
361
  const home = env['HOME'];
284
- if (home === undefined || !isAbsolute(home))
362
+ if (home === undefined || !posix.isAbsolute(home))
285
363
  return undefined;
286
364
  const xdg = env['XDG_CACHE_HOME'];
287
- const root = platform === 'darwin' ? join(home, 'Library', 'Caches') : xdg !== undefined && isAbsolute(xdg) ? xdg : join(home, '.cache');
288
- return { browsers: join(root, 'retest', 'browsers'), executors: join(root, 'retest', 'native-executors') };
365
+ const root = platform === 'darwin' ? posix.join(home, 'Library', 'Caches') : xdg !== undefined && posix.isAbsolute(xdg) ? xdg : posix.join(home, '.cache');
366
+ return { browsers: posix.join(root, 'retest', 'browsers'), executors: posix.join(root, 'retest', 'native-executors') };
367
+ }
368
+ /**
369
+ * The variable `cacheFolders` finds the user's cache folder from, for a message to name when it is not set.
370
+ *
371
+ * @example cacheVariable('win32') // 'LOCALAPPDATA'
372
+ */
373
+ export function cacheVariable(platform = process.platform) {
374
+ return platform === 'win32' ? 'LOCALAPPDATA' : 'HOME';
375
+ }
376
+ /**
377
+ * An environment variable as the system reads it: by its exact name, and on Windows, where names differ only in case
378
+ * for the same variable, by any spelling of it. `process.env` already reads so on Windows; a copy of it does not.
379
+ *
380
+ * @example environmentVariable({ ProgramFiles: 'C:\\Program Files' }, 'PROGRAMFILES', 'win32') // 'C:\\Program Files'
381
+ */
382
+ export function environmentVariable(env, name, platform = process.platform) {
383
+ const exact = env[name];
384
+ if (exact !== undefined || platform !== 'win32')
385
+ return exact;
386
+ const wanted = name.toUpperCase();
387
+ return Object.entries(env).find(([key]) => key.toUpperCase() === wanted)?.[1];
289
388
  }
290
389
  /**
291
390
  * The folder one pin's build is installed in. A browser or Electron build is named after its engine, version and
@@ -315,7 +414,7 @@ const installedRecordSchema = s.object({
315
414
  schemaVersion: s.literal(1),
316
415
  engine: s.enum(['chromium', 'firefox', 'webkit', 'electron']),
317
416
  version: s.string(),
318
- platform: s.enum(['mac-arm64', 'linux-x64']),
417
+ platform: s.enum(['mac-arm64', 'linux-x64', 'win-x64']),
319
418
  source: s.string(),
320
419
  sourceCode: s.optional(s.object({ repository: s.string(), revision: s.string(), patches: s.string() })),
321
420
  fetchedFrom: s.string(),
@@ -483,7 +582,7 @@ export async function inspectBuilds(platform, folders, options = {}, pins = pinn
483
582
  * `retest install` refuses. The message names the folder, what is wrong and how to fix it. Nothing is downloaded,
484
583
  * and nothing is thrown: a folder that cannot be read is damaged.
485
584
  *
486
- * @example await installedBuild('firefox', process.env) // { state: 'damaged', message: 'Firefox 133.0.3 … in … is not usable: …' }
585
+ * @example await installedBuild('firefox', process.env) // { state: 'damaged', message: 'Firefox 158.0.1 … in … is not usable: …' }
487
586
  */
488
587
  export async function installedBuild(engine, env, options = {}) {
489
588
  const platform = 'platform' in options ? options.platform : buildPlatform();
@@ -511,7 +610,7 @@ export async function installedBuild(engine, env, options = {}) {
511
610
  * installed as its pin and record say; undefined otherwise, which a damaged build is too. A driver that must tell a
512
611
  * damaged build from a missing one asks `installedBuild`. A target's own `executablePath` always wins over it.
513
612
  *
514
- * @example await installedExecutable('firefox', process.env) // '/Users/ada/Library/Caches/retest/browsers/firefox-133.0.3-mac-arm64/build/Firefox.app/Contents/MacOS/firefox'
613
+ * @example await installedExecutable('firefox', process.env) // '/Users/ada/Library/Caches/retest/browsers/firefox-158.0.1-mac-arm64/build/Firefox.app/Contents/MacOS/firefox'
515
614
  */
516
615
  export async function installedExecutable(engine, env, options = {}) {
517
616
  const build = await installedBuild(engine, env, options);
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/browser/cdp/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAErD,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,iEAAiE;IACjE,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,sDAAsD;IACtD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,yFAAyF;IACzF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,6EAA6E;IAC7E,QAAQ,IAAI,IAAI,CAAA;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACzC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAA;IACnC,KAAK,IAAI,IAAI,CAAA;CACd;AAED,uFAAuF;AACvF,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAA;AAMpE,6EAA6E;AAC7E,qBAAa,aAAc,YAAW,SAAS;;gBAUjC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,WAAW;IAiB/C,qFAAqF;IACrF,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAUzC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAgBnC,KAAK,IAAI,IAAI;CAqDd"}
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/browser/cdp/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAErD,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,iEAAiE;IACjE,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,sDAAsD;IACtD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,yFAAyF;IACzF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,6EAA6E;IAC7E,QAAQ,IAAI,IAAI,CAAA;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACzC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAA;IACnC,KAAK,IAAI,IAAI,CAAA;CACd;AAED,uFAAuF;AACvF,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAA;AAMpE,6EAA6E;AAC7E,qBAAa,aAAc,YAAW,SAAS;;gBAUjC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,WAAW;IAkB/C,qFAAqF;IACrF,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAUzC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAgBnC,KAAK,IAAI,IAAI;CAqDd"}
@@ -12,20 +12,20 @@ export class PipeTransport {
12
12
  constructor({ readable, writable }) {
13
13
  this.#readable = readable;
14
14
  this.#writable = writable;
15
+ // A pipe that closes without Retest closing it means the browser went, whichever of its two ends Node hears of first,
16
+ // so a killed browser is told of in one sentence however the ends race.
15
17
  readable.on('end', () => this.#end('the browser closed the pipe'));
16
18
  readable.on('close', () => this.#end('the browser closed the pipe'));
17
19
  readable.on('error', (error) => this.#end(`reading from the browser failed: ${error.message}`));
18
- writable.on('close', () => this.#end('the pipe to the browser closed'));
20
+ writable.on('close', () => this.#end('the browser closed the pipe'));
19
21
  writable.on('error', (error) => this.#end(`writing to the browser failed: ${error.message}`));
20
22
  writable.on('drain', () => {
21
23
  this.#blocked = false;
22
24
  this.#flush();
23
25
  });
24
26
  // A stream that ended before this point never emits its events again.
25
- if (readable.destroyed || readable.readableEnded)
27
+ if (readable.destroyed || readable.readableEnded || writable.destroyed || writable.writableEnded)
26
28
  this.#end('the browser closed the pipe');
27
- else if (writable.destroyed || writable.writableEnded)
28
- this.#end('the pipe to the browser closed');
29
29
  }
30
30
  /** Starts reading. Nothing is read before this, so no message can arrive unheard. */
31
31
  listen(handlers) {
@@ -112,4 +112,27 @@ export declare function stillThereMessage(groupId: number, stats: () => readonly
112
112
  export declare function signalGroup(pgid: number, signal: NodeJS.Signals | 0): boolean;
113
113
  /** Signals a descendant only after this process recorded it beneath the launched browser. */
114
114
  export declare function signalRecordedProcess(browserPid: number, pid: number, signal: NodeJS.Signals): void;
115
+ /**
116
+ * Waits for the output to close. A timer can fire before I/O that is already waiting has been read, when the main thread
117
+ * was busy with other work such as synchronous process readings, so the clock alone is no proof the output is still
118
+ * open: on a busy host every healthy close failed so. When the bound passes, waiting I/O is read first, then the output
119
+ * is judged by whether anything can still write to it. Once nothing can, Retest's own writing gets its own bound.
120
+ * If a writer remains after verified owned shutdown, an output with safe reader finish support may stop its local
121
+ * readers and flush accepted bytes and queued writes within that same writing bound. This does not claim remote
122
+ * EOF or collect bytes an inherited writer sends later. An output without this support still fails and is canceled.
123
+ */
124
+ export declare function outputWithin(output: BrowserOutput, timeoutMs: number, confirmedGone: () => Promise<boolean>): Promise<string[]>;
125
+ /** How long an exit hook on Windows asks again to remove a folder whose processes it confirmed gone. */
126
+ export declare const exitRemovalMs: number;
127
+ /**
128
+ * Removes a folder from an exit hook on Windows, where a folder whose files processes just ended were using refuses
129
+ * removal for a moment after they left their job, and the synchronous removal does not wait: it is asked again, a poll
130
+ * apart, until the deadline.
131
+ */
132
+ export declare function removeOnceFree(folder: string, deadline: Deadline): void;
133
+ /**
134
+ * Whether a group is gone, for an exit hook, which cannot await. Processes just sent SIGKILL are still exiting when they
135
+ * are first read, so the group is read again, a poll apart, until it is gone or the deadline passes.
136
+ */
137
+ export declare function groupEndsNow(ownership: OwnedProcessGroup, deadline: Deadline): boolean;
115
138
  //# sourceMappingURL=chromium-process.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chromium-process.d.ts","sourceRoot":"","sources":["../../src/browser/chromium-process.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chromium-process.d.ts","sourceRoot":"","sources":["../../src/browser/chromium-process.ts"],"names":[],"mappings":"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"}