brave-real-puppeteer-core 24.20.0 → 24.23.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 (207) hide show
  1. package/README.md +5 -5
  2. package/advanced-stealth.js +1 -1
  3. package/lib/cjs/puppeteer/api/Browser.d.ts +1 -1
  4. package/lib/cjs/puppeteer/api/Dialog.d.ts +8 -10
  5. package/lib/cjs/puppeteer/api/Dialog.d.ts.map +1 -1
  6. package/lib/cjs/puppeteer/api/Dialog.js +8 -10
  7. package/lib/cjs/puppeteer/api/Dialog.js.map +1 -1
  8. package/lib/cjs/puppeteer/api/ElementHandle.d.ts +28 -30
  9. package/lib/cjs/puppeteer/api/ElementHandle.d.ts.map +1 -1
  10. package/lib/cjs/puppeteer/api/ElementHandle.js +27 -29
  11. package/lib/cjs/puppeteer/api/ElementHandle.js.map +1 -1
  12. package/lib/cjs/puppeteer/api/Frame.d.ts +34 -38
  13. package/lib/cjs/puppeteer/api/Frame.d.ts.map +1 -1
  14. package/lib/cjs/puppeteer/api/Frame.js +34 -38
  15. package/lib/cjs/puppeteer/api/Frame.js.map +1 -1
  16. package/lib/cjs/puppeteer/api/HTTPRequest.d.ts +8 -1
  17. package/lib/cjs/puppeteer/api/HTTPRequest.d.ts.map +1 -1
  18. package/lib/cjs/puppeteer/api/HTTPRequest.js +12 -14
  19. package/lib/cjs/puppeteer/api/HTTPRequest.js.map +1 -1
  20. package/lib/cjs/puppeteer/api/Page.d.ts +103 -109
  21. package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  22. package/lib/cjs/puppeteer/api/Page.js +35 -41
  23. package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  24. package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
  25. package/lib/cjs/puppeteer/bidi/Browser.js +5 -3
  26. package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
  27. package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
  28. package/lib/cjs/puppeteer/bidi/Frame.js +1 -1
  29. package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
  30. package/lib/cjs/puppeteer/bidi/HTTPRequest.d.ts +4 -2
  31. package/lib/cjs/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
  32. package/lib/cjs/puppeteer/bidi/HTTPRequest.js +14 -5
  33. package/lib/cjs/puppeteer/bidi/HTTPRequest.js.map +1 -1
  34. package/lib/cjs/puppeteer/bidi/Page.d.ts +6 -1
  35. package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  36. package/lib/cjs/puppeteer/bidi/Page.js +42 -14
  37. package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  38. package/lib/cjs/puppeteer/bidi/core/Browser.d.ts.map +1 -1
  39. package/lib/cjs/puppeteer/bidi/core/Browser.js +24 -2
  40. package/lib/cjs/puppeteer/bidi/core/Browser.js.map +1 -1
  41. package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  42. package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js +1 -3
  43. package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  44. package/lib/cjs/puppeteer/bidi/core/Realm.d.ts +2 -2
  45. package/lib/cjs/puppeteer/cdp/Accessibility.js +0 -20
  46. package/lib/cjs/puppeteer/cdp/Accessibility.js.map +1 -1
  47. package/lib/cjs/puppeteer/cdp/HTTPRequest.d.ts +1 -0
  48. package/lib/cjs/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  49. package/lib/cjs/puppeteer/cdp/HTTPRequest.js +3 -0
  50. package/lib/cjs/puppeteer/cdp/HTTPRequest.js.map +1 -1
  51. package/lib/cjs/puppeteer/cdp/NetworkManager.d.ts +1 -1
  52. package/lib/cjs/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
  53. package/lib/cjs/puppeteer/cdp/NetworkManager.js +8 -2
  54. package/lib/cjs/puppeteer/cdp/NetworkManager.js.map +1 -1
  55. package/lib/cjs/puppeteer/cdp/Page.d.ts +5 -1
  56. package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
  57. package/lib/cjs/puppeteer/cdp/Page.js +8 -2
  58. package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  59. package/lib/cjs/puppeteer/cdp/PredefinedNetworkConditions.d.ts +13 -22
  60. package/lib/cjs/puppeteer/cdp/PredefinedNetworkConditions.d.ts.map +1 -1
  61. package/lib/cjs/puppeteer/cdp/PredefinedNetworkConditions.js +13 -22
  62. package/lib/cjs/puppeteer/cdp/PredefinedNetworkConditions.js.map +1 -1
  63. package/lib/cjs/puppeteer/common/Device.d.ts +6 -8
  64. package/lib/cjs/puppeteer/common/Device.d.ts.map +1 -1
  65. package/lib/cjs/puppeteer/common/Device.js +6 -8
  66. package/lib/cjs/puppeteer/common/Device.js.map +1 -1
  67. package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
  68. package/lib/cjs/puppeteer/generated/injected.js +1 -1
  69. package/lib/cjs/puppeteer/generated/version.d.ts +1 -1
  70. package/lib/cjs/puppeteer/generated/version.js +1 -1
  71. package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  72. package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts +1 -1
  73. package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  74. package/lib/cjs/puppeteer/node/BrowserLauncher.js +12 -4
  75. package/lib/cjs/puppeteer/node/BrowserLauncher.js.map +1 -1
  76. package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  77. package/lib/cjs/puppeteer/node/ChromeLauncher.js +1 -0
  78. package/lib/cjs/puppeteer/node/ChromeLauncher.js.map +1 -1
  79. package/lib/cjs/puppeteer/node/PipeTransport.d.ts.map +1 -1
  80. package/lib/cjs/puppeteer/node/PipeTransport.js +15 -16
  81. package/lib/cjs/puppeteer/node/PipeTransport.js.map +1 -1
  82. package/lib/cjs/puppeteer/node/PuppeteerNode.d.ts +5 -7
  83. package/lib/cjs/puppeteer/node/PuppeteerNode.d.ts.map +1 -1
  84. package/lib/cjs/puppeteer/node/PuppeteerNode.js +5 -7
  85. package/lib/cjs/puppeteer/node/PuppeteerNode.js.map +1 -1
  86. package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  87. package/lib/cjs/puppeteer/revisions.js +3 -3
  88. package/lib/cjs/puppeteer/util/Function.d.ts.map +1 -1
  89. package/lib/cjs/puppeteer/util/Function.js +16 -25
  90. package/lib/cjs/puppeteer/util/Function.js.map +1 -1
  91. package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  92. package/lib/es5-iife/puppeteer-core-browser.d.ts +201 -227
  93. package/lib/es5-iife/puppeteer-core-browser.js +176 -218
  94. package/lib/esm/puppeteer/api/Browser.d.ts +1 -1
  95. package/lib/esm/puppeteer/api/Dialog.d.ts +8 -10
  96. package/lib/esm/puppeteer/api/Dialog.d.ts.map +1 -1
  97. package/lib/esm/puppeteer/api/Dialog.js +8 -10
  98. package/lib/esm/puppeteer/api/Dialog.js.map +1 -1
  99. package/lib/esm/puppeteer/api/ElementHandle.d.ts +28 -30
  100. package/lib/esm/puppeteer/api/ElementHandle.d.ts.map +1 -1
  101. package/lib/esm/puppeteer/api/ElementHandle.js +27 -29
  102. package/lib/esm/puppeteer/api/ElementHandle.js.map +1 -1
  103. package/lib/esm/puppeteer/api/Frame.d.ts +34 -38
  104. package/lib/esm/puppeteer/api/Frame.d.ts.map +1 -1
  105. package/lib/esm/puppeteer/api/Frame.js +34 -38
  106. package/lib/esm/puppeteer/api/Frame.js.map +1 -1
  107. package/lib/esm/puppeteer/api/HTTPRequest.d.ts +8 -1
  108. package/lib/esm/puppeteer/api/HTTPRequest.d.ts.map +1 -1
  109. package/lib/esm/puppeteer/api/HTTPRequest.js +12 -14
  110. package/lib/esm/puppeteer/api/HTTPRequest.js.map +1 -1
  111. package/lib/esm/puppeteer/api/Page.d.ts +103 -109
  112. package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  113. package/lib/esm/puppeteer/api/Page.js +35 -41
  114. package/lib/esm/puppeteer/api/Page.js.map +1 -1
  115. package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
  116. package/lib/esm/puppeteer/bidi/Browser.js +5 -3
  117. package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
  118. package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
  119. package/lib/esm/puppeteer/bidi/Frame.js +1 -1
  120. package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
  121. package/lib/esm/puppeteer/bidi/HTTPRequest.d.ts +4 -2
  122. package/lib/esm/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
  123. package/lib/esm/puppeteer/bidi/HTTPRequest.js +15 -6
  124. package/lib/esm/puppeteer/bidi/HTTPRequest.js.map +1 -1
  125. package/lib/esm/puppeteer/bidi/Page.d.ts +6 -1
  126. package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  127. package/lib/esm/puppeteer/bidi/Page.js +42 -14
  128. package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  129. package/lib/esm/puppeteer/bidi/core/Browser.d.ts.map +1 -1
  130. package/lib/esm/puppeteer/bidi/core/Browser.js +24 -2
  131. package/lib/esm/puppeteer/bidi/core/Browser.js.map +1 -1
  132. package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  133. package/lib/esm/puppeteer/bidi/core/BrowsingContext.js +1 -3
  134. package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  135. package/lib/esm/puppeteer/cdp/Accessibility.js +0 -20
  136. package/lib/esm/puppeteer/cdp/Accessibility.js.map +1 -1
  137. package/lib/esm/puppeteer/cdp/HTTPRequest.d.ts +1 -0
  138. package/lib/esm/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  139. package/lib/esm/puppeteer/cdp/HTTPRequest.js +3 -0
  140. package/lib/esm/puppeteer/cdp/HTTPRequest.js.map +1 -1
  141. package/lib/esm/puppeteer/cdp/NetworkManager.d.ts +1 -1
  142. package/lib/esm/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
  143. package/lib/esm/puppeteer/cdp/NetworkManager.js +8 -2
  144. package/lib/esm/puppeteer/cdp/NetworkManager.js.map +1 -1
  145. package/lib/esm/puppeteer/cdp/Page.d.ts +5 -1
  146. package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
  147. package/lib/esm/puppeteer/cdp/Page.js +8 -2
  148. package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  149. package/lib/esm/puppeteer/cdp/PredefinedNetworkConditions.d.ts +13 -22
  150. package/lib/esm/puppeteer/cdp/PredefinedNetworkConditions.d.ts.map +1 -1
  151. package/lib/esm/puppeteer/cdp/PredefinedNetworkConditions.js +13 -22
  152. package/lib/esm/puppeteer/cdp/PredefinedNetworkConditions.js.map +1 -1
  153. package/lib/esm/puppeteer/common/Device.d.ts +6 -8
  154. package/lib/esm/puppeteer/common/Device.d.ts.map +1 -1
  155. package/lib/esm/puppeteer/common/Device.js +6 -8
  156. package/lib/esm/puppeteer/common/Device.js.map +1 -1
  157. package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
  158. package/lib/esm/puppeteer/generated/injected.js +1 -1
  159. package/lib/esm/puppeteer/generated/version.d.ts +1 -1
  160. package/lib/esm/puppeteer/generated/version.js +1 -1
  161. package/lib/esm/puppeteer/node/BrowserLauncher.d.ts +1 -1
  162. package/lib/esm/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  163. package/lib/esm/puppeteer/node/BrowserLauncher.js +12 -4
  164. package/lib/esm/puppeteer/node/BrowserLauncher.js.map +1 -1
  165. package/lib/esm/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  166. package/lib/esm/puppeteer/node/ChromeLauncher.js +1 -0
  167. package/lib/esm/puppeteer/node/ChromeLauncher.js.map +1 -1
  168. package/lib/esm/puppeteer/node/PipeTransport.d.ts.map +1 -1
  169. package/lib/esm/puppeteer/node/PipeTransport.js +15 -16
  170. package/lib/esm/puppeteer/node/PipeTransport.js.map +1 -1
  171. package/lib/esm/puppeteer/node/PuppeteerNode.d.ts +5 -7
  172. package/lib/esm/puppeteer/node/PuppeteerNode.d.ts.map +1 -1
  173. package/lib/esm/puppeteer/node/PuppeteerNode.js +5 -7
  174. package/lib/esm/puppeteer/node/PuppeteerNode.js.map +1 -1
  175. package/lib/esm/puppeteer/revisions.d.ts +3 -3
  176. package/lib/esm/puppeteer/revisions.js +3 -3
  177. package/lib/esm/puppeteer/util/Function.d.ts.map +1 -1
  178. package/lib/esm/puppeteer/util/Function.js +16 -25
  179. package/lib/esm/puppeteer/util/Function.js.map +1 -1
  180. package/lib/types.d.ts +201 -227
  181. package/package.json +16 -16
  182. package/src/api/Browser.ts +1 -1
  183. package/src/api/Dialog.ts +8 -10
  184. package/src/api/ElementHandle.ts +27 -29
  185. package/src/api/Frame.ts +34 -38
  186. package/src/api/HTTPRequest.ts +17 -14
  187. package/src/api/Page.ts +105 -110
  188. package/src/bidi/Browser.ts +5 -3
  189. package/src/bidi/Frame.ts +5 -1
  190. package/src/bidi/HTTPRequest.ts +28 -3
  191. package/src/bidi/Page.ts +66 -15
  192. package/src/bidi/core/Browser.ts +28 -2
  193. package/src/bidi/core/BrowsingContext.ts +0 -1
  194. package/src/cdp/Accessibility.ts +1 -21
  195. package/src/cdp/HTTPRequest.ts +4 -0
  196. package/src/cdp/NetworkManager.ts +8 -1
  197. package/src/cdp/Page.ts +21 -5
  198. package/src/cdp/PredefinedNetworkConditions.ts +13 -22
  199. package/src/common/Device.ts +6 -8
  200. package/src/generated/injected.ts +1 -1
  201. package/src/generated/version.ts +1 -1
  202. package/src/node/BrowserLauncher.ts +19 -4
  203. package/src/node/ChromeLauncher.ts +1 -0
  204. package/src/node/PipeTransport.ts +15 -17
  205. package/src/node/PuppeteerNode.ts +5 -7
  206. package/src/revisions.ts +3 -3
  207. package/src/util/Function.ts +22 -30
@@ -170,6 +170,10 @@ export class CdpHTTPRequest extends HTTPRequest {
170
170
  };
171
171
  }
172
172
 
173
+ protected canBeIntercepted(): boolean {
174
+ return !this.url().startsWith('data:') && !this._fromMemoryCache;
175
+ }
176
+
173
177
  /**
174
178
  * @internal
175
179
  */
@@ -77,11 +77,12 @@ export class NetworkManager extends EventEmitter<NetworkManagerEvents> {
77
77
  #credentials: Credentials | null = null;
78
78
  #attemptedAuthentications = new Set<string>();
79
79
  #userRequestInterceptionEnabled = false;
80
- #protocolRequestInterceptionEnabled = false;
80
+ #protocolRequestInterceptionEnabled?: boolean;
81
81
  #userCacheDisabled?: boolean;
82
82
  #emulatedNetworkConditions?: InternalNetworkConditions;
83
83
  #userAgent?: string;
84
84
  #userAgentMetadata?: Protocol.Emulation.UserAgentMetadata;
85
+ #platform?: string;
85
86
 
86
87
  readonly #handlers = [
87
88
  ['Fetch.requestPaused', this.#onRequestPaused],
@@ -265,9 +266,11 @@ export class NetworkManager extends EventEmitter<NetworkManagerEvents> {
265
266
  async setUserAgent(
266
267
  userAgent: string,
267
268
  userAgentMetadata?: Protocol.Emulation.UserAgentMetadata,
269
+ platform?: string,
268
270
  ): Promise<void> {
269
271
  this.#userAgent = userAgent;
270
272
  this.#userAgentMetadata = userAgentMetadata;
273
+ this.#platform = platform;
271
274
  await this.#applyToAllClients(this.#applyUserAgent.bind(this));
272
275
  }
273
276
 
@@ -279,6 +282,7 @@ export class NetworkManager extends EventEmitter<NetworkManagerEvents> {
279
282
  await client.send('Network.setUserAgentOverride', {
280
283
  userAgent: this.#userAgent,
281
284
  userAgentMetadata: this.#userAgentMetadata,
285
+ platform: this.#platform,
282
286
  });
283
287
  } catch (error) {
284
288
  if (this.#canIgnoreError(error)) {
@@ -306,6 +310,9 @@ export class NetworkManager extends EventEmitter<NetworkManagerEvents> {
306
310
  }
307
311
 
308
312
  async #applyProtocolRequestInterception(client: CDPSession): Promise<void> {
313
+ if (this.#protocolRequestInterceptionEnabled === undefined) {
314
+ return;
315
+ }
309
316
  if (this.#userCacheDisabled === undefined) {
310
317
  this.#userCacheDisabled = false;
311
318
  }
package/src/cdp/Page.ts CHANGED
@@ -747,13 +747,29 @@ export class CdpPage extends Page {
747
747
  }
748
748
 
749
749
  override async setUserAgent(
750
- userAgent: string,
750
+ userAgentOrOptions:
751
+ | string
752
+ | {
753
+ userAgent?: string;
754
+ userAgentMetadata?: Protocol.Emulation.UserAgentMetadata;
755
+ platform?: string;
756
+ },
751
757
  userAgentMetadata?: Protocol.Emulation.UserAgentMetadata,
752
758
  ): Promise<void> {
753
- return await this.#frameManager.networkManager.setUserAgent(
754
- userAgent,
755
- userAgentMetadata,
756
- );
759
+ if (typeof userAgentOrOptions === 'string') {
760
+ return await this.#frameManager.networkManager.setUserAgent(
761
+ userAgentOrOptions,
762
+ userAgentMetadata,
763
+ );
764
+ } else {
765
+ const userAgent =
766
+ userAgentOrOptions.userAgent ?? (await this.browser().userAgent());
767
+ return await this.#frameManager.networkManager.setUserAgent(
768
+ userAgent,
769
+ userAgentOrOptions.userAgentMetadata,
770
+ userAgentOrOptions.platform,
771
+ );
772
+ }
757
773
  }
758
774
 
759
775
  override async metrics(): Promise<Metrics> {
@@ -14,28 +14,19 @@ import type {NetworkConditions} from './NetworkManager.js';
14
14
  *
15
15
  * ```ts
16
16
  * import {PredefinedNetworkConditions} from 'puppeteer';
17
- * (async () => {
18
- * const browser = await puppeteer.launch();
19
- * const page = await browser.newPage();
20
- * await page.emulateNetworkConditions(
21
- * PredefinedNetworkConditions['Slow 3G'],
22
- * );
23
- * await page.goto('https://www.google.com');
24
- * await page.emulateNetworkConditions(
25
- * PredefinedNetworkConditions['Fast 3G'],
26
- * );
27
- * await page.goto('https://www.google.com');
28
- * await page.emulateNetworkConditions(
29
- * PredefinedNetworkConditions['Slow 4G'],
30
- * ); // alias to Fast 3G.
31
- * await page.goto('https://www.google.com');
32
- * await page.emulateNetworkConditions(
33
- * PredefinedNetworkConditions['Fast 4G'],
34
- * );
35
- * await page.goto('https://www.google.com');
36
- * // other actions...
37
- * await browser.close();
38
- * })();
17
+ * const browser = await puppeteer.launch();
18
+ * const page = await browser.newPage();
19
+ * await page.emulateNetworkConditions(PredefinedNetworkConditions['Slow 3G']);
20
+ * await page.goto('https://www.google.com');
21
+ * await page.emulateNetworkConditions(PredefinedNetworkConditions['Fast 3G']);
22
+ * await page.goto('https://www.google.com');
23
+ * // alias to Fast 3G.
24
+ * await page.emulateNetworkConditions(PredefinedNetworkConditions['Slow 4G']);
25
+ * await page.goto('https://www.google.com');
26
+ * await page.emulateNetworkConditions(PredefinedNetworkConditions['Fast 4G']);
27
+ * await page.goto('https://www.google.com');
28
+ * // other actions...
29
+ * await browser.close();
39
30
  * ```
40
31
  *
41
32
  * @public
@@ -1738,14 +1738,12 @@ for (const device of knownDevices) {
1738
1738
  * import {KnownDevices} from 'puppeteer';
1739
1739
  * const iPhone = KnownDevices['iPhone 15 Pro'];
1740
1740
  *
1741
- * (async () => {
1742
- * const browser = await puppeteer.launch();
1743
- * const page = await browser.newPage();
1744
- * await page.emulate(iPhone);
1745
- * await page.goto('https://www.google.com');
1746
- * // other actions...
1747
- * await browser.close();
1748
- * })();
1741
+ * const browser = await puppeteer.launch();
1742
+ * const page = await browser.newPage();
1743
+ * await page.emulate(iPhone);
1744
+ * await page.goto('https://www.google.com');
1745
+ * // other actions...
1746
+ * await browser.close();
1749
1747
  * ```
1750
1748
  *
1751
1749
  * @public
@@ -5,4 +5,4 @@
5
5
  *
6
6
  * @internal
7
7
  */
8
- export const source = "\"use strict\";var g=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var J=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)g(t,r,{get:e[r],enumerable:!0})},Y=(t,e,r,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of B(e))!J.call(t,n)&&n!==r&&g(t,n,{get:()=>e[n],enumerable:!(o=X(e,n))||o.enumerable});return t};var z=t=>Y(g({},\"__esModule\",{value:!0}),t);var pe={};l(pe,{default:()=>he});module.exports=z(pe);var N=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},p=class extends N{};var c=class t{static create(e){return new t(e)}static async race(e){let r=new Set;try{let o=e.map(n=>n instanceof t?(n.#n&&r.add(n),n.valueOrThrow()):n);return await Promise.race(o)}finally{for(let o of r)o.reject(new Error(\"Timeout cleared\"))}}#e=!1;#r=!1;#o;#t;#a=new Promise(e=>{this.#t=e});#n;#i;constructor(e){e&&e.timeout>0&&(this.#i=new p(e.message),this.#n=setTimeout(()=>{this.reject(this.#i)},e.timeout))}#l(e){clearTimeout(this.#n),this.#o=e,this.#t()}resolve(e){this.#r||this.#e||(this.#e=!0,this.#l(e))}reject(e){this.#r||this.#e||(this.#r=!0,this.#l(e))}resolved(){return this.#e}finished(){return this.#e||this.#r}value(){return this.#o}#s;valueOrThrow(){return this.#s||(this.#s=(async()=>{if(await this.#a,this.#r)throw this.#o;return this.#o})()),this.#s}};var L=new Map,F=t=>{let e=L.get(t);return e||(e=new Function(`return ${t}`)(),L.set(t,e),e)};var b={};l(b,{ariaQuerySelector:()=>G,ariaQuerySelectorAll:()=>x});var G=(t,e)=>globalThis.__ariaQuerySelector(t,e),x=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var E={};l(E,{cssQuerySelector:()=>K,cssQuerySelectorAll:()=>Z});var K=(t,e)=>t.querySelector(e),Z=function(t,e){return t.querySelectorAll(e)};var A={};l(A,{customQuerySelectors:()=>P});var v=class{#e=new Map;register(e,r){if(!r.queryOne&&r.queryAll){let o=r.queryAll;r.queryOne=(n,i)=>{for(let s of o(n,i))return s;return null}}else if(r.queryOne&&!r.queryAll){let o=r.queryOne;r.queryAll=(n,i)=>{let s=o(n,i);return s?[s]:[]}}else if(!r.queryOne||!r.queryAll)throw new Error(\"At least one query method must be defined.\");this.#e.set(e,{querySelector:r.queryOne,querySelectorAll:r.queryAll})}unregister(e){this.#e.delete(e)}get(e){return this.#e.get(e)}clear(){this.#e.clear()}},P=new v;var R={};l(R,{pierceQuerySelector:()=>ee,pierceQuerySelectorAll:()=>te});var ee=(t,e)=>{let r=null,o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&!r&&s.matches(e)&&(r=s)}while(!r&&i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r},te=(t,e)=>{let r=[],o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&s.matches(e)&&r.push(s)}while(i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r};var u=(t,e)=>{if(!t)throw new Error(e)};var y=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=new MutationObserver(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())}),this.#o.observe(this.#r,{childList:!0,subtree:!0,attributes:!0})}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(this.#o.disconnect(),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}},w=class{#e;#r;constructor(e){this.#e=e}async start(){let e=this.#r=c.create(),r=await this.#e();if(r){e.resolve(r);return}let o=async()=>{if(e.finished())return;let n=await this.#e();if(!n){window.requestAnimationFrame(o);return}e.resolve(n),await this.stop()};window.requestAnimationFrame(o)}async stop(){u(this.#r,\"Polling never started.\"),this.#r.finished()||this.#r.reject(new Error(\"Polling stopped\"))}result(){return u(this.#r,\"Polling never started.\"),this.#r.valueOrThrow()}},S=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=setInterval(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())},this.#r)}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(clearInterval(this.#o),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}};var _={};l(_,{PCombinator:()=>H,pQuerySelector:()=>fe,pQuerySelectorAll:()=>$});var a=class{static async*map(e,r){for await(let o of e)yield await r(o)}static async*flatMap(e,r){for await(let o of e)yield*r(o)}static async collect(e){let r=[];for await(let o of e)r.push(o);return r}static async first(e){for await(let r of e)return r}};var C={};l(C,{textQuerySelectorAll:()=>m});var re=new Set([\"checkbox\",\"image\",\"radio\"]),oe=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!re.has(t.type),ne=new Set([\"SCRIPT\",\"STYLE\"]),f=t=>!ne.has(t.nodeName)&&!document.head?.contains(t),I=new WeakMap,W=t=>{for(;t;)I.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},j=new WeakSet,se=new MutationObserver(t=>{for(let e of t)W(e.target)}),d=t=>{let e=I.get(t);if(e||(e={full:\"\",immediate:[]},!f(t)))return e;let r=\"\";if(oe(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener(\"input\",o=>{W(o.target)},{once:!0,capture:!0});else{for(let o=t.firstChild;o;o=o.nextSibling){if(o.nodeType===Node.TEXT_NODE){e.full+=o.nodeValue??\"\",r+=o.nodeValue??\"\";continue}r&&e.immediate.push(r),r=\"\",o.nodeType===Node.ELEMENT_NODE&&(e.full+=d(o).full)}r&&e.immediate.push(r),t instanceof Element&&t.shadowRoot&&(e.full+=d(t.shadowRoot).full),j.has(t)||(se.observe(t,{childList:!0,characterData:!0,subtree:!0}),j.add(t))}return I.set(t,e),e};var m=function*(t,e){let r=!1;for(let o of t.childNodes)if(o instanceof Element&&f(o)){let n;o.shadowRoot?n=m(o.shadowRoot,e):n=m(o,e);for(let i of n)yield i,r=!0}r||t instanceof Element&&f(t)&&d(t).full.includes(e)&&(yield t)};var k={};l(k,{checkVisibility:()=>le,pierce:()=>T,pierceAll:()=>O});var ie=[\"hidden\",\"collapse\"],le=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let r=t.nodeType===Node.TEXT_NODE?t.parentElement:t,o=window.getComputedStyle(r),n=o&&!ie.includes(o.visibility)&&!ae(r);return e===n?t:!1};function ae(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var ce=t=>\"shadowRoot\"in t&&t.shadowRoot instanceof ShadowRoot;function*T(t){ce(t)?yield t.shadowRoot:yield t}function*O(t){t=T(t).next().value,yield t;let e=[document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT)];for(let r of e){let o;for(;o=r.nextNode();)o.shadowRoot&&(yield o.shadowRoot,e.push(document.createTreeWalker(o.shadowRoot,NodeFilter.SHOW_ELEMENT)))}}var Q={};l(Q,{xpathQuerySelectorAll:()=>q});var q=function*(t,e,r=-1){let n=(t.ownerDocument||document).evaluate(e,t,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE),i=[],s;for(;(s=n.iterateNext())&&(i.push(s),!(r&&i.length===r)););for(let h=0;h<i.length;h++)s=i[h],yield s,delete i[h]};var ue=/[-\\w\\P{ASCII}*]/u,H=(r=>(r.Descendent=\">>>\",r.Child=\">>>>\",r))(H||{}),V=t=>\"querySelectorAll\"in t,M=class{#e;#r=[];#o=void 0;elements;constructor(e,r){this.elements=[e],this.#e=r,this.#t()}async run(){if(typeof this.#o==\"string\")switch(this.#o.trimStart()){case\":scope\":this.#t();break}for(;this.#o!==void 0;this.#t()){let e=this.#o;typeof e==\"string\"?e[0]&&ue.test(e[0])?this.elements=a.flatMap(this.elements,async function*(r){V(r)&&(yield*r.querySelectorAll(e))}):this.elements=a.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!V(r))return;yield*r.querySelectorAll(e);return}let o=0;for(let n of r.parentElement.children)if(++o,n===r)break;yield*r.parentElement.querySelectorAll(`:scope>:nth-child(${o})${e}`)}):this.elements=a.flatMap(this.elements,async function*(r){switch(e.name){case\"text\":yield*m(r,e.value);break;case\"xpath\":yield*q(r,e.value);break;case\"aria\":yield*x(r,e.value);break;default:let o=P.get(e.name);if(!o)throw new Error(`Unknown selector type: ${e.name}`);yield*o.querySelectorAll(r,e.value)}})}}#t(){if(this.#r.length!==0){this.#o=this.#r.shift();return}if(this.#e.length===0){this.#o=void 0;return}let e=this.#e.shift();switch(e){case\">>>>\":{this.elements=a.flatMap(this.elements,T),this.#t();break}case\">>>\":{this.elements=a.flatMap(this.elements,O),this.#t();break}default:this.#r=e,this.#t();break}}},D=class{#e=new WeakMap;calculate(e,r=[]){if(e===null)return r;e instanceof ShadowRoot&&(e=e.host);let o=this.#e.get(e);if(o)return[...o,...r];let n=0;for(let s=e.previousSibling;s;s=s.previousSibling)++n;let i=this.calculate(e.parentNode,[n]);return this.#e.set(e,i),[...i,...r]}},U=(t,e)=>{if(t.length+e.length===0)return 0;let[r=-1,...o]=t,[n=-1,...i]=e;return r===n?U(o,i):r<n?-1:1},de=async function*(t){let e=new Set;for await(let o of t)e.add(o);let r=new D;yield*[...e.values()].map(o=>[o,r.calculate(o)]).sort(([,o],[,n])=>U(o,n)).map(([o])=>o)},$=function(t,e){let r=JSON.parse(e);if(r.some(o=>{let n=0;return o.some(i=>(typeof i==\"string\"?++n:n=0,n>1))}))throw new Error(\"Multiple deep combinators found in sequence.\");return de(a.flatMap(r,o=>{let n=new M(t,o);return n.run(),n.elements}))},fe=async function(t,e){for await(let r of $(t,e))return r;return null};var me=Object.freeze({...b,...A,...R,..._,...C,...k,...Q,...E,Deferred:c,createFunction:F,createTextContent:d,IntervalPoller:S,isSuitableNodeForTextMatching:f,MutationPoller:y,RAFPoller:w}),he=me;\n";
8
+ export const source = "\"use strict\";var g=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var Y=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)g(t,r,{get:e[r],enumerable:!0})},G=(t,e,r,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let s of B(e))!Y.call(t,s)&&s!==r&&g(t,s,{get:()=>e[s],enumerable:!(o=X(e,s))||o.enumerable});return t};var J=t=>G(g({},\"__esModule\",{value:!0}),t);var pe={};l(pe,{default:()=>he});module.exports=J(pe);var N=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},p=class extends N{};var c=class t{static create(e){return new t(e)}static async race(e){let r=new Set;try{let o=e.map(s=>s instanceof t?(s.#s&&r.add(s),s.valueOrThrow()):s);return await Promise.race(o)}finally{for(let o of r)o.reject(new Error(\"Timeout cleared\"))}}#e=!1;#r=!1;#o;#t;#a=new Promise(e=>{this.#t=e});#s;#i;constructor(e){e&&e.timeout>0&&(this.#i=new p(e.message),this.#s=setTimeout(()=>{this.reject(this.#i)},e.timeout))}#l(e){clearTimeout(this.#s),this.#o=e,this.#t()}resolve(e){this.#r||this.#e||(this.#e=!0,this.#l(e))}reject(e){this.#r||this.#e||(this.#r=!0,this.#l(e))}resolved(){return this.#e}finished(){return this.#e||this.#r}value(){return this.#o}#n;valueOrThrow(){return this.#n||(this.#n=(async()=>{if(await this.#a,this.#r)throw this.#o;return this.#o})()),this.#n}};var L=new Map,W=t=>{let e=L.get(t);return e||(e=new Function(`return ${t}`)(),L.set(t,e),e)};var b={};l(b,{ariaQuerySelector:()=>z,ariaQuerySelectorAll:()=>x});var z=(t,e)=>globalThis.__ariaQuerySelector(t,e),x=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var E={};l(E,{cssQuerySelector:()=>K,cssQuerySelectorAll:()=>Z});var K=(t,e)=>t.querySelector(e),Z=function(t,e){return t.querySelectorAll(e)};var A={};l(A,{customQuerySelectors:()=>P});var v=class{#e=new Map;register(e,r){if(!r.queryOne&&r.queryAll){let o=r.queryAll;r.queryOne=(s,i)=>{for(let n of o(s,i))return n;return null}}else if(r.queryOne&&!r.queryAll){let o=r.queryOne;r.queryAll=(s,i)=>{let n=o(s,i);return n?[n]:[]}}else if(!r.queryOne||!r.queryAll)throw new Error(\"At least one query method must be defined.\");this.#e.set(e,{querySelector:r.queryOne,querySelectorAll:r.queryAll})}unregister(e){this.#e.delete(e)}get(e){return this.#e.get(e)}clear(){this.#e.clear()}},P=new v;var R={};l(R,{pierceQuerySelector:()=>ee,pierceQuerySelectorAll:()=>te});var ee=(t,e)=>{let r=null,o=s=>{let i=document.createTreeWalker(s,NodeFilter.SHOW_ELEMENT);do{let n=i.currentNode;n.shadowRoot&&o(n.shadowRoot),!(n instanceof ShadowRoot)&&n!==s&&!r&&n.matches(e)&&(r=n)}while(!r&&i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r},te=(t,e)=>{let r=[],o=s=>{let i=document.createTreeWalker(s,NodeFilter.SHOW_ELEMENT);do{let n=i.currentNode;n.shadowRoot&&o(n.shadowRoot),!(n instanceof ShadowRoot)&&n!==s&&n.matches(e)&&r.push(n)}while(i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r};var u=(t,e)=>{if(!t)throw new Error(e)};var y=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=new MutationObserver(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())}),this.#o.observe(this.#r,{childList:!0,subtree:!0,attributes:!0})}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(this.#o.disconnect(),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}},w=class{#e;#r;constructor(e){this.#e=e}async start(){let e=this.#r=c.create(),r=await this.#e();if(r){e.resolve(r);return}let o=async()=>{if(e.finished())return;let s=await this.#e();if(!s){window.requestAnimationFrame(o);return}e.resolve(s),await this.stop()};window.requestAnimationFrame(o)}async stop(){u(this.#r,\"Polling never started.\"),this.#r.finished()||this.#r.reject(new Error(\"Polling stopped\"))}result(){return u(this.#r,\"Polling never started.\"),this.#r.valueOrThrow()}},T=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=setInterval(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())},this.#r)}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(clearInterval(this.#o),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}};var _={};l(_,{PCombinator:()=>H,pQuerySelector:()=>fe,pQuerySelectorAll:()=>$});var a=class{static async*map(e,r){for await(let o of e)yield await r(o)}static async*flatMap(e,r){for await(let o of e)yield*r(o)}static async collect(e){let r=[];for await(let o of e)r.push(o);return r}static async first(e){for await(let r of e)return r}};var C={};l(C,{textQuerySelectorAll:()=>m});var re=new Set([\"checkbox\",\"image\",\"radio\"]),oe=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!re.has(t.type),se=new Set([\"SCRIPT\",\"STYLE\"]),f=t=>!se.has(t.nodeName)&&!document.head?.contains(t),I=new WeakMap,F=t=>{for(;t;)I.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},j=new WeakSet,ne=new MutationObserver(t=>{for(let e of t)F(e.target)}),d=t=>{let e=I.get(t);if(e||(e={full:\"\",immediate:[]},!f(t)))return e;let r=\"\";if(oe(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener(\"input\",o=>{F(o.target)},{once:!0,capture:!0});else{for(let o=t.firstChild;o;o=o.nextSibling){if(o.nodeType===Node.TEXT_NODE){e.full+=o.nodeValue??\"\",r+=o.nodeValue??\"\";continue}r&&e.immediate.push(r),r=\"\",o.nodeType===Node.ELEMENT_NODE&&(e.full+=d(o).full)}r&&e.immediate.push(r),t instanceof Element&&t.shadowRoot&&(e.full+=d(t.shadowRoot).full),j.has(t)||(ne.observe(t,{childList:!0,characterData:!0,subtree:!0}),j.add(t))}return I.set(t,e),e};var m=function*(t,e){let r=!1;for(let o of t.childNodes)if(o instanceof Element&&f(o)){let s;o.shadowRoot?s=m(o.shadowRoot,e):s=m(o,e);for(let i of s)yield i,r=!0}r||t instanceof Element&&f(t)&&d(t).full.includes(e)&&(yield t)};var k={};l(k,{checkVisibility:()=>le,pierce:()=>S,pierceAll:()=>O});var ie=[\"hidden\",\"collapse\"],le=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let r=t.nodeType===Node.TEXT_NODE?t.parentElement:t,o=window.getComputedStyle(r),s=o&&!ie.includes(o.visibility)&&!ae(r);return e===s?t:!1};function ae(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var ce=t=>\"shadowRoot\"in t&&t.shadowRoot instanceof ShadowRoot;function*S(t){ce(t)?yield t.shadowRoot:yield t}function*O(t){t=S(t).next().value,yield t;let e=[document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT)];for(let r of e){let o;for(;o=r.nextNode();)o.shadowRoot&&(yield o.shadowRoot,e.push(document.createTreeWalker(o.shadowRoot,NodeFilter.SHOW_ELEMENT)))}}var D={};l(D,{xpathQuerySelectorAll:()=>q});var q=function*(t,e,r=-1){let s=(t.ownerDocument||document).evaluate(e,t,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE),i=[],n;for(;(n=s.iterateNext())&&(i.push(n),!(r&&i.length===r)););for(let h=0;h<i.length;h++)n=i[h],yield n,delete i[h]};var ue=/[-\\w\\P{ASCII}*]/u,H=(r=>(r.Descendent=\">>>\",r.Child=\">>>>\",r))(H||{}),V=t=>\"querySelectorAll\"in t,Q=class{#e;#r=[];#o=void 0;elements;constructor(e,r){this.elements=[e],this.#e=r,this.#t()}async run(){if(typeof this.#o==\"string\")switch(this.#o.trimStart()){case\":scope\":this.#t();break}for(;this.#o!==void 0;this.#t()){let e=this.#o;typeof e==\"string\"?e[0]&&ue.test(e[0])?this.elements=a.flatMap(this.elements,async function*(r){V(r)&&(yield*r.querySelectorAll(e))}):this.elements=a.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!V(r))return;yield*r.querySelectorAll(e);return}let o=0;for(let s of r.parentElement.children)if(++o,s===r)break;yield*r.parentElement.querySelectorAll(`:scope>:nth-child(${o})${e}`)}):this.elements=a.flatMap(this.elements,async function*(r){switch(e.name){case\"text\":yield*m(r,e.value);break;case\"xpath\":yield*q(r,e.value);break;case\"aria\":yield*x(r,e.value);break;default:let o=P.get(e.name);if(!o)throw new Error(`Unknown selector type: ${e.name}`);yield*o.querySelectorAll(r,e.value)}})}}#t(){if(this.#r.length!==0){this.#o=this.#r.shift();return}if(this.#e.length===0){this.#o=void 0;return}let e=this.#e.shift();switch(e){case\">>>>\":{this.elements=a.flatMap(this.elements,S),this.#t();break}case\">>>\":{this.elements=a.flatMap(this.elements,O),this.#t();break}default:this.#r=e,this.#t();break}}},M=class{#e=new WeakMap;calculate(e,r=[]){if(e===null)return r;e instanceof ShadowRoot&&(e=e.host);let o=this.#e.get(e);if(o)return[...o,...r];let s=0;for(let n=e.previousSibling;n;n=n.previousSibling)++s;let i=this.calculate(e.parentNode,[s]);return this.#e.set(e,i),[...i,...r]}},U=(t,e)=>{if(t.length+e.length===0)return 0;let[r=-1,...o]=t,[s=-1,...i]=e;return r===s?U(o,i):r<s?-1:1},de=async function*(t){let e=new Set;for await(let o of t)e.add(o);let r=new M;yield*[...e.values()].map(o=>[o,r.calculate(o)]).sort(([,o],[,s])=>U(o,s)).map(([o])=>o)},$=function(t,e){let r=JSON.parse(e);if(r.some(o=>{let s=0;return o.some(i=>(typeof i==\"string\"?++s:s=0,s>1))}))throw new Error(\"Multiple deep combinators found in sequence.\");return de(a.flatMap(r,o=>{let s=new Q(t,o);return s.run(),s.elements}))},fe=async function(t,e){for await(let r of $(t,e))return r;return null};var me=Object.freeze({...b,...A,...R,..._,...C,...k,...D,...E,Deferred:c,createFunction:W,createTextContent:d,IntervalPoller:T,isSuitableNodeForTextMatching:f,MutationPoller:y,RAFPoller:w}),he=me;\n";
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * @internal
3
3
  */
4
- export const packageVersion = '24.20.0';
4
+ export const packageVersion = '24.23.0';
@@ -154,7 +154,7 @@ export abstract class BrowserLauncher {
154
154
  };
155
155
 
156
156
  try {
157
- if (this.#browser === 'firefox' && protocol === 'webDriverBiDi') {
157
+ if (this.#browser === 'firefox') {
158
158
  browser = await this.createBiDiBrowser(
159
159
  browserProcess,
160
160
  browserCloseCallback,
@@ -181,6 +181,7 @@ export abstract class BrowserLauncher {
181
181
  slowMo,
182
182
  });
183
183
  }
184
+
184
185
  if (protocol === 'webDriverBiDi') {
185
186
  browser = await this.createBiDiOverCdpBrowser(
186
187
  browserProcess,
@@ -210,6 +211,17 @@ export abstract class BrowserLauncher {
210
211
  }
211
212
  } catch (error) {
212
213
  void browserCloseCallback();
214
+ if (
215
+ browserProcess.getRecentLogs().some(line => {
216
+ return line.includes(
217
+ 'Failed to create a ProcessSingleton for your profile directory',
218
+ );
219
+ })
220
+ ) {
221
+ throw new Error(
222
+ `The browser is already running for ${launchArgs.userDataDir}. Use a different \`userDataDir\` or stop the running browser first.`,
223
+ );
224
+ }
213
225
  if (error instanceof BrowsersTimeoutError) {
214
226
  throw new TimeoutError(error.message);
215
227
  }
@@ -360,7 +372,7 @@ export abstract class BrowserLauncher {
360
372
  */
361
373
  protected async createBiDiOverCdpBrowser(
362
374
  browserProcess: ReturnType<typeof launch>,
363
- connection: Connection,
375
+ cdpConnection: Connection,
364
376
  closeCallback: BrowserCloseCallback,
365
377
  opts: {
366
378
  defaultViewport: Viewport | null;
@@ -368,11 +380,14 @@ export abstract class BrowserLauncher {
368
380
  networkEnabled: boolean;
369
381
  },
370
382
  ): Promise<Browser> {
383
+ const bidiOnly = process.env['PUPPETEER_WEBDRIVER_BIDI_ONLY'] === 'true';
371
384
  const BiDi = await import(/* webpackIgnore: true */ '../bidi/bidi.js');
372
- const bidiConnection = await BiDi.connectBidiOverCdp(connection);
385
+ const bidiConnection = await BiDi.connectBidiOverCdp(cdpConnection);
373
386
  return await BiDi.BidiBrowser.create({
374
387
  connection: bidiConnection,
375
- cdpConnection: connection,
388
+ // Do not provide CDP connection to Browser, if BiDi-only mode is enabled. This
389
+ // would restrict Browser to use only BiDi endpoint.
390
+ cdpConnection: bidiOnly ? undefined : cdpConnection,
376
391
  closeCallback,
377
392
  process: browserProcess.nodeProcess,
378
393
  defaultViewport: opts.defaultViewport,
@@ -174,6 +174,7 @@ export class ChromeLauncher extends BrowserLauncher {
174
174
  'AcceptCHFrame',
175
175
  'MediaRouter',
176
176
  'OptimizationHints',
177
+ 'RenderDocument', // https://crbug.com/444150315
177
178
  ...(turnOnExperimentalFeaturesForTesting
178
179
  ? []
179
180
  : [
@@ -17,7 +17,7 @@ export class PipeTransport implements ConnectionTransport {
17
17
  #subscriptions = new DisposableStack();
18
18
 
19
19
  #isClosed = false;
20
- #pendingMessage = '';
20
+ #pendingMessage: Buffer[] = [];
21
21
 
22
22
  onclose?: () => void;
23
23
  onmessage?: (value: string) => void;
@@ -34,7 +34,7 @@ export class PipeTransport implements ConnectionTransport {
34
34
  pipeRead as unknown as EventEmitter<Record<string, any>>,
35
35
  ),
36
36
  );
37
- pipeReadEmitter.on('data', (buffer: Buffer) => {
37
+ pipeReadEmitter.on('data', buffer => {
38
38
  return this.#dispatch(buffer);
39
39
  });
40
40
  pipeReadEmitter.on('close', () => {
@@ -60,34 +60,32 @@ export class PipeTransport implements ConnectionTransport {
60
60
  this.#pipeWrite.write('\0');
61
61
  }
62
62
 
63
- #dispatch(buffer: Buffer): void {
63
+ #dispatch(buffer: Buffer<ArrayBuffer>): void {
64
64
  assert(!this.#isClosed, '`PipeTransport` is closed.');
65
65
 
66
- let end = buffer.indexOf('\0');
67
- if (end === -1) {
68
- this.#pendingMessage += buffer.toString();
66
+ this.#pendingMessage.push(buffer);
67
+ if (buffer.indexOf('\0') === -1) {
69
68
  return;
70
69
  }
71
- const message = this.#pendingMessage + buffer.toString(undefined, 0, end);
72
- setImmediate(() => {
73
- if (this.onmessage) {
74
- this.onmessage.call(null, message);
75
- }
76
- });
70
+ const concatBuffer = Buffer.concat(this.#pendingMessage);
77
71
 
78
- let start = end + 1;
79
- end = buffer.indexOf('\0', start);
72
+ let start = 0;
73
+ let end = concatBuffer.indexOf('\0');
80
74
  while (end !== -1) {
81
- const message = buffer.toString(undefined, start, end);
75
+ const message = concatBuffer.toString(undefined, start, end);
82
76
  setImmediate(() => {
83
77
  if (this.onmessage) {
84
78
  this.onmessage.call(null, message);
85
79
  }
86
80
  });
87
81
  start = end + 1;
88
- end = buffer.indexOf('\0', start);
82
+ end = concatBuffer.indexOf('\0', start);
83
+ }
84
+ if (start >= concatBuffer.length) {
85
+ this.#pendingMessage = [];
86
+ } else {
87
+ this.#pendingMessage = [concatBuffer.subarray(start)];
89
88
  }
90
- this.#pendingMessage = buffer.toString(undefined, start);
91
89
  }
92
90
 
93
91
  close(): void {
@@ -44,13 +44,11 @@ import type {ChromeReleaseChannel, LaunchOptions} from './LaunchOptions.js';
44
44
  * ```ts
45
45
  * import puppeteer from 'puppeteer';
46
46
  *
47
- * (async () => {
48
- * const browser = await puppeteer.launch();
49
- * const page = await browser.newPage();
50
- * await page.goto('https://www.google.com');
51
- * // other actions...
52
- * await browser.close();
53
- * })();
47
+ * const browser = await puppeteer.launch();
48
+ * const page = await browser.newPage();
49
+ * await page.goto('https://www.google.com');
50
+ * // other actions...
51
+ * await browser.close();
54
52
  * ```
55
53
  *
56
54
  * Once you have created a `page` you have access to a large API to interact
package/src/revisions.ts CHANGED
@@ -8,7 +8,7 @@
8
8
  * @internal
9
9
  */
10
10
  export const PUPPETEER_REVISIONS = Object.freeze({
11
- chrome: '140.0.7339.82',
12
- 'chrome-headless-shell': '140.0.7339.82',
13
- firefox: 'stable_142.0.1',
11
+ chrome: '141.0.7390.54',
12
+ 'chrome-headless-shell': '141.0.7390.54',
13
+ firefox: 'stable_143.0.3',
14
14
  });
@@ -29,37 +29,29 @@ export const createFunction = (
29
29
  */
30
30
  export function stringifyFunction(fn: (...args: never) => unknown): string {
31
31
  let value = fn.toString();
32
- try {
33
- new Function(`(${value})`);
34
- } catch (err) {
35
- if (
36
- (err as Error).message.includes(
37
- `Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive`,
38
- ) ||
39
- (err as Error).message.includes(
40
- 'Evaluating a string as JavaScript violates the following Content Security Policy',
41
- )
42
- ) {
43
- // The content security policy does not allow Function eval. Let's
44
- // assume the value might be valid as is.
45
- return value;
46
- }
47
- // This means we might have a function shorthand (e.g. `test(){}`). Let's
48
- // try prefixing.
49
- let prefix = 'function ';
50
- if (value.startsWith('async ')) {
51
- prefix = `async ${prefix}`;
52
- value = value.substring('async '.length);
53
- }
54
- value = `${prefix}${value}`;
55
- try {
56
- new Function(`(${value})`);
57
- } catch {
58
- // We tried hard to serialize, but there's a weird beast here.
59
- throw new Error('Passed function cannot be serialized!');
60
- }
32
+ if (
33
+ value.match(/^(async )*function(\(|\s)/) ||
34
+ value.match(/^(async )*function\s*\*\s*/)
35
+ ) {
36
+ return value;
61
37
  }
62
- return value;
38
+ const isArrow =
39
+ value.startsWith('(') ||
40
+ value.match(/^async\s*\(/) ||
41
+ value.match(
42
+ /^(async)*\s*(?:[$_\p{ID_Start}])(?:[$\u200C\u200D\p{ID_Continue}])*\s*=>/u,
43
+ );
44
+ if (isArrow) {
45
+ return value;
46
+ }
47
+ // This means we might have a function shorthand (e.g. `test(){}`). Let's
48
+ // try prefixing.
49
+ let prefix = 'function ';
50
+ if (value.startsWith('async ')) {
51
+ prefix = `async ${prefix}`;
52
+ value = value.substring('async '.length);
53
+ }
54
+ return `${prefix}${value}`;
63
55
  }
64
56
 
65
57
  /**