react_on_rails 16.0.0 → 16.0.1.rc.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +124 -77
- data/CLAUDE.md +46 -2
- data/CONTRIBUTING.md +12 -6
- data/Gemfile.development_dependencies +1 -0
- data/Gemfile.lock +3 -1
- data/LICENSE.md +15 -1
- data/README.md +68 -18
- data/bin/lefthook/check-trailing-newlines +38 -0
- data/bin/lefthook/get-changed-files +26 -0
- data/bin/lefthook/prettier-format +26 -0
- data/bin/lefthook/ruby-autofix +26 -0
- data/bin/lefthook/ruby-lint +27 -0
- data/eslint.config.ts +10 -0
- data/knip.ts +20 -9
- data/lib/generators/react_on_rails/USAGE +65 -0
- data/lib/generators/react_on_rails/base_generator.rb +7 -7
- data/lib/generators/react_on_rails/generator_helper.rb +4 -0
- data/lib/generators/react_on_rails/generator_messages.rb +2 -2
- data/lib/generators/react_on_rails/install_generator.rb +115 -7
- data/lib/generators/react_on_rails/react_no_redux_generator.rb +16 -4
- data/lib/generators/react_on_rails/react_with_redux_generator.rb +83 -14
- data/lib/generators/react_on_rails/templates/base/base/app/javascript/src/HelloWorld/ror_components/HelloWorld.client.tsx +25 -0
- data/lib/generators/react_on_rails/templates/base/base/app/javascript/src/HelloWorld/ror_components/HelloWorld.server.tsx +5 -0
- data/lib/generators/react_on_rails/templates/base/base/bin/dev +12 -24
- data/lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/actions/helloWorldActionCreators.ts +18 -0
- data/lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/components/HelloWorld.tsx +24 -0
- data/lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/constants/helloWorldConstants.ts +6 -0
- data/lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/containers/HelloWorldContainer.ts +20 -0
- data/lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/reducers/helloWorldReducer.ts +22 -0
- data/lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/startup/HelloWorldApp.client.tsx +23 -0
- data/lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/startup/HelloWorldApp.server.tsx +5 -0
- data/lib/generators/react_on_rails/templates/redux/base/app/javascript/bundles/HelloWorld/store/helloWorldStore.ts +18 -0
- data/lib/react_on_rails/configuration.rb +10 -6
- data/lib/react_on_rails/dev/server_manager.rb +185 -28
- data/lib/react_on_rails/doctor.rb +1149 -0
- data/lib/react_on_rails/helper.rb +9 -78
- data/lib/react_on_rails/pro/NOTICE +21 -0
- data/lib/react_on_rails/pro/helper.rb +122 -0
- data/lib/react_on_rails/pro/utils.rb +53 -0
- data/lib/react_on_rails/react_component/render_options.rb +6 -2
- data/lib/react_on_rails/system_checker.rb +659 -0
- data/lib/react_on_rails/version.rb +1 -1
- data/lib/tasks/doctor.rake +48 -0
- data/lib/tasks/generate_packs.rake +127 -4
- data/package-lock.json +11984 -0
- metadata +26 -6
- data/lib/generators/react_on_rails/bin/dev +0 -46
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../react_on_rails"
|
4
|
+
require_relative "../react_on_rails/doctor"
|
5
|
+
|
6
|
+
begin
|
7
|
+
require "rainbow"
|
8
|
+
rescue LoadError
|
9
|
+
# Fallback if Rainbow is not available
|
10
|
+
class Rainbow
|
11
|
+
def self.method_missing(_method, text)
|
12
|
+
SimpleColorWrapper.new(text)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.respond_to_missing?(_method, _include_private = false)
|
16
|
+
true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class SimpleColorWrapper
|
21
|
+
def initialize(text)
|
22
|
+
@text = text
|
23
|
+
end
|
24
|
+
|
25
|
+
def method_missing(_method, *_args)
|
26
|
+
self
|
27
|
+
end
|
28
|
+
|
29
|
+
def respond_to_missing?(_method, _include_private = false)
|
30
|
+
true
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_s
|
34
|
+
@text
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
namespace :react_on_rails do
|
40
|
+
desc "Diagnose React on Rails setup and configuration"
|
41
|
+
task :doctor do
|
42
|
+
verbose = ENV["VERBOSE"] == "true"
|
43
|
+
fix = ENV["FIX"] == "true"
|
44
|
+
|
45
|
+
doctor = ReactOnRails::Doctor.new(verbose: verbose, fix: fix)
|
46
|
+
doctor.run_diagnosis
|
47
|
+
end
|
48
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# rubocop:disable Metrics/BlockLength
|
3
4
|
namespace :react_on_rails do
|
4
5
|
desc <<~DESC
|
5
6
|
If there is a file inside any directory matching config.components_subdirectory, this command generates corresponding packs.
|
@@ -21,11 +22,133 @@ namespace :react_on_rails do
|
|
21
22
|
puts Rainbow("📂 Components subdirectory: #{ReactOnRails.configuration.components_subdirectory}").cyan
|
22
23
|
puts ""
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
begin
|
26
|
+
start_time = Time.now
|
27
|
+
ReactOnRails::PacksGenerator.instance.generate_packs_if_stale
|
28
|
+
end_time = Time.now
|
27
29
|
|
30
|
+
puts ""
|
31
|
+
puts Rainbow("✨ Pack generation completed in #{((end_time - start_time) * 1000).round(1)}ms").green
|
32
|
+
rescue ReactOnRails::Error => e
|
33
|
+
handle_react_on_rails_error(e)
|
34
|
+
exit 1
|
35
|
+
rescue StandardError => e
|
36
|
+
handle_standard_error(e)
|
37
|
+
exit 1
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
# rubocop:disable Metrics/AbcSize
|
44
|
+
def handle_react_on_rails_error(error)
|
45
|
+
puts ""
|
46
|
+
puts Rainbow("❌ REACT ON RAILS ERROR").red.bold
|
47
|
+
puts Rainbow("=" * 80).red
|
48
|
+
puts Rainbow("🚨 Pack generation failed with the following error:").red
|
49
|
+
puts ""
|
50
|
+
puts Rainbow("📋 ERROR DETAILS:").yellow
|
51
|
+
puts Rainbow(" Type: #{error.class.name}").white
|
52
|
+
puts Rainbow(" Message: #{error.message}").white
|
53
|
+
puts ""
|
54
|
+
|
55
|
+
highlight_main_error(error)
|
56
|
+
show_common_solutions(error)
|
57
|
+
show_debugging_steps
|
58
|
+
show_documentation_links
|
59
|
+
end
|
60
|
+
# rubocop:enable Metrics/AbcSize
|
61
|
+
|
62
|
+
def highlight_main_error(error)
|
63
|
+
return unless error.message.include?("**ERROR**")
|
64
|
+
|
65
|
+
error_lines = error.message.split("\n")
|
66
|
+
error_lines.each do |line|
|
67
|
+
next unless line.include?("**ERROR**")
|
68
|
+
|
69
|
+
puts Rainbow("🔥 MAIN ISSUE:").red.bold
|
70
|
+
puts Rainbow(" #{line.gsub('**ERROR**', '').strip}").yellow
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# rubocop:disable Metrics/AbcSize
|
75
|
+
def show_common_solutions(error)
|
76
|
+
puts ""
|
77
|
+
puts Rainbow("💡 COMMON SOLUTIONS:").green.bold
|
78
|
+
|
79
|
+
case error.message
|
80
|
+
when /client specific definition.*overrides the common definition/
|
81
|
+
puts Rainbow(" • You have both common and client/server specific component files").white
|
82
|
+
puts Rainbow(" • Delete the common component file (e.g., Component.jsx)").white
|
83
|
+
puts Rainbow(" • Keep only the client/server specific files " \
|
84
|
+
"(Component.client.jsx, Component.server.jsx)").white
|
85
|
+
puts Rainbow(" • See: https://www.shakacode.com/react-on-rails/docs/guides/" \
|
86
|
+
"file-system-based-automated-bundle-generation.md").cyan
|
87
|
+
|
88
|
+
when /Cannot find component/
|
89
|
+
puts Rainbow(" • Check that your component file exists in the expected location").white
|
90
|
+
puts Rainbow(" • Verify the component is exported as default export").white
|
91
|
+
puts Rainbow(" • Ensure the file extension is .jsx or .js").white
|
92
|
+
|
93
|
+
when /CSS module.*not found/
|
94
|
+
puts Rainbow(" • Check that the CSS module file exists").white
|
95
|
+
puts Rainbow(" • Verify the import path is correct").white
|
96
|
+
puts Rainbow(" • Ensure all CSS classes referenced in the component exist").white
|
97
|
+
|
98
|
+
else
|
99
|
+
puts Rainbow(" • Check component file structure and naming").white
|
100
|
+
puts Rainbow(" • Verify all imports and exports are correct").white
|
101
|
+
puts Rainbow(" • Run with --trace for more detailed error information").white
|
102
|
+
end
|
103
|
+
end
|
104
|
+
# rubocop:enable Metrics/AbcSize
|
105
|
+
|
106
|
+
def show_debugging_steps
|
107
|
+
puts ""
|
108
|
+
puts Rainbow("🔧 DEBUGGING STEPS:").blue.bold
|
109
|
+
components_path = "app/javascript/src/**/#{ReactOnRails.configuration.components_subdirectory}/"
|
110
|
+
puts Rainbow(" 1. Check component files in: #{components_path}").white
|
111
|
+
puts Rainbow(" 2. Verify component exports: export default ComponentName").white
|
112
|
+
puts Rainbow(" 3. Check for conflicting common/client/server files").white
|
113
|
+
puts Rainbow(" 4. Run: rake react_on_rails:generate_packs --trace").white
|
114
|
+
puts Rainbow(" 5. Check Rails logs for additional details").white
|
115
|
+
end
|
116
|
+
|
117
|
+
def show_documentation_links
|
118
|
+
puts ""
|
119
|
+
puts Rainbow("📚 DOCUMENTATION:").magenta.bold
|
120
|
+
puts Rainbow(" • File-system based components: https://www.shakacode.com/react-on-rails/docs/" \
|
121
|
+
"guides/file-system-based-automated-bundle-generation.md").cyan
|
122
|
+
puts Rainbow(" • Component registration: https://www.shakacode.com/react-on-rails/docs/").cyan
|
123
|
+
puts Rainbow("=" * 80).red
|
124
|
+
end
|
125
|
+
|
126
|
+
# rubocop:disable Metrics/AbcSize
|
127
|
+
def handle_standard_error(error)
|
128
|
+
puts ""
|
129
|
+
puts Rainbow("❌ UNEXPECTED ERROR").red.bold
|
130
|
+
puts Rainbow("=" * 80).red
|
131
|
+
puts Rainbow("🚨 An unexpected error occurred during pack generation:").red
|
132
|
+
puts ""
|
133
|
+
puts Rainbow("📋 ERROR DETAILS:").yellow
|
134
|
+
puts Rainbow(" Type: #{error.class.name}").white
|
135
|
+
puts Rainbow(" Message: #{error.message}").white
|
136
|
+
puts Rainbow(" Backtrace:").white
|
137
|
+
error.backtrace.first(10).each { |line| puts Rainbow(" #{line}").white }
|
138
|
+
puts Rainbow(" ... (run with --trace for full backtrace)").white
|
139
|
+
puts ""
|
140
|
+
puts Rainbow("🔧 DEBUGGING STEPS:").blue.bold
|
141
|
+
puts Rainbow(" 1. Run: rake react_on_rails:generate_packs --trace").white
|
142
|
+
puts Rainbow(" 2. Check Rails logs: tail -f log/development.log").white
|
143
|
+
puts Rainbow(" 3. Verify all dependencies are installed: bundle install && npm install").white
|
144
|
+
puts Rainbow(" 4. Clear cache: rm -rf tmp/cache").white
|
28
145
|
puts ""
|
29
|
-
puts Rainbow("
|
146
|
+
puts Rainbow("📞 GET HELP:").magenta.bold
|
147
|
+
puts Rainbow(" • Create an issue: https://github.com/shakacode/react_on_rails/issues").cyan
|
148
|
+
puts Rainbow(" • Community discussions: https://github.com/shakacode/react_on_rails/discussions").cyan
|
149
|
+
puts Rainbow(" • Professional support: https://www.shakacode.com/react-on-rails-pro").cyan
|
150
|
+
puts Rainbow("=" * 80).red
|
30
151
|
end
|
152
|
+
# rubocop:enable Metrics/AbcSize
|
31
153
|
end
|
154
|
+
# rubocop:enable Metrics/BlockLength
|