puppeteer-bidi 0.0.6 → 0.0.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8321a46efce20f517001a8cf7e19d849120dc7139ab3ee324d1b70eb26c9e5de
4
- data.tar.gz: 3b2fac88bdaf8248396608e68cf4302547cde9364ec93288a69c14293ad4019f
3
+ metadata.gz: 50cd7d1f0b4246d67ee0efc626abb598e50e2f7d043df7d76ea9616ba5c366fe
4
+ data.tar.gz: cd7700bd4f70674e71e6ded417f357f84a5c0cdf2d9a6cf918db383f8c6f60d8
5
5
  SHA512:
6
- metadata.gz: 70abd79d8bc6208fd115ad7324eece4c942e0b697ec5ca1a1fa2dc0eba5721d3abb933cde32df0bfb36dad22fcc86e59ebc2ecb16bb5a03f39dc97a1870976fa
7
- data.tar.gz: 346f958a1b13fa51a0b0387230274f55f0f1f0f8e403605649ba41b29226a4d3af5a4a5e59ce1cd06d1a0e0468dea795e9ce99e9b7b022d978fd588db14ec512
6
+ metadata.gz: 7dc2fe84ec1a08a05307f72206c85eabe7fd3452e946a7820a056a13761c2c9cf1dc79e1b69b567374cf278c2c68505c9ed3c70716132f72aba462f7fbf85301
7
+ data.tar.gz: 8b8586c88aba62bd88d7c0a49c770ae5be331c130616c068865a9f593e000fb820b2e928342841a28ca3d9b8550c1b124b7971a97db45f6afab80f03d5ad3993
data/API_COVERAGE.md CHANGED
@@ -1,14 +1,16 @@
1
1
  # API Coverage
2
2
 
3
- - Puppeteer version: `25.3.0`
4
- - Puppeteer commit: `58d9b023ed74c3a1f14ec5fd9315872602270c72`
3
+ - Puppeteer version: `25.5.0`
4
+ - Puppeteer commit: `f8d63c73c3d7c21a8b0f421411e7df8386195436`
5
5
  - Generated by: `development/generate_api_coverage.rb`
6
- - Coverage: `195/280` (`69.64%`)
6
+ - Coverage: `201/298` (`67.45%`)
7
7
 
8
8
  ## Browser (Puppeteer::Bidi::Browser)
9
9
 
10
10
  | Node.js | Ruby | Supported |
11
11
  | --- | --- | :---: |
12
+ | `Browser.[asyncDisposeSymbol]` | `Puppeteer::Bidi::Browser#[async_dispose_symbol]` | ❌ |
13
+ | `Browser.[disposeSymbol]` | `Puppeteer::Bidi::Browser#[dispose_symbol]` | ❌ |
12
14
  | `Browser.addScreen` | `Puppeteer::Bidi::Browser#add_screen` | ❌ |
13
15
  | `Browser.browserContexts` | `Puppeteer::Bidi::Browser#browser_contexts` | ❌ |
14
16
  | `Browser.close` | `Puppeteer::Bidi::Browser#close` | ✅ |
@@ -19,8 +21,11 @@
19
21
  | `Browser.deleteMatchingCookies` | `Puppeteer::Bidi::Browser#delete_matching_cookies` | ✅ |
20
22
  | `Browser.disconnect` | `Puppeteer::Bidi::Browser#disconnect` | ✅ |
21
23
  | `Browser.extensions` | `Puppeteer::Bidi::Browser#extensions` | ❌ |
24
+ | `Browser.getPWAState` | `Puppeteer::Bidi::Browser#get_pwa_state` | ❌ |
22
25
  | `Browser.getWindowBounds` | `Puppeteer::Bidi::Browser#get_window_bounds` | ✅ |
23
26
  | `Browser.installExtension` | `Puppeteer::Bidi::Browser#install_extension` | ❌ |
27
+ | `Browser.installPWA` | `Puppeteer::Bidi::Browser#install_pwa` | ❌ |
28
+ | `Browser.launchPWA` | `Puppeteer::Bidi::Browser#launch_pwa` | ❌ |
24
29
  | `Browser.newPage` | `Puppeteer::Bidi::Browser#new_page` | ✅ |
25
30
  | `Browser.pages` | `Puppeteer::Bidi::Browser#pages` | ✅ |
26
31
  | `Browser.process` | `Puppeteer::Bidi::Browser#process` | ✅ |
@@ -32,6 +37,7 @@
32
37
  | `Browser.target` | `Puppeteer::Bidi::Browser#target` | ✅ |
33
38
  | `Browser.targets` | `Puppeteer::Bidi::Browser#targets` | ✅ |
34
39
  | `Browser.uninstallExtension` | `Puppeteer::Bidi::Browser#uninstall_extension` | ❌ |
40
+ | `Browser.uninstallPWA` | `Puppeteer::Bidi::Browser#uninstall_pwa` | ❌ |
35
41
  | `Browser.userAgent` | `Puppeteer::Bidi::Browser#user_agent` | ✅ |
36
42
  | `Browser.version` | `Puppeteer::Bidi::Browser#version` | ❌ |
37
43
  | `Browser.waitForTarget` | `Puppeteer::Bidi::Browser#wait_for_target` | ✅ |
@@ -41,6 +47,8 @@
41
47
 
42
48
  | Node.js | Ruby | Supported |
43
49
  | --- | --- | :---: |
50
+ | `BrowserContext.[asyncDisposeSymbol]` | `Puppeteer::Bidi::BrowserContext#[async_dispose_symbol]` | ❌ |
51
+ | `BrowserContext.[disposeSymbol]` | `Puppeteer::Bidi::BrowserContext#[dispose_symbol]` | ❌ |
44
52
  | `BrowserContext.browser` | `Puppeteer::Bidi::BrowserContext#browser` | ✅ |
45
53
  | `BrowserContext.clearPermissionOverrides` | `Puppeteer::Bidi::BrowserContext#clear_permission_overrides` | ✅ |
46
54
  | `BrowserContext.close` | `Puppeteer::Bidi::BrowserContext#close` | ✅ |
@@ -55,6 +63,17 @@
55
63
  | `BrowserContext.targets` | `Puppeteer::Bidi::BrowserContext#targets` | ✅ |
56
64
  | `BrowserContext.waitForTarget` | `Puppeteer::Bidi::BrowserContext#wait_for_target` | ✅ |
57
65
 
66
+ ## Dialog (Puppeteer::Bidi::Dialog)
67
+
68
+ | Node.js | Ruby | Supported |
69
+ | --- | --- | :---: |
70
+ | `Dialog.accept` | `Puppeteer::Bidi::Dialog#accept` | ✅ |
71
+ | `Dialog.defaultValue` | `Puppeteer::Bidi::Dialog#default_value` | ✅ |
72
+ | `Dialog.dismiss` | `Puppeteer::Bidi::Dialog#dismiss` | ✅ |
73
+ | `Dialog.handled` | `Puppeteer::Bidi::Dialog#handled?` | ✅ |
74
+ | `Dialog.message` | `Puppeteer::Bidi::Dialog#message` | ✅ |
75
+ | `Dialog.type` | `Puppeteer::Bidi::Dialog#type` | ✅ |
76
+
58
77
  ## ElementHandle (Puppeteer::Bidi::ElementHandle)
59
78
 
60
79
  | Node.js | Ruby | Supported |
@@ -190,6 +209,8 @@
190
209
 
191
210
  | Node.js | Ruby | Supported |
192
211
  | --- | --- | :---: |
212
+ | `JSHandle.[asyncDisposeSymbol]` | `Puppeteer::Bidi::JSHandle#[async_dispose_symbol]` | ❌ |
213
+ | `JSHandle.[disposeSymbol]` | `Puppeteer::Bidi::JSHandle#[dispose_symbol]` | ❌ |
193
214
  | `JSHandle.asElement` | `Puppeteer::Bidi::JSHandle#as_element` | ✅ |
194
215
  | `JSHandle.dispose` | `Puppeteer::Bidi::JSHandle#dispose` | ✅ |
195
216
  | `JSHandle.evaluate` | `Puppeteer::Bidi::JSHandle#evaluate` | ✅ |
@@ -234,6 +255,8 @@
234
255
  | `Page.$$` | `Puppeteer::Bidi::Page#query_selector_all` | ✅ |
235
256
  | `Page.$$eval` | `Puppeteer::Bidi::Page#eval_on_selector_all` | ✅ |
236
257
  | `Page.$eval` | `Puppeteer::Bidi::Page#eval_on_selector` | ✅ |
258
+ | `Page.[asyncDisposeSymbol]` | `Puppeteer::Bidi::Page#[async_dispose_symbol]` | ❌ |
259
+ | `Page.[disposeSymbol]` | `Puppeteer::Bidi::Page#[dispose_symbol]` | ❌ |
237
260
  | `Page.addScriptTag` | `Puppeteer::Bidi::Page#add_script_tag` | ❌ |
238
261
  | `Page.addStyleTag` | `Puppeteer::Bidi::Page#add_style_tag` | ❌ |
239
262
  | `Page.authenticate` | `Puppeteer::Bidi::Page#authenticate` | ✅ |
@@ -8,6 +8,8 @@ module Puppeteer
8
8
  module Bidi
9
9
  # Browser represents a browser instance with BiDi connection
10
10
  class Browser
11
+ TARGET_EVENTS = %i[targetcreated targetchanged targetdestroyed].freeze
12
+
11
13
  attr_reader :connection #: Connection
12
14
  attr_reader :process #: untyped
13
15
  attr_reader :default_browser_context #: BrowserContext
@@ -57,13 +59,14 @@ module Puppeteer
57
59
  @core_browser = core_browser
58
60
  @session = session
59
61
  @ws_endpoint = ws_endpoint
62
+ @emitter = Core::EventEmitter.new
63
+ @browser_contexts = {}
64
+
65
+ @core_browser.once(:disconnected) { @emitter.dispose }
60
66
 
61
67
  # Create default browser context
62
68
  default_user_context = @core_browser.default_user_context
63
- @default_browser_context = BrowserContext.new(self, default_user_context)
64
- @browser_contexts = {
65
- default_user_context.id => @default_browser_context
66
- }
69
+ @default_browser_context = browser_context_for(default_user_context)
67
70
 
68
71
  register_exit_cleanup if @launcher
