shakapacker 6.0.1 → 6.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/docs/v6_upgrade.md CHANGED
@@ -1,25 +1,45 @@
1
- # Upgrading from Webpacker 5 to 6
1
+ # Upgrading from Webpacker v5 to Shakapacker v6
2
2
 
3
- There are several substantial changes in Webpacker 6 that you need to manually account for when coming from Webpacker 5. This guide will help you through it.
3
+ There are several substantial changes in Shakapacker v6 that you need to manually account for when coming from Webpacker 5. This guide will help you through it.
4
4
 
5
- ## Webpacker has become a slimmer wrapper around Webpack
5
+ ## Webpacker/Shakapacker has become a slimmer wrapper around Webpack
6
6
 
7
7
  By default, Webpacker 6 is focused on compiling and bundling JavaScript. This pairs with the existing asset pipeline in Rails that's setup to transpile CSS and static images using [Sprockets](https://github.com/rails/sprockets). For most developers, that's the recommended combination. But if you'd like to use Webpacker for CSS and static assets as well, please see [integrations](https://github.com/shakacode/shakapacker#integrations) for more information.
8
8
 
9
- Webpacker used to configure Webpack indirectly, which lead to a [complicated secondary configuration process](https://github.com/rails/webpacker/blob/5-x-stable/docs/webpack.md). This was done in order to provide default configurations for the most popular frameworks, but ended up creating more complexity than it cured. So now Webpacker delegates all configuration directly to Webpack's default configuration setup.
9
+ Webpacker used to configure Webpack indirectly, which lead to a [complicated secondary configuration process](https://github.com/rails/webpacker/blob/5-x-stable/docs/webpack.md). This was done in order to provide default configurations for the most popular frameworks, but ended up creating more complexity than it cured. So now Webpacker delegates all configuration directly to Webpack's default configuration setup. Additionally, all major dependencies, like `webpack` and `babel` are now **peer** dependencies, so you are free to upgrade those.
10
10
 
11
- This means you have to configure integration with frameworks yourself, but webpack-merge helps with this. See this example for [Vue](https://github.com/shakacode/shakapacker#other-frameworks) and scroll to the bottom for [more examples](#examples-of-v5-to-v6).
11
+ While you have to configure integration with frameworks yourself, [`webpack-merge`](https://github.com/survivejs/webpack-merge) helps with this. See this example for [Vue](https://github.com/shakacode/shakapacker#other-frameworks) and scroll to the bottom for [more examples](#examples-of-v5-to-v6).
12
12
 
13
- ## webpacker v6.0.0.rc.6 to shakapacker
13
+ ## webpacker v6.0.0.rc.6 to shakapacker v6.0.0
14
14
  See an example migration here: [PR 27](https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/pull/27).
15
15
 
16
- ### Update
17
- 1. Peer dependencies. Run `yarn add @babel/core @babel/plugin-transform-runtime @babel/preset-env @babel/runtime babel-loader compression-webpack-plugin terser-webpack-plugin webpack webpack-assets-manifest webpack-cli webpack-merge webpack-sources webpack-dev-server`
16
+ ### Update Steps to v6.0.0 from v6.0.0.rc.6
17
+ _If you're on webpacker v5, follow below steps to get to v6.0.0.rc.6 first._
18
+
19
+ 1. Change the gem name from `webpacker` to `shakapacker` and the NPM package from `@rails/webpacker` to `shakapacker`.
20
+ 1. Install the peer dependencies. Run `yarn add @babel/core @babel/plugin-transform-runtime @babel/preset-env @babel/runtime babel-loader compression-webpack-plugin terser-webpack-plugin webpack webpack-assets-manifest webpack-cli webpack-merge webpack-sources webpack-dev-server`
18
21
  1. Update any scripts that called `bin/webpack` or `bin/webpack-dev-server` to `bin/webpacker` or `bin/webpacker-dev-server`
19
- 1. Update your webpack config for a single config file, `config/webpack/webpack.config.js`.
20
- 1. Update `babel.config.js` if you need JSX support.
22
+ 1. Update your webpack config for a single config file, `config/webpack/webpack.config.js`. If you want to use the prior style of having a separate file for each NODE_ENV, you can use this shim for `config/webpack/webpack.config.js`:
23
+ ```js
24
+ const { env, webpackConfig } = require('shakapacker')
25
+ const { existsSync } = require('fs')
26
+ const { resolve } = require('path')
27
+
28
+ const envSpecificConfig = () => {
29
+ const path = resolve(__dirname, `${env.nodeEnv}.js`)
30
+ if (existsSync(path)) {
31
+ console.log(`Loading ENV specific webpack configuration file ${path}`)
32
+ return require(path)
33
+ } else {
34
+ return webpackConfig
35
+ }
36
+ }
37
+
38
+ module.exports = envSpecificConfig()
39
+ ```
40
+ 1. Update `babel.config.js` if you need JSX support. See [Customizing Babel Config](./customizing_babel_config.md)
21
41
 
22
- ## How to upgrade to Webpacker v6 from v5
42
+ ## How to upgrade to Webpacker v6.0.0.rc.6 from v5
23
43
  1. Ensure you have a clean working git branch. You will be overwriting all your files and reverting the changes that you don't want.
24
44
 
25
45
  1. Consider changing from the v5 default for `source_entry_path` in `webpacker.yml`.
@@ -159,7 +179,7 @@ See an example migration here: [PR 27](https://github.com/shakacode/react_on_rai
159
179
 
160
180
  1. Update any scripts that called `/bin/webpack` or `bin/webpack-dev-server` to `/bin/webpacker` or `bin/webpacker-dev-server`
161
181
 
162
- 1. Try your app!
182
+ 1. Now, follow the steps above to get to shakapacker v6 from webpacker v6.0.0.rc.6[
163
183
 
164
184
  ## Examples of v5 to v6
165
185
 
@@ -0,0 +1,12 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
4
+
5
+ gemspec path: "../"
6
+
7
+ gem "rails", '~>7.0.0'
8
+ gem "arel", github: "rails/arel"
9
+ gem "rake", ">= 11.1"
10
+ gem "rack-proxy", require: false
11
+ gem "minitest", "~> 5.0"
12
+ gem "byebug"
@@ -15,6 +15,9 @@ default: &default
15
15
  # Reload manifest.json on all requests so we reload latest compiled packs
16
16
  cache_manifest: false
17
17
 
18
+ # Select loader to use, available options are 'babel' (default), 'swc' or 'esbuild'
19
+ webpack_loader: 'babel'
20
+
18
21
  development:
19
22
  <<: *default
20
23
  compile: true
@@ -57,8 +57,8 @@ class Webpacker::Compiler
57
57
  Webpacker::Compiler - Slow setup for development
58
58
 
59
59
  Prepare JS assets with either:
60
- 1. Running `bin/webpack-dev-server`
61
- 2. Set `compile` to false in webpacker.yml and run `bin/webpack -w`
60
+ 1. Running `bin/webpacker-dev-server`
61
+ 2. Set `compile` to false in webpacker.yml and run `bin/webpacker -w`
62
62
  MSG
63
63
  end
64
64
 
@@ -1,4 +1,4 @@
1
1
  module Webpacker
2
2
  # Change the version in package.json too, please!
3
- VERSION = "6.0.1".freeze
3
+ VERSION = "6.1.1".freeze
4
4
  end
@@ -0,0 +1,40 @@
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
+ }
@@ -1,30 +1,32 @@
1
1
  const { resolve } = require('path')
2
2
  const { realpathSync } = require('fs')
3
+ const { loaderMatches } = require('../utils/helpers')
3
4
 
4
5
  const {
5
6
  source_path: sourcePath,
6
- additional_paths: additionalPaths
7
+ additional_paths: additionalPaths,
8
+ webpack_loader: webpackLoader
7
9
  } = require('../config')
8
10
  const { isProduction } = require('../env')
9
11
 
10
- module.exports = {
11
- test: /\.(js|jsx|mjs|ts|tsx|coffee)?(\.erb)?$/,
12
- include: [sourcePath, ...additionalPaths].map((p) => {
13
- try {
14
- return realpathSync(p)
15
- } catch (e) {
16
- return resolve(p)
17
- }
18
- }),
19
- exclude: /node_modules/,
20
- use: [
21
- {
22
- loader: require.resolve('babel-loader'),
23
- options: {
24
- cacheDirectory: true,
25
- cacheCompression: isProduction,
26
- compact: isProduction
12
+ module.exports = loaderMatches(webpackLoader, 'babel', () => ({
13
+ test: /\.(js|jsx|mjs|ts|tsx|coffee)?(\.erb)?$/,
14
+ include: [sourcePath, ...additionalPaths].map((p) => {
15
+ try {
16
+ return realpathSync(p)
17
+ } catch (e) {
18
+ return resolve(p)
27
19
  }
28
- }
29
- ]
30
- }
20
+ }),
21
+ exclude: /node_modules/,
22
+ use: [
23
+ {
24
+ loader: require.resolve('babel-loader'),
25
+ options: {
26
+ cacheDirectory: true,
27
+ cacheCompression: isProduction,
28
+ compact: isProduction
29
+ }
30
+ }
31
+ ]
32
+ }))
@@ -0,0 +1,23 @@
1
+ const { resolve } = require('path')
2
+ const { realpathSync } = require('fs')
3
+ const { loaderMatches } = require('../utils/helpers')
4
+ const { getEsbuildLoaderConfig } = require('../esbuild')
5
+
6
+ const {
7
+ source_path: sourcePath,
8
+ additional_paths: additionalPaths,
9
+ webpack_loader: webpackLoader
10
+ } = require('../config')
11
+
12
+ module.exports = loaderMatches(webpackLoader, 'esbuild', () => ({
13
+ test: /\.(ts|tsx|js|jsx|mjs|coffee)?(\.erb)?$/,
14
+ include: [sourcePath, ...additionalPaths].map((p) => {
15
+ try {
16
+ return realpathSync(p)
17
+ } catch (e) {
18
+ return resolve(p)
19
+ }
20
+ }),
21
+ exclude: /node_modules/,
22
+ use: ({ resource }) => getEsbuildLoaderConfig(resource)
23
+ }))
@@ -1,3 +1,6 @@
1
+ const { dirname, join } = require('path')
2
+ const { source_path: sourcePath } = require('../config')
3
+
1
4
  module.exports = {
2
5
  test: [
3
6
  /\.bmp$/,
@@ -18,6 +21,14 @@ module.exports = {
18
21
  exclude: [/\.(js|mjs|jsx|ts|tsx)$/],
19
22
  type: 'asset/resource',
20
23
  generator: {
21
- filename: 'static/[name]-[hash][ext][query]'
24
+ filename: (pathData) => {
25
+ const folders = dirname(pathData.filename)
26
+ .replace(`${sourcePath}/`, '')
27
+ .split('/')
28
+ .slice(1)
29
+
30
+ const foldersWithStatic = join('static', ...folders)
31
+ return `${foldersWithStatic}/[name]-[hash][ext][query]`
32
+ }
22
33
  }
23
34
  }
@@ -7,6 +7,8 @@ const rules = {
7
7
  css: require('./css'),
8
8
  sass: require('./sass'),
9
9
  babel: require('./babel'),
10
+ swc: require('./swc'),
11
+ esbuild: require('./esbuild'),
10
12
  erb: require('./erb'),
11
13
  coffee: require('./coffee'),
12
14
  less: require('./less'),
@@ -0,0 +1,23 @@
1
+ const { resolve } = require('path')
2
+ const { realpathSync } = require('fs')
3
+ const { loaderMatches } = require('../utils/helpers')
4
+ const { getSwcLoaderConfig } = require('../swc')
5
+
6
+ const {
7
+ source_path: sourcePath,
8
+ additional_paths: additionalPaths,
9
+ webpack_loader: webpackLoader
10
+ } = require('../config')
11
+
12
+ module.exports = loaderMatches(webpackLoader, 'swc', () => ({
13
+ test: /\.(ts|tsx|js|jsx|mjs|coffee)?(\.erb)?$/,
14
+ include: [sourcePath, ...additionalPaths].map((p) => {
15
+ try {
16
+ return realpathSync(p)
17
+ } catch (e) {
18
+ return resolve(p)
19
+ }
20
+ }),
21
+ exclude: /node_modules/,
22
+ use: ({ resource }) => getSwcLoaderConfig(resource)
23
+ }))
@@ -0,0 +1,50 @@
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 isJsxFile = (filename) => !!filename.match(/\.(jsx|tsx)?(\.erb)?$/)
9
+
10
+ const isTypescriptFile = (filename) => !!filename.match(/\.(ts|tsx)?(\.erb)?$/)
11
+
12
+ const getCustomConfig = () => {
13
+ const path = resolve('config', 'swc.config.js')
14
+ if (existsSync(path)) {
15
+ return require(path)
16
+ }
17
+ return {}
18
+ }
19
+
20
+ const getSwcLoaderConfig = (filenameToProcess) => {
21
+ const customConfig = getCustomConfig()
22
+ const defaultConfig = {
23
+ loader: require.resolve('swc-loader'),
24
+ options: {
25
+ jsc: {
26
+ parser: {
27
+ dynamicImport: true,
28
+ syntax: isTypescriptFile(filenameToProcess)
29
+ ? 'typescript'
30
+ : 'ecmascript',
31
+ [isTypescriptFile(filenameToProcess) ? 'tsx' : 'jsx']:
32
+ isJsxFile(filenameToProcess)
33
+ }
34
+ },
35
+ sourceMaps: true,
36
+ env: {
37
+ coreJs: '3.8',
38
+ loose: true,
39
+ exclude: ['transform-typeof-symbol'],
40
+ mode: 'entry'
41
+ }
42
+ }
43
+ }
44
+
45
+ return merge(defaultConfig, customConfig)
46
+ }
47
+
48
+ module.exports = {
49
+ getSwcLoaderConfig
50
+ }
@@ -27,7 +27,7 @@ const resolvedPath = (packageName) => {
27
27
  }
28
28
  }
29
29
 
30
- const moduleExists = (packageName) => (!!resolvedPath(packageName))
30
+ const moduleExists = (packageName) => !!resolvedPath(packageName)
31
31
 
32
32
  const canProcess = (rule, fn) => {
33
33
  const modulePath = resolvedPath(rule)
@@ -39,6 +39,22 @@ const canProcess = (rule, fn) => {
39
39
  return null
40
40
  }
41
41
 
42
+ const loaderMatches = (configLoader, loaderToCheck, fn) => {
43
+ if (configLoader !== loaderToCheck) {
44
+ return null
45
+ }
46
+
47
+ const loaderName = `${configLoader}-loader`
48
+
49
+ if (!moduleExists(loaderName)) {
50
+ throw new Error(
51
+ `Your webpacker config specified using ${configLoader}, but ${loaderName} package is not installed. Please install ${loaderName} first.`
52
+ )
53
+ }
54
+
55
+ return fn()
56
+ }
57
+
42
58
  module.exports = {
43
59
  chdirTestApp,
44
60
  chdirCwd,
@@ -47,5 +63,6 @@ module.exports = {
47
63
  ensureTrailingSlash,
48
64
  canProcess,
49
65
  moduleExists,
50
- resetEnv
66
+ resetEnv,
67
+ loaderMatches
51
68
  }
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shakapacker",
3
- "version": "6.0.1",
3
+ "version": "6.1.1",
4
4
  "description": "Use webpack to manage app-like JavaScript modules in Rails",
5
5
  "main": "package/index.js",
6
6
  "files": [
@@ -32,6 +32,7 @@
32
32
  "devDependencies": {
33
33
  "babel-loader": "^8.2.2",
34
34
  "compression-webpack-plugin": "^9.0.0",
35
+ "esbuild-loader": "^2.18.0",
35
36
  "eslint": "^7.32.0",
36
37
  "eslint-config-airbnb": "^18.2.1",
37
38
  "eslint-config-prettier": "^8.3.0",
@@ -39,6 +40,7 @@
39
40
  "eslint-plugin-jsx-a11y": "^6.4.1",
40
41
  "eslint-plugin-react": "^7.26.0",
41
42
  "jest": "^27.2.1",
43
+ "swc-loader": "^0.1.15",
42
44
  "webpack": "^5.53.0",
43
45
  "webpack-assets-manifest": "^5.0.6",
44
46
  "webpack-merge": "^5.8.0"
@@ -5,6 +5,7 @@ default: &default
5
5
  source_entry_path: entrypoints
6
6
  public_output_path: packs
7
7
  cache_path: tmp/webpacker
8
+ webpack_loader: babel
8
9
 
9
10
  # Additional paths webpack should look up modules
10
11
  # ['app/assets', 'engine/foo/app/assets']
@@ -7,6 +7,7 @@ default: &default
7
7
  public_output_path: packs
8
8
  cache_path: tmp/webpacker
9
9
  webpack_compile_output: false
10
+ webpack_loader: babel
10
11
 
11
12
  # Additional paths webpack should look up modules
12
13
  # ['app/assets', 'engine/foo/app/assets']
data/webpacker.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.7.0"
18
+ s.required_ruby_version = ">= 2.6.0"
19
19
 
20
20
  s.add_dependency "activesupport", ">= 5.2"
21
21
  s.add_dependency "railties", ">= 5.2"
data/yarn.lock CHANGED
@@ -1514,6 +1514,132 @@ es-to-primitive@^1.2.1:
1514
1514
  is-date-object "^1.0.1"
1515
1515
  is-symbol "^1.0.2"
1516
1516
 
1517
+ esbuild-android-arm64@0.14.18:
1518
+ version "0.14.18"
1519
+ resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.18.tgz#027a1cd57e57c6219341e116c4ac41a9952d69d1"
1520
+ integrity sha512-AuE8vIwc6QLquwykyscFk0Ji3RFczoOvjka64FJlcjLLhD6VsS584RYlQrSnPpRkv69PunUvyrBoEF7JFTJijg==
1521
+
1522
+ esbuild-darwin-64@0.14.18:
1523
+ version "0.14.18"
1524
+ resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.18.tgz#a219c50aa98b5bc08d7ce3677f5bae4b8aa5101b"
1525
+ integrity sha512-nN1XziZtDy8QYOggaXC3zu0vVh8YJpS8Bol7bHaxx0enTLDSFBCXUUJEKYpmAAJ4OZRPgjXv8NzEHHQWQvLzXg==
1526
+
1527
+ esbuild-darwin-arm64@0.14.18:
1528
+ version "0.14.18"
1529
+ resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.18.tgz#eb2d17d33c5991c183c99843698182bb702eb592"
1530
+ integrity sha512-v0i2n6TCsbxco/W1fN8RgQt3RW00Q9zJO2eqiAdmLWg6Hx0HNHloZyfhF11i7nMUUgW8r5n++ZweIXjAFPE/gQ==
1531
+
1532
+ esbuild-freebsd-64@0.14.18:
1533
+ version "0.14.18"
1534
+ resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.18.tgz#de06b6ce361bdf51fb66e59b220f67c4124cc728"
1535
+ integrity sha512-XLyJZTWbSuQJOqw867tBxvto6GjxULvWZYKs6RFHYQPCqgQ0ODLRtBmp4Fqqpde52yOe45npaaoup9IXNfr32A==
1536
+
1537
+ esbuild-freebsd-arm64@0.14.18:
1538
+ version "0.14.18"
1539
+ resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.18.tgz#59bb55cd6ac1b2b3c43536c067d8356f4ae7e310"
1540
+ integrity sha512-0ItfrR8hePnDcUXxUQxY+VfICcBfeMJCdK6mcNUXnXw6LyHjyUYXWpFXF+J18pg1/YUWRWO1HbsJ7FEwELcQIA==
1541
+
1542
+ esbuild-linux-32@0.14.18:
1543
+ version "0.14.18"
1544
+ resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.18.tgz#ff68f7ec7c8b8c7dddab4d6e65f1a1d0ff3ab0b9"
1545
+ integrity sha512-mnG84D9NsEsoQdBpBT0IsFjm5iAwnd81SP4tRMXZLl09lPvIWjHHSq6LDlb4+L5H5K5y68WC//X5Dr2MtNY3DQ==
1546
+
1547
+ esbuild-linux-64@0.14.18:
1548
+ version "0.14.18"
1549
+ resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.18.tgz#d4083d9833580090452a095cd2216100d86f3c7a"
1550
+ integrity sha512-HvExRtkeA8l/p+7Lf6aBrnLH+jTCFJTUMJxGKExh2RD8lCXGTeDJFyP+BOEetP80fuuH+Syj79+LVQ9MihdBsg==
1551
+
1552
+ esbuild-linux-arm64@0.14.18:
1553
+ version "0.14.18"
1554
+ resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.18.tgz#8ce21e188ab9fcdb512f4ada9a637014c1294bec"
1555
+ integrity sha512-CCWmilODE1ckw+M7RVqoqKWA4UB0alCyK2bv0ikEeEAwkzinlJeoe94t9CnT/ECSQ2sL+C16idsr+aUviGp7sg==
1556
+
1557
+ esbuild-linux-arm@0.14.18:
1558
+ version "0.14.18"
1559
+ resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.18.tgz#a5e1d684c451f379b1dfef7b5a2dcad84cce3f79"
1560
+ integrity sha512-+ZL8xfXVNaeaZ2Kxqlw2VYZWRDZ7NSK4zOV9GKNAtkkWURLsPUU84aUOBatRe9BH1O5FDo3LLQSlaA04ed6lhA==
1561
+
1562
+ esbuild-linux-mips64le@0.14.18:
1563
+ version "0.14.18"
1564
+ resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.18.tgz#c3890f178745a9c65bad64322be2b3611c240041"
1565
+ integrity sha512-8LjO4+6Vxz5gbyCHO4OONYMF689nLderCtzb8lG1Bncs4ZXHpo6bjvuWeTMRbGUkvAhp+P6hMTzia7RHOC53wQ==
1566
+
1567
+ esbuild-linux-ppc64le@0.14.18:
1568
+ version "0.14.18"
1569
+ resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.18.tgz#a355f515ca84839f5301f8ef745a2b329105e232"
1570
+ integrity sha512-0OJk/6iYEmF1J7LXY6+cqf6Ga5vG4an7n1nubTKce7kYqaTyNGfYcTjDZce6lnDVlZTJtwntIMszq1+ZX7Kenw==
1571
+
1572
+ esbuild-linux-s390x@0.14.18:
1573
+ version "0.14.18"
1574
+ resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.18.tgz#81721c22387912778c67495d0a34527f7a2cde66"
1575
+ integrity sha512-UNY7YKZHjY31KcNanJK4QaT2/aoIQyS+jViP3QuDRIoYAogRnc6WydylzIkkEzGMaC4fzaXOmQ8fxwpLAXK4Yg==
1576
+
1577
+ esbuild-loader@^2.18.0:
1578
+ version "2.18.0"
1579
+ resolved "https://registry.yarnpkg.com/esbuild-loader/-/esbuild-loader-2.18.0.tgz#7b9548578ab954574fd94655693d22aa5ec74120"
1580
+ integrity sha512-AKqxM3bI+gvGPV8o6NAhR+cBxVO8+dh+O0OXBHIXXwuSGumckbPWHzZ17subjBGI2YEGyJ1STH7Haj8aCrwL/w==
1581
+ dependencies:
1582
+ esbuild "^0.14.6"
1583
+ joycon "^3.0.1"
1584
+ json5 "^2.2.0"
1585
+ loader-utils "^2.0.0"
1586
+ tapable "^2.2.0"
1587
+ webpack-sources "^2.2.0"
1588
+
1589
+ esbuild-netbsd-64@0.14.18:
1590
+ version "0.14.18"
1591
+ resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.18.tgz#eaee109d527a58b582f8fa933d9cadf8840758c2"
1592
+ integrity sha512-wE/2xT9KNzLCfEBw24YbVmMmXH92cFIzrRPUlwWH9dIizjvEYYcyQ+peTMVkqzUum7pdlVLZ2CDDqAaZo/nW/w==
1593
+
1594
+ esbuild-openbsd-64@0.14.18:
1595
+ version "0.14.18"
1596
+ resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.18.tgz#96a42615f5548529b7bb32d024bb9c6fb542778c"
1597
+ integrity sha512-vdymE2jyuH/FRmTvrguCYSrq81/rUwuhMYyvt/6ibv9ac7xQ674c8qTdT+RH73sR9/2WUD/NsYxrBA/wUVTxcg==
1598
+
1599
+ esbuild-sunos-64@0.14.18:
1600
+ version "0.14.18"
1601
+ resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.18.tgz#869723d73a5f35ba2a4a6c043694d952bd4f831b"
1602
+ integrity sha512-X/Tesy6K1MdJF1d5cbzFDxrIMMn0ye+VgTQRI8P5Vo2CcKxOdckwsKUwpRAvg+VDZ6MxrSOTYS9OOoggPUjxTg==
1603
+
1604
+ esbuild-windows-32@0.14.18:
1605
+ version "0.14.18"
1606
+ resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.18.tgz#197c8833ed0f6a82055ab63861777749d0ce95c0"
1607
+ integrity sha512-glG23I/JzCL4lu7DWFUtVwqFwNwlL0g+ks+mcjjUisHcINoSXTeCNToUN0bHhzn6IlXXnggNQ38Ew/idHPM8+g==
1608
+
1609
+ esbuild-windows-64@0.14.18:
1610
+ version "0.14.18"
1611
+ resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.18.tgz#569832a99d87fc931a081fe7761c100578275be0"
1612
+ integrity sha512-zEiFKHgV/3z14wsVamV98/5mxeOwz+ecyg0pD3fWcBz9j4EOIT1Tg47axypD4QLwiKFvve9mUBYX1cD99qxOyw==
1613
+
1614
+ esbuild-windows-arm64@0.14.18:
1615
+ version "0.14.18"
1616
+ resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.18.tgz#c1991848fca7b051d1d036d0723406da9696105d"
1617
+ integrity sha512-Mh8lZFcPLat13dABN7lZThGUOn9YxoH5RYkhBq0U3WqQohHzKRhllYh7ibFixnkpMLnv8OZEbl8bGLMy03MpfA==
1618
+
1619
+ esbuild@^0.14.6:
1620
+ version "0.14.18"
1621
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.18.tgz#9c5f58c506ec9e0ec335d20bcb3f9dbd086d0648"
1622
+ integrity sha512-vCUoISSltnX7ax01w70pWOSQT+e55o+2P/a+A9MSTukJAt3T4aDZajcjeG4fnZbkvOEv+dkKgdkvljz6vVQD4A==
1623
+ optionalDependencies:
1624
+ esbuild-android-arm64 "0.14.18"
1625
+ esbuild-darwin-64 "0.14.18"
1626
+ esbuild-darwin-arm64 "0.14.18"
1627
+ esbuild-freebsd-64 "0.14.18"
1628
+ esbuild-freebsd-arm64 "0.14.18"
1629
+ esbuild-linux-32 "0.14.18"
1630
+ esbuild-linux-64 "0.14.18"
1631
+ esbuild-linux-arm "0.14.18"
1632
+ esbuild-linux-arm64 "0.14.18"
1633
+ esbuild-linux-mips64le "0.14.18"
1634
+ esbuild-linux-ppc64le "0.14.18"
1635
+ esbuild-linux-s390x "0.14.18"
1636
+ esbuild-netbsd-64 "0.14.18"
1637
+ esbuild-openbsd-64 "0.14.18"
1638
+ esbuild-sunos-64 "0.14.18"
1639
+ esbuild-windows-32 "0.14.18"
1640
+ esbuild-windows-64 "0.14.18"
1641
+ esbuild-windows-arm64 "0.14.18"
1642
+
1517
1643
  escalade@^3.1.1:
1518
1644
  version "3.1.1"
1519
1645
  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
@@ -2684,6 +2810,11 @@ jest@^27.2.1:
2684
2810
  import-local "^3.0.2"
2685
2811
  jest-cli "^27.4.7"
2686
2812
 
2813
+ joycon@^3.0.1:
2814
+ version "3.1.1"
2815
+ resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03"
2816
+ integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==
2817
+
2687
2818
  "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
2688
2819
  version "4.0.0"
2689
2820
  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -2769,7 +2900,7 @@ json5@^1.0.1:
2769
2900
  dependencies:
2770
2901
  minimist "^1.2.0"
2771
2902
 
2772
- json5@^2.1.2:
2903
+ json5@^2.1.2, json5@^2.2.0:
2773
2904
  version "2.2.0"
2774
2905
  resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
2775
2906
  integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
@@ -2841,6 +2972,15 @@ loader-utils@^1.4.0:
2841
2972
  emojis-list "^3.0.0"
2842
2973
  json5 "^1.0.1"
2843
2974
 
2975
+ loader-utils@^2.0.0:
2976
+ version "2.0.2"
2977
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129"
2978
+ integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==
2979
+ dependencies:
2980
+ big.js "^5.2.2"
2981
+ emojis-list "^3.0.0"
2982
+ json5 "^2.1.2"
2983
+
2844
2984
  locate-path@^2.0.0:
2845
2985
  version "2.0.0"
2846
2986
  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
@@ -3478,6 +3618,11 @@ slice-ansi@^4.0.0:
3478
3618
  astral-regex "^2.0.0"
3479
3619
  is-fullwidth-code-point "^3.0.0"
3480
3620
 
3621
+ source-list-map@^2.0.1:
3622
+ version "2.0.1"
3623
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
3624
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
3625
+
3481
3626
  source-map-support@^0.5.6, source-map-support@~0.5.20:
3482
3627
  version "0.5.21"
3483
3628
  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
@@ -3621,6 +3766,13 @@ supports-preserve-symlinks-flag@^1.0.0:
3621
3766
  resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
3622
3767
  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
3623
3768
 
3769
+ swc-loader@^0.1.15:
3770
+ version "0.1.15"
3771
+ resolved "https://registry.yarnpkg.com/swc-loader/-/swc-loader-0.1.15.tgz#cb9c630ccfbb46dabc5aebc5560cced658e32992"
3772
+ integrity sha512-cn1WPIeQJvXM4bbo3OwdEIapsQ4uUGOfyFj0h2+2+brT0k76DCGnZXDE2KmcqTd2JSQ+b61z2NPMib7eEwMYYw==
3773
+ dependencies:
3774
+ loader-utils "^2.0.0"
3775
+
3624
3776
  symbol-tree@^3.2.4:
3625
3777
  version "3.2.4"
3626
3778
  resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
@@ -3865,6 +4017,14 @@ webpack-merge@^5.8.0:
3865
4017
  clone-deep "^4.0.1"
3866
4018
  wildcard "^2.0.0"
3867
4019
 
4020
+ webpack-sources@^2.2.0:
4021
+ version "2.3.1"
4022
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd"
4023
+ integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==
4024
+ dependencies:
4025
+ source-list-map "^2.0.1"
4026
+ source-map "^0.6.1"
4027
+
3868
4028
  webpack-sources@^3.2.2:
3869
4029
  version "3.2.3"
3870
4030
  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"