react_on_rails 16.1.2 → 16.2.0
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/.rspec +2 -0
- data/.rubocop.yml +85 -0
- data/Gemfile.development_dependencies +8 -7
- data/Gemfile.lock +158 -119
- data/Steepfile +56 -0
- data/lib/generators/react_on_rails/base_generator.rb +43 -120
- data/lib/generators/react_on_rails/dev_tests_generator.rb +2 -1
- data/lib/generators/react_on_rails/generator_helper.rb +102 -2
- data/lib/generators/react_on_rails/install_generator.rb +36 -156
- data/lib/generators/react_on_rails/js_dependency_manager.rb +383 -0
- data/lib/generators/react_on_rails/templates/base/base/.dev-services.yml.example +76 -0
- data/lib/generators/react_on_rails/templates/base/base/bin/shakapacker-precompile-hook +30 -0
- data/lib/generators/react_on_rails/templates/base/base/bin/switch-bundler +141 -0
- data/lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb.tt +44 -45
- data/lib/generators/react_on_rails/templates/base/base/config/{shakapacker.yml → shakapacker.yml.tt} +28 -3
- data/lib/generators/react_on_rails/templates/base/base/config/webpack/development.js.tt +15 -9
- data/lib/generators/react_on_rails/templates/base/base/config/webpack/serverWebpackConfig.js.tt +42 -6
- data/lib/react_on_rails/configuration.rb +149 -32
- data/lib/react_on_rails/controller.rb +3 -3
- data/lib/react_on_rails/dev/pack_generator.rb +168 -2
- data/lib/react_on_rails/dev/process_manager.rb +136 -14
- data/lib/react_on_rails/dev/server_manager.rb +194 -26
- data/lib/react_on_rails/dev/service_checker.rb +200 -0
- data/lib/react_on_rails/doctor.rb +341 -12
- data/lib/react_on_rails/engine.rb +75 -1
- data/lib/react_on_rails/git_utils.rb +3 -1
- data/lib/react_on_rails/helper.rb +70 -192
- data/lib/react_on_rails/locales/base.rb +17 -5
- data/lib/react_on_rails/packer_utils.rb +79 -2
- data/lib/react_on_rails/packs_generator.rb +57 -39
- data/lib/react_on_rails/prerender_error.rb +74 -17
- data/lib/react_on_rails/pro_helper.rb +64 -0
- data/lib/react_on_rails/react_component/render_options.rb +7 -7
- data/lib/react_on_rails/server_rendering_pool/ruby_embedded_java_script.rb +2 -5
- data/lib/react_on_rails/smart_error.rb +326 -0
- data/lib/react_on_rails/system_checker.rb +8 -9
- data/lib/react_on_rails/test_helper/webpack_assets_status_checker.rb +16 -7
- data/lib/react_on_rails/utils.rb +241 -55
- data/lib/react_on_rails/version.rb +1 -1
- data/lib/react_on_rails/version_checker.rb +383 -35
- data/lib/tasks/generate_packs.rake +12 -6
- data/lib/tasks/locale.rake +6 -1
- data/rakelib/docker.rake +26 -0
- data/rakelib/dummy_apps.rake +30 -0
- data/rakelib/example_type.rb +121 -0
- data/rakelib/examples_config.yml +52 -0
- data/rakelib/lint.rake +52 -0
- data/rakelib/node_package.rake +15 -0
- data/rakelib/rbs.rake +70 -0
- data/rakelib/run_rspec.rake +223 -0
- data/rakelib/shakapacker_examples.rake +171 -0
- data/rakelib/task_helpers.rb +134 -0
- data/rakelib/update_changelog.rake +73 -0
- data/react_on_rails.gemspec +4 -3
- data/sig/README.md +52 -0
- data/sig/react_on_rails/configuration.rbs +96 -0
- data/sig/react_on_rails/controller.rbs +15 -0
- data/sig/react_on_rails/dev/file_manager.rbs +15 -0
- data/sig/react_on_rails/dev/pack_generator.rbs +19 -0
- data/sig/react_on_rails/dev/process_manager.rbs +22 -0
- data/sig/react_on_rails/dev/server_manager.rbs +39 -0
- data/sig/react_on_rails/dev/service_checker.rbs +22 -0
- data/sig/react_on_rails/error.rbs +4 -0
- data/sig/react_on_rails/generators/js_dependency_manager.rbs +123 -0
- data/sig/react_on_rails/git_utils.rbs +8 -0
- data/sig/react_on_rails/helper.rbs +65 -0
- data/sig/react_on_rails/json_parse_error.rbs +10 -0
- data/sig/react_on_rails/locales.rbs +46 -0
- data/sig/react_on_rails/packer_utils.rbs +15 -0
- data/sig/react_on_rails/prerender_error.rbs +21 -0
- data/sig/react_on_rails/server_rendering_pool.rbs +12 -0
- data/sig/react_on_rails/smart_error.rbs +28 -0
- data/sig/react_on_rails/test_helper.rbs +11 -0
- data/sig/react_on_rails/utils.rbs +34 -0
- data/sig/react_on_rails/version_checker.rbs +12 -0
- data/sig/react_on_rails.rbs +17 -0
- metadata +49 -32
- data/AI_AGENT_INSTRUCTIONS.md +0 -63
- data/CHANGELOG.md +0 -1836
- data/CLAUDE.md +0 -135
- data/CODING_AGENTS.md +0 -313
- data/CONTRIBUTING.md +0 -668
- data/Dockerfile_tests +0 -12
- data/KUDOS.md +0 -114
- data/LICENSE.md +0 -47
- data/LICENSES/README.md +0 -14
- data/NEWS.md +0 -62
- data/PROJECTS.md +0 -63
- data/REACT-ON-RAILS-PRO-LICENSE.md +0 -129
- data/README.md +0 -217
- data/SUMMARY.md +0 -88
- data/TODO.md +0 -135
- data/bin/lefthook/check-trailing-newlines +0 -38
- data/bin/lefthook/get-changed-files +0 -26
- data/bin/lefthook/prettier-format +0 -26
- data/bin/lefthook/ruby-autofix +0 -26
- data/bin/lefthook/ruby-lint +0 -27
- data/docker-compose.yml +0 -11
- data/eslint.config.ts +0 -232
- data/knip.ts +0 -114
- data/lib/react_on_rails/pro/NOTICE +0 -21
- data/lib/react_on_rails/pro/helper.rb +0 -122
- data/lib/react_on_rails/pro/utils.rb +0 -53
- data/tsconfig.eslint.json +0 -6
- data/tsconfig.json +0 -19
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module ReactOnRails
|
|
2
|
+
module Dev
|
|
3
|
+
class ServiceChecker
|
|
4
|
+
def self.check_services: (?config_path: String) -> bool
|
|
5
|
+
|
|
6
|
+
private
|
|
7
|
+
|
|
8
|
+
def self.config_has_services?: (Hash[String, untyped]?) -> bool
|
|
9
|
+
def self.check_and_report_services: (Hash[String, untyped], String) -> bool
|
|
10
|
+
def self.collect_service_failures: (Hash[String, untyped]) -> Array[Hash[Symbol, untyped]]
|
|
11
|
+
def self.report_results: (Array[Hash[Symbol, untyped]]) -> bool
|
|
12
|
+
def self.load_config: (String) -> Hash[String, untyped]?
|
|
13
|
+
def self.check_service: (String, Hash[String, untyped]) -> bool
|
|
14
|
+
def self.run_check_command: (String) -> [String, Process::Status?]
|
|
15
|
+
def self.print_services_header: (String) -> void
|
|
16
|
+
def self.print_service_ok: (String, String?) -> void
|
|
17
|
+
def self.print_service_failed: (String, String?) -> void
|
|
18
|
+
def self.print_all_services_ok: () -> void
|
|
19
|
+
def self.print_failures_summary: (Array[Hash[Symbol, untyped]]) -> void
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ReactOnRails
|
|
4
|
+
module Generators
|
|
5
|
+
# Type signatures for JsDependencyManager module
|
|
6
|
+
#
|
|
7
|
+
# This module provides common functionality for managing JavaScript dependencies
|
|
8
|
+
# in Rails generators using the package_json gem (available via shakapacker).
|
|
9
|
+
module JsDependencyManager
|
|
10
|
+
# Core React dependencies required for React on Rails
|
|
11
|
+
REACT_DEPENDENCIES: Array[String]
|
|
12
|
+
|
|
13
|
+
# CSS processing dependencies for webpack
|
|
14
|
+
CSS_DEPENDENCIES: Array[String]
|
|
15
|
+
|
|
16
|
+
# Development-only dependencies for hot reloading (Webpack)
|
|
17
|
+
DEV_DEPENDENCIES: Array[String]
|
|
18
|
+
|
|
19
|
+
# Rspack core dependencies (only installed when --rspack flag is used)
|
|
20
|
+
RSPACK_DEPENDENCIES: Array[String]
|
|
21
|
+
|
|
22
|
+
# Rspack development dependencies for hot reloading
|
|
23
|
+
RSPACK_DEV_DEPENDENCIES: Array[String]
|
|
24
|
+
|
|
25
|
+
# TypeScript dependencies (only installed when --typescript flag is used)
|
|
26
|
+
TYPESCRIPT_DEPENDENCIES: Array[String]
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
# Sets up JavaScript dependencies by adding and installing packages
|
|
31
|
+
#
|
|
32
|
+
# This method orchestrates the entire dependency setup process:
|
|
33
|
+
# 1. Adds all required packages to package.json
|
|
34
|
+
# 2. Runs package manager install
|
|
35
|
+
#
|
|
36
|
+
# @return [void]
|
|
37
|
+
def setup_js_dependencies: () -> void
|
|
38
|
+
|
|
39
|
+
# Adds all JavaScript dependencies to package.json
|
|
40
|
+
#
|
|
41
|
+
# This method calls individual add_*_dependencies methods in sequence.
|
|
42
|
+
# All errors are handled gracefully with warnings rather than exceptions.
|
|
43
|
+
#
|
|
44
|
+
# @return [void]
|
|
45
|
+
def add_js_dependencies: () -> void
|
|
46
|
+
|
|
47
|
+
# Adds the react-on-rails package to package.json
|
|
48
|
+
#
|
|
49
|
+
# Uses version matching for stable releases, or latest for pre-releases.
|
|
50
|
+
# Adds error message to GeneratorMessages if package addition fails.
|
|
51
|
+
#
|
|
52
|
+
# @return [void]
|
|
53
|
+
def add_react_on_rails_package: () -> void
|
|
54
|
+
|
|
55
|
+
# Adds React dependencies to package.json
|
|
56
|
+
#
|
|
57
|
+
# Adds error message to GeneratorMessages if package addition fails.
|
|
58
|
+
#
|
|
59
|
+
# @return [void]
|
|
60
|
+
def add_react_dependencies: () -> void
|
|
61
|
+
|
|
62
|
+
# Adds CSS processing dependencies to package.json
|
|
63
|
+
#
|
|
64
|
+
# Adds error message to GeneratorMessages if package addition fails.
|
|
65
|
+
#
|
|
66
|
+
# @return [void]
|
|
67
|
+
def add_css_dependencies: () -> void
|
|
68
|
+
|
|
69
|
+
# Adds Rspack dependencies to package.json
|
|
70
|
+
#
|
|
71
|
+
# Only called when --rspack flag is set.
|
|
72
|
+
# Adds error message to GeneratorMessages if package addition fails.
|
|
73
|
+
#
|
|
74
|
+
# @return [void]
|
|
75
|
+
def add_rspack_dependencies: () -> void
|
|
76
|
+
|
|
77
|
+
# Adds TypeScript dependencies to package.json as dev dependencies
|
|
78
|
+
#
|
|
79
|
+
# Only called when --typescript flag is set.
|
|
80
|
+
# Adds error message to GeneratorMessages if package addition fails.
|
|
81
|
+
#
|
|
82
|
+
# @return [void]
|
|
83
|
+
def add_typescript_dependencies: () -> void
|
|
84
|
+
|
|
85
|
+
# Adds development dependencies to package.json
|
|
86
|
+
#
|
|
87
|
+
# Chooses between Webpack or Rspack dev dependencies based on --rspack flag.
|
|
88
|
+
# Adds error message to GeneratorMessages if package addition fails.
|
|
89
|
+
#
|
|
90
|
+
# @return [void]
|
|
91
|
+
def add_dev_dependencies: () -> void
|
|
92
|
+
|
|
93
|
+
# Adds a single package using package_json gem
|
|
94
|
+
#
|
|
95
|
+
# This method is used internally for adding the react-on-rails package
|
|
96
|
+
# with version-specific handling (react-on-rails@VERSION).
|
|
97
|
+
# For batch operations, use add_packages instead.
|
|
98
|
+
#
|
|
99
|
+
# @param package [String] Package specifier (e.g., "react-on-rails@16.0.0")
|
|
100
|
+
# @param dev [bool] Whether to add as dev dependency
|
|
101
|
+
# @return [bool] true if successful, false otherwise
|
|
102
|
+
def add_package: (String package, ?dev: bool) -> bool
|
|
103
|
+
|
|
104
|
+
# Adds multiple packages at once using package_json gem
|
|
105
|
+
#
|
|
106
|
+
# Delegates to GeneratorHelper's add_npm_dependencies for better
|
|
107
|
+
# package manager abstraction and batch processing efficiency.
|
|
108
|
+
#
|
|
109
|
+
# @param packages [Array<String>] Package names to add
|
|
110
|
+
# @param dev [bool] Whether to add as dev dependencies
|
|
111
|
+
# @return [bool] true if successful, false otherwise
|
|
112
|
+
def add_packages: (Array[String] packages, ?dev: bool) -> bool
|
|
113
|
+
|
|
114
|
+
# Installs JavaScript dependencies using package_json gem
|
|
115
|
+
#
|
|
116
|
+
# Always available via shakapacker dependency chain.
|
|
117
|
+
# Adds warning to GeneratorMessages if installation fails.
|
|
118
|
+
#
|
|
119
|
+
# @return [bool] true if successful, false otherwise
|
|
120
|
+
def install_js_dependencies: () -> bool
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
module ReactOnRails
|
|
2
|
+
module Helper
|
|
3
|
+
# Type alias for ActiveSupport::SafeBuffer (html_safe strings)
|
|
4
|
+
type safe_buffer = String
|
|
5
|
+
|
|
6
|
+
COMPONENT_HTML_KEY: String
|
|
7
|
+
|
|
8
|
+
# Main helper methods
|
|
9
|
+
# Returns html_safe string (ActiveSupport::SafeBuffer)
|
|
10
|
+
def react_component: (
|
|
11
|
+
String component_name,
|
|
12
|
+
?Hash[Symbol, untyped] options
|
|
13
|
+
) ?{ () -> untyped } -> safe_buffer
|
|
14
|
+
|
|
15
|
+
# Returns hash with html_safe strings (ActiveSupport::SafeBuffer)
|
|
16
|
+
def react_component_hash: (
|
|
17
|
+
String component_name,
|
|
18
|
+
?Hash[Symbol, untyped] options
|
|
19
|
+
) ?{ () -> untyped } -> Hash[String, safe_buffer]
|
|
20
|
+
|
|
21
|
+
# Returns html_safe string (ActiveSupport::SafeBuffer)
|
|
22
|
+
def redux_store: (
|
|
23
|
+
String store_name,
|
|
24
|
+
?Hash[Symbol, untyped] | String props
|
|
25
|
+
) -> safe_buffer
|
|
26
|
+
|
|
27
|
+
# Returns html_safe string (ActiveSupport::SafeBuffer)
|
|
28
|
+
def redux_store_hydration_data: () -> safe_buffer
|
|
29
|
+
|
|
30
|
+
# Returns html_safe string (ActiveSupport::SafeBuffer)
|
|
31
|
+
def server_render_js: (
|
|
32
|
+
String js_expression,
|
|
33
|
+
?Hash[Symbol, untyped] options
|
|
34
|
+
) -> safe_buffer
|
|
35
|
+
|
|
36
|
+
def sanitized_props_string: (Hash[Symbol, untyped] | String props) -> String
|
|
37
|
+
|
|
38
|
+
def rails_context: (
|
|
39
|
+
?server_side: bool
|
|
40
|
+
) -> Hash[Symbol, untyped]
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
def internal_react_component: (
|
|
45
|
+
String component_name,
|
|
46
|
+
Hash[Symbol, untyped] options
|
|
47
|
+
) ?{ () -> untyped } -> Hash[Symbol, untyped]
|
|
48
|
+
|
|
49
|
+
def build_react_component_result_for_server_rendered_string: (
|
|
50
|
+
server_rendered_html: String,
|
|
51
|
+
component_specification_tag: String,
|
|
52
|
+
console_script: String,
|
|
53
|
+
render_options: Hash[Symbol, untyped]
|
|
54
|
+
) -> safe_buffer
|
|
55
|
+
|
|
56
|
+
def build_react_component_result_for_server_rendered_hash: (
|
|
57
|
+
server_rendered_html: Hash[String, untyped],
|
|
58
|
+
component_specification_tag: String,
|
|
59
|
+
console_script: String,
|
|
60
|
+
render_options: Hash[Symbol, untyped]
|
|
61
|
+
) -> Hash[String, safe_buffer]
|
|
62
|
+
|
|
63
|
+
def prepend_render_rails_context: (String result) -> safe_buffer
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -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,46 @@
|
|
|
1
|
+
module ReactOnRails
|
|
2
|
+
module Locales
|
|
3
|
+
def self.compile: (?force: bool) -> (ToJs | ToJson)
|
|
4
|
+
def self.check_config_directory_exists: (directory: String?, key_name: String, remove_if: String) -> void
|
|
5
|
+
|
|
6
|
+
class Base
|
|
7
|
+
def initialize: (?force: bool) -> void
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def file_format: () -> String?
|
|
12
|
+
def obsolete?: () -> bool
|
|
13
|
+
def exist_files: () -> Array[String]
|
|
14
|
+
def files_are_outdated: () -> bool
|
|
15
|
+
def file_names: () -> Array[String]
|
|
16
|
+
def files: () -> Array[String]
|
|
17
|
+
def file: (String name) -> String
|
|
18
|
+
def locale_files: () -> Array[String]
|
|
19
|
+
def i18n_dir: () -> String?
|
|
20
|
+
def i18n_yml_dir: () -> String?
|
|
21
|
+
def default_locale: () -> String
|
|
22
|
+
def convert: () -> void
|
|
23
|
+
def generate_file: (String template, String path) -> void
|
|
24
|
+
def generate_translations: () -> [String, String]
|
|
25
|
+
def format: (untyped input) -> Symbol
|
|
26
|
+
def flatten_defaults: (Hash[untyped, untyped] val) -> Hash[Symbol, Hash[Symbol, untyped]]
|
|
27
|
+
def flatten: (Hash[untyped, untyped] translations) -> Hash[Symbol, untyped]
|
|
28
|
+
def template_translations: () -> String
|
|
29
|
+
def template_default: () -> String
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class ToJs < Base
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def file_format: () -> String
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
class ToJson < Base
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
def file_format: () -> String
|
|
42
|
+
def template_translations: () -> String
|
|
43
|
+
def template_default: () -> String
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module ReactOnRails
|
|
2
|
+
module PackerUtils
|
|
3
|
+
def self.supports_autobundling?: () -> bool
|
|
4
|
+
def self.supports_basic_pack_generation?: () -> bool
|
|
5
|
+
def self.supports_async_loading?: () -> bool
|
|
6
|
+
def self.nested_entries?: () -> bool
|
|
7
|
+
def self.packer_public_output_path: () -> String
|
|
8
|
+
def self.precompile?: () -> bool
|
|
9
|
+
def self.shakapacker_precompile_hook_configured?: () -> bool
|
|
10
|
+
def self.shakapacker_precompile_hook_value: () -> String
|
|
11
|
+
def self.raise_shakapacker_version_incompatible_for_autobundling: () -> void
|
|
12
|
+
def self.raise_shakapacker_version_incompatible_for_basic_pack_generation: () -> void
|
|
13
|
+
def self.raise_nested_entries_disabled: () -> void
|
|
14
|
+
end
|
|
15
|
+
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,12 @@
|
|
|
1
|
+
module ReactOnRails
|
|
2
|
+
module ServerRenderingPool
|
|
3
|
+
def self.pool: () -> untyped
|
|
4
|
+
|
|
5
|
+
def self.reset_pool_if_server_bundle_was_modified: () -> void
|
|
6
|
+
def self.reset_pool: () -> void
|
|
7
|
+
def self.server_render_js_with_console_logging: (
|
|
8
|
+
String js_code,
|
|
9
|
+
Hash[Symbol, untyped] render_options
|
|
10
|
+
) -> Hash[String, untyped]
|
|
11
|
+
end
|
|
12
|
+
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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module ReactOnRails
|
|
2
|
+
module TestHelper
|
|
3
|
+
def self.configure_rspec_to_compile_assets: (untyped config) -> void
|
|
4
|
+
def self.ensure_assets_compiled: (?force_compile: bool) -> void
|
|
5
|
+
def self.webpack_assets_compiled?: () -> bool
|
|
6
|
+
|
|
7
|
+
module EnsureAssetsCompiled
|
|
8
|
+
def self.has_been_run?: () -> bool
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module ReactOnRails
|
|
2
|
+
module Utils
|
|
3
|
+
TRUNCATION_FILLER: String
|
|
4
|
+
|
|
5
|
+
def self.truthy_presence: (untyped obj) -> untyped
|
|
6
|
+
def self.wrap_message: (String msg, ?Symbol color) -> String
|
|
7
|
+
def self.object_to_boolean: (untyped value) -> bool
|
|
8
|
+
def self.server_rendering_is_enabled?: () -> bool
|
|
9
|
+
def self.invoke_and_exit_if_failed: (String cmd, String failure_message) -> Array[String]
|
|
10
|
+
def self.server_bundle_path_is_http?: () -> bool
|
|
11
|
+
def self.bundle_js_file_path: (String bundle_name) -> String
|
|
12
|
+
def self.react_on_rails_pro?: () -> bool
|
|
13
|
+
def self.react_on_rails_pro_version: () -> String?
|
|
14
|
+
def self.rsc_support_enabled?: () -> bool
|
|
15
|
+
def self.full_text_errors_enabled?: () -> bool
|
|
16
|
+
def self.smart_trim: (String str, ?Integer max_length) -> String
|
|
17
|
+
def self.find_most_recent_mtime: (Array[String] files) -> Time?
|
|
18
|
+
def self.prepend_to_file_if_text_not_present: (file: String, text_to_prepend: String, regex: Regexp) -> void
|
|
19
|
+
def self.detect_package_manager: () -> String
|
|
20
|
+
def self.default_troubleshooting_section: () -> String
|
|
21
|
+
def self.server_bundle_js_file_path: () -> String
|
|
22
|
+
def self.running_on_windows?: () -> bool
|
|
23
|
+
def self.rails_version_less_than: (String version) -> bool
|
|
24
|
+
def self.rails_version_less_than_4_1_1?: () -> bool
|
|
25
|
+
def self.source_path: () -> String
|
|
26
|
+
def self.public_bundles_full_path: () -> String
|
|
27
|
+
def self.generated_assets_full_path: () -> String
|
|
28
|
+
def self.gem_available?: (String name) -> bool
|
|
29
|
+
|
|
30
|
+
module Required
|
|
31
|
+
def required: (String name) -> untyped
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module ReactOnRails
|
|
2
|
+
module VersionChecker
|
|
3
|
+
def self.log_if_gem_and_node_package_versions_differ: () -> void
|
|
4
|
+
|
|
5
|
+
private
|
|
6
|
+
|
|
7
|
+
def self.node_package_version: () -> String?
|
|
8
|
+
def self.gem_version: () -> String
|
|
9
|
+
def self.node_package_version_different_from_gem?: () -> bool
|
|
10
|
+
def self.pr_1683_warning: () -> String
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Type signatures for ReactOnRails gem
|
|
2
|
+
|
|
3
|
+
module ReactOnRails
|
|
4
|
+
VERSION: String
|
|
5
|
+
|
|
6
|
+
DEFAULT_GENERATED_ASSETS_DIR: String
|
|
7
|
+
DEFAULT_COMPONENT_REGISTRY_TIMEOUT: Integer
|
|
8
|
+
|
|
9
|
+
def self.configure: () { (Configuration) -> void } -> void
|
|
10
|
+
def self.configuration: () -> Configuration
|
|
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
|
|
15
|
+
class Error < StandardError
|
|
16
|
+
end
|
|
17
|
+
end
|
metadata
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: react_on_rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 16.
|
|
4
|
+
version: 16.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Justin Gordon
|
|
8
|
+
autorequire:
|
|
8
9
|
bindir: exe
|
|
9
10
|
cert_chain: []
|
|
10
|
-
date:
|
|
11
|
+
date: 2026-01-15 00:00:00.000000000 Z
|
|
11
12
|
dependencies:
|
|
12
13
|
- !ruby/object:Gem::Dependency
|
|
13
14
|
name: addressable
|
|
@@ -114,34 +115,14 @@ executables: []
|
|
|
114
115
|
extensions: []
|
|
115
116
|
extra_rdoc_files: []
|
|
116
117
|
files:
|
|
117
|
-
-
|
|
118
|
-
-
|
|
119
|
-
- CLAUDE.md
|
|
120
|
-
- CODING_AGENTS.md
|
|
121
|
-
- CONTRIBUTING.md
|
|
122
|
-
- Dockerfile_tests
|
|
118
|
+
- ".rspec"
|
|
119
|
+
- ".rubocop.yml"
|
|
123
120
|
- Gemfile
|
|
124
121
|
- Gemfile.development_dependencies
|
|
125
122
|
- Gemfile.lock
|
|
126
|
-
- KUDOS.md
|
|
127
|
-
- LICENSE.md
|
|
128
|
-
- LICENSES/README.md
|
|
129
|
-
- NEWS.md
|
|
130
|
-
- PROJECTS.md
|
|
131
|
-
- REACT-ON-RAILS-PRO-LICENSE.md
|
|
132
|
-
- README.md
|
|
133
123
|
- Rakefile
|
|
134
|
-
-
|
|
135
|
-
- TODO.md
|
|
124
|
+
- Steepfile
|
|
136
125
|
- app/helpers/react_on_rails_helper.rb
|
|
137
|
-
- bin/lefthook/check-trailing-newlines
|
|
138
|
-
- bin/lefthook/get-changed-files
|
|
139
|
-
- bin/lefthook/prettier-format
|
|
140
|
-
- bin/lefthook/ruby-autofix
|
|
141
|
-
- bin/lefthook/ruby-lint
|
|
142
|
-
- docker-compose.yml
|
|
143
|
-
- eslint.config.ts
|
|
144
|
-
- knip.ts
|
|
145
126
|
- lib/generators/USAGE
|
|
146
127
|
- lib/generators/react_on_rails/USAGE
|
|
147
128
|
- lib/generators/react_on_rails/base_generator.rb
|
|
@@ -149,9 +130,11 @@ files:
|
|
|
149
130
|
- lib/generators/react_on_rails/generator_helper.rb
|
|
150
131
|
- lib/generators/react_on_rails/generator_messages.rb
|
|
151
132
|
- lib/generators/react_on_rails/install_generator.rb
|
|
133
|
+
- lib/generators/react_on_rails/js_dependency_manager.rb
|
|
152
134
|
- lib/generators/react_on_rails/react_no_redux_generator.rb
|
|
153
135
|
- lib/generators/react_on_rails/react_with_redux_generator.rb
|
|
154
136
|
- lib/generators/react_on_rails/templates/.eslintrc
|
|
137
|
+
- lib/generators/react_on_rails/templates/base/base/.dev-services.yml.example
|
|
155
138
|
- lib/generators/react_on_rails/templates/base/base/Procfile.dev
|
|
156
139
|
- lib/generators/react_on_rails/templates/base/base/Procfile.dev-prod-assets
|
|
157
140
|
- lib/generators/react_on_rails/templates/base/base/Procfile.dev-static-assets
|
|
@@ -169,8 +152,10 @@ files:
|
|
|
169
152
|
- lib/generators/react_on_rails/templates/base/base/app/views/layouts/hello_world.html.erb
|
|
170
153
|
- lib/generators/react_on_rails/templates/base/base/babel.config.js.tt
|
|
171
154
|
- lib/generators/react_on_rails/templates/base/base/bin/dev
|
|
155
|
+
- lib/generators/react_on_rails/templates/base/base/bin/shakapacker-precompile-hook
|
|
156
|
+
- lib/generators/react_on_rails/templates/base/base/bin/switch-bundler
|
|
172
157
|
- lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb.tt
|
|
173
|
-
- lib/generators/react_on_rails/templates/base/base/config/shakapacker.yml
|
|
158
|
+
- lib/generators/react_on_rails/templates/base/base/config/shakapacker.yml.tt
|
|
174
159
|
- lib/generators/react_on_rails/templates/base/base/config/webpack/clientWebpackConfig.js.tt
|
|
175
160
|
- lib/generators/react_on_rails/templates/base/base/config/webpack/commonWebpackConfig.js.tt
|
|
176
161
|
- lib/generators/react_on_rails/templates/base/base/config/webpack/development.js.tt
|
|
@@ -210,6 +195,7 @@ files:
|
|
|
210
195
|
- lib/react_on_rails/dev/pack_generator.rb
|
|
211
196
|
- lib/react_on_rails/dev/process_manager.rb
|
|
212
197
|
- lib/react_on_rails/dev/server_manager.rb
|
|
198
|
+
- lib/react_on_rails/dev/service_checker.rb
|
|
213
199
|
- lib/react_on_rails/doctor.rb
|
|
214
200
|
- lib/react_on_rails/engine.rb
|
|
215
201
|
- lib/react_on_rails/error.rb
|
|
@@ -223,13 +209,12 @@ files:
|
|
|
223
209
|
- lib/react_on_rails/packer_utils.rb
|
|
224
210
|
- lib/react_on_rails/packs_generator.rb
|
|
225
211
|
- lib/react_on_rails/prerender_error.rb
|
|
226
|
-
- lib/react_on_rails/
|
|
227
|
-
- lib/react_on_rails/pro/helper.rb
|
|
228
|
-
- lib/react_on_rails/pro/utils.rb
|
|
212
|
+
- lib/react_on_rails/pro_helper.rb
|
|
229
213
|
- lib/react_on_rails/react_component/render_options.rb
|
|
230
214
|
- lib/react_on_rails/server_rendering_js_code.rb
|
|
231
215
|
- lib/react_on_rails/server_rendering_pool.rb
|
|
232
216
|
- lib/react_on_rails/server_rendering_pool/ruby_embedded_java_script.rb
|
|
217
|
+
- lib/react_on_rails/smart_error.rb
|
|
233
218
|
- lib/react_on_rails/system_checker.rb
|
|
234
219
|
- lib/react_on_rails/test_helper.rb
|
|
235
220
|
- lib/react_on_rails/test_helper/ensure_assets_compiled.rb
|
|
@@ -243,9 +228,40 @@ files:
|
|
|
243
228
|
- lib/tasks/doctor.rake
|
|
244
229
|
- lib/tasks/generate_packs.rake
|
|
245
230
|
- lib/tasks/locale.rake
|
|
231
|
+
- rakelib/docker.rake
|
|
232
|
+
- rakelib/dummy_apps.rake
|
|
233
|
+
- rakelib/example_type.rb
|
|
234
|
+
- rakelib/examples_config.yml
|
|
235
|
+
- rakelib/lint.rake
|
|
236
|
+
- rakelib/node_package.rake
|
|
237
|
+
- rakelib/rbs.rake
|
|
238
|
+
- rakelib/run_rspec.rake
|
|
239
|
+
- rakelib/shakapacker_examples.rake
|
|
240
|
+
- rakelib/task_helpers.rb
|
|
241
|
+
- rakelib/update_changelog.rake
|
|
246
242
|
- react_on_rails.gemspec
|
|
247
|
-
-
|
|
248
|
-
-
|
|
243
|
+
- sig/README.md
|
|
244
|
+
- sig/react_on_rails.rbs
|
|
245
|
+
- sig/react_on_rails/configuration.rbs
|
|
246
|
+
- sig/react_on_rails/controller.rbs
|
|
247
|
+
- sig/react_on_rails/dev/file_manager.rbs
|
|
248
|
+
- sig/react_on_rails/dev/pack_generator.rbs
|
|
249
|
+
- sig/react_on_rails/dev/process_manager.rbs
|
|
250
|
+
- sig/react_on_rails/dev/server_manager.rbs
|
|
251
|
+
- sig/react_on_rails/dev/service_checker.rbs
|
|
252
|
+
- sig/react_on_rails/error.rbs
|
|
253
|
+
- sig/react_on_rails/generators/js_dependency_manager.rbs
|
|
254
|
+
- sig/react_on_rails/git_utils.rbs
|
|
255
|
+
- sig/react_on_rails/helper.rbs
|
|
256
|
+
- sig/react_on_rails/json_parse_error.rbs
|
|
257
|
+
- sig/react_on_rails/locales.rbs
|
|
258
|
+
- sig/react_on_rails/packer_utils.rbs
|
|
259
|
+
- sig/react_on_rails/prerender_error.rbs
|
|
260
|
+
- sig/react_on_rails/server_rendering_pool.rbs
|
|
261
|
+
- sig/react_on_rails/smart_error.rbs
|
|
262
|
+
- sig/react_on_rails/test_helper.rbs
|
|
263
|
+
- sig/react_on_rails/utils.rbs
|
|
264
|
+
- sig/react_on_rails/version_checker.rbs
|
|
249
265
|
homepage: https://github.com/shakacode/react_on_rails
|
|
250
266
|
licenses:
|
|
251
267
|
- MIT
|
|
@@ -271,7 +287,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
271
287
|
- !ruby/object:Gem::Version
|
|
272
288
|
version: '0'
|
|
273
289
|
requirements: []
|
|
274
|
-
rubygems_version: 3.
|
|
290
|
+
rubygems_version: 3.5.22
|
|
291
|
+
signing_key:
|
|
275
292
|
specification_version: 4
|
|
276
293
|
summary: Rails with react server rendering with webpack.
|
|
277
294
|
test_files: []
|
data/AI_AGENT_INSTRUCTIONS.md
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# 🤖 AI Agent Instructions: React on Rails Setup
|
|
2
|
-
|
|
3
|
-
_Super concise, copy-paste instructions for AI agents to set up React on Rails in common scenarios._
|
|
4
|
-
|
|
5
|
-
## 🔍 **Before Starting: Check Current Versions**
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
# Get latest available versions (recommended approach)
|
|
9
|
-
gem search react_on_rails --remote
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
Install and update gem and npm package using strict option.
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## 🆕 Scenario 1: New Rails App with React on Rails
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# Create new Rails app
|
|
20
|
-
rails new myapp --skip-javascript --database=postgresql
|
|
21
|
-
cd myapp
|
|
22
|
-
|
|
23
|
-
# Use latest version
|
|
24
|
-
bundle add react_on_rails --strict
|
|
25
|
-
|
|
26
|
-
bin/rails generate react_on_rails:install
|
|
27
|
-
|
|
28
|
-
# Accept change to bin/dev
|
|
29
|
-
|
|
30
|
-
# Start development servers
|
|
31
|
-
bin/dev
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
**✅ Success Check:** Visit `http://localhost:3000/hello_world` → Should see "Hello World" from React
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## 🔄 Scenario 2: Add React on Rails to Existing Rails App
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
cd /path/to/existing/app
|
|
42
|
-
# Use latest version
|
|
43
|
-
bundle add react_on_rails --strict
|
|
44
|
-
|
|
45
|
-
bin/rails generate react_on_rails:install
|
|
46
|
-
|
|
47
|
-
# Accept change to bin/dev
|
|
48
|
-
|
|
49
|
-
# Start development servers
|
|
50
|
-
bin/dev
|
|
51
|
-
# Navigate to existing Rails app root
|
|
52
|
-
|
|
53
|
-
# Start development
|
|
54
|
-
bin/dev
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## 🛠️ Common Troubleshooting Commands
|
|
60
|
-
|
|
61
|
-
- Always run `bin/dev` to test setup, and check browser console for any JavaScript errors
|
|
62
|
-
- `bin/dev kill` stops other conflicting processes
|
|
63
|
-
- `bin/rake react_on_rails:doctor` for helpful information
|