shakapacker 7.3.0.beta.1 → 8.0.0.rc.2

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.
Files changed (231) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintignore +1 -1
  3. data/.eslintrc.js +29 -8
  4. data/.github/PULL_REQUEST_TEMPLATE.md +10 -3
  5. data/.github/workflows/dummy.yml +6 -1
  6. data/.github/workflows/generator.yml +14 -18
  7. data/.github/workflows/node.yml +56 -0
  8. data/.github/workflows/ruby.yml +29 -17
  9. data/.node-version +1 -1
  10. data/.rubocop.yml +1 -0
  11. data/CHANGELOG.md +56 -5
  12. data/README.md +101 -48
  13. data/Rakefile +1 -7
  14. data/docs/customizing_babel_config.md +2 -2
  15. data/docs/deployment.md +13 -6
  16. data/docs/react.md +7 -13
  17. data/docs/troubleshooting.md +4 -4
  18. data/docs/using_esbuild_loader.md +1 -1
  19. data/docs/using_swc_loader.md +1 -1
  20. data/docs/v6_upgrade.md +1 -1
  21. data/docs/v8_upgrade.md +148 -0
  22. data/gemfiles/Gemfile-rails.7.1.x +12 -0
  23. data/jest.config.js +4 -0
  24. data/lib/install/config/shakapacker.yml +2 -2
  25. data/lib/install/template.rb +36 -30
  26. data/lib/shakapacker/base_strategy.rb +2 -1
  27. data/lib/shakapacker/compiler.rb +6 -21
  28. data/lib/shakapacker/configuration.rb +2 -46
  29. data/lib/shakapacker/deprecation_helper.rb +0 -78
  30. data/lib/shakapacker/dev_server.rb +1 -16
  31. data/lib/shakapacker/dev_server_runner.rb +2 -21
  32. data/lib/shakapacker/env.rb +1 -1
  33. data/lib/shakapacker/helper.rb +3 -3
  34. data/lib/shakapacker/instance.rb +1 -3
  35. data/lib/shakapacker/manifest.rb +1 -1
  36. data/lib/shakapacker/railtie.rb +7 -0
  37. data/lib/shakapacker/runner.rb +4 -18
  38. data/lib/shakapacker/utils/manager.rb +58 -0
  39. data/lib/shakapacker/utils/misc.rb +0 -12
  40. data/lib/shakapacker/version.rb +1 -1
  41. data/lib/shakapacker/version_checker.rb +9 -30
  42. data/lib/shakapacker/webpack_runner.rb +2 -21
  43. data/lib/shakapacker.rb +0 -2
  44. data/lib/tasks/shakapacker/check_binstubs.rake +12 -26
  45. data/lib/tasks/shakapacker/check_manager.rake +3 -8
  46. data/lib/tasks/shakapacker/info.rake +6 -15
  47. data/package/babel/preset.js +15 -15
  48. data/package/config.js +15 -19
  49. data/package/dev_server.js +4 -4
  50. data/package/env.js +19 -17
  51. data/package/environments/base.js +41 -24
  52. data/package/environments/development.js +6 -6
  53. data/package/environments/production.js +16 -16
  54. data/package/environments/test.js +1 -1
  55. data/package/esbuild/index.js +6 -6
  56. data/package/index.d.ts +0 -2
  57. data/package/index.js +17 -46
  58. data/package/rules/babel.js +6 -8
  59. data/package/rules/coffee.js +2 -2
  60. data/package/rules/css.js +1 -1
  61. data/package/rules/erb.js +4 -4
  62. data/package/rules/esbuild.js +5 -7
  63. data/package/rules/file.js +14 -7
  64. data/package/rules/index.js +11 -11
  65. data/package/rules/jscommon.js +8 -5
  66. data/package/rules/less.js +10 -9
  67. data/package/rules/raw.js +1 -1
  68. data/package/rules/sass.js +4 -4
  69. data/package/rules/stylus.js +12 -7
  70. data/package/rules/swc.js +5 -7
  71. data/package/swc/index.js +10 -10
  72. data/package/utils/configPath.js +3 -18
  73. data/package/utils/defaultConfigPath.js +1 -1
  74. data/package/utils/{get_style_rule.js → getStyleRule.js} +6 -6
  75. data/package/utils/helpers.js +2 -43
  76. data/package/utils/inliningCss.js +4 -3
  77. data/package/utils/snakeToCamelCase.js +5 -0
  78. data/package/webpackDevServerConfig.js +28 -25
  79. data/package.json +12 -18
  80. data/prettier.config.js +4 -0
  81. data/shakapacker.gemspec +1 -1
  82. data/spec/dummy/app/javascript/packs/application.js +1 -1
  83. data/spec/dummy/config/application.rb +3 -0
  84. data/spec/dummy/config/initializers/react_on_rails.rb +2 -2
  85. data/spec/dummy/config/shakapacker.yml +3 -4
  86. data/spec/dummy/config/webpack/commonWebpackConfig.js +0 -1
  87. data/spec/dummy/config/webpack/webpack.config.js +1 -1
  88. data/spec/dummy/package.json +2 -1
  89. data/spec/dummy/yarn.lock +2 -3
  90. data/spec/fixtures/github_url_package-lock.v1.json +1 -1
  91. data/spec/fixtures/github_url_package-lock.v2.json +2 -2
  92. data/spec/fixtures/github_url_package.json +1 -1
  93. data/spec/fixtures/github_url_pnpm-lock.v7.yaml +1 -1
  94. data/spec/fixtures/github_url_pnpm-lock.v8.yaml +1 -1
  95. data/spec/fixtures/github_url_yarn.v1.lock +1 -1
  96. data/spec/fixtures/github_url_yarn.v2.lock +2 -2
  97. data/spec/generator_specs/e2e_template/template.rb +15 -28
  98. data/spec/generator_specs/generator_spec.rb +6 -136
  99. data/spec/mounted_app/test/dummy/config/webpacker.yml +0 -1
  100. data/spec/shakapacker/compiler_spec.rb +1 -3
  101. data/spec/shakapacker/configuration_spec.rb +4 -56
  102. data/spec/shakapacker/dev_server_runner_spec.rb +19 -102
  103. data/spec/shakapacker/dev_server_spec.rb +1 -16
  104. data/spec/shakapacker/engine_rake_tasks_spec.rb +1 -16
  105. data/spec/shakapacker/helper_spec.rb +3 -3
  106. data/spec/shakapacker/instance_spec.rb +1 -3
  107. data/spec/shakapacker/rake_tasks_spec.rb +2 -14
  108. data/spec/shakapacker/shakapacker_spec.rb +0 -1
  109. data/spec/shakapacker/test_app/config/shakapacker_css_extract_ignore_order_warnings.yml +0 -1
  110. data/spec/shakapacker/test_app/config/shakapacker_manifest_path.yml +0 -1
  111. data/spec/shakapacker/test_app/config/shakapacker_nested_entries.yml +0 -1
  112. data/spec/shakapacker/test_app/config/shakapacker_other_location.yml +0 -1
  113. data/spec/shakapacker/test_app/package.json +2 -1
  114. data/spec/shakapacker/utils_manager_spec.rb +125 -0
  115. data/spec/shakapacker/version_checker_spec.rb +5 -5
  116. data/spec/shakapacker/webpack_runner_spec.rb +19 -28
  117. data/spec/support/package_json_helpers.rb +7 -4
  118. data/test/helpers.js +67 -0
  119. data/test/package/config.test.js +50 -0
  120. data/test/package/dev_server.test.js +44 -0
  121. data/test/package/development.test.js +43 -0
  122. data/test/package/env.test.js +57 -0
  123. data/test/package/environments/base.test.js +105 -0
  124. data/test/package/environments/development.test.js +50 -0
  125. data/test/package/environments/production.test.js +106 -0
  126. data/test/package/index.test.js +45 -0
  127. data/test/package/production.test.js +32 -0
  128. data/test/package/rules/babel.test.js +58 -0
  129. data/test/package/rules/esbuild.test.js +59 -0
  130. data/test/package/rules/file.test.js +81 -0
  131. data/test/package/rules/index.test.js +7 -0
  132. data/test/package/rules/raw.test.js +12 -0
  133. data/test/package/rules/swc.test.js +59 -0
  134. data/test/package/staging.test.js +31 -0
  135. data/test/package/test.test.js +28 -0
  136. data/yarn.lock +1278 -421
  137. metadata +50 -100
  138. data/.github/workflows/jest.yml +0 -33
  139. data/.github/workflows/js-lint.yml +0 -33
  140. data/.github/workflows/rubocop.yml +0 -28
  141. data/.github/workflows/ruby-backward-compatibility.yml +0 -51
  142. data/lib/install/package.json +0 -15
  143. data/lib/tasks/shakapacker/check_yarn.rake +0 -34
  144. data/lib/tasks/shakapacker/yarn_install.rake +0 -24
  145. data/lib/tasks/webpacker/binstubs.rake +0 -9
  146. data/lib/tasks/webpacker/check_binstubs.rake +0 -9
  147. data/lib/tasks/webpacker/check_node.rake +0 -9
  148. data/lib/tasks/webpacker/check_yarn.rake +0 -9
  149. data/lib/tasks/webpacker/clean.rake +0 -9
  150. data/lib/tasks/webpacker/clobber.rake +0 -11
  151. data/lib/tasks/webpacker/compile.rake +0 -9
  152. data/lib/tasks/webpacker/info.rake +0 -9
  153. data/lib/tasks/webpacker/install.rake +0 -9
  154. data/lib/tasks/webpacker/verify_config.rake +0 -9
  155. data/lib/tasks/webpacker/verify_install.rake +0 -9
  156. data/lib/tasks/webpacker/yarn_install.rake +0 -9
  157. data/lib/tasks/webpacker.rake +0 -20
  158. data/lib/webpacker/dev_server_runner.rb +0 -9
  159. data/lib/webpacker/webpack_runner.rb +0 -9
  160. data/lib/webpacker.rb +0 -4
  161. data/package/__tests__/config-bc.js +0 -27
  162. data/package/__tests__/config.js +0 -46
  163. data/package/__tests__/dev_server-bc.js +0 -46
  164. data/package/__tests__/dev_server.js +0 -46
  165. data/package/__tests__/development-bc.js +0 -66
  166. data/package/__tests__/development.js +0 -66
  167. data/package/__tests__/env-bc.js +0 -59
  168. data/package/__tests__/env.js +0 -59
  169. data/package/__tests__/index-bc.js +0 -22
  170. data/package/__tests__/index.js +0 -46
  171. data/package/__tests__/production-bc.js +0 -51
  172. data/package/__tests__/production.js +0 -51
  173. data/package/__tests__/staging-bc.js +0 -53
  174. data/package/__tests__/staging.js +0 -53
  175. data/package/__tests__/test-bc.js +0 -43
  176. data/package/__tests__/test.js +0 -43
  177. data/package/environments/__tests__/base-bc.js +0 -107
  178. data/package/environments/__tests__/base.js +0 -107
  179. data/package/environments/__tests__/development.js +0 -53
  180. data/package/environments/__tests__/production.js +0 -92
  181. data/package/rules/__tests__/__utils__/webpack.js +0 -50
  182. data/package/rules/__tests__/babel.js +0 -63
  183. data/package/rules/__tests__/esbuild.js +0 -64
  184. data/package/rules/__tests__/file.js +0 -79
  185. data/package/rules/__tests__/index.js +0 -7
  186. data/package/rules/__tests__/raw.js +0 -18
  187. data/package/rules/__tests__/swc.js +0 -63
  188. data/package/utils/snakeToCamelCase +0 -7
  189. data/spec/backward_compatibility_specs/command_spec.rb +0 -116
  190. data/spec/backward_compatibility_specs/compiler_spec.rb +0 -59
  191. data/spec/backward_compatibility_specs/compiler_strategy_spec.rb +0 -24
  192. data/spec/backward_compatibility_specs/configuration_spec.rb +0 -294
  193. data/spec/backward_compatibility_specs/dev_server_runner_spec.rb +0 -206
  194. data/spec/backward_compatibility_specs/dev_server_spec.rb +0 -47
  195. data/spec/backward_compatibility_specs/digest_strategy_spec.rb +0 -38
  196. data/spec/backward_compatibility_specs/engine_rake_tasks_spec.rb +0 -67
  197. data/spec/backward_compatibility_specs/env_spec.rb +0 -23
  198. data/spec/backward_compatibility_specs/helper_spec.rb +0 -243
  199. data/spec/backward_compatibility_specs/instance_spec.rb +0 -31
  200. data/spec/backward_compatibility_specs/manifest_spec.rb +0 -100
  201. data/spec/backward_compatibility_specs/mtime_strategy_spec.rb +0 -55
  202. data/spec/backward_compatibility_specs/rake_tasks_spec.rb +0 -41
  203. data/spec/backward_compatibility_specs/spec_helper_initializer.rb +0 -24
  204. data/spec/backward_compatibility_specs/webpack_runner_spec.rb +0 -86
  205. data/spec/backward_compatibility_specs/webpacker_spec.rb +0 -41
  206. data/spec/backward_compatibility_specs/webpacker_test_app/.gitignore +0 -2
  207. data/spec/backward_compatibility_specs/webpacker_test_app/Rakefile +0 -3
  208. data/spec/backward_compatibility_specs/webpacker_test_app/app/packs/entrypoints/application.js +0 -10
  209. data/spec/backward_compatibility_specs/webpacker_test_app/app/packs/entrypoints/generated/something.js +0 -2
  210. data/spec/backward_compatibility_specs/webpacker_test_app/app/packs/entrypoints/multi_entry.css +0 -4
  211. data/spec/backward_compatibility_specs/webpacker_test_app/app/packs/entrypoints/multi_entry.js +0 -4
  212. data/spec/backward_compatibility_specs/webpacker_test_app/bin/webpacker +0 -13
  213. data/spec/backward_compatibility_specs/webpacker_test_app/bin/webpacker-dev-server +0 -13
  214. data/spec/backward_compatibility_specs/webpacker_test_app/config/application.rb +0 -11
  215. data/spec/backward_compatibility_specs/webpacker_test_app/config/environment.rb +0 -4
  216. data/spec/backward_compatibility_specs/webpacker_test_app/config/initializers/inspect_autoload_paths.rb +0 -1
  217. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpack/webpack.config.js +0 -0
  218. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker.yml +0 -83
  219. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_css_extract_ignore_order_warnings.yml +0 -84
  220. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_defaults_fallback.yml +0 -11
  221. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_manifest_path.yml +0 -80
  222. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_nested_entries.yml +0 -83
  223. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_no_precompile.yml +0 -7
  224. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_other_location.yml +0 -85
  225. data/spec/backward_compatibility_specs/webpacker_test_app/config/webpacker_public_root.yml +0 -18
  226. data/spec/backward_compatibility_specs/webpacker_test_app/config.ru +0 -5
  227. data/spec/backward_compatibility_specs/webpacker_test_app/package.json +0 -13
  228. data/spec/backward_compatibility_specs/webpacker_test_app/public/packs/manifest.json +0 -58
  229. data/spec/backward_compatibility_specs/webpacker_test_app/some.config.js +0 -0
  230. data/spec/backward_compatibility_specs/webpacker_test_app/tmp/shakapacker/last-compilation-digest-production +0 -1
  231. data/spec/backward_compatibility_specs/webpacker_test_app/yarn.lock +0 -11
