bidi2pdf 0.1.0 → 0.1.2

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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/CHANGELOG.md +41 -1
  4. data/README.md +31 -0
  5. data/Rakefile +2 -0
  6. data/cliff.toml +114 -0
  7. data/docker/Dockerfile.chromedriver +33 -0
  8. data/docker/docker-compose.yml +24 -0
  9. data/docker/entrypoint.sh +3 -0
  10. data/docker/nginx/default.conf +42 -0
  11. data/docker/nginx/htpasswd +1 -0
  12. data/lib/bidi2pdf/bidi/add_headers_interceptor.rb +1 -1
  13. data/lib/bidi2pdf/bidi/auth_interceptor.rb +1 -1
  14. data/lib/bidi2pdf/bidi/client.rb +55 -140
  15. data/lib/bidi2pdf/bidi/command_manager.rb +82 -0
  16. data/lib/bidi2pdf/bidi/connection_manager.rb +34 -0
  17. data/lib/bidi2pdf/bidi/session.rb +26 -9
  18. data/lib/bidi2pdf/chromedriver_manager.rb +50 -6
  19. data/lib/bidi2pdf/cli.rb +147 -18
  20. data/lib/bidi2pdf/launcher.rb +19 -6
  21. data/lib/bidi2pdf/process_tree.rb +71 -0
  22. data/lib/bidi2pdf/session_runner.rb +5 -5
  23. data/lib/bidi2pdf/version.rb +1 -1
  24. data/lib/bidi2pdf.rb +1 -0
  25. data/sig/bidi2pdf/bidi/add_headers_interceptor.rbs +20 -0
  26. data/sig/bidi2pdf/bidi/auth_interceptor.rbs +17 -0
  27. data/sig/bidi2pdf/bidi/browser.rbs +38 -0
  28. data/sig/bidi2pdf/bidi/browser_tab.rbs +42 -0
  29. data/sig/bidi2pdf/bidi/client.rbs +72 -0
  30. data/sig/bidi2pdf/bidi/event_manager.rbs +29 -0
  31. data/sig/bidi2pdf/bidi/network_event.rbs +51 -0
  32. data/sig/bidi2pdf/bidi/network_events.rbs +55 -0
  33. data/sig/bidi2pdf/bidi/print_parameters_validator.rbs +44 -0
  34. data/sig/bidi2pdf/bidi/session.rbs +52 -0
  35. data/sig/bidi2pdf/bidi/user_context.rbs +50 -0
  36. data/sig/bidi2pdf/bidi/web_socket_dispatcher.rbs +53 -0
  37. data/sig/bidi2pdf/chromedriver_manager.rbs +42 -0
  38. data/sig/bidi2pdf/cli.rbs +21 -0
  39. data/sig/bidi2pdf/launcher.rbs +38 -0
  40. data/sig/bidi2pdf/process_tree.rbs +27 -0
  41. data/sig/bidi2pdf/session_runner.rbs +51 -0
  42. data/sig/bidi2pdf/utils.rbs +5 -0
  43. data/sig/vendor/thor.rbs +13 -0
  44. data/tasks/changelog.rake +29 -0
  45. data/tasks/generate_rbs.rake +64 -0
  46. metadata +65 -8
