diff --git a/.codecov.yml b/.codecov.yml index 58598d7c0e6..d295391be7a 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -1,15 +1,20 @@ -comment: off +codecov: + require_ci_to_pass: yes + +coverage: + precision: 2 + round: down + range: '50...100' parsers: - javascript: - enable_partials: yes + gcov: + branch_detection: + conditional: yes + loop: yes + method: no + macro: no -coverage: - status: - project: - default: - threshold: 4% - if_not_found: success - patch: - default: - if_not_found: success +comment: + layout: 'reach,diff,flags,files,footer' + behavior: default + require_changes: no diff --git a/.eslintignore b/.eslintignore index aafbffa5401..d1514bd87ba 100644 --- a/.eslintignore +++ b/.eslintignore @@ -15,6 +15,7 @@ test/**/bin/ test/**/binary/ test/**/index.js test/typescript/webpack.config.ts +test/config/error/syntax-error.js test/plugin/test-plugin/test/test-utils.js test/plugin/test-plugin/test/functional.test.js test/plugin/test-plugin/examples/simple/src/static-esm-module.js diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 2c8c47b7d89..be1637e991e 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -49,7 +49,7 @@ jobs: run: yarn lint build: - name: Tests - ${{ matrix.os }} - Node v${{ matrix.node-version }}, Webpack ${{ matrix.webpack-version }} + name: Tests and Coverage - ${{ matrix.os }} - Node v${{ matrix.node-version }}, Webpack ${{ matrix.webpack-version }} runs-on: ${{ matrix.os }} @@ -83,19 +83,16 @@ jobs: yarn bootstrap - name: Install webpack ${{ matrix.webpack-version }} - if: steps.cache.outputs.cache-hit != 'true' run: yarn add -W webpack@${{ matrix.webpack-version }} - name: Build - run: yarn build + run: yarn build:ci - - name: Run tests for webpack version ${{ matrix.webpack-version }} + - name: Test and Generate Coverage run: | yarn run lerna bootstrap yarn prepsuite - yarn test:ci - env: - CI: true + yarn test:coverage - name: Smoke Tests # TODO fix for windows @@ -104,6 +101,9 @@ jobs: env: CI: true + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v1 + commitlint: name: Lint Commit Messages runs-on: ubuntu-latest diff --git a/.nycrc b/.nycrc new file mode 100644 index 00000000000..24934c6b2c5 --- /dev/null +++ b/.nycrc @@ -0,0 +1,12 @@ +{ + "include": [ + "packages/**" + ], + "reporter": [ + "html", + "json", + "cobertura" + ], + "source-map": true, + "exclude-after-remap": false +} diff --git a/.prettierignore b/.prettierignore index a039fd52884..7050c6118d6 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,3 +4,6 @@ test/**/dist/ test/**/bin/ test/**/binary/ test/**/index.js +test/config/error/syntax-error.js +packages/webpack-cli/__tests__/test-assets/.yo-rc.json +test/build-errors/stats.json diff --git a/README.md b/README.md index d54b11821c1..bd3214acdb5 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ Get to know what are the available commands and arguments [here](./packages/webp ## Packages -We organize webpack CLI as a multi-package repository using [lerna](https://github.com/lerna/lerna). Every command has a dedicated subfolder in the `packages` Folder. Here's a summary of commands provided by the CLI. +We organize webpack CLI as a multi-package repository using [lerna](https://github.com/lerna/lerna). Every command has a dedicated subfolder in the `packages` folder. Here's a summary of commands provided by the CLI. ### Commands diff --git a/jest.config.js b/jest.config.js index 3880b9e4ce2..a2e0242435e 100644 --- a/jest.config.js +++ b/jest.config.js @@ -8,7 +8,7 @@ module.exports = { // transformIgnorePatterns: ['.*(node_modules)(?!.*webpack-cli.*).*$'], testEnvironment: 'node', collectCoverage: true, - coverageReporters: ['json', 'html', 'cobertura'], + coverageReporters: ['none'], transform: { '^.+\\.(ts)?$': 'ts-jest', }, @@ -17,5 +17,6 @@ module.exports = { watchPlugins: ['jest-watch-typeahead/filename', 'jest-watch-typeahead/testname'], setupFilesAfterEnv: ['/setupTest.js'], globalTeardown: '/scripts/cleanupTest.js', + globalSetup: '/scripts/globalSetup.js', modulePathIgnorePatterns: ['/test/loader/test-loader', '/test/plugin/test-plugin'], }; diff --git a/package.json b/package.json index 248cb7f4e3a..a967b769a0a 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,9 @@ "bootstrap": "lerna bootstrap", "clean": "del-cli \"*.tsbuildinfo\" \"packages/**/*.tsbuildinfo\" \"packages/!(webpack-cli)/lib/!(*.tpl)\" \"**/.yo-rc.json\"", "prebuild": "yarn clean", + "prebuild:ci": "yarn clean && node ./scripts/setupBuild.js", "build": "tsc --build", + "build:ci": "tsc --build", "watch": "tsc --build --watch", "commit": "git-cz", "lint:prettier": "prettier --list-different . \"!**/*.{js,ts}\" ", @@ -34,10 +36,11 @@ "fix": "yarn lint:eslint --fix && yarn lint:prettier --write", "prepsuite": "node scripts/prepareSuite.js", "pretest": "yarn build && yarn lint && yarn prepsuite", - "test": "jest --reporters=default --reporters=jest-junit", - "test:cli": "jest test --reporters=default --reporters=jest-junit --forceExit", - "test:packages": "jest packages/ --reporters=default --reporters=jest-junit --forceExit", + "test": "jest --reporters=default", + "test:cli": "jest test --reporters=default --forceExit", + "test:packages": "jest packages/ --reporters=default --forceExit", "test:ci": "yarn test:cli && yarn test:packages", + "test:coverage": "nyc jest --forceExit", "test:watch": "jest test/ packages/ --watch", "test:smoke": "smoketests/smoketests.sh", "publish:monorepo": "yarn build && lerna version && lerna publish from-git" @@ -54,13 +57,13 @@ "webpack": "4.x.x || 5.x.x" }, "devDependencies": { - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", + "@babel/core": "^7.12.3", + "@babel/preset-env": "^7.12.1", "@commitlint/cli": "^11.0.0", "@commitlint/config-lerna-scopes": "^11.0.0", - "@types/cross-spawn": "^6.0.1", - "@types/jest": "^25.1.4", - "@types/node": "13.9.8", + "@types/cross-spawn": "^6.0.2", + "@types/jest": "^26.0.15", + "@types/node": "^14.14.6", "@typescript-eslint/eslint-plugin": "^2.34.0", "@typescript-eslint/parser": "^2.34.0", "colorette": "^1.2.1", @@ -69,29 +72,29 @@ "concat-stream": "^2.0.0", "cz-customizable": "^6.3.0", "del-cli": "^3.0.1", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.11.0", + "eslint": "^7.12.1", + "eslint-config-prettier": "^6.15.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^3.1.4", - "execa": "^4.0.3", + "execa": "^4.1.0", "get-port": "^5.1.1", - "git-cz": "^4.7.0", - "husky": "^4.2.5", - "jest": "^25.2.3", - "jest-junit": "^11.1.0", + "git-cz": "^4.7.1", + "husky": "^4.3.0", + "jest": "^26.6.1", "jest-serializer-ansi": "^1.0.3", - "jest-watch-typeahead": "^0.5.0", + "jest-watch-typeahead": "^0.6.1", "lerna": "^3.22.1", - "lint-staged": "^10.2.11", - "prettier": "^2.0.5", + "lint-staged": "^10.5.0", + "nyc": "^15.1.0", + "prettier": "^2.1.2", "readable-stream": "^3.6.0", "rimraf": "^3.0.2", "strip-ansi": "^6.0.0", - "ts-jest": "^25.5.1", + "ts-jest": "^26.4.3", "typescript": "^3.9.7", - "webpack": "^5.1.0", + "webpack": "^5.3.0", "webpack-bundle-analyzer": "^3.9.0", - "webpack-dev-server": "3.10.3", + "webpack-dev-server": "^3.11.0", "yeoman-test": "^2.7.0" } } diff --git a/packages/generate-loader/CHANGELOG.md b/packages/generate-loader/CHANGELOG.md index f6f137046de..ee9faaeb027 100644 --- a/packages/generate-loader/CHANGELOG.md +++ b/packages/generate-loader/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.1.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generate-loader@1.0.2...@webpack-cli/generate-loader@1.1.0) (2020-11-04) + +### Features + +- export utils from core for other packages ([#2011](https://github.com/webpack/webpack-cli/issues/2011)) ([3004549](https://github.com/webpack/webpack-cli/commit/3004549c06b3fe00708d8e1eecf42419e0f72f66)) + ## [1.0.2](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generate-loader@1.0.1...@webpack-cli/generate-loader@1.0.2) (2020-10-19) **Note:** Version bump only for package @webpack-cli/generate-loader diff --git a/packages/generate-loader/package.json b/packages/generate-loader/package.json index 69b6e741566..fb8c6b72db1 100644 --- a/packages/generate-loader/package.json +++ b/packages/generate-loader/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/generate-loader", - "version": "1.0.2", + "version": "1.1.0", "description": "A scaffold for generating a loader", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -18,7 +18,7 @@ "templates" ], "dependencies": { - "@webpack-cli/generators": "^1.0.2", + "@webpack-cli/generators": "^1.1.0", "yeoman-environment": "^2.10.3" }, "peerDependencies": { diff --git a/packages/generate-loader/src/index.ts b/packages/generate-loader/src/index.ts index 40ffcefc346..ee7a7a6fa63 100644 --- a/packages/generate-loader/src/index.ts +++ b/packages/generate-loader/src/index.ts @@ -1,6 +1,8 @@ -import { loaderGenerator } from '@webpack-cli/generators'; import yeoman from 'yeoman-environment'; -import logger from 'webpack-cli/lib/utils/logger'; +import { loaderGenerator } from '@webpack-cli/generators'; +import { utils } from 'webpack-cli'; + +const { logger } = utils; /** * Runs a yeoman generator to create a new webpack loader project diff --git a/packages/generate-plugin/CHANGELOG.md b/packages/generate-plugin/CHANGELOG.md index 3021a3e02a7..c23551f2743 100644 --- a/packages/generate-plugin/CHANGELOG.md +++ b/packages/generate-plugin/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.1.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generate-plugin@1.0.2...@webpack-cli/generate-plugin@1.1.0) (2020-11-04) + +### Features + +- export utils from core for other packages ([#2011](https://github.com/webpack/webpack-cli/issues/2011)) ([3004549](https://github.com/webpack/webpack-cli/commit/3004549c06b3fe00708d8e1eecf42419e0f72f66)) + ## [1.0.2](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generate-plugin@1.0.1...@webpack-cli/generate-plugin@1.0.2) (2020-10-19) **Note:** Version bump only for package @webpack-cli/generate-plugin diff --git a/packages/generate-plugin/package.json b/packages/generate-plugin/package.json index 1dffd191dd5..9d49f9d1ab4 100644 --- a/packages/generate-plugin/package.json +++ b/packages/generate-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/generate-plugin", - "version": "1.0.2", + "version": "1.1.0", "description": "A scaffold for generating a plugin", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -18,7 +18,7 @@ "templates" ], "dependencies": { - "@webpack-cli/generators": "^1.0.2", + "@webpack-cli/generators": "^1.1.0", "yeoman-environment": "^2.10.3" }, "peerDependencies": { diff --git a/packages/generate-plugin/src/index.ts b/packages/generate-plugin/src/index.ts index abc32312534..3e5d4d55568 100644 --- a/packages/generate-plugin/src/index.ts +++ b/packages/generate-plugin/src/index.ts @@ -1,6 +1,8 @@ import { pluginGenerator } from '@webpack-cli/generators'; import yeoman from 'yeoman-environment'; -import logger from 'webpack-cli/lib/utils/logger'; +import { utils } from 'webpack-cli'; + +const { logger } = utils; /** * Runs a yeoman generator to create a new webpack plugin project diff --git a/packages/generators/CHANGELOG.md b/packages/generators/CHANGELOG.md index 609dd559028..4d555e018ea 100644 --- a/packages/generators/CHANGELOG.md +++ b/packages/generators/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.1.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generators@1.0.2...@webpack-cli/generators@1.1.0) (2020-11-04) + +### Bug Fixes + +- **generators:** correct optimization.splitChunks option in config ([#2008](https://github.com/webpack/webpack-cli/issues/2008)) ([f86ef2d](https://github.com/webpack/webpack-cli/commit/f86ef2d6c0a4cba3b2002baf32b78e06cbaafc4a)) + +### Features + +- export utils from core for other packages ([#2011](https://github.com/webpack/webpack-cli/issues/2011)) ([3004549](https://github.com/webpack/webpack-cli/commit/3004549c06b3fe00708d8e1eecf42419e0f72f66)) + ## [1.0.2](https://github.com/webpack/webpack-cli/compare/@webpack-cli/generators@1.0.1...@webpack-cli/generators@1.0.2) (2020-10-19) ### Bug Fixes diff --git a/packages/generators/README.md b/packages/generators/README.md index 3e94f4d5bcd..22e7a447242 100644 --- a/packages/generators/README.md +++ b/packages/generators/README.md @@ -26,10 +26,10 @@ const { addonGenerator, initGenerator, loaderGenerator, pluginGenerator } = requ ## Generators -- [**Plugin Generator**](https://github.com/webpack/webpack-cli/blob/master/packages/generators/plugin-generator.ts) : Creates a webpack plugin project, add starter plugin code and runs `webpack-defaults` -- [**Loader Generator**](https://github.com/webpack/webpack-cli/blob/master/packages/generators/loader-generator.ts) : Creates a webpack loader project, add starter loader code and runs `webpack-defaults` -- [**Init Generator**](https://github.com/webpack/webpack-cli/blob/master/packages/generators/init-generator.ts) : Generates new webapck configuration as per user requirements -- [**Addon Generator**](https://github.com/webpack/webpack-cli/blob/master/packages/generators/addon-generator.ts) : Generates a webpack project conforming to `webpack-defaults` +- [**Plugin Generator**](https://github.com/webpack/webpack-cli/blob/master/packages/generators/src/plugin-generator.ts) : Creates a webpack plugin project, add starter plugin code and runs `webpack-defaults` +- [**Loader Generator**](https://github.com/webpack/webpack-cli/blob/master/packages/generators/src/loader-generator.ts) : Creates a webpack loader project, add starter loader code and runs `webpack-defaults` +- [**Init Generator**](https://github.com/webpack/webpack-cli/blob/master/packages/generators/src/init-generator.ts) : Generates new webapck configuration as per user requirements +- [**Addon Generator**](https://github.com/webpack/webpack-cli/blob/master/packages/generators/src/addon-generator.ts) : Generates a webpack project conforming to `webpack-defaults` --- diff --git a/packages/generators/__tests__/__snapshots__/init-generator.test.ts.snap b/packages/generators/__tests__/__snapshots__/init-generator.test.ts.snap new file mode 100644 index 00000000000..fe0ae1fbe63 --- /dev/null +++ b/packages/generators/__tests__/__snapshots__/init-generator.test.ts.snap @@ -0,0 +1,275 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`init generator generates a webpack config that uses ES6 1`] = ` +Object { + "mode": "'development'", + "module": Object { + "rules": Array [ + Object { + "include": Array [ + "path.resolve(__dirname, 'src')", + ], + "loader": "'babel-loader'", + "test": "/\\\\.(js|jsx)$/", + }, + ], + }, + "optimization": Object { + "minimizer": Array [ + "new TerserPlugin()", + ], + "splitChunks": Object { + "cacheGroups": Object { + "vendors": Object { + "priority": -10, + "test": "/[\\\\\\\\/]node_modules[\\\\\\\\/]/", + }, + }, + "chunks": "'async'", + "minChunks": 1, + "minSize": 30000, + "name": false, + }, + }, + "plugins": Array [ + "new webpack.ProgressPlugin()", + ], +} +`; + +exports[`init generator generates a webpack config that uses Typescript 1`] = ` +Object { + "entry": "'./src/index.ts'", + "mode": "'development'", + "module": Object { + "rules": Array [ + Object { + "exclude": Array [ + "/node_modules/", + ], + "include": Array [ + "path.resolve(__dirname, 'src')", + ], + "loader": "'ts-loader'", + "test": "/\\\\.(ts|tsx)$/", + }, + ], + }, + "optimization": Object { + "minimizer": Array [ + "new TerserPlugin()", + ], + "splitChunks": Object { + "cacheGroups": Object { + "vendors": Object { + "priority": -10, + "test": "/[\\\\\\\\/]node_modules[\\\\\\\\/]/", + }, + }, + "chunks": "'async'", + "minChunks": 1, + "minSize": 30000, + "name": false, + }, + }, + "plugins": Array [ + "new webpack.ProgressPlugin()", + ], + "resolve": Object { + "extensions": Array [ + "'.tsx'", + "'.ts'", + "'.js'", + ], + }, +} +`; + +exports[`init generator generates a webpack config using CSS with mini-css-extract-plugin 1`] = ` +Object { + "mode": "'development'", + "module": Object { + "rules": Array [ + Object { + "test": "/.css$/", + "use": Array [ + Object { + "loader": "MiniCssExtractPlugin.loader", + }, + Object { + "loader": "\\"style-loader\\"", + }, + Object { + "loader": "\\"css-loader\\"", + "options": Object { + "sourceMap": true, + }, + }, + ], + }, + ], + }, + "optimization": Object { + "minimizer": Array [ + "new TerserPlugin()", + ], + "splitChunks": Object { + "cacheGroups": Object { + "vendors": Object { + "priority": -10, + "test": "/[\\\\\\\\/]node_modules[\\\\\\\\/]/", + }, + }, + "chunks": "'async'", + "minChunks": 1, + "minSize": 30000, + "name": false, + }, + }, + "plugins": Array [ + "new webpack.ProgressPlugin()", + "new MiniCssExtractPlugin({ filename:'main.[chunkhash].css' })", + ], +} +`; + +exports[`init generator generates a webpack config using CSS without mini-css-extract-plugin 1`] = ` +Object { + "mode": "'development'", + "module": Object { + "rules": Array [ + Object { + "test": "/.css$/", + "use": Array [ + Object { + "loader": "\\"style-loader\\"", + }, + Object { + "loader": "\\"css-loader\\"", + "options": Object { + "sourceMap": true, + }, + }, + ], + }, + ], + }, + "optimization": Object { + "minimizer": Array [ + "new TerserPlugin()", + ], + "splitChunks": Object { + "cacheGroups": Object { + "vendors": Object { + "priority": -10, + "test": "/[\\\\\\\\/]node_modules[\\\\\\\\/]/", + }, + }, + "chunks": "'async'", + "minChunks": 1, + "minSize": 30000, + "name": false, + }, + }, + "plugins": Array [ + "new webpack.ProgressPlugin()", + ], +} +`; + +exports[`init generator generates a webpack config with custom entry and output 1`] = ` +Object { + "entry": "'./src/index2.js'", + "mode": "'development'", + "module": Object { + "rules": Array [], + }, + "optimization": Object { + "minimizer": Array [ + "new TerserPlugin()", + ], + "splitChunks": Object { + "cacheGroups": Object { + "vendors": Object { + "priority": -10, + "test": "/[\\\\\\\\/]node_modules[\\\\\\\\/]/", + }, + }, + "chunks": "'async'", + "minChunks": 1, + "minSize": 30000, + "name": false, + }, + }, + "output": Object { + "path": "path.resolve(__dirname, 'dist2')", + }, + "plugins": Array [ + "new webpack.ProgressPlugin()", + ], +} +`; + +exports[`init generator generates a webpack config with default options 1`] = ` +Object { + "devServer": Object { + "open": true, + }, + "mode": "'production'", + "module": Object { + "rules": Array [], + }, + "optimization": Object { + "minimizer": Array [ + "new TerserPlugin()", + ], + "splitChunks": Object { + "chunks": "'all'", + }, + }, + "plugins": Array [ + "new webpack.ProgressPlugin()", + "new HtmlWebpackPlugin({ + template: 'index.html' + })", + "new workboxPlugin.GenerateSW({ + swDest: 'sw.js', + clientsClaim: true, + skipWaiting: false, + })", + ], +} +`; + +exports[`init generator generates a webpack config with multiple entries 1`] = ` +Object { + "entry": Object { + "test1": "'./dir1/test1.js'", + "test2": "'./dir2/test2.js'", + }, + "mode": "'development'", + "module": Object { + "rules": Array [], + }, + "optimization": Object { + "minimizer": Array [ + "new TerserPlugin()", + ], + "splitChunks": Object { + "cacheGroups": Object { + "vendors": Object { + "priority": -10, + "test": "/[\\\\\\\\/]node_modules[\\\\\\\\/]/", + }, + }, + "chunks": "'async'", + "minChunks": 1, + "minSize": 30000, + "name": false, + }, + }, + "plugins": Array [ + "new webpack.ProgressPlugin()", + ], +} +`; diff --git a/packages/generators/__tests__/addon-generator.test.ts b/packages/generators/__tests__/addon-generator.test.ts index d0958cd59f9..5c67838f3d7 100644 --- a/packages/generators/__tests__/addon-generator.test.ts +++ b/packages/generators/__tests__/addon-generator.test.ts @@ -4,11 +4,12 @@ jest.setMock('@webpack-cli/utils', { import fs from 'fs'; import path from 'path'; -import mkdirp from 'mkdirp'; import rimraf from 'rimraf'; -import { getPackageManager } from 'webpack-cli/lib/utils/get-package-manager'; +import { utils } from 'webpack-cli'; import addonGenerator from '../src/addon-generator'; +const { getPackageManager } = utils; + // TODO: enable after jest release describe.skip('addon generator', () => { let gen, installMock, packageMock; @@ -22,7 +23,7 @@ describe.skip('addon generator', () => { beforeAll(() => { rimraf.sync(testAssetsPath); - mkdirp.sync(genPath); + fs.mkdirSync(genPath, { recursive: true }); // set the working directory to here so that the addon directory is // generated in ./test-assets/test-addon process.chdir(genPath); diff --git a/packages/generators/__tests__/init-generator.test.ts b/packages/generators/__tests__/init-generator.test.ts index 75785b1f03e..e2982256e3d 100644 --- a/packages/generators/__tests__/init-generator.test.ts +++ b/packages/generators/__tests__/init-generator.test.ts @@ -32,6 +32,8 @@ describe('init generator', () => { expect(config.output).toEqual(undefined); // there are no special loaders, so rules should be empty expect(config.module.rules).toEqual([]); + // match config snapshot + expect(config).toMatchSnapshot(); }); it('generates a webpack config with custom entry and output', async () => { @@ -61,6 +63,8 @@ describe('init generator', () => { expect(config.output.path).toEqual("path.resolve(__dirname, 'dist2')"); // there are no special loaders, so rules should be empty expect(config.module.rules).toEqual([]); + //match config snapshot + expect(config).toMatchSnapshot(); }); it('generates a webpack config using CSS without mini-css-extract-plugin', async () => { @@ -85,6 +89,8 @@ describe('init generator', () => { expect(config.module.rules[0].use.length).toEqual(2); expect(config.module.rules[0].use[0].loader).toEqual('"style-loader"'); expect(config.module.rules[0].use[1].loader).toEqual('"css-loader"'); + //match config snapshot + expect(config).toMatchSnapshot(); }); it('generates a webpack config using CSS with mini-css-extract-plugin', async () => { @@ -111,6 +117,8 @@ describe('init generator', () => { expect(config.module.rules[0].use[0].loader).toEqual('MiniCssExtractPlugin.loader'); expect(config.module.rules[0].use[1].loader).toEqual('"style-loader"'); expect(config.module.rules[0].use[2].loader).toEqual('"css-loader"'); + //match config snapshot + expect(config).toMatchSnapshot(); }); it('generates a webpack config with multiple entries', async () => { @@ -140,6 +148,8 @@ describe('init generator', () => { test1: "'./dir1/test1.js'", test2: "'./dir2/test2.js'", }); + //match config snapshot + expect(config).toMatchSnapshot(); }); it('generates a webpack config that uses ES6', async () => { @@ -166,6 +176,8 @@ describe('init generator', () => { loader: "'babel-loader'", }, ]); + //match config snapshot + expect(config).toMatchSnapshot(); }); it('generates a webpack config that uses Typescript', async () => { @@ -193,5 +205,7 @@ describe('init generator', () => { exclude: ['/node_modules/'], }, ]); + //match config snapshot + expect(config).toMatchSnapshot(); }); }); diff --git a/packages/generators/__tests__/utils/entry.test.ts b/packages/generators/__tests__/utils/entry.test.ts index 78ba29200f2..688382d4781 100644 --- a/packages/generators/__tests__/utils/entry.test.ts +++ b/packages/generators/__tests__/utils/entry.test.ts @@ -4,7 +4,6 @@ jest.setMock('@webpack-cli/webpack-scaffold', { }); import { Input, InputValidate } from '@webpack-cli/webpack-scaffold'; -// eslint-disable-next-line node/no-missing-import import entry from '../../lib/utils/entry'; describe('entry', () => { diff --git a/packages/generators/__tests__/utils/languageSupport.test.ts b/packages/generators/__tests__/utils/languageSupport.test.ts index 9d9161cc224..858eef018cf 100644 --- a/packages/generators/__tests__/utils/languageSupport.test.ts +++ b/packages/generators/__tests__/utils/languageSupport.test.ts @@ -1,6 +1,4 @@ -// eslint-disable-next-line node/no-missing-import import language, { LangType, getBabelLoader, getTypescriptLoader } from '../../lib/utils/languageSupport'; -// eslint-disable-next-line node/no-missing-import import { CustomGenerator } from '../../lib/types'; // TODO: enable after jest release diff --git a/packages/generators/__tests__/utils/plugins.test.ts b/packages/generators/__tests__/utils/plugins.test.ts index 8c87df4530e..35c7fe8ecc2 100644 --- a/packages/generators/__tests__/utils/plugins.test.ts +++ b/packages/generators/__tests__/utils/plugins.test.ts @@ -1,4 +1,3 @@ -// eslint-disable-next-line node/no-missing-import import { replaceAt, generatePluginName } from '../../lib/utils/plugins'; describe('generate plugin name', () => { diff --git a/packages/generators/__tests__/utils/styleSupport.test.ts b/packages/generators/__tests__/utils/styleSupport.test.ts index 3eb4a0ce4a9..550b95a9ebb 100644 --- a/packages/generators/__tests__/utils/styleSupport.test.ts +++ b/packages/generators/__tests__/utils/styleSupport.test.ts @@ -1,6 +1,4 @@ -// eslint-disable-next-line node/no-missing-import import style, { StylingType } from '../../lib/utils/styleSupport'; -// eslint-disable-next-line node/no-missing-import import { CustomGenerator } from '../../lib/types'; // TODO: enable after jest release diff --git a/packages/generators/package.json b/packages/generators/package.json index 1fb24fe7d30..571b8ff9f80 100644 --- a/packages/generators/package.json +++ b/packages/generators/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/generators", - "version": "1.0.2", + "version": "1.1.0", "description": "Webpack-CLI generators", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -14,11 +14,10 @@ "templates" ], "dependencies": { - "@webpack-cli/utils": "^1.0.2", - "@webpack-cli/webpack-scaffold": "^1.0.2", + "@webpack-cli/utils": "^1.1.0", + "@webpack-cli/webpack-scaffold": "^1.0.3", "colorette": "^1.2.1", "log-symbols": "^4.0.0", - "mkdirp": "^1.0.4", "yeoman-generator": "^4.12.0" }, "peerDependencies": { @@ -26,10 +25,9 @@ "webpack-cli": "4.x.x" }, "devDependencies": { - "@types/mkdirp": "^1.0.0", "@types/yeoman-assert": "^3.1.1", - "@types/yeoman-generator": "^4.11.2", - "@types/yeoman-test": "^2.0.3", + "@types/yeoman-generator": "^4.11.3", + "@types/yeoman-test": "^2.0.5", "rimraf": "^3.0.2", "yeoman-assert": "^3.1.1", "yeoman-test": "^2.3.0" diff --git a/packages/generators/src/addon-generator.ts b/packages/generators/src/addon-generator.ts index 10fb9936512..37e99297852 100644 --- a/packages/generators/src/addon-generator.ts +++ b/packages/generators/src/addon-generator.ts @@ -1,9 +1,11 @@ -import logger from 'webpack-cli/lib/utils/logger'; -import mkdirp from 'mkdirp'; +import fs from 'fs'; import path from 'path'; import Generator from 'yeoman-generator'; import { generatorCopy, generatorCopyTpl } from '@webpack-cli/utils'; -import { getPackageManager } from 'webpack-cli/lib/utils/get-package-manager'; + +import { utils } from 'webpack-cli'; + +const { logger, getPackageManager } = utils; /** * Creates a Yeoman Generator that generates a project conforming @@ -53,7 +55,7 @@ const addonGenerator = ( `); const pathToProjectDir: string = this.destinationPath(this.props.name); try { - mkdirp.sync(pathToProjectDir); + fs.mkdirSync(pathToProjectDir, { recursive: true }); } catch (error) { logger.error('Failed to create directory'); logger.error(error); diff --git a/packages/generators/src/init-generator.ts b/packages/generators/src/init-generator.ts index 3cc7fa85021..e77fdc3cb5a 100644 --- a/packages/generators/src/init-generator.ts +++ b/packages/generators/src/init-generator.ts @@ -1,8 +1,7 @@ import { blue, green, bold } from 'colorette'; -import logger from 'webpack-cli/lib/utils/logger'; +import { utils } from 'webpack-cli'; import logSymbols from 'log-symbols'; import path from 'path'; -import { getPackageManager } from 'webpack-cli/lib/utils/get-package-manager'; import { Confirm, Input, List } from '@webpack-cli/webpack-scaffold'; import { @@ -17,6 +16,8 @@ import { } from './utils'; import { CustomGenerator } from './types'; +const { logger, getPackageManager } = utils; + /** * * Generator for initializing a webpack config diff --git a/packages/generators/src/utils/webpackConfig.ts b/packages/generators/src/utils/webpackConfig.ts index 40a24444f7e..b849bd3745e 100644 --- a/packages/generators/src/utils/webpackConfig.ts +++ b/packages/generators/src/utils/webpackConfig.ts @@ -15,7 +15,7 @@ export function getDefaultOptimization(usingDefaults: boolean): WebpackOptions[' chunks: "'async'", minChunks: 1, minSize: 30000, - name: !usingDefaults, + name: false, }, }; } else { diff --git a/packages/info/CHANGELOG.md b/packages/info/CHANGELOG.md index 17a07d5a558..10bea6d66c9 100644 --- a/packages/info/CHANGELOG.md +++ b/packages/info/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.1.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/info@1.0.2...@webpack-cli/info@1.1.0) (2020-11-04) + +### Bug Fixes + +- **info:** throw error and exit for invalid --output value ([#2020](https://github.com/webpack/webpack-cli/issues/2020)) ([a994d4b](https://github.com/webpack/webpack-cli/commit/a994d4b52a99b3b77d25aac88f741e036a1c44ec)) + +### Features + +- export utils from core for other packages ([#2011](https://github.com/webpack/webpack-cli/issues/2011)) ([3004549](https://github.com/webpack/webpack-cli/commit/3004549c06b3fe00708d8e1eecf42419e0f72f66)) + ## [1.0.2](https://github.com/webpack/webpack-cli/compare/@webpack-cli/info@1.0.1...@webpack-cli/info@1.0.2) (2020-10-19) **Note:** Version bump only for package @webpack-cli/info diff --git a/packages/info/package.json b/packages/info/package.json index c58d97bdd4d..b046d31af49 100644 --- a/packages/info/package.json +++ b/packages/info/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/info", - "version": "1.0.2", + "version": "1.1.0", "description": "Outputs info about system and webpack config", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/info/src/index.ts b/packages/info/src/index.ts index 12594e1f6bc..fc8e0c23eab 100644 --- a/packages/info/src/index.ts +++ b/packages/info/src/index.ts @@ -1,7 +1,8 @@ import envinfo from 'envinfo'; -import logger from 'webpack-cli/lib/utils/logger'; -import { commands } from 'webpack-cli/lib/utils/cli-flags'; import WebpackCLI from 'webpack-cli'; +import { utils } from 'webpack-cli'; + +const { logger, commands } = utils; interface Information { Binaries?: string[]; @@ -53,7 +54,8 @@ export default async function info(...args): Promise { envinfoConfig['json'] = true; break; default: - logger.error(`${infoArgs.output} is not a valid value for output\n`); + logger.error(`'${infoArgs.output}' is not a valid value for output`); + process.exit(2); } } diff --git a/packages/init/CHANGELOG.md b/packages/init/CHANGELOG.md index 2876ca46540..862a63fe3ad 100644 --- a/packages/init/CHANGELOG.md +++ b/packages/init/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.0.3](https://github.com/webpack/webpack-cli/compare/@webpack-cli/init@1.0.2...@webpack-cli/init@1.0.3) (2020-11-04) + +**Note:** Version bump only for package @webpack-cli/init + ## [1.0.2](https://github.com/webpack/webpack-cli/compare/@webpack-cli/init@1.0.1...@webpack-cli/init@1.0.2) (2020-10-19) **Note:** Version bump only for package @webpack-cli/init diff --git a/packages/init/package.json b/packages/init/package.json index 9d95ee69556..7a407d6f876 100644 --- a/packages/init/package.json +++ b/packages/init/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/init", - "version": "1.0.2", + "version": "1.0.3", "description": "init command for webpack-cli", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -12,8 +12,8 @@ "lib" ], "dependencies": { - "@webpack-cli/generators": "^1.0.2", - "@webpack-cli/utils": "^1.0.2" + "@webpack-cli/generators": "^1.1.0", + "@webpack-cli/utils": "^1.1.0" }, "peerDependencies": { "webpack": "4.x.x || 5.x.x", diff --git a/packages/migrate/CHANGELOG.md b/packages/migrate/CHANGELOG.md index 1896dad1798..660698111cb 100644 --- a/packages/migrate/CHANGELOG.md +++ b/packages/migrate/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.1.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/migrate@1.0.2...@webpack-cli/migrate@1.1.0) (2020-11-04) + +### Features + +- export utils from core for other packages ([#2011](https://github.com/webpack/webpack-cli/issues/2011)) ([3004549](https://github.com/webpack/webpack-cli/commit/3004549c06b3fe00708d8e1eecf42419e0f72f66)) + ## [1.0.2](https://github.com/webpack/webpack-cli/compare/@webpack-cli/migrate@1.0.1...@webpack-cli/migrate@1.0.2) (2020-10-19) **Note:** Version bump only for package @webpack-cli/migrate diff --git a/packages/migrate/package.json b/packages/migrate/package.json index 705eacf544d..3646191812b 100644 --- a/packages/migrate/package.json +++ b/packages/migrate/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/migrate", - "version": "1.0.2", + "version": "1.1.0", "description": "Migrate command for webpack-cli", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -12,11 +12,11 @@ "lib" ], "dependencies": { - "@webpack-cli/utils": "^1.0.2", + "@webpack-cli/utils": "^1.1.0", "colorette": "^1.2.1", "diff": "^4.0.2", - "inquirer": "^7.1.0", - "jscodeshift": "^0.7.0", + "inquirer": "^7.3.3", + "jscodeshift": "^0.11.0", "listr": "^0.14.3", "p-each-series": "^2.1.0", "p-lazy": "^3.0.0" @@ -27,7 +27,7 @@ }, "devDependencies": { "@types/diff": "^4.0.2", - "@types/inquirer": "^6.5.0", + "@types/inquirer": "^7.3.1", "@types/listr": "^0.14.2" }, "gitHead": "fb50f766851f500ca12867a2aa9de81fa6e368f9" diff --git a/packages/migrate/src/index.ts b/packages/migrate/src/index.ts index cb499c0d832..1a14eccc127 100644 --- a/packages/migrate/src/index.ts +++ b/packages/migrate/src/index.ts @@ -2,7 +2,6 @@ import { green, red } from 'colorette'; import { Change, diffLines } from 'diff'; import fs from 'fs'; import inquirer from 'inquirer'; -import logger from 'webpack-cli/lib/utils/logger'; import Listr from 'listr'; import pLazy = require('p-lazy'); import path from 'path'; @@ -11,6 +10,9 @@ import { runPrettier } from '@webpack-cli/utils'; import { transformations } from './migrate'; import { Node } from './types/NodePath'; import jscodeshift from 'jscodeshift'; +import { utils } from 'webpack-cli'; + +const { logger } = utils; declare let process: { cwd: Function; diff --git a/packages/migrate/src/removeDeprecatedPlugins/removeDeprecatedPlugins.ts b/packages/migrate/src/removeDeprecatedPlugins/removeDeprecatedPlugins.ts index 9e48d1b6d52..12d270e48e8 100644 --- a/packages/migrate/src/removeDeprecatedPlugins/removeDeprecatedPlugins.ts +++ b/packages/migrate/src/removeDeprecatedPlugins/removeDeprecatedPlugins.ts @@ -1,11 +1,13 @@ import { red, underline } from 'colorette'; -import logger from 'webpack-cli/lib/utils/logger'; - import { findPluginsByName, isType, safeTraverse } from '@webpack-cli/utils'; import { JSCodeshift, Node } from '../types/NodePath'; +import { utils } from 'webpack-cli'; + +const { logger } = utils; + /** * * Find deprecated plugins and remove them from the `plugins` array, if possible. diff --git a/packages/serve/CHANGELOG.md b/packages/serve/CHANGELOG.md index 3d788f5f3da..6c0ba1a0279 100644 --- a/packages/serve/CHANGELOG.md +++ b/packages/serve/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.1.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/serve@1.0.1...@webpack-cli/serve@1.1.0) (2020-11-04) + +### Bug Fixes + +- resolve dev server hot options correctly ([#2022](https://github.com/webpack/webpack-cli/issues/2022)) ([7c5a2ba](https://github.com/webpack/webpack-cli/commit/7c5a2bae49625ee4982d7478b7e741968731cea2)) + +### Features + +- add WEBPACK_SERVE environment variable ([#2027](https://github.com/webpack/webpack-cli/issues/2027)) ([ea369a9](https://github.com/webpack/webpack-cli/commit/ea369a98ea5ec366b688caebcb1276d9fbe0c651)) +- export utils from core for other packages ([#2011](https://github.com/webpack/webpack-cli/issues/2011)) ([3004549](https://github.com/webpack/webpack-cli/commit/3004549c06b3fe00708d8e1eecf42419e0f72f66)) + ## [1.0.1](https://github.com/webpack/webpack-cli/compare/@webpack-cli/serve@1.0.1-rc.1...@webpack-cli/serve@1.0.1) (2020-10-10) **Note:** Version bump only for package @webpack-cli/serve diff --git a/packages/serve/__tests__/__snapshots__/parseArgs.test.ts.snap b/packages/serve/__tests__/__snapshots__/parseArgs.test.ts.snap index 16d37efbca2..ed8b7e3084c 100644 --- a/packages/serve/__tests__/__snapshots__/parseArgs.test.ts.snap +++ b/packages/serve/__tests__/__snapshots__/parseArgs.test.ts.snap @@ -11,6 +11,9 @@ Object { }, "webpackArgs": Object { "color": true, + "env": Object { + "WEBPACK_SERVE": true, + }, "hot": true, }, } @@ -39,6 +42,9 @@ Object { }, "webpackArgs": Object { "color": true, + "env": Object { + "WEBPACK_SERVE": true, + }, "mode": "development", }, } diff --git a/packages/serve/__tests__/createConfig.test.ts b/packages/serve/__tests__/createConfig.test.ts index 3f23534a8cd..96a08c483e0 100644 --- a/packages/serve/__tests__/createConfig.test.ts +++ b/packages/serve/__tests__/createConfig.test.ts @@ -27,7 +27,7 @@ describe('createConfig', () => { hotOnly: true, }; expect(createConfig(args)).toEqual({ - hot: 'only', + hotOnly: true, }); }); @@ -37,7 +37,8 @@ describe('createConfig', () => { hotOnly: true, }; expect(createConfig(args)).toEqual({ - hot: 'only', + hot: true, + hotOnly: true, }); }); }); diff --git a/packages/serve/package.json b/packages/serve/package.json index d68d206f1a8..e752d1e7fd3 100644 --- a/packages/serve/package.json +++ b/packages/serve/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/serve", - "version": "1.0.1", + "version": "1.1.0", "description": "", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/serve/src/createConfig.ts b/packages/serve/src/createConfig.ts index bf5d23d909e..94571608122 100644 --- a/packages/serve/src/createConfig.ts +++ b/packages/serve/src/createConfig.ts @@ -1,5 +1,9 @@ +import { utils } from 'webpack-cli'; + import { devServerOptionsType } from './types'; +const { logger } = utils; + /** * * Creates a devServer config from CLI args @@ -10,6 +14,16 @@ import { devServerOptionsType } from './types'; */ export default function createConfig(args): devServerOptionsType { const options = { ...args }; + let isDevServer4 = false, + devServerVersion; + try { + // eslint-disable-next-line node/no-extraneous-require + devServerVersion = require('webpack-dev-server/package.json').version; + } catch (err) { + logger.error(`You need to install 'webpack-dev-server' for running 'webpack serve'.\n${err}`); + process.exit(2); + } + isDevServer4 = devServerVersion.startsWith('4'); if (options.clientLogging) { options.client = { @@ -18,8 +32,7 @@ export default function createConfig(args): devServerOptionsType { // clientLogging is not a valid devServer option delete options.clientLogging; } - - if (options.hotOnly) { + if (isDevServer4 && options.hotOnly) { options.hot = 'only'; // hotOnly is not a valid devServer option delete options.hotOnly; diff --git a/packages/serve/src/index.ts b/packages/serve/src/index.ts index c56ebacc4f4..2fddad08321 100644 --- a/packages/serve/src/index.ts +++ b/packages/serve/src/index.ts @@ -1,7 +1,9 @@ -import WebpackCLI from 'webpack-cli'; +import WebpackCLI, { utils } from 'webpack-cli'; import startDevServer from './startDevServer'; import parseArgs from './parseArgs'; +const { logger } = utils; + /** * * Creates a webpack compiler and runs the devServer @@ -10,12 +12,18 @@ import parseArgs from './parseArgs'; * @returns {Function} invokes the devServer API */ export default function serve(...args: string[]): void { + try { + // eslint-disable-next-line node/no-extraneous-require + require('webpack-dev-server'); + } catch (err) { + logger.error(`You need to install 'webpack-dev-server' for running 'webpack serve'.\n${err}`); + process.exit(2); + } const cli = new WebpackCLI(); - const core = cli.getCoreFlags(); const { webpackArgs, devServerArgs } = parseArgs(cli, args); - cli.getCompiler(webpackArgs, core).then((compiler): void => { + cli.getCompiler(webpackArgs).then((compiler): void => { startDevServer(compiler, devServerArgs); }); } diff --git a/packages/serve/src/parseArgs.ts b/packages/serve/src/parseArgs.ts index ff4cb7ddf63..0b956f43932 100644 --- a/packages/serve/src/parseArgs.ts +++ b/packages/serve/src/parseArgs.ts @@ -1,4 +1,6 @@ -import logger from 'webpack-cli/lib/utils/logger'; +import { utils } from 'webpack-cli'; + +const { logger } = utils; type WebpackCLIType = { getCoreFlags: Function; @@ -21,12 +23,13 @@ type ArgsType = { * @returns {Object} parsed webpack args and dev server args objects */ export default function parseArgs(cli: WebpackCLIType, args: string[]): ArgsType { - let devServerFlags: object[]; + let devServerFlags; try { // eslint-disable-next-line node/no-extraneous-require devServerFlags = require('webpack-dev-server/bin/cli-flags').devServer; } catch (err) { - throw new Error(`You need to install 'webpack-dev-server' for running 'webpack serve'.\n${err}`); + logger.error(`You need to install 'webpack-dev-server' for running 'webpack serve'.\n${err}`); + process.exit(2); } const core = cli.getCoreFlags(); @@ -36,6 +39,13 @@ export default function parseArgs(cli: WebpackCLIType, args: string[]): ArgsType const parsedWebpackArgs = cli.argParser(core, parsedDevServerArgs.unknownArgs, true, process.title); const webpackArgs = parsedWebpackArgs.opts; + // Add WEBPACK_SERVE environment variable + if (webpackArgs.env) { + webpackArgs.env.WEBPACK_SERVE = true; + } else { + webpackArgs.env = { WEBPACK_SERVE: true }; + } + // pass along the 'hot' argument to the dev server if it exists if (webpackArgs && webpackArgs.hot !== undefined) { devServerArgs['hot'] = webpackArgs.hot; diff --git a/packages/serve/src/startDevServer.ts b/packages/serve/src/startDevServer.ts index cb930d98aec..4388ae77d97 100644 --- a/packages/serve/src/startDevServer.ts +++ b/packages/serve/src/startDevServer.ts @@ -22,7 +22,6 @@ export default function startDevServer(compiler, devServerArgs): object[] { const usedPorts: number[] = []; devServerOptions.forEach((devServerOpts): void => { const options = mergeOptions(cliOptions, devServerOpts); - options.host = options.host || 'localhost'; options.port = options.port || 8080; diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md index 6d302c95d4d..7736c48bd47 100644 --- a/packages/utils/CHANGELOG.md +++ b/packages/utils/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.1.0](https://github.com/webpack/webpack-cli/compare/@webpack-cli/utils@1.0.2...@webpack-cli/utils@1.1.0) (2020-11-04) + +### Features + +- export utils from core for other packages ([#2011](https://github.com/webpack/webpack-cli/issues/2011)) ([3004549](https://github.com/webpack/webpack-cli/commit/3004549c06b3fe00708d8e1eecf42419e0f72f66)) + ## [1.0.2](https://github.com/webpack/webpack-cli/compare/@webpack-cli/utils@1.0.1...@webpack-cli/utils@1.0.2) (2020-10-19) **Note:** Version bump only for package @webpack-cli/utils diff --git a/packages/utils/__tests__/global-packages-path.test.ts b/packages/utils/__tests__/global-packages-path.test.ts index a36c469bfdb..5aa77543595 100644 --- a/packages/utils/__tests__/global-packages-path.test.ts +++ b/packages/utils/__tests__/global-packages-path.test.ts @@ -1,10 +1,11 @@ 'use strict'; -jest.setMock('webpack-cli/lib/utils/get-package-manager', { - getPackageManager: jest.fn(), -}); -// eslint-disable-next-line node/no-missing-import +jest.setMock('webpack-cli/lib/utils/get-package-manager', jest.fn()); + import { getPathToGlobalPackages } from '../lib/global-packages-path'; -import { getPackageManager } from 'webpack-cli/lib/utils/get-package-manager'; +import { utils } from 'webpack-cli'; + +const { getPackageManager } = utils; + jest.mock('execa'); jest.mock('cross-spawn'); const globalModulesNpmValue = 'test-npm'; diff --git a/packages/utils/package.json b/packages/utils/package.json index 26ad2dc1b04..36bd4bbb257 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/utils", - "version": "1.0.2", + "version": "1.1.0", "description": "webpack-cli utility files", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -14,14 +14,14 @@ "dependencies": { "colorette": "^1.2.1", "cross-spawn": "^7.0.3", - "execa": "^4.0.0", + "execa": "^4.1.0", "findup-sync": "^4.0.0", "global-modules": "^2.0.0", - "got": "^10.7.0", - "jscodeshift": "^0.7.0", + "got": "^11.8.0", + "jscodeshift": "^0.11.0", "p-each-series": "^2.1.0", - "yeoman-environment": "^2.8.1", - "yeoman-generator": "^4.7.2" + "yeoman-environment": "^2.10.3", + "yeoman-generator": "^4.12.0" }, "peerDependencies": { "webpack": "4.x.x || 5.x.x", @@ -29,9 +29,9 @@ }, "devDependencies": { "@types/cross-spawn": "^6.0.2", - "@types/got": "9.6.9", - "@types/prettier": "1.19.0", - "@types/yeoman-generator": "^4.11.2" + "@types/got": "^9.6.11", + "@types/prettier": "^2.1.5", + "@types/yeoman-generator": "^4.11.3" }, "peerDependenciesMeta": { "prettier": { diff --git a/packages/utils/src/global-packages-path.ts b/packages/utils/src/global-packages-path.ts index acdc7fecc45..feac325b6d5 100644 --- a/packages/utils/src/global-packages-path.ts +++ b/packages/utils/src/global-packages-path.ts @@ -1,6 +1,8 @@ import spawn from 'cross-spawn'; import path from 'path'; -import { getPackageManager } from 'webpack-cli/lib/utils/get-package-manager'; +import { utils } from 'webpack-cli'; + +const { getPackageManager } = utils; /** * diff --git a/packages/utils/src/modify-config-helper.ts b/packages/utils/src/modify-config-helper.ts index aba3b571725..7103b066f35 100644 --- a/packages/utils/src/modify-config-helper.ts +++ b/packages/utils/src/modify-config-helper.ts @@ -1,11 +1,12 @@ import { green } from 'colorette'; import fs from 'fs'; -import logger from 'webpack-cli/lib/utils/logger'; import path from 'path'; import yeoman from 'yeoman-environment'; import Generator from 'yeoman-generator'; import { runTransform } from './scaffold'; -import { getPackageManager } from 'webpack-cli/lib/utils/get-package-manager'; +import { utils } from 'webpack-cli'; + +const { logger, getPackageManager } = utils; export interface Config extends Object { item?: { diff --git a/packages/utils/src/recursive-parser.ts b/packages/utils/src/recursive-parser.ts index 0bdcdf81ba0..ce8888082e8 100644 --- a/packages/utils/src/recursive-parser.ts +++ b/packages/utils/src/recursive-parser.ts @@ -1,7 +1,8 @@ import { parseTopScope, findRootNodesByName, addProperty, removeProperty, parseMerge, safeTraverse } from './ast-utils'; import { JSCodeshift, Node, valueType } from './types/NodePath'; +import { utils } from 'webpack-cli'; -import logger from 'webpack-cli/lib/utils/logger'; +const { logger } = utils; export function recursiveTransform(j: JSCodeshift, ast: Node, key: string, value: valueType, action: string): boolean | Node { if (key === 'topScope') { diff --git a/packages/utils/src/resolve-packages.ts b/packages/utils/src/resolve-packages.ts index 9fa19f2ca80..ce5eddae437 100644 --- a/packages/utils/src/resolve-packages.ts +++ b/packages/utils/src/resolve-packages.ts @@ -1,11 +1,13 @@ import { bold } from 'colorette'; -import logger from 'webpack-cli/lib/utils/logger'; import path from 'path'; import { modifyHelperUtil } from './modify-config-helper'; import { getPathToGlobalPackages } from './global-packages-path'; import { spawnChild } from './spawn-child'; import { isLocalPath } from './path-utils'; import { ExecaSyncReturnValue } from 'execa'; +import { utils } from 'webpack-cli'; + +const { logger } = utils; interface ChildProcess { status: number; diff --git a/packages/utils/src/run-prettier.ts b/packages/utils/src/run-prettier.ts index 6de24cab637..d2612d04849 100644 --- a/packages/utils/src/run-prettier.ts +++ b/packages/utils/src/run-prettier.ts @@ -1,5 +1,7 @@ import fs from 'fs'; -import logger from 'webpack-cli/lib/utils/logger'; +import { utils } from 'webpack-cli'; + +const { logger } = utils; /** * diff --git a/packages/utils/src/scaffold.ts b/packages/utils/src/scaffold.ts index 18383e30e6a..f4d21e130c6 100644 --- a/packages/utils/src/scaffold.ts +++ b/packages/utils/src/scaffold.ts @@ -1,9 +1,7 @@ import { green } from 'colorette'; import j from 'jscodeshift'; -import logger from 'webpack-cli/lib/utils/logger'; import pEachSeries = require('p-each-series'); import path from 'path'; -import { getPackageManager } from 'webpack-cli/lib/utils/get-package-manager'; import { findProjectRoot } from './path-utils'; import { Error } from './types'; import { Config, TransformConfig } from './types'; @@ -11,6 +9,9 @@ import { PROP_TYPES } from './prop-types'; import { recursiveTransform } from './recursive-parser'; import { runPrettier } from './run-prettier'; import { Node } from './types/NodePath'; +import { utils } from 'webpack-cli'; + +const { logger, getPackageManager } = utils; /** * diff --git a/packages/utils/src/spawn-child.ts b/packages/utils/src/spawn-child.ts index 93b10a9f79e..a26e9f24379 100644 --- a/packages/utils/src/spawn-child.ts +++ b/packages/utils/src/spawn-child.ts @@ -2,7 +2,9 @@ import path from 'path'; import fs from 'fs'; import { ExecaSyncReturnValue, sync } from 'execa'; import { getPathToGlobalPackages } from './global-packages-path'; -import { getPackageManager } from 'webpack-cli/lib/utils/get-package-manager'; +import { utils } from 'webpack-cli'; + +const { getPackageManager } = utils; /** * diff --git a/packages/webpack-cli/CHANGELOG.md b/packages/webpack-cli/CHANGELOG.md index a1a2772cbee..26b8d4ee3a6 100644 --- a/packages/webpack-cli/CHANGELOG.md +++ b/packages/webpack-cli/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [4.2.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.1.0...webpack-cli@4.2.0) (2020-11-04) + +### Bug Fixes + +- --config-name behaviour for fuctional configs ([#2006](https://github.com/webpack/webpack-cli/issues/2006)) ([29ecf8d](https://github.com/webpack/webpack-cli/commit/29ecf8dbcd1c5c7d75fc7fb1634107697832d952)) +- assign cache value for default configs ([#2013](https://github.com/webpack/webpack-cli/issues/2013)) ([d2e3c74](https://github.com/webpack/webpack-cli/commit/d2e3c74d32b0141c694259cf4f31e6c48b0f681d)) +- callback deprecation ([#1977](https://github.com/webpack/webpack-cli/issues/1977)) ([2cb0c0e](https://github.com/webpack/webpack-cli/commit/2cb0c0e383670949ce31231edbfda514f47c3dfc)) +- handle core flags for webpack 4 ([#2023](https://github.com/webpack/webpack-cli/issues/2023)) ([ea66a7e](https://github.com/webpack/webpack-cli/commit/ea66a7e3ec6eabcc439b96acb21e2a25be2e35e5)) +- help and version functionality ([#1972](https://github.com/webpack/webpack-cli/issues/1972)) ([e8010b3](https://github.com/webpack/webpack-cli/commit/e8010b3aac695971e542ad4d3584ce534da39b8f)) + +### Features + +- export utils from core for other packages ([#2011](https://github.com/webpack/webpack-cli/issues/2011)) ([3004549](https://github.com/webpack/webpack-cli/commit/3004549c06b3fe00708d8e1eecf42419e0f72f66)) +- progress supports string argument ([#2000](https://github.com/webpack/webpack-cli/issues/2000)) ([f13346e](https://github.com/webpack/webpack-cli/commit/f13346e6acb46e982a5d20fa1d2ae56fc52523dc)) +- suggest the closest match based on the Levenshtein distance algorithm ([#2010](https://github.com/webpack/webpack-cli/issues/2010)) ([491a582](https://github.com/webpack/webpack-cli/commit/491a582620b64ed4acbccd04f687adc28a5e4cff)) + # [4.1.0](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.0.0...webpack-cli@4.1.0) (2020-10-19) ### Bug Fixes diff --git a/packages/webpack-cli/README.md b/packages/webpack-cli/README.md index 6122d086fac..3b81dba641f 100644 --- a/packages/webpack-cli/README.md +++ b/packages/webpack-cli/README.md @@ -41,7 +41,7 @@ yarn add webpack-cli --dev -c, --config string[] Provide path to webpack configuration file(s) --config-name string[] Name of the configuration to use -m, --merge Merge several configurations using webpack-merge - --progress Print compilation progress during build + --progress string, boolean Print compilation progress during build --color Enables colors on console --no-color Disable colors on console --env string Environment passed to the configuration when it is a function diff --git a/packages/webpack-cli/__tests__/cli-executer.test.js b/packages/webpack-cli/__tests__/cli-executer.test.js deleted file mode 100644 index f64847f5084..00000000000 --- a/packages/webpack-cli/__tests__/cli-executer.test.js +++ /dev/null @@ -1,65 +0,0 @@ -jest.mock('enquirer'); - -describe('CLI Executer', () => { - let cliExecuter = null; - let multiCalls = 0; - let multiChoices = null; - let multiMapper = null; - - let inputCalls = 0; - const inputConstructorObjs = []; - - beforeAll(() => { - let inputRunCount = 0; - - const enquirer = require('enquirer'); - enquirer.MultiSelect = class MultiSelect { - constructor(obj) { - multiCalls++; - multiChoices = obj.choices; - multiMapper = obj.result; - } - - run() { - return ['--config', '--entry', '--progress']; - } - }; - enquirer.Input = class Input { - constructor(obj) { - this.mapper = obj.result; - inputCalls++; - inputConstructorObjs.push(obj); - } - - run() { - inputRunCount++; - return this.mapper(`test${inputRunCount}`); - } - }; - - cliExecuter = require('../lib/utils/cli-executer'); - }); - - it('runs enquirer options then runs webpack', async () => { - const args = await cliExecuter(); - expect(args.length).toBe(5); - - // check that webpack options are actually being displayed that - // the user can select from - expect(multiCalls).toEqual(1); - expect(multiChoices instanceof Array).toBeTruthy(); - expect(multiChoices.length > 0).toBeTruthy(); - expect(multiChoices[0]).toMatch(/--entry/); - - // ensure flag names are parsed out correctly - expect(typeof multiMapper).toEqual('function'); - expect(multiMapper(['--test1: test flag', '--test2: test flag 2'])).toEqual(['--test1', '--test2']); - - // check that the user is then prompted to set values to - // some flags - expect(inputCalls).toEqual(2); - expect(inputConstructorObjs.length).toEqual(2); - expect(inputConstructorObjs[0].message).toEqual('Enter value of the --config flag'); - expect(inputConstructorObjs[1].message).toEqual('Enter value of the --entry flag'); - }); -}); diff --git a/packages/webpack-cli/__tests__/resolveConfig/env.webpack.config.cjs b/packages/webpack-cli/__tests__/resolveConfig/env.webpack.config.cjs new file mode 100644 index 00000000000..d835806ac3c --- /dev/null +++ b/packages/webpack-cli/__tests__/resolveConfig/env.webpack.config.cjs @@ -0,0 +1,7 @@ +module.exports = function (env) { + const configName = env.name; + return { + name: configName, + mode: env.test ? 'staging' : 'production', + }; +}; diff --git a/packages/webpack-cli/__tests__/ConfigGroup/ConfigGroup.test.js b/packages/webpack-cli/__tests__/resolveConfig/resolveConfig.test.js similarity index 70% rename from packages/webpack-cli/__tests__/ConfigGroup/ConfigGroup.test.js rename to packages/webpack-cli/__tests__/resolveConfig/resolveConfig.test.js index b724ed2b6d8..4ad49dfab67 100644 --- a/packages/webpack-cli/__tests__/ConfigGroup/ConfigGroup.test.js +++ b/packages/webpack-cli/__tests__/resolveConfig/resolveConfig.test.js @@ -1,13 +1,13 @@ -const ConfigGroup = require('../../lib/groups/ConfigGroup'); +const resolveConfig = require('../../lib/groups/resolveConfig.js'); const { resolve } = require('path'); const config1 = require('./webpack.config1.cjs'); const config2 = require('./webpack.config2.cjs'); const arrayConfig = require('./webpack.config.cjs'); const promiseConfig = require('./webpack.promise.config.cjs'); -describe('ConfigGroup', function () { +describe('resolveConfig', function () { it('should handle merge properly', async () => { - const result = await ConfigGroup({ + const result = await resolveConfig({ merge: true, config: [resolve(__dirname, './webpack.config.cjs')], }); @@ -25,7 +25,7 @@ describe('ConfigGroup', function () { }); it('should return array for multiple config', async () => { - const result = await ConfigGroup({ + const result = await resolveConfig({ config: [resolve(__dirname, './webpack.config1.cjs'), resolve(__dirname, './webpack.config2.cjs')], }); const expectedOptions = [config1, config2]; @@ -34,20 +34,20 @@ describe('ConfigGroup', function () { }); it('should return config object for single config', async () => { - const result = await ConfigGroup({ config: [resolve(__dirname, './webpack.config1.cjs')] }); + const result = await resolveConfig({ config: [resolve(__dirname, './webpack.config1.cjs')] }); expect(result.options).toEqual(config1); expect(result.outputOptions).toEqual({}); }); it('should return resolved config object for promise config', async () => { - const result = await ConfigGroup({ config: [resolve(__dirname, './webpack.promise.config.cjs')] }); + const result = await resolveConfig({ config: [resolve(__dirname, './webpack.promise.config.cjs')] }); const expectedOptions = await promiseConfig(); expect(result.options).toEqual(expectedOptions); expect(result.outputOptions).toEqual({}); }); it('should handle configs returning different types', async () => { - const result = await ConfigGroup({ + const result = await resolveConfig({ config: [resolve(__dirname, './webpack.promise.config.cjs'), resolve(__dirname, './webpack.config.cjs')], }); const resolvedPromiseConfig = await promiseConfig(); @@ -55,4 +55,14 @@ describe('ConfigGroup', function () { expect(result.options).toEqual(expectedOptions); expect(result.outputOptions).toEqual({}); }); + + it('should handle different env formats', async () => { + const result = await resolveConfig({ + env: { test: true, name: 'Hisoka' }, + config: [resolve(__dirname, './env.webpack.config.cjs')], + }); + const expectedOptions = { mode: 'staging', name: 'Hisoka' }; + expect(result.options).toEqual(expectedOptions); + expect(result.outputOptions).toEqual({}); + }); }); diff --git a/packages/webpack-cli/__tests__/ConfigGroup/webpack.config.cjs b/packages/webpack-cli/__tests__/resolveConfig/webpack.config.cjs similarity index 100% rename from packages/webpack-cli/__tests__/ConfigGroup/webpack.config.cjs rename to packages/webpack-cli/__tests__/resolveConfig/webpack.config.cjs diff --git a/packages/webpack-cli/__tests__/ConfigGroup/webpack.config1.cjs b/packages/webpack-cli/__tests__/resolveConfig/webpack.config1.cjs similarity index 100% rename from packages/webpack-cli/__tests__/ConfigGroup/webpack.config1.cjs rename to packages/webpack-cli/__tests__/resolveConfig/webpack.config1.cjs diff --git a/packages/webpack-cli/__tests__/ConfigGroup/webpack.config2.cjs b/packages/webpack-cli/__tests__/resolveConfig/webpack.config2.cjs similarity index 100% rename from packages/webpack-cli/__tests__/ConfigGroup/webpack.config2.cjs rename to packages/webpack-cli/__tests__/resolveConfig/webpack.config2.cjs diff --git a/packages/webpack-cli/__tests__/ConfigGroup/webpack.promise.config.cjs b/packages/webpack-cli/__tests__/resolveConfig/webpack.promise.config.cjs similarity index 100% rename from packages/webpack-cli/__tests__/ConfigGroup/webpack.promise.config.cjs rename to packages/webpack-cli/__tests__/resolveConfig/webpack.promise.config.cjs diff --git a/packages/webpack-cli/lib/bootstrap.js b/packages/webpack-cli/lib/bootstrap.js index 20e60ab7617..b6fc82879c6 100644 --- a/packages/webpack-cli/lib/bootstrap.js +++ b/packages/webpack-cli/lib/bootstrap.js @@ -1,112 +1,65 @@ -const { options } = require('colorette'); const WebpackCLI = require('./webpack-cli'); const { core } = require('./utils/cli-flags'); -const versionRunner = require('./groups/runVersion'); -const helpRunner = require('./groups/runHelp'); const logger = require('./utils/logger'); const { isCommandUsed } = require('./utils/arg-utils'); -const cliExecuter = require('./utils/cli-executer'); const argParser = require('./utils/arg-parser'); - -require('./utils/process-log'); +const leven = require('leven'); process.title = 'webpack-cli'; -// Create a new instance of the CLI object -const cli = new WebpackCLI(); - -const parseArgs = (args) => argParser(core, args, true, process.title); - const runCLI = async (cliArgs) => { - let args; + const parsedArgs = argParser(core, cliArgs, true, process.title); const commandIsUsed = isCommandUsed(cliArgs); - const parsedArgs = parseArgs(cliArgs); - if (parsedArgs.unknownArgs.includes('help') || parsedArgs.opts.help) { - options.enabled = !cliArgs.includes('--no-color'); - helpRunner(cliArgs); - process.exit(0); - } - - if (parsedArgs.unknownArgs.includes('version') || parsedArgs.opts.version) { - options.enabled = !cliArgs.includes('--no-color'); - versionRunner(cliArgs, commandIsUsed); - process.exit(0); - } - if (commandIsUsed) { return; } try { - // handle the default webpack entry CLI argument, where instead - // of doing 'webpack-cli --entry ./index.js' you can simply do - // 'webpack-cli ./index.js' - // if the unknown arg starts with a '-', it will be considered - // an unknown flag rather than an entry + // Create a new instance of the CLI object + const cli = new WebpackCLI(); + + // Handle the default webpack entry CLI argument, where instead of doing 'webpack-cli --entry ./index.js' you can simply do 'webpack-cli ./index.js' + // If the unknown arg starts with a '-', it will be considered an unknown flag rather than an entry let entry; - if (parsedArgs.unknownArgs.length > 0 && !parsedArgs.unknownArgs[0].startsWith('-')) { - if (parsedArgs.unknownArgs.length === 1) { - entry = parsedArgs.unknownArgs[0]; - } else { - entry = []; - parsedArgs.unknownArgs.forEach((unknown) => { - if (!unknown.startsWith('-')) { - entry.push(unknown); - } - }); - } - } else if (parsedArgs.unknownArgs.length > 0) { - parsedArgs.unknownArgs.forEach((unknown) => { - logger.warn(`Unknown argument: ${unknown}`); + + if (parsedArgs.unknownArgs.length > 0) { + entry = []; + + parsedArgs.unknownArgs = parsedArgs.unknownArgs.filter((item) => { + if (item.startsWith('-')) { + return true; + } + + entry.push(item); + + return false; + }); + } + + if (parsedArgs.unknownArgs.length > 0) { + parsedArgs.unknownArgs.forEach(async (unknown) => { + logger.error(`Unknown argument: ${unknown}`); + const strippedFlag = unknown.substr(2); + const { name: suggestion } = core.find((flag) => leven(strippedFlag, flag.name) < 3); + if (suggestion) { + logger.raw(`Did you mean --${suggestion}?`); + } }); - const args = await cliExecuter(); - const { opts } = parseArgs(args); - await cli.run(opts, core); - return; + + process.exit(2); } + const parsedArgsOpts = parsedArgs.opts; - // Enable/Disable color on console - options.enabled = parsedArgsOpts.color ? true : false; if (entry) { parsedArgsOpts.entry = entry; } - const result = await cli.run(parsedArgsOpts, core); - if (!result) { - return; - } - } catch (err) { - if (err.name === 'UNKNOWN_VALUE') { - logger.error(`Parse Error (unknown argument): ${err.value}`); - return; - } else if (err.name === 'ALREADY_SET') { - const argsMap = {}; - const keysToDelete = []; - cliArgs.forEach((arg, idx) => { - const oldMapValue = argsMap[arg]; - argsMap[arg] = { - value: cliArgs[idx], - pos: idx, - }; - // Swap idx of overridden value - if (oldMapValue) { - argsMap[arg].pos = oldMapValue.pos; - keysToDelete.push(idx + 1); - } - }); - // Filter out the value for the overridden key - const newArgKeys = Object.keys(argsMap).filter((arg) => !keysToDelete.includes(argsMap[arg].pos)); - - cliArgs = newArgKeys; - args = argParser('', core, cliArgs); - await cli.run(args.opts, core); - logger.warn('\nDuplicate flags found, defaulting to last set value'); - } else { - logger.error(err); - return; - } + await cli.run(parsedArgsOpts, core); + } catch (error) { + logger.error(error); + process.exit(2); } }; diff --git a/packages/webpack-cli/lib/groups/ConfigGroup.js b/packages/webpack-cli/lib/groups/resolveConfig.js similarity index 91% rename from packages/webpack-cli/lib/groups/ConfigGroup.js rename to packages/webpack-cli/lib/groups/resolveConfig.js index beac89662e8..de33eba34e4 100644 --- a/packages/webpack-cli/lib/groups/ConfigGroup.js +++ b/packages/webpack-cli/lib/groups/resolveConfig.js @@ -126,13 +126,13 @@ const resolveConfigFiles = async (args) => { const defaultConfig = configFiles.find((p) => p.path.includes(mode) || p.path.includes(modeAlias[mode])); if (defaultConfig) { - opts = await finalize(defaultConfig, args); + opts = await finalize(defaultConfig, args, true); return; } const foundConfig = configFiles.pop(); - opts = await finalize(foundConfig, args); + opts = await finalize(foundConfig, args, true); return; } @@ -140,7 +140,7 @@ const resolveConfigFiles = async (args) => { // Given config data, determines the type of config and // returns final config -const finalize = async (moduleObj, args) => { +const finalize = async (moduleObj, args, isDefaultConfig = false) => { const { env, configName } = args; const newOptionsObject = { outputOptions: {}, @@ -151,12 +151,18 @@ const finalize = async (moduleObj, args) => { return newOptionsObject; } + if (isDefaultConfig) { + newOptionsObject.outputOptions.defaultConfig = moduleObj.path; + } + const config = moduleObj.config; const isMultiCompilerMode = Array.isArray(config); const rawConfigs = isMultiCompilerMode ? config : [config]; - let configs = await Promise.all( + let configs = []; + + const allConfigs = await Promise.all( rawConfigs.map(async (rawConfig) => { const isPromise = typeof rawConfig.then === 'function'; @@ -174,6 +180,14 @@ const finalize = async (moduleObj, args) => { }), ); + for (const singleConfig of allConfigs) { + if (Array.isArray(singleConfig)) { + configs.push(...singleConfig); + } else { + configs.push(singleConfig); + } + } + if (configName) { const foundConfigNames = []; @@ -204,7 +218,7 @@ const finalize = async (moduleObj, args) => { process.exit(2); } - newOptionsObject['options'] = isMultiCompilerMode ? configs : configs[0]; + newOptionsObject['options'] = configs.length > 1 ? configs : configs[0]; return newOptionsObject; }; diff --git a/packages/webpack-cli/lib/index.js b/packages/webpack-cli/lib/index.js new file mode 100644 index 00000000000..f284f9074db --- /dev/null +++ b/packages/webpack-cli/lib/index.js @@ -0,0 +1,13 @@ +const WebpackCLI = require('./webpack-cli'); +const { commands } = require('./utils/cli-flags'); +const logger = require('./utils/logger'); +const getPackageManager = require('./utils/get-package-manager'); + +module.exports = WebpackCLI; + +// export additional utils used by other packages +module.exports.utils = { + logger, + commands, + getPackageManager, +}; diff --git a/packages/webpack-cli/lib/plugins/WebpackCLIPlugin.js b/packages/webpack-cli/lib/plugins/WebpackCLIPlugin.js new file mode 100644 index 00000000000..df1d2736ed9 --- /dev/null +++ b/packages/webpack-cli/lib/plugins/WebpackCLIPlugin.js @@ -0,0 +1,63 @@ +const { packageExists } = require('../utils/package-exists'); +const webpack = packageExists('webpack') ? require('webpack') : undefined; +const logger = require('../utils/logger'); + +const PluginName = 'webpack-cli'; + +class WebpackCLIPlugin { + constructor(options) { + this.options = options; + } + + async apply(compiler) { + const compilers = compiler.compilers || [compiler]; + + for (const compiler of compilers) { + if (this.options.progress) { + const { ProgressPlugin } = compiler.webpack || webpack; + + let progressPluginExists; + + if (compiler.options.plugins) { + progressPluginExists = Boolean(compiler.options.plugins.find((plugin) => plugin instanceof ProgressPlugin)); + } + + if (!progressPluginExists) { + if (typeof this.options.progress === 'string' && this.options.progress !== 'profile') { + logger.error( + `'${this.options.progress}' is an invalid value for the --progress option. Only 'profile' is allowed.`, + ); + process.exit(2); + } + + const isProfile = this.options.progress === 'profile'; + + new ProgressPlugin({ profile: isProfile }).apply(compiler); + } + } + } + + const compilationName = (compilation) => (compilation.name ? ` ${compilation.name}` : ''); + + compiler.hooks.watchRun.tap(PluginName, (compilation) => { + const { bail, watch } = compilation.options; + if (bail && watch) { + logger.warn('You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.'); + } + + logger.success(`Compilation${compilationName(compilation)} starting...`); + }); + + compiler.hooks.done.tap(PluginName, (compilation) => { + logger.success(`Compilation${compilationName(compilation)} finished`); + + process.nextTick(() => { + if (compiler.watchMode) { + logger.success('watching files for updates...'); + } + }); + }); + } +} + +module.exports = WebpackCLIPlugin; diff --git a/packages/webpack-cli/lib/utils/GroupHelper.js b/packages/webpack-cli/lib/utils/GroupHelper.js deleted file mode 100644 index e5e802f28ae..00000000000 --- a/packages/webpack-cli/lib/utils/GroupHelper.js +++ /dev/null @@ -1,18 +0,0 @@ -const { arrayToObject } = require('../utils/arg-utils'); - -class GroupHelper { - constructor(options) { - this.args = arrayToObject(options); - this.opts = { - outputOptions: {}, - options: {}, - }; - this.strategy = undefined; - } - - run() { - throw new Error('You must implement the "run" function'); - } -} - -module.exports = GroupHelper; diff --git a/packages/webpack-cli/lib/utils/__tests__/get-package-manager.test.js b/packages/webpack-cli/lib/utils/__tests__/get-package-manager.test.js index b11c0113d86..61350f3e520 100644 --- a/packages/webpack-cli/lib/utils/__tests__/get-package-manager.test.js +++ b/packages/webpack-cli/lib/utils/__tests__/get-package-manager.test.js @@ -9,7 +9,7 @@ const syncMock = jest.fn(() => { jest.setMock('execa', { sync: syncMock, }); -const { getPackageManager } = require('../get-package-manager'); +const getPackageManager = require('../get-package-manager'); jest.mock('cross-spawn'); const globalModulesNpmValue = 'test-npm'; diff --git a/packages/webpack-cli/lib/utils/__tests__/prompt-installation.test.js b/packages/webpack-cli/lib/utils/__tests__/prompt-installation.test.js index 2108828c010..6a0b54e3f25 100644 --- a/packages/webpack-cli/lib/utils/__tests__/prompt-installation.test.js +++ b/packages/webpack-cli/lib/utils/__tests__/prompt-installation.test.js @@ -16,11 +16,9 @@ jest.setMock('../package-exists', { packageExists: jest.fn(), }); -jest.setMock('../get-package-manager', { - getPackageManager: jest.fn(), -}); +jest.setMock('../get-package-manager', jest.fn()); -const { getPackageManager } = require('../get-package-manager'); +const getPackageManager = require('../get-package-manager'); const { packageExists } = require('../package-exists'); const { promptInstallation } = require('../prompt-installation'); const { runCommand } = require('../run-command'); diff --git a/packages/webpack-cli/lib/utils/arg-parser.js b/packages/webpack-cli/lib/utils/arg-parser.js index e60e1833b02..896362c2503 100644 --- a/packages/webpack-cli/lib/utils/arg-parser.js +++ b/packages/webpack-cli/lib/utils/arg-parser.js @@ -2,6 +2,7 @@ const commander = require('commander'); const logger = require('./logger'); const { commands } = require('./cli-flags'); const runHelp = require('../groups/runHelp'); +const runVersion = require('../groups/runVersion'); const { defaultCommands } = require('./commands'); /** @@ -15,6 +16,7 @@ const { defaultCommands } = require('./commands'); */ const argParser = (options, args, argsOnly = false, name = '') => { const parser = new commander.Command(); + // Set parser name parser.name(name); parser.storeOptionsAsProperties(false); @@ -38,11 +40,17 @@ const argParser = (options, args, argsOnly = false, name = '') => { // Prevent default behavior parser.on('command:*', () => {}); - // Use customized help output if available - parser.on('option:help', () => { + // Use customized help output + if (args.includes('--help') || args.includes('help')) { runHelp(args); process.exit(0); - }); + } + + // Use Customized version + if (args.includes('--version') || args.includes('version') || args.includes('-v')) { + runVersion(args); + process.exit(0); + } // Allow execution if unknown arguments are present parser.allowUnknownOption(true); @@ -51,6 +59,7 @@ const argParser = (options, args, argsOnly = false, name = '') => { options.reduce((parserInstance, option) => { let optionType = option.type; let isStringOrBool = false; + if (Array.isArray(optionType)) { // filter out duplicate types optionType = optionType.filter((type, index) => { @@ -77,7 +86,9 @@ const argParser = (options, args, argsOnly = false, name = '') => { } const flags = option.alias ? `-${option.alias}, --${option.name}` : `--${option.name}`; + let flagsWithType = flags; + if (isStringOrBool) { // commander recognizes [value] as an optional placeholder, // making this flag work either as a string or a boolean @@ -100,17 +111,25 @@ const argParser = (options, args, argsOnly = false, name = '') => { // this ensures we're only splitting by the first `=` const [allKeys, val] = value.split(/=(.+)/, 2); const splitKeys = allKeys.split(/\.(?!$)/); + let prevRef = previous; + splitKeys.forEach((someKey, index) => { - if (!prevRef[someKey]) prevRef[someKey] = {}; + if (!prevRef[someKey]) { + prevRef[someKey] = {}; + } + if ('string' === typeof prevRef[someKey]) { prevRef[someKey] = {}; } + if (index === splitKeys.length - 1) { prevRef[someKey] = val || true; } + prevRef = prevRef[someKey]; }); + return previous; }; parserInstance.option(flagsWithType, option.description, multiArg, option.defaultValue).action(() => {}); @@ -144,8 +163,8 @@ const argParser = (options, args, argsOnly = false, name = '') => { const result = parser.parse(args, parseOptions); const opts = result.opts(); - const unknownArgs = result.args; + args.forEach((arg) => { const flagName = arg.slice(5); const option = options.find((opt) => opt.name === flagName); @@ -153,6 +172,7 @@ const argParser = (options, args, argsOnly = false, name = '') => { const flagUsed = args.includes(flag) && !unknownArgs.includes(flag); let alias = ''; let aliasUsed = false; + if (option && option.alias) { alias = `-${option.alias}`; aliasUsed = args.includes(alias) && !unknownArgs.includes(alias); diff --git a/packages/webpack-cli/lib/utils/cli-executer.js b/packages/webpack-cli/lib/utils/cli-executer.js deleted file mode 100644 index 276981f1285..00000000000 --- a/packages/webpack-cli/lib/utils/cli-executer.js +++ /dev/null @@ -1,64 +0,0 @@ -const { MultiSelect, Input } = require('enquirer'); -const { cyan } = require('colorette'); -const logger = require('./logger'); -const cliArgs = require('./cli-flags').core; - -const prompter = async () => { - const args = []; - - const typePrompt = new MultiSelect({ - name: 'type', - message: 'Which flags do you want to use?', - choices: cliArgs.reduce((prev, curr) => { - return [...prev, `--${curr.name}: ${curr.description}`]; - }, []), - result: (value) => { - return value.map((flag) => flag.split(':')[0]); - }, - }); - - const selections = await typePrompt.run(); - - const boolArgs = []; - const questions = []; - selections.forEach((selection) => { - const options = cliArgs.find((flag) => { - return flag.name === selection.slice(2); - }); - - if (options.type === Boolean) { - boolArgs.push(selection); - return; - } - - const valuePrompt = new Input({ - name: 'value', - message: `Enter value of the ${selection} flag`, - initial: options.defaultValue, - result: (value) => [selection, value], - validate: (value) => Boolean(value), - }); - questions.push(valuePrompt); - }); - - // Create promise chain to force synchronous prompt of question - for await (const question of questions) { - const flagArgs = await question.run(); - args.push(...flagArgs); - } - - return [...args, ...boolArgs]; -}; - -const run = async () => { - try { - const args = await prompter(); - logger.info('\nExecuting CLI\n'); - return args; - } catch (err) { - logger.error(`Action Interrupted, use ${cyan('webpack-cli help')} to see possible options.`); - process.exit(2); - } -}; - -module.exports = run; diff --git a/packages/webpack-cli/lib/utils/cli-flags.js b/packages/webpack-cli/lib/utils/cli-flags.js index 807d94c0677..f10f6d42073 100644 --- a/packages/webpack-cli/lib/utils/cli-flags.js +++ b/packages/webpack-cli/lib/utils/cli-flags.js @@ -108,7 +108,7 @@ const core = [ { name: 'progress', usage: '--progress', - type: Boolean, + type: [Boolean, String], group: BASIC_GROUP, description: 'Print compilation progress during build', }, @@ -268,9 +268,15 @@ const duplicateFlags = core.map((flag) => flag.name); // remove duplicate flags flagsFromCore = flagsFromCore.filter((flag) => !duplicateFlags.includes(flag.name)); +const coreFlagMap = flagsFromCore.reduce((acc, cur) => { + acc.set(cur.name, cur); + return acc; +}, new Map()); + module.exports = { groups, commands, core: [...core, ...flagsFromCore], flagsFromCore, + coreFlagMap, }; diff --git a/packages/webpack-cli/lib/utils/flag-defaults.js b/packages/webpack-cli/lib/utils/flag-defaults.js index 10940d05d42..c2484fb53ea 100644 --- a/packages/webpack-cli/lib/utils/flag-defaults.js +++ b/packages/webpack-cli/lib/utils/flag-defaults.js @@ -1,23 +1,25 @@ -const cacheDefaults = (finalConfig, parsedArgs) => { +const cacheDefaults = (finalConfig, parsedArgs, outputOptions) => { // eslint-disable-next-line no-prototype-builtins const hasCache = finalConfig.hasOwnProperty('cache'); let cacheConfig = {}; - if (hasCache && parsedArgs.config) { + if (hasCache && (parsedArgs.config || (outputOptions && outputOptions.defaultConfig))) { if (finalConfig.cache && finalConfig.cache.type === 'filesystem') { cacheConfig.buildDependencies = { - config: parsedArgs.config, + config: parsedArgs.config || [outputOptions.defaultConfig], }; + } else { + cacheConfig = finalConfig.cache; } return { cache: cacheConfig }; } return cacheConfig; }; -const assignFlagDefaults = (compilerConfig, parsedArgs) => { +const assignFlagDefaults = (compilerConfig, parsedArgs, outputOptions) => { if (Array.isArray(compilerConfig)) { - return compilerConfig.map((config) => cacheDefaults(config, parsedArgs)); + return compilerConfig.map((config) => cacheDefaults(config, parsedArgs, outputOptions)); } - return cacheDefaults(compilerConfig, parsedArgs); + return cacheDefaults(compilerConfig, parsedArgs, outputOptions); }; module.exports = assignFlagDefaults; diff --git a/packages/webpack-cli/lib/utils/get-package-manager.js b/packages/webpack-cli/lib/utils/get-package-manager.js index 7ac3efb9c07..9d6b4125604 100644 --- a/packages/webpack-cli/lib/utils/get-package-manager.js +++ b/packages/webpack-cli/lib/utils/get-package-manager.js @@ -30,6 +30,4 @@ function getPackageManager() { return 'npm'; } -module.exports = { - getPackageManager, -}; +module.exports = getPackageManager; diff --git a/packages/webpack-cli/lib/utils/interactive.js b/packages/webpack-cli/lib/utils/interactive.js index e6213f4b67d..f68d57342b4 100644 --- a/packages/webpack-cli/lib/utils/interactive.js +++ b/packages/webpack-cli/lib/utils/interactive.js @@ -1,3 +1,4 @@ +/*** const { gray, bold, white, cyan, yellow } = require('colorette'); const ansiEscapes = require('ansi-escapes'); const readline = require('readline'); @@ -170,3 +171,5 @@ module.exports = async function (compiler, config, outputOptions) { } }); }; +* +***/ diff --git a/packages/webpack-cli/lib/utils/process-log.js b/packages/webpack-cli/lib/utils/process-log.js deleted file mode 100644 index 45933841849..00000000000 --- a/packages/webpack-cli/lib/utils/process-log.js +++ /dev/null @@ -1,18 +0,0 @@ -const logger = require('./logger'); - -function logErrorAndExit(error) { - if (error && error.stack) logger.error(error.stack); - process.exit(error.exitCode); -} - -process.on('uncaughtException', (error) => { - logger.error(`Uncaught exception: ${error}`); - logErrorAndExit(error); -}); - -process.on('unhandledRejection', (error) => { - logger.error(`Promise rejection: ${error}`); - logErrorAndExit(error); -}); - -//TODO: implement logger for debug diff --git a/packages/webpack-cli/lib/utils/prompt-installation.js b/packages/webpack-cli/lib/utils/prompt-installation.js index 8b5b4c37800..377e58e7d3b 100644 --- a/packages/webpack-cli/lib/utils/prompt-installation.js +++ b/packages/webpack-cli/lib/utils/prompt-installation.js @@ -1,7 +1,7 @@ const { prompt } = require('enquirer'); const { green } = require('colorette'); const { runCommand } = require('./run-command'); -const { getPackageManager } = require('./get-package-manager'); +const getPackageManager = require('./get-package-manager'); const { packageExists } = require('./package-exists'); /** diff --git a/packages/webpack-cli/lib/webpack-cli.js b/packages/webpack-cli/lib/webpack-cli.js index 07bdf950c40..9a2957003eb 100644 --- a/packages/webpack-cli/lib/webpack-cli.js +++ b/packages/webpack-cli/lib/webpack-cli.js @@ -2,46 +2,28 @@ const { packageExists } = require('./utils/package-exists'); const webpack = packageExists('webpack') ? require('webpack') : undefined; const logger = require('./utils/logger'); const webpackMerge = require('webpack-merge'); -const GroupHelper = require('./utils/GroupHelper'); -const { groups, core } = require('./utils/cli-flags'); +const { core, coreFlagMap } = require('./utils/cli-flags'); const argParser = require('./utils/arg-parser'); const { outputStrategy } = require('./utils/merge-strategies'); -const { toKebabCase } = require('./utils/helpers'); const assignFlagDefaults = require('./utils/flag-defaults'); const { writeFileSync } = require('fs'); const { options: coloretteOptions } = require('colorette'); +const WebpackCLIPlugin = require('./plugins/WebpackCLIPlugin'); // CLI arg resolvers -const handleConfigResolution = require('./groups/ConfigGroup'); +const handleConfigResolution = require('./groups/resolveConfig'); const resolveMode = require('./groups/resolveMode'); const resolveStats = require('./groups/resolveStats'); const resolveOutput = require('./groups/resolveOutput'); const basicResolver = require('./groups/basicResolver'); const resolveAdvanced = require('./groups/resolveAdvanced'); +const { toKebabCase } = require('./utils/helpers'); -class WebpackCLI extends GroupHelper { +class WebpackCLI { constructor() { - super(); - this.groupMap = new Map(); this.compilerConfiguration = {}; this.outputConfiguration = {}; } - setMappedGroups(args, inlineOptions) { - Object.keys(args).forEach((key) => { - this.setGroupMap(toKebabCase(key), args[key], inlineOptions); - }); - } - setGroupMap(key, val, inlineOptions) { - if (val === undefined) return; - const opt = inlineOptions.find((opt) => opt.name === key); - const groupName = opt.group; - if (this.groupMap.has(groupName)) { - const pushToMap = this.groupMap.get(groupName); - pushToMap.push({ [opt.name]: val }); - } else { - this.groupMap.set(groupName, [{ [opt.name]: val }]); - } - } /** * Responsible for handling flags coming from webpack/webpack @@ -49,18 +31,21 @@ class WebpackCLI extends GroupHelper { * @returns {void} */ _handleCoreFlags(parsedArgs) { - if (this.groupMap.has('core')) { - const coreFlags = this.groupMap.get('core'); - - // convert all the flags from map to single object - const coreConfig = coreFlags.reduce((allFlag, curFlag) => ({ ...allFlag, ...curFlag }), {}); - const coreCliHelper = require('webpack').cli; - const coreCliArgs = coreCliHelper.getArguments(); - // Merge the core flag config with the compilerConfiguration - coreCliHelper.processArguments(coreCliArgs, this.compilerConfiguration, coreConfig); - // Assign some defaults to core flags - } - const configWithDefaults = assignFlagDefaults(this.compilerConfiguration, parsedArgs); + const coreCliHelper = require('webpack').cli; + if (!coreCliHelper) return; + const coreConfig = Object.keys(parsedArgs) + .filter((arg) => { + return coreFlagMap.has(toKebabCase(arg)); + }) + .reduce((acc, cur) => { + acc[toKebabCase(cur)] = parsedArgs[cur]; + return acc; + }, {}); + const coreCliArgs = coreCliHelper.getArguments(); + // Merge the core flag config with the compilerConfiguration + coreCliHelper.processArguments(coreCliArgs, this.compilerConfiguration, coreConfig); + // Assign some defaults to core flags + const configWithDefaults = assignFlagDefaults(this.compilerConfiguration, parsedArgs, this.outputConfiguration); this._mergeOptionsToConfiguration(configWithDefaults); } @@ -82,24 +67,6 @@ class WebpackCLI extends GroupHelper { return core; } - /** - * Based on the parsed keys, the function will import and create - * a group that handles respective values - * - * @returns {void} - */ - resolveGroups() { - for (const [key] of this.groupMap.entries()) { - switch (key) { - case groups.HELP_GROUP: { - const HelpGroup = require('./groups/runHelp'); - this.helpGroup = new HelpGroup(); - break; - } - } - } - } - /** * Responsible to override webpack options. * @param {Object} options The options returned by a group helper @@ -170,22 +137,6 @@ class WebpackCLI extends GroupHelper { } } - /** - * It receives a group helper, it runs and it merges its result inside - * the file result that will be passed to the compiler - * - * @param {GroupHelper?} groupHelper A group helper - * @private - * @returns {void} - */ - async _handleGroupHelper(groupHelper) { - if (groupHelper) { - const result = await groupHelper.run(); - this._mergeOptionsToConfiguration(result.options, groupHelper.strategy); - this._mergeOptionsToOutputConfiguration(result.outputOptions); - } - } - /** * It runs in a fancy order all the expected groups. * Zero config and configuration goes first. @@ -201,98 +152,73 @@ class WebpackCLI extends GroupHelper { .then(() => this._handleCoreFlags(parsedArgs)) .then(() => this._baseResolver(basicResolver, parsedArgs)) .then(() => this._baseResolver(resolveAdvanced, parsedArgs)) - .then(() => this._baseResolver(resolveStats, parsedArgs)) - .then(() => this._handleGroupHelper(this.helpGroup)); + .then(() => this._baseResolver(resolveStats, parsedArgs)); } - async processArgs(args, cliOptions) { - this.setMappedGroups(args, cliOptions); - this.resolveGroups(args); + handleError(error) { + // https://github.com/webpack/webpack/blob/master/lib/index.js#L267 + // https://github.com/webpack/webpack/blob/v4.44.2/lib/webpack.js#L90 + const ValidationError = webpack.ValidationError || webpack.WebpackOptionsValidationError; - return this.runOptionGroups(args); + // In case of schema errors print and exit process + // For webpack@4 and webpack@5 + if (error instanceof ValidationError) { + logger.error(error.message); + } else { + logger.error(error); + } } - createCompiler(options) { + createCompiler(options, callback) { let compiler; try { - compiler = webpack(options); + compiler = webpack(options, callback); } catch (error) { - // https://github.com/webpack/webpack/blob/master/lib/index.js#L267 - // https://github.com/webpack/webpack/blob/v4.44.2/lib/webpack.js#L90 - const ValidationError = webpack.ValidationError ? webpack.ValidationError : webpack.WebpackOptionsValidationError; - - // In case of schema errors print and exit process - // For webpack@4 and webpack@5 - if (error instanceof ValidationError) { - logger.error(error.message); - } else { - logger.error(error); - } - + this.handleError(error); process.exit(2); } return compiler; } - async getCompiler(args, cliOptions) { - await this.processArgs(args, cliOptions); - + async getCompiler(args) { + await this.runOptionGroups(args); return this.createCompiler(this.compilerConfiguration); } - async run(args, cliOptions) { - await this.processArgs(args, cliOptions); - - const compiler = this.createCompiler(this.compilerConfiguration); + async run(args) { + await this.runOptionGroups(args); - const options = this.compilerConfiguration; - const outputOptions = this.outputConfiguration; - - if (outputOptions.interactive) { - const interactive = require('./utils/interactive'); + let compiler; - return interactive(compiler, options, outputOptions); - } + let options = this.compilerConfiguration; + let outputOptions = this.outputConfiguration; - const compilers = compiler.compilers ? compiler.compilers : [compiler]; - const isWatchMode = Boolean(compilers.find((compiler) => compiler.options.watch)); const isRawOutput = typeof outputOptions.json === 'undefined'; if (isRawOutput) { - for (const compiler of compilers) { - if (outputOptions.progress) { - const { ProgressPlugin } = webpack; - - let progressPluginExists; - - if (compiler.options.plugins) { - progressPluginExists = Boolean(compiler.options.plugins.find((e) => e instanceof ProgressPlugin)); - } + const webpackCLIPlugin = new WebpackCLIPlugin({ + progress: outputOptions.progress, + }); - if (!progressPluginExists) { - new ProgressPlugin().apply(compiler); - } + const addPlugin = (options) => { + if (!options.plugins) { + options.plugins = []; } + options.plugins.unshift(webpackCLIPlugin); + }; + if (Array.isArray(options)) { + options.forEach(addPlugin); + } else { + addPlugin(options); } - - compiler.hooks.watchRun.tap('watchInfo', (compilation) => { - if (compilation.options.bail && isWatchMode) { - logger.warn('You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.'); - } - - logger.success(`Compilation${compilation.name ? `${compilation.name}` : ''} starting...`); - }); - compiler.hooks.done.tap('watchInfo', (compilation) => { - logger.success(`Compilation${compilation.name ? `${compilation.name}` : ''} finished`); - }); } const callback = (error, stats) => { if (error) { - logger.error(error); - process.exit(1); + this.handleError(error); + process.exit(2); } if (stats.hasErrors()) { @@ -314,9 +240,11 @@ class WebpackCLI extends GroupHelper { return stats; }; + const getStatsOptionsFromCompiler = (compiler) => getStatsOptions(compiler.options ? compiler.options.stats : undefined); + const foundStats = compiler.compilers - ? { children: compiler.compilers.map((compiler) => getStatsOptions(compiler.options.stats)) } - : getStatsOptions(compiler.options.stats); + ? { children: compiler.compilers.map(getStatsOptionsFromCompiler) } + : getStatsOptionsFromCompiler(compiler); if (outputOptions.json === true) { process.stdout.write(JSON.stringify(stats.toJson(foundStats), null, 2) + '\n'); @@ -335,46 +263,17 @@ class WebpackCLI extends GroupHelper { } else { logger.raw(`${stats.toString(foundStats)}`); } - - if (isWatchMode) { - logger.success('watching files for updates...'); - } }; - if (isWatchMode) { - const watchOptions = (compiler.options && compiler.options.watchOptions) || {}; + compiler = this.createCompiler(options, callback); - if (watchOptions.stdin) { - process.stdin.on('end', function () { - process.exit(); - }); - process.stdin.resume(); - } - - return new Promise((resolve) => { - compiler.watch(watchOptions, (error, stats) => { - callback(error, stats); + if (compiler && outputOptions.interactive) { + const interactive = require('./utils/interactive'); - resolve(); - }); - }); - } else { - return new Promise((resolve) => { - compiler.run((error, stats) => { - if (compiler.close) { - compiler.close(() => { - callback(error, stats); - - resolve(); - }); - } else { - callback(error, stats); - - resolve(); - } - }); - }); + interactive(compiler, options, outputOptions); } + + return Promise.resolve(); } } diff --git a/packages/webpack-cli/package.json b/packages/webpack-cli/package.json index d6024055b6a..a9e87239e16 100644 --- a/packages/webpack-cli/package.json +++ b/packages/webpack-cli/package.json @@ -1,6 +1,6 @@ { "name": "webpack-cli", - "version": "4.1.0", + "version": "4.2.0", "description": "CLI for webpack & friends", "license": "MIT", "repository": { @@ -10,7 +10,7 @@ "bin": { "webpack-cli": "./bin/cli.js" }, - "main": "./lib/webpack-cli.js", + "main": "./lib/index.js", "engines": { "node": ">=10.13.0" }, @@ -27,18 +27,18 @@ "lib" ], "dependencies": { - "@webpack-cli/info": "^1.0.2", - "@webpack-cli/serve": "^1.0.1", - "ansi-escapes": "^4.3.1", + "@webpack-cli/info": "^1.1.0", + "@webpack-cli/serve": "^1.1.0", "colorette": "^1.2.1", "command-line-usage": "^6.1.0", - "commander": "^6.0.0", - "enquirer": "^2.3.4", - "execa": "^4.0.0", + "commander": "^6.2.0", + "enquirer": "^2.3.6", + "execa": "^4.1.0", "import-local": "^3.0.2", - "interpret": "^2.0.0", + "interpret": "^2.2.0", + "leven": "^3.1.0", "rechoir": "^0.7.0", - "v8-compile-cache": "^2.1.0", + "v8-compile-cache": "^2.2.0", "webpack-merge": "^4.2.2" }, "peerDependencies": { diff --git a/packages/webpack-scaffold/CHANGELOG.md b/packages/webpack-scaffold/CHANGELOG.md index a2c8f691a00..251ff6529bf 100644 --- a/packages/webpack-scaffold/CHANGELOG.md +++ b/packages/webpack-scaffold/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.0.3](https://github.com/webpack/webpack-cli/compare/@webpack-cli/webpack-scaffold@1.0.2...@webpack-cli/webpack-scaffold@1.0.3) (2020-11-04) + +**Note:** Version bump only for package @webpack-cli/webpack-scaffold + ## [1.0.2](https://github.com/webpack/webpack-cli/compare/@webpack-cli/webpack-scaffold@1.0.1...@webpack-cli/webpack-scaffold@1.0.2) (2020-10-19) ### Bug Fixes diff --git a/packages/webpack-scaffold/package.json b/packages/webpack-scaffold/package.json index 76dee7085f2..b5c914bb29d 100644 --- a/packages/webpack-scaffold/package.json +++ b/packages/webpack-scaffold/package.json @@ -1,6 +1,6 @@ { "name": "@webpack-cli/webpack-scaffold", - "version": "1.0.2", + "version": "1.0.3", "description": "Utility files for webpack-scaffold", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -12,11 +12,11 @@ "lib" ], "dependencies": { - "jscodeshift": "^0.7.0", - "yeoman-generator": "^4.7.2" + "jscodeshift": "^0.11.0", + "yeoman-generator": "^4.12.0" }, "devDependencies": { - "@types/yeoman-generator": "^4.11.2" + "@types/yeoman-generator": "^4.11.3" }, "gitHead": "fb50f766851f500ca12867a2aa9de81fa6e368f9" } diff --git a/scripts/globalSetup.js b/scripts/globalSetup.js new file mode 100644 index 00000000000..d043a5903d0 --- /dev/null +++ b/scripts/globalSetup.js @@ -0,0 +1,3 @@ +const { version } = require('webpack'); + +module.exports = () => console.log(`\n Running tests for webpack @${version} \n`); diff --git a/scripts/setupBuild.js b/scripts/setupBuild.js new file mode 100644 index 00000000000..47baf48f865 --- /dev/null +++ b/scripts/setupBuild.js @@ -0,0 +1,10 @@ +const { writeFileSync, readFileSync } = require('fs'); +const { resolve } = require('path'); + +const tsConfigPath = resolve(__dirname, '../tsconfig.json'); +const tsConfigRaw = readFileSync(tsConfigPath); +const tsConfig = JSON.parse(tsConfigRaw); + +tsConfig.compilerOptions.sourceMap = true; + +writeFileSync(tsConfigPath, JSON.stringify(tsConfig, null, 2)); diff --git a/test/analyze/analyze-flag.test.js b/test/analyze/analyze-flag.test.js index ec27d3b78ac..54cac5d97a8 100644 --- a/test/analyze/analyze-flag.test.js +++ b/test/analyze/analyze-flag.test.js @@ -4,7 +4,7 @@ const { runAndGetWatchProc } = require('../utils/test-utils'); describe('--analyze flag', () => { it('should load webpack-bundle-analyzer plugin with --analyze flag', (done) => { - const proc = runAndGetWatchProc(__dirname, ['--analyze', '--watch'], false, '', true); + const proc = runAndGetWatchProc(__dirname, ['--analyze'], false, '', true); proc.stdout.on('data', (chunk) => { const data = chunk.toString(); diff --git a/test/bail/bail.test.js b/test/bail/bail.test.js index 94551a627cf..c848403eb09 100644 --- a/test/bail/bail.test.js +++ b/test/bail/bail.test.js @@ -4,15 +4,17 @@ const { run, runWatch } = require('../utils/test-utils'); describe('bail and watch warning', () => { it('should not log warning in not watch mode', async () => { - const { stderr, stdout } = await run(__dirname, ['-c', 'bail-webpack.config.js']); + const { stderr, stdout, exitCode } = await run(__dirname, ['-c', 'bail-webpack.config.js']); + expect(exitCode).toEqual(0); expect(stderr).not.toContain(`You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.`); expect(stdout).toBeTruthy(); }); it('should not log warning in not watch mode without the "bail" option', async () => { - const { stderr, stdout } = await run(__dirname, ['-c', 'no-bail-webpack.config.js']); + const { stderr, stdout, exitCode } = await run(__dirname, ['-c', 'no-bail-webpack.config.js']); + expect(exitCode).toEqual(0); expect(stderr).not.toContain(`You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.`); expect(stdout).toBeTruthy(); }); diff --git a/test/cache/cache.test.js b/test/cache/cache.test.js index 66a923670b1..5b0eeabbb39 100644 --- a/test/cache/cache.test.js +++ b/test/cache/cache.test.js @@ -4,13 +4,14 @@ const { run, isWebpack5 } = require('../utils/test-utils'); describe('cache related tests', () => { it('should log warning in case of single compiler', () => { - let { stderr, stdout } = run(__dirname, ['-c', './webpack.config.js'], false); + let { stderr, stdout, exitCode } = run(__dirname, ['-c', './webpack.config.js'], false); // run 2nd compilation - ({ stderr, stdout } = run(__dirname, ['-c', './webpack.config.js'], false)); + ({ stderr, stdout, exitCode } = run(__dirname, ['-c', './webpack.config.js'], false)); if (isWebpack5) { expect(stderr).toContain('starting to restore cache content'); expect(stdout).toContain('[cached]'); + expect(exitCode).toEqual(0); } }); }); diff --git a/test/config-format/coffee/coffee.test.js b/test/config-format/coffee/coffee.test.js index 0a42e309352..ccb8b46cd16 100644 --- a/test/config-format/coffee/coffee.test.js +++ b/test/config-format/coffee/coffee.test.js @@ -5,16 +5,20 @@ const { resolve } = require('path'); describe('webpack cli', () => { it('should support coffeescript file as flag', () => { - const { stderr, stdout } = run(__dirname, ['-c', 'webpack.config.coffee'], false); + const { stderr, stdout, exitCode } = run(__dirname, ['-c', 'webpack.config.coffee'], false); + expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); expect(existsSync(resolve(__dirname, 'dist/foo.bundle.js'))).toBeTruthy(); }); it('should load coffeescript file by default', () => { - const { stderr, stdout } = run(__dirname, [], false); + const { stderr, stdout, exitCode } = run(__dirname, [], false); + expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); expect(existsSync(resolve(__dirname, 'dist/foo.bundle.js'))).toBeTruthy(); }); }); diff --git a/test/config-format/commonjs/commonjs.test.js b/test/config-format/commonjs/commonjs.test.js index 6da158d4f2b..0a60b8ffd02 100644 --- a/test/config-format/commonjs/commonjs.test.js +++ b/test/config-format/commonjs/commonjs.test.js @@ -4,9 +4,11 @@ const { resolve } = require('path'); describe('webpack cli', () => { it('should support CommonJS file', () => { - const { stderr, stdout } = run(__dirname, ['-c', 'webpack.config.cjs'], false); + const { stderr, stdout, exitCode } = run(__dirname, ['-c', 'webpack.config.cjs'], false); + expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); expect(existsSync(resolve(__dirname, 'dist/foo.bundle.js'))).toBeTruthy(); }); }); diff --git a/test/config-format/typescript/tsconfig.json b/test/config-format/typescript/tsconfig.json new file mode 100644 index 00000000000..391488ab17f --- /dev/null +++ b/test/config-format/typescript/tsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "module": "commonjs" + } +} diff --git a/test/config-format/typescript/typescript.test.js b/test/config-format/typescript/typescript.test.js index 8070f2c47a3..e7f7bcfd696 100644 --- a/test/config-format/typescript/typescript.test.js +++ b/test/config-format/typescript/typescript.test.js @@ -4,13 +4,15 @@ const { stat } = require('fs'); const { resolve } = require('path'); describe('webpack cli', () => { - it( + it.skip( 'should support typescript file', async () => { await runInstall(__dirname); - const { stderr, stdout } = run(__dirname, ['-c', './webpack.config.ts']); + const { stderr, stdout, exitCode } = run(__dirname, ['-c', './webpack.config.ts']); + expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); stat(resolve(__dirname, 'bin/foo.bundle.js'), (err, stats) => { expect(err).toBe(null); expect(stats.isFile()).toBe(true); diff --git a/test/config-lookup/dotfolder-array/dotfolder-array.test.js b/test/config-lookup/dotfolder-array/dotfolder-array.test.js index 645f425f684..e2c305e9b4d 100644 --- a/test/config-lookup/dotfolder-array/dotfolder-array.test.js +++ b/test/config-lookup/dotfolder-array/dotfolder-array.test.js @@ -5,9 +5,11 @@ const { run } = require('../../utils/test-utils'); describe('dotfolder array config lookup', () => { it('should find a webpack array configuration in a dotfolder', (done) => { - const { stdout, stderr } = run(__dirname, [], false); + const { stdout, stderr, exitCode } = run(__dirname, [], false); + expect(stderr).not.toBeUndefined(); expect(stdout).not.toBeUndefined(); + expect(exitCode).toBe(0); stat(resolve(__dirname, './dist/dist-commonjs.js'), (err, stats) => { expect(err).toBe(null); diff --git a/test/config-lookup/dotfolder-single/dotfolder-single.test.js b/test/config-lookup/dotfolder-single/dotfolder-single.test.js index bb7a2f74691..ee09ec2899f 100644 --- a/test/config-lookup/dotfolder-single/dotfolder-single.test.js +++ b/test/config-lookup/dotfolder-single/dotfolder-single.test.js @@ -7,9 +7,11 @@ const { run } = require('../../utils/test-utils'); describe('dotfolder single config lookup', () => { it('should find a webpack configuration in a dotfolder', (done) => { - const { stdout, stderr } = run(__dirname, [], false); + const { stdout, stderr, exitCode } = run(__dirname, [], false); + expect(stderr).not.toBeUndefined(); expect(stdout).not.toBeUndefined(); + expect(exitCode).toBe(0); expect(stdout).not.toContain('Module not found'); stat(resolve(__dirname, './dist/main.js'), (err, stats) => { diff --git a/test/config-name/config-name.test.js b/test/config-name/config-name.test.js index de2fe509af4..deee81523b7 100644 --- a/test/config-name/config-name.test.js +++ b/test/config-name/config-name.test.js @@ -81,4 +81,51 @@ describe('--config-name flag', () => { expect(stdout).toBeFalsy(); expect(exitCode).toBe(2); }); + + it('should work with config as a function', (done) => { + const { stderr, stdout, exitCode } = run(__dirname, ['--config', 'function-config.js', '--config-name', 'first'], false); + expect(stderr).toBeFalsy(); + expect(stdout).toContain('first'); + expect(stdout).not.toContain('second'); + expect(stdout).not.toContain('third'); + expect(exitCode).toBe(0); + + stat(resolve(__dirname, './dist/dist-first.js'), (err, stats) => { + expect(err).toBe(null); + expect(stats.isFile()).toBe(true); + done(); + }); + }); + + it('should work with multiple values for --config-name when the config is a function', (done) => { + const { stderr, stdout, exitCode } = run( + __dirname, + ['--config', 'function-config.js', '--config-name', 'first', '--config-name', 'third'], + false, + ); + expect(stderr).toBeFalsy(); + expect(stdout).toContain('first'); + expect(stdout).not.toContain('second'); + expect(stdout).toContain('third'); + expect(exitCode).toBe(0); + + stat(resolve(__dirname, './dist/dist-third.js'), (err, stats) => { + expect(err).toBe(null); + expect(stats.isFile()).toBe(true); + + stat(resolve(__dirname, './dist/dist-first.js'), (err, stats) => { + expect(err).toBe(null); + expect(stats.isFile()).toBe(true); + done(); + }); + }); + }); + + it('should log error if invalid config name is provided ', () => { + const { stderr, stdout, exitCode } = run(__dirname, ['--config', 'function-config.js', '--config-name', 'test'], false); + + expect(stderr).toContain('Configuration with name "test" was not found.'); + expect(stdout).toBeFalsy(); + expect(exitCode).toBe(2); + }); }); diff --git a/test/config-name/function-config.js b/test/config-name/function-config.js new file mode 100644 index 00000000000..ff198656a45 --- /dev/null +++ b/test/config-name/function-config.js @@ -0,0 +1,26 @@ +module.exports = () => [ + { + output: { + filename: './dist-first.js', + }, + name: 'first', + entry: './src/first.js', + mode: 'development', + }, + { + output: { + filename: './dist-second.js', + }, + name: 'second', + entry: './src/second.js', + mode: 'production', + }, + { + output: { + filename: './dist-third.js', + }, + name: 'third', + entry: './src/third.js', + mode: 'none', + }, +]; diff --git a/test/config-name/webpack.config.js b/test/config-name/webpack.config.js index 4580e6062d0..3504fa3ae9b 100644 --- a/test/config-name/webpack.config.js +++ b/test/config-name/webpack.config.js @@ -6,7 +6,6 @@ module.exports = [ name: 'first', entry: './src/first.js', mode: 'development', - stats: 'minimal', }, { output: { @@ -15,7 +14,6 @@ module.exports = [ name: 'second', entry: './src/second.js', mode: 'production', - stats: 'minimal', }, { output: { diff --git a/test/config/defaults/all/multiple-config.test.js b/test/config/defaults/all/multiple-config.test.js index 793a4a93403..9b4d00e975b 100644 --- a/test/config/defaults/all/multiple-config.test.js +++ b/test/config/defaults/all/multiple-config.test.js @@ -5,8 +5,9 @@ const { run } = require('../../../utils/test-utils'); describe('Default configuration files: ', () => { it('Uses prod config from dot folder if present', (done) => { - const { stdout, stderr } = run(__dirname, [], false); + const { stdout, stderr, exitCode } = run(__dirname, [], false); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).not.toBe(undefined); stat(resolve(__dirname, './binary/prod.bundle.js'), (err, stats) => { expect(err).toBe(null); diff --git a/test/config/defaults/multiple-location/multiple-location-config.test.js b/test/config/defaults/multiple-location/multiple-location-config.test.js index 68c5aa4db63..a366a0165a9 100644 --- a/test/config/defaults/multiple-location/multiple-location-config.test.js +++ b/test/config/defaults/multiple-location/multiple-location-config.test.js @@ -5,8 +5,9 @@ const { run } = require('../../../utils/test-utils'); describe('multiple dev config files with webpack.config.js', () => { it('Uses webpack.config.development.js', (done) => { - const { stdout, stderr } = run(__dirname, [], false); + const { stdout, stderr, exitCode } = run(__dirname, [], false); expect(stderr).toBeFalsy(); + expect(exitCode).toEqual(0); expect(stdout).not.toBe(undefined); stat(resolve(__dirname, './binary/dev.folder.js'), (err, stats) => { expect(err).toBe(null); diff --git a/test/config/defaults/none and dev/dev-none-config.test.js b/test/config/defaults/none and dev/dev-none-config.test.js index b61c5d8aee8..6c2a8778bbd 100644 --- a/test/config/defaults/none and dev/dev-none-config.test.js +++ b/test/config/defaults/none and dev/dev-none-config.test.js @@ -5,8 +5,9 @@ const { run } = require('../../../utils/test-utils'); describe('multiple config files', () => { it('Uses dev config when both dev and none are present', (done) => { - const { stdout, stderr } = run(__dirname, [], false); + const { stdout, stderr, exitCode } = run(__dirname, [], false); expect(stderr).toBeFalsy(); + expect(exitCode).toEqual(0); expect(stdout).not.toBe(undefined); stat(resolve(__dirname, './binary/dev.bundle.js'), (err, stats) => { expect(err).toBe(null); diff --git a/test/config/defaults/with-mode/multiple-config.test.js b/test/config/defaults/with-mode/multiple-config.test.js index 489650530cc..75c1ce693a7 100644 --- a/test/config/defaults/with-mode/multiple-config.test.js +++ b/test/config/defaults/with-mode/multiple-config.test.js @@ -5,8 +5,9 @@ const { run } = require('../../../utils/test-utils'); describe('multiple config files', () => { it('Uses dev config when development mode is supplied', (done) => { - const { stdout, stderr } = run(__dirname, ['--mode', 'development'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--mode', 'development'], false); expect(stderr).toBeFalsy(); + expect(exitCode).toEqual(0); expect(stdout).not.toBe(undefined); stat(resolve(__dirname, './binary/dev.bundle.js'), (err, stats) => { expect(err).toBe(null); diff --git a/test/config/error/config-error.test.js b/test/config/error/config-error.test.js new file mode 100644 index 00000000000..d11e29e29a7 --- /dev/null +++ b/test/config/error/config-error.test.js @@ -0,0 +1,20 @@ +'use strict'; +const { resolve } = require('path'); +const { run } = require('../../utils/test-utils'); + +describe('config error', () => { + it('should throw error with invalid configuration', () => { + const { stderr, exitCode } = run(__dirname, ['-c', resolve(__dirname, 'webpack.config.js')]); + + expect(stderr).toContain('Invalid configuration object'); + expect(stderr).toContain(`"development" | "production" | "none"`); + expect(exitCode).toBe(2); + }); + + it('should throw syntax error and exit with non-zero exit code', () => { + const { stderr, exitCode } = run(__dirname, ['-c', resolve(__dirname, 'syntax-error.js')]); + + expect(stderr).toContain('SyntaxError: Unexpected token'); + expect(exitCode).toBe(2); + }); +}); diff --git a/test/config/error/src/index.js b/test/config/error/src/index.js new file mode 100644 index 00000000000..97bfc742a9b --- /dev/null +++ b/test/config/error/src/index.js @@ -0,0 +1 @@ +console.log('config error test'); diff --git a/test/config/error/syntax-error.js b/test/config/error/syntax-error.js new file mode 100644 index 00000000000..96fc2e63b73 --- /dev/null +++ b/test/config/error/syntax-error.js @@ -0,0 +1,5 @@ +module.exports = { + name: 'config-error', + mode: 'development', + target: 'node'; //SyntaxError: Unexpected token ';' +}; diff --git a/test/config/error/webpack.config.js b/test/config/error/webpack.config.js new file mode 100644 index 00000000000..a967a05223c --- /dev/null +++ b/test/config/error/webpack.config.js @@ -0,0 +1,5 @@ +module.exports = { + name: 'config-error', + mode: 'unknown', //error + target: 'node', +}; diff --git a/test/config/function/functional-config.test.js b/test/config/function/functional-config.test.js new file mode 100644 index 00000000000..ccc79d6aec1 --- /dev/null +++ b/test/config/function/functional-config.test.js @@ -0,0 +1,40 @@ +'use strict'; +const { resolve } = require('path'); +const { stat } = require('fs'); +const { run } = require('../../utils/test-utils'); + +describe('functional config', () => { + it('should work as expected in case of single config', (done) => { + const { stderr, stdout, exitCode } = run(__dirname, ['--config', resolve(__dirname, 'single-webpack.config.js')]); + + expect(stderr).toBeFalsy(); + expect(stdout).toContain('./src/index.js'); + expect(exitCode).toBe(0); + + stat(resolve(__dirname, './bin/dist-single.js'), (err, stats) => { + expect(err).toBe(null); + expect(stats.isFile()).toBe(true); + done(); + }); + }); + + it('should work as expected in case of multiple config', (done) => { + const { stderr, stdout, exitCode } = run(__dirname, ['--config', resolve(__dirname, 'multi-webpack.config.js')]); + + expect(stderr).toBeFalsy(); + expect(stdout).toContain('first'); + expect(stdout).toContain('second'); + expect(exitCode).toBe(0); + + stat(resolve(__dirname, './bin/dist-first.js'), (err, stats) => { + expect(err).toBe(null); + expect(stats.isFile()).toBe(true); + done(); + }); + stat(resolve(__dirname, './bin/dist-second.js'), (err, stats) => { + expect(err).toBe(null); + expect(stats.isFile()).toBe(true); + done(); + }); + }); +}); diff --git a/test/config/function/multi-webpack.config.js b/test/config/function/multi-webpack.config.js new file mode 100644 index 00000000000..1ea167bf529 --- /dev/null +++ b/test/config/function/multi-webpack.config.js @@ -0,0 +1,20 @@ +module.exports = () => [ + { + output: { + filename: './dist-first.js', + }, + name: 'first', + entry: './src/first.js', + mode: 'development', + stats: 'minimal', + }, + { + output: { + filename: './dist-second.js', + }, + name: 'second', + entry: './src/second.js', + mode: 'production', + stats: 'minimal', + }, +]; diff --git a/test/config/function/single-webpack.config.js b/test/config/function/single-webpack.config.js new file mode 100644 index 00000000000..dbf14dc44c9 --- /dev/null +++ b/test/config/function/single-webpack.config.js @@ -0,0 +1,9 @@ +module.exports = () => { + return { + output: { + filename: './dist-single.js', + }, + name: 'single', + mode: 'development', + }; +}; diff --git a/test/config/function/src/first.js b/test/config/function/src/first.js new file mode 100644 index 00000000000..5a33e8ffd02 --- /dev/null +++ b/test/config/function/src/first.js @@ -0,0 +1 @@ +console.log('first entry'); diff --git a/test/config/function/src/index.js b/test/config/function/src/index.js new file mode 100644 index 00000000000..398f16d07ee --- /dev/null +++ b/test/config/function/src/index.js @@ -0,0 +1 @@ +console.log('default index'); diff --git a/test/config/function/src/second.js b/test/config/function/src/second.js new file mode 100644 index 00000000000..3ce234df055 --- /dev/null +++ b/test/config/function/src/second.js @@ -0,0 +1 @@ +console.log('second entry'); diff --git a/test/config/type/array-promises/array-promises.test.js b/test/config/type/array-promises/array-promises.test.js index 7c831d99cff..b9527b1f2e2 100644 --- a/test/config/type/array-promises/array-promises.test.js +++ b/test/config/type/array-promises/array-promises.test.js @@ -5,9 +5,11 @@ const { run } = require('../../../utils/test-utils'); describe('array of promises', () => { it('is able to understand a configuration file as a promise', (done) => { - const { stdout, stderr } = run(__dirname, ['-c', './webpack.config.js'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['-c', './webpack.config.js'], false); + expect(stdout).toBeTruthy(); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); stat(resolve(__dirname, './binary/a-promise.js'), (err, stats) => { expect(err).toBe(null); diff --git a/test/config/type/array/array.test.js b/test/config/type/array/array.test.js index 28149ff06dc..6fa581f100d 100644 --- a/test/config/type/array/array.test.js +++ b/test/config/type/array/array.test.js @@ -5,7 +5,11 @@ const { run } = require('../../../utils/test-utils'); describe('array', () => { it('is able to understand a configuration file in array format', (done) => { - run(__dirname, ['-c', resolve(__dirname, 'webpack.config.js')], false); + const { stderr, stdout, exitCode } = run(__dirname, ['-c', resolve(__dirname, 'webpack.config.js')], false); + + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); + expect(stdout).toBeTruthy(); stat(resolve(__dirname, './dist/dist-commonjs.js'), (err, stats) => { expect(err).toBe(null); expect(stats.isFile()).toBe(true); diff --git a/test/config/type/function-with-env/function-with-env.test.js b/test/config/type/function-with-env/function-with-env.test.js index bbb878377ee..491d85fa9c3 100644 --- a/test/config/type/function-with-env/function-with-env.test.js +++ b/test/config/type/function-with-env/function-with-env.test.js @@ -12,21 +12,23 @@ describe('function configuration', () => { expect(exitCode).toEqual(1); }); it('is able to understand a configuration file as a function', () => { - const { stderr, stdout } = run(__dirname, ['--env', 'isProd']); + const { stderr, stdout, exitCode } = run(__dirname, ['--env', 'isProd']); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); // Should generate the appropriate files expect(existsSync(resolve(__dirname, './bin/prod.js'))).toBeTruthy(); }); it('is able to understand a configuration file as a function', () => { - const { stderr, stdout } = run(__dirname, ['--env', 'isDev']); + const { stderr, stdout, exitCode } = run(__dirname, ['--env', 'isDev']); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); // Should generate the appropriate files expect(existsSync(resolve(__dirname, './bin/dev.js'))).toBeTruthy(); }); it('Supports passing string in env', () => { - const { stderr, stdout } = run(__dirname, [ + const { stderr, stdout, exitCode } = run(__dirname, [ '--env', 'environment=production', '--env', @@ -36,11 +38,12 @@ describe('function configuration', () => { ]); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); // Should generate the appropriate files expect(existsSync(resolve(__dirname, './bin/Luffy.js'))).toBeTruthy(); }); it('Supports long nested values in env', () => { - const { stderr, stdout } = run(__dirname, [ + const { stderr, stdout, exitCode } = run(__dirname, [ '--env', 'file.name.is.this=Atsumu', '--env', @@ -50,11 +53,12 @@ describe('function configuration', () => { ]); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); // Should generate the appropriate files expect(existsSync(resolve(__dirname, './bin/Atsumu.js'))).toBeTruthy(); }); it('Supports multiple equal in a string', () => { - const { stderr, stdout } = run(__dirname, [ + const { stderr, stdout, exitCode } = run(__dirname, [ '--env', 'file=name=is=Eren', '--env', @@ -64,27 +68,38 @@ describe('function configuration', () => { ]); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); // Should generate the appropriate files expect(existsSync(resolve(__dirname, './bin/name=is=Eren.js'))).toBeTruthy(); }); it('Supports dot at the end', () => { - const { stderr, stdout } = run(__dirname, ['--env', 'name.=Hisoka', '--env', 'environment=dot', '-c', 'webpack.env.config.js']); + const { stderr, stdout, exitCode } = run(__dirname, [ + '--env', + 'name.=Hisoka', + '--env', + 'environment=dot', + '-c', + 'webpack.env.config.js', + ]); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); // Should generate the appropriate files expect(existsSync(resolve(__dirname, './bin/Hisoka.js'))).toBeTruthy(); }); it('Supports dot at the end', () => { - const { stderr, stdout } = run(__dirname, ['--env', 'name.', '--env', 'environment=dot', '-c', 'webpack.env.config.js']); + const { stderr, stdout, exitCode } = run(__dirname, ['--env', 'name.', '--env', 'environment=dot', '-c', 'webpack.env.config.js']); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); // Should generate the appropriate files expect(existsSync(resolve(__dirname, './bin/true.js'))).toBeTruthy(); }); it('is able to understand multiple env flags', (done) => { - const { stderr, stdout } = run(__dirname, ['--env', 'isDev', '--env', 'verboseStats', '--env', 'envMessage']); + const { stderr, stdout, exitCode } = run(__dirname, ['--env', 'isDev', '--env', 'verboseStats', '--env', 'envMessage']); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); // check that the verbose env is respected expect(stdout).toContain('LOG from webpack'); // check if the values from DefinePlugin make it to the compiled code diff --git a/test/config/type/function/function.test.js b/test/config/type/function/function.test.js index 80f30ad08d1..8c782889fbf 100644 --- a/test/config/type/function/function.test.js +++ b/test/config/type/function/function.test.js @@ -5,7 +5,11 @@ const { run } = require('../../../utils/test-utils'); describe('function', () => { it('is able to understand a configuration file as a function', (done) => { - run(__dirname, ['-c', resolve(__dirname, 'webpack.config.js')], false); + const { stderr, stdout, exitCode } = run(__dirname, ['-c', resolve(__dirname, 'webpack.config.js')], false); + + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); stat(resolve(__dirname, './binary/functor.js'), (err, stats) => { expect(err).toBe(null); expect(stats.isFile()).toBe(true); diff --git a/test/config/type/promise-array/promise-array.test.js b/test/config/type/promise-array/promise-array.test.js index ba99a92449b..e83d7875038 100644 --- a/test/config/type/promise-array/promise-array.test.js +++ b/test/config/type/promise-array/promise-array.test.js @@ -5,9 +5,11 @@ const { run } = require('../../../utils/test-utils'); describe('promise array', () => { it('is able to understand a configuration file as a promise', (done) => { - const { stdout, stderr } = run(__dirname, ['-c', './webpack.config.js'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['-c', './webpack.config.js'], false); + expect(stdout).toBeTruthy(); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); stat(resolve(__dirname, './binary/a-promise.js'), (err, stats) => { expect(err).toBe(null); diff --git a/test/config/type/promise-function/promise-function.test.js b/test/config/type/promise-function/promise-function.test.js index ad5f372201e..2fea09bce8e 100644 --- a/test/config/type/promise-function/promise-function.test.js +++ b/test/config/type/promise-function/promise-function.test.js @@ -5,9 +5,11 @@ const { run } = require('../../../utils/test-utils'); describe('promise function', () => { it('is able to understand a configuration file as a promise', (done) => { - const { stdout, stderr } = run(__dirname, ['-c', './webpack.config.js'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['-c', './webpack.config.js'], false); + expect(stdout).toBeTruthy(); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); stat(resolve(__dirname, './binary/promise.js'), (err, stats) => { expect(err).toBe(null); expect(stats.isFile()).toBe(true); diff --git a/test/config/type/promise/promise.test.js b/test/config/type/promise/promise.test.js index 3938804bf66..20a766f279b 100644 --- a/test/config/type/promise/promise.test.js +++ b/test/config/type/promise/promise.test.js @@ -5,9 +5,11 @@ const { run } = require('../../../utils/test-utils'); describe('promise', () => { it('is able to understand a configuration file as a promise', (done) => { - const { stdout, stderr } = run(__dirname, ['-c', './webpack.config.js'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['-c', './webpack.config.js'], false); + expect(stdout).toBeTruthy(); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); stat(resolve(__dirname, './binary/promise.js'), (err, stats) => { expect(err).toBe(null); expect(stats.isFile()).toBe(true); diff --git a/test/core-flags/amd-flag.test.js b/test/core-flags/amd-flag.test.js index a21db34196f..67c3df8ce37 100644 --- a/test/core-flags/amd-flag.test.js +++ b/test/core-flags/amd-flag.test.js @@ -4,9 +4,10 @@ const { run } = require('../utils/test-utils'); describe('--no-amd flag', () => { it('should accept --no-amd', () => { - const { stderr, stdout } = run(__dirname, ['--no-amd']); + const { stderr, stdout, exitCode } = run(__dirname, ['--no-amd']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('amd: false'); }); }); diff --git a/test/core-flags/bail-flag.test.js b/test/core-flags/bail-flag.test.js index 48587933155..23e953038e3 100644 --- a/test/core-flags/bail-flag.test.js +++ b/test/core-flags/bail-flag.test.js @@ -4,16 +4,18 @@ const { run } = require('../utils/test-utils'); describe('--bail flag', () => { it('should set bail to true', () => { - const { stderr, stdout } = run(__dirname, ['--bail']); + const { stderr, stdout, exitCode } = run(__dirname, ['--bail']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('bail: true'); }); it('should set bail to false', () => { - const { stderr, stdout } = run(__dirname, ['--no-bail']); + const { stderr, stdout, exitCode } = run(__dirname, ['--no-bail']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('bail: false'); }); }); diff --git a/test/core-flags/cache-flags.test.js b/test/core-flags/cache-flags.test.js index 8a2cb8ccbb8..767c61d924e 100644 --- a/test/core-flags/cache-flags.test.js +++ b/test/core-flags/cache-flags.test.js @@ -1,79 +1,103 @@ 'use strict'; +const path = require('path'); +const rimraf = require('rimraf'); const { run, isWindows } = require('../utils/test-utils'); const { existsSync, writeFileSync, unlinkSync } = require('fs'); const { resolve } = require('path'); describe('cache related flags from core', () => { + beforeEach((done) => { + rimraf(path.join(__dirname, '../../node_modules/.cache/webpack/*'), () => { + done(); + }); + }); + it('should be successful with --cache ', () => { - const { stderr, stdout } = run(__dirname, ['--cache']); + const { stderr, stdout, exitCode } = run(__dirname, ['--cache']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`type: 'memory'`); }); it('should be successful with --no-cache ', () => { - const { stderr, stdout } = run(__dirname, ['--no-cache']); + const { stderr, stdout, exitCode } = run(__dirname, ['--no-cache']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('cache: false'); }); it('should set cache.type', () => { - const { stderr, stdout } = run(__dirname, ['--cache-type', 'filesystem']); + const { stderr, stdout, exitCode } = run(__dirname, ['--cache-type', 'filesystem']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`type: 'filesystem'`); }); it('should set cache.cacheDirectory with --cache-cache-directory', () => { - const { stderr, stdout } = run(__dirname, ['--cache-type', 'filesystem', '--cache-cache-directory', './test-cache-path']); + const { stderr, stdout, exitCode } = run(__dirname, ['--cache-type', 'filesystem', '--cache-cache-directory', './test-cache-path']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('test-cache-path'); expect(existsSync(resolve(__dirname, './test-cache-path'))).toBeTruthy(); }); it('should set cache.cacheLocation with --cache-cache-locations', () => { - const { stderr, stdout } = run(__dirname, ['--cache-type', 'filesystem', '--cache-cache-location', './test-locate-cache']); + const { stderr, stdout, exitCode } = run(__dirname, [ + '--cache-type', + 'filesystem', + '--cache-cache-location', + './test-locate-cache', + ]); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('test-locate-cache'); expect(existsSync(resolve(__dirname, './test-locate-cache'))).toBeTruthy(); }); it('should set cache.hashAlgorithm with --cache-hash-algorithm', () => { - const { stderr, stdout } = run(__dirname, ['--cache-type', 'filesystem', '--cache-hash-algorithm', 'sha256']); + const { stderr, stdout, exitCode } = run(__dirname, ['--cache-type', 'filesystem', '--cache-hash-algorithm', 'sha256']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`hashAlgorithm: 'sha256'`); }); it('should set cache.name with --cache-name', () => { - const { stderr, stdout } = run(__dirname, ['--cache-type', 'filesystem', '--cache-name', 'cli-test']); + const { stderr, stdout, exitCode } = run(__dirname, ['--cache-type', 'filesystem', '--cache-name', 'cli-test']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`name: 'cli-test'`); }); it('should set cache.store with --cache-store', () => { - const { stderr, stdout } = run(__dirname, ['--cache-type', 'filesystem', '--cache-store', 'pack']); + const { stderr, stdout, exitCode } = run(__dirname, ['--cache-type', 'filesystem', '--cache-store', 'pack']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`store: 'pack'`); }); it('should set cache.version with --cache-version', () => { - const { stderr, stdout } = run(__dirname, ['--cache-type', 'filesystem', '--cache-version', '1.1.3']); + const { stderr, stdout, exitCode } = run(__dirname, ['--cache-type', 'filesystem', '--cache-version', '1.1.3']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`version: '1.1.3'`); }); it('should assign cache build dependencies correctly when cache type is filesystem', () => { // TODO: Fix on windows if (isWindows) return; - const { stderr, stdout } = run(__dirname, ['--cache-type', 'filesystem', '-c', './webpack.config.js']); + const { stderr, stdout, exitCode } = run(__dirname, ['--cache-type', 'filesystem', '-c', './webpack.config.js']); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('buildDependencies'); expect(stdout).toContain("config: [ './webpack.config.js' ]"); expect(stdout).not.toContain('[cached]'); @@ -87,8 +111,10 @@ describe('cache related flags from core', () => { it('should assign cache build dependencies correctly when cache type is filesystem in config', () => { // TODO: Fix on windows if (isWindows) return; - const { stderr, stdout } = run(__dirname, ['-c', './webpack.cache.config.js']); + const { stderr, stdout, exitCode } = run(__dirname, ['-c', './webpack.cache.config.js']); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('buildDependencies'); expect(stdout).toContain("config: [ './webpack.cache.config.js' ]"); expect(stdout).toContain("type: 'filesystem'"); @@ -110,6 +136,17 @@ describe('cache related flags from core', () => { expect(exitCode).toEqual(0); }); + it('should assign cache build dependencies with default config', () => { + // TODO: Fix on windows + if (isWindows) return; + const { stderr, stdout, exitCode } = run(__dirname, ['--cache-type', 'filesystem']); + expect(stderr).toBeFalsy(); + expect(stdout).toContain('buildDependencies'); + expect(stdout).toContain(`'${path.join(__dirname, './webpack.config.js')}'`); + expect(stdout).toContain("type: 'filesystem'"); + expect(exitCode).toEqual(0); + }); + it('should assign cache build dependencies with merged configs', () => { // TODO: Fix on windows if (isWindows) return; diff --git a/test/core-flags/context-flag.test.js b/test/core-flags/context-flag.test.js index 98f13ea2c24..f725b129d00 100644 --- a/test/core-flags/context-flag.test.js +++ b/test/core-flags/context-flag.test.js @@ -1,12 +1,27 @@ 'use strict'; -const { run } = require('../utils/test-utils'); +const { resolve } = require('path'); +const { run, isWindows } = require('../utils/test-utils'); describe('--context flag', () => { it('should allow to set context', () => { - const { stderr, stdout } = run(__dirname, ['--context', '/test-context-path']); + const { stderr, stdout, exitCode } = run(__dirname, ['--context', './']); expect(stderr).toBeFalsy(); - expect(stdout).toContain('test-context-path'); + expect(exitCode).toBe(0); + if (isWindows) { + const windowsPath = resolve(__dirname, './').replace(/\\/g, '\\\\'); + expect(stdout).toContain(`context: '${windowsPath}'`); + } else { + expect(stdout).toContain(`context: '${resolve(__dirname, './')}'`); + } + }); + + it('should throw module not found error for invalid context', () => { + const { stderr, stdout, exitCode } = run(__dirname, ['--context', '/invalid-context-path']); + + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(1); + expect(stdout).toContain(`Module not found: Error: Can't resolve './src/main.js'`); }); }); diff --git a/test/core-flags/dependencies-flag.test.js b/test/core-flags/dependencies-flag.test.js index 251c6f51bf3..5b3ba3244fe 100644 --- a/test/core-flags/dependencies-flag.test.js +++ b/test/core-flags/dependencies-flag.test.js @@ -4,16 +4,18 @@ const { run } = require('../utils/test-utils'); describe('--dependencies and related flags', () => { it('should allow to set dependencies option', () => { - const { stderr, stdout } = run(__dirname, ['--dependencies', 'lodash']); + const { stderr, stdout, exitCode } = run(__dirname, ['--dependencies', 'lodash']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`dependencies: [ 'lodash' ]`); }); it('should reset dependencies option', () => { - const { stderr, stdout } = run(__dirname, ['--dependencies-reset']); + const { stderr, stdout, exitCode } = run(__dirname, ['--dependencies-reset']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('dependencies: []'); }); }); diff --git a/test/core-flags/devtool-flag.test.js b/test/core-flags/devtool-flag.test.js index fec3a3a30a3..387c642bea5 100644 --- a/test/core-flags/devtool-flag.test.js +++ b/test/core-flags/devtool-flag.test.js @@ -4,15 +4,17 @@ const { run } = require('../utils/test-utils'); describe('--devtool flag', () => { it('should set devtool option', () => { - const { stderr, stdout } = run(__dirname, ['--devtool', 'source-map']); + const { stderr, stdout, exitCode } = run(__dirname, ['--devtool', 'source-map']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`devtool: 'source-map'`); }); it('should throw error for invalid config', () => { - const { stderr } = run(__dirname, ['--devtool', 'invalid']); + const { stderr, exitCode } = run(__dirname, ['--devtool', 'invalid']); + expect(exitCode).toBe(2); expect(stderr).toContain('Invalid configuration object'); }); }); diff --git a/test/core-flags/entry-reset-flag.test.js b/test/core-flags/entry-reset-flag.test.js index fb5631cec19..07818863adc 100644 --- a/test/core-flags/entry-reset-flag.test.js +++ b/test/core-flags/entry-reset-flag.test.js @@ -4,9 +4,10 @@ const { run } = require('../utils/test-utils'); describe('--entry-reset flag', () => { it('should reset entry correctly', () => { - const { stderr, stdout } = run(__dirname, ['--entry-reset', '--entry', 'src/entry.js']); + const { stderr, stdout, exitCode } = run(__dirname, ['--entry-reset', '--entry', './src/entry.js']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('src/entry.js'); expect(stdout).not.toContain('src/main.js'); }); diff --git a/test/core-flags/experiments-flag.test.js b/test/core-flags/experiments-flag.test.js index b1d808c889a..f30059f7528 100644 --- a/test/core-flags/experiments-flag.test.js +++ b/test/core-flags/experiments-flag.test.js @@ -12,14 +12,18 @@ describe('experiments option related flag', () => { const propName = hyphenToUpperCase(property); it(`should config ${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--${flag.name}`]); + const { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`]); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`${propName}: true`); }); it(`should config --no-${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--no-${flag.name}`]); + const { stderr, stdout, exitCode } = run(__dirname, [`--no-${flag.name}`]); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`${propName}: false`); }); }); diff --git a/test/core-flags/externals-flags.test.js b/test/core-flags/externals-flags.test.js index 83bc6f3c00f..83dafd5fc76 100644 --- a/test/core-flags/externals-flags.test.js +++ b/test/core-flags/externals-flags.test.js @@ -4,30 +4,34 @@ const { run } = require('../utils/test-utils'); describe('externals related flag', () => { it('should set externals properly', () => { - const { stderr, stdout } = run(__dirname, ['--externals', './main.js']); + const { stderr, stdout, exitCode } = run(__dirname, ['--externals', './main.js']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`externals: [ './main.js' ]`); }); it('should set externalsType properly', () => { - const { stderr, stdout } = run(__dirname, ['--externals', 'var']); + const { stderr, stdout, exitCode } = run(__dirname, ['--externals', 'var']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`externalsType: 'var'`); }); it('should accept --external-type values', () => { - const { stderr, stdout } = run(__dirname, ['--externals-type', 'var']); + const { stderr, stdout, exitCode } = run(__dirname, ['--externals-type', 'var']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`externalsType: 'var'`); }); it('should reset externals', () => { - const { stderr, stdout } = run(__dirname, ['--externals-reset']); + const { stderr, stdout, exitCode } = run(__dirname, ['--externals-reset']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`externals: []`); }); }); diff --git a/test/core-flags/infrastructure-logging.test.js b/test/core-flags/infrastructure-logging.test.js index 028523bb0d9..3c2c0e9b3c8 100644 --- a/test/core-flags/infrastructure-logging.test.js +++ b/test/core-flags/infrastructure-logging.test.js @@ -4,23 +4,26 @@ const { run } = require('../utils/test-utils'); describe('externals related flag', () => { it('should set infrastructureLogging.debug properly', () => { - const { stderr, stdout } = run(__dirname, ['--infrastructure-logging-debug', 'myPlugin']); + const { stderr, stdout, exitCode } = run(__dirname, ['--infrastructure-logging-debug', 'myPlugin']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`debug: [ 'myPlugin' ]`); }); it('should reset infrastructureLogging.debug to []', () => { - const { stderr, stdout } = run(__dirname, ['--infrastructure-logging-debug-reset']); + const { stderr, stdout, exitCode } = run(__dirname, ['--infrastructure-logging-debug-reset']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`debug: []`); }); it('should set infrastructureLogging.level properly', () => { - const { stderr, stdout } = run(__dirname, ['--infrastructure-logging-level', 'log']); + const { stderr, stdout, exitCode } = run(__dirname, ['--infrastructure-logging-level', 'log']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`level: 'log'`); }); }); diff --git a/test/core-flags/module-flags.test.js b/test/core-flags/module-flags.test.js index 2d7a79a2c68..d65e712d765 100644 --- a/test/core-flags/module-flags.test.js +++ b/test/core-flags/module-flags.test.js @@ -16,13 +16,15 @@ describe('module config related flag', () => { if (flag.type === Boolean && !flag.name.includes('module-no-parse')) { it(`should config --${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--${flag.name}`]); + const { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`]); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); if (flag.name.includes('-reset')) { const option = propName.split('Reset')[0]; expect(stdout).toContain(`${option}: []`); } else if (flag.name.includes('rules-')) { - expect(stdout).toContain('sideEffects: true'); + expect(stdout).toContain("sideEffects: 'flag'"); } else { expect(stdout).toContain(`${propName}: true`); } @@ -30,7 +32,9 @@ describe('module config related flag', () => { if (!flag.name.endsWith('-reset')) { it(`should config --no-${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--no-${flag.name}`]); + const { stderr, stdout, exitCode } = run(__dirname, [`--no-${flag.name}`]); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); if (flag.name.includes('rules-')) { expect(stdout).toContain('sideEffects: false'); @@ -43,16 +47,20 @@ describe('module config related flag', () => { if (flag.type === String) { it(`should config --${flag.name} correctly`, () => { - let { stderr, stdout } = run(__dirname, [`--${flag.name}`, 'value']); + let { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`, 'value']); + if (flag.name === 'module-no-parse') { expect(stderr).toBeFalsy(); expect(stdout).toContain('value'); } else if (flag.name.includes('reg-exp')) { - stdout = run(__dirname, [`--${flag.name}`, '/ab?c*/']).stdout; + ({ stdout, stderr, exitCode } = run(__dirname, [`--${flag.name}`, '/ab?c*/'])); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`${propName}: /ab?c*/`); } else if (flag.name.includes('module-rules-')) { - stdout = run(__dirname, [`--${flag.name}`, 'javascript/auto']).stdout; + ({ stdout, stderr, exitCode } = run(__dirname, [`--${flag.name}`, 'javascript/auto'])); + if (propName === 'use' || propName === 'type') { expect(stdout).toContain(`${propName}: 'javascript/auto'`); } else if (property.includes('use-')) { @@ -67,6 +75,7 @@ describe('module config related flag', () => { } } else { expect(stdout).toContain(`${propName}: 'value'`); + expect(exitCode).toBe(0); } }); } diff --git a/test/core-flags/node-flags.test.js b/test/core-flags/node-flags.test.js index 85522283ace..7b6f9cc1005 100644 --- a/test/core-flags/node-flags.test.js +++ b/test/core-flags/node-flags.test.js @@ -4,37 +4,42 @@ const { run } = require('../utils/test-utils'); describe('node option related flags', () => { it('should config node option', () => { - const { stderr, stdout } = run(__dirname, ['--node']); + const { stderr, stdout, exitCode } = run(__dirname, ['--node']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`node: { global: true, __filename: 'mock', __dirname: 'mock' }`); }); it('should config node option to false', () => { - const { stderr, stdout } = run(__dirname, ['--no-node']); + const { stderr, stdout, exitCode } = run(__dirname, ['--no-node']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('node: false'); }); it('should set node.global equals to true', () => { - const { stderr, stdout } = run(__dirname, ['--node']); + const { stderr, stdout, exitCode } = run(__dirname, ['--node']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('global: true'); }); it('should set node.filename correctly', () => { - const { stderr, stdout } = run(__dirname, ['--node-filename', 'mock']); + const { stderr, stdout, exitCode } = run(__dirname, ['--node-filename', 'mock']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`__filename: 'mock'`); }); it('should set node.filename correctly', () => { - const { stderr, stdout } = run(__dirname, ['--node-dirname', 'mock']); + const { stderr, stdout, exitCode } = run(__dirname, ['--node-dirname', 'mock']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`__dirname: 'mock'`); }); }); diff --git a/test/core-flags/optimization-flags.test.js b/test/core-flags/optimization-flags.test.js index 9dcbaa364ef..4485865f567 100644 --- a/test/core-flags/optimization-flags.test.js +++ b/test/core-flags/optimization-flags.test.js @@ -20,8 +20,10 @@ describe('optimization config related flag', () => { if (flag.type === Boolean) { it(`should config --${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--${flag.name}`]); + const { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`]); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); if (flag.name === 'optimization-split-chunks') { expect(stdout).toContain(`chunks: 'async'`); expect(stdout).toContain(`minChunks: 1`); @@ -34,8 +36,10 @@ describe('optimization config related flag', () => { if (!flag.name.includes('reset')) { it(`should config --no-${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--no-${flag.name}`]); + const { stderr, stdout, exitCode } = run(__dirname, [`--no-${flag.name}`]); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); if (flag.name === 'optimization-split-chunks') { expect(stdout).toContain('splitChunks: false'); } else { @@ -49,8 +53,10 @@ describe('optimization config related flag', () => { // need improve the plugin to log for multi-level options i.e, optimization.runtime if (flag.type === String && !flag.name.includes('runtime-') && !flag.name.includes('fallback-')) { it(`should config --${flag.name} correctly`, () => { - let { stderr, stdout } = run(__dirname, [`--${flag.name}`, 'named']); + let { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`, 'named']); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); if (flag.name === 'optimization-split-chunks-chunks') { stdout = run(__dirname, [`--${flag.name}`, 'initial']).stdout; expect(stdout).toContain(`chunks: 'initial'`); @@ -62,6 +68,8 @@ describe('optimization config related flag', () => { expect(stdout).toContain(`usedExports: 'global'`); } else if (flag.name === 'optimization-split-chunks-default-size-types') { expect(stdout).toContain(`defaultSizeTypes: [Array]`); + } else if (flag.name === 'optimization-side-effects') { + expect(stdout).toContain(`${propName}: 'flag'`); } else { expect(stdout).toContain(`${propName}: 'named'`); } @@ -70,7 +78,9 @@ describe('optimization config related flag', () => { if (flag.type === Number && !flag.name.includes('fallback-')) { it(`should config --${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--${flag.name}`, '10']); + const { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`, '10']); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); if (flag.name === 'optimization-split-chunks') { expect(stdout).toContain(`chunks: 'async'`); diff --git a/test/core-flags/output-flags.test.js b/test/core-flags/output-flags.test.js index 15e8f0163a6..d1bfc94f392 100644 --- a/test/core-flags/output-flags.test.js +++ b/test/core-flags/output-flags.test.js @@ -16,11 +16,12 @@ describe('output config related flag', () => { if (flag.type === Boolean && !flag.name.includes('output-library')) { it(`should config --${flag.name} correctly`, () => { - let { stderr, stdout } = run(__dirname, [`--${flag.name}`]); + let { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`]); if (flag.name === 'output-module') { //'output.module: true' is only allowed when 'experiments.outputModule' is enabled - stdout = run(__dirname, [`--${flag.name}`, '--experiments-output-module']).stdout; + ({ stdout, exitCode } = run(__dirname, [`--${flag.name}`, '--experiments-output-module'])); + expect(exitCode).toBe(0); expect(stdout).toContain('module: true'); } else if (flag.name.includes('-reset')) { const option = propName.split('Reset')[0]; @@ -28,15 +29,17 @@ describe('output config related flag', () => { expect(stdout).toContain(`${option}: []`); } else { expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`${propName}: true`); } }); if (!flag.name.endsWith('-reset')) { it(`should config --no-${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--no-${flag.name}`]); + const { stderr, stdout, exitCode } = run(__dirname, [`--no-${flag.name}`]); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`${propName}: false`); }); } @@ -44,75 +47,72 @@ describe('output config related flag', () => { if (flag.type === Number) { it(`should config --${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--${flag.name}`, '10']); + const { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`, '10']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`${propName}: 10`); }); } if (flag.type === String && !flag.name.includes('output-library')) { it(`should config --${flag.name} correctly`, () => { - let { stderr, stdout } = run(__dirname, [`--${flag.name}`, 'test']); + let { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`, 'test']); if (flag.name === 'output-cross-origin-loading') { - stdout = run(__dirname, [`--${flag.name}`, 'anonymous']).stdout; + ({ stdout, exitCode } = run(__dirname, [`--${flag.name}`, 'anonymous'])); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`${propName}: 'anonymous'`); } else if (flag.name === 'output-chunk-format') { - stdout = run(__dirname, [`--${flag.name}`, 'commonjs']).stdout; + ({ stdout, exitCode } = run(__dirname, [`--${flag.name}`, 'commonjs'])); + expect(exitCode).toBe(0); expect(stdout).toContain(`${propName}: 'commonjs'`); - } else if (flag.name === 'output-enabled-library-types') { - stdout = run(__dirname, [`--${flag.name}`, 'global']).stdout; - - expect(stdout).toContain(`${propName}: [ 'global' ]`); } else if (flag.name === 'output-chunk-loading') { - stdout = run(__dirname, [`--${flag.name}`, 'jsonp']).stdout; + ({ stdout, exitCode } = run(__dirname, [`--${flag.name}`, 'jsonp'])); + expect(exitCode).toBe(0); expect(stdout).toContain(`${propName}: 'jsonp'`); } else if (flag.name === 'output-enabled-chunk-loading-types' || flag.name === 'output-enabled-wasm-loading-types') { - stdout = run(__dirname, [`--${flag.name}`, 'async-node']).stdout; + ({ stdout, exitCode } = run(__dirname, [`--${flag.name}`, 'async-node'])); + expect(exitCode).toBe(0); expect(stdout).toContain(`${propName}: [ 'async-node' ]`); } else if (flag.name === 'output-enabled-library-type') { - stdout = run(__dirname, [`--${flag.name}`, 'amd']).stdout; + ({ stdout, exitCode } = run(__dirname, [`--${flag.name}`, 'amd'])); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`${propName}: 'amd'`); } else if (flag.name === 'output-hash-function') { - stdout = run(__dirname, [`--${flag.name}`, 'sha256']).stdout; - stderr = run(__dirname, [`--${flag.name}`, 'sha256']).stderr; + ({ stdout, stderr, exitCode } = run(__dirname, [`--${flag.name}`, 'sha256'])); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`hashFunction: 'sha256'`); } else if (flag.name === 'output-script-type') { - stdout = run(__dirname, [`--${flag.name}`, 'module']).stdout; + ({ stdout, exitCode } = run(__dirname, [`--${flag.name}`, 'module'])); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`${propName}: 'module'`); } else if (flag.name === 'output-enabled-library-types') { stdout = run(__dirname, [`--${flag.name}`, 'var']).stdout; - expect(stderr).toBeFalsy(); expect(stdout).toContain(`${propName}: [ 'var' ]`); } else if (flag.name === 'output-path') { expect(stdout).toContain('test'); } else if (flag.name === 'output-worker-chunk-loading') { stdout = run(__dirname, [`--${flag.name}`, 'async-node']).stdout; expect(stdout).toContain(`${propName}: 'async-node'`); - } else if (flag.name === 'output-worker-chunk-loading') { - stdout = run(__dirname, [`--${flag.name}`, 'async-node']).stdout; - expect(stdout).toContain(`${propName}: 'async-node'`); - } else if (flag.name === 'output-chunk-format') { - stdout = run(__dirname, [`--${flag.name}`, 'commonjs']).stdout; - expect(stdout).toContain(`${propName}: 'commonjs'`); } else if (flag.name.includes('wasm')) { stdout = run(__dirname, [`--${flag.name}`, 'async-node']).stdout; expect(stdout).toContain(`${propName}: 'async-node'`); } else { expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`${propName}: 'test'`); } }); @@ -120,7 +120,7 @@ describe('output config related flag', () => { if (flag.name.includes('output-library')) { it(`should config name, type and export correctly`, () => { - const { stderr, stdout } = run(__dirname, [ + const { stderr, stdout, exitCode } = run(__dirname, [ '--output-library-name', 'myLibrary', '--output-library-type', @@ -133,6 +133,7 @@ describe('output config related flag', () => { ]); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('myLibrary'); expect(stdout).toContain(`type: 'var'`); expect(stdout).toContain('export: [Array]'); @@ -141,9 +142,10 @@ describe('output config related flag', () => { }); it('should be succesful with --output-library-reset correctly', () => { - const { stderr, stdout } = run(__dirname, ['--output-library-reset']); + const { stderr, stdout, exitCode } = run(__dirname, ['--output-library-reset']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('name: []'); }); } diff --git a/test/core-flags/parallelism-flag.test.js b/test/core-flags/parallelism-flag.test.js index 02f1f878be7..9c0d1ee7eea 100644 --- a/test/core-flags/parallelism-flag.test.js +++ b/test/core-flags/parallelism-flag.test.js @@ -4,9 +4,10 @@ const { run } = require('../utils/test-utils'); describe('--parallelism flag', () => { it('should set parallelism to the value passed', () => { - const { stderr, stdout } = run(__dirname, ['--parallelism', '50']); + const { stderr, stdout, exitCode } = run(__dirname, ['--parallelism', '50']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('parallelism: 50'); }); }); diff --git a/test/core-flags/performance-flags.test.js b/test/core-flags/performance-flags.test.js index 106f5af725f..ea27e0b1d5c 100644 --- a/test/core-flags/performance-flags.test.js +++ b/test/core-flags/performance-flags.test.js @@ -7,9 +7,10 @@ const performanceFlags = flagsFromCore.filter(({ name }) => name.startsWith('per describe('module config related flag', () => { it(`should config --performance option correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--no-performance`]); + const { stderr, stdout, exitCode } = run(__dirname, [`--no-performance`]); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('performance: false'); }); @@ -20,17 +21,20 @@ describe('module config related flag', () => { if (flag.type === Number) { it(`should config --${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--${flag.name}`, '10']); + const { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`, '10']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`${propName}: 10`); }); } if (flag.type === String) { it(`should config --${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--${flag.name}`, 'warning']); + const { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`, 'warning']); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`${propName}: 'warning'`); }); } diff --git a/test/core-flags/profile-flag.test.js b/test/core-flags/profile-flag.test.js index 2ba4d1169b2..9be89d464cf 100644 --- a/test/core-flags/profile-flag.test.js +++ b/test/core-flags/profile-flag.test.js @@ -4,16 +4,18 @@ const { run } = require('../utils/test-utils'); describe('--profile flag', () => { it('should set profile to true', () => { - const { stderr, stdout } = run(__dirname, ['--profile']); + const { stderr, stdout, exitCode } = run(__dirname, ['--profile']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('profile: true'); }); it('should set profile to false', () => { - const { stderr, stdout } = run(__dirname, ['--no-profile']); + const { stderr, stdout, exitCode } = run(__dirname, ['--no-profile']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('profile: false'); }); }); diff --git a/test/core-flags/records-flag.test.js b/test/core-flags/records-flag.test.js index e4724266dfb..db9b9308da2 100644 --- a/test/core-flags/records-flag.test.js +++ b/test/core-flags/records-flag.test.js @@ -4,23 +4,26 @@ const { run } = require('../utils/test-utils'); describe('module config related flag', () => { it('should config records-path correctly', () => { - const { stderr, stdout } = run(__dirname, ['--records-path', './bin/records.json']); + const { stderr, stdout, exitCode } = run(__dirname, ['--records-path', './bin/records.json']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('records.json'); }); it('should config records-input-path correctly', () => { - const { stderr, stdout } = run(__dirname, ['--records-input-path', './bin/records.json']); + const { stderr, stdout, exitCode } = run(__dirname, ['--records-input-path', './bin/records.json']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('records.json'); }); it('should config records-output-path correctly', () => { - const { stderr, stdout } = run(__dirname, ['--records-output-path', './bin/records.json']); + const { stderr, stdout, exitCode } = run(__dirname, ['--records-output-path', './bin/records.json']); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('records.json'); }); }); diff --git a/test/core-flags/resolve-flags.test.js b/test/core-flags/resolve-flags.test.js index a8ad663f9c4..abfaa74379f 100644 --- a/test/core-flags/resolve-flags.test.js +++ b/test/core-flags/resolve-flags.test.js @@ -30,19 +30,21 @@ describe('resolve config related flags', () => { if (flag.type === String && !flag.name.includes('alias-') && !flag.name.includes('fallback-')) { it(`should config --${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--${flag.name}`, 'browser']); + const { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`, 'browser']); + expect(stderr).toBeFalsy(); if (propName === 'restrictions') { expect(stdout).toContain('browser'); } else { expect(stdout).toContain(`${propName}: [ 'browser' ]`); + expect(exitCode).toBe(0); } }); } if (flag.name.includes('alias-') || flag.name.includes('fallback-')) { it(`should config --${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [ + const { stderr, stdout, exitCode } = run(__dirname, [ `--resolve-alias-alias`, 'alias', '--resolve-alias-name', @@ -64,7 +66,9 @@ describe('resolve config related flags', () => { '--resolve-loader-fallback-name', 'loader-fall-name', ]); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`alias: [ { alias: 'alias', name: 'name' } ]`); expect(stdout).toContain(`aliasFields: [ 'aliasField' ]`); expect(stdout).toContain(`alias: [ { alias: 'loaderAlias', name: 'loaderName' } ]`); @@ -77,7 +81,7 @@ describe('resolve config related flags', () => { if (flag.name.includes('reset')) { it(`should config --${flag.name} alias-reset flags correctly`, () => { - const { stderr, stdout } = run(__dirname, [ + const { stderr, stdout, exitCode } = run(__dirname, [ '--resolve-alias-reset', '--resolve-fallback-reset', '--resolve-alias-fields-reset', @@ -85,7 +89,9 @@ describe('resolve config related flags', () => { '--resolve-loader-alias-fields-reset', '--resolve-loader-fallback-reset', ]); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`alias: []`); expect(stdout).toContain(`aliasFields: []`); expect(stdout).toContain(`fallback: []`); diff --git a/test/core-flags/snapshot-flags.test.js b/test/core-flags/snapshot-flags.test.js index a5efc6c4a87..bcaa517f900 100644 --- a/test/core-flags/snapshot-flags.test.js +++ b/test/core-flags/snapshot-flags.test.js @@ -13,9 +13,10 @@ describe('snapshot config related flags', () => { if (flag.type === Boolean) { it(`should config --${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--${flag.name}`]); + const { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`]); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); if (flag.name.includes('reset')) { const option = propName.split('Reset')[0]; expect(stdout).toContain(`${option}: []`); @@ -29,8 +30,10 @@ describe('snapshot config related flags', () => { if (flag.type === String) { it(`should config --${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--${flag.name}`, 'test-snap-path']); + const { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`, 'test-snap-path']); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain('test-snap-path'); }); } diff --git a/test/core-flags/stats-flags.test.js b/test/core-flags/stats-flags.test.js index f43076ee660..6deb653fd19 100644 --- a/test/core-flags/stats-flags.test.js +++ b/test/core-flags/stats-flags.test.js @@ -13,9 +13,10 @@ describe('stats config related flag', () => { if (flag.type === Boolean) { it(`should config --${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--${flag.name}`]); + const { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`]); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); if (flag.name.includes('reset')) { const option = propName.split('Reset')[0]; expect(stdout).toContain(`stats: { ${option}: [] }`); @@ -26,9 +27,10 @@ describe('stats config related flag', () => { if (!flag.name.endsWith('-reset')) { it(`should config --no-${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--no-${flag.name}`]); + const { stderr, stdout, exitCode } = run(__dirname, [`--no-${flag.name}`]); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`stats: { ${propName}: false }`); }); } @@ -36,8 +38,10 @@ describe('stats config related flag', () => { if (flag.type === Number) { it(`should config --${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--${flag.name}`, '10']); + const { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`, '10']); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`stats: { ${propName}: 10 }`); }); } @@ -46,8 +50,10 @@ describe('stats config related flag', () => { const acceptsSingleValue = ['preset', 'modulesSort', 'logging', 'chunksSort', 'assetsSort']; it(`should config --${flag.name} correctly`, () => { - let { stderr, stdout } = run(__dirname, [`--${flag.name}`, 'log']); + let { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`, 'log']); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); if (flag.name.includes('stats-colors')) { const option = flag.name.split('stats-colors-')[1]; stdout = run(__dirname, [`--${flag.name}`, 'u001b[32m']).stdout; diff --git a/test/core-flags/watch-flags.test.js b/test/core-flags/watch-flags.test.js index ef777ca7a33..16576aaf013 100644 --- a/test/core-flags/watch-flags.test.js +++ b/test/core-flags/watch-flags.test.js @@ -13,9 +13,10 @@ describe('watch config related flag', () => { if (flag.type === Boolean) { it(`should config --${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--${flag.name}`]); + const { stderr, stdout, exitCode } = run(__dirname, [`--${flag.name}`]); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); if (flag.name.includes('reset')) { expect(stdout).toContain(`watchOptions: { ignored: [] }`); } else { @@ -25,9 +26,10 @@ describe('watch config related flag', () => { if (!flag.name.endsWith('-reset')) { it(`should config --no-${flag.name} correctly`, () => { - const { stderr, stdout } = run(__dirname, [`--no-${flag.name}`]); + const { stderr, stdout, exitCode } = run(__dirname, [`--no-${flag.name}`]); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain(`watchOptions: { ${propName}: false }`); }); } diff --git a/test/defaults/output-defaults.test.js b/test/defaults/output-defaults.test.js index 18cd26d8e17..6166d346ab9 100644 --- a/test/defaults/output-defaults.test.js +++ b/test/defaults/output-defaults.test.js @@ -5,7 +5,10 @@ const { run } = require('../utils/test-utils'); describe('output flag defaults', () => { it('should create default file for a given directory', (done) => { - const { stdout } = run(__dirname, ['--entry', './a.js', '--output-path', './binary'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--entry', './a.js', '--output-path', './binary'], false); + + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); // Should not print warning about config fallback, as we have production as default expect(stdout).not.toContain('option has not been set, webpack will fallback to'); stat(resolve(__dirname, './binary/main.js'), (err, stats) => { diff --git a/test/devtool/array/source-map-array.test.js b/test/devtool/array/source-map-array.test.js index 3672c8eaba7..c5b72c2b80b 100644 --- a/test/devtool/array/source-map-array.test.js +++ b/test/devtool/array/source-map-array.test.js @@ -5,8 +5,11 @@ const { run } = require('../../utils/test-utils'); describe('source-map object', () => { it('should treat source-map settings right', (done) => { - const { stderr } = run(__dirname, [], false); - expect(stderr).toBe(''); + const { stderr, stdout, exitCode } = run(__dirname, [], false); + + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); readdir(resolve(__dirname, 'dist'), (err, files) => { expect(err).toBe(null); expect(files.length).toBe(3); @@ -14,8 +17,11 @@ describe('source-map object', () => { }); }); it('should override entire array on flag', (done) => { - const { stderr } = run(__dirname, ['--devtool', 'source-map', '--output-path', './binary'], false); - expect(stderr).toBe(''); + const { stderr, stdout, exitCode } = run(__dirname, ['--devtool', 'source-map', '--output-path', './binary'], false); + + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); readdir(resolve(__dirname, 'binary'), (err, files) => { expect(err).toBe(null); expect(files.length).toBe(4); diff --git a/test/devtool/object/source-map-object.test.js b/test/devtool/object/source-map-object.test.js index 9418f2eaa2e..c73ce7b2aa2 100644 --- a/test/devtool/object/source-map-object.test.js +++ b/test/devtool/object/source-map-object.test.js @@ -5,7 +5,11 @@ const { run } = require('../../utils/test-utils'); describe('source-map object', () => { it('should not write a source map for obj config', (done) => { - run(__dirname, ['-c', './webpack.eval.config.js']); + const { stderr, stdout, exitCode } = run(__dirname, ['-c', './webpack.eval.config.js']); + + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); readdir(resolve(__dirname, 'bin'), (err, files) => { expect(files.length).toBeGreaterThanOrEqual(1); expect(err).toBe(null); @@ -14,8 +18,11 @@ describe('source-map object', () => { }); it('should write a sourcemap file', (done) => { - const { stderr } = run(__dirname, ['-c', './webpack.source.config.js'], false); - expect(stderr).toBe(''); + const { stderr, stdout, exitCode } = run(__dirname, ['-c', './webpack.source.config.js'], false); + + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + expect(exitCode).toBe(0); stat(resolve(__dirname, 'dist/dist-amd.js.map'), (err, stats) => { expect(err).toBe(null); expect(stats.isFile()).toBe(true); diff --git a/test/entry/config-entry/entry-with-command/entry-with-command.test.js b/test/entry/config-entry/entry-with-command/entry-with-command.test.js index 7d83be6ce32..e8ae1a2c741 100644 --- a/test/entry/config-entry/entry-with-command/entry-with-command.test.js +++ b/test/entry/config-entry/entry-with-command/entry-with-command.test.js @@ -5,8 +5,10 @@ const { run } = require('../../../utils/test-utils'); describe('config entry and command entry all exist', () => { it('should use command entry if config command existed', (done) => { - const { stdout } = run(__dirname, ['-c', '../1.js', './index.js'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['-c', '../1.js', './index.js'], false); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); expect(stdout).toContain('./index.js'); stat(resolve(__dirname, './binary/main.bundle.js'), (err, stats) => { expect(err).toBeFalsy(); diff --git a/test/entry/config-entry/entry-with-config/entry-with-config.test.js b/test/entry/config-entry/entry-with-config/entry-with-config.test.js index 91880088239..d25ff38a830 100644 --- a/test/entry/config-entry/entry-with-config/entry-with-config.test.js +++ b/test/entry/config-entry/entry-with-config/entry-with-config.test.js @@ -5,8 +5,10 @@ const { run } = require('../../../utils/test-utils'); describe('default entry and config entry all exist', () => { it('should use config entry if config entry existed', (done) => { - const { stdout } = run(__dirname, ['-c', '../1.js'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['-c', '../1.js'], false); + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); expect(stdout).toContain('./a.js'); stat(resolve(__dirname, './binary/index.bundle.js'), (err, stats) => { expect(err).toBeFalsy(); diff --git a/test/entry/config-entry/entry-with-index/entry-with-config.test.js b/test/entry/config-entry/entry-with-index/entry-with-config.test.js index c2cc73734da..d83ee8ab6b5 100644 --- a/test/entry/config-entry/entry-with-index/entry-with-config.test.js +++ b/test/entry/config-entry/entry-with-index/entry-with-config.test.js @@ -5,7 +5,10 @@ const { run } = require('../../../utils/test-utils'); describe('default entry and config entry all exist', () => { it('should use config entry if config entry existed', () => { - const { stdout, stderr } = run(__dirname, [], false); + const { stdout, stderr, exitCode } = run(__dirname, [], false); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); // Should contain the relevant entry expect(stdout).toContain('./src/app.js'); expect(stdout).toContain('./src/print.js'); diff --git a/test/entry/defaults-empty/entry-single-arg.test.js b/test/entry/defaults-empty/entry-single-arg.test.js index 4b5e8e433e3..b56c6808074 100644 --- a/test/entry/defaults-empty/entry-single-arg.test.js +++ b/test/entry/defaults-empty/entry-single-arg.test.js @@ -4,8 +4,10 @@ const { run } = require('../../utils/test-utils'); describe('single entry flag empty project', () => { it('sets default entry, compiles but throw missing module error', () => { - const { stdout, stderr } = run(__dirname); + const { stdout, stderr, exitCode } = run(__dirname); + + expect(exitCode).toBe(1); expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); + expect(stdout).toContain(`not found: Error: Can't resolve`); }); }); diff --git a/test/entry/defaults-index/entry-multi-args.test.js b/test/entry/defaults-index/entry-multi-args.test.js index 6ce53ebc2eb..9f900848637 100644 --- a/test/entry/defaults-index/entry-multi-args.test.js +++ b/test/entry/defaults-index/entry-multi-args.test.js @@ -7,9 +7,11 @@ const { run } = require('../../utils/test-utils'); describe('single entry flag index present', () => { it('finds default index file and compiles successfully', (done) => { - const { stderr } = run(__dirname); + const { stderr, stdout, exitCode } = run(__dirname); expect(stderr).not.toContain('Module not found'); + expect(exitCode).toBe(0); + expect(stdout).toBeTruthy(); stat(resolve(__dirname, './bin/main.js'), (err, stats) => { expect(err).toBe(null); expect(stats.isFile()).toBe(true); diff --git a/test/entry/flag-entry/entry-with-flag.test.js b/test/entry/flag-entry/entry-with-flag.test.js index 1f335734f3f..63798d5281f 100644 --- a/test/entry/flag-entry/entry-with-flag.test.js +++ b/test/entry/flag-entry/entry-with-flag.test.js @@ -1,12 +1,14 @@ 'use strict'; -const { run } = require('../../utils/test-utils'); +const { run, isWebpack5 } = require('../../utils/test-utils'); const { stat, readFile } = require('fs'); const { resolve } = require('path'); describe('entry flag', () => { it('should resolve the path to src/index.cjs', (done) => { - const { stderr, stdout } = run(__dirname, ['--entry', './src/index.cjs', '-o', './dist/'], false); + const { stderr, stdout, exitCode } = run(__dirname, ['--entry', './src/index.cjs', '-o', './dist/'], false); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); @@ -23,7 +25,9 @@ describe('entry flag', () => { }); it('should load ./src/a.js as entry', (done) => { - const { stderr, stdout } = run(__dirname, ['--entry', './src/a.js']); + const { stderr, stdout, exitCode } = run(__dirname, ['--entry', './src/a.js']); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); @@ -39,21 +43,29 @@ describe('entry flag', () => { }); }); - it('should resolve the path to src/a.js as ./src/a.js', (done) => { - const { stderr, stdout } = run(__dirname, ['--entry', 'src/a.js']); - expect(stderr).toBeFalsy(); - expect(stdout).toBeTruthy(); + it('should resolve the path to /src/a.js as ./src/a.js for webpack-5 only', (done) => { + const { stderr, stdout, exitCode } = run(__dirname, ['--entry', '/src/a.js']); - stat(resolve(__dirname, './bin/main.js'), (err, stats) => { - expect(err).toBe(null); - expect(stats.isFile()).toBe(true); + if (!isWebpack5) { + expect(exitCode).toBe(1); + expect(stdout).toContain(`Module not found: Error: Can't resolve`); done(); - }); - readFile(resolve(__dirname, './bin/main.js'), 'utf-8', (err, data) => { - expect(err).toBe(null); - expect(data).toContain('Hello from a.js'); - done(); - }); + } else { + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + + stat(resolve(__dirname, './bin/main.js'), (err, stats) => { + expect(err).toBe(null); + expect(stats.isFile()).toBe(true); + done(); + }); + readFile(resolve(__dirname, './bin/main.js'), 'utf-8', (err, data) => { + expect(err).toBe(null); + expect(data).toContain('Hello from a.js'); + done(); + }); + } }); it('should throw error for invalid entry file', () => { diff --git a/test/entry/multiple-entries/multi-entries.test.js b/test/entry/multiple-entries/multi-entries.test.js index 61d278d1760..c0f1bc24d41 100644 --- a/test/entry/multiple-entries/multi-entries.test.js +++ b/test/entry/multiple-entries/multi-entries.test.js @@ -6,7 +6,9 @@ const { resolve } = require('path'); describe(' multiple entries', () => { it('should allow multiple entry files', (done) => { - const { stderr, stdout } = run(__dirname, ['./src/a.js', './src/b.js']); + const { stderr, stdout, exitCode } = run(__dirname, ['./src/a.js', './src/b.js']); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); @@ -24,7 +26,9 @@ describe(' multiple entries', () => { }); it('should allow multiple entry flags', (done) => { - const { stderr, stdout } = run(__dirname, ['--entry', 'src/a.js', '--entry', 'src/b.js']); + const { stderr, stdout, exitCode } = run(__dirname, ['--entry', './src/a.js', '--entry', './src/b.js']); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); diff --git a/test/env/array/array-env.test.js b/test/env/array/array-env.test.js index a9571de67fc..2b4f7b4ba1c 100644 --- a/test/env/array/array-env.test.js +++ b/test/env/array/array-env.test.js @@ -11,7 +11,11 @@ const prodFile = path.join(__dirname, './bin/prod.js'); describe('env array', () => { it('is able to set two different environments for an array configuration', () => { - run(__dirname); + const { stderr, stdout, exitCode } = run(__dirname); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); const devScript = spawnSync('node', [devFile]); const prodScript = spawnSync('node', [prodFile]); diff --git a/test/env/object/object-env.test.js b/test/env/object/object-env.test.js index 124aadc5b04..b5a3a5878f6 100644 --- a/test/env/object/object-env.test.js +++ b/test/env/object/object-env.test.js @@ -8,7 +8,12 @@ const { run } = require('../../utils/test-utils'); describe('env object', () => { it('is able to set env for an object', () => { - run(__dirname); + const { stderr, stdout, exitCode } = run(__dirname); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toBeTruthy(); + const executable = path.join(__dirname, './bin/main.js'); const bundledScript = spawnSync('node', [executable]); expect(bundledScript.stdout).toBe('environment is development'); diff --git a/test/help/help-commands.test.js b/test/help/help-commands.test.js index 63f2e94fdf4..a129994fd35 100644 --- a/test/help/help-commands.test.js +++ b/test/help/help-commands.test.js @@ -4,29 +4,42 @@ const { run } = require('../utils/test-utils'); const helpHeader = 'The build tool for modern web applications'; describe('commands help', () => { - it('throws error if supplied as an argument for subcommands', () => { - const { stderr } = run(__dirname, ['serve', 'help'], false); - expect(stderr).toContain('Unknown argument: help'); + it('shows help for subcommands', () => { + const { stderr, stdout, exitCode } = run(__dirname, ['serve', 'help'], false); + + expect(exitCode).toBe(0); + expect(stderr).toBeFalsy(); + expect(stdout).toContain('webpack s | serve'); }); it('shows help information with subcommands as an arg', () => { - const { stdout, stderr } = run(__dirname, ['help', 'serve'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['help', 'serve'], false); + + expect(exitCode).toBe(0); expect(stdout).toContain('webpack s | serve'); expect(stderr).toHaveLength(0); }); - it('throws error for invalid command with --help flag', () => { - const { stderr } = run(__dirname, ['--help', 'myCommand'], false); + it('shows warning for invalid command with --help flag', () => { + const { stderr, stdout, exitCode } = run(__dirname, ['--help', 'myCommand'], false); + + expect(exitCode).toBe(0); expect(stderr).toContain(`You provided an invalid command 'myCommand'`); + expect(stdout).toContain(helpHeader); }); - it('throws error for invalid command with help command', () => { - const { stderr } = run(__dirname, ['help', 'myCommand'], false); + it('shows warning for invalid command with help command', () => { + const { stderr, stdout, exitCode } = run(__dirname, ['help', 'myCommand'], false); + + expect(exitCode).toBe(0); expect(stderr).toContain(`You provided an invalid command 'myCommand'`); + expect(stdout).toContain(helpHeader); }); it('gives precedence to earlier command in case of multiple commands', () => { - const { stdout, stderr } = run(__dirname, ['--help', 'init', 'info'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--help', 'init', 'info'], false); + + expect(exitCode).toBe(0); expect(stdout).not.toContain(helpHeader); expect(stdout).toContain('webpack c | init [scaffold]'); expect(stderr).toHaveLength(0); diff --git a/test/help/help-flags.test.js b/test/help/help-flags.test.js index 544824ce3c4..4257f9a0781 100644 --- a/test/help/help-flags.test.js +++ b/test/help/help-flags.test.js @@ -4,25 +4,45 @@ const { run } = require('../utils/test-utils'); const helpHeader = 'The build tool for modern web applications'; describe('commands help', () => { - it('throws error for invalid flag with --help flag', () => { - const { stderr } = run(__dirname, ['--help', '--my-flag'], false); + it('log warning for invalid flag with --help flag', () => { + const { stderr, stdout, exitCode } = run(__dirname, ['--help', '--my-flag'], false); + + expect(exitCode).toBe(0); expect(stderr).toContain(`You provided an invalid option '--my-flag'`); + expect(stdout).toContain(helpHeader); }); - it('throws error for invalid flag with help command', () => { - const { stderr } = run(__dirname, ['help', '--my-flag'], false); + it('log warning for invalid flag with help command', () => { + const { stderr, stdout, exitCode } = run(__dirname, ['help', '--my-flag'], false); + + expect(exitCode).toBe(0); expect(stderr).toContain(`You provided an invalid option '--my-flag'`); + expect(stdout).toContain(helpHeader); }); it('shows flag help with valid flag', () => { - const { stdout, stderr } = run(__dirname, ['--help', '--merge'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--help', '--merge'], false); + + expect(exitCode).toBe(0); expect(stdout).not.toContain(helpHeader); expect(stdout).toContain('webpack -m, --merge'); expect(stderr).toHaveLength(0); }); + it('should show help for --mode', () => { + const { stdout, stderr, exitCode } = run(__dirname, ['--mode', '--help'], false); + + expect(exitCode).toBe(0); + expect(stdout).not.toContain(helpHeader); + expect(stdout).toContain('webpack --mode '); + expect(stdout).toContain('Defines the mode to pass to webpack'); + expect(stderr).toHaveLength(0); + }); + it('gives precedence to earlier flag in case of multiple flags', () => { - const { stdout, stderr } = run(__dirname, ['--help', '--entry', '--merge'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--help', '--entry', '--merge'], false); + + expect(exitCode).toBe(0); expect(stdout).not.toContain(helpHeader); expect(stdout).toContain('webpack --entry '); expect(stderr).toHaveLength(0); diff --git a/test/help/help-multi-args.test.js b/test/help/help-multi-args.test.js index b3e8298a4d2..bddba916b41 100644 --- a/test/help/help-multi-args.test.js +++ b/test/help/help-multi-args.test.js @@ -7,7 +7,9 @@ const helpHeader = 'The build tool for modern web applications'; describe('help cmd with multiple arguments', () => { commands.forEach((cmd) => { it(`shows cmd help with ${cmd.name}`, () => { - const { stdout, stderr } = run(__dirname, ['--help', `${cmd.name}`], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--help', `${cmd.name}`], false); + + expect(exitCode).toBe(0); expect(stdout).not.toContain(helpHeader); expect(stdout).toContain(`${cmd.name}`); expect(stdout).toContain(`${cmd.usage}`); @@ -17,7 +19,9 @@ describe('help cmd with multiple arguments', () => { }); it('should output help for --version by taking precedence', () => { - const { stdout, stderr } = run(__dirname, ['--help', '--version'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--help', '--version'], false); + + expect(exitCode).toBe(0); expect(stdout).not.toContain(helpHeader); expect(stdout).toContain('webpack -v, --version'); expect(stderr).toHaveLength(0); diff --git a/test/help/help-single-arg.test.js b/test/help/help-single-arg.test.js index 5583fc63ee1..a92326eefce 100644 --- a/test/help/help-single-arg.test.js +++ b/test/help/help-single-arg.test.js @@ -6,10 +6,12 @@ const helpHeader = 'The build tool for modern web applications'; describe('single help flag', () => { it('respects --no-color flag', () => { - const { stdout, stderr } = run(__dirname, ['--help', '--no-color'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--help', '--no-color'], false); const usage = 'webpack [...options] | '; const example = 'webpack help --flag | '; options.enabled = true; + + expect(exitCode).toBe(0); expect(stdout).not.toContain(yellow(usage)); expect(stdout).not.toContain(yellow(example)); expect(stdout).toContain(usage); @@ -18,13 +20,17 @@ describe('single help flag', () => { }); it('outputs help info with command syntax', () => { - const { stdout, stderr } = run(__dirname, ['help'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['help'], false); + + expect(exitCode).toBe(0); expect(stdout).toContain(helpHeader); expect(stderr).toHaveLength(0); }); it('outputs help info with dashed syntax', () => { - const { stdout, stderr } = run(__dirname, ['--help'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--help'], false); + + expect(exitCode).toBe(0); expect(stdout).toContain(helpHeader); expect(stderr).toHaveLength(0); }); diff --git a/test/hot/hot-flag.test.js b/test/hot/hot-flag.test.js index b9c30fe3f87..c7b75436954 100644 --- a/test/hot/hot-flag.test.js +++ b/test/hot/hot-flag.test.js @@ -6,7 +6,9 @@ const { yellow } = require('colorette'); describe('--hot flag', () => { it('should be successful when --hot is passed', (done) => { - const { stderr, stdout } = run(__dirname, ['--hot']); + const { stderr, stdout, exitCode } = run(__dirname, ['--hot']); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toContain('HotModuleReplacementPlugin'); @@ -18,7 +20,9 @@ describe('--hot flag', () => { }); it('should warn when --hot and --no-hot both are passed', (done) => { - const { stderr, stdout } = run(__dirname, ['--no-hot', '--hot']); + const { stderr, stdout, exitCode } = run(__dirname, ['--no-hot', '--hot']); + + expect(exitCode).toBe(0); expect(stderr).toContain( `[webpack-cli] ${yellow( 'You provided both --hot and --no-hot. We will use only the last of these flags that you provided in your CLI arguments', diff --git a/test/info/info-help.test.js b/test/info/info-help.test.js index 5544ce7df91..7b77f3e0d83 100644 --- a/test/info/info-help.test.js +++ b/test/info/info-help.test.js @@ -11,23 +11,29 @@ const descriptionText = 'Outputs information about your system and dependencies' describe('should print help for info command', () => { it('shows usage information on supplying help flag', () => { - const { stdout, stderr } = runInfo(['--help'], __dirname); + const { stdout, stderr, exitCode } = runInfo(['--help'], __dirname); + + expect(exitCode).toBe(0); expect(stdout).toContain(usageText); expect(stdout).toContain(descriptionText); expect(stderr).toHaveLength(0); }); it('should respect the --no-color flag', () => { - const { stdout, stderr } = runInfo(['--help', '--no-color'], __dirname); + const { stdout, stderr, exitCode } = runInfo(['--help', '--no-color'], __dirname); options.enabled = true; + + expect(exitCode).toBe(0); expect(stdout).not.toContain(yellow(usageText)); expect(stdout).toContain(descriptionText); expect(stderr).toHaveLength(0); }); it('should output all cli flags', () => { - const { stdout, stderr } = runInfo(['--help'], __dirname); + const { stdout, stderr, exitCode } = runInfo(['--help'], __dirname); + infoFlags.forEach((flag) => expect(stdout).toContain(`--${flag.name}`)); expect(stderr).toHaveLength(0); + expect(exitCode).toBe(0); }); }); diff --git a/test/info/info-output.test.js b/test/info/info-output.test.js index d85d3b8fedc..8742416eae6 100644 --- a/test/info/info-output.test.js +++ b/test/info/info-output.test.js @@ -39,8 +39,10 @@ describe('basic info usage', () => { }); it('shows a warning if an invalid value is supplied', () => { - const { stdout, stderr } = runInfo(['--output="unknown"'], __dirname); - expect(stderr).toContain(`[webpack-cli] ${red(`"unknown" is not a valid value for output\n`)}`); - expect(stdout).toBeTruthy(); + const { stdout, stderr, exitCode } = runInfo(['--output=unknown'], __dirname); + + expect(exitCode).toBe(2); + expect(stderr).toContain(`[webpack-cli] ${red(`'unknown' is not a valid value for output`)}`); + expect(stdout).toBeFalsy(); }); }); diff --git a/test/info/info-unknown.test.js b/test/info/info-unknown.test.js index bcb071cf287..2cd8f8c7593 100644 --- a/test/info/info-unknown.test.js +++ b/test/info/info-unknown.test.js @@ -3,7 +3,10 @@ const { runInfo } = require('../utils/test-utils'); describe('should handle unknown args', () => { it('shows an appropriate warning on supplying unknown args', () => { - const { stderr } = runInfo(['--unknown'], __dirname); + const { stderr, stdout, exitCode } = runInfo(['--unknown'], __dirname); + + expect(exitCode).toBe(2); expect(stderr).toContain(`[webpack-cli] ${red('Unknown argument: --unknown')}`); + expect(stdout).toBeFalsy(); }); }); diff --git a/test/mode/mode-single-arg/mode-single-arg.test.js b/test/mode/mode-single-arg/mode-single-arg.test.js index 93dcc74cdc8..03a3be80584 100644 --- a/test/mode/mode-single-arg/mode-single-arg.test.js +++ b/test/mode/mode-single-arg/mode-single-arg.test.js @@ -3,37 +3,49 @@ const { run } = require('../../utils/test-utils'); describe('mode flags', () => { it('should set mode=production by default', () => { - const { stderr, stdout } = run(__dirname); + const { stderr, stdout, exitCode } = run(__dirname); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toContain(`mode: 'production'`); }); it('should load a development config when --mode=development is passed', () => { - const { stderr, stdout } = run(__dirname, ['--mode', 'development']); + const { stderr, stdout, exitCode } = run(__dirname, ['--mode', 'development']); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toContain(`mode: 'development'`); }); it('should load a production config when --mode=production is passed', () => { - const { stderr, stdout } = run(__dirname, ['--mode', 'production']); + const { stderr, stdout, exitCode } = run(__dirname, ['--mode', 'production']); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toContain(`mode: 'production'`); }); it('should load a none config when --mode=none is passed', () => { - const { stderr, stdout } = run(__dirname, ['--mode', 'none']); + const { stderr, stdout, exitCode } = run(__dirname, ['--mode', 'none']); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toContain(`mode: 'none'`); }); it('should pick mode form NODE_ENV', () => { - const { stderr, stdout } = run(__dirname, [], false, [], { NODE_ENV: 'development' }); + const { stderr, stdout, exitCode } = run(__dirname, [], false, [], { NODE_ENV: 'development' }); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toContain(`mode: 'development'`); }); it('should throw error when --mode=abcd is passed', () => { - const { stderr } = run(__dirname, ['--mode', 'abcd']); + const { stderr, exitCode } = run(__dirname, ['--mode', 'abcd']); + + expect(exitCode).toBe(2); expect(stderr).toContain('configuration.mode should be one of these'); expect(stderr).toContain(`"development" | "production" | "none"`); }); diff --git a/test/mode/mode-with-config/mode-with-config.test.js b/test/mode/mode-with-config/mode-with-config.test.js index 0609608f14d..9eee9f6f8d4 100644 --- a/test/mode/mode-with-config/mode-with-config.test.js +++ b/test/mode/mode-with-config/mode-with-config.test.js @@ -6,7 +6,9 @@ const { run } = require('../../utils/test-utils'); describe('mode flags with config', () => { it('should run in production mode when --mode=production is passed', (done) => { - const { stderr, stdout } = run(__dirname, ['--mode', 'production', '--config', './webpack.config.js']); + const { stderr, stdout, exitCode } = run(__dirname, ['--mode', 'production', '--config', './webpack.config.js']); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); @@ -35,7 +37,9 @@ describe('mode flags with config', () => { }); it('should run in development mode when --mode=development is passed', (done) => { - const { stderr, stdout } = run(__dirname, ['--mode', 'development', '--config', './webpack.config.js']); + const { stderr, stdout, exitCode } = run(__dirname, ['--mode', 'development', '--config', './webpack.config.js']); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); @@ -64,7 +68,9 @@ describe('mode flags with config', () => { }); it('should run in none mode when --mode=none is passed', (done) => { - const { stderr, stdout } = run(__dirname, ['--mode', 'none', '--config', './webpack.config.js']); + const { stderr, stdout, exitCode } = run(__dirname, ['--mode', 'none', '--config', './webpack.config.js']); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); @@ -94,6 +100,7 @@ describe('mode flags with config', () => { it('should use mode flag over config', () => { const { stdout, stderr, exitCode } = run(__dirname, ['--mode', 'production', '-c', 'webpack.config2.js']); + expect(stderr).toBeFalsy(); expect(exitCode).toEqual(0); expect(stdout).toContain(`mode: 'production'`); @@ -103,6 +110,7 @@ describe('mode flags with config', () => { const { stdout, stderr, exitCode } = run(__dirname, ['--mode', 'none', '-c', 'webpack.config2.js'], false, [], { NODE_ENV: 'production', }); + expect(stderr).toBeFalsy(); expect(exitCode).toEqual(0); expect(stdout).toContain(`mode: 'none'`); @@ -110,6 +118,7 @@ describe('mode flags with config', () => { it('should use mode from config over NODE_ENV', () => { const { stdout, stderr, exitCode } = run(__dirname, ['-c', 'webpack.config2.js']); + expect(stderr).toBeFalsy(); expect(exitCode).toEqual(0); expect(stdout).toContain(`mode: 'development'`); @@ -117,6 +126,7 @@ describe('mode flags with config', () => { it('should use mode from config when multiple config are supplied', () => { const { stdout, stderr } = run(__dirname, ['-c', 'webpack.config3.js', '-c', 'webpack.config2.js']); + expect(stderr).toBeFalsy(); expect(stdout).toContain(`mode: 'development'`); expect(stdout.match(new RegExp("mode: 'development'", 'g')).length).toEqual(1); @@ -124,6 +134,7 @@ describe('mode flags with config', () => { it('mode flag should apply to all configs', () => { const { stdout, stderr, exitCode } = run(__dirname, ['--mode', 'none', '-c', './webpack.config3.js', '-c', './webpack.config2.js']); + expect(stderr).toBeFalsy(); expect(exitCode).toEqual(0); expect(stdout).toContain(`mode: 'none'`); @@ -134,6 +145,7 @@ describe('mode flags with config', () => { const { stdout, stderr, exitCode } = run(__dirname, ['-c', './webpack.config3.js', '-c', './webpack.config2.js'], false, [], { NODE_ENV: 'production', }); + expect(stderr).toBeFalsy(); expect(exitCode).toEqual(0); expect(stdout).toContain(`mode: 'production'`); diff --git a/test/name/name.test.js b/test/name/name.test.js index 7321c6c99af..d615a55ee3f 100644 --- a/test/name/name.test.js +++ b/test/name/name.test.js @@ -3,8 +3,10 @@ const { run } = require('../utils/test-utils'); describe('name flag', () => { it('should set the flag in the config', () => { - const { stdout, stderr } = run(__dirname, ['--name', 'config-name'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--name', 'config-name'], false); + expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); expect(stdout).toContain("name: 'config-name'"); }); }); diff --git a/test/no-hot/no-hot.test.js b/test/no-hot/no-hot.test.js index b139d009dc0..bd80177cd9a 100644 --- a/test/no-hot/no-hot.test.js +++ b/test/no-hot/no-hot.test.js @@ -6,7 +6,9 @@ const { yellow } = require('colorette'); describe('no-hot flag', () => { it('should be successful when --no-hot is passed', (done) => { - const { stderr, stdout } = run(__dirname, ['--no-hot']); + const { stderr, stdout, exitCode } = run(__dirname, ['--no-hot']); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toBeTruthy(); expect(stdout).not.toContain('webpack/runtime/hot module replacement'); @@ -25,7 +27,9 @@ describe('no-hot flag', () => { }); it('should warn when --hot and --no-hot both are passed', (done) => { - const { stderr, stdout } = run(__dirname, ['--hot', '--no-hot']); + const { stderr, stdout, exitCode } = run(__dirname, ['--hot', '--no-hot']); + + expect(exitCode).toBe(0); expect(stderr).toContain( `[webpack-cli] ${yellow( 'You provided both --hot and --no-hot. We will use only the last of these flags that you provided in your CLI arguments', diff --git a/test/node/node.test.js b/test/node/node.test.js index 9807d8d13ed..077e34044a4 100644 --- a/test/node/node.test.js +++ b/test/node/node.test.js @@ -8,10 +8,12 @@ const { run } = require('../utils/test-utils'); // throws different error from what we manually see describe('node flags', () => { it('is able to pass the options flags to node js', async (done) => { - const { stdout, stderr } = await run(__dirname, ['--output-path', './bin'], false, [ + const { stdout, stderr, exitCode } = await run(__dirname, ['--output-path', './bin'], false, [ `--require=${resolve(__dirname, 'bootstrap.js')}`, `--require=${resolve(__dirname, 'bootstrap2.js')}`, ]); + + expect(exitCode).toBe(0); expect(stdout).toContain('---from bootstrap.js---'); expect(stdout).toContain('---from bootstrap2.js---'); expect(stderr).toBeFalsy(); @@ -23,18 +25,24 @@ describe('node flags', () => { }); it('throws an error on supplying unknown flags', async () => { - const { stderr } = await run(__dirname, [], false, ['--unknown']); + const { stderr, exitCode } = await run(__dirname, [], false, ['--unknown']); + + expect(exitCode).not.toBe(0); expect(stderr).toContain('bad option'); }); it('throws an error if no values were supplied with --max-old-space-size', async () => { - const { stderr, stdout } = await run(__dirname, [], false, ['--max-old-space-size']); + const { stderr, stdout, exitCode } = await run(__dirname, [], false, ['--max-old-space-size']); + + expect(exitCode).not.toBe(0); expect(stderr).toContain('value for flag --max-old-space-size'); expect(stdout).toBeFalsy(); }); it('throws an error if an illegal value was supplied with --max-old-space-size', async () => { - const { stderr, stdout } = await run(__dirname, [], true, ['--max_old_space_size=1024a']); + const { stderr, stdout, exitCode } = await run(__dirname, [], true, ['--max_old_space_size=1024a']); + + expect(exitCode).not.toBe(0); expect(stderr).toContain('Error: illegal value for flag --max_old_space_size=1024a of type size_t'); expect(stdout).toBeFalsy(); }); diff --git a/test/optimization/optimization.test.js b/test/optimization/optimization.test.js index 5cc52e669be..74e97f03e7f 100644 --- a/test/optimization/optimization.test.js +++ b/test/optimization/optimization.test.js @@ -5,16 +5,18 @@ const { run } = require('../utils/test-utils'); describe('optimization option in config', () => { it('should work with mangleExports disabled', () => { - const { stdout, stderr } = run(__dirname, [], false); + const { stdout, stderr, exitCode } = run(__dirname, [], false); // Should throw when webpack is less than 5 if (!version.startsWith('5')) { expect(stderr).toContain("configuration.optimization has an unknown property 'mangleExports'"); + expect(exitCode).toBe(2); } else { // Should apply the provided optimization to the compiler expect(stdout).toContain('mangleExports: false'); // check that the output file exists expect(fs.existsSync(join(__dirname, '/dist/main.js'))).toBeTruthy(); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); } }); }); diff --git a/test/output/named-bundles/output-named-bundles.test.js b/test/output/named-bundles/output-named-bundles.test.js index ecd7970531f..0743bb84f67 100644 --- a/test/output/named-bundles/output-named-bundles.test.js +++ b/test/output/named-bundles/output-named-bundles.test.js @@ -5,7 +5,9 @@ const { run } = require('../../utils/test-utils'); describe('output flag named bundles', () => { it('should output file given as flag instead of in configuration', () => { - const { stderr } = run(__dirname, ['-c', resolve(__dirname, 'webpack.config.js'), '--output-path', './binary'], false); + const { stderr, exitCode } = run(__dirname, ['-c', resolve(__dirname, 'webpack.config.js'), '--output-path', './binary'], false); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); const stats = statSync(resolve(__dirname, './binary/a.bundle.js')); @@ -13,7 +15,9 @@ describe('output flag named bundles', () => { }); it('should resolve the path to binary/a.bundle.js as ./binary/a.bundle.js', () => { - const { stderr } = run(__dirname, ['-c', resolve(__dirname, 'webpack.config.js'), '--output-path', 'binary'], false); + const { stderr, exitCode } = run(__dirname, ['-c', resolve(__dirname, 'webpack.config.js'), '--output-path', 'binary'], false); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); const stats = statSync(resolve(__dirname, './binary/a.bundle.js')); @@ -21,7 +25,13 @@ describe('output flag named bundles', () => { }); it('should create multiple bundles with an overriding flag', () => { - const { stderr } = run(__dirname, ['-c', resolve(__dirname, 'webpack.single.config.js'), '--output-path', './bin'], false); + const { stderr, exitCode } = run( + __dirname, + ['-c', resolve(__dirname, 'webpack.single.config.js'), '--output-path', './bin'], + false, + ); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); let stats = statSync(resolve(__dirname, './bin/b.bundle.js')); @@ -31,7 +41,9 @@ describe('output flag named bundles', () => { }); it('should successfully compile multiple entries', () => { - const { stderr } = run(__dirname, ['-c', resolve(__dirname, 'webpack.multiple.config.js')], false); + const { stderr, exitCode } = run(__dirname, ['-c', resolve(__dirname, 'webpack.multiple.config.js')], false); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); let stats = statSync(resolve(__dirname, './bin/b.bundle.js')); @@ -42,6 +54,7 @@ describe('output flag named bundles', () => { it('should output file in bin directory using default webpack config with warning for empty output value', () => { const { stdout, stderr, exitCode } = run(__dirname, ['--output-path'], false); + expect(stderr).toEqual("error: option '-o, --output-path ' argument missing"); expect(exitCode).toEqual(1); expect(stdout).toBeFalsy(); diff --git a/test/prefetch/prefetch.test.js b/test/prefetch/prefetch.test.js index 66dcb8933b1..2c5eafad51c 100644 --- a/test/prefetch/prefetch.test.js +++ b/test/prefetch/prefetch.test.js @@ -9,7 +9,7 @@ describe('Prefetch Flag', () => { }); it('Should load the prefetched file', () => { - const { stdout, stderr } = run(__dirname, ['--prefetch', './src/p.js'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--prefetch', './src/p.js'], false); // Should be able to find the entry file expect(stdout).toContain('./src/index.js'); // Should invoke the PrefetchPlugin with correct params @@ -17,21 +17,24 @@ describe('Prefetch Flag', () => { // check that the output file exists expect(fs.existsSync(join(__dirname, '/dist/main.js'))).toBeTruthy(); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); }); it('Should err when the prefetched file is absent', () => { - const { stdout, stderr } = run(__dirname, ['--prefetch', './src/somefile.js'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--prefetch', './src/somefile.js'], false); // Should contain the error message expect(stdout).toContain(`Error: Can't resolve './src/somefile.js'`); + expect(exitCode).toBe(1); // check that the output file does not exist since prefetched file is not found expect(fs.existsSync(join(__dirname, '/dist/main.js'))).toBeFalsy(); expect(stderr).toBeFalsy(); }); it('Should err when flag value is not supplied', () => { - const { stdout, stderr } = run(__dirname, ['--prefetch'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--prefetch'], false); // Should contain the error message expect(stderr).toContain(`error: option '--prefetch ' argument missing`); expect(stdout).toBeFalsy(); + expect(exitCode).toBe(1); }); }); diff --git a/test/progress/progress-flag.test.js b/test/progress/progress-flag.test.js index b98aad11e83..7aebd90ab12 100644 --- a/test/progress/progress-flag.test.js +++ b/test/progress/progress-flag.test.js @@ -1,20 +1,43 @@ 'use strict'; -const { run } = require('../utils/test-utils'); +const { run, isWebpack5 } = require('../utils/test-utils'); describe('progress flag', () => { it('should show progress', () => { - const { stderr, stdout } = run(__dirname, ['--progress']); + const { stderr, stdout, exitCode } = run(__dirname, ['--progress']); + + expect(exitCode).toBe(0); + expect(stderr).not.toMatch(/\[webpack\.Progress] \d+ ms setup/); + expect(stderr).toContain('[webpack.Progress] 100%'); + expect(stdout).toContain('main.js'); + }); + + it('should support the "profile" value', () => { + const { stderr, stdout, exitCode } = run(__dirname, ['--progress=profile']); + + expect(exitCode).toBe(0); + if (isWebpack5) { + expect(stderr).toMatch(/\[webpack\.Progress] \d+ ms setup/); + } expect(stderr).toContain('[webpack.Progress] 100%'); expect(stdout).toContain('main.js'); }); + it('should not support invalid value', () => { + const { stderr, stdout, exitCode } = run(__dirname, ['--progress=unknown']); + + expect(exitCode).toBe(2); + expect(stderr).toContain(`'unknown' is an invalid value for the --progress option. Only 'profile' is allowed.`); + expect(stdout).toBeFalsy(); + }); + it('should not add duplicate plugins', () => { const { stderr, stdout, exitCode } = run(__dirname, ['-c', 'webpack.progress.config.js', '--progress']); - // Only 1 progress plugin should be applied to the compiler + + expect(exitCode).toEqual(0); expect(stdout.match(/ProgressPlugin/g)).toHaveLength(1); + expect(stderr).not.toMatch(/\[webpack\.Progress] \d+ ms setup/); expect(stderr).toContain('[webpack.Progress] 100%'); expect(stdout).toContain('main.js'); - expect(exitCode).toEqual(0); }); }); diff --git a/test/serve/basic/serve-basic.test.js b/test/serve/basic/serve-basic.test.js index b7ff5d2c847..2ad37284524 100644 --- a/test/serve/basic/serve-basic.test.js +++ b/test/serve/basic/serve-basic.test.js @@ -3,7 +3,7 @@ const { yellow, options } = require('colorette'); const path = require('path'); const getPort = require('get-port'); -const { runServe } = require('../../utils/test-utils'); +const { runServe, isDevServer4 } = require('../../utils/test-utils'); const testPath = path.resolve(__dirname); @@ -56,6 +56,13 @@ describe('basic serve usage', () => { expect(stderr).toHaveLength(0); }); + it('uses hot-only flag to alter bundle', async () => { + const { stdout, stderr } = await runServe(['--port', port, isDevServer4 ? '--hot only' : '--hot-only'], testPath); + expect(stdout).toContain('main.js'); + expect(stdout).toContain('HotModuleReplacementPlugin'); + expect(stderr).toBeFalsy(); + }); + it('uses no-hot flag', async () => { const { stdout, stderr } = await runServe(['--port', port, '--no-hot'], testPath); expect(stdout).toContain('main.js'); diff --git a/test/serve/serve-variable/serve-basic.test.js b/test/serve/serve-variable/serve-basic.test.js new file mode 100644 index 00000000000..d8e6bc12c77 --- /dev/null +++ b/test/serve/serve-variable/serve-basic.test.js @@ -0,0 +1,33 @@ +'use strict'; + +const path = require('path'); +const getPort = require('get-port'); +const { runServe } = require('../../utils/test-utils'); + +const testPath = path.resolve(__dirname); + +describe('serve variable', () => { + let port; + + beforeEach(async () => { + port = await getPort(); + }); + + const isWindows = process.platform === 'win32'; + + // TODO fix me on windows + if (isWindows) { + it('TODO: Fix on windows', () => { + expect(true).toBe(true); + }); + return; + } + + it('compiles without flags and export variable', async () => { + const { stdout, stderr } = await runServe(['--port', port], testPath); + expect(stdout).toContain('main.js'); + expect(stdout).not.toContain('HotModuleReplacementPlugin'); + expect(stderr).toHaveLength(0); + expect(stdout).toContain('PASS'); + }); +}); diff --git a/test/serve/serve-variable/src/index.js b/test/serve/serve-variable/src/index.js new file mode 100644 index 00000000000..6be02374db1 --- /dev/null +++ b/test/serve/serve-variable/src/index.js @@ -0,0 +1 @@ +console.log('hello world'); diff --git a/test/serve/serve-variable/webpack.config.js b/test/serve/serve-variable/webpack.config.js new file mode 100644 index 00000000000..435b8b21190 --- /dev/null +++ b/test/serve/serve-variable/webpack.config.js @@ -0,0 +1,24 @@ +const isInProcess = process.env.WEBPACK_SERVE; + +class CustomTestPlugin { + constructor(isInEnvironment) { + this.isInEnvironment = isInEnvironment; + } + apply(compiler) { + compiler.hooks.done.tap('testPlugin', () => { + if (!isInProcess && this.isInEnvironment) { + console.log('PASS'); + } else { + console.log('FAIL'); + } + }); + } +} + +module.exports = (env) => { + return { + mode: 'development', + devtool: false, + plugins: [new CustomTestPlugin(env.WEBPACK_SERVE)], + }; +}; diff --git a/test/stats/cli-flags/stats.test.js b/test/stats/cli-flags/stats.test.js index e8baa9b0f20..ed461160782 100644 --- a/test/stats/cli-flags/stats.test.js +++ b/test/stats/cli-flags/stats.test.js @@ -12,7 +12,9 @@ if (isWebpack5) { describe('stats flag', () => { for (const preset of presets) { it(`should accept --stats "${preset}"`, () => { - const { stderr, stdout } = run(__dirname, ['--stats', `${preset}`]); + const { stderr, stdout, exitCode } = run(__dirname, ['--stats', `${preset}`]); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); if (isWebpack5) { expect(stdout).toContain(`stats: { preset: '${preset}' }`); @@ -23,7 +25,9 @@ describe('stats flag', () => { } it('should accept stats as boolean', () => { - const { stderr, stdout } = run(__dirname, ['--stats']); + const { stderr, stdout, exitCode } = run(__dirname, ['--stats']); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); if (isWebpack5) { expect(stdout).toContain(`stats: { preset: 'normal' }`); @@ -34,6 +38,7 @@ describe('stats flag', () => { it('should warn when an unknown flag stats value is passed', () => { const { stderr, exitCode } = run(__dirname, ['--stats', 'foo']); + expect(stderr).toBeTruthy(); expect(stderr).toContain('* configuration.stats should be one of these:'); if (isWebpack5) { diff --git a/test/stats/config/stats.test.js b/test/stats/config/stats.test.js index 8f44bbfb363..84c77b6e3ca 100644 --- a/test/stats/config/stats.test.js +++ b/test/stats/config/stats.test.js @@ -6,7 +6,9 @@ const { version } = require('webpack'); describe('stats flag with config', () => { it('should compile without stats flag', () => { - const { stderr, stdout } = run(__dirname, []); + const { stderr, stdout, exitCode } = run(__dirname, []); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); if (version.startsWith('5')) { expect(stdout).toContain(`stats: { preset: 'normal' }`); @@ -15,7 +17,9 @@ describe('stats flag with config', () => { } }); it('should compile with stats flag', () => { - const { stderr, stdout } = run(__dirname, ['--stats', 'errors-warnings']); + const { stderr, stdout, exitCode } = run(__dirname, ['--stats', 'errors-warnings']); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); if (version.startsWith('5')) { expect(stdout).toContain(`stats: { preset: 'errors-warnings' }`); diff --git a/test/target/flag-test/target-flag.test.js b/test/target/flag-test/target-flag.test.js index 0d15d20293a..23b01983600 100644 --- a/test/target/flag-test/target-flag.test.js +++ b/test/target/flag-test/target-flag.test.js @@ -8,7 +8,9 @@ const targetValues = ['web', 'webworker', 'node', 'async-node', 'node-webkit', ' describe('--target flag', () => { targetValues.forEach((val) => { it(`should accept ${val} with --target flag`, (done) => { - const { stdout, stderr } = run(__dirname, ['--target', `${val}`]); + const { stdout, stderr, exitCode } = run(__dirname, ['--target', `${val}`]); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); if (isWebpack5) { expect(stdout).toContain(`target: [ '${val}' ]`); @@ -24,7 +26,9 @@ describe('--target flag', () => { }); it(`should accept ${val} with -t alias`, (done) => { - const { stdout, stderr } = run(__dirname, ['-t', `${val}`]); + const { stdout, stderr, exitCode } = run(__dirname, ['-t', `${val}`]); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); if (isWebpack5) { expect(stdout).toContain(`target: [ '${val}' ]`); @@ -41,7 +45,9 @@ describe('--target flag', () => { }); it(`should throw error with invalid value for --target`, () => { - const { stderr } = run(__dirname, ['--target', 'invalid']); + const { stderr, exitCode } = run(__dirname, ['--target', 'invalid']); + + expect(exitCode).toBe(2); if (isWebpack5) { expect(stderr).toContain(`Unknown target 'invalid'`); } else { @@ -51,7 +57,9 @@ describe('--target flag', () => { if (isWebpack5) { it('should allow multiple targets', () => { - const { stderr, stdout } = run(__dirname, ['--target', 'node', '--target', 'async-node']); + const { stderr, stdout, exitCode } = run(__dirname, ['--target', 'node', '--target', 'async-node']); + + expect(exitCode).toBe(0); expect(stderr).toBeFalsy(); expect(stdout).toContain(`target: [ 'node', 'async-node' ]`); }); diff --git a/test/unknown/unknown.test.js b/test/unknown/unknown.test.js index 8352b345d6f..903122b2495 100644 --- a/test/unknown/unknown.test.js +++ b/test/unknown/unknown.test.js @@ -2,8 +2,15 @@ const { run } = require('../utils/test-utils'); describe('unknown behaviour', () => { it('warns the user if an unknown flag is passed in', () => { - const { stderr } = run(__dirname, ['--unknown']); + const { stderr, exitCode } = run(__dirname, ['--unknown']); expect(stderr).toBeTruthy(); expect(stderr).toContain('Unknown argument: --unknown'); + expect(exitCode).toBe(2); + }); + it('suggests the closest match to an unknown flag', () => { + const { stderr, stdout, exitCode } = run(__dirname, ['--entyr', './a.js']); + expect(stderr).toContain('Unknown argument: --entyr'); + expect(stdout).toContain('Did you mean --entry?'); + expect(exitCode).toBe(2); }); }); diff --git a/test/utils/cli-plugin-test/plugin.test.js b/test/utils/cli-plugin-test/plugin.test.js index 96a5ff20c27..14e4810a3fa 100644 --- a/test/utils/cli-plugin-test/plugin.test.js +++ b/test/utils/cli-plugin-test/plugin.test.js @@ -10,6 +10,6 @@ describe('webpack-cli-test-plugin Test', () => { if (typeof cli !== 'undefined') { expect(stdout).toContain(`alias: { alias: [ 'alias1', 'alias2' ] }`); } - expect(stdout).toContain('plugins: [ WebpackCLITestPlugin { opts: [Array], showAll: true } ]'); + expect(stdout).toContain(` WebpackCLITestPlugin { opts: [Array], showAll: true }`); }); }); diff --git a/test/utils/test-utils.js b/test/utils/test-utils.js index 2968602be01..5f24458ad91 100644 --- a/test/utils/test-utils.js +++ b/test/utils/test-utils.js @@ -7,11 +7,13 @@ const { sync: spawnSync, node: execaNode } = execa; const { Writable } = require('readable-stream'); const concat = require('concat-stream'); const { version } = require('webpack'); +const { version: devServerVersion } = require('webpack-dev-server/package.json'); const { hyphenToUpperCase } = require('../../packages/webpack-cli/lib/utils/arg-utils'); const WEBPACK_PATH = path.resolve(__dirname, '../../packages/webpack-cli/bin/cli.js'); const ENABLE_LOG_COMPILATION = process.env.ENABLE_PIPE || false; const isWebpack5 = version.startsWith('5'); +const isDevServer4 = devServerVersion.startsWith('4'); const isWindows = process.platform === 'win32'; /** @@ -248,5 +250,6 @@ module.exports = { runInfo, hyphenToUpperCase, isWebpack5, + isDevServer4, isWindows, }; diff --git a/test/version/version-external-packages.test.js b/test/version/version-external-packages.test.js index 505a46a2c7d..7dfd06b5084 100644 --- a/test/version/version-external-packages.test.js +++ b/test/version/version-external-packages.test.js @@ -11,73 +11,95 @@ const cliPkgJSON = require('../../packages/webpack-cli/package.json'); describe('version flag with external packages', () => { it('outputs version with init', () => { - const { stdout, stderr } = run(__dirname, ['init', '--version'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['init', '--version'], false); + + expect(exitCode).toBe(0); expect(stdout).toContain(initPkgJSON.version); expect(stdout).toContain(cliPkgJSON.version); expect(stderr).toHaveLength(0); }); it('outputs version with the alias c for init', () => { - const { stdout, stderr } = run(__dirname, ['c', '--version'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['c', '--version'], false); + + expect(exitCode).toBe(0); expect(stdout).toContain(initPkgJSON.version); expect(stdout).toContain(cliPkgJSON.version); expect(stderr).toHaveLength(0); }); it('outputs version with info', () => { - const { stdout, stderr } = run(__dirname, ['info', '--version'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['info', '--version'], false); + + expect(exitCode).toBe(0); expect(stdout).toContain(infoPkgJSON.version); expect(stdout).toContain(cliPkgJSON.version); expect(stderr).toHaveLength(0); }); it('outputs version with serve', () => { - const { stdout, stderr } = run(__dirname, ['serve', '--version'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['serve', '--version'], false); + + expect(exitCode).toBe(0); expect(stdout).toContain(servePkgJSON.version); expect(stdout).toContain(cliPkgJSON.version); expect(stderr).toHaveLength(0); }); it('outputs version with migrate', () => { - const { stdout, stderr } = run(__dirname, ['migrate', '--version'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['migrate', '--version'], false); + + expect(exitCode).toBe(0); expect(stdout).toContain(migratePkgJSON.version); expect(stdout).toContain(cliPkgJSON.version); expect(stderr).toHaveLength(0); }); it('outputs version with plugin', () => { - const { stdout, stderr } = run(__dirname, ['plugin', '--version'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['plugin', '--version'], false); + + expect(exitCode).toBe(0); expect(stdout).toContain(pluginPkgJSON.version); expect(stdout).toContain(cliPkgJSON.version); expect(stderr).toHaveLength(0); }); it('outputs version with loader', () => { - const { stdout, stderr } = run(__dirname, ['loader', '--version'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['loader', '--version'], false); + + expect(exitCode).toBe(0); expect(stdout).toContain(loaderPkgJSON.version); expect(stdout).toContain(cliPkgJSON.version); expect(stderr).toHaveLength(0); }); it(' should throw error for multiple commands', () => { - const { stderr } = run(__dirname, ['init', 'migrate', '--version'], false); + const { stderr, exitCode } = run(__dirname, ['init', 'migrate', '--version'], false); + + expect(exitCode).toBe(2); expect(stderr).toContain('You provided multiple commands.'); }); it(' should throw error if invalid argument is present with --version flag', () => { - const { stderr, stdout } = run(__dirname, ['init', 'abc', '--version'], false); + const { stderr, stdout, exitCode } = run(__dirname, ['init', 'abc', '--version'], false); + + expect(exitCode).toBe(2); expect(stderr).toContain(`Error: Invalid command 'abc'`); expect(stdout).toContain('Run webpack --help to see available commands and arguments'); }); it(' should throw error if invalid argument is present with version command', () => { - const { stderr, stdout } = run(__dirname, ['init', 'abc', 'version'], false); + const { stderr, stdout, exitCode } = run(__dirname, ['init', 'abc', 'version'], false); + + expect(exitCode).toBe(2); expect(stderr).toContain(`Error: Invalid command 'abc'`); expect(stdout).toContain('Run webpack --help to see available commands and arguments'); }); it(' should throw error if invalid argument is present with -v alias', () => { - const { stderr, stdout } = run(__dirname, ['init', 'abc', '-v'], false); + const { stderr, stdout, exitCode } = run(__dirname, ['init', 'abc', '-v'], false); + + expect(exitCode).toBe(2); expect(stderr).toContain(`Error: Invalid command 'abc'`); expect(stdout).toContain('Run webpack --help to see available commands and arguments'); }); diff --git a/test/version/version-multi-args.test.js b/test/version/version-multi-args.test.js index ada6c9917de..585bb59b792 100644 --- a/test/version/version-multi-args.test.js +++ b/test/version/version-multi-args.test.js @@ -5,8 +5,10 @@ const pkgJSON = require('../../packages/webpack-cli/package.json'); describe('version flag with multiple arguments', () => { it('does not output version with help command', () => { - const { stdout, stderr } = run(__dirname, ['version', 'help'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['version', 'help'], false); + expect(stdout).not.toContain(pkgJSON.version); + expect(exitCode).toBe(0); const uniqueIdentifier = 'The build tool for modern web applications'; expect(stdout).toContain(uniqueIdentifier); @@ -14,8 +16,10 @@ describe('version flag with multiple arguments', () => { }); it('does not output version with help dashed', () => { - const { stdout, stderr } = run(__dirname, ['version', '--help'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['version', '--help'], false); + expect(stdout).not.toContain(pkgJSON.version); + expect(exitCode).toBe(0); const uniqueIdentifier = 'The build tool for modern web applications'; expect(stdout).toContain(uniqueIdentifier); @@ -23,42 +27,54 @@ describe('version flag with multiple arguments', () => { }); it('throws error if invalid command is passed with version command', () => { - const { stdout, stderr } = run(__dirname, ['version', 'abc'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['version', 'abc'], false); + + expect(exitCode).toBe(2); expect(stdout).not.toContain(pkgJSON.version); expect(stderr).toContain(`Error: Invalid command 'abc'`); expect(stdout).toContain('Run webpack --help to see available commands and arguments'); }); it('throws error if invalid option is passed with version command', () => { - const { stdout, stderr } = run(__dirname, ['version', '--abc'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['version', '--abc'], false); + + expect(exitCode).toBe(2); expect(stdout).not.toContain(pkgJSON.version); expect(stderr).toContain(`Error: Invalid option '--abc'`); expect(stdout).toContain('Run webpack --help to see available commands and arguments'); }); it('throws error if invalid command is passed with --version flag', () => { - const { stdout, stderr } = run(__dirname, ['--version', 'abc'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--version', 'abc'], false); + + expect(exitCode).toBe(2); expect(stdout).not.toContain(pkgJSON.version); expect(stderr).toContain(`Error: Invalid command 'abc'`); expect(stdout).toContain('Run webpack --help to see available commands and arguments'); }); it('throws error if invalid option is passed with --version flag', () => { - const { stdout, stderr } = run(__dirname, ['--version', '--abc'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--version', '--abc'], false); + + expect(exitCode).toBe(2); expect(stdout).not.toContain(pkgJSON.version); expect(stderr).toContain(`Error: Invalid option '--abc'`); expect(stdout).toContain('Run webpack --help to see available commands and arguments'); }); it('throws error if invalid command is passed with -v alias', () => { - const { stdout, stderr } = run(__dirname, ['-v', 'abc'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['-v', 'abc'], false); + + expect(exitCode).toBe(2); expect(stdout).not.toContain(pkgJSON.version); expect(stderr).toContain(`Error: Invalid command 'abc'`); expect(stdout).toContain('Run webpack --help to see available commands and arguments'); }); it('throws error if invalid option is passed with -v alias', () => { - const { stdout, stderr } = run(__dirname, ['-v', '--abc'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['-v', '--abc'], false); + + expect(exitCode).toBe(2); expect(stdout).not.toContain(pkgJSON.version); expect(stderr).toContain(`Error: Invalid option '--abc'`); expect(stdout).toContain('Run webpack --help to see available commands and arguments'); diff --git a/test/version/version-single-arg.test.js b/test/version/version-single-arg.test.js index 9f2b6a1f174..72a6114b8a3 100644 --- a/test/version/version-single-arg.test.js +++ b/test/version/version-single-arg.test.js @@ -5,19 +5,25 @@ const pkgJSON = require('../../packages/webpack-cli/package.json'); describe('single version flag', () => { it('outputs versions with command syntax', () => { - const { stdout, stderr } = run(__dirname, ['version'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['version'], false); + + expect(exitCode).toBe(0); expect(stdout).toContain(pkgJSON.version); expect(stderr).toHaveLength(0); }); it('outputs versions with dashed syntax', () => { - const { stdout, stderr } = run(__dirname, ['--version'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['--version'], false); + + expect(exitCode).toBe(0); expect(stdout).toContain(pkgJSON.version); expect(stderr).toHaveLength(0); }); it('outputs versions with alias syntax', () => { - const { stdout, stderr } = run(__dirname, ['-v'], false); + const { stdout, stderr, exitCode } = run(__dirname, ['-v'], false); + + expect(exitCode).toBe(0); expect(stdout).toContain(pkgJSON.version); expect(stderr).toHaveLength(0); }); diff --git a/test/watch/watch-flag.test.js b/test/watch/watch-flag.test.js index 362c01c3615..e326fed48d8 100644 --- a/test/watch/watch-flag.test.js +++ b/test/watch/watch-flag.test.js @@ -1,18 +1,19 @@ 'use strict'; +const stripAnsi = require('strip-ansi'); const { runAndGetWatchProc, isWebpack5 } = require('../utils/test-utils'); const { writeFileSync } = require('fs'); const { resolve } = require('path'); const wordsInStatsv4 = ['Hash', 'Version', 'Time', 'Built at:', 'main.js']; -const wordsInStatsv5 = ['asset', 'index.js', `compiled \u001b[1m\u001b[32msuccessfully\u001b[39m\u001b[22m`]; +const wordsInStatsv5 = ['asset', 'index.js', 'compiled successfully']; describe('--watch flag', () => { it('should recompile upon file change', (done) => { const proc = runAndGetWatchProc(__dirname, ['--watch'], false, '', true); let semaphore = 0; proc.stdout.on('data', (chunk) => { - const data = chunk.toString(); + const data = stripAnsi(chunk.toString()); if (semaphore === 0 && data.includes('watching files for updates')) { process.nextTick(() => { @@ -47,7 +48,7 @@ describe('--watch flag', () => { const proc = runAndGetWatchProc(__dirname, ['--watch'], false, '', true); let semaphore = 0; proc.stdout.on('data', (chunk) => { - const data = chunk.toString(); + const data = stripAnsi(chunk.toString()); if (semaphore === 0 && data.includes('Compilation starting')) { semaphore++; diff --git a/test/zero-config/entry-absent/zero-config.test.js b/test/zero-config/entry-absent/zero-config.test.js index 9acc630d895..b67e707fba1 100644 --- a/test/zero-config/entry-absent/zero-config.test.js +++ b/test/zero-config/entry-absent/zero-config.test.js @@ -2,9 +2,10 @@ const { run } = require('../../utils/test-utils'); describe('Zero Config tests', () => { it('runs when config and entry are both absent', () => { - const { stdout, stderr } = run(__dirname, [], false); + const { stdout, stderr, exitCode } = run(__dirname, [], false); // Entry file is absent, should log the Error from the compiler expect(stdout).toContain("Error: Can't resolve './src'"); + expect(exitCode).toBe(1); expect(stderr).toBeFalsy(); }); }); diff --git a/test/zero-config/entry-present/zero-config.test.js b/test/zero-config/entry-present/zero-config.test.js index 029c385cac3..dc551da4bcf 100644 --- a/test/zero-config/entry-present/zero-config.test.js +++ b/test/zero-config/entry-present/zero-config.test.js @@ -4,7 +4,7 @@ const { run } = require('../../utils/test-utils'); describe('Zero Config tests', () => { it('runs when no config is supplied but entry is present', () => { - const { stdout, stderr } = run(__dirname, [], false); + const { stdout, stderr, exitCode } = run(__dirname, [], false); // Should be able to find the entry file expect(stdout).toContain('./src/index.js'); // Should output at the default output dir and filename @@ -12,5 +12,6 @@ describe('Zero Config tests', () => { // check that the output file exists expect(fs.existsSync(path.join(__dirname, '/dist/main.js'))).toBeTruthy(); expect(stderr).toBeFalsy(); + expect(exitCode).toBe(0); }); }); diff --git a/tsconfig.json b/tsconfig.json index 6090b21c41a..011dd7ff9b7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -28,7 +28,6 @@ { "path": "packages/migrate" }, { "path": "packages/serve" }, { "path": "packages/utils" }, - // { "path": "packages/webpack-cli" }, { "path": "packages/webpack-scaffold" } ] } diff --git a/yarn.lock b/yarn.lock index 7568463a40f..5334012e590 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,7 +14,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.1.tgz#d7386a689aa0ddf06255005b4b991988021101a0" integrity sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ== -"@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.11.1", "@babel/core@^7.7.5": +"@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.12.3", "@babel/core@^7.7.5": version "7.12.3" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== @@ -70,18 +70,6 @@ browserslist "^4.12.0" semver "^5.5.0" -"@babel/helper-create-class-features-plugin@^7.12.0": - version "7.12.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.0.tgz#f3f2fc77bacc89e59ce6764daeabc1fb23e79a05" - integrity sha512-9tD1r9RK928vxvxcoNK8/7uwT7Q2DJZP1dnJmyMAJPwOF0yr8PPwqdpyw33lUpCfrJ765bOs5XNa4KSfUDWFSw== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-member-expression-to-functions" "^7.12.0" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.12.0" - "@babel/helper-split-export-declaration" "^7.10.4" - "@babel/helper-create-class-features-plugin@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" @@ -112,11 +100,11 @@ lodash "^4.17.19" "@babel/helper-explode-assignable-expression@^7.10.4": - version "7.11.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz#2d8e3470252cc17aba917ede7803d4a7a276a41b" - integrity sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ== + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" + integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.1" "@babel/helper-function-name@^7.10.4": version "7.10.4" @@ -141,13 +129,6 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-member-expression-to-functions@^7.12.0": - version "7.12.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.0.tgz#48f605fa801764f3e5b2e301e49d35fe1820c4f3" - integrity sha512-I0d/bgzgzgLsJMk7UZ0TN2KV3OGjC/t/9Saz8PKb9jrcEAXhgjGysOgp4PDKydIKjUv/gj2St4ae+ov8l+T9Xg== - dependencies: - "@babel/types" "^7.12.0" - "@babel/helper-member-expression-to-functions@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz#fba0f2fcff3fba00e6ecb664bb5e6e26e2d6165c" @@ -205,16 +186,6 @@ "@babel/helper-wrap-function" "^7.10.4" "@babel/types" "^7.12.1" -"@babel/helper-replace-supers@^7.12.0": - version "7.12.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.0.tgz#98d3f3eb779752e59c7422ab387c9b444323be60" - integrity sha512-9kycFdq2c9e7PXZOr2z/ZqTFF9OzFu287iFwYS+CiDVPuoTCfY8hoTsIqNQNetQjlqoRsRyJFrMG1uhGAR4EEw== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.12.0" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.12.0" - "@babel/types" "^7.12.0" - "@babel/helper-replace-supers@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz#f15c9cc897439281891e11d5ce12562ac0cf3fa9" @@ -257,9 +228,9 @@ integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== "@babel/helper-wrap-function@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" - integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" + integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== dependencies: "@babel/helper-function-name" "^7.10.4" "@babel/template" "^7.10.4" @@ -338,7 +309,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== @@ -354,7 +325,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.12.1": +"@babel/plugin-proposal-object-rest-spread@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== @@ -371,7 +342,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.12.1": +"@babel/plugin-proposal-optional-chaining@^7.1.0", "@babel/plugin-proposal-optional-chaining@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz#cce122203fc8a32794296fc377c6dedaf4363797" integrity sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw== @@ -431,10 +402,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz#53351dd7ae01995e567d04ce42af1a6e0ba846a6" - integrity sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ== +"@babel/plugin-syntax-flow@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.1.tgz#a77670d9abe6d63e8acadf4c31bb1eb5a506bbdd" + integrity sha512-1lBLLmtxrwpm4VKmtVFselI/P3pX+G63fAtUUt6b2Nzgao77KNDwyuRt90Mj2/9pKobtt68FdvjfqohZjg/FCA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -494,17 +465,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.12.1": +"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-typescript@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz#2f55e770d3501e83af217d782cb7517d7bb34d25" - integrity sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ== +"@babel/plugin-syntax-typescript@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz#460ba9d77077653803c3dd2e673f76d66b4029e5" + integrity sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -589,13 +560,13 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-flow-strip-types@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz#c497957f09e86e3df7296271e9eb642876bf7788" - integrity sha512-XTadyuqNst88UWBTdLjM+wEY7BFnY2sYtPyAidfC7M/QaZnSuIZpMvLxqGT7phAcnGyWh/XQFLKcGf04CnvxSQ== +"@babel/plugin-transform-flow-strip-types@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz#8430decfa7eb2aea5414ed4a3fa6e1652b7d77c4" + integrity sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-flow" "^7.10.4" + "@babel/plugin-syntax-flow" "^7.12.1" "@babel/plugin-transform-for-of@^7.12.1": version "7.12.1" @@ -635,7 +606,7 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.12.1": +"@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== @@ -751,14 +722,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typescript@^7.12.0": - version "7.12.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.0.tgz#bd6422833a56e4268d8d599238f0b3c5e170078a" - integrity sha512-gahRNAWgE76hjI3TZPVEfV7vGjOCJi5ACd4eSoAItk/ErC114i2UHnk+1ScS2dOour0p6J6kB99hNFX2vzL2Ww== +"@babel/plugin-transform-typescript@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4" + integrity sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.0" + "@babel/helper-create-class-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-typescript" "^7.10.4" + "@babel/plugin-syntax-typescript" "^7.12.1" "@babel/plugin-transform-unicode-escapes@^7.12.1": version "7.12.1" @@ -775,7 +746,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/preset-env@^7.1.6", "@babel/preset-env@^7.11.0": +"@babel/preset-env@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz#9c7e5ca82a19efc865384bb4989148d2ee5d7ac2" integrity sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg== @@ -848,12 +819,12 @@ semver "^5.5.0" "@babel/preset-flow@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.10.4.tgz#e0d9c72f8cb02d1633f6a5b7b16763aa2edf659f" - integrity sha512-XI6l1CptQCOBv+ZKYwynyswhtOKwpZZp5n0LG1QKCo8erRhqjoQV6nvx61Eg30JHpysWQSBwA2AWRU3pBbSY5g== + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.12.1.tgz#1a81d376c5a9549e75352a3888f8c273455ae940" + integrity sha512-UAoyMdioAhM6H99qPoKvpHMzxmNVXno8GYU/7vZmGaHk6/KqfDYL1W0NxszVbJ2EP271b7e6Ox+Vk2A9QsB3Sw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-transform-flow-strip-types" "^7.10.4" + "@babel/plugin-transform-flow-strip-types" "^7.12.1" "@babel/preset-modules@^0.1.3": version "0.1.4" @@ -867,17 +838,17 @@ esutils "^2.0.2" "@babel/preset-typescript@^7.1.0": - version "7.12.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.0.tgz#3fe6b4958ca6fb0e086dc5574a27d0ced99185e8" - integrity sha512-2XVy4sy/zkP4gqmXW0TzSh/QwOniN2Cy3srhsD0TRBlMTOmjaYnWCWA6aWopwpcwfYkEKD6jKLLjYMq15zDNWg== + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz#86480b483bb97f75036e8864fe404cc782cc311b" + integrity sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-transform-typescript" "^7.12.0" + "@babel/plugin-transform-typescript" "^7.12.1" "@babel/register@^7.0.0": - version "7.12.0" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.0.tgz#fa5fa900bd79380ff508ae963a5766172d3a9e56" - integrity sha512-2F2v0qYSAwrGyK9mZ8lIoUluHRzLTgkJ2oRXlLV9GVe/ze/sTFBiOocLRMSJYDB2lLiABlVC+pZHlZ8qihO1Xg== + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.1.tgz#cdb087bdfc4f7241c03231f22e15d211acf21438" + integrity sha512-XWcmseMIncOjoydKZnWvWi0/5CUCD+ZYKhRwgYlWOrA8fGZ/FjuLRpqtIhLOVD/fvR1b9DQHtZPn68VvhpYf+Q== dependencies: find-cache-dir "^2.0.0" lodash "^4.17.19" @@ -886,9 +857,9 @@ source-map-support "^0.5.16" "@babel/runtime@^7.11.2", "@babel/runtime@^7.8.4": - version "7.12.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.0.tgz#98bd7666186969c04be893d747cf4a6c6c8fa6b0" - integrity sha512-lS4QLXQ2Vbw2ubfQjeQcn+BZgZ5+ROHW9f+DWjEp5Y+NHYmkRGKqHSJ1tuhbUauKu2nhZNTBIvsIQ8dXfY5Gjw== + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740" + integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA== dependencies: regenerator-runtime "^0.13.4" @@ -901,7 +872,7 @@ "@babel/parser" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.0", "@babel/traverse@^7.12.1": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.1.tgz#941395e0c5cc86d5d3e75caa095d3924526f0c1e" integrity sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw== @@ -916,7 +887,7 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.0", "@babel/types@^7.12.1", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.1.tgz#e109d9ab99a8de735be287ee3d6a9947a190c4ae" integrity sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA== @@ -1076,6 +1047,22 @@ resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-11.0.0.tgz#719cf05fcc1abb6533610a2e0f5dd1e61eac14fe" integrity sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ== +"@eslint/eslintrc@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.1.tgz#f72069c330461a06684d119384435e12a5d76e3c" + integrity sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@evocateur/libnpmaccess@^3.1.2": version "3.1.2" resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" @@ -1166,173 +1153,214 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb" - integrity sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw== +"@jest/console@^26.6.1": + version "26.6.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.1.tgz#6a19eaac4aa8687b4db9130495817c65aec3d34e" + integrity sha512-cjqcXepwC5M+VeIhwT6Xpi/tT4AiNzlIx8SMJ9IihduHnsSrnWNvTBfKIpmqOOCNOPqtbBx6w2JqfoLOJguo8g== + dependencies: + "@jest/types" "^26.6.1" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.1" + jest-util "^26.6.1" + slash "^3.0.0" + +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-message-util "^25.5.0" - jest-util "^25.5.0" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" slash "^3.0.0" -"@jest/core@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4" - integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA== +"@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== dependencies: - "@jest/console" "^25.5.0" - "@jest/reporters" "^25.5.1" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" ansi-escapes "^4.2.1" - chalk "^3.0.0" + chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" - jest-changed-files "^25.5.0" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-resolve-dependencies "^25.5.4" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - jest-watcher "^25.5.0" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" micromatch "^4.0.2" p-each-series "^2.1.0" - realpath-native "^2.0.0" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37" - integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA== +"@jest/create-cache-key-function@^26.5.0": + version "26.5.0" + resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-26.5.0.tgz#1d07947adc51ea17766d9f0ccf5a8d6ea94c47dc" + integrity sha512-DJ+pEBUIqarrbv1W/C39f9YH0rJ4wsXZ/VC6JafJPlHW2HOucKceeaqTOQj9MEDQZjySxMLkOq5mfXZXNZcmWw== + +"@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== dependencies: - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" -"@jest/fake-timers@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185" - integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ== +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== dependencies: - "@jest/types" "^25.5.0" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - lolex "^5.0.0" + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" -"@jest/globals@^25.5.2": - version "25.5.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88" - integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA== +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== dependencies: - "@jest/environment" "^25.5.0" - "@jest/types" "^25.5.0" - expect "^25.5.0" + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" -"@jest/reporters@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b" - integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw== +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - chalk "^3.0.0" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.2" graceful-fs "^4.2.4" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.0" + istanbul-lib-instrument "^4.0.3" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^25.5.1" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-worker "^25.5.0" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" slash "^3.0.0" source-map "^0.6.0" - string-length "^3.1.0" + string-length "^4.0.1" terminal-link "^2.0.0" - v8-to-istanbul "^4.1.3" + v8-to-istanbul "^7.0.0" optionalDependencies: - node-notifier "^6.0.0" + node-notifier "^8.0.0" -"@jest/source-map@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b" - integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ== +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== dependencies: callsites "^3.0.0" graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.5.0.tgz#139a043230cdeffe9ba2d8341b27f2efc77ce87c" - integrity sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A== +"@jest/test-result@^26.6.1": + version "26.6.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.1.tgz#d75698d8a06aa663e8936663778c831512330cc1" + integrity sha512-wqAgIerIN2gSdT2A8WeA5+AFh9XQBqYGf8etK143yng3qYd0mF0ie2W5PVmgnjw4VDU6ammI9NdXrKgNhreawg== + dependencies: + "@jest/console" "^26.6.1" + "@jest/types" "^26.6.1" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== dependencies: - "@jest/console" "^25.5.0" - "@jest/types" "^25.5.0" + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737" - integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA== +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== dependencies: - "@jest/test-result" "^25.5.0" + "@jest/test-result" "^26.6.2" graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" -"@jest/transform@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3" - integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg== +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^25.5.0" + "@jest/types" "^26.6.2" babel-plugin-istanbul "^6.0.0" - chalk "^3.0.0" + chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-regex-util "^25.2.6" - jest-util "^25.5.0" + jest-haste-map "^26.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" micromatch "^4.0.2" pirates "^4.0.1" - realpath-native "^2.0.0" slash "^3.0.0" source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/types@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" - integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== +"@jest/types@^26.6.1": + version "26.6.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.1.tgz#2638890e8031c0bc8b4681e0357ed986e2f866c5" + integrity sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" "@types/yargs" "^15.0.0" - chalk "^3.0.0" + chalk "^4.0.0" "@lerna/add@3.21.0": version "3.21.0" @@ -2082,9 +2110,9 @@ "@octokit/types" "^2.0.1" "@octokit/plugin-request-log@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e" - integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw== + version "1.0.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.2.tgz#394d59ec734cd2f122431fbaf05099861ece3c44" + integrity sha512-oTJSNAmBqyDR41uSMunLQKMX0jmEXbwD1fpz8FG27lScV3RhtGfBa1/BBLym+PxcC16IBlF7KH9vP1BUYxA+Eg== "@octokit/plugin-rest-endpoint-methods@2.4.0": version "2.4.0" @@ -2169,10 +2197,10 @@ dependencies: any-observable "^0.3.0" -"@sindresorhus/is@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-2.1.1.tgz#ceff6a28a5b4867c2dd4a1ba513de278ccbe8bb1" - integrity sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg== +"@sindresorhus/is@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.0.tgz#2ff674e9611b45b528896d820d3d7a812de2f0e4" + integrity sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ== "@sinonjs/commons@^1", "@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.8.1": version "1.8.1" @@ -2210,14 +2238,14 @@ resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== -"@szmarczak/http-timer@^4.0.0": +"@szmarczak/http-timer@^4.0.5": version "4.0.5" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152" integrity sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ== dependencies: defer-to-connect "^2.0.0" -"@types/babel__core@^7.1.7": +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.10" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.10.tgz#ca58fc195dd9734e77e57c6f2df565623636ab40" integrity sha512-x8OM8XzITIMyiwl5Vmo2B1cR1S1Ipkyv4mdlbJjMa1lmuKvKY9FrBbEANIaMlnWn5Rf7uO+rC/VgYabNkE17Hw== @@ -2243,7 +2271,7 @@ "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.15.tgz#db9e4238931eb69ef8aab0ad6523d4d4caa39d03" integrity sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A== @@ -2260,7 +2288,7 @@ "@types/node" "*" "@types/responselike" "*" -"@types/cross-spawn@^6.0.1", "@types/cross-spawn@^6.0.2": +"@types/cross-spawn@^6.0.2": version "6.0.2" resolved "https://registry.yarnpkg.com/@types/cross-spawn/-/cross-spawn-6.0.2.tgz#168309de311cd30a2b8ae720de6475c2fbf33ac7" integrity sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw== @@ -2278,9 +2306,9 @@ integrity sha512-mIenTfsIe586/yzsyfql69KRnA75S8SVXQbTLpDejRrjH0QSJcpu3AUOi/Vjnt9IOsXKxPhJfGpQUNMueIU1fQ== "@types/ejs@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.0.4.tgz#8851fcdedb96e410fbb24f83b8be6763ef9afa77" - integrity sha512-ZxnwyBGO4KX/82AsFHTX82eMw0PsoBcIngEat+zx0y+3yxoNDJucAihg9nAcrc+g4Cwiv/4WcWsX4oiy0ySrRQ== + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.0.5.tgz#95a3a1c3d9603eba80fe67ff56da1ba275ef2eda" + integrity sha512-k4ef69sS4sIqAPW9GoBnN+URAON2LeL1H0duQvL4RgdEBna19/WattYSA1qYqvbVEDRTSWzOw56tCLhC/m/IOw== "@types/eslint-scope@^3.7.0": version "3.7.0" @@ -2321,19 +2349,19 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/got@9.6.9": - version "9.6.9" - resolved "https://registry.yarnpkg.com/@types/got/-/got-9.6.9.tgz#b3192188b96c871b9c67dc80d1b0336441432a38" - integrity sha512-w+ZE+Ovp6fM+1sHwJB7RN3f3pTJHZkyABuULqbtknqezQyWadFEp5BzOXaZzRqAw2md6/d3ybxQJt+BNgpvzOg== +"@types/got@^9.6.11": + version "9.6.11" + resolved "https://registry.yarnpkg.com/@types/got/-/got-9.6.11.tgz#482b402cc5ee459481aeeadb08142ebb1a9afb26" + integrity sha512-dr3IiDNg5TDesGyuwTrN77E1Cd7DCdmCFtEfSGqr83jMMtcwhf/SGPbN2goY4JUWQfvxwY56+e5tjfi+oXeSdA== dependencies: "@types/node" "*" "@types/tough-cookie" "*" form-data "^2.5.0" "@types/graceful-fs@^4.1.2": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" - integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ== + version "4.1.4" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" + integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== dependencies: "@types/node" "*" @@ -2342,7 +2370,7 @@ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A== -"@types/inquirer@*": +"@types/inquirer@*", "@types/inquirer@^7.3.1": version "7.3.1" resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-7.3.1.tgz#1f231224e7df11ccfaf4cf9acbcc3b935fea292d" integrity sha512-osD38QVIfcdgsPCT0V3lD7eH0OFurX71Jft18bZrsVQWVRt6TuxRzlr0GJLrxoHZR2V5ph7/qP8se/dcnI7o0g== @@ -2350,14 +2378,6 @@ "@types/through" "*" rxjs "^6.4.0" -"@types/inquirer@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-6.5.0.tgz#b83b0bf30b88b8be7246d40e51d32fe9d10e09be" - integrity sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw== - dependencies: - "@types/through" "*" - rxjs "^6.4.0" - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" @@ -2370,28 +2390,27 @@ dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== +"@types/istanbul-reports@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== dependencies: - "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/jest@^25.1.4": - version "25.2.3" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.3.tgz#33d27e4c4716caae4eced355097a47ad363fdcaf" - integrity sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw== +"@types/jest@26.x", "@types/jest@^26.0.15": + version "26.0.15" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.15.tgz#12e02c0372ad0548e07b9f4e19132b834cb1effe" + integrity sha512-s2VMReFXRg9XXxV+CW9e5Nz8fH2K1aEhwgjUqPPbQd7g95T0laAcvLv032EhFHIa5GHsZ8W7iJEQVaJq6k3Gog== dependencies: - jest-diff "^25.2.1" - pretty-format "^25.2.1" + jest-diff "^26.0.0" + pretty-format "^26.0.0" "@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.6": version "7.0.6" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== -"@types/keyv@*", "@types/keyv@^3.1.1": +"@types/keyv@*": version "3.1.1" resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" integrity sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw== @@ -2436,22 +2455,10 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= -"@types/mkdirp@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-1.0.1.tgz#0930b948914a78587de35458b86c907b6e98bbf6" - integrity sha512-HkGSK7CGAXncr8Qn/0VqNtExEE+PHMWb+qlR1faHMao7ng6P3tAaoWWBMdva0gL5h4zprjIO89GJOLXsMcDm1Q== - dependencies: - "@types/node" "*" - -"@types/node@*", "@types/node@>= 8": - version "14.11.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.8.tgz#fe2012f2355e4ce08bca44aeb3abbb21cf88d33f" - integrity sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw== - -"@types/node@13.9.8": - version "13.9.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.8.tgz#09976420fc80a7a00bf40680c63815ed8c7616f4" - integrity sha512-1WgO8hsyHynlx7nhP1kr0OFzsgKz5XDQL+Lfc3b1Q3qIln/n8cKD4m09NJ0+P1Rq7Zgnc7N0+SsMnoD1rEb0kA== +"@types/node@*", "@types/node@>= 8", "@types/node@^14.14.6": + version "14.14.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.6.tgz#146d3da57b3c636cc0d1769396ce1cfa8991147f" + integrity sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -2463,27 +2470,22 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/prettier@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.0.tgz#a2502fb7ce9b6626fdbfc2e2a496f472de1bdd05" - integrity sha512-gDE8JJEygpay7IjA/u3JiIURvwZW08f0cZSZLAzFoX/ZmeqvS0Sqv+97aKuHpNsalAMMhwPe+iAS6fQbfmbt7A== - -"@types/prettier@^1.19.0": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" - integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== +"@types/prettier@^2.0.0", "@types/prettier@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.5.tgz#b6ab3bba29e16b821d84e09ecfaded462b816b00" + integrity sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ== -"@types/responselike@*": +"@types/responselike@*", "@types/responselike@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== dependencies: "@types/node" "*" -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== +"@types/stack-utils@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" + integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== "@types/text-table@*": version "0.2.1" @@ -2516,9 +2518,9 @@ integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^15.0.0": - version "15.0.8" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.8.tgz#7644904cad7427eb704331ea9bf1ee5499b82e23" - integrity sha512-b0BYzFUzBpOhPjpl1wtAHU994jBeKF4TKVlT7ssFv44T617XNcPdRoG4AzHLVshLzlrF7i3lTelH7UbuNYV58Q== + version "15.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.9.tgz#524cd7998fe810cdb02f26101b699cccd156ff19" + integrity sha512-HmU8SeIRhZCWcnRskCs36Q1Q00KBV6Cqh/ora8WN1+22dY07AZdn6Gel8QZ3t26XYPImtcL8WV/eqjhVmMEw4g== dependencies: "@types/yargs-parser" "*" @@ -2528,9 +2530,9 @@ integrity sha512-ACDlMVhoLIA3VQPFKtJWlr3evUE3DaEbVxi1ukivBRNB1havMW+vo2J0+hNURF19yiqs7iu+yUHLG25bCi2xcw== "@types/yeoman-environment@*": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@types/yeoman-environment/-/yeoman-environment-2.10.1.tgz#fc979808dfec9cc712b3553ceeb147747688bcc2" - integrity sha512-kQsGzveMwoP/MnipjggDT77ozoq592bDLastlGX8FT/8mwpJ1I6C9y4duk8KxxaO0JNTOGy9rC/ghd7BWG6YmQ== + version "2.10.2" + resolved "https://registry.yarnpkg.com/@types/yeoman-environment/-/yeoman-environment-2.10.2.tgz#008b4f7a350ff8fb2be7ad7dda2580ead048ee76" + integrity sha512-Vz0qYnsUkTdH15nYo1OKax6wODQvPk6OKnbr3ATWRFizMTn6FhtoInuOIxVELK9swdqhAOF1goSdWhid0HmJkg== dependencies: "@types/diff" "*" "@types/inquirer" "*" @@ -2540,7 +2542,7 @@ chalk "^4.1.0" rxjs ">=6.4.0" -"@types/yeoman-generator@*", "@types/yeoman-generator@^4.11.2": +"@types/yeoman-generator@*", "@types/yeoman-generator@^4.11.3": version "4.11.3" resolved "https://registry.yarnpkg.com/@types/yeoman-generator/-/yeoman-generator-4.11.3.tgz#3b4c0040cf0c28237dd9f535a15c620d3f68c5f4" integrity sha512-bZRBRahUEs10YhPC4zTKwX5h1mfoFT4Qvav+z0WyT37SgKK9IgIozn8/k6IF9h9PNkxpAhFcER5llwdzCyFZnw== @@ -2552,7 +2554,7 @@ "@types/yeoman-environment" "*" rxjs ">=6.4.0" -"@types/yeoman-test@^2.0.3": +"@types/yeoman-test@^2.0.5": version "2.0.5" resolved "https://registry.yarnpkg.com/@types/yeoman-test/-/yeoman-test-2.0.5.tgz#91131a779237b599e477de555b607a2e850b4c71" integrity sha512-BYJFfJ8o341YnOOkzm0Qw3v3C8t/3WSMXTYUepSa7IIBG+PFU14/v+X90llzaNBYjpvDCjhj16H7GY2R874IiQ== @@ -2774,7 +2776,7 @@ JSONStream@^1.0.4, JSONStream@^1.2.1, JSONStream@^1.3.4, JSONStream@^1.3.5: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^2.0.0: +abab@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== @@ -2792,40 +2794,30 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn-globals@^4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" + acorn "^7.1.1" + acorn-walk "^7.1.1" acorn-jsx@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== -acorn-walk@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^6.0.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -acorn@^7.1.0, acorn@^7.1.1: +acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.3: +acorn@^8.0.4: version "8.0.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.0.4.tgz#7a3ae4191466a6984eee0fe3407a4f3aa9db8354" integrity sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ== @@ -2869,7 +2861,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.5: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2976,6 +2968,13 @@ app-root-path@~3.0.0: resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad" integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw== +append-transform@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" + integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== + dependencies: + default-require-extensions "^3.0.0" + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -2986,6 +2985,11 @@ aproba@^2.0.0: resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -3031,11 +3035,6 @@ array-differ@^3.0.0: resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -3110,10 +3109,12 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -ast-types@0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" - integrity sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA== +ast-types@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" + integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== + dependencies: + tslib "^2.0.1" astral-regex@^1.0.0: version "1.0.0" @@ -3190,17 +3191,17 @@ babel-core@^7.0.0-bridge.0: resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== -babel-jest@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853" - integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ== +babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== dependencies: - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" "@types/babel__core" "^7.1.7" babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^25.5.0" - chalk "^3.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" graceful-fs "^4.2.4" slash "^3.0.0" @@ -3222,19 +3223,20 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^4.0.0" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677" - integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g== +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-preset-current-node-syntax@^0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz#826f1f8e7245ad534714ba001f84f7e906c3b615" - integrity sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w== +babel-preset-current-node-syntax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz#cf5feef29551253471cfa82fc8e0f5063df07a77" + integrity sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -3247,14 +3249,15 @@ babel-preset-current-node-syntax@^0.1.2: "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49" - integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw== +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== dependencies: - babel-plugin-jest-hoist "^25.5.0" - babel-preset-current-node-syntax "^0.1.2" + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: version "1.0.0" @@ -3387,14 +3390,7 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - -browserslist@^4.12.0, browserslist@^4.14.3, browserslist@^4.8.5: +browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.8.5: version "4.14.5" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.5.tgz#1c751461a102ddc60e40993639b709be7f2c4015" integrity sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA== @@ -3494,13 +3490,10 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -cacheable-lookup@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz#87be64a18b925234875e10a9bb1ebca4adce6b38" - integrity sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg== - dependencies: - "@types/keyv" "^3.1.1" - keyv "^4.0.0" +cacheable-lookup@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz#049fdc59dffdd4fc285e8f4f82936591bd59fec3" + integrity sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w== cacheable-request@^7.0.1: version "7.0.1" @@ -3515,6 +3508,16 @@ cacheable-request@^7.0.1: normalize-url "^4.1.0" responselike "^2.0.0" +caching-transform@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" + integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== + dependencies: + hasha "^5.0.0" + make-dir "^3.0.0" + package-hash "^4.0.0" + write-file-atomic "^3.0.0" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -3585,10 +3588,15 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + caniuse-lite@^1.0.30001135: - version "1.0.30001148" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001148.tgz#dc97c7ed918ab33bf8706ddd5e387287e015d637" - integrity sha512-E66qcd0KMKZHNJQt9hiLZGE3J4zuTqE1OnU53miEVtylFbwOEmeA5OsRu90noZful+XGSQOni1aT2tiqu/9yYw== + version "1.0.30001153" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001153.tgz#9a0942fe777cd7178fb084693b79415ff747ecd9" + integrity sha512-qv14w7kWwm2IW7DBvAKWlCqGTmV2XxNtSejJBVplwRjhkohHuhRUpeSlPjtu9erru0+A12zCDUiSmvx/AcqVRA== capture-exit@^2.0.0: version "2.0.0" @@ -3626,7 +3634,7 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3635,13 +3643,10 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4 escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== chardet@^0.7.0: version "0.7.0" @@ -3689,6 +3694,11 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -3751,15 +3761,6 @@ cli-width@^3.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -3915,10 +3916,10 @@ commander@^2.18.0, commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc" - integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA== +commander@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.0.tgz#b990bfb8ac030aedc6d11bc04d1488ffef56db75" + integrity sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q== commitlint-config-cz@^0.13.2: version "0.13.2" @@ -4207,7 +4208,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -4216,7 +4217,7 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.4.1: +cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== @@ -4226,7 +4227,7 @@ cssom@~0.3.6: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^2.0.0: +cssstyle@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== @@ -4281,14 +4282,14 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" date-fns@^1.27.2: version "1.30.1" @@ -4321,7 +4322,7 @@ debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== @@ -4346,17 +4347,22 @@ decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decimal.js@^10.2.0: + version "10.2.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -decompress-response@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-5.0.0.tgz#7849396e80e3d1eba8cb2f75ef4930f76461cb0f" - integrity sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw== +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: - mimic-response "^2.0.0" + mimic-response "^3.1.0" dedent@^0.7.0: version "0.7.0" @@ -4380,7 +4386,7 @@ deep-extend@^0.6.0, deep-extend@~0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= @@ -4398,6 +4404,13 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" +default-require-extensions@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" + integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== + dependencies: + strip-bom "^4.0.0" + defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -4527,10 +4540,15 @@ dezalgo@^1.0.0: asap "^2.0.0" wrappy "1" -diff-sequences@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" - integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== +diff-sequences@^26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.5.0.tgz#ef766cf09d43ed40406611f11c6d8d9dd8b2fefd" + integrity sha512-ZXx86srb/iYy6jG71k++wBN9P9J05UNQ5hQHQd9MtMPvcqXPx/vKU69jfHV637D00Q2gSgPk2D+jSx3l1lDW/Q== + +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== diff@^3.5.0: version "3.5.0" @@ -4591,12 +4609,12 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== dependencies: - webidl-conversions "^4.0.2" + webidl-conversions "^5.0.0" dot-prop@^4.2.0: version "4.2.1" @@ -4680,15 +4698,20 @@ ejs@^3.0.1: jake "^10.6.1" electron-to-chromium@^1.3.571: - version "1.3.579" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.579.tgz#58bf17499de6edf697e1442017d8569bce0d301a" - integrity sha512-9HaGm4UDxCtcmIqWWdv79pGgpRZWTqr+zg6kxp0MelSHfe1PNjrI8HXy1HgTSy4p0iQETGt8/ElqKFLW008BSA== + version "1.3.584" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.584.tgz#506cf7ba5895aafa8241876ab028654b61fd9ceb" + integrity sha512-NB3DzrTzJFhWkUp+nl2KtUtoFzrfGXTir2S+BU4tXGyXH9vlluPuFpE3pTKeH7+PY460tHLjKzh6K2+TWwW+Ww== elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -4718,15 +4741,15 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.2.0.tgz#3db3307a608f236f33aeea79303d32915792cbab" - integrity sha512-NZlGLl8DxmZoq0uqPPtJfsCAir68uR047+Udsh1FH4+5ydGQdMurn/A430A1BtxASVmMEuS7/XiJ5OxJ9apAzQ== +enhanced-resolve@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.3.1.tgz#3f988d0d7775bdc2d96ede321dc81f8249492f57" + integrity sha512-G1XD3MRGrGfNcf6Hg0LVZG7GIKcYkbfHa5QMxt1HDUTdYoXH0JR1xXyg+MaKLF73E9A27uWNVxvFivNRYeUB6w== dependencies: graceful-fs "^4.2.4" tapable "^2.0.0" -enquirer@^2.3.4, enquirer@^2.3.6: +enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -4774,7 +4797,7 @@ error@^7.0.2: dependencies: string-template "~0.2.1" -es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: +es-abstract@^1.17.0-next.1: version "1.17.7" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== @@ -4818,6 +4841,11 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es6-error@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -4845,7 +4873,12 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@^1.11.1: +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escodegen@^1.14.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== @@ -4857,10 +4890,10 @@ escodegen@^1.11.1: optionalDependencies: source-map "~0.6.1" -eslint-config-prettier@^6.11.0: - version "6.12.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.12.0.tgz#9eb2bccff727db1c52104f0b49e87ea46605a0d2" - integrity sha512-9jWPlFlgNwRUYVoujvWTQ1aMO8o6648r+K7qU7K5Jmkbyqav1fuEZC0COYpGBxyiAJb65Ra9hrmFx19xRGwXWw== +eslint-config-prettier@^6.15.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" + integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw== dependencies: get-stdin "^6.0.0" @@ -4891,7 +4924,7 @@ eslint-plugin-prettier@^3.1.4: dependencies: prettier-linter-helpers "^1.0.0" -eslint-scope@^5.0.0, eslint-scope@^5.1.0: +eslint-scope@^5.0.0, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -4899,41 +4932,41 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.0: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^2.0.0: +eslint-utils@^2.0.0, eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.1.0: +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint@^7.12.1: + version "7.12.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.12.1.tgz#bd9a81fa67a6cfd51656cdb88812ce49ccec5801" + integrity sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg== dependencies: "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.2.1" ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" + chalk "^4.0.0" + cross-spawn "^7.0.2" debug "^4.0.1" doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.0" + esquery "^1.2.0" esutils "^2.0.2" file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" @@ -4942,40 +4975,38 @@ eslint@^6.8.0: ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^7.0.0" is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" + levn "^0.4.1" + lodash "^4.17.19" minimatch "^3.0.4" - mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.3" + optionator "^0.9.1" progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" table "^5.2.3" text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== +espree@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" + integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== dependencies: - acorn "^7.1.1" + acorn "^7.4.0" acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" + eslint-visitor-keys "^1.3.0" esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1: +esquery@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== @@ -5049,26 +5080,10 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -execa@^4.0.0, execa@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" - integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== +execa@^4.0.0, execa@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== dependencies: cross-spawn "^7.0.0" get-stream "^5.0.0" @@ -5105,17 +5120,17 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba" - integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA== +expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== dependencies: - "@jest/types" "^25.5.0" + "@jest/types" "^26.6.2" ansi-styles "^4.0.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" express@^4.16.3, express@^4.17.1: version "4.17.1" @@ -5245,15 +5260,15 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" - integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== + version "1.9.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947" + integrity sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w== dependencies: reusify "^1.0.4" @@ -5368,6 +5383,15 @@ find-cache-dir@^2.0.0: make-dir "^2.0.0" pkg-dir "^3.0.0" +find-cache-dir@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + find-config@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-config/-/find-config-1.0.0.tgz#eafa2b9bc07fa9c90e9a0c3ef9cecf1cc800f530" @@ -5452,9 +5476,9 @@ flatted@^2.0.0: integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== flow-parser@0.*: - version "0.135.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.135.0.tgz#6fa98be0cd4d3b214cc9f121c86a070e312649ce" - integrity sha512-ev8SvmG+XU9D6WgHVezP4kY3Myr1tJvTUTEi7mbhhj+rn889K7YXdakte6oqXNLIJYJ2f5Fuw18zXTVa1NO8Kw== + version "0.137.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.137.0.tgz#8c05612ff9344648d8bcdeaa4c58d131e875d842" + integrity sha512-i3KXJZ8lhlQI0n+BoZzIeH/rv+fNvAiu1i9/s64MklBV+HuhFbycUML7367J2eng0gapLnwvYPFNaPZys8POsA== flush-write-stream@^1.0.0: version "1.1.1" @@ -5481,6 +5505,14 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -5529,6 +5561,11 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +fromentries@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.2.1.tgz#64c31665630479bc993cd800d53387920dc61b4d" + integrity sha512-Xu2Qh8yqYuDhQGOhD5iJGninErSfI9A3FrriD3tjUgV5VbJFeH8vfgZ9HnC6jWN80QDVNQK5vmxRAmEAp7Mevw== + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -5613,14 +5650,9 @@ genfun@^5.0.0: integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.1: version "2.0.5" @@ -5712,7 +5744,7 @@ gh-got@^5.0.0: got "^6.2.0" is-plain-obj "^1.1.0" -git-cz@^4.7.0: +git-cz@^4.7.1: version "4.7.1" resolved "https://registry.yarnpkg.com/git-cz/-/git-cz-4.7.1.tgz#90edaa8dba1ec8be689b22fbf8d006c44b21b31f" integrity sha512-Emb/Xz/LcL3SGxA/PD6RUrhUT6m2v0O9nWTjwCBAoE2UXxj9HkJcfphL3RkePtiTNFkVZMk0q5EUfHnO7HAfiw== @@ -5764,9 +5796,9 @@ git-up@^4.0.0: parse-url "^5.0.0" git-url-parse@^11.1.2: - version "11.3.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.3.0.tgz#1515b4574c4eb2efda7d25cc50b29ce8beaefaae" - integrity sha512-i3XNa8IKmqnUqWBcdWBjOcnyZYfN3C1WRvnKI6ouFWwsXCZEnlgbwbm55ZpJ3OJMhfEP/ryFhqW8bBhej3C5Ug== + version "11.4.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.4.0.tgz#f2bb1f2b00f05552540e95a62e31399a639a6aa6" + integrity sha512-KlIa5jvMYLjXMQXkqpFzobsyD/V2K5DRHl5OAf+6oDFPlPLxrGDVQlIdI63c4/Kt6kai4kALENSALlzTGST3GQ== dependencies: git-up "^4.0.0" @@ -5928,26 +5960,22 @@ globby@^9.2.0: pify "^4.0.1" slash "^2.0.0" -got@^10.7.0: - version "10.7.0" - resolved "https://registry.yarnpkg.com/got/-/got-10.7.0.tgz#62889dbcd6cca32cd6a154cc2d0c6895121d091f" - integrity sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg== +got@^11.8.0: + version "11.8.0" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.0.tgz#be0920c3586b07fd94add3b5b27cb28f49e6545f" + integrity sha512-k9noyoIIY9EejuhaBNLyZ31D5328LeqnyPNXJQb2XlJZcKakLqN5m6O/ikhq/0lw56kUYS54fVm+D1x57YC9oQ== dependencies: - "@sindresorhus/is" "^2.0.0" - "@szmarczak/http-timer" "^4.0.0" + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" "@types/cacheable-request" "^6.0.1" - cacheable-lookup "^2.0.0" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" cacheable-request "^7.0.1" - decompress-response "^5.0.0" - duplexer3 "^0.1.4" - get-stream "^5.0.0" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" lowercase-keys "^2.0.0" - mimic-response "^2.1.0" p-cancelable "^2.0.0" - p-event "^4.0.0" responselike "^2.0.0" - to-readable-stream "^2.0.0" - type-fest "^0.10.0" got@^6.2.0: version "6.7.1" @@ -6098,6 +6126,14 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hasha@^5.0.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" + integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== + dependencies: + is-stream "^2.0.0" + type-fest "^0.8.0" + homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -6125,14 +6161,14 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== dependencies: - whatwg-encoding "^1.0.1" + whatwg-encoding "^1.0.5" -html-entities@^1.2.1: +html-entities@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== @@ -6230,6 +6266,14 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.0-beta.5.2" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz#8b923deb90144aea65cf834b016a340fc98556f3" + integrity sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + https-proxy-agent@^2.2.3: version "2.2.4" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" @@ -6250,7 +6294,7 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -husky@^4.2.5: +husky@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.0.tgz#0b2ec1d66424e9219d359e26a51c58ec5278f0de" integrity sha512-tTMeLCLqSBqnflBZnlVDhpaIMucSGaYyX6855jM4AguGeWCeSzNdb1mfyWduTZ3pe3SJVvVWGL0jO1iKZVPfTA== @@ -6429,7 +6473,7 @@ inquirer@^6.2.0, inquirer@^6.3.1: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^7.0.0, inquirer@^7.1.0: +inquirer@^7.1.0, inquirer@^7.3.3: version "7.3.3" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== @@ -6461,16 +6505,11 @@ interpret@^1.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -interpret@^2.0.0: +interpret@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -6544,6 +6583,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-core-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.0.0.tgz#58531b70aed1db7c0e8d4eb1a0a2d1ddd64bd12d" + integrity sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -6724,6 +6770,11 @@ is-plain-object@^5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== +is-potential-custom-element-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" + integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= + is-promise@^2.1.0: version "2.2.2" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" @@ -6809,7 +6860,7 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-wsl@^2.1.1: +is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -6853,12 +6904,19 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^3.0.0: +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== -istanbul-lib-instrument@^4.0.0: +istanbul-lib-hook@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" + integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== + dependencies: + append-transform "^2.0.0" + +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== @@ -6868,6 +6926,19 @@ istanbul-lib-instrument@^4.0.0: istanbul-lib-coverage "^3.0.0" semver "^6.3.0" +istanbul-lib-processinfo@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz#e1426514662244b2f25df728e8fd1ba35fe53b9c" + integrity sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw== + dependencies: + archy "^1.0.0" + cross-spawn "^7.0.0" + istanbul-lib-coverage "^3.0.0-alpha.1" + make-dir "^3.0.0" + p-map "^3.0.0" + rimraf "^3.0.0" + uuid "^3.3.3" + istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" @@ -6913,299 +6984,317 @@ jake@^10.6.1: filelist "^1.0.1" minimatch "^3.0.4" -jest-changed-files@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c" - integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw== +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== dependencies: - "@jest/types" "^25.5.0" - execa "^3.2.0" + "@jest/types" "^26.6.2" + execa "^4.0.0" throat "^5.0.0" -jest-cli@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d" - integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw== +jest-cli@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== dependencies: - "@jest/core" "^25.5.4" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" is-ci "^2.0.0" - jest-config "^25.5.4" - jest-util "^25.5.0" - jest-validate "^25.5.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" prompts "^2.0.1" - realpath-native "^2.0.0" - yargs "^15.3.1" + yargs "^15.4.1" -jest-config@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c" - integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg== +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^25.5.4" - "@jest/types" "^25.5.0" - babel-jest "^25.5.1" - chalk "^3.0.0" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" - jest-environment-jsdom "^25.5.0" - jest-environment-node "^25.5.0" - jest-get-type "^25.2.6" - jest-jasmine2 "^25.5.4" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" micromatch "^4.0.2" - pretty-format "^25.5.0" - realpath-native "^2.0.0" + pretty-format "^26.6.2" + +jest-diff@^26.0.0: + version "26.6.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.1.tgz#38aa194979f454619bb39bdee299fb64ede5300c" + integrity sha512-BBNy/zin2m4kG5In126O8chOBxLLS/XMTuuM2+YhgyHk87ewPzKTuTJcqj3lOWOi03NNgrl+DkMeV/exdvG9gg== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.5.0" + jest-get-type "^26.3.0" + pretty-format "^26.6.1" -jest-diff@^25.2.1, jest-diff@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" - integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== +jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== dependencies: - chalk "^3.0.0" - diff-sequences "^25.2.6" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" -jest-docblock@^25.3.0: - version "25.3.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef" - integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg== +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== dependencies: detect-newline "^3.0.0" -jest-each@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516" - integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-get-type "^25.2.6" - jest-util "^25.5.0" - pretty-format "^25.5.0" - -jest-environment-jsdom@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834" - integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - jsdom "^15.2.1" - -jest-environment-node@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1" - integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - semver "^6.3.0" +jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" + +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" + +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" -jest-get-type@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" - integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-haste-map@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943" - integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ== +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== dependencies: - "@jest/types" "^25.5.0" + "@jest/types" "^26.6.2" "@types/graceful-fs" "^4.1.2" + "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.4" - jest-serializer "^25.5.0" - jest-util "^25.5.0" - jest-worker "^25.5.0" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" micromatch "^4.0.2" sane "^4.0.3" walker "^1.0.7" - which "^2.0.2" optionalDependencies: fsevents "^2.1.2" -jest-jasmine2@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" - integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ== +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^25.5.0" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" co "^4.6.0" - expect "^25.5.0" + expect "^26.6.2" is-generator-fn "^2.0.0" - jest-each "^25.5.0" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - pretty-format "^25.5.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" throat "^5.0.0" -jest-junit@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-11.1.0.tgz#79cd53948e44d62b2b30fa23ea0d7a899d2c8d7a" - integrity sha512-c2LFOyKY7+ZxL5zSu+WHmHfsJ2wqbOpeYJ4Uu26yMhFxny2J2NQj6AVS7M+Eaxji9Q/oIDDK5tQy0DGzDp9xOw== - dependencies: - mkdirp "^1.0.4" - strip-ansi "^5.2.0" - uuid "^3.3.3" - xml "^1.0.1" - -jest-leak-detector@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb" - integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA== +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== dependencies: - jest-get-type "^25.2.6" - pretty-format "^25.5.0" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" -jest-matcher-utils@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" - integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== +jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== dependencies: - chalk "^3.0.0" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" -jest-message-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea" - integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA== +jest-message-util@^26.6.1: + version "26.6.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.1.tgz#d62c20c0fe7be10bfd6020b675abb9b5fa933ff3" + integrity sha512-cqM4HnqncIebBNdTKrBoWR/4ufHTll0pK/FWwX0YasK+TlBQEMqw3IEdynuuOTjDPFO3ONlFn37280X48beByw== dependencies: "@babel/code-frame" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/stack-utils" "^1.0.1" - chalk "^3.0.0" + "@jest/types" "^26.6.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" graceful-fs "^4.2.4" micromatch "^4.0.2" slash "^3.0.0" - stack-utils "^1.0.1" + stack-utils "^2.0.2" -jest-mock@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a" - integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA== +jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== dependencies: - "@jest/types" "^25.5.0" + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + pretty-format "^26.6.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" -jest-pnp-resolver@^1.2.1: +jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^25.2.1, jest-regex-util@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" - integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== -jest-resolve-dependencies@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" - integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw== +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== dependencies: - "@jest/types" "^25.5.0" - jest-regex-util "^25.2.6" - jest-snapshot "^25.5.1" + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" -jest-resolve@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829" - integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ== +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== dependencies: - "@jest/types" "^25.5.0" - browser-resolve "^1.11.3" - chalk "^3.0.0" + "@jest/types" "^26.6.2" + chalk "^4.0.0" graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.1" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" read-pkg-up "^7.0.1" - realpath-native "^2.0.0" - resolve "^1.17.0" + resolve "^1.18.1" slash "^3.0.0" -jest-runner@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d" - integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg== +jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-docblock "^25.3.0" - jest-haste-map "^25.5.1" - jest-jasmine2 "^25.5.4" - jest-leak-detector "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - jest-runtime "^25.5.4" - jest-util "^25.5.0" - jest-worker "^25.5.0" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" source-map-support "^0.5.6" throat "^5.0.0" -jest-runtime@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab" - integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ== - dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/globals" "^25.5.2" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" +jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" "@types/yargs" "^15.0.0" - chalk "^3.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - realpath-native "^2.0.0" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^15.3.1" + yargs "^15.4.1" jest-serializer-ansi@^1.0.3: version "1.0.3" @@ -7216,107 +7305,137 @@ jest-serializer-ansi@^1.0.3: lodash "^4.17.4" strip-ansi "^4.0.0" -jest-serializer@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b" - integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA== +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== dependencies: + "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" - integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ== +jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== dependencies: "@babel/types" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/prettier" "^1.19.0" - chalk "^3.0.0" - expect "^25.5.0" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.6.2" graceful-fs "^4.2.4" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - make-dir "^3.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" natural-compare "^1.4.0" - pretty-format "^25.5.0" - semver "^6.3.0" + pretty-format "^26.6.2" + semver "^7.3.2" -jest-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0" - integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA== +jest-util@^26.1.0, jest-util@^26.6.1: + version "26.6.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.1.tgz#4cc0d09ec57f28d12d053887eec5dc976a352e9b" + integrity sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA== dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" + "@jest/types" "^26.6.1" + "@types/node" "*" + chalk "^4.0.0" graceful-fs "^4.2.4" is-ci "^2.0.0" - make-dir "^3.0.0" + micromatch "^4.0.2" -jest-validate@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" - integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ== +jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== dependencies: - "@jest/types" "^25.5.0" - camelcase "^5.3.1" - chalk "^3.0.0" - jest-get-type "^25.2.6" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== + dependencies: + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" leven "^3.1.0" - pretty-format "^25.5.0" + pretty-format "^26.6.2" -jest-watch-typeahead@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.5.0.tgz#903dba6112f22daae7e90b0a271853f7ff182008" - integrity sha512-4r36w9vU8+rdg48hj0Z7TvcSqVP6Ao8dk04grlHQNgduyCB0SqrI0xWIl85ZhXrzYvxQ0N5H+rRLAejkQzEHeQ== +jest-watch-typeahead@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.1.tgz#45221b86bb6710b7e97baaa1640ae24a07785e63" + integrity sha512-ITVnHhj3Jd/QkqQcTqZfRgjfyRhDFM/auzgVo2RKvSwi18YMvh0WvXDJFoFED6c7jd/5jxtu4kSOb9PTu2cPVg== dependencies: - ansi-escapes "^4.2.1" - chalk "^3.0.0" - jest-regex-util "^25.2.1" - jest-watcher "^25.2.4" + ansi-escapes "^4.3.1" + chalk "^4.0.0" + jest-regex-util "^26.0.0" + jest-watcher "^26.3.0" slash "^3.0.0" - string-length "^3.1.0" + string-length "^4.0.1" strip-ansi "^6.0.0" -jest-watcher@^25.2.4, jest-watcher@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456" - integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q== +jest-watcher@^26.3.0: + version "26.6.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.1.tgz#debfa34e9c5c3e735593403794fe53d2955bfabc" + integrity sha512-0LBIPPncNi9CaLKK15bnxyd2E8OMl4kJg0PTiNOI+MXztXw1zVdtX/x9Pr6pXaQYps+eS/ts43O4+HByZ7yJSw== dependencies: - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" + "@jest/test-result" "^26.6.1" + "@jest/types" "^26.6.1" + "@types/node" "*" ansi-escapes "^4.2.1" - chalk "^3.0.0" - jest-util "^25.5.0" - string-length "^3.1.0" + chalk "^4.0.0" + jest-util "^26.6.1" + string-length "^4.0.1" -jest-worker@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" - integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== +jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== dependencies: + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" + +jest-worker@^26.6.1: + version "26.6.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.1.tgz#c2ae8cde6802cc14056043f997469ec170d9c32a" + integrity sha512-R5IE3qSGz+QynJx8y+ICEkdI2OJ3RJjRQVEyCcFAd3yVhQSEtquziPO29Mlzgn07LOVE8u8jhJ1FqcwegiXWOw== + dependencies: + "@types/node" "*" merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^26.5.0: - version "26.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.5.0.tgz#87deee86dbbc5f98d9919e0dadf2c40e3152fa30" - integrity sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug== +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^7.0.0" -jest@^25.2.3: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" - integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ== +jest@^26.6.1: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" + integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== dependencies: - "@jest/core" "^25.5.4" + "@jest/core" "^26.6.3" import-local "^3.0.2" - jest-cli "^25.5.4" + jest-cli "^26.6.3" js-tokens@^4.0.0: version "4.0.0" @@ -7336,60 +7455,61 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jscodeshift@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.7.1.tgz#0236ad475d6f0770ca998a0160925d62b57d2507" - integrity sha512-YMkZSyoc8zg5woZL23cmWlnFLPH/mHilonGA7Qbzs7H6M4v4PH0Qsn4jeDyw+CHhVoAnm9UxQyB0Yw1OT+mktA== +jscodeshift@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.11.0.tgz#4f95039408f3f06b0e39bb4d53bc3139f5330e2f" + integrity sha512-SdRK2C7jjs4k/kT2mwtO07KJN9RnjxtKn03d9JVj6c3j9WwaLcFYsICYDnLAzY0hp+wG2nxl+Cm2jWLiNVYb8g== dependencies: "@babel/core" "^7.1.6" "@babel/parser" "^7.1.6" "@babel/plugin-proposal-class-properties" "^7.1.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/preset-env" "^7.1.6" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.1.0" + "@babel/plugin-proposal-optional-chaining" "^7.1.0" + "@babel/plugin-transform-modules-commonjs" "^7.1.0" "@babel/preset-flow" "^7.0.0" "@babel/preset-typescript" "^7.1.0" "@babel/register" "^7.0.0" babel-core "^7.0.0-bridge.0" colors "^1.1.2" flow-parser "0.*" - graceful-fs "^4.1.11" + graceful-fs "^4.2.4" micromatch "^3.1.10" neo-async "^2.5.0" node-dir "^0.1.17" - recast "^0.18.1" + recast "^0.20.3" temp "^0.8.1" write-file-atomic "^2.3.0" -jsdom@^15.2.1: - version "15.2.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" - integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== - dependencies: - abab "^2.0.0" - acorn "^7.1.0" - acorn-globals "^4.3.2" - array-equal "^1.0.0" - cssom "^0.4.1" - cssstyle "^2.0.0" - data-urls "^1.1.0" - domexception "^1.0.1" - escodegen "^1.11.1" - html-encoding-sniffer "^1.0.2" +jsdom@^16.4.0: + version "16.4.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" + integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== + dependencies: + abab "^2.0.3" + acorn "^7.1.1" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.2.0" + data-urls "^2.0.0" + decimal.js "^10.2.0" + domexception "^2.0.1" + escodegen "^1.14.1" + html-encoding-sniffer "^2.0.1" + is-potential-custom-element-name "^1.0.0" nwsapi "^2.2.0" - parse5 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.7" - saxes "^3.1.9" - symbol-tree "^3.2.2" + parse5 "5.1.1" + request "^2.88.2" + request-promise-native "^1.0.8" + saxes "^5.0.0" + symbol-tree "^3.2.4" tough-cookie "^3.0.1" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.1.2" - webidl-conversions "^4.0.2" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" whatwg-encoding "^1.0.5" whatwg-mimetype "^2.3.0" - whatwg-url "^7.0.0" - ws "^7.0.0" + whatwg-url "^8.0.0" + ws "^7.2.3" xml-name-validator "^3.0.0" jsesc@^2.5.1: @@ -7533,13 +7653,6 @@ lazy-cache@^2.0.1: dependencies: set-getter "^0.1.0" -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - lerna@^3.22.1: version "3.22.1" resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.22.1.tgz#82027ac3da9c627fd8bf02ccfeff806a98e65b62" @@ -7569,7 +7682,15 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -levn@^0.3.0, levn@~0.3.0: +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= @@ -7582,20 +7703,20 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -lint-staged@^10.2.11: - version "10.4.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.4.2.tgz#9fee4635c4b5ddb845746f237c6d43494ccd21c1" - integrity sha512-OLCA9K1hS+Sl179SO6kX0JtnsaKj/MZalEhUj5yAgXsb63qPI/Gfn6Ua1KuZdbfkZNEu3/n5C/obYCu70IMt9g== +lint-staged@^10.5.0: + version "10.5.1" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.1.tgz#901e915c2360072dded0e7d752a0d9a49e079daa" + integrity sha512-fTkTGFtwFIJJzn/PbUO3RXyEBHIhbfYBE7+rJyLcOXabViaO/h6OslgeK6zpeUtzkDrzkgyAYDTLAwx6JzDTHw== dependencies: chalk "^4.1.0" cli-truncate "^2.1.0" - commander "^6.0.0" + commander "^6.2.0" cosmiconfig "^7.0.0" - debug "^4.1.1" + debug "^4.2.0" dedent "^0.7.0" enquirer "^2.3.6" - execa "^4.0.3" - listr2 "^2.6.0" + execa "^4.1.0" + listr2 "^3.2.2" log-symbols "^4.0.0" micromatch "^4.0.2" normalize-path "^3.0.0" @@ -7632,10 +7753,10 @@ listr-verbose-renderer@^0.5.0: date-fns "^1.27.2" figures "^2.0.0" -listr2@^2.6.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.6.2.tgz#4912eb01e1e2dd72ec37f3895a56bf2622d6f36a" - integrity sha512-6x6pKEMs8DSIpA/tixiYY2m/GcbgMplMVmhQAaLFxEtNSKLeWTGjtmU57xvv6QCm2XcqzyNXL/cTSVf4IChCRA== +listr2@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.2.2.tgz#d20feb75015e506992b55af40722ba1af168b8f1" + integrity sha512-AajqcZEUikF2ioph6PfH3dIuxJclhr3i3kHgTOP0xeXdWQohrvJAAmqVcV43/GI987HFY/vzT73jYXoa4esDHg== dependencies: chalk "^4.1.0" cli-truncate "^2.1.0" @@ -7643,7 +7764,7 @@ listr2@^2.6.0: indent-string "^4.0.0" log-update "^4.0.0" p-map "^4.0.0" - rxjs "^6.6.2" + rxjs "^6.6.3" through "^2.3.8" listr@^0.14.3: @@ -7738,6 +7859,11 @@ lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= + lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -7828,18 +7954,11 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -loglevel@^1.6.6: +loglevel@^1.6.8: version "1.7.0" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== -lolex@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" - integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== - dependencies: - "@sinonjs/commons" "^1.7.0" - loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" @@ -7885,7 +8004,7 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0: +make-dir@^3.0.0, make-dir@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -7921,13 +8040,6 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -8003,15 +8115,6 @@ mem-fs@^1.1.0, mem-fs@^1.2.0: vinyl "^2.0.1" vinyl-file "^3.0.0" -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -8105,14 +8208,6 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@4.x, micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -8132,6 +8227,14 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + mime-db@1.44.0: version "1.44.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" @@ -8164,7 +8267,7 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -mimic-fn@^2.0.0, mimic-fn@^2.1.0: +mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== @@ -8174,10 +8277,10 @@ mimic-response@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== -mimic-response@^2.0.0, mimic-response@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" - integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== min-indent@^1.0.0: version "1.0.1" @@ -8264,12 +8367,12 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*, mkdirp@^1.0.0, mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@*, mkdirp@1.x, mkdirp@^1.0.0, mkdirp@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5: +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -8472,21 +8575,29 @@ node-modules-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -node-notifier@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" - integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== +node-notifier@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.0.tgz#a7eee2d51da6d0f7ff5094bc7108c911240c1620" + integrity sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA== dependencies: growly "^1.3.0" - is-wsl "^2.1.1" - semver "^6.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" shellwords "^0.1.1" - which "^1.3.1" + uuid "^8.3.0" + which "^2.0.2" + +node-preload@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" + integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== + dependencies: + process-on-spawn "^1.0.0" node-releases@^1.1.61: - version "1.1.61" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e" - integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g== + version "1.1.64" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.64.tgz#71b4ae988e9b1dd7c1ffce58dd9e561752dfebc5" + integrity sha512-Iec8O9166/x2HRMJyLLLWkd0sFFLrFNy+Xf+JQfSQsdBJzPcHpNl3JQ9gD4j+aJxmCa25jNsIbM4bmACtSbkSg== nopt@^4.0.1: version "4.0.3" @@ -8628,6 +8739,39 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== +nyc@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" + integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== + dependencies: + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + caching-transform "^4.0.0" + convert-source-map "^1.7.0" + decamelize "^1.2.0" + find-cache-dir "^3.2.0" + find-up "^4.1.0" + foreground-child "^2.0.0" + get-package-type "^0.1.0" + glob "^7.1.6" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-hook "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-processinfo "^2.0.2" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + make-dir "^3.0.0" + node-preload "^0.2.1" + p-map "^3.0.0" + process-on-spawn "^1.0.0" + resolve-from "^5.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + spawn-wrap "^2.0.0" + test-exclude "^6.0.0" + yargs "^15.0.2" + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -8757,7 +8901,7 @@ opn@^5.5.0: dependencies: is-wsl "^1.1.0" -optionator@^0.8.1, optionator@^0.8.3: +optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -8769,6 +8913,18 @@ optionator@^0.8.1, optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -8781,15 +8937,6 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - os-name@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" @@ -8816,38 +8963,16 @@ p-cancelable@^2.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.0.0.tgz#4a3740f5bdaf5ed5d7c3e34882c6fb5d6b266a6e" integrity sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg== -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - p-each-series@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== -p-event@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" - integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== - dependencies: - p-timeout "^3.1.0" - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - p-lazy@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-lazy/-/p-lazy-3.0.0.tgz#3d8b2aceea3e49f8e5883947838e9370f15c9e28" @@ -8952,13 +9077,6 @@ p-retry@^3.0.1: dependencies: retry "^0.12.0" -p-timeout@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== - dependencies: - p-finally "^1.0.0" - p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -8976,6 +9094,16 @@ p-waterfall@^1.0.0: dependencies: p-reduce "^1.0.0" +package-hash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" + integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== + dependencies: + graceful-fs "^4.1.15" + hasha "^5.0.0" + lodash.flattendeep "^4.4.0" + release-zalgo "^1.0.0" + paged-request@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/paged-request/-/paged-request-2.0.1.tgz#91164f042231feb68643542d2530476a518ff4de" @@ -9052,10 +9180,10 @@ parse-url@^5.0.0: parse-path "^4.0.0" protocols "^1.4.0" -parse5@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== +parse5@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" @@ -9198,7 +9326,7 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkg-dir@^4.2.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -9212,12 +9340,7 @@ please-upgrade-node@^3.2.0: dependencies: semver-compare "^1.0.0" -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== - -portfinder@^1.0.25: +portfinder@^1.0.26: version "1.0.28" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== @@ -9231,6 +9354,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -9248,7 +9376,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.0.5: +prettier@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5" integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg== @@ -9258,26 +9386,38 @@ pretty-bytes@^5.2.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.4.1.tgz#cd89f79bbcef21e3d21eb0da68ffe93f803e884b" integrity sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA== -pretty-format@^25.2.1, pretty-format@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" - integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== +pretty-format@^26.0.0, pretty-format@^26.6.1: + version "26.6.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.1.tgz#af9a2f63493a856acddeeb11ba6bcf61989660a8" + integrity sha512-MeqqsP5PYcRBbGMvwzsyBdmAJ4EFX7pWFyl7x4+dMVg5pE0ZDdBIvEH2ergvIO+Gvwv1wh64YuOY9y5LuyY/GA== dependencies: - "@jest/types" "^25.5.0" + "@jest/types" "^26.6.1" ansi-regex "^5.0.0" ansi-styles "^4.0.0" - react-is "^16.12.0" + react-is "^17.0.1" -private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== +pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process-on-spawn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" + integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== + dependencies: + fromentries "^1.2.0" + progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -9297,12 +9437,12 @@ promise-retry@^1.1.1: retry "^0.10.0" prompts@^2.0.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" - integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== dependencies: kleur "^3.0.3" - sisteransi "^1.0.4" + sisteransi "^1.0.5" promzard@^0.3.0: version "0.3.0" @@ -9416,6 +9556,11 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -9438,10 +9583,10 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -react-is@^16.12.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-is@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" + integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== read-chunk@^3.2.0: version "3.2.0" @@ -9586,20 +9731,15 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -realpath-native@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" - integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== - -recast@^0.18.1: - version "0.18.10" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.18.10.tgz#605ebbe621511eb89b6356a7e224bff66ed91478" - integrity sha512-XNvYvkfdAN9QewbrxeTOjgINkdY/odTgTS56ZNEWL9Ml0weT4T3sFtvnTuF+Gxyu46ANcRm1ntrF6F5LAJPAaQ== +recast@^0.20.3: + version "0.20.4" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.20.4.tgz#db55983eac70c46b3fff96c8e467d65ffb4a7abc" + integrity sha512-6qLIBGGRcwjrTZGIiBpJVC/NeuXpogXNyRQpqU1zWPUigCphvApoCs9KIwDYh1eDuJ6dAFlQoi/QUyE5KQ6RBQ== dependencies: - ast-types "0.13.3" + ast-types "0.14.2" esprima "~4.0.0" - private "^0.1.8" source-map "~0.6.1" + tslib "^2.0.1" rechoir@^0.6.2: version "0.6.2" @@ -9684,12 +9824,7 @@ regexp.prototype.flags@^1.2.0: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpp@^3.0.0: +regexpp@^3.0.0, regexpp@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== @@ -9718,6 +9853,13 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" +release-zalgo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" + integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= + dependencies: + es6-error "^4.0.1" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -9752,7 +9894,7 @@ request-promise-core@1.1.4: dependencies: lodash "^4.17.19" -request-promise-native@^1.0.7: +request-promise-native@^1.0.8: version "1.0.9" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== @@ -9761,7 +9903,7 @@ request-promise-native@^1.0.7: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.88.0: +request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -9792,11 +9934,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -9807,6 +9944,11 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +resolve-alpn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.0.0.tgz#745ad60b3d6aff4b4a48e01b8c0bdc70959e0e8c" + integrity sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA== + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -9863,16 +10005,12 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.9.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.9.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" + integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== dependencies: + is-core-module "^2.0.0" path-parse "^1.0.6" responselike@^2.0.0: @@ -9950,9 +10088,9 @@ run-async@^2.0.0, run-async@^2.2.0, run-async@^2.4.0: integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" - integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + version "1.1.10" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" + integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" @@ -9961,7 +10099,7 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@>=6.4.0, rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.1, rxjs@^6.6.0, rxjs@^6.6.2: +rxjs@>=6.4.0, rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.1, rxjs@^6.6.0, rxjs@^6.6.3: version "6.6.3" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== @@ -10005,12 +10143,12 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -saxes@^3.1.9: - version "3.1.11" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" - integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== +saxes@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== dependencies: - xmlchars "^2.1.1" + xmlchars "^2.2.0" schema-utils@^1.0.0: version "1.0.0" @@ -10062,21 +10200,21 @@ semver-regex@^2.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@6.x, semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.3.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2: +semver@7.3.2, semver@7.x, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== +semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -10209,9 +10347,9 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== sinon@^9.0.1: - version "9.2.0" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-9.2.0.tgz#1d333967e30023609f7347351ebc0dc964c0f3c9" - integrity sha512-eSNXz1XMcGEMHw08NJXSyTHIu6qTCOiN8x9ODACmZpNQpr0aXTBXBnI4xTzQzR+TEpOmLiKowGf9flCuKIzsbw== + version "9.2.1" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-9.2.1.tgz#64cc88beac718557055bd8caa526b34a2231be6d" + integrity sha512-naPfsamB5KEE1aiioaoqJ6MEhdUs/2vtI5w1hPAXX/UwvoPjXcwh1m5HiKx0HGgKR8lQSoFIgY5jM6KK8VrS9w== dependencies: "@sinonjs/commons" "^1.8.1" "@sinonjs/fake-timers" "^6.0.1" @@ -10221,7 +10359,7 @@ sinon@^9.0.1: nise "^4.0.4" supports-color "^7.1.0" -sisteransi@^1.0.4: +sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== @@ -10325,13 +10463,14 @@ sockjs-client@1.4.0: json3 "^3.3.2" url-parse "^1.4.3" -sockjs@0.3.19: - version "0.3.19" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" - integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== dependencies: faye-websocket "^0.10.0" - uuid "^3.0.1" + uuid "^3.4.0" + websocket-driver "0.6.5" socks-proxy-agent@^4.0.0: version "4.0.2" @@ -10400,6 +10539,18 @@ source-map@^0.7.3, source-map@~0.7.2: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +spawn-wrap@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" + integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== + dependencies: + foreground-child "^2.0.0" + is-windows "^1.0.2" + make-dir "^3.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + which "^2.0.1" + spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -10438,7 +10589,7 @@ spdy-transport@^3.0.0: readable-stream "^3.0.6" wbuf "^1.7.3" -spdy@^4.0.1: +spdy@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== @@ -10497,10 +10648,12 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -stack-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== +stack-utils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" + integrity sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg== + dependencies: + escape-string-regexp "^2.0.0" static-extend@^0.1.1: version "0.1.2" @@ -10538,13 +10691,13 @@ string-argv@0.3.1: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== -string-length@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" - integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA== +string-length@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" + integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== dependencies: - astral-regex "^1.0.0" - strip-ansi "^5.2.0" + char-regex "^1.0.2" + strip-ansi "^6.0.0" string-template@~0.2.1: version "0.2.1" @@ -10560,7 +10713,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -10587,20 +10740,20 @@ string-width@^4.1.0, string-width@^4.2.0: strip-ansi "^6.0.0" string.prototype.trimend@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + version "1.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz#6ddd9a8796bc714b489a3ae22246a208f37bfa46" + integrity sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw== dependencies: define-properties "^1.1.3" - es-abstract "^1.17.5" + es-abstract "^1.18.0-next.1" string.prototype.trimstart@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + version "1.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz#22d45da81015309cd0cdd79787e8919fc5c613e7" + integrity sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg== dependencies: define-properties "^1.1.3" - es-abstract "^1.17.5" + es-abstract "^1.18.0-next.1" string_decoder@^1.1.1: version "1.3.0" @@ -10714,7 +10867,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.0.1: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -10767,7 +10920,7 @@ symbol-observable@^1.1.0: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== -symbol-tree@^3.2.2: +symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== @@ -10835,10 +10988,11 @@ temp@^0.8.1: rimraf "~2.6.2" temp@^0.9.0: - version "0.9.1" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.1.tgz#2d666114fafa26966cd4065996d7ceedd4dd4697" - integrity sha512-WMuOgiua1xb5R56lE0eH6ivpVmg/lq2OHm4+LtT/xtEtPQ+sz6N3bBM6WZ5FvO1lO4IKIOb43qnhoc4qxP5OeA== + version "0.9.2" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.2.tgz#06728e6e4b847e3ea5579c69c44bcc3ee6a47100" + integrity sha512-KLVd6CXeUYsqmI/LBWDLg3bFkdZPg0Xr/Gn79GUuPNiISzp6v/EKUaCOrxqeH1w/wVNmrljyDRgKxhZV9JzyJA== dependencies: + mkdirp "^0.5.1" rimraf "~2.6.2" terminal-link@^2.0.0: @@ -10849,22 +11003,22 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.0.0.tgz#88f58d27d1c8244965c59540d3ccda1598fc958c" - integrity sha512-rf7l5a9xamIVX3enQeTl0MY2MNeZClo5yPX/tVPy22oY0nzu0b45h7JqyFi/bygqKWtzXMnml0u12mArhQPsBQ== +terser-webpack-plugin@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz#ec60542db2421f45735c719d2e17dabfbb2e3e42" + integrity sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ== dependencies: - jest-worker "^26.5.0" + jest-worker "^26.6.1" p-limit "^3.0.2" schema-utils "^3.0.0" serialize-javascript "^5.0.1" source-map "^0.6.1" - terser "^5.3.5" + terser "^5.3.8" -terser@^5.3.5: - version "5.3.5" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.5.tgz#9e080baa0568f96654621b20eb9effa440b1484e" - integrity sha512-Qw3CZAMmmfU824AoGKalx+riwocSI5Cs0PoGp9RdSLfmxkmJgyBxqLBP/isDNtFyhHnitikvRMZzyVgeq+U+Tg== +terser@^5.3.8: + version "5.3.8" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.8.tgz#991ae8ba21a3d990579b54aa9af11586197a75dd" + integrity sha512-zVotuHoIfnYjtlurOouTazciEfL7V38QMAOhGqpXDEg6yT13cF4+fEP9b0rrCEQTn+tT46uxgFsTZzhygk+CzQ== dependencies: commander "^2.20.0" source-map "~0.7.2" @@ -10968,11 +11122,6 @@ to-object-path@^0.3.0: dependencies: kind-of "^3.0.2" -to-readable-stream@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-2.1.0.tgz#82880316121bea662cdc226adb30addb50cb06e8" - integrity sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w== - to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -11027,6 +11176,13 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -11052,27 +11208,34 @@ tryer@^1.0.1: resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== -ts-jest@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.5.1.tgz#2913afd08f28385d54f2f4e828be4d261f4337c7" - integrity sha512-kHEUlZMK8fn8vkxDjwbHlxXRB9dHYpyzqKIGDNxbzs+Rz+ssNDSDNusEK8Fk/sDd4xE6iKoQLfFkFVaskmTJyw== +ts-jest@^26.4.3: + version "26.4.3" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.3.tgz#d153a616033e7ec8544b97ddbe2638cbe38d53db" + integrity sha512-pFDkOKFGY+nL9v5pkhm+BIFpoAuno96ff7GMnIYr/3L6slFOS365SI0fGEVYx2RKGji5M2elxhWjDMPVcOCdSw== dependencies: + "@jest/create-cache-key-function" "^26.5.0" + "@types/jest" "26.x" bs-logger "0.x" buffer-from "1.x" fast-json-stable-stringify "2.x" + jest-util "^26.1.0" json5 "2.x" lodash.memoize "4.x" make-error "1.x" - micromatch "4.x" - mkdirp "0.x" - semver "6.x" - yargs-parser "18.x" + mkdirp "1.x" + semver "7.x" + yargs-parser "20.x" tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" + integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== + tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" @@ -11092,6 +11255,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -11104,11 +11274,6 @@ type-detect@4.0.8, type-detect@^4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.10.0.tgz#7f06b2b9fbfc581068d1341ffabd0349ceafc642" - integrity sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw== - type-fest@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" @@ -11129,7 +11294,7 @@ type-fest@^0.6.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== -type-fest@^0.8.1: +type-fest@^0.8.0, type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== @@ -11165,9 +11330,9 @@ typical@^5.0.0, typical@^5.2.0: integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== uglify-js@^3.1.4: - version "3.11.2" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.11.2.tgz#9f50325544273c27b20e586def140e7726c525ea" - integrity sha512-G440NU6fewtnQftSgqRV1r2A5ChKbU1gqFCJ7I8S7MPpY/eZZfLGefaY6gUZYiWebMaO+txgiQ1ZyLDuNWJulg== + version "3.11.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.11.4.tgz#b47b7ae99d4bd1dca65b53aaa69caa0909e6fadf" + integrity sha512-FyYnoxVL1D6+jDGQpbK5jW6y/2JlVfRfEeQ67BPCUg5wfCjaKOpr2XeceE4QL+MkhxliLtf5EbrMDZgzpt2CNw== uid-number@0.0.6: version "0.0.6" @@ -11340,20 +11505,25 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.1, uuid@^3.3.2, uuid@^3.3.3: +uuid@^3.0.1, uuid@^3.3.2, uuid@^3.3.3, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== +uuid@^8.3.0: + version "8.3.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" + integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== -v8-to-istanbul@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" - integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== +v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + +v8-to-istanbul@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz#b4fe00e35649ef7785a9b7fcebcea05f37c332fc" + integrity sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" @@ -11411,20 +11581,18 @@ vinyl@^2.0.1, vinyl@^2.2.0: remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" -w3c-hr-time@^1.0.1: +w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: browser-process-hrtime "^1.0.0" -w3c-xmlserializer@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" - integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== dependencies: - domexception "^1.0.1" - webidl-conversions "^4.0.2" xml-name-validator "^3.0.0" walker@^1.0.7, walker@~1.0.5: @@ -11461,6 +11629,16 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + webpack-bundle-analyzer@^3.9.0: version "3.9.0" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c" @@ -11491,10 +11669,10 @@ webpack-dev-middleware@^3.7.2: range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@3.10.3: - version "3.10.3" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz#f35945036813e57ef582c2420ef7b470e14d3af0" - integrity sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ== +webpack-dev-server@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" @@ -11504,31 +11682,31 @@ webpack-dev-server@3.10.3: debug "^4.1.1" del "^4.1.1" express "^4.17.1" - html-entities "^1.2.1" + html-entities "^1.3.1" http-proxy-middleware "0.19.1" import-local "^2.0.0" internal-ip "^4.3.0" ip "^1.1.5" is-absolute-url "^3.0.3" killable "^1.0.1" - loglevel "^1.6.6" + loglevel "^1.6.8" opn "^5.5.0" p-retry "^3.0.1" - portfinder "^1.0.25" + portfinder "^1.0.26" schema-utils "^1.0.0" selfsigned "^1.10.7" semver "^6.3.0" serve-index "^1.9.1" - sockjs "0.3.19" + sockjs "0.3.20" sockjs-client "1.4.0" - spdy "^4.0.1" + spdy "^4.0.2" strip-ansi "^3.0.1" supports-color "^6.1.0" url "^0.11.0" webpack-dev-middleware "^3.7.2" webpack-log "^2.0.0" ws "^6.2.1" - yargs "12.0.5" + yargs "^13.3.2" webpack-log@^2.0.0: version "2.0.0" @@ -11545,18 +11723,18 @@ webpack-merge@^4.2.2: dependencies: lodash "^4.17.15" -webpack-sources@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.0.1.tgz#1467f6e692ddce91e88b8044c44347b1087bbd4f" - integrity sha512-A9oYz7ANQBK5EN19rUXbvNgfdfZf5U2gP0769OXsj9CvYkCR6OHOsd6OKyEy4H38GGxpsQPKIL83NC64QY6Xmw== +webpack-sources@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" + integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w== dependencies: source-list-map "^2.0.1" source-map "^0.6.1" -webpack@^5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.1.3.tgz#a6e4fd250ef2513f94844ae5d8f7570215a2ac49" - integrity sha512-bNBF5EOpt5a6NeCBFu0+8KJtG61cVmOb2b/a5tPNRLz3OWgDpHMbmnDkaSm3nf/UQ6ufw4PWYGVsVOAi8UfL2A== +webpack@^5.3.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.4.0.tgz#4fdc6ec8a0ff9160701fb8f2eb8d06b33ecbae0f" + integrity sha512-udpYTyqz8toTTdaOsL2QKPLeZLt2IEm9qY7yTXuFEQhKu5bk0yQD9BtAdVQksmz4jFbbWOiWmm3NHarO0zr/ng== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.45" @@ -11564,11 +11742,11 @@ webpack@^5.1.0: "@webassemblyjs/helper-module-context" "1.9.0" "@webassemblyjs/wasm-edit" "1.9.0" "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^8.0.3" - browserslist "^4.14.3" + acorn "^8.0.4" + browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.2.0" - eslint-scope "^5.1.0" + enhanced-resolve "^5.3.1" + eslint-scope "^5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.4" @@ -11579,9 +11757,16 @@ webpack@^5.1.0: pkg-dir "^4.2.0" schema-utils "^3.0.0" tapable "^2.0.0" - terser-webpack-plugin "^5.0.0" + terser-webpack-plugin "^5.0.3" watchpack "^2.0.0" - webpack-sources "^2.0.1" + webpack-sources "^2.1.1" + +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" websocket-driver@>=0.5.1: version "0.7.4" @@ -11597,14 +11782,14 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: +whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" -whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: +whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== @@ -11618,6 +11803,15 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +whatwg-url@^8.0.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" + integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^6.1.0" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -11683,14 +11877,6 @@ wordwrapjs@^4.0.0: reduce-flatten "^2.0.0" typical "^5.0.0" -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" @@ -11787,7 +11973,7 @@ ws@^6.0.0, ws@^6.2.1: dependencies: async-limiter "~1.0.0" -ws@^7.0.0: +ws@^7.2.3: version "7.3.1" resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== @@ -11797,12 +11983,7 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xml@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" - integrity sha1-eLpyAgApxbyHuKgaPPzXS0ovweU= - -xmlchars@^2.1.1: +xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== @@ -11812,7 +11993,7 @@ xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: +y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== @@ -11827,18 +12008,15 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs-parser@18.x, yargs-parser@^18.1.2, yargs-parser@^18.1.3: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yargs-parser@20.x: + version "20.2.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.3.tgz#92419ba867b858c868acf8bae9bf74af0dd0ce26" + integrity sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww== -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" @@ -11851,23 +12029,29 @@ yargs-parser@^15.0.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@12.0.5: - version "12.0.5" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== +yargs-parser@^18.1.2, yargs-parser@^18.1.3: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: - cliui "^4.0.0" + camelcase "^5.0.0" decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.0.0" + get-caller-file "^2.0.1" require-directory "^2.1.1" - require-main-filename "^1.0.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^2.0.0" + string-width "^3.0.0" which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^11.1.1" + y18n "^4.0.0" + yargs-parser "^13.1.2" yargs@^14.2.2: version "14.2.3" @@ -11886,7 +12070,7 @@ yargs@^14.2.2: y18n "^4.0.0" yargs-parser "^15.0.1" -yargs@^15.1.0, yargs@^15.3.1: +yargs@^15.0.2, yargs@^15.1.0, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -11908,7 +12092,7 @@ yeoman-assert@^3.1.1: resolved "https://registry.yarnpkg.com/yeoman-assert/-/yeoman-assert-3.1.1.tgz#9f6fa0ecba7dd007c40f579668cb5dda18c79343" integrity sha512-bCuLb/j/WzpvrJZCTdJJLFzm7KK8IYQJ3+dF9dYtNs2CUYyezFJDuULiZ2neM4eqjf45GN1KH/MzCTT3i90wUQ== -yeoman-environment@^2.10.0, yeoman-environment@^2.10.3, yeoman-environment@^2.8.1, yeoman-environment@^2.9.5: +yeoman-environment@^2.10.0, yeoman-environment@^2.10.3, yeoman-environment@^2.9.5: version "2.10.3" resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-2.10.3.tgz#9d8f42b77317414434cc0e51fb006a4bdd54688e" integrity sha512-pLIhhU9z/G+kjOXmJ2bPFm3nejfbH+f1fjYRSOteEXDBrv1EoJE/e+kuHixSXfCYfTkxjYsvRaDX+1QykLCnpQ== @@ -11933,7 +12117,7 @@ yeoman-environment@^2.10.0, yeoman-environment@^2.10.3, yeoman-environment@^2.8. untildify "^3.0.3" yeoman-generator "^4.8.2" -yeoman-generator@^4.10.0, yeoman-generator@^4.12.0, yeoman-generator@^4.7.2, yeoman-generator@^4.8.2: +yeoman-generator@^4.10.0, yeoman-generator@^4.12.0, yeoman-generator@^4.8.2: version "4.12.0" resolved "https://registry.yarnpkg.com/yeoman-generator/-/yeoman-generator-4.12.0.tgz#512e783a38b004c49265e71826a09ff7f1939f4b" integrity sha512-lozwklVQHwUXMM1o8BgxEB8F5BB7vkHW4pjAo1Zt5sJ7FOlWhd6DJ4ZxJ2OK0w+gNYkY/ocPMkUV7DTz/uqEEg==