@@ -1,35 +1,38 @@
1
- const shakapackerDevServerYamlConfig = require('./dev_server')
2
- const snakeToCamelCase = require('./utils/snakeToCamelCase')
3
- const { outputPath: contentBase, publicPath } = require('./config')
1
+ const shakapackerDevServerYamlConfig = require("./dev_server")
2
+ const snakeToCamelCase = require("./utils/snakeToCamelCase")
3
+ const { outputPath: contentBase, publicPath } = require("./config")
4
4
 
5
5
  const webpackDevServerMappedKeys = new Set([
6
6
  // client, server, liveReload, devMiddleware are handled separately
7
- 'allowedHosts',
8
- 'bonjour',
9
- 'compress',
10
- 'headers',
11
- 'historyApiFallback',
12
- 'host',
13
- 'hot',
14
- 'http2',
15
- 'https',
16
- 'ipc',
17
- 'magicHtml',
18
- 'onAfterSetupMiddleware',
19
- 'onBeforeSetupMiddleware',
20
- 'open',
21
- 'port',
22
- 'proxy',
23
- 'server',
24
- 'setupExitSignals',
25
- 'setupMiddlewares',
26
- 'watchFiles',
27
- 'webSocketServer'
7
+ "allowedHosts",
8
+ "bonjour",
9
+ "compress",
10
+ "headers",
11
+ "historyApiFallback",
12
+ "host",
13
+ "hot",
14
+ "http2",
15
+ "https",
16
+ "ipc",
17
+ "magicHtml",
18
+ "onAfterSetupMiddleware",
19
+ "onBeforeSetupMiddleware",
20
+ "open",
21
+ "port",
22
+ "proxy",
23
+ "server",
24
+ "setupExitSignals",
25
+ "setupMiddlewares",
26
+ "watchFiles",
27
+ "webSocketServer"
28
28
  ])
