react_on_rails 13.0.0.beta.0 → 13.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -2
  3. data/NEWS.md +1 -1
  4. data/README.md +4 -4
  5. data/docs/additional-details/recommended-project-structure.md +1 -1
  6. data/docs/guides/rails-webpacker-react-integration-options.md +4 -3
  7. data/docs/guides/react-server-rendering.md +1 -1
  8. data/docs/guides/tutorial.md +6 -5
  9. data/docs/guides/webpack-configuration.md +1 -1
  10. data/docs/home.md +1 -1
  11. data/lib/generators/react_on_rails/base_generator.rb +1 -0
  12. data/lib/generators/react_on_rails/templates/base/base/babel.config.js.tt +1 -1
  13. data/lib/generators/react_on_rails/templates/base/base/config/webpack/clientWebpackConfig.js.tt +1 -1
  14. data/lib/generators/react_on_rails/templates/base/base/config/webpack/commonWebpackConfig.js.tt +1 -1
  15. data/lib/generators/react_on_rails/templates/base/base/config/webpack/development.js.tt +1 -3
  16. data/lib/generators/react_on_rails/templates/base/base/config/webpack/production.js.tt +1 -3
  17. data/lib/generators/react_on_rails/templates/base/base/config/webpack/serverWebpackConfig.js.tt +1 -1
  18. data/lib/generators/react_on_rails/templates/base/base/config/webpack/test.js.tt +9 -0
  19. data/lib/generators/react_on_rails/templates/base/base/config/webpack/webpack.config.js.tt +2 -2
  20. data/lib/generators/react_on_rails/templates/base/base/config/webpack/webpackConfig.js.tt +1 -1
  21. data/lib/react_on_rails/helper.rb +18 -16
  22. data/lib/react_on_rails/json_parse_error.rb +1 -1
  23. data/lib/react_on_rails/prerender_error.rb +5 -2
  24. data/lib/react_on_rails/server_rendering_pool/ruby_embedded_java_script.rb +19 -4
  25. data/lib/react_on_rails/version.rb +1 -1
  26. data/package.json +1 -1
  27. metadata +5 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cdfa729f75cfd337b3436fe6e310d7e6a7789455fcba1baa729a2288d98c646f
4
- data.tar.gz: 54495ad6beed806991e973866a4ccd62fd7b41d3141cbaec2e71a07e13999563
3
+ metadata.gz: 70b55160147309cf5da5f36f8d1f23ebad08c70b5d13362acc38ed1c6fbcd780
4
+ data.tar.gz: d6635ba54093daec5ee69412f46b0751d18dd035e37c69886625e94f3bc24728
5
5
  SHA512:
6
- metadata.gz: d0610cfa82d1d1b60f09f1586fb966dcfa12daf8549762f09e74a1fc00df6e0c8374138950e5195db0bed8501f7d8f3a1f62d90a9a779e6b652a0ada08d19d4e
7
- data.tar.gz: 9e87301d7790829e6fe2391a68cf8de6e5724777e11b955b112783c7cfec13820d5a0c28691c5f2851ec49c92ab20e886b8c2a7b4c3fe2cfcec727d662cc4490
6
+ metadata.gz: bffe017f74585f13ddb5a647d0684b778e48fc40ebf62e586d0b1091cfa04716602a1fa54c21118fc0b43e2d4d9b6d65b9a5c333c3ea6b31ad2a90b9e7675a60
7
+ data.tar.gz: 2ea465e9a7cc0da248743bade989b811f1703371ca8dd757e9b072cb6b30106e4ebf2cc9351f742d4b8c63782b0b101183ca676733418df0d12677a84f05ccec
data/CHANGELOG.md CHANGED
@@ -16,6 +16,21 @@ Please follow the recommendations outlined at [keepachangelog.com](http://keepac
16
16
  Changes since last non-beta release.
17
17
 
18
18
  *Please add entries here for your pull requests that are not yet released.*
19
+ ### [13.0.2] - 2022-03-09
20
+ #### Fixed
21
+ - React 16 doesn't support version property, causing problems loading React on Rails. [PR 1435](https://github.com/shakacode/react_on_rails/pull/1435) by [justin808](https://github.com/justin808).
22
+
23
+ ### [13.0.1] - 2022-02-09
24
+ #### Improved
25
+ - Updated the default generator. [PR 1431](https://github.com/shakacode/react_on_rails/pull/1431) by [justin808](https://github.com/justin808).
26
+
27
+ ### [13.0.0] - 2022-02-08
28
+ #### Breaking
29
+ - Removed webpacker as a dependency. Add gem Shakapacker to your project, and update your package.json to also use shakapacker.
30
+
31
+ #### Fixed
32
+ - Propper throwing of exceptions.
33
+ - Default configuration better handles test env.
19
34
 
20
35
  ### [12.6.0] - 2022-01-22
21
36
 
@@ -39,7 +54,7 @@ Changes since last non-beta release.
39
54
  - Supports Rails 7.
40
55
 
41
56
  #### Changed
42
- - Changed logic of determining the usage of the default rails/webpacker webpack config or a custom command to only check if the config.build_production_command is defined. [PR 1402](https://github.com/shakacode/react_on_rails/pull/1402)by [justin808](https://github.com/justin808) and [gscarv13](https://github.com/gscarv13).
57
+ - Changed logic of determining the usage of the default rails/webpacker webpack config or a custom command to only check if the config.build_production_command is defined. [PR 1402](https://github.com/shakacode/react_on_rails/pull/1402) by [justin808](https://github.com/justin808) and [gscarv13](https://github.com/gscarv13).
43
58
  - Minimimum required Ruby is 2.7 to match lastest rails/webpacker.
44
59
 
45
60
  ### [12.4.0] - 2021-09-22
@@ -999,7 +1014,9 @@ Best done with Object destructing:
999
1014
  ##### Fixed
1000
1015
  - Fix several generator related issues.
1001
1016
 
1002
- [Unreleased]: https://github.com/shakacode/react_on_rails/compare/12.6.0...master
1017
+ [Unreleased]: https://github.com/shakacode/react_on_rails/compare/13.0.1...master
1018
+ [13.0.1]: https://github.com/shakacode/react_on_rails/compare/13.0.0...13.0.1
1019
+ [13.0.0]: https://github.com/shakacode/react_on_rails/compare/12.6.0...13.0.0
1003
1020
  [12.6.0]: https://github.com/shakacode/react_on_rails/compare/12.5.2...12.6.0
1004
1021
  [12.5.2]: https://github.com/shakacode/react_on_rails/compare/12.5.1...12.5.2
1005
1022
  [12.5.1]: https://github.com/shakacode/react_on_rails/compare/12.5.0...12.5.1
data/NEWS.md CHANGED
@@ -7,7 +7,7 @@ RR 474: React on Rails V12 – Don’t Shave That Yak! with Justin Gordon](https
7
7
 
8
8
  * **October 1, 2020**: See the [spec/dummy](https://github.com/shakacode/react_on_rails/tree/master/spec/dummy) example repo for a simple configuration of webpack via the rails/webpacker gem
9
9
  that supports SSR.
10
- * **August 2, 2020**: See the example repo of [React on Rails Tutorial With SSR, HMR fast refresh, and TypeScript](https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh) for a new way to setup the creation of your SSR bundle with `rails/webpacker`.
10
+ * **August 2, 2020**: See the example repo of [React on Rails Tutorial With SSR, HMR fast refresh, and TypeScript](https://github.com/shakacode/react_on_rails_demo_ssr_hmr) for a new way to setup the creation of your SSR bundle with `rails/webpacker`.
11
11
  * July 8, 2020: Release **v12**.
12
12
  1. **React Hooks Support** for top level components
13
13
  2. **Typescript bindings**
data/README.md CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  # News
15
15
  * ShakaCode now maintains the official successor to `rails/webpacker`, [`shakapacker`](https://github.com/shakacode/shakapacker).
16
- * Project is updated to support Rails 7!
16
+ * Project is updated to support Rails 7 and Shakapacker v6+!
17
17
 
18
18
  -----
19
19
 
@@ -44,12 +44,12 @@ To provide a high performance framework for integrating Ruby on Rails with React
44
44
  Given that `rails/webpacker` gem already provides basic React integration, why would you use "React on Rails"?
45
45
 
46
46
  1. Easy passing of props directly from your Rails view to your React components rather than having your Rails view load and then make a separate request to your API.
47
- 1. Tight integration with [rails/webpacker](https://github.com/rails/webpacker).
48
- 1. Server-Side Rendering (SSR), often used for SEO crawler indexing and UX performance, is not offered by `rails/webpacker`.
47
+ 1. Tight integration with [shakapacker](https://github.com/shakacode/shakapacker) (or it's predecessor [rails/webpacker](https://github.com/rails/webpacker)).
48
+ 1. Server-Side Rendering (SSR), often used for SEO crawler indexing and UX performance.
49
49
  1. [Redux](https://github.com/reactjs/redux) and [React Router](https://github.com/ReactTraining/react-router#readme) integration with server-side-rendering.
50
50
  1. [Internationalization (I18n) and (localization)](https://www.shakacode.com/react-on-rails/docs/guides/i18n)
51
51
  1. A supportive community. This [web search shows how live public sites are using React on Rails](https://publicwww.com/websites/%22react-on-rails%22++-undeveloped.com+depth%3Aall/).
52
- 1. [Reason ML Support](https://github.com/shakacode/reason-react-on-rails-example).
52
+ 1. [ReScript Support](https://github.com/shakacode/rescript-react-on-rails-example).
53
53
 
54
54
  See [Rails/Webpacker React Integration Options](https://www.shakacode.com/react-on-rails/docs/guides/rails-webpacker-react-integration-options) for comparisons to other gems.
55
55
 
@@ -12,7 +12,7 @@ app/javascript:
12
12
  │ └── hello-world-bundle.js
13
13
  ```
14
14
 
15
- Per the example repo [shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh](https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh),
15
+ Per the example repo [shakacode/react_on_rails_demo_ssr_hmr](https://github.com/shakacode/react_on_rails_demo_ssr_hmr),
16
16
  you should consider keeping your codebase mostly consistent with the defaults for [rails/webpacker](https://github.com/rails/webpacker).
17
17
 
18
18
  ## Steps to convert from the generator defaults to use a `/client` directory for source code
@@ -1,4 +1,4 @@
1
- # Rails/Webpacker React Integration Options
1
+ # Shakapacker (Rails/Webpacker) React Integration Options
2
2
 
3
3
  You only _need_ props hydration if you need SSR. However, there's no good reason to
4
4
  have your app make a second round trip to the Rails server to get initialization props.
@@ -81,7 +81,7 @@ Webpack's HMR allows the replacement of modules for React in-place without reloa
81
81
  ### React Refresh Webpack Plugin
82
82
  [github.com/pmmmwh/react-refresh-webpack-plugin](https://github.com/pmmmwh/react-refresh-webpack-plugin)
83
83
 
84
- You can see an example commit of adding this [here](https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/commit/7e53803fce7034f5ecff335db1f400a5743a87e7).
84
+ You can see an example commit of adding this [here](https://github.com/shakacode/react_on_rails_demo_ssr_hmr/commit/7e53803fce7034f5ecff335db1f400a5743a87e7).
85
85
 
86
86
  1. Add react refresh packages:
87
87
  `yarn add @pmmmwh/react-refresh-webpack-plugin react-refresh -D`
@@ -111,6 +111,8 @@ You can see an example commit of adding this [here](https://github.com/shakacode
111
111
  }
112
112
  ```
113
113
 
114
+ ---
115
+
114
116
  ### React Hot Loader (Deprecated)
115
117
 
116
118
  1. Add the `react-hot-loader` and ` @hot-loader/react-dom` npm packages.
@@ -179,4 +181,3 @@ module.exports = environment.toWebpackConfig()
179
181
 
180
182
  module.exports = environment;
181
183
  ```
182
-
@@ -3,7 +3,7 @@
3
3
  See also [Client vs. Server Rendering](https://www.shakacode.com/react-on-rails/docs/guides/client-vs-server-rendering/).
4
4
 
5
5
  ## What is the easiest way to setup a webpack configuration for server-side-rendering?
6
- See the example webpack setup here: [github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh](https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh).
6
+ See the example webpack setup here: [github.com/shakacode/react_on_rails_demo_ssr_hmr](https://github.com/shakacode/react_on_rails_demo_ssr_hmr).
7
7
 
8
8
  ## What is Server Rendering?
9
9
 
@@ -1,10 +1,10 @@
1
1
  # React on Rails Basic Tutorial
2
2
 
3
- **November 11, 2020**: See the example repo of [React on Rails Tutorial With SSR, HMR fast refresh, and TypeScript](https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh) for a new way to setup the creation of your SSR bundle with `rails/webpacker`. This file will be update shortly. Most of it is still relevant.
3
+ _Also see the example repo of [React on Rails Tutorial With SSR, HMR fast refresh, and TypeScript](https://github.com/shakacode/react_on_rails_demo_ssr_hmr)_
4
4
 
5
5
  -----
6
6
 
7
- *Updated for Ruby 2.7.1, Rails 6.0.3.1, React on Rails v12.5.0, and Shakapacker v6*
7
+ *Updated for Ruby 2.7, Rails 7, React on Rails v13, and Shakapacker v6*
8
8
 
9
9
  This tutorial guides you through setting up a new or existing Rails app with **React on Rails**, demonstrating Rails + React + Redux + Server Rendering.
10
10
 
@@ -23,7 +23,7 @@ By the time you read this, the latest may have changed. Be sure to check the ver
23
23
 
24
24
  ## Setting up your environment
25
25
 
26
- Trying out **React on Rails** is super easy, so long as you have the basic prerequisites. This includes the basics for Rails 6.x and node version 14+. I recommend `rvm` or `rbevn` and `nvm` to install Ruby and Node. Rails can be installed as an ordinary gem.
26
+ Trying out **React on Rails** is super easy, so long as you have the basic prerequisites. This includes the basics for Rails 6.x and node version 14+. I recommend `rvm` or `rbenv` and `nvm` to install Ruby and Node. Rails can be installed as an ordinary gem.
27
27
 
28
28
  ```
29
29
  nvm install node # download and install latest stable Node
@@ -49,6 +49,7 @@ cd <directory where you want to create your new Rails app>
49
49
 
50
50
  # Any name you like for the rails app
51
51
  # Skip javascript so will add that next and get the current version
52
+ # This is for Rails 7
52
53
  rails new --skip-turbolinks --skip-javascript test-react-on-rails
53
54
 
54
55
  cd test-react-on-rails
@@ -60,7 +61,7 @@ of both the gem and npm package. In other words, don't use the `^` or `~` in the
60
61
  _Use the latest version for `react_on_rails` and `shakapacker`._
61
62
 
62
63
  ```
63
- gem 'react_on_rails', '13.0.0' # prefer exact gem version to match npm version
64
+ gem 'react_on_rails', '13.0.1' # prefer exact gem version to match npm version
64
65
  gem 'shakapacker', '6.1.1' # prefer exact gem version to match npm version
65
66
 
66
67
  ```
@@ -68,7 +69,7 @@ gem 'shakapacker', '6.1.1' # prefer exact gem version to match npm v
68
69
  Note: The latest released React On Rails version is considered stable. Please use the latest
69
70
  version to ensure you get all the security patches and the best support.
70
71
 
71
- ## Run the webpacker (shakapacker) generator
72
+ ## Run the shakapacker (webpacker) generator
72
73
 
73
74
  ```terminal
74
75
  bundle exec rails webpacker:install
@@ -11,7 +11,7 @@
11
11
 
12
12
  To get a deeper understanding of `rails/webpacker`, watch [RailsConf 2020 CE - Webpacker, It-Just-Works, But How? by Justin Gordon](https://youtu.be/sJLoOpc5LD8)
13
13
 
14
- Per the example repo [shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh](https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh),
14
+ Per the example repo [shakacode/react_on_rails_demo_ssr_hmr](https://github.com/shakacode/react_on_rails_demo_ssr_hmr),
15
15
  you should consider keeping your codebase mostly consistent with the defaults for [rails/webpacker](https://github.com/rails/webpacker).
16
16
 
17
17
  # React on Rails
data/docs/home.md CHANGED
@@ -16,7 +16,7 @@
16
16
  ## Example Apps
17
17
  1. [spec/dummy](https://github.com/shakacode/react_on_rails/tree/master/spec/dummy) example repo for a simple configuration of webpack via the rails/webpacker gem
18
18
  that supports SSR.
19
- 2. Example repo of [React on Rails Tutorial With SSR, HMR fast refresh, and TypeScript](https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh) for a new way to setup the creation of your SSR bundle with `rails/webpacker`.
19
+ 2. Example repo of [React on Rails Tutorial With SSR, HMR fast refresh, and TypeScript](https://github.com/shakacode/react_on_rails_demo_ssr_hmr) for a new way to setup the creation of your SSR bundle with `rails/webpacker`.
20
20
  3. Live, [open source](https://github.com/shakacode/react-webpack-rails-tutorial), example of this gem, see [reactrails.com](http://reactrails.com).
21
21
 
22
22
  # Other Resources
@@ -51,6 +51,7 @@ module ReactOnRails
51
51
  base_files = %w[babel.config.js
52
52
  config/webpack/clientWebpackConfig.js
53
53
  config/webpack/commonWebpackConfig.js
54
+ config/webpack/test.js
54
55
  config/webpack/development.js
55
56
  config/webpack/production.js
56
57
  config/webpack/serverWebpackConfig.js
@@ -1,4 +1,4 @@
1
- <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/blob/master/babel.config.js") %>
1
+ <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_demo_ssr_hmr/blob/master/babel.config.js") %>
2
2
 
3
3
  module.exports = function (api) {
4
4
  const defaultConfigFunc = require('shakapacker/package/babel/preset.js')
@@ -1,4 +1,4 @@
1
- <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/blob/master/config/webpack/clientWebpackConfig.js") %>
1
+ <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_demo_ssr_hmr/blob/master/config/webpack/clientWebpackConfig.js") %>
2
2
 
3
3
  const commonWebpackConfig = require('./commonWebpackConfig');
4
4
 
@@ -1,4 +1,4 @@
1
- <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/blob/master/config/webpack/commonWebpackConfig.js") %>
1
+ <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_demo_ssr_hmr/blob/master/config/webpack/commonWebpackConfig.js") %>
2
2
 
3
3
  // Common configuration applying to client and server configuration
4
4
  const { webpackConfig: baseClientWebpackConfig, merge } = require('shakapacker');
@@ -1,6 +1,4 @@
1
- <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/blob/master/config/webpack/development.js") %>
2
-
3
- process.env.NODE_ENV = process.env.NODE_ENV || 'development';
1
+ <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_demo_ssr_hmr/blob/master/config/webpack/development.js") %>
4
2
 
5
3
  const { devServer, inliningCss } = require('shakapacker');
6
4
 
@@ -1,6 +1,4 @@
1
- <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/blob/master/config/webpack/production.js") %>
2
-
3
- process.env.NODE_ENV = process.env.NODE_ENV || 'production';
1
+ <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_demo_ssr_hmr/blob/master/config/webpack/production.js") %>
4
2
 
5
3
  const webpackConfig = require('./webpackConfig');
6
4
 
@@ -1,4 +1,4 @@
1
- <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/blob/master/config/webpack/serverWebpackConfig.js") %>
1
+ <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_demo_ssr_hmr/blob/master/config/webpack/serverWebpackConfig.js") %>
2
2
 
3
3
  const { merge, config } = require('shakapacker');
4
4
  const commonWebpackConfig = require('./commonWebpackConfig');
@@ -0,0 +1,9 @@
1
+ <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_demo_ssr_hmr/blob/master/config/webpack/test.js") %>
2
+
3
+ const webpackConfig = require('./webpackConfig')
4
+
5
+ const testOnly = (_clientWebpackConfig, _serverWebpackConfig) => {
6
+ // place any code here that is for test only
7
+ }
8
+
9
+ module.exports = webpackConfig(testOnly)
@@ -1,4 +1,4 @@
1
- const { env, webpackConfig } = require('shakapacker')
1
+ const { env } = require('shakapacker')
2
2
  const { existsSync } = require('fs')
3
3
  const { resolve } = require('path')
4
4
 
@@ -8,7 +8,7 @@ const envSpecificConfig = () => {
8
8
  console.log(`Loading ENV specific webpack configuration file ${path}`)
9
9
  return require(path)
10
10
  } else {
11
- return webpackConfig
11
+ throw new Error(`Could not find file to load ${path}, based on NODE_ENV`)
12
12
  }
13
13
  }
14
14
 
@@ -1,4 +1,4 @@
1
- <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/blob/master/config/webpack/webpackConfig.js") %>
1
+ <%= add_documentation_reference(config[:message], "// https://github.com/shakacode/react_on_rails_demo_ssr_hmr/blob/master/config/webpack/webpackConfig.js") %>
2
2
 
3
3
  const clientWebpackConfig = require('./clientWebpackConfig');
4
4
  const serverWebpackConfig = require('./serverWebpackConfig');
@@ -234,9 +234,9 @@ module ReactOnRails
234
234
  console_log_script = result["consoleLogScript"]
235
235
  raw("#{html}#{render_options.replay_console ? console_log_script : ''}")
236
236
  rescue ExecJS::ProgramError => err
237
- raise ReactOnRails::PrerenderError, component_name: "N/A (server_render_js called)",
238
- err: err,
239
- js_code: js_code
237
+ raise ReactOnRails::PrerenderError.new(component_name: "N/A (server_render_js called)",
238
+ err: err,
239
+ js_code: js_code)
240
240
  end
241
241
 
242
242
  def json_safe_and_pretty(hash_or_string)
@@ -279,8 +279,9 @@ module ReactOnRails
279
279
  # URLs as UTF-8. This situation can occur in browsers that do not encode the
280
280
  # entire URL as UTF-8 already, mostly on the Windows platform (IE11 and lower).
281
281
  original_url_normalized = request.original_url
282
- if original_url_normalized.encoding.to_s == "ASCII-8BIT"
283
- original_url_normalized = original_url_normalized.force_encoding("ISO-8859-1").encode("UTF-8")
282
+ if original_url_normalized.encoding == Encoding::BINARY
283
+ original_url_normalized = original_url_normalized.force_encoding(Encoding::ISO_8859_1)
284
+ .encode(Encoding::UTF_8)
284
285
  end
285
286
 
286
287
  # Using Addressable instead of standard URI to better deal with
@@ -309,6 +310,7 @@ module ReactOnRails
309
310
 
310
311
  @rails_context.merge(serverSide: server_side)
311
312
  end
313
+
312
314
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
313
315
 
314
316
  private
@@ -483,21 +485,21 @@ module ReactOnRails
483
485
  result = ReactOnRails::ServerRenderingPool.server_render_js_with_console_logging(js_code, render_options)
484
486
  rescue StandardError => err
485
487
  # This error came from the renderer
486
- raise ReactOnRails::PrerenderError, component_name: react_component_name,
487
- # Sanitize as this might be browser logged
488
- props: sanitized_props_string(props),
489
- err: err,
490
- js_code: js_code
488
+ raise ReactOnRails::PrerenderError.new(component_name: react_component_name,
489
+ # Sanitize as this might be browser logged
490
+ props: sanitized_props_string(props),
491
+ err: err,
492
+ js_code: js_code)
491
493
  end
492
494
 
493
495
  if result["hasErrors"] && render_options.raise_on_prerender_error
494
496
  # We caught this exception on our backtrace handler
495
- raise ReactOnRails::PrerenderError, component_name: react_component_name,
496
- # Sanitize as this might be browser logged
497
- props: sanitized_props_string(props),
498
- err: nil,
499
- js_code: js_code,
500
- console_messages: result["consoleReplayScript"]
497
+ raise ReactOnRails::PrerenderError.new(component_name: react_component_name,
498
+ # Sanitize as this might be browser logged
499
+ props: sanitized_props_string(props),
500
+ err: nil,
501
+ js_code: js_code,
502
+ console_messages: result["consoleReplayScript"])
501
503
 
502
504
  end
503
505
  result
@@ -4,7 +4,7 @@ module ReactOnRails
4
4
  class JsonParseError < ::ReactOnRails::Error
5
5
  attr_reader :json
6
6
 
7
- def initialize(parse_error, json)
7
+ def initialize(parse_error:, json:)
8
8
  @json = json
9
9
  @original_error = parse_error
10
10
  super(parse_error.message)
@@ -49,10 +49,13 @@ module ReactOnRails
49
49
  message = +"ERROR in SERVER PRERENDERING\n"
50
50
  if err
51
51
  message << <<~MSG
52
- Encountered error: \"#{err}\"
52
+ Encountered error:
53
+
54
+ #{err}
55
+
53
56
  MSG
54
57
 
55
- backtrace = err.backtrace.join("\n")
58
+ backtrace = err.backtrace.first(15).join("\n")
56
59
  else
57
60
  backtrace = nil
58
61
  end
@@ -47,7 +47,7 @@ module ReactOnRails
47
47
  # Note, js_code does not have to be based on React.
48
48
  # js_code MUST RETURN json stringify Object
49
49
  # Calling code will probably call 'html_safe' on return value before rendering to the view.
50
- # rubocop:disable Metrics/CyclomaticComplexity
50
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/PerceivedComplexity
51
51
  def exec_server_render_js(js_code, render_options, js_evaluator = nil)
52
52
  js_evaluator ||= self
53
53
  if render_options.trace
@@ -56,12 +56,27 @@ module ReactOnRails
56
56
  "tmp/server-generated-#{@file_index % 10}.js")
57
57
  @file_index += 1
58
58
  end
59
- json_string = js_evaluator.eval_js(js_code, render_options)
59
+ begin
60
+ json_string = js_evaluator.eval_js(js_code, render_options)
61
+ rescue StandardError => err
62
+ msg = <<~MSG
63
+ Error evaluating server bundle. Check your webpack configuration.
64
+ ===============================================================
65
+ Caught error:
66
+ #{err.message}
67
+ ===============================================================
68
+ MSG
69
+
70
+ if err.message.include?("ReferenceError: self is not defined")
71
+ msg << "\nError indicates that you may have code-splitting incorrectly enabled.\n"
72
+ end
73
+ raise ReactOnRails::Error, msg, err.backtrace
74
+ end
60
75
  result = nil
61
76
  begin
62
77
  result = JSON.parse(json_string)
63
78
  rescue JSON::ParserError => e
64
- raise ReactOnRails::JsonParseError.new(e, json_string)
79
+ raise ReactOnRails::JsonParseError.new(parse_error: e, json: json_string)
65
80
  end
66
81
 
67
82
  if render_options.logging_on_server
@@ -76,7 +91,7 @@ module ReactOnRails
76
91
  end
77
92
  result
78
93
  end
79
- # rubocop:enable Metrics/CyclomaticComplexity
94
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/PerceivedComplexity
80
95
 
81
96
  def trace_js_code_used(msg, js_code, file_name = "tmp/server-generated.js", force: false)
82
97
  return unless ReactOnRails.configuration.trace || force
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReactOnRails
4
- VERSION = "13.0.0.beta.0"
4
+ VERSION = "13.0.2"
5
5
  end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-on-rails",
3
- "version": "13.0.0-beta.0",
3
+ "version": "13.0.2",
4
4
  "description": "react-on-rails JavaScript for react_on_rails Ruby gem",
5
5
  "main": "node_package/lib/ReactOnRails.js",
6
6
  "directories": {
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: 13.0.0.beta.0
4
+ version: 13.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Gordon
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-07 00:00:00.000000000 Z
11
+ date: 2022-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -248,6 +248,7 @@ files:
248
248
  - lib/generators/react_on_rails/templates/base/base/config/webpack/development.js.tt
249
249
  - lib/generators/react_on_rails/templates/base/base/config/webpack/production.js.tt
250
250
  - lib/generators/react_on_rails/templates/base/base/config/webpack/serverWebpackConfig.js.tt
251
+ - lib/generators/react_on_rails/templates/base/base/config/webpack/test.js.tt
251
252
  - lib/generators/react_on_rails/templates/base/base/config/webpack/webpack.config.js.tt
252
253
  - lib/generators/react_on_rails/templates/base/base/config/webpack/webpackConfig.js.tt
253
254
  - lib/generators/react_on_rails/templates/base/base/config/webpacker.yml
@@ -333,9 +334,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
333
334
  version: 2.7.0
334
335
  required_rubygems_version: !ruby/object:Gem::Requirement
335
336
  requirements:
336
- - - ">"
337
+ - - ">="
337
338
  - !ruby/object:Gem::Version
338
- version: 1.3.1
339
+ version: '0'
339
340
  requirements: []
340
341
  rubygems_version: 3.2.32
341
342
  signing_key: