shakapacker 8.0.2 → 9.2.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.
Files changed (198) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintignore +1 -0
  3. data/.eslintrc.fast.js +40 -0
  4. data/.eslintrc.js +48 -0
  5. data/.github/STATUS.md +1 -0
  6. data/.github/workflows/claude-code-review.yml +54 -0
  7. data/.github/workflows/claude.yml +50 -0
  8. data/.github/workflows/dummy.yml +9 -4
  9. data/.github/workflows/generator.yml +32 -10
  10. data/.github/workflows/node.yml +23 -1
  11. data/.github/workflows/ruby.yml +33 -2
  12. data/.github/workflows/test-bundlers.yml +170 -0
  13. data/.gitignore +20 -0
  14. data/.husky/pre-commit +2 -0
  15. data/.npmignore +56 -0
  16. data/.prettierignore +3 -0
  17. data/.rubocop.yml +1 -0
  18. data/.yalcignore +26 -0
  19. data/CHANGELOG.md +302 -16
  20. data/CLAUDE.md +29 -0
  21. data/CONTRIBUTING.md +138 -20
  22. data/Gemfile.lock +83 -89
  23. data/README.md +343 -105
  24. data/Rakefile +39 -4
  25. data/TODO.md +50 -0
  26. data/TODO_v9.md +87 -0
  27. data/bin/export-bundler-config +11 -0
  28. data/conductor-setup.sh +70 -0
  29. data/conductor.json +7 -0
  30. data/docs/cdn_setup.md +379 -0
  31. data/docs/common-upgrades.md +615 -0
  32. data/docs/css-modules-export-mode.md +512 -0
  33. data/docs/deployment.md +62 -9
  34. data/docs/optional-peer-dependencies.md +198 -0
  35. data/docs/peer-dependencies.md +60 -0
  36. data/docs/react.md +6 -14
  37. data/docs/releasing.md +197 -0
  38. data/docs/rspack.md +190 -0
  39. data/docs/rspack_migration_guide.md +305 -0
  40. data/docs/subresource_integrity.md +54 -0
  41. data/docs/transpiler-migration.md +209 -0
  42. data/docs/transpiler-performance.md +179 -0
  43. data/docs/troubleshooting.md +157 -22
  44. data/docs/typescript-migration.md +379 -0
  45. data/docs/typescript.md +99 -0
  46. data/docs/using_esbuild_loader.md +3 -3
  47. data/docs/using_swc_loader.md +112 -10
  48. data/docs/v6_upgrade.md +10 -0
  49. data/docs/v8_upgrade.md +3 -5
  50. data/docs/v9_upgrade.md +458 -0
  51. data/gemfiles/Gemfile-rails.6.0.x +2 -1
  52. data/gemfiles/Gemfile-rails.6.1.x +1 -1
  53. data/gemfiles/Gemfile-rails.7.0.x +2 -2
  54. data/gemfiles/Gemfile-rails.7.1.x +1 -2
  55. data/gemfiles/Gemfile-rails.7.2.x +11 -0
  56. data/gemfiles/Gemfile-rails.8.0.x +11 -0
  57. data/lib/install/bin/export-bundler-config +11 -0
  58. data/lib/install/bin/shakapacker +4 -6
  59. data/lib/install/bin/shakapacker-dev-server +1 -1
  60. data/lib/install/config/rspack/rspack.config.js +6 -0
  61. data/lib/install/config/rspack/rspack.config.ts +7 -0
  62. data/lib/install/config/shakapacker.yml +25 -5
  63. data/lib/install/config/webpack/webpack.config.ts +7 -0
  64. data/lib/install/package.json +38 -0
  65. data/lib/install/template.rb +194 -44
  66. data/lib/shakapacker/bundler_switcher.rb +329 -0
  67. data/lib/shakapacker/compiler.rb +2 -1
  68. data/lib/shakapacker/compiler_strategy.rb +2 -2
  69. data/lib/shakapacker/configuration.rb +173 -2
  70. data/lib/shakapacker/dev_server_runner.rb +29 -8
  71. data/lib/shakapacker/digest_strategy.rb +2 -1
  72. data/lib/shakapacker/doctor.rb +905 -0
  73. data/lib/shakapacker/helper.rb +64 -16
  74. data/lib/shakapacker/manifest.rb +10 -3
  75. data/lib/shakapacker/mtime_strategy.rb +1 -1
  76. data/lib/shakapacker/railtie.rb +4 -4
  77. data/lib/shakapacker/rspack_runner.rb +19 -0
  78. data/lib/shakapacker/runner.rb +159 -10
  79. data/lib/shakapacker/swc_migrator.rb +384 -0
  80. data/lib/shakapacker/utils/manager.rb +15 -2
  81. data/lib/shakapacker/version.rb +1 -1
  82. data/lib/shakapacker/version_checker.rb +2 -2
  83. data/lib/shakapacker/webpack_runner.rb +6 -43
  84. data/lib/shakapacker.rb +22 -11
  85. data/lib/tasks/shakapacker/doctor.rake +8 -0
  86. data/lib/tasks/shakapacker/export_bundler_config.rake +72 -0
  87. data/lib/tasks/shakapacker/install.rake +12 -2
  88. data/lib/tasks/shakapacker/migrate_to_swc.rake +13 -0
  89. data/lib/tasks/shakapacker/switch_bundler.rake +82 -0
  90. data/lib/tasks/shakapacker.rake +2 -0
  91. data/package/.npmignore +4 -0
  92. data/package/babel/preset.ts +56 -0
  93. data/package/config.ts +175 -0
  94. data/package/configExporter/cli.ts +683 -0
  95. data/package/configExporter/configDocs.ts +102 -0
  96. data/package/configExporter/fileWriter.ts +92 -0
  97. data/package/configExporter/index.ts +5 -0
  98. data/package/configExporter/types.ts +36 -0
  99. data/package/configExporter/yamlSerializer.ts +266 -0
  100. data/package/{dev_server.js → dev_server.ts} +8 -5
  101. data/package/env.ts +92 -0
  102. data/package/environments/__type-tests__/rspack-plugin-compatibility.ts +30 -0
  103. data/package/environments/{base.js → base.ts} +56 -60
  104. data/package/environments/development.ts +90 -0
  105. data/package/environments/production.ts +80 -0
  106. data/package/environments/test.ts +53 -0
  107. data/package/environments/types.ts +98 -0
  108. data/package/esbuild/index.ts +42 -0
  109. data/package/index.d.ts +3 -60
  110. data/package/index.ts +55 -0
  111. data/package/loaders.d.ts +28 -0
  112. data/package/optimization/rspack.ts +36 -0
  113. data/package/optimization/webpack.ts +57 -0
  114. data/package/plugins/rspack.ts +103 -0
  115. data/package/plugins/webpack.ts +62 -0
  116. data/package/rspack/index.ts +64 -0
  117. data/package/rules/{babel.js → babel.ts} +2 -2
  118. data/package/rules/{coffee.js → coffee.ts} +1 -1
  119. data/package/rules/css.ts +3 -0
  120. data/package/rules/{erb.js → erb.ts} +1 -1
  121. data/package/rules/esbuild.ts +10 -0
  122. data/package/rules/file.ts +40 -0
  123. data/package/rules/{jscommon.js → jscommon.ts} +4 -4
  124. data/package/rules/{less.js → less.ts} +4 -4
  125. data/package/rules/raw.ts +25 -0
  126. data/package/rules/rspack.ts +176 -0
  127. data/package/rules/{sass.js → sass.ts} +7 -3
  128. data/package/rules/{stylus.js → stylus.ts} +4 -8
  129. data/package/rules/swc.ts +10 -0
  130. data/package/rules/webpack.ts +16 -0
  131. data/package/swc/index.ts +56 -0
  132. data/package/types/README.md +88 -0
  133. data/package/types/index.ts +61 -0
  134. data/package/types.ts +108 -0
  135. data/package/utils/configPath.ts +6 -0
  136. data/package/utils/debug.ts +49 -0
  137. data/package/utils/defaultConfigPath.ts +4 -0
  138. data/package/utils/errorCodes.ts +219 -0
  139. data/package/utils/errorHelpers.ts +143 -0
  140. data/package/utils/getStyleRule.ts +64 -0
  141. data/package/utils/helpers.ts +85 -0
  142. data/package/utils/{inliningCss.js → inliningCss.ts} +3 -3
  143. data/package/utils/pathValidation.ts +139 -0
  144. data/package/utils/requireOrError.ts +15 -0
  145. data/package/utils/snakeToCamelCase.ts +5 -0
  146. data/package/utils/typeGuards.ts +342 -0
  147. data/package/utils/validateDependencies.ts +61 -0
  148. data/package/webpack-types.d.ts +33 -0
  149. data/package/webpackDevServerConfig.ts +117 -0
  150. data/package-lock.json +13047 -0
  151. data/package.json +154 -18
  152. data/scripts/remove-use-strict.js +45 -0
  153. data/scripts/type-check-no-emit.js +27 -0
  154. data/test/helpers.js +1 -1
  155. data/test/package/config.test.js +43 -0
  156. data/test/package/env.test.js +42 -7
  157. data/test/package/environments/base.test.js +5 -1
  158. data/test/package/rules/babel.test.js +16 -0
  159. data/test/package/rules/esbuild.test.js +1 -1
  160. data/test/package/rules/raw.test.js +40 -7
  161. data/test/package/rules/swc.test.js +1 -1
  162. data/test/package/rules/webpack.test.js +35 -0
  163. data/test/package/staging.test.js +4 -3
  164. data/test/package/transpiler-defaults.test.js +127 -0
  165. data/test/peer-dependencies.sh +85 -0
  166. data/test/scripts/remove-use-strict.test.js +125 -0
  167. data/test/typescript/build.test.js +118 -0
  168. data/test/typescript/environments.test.js +107 -0
  169. data/test/typescript/pathValidation.test.js +142 -0
  170. data/test/typescript/securityValidation.test.js +182 -0
  171. data/tools/README.md +124 -0
  172. data/tools/css-modules-v9-codemod.js +179 -0
  173. data/tsconfig.eslint.json +16 -0
  174. data/tsconfig.json +38 -0
  175. data/yarn.lock +4165 -2706
  176. metadata +129 -41
  177. data/package/babel/preset.js +0 -37
  178. data/package/config.js +0 -54
  179. data/package/env.js +0 -48
  180. data/package/environments/development.js +0 -13
  181. data/package/environments/production.js +0 -88
  182. data/package/environments/test.js +0 -3
  183. data/package/esbuild/index.js +0 -40
  184. data/package/index.js +0 -40
  185. data/package/rules/css.js +0 -3
  186. data/package/rules/esbuild.js +0 -10
  187. data/package/rules/file.js +0 -29
  188. data/package/rules/index.js +0 -20
  189. data/package/rules/raw.js +0 -5
  190. data/package/rules/swc.js +0 -10
  191. data/package/swc/index.js +0 -50
  192. data/package/utils/configPath.js +0 -4
  193. data/package/utils/defaultConfigPath.js +0 -2
  194. data/package/utils/getStyleRule.js +0 -40
  195. data/package/utils/helpers.js +0 -58
  196. data/package/utils/snakeToCamelCase.js +0 -5
  197. data/package/webpackDevServerConfig.js +0 -71
  198. data/test/package/rules/index.test.js +0 -16