29
29
 
30
30
  function createDevServerConfig() {
31
31
  const devServerYamlConfig = { ...shakapackerDevServerYamlConfig }
32
- const liveReload = devServerYamlConfig.live_reload !== undefined ? devServerYamlConfig.live_reload : !devServerYamlConfig.hmr
32
+ const liveReload =
33
+ devServerYamlConfig.live_reload !== undefined
34
+ ? devServerYamlConfig.live_reload
35
+ : !devServerYamlConfig.hmr
33
36
  delete devServerYamlConfig.live_reload
34
37
 
35
38
  const config = {
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shakapacker",
3
- "version": "7.3.0-beta.1",
3
+ "version": "8.0.0-rc.2",
4
4
  "description": "Use webpack to manage app-like JavaScript modules in Rails",
5
5
  "homepage": "https://github.com/shakacode/shakapacker",
6
6
  "bugs": {
@@ -19,21 +19,10 @@
19
19
  "lib/install/config/shakapacker.yml"
20
20
  ],
21
21
  "scripts": {
22
- "lint": "eslint package/",
22
+ "lint": "eslint .",
23
23
  "test": "jest"
24
24
  },
25
- "jest": {
26
- "roots": [
27
- "<rootDir>/package"
28
- ],
29
- "testPathIgnorePatterns": [
30
- "/__fixtures__/",
31
- "/__utils__/"
32
- ],
33
- "testRegex": "(/__tests__/.*|(\\.|/))\\.jsx?$"
34
- },
35
25
  "dependencies": {
36
- "glob": "^7.2.0",
37
26
  "js-yaml": "^4.1.0",
38
27
  "path-complete-extname": "^1.0.0"
39
28
  },
@@ -41,14 +30,18 @@
41
30
  "babel-loader": "^8.2.4",
42
31
  "compression-webpack-plugin": "^9.0.0",
43
32
  "esbuild-loader": "^2.18.0",
44
- "eslint": "^7.32.0",
45
- "eslint-config-airbnb": "^18.2.1",
46
- "eslint-config-prettier": "^8.3.0",
33
+ "eslint": "^8.0.0",
34
+ "eslint-config-airbnb": "^19.0.0",
35
+ "eslint-config-prettier": "^9.0.0",
47
36
  "eslint-plugin-import": "^2.24.2",
37
+ "eslint-plugin-jest": "^27.9.0",
48
38
  "eslint-plugin-jsx-a11y": "^6.4.1",
39
+ "eslint-plugin-prettier": "^5.1.3",
49
40
  "eslint-plugin-react": "^7.26.0",
41
+ "eslint-plugin-react-hooks": "^4.6.0",
50
42
  "jest": "^28.1.3",
51
43
  "memory-fs": "^0.5.0",
44
+ "prettier": "^3.2.5",
52
45
  "swc-loader": "^0.1.15",
53
46
  "thenify": "^3.3.1",
54
47
  "webpack": "^5.72.0",
@@ -68,7 +61,7 @@
68
61
  "webpack": "^5.72.0",
69
62
  "webpack-assets-manifest": "^5.0.6",
70
63
  "webpack-cli": "^4.9.2 || ^5.0.0",
71
- "webpack-dev-server": "^4.9.0",
64
+ "webpack-dev-server": "^4.9.0 || ^5.0.0",
72
65
  "webpack-merge": "^5.8.0"
73
66
  },
74
67
  "peerDependenciesMeta": {
@@ -79,8 +72,9 @@
79
72
  "optional": true
80
73
  }
81
74
  },
75
+ "packageManager": "yarn@1.22.22",
82
76
  "engines": {
83
- "node": "^12.13.0 || ^14 || >=16",
77
+ "node": ">= 14",
84
78
  "yarn": ">=1 <5"
85
79
  },
86
80
  "publishConfig": {
@@ -0,0 +1,4 @@
1
+ module.exports = {
2
+ semi: false,
3
+ trailingComma: "none"
4
+ }
data/shakapacker.gemspec CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  "source_code_uri" => "https://github.com/shakacode/shakapacker/tree/v#{npm_version}",
16
16
  }
17
17
 
18
- s.required_ruby_version = ">= 2.6.0"
18
+ s.required_ruby_version = ">= 2.7.0"
19
19
 
20
20
  s.add_dependency "activesupport", ">= 5.2"
21
21
  s.add_dependency "package_json"
@@ -14,4 +14,4 @@
14
14
  // const images = require.context('../images', true)
15
15
  // const imagePath = (name) => images(name, true)
16
16
 
17
- console.log('Hello World from Webpacker')
17
+ console.log('Hello World from Shakapacker')
@@ -19,6 +19,9 @@ require "rails/test_unit/railtie"
19
19
  # you've limited to :test, :development, or :production.
20
20
  Bundler.require(*Rails.groups)
