react_on_rails 16.2.0.beta.3 → 16.2.0.beta.8
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/CHANGELOG.md +42 -5
- data/CLAUDE.md +59 -0
- data/CONTRIBUTING.md +49 -1
- data/Gemfile.development_dependencies +1 -1
- data/Gemfile.lock +25 -10
- data/SWITCHING_CI_CONFIGS.md +55 -6
- data/Steepfile +51 -0
- data/bin/ci-rerun-failures +68 -22
- data/bin/ci-run-failed-specs +26 -2
- data/bin/ci-switch-config +262 -34
- data/bin/lefthook/check-trailing-newlines +2 -12
- data/bin/lefthook/eslint-lint +0 -10
- data/bin/lefthook/prettier-format +0 -10
- data/bin/lefthook/ruby-autofix +3 -6
- data/knip.ts +35 -9
- data/lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb.tt +32 -52
- data/lib/generators/react_on_rails/templates/base/base/config/shakapacker.yml +5 -1
- data/lib/react_on_rails/configuration.rb +56 -12
- data/lib/react_on_rails/controller.rb +3 -3
- data/lib/react_on_rails/dev/server_manager.rb +11 -4
- data/lib/react_on_rails/doctor.rb +249 -2
- data/lib/react_on_rails/helper.rb +12 -3
- data/lib/react_on_rails/pro_helper.rb +2 -44
- data/lib/react_on_rails/react_component/render_options.rb +7 -7
- data/lib/react_on_rails/utils.rb +40 -0
- data/lib/react_on_rails/version.rb +1 -1
- data/react_on_rails_pro/CHANGELOG.md +142 -29
- data/react_on_rails_pro/CONTRIBUTING.md +2 -13
- data/react_on_rails_pro/Gemfile.development_dependencies +1 -0
- data/react_on_rails_pro/Gemfile.lock +24 -3
- data/react_on_rails_pro/README.md +559 -38
- data/react_on_rails_pro/docs/code-splitting-loadable-components.md +1 -1
- data/react_on_rails_pro/docs/contributors-info/releasing.md +2 -2
- data/react_on_rails_pro/docs/installation.md +129 -109
- data/react_on_rails_pro/docs/node-renderer/basics.md +29 -22
- data/react_on_rails_pro/docs/node-renderer/error-reporting-and-tracing.md +8 -8
- data/react_on_rails_pro/docs/node-renderer/js-configuration.md +25 -23
- data/react_on_rails_pro/docs/node-renderer/troubleshooting.md +2 -0
- data/react_on_rails_pro/docs/updating.md +209 -15
- data/react_on_rails_pro/lib/react_on_rails_pro/concerns/stream.rb +58 -4
- data/react_on_rails_pro/lib/react_on_rails_pro/configuration.rb +17 -3
- data/react_on_rails_pro/lib/react_on_rails_pro/license_public_key.rb +9 -9
- data/react_on_rails_pro/lib/react_on_rails_pro/request.rb +41 -25
- data/react_on_rails_pro/lib/react_on_rails_pro/stream_request.rb +27 -7
- data/react_on_rails_pro/lib/react_on_rails_pro/utils.rb +3 -3
- data/react_on_rails_pro/lib/react_on_rails_pro/version.rb +1 -1
- data/react_on_rails_pro/package-scripts.yml +1 -1
- data/react_on_rails_pro/package.json +5 -8
- data/react_on_rails_pro/packages/node-renderer/src/integrations/api.ts +1 -1
- data/react_on_rails_pro/packages/node-renderer/src/master/restartWorkers.ts +39 -17
- data/react_on_rails_pro/packages/node-renderer/src/master.ts +15 -4
- data/react_on_rails_pro/packages/node-renderer/src/shared/configBuilder.ts +44 -5
- data/react_on_rails_pro/packages/node-renderer/src/shared/utils.ts +4 -2
- data/react_on_rails_pro/packages/node-renderer/src/worker/handleGracefulShutdown.ts +49 -0
- data/react_on_rails_pro/packages/node-renderer/src/worker/vm.ts +3 -3
- data/react_on_rails_pro/packages/node-renderer/src/worker.ts +5 -2
- data/react_on_rails_pro/packages/node-renderer/tests/helper.ts +8 -8
- data/react_on_rails_pro/packages/node-renderer/tests/testingNodeRendererConfigs.js +1 -1
- data/react_on_rails_pro/packages/node-renderer/tests/worker.test.ts +19 -19
- data/react_on_rails_pro/rakelib/public_key_management.rake +6 -5
- data/react_on_rails_pro/rakelib/rbs.rake +47 -0
- data/react_on_rails_pro/react_on_rails_pro.gemspec +1 -0
- data/react_on_rails_pro/sig/react_on_rails_pro/cache.rbs +13 -0
- data/react_on_rails_pro/sig/react_on_rails_pro/configuration.rbs +100 -0
- data/react_on_rails_pro/sig/react_on_rails_pro/error.rbs +4 -0
- data/react_on_rails_pro/sig/react_on_rails_pro/utils.rbs +7 -0
- data/react_on_rails_pro/sig/react_on_rails_pro.rbs +5 -0
- data/react_on_rails_pro/spec/dummy/Gemfile.lock +23 -3
- data/react_on_rails_pro/spec/dummy/app/controllers/pages_controller.rb +3 -3
- data/react_on_rails_pro/spec/dummy/bin/dev +4 -8
- data/react_on_rails_pro/spec/dummy/client/node-renderer.js +4 -4
- data/react_on_rails_pro/spec/dummy/config/environments/production.rb +1 -1
- data/react_on_rails_pro/spec/dummy/config/initializers/react_on_rails.rb +28 -12
- data/react_on_rails_pro/spec/dummy/config.ru +1 -1
- data/react_on_rails_pro/spec/dummy/package.json +2 -2
- data/react_on_rails_pro/spec/dummy/spec/helpers/react_on_rails_pro_helper_spec.rb +40 -11
- data/react_on_rails_pro/spec/dummy/spec/rails_helper.rb +1 -1
- data/react_on_rails_pro/spec/dummy/spec/requests/renderer_console_logging_spec.rb +5 -5
- data/react_on_rails_pro/spec/dummy/spec/system/integration_spec.rb +15 -10
- data/react_on_rails_pro/spec/dummy/spec/system/renderer_integration_spec.rb +3 -3
- data/react_on_rails_pro/spec/dummy/yarn.lock +4 -4
- data/react_on_rails_pro/spec/execjs-compatible-dummy/config/environments/production.rb +1 -1
- data/react_on_rails_pro/spec/execjs-compatible-dummy/config/initializers/react_on_rails.rb +16 -43
- data/react_on_rails_pro/spec/react_on_rails_pro/assets_precompile_spec.rb +15 -18
- data/react_on_rails_pro/spec/react_on_rails_pro/cache_spec.rb +1 -1
- data/react_on_rails_pro/spec/react_on_rails_pro/configuration_spec.rb +5 -3
- data/react_on_rails_pro/spec/react_on_rails_pro/license_validator_spec.rb +27 -12
- data/react_on_rails_pro/spec/react_on_rails_pro/request_spec.rb +0 -27
- data/react_on_rails_pro/spec/react_on_rails_pro/spec_helper.rb +1 -1
- data/react_on_rails_pro/spec/react_on_rails_pro/stream_decorator_spec.rb +89 -0
- data/react_on_rails_pro/spec/react_on_rails_pro/stream_spec.rb +144 -0
- data/react_on_rails_pro/spec/react_on_rails_pro/support/caching.rb +1 -1
- data/react_on_rails_pro/spec/react_on_rails_pro/support/mock_block_helper.rb +4 -2
- data/sig/react_on_rails/controller.rbs +1 -1
- data/sig/react_on_rails/error.rbs +4 -0
- data/sig/react_on_rails/helper.rbs +2 -2
- data/sig/react_on_rails/json_parse_error.rbs +10 -0
- data/sig/react_on_rails/prerender_error.rbs +21 -0
- data/sig/react_on_rails/smart_error.rbs +28 -0
- data/sig/react_on_rails.rbs +3 -24
- metadata +14 -4
- data/lib/react_on_rails/pro_utils.rb +0 -37
- data/react_on_rails_pro/spec/dummy/client/app/ror-auto-load-components/TestingStreamableComponent.jsx +0 -15
|
@@ -21,7 +21,7 @@ module ReactOnRails
|
|
|
21
21
|
# Returns html_safe string (ActiveSupport::SafeBuffer)
|
|
22
22
|
def redux_store: (
|
|
23
23
|
String store_name,
|
|
24
|
-
?Hash[Symbol, untyped] props
|
|
24
|
+
?Hash[Symbol, untyped] | String props
|
|
25
25
|
) -> safe_buffer
|
|
26
26
|
|
|
27
27
|
# Returns html_safe string (ActiveSupport::SafeBuffer)
|
|
@@ -33,7 +33,7 @@ module ReactOnRails
|
|
|
33
33
|
?Hash[Symbol, untyped] options
|
|
34
34
|
) -> safe_buffer
|
|
35
35
|
|
|
36
|
-
def sanitized_props_string: (untyped props) -> String
|
|
36
|
+
def sanitized_props_string: (Hash[Symbol, untyped] | String props) -> String
|
|
37
37
|
|
|
38
38
|
def rails_context: (
|
|
39
39
|
?server_side: bool
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module ReactOnRails
|
|
2
|
+
class JsonParseError < ::ReactOnRails::Error
|
|
3
|
+
attr_reader json: String
|
|
4
|
+
|
|
5
|
+
def initialize: (parse_error: StandardError, json: String) -> void
|
|
6
|
+
def to_honeybadger_context: () -> Hash[Symbol, untyped]
|
|
7
|
+
def raven_context: () -> Hash[Symbol, untyped]
|
|
8
|
+
def to_error_context: () -> Hash[Symbol, untyped]
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module ReactOnRails
|
|
2
|
+
class PrerenderError < ::ReactOnRails::Error
|
|
3
|
+
MAX_ERROR_SNIPPET_TO_LOG: Integer
|
|
4
|
+
|
|
5
|
+
attr_reader component_name: String?
|
|
6
|
+
attr_reader err: StandardError?
|
|
7
|
+
attr_reader props: String?
|
|
8
|
+
attr_reader js_code: String?
|
|
9
|
+
attr_reader console_messages: String?
|
|
10
|
+
|
|
11
|
+
def initialize: (?component_name: String?, ?err: StandardError?, ?props: String?, ?js_code: String?, ?console_messages: String?) -> void
|
|
12
|
+
def to_honeybadger_context: () -> Hash[Symbol, untyped]
|
|
13
|
+
def raven_context: () -> Hash[Symbol, untyped]
|
|
14
|
+
def to_error_context: () -> Hash[Symbol, untyped]
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def calc_message: (String? component_name, String? console_messages, StandardError? err, String? js_code, String? props) -> [String?, String]
|
|
19
|
+
def build_troubleshooting_suggestions: (String? component_name, StandardError? err, String? console_messages) -> String
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module ReactOnRails
|
|
2
|
+
class SmartError < Error
|
|
3
|
+
attr_reader error_type: Symbol
|
|
4
|
+
attr_reader component_name: String?
|
|
5
|
+
attr_reader props: String?
|
|
6
|
+
attr_reader js_code: String?
|
|
7
|
+
attr_reader additional_context: Hash[Symbol, untyped]
|
|
8
|
+
|
|
9
|
+
def initialize: (error_type: Symbol, ?component_name: String?, ?props: String?, ?js_code: String?, **untyped additional_context) -> void
|
|
10
|
+
def solution: () -> String
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def build_error_message: () -> String
|
|
15
|
+
def error_type_title: () -> String
|
|
16
|
+
def error_description: () -> String
|
|
17
|
+
def component_not_registered_solution: () -> String
|
|
18
|
+
def missing_auto_loaded_bundle_solution: () -> String
|
|
19
|
+
def hydration_mismatch_solution: () -> String
|
|
20
|
+
def server_rendering_error_solution: () -> String
|
|
21
|
+
def redux_store_not_found_solution: () -> String
|
|
22
|
+
def configuration_error_solution: () -> String
|
|
23
|
+
def default_solution: () -> String
|
|
24
|
+
def additional_info: () -> String
|
|
25
|
+
def troubleshooting_section: () -> String
|
|
26
|
+
def find_similar_components: (String name) -> Array[String]
|
|
27
|
+
end
|
|
28
|
+
end
|
data/sig/react_on_rails.rbs
CHANGED
|
@@ -9,30 +9,9 @@ module ReactOnRails
|
|
|
9
9
|
def self.configure: () { (Configuration) -> void } -> void
|
|
10
10
|
def self.configuration: () -> Configuration
|
|
11
11
|
|
|
12
|
+
# Error classes are defined in separate RBS files:
|
|
13
|
+
# - sig/react_on_rails/prerender_error.rbs
|
|
14
|
+
# - sig/react_on_rails/json_parse_error.rbs
|
|
12
15
|
class Error < StandardError
|
|
13
16
|
end
|
|
14
|
-
|
|
15
|
-
class PrerenderError < Error
|
|
16
|
-
attr_reader component_name: String?
|
|
17
|
-
attr_reader js_code: String?
|
|
18
|
-
attr_reader err: Hash[Symbol, untyped]?
|
|
19
|
-
attr_reader props: (Hash[Symbol, untyped] | String)?
|
|
20
|
-
attr_reader console_messages: Array[String]?
|
|
21
|
-
|
|
22
|
-
def initialize: (
|
|
23
|
-
?component_name: String?,
|
|
24
|
-
?js_code: String?,
|
|
25
|
-
?err: Hash[Symbol, untyped]?,
|
|
26
|
-
?props: (Hash[Symbol, untyped] | String)?,
|
|
27
|
-
?console_messages: Array[String]?
|
|
28
|
-
) -> void
|
|
29
|
-
|
|
30
|
-
def to_honeybadger_context: () -> Hash[Symbol, untyped]
|
|
31
|
-
def raven_context: () -> Hash[Symbol, untyped]
|
|
32
|
-
def to_error_context: () -> Hash[Symbol, untyped]
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
class JsonParseError < Error
|
|
36
|
-
def initialize: (Hash[Symbol, untyped] err) -> void
|
|
37
|
-
end
|
|
38
17
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: react_on_rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 16.2.0.beta.
|
|
4
|
+
version: 16.2.0.beta.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Justin Gordon
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-11-
|
|
11
|
+
date: 2025-11-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: addressable
|
|
@@ -137,6 +137,7 @@ files:
|
|
|
137
137
|
- Rakefile
|
|
138
138
|
- SUMMARY.md
|
|
139
139
|
- SWITCHING_CI_CONFIGS.md
|
|
140
|
+
- Steepfile
|
|
140
141
|
- TODO.md
|
|
141
142
|
- WARP.md
|
|
142
143
|
- app/helpers/react_on_rails_helper.rb
|
|
@@ -243,7 +244,6 @@ files:
|
|
|
243
244
|
- lib/react_on_rails/packs_generator.rb
|
|
244
245
|
- lib/react_on_rails/prerender_error.rb
|
|
245
246
|
- lib/react_on_rails/pro_helper.rb
|
|
246
|
-
- lib/react_on_rails/pro_utils.rb
|
|
247
247
|
- lib/react_on_rails/react_component/render_options.rb
|
|
248
248
|
- lib/react_on_rails/server_rendering_js_code.rb
|
|
249
249
|
- lib/react_on_rails/server_rendering_pool.rb
|
|
@@ -378,6 +378,7 @@ files:
|
|
|
378
378
|
- react_on_rails_pro/packages/node-renderer/src/worker.ts
|
|
379
379
|
- react_on_rails_pro/packages/node-renderer/src/worker/authHandler.ts
|
|
380
380
|
- react_on_rails_pro/packages/node-renderer/src/worker/checkProtocolVersionHandler.ts
|
|
381
|
+
- react_on_rails_pro/packages/node-renderer/src/worker/handleGracefulShutdown.ts
|
|
381
382
|
- react_on_rails_pro/packages/node-renderer/src/worker/handleRenderRequest.ts
|
|
382
383
|
- react_on_rails_pro/packages/node-renderer/src/worker/types.ts
|
|
383
384
|
- react_on_rails_pro/packages/node-renderer/src/worker/vm.ts
|
|
@@ -430,6 +431,7 @@ files:
|
|
|
430
431
|
- react_on_rails_pro/rakelib/dummy_apps.rake
|
|
431
432
|
- react_on_rails_pro/rakelib/lint.rake
|
|
432
433
|
- react_on_rails_pro/rakelib/public_key_management.rake
|
|
434
|
+
- react_on_rails_pro/rakelib/rbs.rake
|
|
433
435
|
- react_on_rails_pro/rakelib/run_rspec.rake
|
|
434
436
|
- react_on_rails_pro/rakelib/task_helpers.rb
|
|
435
437
|
- react_on_rails_pro/rakelib/yard.rake
|
|
@@ -439,6 +441,11 @@ files:
|
|
|
439
441
|
- react_on_rails_pro/script/preinstall.js
|
|
440
442
|
- react_on_rails_pro/script/setup
|
|
441
443
|
- react_on_rails_pro/script/test
|
|
444
|
+
- react_on_rails_pro/sig/react_on_rails_pro.rbs
|
|
445
|
+
- react_on_rails_pro/sig/react_on_rails_pro/cache.rbs
|
|
446
|
+
- react_on_rails_pro/sig/react_on_rails_pro/configuration.rbs
|
|
447
|
+
- react_on_rails_pro/sig/react_on_rails_pro/error.rbs
|
|
448
|
+
- react_on_rails_pro/sig/react_on_rails_pro/utils.rbs
|
|
442
449
|
- react_on_rails_pro/spec/.rubocop.yml
|
|
443
450
|
- react_on_rails_pro/spec/dummy/.browserslistrc
|
|
444
451
|
- react_on_rails_pro/spec/dummy/.gitignore
|
|
@@ -749,7 +756,6 @@ files:
|
|
|
749
756
|
- react_on_rails_pro/spec/dummy/client/app/ror-auto-load-components/SetTimeoutLoggingApp.server.jsx
|
|
750
757
|
- react_on_rails_pro/spec/dummy/client/app/ror-auto-load-components/SimpleComponent.jsx
|
|
751
758
|
- react_on_rails_pro/spec/dummy/client/app/ror-auto-load-components/StreamAsyncComponents.jsx
|
|
752
|
-
- react_on_rails_pro/spec/dummy/client/app/ror-auto-load-components/TestingStreamableComponent.jsx
|
|
753
759
|
- react_on_rails_pro/spec/dummy/client/app/routes/routes.jsx
|
|
754
760
|
- react_on_rails_pro/spec/dummy/client/app/ssr-computations/userQuery.ssr-computation.ts
|
|
755
761
|
- react_on_rails_pro/spec/dummy/client/app/store/composeInitialState.js
|
|
@@ -966,10 +972,14 @@ files:
|
|
|
966
972
|
- sig/react_on_rails.rbs
|
|
967
973
|
- sig/react_on_rails/configuration.rbs
|
|
968
974
|
- sig/react_on_rails/controller.rbs
|
|
975
|
+
- sig/react_on_rails/error.rbs
|
|
969
976
|
- sig/react_on_rails/git_utils.rbs
|
|
970
977
|
- sig/react_on_rails/helper.rbs
|
|
978
|
+
- sig/react_on_rails/json_parse_error.rbs
|
|
971
979
|
- sig/react_on_rails/packer_utils.rbs
|
|
980
|
+
- sig/react_on_rails/prerender_error.rbs
|
|
972
981
|
- sig/react_on_rails/server_rendering_pool.rbs
|
|
982
|
+
- sig/react_on_rails/smart_error.rbs
|
|
973
983
|
- sig/react_on_rails/test_helper.rbs
|
|
974
984
|
- sig/react_on_rails/utils.rbs
|
|
975
985
|
- sig/react_on_rails/version_checker.rbs
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module ReactOnRails
|
|
4
|
-
module ProUtils
|
|
5
|
-
PRO_ONLY_OPTIONS = %i[immediate_hydration].freeze
|
|
6
|
-
|
|
7
|
-
# Checks if React on Rails Pro features are available
|
|
8
|
-
# @return [Boolean] true if Pro is installed and licensed, false otherwise
|
|
9
|
-
def self.support_pro_features?
|
|
10
|
-
ReactOnRails::Utils.react_on_rails_pro?
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def self.disable_pro_render_options_if_not_licensed(raw_options)
|
|
14
|
-
if support_pro_features?
|
|
15
|
-
return {
|
|
16
|
-
raw_options: raw_options,
|
|
17
|
-
explicitly_disabled_pro_options: []
|
|
18
|
-
}
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
raw_options_after_disable = raw_options.dup
|
|
22
|
-
|
|
23
|
-
explicitly_disabled_pro_options = PRO_ONLY_OPTIONS.select do |option|
|
|
24
|
-
# Use global configuration if it's not overridden in the options
|
|
25
|
-
next ReactOnRails.configuration.send(option) if raw_options[option].nil?
|
|
26
|
-
|
|
27
|
-
raw_options[option]
|
|
28
|
-
end
|
|
29
|
-
explicitly_disabled_pro_options.each { |option| raw_options_after_disable[option] = false }
|
|
30
|
-
|
|
31
|
-
{
|
|
32
|
-
raw_options: raw_options_after_disable,
|
|
33
|
-
explicitly_disabled_pro_options: explicitly_disabled_pro_options
|
|
34
|
-
}
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React from 'react';
|
|
4
|
-
|
|
5
|
-
// Simple test component for streaming SSR tests
|
|
6
|
-
function TestingStreamableComponent({ helloWorldData }) {
|
|
7
|
-
return (
|
|
8
|
-
<div>
|
|
9
|
-
<div>Chunk 1: Stream React Server Components</div>
|
|
10
|
-
<div>Hello, {helloWorldData.name}!</div>
|
|
11
|
-
</div>
|
|
12
|
-
);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export default TestingStreamableComponent;
|