react_on_rails 13.1.0 → 13.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +5 -2
- data/.github/workflows/lint-js-and-ruby.yml +3 -3
- data/.github/workflows/main.yml +19 -13
- data/.github/workflows/package-js-tests.yml +2 -2
- data/.github/workflows/rspec-package-specs.yml +2 -2
- data/.rubocop.yml +4 -0
- data/CHANGELOG.md +21 -1
- data/Gemfile.development_dependencies +2 -2
- data/README.md +7 -5
- data/docs/api/javascript-api.md +9 -0
- data/docs/getting-started.md +15 -6
- data/docs/guides/configuration.md +25 -20
- data/docs/guides/file-system-based-automated-bundle-generation.md +16 -13
- data/docs/guides/installation-into-an-existing-rails-app.md +18 -20
- data/docs/guides/rails-webpacker-react-integration-options.md +8 -8
- data/docs/guides/react-server-rendering.md +1 -1
- data/docs/guides/tutorial.md +36 -32
- data/lib/generators/react_on_rails/base_generator.rb +15 -10
- data/lib/generators/react_on_rails/bin/dev +33 -0
- data/lib/generators/react_on_rails/bin/dev-static +33 -0
- data/lib/generators/react_on_rails/install_generator.rb +5 -0
- data/lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb +1 -1
- data/lib/react_on_rails/configuration.rb +40 -3
- data/lib/react_on_rails/helper.rb +21 -23
- data/lib/react_on_rails/packs_generator.rb +30 -101
- data/lib/react_on_rails/test_helper/ensure_assets_compiled.rb +1 -1
- data/lib/react_on_rails/test_helper/webpack_assets_status_checker.rb +1 -20
- data/lib/react_on_rails/utils.rb +26 -0
- data/lib/react_on_rails/version.rb +1 -1
- data/lib/react_on_rails/webpacker_utils.rb +54 -3
- data/lib/tasks/generate_packs.rake +1 -1
- data/package.json +29 -28
- data/yarn.lock +2856 -3277
- metadata +4 -2
@@ -29,17 +29,13 @@ module ReactOnRails
|
|
29
29
|
stale_generated_files(client_files)
|
30
30
|
end
|
31
31
|
|
32
|
-
def stale_generated_component_packs
|
33
|
-
stale_generated_files(component_pack_files)
|
34
|
-
end
|
35
|
-
|
36
32
|
def stale_generated_files(files)
|
37
33
|
manifest_needed = ReactOnRails::WebpackerUtils.using_webpacker? &&
|
38
34
|
!ReactOnRails::WebpackerUtils.manifest_exists?
|
39
35
|
|
40
36
|
return ["manifest.json"] if manifest_needed
|
41
37
|
|
42
|
-
most_recent_mtime = find_most_recent_mtime(files)
|
38
|
+
most_recent_mtime = Utils.find_most_recent_mtime(files)
|
43
39
|
all_compiled_assets.each_with_object([]) do |webpack_generated_file, stale_gen_list|
|
44
40
|
if !File.exist?(webpack_generated_file) ||
|
45
41
|
File.mtime(webpack_generated_file) < most_recent_mtime
|
@@ -51,13 +47,6 @@ module ReactOnRails
|
|
51
47
|
|
52
48
|
private
|
53
49
|
|
54
|
-
def find_most_recent_mtime(files)
|
55
|
-
files.reduce(1.year.ago) do |newest_time, file|
|
56
|
-
mt = File.mtime(file)
|
57
|
-
mt > newest_time ? mt : newest_time
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
50
|
def all_compiled_assets
|
62
51
|
@all_compiled_assets ||= begin
|
63
52
|
webpack_generated_files = @webpack_generated_files.map do |bundle_name|
|
@@ -89,14 +78,6 @@ module ReactOnRails
|
|
89
78
|
@client_files ||= make_file_list(make_globs(source_path)).to_ary
|
90
79
|
end
|
91
80
|
|
92
|
-
def component_pack_files
|
93
|
-
make_file_list(make_globs(components_search_path)).to_ary
|
94
|
-
end
|
95
|
-
|
96
|
-
def components_search_path
|
97
|
-
"#{source_path}/**/#{ReactOnRails.configuration.components_subdirectory}"
|
98
|
-
end
|
99
|
-
|
100
81
|
def make_globs(dirs)
|
101
82
|
Array(dirs).map { |dir| File.join(dir, "**", "*") }
|
102
83
|
end
|
data/lib/react_on_rails/utils.rb
CHANGED
@@ -197,5 +197,31 @@ module ReactOnRails
|
|
197
197
|
rstrip = to_remove - lstrip
|
198
198
|
str[0..(midpoint - lstrip - 1)] + TRUNCATION_FILLER + str[(midpoint + rstrip)..-1]
|
199
199
|
end
|
200
|
+
|
201
|
+
def self.find_most_recent_mtime(files)
|
202
|
+
files.reduce(1.year.ago) do |newest_time, file|
|
203
|
+
mt = File.mtime(file)
|
204
|
+
mt > newest_time ? mt : newest_time
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
def self.prepend_to_file_if_text_not_present(file:, text_to_prepend:, regex:)
|
209
|
+
if File.exist?(file)
|
210
|
+
file_content = File.read(file)
|
211
|
+
|
212
|
+
return if file_content.match(regex)
|
213
|
+
|
214
|
+
content_with_prepended_text = text_to_prepend + file_content
|
215
|
+
File.write(file, content_with_prepended_text, mode: "w")
|
216
|
+
else
|
217
|
+
File.write(file, text_to_prepend, mode: "w+")
|
218
|
+
end
|
219
|
+
|
220
|
+
puts "Prepended\n#{text_to_prepend}to #{file}."
|
221
|
+
end
|
222
|
+
|
223
|
+
def self.semver_to_string(ary)
|
224
|
+
"#{ary[0]}.#{ary[1]}.#{ary[2]}"
|
225
|
+
end
|
200
226
|
end
|
201
227
|
end
|
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
module ReactOnRails
|
4
4
|
module WebpackerUtils
|
5
|
-
# TODO: V13 code should be cleaned up so that the webpacker gem is required.
|
6
|
-
# This check should only be done at startup.
|
7
5
|
def self.using_webpacker?
|
8
6
|
return @using_webpacker if defined?(@using_webpacker)
|
9
7
|
|
@@ -20,7 +18,18 @@ module ReactOnRails
|
|
20
18
|
def self.shakapacker_version
|
21
19
|
return nil unless ReactOnRails::Utils.gem_available?("shakapacker")
|
22
20
|
|
23
|
-
Gem.loaded_specs["shakapacker"].version.to_s
|
21
|
+
@shakapacker_version ||= Gem.loaded_specs["shakapacker"].version.to_s
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.shakapacker_version_as_array
|
25
|
+
match = shakapacker_version.match(ReactOnRails::VersionChecker::MAJOR_MINOR_PATCH_VERSION_REGEX)
|
26
|
+
|
27
|
+
@shakapacker_version_as_array = [match[1].to_i, match[2].to_i, match[3].to_i]
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.shackapacker_version_requirement_met?(ary)
|
31
|
+
ary[0] >= shakapacker_version_as_array[0] && ary[1] >= shakapacker_version_as_array[1] &&
|
32
|
+
ary[2] >= shakapacker_version_as_array[2]
|
24
33
|
end
|
25
34
|
|
26
35
|
# This returns either a URL for the webpack-dev-server, non-server bundle or
|
@@ -85,5 +94,47 @@ module ReactOnRails
|
|
85
94
|
puts wrap_message(msg)
|
86
95
|
exit!
|
87
96
|
end
|
97
|
+
|
98
|
+
def self.webpack_assets_status_checker
|
99
|
+
source_path = ReactOnRails::Utils.source_path
|
100
|
+
generated_assets_full_path = ReactOnRails::Utils.generated_assets_full_path
|
101
|
+
webpack_generated_files = ReactOnRails.configuration.webpack_generated_files
|
102
|
+
|
103
|
+
@webpack_assets_status_checker ||= ReactOnRails::TestHelper::WebpackAssetsStatusChecker.new(
|
104
|
+
source_path: source_path,
|
105
|
+
generated_assets_full_path: generated_assets_full_path,
|
106
|
+
webpack_generated_files: webpack_generated_files
|
107
|
+
)
|
108
|
+
end
|
109
|
+
|
110
|
+
def self.raise_nested_entries_disabled
|
111
|
+
msg = <<~MSG
|
112
|
+
**ERROR** ReactOnRails: `nested_entries` is configured to be disabled in shakapacker. Please update \
|
113
|
+
webpacker.yml to enable nested entries. for more information read
|
114
|
+
https://www.shakacode.com/react-on-rails/docs/guides/file-system-based-automated-bundle-generation.md#enable-nested_entries-for-shakapacker
|
115
|
+
MSG
|
116
|
+
|
117
|
+
raise ReactOnRails::Error, msg
|
118
|
+
end
|
119
|
+
|
120
|
+
def self.raise_shakapacker_version_incompatible_for_autobundling
|
121
|
+
msg = <<~MSG
|
122
|
+
**ERROR** ReactOnRails: Please upgrade Shakapacker to version #{ReactOnRails::WebpackerUtils.semver_to_string(ReactOnRails::PacksGenerator::MINIMUM_SHAKAPACKER_VERSION)} or \
|
123
|
+
above to use the automated bundle generation feature. The currently installed version is \
|
124
|
+
#{ReactOnRails::WebpackerUtils.semver_to_string(ReactOnRails::WebpackerUtils.shakapacker_version_as_array)}.
|
125
|
+
MSG
|
126
|
+
|
127
|
+
raise ReactOnRails::Error, msg
|
128
|
+
end
|
129
|
+
|
130
|
+
def self.raise_shakapacker_not_installed
|
131
|
+
msg = <<~MSG
|
132
|
+
**ERROR** ReactOnRails: Missing Shakapacker gem. Please upgrade to use Shakapacker \
|
133
|
+
#{ReactOnRails::WebpackerUtils.semver_to_string(minimum_required_shakapacker_version)} or above to use the \
|
134
|
+
automated bundle generation feature.
|
135
|
+
MSG
|
136
|
+
|
137
|
+
raise ReactOnRails::Error, msg
|
138
|
+
end
|
88
139
|
end
|
89
140
|
end
|
data/package.json
CHANGED
@@ -1,48 +1,49 @@
|
|
1
1
|
{
|
2
2
|
"name": "react-on-rails",
|
3
|
-
"version": "13.
|
3
|
+
"version": "13.3.0",
|
4
4
|
"description": "react-on-rails JavaScript for react_on_rails Ruby gem",
|
5
5
|
"main": "node_package/lib/ReactOnRails.js",
|
6
6
|
"directories": {
|
7
7
|
"doc": "docs"
|
8
8
|
},
|
9
9
|
"devDependencies": {
|
10
|
-
"@babel/cli": "^7.
|
11
|
-
"@babel/core": "^7.12
|
12
|
-
"@babel/plugin-transform-runtime": "^7.
|
13
|
-
"@babel/plugin-transform-typescript": "^7.
|
14
|
-
"@babel/preset-env": "^7.
|
15
|
-
"@babel/preset-react": "^7.
|
16
|
-
"@babel/types": "^7.
|
17
|
-
"@types/jest": "^
|
18
|
-
"@types/react": "^16.
|
19
|
-
"@types/react-dom": "^16.9.
|
10
|
+
"@babel/cli": "^7.20.7",
|
11
|
+
"@babel/core": "^7.20.12",
|
12
|
+
"@babel/plugin-transform-runtime": "^7.19.6",
|
13
|
+
"@babel/plugin-transform-typescript": "^7.20.13",
|
14
|
+
"@babel/preset-env": "^7.20.2",
|
15
|
+
"@babel/preset-react": "^7.18.6",
|
16
|
+
"@babel/types": "^7.20.7",
|
17
|
+
"@types/jest": "^28.1.3",
|
18
|
+
"@types/react": "^16.14.35",
|
19
|
+
"@types/react-dom": "^16.9.17",
|
20
20
|
"@types/turbolinks": "^5.2.0",
|
21
|
-
"@types/webpack-env": "^1.
|
22
|
-
"@typescript-eslint/eslint-plugin": "^4.
|
23
|
-
"@typescript-eslint/parser": "^4.
|
21
|
+
"@types/webpack-env": "^1.18.0",
|
22
|
+
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
23
|
+
"@typescript-eslint/parser": "^4.33.0",
|
24
24
|
"babelify": "^10.0.0",
|
25
25
|
"blue-tape": "^1.0.0",
|
26
|
-
"create-react-class": "^15.
|
27
|
-
"eslint": "^7.
|
26
|
+
"create-react-class": "^15.7.0",
|
27
|
+
"eslint": "^7.32.0",
|
28
28
|
"eslint-config-prettier": "^7.0.0",
|
29
29
|
"eslint-config-shakacode": "^16.0.1",
|
30
|
-
"eslint-plugin-import": "^2.
|
31
|
-
"eslint-plugin-jsx-a11y": "^6.
|
32
|
-
"eslint-plugin-prettier": "^3.
|
33
|
-
"eslint-plugin-react": "^7.
|
34
|
-
"jest": "^
|
30
|
+
"eslint-plugin-import": "^2.27.5",
|
31
|
+
"eslint-plugin-jsx-a11y": "^6.7.1",
|
32
|
+
"eslint-plugin-prettier": "^3.4.1",
|
33
|
+
"eslint-plugin-react": "^7.32.1",
|
34
|
+
"jest": "^28.1.3",
|
35
|
+
"jest-environment-jsdom": "^28.1.3",
|
35
36
|
"jsdom": "^16.4.0",
|
36
37
|
"nps": "^5.9.3",
|
37
|
-
"prettier": "^2.
|
38
|
+
"prettier": "^2.8.3",
|
38
39
|
"prettier-eslint-cli": "^5.0.0",
|
39
|
-
"prop-types": "^15.
|
40
|
-
"react": "^16.
|
41
|
-
"react-dom": "^16.
|
40
|
+
"prop-types": "^15.8.1",
|
41
|
+
"react": "^16.14.0",
|
42
|
+
"react-dom": "^16.14.0",
|
42
43
|
"react-transform-hmr": "^1.0.4",
|
43
|
-
"redux": "^4.0
|
44
|
-
"ts-jest": "^
|
45
|
-
"typescript": "^4.
|
44
|
+
"redux": "^4.2.0",
|
45
|
+
"ts-jest": "^28.0.8",
|
46
|
+
"typescript": "^4.9.4"
|
46
47
|
},
|
47
48
|
"dependencies": {
|
48
49
|
"@babel/runtime-corejs3": "^7.12.5",
|