69
72
  end
@@ -259,9 +262,36 @@ module Puppeteer
259
262
  # @rbs &block: (untyped) -> void -- Event handler
260
263
  # @rbs return: void
261
264
  def on(event, &block)
265
+ return @emitter.on(event, &block) if TARGET_EVENTS.include?(event.to_sym)
266
+
262
267
  @connection.on(event, &block)
263
268
  end
264
269
 
270
+ # Register a one-time event handler
271
+ # @rbs event: String | Symbol -- Event name
272
+ # @rbs &block: (untyped) -> void -- Event handler
273
+ # @rbs return: void
274
+ def once(event, &block)
275
+ return @emitter.once(event, &block) if TARGET_EVENTS.include?(event.to_sym)
276
+
277
+ # @type var wrapper: ^(untyped) -> void
278
+ wrapper = proc do |data|
279
+ @connection.off(event, &wrapper)
280
+ block.call(data)
281
+ end
282
+ @connection.on(event, &wrapper)
283
+ end
284
+
285
+ # Remove an event handler
286
+ # @rbs event: String | Symbol -- Event name
287
+ # @rbs &block: ((untyped) -> void)? -- Event handler to remove
288
+ # @rbs return: void
289
+ def off(event, &block)
290
+ return @emitter.off(event, &block) if TARGET_EVENTS.include?(event.to_sym)
291
+
292
+ @connection.off(event, &block)
293
+ end
294
+
265
295
  # Close the browser
266
296
  # @rbs return: void
267
297
  def close
@@ -279,6 +309,8 @@ module Puppeteer
279
309
  end
280
310
  rescue => e
281
311
  debug_error(e)
312
+ ensure
313
+ @emitter.dispose
282
314
  end
283
315
 
284
316
  @launcher&.kill
@@ -300,6 +332,8 @@ module Puppeteer
300
332
  @connection.close
301
333
  rescue StandardError => e
302
334
  debug_error(e)
335
+ ensure
336
+ @emitter.dispose
303
337
  end
304
338
  end
305
339
  end
@@ -461,6 +495,11 @@ module Puppeteer
461
495
  return @browser_contexts[user_context.id] if @browser_contexts.key?(user_context.id)
462
496
 
463
497
  context = BrowserContext.new(self, user_context)
498
+ TARGET_EVENTS.each do |event|
499
+ context.on(event) do |target|
500
+ @emitter.emit(event, target)
501
+ end
502
+ end
464
503
  user_context.once(:closed) do
465
504
  @browser_contexts.delete(user_context.id)
466
505
  end
@@ -44,6 +44,35 @@ module Puppeteer
44
44
  @pages = {}
45
45
  @frame_targets = {}
46
46
  @overrides = []
47
+ @emitter = Core::EventEmitter.new
48
+
49
+ @user_context.browsing_contexts.each { |browsing_context| page_for(browsing_context) }
50
+ @user_context.on(:browsingcontext) { |browsing_context| page_for(browsing_context) }
51
+ @user_context.once(:closed) { @emitter.dispose }
52
+ end
53
+
54
+ # Register an event listener
55
+ # @rbs event: Symbol | String -- Event name
56
+ # @rbs &block: (untyped) -> void -- Event handler
57
+ # @rbs return: void
58
+ def on(event, &block)
59
+ @emitter.on(event, &block)
60
+ end
61
+
62
+ # Register a one-time event listener
63
+ # @rbs event: Symbol | String -- Event name
64
+ # @rbs &block: (untyped) -> void -- Event handler
65
+ # @rbs return: void
66
+ def once(event, &block)
67
+ @emitter.once(event, &block)
68
+ end
69
+
70
+ # Remove an event listener
71
+ # @rbs event: Symbol | String -- Event name
72
+ # @rbs &block: ((untyped) -> void)? -- Event handler to remove
73
+ # @rbs return: void
74
+ def off(event, &block)
75
+ @emitter.off(event, &block)
47
76
  end
48
77
 
49
78
  # Create a new page (tab/window)
@@ -196,11 +225,30 @@ module Puppeteer
196
225
  def page_for(browsing_context)
197
226
  @pages[browsing_context.id] ||= begin
198
227
  page = Page.new(self, browsing_context)
228
+ page_target = page.target
229
+
230
+ page.on(:frameattached) do |frame|
231
+ @emitter.emit(:targetcreated, target_for_frame(frame))
232
+ end
233
+
234
+ page.on(:framenavigated) do |frame|
235
+ target = frame.parent_frame ? target_for_frame(frame) : page_target
236
+ @emitter.emit(:targetchanged, target)
237
+ end
238
+
239
+ page.on(:framedetached) do |frame|
240
+ next unless frame.parent_frame
241
+
242
+ target = @frame_targets.delete(frame.browsing_context.id)
243
+ @emitter.emit(:targetdestroyed, target) if target
244
+ end
199
245
 
200
246
  browsing_context.once(:closed) do
201
247
  @pages.delete(browsing_context.id)
248
+ @emitter.emit(:targetdestroyed, page_target)
202
249
  end
203
250
 
251
+ @emitter.emit(:targetcreated, page_target)
204
252
  page
205
253
  end
206
254
  end
