react_on_rails 13.1.0 → 13.3.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/.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",
|