From d070d80c80e2d8ee1e8416eef50b099610c54550 Mon Sep 17 00:00:00 2001 From: Nathan Bierema Date: Sun, 6 Nov 2022 15:23:01 -0500 Subject: [PATCH] Refactor builds --- .github/workflows/release.yml | 18 ++ extension/.eslintignore | 10 +- extension/.gitignore | 9 +- extension/package.json | 20 +- extension/src/pageScriptWrap.ts | 2 +- extension/webpack.config.js | 75 ++++++++ extension/webpack/base.config.js | 100 ---------- extension/webpack/dev.config.babel.js | 23 --- extension/webpack/prod.config.babel.js | 17 -- .../webpack/prod.firefox.config.babel.js | 14 -- extension/webpack/wrap.config.babel.js | 15 -- extension/wrap.webpack.config.js | 32 ++++ pnpm-lock.yaml | 180 ++++++++++++++++-- 13 files changed, 305 insertions(+), 210 deletions(-) create mode 100644 extension/webpack.config.js delete mode 100644 extension/webpack/base.config.js delete mode 100644 extension/webpack/dev.config.babel.js delete mode 100644 extension/webpack/prod.config.babel.js delete mode 100644 extension/webpack/prod.firefox.config.babel.js delete mode 100644 extension/webpack/wrap.config.babel.js create mode 100644 extension/wrap.webpack.config.js diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b3a4ea15..7780c02f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,3 +36,21 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Archive Chrome Extension + uses: actions/upload-artifact@v3 + with: + name: Chrome extension + path: extension/chrome/dist/chrome.zip + + - name: Archive Edge Extension + uses: actions/upload-artifact@v3 + with: + name: Edge extension + path: extension/edge/dist/edge.zip + + - name: Archive Firefox Extension + uses: actions/upload-artifact@v3 + with: + name: Edge extension + path: extension/firefox/dist/firefox.zip diff --git a/extension/.eslintignore b/extension/.eslintignore index 85ffff06..d8c3bcd8 100644 --- a/extension/.eslintignore +++ b/extension/.eslintignore @@ -1,7 +1,3 @@ -node_modules -build -dev -webpack/replace -examples -npm-package -_book +node_modules +dist +examples diff --git a/extension/.gitignore b/extension/.gitignore index bbe0a464..f06235c4 100644 --- a/extension/.gitignore +++ b/extension/.gitignore @@ -1,9 +1,2 @@ node_modules -npm-debug.log -.DS_Store -.idea/ -dist/ -build/ -dev/ -tmp/ -_book +dist diff --git a/extension/package.json b/extension/package.json index 3e45a475..c398cde2 100644 --- a/extension/package.json +++ b/extension/package.json @@ -11,20 +11,18 @@ "url": "https://github.com/reduxjs/redux-devtools.git" }, "scripts": { - "start": "webpack --config webpack/dev.config.babel.js", - "build": "pnpm run build:extension && pnpm run build:firefox", - "build:extension": "rimraf build/extension && webpack --config webpack/wrap.config.babel.js && webpack --config webpack/prod.config.babel.js", - "build:firefox": "webpack --config webpack/prod.firefox.config.babel.js", + "start": "webpack --env development --watch", + "build": "pnpm run build:extension && pnpm run build:chrome && pnpm run build:edge && pnpm run build:firefox", + "build:extension": "webpack --env production && webpack --config wrap.webpack.config.js", + "build:chrome": "cpy dist/** chrome/dist/unpacked && cpy manifest.json dist/unpacked --cwd chrome && bestzip chrome/dist/chrome.zip chrome/dist/unpacked", + "build:edge": "cpy dist/** edge/dist/unpacked && cpy manifest.json dist/unpacked --cwd edge && bestzip edge/dist/edge.zip edge/dist/unpacked", + "build:firefox": "cpy dist/** firefox/dist/unpacked && cpy manifest.json dist/unpacked --cwd firefox && bestzip firefox/dist/firefox.zip firefox/dist/unpacked", "build:examples": "babel-node examples/buildAll.js", - "precompress:extension": "pnpm run lint && pnpm run test:app && pnpm run build:extension && pnpm run test:chrome && pnpm run test:electron", - "precompress:firefox": "pnpm run lint && pnpm run build:firefox && pnpm run test:app", - "compress:extension": "bestzip build/extension.zip build/extension", - "compress:firefox": "bestzip build/extension.zip build/extension", - "clean": "rimraf build && rimraf dev", + "clean": "rimraf dist && rimraf chrome/dist && rimraf edge/dist && rimraf firefox/dist", "test:app": "cross-env BABEL_ENV=test jest test/app", "test:chrome": "jest test/chrome", "test:electron": "pnpm run build:test:electron:fixture && jest test/electron", - "test": "pnpm run test:app && pnpm run build:extension && pnpm run test:chrome && pnpm run test:electron", + "test": "pnpm run test:app && pnpm run build:chrome && pnpm run test:chrome && pnpm run test:electron", "build:test:electron:fixture": "webpack --config test/electron/fixture/webpack.config.js", "type-check": "tsc --noEmit" }, @@ -68,6 +66,7 @@ "bestzip": "^2.2.1", "chromedriver": "^106.0.1", "copy-webpack-plugin": "^11.0.0", + "cpy-cli": "^4.2.0", "cross-env": "^7.0.3", "css-loader": "^6.7.1", "electron": "^21.1.1", @@ -82,7 +81,6 @@ "immutable": "^4.1.0", "jest": "^29.2.2", "jest-environment-jsdom": "^29.2.2", - "path-browserify": "^1.0.1", "pug-html-loader": "^1.1.5", "raw-loader": "^4.0.2", "react-transform-catch-errors": "^1.0.2", diff --git a/extension/src/pageScriptWrap.ts b/extension/src/pageScriptWrap.ts index 3c7f5147..ae1da249 100644 --- a/extension/src/pageScriptWrap.ts +++ b/extension/src/pageScriptWrap.ts @@ -2,7 +2,7 @@ let s = document.createElement('script'); s.type = 'text/javascript'; if (process.env.NODE_ENV === 'production') { - const { default: script } = require('raw-loader!tmp/page.bundle.js'); + const { default: script } = require('raw-loader!../dist/page.bundle.js'); s.appendChild(document.createTextNode(script)); (document.head || document.documentElement).appendChild(s); s.parentNode!.removeChild(s); diff --git a/extension/webpack.config.js b/extension/webpack.config.js new file mode 100644 index 00000000..a4f09dc3 --- /dev/null +++ b/extension/webpack.config.js @@ -0,0 +1,75 @@ +const path = require('path'); +const CopyPlugin = require('copy-webpack-plugin'); +const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); + +module.exports = function (env) { + return { + // devtool: 'source-map', + mode: env.production ? 'production' : 'development', + entry: { + background: [ + path.resolve(__dirname, 'src/chromeApiMock'), + path.resolve(__dirname, 'src/background/index'), + ], + options: [ + path.resolve(__dirname, 'src/chromeApiMock'), + path.resolve(__dirname, 'src/options/index'), + ], + window: [path.resolve(__dirname, 'src/window/index')], + remote: [path.resolve(__dirname, 'src/remote/index')], + devpanel: [ + path.resolve(__dirname, 'src/chromeApiMock'), + path.resolve(__dirname, 'src/devpanel/index'), + ], + devtools: path.resolve(__dirname, 'src/devtools/index'), + content: [ + path.resolve(__dirname, 'src/chromeApiMock'), + path.resolve(__dirname, 'src/contentScript/index'), + ], + page: path.join(__dirname, 'src/pageScript'), + }, + output: { + filename: '[name].bundle.js', + chunkFilename: '[id].chunk.js', + }, + plugins: [ + new ForkTsCheckerWebpackPlugin({ + typescript: { + configFile: 'tsconfig.json', + }, + }), + new CopyPlugin({ + patterns: [ + { + from: path.join(__dirname, 'chrome/manifest.json'), + to: path.join(__dirname, 'dist/manifest.json'), + }, + { + from: path.join(__dirname, 'src/assets/'), + to: path.join(__dirname, 'dist'), + }, + ], + }), + ], + resolve: { + extensions: ['.js', '.jsx', '.ts', '.tsx'], + }, + module: { + rules: [ + { + test: /\.(js|ts)x?$/, + use: 'babel-loader', + exclude: /node_modules/, + }, + { + test: /\.css?$/, + use: ['style-loader', 'css-loader'], + }, + { + test: /\.pug$/, + use: ['file-loader?name=[name].html', 'pug-html-loader'], + }, + ], + }, + }; +}; diff --git a/extension/webpack/base.config.js b/extension/webpack/base.config.js deleted file mode 100644 index 1f3290ce..00000000 --- a/extension/webpack/base.config.js +++ /dev/null @@ -1,100 +0,0 @@ -import path from 'path'; -import webpack from 'webpack'; -import CopyPlugin from 'copy-webpack-plugin'; -import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin'; - -const baseConfig = (params) => ({ - // devtool: 'source-map', - mode: params.mode, - entry: params.input || { - background: [ - path.resolve(__dirname, '../src/chromeApiMock'), - path.resolve(__dirname, '../src/background/index'), - ], - options: [ - path.resolve(__dirname, '../src/chromeApiMock'), - path.resolve(__dirname, '../src/options/index'), - ], - window: [path.resolve(__dirname, '../src/window/index')], - remote: [path.resolve(__dirname, '../src/remote/index')], - devpanel: [ - path.resolve(__dirname, '../src/chromeApiMock'), - path.resolve(__dirname, '../src/devpanel/index'), - ], - devtools: [path.resolve(__dirname, '../src/devtools/index')], - content: [ - path.resolve(__dirname, '../src/chromeApiMock'), - path.resolve(__dirname, '../src/contentScript/index'), - ], - pagewrap: [path.resolve(__dirname, '../src/pageScriptWrap')], - ...params.inputExtra, - }, - output: { - filename: '[name].bundle.js', - chunkFilename: '[id].chunk.js', - ...params.output, - }, - plugins: [ - new webpack.DefinePlugin(params.globals), - ...(params.plugins - ? params.plugins - : [ - new ForkTsCheckerWebpackPlugin({ - typescript: { - configFile: 'tsconfig.json', - }, - }), - ]), - ].concat( - params.copy - ? new CopyPlugin({ - patterns: [ - { - from: params.manifestJsonPath, - to: path.join(params.output.path, 'manifest.json'), - }, - { - from: path.join(__dirname, '../src/assets/'), - to: params.output.path, - }, - ], - }) - : [] - ), - performance: { - hints: false, - }, - resolve: { - alias: { - app: path.join(__dirname, '../src/app'), - tmp: path.join(__dirname, '../build/tmp'), - }, - extensions: ['.js', '.jsx', '.ts', '.tsx'], - fallback: { - path: require.resolve('path-browserify'), - }, - }, - module: { - rules: [ - ...(params.loaders - ? params.loaders - : [ - { - test: /\.(js|ts)x?$/, - use: 'babel-loader', - exclude: /(node_modules|tmp\/page\.bundle)/, - }, - ]), - { - test: /\.css?$/, - use: ['style-loader', 'css-loader'], - }, - { - test: /\.pug$/, - use: ['file-loader?name=[name].html', 'pug-html-loader'], - }, - ], - }, -}); - -export default baseConfig; diff --git a/extension/webpack/dev.config.babel.js b/extension/webpack/dev.config.babel.js deleted file mode 100644 index 6abb9178..00000000 --- a/extension/webpack/dev.config.babel.js +++ /dev/null @@ -1,23 +0,0 @@ -import path from 'path'; -import webpack from 'webpack'; -import baseConfig from './base.config'; - -let config = baseConfig({ - mode: 'development', - inputExtra: { - page: [path.join(__dirname, '../src/pageScript')], - }, - output: { path: path.join(__dirname, '../dev') }, - globals: { - 'process.env': { - NODE_ENV: '"development"', - }, - }, - plugins: [new webpack.NoEmitOnErrorsPlugin()], - copy: true, - manifestJsonPath: path.join(__dirname, '../chrome/manifest.json'), -}); - -config.watch = true; - -export default config; diff --git a/extension/webpack/prod.config.babel.js b/extension/webpack/prod.config.babel.js deleted file mode 100644 index c29e9924..00000000 --- a/extension/webpack/prod.config.babel.js +++ /dev/null @@ -1,17 +0,0 @@ -import path from 'path'; -import baseConfig from './base.config'; - -export default baseConfig({ - mode: 'production', - inputExtra: { - page: [path.join(__dirname, '../src/pageScript')], - }, - output: { path: path.join(__dirname, '../build/extension') }, - globals: { - 'process.env': { - NODE_ENV: '"production"', - }, - }, - copy: true, - manifestJsonPath: path.join(__dirname, '../chrome/manifest.json'), -}); diff --git a/extension/webpack/prod.firefox.config.babel.js b/extension/webpack/prod.firefox.config.babel.js deleted file mode 100644 index f14b8d35..00000000 --- a/extension/webpack/prod.firefox.config.babel.js +++ /dev/null @@ -1,14 +0,0 @@ -import path from 'path'; -import baseConfig from './base.config'; - -export default baseConfig({ - mode: 'production', - output: { path: path.join(__dirname, '../build/extension') }, - globals: { - 'process.env': { - NODE_ENV: '"production"', - }, - }, - copy: true, - manifestJsonPath: path.join(__dirname, '../firefox/manifest.json'), -}); diff --git a/extension/webpack/wrap.config.babel.js b/extension/webpack/wrap.config.babel.js deleted file mode 100644 index ced8a881..00000000 --- a/extension/webpack/wrap.config.babel.js +++ /dev/null @@ -1,15 +0,0 @@ -import path from 'path'; -import baseConfig from './base.config'; - -export default baseConfig({ - mode: 'production', - input: { - page: [path.join(__dirname, '../src/pageScript')], - }, - output: { path: path.join(__dirname, '../build/tmp') }, - globals: { - 'process.env': { - NODE_ENV: '"production"', - }, - }, -}); diff --git a/extension/wrap.webpack.config.js b/extension/wrap.webpack.config.js new file mode 100644 index 00000000..dd336c62 --- /dev/null +++ b/extension/wrap.webpack.config.js @@ -0,0 +1,32 @@ +const path = require('path'); +const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); + +module.exports = { + mode: 'production', + entry: { + pagewrap: path.resolve(__dirname, 'src/pageScriptWrap'), + }, + output: { + filename: '[name].bundle.js', + chunkFilename: '[id].chunk.js', + }, + plugins: [ + new ForkTsCheckerWebpackPlugin({ + typescript: { + configFile: 'tsconfig.json', + }, + }), + ], + resolve: { + extensions: ['.js', '.jsx', '.ts', '.tsx'], + }, + module: { + rules: [ + { + test: /\.(js|ts)x?$/, + use: 'babel-loader', + exclude: /node_modules/, + }, + ], + }, +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 26811798..4a2a4c41 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -66,6 +66,7 @@ importers: bestzip: ^2.2.1 chromedriver: ^106.0.1 copy-webpack-plugin: ^11.0.0 + cpy-cli: ^4.2.0 cross-env: ^7.0.3 css-loader: ^6.7.1 electron: ^21.1.1 @@ -83,7 +84,6 @@ importers: jsan: ^3.1.14 localforage: ^1.10.0 lodash: ^4.17.21 - path-browserify: ^1.0.1 pug-html-loader: ^1.1.5 raw-loader: ^4.0.2 react: ^18.2.0 @@ -144,6 +144,7 @@ importers: bestzip: 2.2.1 chromedriver: 106.0.1 copy-webpack-plugin: 11.0.0_webpack@5.74.0 + cpy-cli: 4.2.0 cross-env: 7.0.3 css-loader: 6.7.1_webpack@5.74.0 electron: 21.1.1 @@ -158,7 +159,6 @@ importers: immutable: 4.1.0 jest: 29.2.2 jest-environment-jsdom: 29.2.2 - path-browserify: 1.0.1 pug-html-loader: 1.1.5 raw-loader: 4.0.2_webpack@5.74.0 react-transform-catch-errors: 1.0.2 @@ -9752,6 +9752,14 @@ packages: clean-stack: 2.2.0 indent-string: 4.0.0 + /aggregate-error/4.0.1: + resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} + engines: {node: '>=12'} + dependencies: + clean-stack: 4.2.0 + indent-string: 5.0.0 + dev: true + /airbnb-js-shims/2.2.1: resolution: {integrity: sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==} dependencies: @@ -10250,6 +10258,11 @@ packages: engines: {node: '>=8'} dev: true + /arrify/3.0.0: + resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} + engines: {node: '>=12'} + dev: true + /asap/2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: true @@ -11128,6 +11141,16 @@ packages: quick-lru: 4.0.1 dev: true + /camelcase-keys/7.0.2: + resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} + engines: {node: '>=12'} + dependencies: + camelcase: 6.3.0 + map-obj: 4.3.0 + quick-lru: 5.1.1 + type-fest: 1.4.0 + dev: true + /camelcase/1.2.1: resolution: {integrity: sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==} engines: {node: '>=0.10.0'} @@ -11373,6 +11396,13 @@ packages: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} + /clean-stack/4.2.0: + resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} + engines: {node: '>=12'} + dependencies: + escape-string-regexp: 5.0.0 + dev: true + /cli-boxes/2.2.1: resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} engines: {node: '>=6'} @@ -11821,6 +11851,25 @@ packages: p-event: 4.2.0 dev: true + /cp-file/9.1.0: + resolution: {integrity: sha512-3scnzFj/94eb7y4wyXRWwvzLFaQp87yyfTnChIjlfYrVqp5lVO3E2hIJMeQIltUT0K2ZAB3An1qXcBmwGyvuwA==} + engines: {node: '>=10'} + dependencies: + graceful-fs: 4.2.10 + make-dir: 3.1.0 + nested-error-stacks: 2.1.1 + p-event: 4.2.0 + dev: true + + /cpy-cli/4.2.0: + resolution: {integrity: sha512-b04b+cbdr29CdpREPKw/itrfjO43Ty0Aj7wRM6M6LoE4GJxZJCk9Xp+Eu1IqztkKh3LxIBt1tDplENsa6KYprg==} + engines: {node: '>=12.20'} + hasBin: true + dependencies: + cpy: 9.0.1 + meow: 10.1.5 + dev: true + /cpy/8.1.2: resolution: {integrity: sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==} engines: {node: '>=8'} @@ -11838,6 +11887,20 @@ packages: - supports-color dev: true + /cpy/9.0.1: + resolution: {integrity: sha512-D9U0DR5FjTCN3oMTcFGktanHnAG5l020yvOCR1zKILmAyPP7I/9pl6NFgRbDcmSENtbK1sQLBz1p9HIOlroiNg==} + engines: {node: ^12.20.0 || ^14.17.0 || >=16.0.0} + dependencies: + arrify: 3.0.0 + cp-file: 9.1.0 + globby: 13.1.2 + junk: 4.0.0 + micromatch: 4.0.5 + nested-error-stacks: 2.1.1 + p-filter: 3.0.0 + p-map: 5.5.0 + dev: true + /crc-32/1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} @@ -12211,6 +12274,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /decamelize/5.0.1: + resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} + engines: {node: '>=10'} + dev: true + /decimal.js/10.4.2: resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==} dev: true @@ -12834,6 +12902,11 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + /escape-string-regexp/5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: true + /escodegen/2.0.0: resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} engines: {node: '>=6.0'} @@ -14834,6 +14907,11 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + /indent-string/5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + dev: true + /infer-owner/1.0.4: resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} @@ -16474,6 +16552,11 @@ packages: engines: {node: '>=8'} dev: true + /junk/4.0.0: + resolution: {integrity: sha512-ojtSU++zLJ3jQG9bAYjg94w+/DOJtRyD7nPaerMFrBhmdVmiV5/exYH5t4uHga4G/95nT6hr1OJoKIFbYbrW5w==} + engines: {node: '>=12.20'} + dev: true + /just-extend/4.2.1: resolution: {integrity: sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==} dev: true @@ -17122,6 +17205,24 @@ packages: readable-stream: 2.3.7 dev: true + /meow/10.1.5: + resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + '@types/minimist': 1.2.2 + camelcase-keys: 7.0.2 + decamelize: 5.0.1 + decamelize-keys: 1.1.0 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 8.0.0 + redent: 4.0.0 + trim-newlines: 4.0.2 + type-fest: 1.4.0 + yargs-parser: 20.2.9 + dev: true + /meow/3.7.0: resolution: {integrity: sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==} engines: {node: '>=0.10.0'} @@ -18054,6 +18155,13 @@ packages: p-map: 2.1.0 dev: true + /p-filter/3.0.0: + resolution: {integrity: sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-map: 5.5.0 + dev: true + /p-finally/1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} @@ -18112,6 +18220,13 @@ packages: dependencies: aggregate-error: 3.1.0 + /p-map/5.5.0: + resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} + engines: {node: '>=12'} + dependencies: + aggregate-error: 4.0.1 + dev: true + /p-retry/4.6.2: resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} engines: {node: '>=8'} @@ -18946,6 +19061,11 @@ packages: engines: {node: '>=8'} dev: true + /quick-lru/5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: true + /ramda/0.28.0: resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==} @@ -19430,6 +19550,15 @@ packages: type-fest: 0.8.1 dev: true + /read-pkg-up/8.0.0: + resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} + engines: {node: '>=12'} + dependencies: + find-up: 5.0.0 + read-pkg: 6.0.0 + type-fest: 1.4.0 + dev: true + /read-pkg/1.1.0: resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==} engines: {node: '>=0.10.0'} @@ -19450,6 +19579,16 @@ packages: type-fest: 0.6.0 dev: true + /read-pkg/6.0.0: + resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} + engines: {node: '>=12'} + dependencies: + '@types/normalize-package-data': 2.4.1 + normalize-package-data: 3.0.3 + parse-json: 5.2.0 + type-fest: 1.4.0 + dev: true + /read-yaml-file/1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} @@ -19534,6 +19673,14 @@ packages: strip-indent: 3.0.0 dev: true + /redent/4.0.0: + resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} + engines: {node: '>=12'} + dependencies: + indent-string: 5.0.0 + strip-indent: 4.0.0 + dev: true + /redux-devtools-themes/1.0.0: resolution: {integrity: sha512-hBWqdZX+dioMWnTjf8+uSm0q1wCdYO4kU5gERzHcMMbu0Qg7JDR42TnJ6GHJ6r7k/tIpsCSygc9U0ehAtR24TQ==} dependencies: @@ -20814,6 +20961,13 @@ packages: min-indent: 1.0.1 dev: true + /strip-indent/4.0.0: + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} + dependencies: + min-indent: 1.0.1 + dev: true + /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -21409,6 +21563,11 @@ packages: engines: {node: '>=8'} dev: true + /trim-newlines/4.0.2: + resolution: {integrity: sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==} + engines: {node: '>=12'} + dev: true + /trim-trailing-lines/1.1.4: resolution: {integrity: sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==} dev: true @@ -21636,6 +21795,11 @@ packages: engines: {node: '>=8'} dev: true + /type-fest/1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + dev: true + /type-fest/2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} @@ -22736,18 +22900,6 @@ packages: signal-exit: 3.0.7 dev: true - /ws/7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - /ws/8.9.0: resolution: {integrity: sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==} engines: {node: '>=10.0.0'}