metadata CHANGED
@@ -1,16 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shakapacker
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.2
4
+ version: 9.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
8
  - Gaurav Tiwari
9
9
  - Justin Gordon
10
- autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2024-08-29 00:00:00.000000000 Z
12
+ date: 1980-01-02 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: activesupport
@@ -124,7 +123,6 @@ dependencies:
124
123
  - - ">="
125
124
  - !ruby/object:Gem::Version
126
125
  version: '0'
127
- description:
128
126
  email:
129
127
  - david@basecamp.com
130
128
  - gaurav@gauravtiwari.co.uk
@@ -134,20 +132,30 @@ extensions: []
134
132
  extra_rdoc_files: []
135
133
  files:
136
134
  - ".eslintignore"
135
+ - ".eslintrc.fast.js"
137
136
  - ".eslintrc.js"
138
137
  - ".github/FUNDING.yml"
139
138
  - ".github/ISSUE_TEMPLATE/bug_report.md"
140
139
  - ".github/ISSUE_TEMPLATE/feature_request.md"
141
140
  - ".github/PULL_REQUEST_TEMPLATE.md"
141
+ - ".github/STATUS.md"
142
+ - ".github/workflows/claude-code-review.yml"
143
+ - ".github/workflows/claude.yml"
142
144
  - ".github/workflows/dummy.yml"
