shakapacker 6.5.5 → 6.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc.js +1 -0
  3. data/.github/FUNDING.yml +1 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.md +11 -7
  5. data/.github/ISSUE_TEMPLATE/feature_request.md +21 -0
  6. data/.github/PULL_REQUEST_TEMPLATE.md +18 -0
  7. data/.github/workflows/ruby.yml +3 -1
  8. data/.gitignore +3 -3
  9. data/.rspec +1 -0
  10. data/CHANGELOG.md +20 -2
  11. data/CONTRIBUTING.md +11 -1
  12. data/Gemfile.development_dependencies +3 -1
  13. data/README.md +41 -8
  14. data/Rakefile +4 -5
  15. data/docs/v6_upgrade.md +1 -1
  16. data/gemfiles/Gemfile-rails-edge +1 -1
  17. data/gemfiles/Gemfile-rails.5.2.x +1 -1
  18. data/gemfiles/Gemfile-rails.6.0.x +1 -1
  19. data/gemfiles/Gemfile-rails.6.1.x +1 -1
  20. data/gemfiles/Gemfile-rails.7.0.x +1 -1
  21. data/lib/install/template.rb +21 -16
  22. data/lib/tasks/webpacker/compile.rake +5 -10
  23. data/lib/webpacker/helper.rb +20 -9
  24. data/lib/webpacker/instance.rb +3 -1
  25. data/lib/webpacker/version.rb +1 -1
  26. data/package/rules/__tests__/__utils__/webpack.js +50 -0
  27. data/package/rules/__tests__/babel.js +63 -0
  28. data/package/rules/__tests__/esbuild.js +64 -0
  29. data/package/rules/__tests__/index.js +0 -4
  30. data/package/rules/__tests__/swc.js +64 -0
  31. data/package/rules/babel.js +13 -24
  32. data/package/rules/esbuild.js +2 -13
  33. data/package/rules/jscommon.js +26 -0
  34. data/package/rules/swc.js +2 -13
  35. data/package/utils/helpers.js +1 -1
  36. data/package.json +8 -2
  37. data/spec/command_spec.rb +114 -0
  38. data/spec/compiler_spec.rb +57 -0
  39. data/spec/compiler_strategy_spec.rb +20 -0
  40. data/spec/configuration_spec.rb +281 -0
  41. data/{test/dev_server_runner_test.rb → spec/dev_server_runner_spec.rb} +30 -40
  42. data/spec/dev_server_spec.rb +45 -0
  43. data/spec/digest_strategy_spec.rb +33 -0
  44. data/{test/engine_rake_tasks_test.rb → spec/engine_rake_tasks_spec.rb} +17 -9
  45. data/spec/env_spec.rb +21 -0
  46. data/spec/helper_spec.rb +241 -0
  47. data/spec/manifest_spec.rb +98 -0
  48. data/spec/mtime_strategy_spec.rb +53 -0
  49. data/spec/rake_tasks_spec.rb +32 -0
  50. data/spec/spec_helper.rb +123 -0
  51. data/{test → spec}/test_app/public/packs/manifest.json +8 -0
  52. data/spec/version_checker_spec.rb +950 -0
  53. data/{test/webpack_runner_test.rb → spec/webpack_runner_spec.rb} +12 -15
  54. data/spec/webpacker_spec.rb +61 -0
  55. data/yarn.lock +846 -844
  56. metadata +104 -187
  57. data/.github/ISSUE_TEMPLATE/feature-request.md +0 -18
  58. data/lib/tasks/yarn.rake +0 -44
  59. data/test/command_test.rb +0 -109
  60. data/test/compiler_strategy_test.rb +0 -27
  61. data/test/compiler_test.rb +0 -60
  62. data/test/configuration_test.rb +0 -186
  63. data/test/dev_server_test.rb +0 -47
  64. data/test/digest_strategy_test.rb +0 -33
  65. data/test/env_test.rb +0 -23
  66. data/test/helper_test.rb +0 -248
  67. data/test/manifest_test.rb +0 -89
  68. data/test/mtime_strategy_test.rb +0 -42
  69. data/test/rake_tasks_test.rb +0 -37
  70. data/test/test_helper.rb +0 -33
  71. data/test/version_checker_test.rb +0 -826
  72. data/test/webpacker_test.rb +0 -49
  73. /data/{test → spec}/fixtures/beta_package-lock.v1.json +0 -0
  74. /data/{test → spec}/fixtures/beta_package-lock.v2.json +0 -0
  75. /data/{test → spec}/fixtures/beta_package.json +0 -0
  76. /data/{test → spec}/fixtures/beta_yarn.v1.lock +0 -0
  77. /data/{test → spec}/fixtures/beta_yarn.v2.lock +0 -0
  78. /data/{test → spec}/fixtures/git_url_package-lock.v1.json +0 -0
  79. /data/{test → spec}/fixtures/git_url_package-lock.v2.json +0 -0
  80. /data/{test → spec}/fixtures/git_url_package.json +0 -0
  81. /data/{test → spec}/fixtures/git_url_yarn.v1.lock +0 -0
  82. /data/{test → spec}/fixtures/git_url_yarn.v2.lock +0 -0
  83. /data/{test → spec}/fixtures/github_url_package-lock.v1.json +0 -0
  84. /data/{test → spec}/fixtures/github_url_package-lock.v2.json +0 -0
  85. /data/{test → spec}/fixtures/github_url_package.json +0 -0
  86. /data/{test → spec}/fixtures/github_url_yarn.v1.lock +0 -0
  87. /data/{test → spec}/fixtures/github_url_yarn.v2.lock +0 -0
  88. /data/{test → spec}/fixtures/relative_path_package-lock.v1.json +0 -0
  89. /data/{test → spec}/fixtures/relative_path_package-lock.v2.json +0 -0
  90. /data/{test → spec}/fixtures/relative_path_package.json +0 -0
  91. /data/{test → spec}/fixtures/relative_path_yarn.v1.lock +0 -0
  92. /data/{test → spec}/fixtures/relative_path_yarn.v2.lock +0 -0
  93. /data/{test → spec}/fixtures/semver_caret_package-lock.v1.json +0 -0
  94. /data/{test → spec}/fixtures/semver_caret_package-lock.v2.json +0 -0
  95. /data/{test → spec}/fixtures/semver_caret_package.json +0 -0
  96. /data/{test → spec}/fixtures/semver_caret_yarn.v1.lock +0 -0
  97. /data/{test → spec}/fixtures/semver_caret_yarn.v2.lock +0 -0
  98. /data/{test → spec}/fixtures/semver_exact_package-lock.v1.json +0 -0
  99. /data/{test → spec}/fixtures/semver_exact_package-lock.v2.json +0 -0
  100. /data/{test → spec}/fixtures/semver_exact_package.json +0 -0
  101. /data/{test → spec}/fixtures/semver_exact_yarn.v1.lock +0 -0
  102. /data/{test → spec}/fixtures/semver_exact_yarn.v2.lock +0 -0
  103. /data/{test → spec}/fixtures/semver_tilde_package-lock.v1.json +0 -0
  104. /data/{test → spec}/fixtures/semver_tilde_package-lock.v2.json +0 -0
  105. /data/{test → spec}/fixtures/semver_tilde_package.json +0 -0
  106. /data/{test → spec}/fixtures/semver_tilde_yarn.v1.lock +0 -0
  107. /data/{test → spec}/fixtures/semver_tilde_yarn.v2.lock +0 -0
  108. /data/{test → spec}/fixtures/without_package-lock.v1.json +0 -0
  109. /data/{test → spec}/fixtures/without_package-lock.v2.json +0 -0
  110. /data/{test → spec}/fixtures/without_package.json +0 -0
  111. /data/{test → spec}/fixtures/without_yarn.v1.lock +0 -0
  112. /data/{test → spec}/fixtures/without_yarn.v2.lock +0 -0
  113. /data/{test → spec}/mounted_app/Rakefile +0 -0
  114. /data/{test → spec}/mounted_app/test/dummy/Rakefile +0 -0
  115. /data/{test → spec}/mounted_app/test/dummy/bin/rails +0 -0
  116. /data/{test → spec}/mounted_app/test/dummy/bin/rake +0 -0
  117. /data/{test → spec}/mounted_app/test/dummy/config/application.rb +0 -0
  118. /data/{test → spec}/mounted_app/test/dummy/config/environment.rb +0 -0
  119. /data/{test → spec}/mounted_app/test/dummy/config/webpacker.yml +0 -0
  120. /data/{test → spec}/mounted_app/test/dummy/config.ru +0 -0
  121. /data/{test → spec}/mounted_app/test/dummy/package.json +0 -0
  122. /data/{test → spec}/test_app/Rakefile +0 -0
  123. /data/{test → spec}/test_app/app/packs/entrypoints/application.js +0 -0
  124. /data/{test → spec}/test_app/app/packs/entrypoints/generated/something.js +0 -0
  125. /data/{test → spec}/test_app/app/packs/entrypoints/multi_entry.css +0 -0
  126. /data/{test → spec}/test_app/app/packs/entrypoints/multi_entry.js +0 -0
  127. /data/{test → spec}/test_app/bin/webpacker +0 -0
  128. /data/{test → spec}/test_app/bin/webpacker-dev-server +0 -0
  129. /data/{test → spec}/test_app/config/application.rb +0 -0
  130. /data/{test → spec}/test_app/config/environment.rb +0 -0
  131. /data/{test → spec}/test_app/config/initializers/inspect_autoload_paths.rb +0 -0
  132. /data/{test → spec}/test_app/config/webpack/webpack.config.js +0 -0
  133. /data/{test → spec}/test_app/config/webpacker.yml +0 -0
  134. /data/{test → spec}/test_app/config/webpacker_css_extract_ignore_order_warnings.yml +0 -0
  135. /data/{test → spec}/test_app/config/webpacker_defaults_fallback.yml +0 -0
  136. /data/{test → spec}/test_app/config/webpacker_manifest_path.yml +0 -0
  137. /data/{test → spec}/test_app/config/webpacker_nested_entries.yml +0 -0
  138. /data/{test → spec}/test_app/config/webpacker_no_precompile.yml +0 -0
  139. /data/{test → spec}/test_app/config/webpacker_other_location.yml +0 -0
  140. /data/{test → spec}/test_app/config/webpacker_public_root.yml +0 -0
  141. /data/{test → spec}/test_app/config.ru +0 -0
  142. /data/{test → spec}/test_app/package.json +0 -0
  143. /data/{test → spec}/test_app/some.config.js +0 -0
  144. /data/{test → spec}/test_app/yarn.lock +0 -0
@@ -0,0 +1,950 @@
1
+ require "webpacker/version"
2
+
3
+ class NodePackageVersionDouble
4
+ attr_reader :raw, :major_minor_patch
5
+
6
+ def initialize(raw: nil, major_minor_patch: nil, semver_wildcard: false, skip_processing: false)
7
+ @raw = raw
8
+ @major_minor_patch = major_minor_patch
9
+ @semver_wildcard = semver_wildcard
10
+ @skip_processing = skip_processing
11
+ end
12
+
13
+ def semver_wildcard?
14
+ @semver_wildcard
15
+ end
16
+
17
+ def skip_processing?
18
+ @skip_processing
19
+ end
20
+ end
21
+
22
+ describe "VersionChecker" do
23
+ def check_version(node_package_version, stub_gem_version = Webpacker::VERSION, stub_config = true)
24
+ version_checker = Webpacker::VersionChecker.new(node_package_version)
25
+ allow(version_checker).to receive(:gem_version).and_return(stub_gem_version)
26
+ allow(Webpacker.config).to receive(:ensure_consistent_versioning?).and_return(stub_config)
27
+
28
+ version_checker.raise_if_gem_and_node_package_versions_differ
29
+ end
30
+
31
+ it "prints error in stderr if consistency check is disabled and version mismatch" do
32
+ node_package_version = NodePackageVersionDouble.new(raw: "6.1.0", major_minor_patch: ["6", "1", "0"])
33
+
34
+ expect { check_version(node_package_version, "6.0.0", false) }
35
+ .to output(/Webpacker::VersionChecker - Version mismatch/)
36
+ .to_stderr
37
+ end
38
+
39
+ it "prints error in stderr if consistency check is disabled and we have semver" do
40
+ node_package_version = NodePackageVersionDouble.new(raw: "^6.1.0", major_minor_patch: ["6", "1", "0"], semver_wildcard: true)
41
+
42
+ expect { check_version(node_package_version, "6.0.0", false) }
43
+ .to output(/Webpacker::VersionChecker - Semver wildcard without a lockfile detected/)
44
+ .to_stderr
45
+ end
46
+
47
+ it "raises exception on different major version" do
48
+ node_package_version = NodePackageVersionDouble.new(raw: "6.1.0", major_minor_patch: ["6", "1", "0"])
49
+
50
+ expect { check_version(node_package_version, "7.0.0") }
51
+ .to raise_error(/\*\*ERROR\*\* Webpacker: Webpacker gem and node package versions do not match/)
52
+ end
53
+
54
+ it "raises exception on different minor version" do
55
+ node_package_version = NodePackageVersionDouble.new(raw: "6.1.0", major_minor_patch: ["6", "1", "0"])
56
+
57
+ expect { check_version(node_package_version, "6.2.0") }
58
+ .to raise_error(/\*\*ERROR\*\* Webpacker: Webpacker gem and node package versions do not match/)
59
+ end
60
+
61
+ it "raises exception on different patch version" do
62
+ node_package_version = NodePackageVersionDouble.new(raw: "6.1.1", major_minor_patch: ["6", "1", "1"])
63
+
64
+ expect { check_version(node_package_version, "6.1.2") }
65
+ .to raise_error(/\*\*ERROR\*\* Webpacker: Webpacker gem and node package versions do not match/)
66
+ end
67
+
68
+ it "raises exception on semver wildcard" do
69
+ node_package_version = NodePackageVersionDouble.new(raw: "^6.0.0", major_minor_patch: ["6", "0", "0"], semver_wildcard: true)
70
+
71
+ expect { check_version(node_package_version, "6.0.0") }
72
+ .to raise_error(/\*\*ERROR\*\* Webpacker: Your node package version for shakapacker contains a \^ or ~/)
73
+ end
74
+
75
+ it "doesn't raise exception on matching versions" do
76
+ node_package_version = NodePackageVersionDouble.new(raw: "6.0.0", major_minor_patch: ["6", "0", "0"])
77
+
78
+ expect { check_version(node_package_version, "6.0.0") }.to_not raise_error
79
+ end
80
+
81
+ it "doesn't raise exception on matching versions beta" do
82
+ node_package_version = NodePackageVersionDouble.new(raw: "6.0.0-beta.1", major_minor_patch: ["6", "0", "0"])
83
+
84
+ expect { check_version(node_package_version, "6.0.0.beta.1") }.to_not raise_error
85
+ end
86
+
87
+ it "doesn't raise exception on no package" do
88
+ node_package_version = NodePackageVersionDouble.new(raw: nil, skip_processing: true)
89
+
90
+ expect { check_version(node_package_version, "6.0.0") }.to_not raise_error
91
+ end
92
+
93
+ it "doesn't raise exception on skipped path" do
94
+ node_package_version = NodePackageVersionDouble.new(raw: "../..", skip_processing: true)
95
+
96
+ expect { check_version(node_package_version, "6.0.0") }.to_not raise_error
97
+ end
98
+ end
99
+
100
+ describe "VersionChecker::NodePackageVersion" do
101
+ context "with no yarn.lock file" do
102
+ def node_package_version(fixture_version:)
103
+ Webpacker::VersionChecker::NodePackageVersion.new(
104
+ File.expand_path("fixtures/#{fixture_version}_package.json", __dir__),
105
+ "file/does/not/exist",
106
+ "file/does/not/exist"
107
+ )
108
+ end
109
+
110
+ context "from exact semantic version" do
111
+ let(:node_package_version_from_semver_exact) { node_package_version(fixture_version: "semver_exact") }
112
+
113
+ it "#raw returns raw version" do
114
+ expect(node_package_version_from_semver_exact.raw).to eq "6.0.0"
115
+ end
116
+
117
+ it "#major_minor_patch returns version array" do
118
+ expect(node_package_version_from_semver_exact.major_minor_patch).to eq ["6", "0", "0"]
119
+ end
120
+
121
+ it "#skip_processing? returns false" do
122
+ expect(node_package_version_from_semver_exact.skip_processing?).to be false
123
+ end
124
+
125
+ it "#semver_wildcard returns false" do
126
+ expect(node_package_version_from_semver_exact.semver_wildcard?).to be false
127
+ end
128
+ end
129
+
130
+ context "from beta version" do
131
+ let(:node_package_version_from_beta) { node_package_version(fixture_version: "beta") }
132
+
133
+ it "#raw returns raw version" do
134
+ expect(node_package_version_from_beta.raw).to eq "6.1.0-beta.0"
135
+ end
136
+
137
+ it "#major_minor_patch returns version array" do
138
+ expect(node_package_version_from_beta.major_minor_patch).to eq ["6", "1", "0"]
139
+ end
140
+
141
+ it "#skip_processing? returns false" do
142
+ expect(node_package_version_from_beta.skip_processing?).to be false
143
+ end
144
+
145
+ it "#semver_wildcard? returns false" do
146
+ expect(node_package_version_from_beta.semver_wildcard?).to be false
147
+ end
148
+ end
149
+
150
+ context "from caret semantic version" do
151
+ let(:node_package_version_from_semver_caret) { node_package_version(fixture_version: "semver_caret") }
152
+
153
+ it "#raw returns version" do
154
+ expect(node_package_version_from_semver_caret.raw).to eq "^6.0.0"
155
+ end
156
+
157
+ it "#major_minor_patch returns version array" do
158
+ expect(node_package_version_from_semver_caret.major_minor_patch).to eq ["6", "0", "0"]
159
+ end
160
+
161
+ it "#skip_processing? returns false" do
162
+ expect(node_package_version_from_semver_caret.skip_processing?).to be false
163
+ end
164
+
165
+ it "#semver_wildcard? returns true" do
166
+ expect(node_package_version_from_semver_caret.semver_wildcard?).to be true
167
+ end
168
+ end
169
+
170
+ context "from tilde semantic version" do
171
+ let(:node_package_version_from_semver_tilde) { node_package_version(fixture_version: "semver_tilde") }
172
+
173
+ it "#raw returns version" do
174
+ expect(node_package_version_from_semver_tilde.raw).to eq "~6.0.0"
175
+ end
176
+
177
+ it "#major_minor_patch returns version" do
178
+ expect(node_package_version_from_semver_tilde.major_minor_patch).to eq ["6", "0", "0"]
179
+ end
180
+
181
+ it "#skip_processing? returns false" do
182
+ expect(node_package_version_from_semver_tilde.skip_processing?).to be false
183
+ end
184
+
185
+ it "#semver_wildcard? returns true" do
186
+ expect(node_package_version_from_semver_tilde.semver_wildcard?).to be true
187
+ end
188
+ end
189
+
190
+ context "from relative path" do
191
+ let(:node_package_version_from_relative_path) { node_package_version(fixture_version: "relative_path") }
192
+
193
+ it "#raw returns relative path" do
194
+ expect(node_package_version_from_relative_path.raw).to eq "../.."
195
+ end
196
+
197
+ it "#major_minor_patch returns nil" do
198
+ expect(node_package_version_from_relative_path.major_minor_patch).to be nil
199
+ end
200
+
201
+ it "#skip_processing? returns true" do
202
+ expect(node_package_version_from_relative_path.skip_processing?).to be true
203
+ end
204
+
205
+ it "#semver_wildcard? returns false" do
206
+ expect(node_package_version_from_relative_path.semver_wildcard?).to be false
207
+ end
208
+ end
209
+
210
+ context "from git url" do
211
+ let(:node_package_version_from_git_url) { node_package_version(fixture_version: "git_url") }
212
+
213
+ it "#raw returns git url" do
214
+ expect(node_package_version_from_git_url.raw).to eq "git@github.com:shakacode/shakapacker.git"
215
+ end
216
+
217
+ it "#major_minor_patch returns nil" do
218
+ expect(node_package_version_from_git_url.major_minor_patch).to be nil
219
+ end
220
+
221
+ it "#skip_processing? returns true" do
222
+ expect(node_package_version_from_git_url.skip_processing?).to be true
223
+ end
224
+
225
+ it "#semver_wildcard? returns false" do
226
+ expect(node_package_version_from_git_url.semver_wildcard?).to be false
227
+ end
228
+ end
229
+
230
+ context "from github url" do
231
+ let (:node_package_version_from_github_url) { node_package_version(fixture_version: "github_url") }
232
+
233
+ it "#raw returns GitHub repo address" do
234
+ expect(node_package_version_from_github_url.raw).to eq "shakacode/shakapacker#master"
235
+ end
236
+
237
+ it "#major_minor_patch returns nil" do
238
+ expect(node_package_version_from_github_url.major_minor_patch).to be nil
239
+ end
240
+
241
+ it "#skip_processing returns true" do
242
+ expect(node_package_version_from_github_url.skip_processing?).to be true
243
+ end
244
+
245
+ it "#semver_wildcard returns false" do
246
+ expect(node_package_version_from_github_url.semver_wildcard?).to be false
247
+ end
248
+ end
249
+
250
+ context "from package.json without shakapacker entry" do
251
+ let(:node_package_version_from_without) { node_package_version(fixture_version: "without") }
252
+
253
+ it "#raw returns empty string" do
254
+ expect(node_package_version_from_without.raw).to eq ""
255
+ end
256
+
257
+ it "#major_minor_patch returns nil" do
258
+ expect(node_package_version_from_without.major_minor_patch).to be nil
259
+ end
260
+
261
+ it "#skip_processing? returns true" do
262
+ expect(node_package_version_from_without.skip_processing?).to be true
263
+ end
264
+
265
+ it "#semver_wildcard? returns false" do
266
+ expect(node_package_version_from_without.semver_wildcard?).to be false
267
+ end
268
+ end
269
+ end
270
+
271
+ context "with yarn.lock v1" do
272
+ def node_package_version(fixture_version:)
273
+ Webpacker::VersionChecker::NodePackageVersion.new(
274
+ File.expand_path("fixtures/#{fixture_version}_package.json", __dir__),
275
+ File.expand_path("fixtures/#{fixture_version}_yarn.v1.lock", __dir__),
276
+ "file/does/not/exist"
277
+ )
278
+ end
279
+
280
+ context "from exact semantic version" do
281
+ let(:node_package_version_from_semver_exact) { node_package_version(fixture_version: "semver_exact") }
282
+
283
+ it "#raw returns version" do
284
+ expect(node_package_version_from_semver_exact.raw).to eq "6.0.0"
285
+ end
286
+
287
+ it "#major_minor_patch returns version array" do
288
+ expect(node_package_version_from_semver_exact.major_minor_patch).to eq ["6", "0", "0"]
289
+ end
290
+
291
+ it "#skip_processing? returns false" do
292
+ expect(node_package_version_from_semver_exact.skip_processing?).to be false
293
+ end
294
+
295
+ it "#semver_wildcard? returns false" do
296
+ expect(node_package_version_from_semver_exact.semver_wildcard?).to be false
297
+ end
298
+ end
299
+
300
+ context "from beta version" do
301
+ let(:node_package_version_from_beta) { node_package_version(fixture_version: "beta") }
302
+
303
+ it "#raw returns version" do
304
+ expect(node_package_version_from_beta.raw).to eq "6.1.0-beta.0"
305
+ end
306
+
307
+ it "#major_minor_patch returns version array" do
308
+ expect(node_package_version_from_beta.major_minor_patch).to eq ["6", "1", "0"]
309
+ end
310
+
311
+ it "#skip_processing? returns false" do
312
+ expect(node_package_version_from_beta.skip_processing?).to be false
313
+ end
314
+
315
+ it "#semver_wildcard? returns false" do
316
+ expect(node_package_version_from_beta.semver_wildcard?).to be false
317
+ end
318
+ end
319
+
320
+ context "from caret semantic version" do
321
+ let(:node_package_version_from_semver_caret) { node_package_version(fixture_version: "semver_caret") }
322
+
323
+ it "#raw returns version" do
324
+ expect(node_package_version_from_semver_caret.raw).to eq "6.5.0"
325
+ end
326
+
327
+ it "#major_minor_patch returns version array" do
328
+ expect(node_package_version_from_semver_caret.major_minor_patch).to eq ["6", "5", "0"]
329
+ end
330
+
331
+ it "#skip_processing? false" do
332
+ expect(node_package_version_from_semver_caret.skip_processing?).to be false
333
+ end
334
+
335
+ it "#semver_wildcard? false" do
336
+ expect(node_package_version_from_semver_caret.semver_wildcard?).to be false
337
+ end
338
+ end
339
+
340
+ context "from tilde semantic version" do
341
+ let(:node_package_version_from_semver_tilde) { node_package_version(fixture_version: "semver_tilde") }
342
+
343
+ it "#raw returns version" do
344
+ expect(node_package_version_from_semver_tilde.raw).to eq "6.0.2"
345
+ end
346
+
347
+ it "#major_minor_patch returns version array" do
348
+ expect(node_package_version_from_semver_tilde.major_minor_patch).to eq ["6", "0", "2"]
349
+ end
350
+
351
+ it "#skip_processing? returns false" do
352
+ expect(node_package_version_from_semver_tilde.skip_processing?).to be false
353
+ end
354
+
355
+ it "#semver_wildcard? returns false" do
356
+ expect(node_package_version_from_semver_tilde.semver_wildcard?).to be false
357
+ end
358
+ end
359
+
360
+ context "from relative path" do
361
+ let(:node_package_version_from_relative_path) { node_package_version(fixture_version: "relative_path") }
362
+
363
+ it "#raw returns version" do
364
+ expect(node_package_version_from_relative_path.raw).to eq "6.5.0"
365
+ end
366
+
367
+ it "#major_minor_patch returns version array" do
368
+ expect(node_package_version_from_relative_path.major_minor_patch).to eq ["6", "5", "0"]
369
+ end
370
+
371
+ it "#skip_processing? returns false" do
372
+ expect(node_package_version_from_relative_path.skip_processing?).to be false
373
+ end
374
+
375
+ it "#semver_wildcard? returns false" do
376
+ expect(node_package_version_from_relative_path.semver_wildcard?).to be false
377
+ end
378
+ end
379
+
380
+ context "from git url" do
381
+ let(:node_package_version_from_git_url) { node_package_version(fixture_version: "git_url") }
382
+
383
+ it "#raw returns version" do
384
+ expect(node_package_version_from_git_url.raw).to eq "6.5.0"
385
+ end
386
+
387
+ it "#major_minor_patch returns version array" do
388
+ expect(node_package_version_from_git_url.major_minor_patch).to eq ["6", "5", "0"]
389
+ end
390
+
391
+ it "#skip_processing? returns false" do
392
+ expect(node_package_version_from_git_url.skip_processing?).to be false
393
+ end
394
+
395
+ it "#semver_wildcard? returns false" do
396
+ expect(node_package_version_from_git_url.semver_wildcard?).to be false
397
+ end
398
+ end
399
+
400
+ context "from GitHub url" do
401
+ let(:node_package_version_from_github_url) { node_package_version(fixture_version: "github_url") }
402
+
403
+ it "#raw returns version" do
404
+ expect(node_package_version_from_github_url.raw).to eq "6.5.0"
405
+ end
406
+
407
+ it "#major_minor_patch returns version array" do
408
+ expect(node_package_version_from_github_url.major_minor_patch).to eq ["6", "5", "0"]
409
+ end
410
+
411
+ it "#skip_processing? returns false" do
412
+ expect(node_package_version_from_github_url.skip_processing?).to be false
413
+ end
414
+
415
+ it "#semver_wildcard? returns false" do
416
+ expect(node_package_version_from_github_url.semver_wildcard?).to be false
417
+ end
418
+ end
419
+
420
+ context "from package.json without shakapacker entry" do
421
+ let(:node_package_version_from_without) { node_package_version(fixture_version: "without") }
422
+
423
+ it "#raw returns empty string" do
424
+ expect(node_package_version_from_without.raw).to eq ""
425
+ end
426
+
427
+ it "#major_minor_patch returns nil" do
428
+ expect(node_package_version_from_without.major_minor_patch).to be nil
429
+ end
430
+
431
+ it "#skip_processing? returns true" do
432
+ expect(node_package_version_from_without.skip_processing?).to be true
433
+ end
434
+
435
+ it "#semver_wildcard? returns false" do
436
+ expect(node_package_version_from_without.semver_wildcard?).to be false
437
+ end
438
+ end
439
+ end
440
+
441
+ context "with yarn.lock v2" do
442
+ def node_package_version(fixture_version:)
443
+ Webpacker::VersionChecker::NodePackageVersion.new(
444
+ File.expand_path("fixtures/#{fixture_version}_package.json", __dir__),
445
+ File.expand_path("fixtures/#{fixture_version}_yarn.v2.lock", __dir__),
446
+ "file/does/not/exist"
447
+ )
448
+ end
449
+
450
+ context "from exact semantic version" do
451
+ let(:node_package_version_from_semver_exact) { node_package_version(fixture_version: "semver_exact") }
452
+
453
+ it "#raw retruns version" do
454
+ expect(node_package_version_from_semver_exact.raw).to eq "6.0.0"
455
+ end
456
+
457
+ it "#major_minor_patch retruns version array" do
458
+ expect(node_package_version_from_semver_exact.major_minor_patch).to eq ["6", "0", "0"]
459
+ end
460
+
461
+ it "#skip_processing? retruns false" do
462
+ expect(node_package_version_from_semver_exact.skip_processing?).to be false
463
+ end
464
+
465
+ it "#semver_wildcard? retruns false" do
466
+ expect(node_package_version_from_semver_exact.semver_wildcard?).to be false
467
+ end
468
+ end
469
+
470
+ context "from beta version" do
471
+ let(:node_package_version_from_beta) { node_package_version(fixture_version: "beta") }
472
+
473
+ it "#raw returns version" do
474
+ expect(node_package_version_from_beta.raw).to eq "6.1.0-beta.0"
475
+ end
476
+
477
+ it "#major_minor_patch returns version array" do
478
+ expect(node_package_version_from_beta.major_minor_patch).to eq ["6", "1", "0"]
479
+ end
480
+
481
+ it "#skip_processing? returns false" do
482
+ expect(node_package_version_from_beta.skip_processing?).to be false
483
+ end
484
+
485
+ it "#semver_wildcard? returns false" do
486
+ expect(node_package_version_from_beta.semver_wildcard?).to be false
487
+ end
488
+ end
489
+
490
+ context "from caret semantic version" do
491
+ let(:node_package_version_from_semver_caret) { node_package_version(fixture_version: "semver_caret") }
492
+
493
+ it "#raw returns version" do
494
+ expect(node_package_version_from_semver_caret.raw).to eq "6.5.0"
495
+ end
496
+
497
+ it "#major_minor_patch returns version array" do
498
+ expect(node_package_version_from_semver_caret.major_minor_patch).to eq ["6", "5", "0"]
499
+ end
500
+
501
+ it "#skip_processing? returns false" do
502
+ expect(node_package_version_from_semver_caret.skip_processing?).to be false
503
+ end
504
+
505
+ it "#semver_wildcard? returns false" do
506
+ expect(node_package_version_from_semver_caret.semver_wildcard?).to be false
507
+ end
508
+ end
509
+
510
+ context "from tilde semantic version" do
511
+ let(:node_package_version_from_semver_tilde) { node_package_version(fixture_version: "semver_tilde") }
512
+
513
+ it "#raw returns version" do
514
+ expect(node_package_version_from_semver_tilde.raw).to eq "6.0.2"
515
+ end
516
+
517
+ it "#major_minor_patch returns version array" do
518
+ expect(node_package_version_from_semver_tilde.major_minor_patch).to eq ["6", "0", "2"]
519
+ end
520
+
521
+ it "#skip_processing? returns false" do
522
+ expect(node_package_version_from_semver_tilde.skip_processing?).to be false
523
+ end
524
+
525
+ it "#semver_wildcard? returns false" do
526
+ expect(node_package_version_from_semver_tilde.semver_wildcard?).to be false
527
+ end
528
+ end
529
+
530
+ context "from relative path" do
531
+ let(:node_package_version_from_relative_path) { node_package_version(fixture_version: "relative_path") }
532
+
533
+ it "#raw returns version" do
534
+ expect(node_package_version_from_relative_path.raw).to eq "6.5.0"
535
+ end
536
+
537
+ it "#major_minor_patch returns version array" do
538
+ expect(node_package_version_from_relative_path.major_minor_patch).to eq ["6", "5", "0"]
539
+ end
540
+
541
+ it "#skip_processing? returns false" do
542
+ expect(node_package_version_from_relative_path.skip_processing?).to be false
543
+ end
544
+
545
+ it "#semver_wildcard? returns false" do
546
+ expect(node_package_version_from_relative_path.semver_wildcard?).to be false
547
+ end
548
+ end
549
+
550
+ context "from git url" do
551
+ let(:node_package_version_from_git_url) { node_package_version(fixture_version: "git_url") }
552
+
553
+ it "#raw returns version" do
554
+ expect(node_package_version_from_git_url.raw).to eq "6.5.0"
555
+ end
556
+
557
+ it "#major_minor_patch returns version array" do
558
+ expect(node_package_version_from_git_url.major_minor_patch).to eq ["6", "5", "0"]
559
+ end
560
+
561
+ it "#skip_processing? returns false" do
562
+ expect(node_package_version_from_git_url.skip_processing?).to be false
563
+ end
564
+
565
+ it "#semver_wildcard? returns false" do
566
+ expect(node_package_version_from_git_url.semver_wildcard?).to be false
567
+ end
568
+ end
569
+
570
+ context "from github url" do
571
+ let (:node_package_version_from_github_url) { node_package_version(fixture_version: "github_url") }
572
+
573
+ it "#raw return version" do
574
+ expect(node_package_version_from_github_url.raw).to eq "6.5.0"
575
+ end
576
+
577
+ it "#major_minor_patch return version array" do
578
+ expect(node_package_version_from_github_url.major_minor_patch).to eq ["6", "5", "0"]
579
+ end
580
+
581
+ it "#skip_processing? return false" do
582
+ expect(node_package_version_from_github_url.skip_processing?).to be false
583
+ end
584
+
585
+ it "#semver_wildcard? return false" do
586
+ expect(node_package_version_from_github_url.semver_wildcard?).to be false
587
+ end
588
+ end
589
+
590
+ context "from package.json without shakapacker entry" do
591
+ let(:node_package_version_from_without) { node_package_version(fixture_version: "without") }
592
+
593
+ it "#raw returns empty string" do
594
+ expect(node_package_version_from_without.raw).to eq ""
595
+ end
596
+
597
+ it "#major_minor_patch returns nil" do
598
+ expect(node_package_version_from_without.major_minor_patch).to be nil
599
+ end
600
+
601
+ it "#skip_processing? returns true" do
602
+ expect(node_package_version_from_without.skip_processing?).to be true
603
+ end
604
+
605
+ it "#semver_wildcard? returns false" do
606
+ expect(node_package_version_from_without.semver_wildcard?).to be false
607
+ end
608
+ end
609
+ end
610
+
611
+ context "with package-lock.json v1" do
612
+ def node_package_version(fixture_version:)
613
+ Webpacker::VersionChecker::NodePackageVersion.new(
614
+ File.expand_path("fixtures/#{fixture_version}_package.json", __dir__),
615
+ "file/does/not/exist",
616
+ File.expand_path("fixtures/#{fixture_version}_package-lock.v1.json", __dir__),
617
+ )
618
+ end
619
+
620
+ context "from exact semantic version" do
621
+ let(:node_package_version_from_semver_exact) { node_package_version(fixture_version: "semver_exact") }
622
+
623
+ it "#raw returns version" do
624
+ expect(node_package_version_from_semver_exact.raw).to eq "6.0.0"
625
+ end
626
+
627
+ it "#major_minor_patch returns version array" do
628
+ expect(node_package_version_from_semver_exact.major_minor_patch).to eq ["6", "0", "0"]
629
+ end
630
+
631
+ it "#skip_processing? returns false" do
632
+ expect(node_package_version_from_semver_exact.skip_processing?).to be false
633
+ end
634
+
635
+ it "#semver_wildcard? returns false" do
636
+ expect(node_package_version_from_semver_exact.semver_wildcard?).to be false
637
+ end
638
+ end
639
+
640
+ context "from beta version" do
641
+ let(:node_package_version_from_beta) { node_package_version(fixture_version: "beta") }
642
+
643
+ it "#raw returns version" do
644
+ expect(node_package_version_from_beta.raw).to eq "6.1.0-beta.0"
645
+ end
646
+
647
+ it "#major_minor_patch returns version array" do
648
+ expect(node_package_version_from_beta.major_minor_patch).to eq ["6", "1", "0"]
649
+ end
650
+
651
+ it "#skip_processing? returns false" do
652
+ expect(node_package_version_from_beta.skip_processing?).to be false
653
+ end
654
+
655
+ it "#semver_wildcard? returns false" do
656
+ expect(node_package_version_from_beta.semver_wildcard?).to be false
657
+ end
658
+ end
659
+
660
+ context "from caret semantic version" do
661
+ let(:node_package_version_from_semver_caret) { node_package_version(fixture_version: "semver_caret") }
662
+
663
+ it "#raw returns version" do
664
+ expect(node_package_version_from_semver_caret.raw).to eq "6.5.0"
665
+ end
666
+
667
+ it "#major_minor_patch returns version array" do
668
+ expect(node_package_version_from_semver_caret.major_minor_patch).to eq ["6", "5", "0"]
669
+ end
670
+
671
+ it "#skip_processing? returns false" do
672
+ expect(node_package_version_from_semver_caret.skip_processing?).to be false
673
+ end
674
+
675
+ it "#semver_wildcard? returns false" do
676
+ expect(node_package_version_from_semver_caret.semver_wildcard?).to be false
677
+ end
678
+ end
679
+
680
+ context "from tilde semantic version" do
681
+ let(:node_package_version_from_semver_tilde) { node_package_version(fixture_version: "semver_tilde") }
682
+
683
+ it "#raw returns version" do
684
+ expect(node_package_version_from_semver_tilde.raw).to eq "6.0.2"
685
+ end
686
+
687
+ it "#major_minor_patch returns version array" do
688
+ expect(node_package_version_from_semver_tilde.major_minor_patch).to eq ["6", "0", "2"]
689
+ end
690
+
691
+ it "#skip_processing? returns false" do
692
+ expect(node_package_version_from_semver_tilde.skip_processing?).to be false
693
+ end
694
+
695
+ it "#semver_wildcard? returns false" do
696
+ expect(node_package_version_from_semver_tilde.semver_wildcard?).to be false
697
+ end
698
+ end
699
+
700
+ context "from relative path" do
701
+ let(:node_package_version_from_relative_path) { node_package_version(fixture_version: "relative_path") }
702
+
703
+ it "#raw returns relative path" do
704
+ expect(node_package_version_from_relative_path.raw).to eq "file:../.."
705
+ end
706
+
707
+ it "#major_minor_patch returns nil" do
708
+ expect(node_package_version_from_relative_path.major_minor_patch).to be nil
709
+ end
710
+
711
+ it "#skip_processing? returns true" do
712
+ expect(node_package_version_from_relative_path.skip_processing?).to be true
713
+ end
714
+
715
+ it "#semver_wildcard? returns false" do
716
+ expect(node_package_version_from_relative_path.semver_wildcard?).to be false
717
+ end
718
+ end
719
+
720
+ context "from git url" do
721
+ let(:node_package_version_from_git_url) { node_package_version(fixture_version: "git_url") }
722
+
723
+ it "#raw returns git url" do
724
+ expect(node_package_version_from_git_url.raw).to eq "git+ssh://git@github.com/shakacode/shakapacker.git#31854a58be49f736f3486a946b72d7e4f334e2b2"
725
+ end
726
+
727
+ it "#major_minor_patch returns nil" do
728
+ expect(node_package_version_from_git_url.major_minor_patch).to be nil
729
+ end
730
+
731
+ it "#skip_processing? returns true" do
732
+ expect(node_package_version_from_git_url.skip_processing?).to be true
733
+ end
734
+
735
+ it "#semver_wildcard? returns false" do
736
+ expect(node_package_version_from_git_url.semver_wildcard?).to be false
737
+ end
738
+ end
739
+
740
+ context "from github url" do
741
+ let (:node_package_version_from_github_url) { node_package_version(fixture_version: "github_url") }
742
+
743
+ it "#raw returns GitHub address" do
744
+ expect(node_package_version_from_github_url.raw).to eq "github:shakacode/shakapacker#31854a58be49f736f3486a946b72d7e4f334e2b2"
745
+ end
746
+
747
+ it "#major_minor_patch returns nil" do
748
+ expect(node_package_version_from_github_url.major_minor_patch).to be nil
749
+ end
750
+
751
+ it "#skip_processing? returns true" do
752
+ expect(node_package_version_from_github_url.skip_processing?).to be true
753
+ end
754
+
755
+ it "#semver_wildcard? returns false" do
756
+ expect(node_package_version_from_github_url.semver_wildcard?).to be false
757
+ end
758
+ end
759
+
760
+ context "from package.json without shakapacker entry" do
761
+ let(:node_package_version_from_without) { node_package_version(fixture_version: "without") }
762
+
763
+ it "#raw returns empty string" do
764
+ expect(node_package_version_from_without.raw).to eq ""
765
+ end
766
+
767
+ it "#major_minor_patch returns nil" do
768
+ expect(node_package_version_from_without.major_minor_patch).to be nil
769
+ end
770
+
771
+ it "#skip_processing? returns true" do
772
+ expect(node_package_version_from_without.skip_processing?).to be true
773
+ end
774
+
775
+ it "#semver_wildcard? returns false" do
776
+ expect(node_package_version_from_without.semver_wildcard?).to be false
777
+ end
778
+ end
779
+ end
780
+
781
+ context "with package-lock.json v2" do
782
+ def node_package_version(fixture_version:)
783
+ Webpacker::VersionChecker::NodePackageVersion.new(
784
+ File.expand_path("fixtures/#{fixture_version}_package.json", __dir__),
785
+ "file/does/not/exist",
786
+ File.expand_path("fixtures/#{fixture_version}_package-lock.v2.json", __dir__),
787
+ )
788
+ end
789
+
790
+ context "from exact semantic version" do
791
+ let(:node_package_version_from_semver_exact) { node_package_version(fixture_version: "semver_exact") }
792
+
793
+ it "#raw returns version" do
794
+ expect(node_package_version_from_semver_exact.raw).to eq "6.0.0"
795
+ end
796
+
797
+ it "#major_minor_patch returns version array" do
798
+ expect(node_package_version_from_semver_exact.major_minor_patch).to eq ["6", "0", "0"]
799
+ end
800
+
801
+ it "#skip_processing? returns false" do
802
+ expect(node_package_version_from_semver_exact.skip_processing?).to be false
803
+ end
804
+
805
+ it "#semver_wildcard? returns false" do
806
+ expect(node_package_version_from_semver_exact.semver_wildcard?).to be false
807
+ end
808
+ end
809
+
810
+ context "from beta version" do
811
+ let(:node_package_version_from_beta) { node_package_version(fixture_version: "beta") }
812
+
813
+ it "#raw returns version" do
814
+ expect(node_package_version_from_beta.raw).to eq "6.1.0-beta.0"
815
+ end
816
+
817
+ it "#major_minor_patch returns version array" do
818
+ expect(node_package_version_from_beta.major_minor_patch).to eq ["6", "1", "0"]
819
+ end
820
+
821
+ it "#skip_processing? returns false" do
822
+ expect(node_package_version_from_beta.skip_processing?).to be false
823
+ end
824
+
825
+ it "#semver_wildcard? returns false" do
826
+ expect(node_package_version_from_beta.semver_wildcard?).to be false
827
+ end
828
+ end
829
+
830
+ context "from caret semantic version" do
831
+ let(:node_package_version_from_semver_caret) { node_package_version(fixture_version: "semver_caret") }
832
+
833
+ it "#raw returns version" do
834
+ expect(node_package_version(fixture_version: "semver_caret").raw).to eq "6.5.0"
835
+ end
836
+
837
+ it "#major_minor_patch returns version array" do
838
+ expect(node_package_version(fixture_version: "semver_caret").major_minor_patch).to eq ["6", "5", "0"]
839
+ end
840
+
841
+ it "#skip_processing? returns false" do
842
+ expect(node_package_version(fixture_version: "semver_caret").skip_processing?).to be false
843
+ end
844
+
845
+ it "#semver_wildcard? returns false" do
846
+ expect(node_package_version(fixture_version: "semver_caret").semver_wildcard?).to be false
847
+ end
848
+ end
849
+
850
+ context "from tilde semantic version" do
851
+ let(:node_package_version_from_semver_tilde) { node_package_version(fixture_version: "semver_tilde") }
852
+
853
+ it "#raw returns version" do
854
+ expect(node_package_version_from_semver_tilde.raw).to eq "6.0.2"
855
+ end
856
+
857
+ it "#major_minor_patch returns version array" do
858
+ expect(node_package_version_from_semver_tilde.major_minor_patch).to eq ["6", "0", "2"]
859
+ end
860
+
861
+ it "#skip_processing? returns false" do
862
+ expect(node_package_version_from_semver_tilde.skip_processing?).to be false
863
+ end
864
+
865
+ it "#semver_wildcard? returns false" do
866
+ expect(node_package_version_from_semver_tilde.semver_wildcard?).to be false
867
+ end
868
+ end
869
+
870
+ context "from relative path" do
871
+ let(:node_package_version_from_relative_path) { node_package_version(fixture_version: "relative_path") }
872
+
873
+ it "#raw returns relative path" do
874
+ expect(node_package_version_from_relative_path.raw).to eq "../.."
875
+ end
876
+
877
+ it "#major_minor_patch returns nil" do
878
+ expect(node_package_version_from_relative_path.major_minor_patch).to be nil
879
+ end
880
+
881
+ it "#skip_processing? returns true" do
882
+ expect(node_package_version_from_relative_path.skip_processing?).to be true
883
+ end
884
+
885
+ it "#semver_wildcard? returns false" do
886
+ expect(node_package_version_from_relative_path.semver_wildcard?).to be false
887
+ end
888
+ end
889
+
890
+ context "from git url" do
891
+ let(:node_package_version_from_git_url) { node_package_version(fixture_version: "git_url") }
892
+
893
+ it "#raw returns version" do
894
+ expect(node_package_version_from_git_url.raw).to eq "6.5.0"
895
+ end
896
+
897
+ it "#major_minor_patch returns version array" do
898
+ expect(node_package_version_from_git_url.major_minor_patch).to eq ["6", "5", "0"]
899
+ end
900
+
901
+ it "#skip_processing? returns false" do
902
+ expect(node_package_version_from_git_url.skip_processing?).to be false
903
+ end
904
+
905
+ it "#semver_wildcard? returns false" do
906
+ expect(node_package_version_from_git_url.semver_wildcard?).to be false
907
+ end
908
+ end
909
+
910
+ context "from github url" do
911
+ let (:node_package_version_from_github_url) { node_package_version(fixture_version: "github_url") }
912
+
913
+ it "#raw returns version" do
914
+ expect(node_package_version_from_github_url.raw).to eq "6.5.0"
915
+ end
916
+
917
+ it "#major_minor_patch returns version array" do
918
+ expect(node_package_version_from_github_url.major_minor_patch).to eq ["6", "5", "0"]
919
+ end
920
+
921
+ it "#skip_processing? returns false" do
922
+ expect(node_package_version_from_github_url.skip_processing?).to be false
923
+ end
924
+
925
+ it "#semver_wildcard? returns false" do
926
+ expect(node_package_version_from_github_url.semver_wildcard?).to be false
927
+ end
928
+ end
929
+
930
+ context "from package.json without shakapacker entry" do
931
+ let(:node_package_version_from_without) { node_package_version(fixture_version: "without") }
932
+
933
+ it "#raw returns empty string" do
934
+ expect(node_package_version_from_without.raw).to eq ""
935
+ end
936
+
937
+ it "#major_minor_patch returns nil" do
938
+ expect(node_package_version_from_without.major_minor_patch).to be nil
939
+ end
940
+
941
+ it "#skip_processing? returns true" do
942
+ expect(node_package_version_from_without.skip_processing?).to be true
943
+ end
944
+
945
+ it "#semver_wildcard? returns false" do
946
+ expect(node_package_version_from_without.semver_wildcard?).to be false
947
+ end
948
+ end
949
+ end
950
+ end