@@ -630,8 +630,9 @@ module Puppeteer
630
630
  # User prompts
631
631
  session.on('browsingContext.userPromptOpened') do |info|
632
632
  next unless info['context'] == @id
633
- # user_prompt = UserPrompt.from(self, info)
634
- # emit(:userprompt, user_prompt)
633
+
634
+ user_prompt = UserPrompt.from(self, info)
635
+ emit(:userprompt, user_prompt)
635
636
  end
636
637
 
637
638
  # File dialog
@@ -48,27 +48,37 @@ module Puppeteer
48
48
  # Handle the user prompt
49
49
  # @rbs accept: bool? -- Whether to accept the prompt
50
50
  # @rbs user_text: String? -- Text to enter (for prompt dialogs)
51
- # @rbs return: Hash[String, untyped] -- Result of handling the prompt
51
+ # @rbs return: Async::Task[Hash[String, untyped]] -- Result of handling the prompt
52
52
  def handle(accept: nil, user_text: nil)
53
- raise UserPromptClosedError, @reason if closed?
53
+ Async do
54
+ raise UserPromptClosedError, @reason if closed?
54
55
 
55
- params = { context: @info['context'] }
56
- params[:accept] = accept unless accept.nil?
57
- params[:userText] = user_text if user_text
56
+ params = { context: @info["context"] }
57
+ params[:accept] = accept unless accept.nil?
58
+ params[:userText] = user_text if user_text
58
59
 
59
- session.send_command('browsingContext.handleUserPrompt', params)
60
+ session.async_send_command("browsingContext.handleUserPrompt", params).wait
60
61
 
61
- # The result is set by the userPromptClosed event before this returns
62
- @result
62
+ # The handled event is emitted before the command response resolves.
63
+ @result
64
+ end
65
+ end
66
+
67
+ def dispose
68
+ return if @disposed
69
+
70
+ @reason ||= "User prompt already closed, probably because the associated browsing context was destroyed."
71
+ emit(:closed, @reason)
72
+ super
63
73
  end
64
74
 
65
75
  protected
66
76
 
67
77
  def perform_dispose
68
- @reason ||= 'User prompt already closed, probably because the associated browsing context was destroyed.'
69
- emit(:closed, @reason)
78
+ @browsing_context.off(:closed, &@context_closed_listener) if @context_closed_listener
79
+ session.off("browsingContext.userPromptClosed", &@prompt_closed_listener) if @prompt_closed_listener
70
80
  @disposables.dispose
71
- super
81
+ remove_all_listeners
72
82
  end
73
83
 
74
84
  private
@@ -79,18 +89,22 @@ module Puppeteer
79
89
 
80
90
  def initialize_prompt
81
91
  # Listen for browsing context closure
82
- @browsing_context.once(:closed) do |reason|
92
+ @context_closed_listener = proc do |reason|
83
93
  dispose_prompt("User prompt already closed: #{reason}")
84
94
  end
95
+ @browsing_context.on(:closed, &@context_closed_listener)
85
96
 
86
97
  # Listen for prompt closed event
87
- session.on('browsingContext.userPromptClosed') do |params|
88
- next unless params['context'] == @browsing_context.id
98
+ @prompt_closed_listener = method(:handle_prompt_closed).to_proc
99
+ session.on("browsingContext.userPromptClosed", &@prompt_closed_listener)
100
+ end
89
101
 
90
- @result = params
91
- emit(:handled, params)
92
- dispose_prompt('User prompt handled')
93
- end
102
+ def handle_prompt_closed(params)
103
+ return unless params["context"] == @browsing_context.id
104
+
105
+ @result = params
106
+ emit(:handled, params)
107
+ dispose_prompt("User prompt already handled.")
94
108
  end
95
109
 
96
110
  def dispose_prompt(reason)
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+ # rbs_inline: enabled
3
+
4
+ module Puppeteer
5
+ module Bidi
6
+ # Dialog instances are dispatched by Page via the :dialog event.
7
+ class Dialog
8
+ attr_reader :type #: String
9
+ attr_reader :message #: String
10
+ attr_reader :default_value #: String
11
+
12
+ # @rbs prompt: Core::UserPrompt -- Core user prompt
13
+ # @rbs return: Dialog -- Public dialog wrapper
14
+ def self.from(prompt)
15
+ new(prompt)
16
+ end
17
+
18
+ # @rbs prompt: Core::UserPrompt -- Core user prompt
19
+ # @rbs return: void
20
+ def initialize(prompt)
21
+ @prompt = prompt
22
+ @type = prompt.info["type"]
23
+ @message = prompt.info["message"]
24
+ @default_value = prompt.info.fetch("defaultValue", "")
25
+ @handled = prompt.handled?
26
+
27
+ prompt.once(:handled) do
28
+ @handled = true
29
+ end
30
+ end
31
+
32
+ # @rbs return: bool -- Whether the dialog has been handled
33
+ def handled?
34
+ @handled
35
+ end
36
+
37
+ # @rbs prompt_text: String? -- Text entered into a prompt dialog
38
+ # @rbs return: void
39
+ def accept(prompt_text = nil)
40
+ raise Error, "Cannot accept dialog which is already handled!" if handled?
41
+
42
+ @handled = true
43
+ handle(accept: true, text: prompt_text)
44
+ end
45
+
46
+ # @rbs return: void
47
+ def dismiss
48
+ raise Error, "Cannot dismiss dialog which is already handled!" if handled?
49
+
50
+ @handled = true
51
+ handle(accept: false)
52
+ end
53
+
54
+ private
55
+
56
+ # @rbs accept: bool -- Whether to accept the dialog
57
+ # @rbs text: String? -- Prompt text
58
+ # @rbs return: void
59
+ def handle(accept:, text: nil)
60
+ @prompt.handle(accept: accept, user_text: text).wait
61
+ nil
62
+ end
63
+ end
64
+ end
65
+ end
@@ -702,31 +702,19 @@ module Puppeteer
702
702
  def check_visibility(visible)