143
145
  - ".github/workflows/generator.yml"
144
146
  - ".github/workflows/node.yml"
145
147
  - ".github/workflows/ruby.yml"
148
+ - ".github/workflows/test-bundlers.yml"
146
149
  - ".gitignore"
150
+ - ".husky/pre-commit"
147
151
  - ".node-version"
152
+ - ".npmignore"
153
+ - ".prettierignore"
148
154
  - ".rspec"
149
155
  - ".rubocop.yml"
156
+ - ".yalcignore"
150
157
  - CHANGELOG.md
158
+ - CLAUDE.md
151
159
  - CONTRIBUTING.md
152
160
  - Gemfile
153
161
  - Gemfile.development_dependencies
@@ -155,37 +163,64 @@ files:
155
163
  - MIT-LICENSE
156
164
  - README.md
157
165
  - Rakefile
166
+ - TODO.md
167
+ - TODO_v9.md
158
168
  - __mocks__/nonexistent/package.json
159
169
  - __mocks__/sass-loader/package.json
170
+ - bin/export-bundler-config
171
+ - conductor-setup.sh
172
+ - conductor.json
160
173
  - config/README.md
161
174
  - config/shakapacker.yml
175
+ - docs/cdn_setup.md
176
+ - docs/common-upgrades.md
177
+ - docs/css-modules-export-mode.md
162
178
  - docs/customizing_babel_config.md
163
179
  - docs/deployment.md
164
180
  - docs/developing_shakapacker.md
