shakapacker 9.0.0.beta.3 → 9.0.0.beta.4

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.
@@ -25,6 +25,46 @@ const canProcess = (rule, fn) => {
25
25
  return null
26
26
  }
27
27
 
28
+ const validateBabelDependencies = () => {
29
+ // Only validate core dependencies that are absolutely required
30
+ // Additional packages like presets are optional and project-specific
31
+ const coreRequiredPackages = ["@babel/core", "babel-loader"]
32
+
33
+ const missingCorePackages = coreRequiredPackages.filter(
34
+ (pkg) => !moduleExists(pkg)
35
+ )
36
+
37
+ if (missingCorePackages.length > 0) {
38
+ const installCommand = `npm install --save-dev ${missingCorePackages.join(" ")}`
39
+
40
+ // Check for commonly needed packages and suggest them
41
+ const suggestedPackages = [
42
+ "@babel/preset-env",
43
+ "@babel/plugin-transform-runtime",
44
+ "@babel/runtime"
45
+ ]
46
+
47
+ const missingSuggested = suggestedPackages.filter(
48
+ (pkg) => !moduleExists(pkg)
49
+ )
50
+ let additionalHelp = ""
51
+
52
+ if (missingSuggested.length > 0) {
53
+ additionalHelp =
54
+ `\n\nYou may also need: ${missingSuggested.join(", ")}\n` +
55
+ `Install with: npm install --save-dev ${missingSuggested.join(" ")}`
56
+ }
57
+
58
+ throw new Error(
59
+ `Babel is configured but core packages are missing: ${missingCorePackages.join(", ")}\n\n` +
60
+ `To fix this, run:\n ${installCommand}${additionalHelp}\n\n` +
61
+ `šŸ’” Tip: Consider migrating to SWC for 20x faster compilation:\n` +
62
+ ` 1. Set javascript_transpiler: 'swc' in config/shakapacker.yml\n` +
63
+ ` 2. Run: npm install @swc/core swc-loader`
64
+ )
65
+ }
66
+ }
67
+
28
68
  const loaderMatches = (configLoader, loaderToCheck, fn) => {
29
69
  if (configLoader !== loaderToCheck) {
30
70
  return null
@@ -32,9 +72,33 @@ const loaderMatches = (configLoader, loaderToCheck, fn) => {
32
72
 
33
73
  const loaderName = `${configLoader}-loader`
34
74
 
75
+ // Special validation for babel to check all dependencies
76
+ if (configLoader === "babel") {
77
+ validateBabelDependencies()
78
+ }
79
+
35
80
  if (!moduleExists(loaderName)) {
81
+ let installCommand = ""
82
+ let migrationHelp = ""
83
+
84
+ if (configLoader === "babel") {
85
+ installCommand =
86
+ "npm install --save-dev babel-loader @babel/core @babel/preset-env @babel/plugin-transform-runtime @babel/runtime"
87
+ migrationHelp =
88
+ "\n\nšŸ’” Tip: Consider migrating to SWC for 20x faster compilation:\n" +
89
+ " 1. Set javascript_transpiler: 'swc' in config/shakapacker.yml\n" +
90
+ " 2. Run: npm install @swc/core swc-loader"
91
+ } else if (configLoader === "swc") {
92
+ installCommand = "npm install --save-dev @swc/core swc-loader"
93
+ migrationHelp =
94
+ "\n\n✨ SWC is 20x faster than Babel with zero configuration!"
95
+ } else if (configLoader === "esbuild") {
96
+ installCommand = "npm install --save-dev esbuild esbuild-loader"
97
+ }
98
+
36
99
  throw new Error(
37
- `Your Shakapacker config specified using ${configLoader}, but ${loaderName} package is not installed. Please install ${loaderName} first.`
100
+ `Your Shakapacker config specified using ${configLoader}, but ${loaderName} package is not installed.\n\n` +
101
+ `To fix this, run:\n ${installCommand}${migrationHelp}`
38
102
  )
39
103
  }
40
104
 
@@ -56,6 +120,7 @@ module.exports = {
56
120
  ensureTrailingSlash,
57
121
  canProcess,
58
122
  moduleExists,
123
+ validateBabelDependencies,
59
124
  loaderMatches,
60
125
  packageFullVersion,
61
126
  packageMajorVersion
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shakapacker",
3
- "version": "9.0.0-beta.3",
3
+ "version": "9.0.0-beta.4",
4
4
  "description": "Use webpack to manage app-like JavaScript modules in Rails",
5
5
  "homepage": "https://github.com/shakacode/shakapacker",
6
6
  "bugs": {
@@ -11,6 +11,7 @@ jest.mock("../../../package/config", () => {
11
11
  const original = jest.requireActual("../../../package/config")
12
12
  return {
13
13
  ...original,
14
+ javascript_transpiler: "babel", // Force babel for this test
14
15
  additional_paths: [...original.additional_paths, "node_modules/included"]
15
16
  }
16
17
  })
@@ -32,6 +33,21 @@ const createWebpackConfig = (file, use) => ({
32
33
  })
33
34
 
34
35
  describe("babel", () => {
36
+ // Mock validateBabelDependencies to avoid actual dependency checking in tests
37
+ beforeAll(() => {
38
+ jest.mock("../../../package/utils/helpers", () => {
39
+ const original = jest.requireActual("../../../package/utils/helpers")
40
+ return {
41
+ ...original,
42
+ validateBabelDependencies: jest.fn() // Mock to do nothing
43
+ }
44
+ })
45
+ })
46
+
47
+ afterAll(() => {
48
+ jest.unmock("../../../package/utils/helpers")
49
+ })
50
+
35
51
  test("process source path", async () => {
36
52
  const normalPath = `${pathToAppJavascript}/a.js`
37
53
  const [tracked, loader] = createTrackLoader()
data/yarn.lock CHANGED
@@ -1042,7 +1042,7 @@
1042
1042
 
1043
1043
  "@types/eslint-scope@^3.7.3", "@types/eslint-scope@^3.7.7":
1044
1044
  version "3.7.7"
1045
- resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz"
1045
+ resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5"
1046
1046
  integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==
1047
1047
  dependencies:
1048
1048
  "@types/eslint" "*"
@@ -1389,7 +1389,7 @@
1389
1389
 
1390
1390
  "@webassemblyjs/wasm-edit@^1.12.1", "@webassemblyjs/wasm-edit@^1.14.1":
1391
1391
  version "1.14.1"
1392
- resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz"
1392
+ resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597"
1393
1393
  integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==
1394
1394
  dependencies:
1395
1395
  "@webassemblyjs/ast" "1.14.1"
@@ -5629,7 +5629,7 @@ tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1:
5629
5629
 
5630
5630
  terser-webpack-plugin@^5.3.10, terser-webpack-plugin@^5.3.11:
5631
5631
  version "5.3.14"
5632
- resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz"
5632
+ resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06"
5633
5633
  integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==
5634
5634
  dependencies:
5635
5635
  "@jridgewell/trace-mapping" "^0.3.25"
@@ -6166,7 +6166,7 @@ which@^2.0.1:
6166
6166
 
6167
6167
  wildcard@^2.0.0, wildcard@^2.0.1:
6168
6168
  version "2.0.1"
6169
- resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz"
6169
+ resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
6170
6170
  integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
6171
6171
 
6172
6172
  word-wrap@^1.2.5:
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shakapacker
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.0.0.beta.3
4
+ version: 9.0.0.beta.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
@@ -178,6 +178,7 @@ files:
178
178
  - docs/sprockets.md
179
179
  - docs/style_loader_vs_mini_css.md
180
180
  - docs/subresource_integrity.md
181
+ - docs/transpiler-performance.md
181
182
  - docs/troubleshooting.md
182
183
  - docs/using_esbuild_loader.md
183
184
  - docs/using_swc_loader.md
@@ -239,7 +240,6 @@ files:
239
240
  - lib/tasks/shakapacker/install.rake
240
241
  - lib/tasks/shakapacker/verify_config.rake
241
242
  - lib/tasks/shakapacker/verify_install.rake
242
- - package-lock.json
243
243
  - package.json
244
244
  - package/babel/preset.js
245
245
  - package/config.js
@@ -314,7 +314,7 @@ homepage: https://github.com/shakacode/shakapacker
314
314
  licenses:
315
315
  - MIT
316
316
  metadata:
317
- source_code_uri: https://github.com/shakacode/shakapacker/tree/v9.0.0.beta.3
317
+ source_code_uri: https://github.com/shakacode/shakapacker/tree/v9.0.0.beta.4
318
318
  rdoc_options: []
319
319
  require_paths:
320
320
  - lib