react_on_rails 13.4.0 → 14.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -2
  3. data/Gemfile.development_dependencies +10 -8
  4. data/README.md +2 -2
  5. data/lib/generators/react_on_rails/base_generator.rb +10 -2
  6. data/lib/generators/react_on_rails/dev_tests_generator.rb +1 -1
  7. data/lib/generators/react_on_rails/templates/base/base/config/shakapacker.yml +1 -1
  8. data/lib/generators/react_on_rails/templates/dev_tests/spec/rails_helper.rb +2 -2
  9. data/lib/generators/react_on_rails/templates/dev_tests/spec/system/hello_world_spec.rb +1 -1
  10. data/lib/react_on_rails/configuration.rb +39 -25
  11. data/lib/react_on_rails/git_utils.rb +3 -3
  12. data/lib/react_on_rails/helper.rb +2 -2
  13. data/lib/react_on_rails/json_output.rb +0 -17
  14. data/lib/react_on_rails/locales/base.rb +4 -4
  15. data/lib/react_on_rails/locales/to_js.rb +1 -1
  16. data/lib/react_on_rails/packs_generator.rb +2 -4
  17. data/lib/react_on_rails/react_component/render_options.rb +1 -1
  18. data/lib/react_on_rails/server_rendering_pool/ruby_embedded_java_script.rb +9 -9
  19. data/lib/react_on_rails/test_helper/webpack_assets_status_checker.rb +3 -3
  20. data/lib/react_on_rails/test_helper.rb +2 -2
  21. data/lib/react_on_rails/utils.rb +2 -8
  22. data/lib/react_on_rails/version.rb +1 -1
  23. data/lib/react_on_rails/version_checker.rb +2 -2
  24. data/lib/react_on_rails/webpacker_utils.rb +6 -0
  25. data/lib/tasks/assets.rake +1 -1
  26. data/react_on_rails.gemspec +4 -4
  27. metadata +4 -132
  28. data/.bookignore +0 -15
  29. data/.circleci/config.yml +0 -338
  30. data/.coveralls.yml +0 -1
  31. data/.dockerignore +0 -2
  32. data/.eslintignore +0 -17
  33. data/.eslintrc +0 -53
  34. data/.github/FUNDING.yml +0 -1
  35. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -23
  36. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  37. data/.github/PULL_REQUEST_TEMPLATE.md +0 -19
  38. data/.github/workflows/lint-js-and-ruby.yml +0 -54
  39. data/.github/workflows/main.yml +0 -183
  40. data/.github/workflows/package-js-tests.yml +0 -35
  41. data/.github/workflows/rspec-package-specs.yml +0 -46
  42. data/.gitignore +0 -33
  43. data/.npmignore +0 -22
  44. data/.prettierignore +0 -14
  45. data/.prettierrc +0 -20
  46. data/.rspec +0 -2
  47. data/.rubocop.yml +0 -134
  48. data/.scss-lint.yml +0 -205
  49. data/.travis.yml +0 -61
  50. data/book.json +0 -18
  51. data/docs/additional-details/generator-details.md +0 -56
  52. data/docs/additional-details/manual-installation-overview.md +0 -30
  53. data/docs/additional-details/migrating-from-react-rails.md +0 -17
  54. data/docs/additional-details/recommended-project-structure.md +0 -69
  55. data/docs/additional-details/tips-for-usage-with-sp6.md +0 -15
  56. data/docs/additional-details/updating-dependencies.md +0 -31
  57. data/docs/additional-details/upgrade-webpacker-v3-to-v4.md +0 -10
  58. data/docs/api/javascript-api.md +0 -99
  59. data/docs/api/redux-store-api.md +0 -102
  60. data/docs/api/view-helpers-api.md +0 -133
  61. data/docs/contributor-info/errors-with-hooks.md +0 -45
  62. data/docs/contributor-info/generator-testing.md +0 -11
  63. data/docs/contributor-info/linters.md +0 -68
  64. data/docs/contributor-info/pull-requests.md +0 -42
  65. data/docs/contributor-info/releasing.md +0 -76
  66. data/docs/deployment/elastic-beanstalk.md +0 -63
  67. data/docs/deployment/heroku-deployment.md +0 -39
  68. data/docs/getting-started.md +0 -196
  69. data/docs/guides/client-vs-server-rendering.md +0 -27
  70. data/docs/guides/configuration.md +0 -289
  71. data/docs/guides/deployment.md +0 -5
  72. data/docs/guides/file-system-based-automated-bundle-generation.md +0 -197
  73. data/docs/guides/hmr-and-hot-reloading-with-the-webpack-dev-server.md +0 -104
  74. data/docs/guides/how-react-on-rails-works.md +0 -44
  75. data/docs/guides/how-to-conditionally-server-render-based-on-device-type.md +0 -40
  76. data/docs/guides/how-to-use-different-files-for-client-and-server-rendering.md +0 -98
  77. data/docs/guides/i18n.md +0 -87
  78. data/docs/guides/installation-into-an-existing-rails-app.md +0 -66
  79. data/docs/guides/minitest-configuration.md +0 -31
  80. data/docs/guides/rails-webpacker-react-integration-options.md +0 -213
  81. data/docs/guides/react-on-rails-overview.md +0 -29
  82. data/docs/guides/react-server-rendering.md +0 -32
  83. data/docs/guides/render-functions-and-railscontext.md +0 -205
  84. data/docs/guides/rspec-configuration.md +0 -73
  85. data/docs/guides/tutorial.md +0 -371
  86. data/docs/guides/upgrading-react-on-rails.md +0 -304
  87. data/docs/guides/webpack-configuration.md +0 -42
  88. data/docs/home.md +0 -23
  89. data/docs/javascript/angular-js-integration-migration.md +0 -28
  90. data/docs/javascript/asset-pipeline.md +0 -12
  91. data/docs/javascript/capistrano-deployment.md +0 -18
  92. data/docs/javascript/code-splitting.md +0 -165
  93. data/docs/javascript/converting-from-custom-webpack-config-to-rails-webpacker-config.md +0 -10
  94. data/docs/javascript/credits.md +0 -10
  95. data/docs/javascript/foreman-issues.md +0 -15
  96. data/docs/javascript/images.md +0 -57
  97. data/docs/javascript/node-dependencies-and-npm.md +0 -19
  98. data/docs/javascript/react-and-redux.md +0 -36
  99. data/docs/javascript/react-helmet.md +0 -100
  100. data/docs/javascript/react-router.md +0 -90
  101. data/docs/javascript/server-rendering-tips.md +0 -55
  102. data/docs/javascript/troubleshooting-when-using-shakapacker.md +0 -77
  103. data/docs/javascript/troubleshooting-when-using-webpacker.md +0 -90
  104. data/docs/javascript/webpack-v1-notes.md +0 -23
  105. data/docs/javascript/webpack.md +0 -22
  106. data/docs/misc/articles.md +0 -20
  107. data/docs/misc/code_of_conduct.md +0 -13
  108. data/docs/misc/doctrine.md +0 -77
  109. data/docs/misc/style.md +0 -33
  110. data/docs/misc/tips.md +0 -10
  111. data/docs/outdated/deferred-rendering.md +0 -39
  112. data/docs/outdated/rails-assets-relative-paths.md +0 -195
  113. data/docs/outdated/rails-assets.md +0 -77
  114. data/docs/outdated/rails3.md +0 -9
  115. data/docs/rails/convert-rails-5-api-only-app.md +0 -19
  116. data/docs/rails/rails-engine-integration.md +0 -32
  117. data/docs/rails/rails_view_rendering_from_inline_javascript.md +0 -36
  118. data/docs/rails/turbolinks.md +0 -124
  119. data/docs/react-on-rails-pro/react-on-rails-pro.md +0 -43
  120. data/docs/testimonials/hvmn.md +0 -25
  121. data/docs/testimonials/resortpass.md +0 -13
  122. data/docs/testimonials/testimonials.md +0 -28
  123. data/jest.config.js +0 -4
  124. data/package-scripts.yml +0 -49
  125. data/package.json +0 -96
  126. data/rakelib/docker.rake +0 -26
  127. data/rakelib/dummy_apps.rake +0 -30
  128. data/rakelib/example_type.rb +0 -96
  129. data/rakelib/examples.rake +0 -64
  130. data/rakelib/examples_config.yml +0 -14
  131. data/rakelib/lint.rake +0 -30
  132. data/rakelib/node_package.rake +0 -15
  133. data/rakelib/release.rake +0 -92
  134. data/rakelib/run_rspec.rake +0 -103
  135. data/rakelib/task_helpers.rb +0 -62
  136. data/script/bootstrap +0 -33
  137. data/script/release +0 -3
  138. data/script/setup +0 -23
  139. data/script/test +0 -38
  140. data/webpackConfigLoader.js +0 -71
  141. data/yarn.lock +0 -7010
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 545e97728f6633e1adc5091f8e1a72c377ce8d8c809ca8b6378c0b1bffe62c7d
4
- data.tar.gz: 06a83f533ee9518518afeb63a31191861298f92a2ec36b876914347de0a0f960
3
+ metadata.gz: 37cf3a6fba0b83dec923947d8cc8f883f3f4f8ff06c51760347bbe41a79ee35a
4
+ data.tar.gz: 522f25ca29ebd985f975d9f8dd7ab8947ef4ccacc7591f28db176b0c2964f444
5
5
  SHA512:
6
- metadata.gz: 9bc25f3009cc3775d59d456e2009fe3c7f692a13268bf559a1059547c8c56998d8c0c2856a9b8e43079afa6ffa3705a6c1f613ecf9864ae6b3cc0697c5f46ac7
7
- data.tar.gz: 860f4fc51d1bef3f7cc4599335062881681b3acd70e6f1104ecbc24e128e175ddb0b3aa44ee6c2b0d36c2596c6d118eb1ded0ec92fcab8781efa2233c2cd3875
6
+ metadata.gz: 873fc4c65b407b3982ef2761d0e5e346ef8eb04dc9468b074db188f641537634578b057b59a3b4b12135a988bd725207ded6a20e9b4a97ca42f39c31ea934928
7
+ data.tar.gz: 6f46192a308e4d636bbe954e3c34bc256aab07c9b42bf177c9254fde495e37726a46b285df1124ef2ebc859b2311cf77afca8bb16158f39a5eb9fec013d714b2
data/CHANGELOG.md CHANGED
@@ -15,7 +15,27 @@ Please follow the recommendations outlined at [keepachangelog.com](http://keepac
15
15
  ### [Unreleased]
16
16
  Changes since the last non-beta release.
17
17
 
18
- *Please add entries here for your pull requests that are not yet released.*
18
+ ### [14.0.0] - 2024-04-03
19
+ _Major bump because dropping support for Ruby 2.7 and deprecated `webpackConfigLoader.js`._
20
+
21
+ #### Removed
22
+ - Dropped Ruby 2.7 support [PR 1595](https://github.com/shakacode/react_on_rails/pull/1595) by [ahangarha](https://github.com/ahangarha).
23
+ - Removed deprecated `webpackConfigLoader.js` [PR 1600](https://github.com/shakacode/react_on_rails/pull/1600) by [ahangarha](https://github.com/ahangarha).
24
+
25
+ #### Fixed
26
+ - Trimmed the Gem to remove package.json which could cause superflous security warnings. [PR 1605](https://github.com/shakacode/react_on_rails/pull/1605) by [justin808](https://github.com/justin808).
27
+ - Prevent displaying the deprecation message for using `webpacker_precompile?` method and `webpacker:clean` rake task when using Shakapacker v7+ [PR 1592](https://github.com/shakacode/react_on_rails/pull/1592) by [ahangarha](https://github.com/ahangarha).
28
+
29
+ ### [13.4.1]
30
+ #### Fixed
31
+ - Fixed Typescript types for ServerRenderResult, ReactComponent, RenderFunction, and RailsContext interfaces. [PR 1582](https://github.com/shakacode/react_on_rails/pull/1582) & [PR 1585](https://github.com/shakacode/react_on_rails/pull/1585) by [kotarella1110](https://github.com/kotarella1110)
32
+
33
+ - Removed a workaround in `JsonOutput#escape` for an no-longer supported Rails version. Additionally, removed `Utils.rails_version_less_than_4_1_1`
34
+ which was only used in the workaround. [PR 1580](https://github.com/shakacode/react_on_rails/pull/1580) by [wwahammy](https://github.com/wwahammy)
35
+
36
+ #### Added
37
+ - Exposed TypeScript all types [PR 1586](https://github.com/shakacode/react_on_rails/pull/1586) by [kotarella1110](https://github.com/kotarella1110)
38
+
19
39
  ### [13.4.0] - 2023-07-30
20
40
  #### Fixed
21
41
  - Fixed Pack Generation logic during `assets:precompile` if `auto_load_bundle` is `false` & `components_subdirectory` is not set. [PR 1567](https://github.com/shakacode/react_on_rails/pull/1545) by [blackjack26](https://github.com/blackjack26) & [judahmeek](https://github.com/judahmeek).
@@ -1104,7 +1124,9 @@ Best done with Object destructing:
1104
1124
  ##### Fixed
1105
1125
  - Fix several generator-related issues.
1106
1126
 
1107
- [Unreleased]: https://github.com/shakacode/react_on_rails/compare/13.4.0...master
1127
+ [Unreleased]: https://github.com/shakacode/react_on_rails/compare/14.0.0...master
1128
+ [14.0.0]: https://github.com/shakacode/react_on_rails/compare/13.4.1...14.0.0
1129
+ [13.4.1]: https://github.com/shakacode/react_on_rails/compare/13.4.0...13.4.1
1108
1130
  [13.4.0]: https://github.com/shakacode/react_on_rails/compare/13.3.5...13.4.0
1109
1131
  [13.3.5]: https://github.com/shakacode/react_on_rails/compare/13.3.4...13.3.5
1110
1132
  [13.3.4]: https://github.com/shakacode/react_on_rails/compare/13.3.3...13.3.4
@@ -1,14 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- gem "shakapacker", "7.0.1"
3
+ gem "shakapacker", "7.2.1"
4
4
  gem "bootsnap", require: false
5
- gem "rails", "~> 7.0"
5
+ gem "rails", "~> 7.1"
6
+
6
7
  gem "sqlite3"
7
8
  gem "sass-rails", "~> 6.0"
8
9
  gem "uglifier"
9
10
  gem "jquery-rails"
10
- gem "puma", "~> 5.0"
11
- gem "bundler", "2.4.17"
11
+ gem "puma", "~> 6.0"
12
+ gem "bundler", "2.5.3"
12
13
 
13
14
  # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
14
15
  gem "turbolinks" if ENV["DISABLE_TURBOLINKS"].nil? || ENV["DISABLE_TURBOLINKS"].strip.empty?
@@ -29,9 +30,9 @@ group :development, :test do
29
30
  gem "pry-doc"
30
31
  gem "pry-rails"
31
32
  gem "pry-rescue"
32
- gem "rubocop", "1.14.0", require: false
33
- gem "rubocop-performance", require: false
34
- gem "rubocop-rspec", require: false
33
+ gem "rubocop", "~>1.59", require: false
34
+ gem "rubocop-performance", "~>1.20.0", require: false
35
+ gem "rubocop-rspec", "~>2.26", require: false
35
36
  gem "scss_lint", require: false
36
37
  gem "spring", "~> 4.0"
37
38
  end
@@ -46,5 +47,6 @@ group :test do
46
47
  gem "rspec_junit_formatter"
47
48
  gem "rspec-rails"
48
49
  gem "rspec-retry"
49
- gem "selenium-webdriver"
50
+ gem "selenium-webdriver", "4.9.0"
51
+ gem "webdrivers", "5.3.0"
50
52
  end
data/README.md CHANGED
@@ -63,7 +63,7 @@ See [Rails/Webpacker React Integration Options](https://www.shakacode.com/react-
63
63
 
64
64
  ## Online demo
65
65
  * See the [react-webpack-rails-tutorial](https://github.com/shakacode/react-webpack-rails-tutorial) for an example of a live implementation and code.
66
- * A deployed version of the project `spec/dummy` which demonstrates several uses of `react_on_rails` is available on heroku [through this link](https://ror-spec-dummy.herokuapp.com/)
66
+ * A deployed version of the project `spec/dummy`, which demonstrates several uses of `react_on_rails`, will soon be available on [Control Plane through this link](https://ror-spec-dummy.reactrails.com/)
67
67
 
68
68
  ## ShakaCode Forum Premium Content
69
69
  _Requires creating a free account._
@@ -73,7 +73,7 @@ _Requires creating a free account._
73
73
 
74
74
  ## Prerequisites
75
75
 
76
- Ruby on Rails >=5, rails/webpacker >= 4.2 or shakapacker > 6, Ruby >= 2.7
76
+ Ruby on Rails >=5, rails/webpacker >= 4.2 or shakapacker > 6, Ruby >= 3.0.0
77
77
 
78
78
  # Support
79
79
 
@@ -77,7 +77,7 @@ module ReactOnRails
77
77
  end
78
78
 
79
79
  def add_yarn_dependencies
80
- major_minor_patch_only = /\A\d+\.\d+\.\d+\z/.freeze
80
+ major_minor_patch_only = /\A\d+\.\d+\.\d+\z/
81
81
  if ReactOnRails::VERSION.match?(major_minor_patch_only)
82
82
  run "yarn add react-on-rails@#{ReactOnRails::VERSION} --exact"
83
83
  else
@@ -91,7 +91,15 @@ module ReactOnRails
91
91
  babel-plugin-macros"
92
92
 
93
93
  puts "Adding CSS handlers"
94
- run "yarn add css-loader css-minimizer-webpack-plugin mini-css-extract-plugin style-loader"
94
+
95
+ # css_minimizer_webpack_plugin version 6 only supports Nodejs v18+
96
+ # When we bump our minimum Nodejs version to 18, we can remove this logic
97
+ # and install css_minimizer_webpack_plugin directly.
98
+ node_major_version = `node -v`.match(/^v(\d{,2})\./)[1]&.to_i
99
+ css_minimizer_webpack_plugin_version = node_major_version >= 18 ? "" : "@<6.0.0"
100
+ css_minimizer_webpack_plugin = "css-minimizer-webpack-plugin#{css_minimizer_webpack_plugin_version}"
101
+
102
+ run "yarn add css-loader '#{css_minimizer_webpack_plugin}' mini-css-extract-plugin style-loader"
95
103
 
96
104
  puts "Adding dev dependencies"
97
105
  run "yarn add -D @pmmmwh/react-refresh-webpack-plugin react-refresh"
@@ -39,7 +39,7 @@ module ReactOnRails
39
39
 
40
40
  hello_world_index = File.join(destination_root, "app", "views", "hello_world", "index.html.erb")
41
41
  hello_world_contents = File.read(hello_world_index)
42
- new_hello_world_contents = hello_world_contents.gsub(/prerender: false/,
42
+ new_hello_world_contents = hello_world_contents.gsub("prerender: false",
43
43
  "prerender: true")
44
44
 
45
45
  File.open(hello_world_index, "w+") { |f| f.puts new_hello_world_contents }
@@ -17,7 +17,7 @@ default: &default
17
17
 
18
18
  development:
19
19
  <<: *default
20
- # This is false since we're running `bin/shakapacker -w` in Procfile.dev-setic
20
+ # This is false since we're running `bin/shakapacker -w` in Procfile.dev-static
21
21
  compile: false
22
22
 
23
23
  # Reference: https://webpack.js.org/configuration/dev-server/
@@ -40,7 +40,7 @@ end
40
40
  # ActiveRecord::Migration.maintain_test_schema!
41
41
 
42
42
  RSpec.configure do |config|
43
- config.before(:each, type: :system, js: true) do
43
+ config.before(:each, :js, type: :system) do
44
44
  driven_by :selenium_chrome
45
45
  end
46
46
 
@@ -49,7 +49,7 @@ RSpec.configure do |config|
49
49
  ReactOnRails::TestHelper.configure_rspec_to_compile_assets(config)
50
50
 
51
51
  # Remove this line if you"re not using ActiveRecord or ActiveRecord fixtures
52
- config.fixture_path = "#{::Rails.root}/spec/fixtures"
52
+ config.fixture_path = "#{Rails.root}/spec/fixtures"
53
53
 
54
54
  # If you"re not using ActiveRecord, or you"d prefer not to run each of your
55
55
  # examples within a transaction, remove the following line or assign false
@@ -2,7 +2,7 @@
2
2
 
3
3
  require_relative "../rails_helper"
4
4
 
5
- describe "Hello World", js: true do
5
+ describe "Hello World", :js do
6
6
  it "the hello world example works" do
7
7
  visit "/hello_world"
8
8
  expect(heading).to have_text("Hello World")
@@ -137,35 +137,23 @@ module ReactOnRails
137
137
  end
138
138
 
139
139
  def adjust_precompile_task
140
- skip_react_on_rails_precompile = %w[no false n f].include?(ENV["REACT_ON_RAILS_PRECOMPILE"])
140
+ skip_react_on_rails_precompile = %w[no false n f].include?(ENV.fetch("REACT_ON_RAILS_PRECOMPILE", nil))
141
141
 
142
142
  return if skip_react_on_rails_precompile || build_production_command.blank?
143
143
 
144
- if Webpacker.config.webpacker_precompile?
145
- msg = <<~MSG
146
-
147
- React on Rails and Shakapacker error in configuration!
148
- In order to use config/react_on_rails.rb config.build_production_command,
149
- you must edit config/webpacker.yml to include this value in the default configuration:
150
- 'webpacker_precompile: false'
151
-
152
- Alternatively, remove the config/react_on_rails.rb config.build_production_command and the
153
- default bin/webpacker script will be used for assets:precompile.
154
-
155
- MSG
156
- raise ReactOnRails::Error, msg
157
- end
144
+ raise(ReactOnRails::Error, compile_command_conflict_message) if shakapacker_precompile?
158
145
 
159
146
  precompile_tasks = lambda {
160
147
  Rake::Task["react_on_rails:generate_packs"].invoke
161
148
  Rake::Task["react_on_rails:assets:webpack"].invoke
162
- puts "Invoking task webpacker:clean from React on Rails"
163
149
 
164
150
  # VERSIONS is per the shakacode/shakapacker clean method definition.
165
151
  # We set it very big so that it is not used, and then clean just
166
152
  # removes files older than 1 hour.
167
153
  versions = 100_000
168
- Rake::Task["webpacker:clean"].invoke(versions)
154
+
155
+ puts "Invoking task #{shakapacker_clean_task} from React on Rails"
156
+ Rake::Task[shakapacker_clean_task].invoke(versions)
169
157
  }
170
158
 
171
159
  if Rake::Task.task_defined?("assets:precompile")
@@ -187,7 +175,7 @@ module ReactOnRails
187
175
  webpacker_public_output_path = ReactOnRails::WebpackerUtils.webpacker_public_output_path
188
176
 
189
177
  if File.expand_path(generated_assets_dir) == webpacker_public_output_path.to_s
190
- Rails.logger.warn("You specified generated_assets_dir in `config/initializers/react_on_rails.rb` "\
178
+ Rails.logger.warn("You specified generated_assets_dir in `config/initializers/react_on_rails.rb` " \
191
179
  "with Webpacker. Remove this line from your configuration file.")
192
180
  else
193
181
  msg = <<~MSG
@@ -225,20 +213,20 @@ module ReactOnRails
225
213
 
226
214
  if ReactOnRails::WebpackerUtils.using_webpacker?
227
215
  webpacker_public_output_path = ReactOnRails::WebpackerUtils.webpacker_public_output_path
228
- Rails.logger.warn "Error configuring config/initializers/react_on_rails. Define neither the "\
229
- "generated_assets_dirs no the generated_assets_dir when using Webpacker. This is defined by "\
230
- "public_output_path specified in webpacker.yml = #{webpacker_public_output_path}."
216
+ Rails.logger.warn "Error configuring config/initializers/react_on_rails. Define neither the " \
217
+ "generated_assets_dirs no the generated_assets_dir when using Webpacker. This is defined " \
218
+ "by public_output_path specified in webpacker.yml = #{webpacker_public_output_path}."
231
219
  return
232
220
  end
233
221
 
234
- Rails.logger.warn "[DEPRECATION] ReactOnRails: Use config.generated_assets_dir rather than "\
222
+ Rails.logger.warn "[DEPRECATION] ReactOnRails: Use config.generated_assets_dir rather than " \
235
223
  "generated_assets_dirs"
236
224
  if generated_assets_dir.blank?
237
225
  self.generated_assets_dir = generated_assets_dirs
238
226
  else
239
- Rails.logger.warn "[DEPRECATION] ReactOnRails. You have both generated_assets_dirs and "\
240
- "generated_assets_dir defined. Define ONLY generated_assets_dir if NOT using Webpacker"\
241
- " and define neither if using Webpacker"
227
+ Rails.logger.warn "[DEPRECATION] ReactOnRails. You have both generated_assets_dirs and " \
228
+ "generated_assets_dir defined. Define ONLY generated_assets_dir if NOT using Webpacker " \
229
+ "and define neither if using Webpacker"
242
230
  end
243
231
  end
244
232
 
@@ -266,6 +254,32 @@ module ReactOnRails
266
254
 
267
255
  raise ReactOnRails::Error, msg
268
256
  end
257
+
258
+ def shakapacker_precompile?
259
+ return Webpacker.config.webpacker_precompile? if ReactOnRails::WebpackerUtils.using_shakapacker_6?
260
+
261
+ Webpacker.config.shakapacker_precompile?
262
+ end
263
+
264
+ def shakapacker_clean_task
265
+ ReactOnRails::WebpackerUtils.using_shakapacker_6? ? "webpacker:clean" : "shakapacker:clean"
266
+ end
267
+
268
+ def compile_command_conflict_message
269
+ packer = ReactOnRails::WebpackerUtils.using_shakapacker_6? ? "webpacker" : "shakapacker"
270
+
271
+ <<~MSG
272
+
273
+ React on Rails and Shakapacker error in configuration!
274
+ In order to use config/react_on_rails.rb config.build_production_command,
275
+ you must edit config/#{packer}.yml to include this value in the default configuration:
276
+ '#{packer}_precompile: false'
277
+
278
+ Alternatively, remove the config/react_on_rails.rb config.build_production_command and the
279
+ default bin/#{packer} script will be used for assets:precompile.
280
+
281
+ MSG
282
+ end
269
283
  end
270
284
  end
271
285
  # rubocop:enable Metrics/ClassLength
@@ -4,13 +4,13 @@ require "English"
4
4
 
5
5
  module ReactOnRails
6
6
  module GitUtils
7
- def self.uncommitted_changes?(message_handler)
7
+ def self.uncommitted_changes?(message_handler, git_installed = true)
8
8
  return false if ENV["COVERAGE"] == "true"
9
9
 
10
10
  status = `git status --porcelain`
11
- return false if $CHILD_STATUS.success? && status.empty?
11
+ return false if git_installed && status&.empty?
12
12
 
13
- error = if $CHILD_STATUS.success?
13
+ error = if git_installed
14
14
  "You have uncommitted code. Please commit or stash your changes before continuing"
15
15
  else
16
16
  "You do not have Git installed. Please install Git, and commit your changes before continuing"
@@ -155,7 +155,7 @@ module ReactOnRails
155
155
  if defer
156
156
  @registered_stores_defer_render ||= []
157
157
  @registered_stores_defer_render << redux_store_data
158
- "YOU SHOULD NOT SEE THIS ON YOUR VIEW -- Uses as a code block, like <% redux_store %> "\
158
+ "YOU SHOULD NOT SEE THIS ON YOUR VIEW -- Uses as a code block, like <% redux_store %> " \
159
159
  "and not <%= redux store %>"
160
160
  else
161
161
  @registered_stores ||= []
@@ -245,7 +245,7 @@ module ReactOnRails
245
245
  return "{}" if hash_or_string.nil?
246
246
 
247
247
  unless hash_or_string.is_a?(String) || hash_or_string.is_a?(Hash)
248
- raise ReactOnRails::Error, "#{__method__} only accepts String or Hash as argument "\
248
+ raise ReactOnRails::Error, "#{__method__} only accepts String or Hash as argument " \
249
249
  "(#{hash_or_string.class} given)."
250
250
  end
251
251
 
@@ -4,25 +4,8 @@ require "active_support/core_ext/string/output_safety"
4
4
 
5
5
  module ReactOnRails
6
6
  class JsonOutput
7
- ESCAPE_REPLACEMENT = {
8
- "&" => '\u0026',
9
- ">" => '\u003e',
10
- "<" => '\u003c',
11
- "\u2028" => '\u2028',
12
- "\u2029" => '\u2029'
13
- }.freeze
14
- ESCAPE_REGEXP = /[\u2028\u2029&><]/u.freeze
15
-
16
7
  def self.escape(json)
17
- return escape_without_erb_util(json) if Utils.rails_version_less_than_4_1_1
18
-
19
8
  ERB::Util.json_escape(json)
20
9
  end
21
-
22
- def self.escape_without_erb_util(json)
23
- # https://github.com/rails/rails/blob/60257141462137331387d0e34931555cf0720886/activesupport/lib/active_support/core_ext/string/output_safety.rb#L113
24
-
25
- json.to_s.gsub(ESCAPE_REGEXP, ESCAPE_REPLACEMENT)
26
- end
27
10
  end
28
11
  end
@@ -100,14 +100,14 @@ module ReactOnRails
100
100
 
101
101
  def convert
102
102
  file_names.each do |name|
103
- template = send("template_#{name}")
103
+ template = send(:"template_#{name}")
104
104
  path = file(name)
105
105
  generate_file(template, path)
106
106
  end
107
107
  end
108
108
 
109
109
  def generate_file(template, path)
110
- result = ERB.new(template).result()
110
+ result = ERB.new(template).result
111
111
  File.write(path, result)
112
112
  end
113
113
 
@@ -138,7 +138,7 @@ module ReactOnRails
138
138
  def flatten(translations)
139
139
  translations.each_with_object({}) do |(k, v), h|
140
140
  if v.is_a? Hash
141
- flatten(v).map { |hk, hv| h["#{k}.#{hk}".to_sym] = hv }
141
+ flatten(v).map { |hk, hv| h[:"#{k}.#{hk}"] = hv }
142
142
  elsif v.is_a?(String)
143
143
  h[k] = v.gsub("%{", "{")
144
144
  elsif !v.is_a?(Array)
@@ -157,7 +157,7 @@ module ReactOnRails
157
157
  <<-JS.strip_heredoc
158
158
  import { defineMessages } from 'react-intl';
159
159
 
160
- const defaultLocale = \'#{default_locale}\';
160
+ const defaultLocale = '#{default_locale}';
161
161
 
162
162
  const defaultMessages = defineMessages(#{@defaults});
163
163
 
@@ -21,7 +21,7 @@ module ReactOnRails
21
21
  <<-JS.strip_heredoc
22
22
  import { defineMessages } from 'react-intl';
23
23
 
24
- const defaultLocale = \'#{default_locale}\';
24
+ const defaultLocale = '#{default_locale}';
25
25
 
26
26
  const defaultMessages = defineMessages(#{@defaults});
27
27
 
@@ -5,7 +5,7 @@ require "fileutils"
5
5
  module ReactOnRails
6
6
  # rubocop:disable Metrics/ClassLength
7
7
  class PacksGenerator
8
- CONTAINS_CLIENT_OR_SERVER_REGEX = /\.(server|client)($|\.)/.freeze
8
+ CONTAINS_CLIENT_OR_SERVER_REGEX = /\.(server|client)($|\.)/
9
9
  MINIMUM_SHAKAPACKER_VERSION = [6, 5, 1].freeze
10
10
 
11
11
  def self.instance
@@ -155,9 +155,7 @@ module ReactOnRails
155
155
  end
156
156
 
157
157
  def common_component_to_path
158
- common_components_paths = Dir.glob("#{components_search_path}/*").reject do |f|
159
- CONTAINS_CLIENT_OR_SERVER_REGEX.match?(f)
160
- end
158
+ common_components_paths = Dir.glob("#{components_search_path}/*").grep_v(CONTAINS_CLIENT_OR_SERVER_REGEX)
161
159
  component_name_to_path(common_components_paths)
162
160
  end
163
161
 
@@ -35,7 +35,7 @@ module ReactOnRails
35
35
  props.clone)
36
36
  end
37
37
 
38
- raise ReactOnRails::Error, "ReactOnRails: your rendering_props_extension module is missing the "\
38
+ raise ReactOnRails::Error, "ReactOnRails: your rendering_props_extension module is missing the " \
39
39
  "required adjust_props_for_client_side_hydration method & can not be used"
40
40
  end
41
41
  props
@@ -7,7 +7,6 @@ module ReactOnRails
7
7
  module ServerRenderingPool
8
8
  # rubocop:disable Metrics/ClassLength
9
9
  class RubyEmbeddedJavaScript
10
- # rubocop:enable Metrics/ClassLength
11
10
  class << self
12
11
  def reset_pool
13
12
  options = {
@@ -125,8 +124,8 @@ module ReactOnRails
125
124
  File.read(server_js_file)
126
125
  end
127
126
  rescue StandardError => e
128
- msg = "You specified server rendering JS file: #{server_js_file}, but it cannot be "\
129
- "read. You may set the server_bundle_js_file in your configuration to be \"\" to "\
127
+ msg = "You specified server rendering JS file: #{server_js_file}, but it cannot be " \
128
+ "read. You may set the server_bundle_js_file in your configuration to be \"\" to " \
130
129
  "avoid this warning.\nError is: #{e}"
131
130
  raise ReactOnRails::Error, msg
132
131
  end
@@ -145,15 +144,15 @@ module ReactOnRails
145
144
  begin
146
145
  if ReactOnRails.configuration.trace
147
146
  Rails.logger.info do
148
- "[react_on_rails] Created JavaScript context with file "\
147
+ "[react_on_rails] Created JavaScript context with file " \
149
148
  "#{ReactOnRails::Utils.server_bundle_js_file_path}"
150
149
  end
151
150
  end
152
151
  ExecJS.compile(base_js_code)
153
152
  rescue StandardError => e
154
- msg = "ERROR when compiling base_js_code! "\
155
- "See file #{file_name} to "\
156
- "correlate line numbers of error. Error is\n\n#{e.message}"\
153
+ msg = "ERROR when compiling base_js_code! " \
154
+ "See file #{file_name} to " \
155
+ "correlate line numbers of error. Error is\n\n#{e.message}" \
157
156
  "\n\n#{e.backtrace.join("\n")}"
158
157
  Rails.logger.error(msg)
159
158
  trace_js_code_used("Error when compiling JavaScript code for the context.", base_js_code,
@@ -192,8 +191,8 @@ module ReactOnRails
192
191
 
193
192
  def undefined_for_exec_js_logging(function_name)
194
193
  if ReactOnRails.configuration.trace
195
- "console.error('[React on Rails Rendering] #{function_name} is not defined for server rendering.');\n"\
196
- " console.error(getStackTrace().join('\\n'));"
194
+ "console.error('[React on Rails Rendering] #{function_name} is not defined for server rendering.');\n " \
195
+ "console.error(getStackTrace().join('\\n'));"
197
196
  else
198
197
  ""
199
198
  end
@@ -235,6 +234,7 @@ module ReactOnRails
235
234
  raise ReactOnRails::Error, msg
236
235
  end
237
236
  end
237
+ # rubocop:enable Metrics/ClassLength
238
238
  end
239
239
  end
240
240
  end
@@ -62,10 +62,10 @@ module ReactOnRails
62
62
  else
63
63
  file_list = make_file_list(make_globs(generated_assets_full_path)).to_ary
64
64
  puts "V" * 80
65
- puts "Please define config.webpack_generated_files (array) so the test helper knows "\
66
- "which files are required. If you are using webpacker, you typically need to only "\
65
+ puts "Please define config.webpack_generated_files (array) so the test helper knows " \
66
+ "which files are required. If you are using webpacker, you typically need to only " \
67
67
  "include 'manifest.json'."
68
- puts "Detected the possible following files to check for webpack compilation in "\
68
+ puts "Detected the possible following files to check for webpack compilation in " \
69
69
  "#{generated_assets_full_path}"
70
70
  puts file_list.join("\n")
71
71
  puts "^" * 80
@@ -80,8 +80,8 @@ module ReactOnRails
80
80
 
81
81
  unless @printed_once
82
82
  puts
83
- puts "====> React On Rails: Checking files in "\
84
- "#{webpack_assets_status_checker.generated_assets_full_path} for "\
83
+ puts "====> React On Rails: Checking files in " \
84
+ "#{webpack_assets_status_checker.generated_assets_full_path} for " \
85
85
  "outdated/missing bundles based on source_path #{source_path}"
86
86
  puts
87
87
  @printed_once = true
@@ -118,12 +118,6 @@ module ReactOnRails
118
118
  end
119
119
  end
120
120
 
121
- # rubocop:disable Naming/VariableNumber
122
- def self.rails_version_less_than_4_1_1
123
- rails_version_less_than("4.1.1")
124
- end
125
- # rubocop:enable Naming/VariableNumber
126
-
127
121
  module Required
128
122
  def required(arg_name)
129
123
  raise ReactOnRails::Error, "#{arg_name} is required"
@@ -195,13 +189,13 @@ module ReactOnRails
195
189
  to_remove = str.length - max_length
196
190
  lstrip = (to_remove / 2.0).ceil
197
191
  rstrip = to_remove - lstrip
198
- str[0..(midpoint - lstrip - 1)] + TRUNCATION_FILLER + str[(midpoint + rstrip)..-1]
192
+ str[0..(midpoint - lstrip - 1)] + TRUNCATION_FILLER + str[(midpoint + rstrip)..]
199
193
  end
200
194
 
201
195
  def self.find_most_recent_mtime(files)
202
196
  files.reduce(1.year.ago) do |newest_time, file|
203
197
  mt = File.mtime(file)
204
- mt > newest_time ? mt : newest_time
198
+ [mt, newest_time].max
205
199
  end
206
200
  end
207
201
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReactOnRails
4
- VERSION = "13.4.0"
4
+ VERSION = "14.0.0"
5
5
  end
@@ -6,7 +6,7 @@ module ReactOnRails
6
6
  class VersionChecker
7
7
  attr_reader :node_package_version
8
8
 
9
- MAJOR_MINOR_PATCH_VERSION_REGEX = /(\d+)\.(\d+)\.(\d+)/.freeze
9
+ MAJOR_MINOR_PATCH_VERSION_REGEX = /(\d+)\.(\d+)\.(\d+)/
10
10
 
11
11
  def self.build
12
12
  new(NodePackageVersion.build)
@@ -52,7 +52,7 @@ module ReactOnRails
52
52
  end
53
53
 
54
54
  def raise_node_semver_version_warning
55
- msg = "**ERROR** ReactOnRails: Your node package version for react-on-rails contains a "\
55
+ msg = "**ERROR** ReactOnRails: Your node package version for react-on-rails contains a " \
56
56
  "^ or ~\n#{common_error_msg}"
57
57
  raise ReactOnRails::Error, msg
58
58
  end
@@ -141,5 +141,11 @@ module ReactOnRails
141
141
  def self.semver_to_string(ary)
142
142
  "#{ary[0]}.#{ary[1]}.#{ary[2]}"
143
143
  end
144
+
145
+ def self.using_shakapacker_6?
146
+ shakapacker_major_version = shakapacker_version_as_array[0]
147
+
148
+ shakapacker_major_version == 6
149
+ end
144
150
  end
145
151
  end
@@ -18,7 +18,7 @@ namespace :react_on_rails do
18
18
  elsif build_production_command.methods.include?(:call)
19
19
  build_production_command.call
20
20
  else
21
- msg = "ReactonRails.configuration.build_production_command is improperly configured. "\
21
+ msg = "ReactonRails.configuration.build_production_command is improperly configured. " \
22
22
  "Value = #{build_production_command} with class #{build_production_command.class}"
23
23
  puts Rainbow(msg).red
24
24
  exit!(1)
@@ -16,14 +16,15 @@ Gem::Specification.new do |s|
16
16
  s.homepage = "https://github.com/shakacode/react_on_rails"
17
17
  s.license = "MIT"
18
18
 
19
- s.files = `git ls-files -z`.split("\x0").reject do |f|
20
- f.match(%r{^(test|spec|features|gen-examples|tmp|node_modules|node_package|coverage)/})
19
+ s.files = `git ls-files -z`.split("\x0").reject do |f|
20
+ f.match(%r{^(docs|test|spec|features|gen-examples|tmp|node_modules|node_package|coverage|rakelib|script)/}) ||
21
+ f.match(%r{^(jest\.config\.js|book\.json|package\.json|package-scripts\.yml|yarn\.lock|\..*)})
21
22
  end
22
23
  s.bindir = "exe"
23
24
  s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
25
  s.require_paths = ["lib"]
25
26
 
26
- s.required_ruby_version = ">= 2.7.0"
27
+ s.required_ruby_version = ">= 3.0.0"
27
28
 
28
29
  s.add_dependency "addressable"
29
30
  s.add_dependency "connection_pool"
@@ -31,7 +32,6 @@ Gem::Specification.new do |s|
31
32
  s.add_dependency "rails", ">= 5.2"
32
33
  s.add_dependency "rainbow", "~> 3.0"
33
34
 
34
- s.add_development_dependency "bundler", "~> 2"
35
35
  s.add_development_dependency "gem-release"
36
36
  s.post_install_message = '
37
37
  --------------------------------------------------------------------------------