181
+ - docs/optional-peer-dependencies.md
182
+ - docs/peer-dependencies.md
165
183
  - docs/react.md
184
+ - docs/releasing.md
185
+ - docs/rspack.md
186
+ - docs/rspack_migration_guide.md
166
187
  - docs/sprockets.md
167
188
  - docs/style_loader_vs_mini_css.md
189
+ - docs/subresource_integrity.md
190
+ - docs/transpiler-migration.md
191
+ - docs/transpiler-performance.md
168
192
  - docs/troubleshooting.md
193
+ - docs/typescript-migration.md
194
+ - docs/typescript.md
169
195
  - docs/using_esbuild_loader.md
170
196
  - docs/using_swc_loader.md
171
197
  - docs/v6_upgrade.md
172
198
  - docs/v7_upgrade.md
173
199
  - docs/v8_upgrade.md
200
+ - docs/v9_upgrade.md
174
201
  - gemfiles/Gemfile-rails-edge
175
202
  - gemfiles/Gemfile-rails.6.0.x
176
203
  - gemfiles/Gemfile-rails.6.1.x
177
204
  - gemfiles/Gemfile-rails.7.0.x
178
205
  - gemfiles/Gemfile-rails.7.1.x
206
+ - gemfiles/Gemfile-rails.7.2.x
207
+ - gemfiles/Gemfile-rails.8.0.x
179
208
  - jest.config.js
180
209
  - lib/install/application.js
210
+ - lib/install/bin/export-bundler-config
181
211
  - lib/install/bin/shakapacker
182
212
  - lib/install/bin/shakapacker-dev-server
183
213
  - lib/install/binstubs.rb
214
+ - lib/install/config/rspack/rspack.config.js
215
+ - lib/install/config/rspack/rspack.config.ts
184
216
  - lib/install/config/shakapacker.yml
185
217
  - lib/install/config/webpack/webpack.config.js
218
+ - lib/install/config/webpack/webpack.config.ts
219
+ - lib/install/package.json
186
220
  - lib/install/template.rb
187
221
  - lib/shakapacker.rb
188
222
  - lib/shakapacker/base_strategy.rb
223
+ - lib/shakapacker/bundler_switcher.rb
189
224
  - lib/shakapacker/commands.rb
190
225
  - lib/shakapacker/compiler.rb
191
226
  - lib/shakapacker/compiler_strategy.rb
@@ -195,13 +230,16 @@ files:
195
230
  - lib/shakapacker/dev_server_proxy.rb
196
231
  - lib/shakapacker/dev_server_runner.rb
197
232
  - lib/shakapacker/digest_strategy.rb
233
+ - lib/shakapacker/doctor.rb
198
234
  - lib/shakapacker/env.rb
199
235
  - lib/shakapacker/helper.rb
200
236
  - lib/shakapacker/instance.rb
201
237
  - lib/shakapacker/manifest.rb
202
238
  - lib/shakapacker/mtime_strategy.rb
203
239
  - lib/shakapacker/railtie.rb
240
+ - lib/shakapacker/rspack_runner.rb
204
241
  - lib/shakapacker/runner.rb
242
+ - lib/shakapacker/swc_migrator.rb
205
243
  - lib/shakapacker/utils/manager.rb
206
244
  - lib/shakapacker/utils/misc.rb
207
245
  - lib/shakapacker/utils/version_syntax_converter.rb
@@ -216,44 +254,78 @@ files:
216
254
  - lib/tasks/shakapacker/clean.rake
217
255
  - lib/tasks/shakapacker/clobber.rake
218
256
  - lib/tasks/shakapacker/compile.rake
257
+ - lib/tasks/shakapacker/doctor.rake
258
+ - lib/tasks/shakapacker/export_bundler_config.rake
219
259
  - lib/tasks/shakapacker/info.rake
220
260
  - lib/tasks/shakapacker/install.rake
261
+ - lib/tasks/shakapacker/migrate_to_swc.rake
262
+ - lib/tasks/shakapacker/switch_bundler.rake
221
263
  - lib/tasks/shakapacker/verify_config.rake
222
264
  - lib/tasks/shakapacker/verify_install.rake
265
+ - package-lock.json
223
266
  - package.json
224
- - package/babel/preset.js
225
- - package/config.js
226
- - package/dev_server.js
227
- - package/env.js
228
- - package/environments/base.js
229
- - package/environments/development.js
230
- - package/environments/production.js
231
- - package/environments/test.js
232
- - package/esbuild/index.js
267
+ - package/.npmignore
268
+ - package/babel/preset.ts
269
+ - package/config.ts
270
+ - package/configExporter/cli.ts
271
+ - package/configExporter/configDocs.ts
272
+ - package/configExporter/fileWriter.ts
273
+ - package/configExporter/index.ts
274
+ - package/configExporter/types.ts
275
+ - package/configExporter/yamlSerializer.ts
276
+ - package/dev_server.ts
277
+ - package/env.ts
278
+ - package/environments/__type-tests__/rspack-plugin-compatibility.ts
279
+ - package/environments/base.ts
280
+ - package/environments/development.ts
281
+ - package/environments/production.ts
282
+ - package/environments/test.ts
283
+ - package/environments/types.ts
284
+ - package/esbuild/index.ts
233
285
  - package/index.d.ts