21
21
 
22
+ # Temp patch for dummy specs
23
+ Webpacker = Shakapacker
24
+
22
25
  module TestReactOnRailsV12SsrV2
23
26
  class Application < Rails::Application
24
27
  # Initialize configuration defaults for originally generated Rails version.
@@ -24,8 +24,8 @@ ReactOnRails.configure do |config|
24
24
  # to automatically refresh your webpack assets on every test run.
25
25
  #
26
26
  # Alternately, you can remove the `ReactOnRails::TestHelper.configure_rspec_to_compile_assets`
27
- # and set the config/webpacker.yml option for test to true.
28
- config.build_test_command = "RAILS_ENV=test bin/webpacker"
27
+ # and set the config/shakapacker.yml option for test to true.
28
+ config.build_test_command = "RAILS_ENV=test bin/shakapacker"
29
29
 
30
30
  ################################################################################
31
31
  ################################################################################
@@ -1,11 +1,11 @@
1
- # Note: You must restart bin/webpacker-dev-server for changes to take effect
1
+ # Note: You must restart bin/shakapacker-dev-server for changes to take effect
2
2
 
3
3
  default: &default
4
4
  source_path: app/javascript
5
5
  source_entry_path: packs
6
6
  public_root_path: public
7
7
  public_output_path: packs
8
- cache_path: tmp/webpacker
8
+ cache_path: tmp/shakapacker
9
9
  webpack_compile_output: true
10
10
 
11
11
  # Additional paths webpack should lookup modules
@@ -17,12 +17,11 @@ default: &default
17
17
 
18
18
  development:
19
19
  <<: *default
20
- # This is false since we're running `bin/webpacker -w` in Procfile.dev-setic
20
+ # This is false since we're running `bin/shakapacker -w` in Procfile.dev-setic
21
21
  compile: false
22
22
 
23
23
  # Reference: https://webpack.js.org/configuration/dev-server/
24
24
  dev_server:
25
- https: false
26
25
  host: localhost
27
26
  port: 3035
28
27
  # Hot Module Replacement updates modules while the application is running without a full reload
@@ -1,6 +1,5 @@
1
1
  // Common configuration applying to client and server configuration
2
2
 
3
- // const { globalMutableWebpackConfig: baseClientWebpackConfig, merge } = require('shakapacker')
4
3
  const { generateWebpackConfig, merge } = require('shakapacker')
5
4
  const commonOptions = {
6
5
  resolve: {
@@ -16,7 +16,7 @@ const webpackConfiguration = envSpecificConfig()
16
16
 
17
17
  // To debug the webpack configuration
18
18
  // 1. Uncomment debugger line below
19
- // 2. Run `bin/webpacker --debug-webpacker`
19
+ // 2. Run `bin/shakapacker --debug-shakapacker`
20
20
  // 3. Examine the webpackConfiguration variable
21
21
  // 4. Consider adding a 'debugger` line to the beginning of this file.
22
22
  // debugger
@@ -39,5 +39,6 @@
39
39
  "fork-ts-checker-webpack-plugin": "^6.5.2",
40
40
  "react-refresh": "^0.14.0",
41
41
  "webpack-dev-server": "^4.9.2"
42
- }
42
+ },
43
+ "packageManager": "yarn@1.22.24"
43
44
  }
data/spec/dummy/yarn.lock CHANGED
@@ -2571,7 +2571,7 @@ glob-to-regexp@^0.4.1:
2571
2571
  resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
2572
2572
  integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
2573
2573
 