703
703
  assert_not_disposed
704
704
 
705
- evaluate(<<~JS, visible)
706
- (node, visible) => {
707
- const HIDDEN_VISIBILITY_VALUES = ['hidden', 'collapse'];
708
-
709
- if (!node) {
710
- return visible === false;
711
- }
712
-
713
- // For text nodes, check parent element
714
- const element = node.nodeType === Node.TEXT_NODE ? node.parentElement : node;
715
- if (!element) {
716
- return visible === false;
705
+ realm = frame.isolated_realm
706
+ adopted_element = realm.adopt_handle(self)
707
+ adopted_element.evaluate(
708
+ <<~JS,
709
+ (element, PuppeteerUtil, visibility) => {
710
+ return Boolean(PuppeteerUtil.checkVisibility(element, visibility));
717
711
  }
718
-
719
- const style = window.getComputedStyle(element);
720
- const rect = element.getBoundingClientRect();
721
- const isBoundingBoxEmpty = rect.width === 0 || rect.height === 0;
722
-
723
- const isVisible = style &&
724
- !HIDDEN_VISIBILITY_VALUES.includes(style.visibility) &&
725
- !isBoundingBoxEmpty;
726
-
727
- return visible === isVisible;
728
- }
729
- JS
712
+ JS
713
+ realm.puppeteer_util_lazy_arg,
714
+ visible
715
+ )
716
+ ensure
717
+ adopted_element&.dispose
730
718
  end
731
719
 
732
720
  # Get bounding box ensuring it's non-empty and visible
@@ -663,6 +663,10 @@ module Puppeteer
663
663
  page.emit(:framenavigated, self)
664
664
  end
665
665
 
666
+ @browsing_context.on(:userprompt) do |user_prompt|
667
+ page.emit(:dialog, Dialog.from(user_prompt))
668
+ end
669
+
666
670
  @browsing_context.on(:request) do |request|
667
671
  http_request = HTTPRequest.from(
668
672
  request,
@@ -76,7 +76,12 @@ module Puppeteer
76
76
  next unless value["type"] == "string"
77
77
 
78
78
  header_name = header["name"].to_s.downcase
79
- headers[header_name] = HTTPUtils.normalize_header_value(header_name, value["value"])
79
+ header_value = if headers.key?(header_name)
80
+ "#{headers[header_name]}\n#{value["value"]}"
81
+ else
82
+ value["value"]
83
+ end
84
+ headers[header_name] = HTTPUtils.normalize_header_value(header_name, header_value)
80
85
  end
81
86
  headers
82
87
  end
@@ -1 +1 @@
1
- "use strict";var N=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)N(t,r,{get:e[r],enumerable:!0})},J=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Y(e))!G.call(t,n)&&n!==r&&N(t,n,{get:()=>e[n],enumerable:!(o=B(e,n))||o.enumerable});return t};var z=t=>J(N({},"__esModule",{value:!0}),t);var ye={};l(ye,{default:()=>pe});module.exports=z(ye);var b=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},p=class extends b{};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 W=new Map,j=t=>{let e=W.get(t);return e||(e=new Function(`return ${t}`)(),W.set(t,e),e)};var v={};l(v,{ariaQuerySelector:()=>K,ariaQuerySelectorAll:()=>x});var K=(t,e)=>globalThis.__ariaQuerySelector(t,e),x=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var E={};l(E,{cssQuerySelector:()=>Z,cssQuerySelectorAll:()=>ee});var Z=(t,e)=>t.querySelector(e),ee=function(t,e){return t.querySelectorAll(e)};var A={};l(A,{CustomQuerySelectorRegistry:()=>y,customQuerySelectors:()=>P});var y=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 y;var R={};l(R,{pierceQuerySelector:()=>te,pierceQuerySelectorAll:()=>re});var te=(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},re=(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 w=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()}},T=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={};l(L,{PCombinator:()=>U,pQuerySelector:()=>me,pQuerySelectorAll:()=>X});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 O={};l(O,{textQuerySelectorAll:()=>m});var oe=new Set(["checkbox","image","radio"]),ne=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!oe.has(t.type),se=new Set(["SCRIPT","STYLE"]),f=t=>!se.has(t.nodeName)&&!document.head?.contains(t),C=new WeakMap,V=t=>{for(;t;)C.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},F=new WeakSet,I,ie=()=>{let t=globalThis.MutationObserver;if(!t)throw new Error("MutationObserver is not available in this environment.");return I||(I=new t(e=>{for(let r of e)V(r.target)})),I},d=t=>{let e=C.get(t);if(e||(e={full:"",immediate:[]},!f(t)))return e;let r="";if(ne(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener("input",o=>{V(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),F.has(t)||(ie().observe(t,{childList:!0,characterData:!0,subtree:!0}),F.add(t))}return C.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 M={};l(M,{checkVisibility:()=>ae,pierce:()=>g,pierceAll:()=>k});var le=["hidden","collapse"],ae=(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&&!le.includes(o.visibility)&&!ce(r);return e===n?t:!1};function ce(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var ue=t=>"shadowRoot"in t&&t.shadowRoot instanceof ShadowRoot;function*g(t){ue(t)?yield t.shadowRoot:yield t}function*k(t){t=g(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 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,i[h]=null};var de=/[-\w\P{ASCII}*]/u,U=(r=>(r.Descendent=">>>",r.Child=">>>>",r))(U||{}),H=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(){for(typeof this.#o=="string"&&this.#o.trimStart()===":scope"&&this.#t();this.#o!==void 0;this.#t()){let e=this.#o;typeof e=="string"?e[0]&&de.test(e[0])?this.elements=a.flatMap(this.elements,async function*(r){H(r)&&(yield*r.querySelectorAll(e))}):this.elements=a.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!H(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,g),this.#t();break}case">>>":{this.elements=a.flatMap(this.elements,k),this.#t();break}default:this.#r=e,this.#t();break}}},_=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]}},$=(t,e)=>{if(t.length+e.length===0)return 0;let[r=-1,...o]=t,[n=-1,...i]=e;return r===n?$(o,i):r<n?-1:1},fe=async function*(t){let e=new Set;for await(let o of t)e.add(o);let r=new _;yield*[...e.values()].map(o=>[o,r.calculate(o)]).sort(([,o],[,n])=>$(o,n)).map(([o])=>o)},X=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 fe(a.flatMap(r,o=>{let n=new Q(t,o);return n.run(),n.elements}))},me=async function(t,e){for await(let r of X(t,e))return r;return null};var he=Object.freeze({...v,...A,...R,...L,...O,...M,...D,...E,Deferred:c,createFunction:j,createTextContent:d,IntervalPoller:S,isSuitableNodeForTextMatching:f,MutationPoller:w,RAFPoller:T}),pe=he;
1
+ "use strict";var N=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)N(t,r,{get:e[r],enumerable:!0})},J=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Y(e))!G.call(t,n)&&n!==r&&N(t,n,{get:()=>e[n],enumerable:!(o=B(e,n))||o.enumerable});return t};var z=t=>J(N({},"__esModule",{value:!0}),t);var ye={};l(ye,{default:()=>pe});module.exports=z(ye);var b=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},p=class extends b{};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 W=new Map,j=t=>{let e=W.get(t);return e||(e=new Function(`return ${t}`)(),W.set(t,e),e)};var v={};l(v,{ariaQuerySelector:()=>K,ariaQuerySelectorAll:()=>x});var K=(t,e)=>globalThis.__ariaQuerySelector(t,e),x=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var E={};l(E,{cssQuerySelector:()=>Z,cssQuerySelectorAll:()=>ee});var Z=(t,e)=>t.querySelector(e),ee=function(t,e){return t.querySelectorAll(e)};var A={};l(A,{CustomQuerySelectorRegistry:()=>y,customQuerySelectors:()=>P});var y=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 y;var R={};l(R,{pierceQuerySelector:()=>te,pierceQuerySelectorAll:()=>re});var te=(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},re=(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 w=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()}},T=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={};l(L,{PCombinator:()=>U,pQuerySelector:()=>me,pQuerySelectorAll:()=>X});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 O={};l(O,{textQuerySelectorAll:()=>m});var oe=new Set(["checkbox","image","radio"]),ne=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!oe.has(t.type),se=new Set(["SCRIPT","STYLE"]),f=t=>!se.has(t.nodeName)&&!document.head?.contains(t),C=new WeakMap,V=t=>{for(;t;)C.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},F=new WeakSet,I,ie=()=>{let t=globalThis.MutationObserver;if(!t)throw new Error("MutationObserver is not available in this environment.");return I||(I=new t(e=>{for(let r of e)V(r.target)})),I},d=t=>{let e=C.get(t);if(e||(e={full:"",immediate:[]},!f(t)))return e;let r="";if(ne(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener("input",o=>{V(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),F.has(t)||(ie().observe(t,{childList:!0,characterData:!0,subtree:!0}),F.add(t))}return C.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 M={};l(M,{checkVisibility:()=>ae,pierce:()=>g,pierceAll:()=>k});var le=["hidden","collapse"],ae=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let r=t.nodeType===Node.TEXT_NODE?t.parentElement:t;if(!r)return e===!1;let o=window.getComputedStyle(r),n=o&&!le.includes(o.visibility)&&!ce(r);return e===n?t:!1};function ce(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var ue=t=>"shadowRoot"in t&&t.shadowRoot instanceof ShadowRoot;function*g(t){ue(t)?yield t.shadowRoot:yield t}function*k(t){t=g(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 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,i[h]=null};var de=/[-\w\P{ASCII}*]/u,U=(r=>(r.Descendent=">>>",r.Child=">>>>",r))(U||{}),H=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(){for(typeof this.#o=="string"&&this.#o.trimStart()===":scope"&&this.#t();this.#o!==void 0;this.#t()){let e=this.#o;typeof e=="string"?e[0]&&de.test(e[0])?this.elements=a.flatMap(this.elements,async function*(r){H(r)&&(yield*r.querySelectorAll(e))}):this.elements=a.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!H(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,g),this.#t();break}case">>>":{this.elements=a.flatMap(this.elements,k),this.#t();break}default:this.#r=e,this.#t();break}}},_=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]}},$=(t,e)=>{if(t.length+e.length===0)return 0;let[r=-1,...o]=t,[n=-1,...i]=e;return r===n?$(o,i):r<n?-1:1},fe=async function*(t){let e=new Set;for await(let o of t)e.add(o);let r=new _;yield*[...e.values()].map(o=>[o,r.calculate(o)]).sort(([,o],[,n])=>$(o,n)).map(([o])=>o)},X=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 fe(a.flatMap(r,o=>{let n=new Q(t,o);return n.run(),n.elements}))},me=async function(t,e){for await(let r of X(t,e))return r;return null};var he=Object.freeze({...v,...A,...R,...L,...O,...M,...D,...E,Deferred:c,createFunction:j,createTextContent:d,IntervalPoller:S,isSuitableNodeForTextMatching:f,MutationPoller:w,RAFPoller:T}),pe=he;
@@ -4,8 +4,8 @@
4
4
  module Puppeteer
5
5
  module Bidi
6
6
  # Puppeteer's injected utilities (Poller classes, Deferred, etc.)
7
- # Source: https://unpkg.com/puppeteer-core@25.3.0/lib/puppeteer/generated/injected.js
8
- # Version: puppeteer-core@25.3.0
7
+ # Source: https://unpkg.com/puppeteer-core@25.5.0/lib/puppeteer/generated/injected.js
8
+ # Version: puppeteer-core@25.5.0
9
9
  #
10
10
  # To update this file, run:
11
11
  # bundle exec ruby scripts/update_injected_source.rb
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Puppeteer
4
4
  module Bidi
5
- VERSION = "0.0.6"
6
- REF_PUPPETEER_VERSION = "25.3.0"
5
+ VERSION = "0.0.7"
6
+ REF_PUPPETEER_VERSION = "25.5.0"
7
7
  end
8
8
  end
@@ -34,6 +34,7 @@ require "puppeteer/bidi/mouse"
34
34
  require "puppeteer/bidi/http_request"
35
35
  require "puppeteer/bidi/http_response"
36
36
  require "puppeteer/bidi/console_message"
37
+ require "puppeteer/bidi/dialog"
37
38
  require "puppeteer/bidi/element_handle"
38
39
  require "puppeteer/bidi/locator"
39
40
  require "puppeteer/bidi/query_handler"
@@ -5,12 +5,12 @@
5
5
  # Usage: bundle exec ruby scripts/update_injected_source.rb [VERSION]
6
6
  #
7
7
  # Example:
8
- # bundle exec ruby scripts/update_injected_source.rb 25.3.0
8
+ # bundle exec ruby scripts/update_injected_source.rb 25.5.0
9
9
 
10
10
  require "net/http"
11
11
  require "json"
12
12
 
13
- VERSION = ARGV[0] || "25.3.0"
13
+ VERSION = ARGV[0] || "25.5.0"
14
14
  PACKAGE_PATH = if VERSION.split(".", 2).first.to_i >= 25
15
15
  "lib/puppeteer/generated/injected.js"
16
16
  else
@@ -4,6 +4,8 @@ module Puppeteer
4
4
  module Bidi
5
5
  # Browser represents a browser instance with BiDi connection
6
6
  class Browser
7
+ TARGET_EVENTS: untyped
8
+
7
9
  attr_reader connection: Connection
8
10
 
9
11
  attr_reader process: untyped
@@ -120,6 +122,18 @@ module Puppeteer
120
122
  # @rbs return: void
121
123
  def on: (String | Symbol event) { (untyped) -> void } -> void
122
124
 
125
+ # Register a one-time event handler
126
+ # @rbs event: String | Symbol -- Event name
127
+ # @rbs &block: (untyped) -> void -- Event handler
128
+ # @rbs return: void
129
+ def once: (String | Symbol event) { (untyped) -> void } -> void
130
+
131
+ # Remove an event handler
132
+ # @rbs event: String | Symbol -- Event name
133
+ # @rbs &block: ((untyped) -> void)? -- Event handler to remove
134
+ # @rbs return: void
135
+ def off: (String | Symbol event) ?{ (?) -> untyped } -> void
136
+
123
137
  # Close the browser
124
138
  # @rbs return: void
125
139
  def close: () -> void
@@ -18,6 +18,24 @@ module Puppeteer
18
18
  # @rbs return: void
19
19
  def initialize: (Browser browser, Core::UserContext user_context) -> void
20
20
 
21
+ # Register an event listener
22
+ # @rbs event: Symbol | String -- Event name
23
+ # @rbs &block: (untyped) -> void -- Event handler
24
+ # @rbs return: void
25
+ def on: (Symbol | String event) { (untyped) -> void } -> void
26
+
27
+ # Register a one-time event listener
28
+ # @rbs event: Symbol | String -- Event name
29
+ # @rbs &block: (untyped) -> void -- Event handler
30
+ # @rbs return: void
31
+ def once: (Symbol | String event) { (untyped) -> void } -> void
32
+
33
+ # Remove an event listener
34
+ # @rbs event: Symbol | String -- Event name
35
+ # @rbs &block: ((untyped) -> void)? -- Event handler to remove
36
+ # @rbs return: void
37
+ def off: (Symbol | String event) ?{ (?) -> untyped } -> void
38
+
21
39
  # Create a new page (tab/window)
22
40
  # @rbs background: bool? -- Whether to open the page in background
23
41
  # @rbs type: String? -- 'tab' or 'window'
@@ -34,8 +34,10 @@ module Puppeteer
34
34
  # Handle the user prompt
35
35
  # @rbs accept: bool? -- Whether to accept the prompt
36
36
  # @rbs user_text: String? -- Text to enter (for prompt dialogs)
37
- # @rbs return: Hash[String, untyped] -- Result of handling the prompt
38
- def handle: (?accept: bool?, ?user_text: String?) -> Hash[String, untyped]
37
+ # @rbs return: Async::Task[Hash[String, untyped]] -- Result of handling the prompt
38
+ def handle: (?accept: bool?, ?user_text: String?) -> Async::Task[Hash[String, untyped]]
39
+
40
+ def dispose: () -> untyped
39
41
 
40
42
  def perform_dispose: () -> untyped
41
43
 
@@ -45,6 +47,8 @@ module Puppeteer
45
47
 
46
48
  def initialize_prompt: () -> untyped
47
49
 
50
+ def handle_prompt_closed: (untyped params) -> untyped
51
+
48
52
  def dispose_prompt: (untyped reason) -> untyped
49
53
  end
50
54
  end
@@ -0,0 +1,39 @@
1
+ # Generated from lib/puppeteer/bidi/dialog.rb with RBS::Inline
2
+
3
+ module Puppeteer
4
+ module Bidi
5
+ # Dialog instances are dispatched by Page via the :dialog event.
6
+ class Dialog
7
+ attr_reader type: String
8
+
9
+ attr_reader message: String
10
+
11
+ attr_reader default_value: String
12
+
13
+ # @rbs prompt: Core::UserPrompt -- Core user prompt
14
+ # @rbs return: Dialog -- Public dialog wrapper
15
+ def self.from: (Core::UserPrompt prompt) -> Dialog
16
+
17
+ # @rbs prompt: Core::UserPrompt -- Core user prompt
18
+ # @rbs return: void
19
+ def initialize: (Core::UserPrompt prompt) -> void
20
+
21
+ # @rbs return: bool -- Whether the dialog has been handled
22
+ def handled?: () -> bool
23
+
24
+ # @rbs prompt_text: String? -- Text entered into a prompt dialog
25
+ # @rbs return: void
26
+ def accept: (?String? prompt_text) -> void
27
+
28
+ # @rbs return: void
29
+ def dismiss: () -> void
30
+
31
+ private
32
+
33
+ # @rbs accept: bool -- Whether to accept the dialog
34
+ # @rbs text: String? -- Prompt text
35
+ # @rbs return: void
36
+ def handle: (accept: bool, ?text: String?) -> void
37
+ end
38
+ end
39
+ end
@@ -3,8 +3,8 @@
3
3
  module Puppeteer
4
4
  module Bidi
5
5
  # Puppeteer's injected utilities (Poller classes, Deferred, etc.)
6
- # Source: https://unpkg.com/puppeteer-core@25.3.0/lib/puppeteer/generated/injected.js
7
- # Version: puppeteer-core@25.3.0
6
+ # Source: https://unpkg.com/puppeteer-core@25.5.0/lib/puppeteer/generated/injected.js
7
+ # Version: puppeteer-core@25.5.0
8
8
  #
9
9
  # To update this file, run:
10
10
  # bundle exec ruby scripts/update_injected_source.rb
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppeteer-bidi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - YusukeIwaki
@@ -110,6 +110,7 @@ files:
110
110
  - lib/puppeteer/bidi/core/user_context.rb
111
111
  - lib/puppeteer/bidi/core/user_prompt.rb
112
112
  - lib/puppeteer/bidi/deserializer.rb
113
+ - lib/puppeteer/bidi/dialog.rb
113
114
  - lib/puppeteer/bidi/element_handle.rb
114
115
  - lib/puppeteer/bidi/errors.rb
115
116
  - lib/puppeteer/bidi/exposed_function.rb
@@ -160,6 +161,7 @@ files:
160
161
  - sig/puppeteer/bidi/core/user_context.rbs
161
162
  - sig/puppeteer/bidi/core/user_prompt.rbs
162
163
  - sig/puppeteer/bidi/deserializer.rbs
164
+ - sig/puppeteer/bidi/dialog.rbs
163
165
  - sig/puppeteer/bidi/element_handle.rbs
164
166
  - sig/puppeteer/bidi/errors.rbs
165
167
  - sig/puppeteer/bidi/exposed_function.rbs