234
- - package/index.js
235
- - package/rules/babel.js
236
- - package/rules/coffee.js
237
- - package/rules/css.js
238
- - package/rules/erb.js
239
- - package/rules/esbuild.js
240
- - package/rules/file.js
241
- - package/rules/index.js
242
- - package/rules/jscommon.js
243
- - package/rules/less.js
244
- - package/rules/raw.js
245
- - package/rules/sass.js
246
- - package/rules/stylus.js
247
- - package/rules/swc.js
248
- - package/swc/index.js
249
- - package/utils/configPath.js
250
- - package/utils/defaultConfigPath.js
251
- - package/utils/getStyleRule.js
252
- - package/utils/helpers.js
253
- - package/utils/inliningCss.js
254
- - package/utils/snakeToCamelCase.js
255
- - package/webpackDevServerConfig.js
286
+ - package/index.ts
287
+ - package/loaders.d.ts
288
+ - package/optimization/rspack.ts
289
+ - package/optimization/webpack.ts
290
+ - package/plugins/rspack.ts
291
+ - package/plugins/webpack.ts
292
+ - package/rspack/index.ts
293
+ - package/rules/babel.ts
294
+ - package/rules/coffee.ts
295
+ - package/rules/css.ts
296
+ - package/rules/erb.ts
297
+ - package/rules/esbuild.ts
298
+ - package/rules/file.ts
299
+ - package/rules/jscommon.ts
300
+ - package/rules/less.ts
301
+ - package/rules/raw.ts
302
+ - package/rules/rspack.ts
303
+ - package/rules/sass.ts
304
+ - package/rules/stylus.ts
305
+ - package/rules/swc.ts
306
+ - package/rules/webpack.ts
307
+ - package/swc/index.ts
308
+ - package/types.ts
309
+ - package/types/README.md
310
+ - package/types/index.ts
311
+ - package/utils/configPath.ts
312
+ - package/utils/debug.ts
313
+ - package/utils/defaultConfigPath.ts
314
+ - package/utils/errorCodes.ts
315
+ - package/utils/errorHelpers.ts
316
+ - package/utils/getStyleRule.ts
317
+ - package/utils/helpers.ts
318
+ - package/utils/inliningCss.ts
319
+ - package/utils/pathValidation.ts
320
+ - package/utils/requireOrError.ts
321
+ - package/utils/snakeToCamelCase.ts
322
+ - package/utils/typeGuards.ts
323
+ - package/utils/validateDependencies.ts
324
+ - package/webpack-types.d.ts
325
+ - package/webpackDevServerConfig.ts
256
326
  - prettier.config.js
327
+ - scripts/remove-use-strict.js
328
+ - scripts/type-check-no-emit.js
257
329
  - shakapacker.gemspec
258
330
  - test/helpers.js
259
331
  - test/package/config.test.js
@@ -269,21 +341,31 @@ files:
269
341
  - test/package/rules/babel.test.js
270
342
  - test/package/rules/esbuild.test.js
271
343
  - test/package/rules/file.test.js
272
- - test/package/rules/index.test.js
273
344
  - test/package/rules/raw.test.js
274
345
  - test/package/rules/sass.test.js
275
346
  - test/package/rules/sass1.test.js
276
347
  - test/package/rules/swc.test.js
348
+ - test/package/rules/webpack.test.js
277
349
  - test/package/staging.test.js
278
350
  - test/package/test.test.js
351
+ - test/package/transpiler-defaults.test.js
352
+ - test/peer-dependencies.sh
279
353
  - test/resolver.js
354
+ - test/scripts/remove-use-strict.test.js
355
+ - test/typescript/build.test.js
356
+ - test/typescript/environments.test.js
357
+ - test/typescript/pathValidation.test.js
358
+ - test/typescript/securityValidation.test.js
359
+ - tools/README.md
360
+ - tools/css-modules-v9-codemod.js
361
+ - tsconfig.eslint.json
362
+ - tsconfig.json
280
363
  - yarn.lock
281
364
  homepage: https://github.com/shakacode/shakapacker
282
365
  licenses:
283
366
  - MIT
284
367
  metadata:
285
- source_code_uri: https://github.com/shakacode/shakapacker/tree/v8.0.2
286
- post_install_message:
368
+ source_code_uri: https://github.com/shakacode/shakapacker/tree/v9.2.0
287
369
  rdoc_options: []