@@ -0,0 +1,51 @@
1
+ module Bidi2pdf
2
+ class SessionRunner
3
+ @session: untyped
4
+
5
+ @url: untyped
6
+
7
+ @output: untyped
8
+
9
+ @cookies: untyped
10
+
11
+ @headers: untyped
12
+
13
+ @auth: untyped
14
+
15
+ @wait_window_loaded: untyped
16
+
17
+ @wait_network_idle: untyped
18
+
19
+ @print_options: untyped
20
+
21
+ @window: untyped
22
+
23
+ @tab: untyped
24
+
25
+ @uri: untyped
26
+
27
+ def initialize: (session: untyped, url: untyped, output: untyped, ?cookies: ::Hash[untyped, untyped], ?headers: ::Hash[untyped, untyped], ?auth: ::Hash[untyped, untyped], ?wait_window_loaded: bool, ?wait_network_idle: bool, ?print_options: ::Hash[untyped, untyped]) -> void
28
+
29
+ def run: () -> untyped
30
+
31
+ private
32
+
33
+ def setup_browser: () -> untyped
34
+
35
+ def add_cookies: (untyped tab) -> untyped
36
+
37
+ def add_headers: () -> untyped
38
+
39
+ def add_basic_auth: () -> (nil | untyped)
40
+
41
+ def run_flow: () -> untyped
42
+
43
+ def uri: () -> untyped
44
+
45
+ def domain: () -> untyped
46
+
47
+ def source_origin: () -> untyped
48
+
49
+ def url_patterns: () -> ::Array[{ type: "pattern", protocol: untyped, hostname: untyped, port: untyped }]
50
+ end
51
+ end
@@ -0,0 +1,5 @@
1
+ module Bidi2pdf
2
+ module Utils
3
+ def self?.timed: (untyped operation_name) { () -> untyped } -> untyped
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ class Thor
2
+ def self.desc: (String name, String description) -> void
3
+
4
+ def self.option: (Symbol name, ?Hash[Symbol, untyped] options) -> void
5
+
6
+ def self.long_desc: (String description, ?Hash[Symbol, untyped] options) -> void
7
+
8
+ interface _Command
9
+ def execute: (*untyped) -> untyped
10
+ end
11
+
12
+ def initialize: (?Hash[Symbol, untyped] options) -> void
13
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ def cliff_installed?
4
+ system("which git-cliff > /dev/null 2>&1")
5
+ end
6
+
7
+ namespace :changelog do
8
+ desc "Generate unreleased section in CHANGELOG.md (requires git-cliff)"
9
+ task :update_unreleased do
10
+ unless cliff_installed?
11
+ puts "🚫 git-cliff is not installed!"
12
+ puts "👉 Install it here: https://git-cliff.org/docs/installation/"
13
+ exit 1
14
+ end
15
+
16
+ generated = `git cliff --unreleased`
17
+
18
+ changelog_path = "CHANGELOG.md"
19
+ changelog = File.read(changelog_path)
20
+
21
+ updated = changelog.sub(
22
+ /<!--.*generated\s+by\s+git-cliff\s+start\s+-->(.*?)<!--\s+generated\s+by\s+git-cliff\s+end\s+-->/m,
23
+ generated.strip
24
+ )
25
+
26
+ File.write(changelog_path, updated)
27
+ puts "✅ Replaced generated section in CHANGELOG.md"
28
+ end
29
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+ require "rbs"
5
+
6
+ SOURCE_DIR = "lib"
7
+ OUTPUT_DIR = "sig"
8
+
9
+ # rubocop:disable Metrics/BlockLength
10
+ namespace :rbs do
11
+ file_list = FileList["#{SOURCE_DIR}/**/*.rb"]
12
+
13
+ desc "Generate all RBS files"
14
+ task generate_rbs: :rbs_targets
15
+
16
+ rbs_map = file_list.to_h do |rb|
17
+ relative = rb.sub(%r{^#{SOURCE_DIR}/}, "")
18
+ rbs = File.join(OUTPUT_DIR, relative.sub(/\.rb$/, ".rbs"))
19
+ [rbs, rb]
20
+ end
21
+
22
+ rbs_map.each do |rbs_path, rb_path|
23
+ file rbs_path => rb_path do
24
+ puts "🔧 Generating: #{rbs_path} (from #{rb_path})"
25
+
26
+ FileUtils.mkdir_p(File.dirname(rbs_path))
27
+
28
+ begin
29
+ input = Pathname(rb_path)
30
+ output = Pathname(rbs_path)
31
+
32
+ parser = RBS::Prototype::RB.new
33
+ parser.parse input.read
34
+
35
+ if output.file?
36
+ puts "⚠️ RBS file already exists: #{rbs_path}"
37
+ else
38
+ puts "📝 Writing RBS file: #{rbs_path}"
39
+
40
+ output.open("w") do |io|
41
+ writer = RBS::Writer.new(out: io)
42
+ writer.write(parser.decls)
43
+ end
44
+ end
45
+ rescue StandardError => e
46
+ puts "❌ Error generating RBS for #{rb_path}: #{e.message}"
47
+ end
48
+ end
49
+ end
50
+
51
+ desc "Generate RBS files for all Ruby files"
52
+ task rbs_targets: rbs_map.keys do
53
+ puts "✅ RBS generation complete!"
54
+ end
55
+
56
+ desc "Clean all generated RBS files"
57
+ task :clean_rbs do
58
+ FileList["#{OUTPUT_DIR}/**/*.rbs"].each do |file|
59
+ FileUtils.rm_f(file)
60
+ end
61
+ puts "🧹 Cleaned up all RBS files"
62
+ end
63
+ end
64
+ # rubocop:enable Metrics/BlockLength
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bidi2pdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dieter S.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-04-02 00:00:00.000000000 Z
11
+ date: 2025-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sys-proctable
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.3'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.3'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: thor
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +150,20 @@ dependencies:
136
150
  - - "~>"
137
151
  - !ruby/object:Gem::Version
138
152
  version: '13.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rbs
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '3.4'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '3.4'
139
167
  - !ruby/object:Gem::Dependency
140
168
  name: rspec
141
169
  requirement: !ruby/object:Gem::Requirement
@@ -207,33 +235,33 @@ dependencies:
207
235
  - !ruby/object:Gem::Version
208
236
  version: '0.22'
209
237
  - !ruby/object:Gem::Dependency
210
- name: unicode_utils
238
+ name: testcontainers
211
239
  requirement: !ruby/object:Gem::Requirement
212
240
  requirements:
213
241
  - - "~>"
214
242
  - !ruby/object:Gem::Version
215
- version: '1.4'
243
+ version: 0.2.0
216
244
  type: :development
217
245
  prerelease: false
218
246
  version_requirements: !ruby/object:Gem::Requirement
219
247
  requirements:
220
248
  - - "~>"
221
249
  - !ruby/object:Gem::Version
222
- version: '1.4'
250
+ version: 0.2.0
223
251
  - !ruby/object:Gem::Dependency
224
- name: webrick
252
+ name: unicode_utils
225
253
  requirement: !ruby/object:Gem::Requirement
226
254
  requirements:
227
255
  - - "~>"
228
256
  - !ruby/object:Gem::Version
229
- version: '1.9'
257
+ version: '1.4'
230
258
  type: :development
231
259
  prerelease: false
232
260
  version_requirements: !ruby/object:Gem::Requirement
233
261
  requirements:
234
262
  - - "~>"
235
263
  - !ruby/object:Gem::Version
236
- version: '1.9'
264
+ version: '1.4'
237
265
  description: |
238
266
  Bidi2pdf is a powerful PDF generation tool that uses Chrome's BiDirectional Protocol
239
267
  to render web pages as high-quality PDF documents. It offers:
@@ -265,8 +293,13 @@ files:
265
293
  - LICENSE.txt
266
294
  - README.md
267
295
  - Rakefile
296
+ - cliff.toml
268
297
  - docker/Dockerfile
298
+ - docker/Dockerfile.chromedriver
269
299
  - docker/docker-compose.yml
300
+ - docker/entrypoint.sh
301
+ - docker/nginx/default.conf
302
+ - docker/nginx/htpasswd
270
303
  - exe/bidi2pdf
271
304
  - lib/bidi2pdf.rb
272
305
  - lib/bidi2pdf/bidi/add_headers_interceptor.rb
@@ -274,6 +307,8 @@ files:
274
307
  - lib/bidi2pdf/bidi/browser.rb
275
308
  - lib/bidi2pdf/bidi/browser_tab.rb
276
309
  - lib/bidi2pdf/bidi/client.rb
310
+ - lib/bidi2pdf/bidi/command_manager.rb
311
+ - lib/bidi2pdf/bidi/connection_manager.rb
277
312
  - lib/bidi2pdf/bidi/event_manager.rb
278
313
  - lib/bidi2pdf/bidi/network_event.rb
279
314
  - lib/bidi2pdf/bidi/network_events.rb
@@ -284,15 +319,37 @@ files:
284
319
  - lib/bidi2pdf/chromedriver_manager.rb
285
320
  - lib/bidi2pdf/cli.rb
286
321
  - lib/bidi2pdf/launcher.rb
322
+ - lib/bidi2pdf/process_tree.rb
287
323
  - lib/bidi2pdf/session_runner.rb
288
324
  - lib/bidi2pdf/utils.rb
289
325
  - lib/bidi2pdf/version.rb
290
326
  - sig/bidi2pdf.rbs
327
+ - sig/bidi2pdf/bidi/add_headers_interceptor.rbs
328
+ - sig/bidi2pdf/bidi/auth_interceptor.rbs
329
+ - sig/bidi2pdf/bidi/browser.rbs
330
+ - sig/bidi2pdf/bidi/browser_tab.rbs
331
+ - sig/bidi2pdf/bidi/client.rbs
332
+ - sig/bidi2pdf/bidi/event_manager.rbs
333
+ - sig/bidi2pdf/bidi/network_event.rbs
334
+ - sig/bidi2pdf/bidi/network_events.rbs
335
+ - sig/bidi2pdf/bidi/print_parameters_validator.rbs
336
+ - sig/bidi2pdf/bidi/session.rbs
337
+ - sig/bidi2pdf/bidi/user_context.rbs
338
+ - sig/bidi2pdf/bidi/web_socket_dispatcher.rbs
291
339
  - sig/bidi2pdf/chrome/chromedriver_downloader.rbs
292
340
  - sig/bidi2pdf/chrome/downloader_helper.rbs
293
341
  - sig/bidi2pdf/chrome/finder.rbs
294
342
  - sig/bidi2pdf/chrome/platform.rbs
295
343
  - sig/bidi2pdf/chrome/version_resolver.rbs
344
+ - sig/bidi2pdf/chromedriver_manager.rbs
345
+ - sig/bidi2pdf/cli.rbs
346
+ - sig/bidi2pdf/launcher.rbs
347
+ - sig/bidi2pdf/process_tree.rbs
348
+ - sig/bidi2pdf/session_runner.rbs
349
+ - sig/bidi2pdf/utils.rbs
350
+ - sig/vendor/thor.rbs
351
+ - tasks/changelog.rake
352
+ - tasks/generate_rbs.rake
296
353
  - tmp/.keep
297
354
  homepage: https://github.com/dieter-medium/bidi2pdf
298
355
  licenses: