react_on_rails_pro 16.6.0 → 16.7.0.rc.1
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/.controlplane/rails.yml +2 -2
- data/CLAUDE.md +10 -0
- data/CONTRIBUTING.md +2 -2
- data/Gemfile.development_dependencies +26 -13
- data/Gemfile.lock +13 -28
- data/Rakefile +0 -5
- data/app/helpers/react_on_rails_pro_helper.rb +28 -1
- data/lib/react_on_rails_pro/assets_precompile.rb +170 -1
- data/lib/react_on_rails_pro/async_props_emitter.rb +80 -0
- data/lib/react_on_rails_pro/concerns/stream.rb +1 -1
- data/lib/react_on_rails_pro/configuration.rb +114 -17
- data/lib/react_on_rails_pro/engine.rb +10 -0
- data/lib/react_on_rails_pro/httpx_stream_bidi_patch.rb +42 -0
- data/lib/react_on_rails_pro/js_code_builder.rb +121 -0
- data/lib/react_on_rails_pro/license_validator.rb +1 -1
- data/lib/react_on_rails_pro/pre_seed_renderer_cache.rb +148 -0
- data/lib/react_on_rails_pro/prepare_node_renderer_bundles.rb +33 -28
- data/lib/react_on_rails_pro/renderer_cache_helpers.rb +276 -0
- data/lib/react_on_rails_pro/renderer_cache_path.rb +74 -0
- data/lib/react_on_rails_pro/rendering_strategy/node_strategy.rb +29 -0
- data/lib/react_on_rails_pro/request.rb +135 -8
- data/lib/react_on_rails_pro/rolling_deploy_cache_stager.rb +516 -0
- data/lib/react_on_rails_pro/server_rendering_js_code.rb +47 -10
- data/lib/react_on_rails_pro/server_rendering_pool/node_rendering_pool.rb +35 -10
- data/lib/react_on_rails_pro/stream_request.rb +42 -49
- data/lib/react_on_rails_pro/utils.rb +7 -9
- data/lib/react_on_rails_pro/version.rb +1 -1
- data/lib/react_on_rails_pro.rb +8 -0
- data/lib/tasks/assets.rake +36 -3
- data/rakelib/run_rspec.rake +6 -6
- data/react_on_rails_pro.gemspec +9 -4
- data/sig/react_on_rails_pro/configuration.rbs +2 -0
- metadata +35 -22
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "async"
|
|
4
|
+
require "async/barrier"
|
|
5
|
+
|
|
3
6
|
module ReactOnRailsPro
|
|
4
7
|
class StreamDecorator
|
|
5
8
|
def initialize(component)
|
|
@@ -92,35 +95,54 @@ module ReactOnRailsPro
|
|
|
92
95
|
def each_chunk(&block)
|
|
93
96
|
return enum_for(:each_chunk) unless block
|
|
94
97
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
98
|
+
Sync do
|
|
99
|
+
barrier = Async::Barrier.new
|
|
100
|
+
|
|
101
|
+
send_bundle = false
|
|
102
|
+
error_body = +""
|
|
103
|
+
loop do
|
|
104
|
+
stream_response = @request_executor.call(send_bundle, barrier)
|
|
105
|
+
|
|
106
|
+
# The Node renderer always emits the length-prefixed wire format
|
|
107
|
+
# (`<metadata JSON>\t<content byte length hex>\n<raw content bytes>`)
|
|
108
|
+
# for every response chunk — both the one-shot streaming path and the
|
|
109
|
+
# incremental-rendering path. We check the status code inside the loop
|
|
110
|
+
# block because calling `status` outside of it blocks until the full
|
|
111
|
+
# response has been received. See the `status` spec in
|
|
112
|
+
# `spec/react_on_rails_pro/stream_spec.rb` for more details.
|
|
113
|
+
process_response_chunks(stream_response, error_body, &block)
|
|
114
|
+
break
|
|
115
|
+
rescue HTTPX::HTTPError => e
|
|
116
|
+
send_bundle = handle_http_error(e, error_body, send_bundle)
|
|
117
|
+
rescue HTTPX::ReadTimeoutError => e
|
|
118
|
+
raise ReactOnRailsPro::Error, "Time out error while server side render streaming a component.\n" \
|
|
119
|
+
"Original error:\n#{e}\n#{e.backtrace}"
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
barrier.wait
|
|
111
123
|
end
|
|
112
124
|
end
|
|
113
125
|
|
|
114
|
-
|
|
115
|
-
|
|
126
|
+
# Method to start the decoration
|
|
127
|
+
def self.create(&request_block)
|
|
128
|
+
StreamDecorator.new(new(&request_block))
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
private
|
|
132
|
+
|
|
133
|
+
def process_response_chunks(stream_response, error_body, &block)
|
|
134
|
+
parser = ReactOnRails::LengthPrefixedParser.new
|
|
135
|
+
stream_response.each do |chunk|
|
|
136
|
+
stream_response.instance_variable_set(:@react_on_rails_received_first_chunk, true)
|
|
137
|
+
|
|
116
138
|
if response_has_error_status?(stream_response)
|
|
117
139
|
error_body << chunk
|
|
118
140
|
next
|
|
119
141
|
end
|
|
120
142
|
|
|
121
|
-
|
|
122
|
-
yield processed_chunk unless processed_chunk.empty?
|
|
143
|
+
parser.feed(chunk, &block)
|
|
123
144
|
end
|
|
145
|
+
parser.flush
|
|
124
146
|
end
|
|
125
147
|
|
|
126
148
|
def response_has_error_status?(response)
|
|
@@ -150,34 +172,5 @@ module ReactOnRailsPro
|
|
|
150
172
|
raise ReactOnRailsPro::Error, "Unexpected response code from renderer: #{response.status}:\n#{error_body}"
|
|
151
173
|
end
|
|
152
174
|
end
|
|
153
|
-
|
|
154
|
-
# Method to start the decoration
|
|
155
|
-
def self.create(&request_block)
|
|
156
|
-
StreamDecorator.new(new(&request_block))
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
private
|
|
160
|
-
|
|
161
|
-
# This method is considered as an override of response.each_line
|
|
162
|
-
# It fixes the problem of not yielding the last chunk on error
|
|
163
|
-
# You can check the spec of `each_line` in `spec/react_on_rails_pro/stream_spec.rb` for more details
|
|
164
|
-
def loop_response_lines(response)
|
|
165
|
-
return enum_for(__method__, response) unless block_given?
|
|
166
|
-
|
|
167
|
-
line = "".b
|
|
168
|
-
|
|
169
|
-
response.each do |chunk|
|
|
170
|
-
response.instance_variable_set(:@react_on_rails_received_first_chunk, true)
|
|
171
|
-
line << chunk
|
|
172
|
-
|
|
173
|
-
while (idx = line.index("\n"))
|
|
174
|
-
yield line.byteslice(0..idx - 1)
|
|
175
|
-
|
|
176
|
-
line = line.byteslice(idx + 1..-1)
|
|
177
|
-
end
|
|
178
|
-
end
|
|
179
|
-
ensure
|
|
180
|
-
yield line unless line.empty?
|
|
181
|
-
end
|
|
182
175
|
end
|
|
183
176
|
end
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
# require "open3"
|
|
5
|
-
# require "rainbow"
|
|
6
|
-
# require "active_support"
|
|
7
|
-
# require "active_support/core_ext/string"
|
|
3
|
+
require "react_on_rails_pro/renderer_cache_path"
|
|
8
4
|
|
|
9
5
|
module ReactOnRailsPro
|
|
10
6
|
module Utils
|
|
@@ -120,10 +116,8 @@ module ReactOnRailsPro
|
|
|
120
116
|
def self.server_bundle_file_name
|
|
121
117
|
return @server_bundle_hash if @server_bundle_hash && !Rails.env.development?
|
|
122
118
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
bundle_file_name(server_bundle_name)
|
|
126
|
-
end
|
|
119
|
+
server_bundle_name = ReactOnRails.configuration.server_bundle_js_file
|
|
120
|
+
@server_bundle_hash = bundle_file_name(server_bundle_name)
|
|
127
121
|
end
|
|
128
122
|
|
|
129
123
|
def self.calc_bundle_hash(server_bundle_js_file_path)
|
|
@@ -179,6 +173,10 @@ module ReactOnRailsPro
|
|
|
179
173
|
}
|
|
180
174
|
end
|
|
181
175
|
|
|
176
|
+
def self.resolve_renderer_cache_dir
|
|
177
|
+
ReactOnRailsPro::RendererCachePath.resolve
|
|
178
|
+
end
|
|
179
|
+
|
|
182
180
|
def self.mine_type_from_file_name(filename)
|
|
183
181
|
extension = File.extname(filename)
|
|
184
182
|
Rack::Mime.mime_type(extension)
|
data/lib/react_on_rails_pro.rb
CHANGED
|
@@ -3,12 +3,16 @@
|
|
|
3
3
|
require "rails"
|
|
4
4
|
require "react_on_rails"
|
|
5
5
|
|
|
6
|
+
# Apply HTTPX bug fix for stream_bidi plugin
|
|
7
|
+
require "react_on_rails_pro/httpx_stream_bidi_patch"
|
|
8
|
+
|
|
6
9
|
require "react_on_rails_pro/request"
|
|
7
10
|
require "react_on_rails_pro/version"
|
|
8
11
|
require "react_on_rails_pro/constants"
|
|
9
12
|
require "react_on_rails_pro/compression_middleware_guard"
|
|
10
13
|
require "react_on_rails_pro/engine"
|
|
11
14
|
require "react_on_rails_pro/error"
|
|
15
|
+
require "react_on_rails_pro/renderer_cache_path"
|
|
12
16
|
require "react_on_rails_pro/utils"
|
|
13
17
|
require "react_on_rails_pro/configuration"
|
|
14
18
|
require "react_on_rails_pro/license_public_key"
|
|
@@ -18,8 +22,12 @@ require "react_on_rails_pro/stream_cache"
|
|
|
18
22
|
require "react_on_rails_pro/server_rendering_pool/pro_rendering"
|
|
19
23
|
require "react_on_rails_pro/server_rendering_pool/node_rendering_pool"
|
|
20
24
|
require "react_on_rails_pro/server_rendering_js_code"
|
|
25
|
+
require "react_on_rails_pro/js_code_builder"
|
|
26
|
+
require "react_on_rails_pro/rendering_strategy/node_strategy"
|
|
21
27
|
require "react_on_rails_pro/assets_precompile"
|
|
22
28
|
require "react_on_rails_pro/prepare_node_renderer_bundles"
|
|
29
|
+
require "react_on_rails_pro/rolling_deploy_cache_stager"
|
|
30
|
+
require "react_on_rails_pro/pre_seed_renderer_cache"
|
|
23
31
|
require "react_on_rails_pro/concerns/stream"
|
|
24
32
|
require "react_on_rails_pro/concerns/rsc_payload_renderer"
|
|
25
33
|
require "react_on_rails_pro/concerns/async_rendering"
|
data/lib/tasks/assets.rake
CHANGED
|
@@ -2,10 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
require "active_support"
|
|
4
4
|
|
|
5
|
-
namespace :react_on_rails_pro do
|
|
6
|
-
desc "
|
|
5
|
+
namespace :react_on_rails_pro do # rubocop:disable Metrics/BlockLength
|
|
6
|
+
desc "Stage the Node Renderer bundle cache. MODE=copy (default; Docker/image builds) " \
|
|
7
|
+
"or MODE=symlink (dev/CI/same-filesystem deploys)."
|
|
8
|
+
task pre_seed_renderer_cache: :environment do
|
|
9
|
+
# Mirrors the guard in `AssetsPrecompile.call`: invoking the staging path against a
|
|
10
|
+
# non-NodeRenderer setup eventually reaches `pool.server_bundle_hash` and fails with
|
|
11
|
+
# a low-level error. Abort early with actionable guidance instead.
|
|
12
|
+
unless ReactOnRailsPro.configuration.node_renderer?
|
|
13
|
+
abort "[ReactOnRailsPro] react_on_rails_pro:pre_seed_renderer_cache requires the Node Renderer. " \
|
|
14
|
+
"Set config.server_renderer = \"NodeRenderer\" in your Pro initializer, or remove this task " \
|
|
15
|
+
"from your deploy pipeline."
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
raw_mode = ENV["MODE"].to_s.downcase
|
|
19
|
+
raw_mode = "copy" if raw_mode.empty?
|
|
20
|
+
valid_modes = ReactOnRailsPro::PreSeedRendererCache::VALID_MODES.map(&:to_s)
|
|
21
|
+
unless valid_modes.include?(raw_mode)
|
|
22
|
+
abort "[ReactOnRailsPro] Unknown MODE=#{raw_mode.inspect}. " \
|
|
23
|
+
"Expected one of: #{valid_modes.join(', ')}"
|
|
24
|
+
end
|
|
25
|
+
ReactOnRailsPro::PreSeedRendererCache.call(mode: raw_mode.to_sym)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Deprecated alias. Delegates to pre_seed_renderer_cache with MODE=symlink so
|
|
29
|
+
# existing Procfile/Dockerfile/deploy-script entries keep working during the
|
|
30
|
+
# deprecation cycle.
|
|
31
|
+
#
|
|
32
|
+
# The warning below fires on every task invocation (it is not guarded by the
|
|
33
|
+
# once-per-process mutex in PrepareNodeRenderBundles). Rake tasks are invoked
|
|
34
|
+
# once per deploy, so repeated output is not a concern here.
|
|
35
|
+
desc "DEPRECATED: use 'pre_seed_renderer_cache' (MODE=copy for Docker, MODE=symlink for same-filesystem)."
|
|
7
36
|
task pre_stage_bundle_for_node_renderer: :environment do
|
|
8
|
-
ReactOnRailsPro
|
|
37
|
+
warn "[ReactOnRailsPro] The 'react_on_rails_pro:pre_stage_bundle_for_node_renderer' rake task is deprecated. " \
|
|
38
|
+
"Migrate to 'rake react_on_rails_pro:pre_seed_renderer_cache' — use MODE=copy (default) for Docker/image " \
|
|
39
|
+
"builds, or MODE=symlink for same-filesystem deploys (this shim preserves the old symlink behavior). " \
|
|
40
|
+
"Run 'rake react_on_rails:doctor' for a per-file migration suggestion based on where the task is referenced."
|
|
41
|
+
ReactOnRailsPro::PreSeedRendererCache.call(mode: :symlink)
|
|
9
42
|
end
|
|
10
43
|
|
|
11
44
|
desc "Copy assets to remote node-renderer"
|
data/rakelib/run_rspec.rake
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# TODO: This file is not used for CI
|
|
4
|
-
require "coveralls/rake/task" if ENV["USE_COVERALLS"] == "TRUE"
|
|
5
4
|
|
|
6
5
|
require "pathname"
|
|
7
6
|
require "active_support/core_ext/string"
|
|
@@ -23,13 +22,15 @@ namespace :run_rspec do
|
|
|
23
22
|
run_tests_in(spec_dummy_dir)
|
|
24
23
|
end
|
|
25
24
|
|
|
26
|
-
desc "(HACK) Run RSpec on spec/empty_spec
|
|
25
|
+
desc "(HACK) Run RSpec on spec/empty_spec.rb — set COVERAGE=true to generate a SimpleCov report from cache"
|
|
27
26
|
task :empty do
|
|
28
|
-
|
|
27
|
+
if ENV["COVERAGE"] == "true"
|
|
28
|
+
sh "bundle exec rspec spec/empty_spec.rb"
|
|
29
|
+
else
|
|
30
|
+
puts "Skipping run_rspec:empty (set COVERAGE=true to generate a SimpleCov report from cache)"
|
|
31
|
+
end
|
|
29
32
|
end
|
|
30
33
|
|
|
31
|
-
Coveralls::RakeTask.new if ENV["USE_COVERALLS"] == "TRUE"
|
|
32
|
-
|
|
33
34
|
desc "run all tests"
|
|
34
35
|
task run_rspec: %i[gem dummy empty js_tests] do
|
|
35
36
|
puts "Completed all RSpec tests"
|
|
@@ -71,7 +72,6 @@ def run_tests_in(dir, options = {})
|
|
|
71
72
|
command_name = options.fetch(:command_name, path.basename)
|
|
72
73
|
rspec_args = options.fetch(:rspec_args, "")
|
|
73
74
|
env_vars = +"#{options.fetch(:env_vars, '')} TEST_ENV_COMMAND_NAME=\"#{command_name}\""
|
|
74
|
-
env_vars << "COVERAGE=true" if ENV["USE_COVERALLS"]
|
|
75
75
|
sh_in_dir(path.realpath, "#{env_vars} bundle exec rspec #{rspec_args}")
|
|
76
76
|
end
|
|
77
77
|
|
data/react_on_rails_pro.gemspec
CHANGED
|
@@ -16,9 +16,14 @@ Gem::Specification.new do |s|
|
|
|
16
16
|
|
|
17
17
|
s.summary = "Rails with react server rendering with webpack. Performance helpers"
|
|
18
18
|
s.description = "See README.md"
|
|
19
|
-
s.homepage = "https://
|
|
19
|
+
s.homepage = "https://reactonrails.com/docs/pro/"
|
|
20
20
|
s.license = "UNLICENSED"
|
|
21
21
|
s.metadata["rubygems_mfa_required"] = "true"
|
|
22
|
+
s.metadata["bug_tracker_uri"] = "https://github.com/shakacode/react_on_rails/issues"
|
|
23
|
+
s.metadata["changelog_uri"] = "https://github.com/shakacode/react_on_rails/blob/main/CHANGELOG.md"
|
|
24
|
+
s.metadata["documentation_uri"] = "https://reactonrails.com/docs/pro/"
|
|
25
|
+
s.metadata["homepage_uri"] = "https://reactonrails.com/docs/pro/"
|
|
26
|
+
s.metadata["source_code_uri"] = "https://github.com/shakacode/react_on_rails/tree/main/react_on_rails_pro"
|
|
22
27
|
|
|
23
28
|
s.files = Dir.chdir(__dir__) do
|
|
24
29
|
`git ls-files -z`.split("\x0").reject do |f|
|
|
@@ -32,14 +37,14 @@ Gem::Specification.new do |s|
|
|
|
32
37
|
s.required_ruby_version = ">= 3.0"
|
|
33
38
|
|
|
34
39
|
s.add_runtime_dependency "addressable"
|
|
40
|
+
s.add_runtime_dependency "async", ">= 2.29"
|
|
35
41
|
s.add_runtime_dependency "connection_pool"
|
|
36
42
|
s.add_runtime_dependency "execjs", "~> 2.9"
|
|
37
|
-
s.add_runtime_dependency "httpx", "~> 1.5"
|
|
38
43
|
# Needed to avoid this bug at httpx versions >= 1.6.0:
|
|
39
44
|
# https://github.com/HoneyryderChuck/httpx/issues/118
|
|
40
45
|
s.add_runtime_dependency "http-2", ">= 1.1.1"
|
|
41
|
-
s.add_runtime_dependency "
|
|
42
|
-
s.add_runtime_dependency "
|
|
46
|
+
s.add_runtime_dependency "httpx", "~> 1.5"
|
|
47
|
+
s.add_runtime_dependency "jwt", ">= 2.7"
|
|
43
48
|
s.add_runtime_dependency "rainbow"
|
|
44
49
|
s.add_runtime_dependency "react_on_rails", ReactOnRails::VERSION
|
|
45
50
|
s.add_development_dependency "bundler"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: react_on_rails_pro
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 16.
|
|
4
|
+
version: 16.7.0.rc.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Justin Gordon
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-05-24 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: addressable
|
|
@@ -25,47 +25,47 @@ dependencies:
|
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
28
|
+
name: async
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
33
|
+
version: '2.29'
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
40
|
+
version: '2.29'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
42
|
+
name: connection_pool
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - "
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
47
|
+
version: '0'
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- - "
|
|
52
|
+
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
54
|
+
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
56
|
+
name: execjs
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
61
|
+
version: '2.9'
|
|
62
62
|
type: :runtime
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
68
|
+
version: '2.9'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: http-2
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -81,33 +81,33 @@ dependencies:
|
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: 1.1.1
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
84
|
+
name: httpx
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
87
|
- - "~>"
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '
|
|
89
|
+
version: '1.5'
|
|
90
90
|
type: :runtime
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
94
|
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
96
|
+
version: '1.5'
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name:
|
|
98
|
+
name: jwt
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
101
|
- - ">="
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '2.
|
|
103
|
+
version: '2.7'
|
|
104
104
|
type: :runtime
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
108
|
- - ">="
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '2.
|
|
110
|
+
version: '2.7'
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
112
|
name: rainbow
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -128,14 +128,14 @@ dependencies:
|
|
|
128
128
|
requirements:
|
|
129
129
|
- - '='
|
|
130
130
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: 16.
|
|
131
|
+
version: 16.7.0.rc.1
|
|
132
132
|
type: :runtime
|
|
133
133
|
prerelease: false
|
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
135
|
requirements:
|
|
136
136
|
- - '='
|
|
137
137
|
- !ruby/object:Gem::Version
|
|
138
|
-
version: 16.
|
|
138
|
+
version: 16.7.0.rc.1
|
|
139
139
|
- !ruby/object:Gem::Dependency
|
|
140
140
|
name: bundler
|
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -228,6 +228,7 @@ files:
|
|
|
228
228
|
- eslint.config.mjs
|
|
229
229
|
- lib/react_on_rails_pro.rb
|
|
230
230
|
- lib/react_on_rails_pro/assets_precompile.rb
|
|
231
|
+
- lib/react_on_rails_pro/async_props_emitter.rb
|
|
231
232
|
- lib/react_on_rails_pro/async_value.rb
|
|
232
233
|
- lib/react_on_rails_pro/cache.rb
|
|
233
234
|
- lib/react_on_rails_pro/compression_middleware_guard.rb
|
|
@@ -238,13 +239,20 @@ files:
|
|
|
238
239
|
- lib/react_on_rails_pro/constants.rb
|
|
239
240
|
- lib/react_on_rails_pro/engine.rb
|
|
240
241
|
- lib/react_on_rails_pro/error.rb
|
|
242
|
+
- lib/react_on_rails_pro/httpx_stream_bidi_patch.rb
|
|
241
243
|
- lib/react_on_rails_pro/immediate_async_value.rb
|
|
244
|
+
- lib/react_on_rails_pro/js_code_builder.rb
|
|
242
245
|
- lib/react_on_rails_pro/license_public_key.rb
|
|
243
246
|
- lib/react_on_rails_pro/license_task_formatter.rb
|
|
244
247
|
- lib/react_on_rails_pro/license_validator.rb
|
|
248
|
+
- lib/react_on_rails_pro/pre_seed_renderer_cache.rb
|
|
245
249
|
- lib/react_on_rails_pro/prepare_node_renderer_bundles.rb
|
|
250
|
+
- lib/react_on_rails_pro/renderer_cache_helpers.rb
|
|
251
|
+
- lib/react_on_rails_pro/renderer_cache_path.rb
|
|
246
252
|
- lib/react_on_rails_pro/rendering_error.rb
|
|
253
|
+
- lib/react_on_rails_pro/rendering_strategy/node_strategy.rb
|
|
247
254
|
- lib/react_on_rails_pro/request.rb
|
|
255
|
+
- lib/react_on_rails_pro/rolling_deploy_cache_stager.rb
|
|
248
256
|
- lib/react_on_rails_pro/routes.rb
|
|
249
257
|
- lib/react_on_rails_pro/server_rendering_js_code.rb
|
|
250
258
|
- lib/react_on_rails_pro/server_rendering_pool/node_rendering_pool.rb
|
|
@@ -276,11 +284,16 @@ files:
|
|
|
276
284
|
- sig/react_on_rails_pro/immediate_async_value.rbs
|
|
277
285
|
- sig/react_on_rails_pro/license_validator.rbs
|
|
278
286
|
- sig/react_on_rails_pro/utils.rbs
|
|
279
|
-
homepage: https://
|
|
287
|
+
homepage: https://reactonrails.com/docs/pro/
|
|
280
288
|
licenses:
|
|
281
289
|
- UNLICENSED
|
|
282
290
|
metadata:
|
|
283
291
|
rubygems_mfa_required: 'true'
|
|
292
|
+
bug_tracker_uri: https://github.com/shakacode/react_on_rails/issues
|
|
293
|
+
changelog_uri: https://github.com/shakacode/react_on_rails/blob/main/CHANGELOG.md
|
|
294
|
+
documentation_uri: https://reactonrails.com/docs/pro/
|
|
295
|
+
homepage_uri: https://reactonrails.com/docs/pro/
|
|
296
|
+
source_code_uri: https://github.com/shakacode/react_on_rails/tree/main/react_on_rails_pro
|
|
284
297
|
post_install_message:
|
|
285
298
|
rdoc_options: []
|
|
286
299
|
require_paths:
|