288
370
  require_paths:
289
371
  - lib
@@ -298,8 +380,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
298
380
  - !ruby/object:Gem::Version
299
381
  version: '0'
300
382
  requirements: []
301
- rubygems_version: 3.5.3
302
- signing_key:
383
+ rubygems_version: 3.6.7
303
384
  specification_version: 4
304
385
  summary: Use webpack to manage app-like JavaScript modules in Rails
305
386
  test_files:
@@ -317,11 +398,18 @@ test_files:
317
398
  - test/package/rules/babel.test.js
318
399
  - test/package/rules/esbuild.test.js
319
400
  - test/package/rules/file.test.js
320
- - test/package/rules/index.test.js
321
401
  - test/package/rules/raw.test.js
322
402
  - test/package/rules/sass.test.js
323
403
  - test/package/rules/sass1.test.js
324
404
  - test/package/rules/swc.test.js
405
+ - test/package/rules/webpack.test.js
325
406
  - test/package/staging.test.js
326
407
  - test/package/test.test.js
408
+ - test/package/transpiler-defaults.test.js
409
+ - test/peer-dependencies.sh
327
410
  - test/resolver.js
411
+ - test/scripts/remove-use-strict.test.js
412
+ - test/typescript/build.test.js
413
+ - test/typescript/environments.test.js
414
+ - test/typescript/pathValidation.test.js
415
+ - test/typescript/securityValidation.test.js
@@ -1,37 +0,0 @@
1
- const { moduleExists } = require("shakapacker")
2
-
3
- module.exports = function config(api) {
4
- const validEnv = ["development", "test", "production"]
5
- const currentEnv = api.env()
6
- const isDevelopmentEnv = api.env("development")
7
- const isProductionEnv = api.env("production")
8
- const isTestEnv = api.env("test")
9
-
10
- if (!validEnv.includes(currentEnv)) {
11
- throw new Error(
12
- `Please specify a valid NODE_ENV or BABEL_ENV environment variable. Valid values are "development", "test", and "production". Instead, received: "${JSON.stringify(
13
- currentEnv
14
- )}".`
15
- )
16
- }
17
-
18
- return {
19
- presets: [
20
- isTestEnv && ["@babel/preset-env", { targets: { node: "current" } }],
21
- (isProductionEnv || isDevelopmentEnv) && [
22
- "@babel/preset-env",
23
- {
24
- useBuiltIns: "entry",
25
- corejs: "3.8",
26
- modules: "auto",
27
- bugfixes: true,
28
- exclude: ["transform-typeof-symbol"]
29
- }
30
- ],
31
- moduleExists("@babel/preset-typescript") && "@babel/preset-typescript"
32
- ].filter(Boolean),
33
- plugins: [["@babel/plugin-transform-runtime", { helpers: false }]].filter(
34
- Boolean
35
- )
36
- }
37
- }
data/package/config.js DELETED
@@ -1,54 +0,0 @@
1
- const { resolve } = require("path")
2
- const { load } = require("js-yaml")
3
- const { existsSync, readFileSync } = require("fs")
4
-
5
- const { merge } = require("webpack-merge")
6
- const { ensureTrailingSlash } = require("./utils/helpers")
7
- const { railsEnv } = require("./env")
8
- const configPath = require("./utils/configPath")
9
-
10
- const defaultConfigPath = require("./utils/defaultConfigPath")
11
-
12
- const getDefaultConfig = () => {
13
- const defaultConfig = load(readFileSync(defaultConfigPath), "utf8")
14
- return defaultConfig[railsEnv] || defaultConfig.production
15
- }
16
-
17
- const defaults = getDefaultConfig()
18
- let config
19
-
20
- if (existsSync(configPath)) {
21
- const appYmlObject = load(readFileSync(configPath), "utf8")
22
- const envAppConfig = appYmlObject[railsEnv]
23
-
24
- if (!envAppConfig) {
25
- /* eslint no-console:0 */
26
- console.warn(
27
- `Warning: ${railsEnv} key not found in the configuration file. Using production configuration as a fallback.`
28
- )
29
- }
30
-
31
- config = merge(defaults, envAppConfig || {})
32
- } else {
33
- config = merge(defaults, {})
34
- }
35
-
36
- config.outputPath = resolve(config.public_root_path, config.public_output_path)
37
-
38
- // Ensure that the publicPath includes our asset host so dynamic imports
39
- // (code-splitting chunks and static assets) load from the CDN instead of a relative path.
40
- const getPublicPath = () => {
41
- const rootUrl = ensureTrailingSlash(process.env.SHAKAPACKER_ASSET_HOST || "/")
42
- return `${rootUrl}${config.public_output_path}/`
43
- }
44
-
45
- config.publicPath = getPublicPath()
46
- config.publicPathWithoutCDN = `/${config.public_output_path}/`
47
-
48
- if (config.manifest_path) {
49
- config.manifestPath = resolve(config.manifest_path)
50
- } else {
51
- config.manifestPath = resolve(config.outputPath, "manifest.json")
52
- }
53
-
54
- module.exports = config
data/package/env.js DELETED
@@ -1,48 +0,0 @@
1
- const { load } = require("js-yaml")
2
- const { readFileSync } = require("fs")
3
- const defaultConfigPath = require("./utils/defaultConfigPath")
4
-
5
- const NODE_ENVIRONMENTS = ["development", "production", "test"]
6
- const DEFAULT = "production"
7
- const configPath = require("./utils/configPath")
8
-
9
- const railsEnv = process.env.RAILS_ENV
10
- const rawNodeEnv = process.env.NODE_ENV
11
- const nodeEnv =
12
- rawNodeEnv && NODE_ENVIRONMENTS.includes(rawNodeEnv) ? rawNodeEnv : DEFAULT
13
- const isProduction = nodeEnv === "production"
14
- const isDevelopment = nodeEnv === "development"
15
-
16
- let config
17
- try {
18
- config = load(readFileSync(configPath), "utf8")
19
- } catch (error) {
20
- if (error.code === "ENOENT") {
21
- // File not found, use default configuration
22
- config = load(readFileSync(defaultConfigPath), "utf8")
23
- } else {
24
- throw error
25
- }
26
- }
27
-
28
- const availableEnvironments = Object.keys(config).join("|")
29
- const regex = new RegExp(`^(${availableEnvironments})$`, "g")
30
-
31
- const runningWebpackDevServer = process.env.WEBPACK_SERVE === "true"
32
-
33
- const validatedRailsEnv = railsEnv && railsEnv.match(regex) ? railsEnv : DEFAULT
34
-
35
- if (railsEnv && validatedRailsEnv !== railsEnv) {
36
- /* eslint no-console:0 */
37
- console.warn(
38
- `Warning: '${railsEnv}' environment not found in the configuration. Using '${DEFAULT}' configuration as a fallback.`
39
- )
40
- }
41
-
42
- module.exports = {
43
- railsEnv: validatedRailsEnv,
44
- nodeEnv,
45
- isProduction,
46
- isDevelopment,
47
- runningWebpackDevServer
48
- }
@@ -1,13 +0,0 @@
1
- const { merge } = require("webpack-merge")
2
-
3
- const baseConfig = require("./base")
4
- const webpackDevServerConfig = require("../webpackDevServerConfig")
5
- const { runningWebpackDevServer } = require("../env")
6
-
7
- const devConfig = {
8
- mode: "development",
9
- devtool: "cheap-module-source-map",
10
- ...(runningWebpackDevServer && { devServer: webpackDevServerConfig() })
11
- }
12
-
13
- module.exports = merge(baseConfig, devConfig)
@@ -1,88 +0,0 @@
1
- /* eslint global-require: 0 */
2
- /* eslint import/no-dynamic-require: 0 */
3
-
4
- const { merge } = require("webpack-merge")
5
- const CompressionPlugin = require("compression-webpack-plugin")
6
- const TerserPlugin = require("terser-webpack-plugin")
7
- const baseConfig = require("./base")
8
- const { moduleExists } = require("../utils/helpers")
9
- const config = require("../config")
10
-
11
- const getPlugins = () => {
12
- const plugins = []
13
-
14
- plugins.push(
15
- new CompressionPlugin({
16
- filename: "[path][base].gz[query]",
17
- algorithm: "gzip",
18
- test: /\.(js|css|html|json|ico|svg|eot|otf|ttf|map)$/
19
- })
20
- )
21
-
22
- if ("brotli" in process.versions) {
23
- plugins.push(
24
- new CompressionPlugin({
25
- filename: "[path][base].br[query]",
26
- algorithm: "brotliCompress",
27
- test: /\.(js|css|html|json|ico|svg|eot|otf|ttf|map)$/
28
- })
29
- )
30
- }
31
-
32
- return plugins
33
- }
34
-
35
- const tryCssMinimizer = () => {
36
- if (
37
- moduleExists("css-loader") &&
38
- moduleExists("css-minimizer-webpack-plugin")
39
- ) {
40
- const CssMinimizerPlugin = require("css-minimizer-webpack-plugin")
41
- return new CssMinimizerPlugin()
42
- }
43
-
44
- return null
45
- }
46
-
47
- const productionConfig = {
48
- devtool: "source-map",
49
- stats: "normal",
50
- bail: true,
51
- plugins: getPlugins(),
52
- optimization: {
53
- minimizer: [
54
- tryCssMinimizer(),
55
- new TerserPlugin({
56
- parallel: Number.parseInt(process.env.SHAKAPACKER_PARALLEL, 10) || true,
57
- terserOptions: {
58
- parse: {
59
- // Let terser parse ecma 8 code but always output
60
- // ES5 compliant code for older browsers
61
- ecma: 8
62
- },
63
- compress: {
64
- ecma: 5,
65
- warnings: false,
66
- comparisons: false
67
- },
68
- mangle: { safari10: true },
69
- output: {
70
- ecma: 5,
71
- comments: false,
72
- ascii_only: true
73
- }
74
- }
75
- })
76
- ].filter(Boolean)
77
- }
78
- }
79
-
80
- if (config.useContentHash === false) {
81
- // eslint-disable-next-line no-console
82
- console.warn(`⚠️ WARNING
83
- Setting 'useContentHash' to 'false' in the production environment (specified by NODE_ENV environment variable) is not allowed!
84
- Content hashes get added to the filenames regardless of setting useContentHash in 'shakapacker.yml' to false.
85
- `)
86
- }
87
-
88
- module.exports = merge(baseConfig, productionConfig)
@@ -1,3 +0,0 @@
1
- const baseConfig = require("./base")
2
-
3
- module.exports = baseConfig
@@ -1,40 +0,0 @@
1
- /* eslint global-require: 0 */
2
- /* eslint import/no-dynamic-require: 0 */
3
-
4
- const { resolve } = require("path")
5
- const { existsSync } = require("fs")
6
- const { merge } = require("webpack-merge")
7
-
8
- const getLoaderExtension = (filename) => {
9
- const matchData = filename.match(/\.([jt]sx?)?(\.erb)?$/)
10
-
11
- if (!matchData) {
12
- return "js"
13
- }
14
-
15
- return matchData[1]
16
- }
17
-
18
- const getCustomConfig = () => {
19
- const path = resolve("config", "esbuild.config.js")
20
- if (existsSync(path)) {
21
- return require(path)
22
- }
23
- return {}
24
- }
25
-
26
- const getEsbuildLoaderConfig = (filenameToProcess) => {
27
- const customConfig = getCustomConfig()
28
- const defaultConfig = {
29
- loader: require.resolve("esbuild-loader"),
30
- options: {
31
- loader: getLoaderExtension(filenameToProcess)
32
- }
33
- }
34
-
35
- return merge(defaultConfig, customConfig)
36
- }
37
-
38
- module.exports = {
39
- getEsbuildLoaderConfig
40
- }
data/package/index.js DELETED
@@ -1,40 +0,0 @@
1
- /* eslint global-require: 0 */
2
- /* eslint import/no-dynamic-require: 0 */
3
-
4
- const webpackMerge = require("webpack-merge")
5
- const { resolve } = require("path")
6
- const { existsSync } = require("fs")
7
- const baseConfig = require("./environments/base")
8
- const rules = require("./rules")
9
- const config = require("./config")
10
- const devServer = require("./dev_server")
11
- const env = require("./env")
12
- const { moduleExists, canProcess } = require("./utils/helpers")
13
- const inliningCss = require("./utils/inliningCss")
14
-
15
- const generateWebpackConfig = (extraConfig = {}, ...extraArgs) => {
16
- if (extraArgs.length > 0) {
17
- throw new Error(
18
- "Only one extra config may be passed here - use webpack-merge to merge configs before passing them to Shakapacker"
19
- )
20
- }
21
-
22
- const { nodeEnv } = env
23
- const path = resolve(__dirname, "environments", `${nodeEnv}.js`)
24
- const environmentConfig = existsSync(path) ? require(path) : baseConfig
25
-
26
- return webpackMerge.merge({}, environmentConfig, extraConfig)
27
- }
28
-
29
- module.exports = {
30
- config, // shakapacker.yml
31
- devServer,
32
- generateWebpackConfig,
33
- baseConfig,
34
- env,
35
- rules,
36
- moduleExists,
37
- canProcess,
38
- inliningCss,
39
- ...webpackMerge
40
- }
data/package/rules/css.js DELETED
@@ -1,3 +0,0 @@
1
- const getStyleRule = require("../utils/getStyleRule")
2
-
3
- module.exports = getStyleRule(/\.(css)$/i)
@@ -1,10 +0,0 @@
1
- const { loaderMatches } = require("../utils/helpers")
2
- const { getEsbuildLoaderConfig } = require("../esbuild")
3
- const { webpack_loader: webpackLoader } = require("../config")
4
- const jscommon = require("./jscommon")
5
-
6
- module.exports = loaderMatches(webpackLoader, "esbuild", () => ({
7
- test: /\.(ts|tsx|js|jsx|mjs|coffee)?(\.erb)?$/,
8
- ...jscommon,
9
- use: ({ resource }) => getEsbuildLoaderConfig(resource)
10
- }))