2574
- glob@^7.1.3, glob@^7.1.6, glob@^7.2.0:
2574
+ glob@^7.1.3, glob@^7.1.6:
2575
2575
  version "7.2.3"
2576
2576
  resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
2577
2577
  integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@@ -4060,9 +4060,8 @@ setprototypeof@1.2.0:
4060
4060
  integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
4061
4061
 
4062
4062
  "shakapacker@file:.yalc/shakapacker":
4063
- version "7.0.0-rc.0"
4063
+ version "7.2.3"
4064
4064
  dependencies:
4065
- glob "^7.2.0"
4066
4065
  js-yaml "^4.1.0"
4067
4066
  path-complete-extname "^1.0.0"
4068
4067
 
@@ -102,7 +102,7 @@
102
102
  },
103
103
  "shakapacker": {
104
104
  "version": "github:shakacode/shakapacker#31854a58be49f736f3486a946b72d7e4f334e2b2",
105
- "from": "github:shakacode/shakapacker#master",
105
+ "from": "github:shakacode/shakapacker#main",
106
106
  "requires": {
107
107
  "glob": "^7.2.0",
108
108
  "js-yaml": "^4.1.0",
@@ -9,7 +9,7 @@
9
9
  "version": "1.0.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "shakapacker": "shakacode/shakapacker#master"
12
+ "shakapacker": "shakacode/shakapacker#main"
13
13
  },
14
14
  "devDependencies": {
15
15
  "right-pad": "^1.0.1"
@@ -9594,7 +9594,7 @@
9594
9594
  },
9595
9595
  "shakapacker": {
9596
9596
  "version": "git+ssh://git@github.com/shakacode/shakapacker.git#31854a58be49f736f3486a946b72d7e4f334e2b2",
9597
- "from": "shakapacker@shakacode/shakapacker#master",
9597
+ "from": "shakapacker@shakacode/shakapacker#main",
9598
9598
  "requires": {
9599
9599
  "glob": "^7.2.0",
9600
9600
  "js-yaml": "^4.1.0",
@@ -5,7 +5,7 @@
5
5
  "license": "MIT",
6
6
  "private": true,
7
7
  "dependencies": {
8
- "shakapacker": "shakacode/shakapacker#master"
8
+ "shakapacker": "shakacode/shakapacker#main"
9
9
  },
10
10
  "devDependencies": {
11
11
  "right-pad": "^1.0.1"
@@ -2,7 +2,7 @@ lockfileVersion: 5.4
2
2
 
3
3
  specifiers:
4
4
  right-pad: ^1.0.1
5
- shakapacker: shakacode/shakapacker#master
5
+ shakapacker: shakacode/shakapacker#main
6
6
 
7
7
  dependencies:
8
8
  shakapacker: github.com/shakacode/shakapacker/cdf32835d3e0949952b8b4b53063807f714f9b24
@@ -6,7 +6,7 @@ settings:
6
6
 
7
7
  dependencies:
8
8
  shakapacker:
9
- specifier: shakacode/shakapacker#master
9
+ specifier: shakacode/shakapacker#main
10
10
  version: github.com/shakacode/shakapacker/cdf32835d3e0949952b8b4b53063807f714f9b24(@babel/core@7.22.10)(@babel/plugin-transform-runtime@7.22.10)(@babel/preset-env@7.22.10)(@babel/runtime@7.22.10)(babel-loader@9.1.3)(compression-webpack-plugin@10.0.0)(terser-webpack-plugin@5.3.9)(webpack-assets-manifest@5.1.0)(webpack-cli@5.1.4)(webpack-dev-server@4.15.1)(webpack-merge@5.9.0)(webpack@5.88.2)
11
11
 
12
12
  devDependencies:
@@ -91,7 +91,7 @@ right-pad@^1.0.1:
91
91
  resolved "https://registry.yarnpkg.com/right-pad/-/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0"
92
92
  integrity sha512-bYBjgxmkvTAfgIYy328fmkwhp39v8lwVgWhhrzxPV3yHtcSqyYKe9/XOhvW48UFjATg3VuJbpsp5822ACNvkmw==
93
93
 
94
- shakapacker@shakacode/shakapacker#master:
94
+ shakapacker@shakacode/shakapacker#main:
95
95
  version "6.5.0"
96
96
  resolved "https://codeload.github.com/shakacode/shakapacker/tar.gz/31854a58be49f736f3486a946b72d7e4f334e2b2"
97
97
  dependencies:
@@ -124,7 +124,7 @@ __metadata:
124
124
  languageName: node
125
125
  linkType: hard
126
126
 
127
- "shakapacker@shakacode/shakapacker#master":
127
+ "shakapacker@shakacode/shakapacker#main":
128
128
  version: 6.5.0
129
129
  resolution: "shakapacker@https://github.com/shakacode/shakapacker.git#commit=31854a58be49f736f3486a946b72d7e4f334e2b2"
130
130
  dependencies:
@@ -153,7 +153,7 @@ __metadata:
153
153
  resolution: "test_app@workspace:."
154
154
  dependencies:
155
155
  right-pad: ^1.0.1
156
- shakapacker: "shakacode/shakapacker#master"
156
+ shakapacker: "shakacode/shakapacker#main"
157
157
  languageName: unknown
158
158
  linkType: soft
159
159
 
@@ -1,33 +1,20 @@
1
1
  require "shakapacker/utils/misc"
2
2
 
3
- if Shakapacker::Utils::Misc.use_package_json_gem
4
- Shakapacker::Utils::Misc.require_package_json_gem
5
-
6
- package_json = PackageJson.new
7
-
8
- # install react
9
- package_json.manager.add(["react", "react-dom", "@babel/preset-react"])
10
-
11
- # update webpack presets for react
12
- package_json.merge! do |pj|
13
- babel = pj.fetch("babel", {})
14
-
15
- babel["presets"] ||= []
16
- babel["presets"].unshift("@babel/preset-react")
17
-
18
- { "babel" => babel }
19
- end
20
- else
21
- # install react
22
- system("yarn add react react-dom @babel/preset-react")
23
-
24
- # update webpack presets for react
25
- package_json_path = Rails.root.join("./package.json")
26
- insert_into_file(
27
- package_json_path,
28
- %( "@babel/preset-react",\n),
29
- after: /"presets": \[\n/
30
- )
3
+ require "package_json"
4
+
5
+ package_json = PackageJson.new
6
+
7
+ # install react
8
+ package_json.manager.add(["react", "react-dom", "@babel/preset-react"])
9
+
10
+ # update webpack presets for react
11
+ package_json.merge! do |pj|
12
+ babel = pj.fetch("babel", {})
13
+
14
+ babel["presets"] ||= []
15
+ babel["presets"].unshift("@babel/preset-react")
16
+
17
+ { "babel" => babel }
31
18
  end
32
19
 
33
20
  # install rspec-rails
@@ -58,10 +58,12 @@ describe "Generator" do
58
58
  expect(actual_content).to eq expected_content
59
59
  end
60
60
 
61
- it "replaces package.json with the template file" do
61
+ it "ensures the 'packageManager' field is set" do
62
62
  package_json = PackageJson.read(path_in_the_app)
63
63
 
64
- expect(package_json.fetch("name", "")).to eq("app")
64
+ manager_name = fallback_manager.split("_")[0]
65
+
66
+ expect(package_json.fetch("packageManager", "")).to match(/#{manager_name}@\d+\.\d+\.\d+/)
65
67
  end
66
68
 
67
69
  it "creates webpack config directory and its files" do
@@ -161,132 +163,6 @@ describe "Generator" do
161
163
  end
162
164
  end
163
165
  end
164
-
165
- context "when not using package_json" do
166
- before :all do
167
- sh_opts = { fallback_manager: nil }
168
-
169
- sh_in_dir(sh_opts, SPEC_PATH, "cp -r '#{BASE_RAILS_APP_PATH}' '#{TEMP_RAILS_APP_PATH}'")
170
-
171
- Bundler.with_unbundled_env do
172
- sh_in_dir(sh_opts, TEMP_RAILS_APP_PATH, "FORCE=true bundle exec rails shakapacker:install")
173
- end
174
- end
175
-
176
- after :all do
177
- Dir.chdir(SPEC_PATH)
178
- FileUtils.rm_rf(TEMP_RAILS_APP_PATH)
179
- end
180
-
181
- it "creates `config/shakapacker.yml`" do
182
- config_file_relative_path = "config/shakapacker.yml"
183
- actual_content = read(path_in_the_app(config_file_relative_path))
184
- expected_content = read(path_in_the_gem(config_file_relative_path))
185
-
186
- expect(actual_content).to eq expected_content
187
- end
188
-
189
- it "replaces package.json with template file" do
190
- package_json = PackageJson.read(path_in_the_app)
191
-
192
- expect(package_json.fetch("name", "")).to eq("app")
193
- end
194
-
195
- it "creates the webpack config directory and its files" do
196
- expected_files = [
197
- "webpack.config.js"
198
- ]
199
-
200
- Dir.chdir(path_in_the_app("config/webpack")) do
201
- existing_files_in_config_webpack_dir = Dir.glob("*")
202
- expect(existing_files_in_config_webpack_dir).to eq expected_files
203
- end
204
- end
205
-
206
- it "adds binstubs" do
207
- expected_binstubs = []
208
- Dir.chdir(File.join(GEM_ROOT, "lib/install/bin")) do
209
- expected_binstubs = Dir.glob("bin/*")
210
- end
211
-
212
- Dir.chdir(File.join(TEMP_RAILS_APP_PATH, "bin")) do
213
- actual_binstubs = Dir.glob("*")
214
-
215
- expect(actual_binstubs).to include(*expected_binstubs)
216
- end
217
- end
218
-
219
- it "modifies .gitignore" do
220
- actual_content = read(path_in_the_app(".gitignore"))
221
-
222
- expect(actual_content).to match ".yarn-integrity"
223
- end
224
-
225
- it 'adds <%= javascript_pack_tag "application" %>' do
226
- actual_content = read(path_in_the_app("app/views/layouts/application.html.erb"))
227
-
228
- expect(actual_content).to match '<%= javascript_pack_tag "application" %>'
229
- end
230
-
231
- it "updates `bin/setup`" do
232
- setup_file_content = read(path_in_the_app("bin/setup"))
233
-
234
- expect(setup_file_content).to match %r(^\s*system!\(['"]bin/yarn['"]\))
235
- end
236
-
237
- it "uses the shakapacker version in package.json depending on gem version" do
238
- npm_version = Shakapacker::Utils::VersionSyntaxConverter.new.rubygem_to_npm(Shakapacker::VERSION)
239
-
240
- package_json = PackageJson.read(path_in_the_app)
241
- actual_version = package_json.fetch("dependencies", {})["shakapacker"]
242
-
243
- expect(actual_version).to eq(npm_version)
244
- end
245
-
246
- it "adds Shakapacker peer dependencies to package.json" do
247
- package_json = PackageJson.read(path_in_the_app)
248
- actual_dependencies = package_json.fetch("dependencies", {}).keys
249
-
250
- expected_dependencies = %w(
251
- @babel/core
252
- @babel/plugin-transform-runtime
253
- @babel/preset-env
254
- @babel/runtime
255
- babel-loader
256
- compression-webpack-plugin
257
- terser-webpack-plugin
258
- webpack
259
- webpack-assets-manifest
260
- webpack-cli
261
- webpack-merge
262
- )
263
-
264
- expect(actual_dependencies).to include(*expected_dependencies)
265
- end
266
-
267
- it "adds Shakapacker peer dev dependencies to package.json" do
268
- package_json = PackageJson.read(path_in_the_app)
269
- actual_dev_dependencies = package_json.fetch("devDependencies", {}).keys
270
-
271
- expected_dev_dependencies = %w(
272
- webpack-dev-server
273
- )
274
-
275
- expect(actual_dev_dependencies).to include(*expected_dev_dependencies)
276
- end
277
-
278
- context "with a basic react app setup" do
279
- it "passes the test for rendering react component on the page" do
280
- sh_opts = { fallback_manager: nil }
281
-
282
- Bundler.with_unbundled_env do
283
- sh_in_dir(sh_opts, TEMP_RAILS_APP_PATH, "./bin/rails app:template LOCATION=../e2e_template/template.rb")
284
-
285
- expect(sh_in_dir(sh_opts, TEMP_RAILS_APP_PATH, "bundle exec rspec")).to be_truthy
286
- end
287
- end
288
- end
289
- end
290
166
  end
291
167
 
292
168
  private
@@ -306,14 +182,8 @@ describe "Generator" do
306
182
  def sort_out_package_json(opts)
307
183
  ENV["PATH"] = "#{SPEC_PATH}/fake-bin:#{ENV["PATH"]}"
308
184
 
309
- if opts[:fallback_manager].nil?
310
- ENV["SHAKAPACKER_EXPECTED_PACKAGE_MANGER"] = "yarn_classic"
311
- ENV["SHAKAPACKER_USE_PACKAGE_JSON_GEM"] = "false"
312
- else
313
- ENV["SHAKAPACKER_EXPECTED_PACKAGE_MANGER"] = opts[:fallback_manager]
314
- ENV["SHAKAPACKER_USE_PACKAGE_JSON_GEM"] = "true"
315
- ENV["PACKAGE_JSON_FALLBACK_MANAGER"] = opts[:fallback_manager]
316
- end
185
+ ENV["SHAKAPACKER_EXPECTED_PACKAGE_MANGER"] = opts[:fallback_manager]
186
+ ENV["PACKAGE_JSON_FALLBACK_MANAGER"] = opts[:fallback_manager]
317
187
  end
318
188
 
319
189
  def sh_in_dir(opts, dir, *shell_commands)
@@ -36,7 +36,6 @@ development:
36
36
 
37
37
  # Reference: https://webpack.js.org/configuration/dev-server/
38
38
  dev_server:
39
- https: false
40
39
  host: localhost
41
40
  port: 3035
42
41
  public: localhost:3035
@@ -1,4 +1,5 @@
1
1
  require_relative "spec_helper_initializer"
2
+ require "ostruct"
2
3
 
3
4
  describe "Shakapacker::Compiler" do
4
5
  it "accepts custom environment variables" do
@@ -48,12 +49,9 @@ describe "Shakapacker::Compiler" do
48
49
 
49
50
  it "accepts external env variables" do
50
51
  expect(Shakapacker.compiler.send(:webpack_env)["SHAKAPACKER_ASSET_HOST"]).to be nil
51
- expect(Shakapacker.compiler.send(:webpack_env)["SHAKAPACKER_RELATIVE_URL_ROOT"]).to be nil
52
52
 
53
53
  allow(ENV).to receive(:fetch).with("SHAKAPACKER_ASSET_HOST", nil).and_return("foo.bar")
54
- allow(ENV).to receive(:fetch).with("SHAKAPACKER_RELATIVE_URL_ROOT", nil).and_return("/baz")
55
54
 
56
55
  expect(Shakapacker.compiler.send(:webpack_env)["SHAKAPACKER_ASSET_HOST"]).to eq "foo.bar"
57
- expect(Shakapacker.compiler.send(:webpack_env)["SHAKAPACKER_RELATIVE_URL_ROOT"]).to eq "/baz"
58
56
  end
59
57
  end