puppeteer-bidi 0.0.3.beta3 → 0.0.3

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: eb435eba199162f3270ff09d0efeaf728935717f0c690a0549f176f1be06e072
4
- data.tar.gz: 7a39e4c65471997c4d37f4558459121a9370769dbf341b7f45b6d2441175b60e
3
+ metadata.gz: 6258f257557d7e7ad54126303faab369f6cf1fc356346f9606de321516f60ef6
4
+ data.tar.gz: a857af87cb9ed377eb5c266e64eab95dd7183f3c7174d9948ceb1eea08718c71
5
5
  SHA512:
6
- metadata.gz: 1d9b44c59dda746bae25de8ad9e37c9576867fd5f39b434e39e0ea2cb1ce30d05e943496d787e9cc254d5747af1ce8514818dce67c5778861345617788c2b6af
7
- data.tar.gz: 5d80cc021677292638eb0103cf7aca8f9c87309fcb858425360b1ac6f937f2d5d1e5386c5b30e738589fc787ab7f609a271af18d682ac9452b95ae5fec25d765
6
+ metadata.gz: dd7ed38b4927219f89f37ba2f4c6c76af4696c6892900281d337bcd166e1e616257304ffdf6b575960eaa271ae23b31b6db3ccecad3087cbc69ed5297fbbf617
7
+ data.tar.gz: df98ee653d7543e3c26fa31420e8983185f1a5f5f8e50bcb4d7595435b1014ca6ea8dbe29a7f7983de2874c882431a77c45c29cce0106088a46e1203116bd360
@@ -0,0 +1,39 @@
1
+ # Dockerfile for reproducing CI failures locally
2
+ FROM ruby:4.0-slim-bookworm
3
+
4
+ ENV DEBIAN_FRONTEND=noninteractive
5
+
6
+ # Install system dependencies
7
+ RUN apt-get update && apt-get install -y \
8
+ wget \
9
+ gnupg \
10
+ git \
11
+ xvfb \
12
+ build-essential \
13
+ && rm -rf /var/lib/apt/lists/*
14
+
15
+ # Add Mozilla APT repository for Firefox Nightly
16
+ RUN install -d -m 0755 /etc/apt/keyrings && \
17
+ wget -q https://packages.mozilla.org/apt/repo-signing-key.gpg -O- | tee /etc/apt/keyrings/packages.mozilla.org.asc > /dev/null && \
18
+ echo "deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc] https://packages.mozilla.org/apt mozilla main" | tee /etc/apt/sources.list.d/mozilla.list > /dev/null && \
19
+ echo 'Package: *\nPin: origin packages.mozilla.org\nPin-Priority: 1000' | tee /etc/apt/preferences.d/mozilla
20
+
21
+ # Install Firefox Nightly
22
+ RUN apt-get update && apt-get install -y firefox-nightly && rm -rf /var/lib/apt/lists/*
23
+
24
+ # Verify installations
25
+ RUN ruby --version && firefox-nightly --version
26
+
27
+ WORKDIR /app
28
+
29
+ # Copy Gemfile first for caching
30
+ COPY Gemfile Gemfile.lock* puppeteer-bidi.gemspec ./
31
+ COPY lib/puppeteer/bidi/version.rb ./lib/puppeteer/bidi/
32
+
33
+ RUN bundle install
34
+
35
+ # Copy the rest of the application
36
+ COPY . .
37
+
38
+ ENV HEADLESS=true
39
+ ENV FIREFOX_PATH=/usr/bin/firefox-nightly
@@ -3,7 +3,6 @@
3
3
 
4
4
  require "async"
5
5
  require "async/promise"
6
- require "async/queue"
7
6
  require "delegate"
8
7
  require "thread"
9
8
 
@@ -11,6 +10,18 @@ module Puppeteer
11
10
  module Bidi
12
11
  # Runs a dedicated Async reactor in a background thread and proxies calls into it.
13
12
  class ReactorRunner
13
+ class Finalizer
14
+ def initialize(queue, thread)
15
+ @queue = queue
16
+ @thread = thread
17
+ end
18
+
19
+ def call(_id)
20
+ @queue.close
21
+ @thread.join unless ::Thread.current == @thread
22
+ end
23
+ end
24
+
14
25
  class Proxy < SimpleDelegator
15
26
  # @rbs runner: ReactorRunner -- Reactor runner
16
27
  # @rbs target: untyped -- Target object to proxy
@@ -78,20 +89,27 @@ module Puppeteer
78
89
 
79
90
  # @rbs return: void
80
91
  def initialize
81
- @queue = Async::Queue.new
92
+ @queue = Thread::Queue.new
82
93
  @ready = Queue.new
83
94
  @closed = false
84
95
  @thread = Thread.new do
85
- Sync do |task|
86
- @ready << true
87
- @queue.async(parent: task) do |_async_task, job|
88
- job.call
96
+ begin
97
+ Sync do |task|
98
+ @ready << true
99
+ while (job = @queue.pop)
100
+ task.async do
101
+ job.call
102
+ end
103
+ end
89
104
  end
105
+ rescue ClosedQueueError
106
+ # Queue closed; exit the reactor loop.
90
107
  ensure
91
108
  @closed = true
92
109
  end
93
110
  end
94
111
 
112
+ ObjectSpace.define_finalizer(self, Finalizer.new(@queue, @thread))
95
113
  @ready.pop
96
114
  end
97
115
 
@@ -103,31 +121,16 @@ module Puppeteer
103
121
 
104
122
  promise = Async::Promise.new
105
123
  job = lambda do
106
- begin
107
- promise.resolve(block.call)
108
- rescue => e
109
- promise.reject(e)
110
- end
124
+ Async::Promise.fulfill(promise, &block)
111
125
  end
112
126
 
113
127
  begin
114
128
  @queue << job
115
- rescue Async::Queue::ClosedError
129
+ rescue ClosedQueueError
116
130
  raise Error, "ReactorRunner is closed"
117
131
  end
118
132
 
119
- # Ruby 4.0: Async::Promise#wait can wake spuriously; retry until resolved.
120
- loop do
121
- begin
122
- return promise.wait
123
- rescue TypeError => e
124
- raise unless e.message == "exception class/object expected"
125
- next unless promise.resolved?
126
- value = promise.value
127
- raise value if value.is_a?(Exception)
128
- return value
129
- end
130
- end
133
+ promise.wait
131
134
  end
132
135
 
133
136
  # @rbs return: void
@@ -101,7 +101,7 @@ module Puppeteer
101
101
  next if message.nil?
102
102
 
103
103
  Async do
104
- data = JSON.parse(message)
104
+ data = JSON.parse(message.to_str)
105
105
  debug_print_receive(data)
106
106
  @on_message&.call(data)
107
107
  rescue JSON::ParserError => e
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Puppeteer
4
4
  module Bidi
5
- VERSION = "0.0.3.beta3"
5
+ VERSION = "0.0.3"
6
6
  end
7
7
  end
data/sig/_external.rbs CHANGED
@@ -34,6 +34,7 @@ module Async
34
34
  def reject: (Exception) -> void
35
35
  def resolved?: () -> bool
36
36
  def value: () -> T?
37
+ def self.fulfill: [U] (Promise[U]) { () -> U } -> U
37
38
  end
38
39
 
39
40
  class TimeoutError < StandardError
@@ -4,6 +4,12 @@ module Puppeteer
4
4
  module Bidi
5
5
  # Runs a dedicated Async reactor in a background thread and proxies calls into it.
6
6
  class ReactorRunner
7
+ class Finalizer
8
+ def initialize: (untyped queue, untyped thread) -> untyped
9
+
10
+ def call: (untyped _id) -> untyped
11
+ end
12
+
7
13
  class Proxy < SimpleDelegator
8
14
  # @rbs runner: ReactorRunner -- Reactor runner
9
15
  # @rbs target: untyped -- Target object to proxy
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.3.beta3
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - YusukeIwaki
@@ -13,16 +13,16 @@ dependencies:
13
13
  name: async
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
- - - "~>"
16
+ - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: '2.0'
18
+ version: 2.35.1
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
- - - "~>"
23
+ - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: '2.0'
25
+ version: 2.35.1
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: async-websocket
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -79,6 +79,7 @@ files:
79
79
  - ".rubocop.yml"
80
80
  - API_COVERAGE.md
81
81
  - DEVELOPMENT.md
82
+ - Dockerfile.ci-test
82
83
  - LICENSE.txt
83
84
  - README.md
84
85
  - Rakefile