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 +4 -4
- data/Dockerfile.ci-test +39 -0
- data/lib/puppeteer/bidi/reactor_runner.rb +27 -24
- data/lib/puppeteer/bidi/transport.rb +1 -1
- data/lib/puppeteer/bidi/version.rb +1 -1
- data/sig/_external.rbs +1 -0
- data/sig/puppeteer/bidi/reactor_runner.rbs +6 -0
- metadata +6 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6258f257557d7e7ad54126303faab369f6cf1fc356346f9606de321516f60ef6
|
|
4
|
+
data.tar.gz: a857af87cb9ed377eb5c266e64eab95dd7183f3c7174d9948ceb1eea08718c71
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dd7ed38b4927219f89f37ba2f4c6c76af4696c6892900281d337bcd166e1e616257304ffdf6b575960eaa271ae23b31b6db3ccecad3087cbc69ed5297fbbf617
|
|
7
|
+
data.tar.gz: df98ee653d7543e3c26fa31420e8983185f1a5f5f8e50bcb4d7595435b1014ca6ea8dbe29a7f7983de2874c882431a77c45c29cce0106088a46e1203116bd360
|
data/Dockerfile.ci-test
ADDED
|
@@ -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 =
|
|
92
|
+
@queue = Thread::Queue.new
|
|
82
93
|
@ready = Queue.new
|
|
83
94
|
@closed = false
|
|
84
95
|
@thread = Thread.new do
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
job.
|
|
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
|
-
|
|
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
|
|
129
|
+
rescue ClosedQueueError
|
|
116
130
|
raise Error, "ReactorRunner is closed"
|
|
117
131
|
end
|
|
118
132
|
|
|
119
|
-
|
|
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
|
data/sig/_external.rbs
CHANGED
|
@@ -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
|
|
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:
|
|
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:
|
|
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
|